<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">

 <title>neovatar.org</title>
 <link href="http://blog.neovatar.org/atom.xml" rel="self"/>
 <link href="http://blog.neovatar.org/"/>
 <updated>2018-05-27T09:16:35+02:00</updated>
 <id>http://blog.neovatar.org</id>
 <author>
   <name>Thomas Seliger</name>
   <email></email>
 </author>

 
 <entry>
   <title>Using gocryptfs to encrypt cloud synced files</title>
   <link href="http://blog.neovatar.org/archives/Using-gocryptfs-to-encrypt-cloud-synced-files.html"/>
   <updated>2016-01-22T00:00:00+01:00</updated>
   <id>http://blog.neovatar.org/archives/Use-gocryptfs-to-encrypt-cloud-synced-files</id>
   <content type="html">&lt;p&gt;install gkeyring
sudo adduser tom fuse
mkdir ~/Copy-gocryptfs
mkdir ~/Copy/gocryptfs
gocryptfs -init /home/tom/Copy/gocryptfs
gkeyring –set –name gocryptfs-copy
gocryptfs -q -extpass “gkeyring –name gocryptfs-copy -1” /home/tom/Copy/gocryptfs /home/tom/Copy-gocryptfs&lt;/p&gt;

</content>
 </entry>
 
 <entry>
   <title>Replace vagrant-berkshelf with berkshelf and vagrant-triggers</title>
   <link href="http://blog.neovatar.org/archives/41-Replace-vagrant-berkshelf-with-berkshelf-and-vagrant-triggers.html"/>
   <updated>2014-07-07T12:39:37+02:00</updated>
   <id>http://blog.neovatar.org/archives/Replace-vagrant-berkshelf-with-berkshelf-and-vagrant-triggers</id>
   <content type="html">&lt;p&gt;If you are doing &lt;a href=&quot;http://www.getchef.com/&quot; title=&quot;Chef&quot;&gt;Chef&lt;/a&gt; cookbook developement then you are probably using &lt;a href=&quot;http://www.vagrantup.com/&quot; title=&quot;Vagrant&quot;&gt;Vagrant&lt;/a&gt; as you local dev/test environment. And most of the time you will also use &lt;a href=&quot;http://berkshelf.com/&quot; title=&quot;Berkshelf&quot;&gt;Berkshelf&lt;/a&gt; for cookbook dependency management.

&lt;p&gt;The usual way to integrate Vagrant and Berkshelf is the &lt;a href=&quot;https://github.com/berkshelf/vagrant-berkshelf&quot; title=&quot;vagrant-berkshelf&quot;&gt;vagrant-berkshelf&lt;/a&gt; plug-in for vagrant. Basically, this is the Berkshelf functionality bundled in the form of an vagrant plug-in. If you have any experience with plugin development for vagrant you'll probably know, that development of more complex Vagrant plug-ins sucks big time: Major changes on the plugin API with every release or Vagrant not being distributed as Ruby gem anymore, making testing with multiple Vagrant versions a real pain. I really like Vagrant for local testing setups and development - it is a great tool. But to be honest, its plug-in concept has major flaws, if you plan to write complex plug-ins, which bring a few Ruby dependencies along themselves.

&lt;!--more--&gt;

&lt;p&gt;Basically the root of the problem: Vagrant brings its own Ruby gem dependencies. All plug-ins run in the same Ruby process - the Vagrant Ruby process. So in case your plug-in needs one Ruby gem in another version than Vagrant, stuff starts to break. Just have a look at the &lt;a href=&quot;https://github.com/berkshelf/vagrant-berkshelf/issues&quot; title=&quot;vagrant-berkshelf issue tracker&quot;&gt;vagrant-berkshelf issue tracker&lt;/a&gt;. The developers of Berkshelf finally got tired of maintaining vagrant-berkshelf and will &lt;a href=&quot;https://sethvargo.com/the-future-of-vagrant-berkshelf/&quot; title=&quot;vagrant-berkshelf retirement&quot;&gt;retire&lt;/a&gt; it in the future.

&lt;p&gt;Since I rely heavily on Vagrant / Berkshelf integration for a customers Chef cookbook development life cycle, used an alternative approach to integrate Berkshelf into Vagrant. &lt;h3&gt;The Approach&lt;/h3&gt;

&lt;p&gt;The approach I am using is simple: Use both tools, Vagrant and Berkshelf, avoid the complex plug-in trap and &quot;glue&quot; it all with another simple tool. You can find all of my &lt;a href=&quot;https://github.com/neovatar/vagrant-berkshelf-example&quot; title=&quot;example files on github&quot;&gt;example files on github&lt;/a&gt;. My example uses Berkshelf, Vagrant with VirtualBox and the simple but great Vagrant plug-in vagrant-triggers to glue it all together. I am also assuming that you are at least somewhat familiar with Vagrant and Berkshelf.

&lt;h3&gt;The Tools&lt;/h3&gt;

&lt;h4&gt;VirtualBox and Vagrant&lt;/h4&gt;

&lt;p&gt;My examples use Vagrant with VirtualBox as virtualization environment. Please check the &lt;a href=&quot;http://docs.vagrantup.com/v2/installation/index.html&quot; title=&quot;Vagrant documentation&quot;&gt;Vagrant&lt;/a&gt; and &lt;a href=&quot;http://www.virtualbox.org/manual/ch02.html&quot; title=&quot;VirtualBox documentation&quot;&gt;VirtualBox&lt;/a&gt; documentation for setup instructions.

&lt;h4&gt;Ruby&lt;/h4&gt;

&lt;p&gt;So, since you are doing chef cookbook developement, I assume you already have a working Ruby installation. If not, I strongly suggest you use &lt;a href=&quot;https://github.com/sstephenson/rbenv&quot; title=&quot;rbenv&quot;&gt;rbenv&lt;/a&gt; to set it up.

&lt;h4&gt;Berkshelf&lt;/h4&gt;
&lt;p&gt;The next thing you need is a working Berkshelf, which easily can be installed with:

&lt;pre class=&quot;prettyprint&quot;&gt;
gem install berkshelf --no-ri --no-rdoc
&lt;/pre&gt;

&lt;p&gt;In case you are using rbenv, make sure your shims are updated:

&lt;pre class=&quot;prettyprint&quot;&gt;
rbenv reshash
&lt;/pre&gt;

&lt;p&gt;Now check your Berkshelf version (3.1.3 on time of writing):
&lt;pre class=&quot;prettyprint&quot;&gt;
berks --version
&lt;/pre&gt;

&lt;h4&gt;Plug-in: vagrant-triggers&lt;/h4&gt;

&lt;p&gt;Our little helper is the &lt;a href=&quot;https://github.com/emyl/vagrant-triggers&quot; title=&quot;vagrant-triggers&quot;&gt;vagrant-triggers&lt;/a&gt; Vagrant plug-in. It will enable us to trigger specific code on execution of Vagrant commands. This plugin has no special gem dependencies, so it should always run without any dependency issues in the Vagrant Ruby process. Its code is also quite easy to adapt, should Vagrant change its plug-in API (...again, sigh ...).

&lt;p&gt;You can easily install it with:
&lt;pre class=&quot;prettyprint&quot;&gt;
vagrant plugin install vagrant-triggers
&lt;/pre&gt;

&lt;h3&gt;Running the Example&lt;/h3&gt;

&lt;p&gt;Have a look at the &lt;i&gt;Vagrantfile&lt;/i&gt; in the example. The following part &quot;glues&quot; Vagrant and Berkshelf together:


&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-ruby&quot; data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;ss&quot;&gt;:up&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;:provision&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;].&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;each&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;do&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;cmd&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;|&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;config&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;trigger&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;before&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;cmd&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;:stdout&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;kp&quot;&gt;true&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;do&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;info&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'Cleaning cookbook directory'&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;run&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;rm -rf &lt;/span&gt;&lt;span class=&quot;si&quot;&gt;#{&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;cookbooks_path&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;info&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'Installing cookbook dependencies with berkshelf'&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;run&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;berks vendor &lt;/span&gt;&lt;span class=&quot;si&quot;&gt;#{&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;cookbooks_path&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;


&lt;p&gt;The code simply executes the locally installed Berkshelf before vagrant &lt;i&gt;up&lt;/i&gt; and &lt;i&gt;provision&lt;/i&gt; events. Berkshelf is called with the &lt;i&gt;vendor&lt;/i&gt; command, followed by a directory, e.g.:

&lt;pre class=&quot;prettyprint&quot;&gt;
berks vendor cookbooks
&lt;/pre&gt;

&lt;p&gt;This will resolve all cookbook dependencies the Berkshelf way and install the needed cookbooks in a directory named &lt;i&gt;cookbooks&lt;/i&gt;. If you take another look at the code snippet above, you'll see that first we actually delete the cookbooks directory. Berkshelf refuses to install cookbooks into an already existing cookbook directory, so we need to delete it before vendoring to it. The &lt;i&gt;cookbooks&lt;/i&gt; directory is mounted into the Vagrant VM and used by chef-solo as cookbook location by default.

&lt;p&gt;So basically we replaced vagrant-berkshelf with a locally installed Ruby/Berkshelf (when doing cookbook development, you normally have these tools already) and vagrant-triggers (which should be much easier to maintain than a complex plug-in). This makes it easy to use the most recent Berkshelf and Vagrant versions without having to worry about vagrant-berkshelf breakage.
&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Limit Spotify upstream bandwidth with trickle</title>
   <link href="http://blog.neovatar.org/archives/38-Limit-Spotify-upstream-bandwidth-with-trickle.html"/>
   <updated>2013-09-02T17:31:24+02:00</updated>
   <id>http://blog.neovatar.org/archives/Limit-Spotify-upstream-bandwidth-with-trickle</id>
   <content type="html">&lt;p&gt;While debugging network related stuff on my router, I noticed that something in my network was using all the available DSL upstream bandwidth. The only active application at that time was Spotify and it wasn't even playing a song. After digging around in the interwebz for a time, I found quite a few reports about this behaviour. Spotify is using p2p techniques to distribute content. So, if somebody plays a song, Spotify tries to download it from another user (maybe you!) who has the song already sitting in his computers disk cache. While Spotify is saving money by using p2p, because it decreases bandwidth usage on their servers, it can lead to problems on your side. Spotify sometimes decides to use ALL of the available upstream, causing short lag spikes in games or SSH sessions. Or maybe your ISP limits traffic to a certain amount of data per month.


&lt;!--more--&gt;

&lt;p&gt;Since Spotify does not include an option to limit p2p upstream (Hey Spotify, I am a paying customer and I am pissed!) you have to help yourself and use the neat Linux tool &quot;trickle&quot; to limit the Spotify upstream maximum. &lt;p&gt;The first thing you need to do, is installing &quot;trickle&quot;. It should be somewhere in your package repository, so in Debian/Ubuntu just type:

&lt;pre&gt;
sudo apt-get install trickle
&lt;/pre&gt;

&lt;p&gt;Trickle allows you to limit downstream and upstream of a userspace application. It does so by shaping SOCK_STREAM of connections established via the socket interface. It will not work on setuid and statically linked executables.

&lt;p&gt;You can run Spotify with an upstream limit of 40KB/s (the Spotify path may differ slightly, depending on your Linux distribution):

&lt;pre class=&quot;prettyprint&quot;&gt;
trickle -s -d 0 -u 40 /usr/bin/spotify
&lt;/pre&gt;

&lt;p&gt;The &lt;em&gt;-s&lt;/em&gt; tells trickle to run in standalone mode (it also supports a daemon mode), &lt;em&gt;-d 0&lt;/em&gt; will allow unlimted downstream and &lt;em&gt;-u 40&lt;/em&gt; will enforce an upstream limit of 40KB/s.

&lt;p&gt;Everytime you launch Spotify via trickle, you can enforce your specified limits. But maybe you want to start Spotify via your desktops volume indicator or by clicking on a Spotify link in your browser. To make your limits permanent you can use a little trick: &lt;em&gt;/usr/bin/spotify&lt;/em&gt; is just a symlink to &lt;em&gt;/opt/spotify/spotify-client/spotify&lt;/em&gt;. You can remove the symlink and replace it with a little wrapper shell script.

You can use the following script to do it for you, save it and run it as root via sudo:

&lt;pre class=&quot;prettyprint&quot;&gt;
#!/bin/sh -e

# remove spotify symlink
[ -L /usr/bin/spotify ] &amp;amp;&amp;amp; rm /usr/bin/spotify

# create spotify wrapper script
cat &amp;gt;/var/tmp/spotify &amp;lt;&amp;lt; END
#!/bin/sh
exec trickle -s -d 0 -u 40 /opt/spotify/spotify-client/spotify $*
END

# move wrapper script to /usr/bin/spotify
[ -L /usr/bin/spotify ] || mv /var/tmp/spotify /usr/bin/spotify

# make wrapper script executable
chmod +x /usr/bin/spotify
&lt;/pre&gt;

Now when Spotify is started via &lt;em&gt;/usr/bin/spotify&lt;/em&gt;, trickle will be used to enforce bandwidth limits on the Spotify process. If you are interested in a detailed description on how the Spotify content distribution works and why it is using your upstream have a look at &lt;a href=&quot;http://pansentient.com/2011/04/spotify-technology-some-stats-and-how-spotify-works/&quot; title=&quot;How Spotify Works&quot;&gt;How Spotify Works&lt;/a&gt;.
&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Using EncFS with Copy Cloud File Storage</title>
   <link href="http://blog.neovatar.org/archives/37-Using-EncFS-with-Copy-Cloud-File-Storage.html"/>
   <updated>2013-03-24T14:11:42+01:00</updated>
   <id>http://blog.neovatar.org/archives/Using-EncFS-with-Copy-Cloud-File-Storage</id>
   <content type="html">&lt;p&gt;I have been trying out Barracuda Networks cloud file storage &quot;&lt;a href=&quot;http://copy.com/&quot; title=&quot;Copy Website&quot;&gt;Copy&lt;/a&gt;&quot; for the last few day. The Linux client seems stable and syncing has been reliable up to now. Although there are &lt;a href=&quot;http://www.networkworld.com/community/blog/barracuda-networks-introduces-copy-file-sharing-service&quot; title=&quot;Networkworld about Copy&quot;&gt;claims that Copy stores files encrypted&lt;/a&gt;, it is also an architectural fact that Copy needs to store your encryption keys on the server side.

&lt;!--more--&gt;

&lt;p&gt;So, if you want to store private Data, then you'll have to setup encryption yourself - Enter &lt;a href=&quot;http://www.arg0.net/encfs&quot; title=&quot;EncFS&quot;&gt;EncFS&lt;/a&gt;. &lt;p&gt;EncFS provides an encrypted filesystem in user-space and uses the &lt;a href=&quot;http://fuse.sourceforge.net/&quot; title=&quot;FUSE&quot;&gt;FUSE&lt;/a&gt; Library. The following instructions are for Ubuntu 12.04, but configuration should be similiar with other distros.

&lt;h3&gt;Installing EncFS&lt;/h3&gt;
&lt;p&gt;This is the easy part, just type:
&lt;pre&gt;
sudo apt-get install encfs
&lt;/pre&gt;

&lt;h3&gt;Install gnome-encfs&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://bitbucket.org/obensonne/gnome-encfs/&quot; title=&quot;gnome-encfs&quot;&gt;Gnome-encfs&lt;/a&gt; is a nifty helper tool that makes mounting EncFS mounts automatically at login time easy. So, download and install it:
&lt;pre&gt;
wget http://bitbucket.org/obensonne/gnome-encfs/get/tip.tar.gz
tar xvzf tip.tar.gz --wildcards --strip=1 --no-anchored 'gnome-encfs'
sudo install gnome-encfs /usr/local/bin
&lt;/pre&gt;

&lt;h3&gt;Setup an EncFS encrypted folder&lt;/h3&gt;
&lt;p&gt;I assume that your Copy cloud storage folder is &lt;em&gt;~/Copy&lt;/em&gt;. First, create a directory that will hold the encrypted file system:
&lt;pre&gt;
mkdir ~/Copy/encfs
&lt;/pre&gt;
&lt;p&gt;Now create a mountpoint to hold the decrypted File system:
&lt;pre&gt;
mkdir ~/Copy-crypted
&lt;/pre&gt;
&lt;p&gt;Now lets create the encrypted file system:
&lt;pre&gt;
encfs ~/Copy/encfs ~/Copy-crypted
&lt;/pre&gt;
&lt;p&gt;EncFS will now ask for encryption options, you can just use the preconfigured paranoia mode. Now enter the passphrase of the encrypted file system. Make sure to check whether the mount is set up correctly:
&lt;pre&gt;
mount | grep encfs
&lt;/pre&gt;
&lt;p&gt;It should give you an output similar to this:
&lt;pre&gt;
encfs on /home/foo/Copy-crypted type fuse.encfs (rw,nosuid,nodev,default_permissions,user=foo)
&lt;/pre&gt;

&lt;h3&gt;Automounting on login&lt;/h3&gt;
&lt;p&gt;Using gnome-encfs, you can store your EncFS passphrase in the Gnome password manager and mount the encrypted filesystem automatically on login. Just enter:
&lt;pre&gt;
gnome-encfs -a ~/Copy/encfs ~/Copy-crypted
&lt;/pre&gt;
&lt;p&gt;Gnome-encfs will ask for the passphrase. Just make sure you enter the correct one, because it will just ask one time. Now test if gnome-encfs is configured correctly. Unmount the crypted filesystem:
&lt;pre&gt;
fusermount -u ~/Copy-crypted
&lt;/pre&gt;
&lt;p&gt;Then execute the gnome-encfs mount procedure with:
&lt;pre&gt;
gnome-encfs -m ~/Copy-crypted
&lt;/pre&gt;
&lt;p&gt;This should give you something like this:
&lt;pre&gt;
Mounting /home/foo/Copy/encfs at /home/foo/Copy-crypted: OK
&lt;/pre&gt;
&lt;p&gt;In case you got an error, becausye you did enter a wrong passphrase, remove the entry:
&lt;pre&gt;
gnome-encfs -r ~/Copy-crypted
&lt;/pre&gt;
&lt;p&gt;Now add it again, as described above. Once you have set up gnome-encfs correctly, you should see &lt;em&gt;~/Copy-crypted&lt;/em&gt; automounted on login.

&lt;h3&gt;Unmounting on logout&lt;/h3&gt;
&lt;p&gt;To make sure, that the encrypted file system is unmounted when you log out, you have to add a session cleanup script to your display manager. The following instructions are for lightdm, the standard display manager in Ubuntu 12.04.
&lt;p&gt;Create a session cleanup script:
&lt;pre&gt;
sudoedit /etc/lightdm/session-cleanup.sh
&lt;/pre&gt;
&lt;p&gt;Put the following lines in the script:
&lt;pre&gt;
mount -t fuse.encfs | grep &quot;user=$USER&quot; | awk '{print $3}' | while read MPOINT ; do
    sudo -u $USER fusermount -u &quot;$MPOINT&quot;
done
&lt;/pre&gt;
&lt;p&gt;Make the script executable:
&lt;pre&gt;
sudo chmod +x /etc/lightdm/session-cleanup.sh
&lt;/pre&gt;
&lt;p&gt;Then, edit lightdm.conf to execute the script on logout:
&lt;pre&gt;
sudoedit /etc/lightdm/lightdm.conf
&lt;/pre&gt;
&lt;p&gt;Add the following line configuration:
&lt;pre&gt;
session-cleanup-script=/etc/lightdm/session-cleanup.sh
&lt;/pre&gt;

&lt;p&gt;Now restart your PC or restart lightdm. Your display manager will now unmount all mounted EncFS mounts when you logout.
&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>copycom2deb - Create Debian packages for the Copy client agent</title>
   <link href="http://blog.neovatar.org/archives/36-copycom2deb-Create-Debian-packages-for-the-Copy-client-agent.html"/>
   <updated>2013-03-23T21:35:14+01:00</updated>
   <id>http://blog.neovatar.org/archives/copycom2deb-Create-Debian-packages-for-the-Copy-client-agent</id>
   <content type="html">&lt;p&gt;&lt;a href=&quot;http://copy.com&quot; title=&quot;Copy cloud storage&quot;&gt;Copy&lt;/a&gt; is a new cloud storage solution similar to Dropbox. They have a better price model, allowing you to use 250GB of storage for 99$ per year. The free account starts with 5GB and you can get a few extra GB by promoting the service. You get client agents for most operating systems, including Linux.

&lt;p&gt;Barracuda only supplies Linux users with a simple tgz installer. This installer is perfectly working, but I wanted to install and update software with dpkg. So I hacked a little script to download the current version of the client agent and build a Debian package from the tgz.

&lt;p&gt;You can find the script on GitHub: &lt;a href=&quot;https://github.com/neovatar/copycom2deb&quot; title=&quot;copycom2deb&quot;&gt;https://github.com/neovatar/copycom2deb&lt;/a&gt;
&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Spotify and Linux: Backing it up with dpkg-repack</title>
   <link href="http://blog.neovatar.org/archives/35-Spotify-and-Linux-Backing-it-up-with-dpkg-repack.html"/>
   <updated>2012-03-26T18:54:54+02:00</updated>
   <id>http://blog.neovatar.org/archives/Spotify-and-Linux-Backing-it-up-with-dpkg-repack</id>
   <content type="html">&lt;p&gt;Spotify is great and it is nearly the only choice if you want a music streaming service with a native Linux client. But the client is still in a &quot;preview&quot; stage. So if Spotify releases a new version of the Linux client, it sometimes botches your spotify installation. So if you do your &quot;apt-get update &amp;amp;&amp;amp; apt-get upgrade&quot; dance, it might leave you without music (&lt;strong&gt;eeeeeeek!&lt;/strong&gt;). But fear not! There is an easy way to backup your working Spotify installation on an Ubuntu/Debian system.

&lt;!--more--&gt;

 &lt;p&gt;First, install the required tools:
&lt;code&gt;sudo apt-get install fakeroot dpkg-repack&lt;/code&gt;

&lt;p&gt;Then run the following line:
&lt;code&gt;for I in $(dpkg-query -W -f='${Package} ' spotify*); do fakeroot -u dpkg-repack $I; done&lt;/code&gt;

&lt;p&gt;This will recreate the .deb Spotify packages from the files installed on your system and place them in the current directory (just make sure you are in a directory with write access). Its easy to roll back to an old installation by installing the .deb files with &quot;dpkg -i&quot;.

&lt;p&gt;Now you just have to remember to do this, when you got a running Spotify or you could create a cron job to backup periodically.
&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Caching authenticated downloads with Varnish and VCL</title>
   <link href="http://blog.neovatar.org/archives/34-Caching-authenticated-downloads-with-Varnish-and-VCL.html"/>
   <updated>2012-01-02T20:02:00+01:00</updated>
   <id>http://blog.neovatar.org/archives/Caching-authenticated-downloads-with-Varnish-and-VCL</id>
   <content type="html">&lt;p&gt;Imagine the following scenario: You have an web application that delivers data, you have a huge number of requests per second, the data is identical for all users, but you want to limit access to authenticated users. Your back end application is slow and does not cache the created data. You also want to lighten the load on the authentication service. Fixing your back end application or your authentication service unfortunately is not an option. I wanted to solve this problem with &lt;a href=&quot;https://www.varnish-cache.org/&quot; title=&quot;Varnish cache&quot;&gt;Varnish&lt;/a&gt; and a &lt;a href=&quot;https://www.varnish-cache.org/docs/3.0/reference/vcl.html&quot; title=&quot;Varnish configuration language&quot;&gt;VCL&lt;/a&gt; only solution, so no inline C or Varnish modules are required for my approach.

&lt;!--more--&gt;

&lt;p&gt;In my example the authenticated URLs have the following basic form:
&lt;pre&gt;/protected/file.ext?auth=5283f514f51511ca3e73f76ab7e8e96&lt;/pre&gt;
It's also possible that there are other query string parameters, e.g.:
&lt;pre&gt;/protected/file.ext?id=xyz&amp;amp;auth=5283f514f51511ca3e73f76ab7e8e96&amp;amp;p=12345&lt;/pre&gt;
The important bit is the &lt;em&gt;auth&lt;/em&gt; query parameter, which contains an authentication token.

&lt;p&gt;First I define a backend in the VCL, which hosts the authentication service:
&lt;pre class=&quot;prettyprint&quot;&gt;backend auth {
  .host = &quot;auth.neovatar.org&quot;;
  .port = &quot;80&quot;;
}
&lt;/pre&gt;

&lt;p&gt;In &lt;em&gt;vcl_recv&lt;/em&gt; I need to extract the auth parameter value. I also need to create the URL used for retrieving the requested content. This is basically the original URL with the auth parameter removed:
&lt;pre class=&quot;prettyprint&quot;&gt;sub vcl_recv {
  if (req.http.host == &quot;blog.neovatar.org&quot;) {
    unset req.http.cookie;
    if (req.url ~ &quot;^/protected/&quot;) {
      if (req.restarts == 0) {

        std.log(&quot;org.req.url:&quot; + req.url);

        # get auth parameter value from query string
        set req.http.x-auth-token = regsub(req.url,
          &quot;^.*(\?|&amp;amp;)auth=([A-Fa-f0-9]*)(&amp;amp;{0,1}.*|$)&quot;,
          &quot;\2&quot;);

        # remove `auth` parameter from query string and
        # if there is no query string after removal, remove trailing `?`
        set req.http.x-orig-url = regsub(req.url,
          &quot;(\?{0,1})(&amp;amp;{0,1})auth=[A-Fa-f0-9]*(&amp;amp;.*|$)&quot;,
          &quot;\1\3&quot;);
        set req.http.x-orig-url = regsub(req.http.x-orig-url, &quot;\?$&quot;, &quot;&quot;);

        # set url to query auth backend
        set req.url = &quot;/auth.php?auth=&quot; + req.http.x-auth-token;
        set req.backend = auth;
        set req.http.host = &quot;auth.neovatar.org&quot;;
        unset req.http.cookie;
      }
    }
  }
}
&lt;/pre&gt;

&lt;p&gt;The interesting part in this VCL code are the regular expressions. This snippet extracts the value of the auth parameter
and sets the HTTP header &lt;em&gt;x-auth-token&lt;/em&gt;:
&lt;pre class=&quot;prettyprint&quot;&gt;        set req.http.x-auth-token = regsub(req.url,
          &quot;^.*(\?|&amp;amp;)auth=([A-Fa-f0-9]*)(&amp;amp;{0,1}.*|$)&quot;,
          &quot;\2&quot;);
&lt;/pre&gt;

&lt;p&gt;Similar to this the following expression stores the URL that points to the actual content in the HTTP header &lt;em&gt;x-orig-url&lt;/em&gt; for later use:
&lt;pre class=&quot;prettyprint&quot;&gt;        set req.http.x-orig-url = regsub(req.url,
          &quot;(\?{0,1})(&amp;amp;{0,1})auth=[A-Fa-f0-9]*(&amp;amp;.*|$)&quot;,
          &quot;\1\3&quot;);
&lt;/pre&gt;

&lt;p&gt;Then I set the actual request URL to the authentication URL and append the auth token:
&lt;pre class=&quot;prettyprint&quot;&gt;        set req.url = &quot;/auth.php?auth=&quot; + req.http.x-auth-token;
        set req.backend = auth;
        set req.http.host = &quot;auth.neovatar.org&quot;;
&lt;/pre&gt;

&lt;p&gt;Now varnish will do a backend request to the authentication service URL instead of the original requested URL. The service will return a HTTP 200 response if the auth token is valid and a HTTP 403 when the token is invalid. On positive authentication, I want to deliver the requested content and not the response of the authentication service. So I have to check for this in &lt;em&gt;vcl_deliver&lt;/em&gt;:
&lt;pre class=&quot;prettyprint&quot;&gt;sub vcl_deliver {
  if (req.backend == auth) {
    if (resp.status != 200) {
    }
    else {
      set req.url = req.http.x-orig-url;
      set req.backend = default;
      set req.http.host = &quot;blog.neovatar.org&quot;;
      return(restart);
    }
  }
  if (obj.hits &amp;gt; 0) {
    set resp.http.X-Cache = &quot;HIT:&quot; + obj.hits;
  }
  else {
    set resp.http.X-Cache = &quot;MISS&quot;;
  }

  unset resp.http.server;
  unset   resp.http.Age;
  unset   resp.http.X-Varnish;
  unset   resp.http.Via;

  return( deliver );
}
&lt;/pre&gt;

&lt;p&gt;If the auth request returned an HTTP 200 status, then I know the authentication was successfull. So I set the URL to the content URL which I saved to &lt;em&gt;http.x-orig-url&lt;/em&gt; earlier. Following this, I call &lt;em&gt;restart&lt;/em&gt;, thus telling the varnish thread to start processing the request again from the beginning:
&lt;pre class=&quot;prettyprint&quot;&gt;if (req.backend == auth) {
    if (resp.status != 200) {
    }
    else {
      set req.url = req.http.x-orig-url;
      set req.backend = default;
      set req.http.host = &quot;blog.neovatar.org&quot;;
      return(restart);
    }
  }
&lt;/pre&gt;

&lt;p&gt;Now, take a look again at my &lt;em&gt;vcl_recv&lt;/em&gt; code snippet, there is one important bit I did not mention earlier:
&lt;pre class=&quot;prettyprint&quot;&gt;    if (req.url ~ &quot;^/protected/&quot;) {
      if (req.restarts == 0) {
        set req.backend = auth;
&lt;/pre&gt;

&lt;p&gt;I check for the number of restarts, so the authentication request is only done on first pass. On subsequent passes the URL is fetched and since I changed the URL to the actual content URL, it is requested and delivered. And with the right code in &lt;em&gt;vcl_fetch&lt;/em&gt; I can cache requests to content and to the auth service:
&lt;pre class=&quot;prettyprint&quot;&gt;sub vcl_fetch {
  if (req.http.host == &quot;blog.neovatar.org&quot;) {
    # remove cookies, so that blog is cacheable
    unset beresp.http.set-cookie;

    # enforce 1m cache time
    if (beresp.ttl &amp;lt;= 5m ) {
      set beresp.ttl = 5m;
    }
  }
  else if (req.http.host == &quot;auth.neovatar.org&quot;) {
    set beresp.ttl = 1m;
  }
}
&lt;/pre&gt;

&lt;p&gt;This will cache content for 5 minutes and authentication queries for 1 minute.
&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Tearing when moving windows in Ubuntu 10.10</title>
   <link href="http://blog.neovatar.org/archives/33-Tearing-when-moving-windows-in-Ubuntu-10.10.html"/>
   <updated>2011-05-03T20:15:44+02:00</updated>
   <id>http://blog.neovatar.org/archives/Tearing-when-moving-windows-in-Ubuntu-10.10</id>
   <content type="html">&lt;p&gt;I just stumbled over the ability to set vsync in compiz settings manager. I had an increased screen tearing with my new Eizo 24” monitor for a while now and switching vsync on in compiz removes it! Yay!&lt;/p&gt;

&lt;p&gt;Open compiz settings manager, then click “&lt;em&gt;General Options&lt;/em&gt;”, go to the tab “&lt;em&gt;Display Settings&lt;/em&gt;” and check “&lt;em&gt;Sync with VBlank&lt;/em&gt;”. Move around a window and cheer &lt;img src=&quot;http://blog.neovatar.org/templates/default/img/emoticons/wink.png&quot; alt=&quot;;-)&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt; .&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Terroristen, überall!</title>
   <link href="http://blog.neovatar.org/archives/32-Terroristen,-ueberall!.html"/>
   <updated>2010-12-31T20:23:58+01:00</updated>
   <id>http://blog.neovatar.org/archives/Terroristen,-ueberall!</id>
   <content type="html">&lt;p&gt;Terroristen habens auch nicht leicht. Das sieht man sehr schön im Video &lt;a href=&quot;http://www.youtube.com/watch?v=XXn11XBPOCE&quot; title=&quot;Extra 3 Terror-Test&quot;&gt;“Extra 3 macht den Terror-Test”&lt;/a&gt;. Und Stumpfi lässt sich erklären, &lt;a href=&quot;http://www.youtube.com/watch?v=mSaNMDLrd04&quot; title=&quot;Stumpfi erkennt Terroristen&quot;&gt;woran man einen Terrorist erkennt&lt;/a&gt;. Das haben sich die Polizisten in Berlin dann wohl auch zu Herzen genommen.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>A firefox add-on for pinboard.in</title>
   <link href="http://blog.neovatar.org/archives/31-A-firefox-add-on-for-pinboard.in.html"/>
   <updated>2010-12-29T16:41:15+01:00</updated>
   <id>http://blog.neovatar.org/archives/A-firefox-add-on-for-pinboard.in</id>
   <content type="html">&lt;p&gt;Since Yahoo did put &lt;a href=&quot;http://del.icio.us/&quot; title=&quot;delicious&quot;&gt;delicious&lt;/a&gt; into “sunset mode” (marketing speech for: “we will close it down”), I was searching for an alternative. Many people did switch to &lt;a href=&quot;http://pinboard.in/&quot; title=&quot;pinboard.in&quot;&gt;pinboard.in&lt;/a&gt;, so I gave this service a shot. And I am really liking this “antisocial bookmarking service”. If you are in search for an alternative to delicious, give pinboard.in a try. It is worth the one time signup fee!&lt;/p&gt;

&lt;p&gt;The only thing I was missing is a little firefox integration for quick bookmarking within firefox. So I wrote my own little firefox add on. Its called &lt;em&gt;simplepinboardbutton&lt;/em&gt; and its hosted on the &lt;a href=&quot;http://simplepinboardbutton.neovatar.org/&quot; title=&quot;simplepinboardbutton&quot;&gt;simplepinboardbutton site&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Die Schwabenmafia</title>
   <link href="http://blog.neovatar.org/archives/30-Die-Schwabenmafia.html"/>
   <updated>2010-10-11T19:06:09+02:00</updated>
   <id>http://blog.neovatar.org/archives/Die-Schwabenmafia</id>
   <content type="html">&lt;p&gt;Einen interessanten Artikel über Hintergründe zu S21 gibt es von &lt;a href=&quot;http://www.spiegelfechter.com/wordpress/4247/stuttgart-21-der-bahnhof-den-niemand-will-und-niemand-braucht&quot; title=&quot;Stuttgart 21 – der Bahnhof, den niemand will und niemand braucht &quot;&gt;Spiegelfechter&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Not my president!</title>
   <link href="http://blog.neovatar.org/archives/29-Not-my-president!.html"/>
   <updated>2010-06-02T20:39:20+02:00</updated>
   <id>http://blog.neovatar.org/archives/Not-my-president!</id>
   <content type="html">&lt;p&gt;&lt;img src=&quot;http://blog.neovatar.org/uploads/images/stopp_notmypresident.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>openssl 1.0</title>
   <link href="http://blog.neovatar.org/archives/28-openssl-1.0.html"/>
   <updated>2010-03-30T07:37:46+02:00</updated>
   <id>http://blog.neovatar.org/archives/openssl-1.0</id>
   <content type="html">&lt;p&gt;Yay, openssl 1.0 has been released!&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.openssl.org/source/&quot; title=&quot;openssl 1.0&quot;&gt;openssl 1.0&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Optimize Firefox startup times</title>
   <link href="http://blog.neovatar.org/archives/27-Optimize-Firefox-startup-times.html"/>
   <updated>2010-01-10T11:28:10+01:00</updated>
   <id>http://blog.neovatar.org/archives/Optimize-Firefox-startup-times</id>
   <content type="html">&lt;p&gt;I did some research on my prolonged firefox startup time and alas I found something cool:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://mozillalinks.org/wp/2009/07/vacuum-your-firefox-databases-for-better-performance/&quot; title=&quot;Vacuum your Firefox databases&quot;&gt;Vacuum your Firefox databases&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Basically you have to do the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Install sqlite3: &lt;pre&gt;sudo apt-get install sqlite3&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;Vacuum your Firefox DBs: &lt;pre&gt;find ~/.mozilla/firefox -name &quot;*.sqlite&quot; -exec sqlite3 \{\} VACUUM \;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;Reindex your Firefox DBs: &lt;pre&gt;find ~/.mozilla/firefox -name &quot;*.sqlite&quot; -exec sqlite3 \{\} REINDEX \;&lt;/pre&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>Bug in hsolinkcontrol...</title>
   <link href="http://blog.neovatar.org/archives/26-Bug-in-hsolinkcontrol....html"/>
   <updated>2009-10-09T22:07:19+02:00</updated>
   <id>http://blog.neovatar.org/archives/Bug-in-hsolinkcontrol...</id>
   <content type="html">&lt;p&gt;I stumbled over a bug in hsolinkcontrol, which
also seems to be reported in this &lt;a href=&quot;http://www.pharscape.org/forum/index.php/topic,777.0.html&quot; title=&quot;pharscape forum post&quot;&gt;pharscape forum post&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Bug description:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt; Ubuntu 9.04, with NO(!) resolvconf package installed&lt;/li&gt;
&lt;li&gt; hsolink 1.0.118 package&lt;/li&gt;
&lt;li&gt; HSOconnect 1.2.18 beta&lt;/li&gt;
&lt;li&gt; /etc/resolv.conf is saved to /etc/resolv.conf.hsoc%s.tmp&lt;/li&gt;
&lt;li&gt; the permissions of the created /etc/resolv.conf.hsoc%s.tmp file are
660 and root:root&lt;/li&gt;
&lt;li&gt; when the saved /etc/resolv.conf.hsoc%s.tmp is moved back to /etc/resolv.conf, this file also gets the 660 permissions&lt;/li&gt;
&lt;li&gt; after that, only root can read /etc/resolv.conf&lt;/li&gt;
&lt;li&gt; the effect is, that DNS resolution does not work except when you are root&lt;/li&gt;
&lt;li&gt; installing resolvconf will work around this issue&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This can probably be easily fixed, by making sure that the
/etc/resolv.conf.hsoc%s.tmp has the same permissions as the original
/etc/resolv.conf file. Since installing the resolvconf package makes the bug go away, I did not fix the source, but just sent a notice to the author.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>GNU statt CDU</title>
   <link href="http://blog.neovatar.org/archives/25-GNU-statt-CDU.html"/>
   <updated>2009-09-25T09:07:11+02:00</updated>
   <id>http://blog.neovatar.org/archives/GNU-statt-CDU</id>
   <content type="html">&lt;p&gt;&lt;img src=&quot;http://blog.neovatar.org/uploads/n100000033514886_9796.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>PHP...</title>
   <link href="http://blog.neovatar.org/archives/24-PHP....html"/>
   <updated>2009-09-16T19:50:41+02:00</updated>
   <id>http://blog.neovatar.org/archives/PHP...</id>
   <content type="html">&lt;p&gt;… just sucks.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://bugs.php.net/bug.php?id=39062&quot; title=&quot;PHP sucks&quot;&gt;PHP function crc32 misbehaves on 64 Bit OS&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To quote the braindead php developer:
“Its not broken! Nanananananaaaaaa!” &lt;em&gt;plugs his ears&lt;/em&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Polizisten prügeln auf Demonstranten ein ...</title>
   <link href="http://blog.neovatar.org/archives/23-Polizisten-pruegeln-auf-Demonstranten-ein-....html"/>
   <updated>2009-09-13T11:18:01+02:00</updated>
   <id>http://blog.neovatar.org/archives/Polizisten-pruegeln-auf-Demonstranten-ein-...</id>
   <content type="html">&lt;p&gt;… und zwar nicht in irgendeinem Staat auf der anderen Seite der Welt, nein hier in der Bundesrepublik, bei der Demonstration “Freiheit statt Angst”.&lt;/p&gt;

&lt;p&gt;Ein Demonstrant auf einem Fahhrad möchte sich die Namen der Polizisten notieren, die vorher einen Mitdemonstranten rüde einkassiert haben. Na so ein Querulant! Das ist doch sicher ein Terrorist! Nix wie runter mit dem vom Fahrrad und erstmal provisorisch ein paar aufs M0wl! Ein anderer Demonstrant bekommt da auch noch gleich eins auf die Nase. Was macht der auch da, mitten im Polizeieinsatz…&lt;/p&gt;

&lt;p&gt;Leute, bitte verbreitet diese Videos über den Vorfall, wo Ihr nur könnt. Wir müssen diesen Vorfall solange in der Öffentlichkeit halten, bis die Polizisten und Ihre Vorgesetzten zur Verantwortung gezogen worden sind.&lt;/p&gt;

&lt;p&gt;Hat noch jemand Fragen, wie das in Zukunft sein wird, wenn die Bundeswehr im Inneren eingesetzt werden soll?&lt;/p&gt;

&lt;p&gt;Infos über den Vorfall:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://blog.fefe.de/?ts=b452c21a&quot; title=&quot;Bericht über die prügelden Polizisten bei Fefe&quot;&gt;Bericht über die prügelden Polizisten bei Fefe&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.taz.de/1/politik/schwerpunkt-ueberwachung/artikel/1/kein-vertrauen-in-die-herrschende-politik/&quot; title=&quot;Artikel bei der TAZ&quot;&gt;Artikel bei der TAZ&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;[update]&lt;/strong&gt;&lt;a href=&quot;http://www.piksa.info/blog/2009/09/13/aufruf-nach-polizeigewalt-bei-der-fsa09-informiert-die-medien/&quot; title=&quot;Peter Piksas Blog mit aktualisierten Informationen zum Vorfall&quot;&gt;Peter Piksas Blog mit aktualisierten Informationen zum Vorfall&lt;/a&gt;&lt;strong&gt;[/update]&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Das Video gibts hier:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://ccc.mirrors.as250.net/20090912-polizeieinsatz.mp4&quot; title=&quot;Video in HD beim CCC&quot;&gt;Video in HD beim CCC&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://cache.basedrive.org/fsa09/&quot; title=&quot;Video in verschiedenen Größen bei basdrive.org&quot;&gt;Video in verschiedenen Größen bei basdrive.org&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Using Windows is a sin...</title>
   <link href="http://blog.neovatar.org/archives/22-Using-Windows-is-a-sin....html"/>
   <updated>2009-08-26T10:04:56+02:00</updated>
   <id>http://blog.neovatar.org/archives/Using-Windows-is-a-sin...</id>
   <content type="html">&lt;p&gt;Check it out at: &lt;a href=&quot;http://windows7sins.org/&quot; title=&quot;windows 7 sins&quot;&gt;windows 7 sins&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Franziska Heine vs. Ursula von der Leyen </title>
   <link href="http://blog.neovatar.org/archives/21-Franziska-Heine-vs.-Ursula-von-der-Leyen.html"/>
   <updated>2009-06-25T20:45:19+02:00</updated>
   <id>http://blog.neovatar.org/archives/Franziska-Heine-vs.-Ursula-von-der-Leyen</id>
   <content type="html">&lt;p&gt;In der Zeit sind nun Franziska Heine (die Initiatorin der Petition gegen das Internetzensurgesetz) und Ministerin von der Leyen im Streitgespräch aufeinander getroffen.&lt;/p&gt;

&lt;p&gt;Gute Analysen des Interviews findet Ihr hier:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://blog.windfluechter.net/index.php?/archives/575-Heine-vs.-v.d.Leyen.html&quot;&gt;Blog von Ingo Jürgensmann - Heine vs. v.D.Leyen&lt;/a&gt;
&lt;a href=&quot;http://netzpolitik.org/2009/zensursula-und-die-zeit-wahrheit-oder-pflicht/&quot;&gt;netzpolitik.org - Wahrheit oder Pflicht?&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Auch DU bist Terrorist!</title>
   <link href="http://blog.neovatar.org/archives/19-Auch-DU-bist-Terrorist!.html"/>
   <updated>2009-05-21T11:07:47+02:00</updated>
   <id>http://blog.neovatar.org/archives/Auch-DU-bist-Terrorist!</id>
   <content type="html">&lt;p&gt;Auch DU bist Terrorrist!&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.dubistterrorist.de/&quot; title=&quot;Du bist Terrorist!&quot;&gt;http://www.dubistterrorist.de/&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Geburtstag Tom mit bring-a-fleisch-und-salat</title>
   <link href="http://blog.neovatar.org/archives/18-Geburtstag-Tom-mit-bring-a-fleisch-und-salat.html"/>
   <updated>2009-04-26T18:08:52+02:00</updated>
   <id>http://blog.neovatar.org/archives/Geburtstag-Tom-mit-bring-a-fleisch-und-salat</id>
   <content type="html">&lt;p&gt;Hallo liebe Freunde,&lt;/p&gt;

&lt;p&gt;hier die aktuelle Liste vom bring-a-fleisch-und-salat:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Thorsten, Angie:&lt;/b&gt; Tiramisu&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Günther, Kathrin:&lt;/b&gt; Quarknachspeise&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Geli, Ebi:&lt;/b&gt; Vanillemouse&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Christian, Ramona:&lt;/b&gt; 2 Kästen August, 1 Kasten Bier, Grillbriketts&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Markus, Christina:&lt;/b&gt; 1 Kasten Bier, 1 Kasten nicht-alkoholisches, Nudelsalat&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Andre:&lt;/b&gt; Salat&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Claudio:&lt;/b&gt; Selbstgemachte Knoblauchmajo von Omi&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Kathi, Sven:&lt;/b&gt;Kräuterbaguettes, Salat&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Wolfram:&lt;/b&gt;Salat&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Andrea, Tom:&lt;/b&gt;Kartoffelsalat, Paprikareis, Baguette&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;Noch benötigt:&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Saucen&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Falls jemand nochwas vermisst, bitte Bescheid geben!&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Bundesverfassungsgericht vs. electronic voting machines</title>
   <link href="http://blog.neovatar.org/archives/16-Bundesverfassungsgericht-vs.-electronic-voting-machines.html"/>
   <updated>2009-03-03T10:36:25+01:00</updated>
   <id>http://blog.neovatar.org/archives/Bundesverfassungsgericht-vs.-electronic-voting-machines</id>
   <content type="html">&lt;p&gt;Yay! The Bundesverfassungsgericht stops usage of electronic voting machines.&lt;/p&gt;

&lt;p&gt;Read more in this &lt;a href=&quot;http://www.sueddeutsche.de/,tt2m1/computer/643/460278/text/&quot; title=&quot;sueddeutsche.de article&quot;&gt;sueddeutsche.de arcticle&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Microsoft lobbying at its finest</title>
   <link href="http://blog.neovatar.org/archives/15-Microsoft-lobbying-at-its-finest.html"/>
   <updated>2009-02-28T13:06:53+01:00</updated>
   <id>http://blog.neovatar.org/archives/Microsoft-lobbying-at-its-finest</id>
   <content type="html">&lt;p&gt;Another example of Microsoft lobbying. They try to hijack an EU open source paper.&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;Read the &lt;a href=&quot;http://www.linuxjournal.com/content/how-hijack-eu-open-source-strategy-paper&quot;&gt;article at linux journal&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Read the &lt;a href=&quot;http://wikileaks.org/wiki/European_Commission_OSS_Strategy_Draft%2C_Mar_2009&quot;&gt;lobbyfied document at wikileaks&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;p&gt;“Gee, Mr. Ballmer what do you want to do tonight?” “The same thing we do every night. Try to take over the world!”&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Yay! A new job!</title>
   <link href="http://blog.neovatar.org/archives/13-Yay!-A-new-job!.html"/>
   <updated>2009-02-16T22:19:00+01:00</updated>
   <id>http://blog.neovatar.org/archives/Yay!-A-new-job!</id>
   <content type="html">&lt;p&gt;Changed my job from a security consultant to a linux system architect. So no more traveling around and working for TLC (three letter customers). I am now working for the online division of a big german newspaper.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>BND threatens to sue wikileaks</title>
   <link href="http://blog.neovatar.org/archives/12-BND-threatens-to-sue-wikileaks.html"/>
   <updated>2008-12-20T21:37:44+01:00</updated>
   <id>http://blog.neovatar.org/archives/BND-threatens-to-sue-wikileaks</id>
   <content type="html">&lt;p&gt;BND threatens to sue wikileaks:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://wikileaks.org/wiki/German_spy_chief_threatens_Wikileaks&quot; title=&quot;http://wikileaks.org/wiki/German_spy_chief_threatens_Wikileaks&quot;&gt;http://wikileaks.org/wiki/German_spy_chief_threatens_Wikileaks&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Shellscript for BND IPs</title>
   <link href="http://blog.neovatar.org/archives/11-Shellscript-for-BND-IPs.html"/>
   <updated>2008-12-03T15:02:29+01:00</updated>
   <id>http://blog.neovatar.org/archives/Shellscript-for-BND-IPs</id>
   <content type="html">&lt;p&gt;IP address ranges have been leaked to &lt;a href=&quot;https://secure.wikileaks.org/wiki/T-Systems_BND_network_assignments,_13_Nov_2008&quot;&gt;wikileaks&lt;/a&gt;. I wrote a quick ‘n dirty shell script to parse my webserver access log files for these IP ranges.&lt;/p&gt;

&lt;!-- more --&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c&quot;&gt;#!/bin/bash&lt;/span&gt;

CountIpRanges &lt;span class=&quot;o&quot;&gt;()&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;cat &lt;span class=&quot;sh&quot;&gt;&amp;lt;&amp;lt;EOF
193.159.228.32 - 193.159.228.39
193.159.238.168 - 193.159.238.175
194.25.184.16 - 194.25.184.23
194.25.42.232 - 194.25.42.239
195.145.128.56 - 195.145.128.63
195.145.163.64 - 195.145.163.127
195.145.182.96 - 195.145.182.111
195.145.31.252 - 195.145.31.255
195.145.57.176 - 195.145.57.191
195.243.157.184 - 195.243.157.191
195.243.248.224 - 195.243.248.231
212.185.184.224 - 212.185.184.231
212.185.191.128 - 212.185.191.135
217.7.155.168 - 217.7.155.175
217.89.74.208 - 217.89.74.223
62.153.59.192 - 62.153.59.223
62.153.65.32 - 62.153.65.39
62.153.80.208 - 62.153.80.215
62.153.87.0 - 62.153.87.15
62.154.211.152 - 62.154.211.159
62.154.226.64 - 62.154.226.127
62.156.187.232 - 62.156.187.239
62.157.136.64 - 62.157.136.95
62.157.144.0 - 62.157.144.63
62.157.193.128 - 62.157.193.223
62.157.194.32 - 62.157.194.39
62.159.19.208 - 62.159.19.215
62.159.104.160 - 62.159.104.175
62.159.209.144 - 62.159.209.151
62.159.209.152 - 62.159.209.159
62.159.21.152 - 62.159.21.159
62.159.60.144 - 62.159.60.151
62.159.63.72 - 62.159.63.79
62.225.139.248 - 62.225.139.255
62.225.74.128 - 62.225.74.135
80.146.198.88 - 80.146.198.95
62.159.104.160 - 62.159.104.175
EOF
&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; | sed &lt;span class=&quot;s1&quot;&gt;'s/ //g'&lt;/span&gt; | awk -F- &lt;span class=&quot;s1&quot;&gt;'{ split($1,IPS,&quot;.&quot;) ;  split($2,IPE,&quot;.&quot;) ; \
for (I=IPS[4];I&amp;amp;lt;IPE[4];I++) { print IPS[1]&quot;.&quot;IPS[2]&quot;.&quot;IPS[3]&quot;.&quot;I } }'&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;

CountIpRanges | grep -H -f - &lt;span class=&quot;nv&quot;&gt;$1&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>Deviantart Profile</title>
   <link href="http://blog.neovatar.org/archives/10-Deviantart-Profile.html"/>
   <updated>2008-09-15T19:39:51+02:00</updated>
   <id>http://blog.neovatar.org/archives/Deviantart-Profile</id>
   <content type="html">&lt;p&gt;I posted some of my “featured” photographies on my new deviant art profile, enjoy &lt;img src=&quot;http://blog.neovatar.org/templates/default/img/emoticons/laugh.png&quot; alt=&quot;:-D&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://neovatar.deviantart.com/&quot; title=&quot;neovatar deviantart profile&quot;&gt;http://neovatar.deviantart.com/&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>"HDR" experiment...</title>
   <link href="http://blog.neovatar.org/archives/7-HDR-experiment....html"/>
   <updated>2008-06-01T18:14:41+02:00</updated>
   <id>http://blog.neovatar.org/archives/HDR-experiment...</id>
   <content type="html">&lt;p&gt;Today I was playing around with my new Canon 450D DSLR and did a “HDR” experiment.&lt;/p&gt;

&lt;p&gt;The original picture, a view into my garden photographed out of my window. As you can see, its a bit overexposed:&lt;/p&gt;

&lt;!-- s9ymdb:14 --&gt;
&lt;p&gt;&lt;img class=&quot;serendipity_image_left&quot; width=&quot;500&quot; height=&quot;333&quot; style=&quot;border: 0px; padding-left: 5px; padding-right: 5px;&quot; src=&quot;http://blog.neovatar.org/uploads/photos/garten_orginal_500x333.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;And a processed HDR made out of three pictures done in bracketing mode:&lt;/p&gt;

&lt;!-- s9ymdb:12 --&gt;
&lt;p&gt;&lt;img class=&quot;serendipity_image_left&quot; width=&quot;500&quot; height=&quot;333&quot; style=&quot;border: 0px; padding-left: 5px; padding-right: 5px;&quot; src=&quot;http://blog.neovatar.org/uploads/photos/garten_hdr_500x333.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://blog.neovatar.org/uploads/photos/garten_compare.html&quot;&gt;Compare the two images&lt;/a&gt; with a mouseover effect (needs javascript).&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Failover firewalls with OpenBSD + VMware Server, part I: The network scenario</title>
   <link href="http://blog.neovatar.org/archives/4-Failover-firewalls-with-OpenBSD-+-VMware-Server,-part-I-The-network-scenario.html"/>
   <updated>2008-05-27T19:34:00+02:00</updated>
   <id>http://blog.neovatar.org/archives/Failover-firewalls-with-OpenBSD-+-VMware-Server,-part-I-The-network-scenario</id>
   <content type="html">&lt;p&gt;My idea was to build/simulate a typical firewall setup with a redundant firewall, where the secondary box takes over if the primary fails. After considering a Linux based solution, I decided to try a BSD based approach, since this OS family seemed very suitable for this kind of setup.&lt;/p&gt;

&lt;p&gt;After playing around a bit with some open source based firewall appliances like &lt;a href=&quot;http://m0n0.ch/&quot; title=&quot;m0n0wall&quot;&gt;m0n0wall&lt;/a&gt; and &lt;a href=&quot;http://www.pfsense.org/&quot; title=&quot;pfsense&quot;&gt;pfsense&lt;/a&gt;, I did what real men do - and settled for &lt;a href=&quot;http://www.openbsd.org/&quot; title=&quot;OpenBSD&quot;&gt;OpenBSD&lt;/a&gt; &lt;img src=&quot;http://blog.neovatar.org/templates/default/img/emoticons/smile.png&quot; alt=&quot;:-)&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt; The following draft shows the setup I am planning to implement:&lt;/p&gt;

&lt;!-- s9ymdb:8 --&gt;
&lt;p&gt;&lt;img class=&quot;serendipity_image_left&quot; width=&quot;534&quot; height=&quot;487&quot; style=&quot;border: 0px; padding-left: 5px; padding-right: 5px;&quot; src=&quot;http://blog.neovatar.org/uploads/images/openbsd-demo.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;So basically we have the following components:&lt;/p&gt;

&lt;p&gt;The external network: &lt;strong&gt;ext, 192.168.1.0/24&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The internal network: &lt;strong&gt;int, 192.168.2.0/24&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A special network between the firewalls: &lt;strong&gt;pfsync, 192.168.3.0/24&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The firewalls have their “own” IP addresses: &lt;strong&gt;fw1, x.y.z.240&lt;/strong&gt; and &lt;strong&gt;fw2, x.y.z.241&lt;/strong&gt;, where x.y.z are the networks &lt;strong&gt;int&lt;/strong&gt;,&lt;strong&gt;ext&lt;/strong&gt; and &lt;strong&gt;pfsync&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Both firewalls share “virtual” IP addresses: &lt;strong&gt;192.168.1.254&lt;/strong&gt; on &lt;strong&gt;ext&lt;/strong&gt;
and &lt;strong&gt;192.168.2.254&lt;/strong&gt; on &lt;strong&gt;int&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In the &lt;strong&gt;int&lt;/strong&gt; network, we have a workstation &lt;strong&gt;bsd1&lt;/strong&gt; with the IP &lt;strong&gt;192.168.2.10&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Normally &lt;strong&gt;fw1&lt;/strong&gt; operates as primary firewall and filters/forwards packets between &lt;strong&gt;ext&lt;/strong&gt; and &lt;strong&gt;int&lt;/strong&gt;. If a failure occurs, &lt;strong&gt;fw2&lt;/strong&gt; takes over the virtual IP addresses and operates as firewall/gateway. The &lt;strong&gt;pfsync&lt;/strong&gt; network is a special network between the firewall, reserved for special firewall communication like state syncing.&lt;/p&gt;

&lt;p&gt;And since we haven’t got that much spare hardware lying around, we will simulate this scenario with virtual machines based on a VMware server setup.&lt;/p&gt;

&lt;p&gt;Since VMware server really has its quirks in this kind of setup, stay tuned for part II: VMware server setup&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Fix for s9y 1.3.1 entry's links plugin + postgreSQL 8.1</title>
   <link href="http://blog.neovatar.org/archives/5-Fix-for-s9y-1.3.1-entrys-links-plugin-+-postgreSQL-8.1.html"/>
   <updated>2008-05-26T20:26:45+02:00</updated>
   <id>http://blog.neovatar.org/archives/Fix-for-s9y-1.3.1-entrys-links-plugin-+-postgreSQL-8.1</id>
   <content type="html">&lt;p&gt;The s9y team did some work on the code, unfortunately some changes break the “entry’s links” plugin, if you are still using postgreSQL 8.1. I patched the serendipity_plugin_entrylinks.php file.&lt;/p&gt;

&lt;p&gt;Download my little patch &lt;a href=&quot;http://blog.neovatar.org/uploads/patches/serendipity_plugin_entrylinks.php.patch.txt&quot; title=&quot;serendipity_plugin_entrylinks.php.patch.txt&quot;&gt;entrylinks patch&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>VMware Server, host-only networking and a pinch of promiscuous mode</title>
   <link href="http://blog.neovatar.org/archives/3-VMware-Server,-host-only-networking-and-a-pinch-of-promiscuous-mode.html"/>
   <updated>2008-04-20T20:46:50+02:00</updated>
   <id>http://blog.neovatar.org/archives/VMware-Server,-host-only-networking-and-a-pinch-of-promiscuous-mode</id>
   <content type="html">&lt;p&gt;Today I was playing around with VMware server and two OpenBSD virtual machines that resided on the same vmnet network. I noticed, that vmnet seemed to operate in “switch” mode. I was sending a ping from the host OS to VM1 and VM2 was not able to see the packet. After digging around the web, I found a solution:&lt;/p&gt;

&lt;p&gt;1.) create a user group vmadm
2.) add the UID which is used tu run the VMs to this group
3.) change the group ownership of the vmnet interfaces to this group
4.) allow group members to read/write to the vmnet interfaces&lt;/p&gt;

&lt;p&gt;e.g on Debian execute (VMs run as UID vmrun, VMs use vmnet1):&lt;/p&gt;

&lt;pre&gt;addgroup vmadm
adduser vmrun vmadm
chgrp vmnet /dev/vmnet1
chmod g+rw /dev/vmnet1
&lt;/pre&gt;
</content>
 </entry>
 
 <entry>
   <title>Hurray, I got myself a new AMD/ATI video card...</title>
   <link href="http://blog.neovatar.org/archives/2-Hurray,-I-got-myself-a-new-AMDATI-video-card....html"/>
   <updated>2008-03-13T13:50:24+01:00</updated>
   <id>http://blog.neovatar.org/archives/Hurray,-I-got-myself-a-new-AMDATI-video-card...</id>
   <content type="html">&lt;p&gt;… but now I am using it as expensive paperweight. So if you are thinking about buying a 2600 based AGP card, don’t do it.&lt;/p&gt;

&lt;p&gt;Here is the story of my (k)nightly quest to get this thing running:&lt;/p&gt;

&lt;p&gt;Last week my old x800 based ATI AGP card died and I got myself a new card (&lt;a href=&quot;http://www.hisdigital.com/html/product_ov.php?id=350&amp;amp;view=yes&quot;&gt;HIS IceQ Radeon HD2600XT PRO AGP&lt;/a&gt;). Starting with windows I was quite surprised, to notice that the installed ATI catalyst driver did not find any ATI hardware.&lt;/p&gt;

&lt;p&gt;Ok, I thought, maybe the driver is too old. So I downloaded the most recent catalyst 8.2. Still enjoying my shiny new hardware toy, I launched up the driver installer. And again I was informed, that the driver did not find any ATI video card. Hmm. I checked the ATI logo on the box, no it said, it’s an ATI card.&lt;/p&gt;

&lt;!--more--&gt;

&lt;p&gt;I used the manufacturer supplied CD to install the drivers, actually they were working, but a bit outdated. So why did the reference driver from ATI did not?
 A little bit of research brought up the issue. Go to the &lt;a href=&quot;http://www.driverheaven.net/windows-xp-2k-radeon-display-drivers&quot;&gt;driverheaven forum&lt;/a&gt; and search for ATI+AGP. But better keep some painkillers at hand, you will need them if you own a 2600 based AGP card.&lt;/p&gt;

&lt;p&gt;Long story short: ATI does not support 2600 based AGP cards with their new driver. Yeah right, they do not have AGP support for this chipsets (with a bit little bit of finger pointing to the manufacturer). These kind of cards are advertised as the best possible AGP video upgrade, but the official driver does not support it (not entirely right,  actually there is a hotfix, that works with some cards, but not mine). Well, if that is not a clear case of WTF …&lt;/p&gt;

&lt;p&gt;Since I use Linux as primary working OS, I tried to get the card running in Ubuntu. The combination of my trusted Ubuntu 7.04 and the official catalyst 8.2 fglrx only resulted in either kernel crashes (wheeeee!) or the driver did not find any hardware (tried the last five official drivers from the ATI/AMD website and the ones in the ubuntu repository). Finally I upgraded to 7.10, was able to build+load the fglrx driver. But still, no HD 2600 AGP card supported. The x.org logs said that fglrx could not detect any hardware (doh!).&lt;/p&gt;

&lt;p&gt;I love to play around with linux, kernel and drivers, but I really lost patience this time. The official AMD/ATI drivers simply did not work with my card, neither under Linux nor Windows (@AMD/ATI guys: you know, there is a nice little sticker on the box “certified for windows”).&lt;/p&gt;

&lt;p&gt;The open source drivers did a much better job, as they were actually working. I got the card working with the radeonhd and the radeon drivers (both checked out via git and self compiled). Unfortunately the 2D acceleration is very new and there was no 3D acceleration or XV support (which I need in Linux). But nonetheless, big kudos to the open source community, for supplying a working driver for my card. The chip manufacturer of course was not able to do it. Interesting. I hope ATI/AMD actually pays their driver programming team.
&lt;strong&gt;
So the bottom line of all this ranting is:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I ordered an nvidia card and the AMD/ATI card has gone back into its nice little box. The only thing that will get it out of there again, is to test new versions of the radeon or radeonhd open source drivers. I am so done with AMD/ATI cards and the catalyst driver. Reading the reports about catalyst 8.3, I decided not to even try it. Did I mention already, that getting my new Nvidia 7600GT based card to work took 10 minutes for both operating systems in total (and the Linux driver has stable AIGLX support)?&lt;/p&gt;

&lt;p&gt;The only positive about the whole mess: I discovered an excellent website concerning video hardware and Linux. Check out the &lt;a href=&quot;http://www.phoronix.com&quot;&gt;Phoronix website&lt;/a&gt; and their &lt;a href=&quot;http://www.phoronix.com/forums/&quot;&gt;Phoronix community forum&lt;/a&gt;. This is definitely the place to check, &lt;strong&gt;before&lt;/strong&gt; you buy some video hardware.&lt;/p&gt;

&lt;p&gt;ATI, you lost a customer here. And yes, I like some cheese with the whine.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>YUCK! I did it!</title>
   <link href="http://blog.neovatar.org/archives/1-YUCK!-I-did-it!.html"/>
   <updated>2007-10-13T18:35:10+02:00</updated>
   <id>http://blog.neovatar.org/archives/YUCK!-I-did-it!</id>
   <content type="html">&lt;p&gt;Finally installed s9y. Stay tuned, actually somethings gonna happen on this site in the next 23274368 years.&lt;/p&gt;
</content>
 </entry>
 

</feed>
