<?xml version="1.0" encoding="UTF-8"?>

<rss version="2.0"
 xmlns:blogChannel="http://backend.userland.com/blogChannelModule"
>

<channel>
<title>The Border Worlds Blog</title>
<link>http://borderworlds.dk/blog/</link>
<description>Like everyone else these days I need to have a blog where I can write about boring and generally uninteresting stuff.</description>
<language>en</language>
<pubDate>Sun, 01 Aug 2010 18:35:55 CEST</pubDate>
<lastBuildDate>Sun, 01 Aug 2010 18:35:55 CEST</lastBuildDate>
<managingEditor>xi@borderworlds.dk</managingEditor>
<webMaster>xi@borderworlds.dk</webMaster>

<item>
<title>New job</title>
<description>&#x3C;p&#x3E;
As of today, I will be working at &#x3C;a href=&#x22;http://www.safeticket.dk/&#x22;&#x3E;Safeticket ApS&#x3C;/a&#x3E;.
I will be writing code as usual for the most part.
&#x3C;/p&#x3E;
</description>
<guid isPermaLink="true">http://borderworlds.dk/blog/20100701-00.html</guid>
<pubDate>Thu, 01 Jul 2010 09:39:00 CEST</pubDate>
</item>
<item>
<title>IPv6 related Firefox add-ons</title>
<description>&#x3C;p&#x3E;
Having IPv6 connectivity I found that I would like to both use it more and also know if the websites I visit are IPv6 enabled.
I found two add-ons that helps me do both.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
Use IPv6 when doing google searches: &#x3C;a href=&#x22;https://addons.mozilla.org/en-US/firefox/addon/11730&#x22;&#x3E;IPv6 Google Search&#x3C;/a&#x3E;
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
Show the IP of the website you are visiting - with custom colors indicating IPv4 or IPv6: &#x3C;a href=&#x22;https://addons.mozilla.org/en-US/firefox/addon/590&#x22;&#x3E;ShowIP&#x3C;/a&#x3E;
&#x3C;/p&#x3E;
</description>
<guid isPermaLink="true">http://borderworlds.dk/blog/20100405-00.html</guid>
<pubDate>Mon, 05 Apr 2010 18:57:00 CEST</pubDate>
</item>
<item>
<title>Enabling softupdates on the root filesystem without console access</title>
<description>&#x3C;p&#x3E;
I found myself needing to enable softupdates on the root filesystem of a FreeBSD machine where I didn&#x27;t have
console access. As this is a little tricky I wrote a small RC script that I am now sharing here.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
The script is located &#x3C;a href=&#x22;softdep&#x22;&#x3E;here&#x3C;/a&#x3E;.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
To install it run this sequence of commands as root:
&#x3C;/p&#x3E;

&#x3C;pre&#x3E;&#x3C;code&#x3E;
cd /etc/rc.d
fetch http://borderworlds.dk/blog/softdep
chmod +x softdep
shutdown -r now
&#x3C;/code&#x3E;&#x3C;/pre&#x3E;

&#x3C;p&#x3E;
Your system will then reboot. When it runs the script it will enable softupdates and reboot once more. After
that it should come up normally. Afterwards you can remove the script (Although it doesn&#x27;t hurt to leave it there)
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
I take no responsibility if it eats your cat or sets your machine on fire. It worked for me on the two machines I
tried it on.
&#x3C;/p&#x3E;
</description>
<guid isPermaLink="true">http://borderworlds.dk/blog/20090429-00.html</guid>
<pubDate>Wed, 29 Apr 2009 19:09:00 CEST</pubDate>
</item>
<item>
<title>A simple stream proxy</title>
<description>&#x3C;p&#x3E;
Occasionally I have the chance to use the nice big loudspeakers at the office without anyone being bothered.
I have a premium account for my favourite net radio station but have no desire to expose my credentials by placing
my playlist on the Windows XP machine to which the loudspeakers are connected. So I wrote a small stream proxy to
work around that small problem.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
It is quite simple to use:
&#x3C;/p&#x3E;

&#x3C;pre&#x3E;&#x3C;code&#x3E;$ pls-proxy.pl yournetradio.pls 
pls-proxy.pl 0.1
Copyright (c) 2008 Christian Laursen &#x26;lt;xi@borderworlds.dk&#x26;gt;

Playlist contains 3 entries, picking number 2
URL: http://xxxx:yyyyy@iii.iii.iii.iii:80

Waiting for client to connect on port 8020...
Client connected
Connected to iii.iii.iii.iii:80

Headers:
GET / HTTP/1.0
Host: iii.iii.iii.iii:80
User-Agent: MPlayer/1.0rc2-4.2.1
Icy-MetaData: 1
Connection: close
Authorization: Basic xxxxxxxxxxxxxxxxxx

Fri Nov 28 18:43:07 2008  Bytes received: 434176
Fri Nov 28 18:44:07 2008  Bytes received: 1900544
&#x3C;/code&#x3E;&#x3C;/pre&#x3E;

&#x3C;p&#x3E;
The proxy accepts exactly one connection, so even if you run it on a public machine without firewalling it,
as long as you connect first no one else will be able to use your stream.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
Get it &#x3C;a href=&#x22;/utils/pls-proxy.pl&#x22;&#x3E;here&#x3C;/a&#x3E; and use it if you like.
&#x3C;/p&#x3E;
</description>
<guid isPermaLink="true">http://borderworlds.dk/blog/20081128-00.html</guid>
<pubDate>Fri, 28 Nov 2008 18:52:00 CET</pubDate>
</item>
<item>
<title>Getting true fullscreen in Firefox 3</title>
<description>&#x3C;p&#x3E;
Firefox 3 has improved fullscreen mode to the point where it is &#x3C;strong&#x3E;almost&#x3C;/strong&#x3E; fullscreen. All that remains is the toolbar and tabbar at the top being hidden
away and ready to appear when you move your mouse to the top of the screen. Unfortunately this takes up 5 pixels of the screen height and I was looking for a way to
get rid of that too to really use the entire screen.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
It took a while to guess the right search term to find what I needed but I finally did. The &#x3C;a href=&#x22;https://addons.mozilla.org/en-US/firefox/addon/1568&#x22;&#x3E;Full Fullscreen&#x3C;/a&#x3E; add-on
enables the desired behaviour. All you have to do is enable the &#x22;Prevent navbar auto-popup&#x22; option in its preferences dialog.
&#x3C;/p&#x3E;
</description>
<guid isPermaLink="true">http://borderworlds.dk/blog/20081004-00.html</guid>
<pubDate>Sat, 04 Oct 2008 23:42:30 CEST</pubDate>
</item>
<item>
<title>Restoring the display on Dell Latitude D610</title>
<description>&#x3C;p&#x3E;
I have a Dell Latitude D610 at work. I don&#x27;t use its own display very often but when I happen to
do it is a bit annoying that the display does not turn on after the lid has been closed. When
I tried to search for a solution I found a number of fixes for Linux but none for FreeBSD.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
The fix on FreeBSD isn&#x27;t that complicated. The display can be turned on again using DPMS. This
requires a running X session to work.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
Insert the following lines into &#x3C;code&#x3E;/etc/devd.conf&#x3C;/code&#x3E;:&#x3C;br /&#x3E;
&#x3C;code&#x3E;
notify 0 {&#x3C;br /&#x3E;
&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;match&#x26;nbsp;&#x22;system&#x22;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x22;ACPI&#x22;;&#x3C;br /&#x3E;
&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;match&#x26;nbsp;&#x22;subsystem&#x22;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x22;Lid&#x22;;&#x3C;br /&#x3E;
&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;match&#x26;nbsp;&#x22;notify&#x22;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x22;0x01&#x22;;&#x3C;br /&#x3E;
&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;action&#x26;nbsp;&#x22;/root/bin/restore_display&#x22;;&#x3C;br /&#x3E;
};
&#x3C;/code&#x3E;
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
Then create a file called &#x3C;code&#x3E;/root/bin/restore_display&#x3C;/code&#x3E; containing the following:&#x3C;br /&#x3E;
&#x3C;code&#x3E;
#!/bin/sh&#x3C;br /&#x3E;
&#x3C;br /&#x3E;
/usr/bin/logger Lid opened, restoring display&#x3C;br /&#x3E;
&#x3C;br /&#x3E;
export HOME=/home/cfl&#x3C;br /&#x3E;
export DISPLAY=:0&#x3C;br /&#x3E;
&#x3C;br /&#x3E;
/usr/local/bin/xset dpms force on
&#x3C;/code&#x3E;
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
Of course you need to change the home directory to that of the user logged into X.
&#x3C;/p&#x3E;
</description>
<guid isPermaLink="true">http://borderworlds.dk/blog/20071027-00.html</guid>
<pubDate>Sat, 27 Oct 2007 16:23:00 CEST</pubDate>
</item>
<item>
<title>Xinerama on Dell Latitude D610</title>
<description>&#x3C;p&#x3E;
I have a Dell Latitude D610 to do my work related stuff on. At work I have two 20&#x22; LCD monitors,
both with a resolution of 1600x1200 pixels. It took quite a bit of experimenting to get Xinerama
running, so I decided to share my X.org configuration.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
&#x3C;a href=&#x22;20070328-00_xorg.conf&#x22;&#x3E;Here it is&#x3C;/a&#x3E;.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
The laptop has a VGA connector and a DVI connector. The &#x22;NoDDC&#x22; option is neccesary to get the
monitor on VGA to accept 1600x1200. Without it only 1280x1024 is possible and that looks quite ugly.
&#x3C;/p&#x3E;
</description>
<guid isPermaLink="true">http://borderworlds.dk/blog/20070328-00.html</guid>
<pubDate>Wed, 28 Mar 2007 17:40:00 CEST</pubDate>
</item>
<item>
<title>QEMU Clipboard synchronization</title>
<description>&#x3C;p&#x3E;
A week ago I wrote that I hadn&#x27;t been able to find any network clipboard
applications that worked well in order to allow me to share the clipboard
between the host and the QEMU guest OS. Yesterday I got a bright idea about
how this can be done in a simple way with widely used and maintained tools.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
&#x3C;a href=&#x22;http://x2x.dottedmag.net/&#x22;&#x3E;x2x&#x3C;/a&#x3E; allows the keyboard, mouse on one X display to be used to control another X display.
It also shares X clipboards between the displays. A similar program called &#x3C;a href=&#x22;http://fredrik.hubbe.net/x2vnc.html&#x22;&#x3E;x2vnc&#x3C;/a&#x3E;
allows a host running X to control a host running a VNC server. The primary function of these two programs (controlling the other
display) is not interesting in this context. However, the clipboard sharing of both of them works very well.
&#x3C;/p&#x3E;

&#x3C;h2&#x3E;Guests running X&#x3C;/h2&#x3E;

&#x3C;p&#x3E;
Before it is possible to let x2x connect to the X server on the guest, you need to forward a port with the &#x3C;code&#x3E;-redir&#x3C;/code&#x3E;
option to QEMU. Personally I use &#x22;&#x3C;code&#x3E;-redir tcp:6042::6000&#x3C;/code&#x3E;&#x22; which will make QEMU listen on port 6042 and forward it to port 6000
in the guest.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
X on the guest needs to be started with the &#x3C;code&#x3E;-listen_tcp&#x3C;/code&#x3E; option in order to allow connections from the network. Furthermore
you need to run &#x22;&#x3C;code&#x3E;xhost +10.0.2.2&#x3C;/code&#x3E;&#x22; to allow the host to connect to it.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
When all this is taken care of it is just a question of running &#x22;&#x3C;code&#x3E;x2x -to :42&#x3C;/code&#x3E;&#x22; on the host.
&#x3C;/p&#x3E;

&#x3C;h2&#x3E;Guests running something else&#x3C;/h2&#x3E;

&#x3C;p&#x3E;
When running a guest OS using something else than X (e.g. Windows), install a VNC server inside the guest OS and run QEMU with
&#x22;&#x3C;code&#x3E;-redir tcp:5900::5900&#x3C;/code&#x3E;&#x22;.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
You can then run &#x22;&#x3C;code&#x3E;x2vnc 127.0.0.1:0&#x3C;/code&#x3E;&#x22; on the host.
&#x3C;/p&#x3E;
</description>
<guid isPermaLink="true">http://borderworlds.dk/blog/20070224-00.html</guid>
<pubDate>Sat, 24 Feb 2007 21:00:00 CET</pubDate>
</item>
<item>
<title>Getting the QEMU USB tablet working with Linux as guest OS</title>
<description>&#x3C;p&#x3E;
I found out that it wasn&#x27;t actually that hard to get the emulated USB tablet
working inside my SuSE Linux guest.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
I googled a bit and found what I needed to build this InputDevice section for my xorg.conf:&#x3C;br /&#x3E;
&#x3C;code&#x3E;
Section &#x22;InputDevice&#x22;&#x3C;br /&#x3E;
&#x26;nbsp;&#x26;nbsp;Driver &#x22;evtouch&#x22;&#x3C;br /&#x3E;
&#x26;nbsp;&#x26;nbsp;Identifier &#x22;Tablet&#x22;&#x3C;br /&#x3E;
&#x26;nbsp;&#x26;nbsp;Option &#x22;Device&#x22; &#x22;/dev/input/event3&#x22;&#x3C;br /&#x3E;
&#x26;nbsp;&#x26;nbsp;Option &#x22;MinX&#x22; &#x22;0&#x22;&#x3C;br /&#x3E;
&#x26;nbsp;&#x26;nbsp;Option &#x22;MinY&#x22; &#x22;0&#x22;&#x3C;br /&#x3E;
&#x26;nbsp;&#x26;nbsp;Option &#x22;MaxX&#x22; &#x22;32767&#x22;&#x3C;br /&#x3E;
&#x26;nbsp;&#x26;nbsp;Option &#x22;MaxY&#x22; &#x22;32767&#x22;&#x3C;br /&#x3E;
EndSection
&#x3C;/code&#x3E;
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
I haven&#x27;t been able to get it going for my FreeBSD guest yet. It looks like it wants xorg-server.h which will
not be present before X.Org is updated in ports to version 7.x.
&#x3C;/p&#x3E;
</description>
<guid isPermaLink="true">http://borderworlds.dk/blog/20070218-00.html</guid>
<pubDate>Sun, 18 Feb 2007 16:35:00 CET</pubDate>
</item>
<item>
<title>Integrating QEMU a bit with your desktop</title>
<description>&#x3C;p&#x3E;
Presently you have to run QEMU with a slightly lower resolution than your real desktop
or run it in full-screen mode to get a decent experience out of it. With a patch I have
written and a few tricks it can work a bit better.
&#x3C;/p&#x3E;

&#x3C;h2&#x3E;Getting QEMU to occupy the entire screen&#x3C;/h2&#x3E;

&#x3C;p&#x3E;
This is a bit tricky. I have made a patch (&#x3C;a href=&#x22;/patches/qemu-noframe.patch&#x22;&#x3E;qemu-noframe.patch&#x3C;/a&#x3E;) that
adds a &#x3C;code&#x3E;-no-frame&#x3C;/code&#x3E; option to QEMU. Apply this patch, rebuild QEMU and add &#x3C;code&#x3E;-no-frame&#x3C;/code&#x3E; to
your command line. (This patch has now been committed to QEMU CVS)
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
When you start QEMU with the &#x3C;code&#x3E;-no-frame&#x3C;/code&#x3E; option, it will open in a window without borders and window
decorations. Your window manager might have a way to let you position such a window (alt + left mouse button often
does this). Then you just have to place the window in the top left corner of the screen and configure the guest
OS to the resolution of your screen.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
If you don&#x27;t want to move the window manually every time you start QEMU, you can set the &#x3C;code&#x3E;SDL_VIDEO_WINDOW_POS&#x3C;/code&#x3E;
environment variable before starting QEMU. In a bourne shell it would look like this:&#x3C;br /&#x3E;
&#x3C;code&#x3E;export SDL_VIDEO_WINDOW_POS=0,0&#x3C;/code&#x3E;
&#x3C;/p&#x3E;

&#x3C;h2&#x3E;Eliminating the need for mouse grabbing&#x3C;/h2&#x3E;

&#x3C;p&#x3E;
When running Windows as the guest OS you can instruct QEMU to emulate a USB tablet instead of the normal PS/2 mouse. This way
QEMU can use absolute coordinates to tell Windows where the pointer currently is, eliminating the need for QEMU to grab the mouse.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
I haven&#x27;t had success with the tablet when using Linux or FreeBSD as guest OS but Google indicates that the &#x3C;code&#x3E;evtouch&#x3C;/code&#x3E;
driver might work for this purpose.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
The USB tablet is enabled by adding &#x22;&#x3C;code&#x3E;-usb -usbdevice tablet&#x3C;/code&#x3E;&#x22; to the QEMU command line.
&#x3C;/p&#x3E;

&#x3C;h2&#x3E;Guest OS tweaking&#x3C;/h2&#x3E;

&#x3C;p&#x3E;
This part depends on your actual desktop configuration. Personally I have a single Xfce panel at the bottom of the screen, so I have
moved the windows taskbar to the top.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
If anyone can tell me how I can make an invisible bar or something like it at the bottom of the windows desktop that will prevent
windows from being maximized under my Xfce panel, it would be very nice as I haven&#x27;t found a way to do that yet. A screenshot showing
this problem is &#x3C;a href=&#x22;20070217-00_qemu.png&#x22;&#x3E;here&#x3C;/a&#x3E;.
&#x3C;/p&#x3E;

&#x3C;h2&#x3E;Clipboard synchronization&#x3C;/h2&#x3E;

&#x3C;p&#x3E;
To conveniently allow copy and paste between the host and the guest, the easiest way is to just use one of the
network based clipboard sharing programs.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
I haven&#x27;t found one that works well for me. The closest thing is &#x3C;a href=&#x22;http://wolfpackally.wo.funpic.de/qemu/qgt/&#x22;&#x3E;QEMU Guest Tools&#x3C;/a&#x3E;.
It looks unmaintained but I managed to build it on my FreeBSD host and use the prebuilt windows binary on my Windows guest.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
When connecting from inside the guest you can use the IP address 10.0.2.2 to connect to the host.
&#x3C;/p&#x3E;
</description>
<guid isPermaLink="true">http://borderworlds.dk/blog/20070217-00.html</guid>
<pubDate>Sat, 17 Feb 2007 16:20:00 CET</pubDate>
</item>
<item>
<title>New job</title>
<description>&#x3C;p&#x3E;
In the middle of November 2006 I contacted a recruitment agency about a
job that looked interesting. Last week, 7 weeks later I got the job. Compared
to my experience with &#x3C;a href=&#x22;20061005-00.html&#x22;&#x3E;the Google hiring
process&#x3C;/a&#x3E; this was much more pleasant.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
The process was delayed a few times, partly due to my new boss being extremely
busy and partly due to the christmas holidays.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
From the 1st of March I will be working as a developer for
&#x3C;a href=&#x22;http://www.stofa.dk/&#x22;&#x3E;Telia Stofa&#x3C;/a&#x3E; located in Horsens, Denmark.
They are doing a lot of interesting stuff and I look forward to working there
a great deal.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
I have been very happy working for &#x3C;a href=&#x22;http://www.pil.dk/&#x22;&#x3E;pil.dk&#x3C;/a&#x3E; for the
past 6 years and 9 months and I&#x27;m sure that I&#x27;ll miss it.
&#x3C;/p&#x3E;
</description>
<guid isPermaLink="true">http://borderworlds.dk/blog/20070111-00.html</guid>
<pubDate>Thu, 11 Jan 2007 08:30:00 CET</pubDate>
</item>
<item>
<title>Trimming the FreeBSD base system</title>
<description>&#x3C;p&#x3E;
The FreeBSD base system contains everything neccesary for a minimal functional
operating system. However it contains a little more than that and since some of
the developers started talking about importing OpenLDAP into base I have been
thinking about a way to avoid installing that on my machines.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
I update my machines using the traditional method of &#x3C;code&#x3E;make buildworld&#x3C;/code&#x3E;
and &#x3C;code&#x3E;make installworld&#x3C;/code&#x3E;. The build system lets me specify NO_* variables
in &#x3C;code&#x3E;/etc/make.conf&#x3C;/code&#x3E; to exclude certain parts of the system from being
built and installed. But if I add those variables after having done a standard install
of the system those parts will not be removed from my system, just not updated.
So I end up with a number of stale files that can possibly cause unpredictable
behaviour.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
To solve this problem I have written a script that builds a standard full world
as well as a world using the variables from &#x3C;code&#x3E;/etc/make.conf&#x3C;/code&#x3E;. It then
compares the list of files installed from both of them and presents a list of
files not present in the custom world.&#x3C;/p&#x3E;

&#x3C;p&#x3E; The file list is opened in the &#x3C;code&#x3E;vi&#x3C;/code&#x3E; editor and can be changed if desired.
After closing the editor you need to confirm the deletion of the files before
they are deleted.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
The script takes one argument which is a path to a working directory. The directory
needs to be on a filesystem with 1 to 1.5GB of free space.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
The script can be downloaded from &#x3C;a href=&#x22;/utils/freebsd-cleanup.pl&#x22;&#x3E;here&#x3C;/a&#x3E;. Enjoy.
&#x3C;/p&#x3E;
</description>
<guid isPermaLink="true">http://borderworlds.dk/blog/20061021-00.html</guid>
<pubDate>Sat, 21 Oct 2006 18:50:00 CEST</pubDate>
</item>
<item>
<title>The Google Hiring Process</title>
<description>&#x3C;p&#x3E;
Three months ago I received an email from a Google recruiter containing two job
descriptions. She asked me whether they looked interesting to me. I answered that
they did and entered the Google hiring process. The first part of it went well but
the last month or so has been an experience I wouldn&#x27;t recommend to anyone.
&#x3C;/p&#x3E;

&#x3C;h2&#x3E;Timeline&#x3C;/h2&#x3E;

&#x3C;table border=&#x22;1&#x22;&#x3E;
&#x3C;tr&#x3E;
&#x3C;td&#x3E;
2006-07-05
&#x3C;/td&#x3E;
&#x3C;td&#x3E;
I received the email mentioned above from the recruiter. We exchanged a few mails
in one of which I sent a link to my online CV and a phone interview was set up.
&#x3C;/td&#x3E;
&#x3C;/tr&#x3E;

&#x3C;tr&#x3E;
&#x3C;td&#x3E;
2006-07-07
&#x3C;/td&#x3E;
&#x3C;td&#x3E;
The recruiter called me for the phone interview. We talked mostly about my background
and she asked me a few technical questions. I was also asked to rate my skills on a number
of technologies.
&#x3C;/td&#x3E;
&#x3C;/tr&#x3E;

&#x3C;tr&#x3E;
&#x3C;td&#x3E;
2006-07-18
&#x3C;/td&#x3E;
&#x3C;td&#x3E;
My first technical interview. Various questions and a troubleshooting scenario.
&#x3C;/td&#x3E;
&#x3C;/tr&#x3E;

&#x3C;tr&#x3E;
&#x3C;td&#x3E;
2006-07-25
&#x3C;/td&#x3E;
&#x3C;td&#x3E;
My second technical interview.
&#x3C;/td&#x3E;
&#x3C;/tr&#x3E;

&#x3C;tr&#x3E;
&#x3C;td&#x3E;
2006-08-02
&#x3C;/td&#x3E;
&#x3C;td&#x3E;
Every time I was called for an interview I was told that I would get some feedback
within a week. I hadn&#x27;t received feedback from the second technical interview so
I sent an email asking for it.
&#x3C;/td&#x3E;
&#x3C;/tr&#x3E;

&#x3C;tr&#x3E;
&#x3C;td&#x3E;
2006-08-03
&#x3C;/td&#x3E;
&#x3C;td&#x3E;
I received an email with an invitation to the European headquarters of Google in Dublin.
&#x3C;/td&#x3E;
&#x3C;/tr&#x3E;

&#x3C;tr&#x3E;
&#x3C;td&#x3E;
2006-08-18
&#x3C;/td&#x3E;
&#x3C;td&#x3E;
I visited Google in Dublin and went through four interviews there. They were much like
the phone interviews except that I got to write some code on the white board.
&#x3C;/td&#x3E;
&#x3C;/tr&#x3E;

&#x3C;tr&#x3E;
&#x3C;td&#x3E;
2006-08-23
&#x3C;/td&#x3E;
&#x3C;td&#x3E;
I received an email telling me that all my feedback so far had been positive and they
would like one final phone interview with a technical manager.
&#x3C;/td&#x3E;
&#x3C;/tr&#x3E;

&#x3C;tr&#x3E;
&#x3C;td&#x3E;
2006-08-30
&#x3C;/td&#x3E;
&#x3C;td&#x3E;
The final interview. The technical manager didn&#x27;t call me. I sent a mail requesting a
new time for the interview.
&#x3C;/td&#x3E;
&#x3C;/tr&#x3E;

&#x3C;tr&#x3E;
&#x3C;td&#x3E;
2006-09-06
&#x3C;/td&#x3E;
&#x3C;td&#x3E;
The final interview, take two. Once again the technical manager didn&#x27;t call me. I sent
a mail expressing frustration and unhappiness about the situation.
&#x3C;/td&#x3E;
&#x3C;/tr&#x3E;

&#x3C;tr&#x3E;
&#x3C;td&#x3E;
2006-09-13
&#x3C;/td&#x3E;
&#x3C;td&#x3E;
I was called by the recruiter in Dublin who apologized and promised that she would make
sure that the technical manager called me the next time.
&#x3C;/td&#x3E;
&#x3C;/tr&#x3E;

&#x3C;tr&#x3E;
&#x3C;td&#x3E;
2006-09-14
&#x3C;/td&#x3E;
&#x3C;td&#x3E;
The final interview, take three. This time the technical manager called me.
&#x3C;/td&#x3E;
&#x3C;/tr&#x3E;

&#x3C;tr&#x3E;
&#x3C;td&#x3E;
2006-09-19
&#x3C;/td&#x3E;
&#x3C;td&#x3E;
I received an email with one last request for a phone interview with a senior technical
manager based in California.
&#x3C;/td&#x3E;
&#x3C;/tr&#x3E;

&#x3C;tr&#x3E;
&#x3C;td&#x3E;
2006-09-21
&#x3C;/td&#x3E;
&#x3C;td&#x3E;
The second final interview with the senior technical manager.
&#x3C;/td&#x3E;
&#x3C;/tr&#x3E;

&#x3C;tr&#x3E;
&#x3C;td&#x3E;
2006-09-26
&#x3C;/td&#x3E;
&#x3C;td&#x3E;
I received an email from a recruiter based in California. I was apparently
scheduled for a final interview without being asked about possible dates first.
I replied that this was the third time I had been scheduled for a &#x22;final&#x22;
interview and requested an explanation before proceeding further.
&#x3C;/td&#x3E;
&#x3C;/tr&#x3E;

&#x3C;tr&#x3E;
&#x3C;td&#x3E;
2006-09-29
&#x3C;/td&#x3E;
&#x3C;td&#x3E;
The lead recruiter called me and apologized about the situation and promised me
that he would make sure that I got a quick answer after the third final interview.
He didn&#x27;t offer me an explanation of the situation.
&#x3C;/td&#x3E;
&#x3C;/tr&#x3E;

&#x3C;tr&#x3E;
&#x3C;td&#x3E;
2006-10-02
&#x3C;/td&#x3E;
&#x3C;td&#x3E;
The third final interview with the same senior technical manager as the second
final interview.
&#x3C;/td&#x3E;
&#x3C;/tr&#x3E;

&#x3C;tr&#x3E;
&#x3C;td&#x3E;
2006-10-05
&#x3C;/td&#x3E;
&#x3C;td&#x3E;
I received an email telling me that I was not a strong match for the position.
&#x3C;/td&#x3E;
&#x3C;/tr&#x3E;
&#x3C;/table&#x3E;

&#x3C;h2&#x3E;Conclusion&#x3C;/h2&#x3E;

&#x3C;p&#x3E;
I obviously didn&#x27;t get the job. Otherwise I would probably not be writing this.
From what I have heard my experience is not typical. However from my perspective
it doesn&#x27;t make Google look like a professional organization.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
My two main complaints are:
&#x3C;/p&#x3E;

&#x3C;ul&#x3E;
&#x3C;li&#x3E;Promising an interview to be the final one when it isn&#x27;t. Twice.&#x3C;/li&#x3E;
&#x3C;li&#x3E;Not calling at the scheduled time. Twice.&#x3C;/li&#x3E;
&#x3C;/ul&#x3E;

&#x3C;p&#x3E;
I would expect a company like Google to have this sort of stuff worked out a
long time ago. I realize that mistakes happen and human beings make mistakes.
Did they all happen to me and not to others?
&#x3C;/p&#x3E;

</description>
<guid isPermaLink="true">http://borderworlds.dk/blog/20061005-00.html</guid>
<pubDate>Thu, 05 Oct 2006 20:00:00 CEST</pubDate>
</item>
<item>
<title>Migration from ipfw to pf</title>
<description>&#x3C;p&#x3E;
For too long I have had plans to take a look af &#x3C;code&#x3E;pf(4)&#x3C;/code&#x3E; to figure out
whether I liked it or not. Today I managed to build a working &#x3C;code&#x3E;pf&#x3C;/code&#x3E;
ruleset that was not only better than the old &#x3C;code&#x3E;ipfw&#x3C;/code&#x3E; ruleset but much
shorter as well.
&#x3C;/p&#x3E;

&#x3C;h2&#x3E;Kernel support&#x3C;/h2&#x3E;
&#x3C;p&#x3E;
Since I have always been building &#x3C;code&#x3E;ipfw&#x3C;/code&#x3E; into my kernels I decided to
remove that and add &#x3C;code&#x3E;pf&#x3C;/code&#x3E; instead. That way the motivation for getting
pf to work well would be greater too.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;Adding &#x3C;code&#x3E;pf&#x3C;/code&#x3E; to the kernel is simple enough:&#x3C;br /&#x3E;
&#x3C;code&#x3E;device pf&#x3C;/code&#x3E;
&#x3C;/p&#x3E;

&#x3C;h2&#x3E;The ruleset&#x3C;/h2&#x3E;
&#x3C;p&#x3E;Since the ruleset is for my laptop I need all ports to be closed and just allow
connections initiated on the host itself. I didn&#x27;t find an example that did this but
it proved easy enough to build it myself.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;Here it is:&#x3C;br /&#x3E;
set block-policy return&#x3C;br /&#x3E;
set skip on lo0&#x3C;br /&#x3E;
block in all&#x3C;br /&#x3E;
&#x3C;br /&#x3E;
pass out proto { tcp, udp } all keep state&#x3C;br /&#x3E;
&#x3C;br /&#x3E;
pass in proto {icmp,icmp6} all&#x3C;br /&#x3E;
pass out proto {icmp,icmp6} all
&#x3C;/p&#x3E;

&#x3C;h2&#x3E;Traffic shaping and NAT&#x3C;/h2&#x3E;
&#x3C;p&#x3E;The next machine to be migrated away from &#x3C;code&#x3E;ipfw&#x3C;/code&#x3E; will probably be my
workstation. To do that I need to figure out how to make &#x3C;code&#x3E;ALTQ&#x3C;/code&#x3E; do the
same as &#x3C;code&#x3E;ipfw&#x3C;/code&#x3E; pipes. The last machine will probably be my gateway which
does NAT. There are lots of examples on that so I expect it to be easy enough.
&#x3C;/p&#x3E;
</description>
<guid isPermaLink="true">http://borderworlds.dk/blog/20060713-00.html</guid>
<pubDate>Thu, 13 Jul 2006 19:10:00 CEST</pubDate>
</item>
<item>
<title>dominion.borderworlds.dk - My second soekris</title>
<description>&#x3C;p&#x3E;
After several months I finally got around to the &#x3C;a href=&#x22;http://www.soekris.com/&#x22;&#x3E;soekris&#x3C;/a&#x3E; I bought back in February.
It is now taking care of all my mail reading needs and seems to run stable and reliable.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
The operating system is of course &#x3C;a href=&#x22;http://www.FreeBSD.org/&#x22;&#x3E;FreeBSD&#x3C;/a&#x3E; like
most of my other machines. However this one is different. All the software that runs on
it is built on my workstation by a script that generates two images. The first image
contains the root filesystem and the second one contains &#x3C;code&#x3E;/usr/local&#x3C;/code&#x3E; and
&#x3C;code&#x3E;/usr/X11R6&#x3C;/code&#x3E;. The reason for this split is that the soekris only has 64MB
of onboard flash.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
When the system is up and running the &#x3C;code&#x3E;df -h&#x3C;/code&#x3E; output looks like this:
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
&#x3C;code&#x3E;
Filesystem&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;Size&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;Used&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;Avail&#x26;nbsp;Capacity&#x26;nbsp;&#x26;nbsp;Mounted&#x26;nbsp;on&#x3C;br/&#x3E;
/dev/ad0s1a&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;59M&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;48M&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;6.6M&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;88%&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;/&#x3C;br/&#x3E;
devfs&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;1.0K&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;1.0K&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;0B&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;100%&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;/dev&#x3C;br/&#x3E;
/dev/ggate0&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;1.9G&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;826M&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;994M&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;45%&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;/home&#x3C;br/&#x3E;
/dev/ggate1p1&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;185M&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;158M&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;12M&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;93%&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;/usr/local&#x3C;br/&#x3E;
/dev/ggate1p2&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;63M&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;59M&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;-1.7M&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;103%&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;/usr/X11R6&#x3C;br/&#x3E;
/dev/md0&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;31M&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;660K&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;28M&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;2%&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;/var&#x3C;br/&#x3E;
/dev/md1&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;19M&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;12K&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;18M&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;0%&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;/tmp&#x3C;br /&#x3E;
&#x3C;/code&#x3E;
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
As you can see I use ggate for accessing the image that contains &#x3C;code&#x3E;/usr/local&#x3C;/code&#x3E; and &#x3C;code&#x3E;/usr/X11R6&#x3C;/code&#x3E; as
well as the file that contains &#x3C;code&#x3E;/home&#x3C;/code&#x3E;. Both are stored on my other soekris that has a harddisk.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
The image building is done by a 400 line perl script that uses a configuration file to determine how the images
should be built. The &#x3C;a href=&#x22;20060604-00_build.cfg&#x22;&#x3E;&#x3C;code&#x3E;build.cfg&#x3C;/code&#x3E; for &#x3C;code&#x3E;dominion.borderworlds.dk&#x3C;/code&#x3E;
is here&#x3C;/a&#x3E;. Most of it doesn&#x27;t need much explaining. If you know a little about the FreeBSD build process you will
recognize the buildflags as options you normally set in &#x3C;code&#x3E;/etc/make.conf&#x3C;/code&#x3E;. Portsflags does the same thing -
just for the ports instead of the base system.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
The imageloader flag indicates whether the special component called imageloader should be included in the image.
The imageloader is a small &#x3C;code&#x3E;mfsroot&#x3C;/code&#x3E; image that can be booted as the root file system and then be used
to load a new image onto the flash. If enabled the forth code in &#x3C;code&#x3E;/boot&#x3C;/code&#x3E; is modified to include a custom
command &#x22;update&#x22; that loads this &#x3C;code&#x3E;mfsroot&#x3C;/code&#x3E; image and boots with it as the root filesystem.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
I might release the build script at some point but right now some parts of it are just too ugly and too many things
are har coded. It will probably become better when I build a few more systems with it and force myself to make things
more generic.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
Finally a picture of my infrastructure closet:
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
&#x3C;img src=&#x22;20060604-00_soekris.jpg&#x22; alt=&#x22;The infrastructure closet&#x22; /&#x3E;
&#x3C;/p&#x3E;
</description>
<guid isPermaLink="true">http://borderworlds.dk/blog/20060604-00.html</guid>
<pubDate>Sun, 04 Jun 2006 16:15:00 CEST</pubDate>
</item>
<item>
<title>The blog is online</title>
<description>&#x3C;p&#x3E;Who would have believed it? I now have a blog. My plans for it is somewhat vague at the
moment, but I&#x27;m pretty sure that I will find something to write about shortly.&#x3C;/p&#x3E;

&#x3C;p&#x3E;The soekris I bought three months ago is almost ready to take its place in my
small &#x22;server farm&#x22; and the build system I created to build the images powering it
deserves a short story. I have plans to extend and use the same build system for
making my HTPC diskless.&#x3C;/p&#x3E;

&#x3C;p&#x3E;The blog itself is powered by the superior 238 line perl script that takes care
of generating the rest of &#x3C;a href=&#x22;http://borderworlds.dk/&#x22;&#x3E;borderworlds.dk&#x3C;/a&#x3E;.
Using one of the existing blog packages out there would increase the attack surface
and probably be slower too than having it statically generated. Furthermore it allows
me to write my stuff in emacs as usual which is nice.&#x3C;/p&#x3E;
</description>
<guid isPermaLink="true">http://borderworlds.dk/blog/20060527-00.html</guid>
<pubDate>Sun, 28 May 2006 00:04:00 CEST</pubDate>
</item>
</channel>
</rss>