<?xml version="1.0" encoding="iso-8859-1"?>
<feed version="0.3"
xmlns="http://purl.org/atom/ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/"
>
<title mode="escaped">clemens.endorphin.org/weblog</title>
<link rel="alternate" type="text/html" href="http://clemens.endorphin.org/weblog"/>
<modified>2007-12-22T15:01:01+01:00</modified>
<author>
<name>clemens</name>
<url>http://clemens.endorphin.org/weblog</url>
</author>

<entry>
<title mode="escaped">Removing CHS based access from windows boot loaders</title>
<author>
<name>clemens</name>
</author>
<link rel="alternate" type="text/html" href="http://clemens.endorphin.org/weblog/archives/2007-12.shtml#e2007-12-22T12_22_48.txt"/>
<id>http://clemens.endorphin.org/weblog/archives/2007-12.shtml#e2007-12-22T12_22_48.txt</id>
<issued>2007-12-22T12:22:48+01:00</issued>
<modified>2007-12-22T12:22:48+01:00</modified>
<created>2007-12-22T12:22:48+01:00</created>

<content type="application/xhtml+xml" xml:lang="en" xml:space="preserve" mode="escaped">
<![CDATA[
Recently, I had troubles to migrate my Windows installation from
VMWare to <a href="http://virtualbox.org">VirtualBox</a>. When booting
the vmware created partition in virtualbox, I got "NTLDR not found".
So I sharpened the knives and got down to business with vmware's gdb
interface and virtualbox's internal debugger. Tracing the execution
showed that the BIOSes of the two products reported different
geometries on the INT 13h interface. The generic method contained in
the boot loader to read a sector from disk is "clever" as it checks
whether the sector is below the maximum sector index that is reachable
with the CHS geometry reported by the BIOS. If not, it uses the LBA
interface of the BIOS. If yes, the cleverness of the boot loader
suddenly vanishes. Instead of using the BIOS reported geometry to
break the absolute sector down into its CHS components, the boot
loader uses a geometry stored in the so called BIOS parameter
block. That's a section of the first sector embedded into the boot
loader that hard codes such values as head per cylinder and sectors
per heads into the boot loader. If the hard coded values are different
from the ones used by the BIOS, the calculation produces wrong values.
So, if you move your partition to a BIOS that exposes a different
geometry to the boot loader than is hard coded in the boot loader the
whole thing blows up. Brilliant Microsoft design, as ever.
<br /><br />
My solution is to override the check in the boot loader, so that LBA
based access is always used and the CHS code is never touch. This way
I'm able to use my partition under vmware (which uses heads=15) and
virtualbox (which uses heads=255) simultaneously. Here is my boot
loader patcher for FAT32 and NTFS based boot loaders: <a
href="/killchs.c">killchs.c</a>. Use on your own risk. Chances are
good you can restore you boot loader with <a
href="http://www.sysint.no/nedlasting/mbrfix.htm">mbrfix</a> if it breaks your boot loader.
<br /><br />
Btw: <a href="http://virtualbox.org">VirtualBox</a> is available under the GPL, and not only this makes it
much more sexy to work with, it is also much faster than VMWare, at
least that's my impression. There is also a commercial distribution of
VirtualBox.
]]>
</content>

</entry>
<entry>
<title mode="escaped">X11-xft, also for XMonad</title>
<author>
<name>clemens</name>
</author>
<link rel="alternate" type="text/html" href="http://clemens.endorphin.org/weblog/archives/2007-11.shtml#e2007-11-15T22_38_54.txt"/>
<id>http://clemens.endorphin.org/weblog/archives/2007-11.shtml#e2007-11-15T22_38_54.txt</id>
<issued>2007-11-15T22:38:54+01:00</issued>
<modified>2007-11-15T22:38:54+01:00</modified>
<created>2007-11-15T22:38:54+01:00</created>

<content type="application/xhtml+xml" xml:lang="en" xml:space="preserve" mode="escaped">
<![CDATA[
Haskell bindings for Xft are on their way. They don't cover 100% of
the API yet, because some of the API relies on the only briefly covered
 Xrender and FreeType APIs. But the whole thing is sufficiently usable
to get nice FreeType rendered fonts in xmonad! Here is the <a
href="http://clemens.endorphin.org/xmonad-on-xft.png">pr0n</a>.
<br /><br />
For the moment my Xft patch for xmonad only covers Tabbed.hs, so you
get Xft fonts in tab rendering. A few more pieces are missing in
Prompt.hs, but I'm sure this will be covered soon.
<pre>
darcs get http://clemens.endorphin.org/X11-xft/
</pre>
Enjoy.
]]>
</content>

</entry>
<entry>
<title mode="escaped">Depressing</title>
<author>
<name>clemens</name>
</author>
<link rel="alternate" type="text/html" href="http://clemens.endorphin.org/weblog/archives/2007-09.shtml#e2007-09-30T22_28_12.txt"/>
<id>http://clemens.endorphin.org/weblog/archives/2007-09.shtml#e2007-09-30T22_28_12.txt</id>
<issued>2007-09-30T22:28:12+01:00</issued>
<modified>2007-09-30T22:28:12+01:00</modified>
<created>2007-09-30T22:28:12+01:00</created>

<content type="application/xhtml+xml" xml:lang="en" xml:space="preserve" mode="escaped">
<![CDATA[
After the most expensive car check and maintenance in my car owner
history few weeks ago, my car died. Right in the middle of nowhere. And even worse,
on my way to ICFP07. 
<br /><br />
Unfortunately, most of my planning rests on having a car, as my
accommodation is not within Freiburg. Taking a plane/train to Freiburg
and renting a hotel is simply way over my budget. I hope to have a
working car by tomorrow, so I can make at least 50% use of my
registration. Otherwise the registration fee will become a write-off
in my books.
<br /><br />
As I got home (from the middle of nowhere -- story on its own), I was so frustrated that I started to hack C. Here is
an updated <a
href="http://clemens.endorphin.org/patches/xft-for-20070927.diff">XFT
patch</a> (aka anti-aliasing support) for ion-3rc-20070927. Check the
changes the patch does to your system.mk. 
<br /><br />
Yes, yes, I will switch to XMonad soon.
]]>
</content>

</entry>
<entry>
<title mode="escaped">Liskell Task List</title>
<author>
<name>clemens</name>
</author>
<link rel="alternate" type="text/html" href="http://clemens.endorphin.org/weblog/archives/2007-09.shtml#e2007-09-28T15_17_59.txt"/>
<id>http://clemens.endorphin.org/weblog/archives/2007-09.shtml#e2007-09-28T15_17_59.txt</id>
<issued>2007-09-28T15:17:59+01:00</issued>
<modified>2007-09-28T15:17:59+01:00</modified>
<created>2007-09-28T15:17:59+01:00</created>

<content type="application/xhtml+xml" xml:lang="en" xml:space="preserve" mode="escaped">
<![CDATA[
Liskell apparently has its first developer (next to me). I was surprised to see a
<a href="http://hwi.endorphin.org/pipermail/liskell-devel/2007-September/000009.html">post</a> on <a href="http://hwi.endorphin.org/mailman/listinfo/liskell-devel">liskell-devel</a> by Jason Miller that implements a macro to give
Liskell better syntactic support for monads. In pure Liskell, programming with monads looks like 
<pre>
(>>= (getEnv "HOME") 
     (lambda (homepath) 
       (>>= (readFile (++ homepath "/.foobarrc"))
            (lambda (content) 
              (process content)))))
</pre>
As you can see the indention level piles up when you have a cuple of
expressions.  Jason proposed an alternative syntax,
<pre>
(do
  (<- homepath (getEnv "HOME"))
  (<- content  (readFile (++ homepath "/.foobarrc")))
  (process content))
</pre>
He also posted the resulting macro code. I'm surprised and glad that
someone obviously can make sense of Liskell, even -- shame on me -- with the
little documentation I have made available.
<br /><br />
At the moment, I'm pondering about the future of Liskell. The simple
question how to support 'eval' lead to a series of other questions. I
shouldn't be surprised that an eval/apply mechanism magically
complicates things just as any potentially self referential construct
does. But before I start to chat about trouble with supporting eval, the
benefits from eval are just too obvious from the Lisp world, that
<i>Task #1 is to support eval at compile-time and run-time.</i>
<br /><br />
When using eval, you want the expression to evaluate in the current
module's compiler state, otherwise you would only be able to use bare naked
Liskell primitives expression without any syntax backed by parse tree
transformers. My current train of thinking goes into the direction of
modelling a compiler/universe state that pervades the boundary between
compile- and run-time. I might solve this by borrowing from Lisp
again. In the Lisp world, there are rarely object files nor linked
libraries (packages) as we have them in Haskell. The usual way of
conducting business is that you fire up a Lisp process and start to
load Lisp source files until you have all the code in the Lisp process
you need. Usually loading also compiles the code. When done, you dump
the hole process state to disk and reload it whenever you need to
restart the application. So, most Lisp dialects statically link the
code in the process image and -- more important -- there is no
distinction between compilation- and run-time. The state of the Lisp
process next to all the loaded code is also dumped and reloaded, hence
saved.
<br /><br />
This method can not be ported to Haskell easily. There is only a
limited state concept in a Haskell compiler. The source code visible
state -- I don't mean compilation/optimization/code generation options
here -- is only the scope or environment. Importing modules and
defining new top-level function/variables modifies the
environment. But we can only extend the environment with more
knowledge and also this knowledge that must not contradict existing
knowledge (redefine functions or give multi-line equations with
different types).
<br /><br />
As I was coding my <a
href="http://darcs.liskell.org/tech-demos/scheme/Scheme.lsk">little
toy Scheme compiler</a>, I recognized that I wanted to modify the
compiler state when certain modules were imported. I had in mind that
SchemeCore would bring in the basic Scheme syntax constructs such as
<tt>(define-scheme ...)</tt>. <tt>define-scheme</tt> defines functions
and variables with Scheme semantics separated in its own Scheme
sub-universe that Liskell code can enter via
<tt>runScheme</tt>. <tt>runScheme</tt> runs the SchemeMonad that
supports a global mutable environment, IO and also continuations -- so
callCC should be implementable here. Next to SchemeCore, I wanted to
create modules of Scheme code. When importing these modules, they
should modify the Scheme compiler state (not the Liskell/Haskell
compiler state) so that the Scheme functions compiled become part of
the global mutable environment. To make this vision reality, here is
<i>Task #2: Liskell should feature an extensible mutable compiler
state (LiskellMonad?)</i>
<br /><br />
The LiskellMonad -- 'the universe monad' that might replace and embed
IO -- should support another feature I love about Lisp: hot code
swapping or code replacement as the Erlang camp calls it. The
LiskellMonad should support to replace top level definitions with new
code. To keep things tidy, the basic idea is to revert all evaluated
WHNF to thunks that in some way depend on expression changed. This
approach guarantees a consistent universe. Without reverting to
thunks, you might have two top-level expressions <tt>(define x (f
3))</tt> and <tt>(define y (f 3))</tt> that end up with different WHNF,
for instance whenever x was evaluated before your change to the
function <tt>f</tt>. Of course, we can't allow that to happen in a
pure universe. <i>Task #3: allow mutable top-level definitions.</i>
<br /><br />
What we can't get right (at least not without a bit more work) is
crossing IO monad boundaries with that concept. Whenever you write the
result of <tt>(f 3)</tt> to a file and change the function <tt>f</tt>
later on, Liskell does not rerun the code that wrote the file content
(and also the user would be pretty surprised if it would do so). So by
definition, IO is a bit out of reach at the moment, but for a subclass
of IO operations we might be able to do it. These operations must not
have any visible side effects to the 'outside world', such as
putStr. If we exclude those operations, the only operations remain
that affect the 'inside world'. These IO operations could be rerun
quite easily, just think of Prelude.readFile, executing this twice
won't cause unintented behaviour. I'm not sure at the moment whether
this idea makes sense beyond Prelude.readFile, but it would have an
appealing similarity to STM's way of rerunning code.
<br /><br />
And last but not least, the packaging issue is not solved for
Liskell. Simon Peyton-Jones suggested to make Liskell a user of GHC
API. GHC API needs to be modified to make a good host for Liskell, and
as we all know, forming good APIs takes time and a fair bit of
discussion. As Liskell is too experimental to flesh out a stable set
of API requirements, I think that it is the best option to distribute
Liskell as a modification to GHC. These modifications are confined to
the 'ghc' package. Creating a fork of this package is the best option
for the moment. Liskell can shared base/rts and all the other core
and auxiliary packages with a GHC installation.
<br /><br />
I hope I can work through this task in the next few months. If you
have any reading suggestion with respect to existing design, I would
be happy for a few pointers.
<br /><br />
Ah and yes, for the next few days, I will be in Freiburg attending ICFP07.
]]>
</content>

</entry>
<entry>
<title mode="escaped">Stabilizing Firefox for beta quality plugins (Flash)</title>
<author>
<name>clemens</name>
</author>
<link rel="alternate" type="text/html" href="http://clemens.endorphin.org/weblog/archives/2007-09.shtml#e2007-09-25T20_54_32.txt"/>
<id>http://clemens.endorphin.org/weblog/archives/2007-09.shtml#e2007-09-25T20_54_32.txt</id>
<issued>2007-09-25T20:54:32+01:00</issued>
<modified>2007-09-25T20:54:32+01:00</modified>
<created>2007-09-25T20:54:32+01:00</created>

<content type="application/xhtml+xml" xml:lang="en" xml:space="preserve" mode="escaped">
<![CDATA[
Using the recent Adobe Flash plugin in Firefox is a two edged
sword. On one hand, it gives you the never ending joy of useless YouTube
videos, but on the other hand it crashes your browser every 24h on
average (only if you are also using <a
href="https://addons.mozilla.org/en-US/firefox/addon/433">Flashblocker</a>
which reduces flash content activation by 80%, namely all the annoying ads).
<br /><br />
Presumably because of Flash, <a
href="http://gwenole.beauchesne.info/en/projects/nspluginwrapper">nspluginwrapper</a>
was invented to wrap up software of vendors that are incapable of
producing 64-bit version of their product. nspluginwrapper works by
providing a proxy to Firefox that acts as regular plugin, but actually
spawns off a separate process that runs in 32-bit mode that links in
the shared object of the plugin. We can use this construction to
remove Flash from the intimate <tt>dlopen</tt> embracement of Firefox
and move all negative side effects of beta quality software into a
subprocess. The following trick works for all 32-bit browsers, whether
the rest of your distro is amd64 based or native i386. If you are
using a 64-bit browser, it's likely that you know nspluginwrapper
anyway, so this blog entry is about 32-bit to 32-bit.
<br /><br />
Grab a copy <a
href="http://gwenole.beauchesne.info/en/projects/nspluginwrapper#downloads">nspluginwrapper</a>
(at least 0.9.91.5). Untar it. Compile it under an i386
environment. If you don't have this at your disposal, here is it
precompiled from my local Gentoo installation: <a
href="http://clemens.endorphin.org/nspluginwrapper-0.9.91.5.tbz2">nspluginwrapper-0.9.91.5.tbz2</a>.
This is compiled for the amd64 arch layout of Gentoo. Under native
i386, just create a link from <tt>lib32</tt> to <tt>lib</tt> in
<tt>/usr</tt>.
<br /><br />
Now grab a copy of libflashplayer.so. Drop it into a directory that is
not part of your default Firefox plugin path and that does not contain the
substring 'netscape' in its absolute path.  So,
<tt>/opt/netscape/plugins/libflashplayer.so</tt> is wrong twice,
<tt>/usr/lib32/nsbrowser/plugins/libflashplayer.so</tt> is wrong only with respect to the default plugin path,
and <tt>/usr/lib32/nsbrowser/wrapped-plugins/libflashplayer.so</tt> is correct. 
<br /><br />
The reason why the path must not contain 'netscape' is that
libflashplayer.so presumes its part of a netscape installation when it
sees 'netscape' in its path and malfunctions for Flash movies as on
YouTube and Google Video under nspluginwrapper and Opera.
<br /><br />
Invoke <tt>/usr/lib32/nspluginwrapper/i386/linux/npconfig -i
/usr/lib32/nsbrowser/wrapped-plugins/libflashplayer.so</tt>. As super
user, this creates <tt>npwrapper.libflashplayer.so</tt> in
<tt>/usr/lib32/nsbrowser/plugins</tt>. Invoking this as normal user
drops this file into <tt>~/.mozilla/plugins</tt>. You are now read to
go with your new shielded Firefox. Check that it contains a Section
'Shockwave Flash' under <a href="about:plugins">about:plugins</a>
referring to the npwrapper.libflashplayer.so file. If it refers to
<tt>libflashplayer.so</tt> directly, you have a copy of <tt>libflashplayer.so</tt>
laying around in a plugin path.
<br /><br />
Flash might still cause lock ups in this setting. I presume Flash is
getting stuck in an endless loop keeping Firefox busy even through the
proxy. However, when that happens just kill the nspluginwrapper
subprocess called npviewer. After that Firefox should refresh and you
can just hit reload on Flash sites (instead of killing firefox and
reloading all websites). Good luck.
]]>
</content>

</entry>
<entry>
<title mode="escaped">QT RLE hits ffmpeg SVN</title>
<author>
<name>clemens</name>
</author>
<link rel="alternate" type="text/html" href="http://clemens.endorphin.org/weblog/archives/2007-09.shtml#e2007-09-11T15_31_53.txt"/>
<id>http://clemens.endorphin.org/weblog/archives/2007-09.shtml#e2007-09-11T15_31_53.txt</id>
<issued>2007-09-11T15:31:53+01:00</issued>
<modified>2007-09-11T15:31:53+01:00</modified>
<created>2007-09-11T15:31:53+01:00</created>

<content type="application/xhtml+xml" xml:lang="en" xml:space="preserve" mode="escaped">
<![CDATA[
My last drive-by-software-hacking turned out to be useful at the
end. I hacked up a basic QT RLE (aka Animation) encoder for ffmpeg,
sent the patch to ffmpeg-devel but without further intentions to work
on merging. Thanks go to Alexis Ballier for stepping up and refining
my patch until it was polished enough.
<br /><br />
With recent version of ffmpeg, you can create a 1280x1024 screencast
for your running X session at display :0.0 with
<br /><br />
<tt>
ffmpeg -f x11grab -s 1280x1024 -i :0.0 -f oss -i /dev/dsp -vcodec qtrle /tmp/lala.mov
</tt>
<br /><br />
after running configure 
<br /><br />
<tt>./configure --enable-gpl --enable-x11grab --enable-libfaad --enable-libfaac</tt>
<br /><br />
Unfortunately rgb555 encoding was removed, so you are only able to
create videos rgb32 video streams (aka 24-bit color depth).
]]>
</content>

</entry>
<entry>
<title mode="escaped">Lisplab.at dies</title>
<author>
<name>clemens</name>
</author>
<link rel="alternate" type="text/html" href="http://clemens.endorphin.org/weblog/archives/2007-05.shtml#e2007-05-18T10_53_19.txt"/>
<id>http://clemens.endorphin.org/weblog/archives/2007-05.shtml#e2007-05-18T10_53_19.txt</id>
<issued>2007-05-18T10:53:19+01:00</issued>
<modified>2007-05-18T10:53:19+01:00</modified>
<created>2007-05-18T10:53:19+01:00</created>

<content type="application/xhtml+xml" xml:lang="en" xml:space="preserve" mode="escaped">
<![CDATA[
<a href="http://www.lisplab.at">lisplab.at</a> dies in 3 days. I can't
justify spending 25 EURs on extending the domain subscription, as nobody of my co-developers showed any partical interested in fueling this social attractor. 
<br /><br />
If anyone is interested in reviving a Common Lisp developer group in
Austria, feel free to contact me (preferably before the 21th of May).
]]>
</content>

</entry>
<entry>
<title mode="escaped">Liskell at the International Lisp Conference 2007, Cambridge, UK</title>
<author>
<name>clemens</name>
</author>
<link rel="alternate" type="text/html" href="http://clemens.endorphin.org/weblog/archives/2007-05.shtml#e2007-05-17T20_05_30.txt"/>
<id>http://clemens.endorphin.org/weblog/archives/2007-05.shtml#e2007-05-17T20_05_30.txt</id>
<issued>2007-05-17T20:05:30+01:00</issued>
<modified>2007-05-17T20:05:30+01:00</modified>
<created>2007-05-17T20:05:30+01:00</created>
<dc:subject>Liskell</dc:subject>
<content type="application/xhtml+xml" xml:lang="en" xml:space="preserve" mode="escaped">
<![CDATA[
It's been over a month since I returned from Cambridge and still I
have not found time to blog an epilogue for this trip. 
<br /><br />
First, here is the material: 
<a href="http://clemens.endorphin.org/Liskell presentation-ILC 2007.mov.torrent">Liskell presentation-ILC 2007.mov.torrent</a>.
This is a screencast of my talk at the <a
href="http://www.international-lisp-conference.org/2007/index">International
Lisp Conference 2007</a>; one of the two presentations I have given in
Cambridge. Notice that this talk was prepared for a Lisp audience, so
my job was to highlight the features of Haskell.  The other talk in
Cambridge was at Microsoft Research and I plan to make this talk available in
a similar style (but with the objective to sell Lisp ideas to a
Haskell audience).
<br /><br />
A few remarks: <ul>
<li style="list-style: disc;">The implementation of cond as defmacro is a
pedagogical code mock-up. It operates on the wrong data structure. The
<a href="http://clemens.endorphin.org/ILC07-Liskell-draft.pdf">Liskell paper</a> has a correct implementation of cond as defmacro.</li>
<li style="list-style: disc;">There are a few errors in the codec stream for qtrle. For some
reasons, my recent sync with ffmpeg subversion HEAD caused this trouble. There
are only 3-4 errors, and they are usually corrected in a few seconds with the next P
frame in the stream.</li> 
<li style="list-style: disc;"><a href="http://www.gigavox.com/levelator">Levelator</a> rox. I spent
about 2 hours finding suitable settings for mastering my voice track
in Audacity with no useful results at all. The first try with Levelator was a perfect mastering. Lovely.</li>
<li style="list-style: disc;">The liskell-mode you see in this video is just a tiny minor mode wrapping haskell-mode with scheme indention. A video on how to set up this development environment is also on my todo list. Grab <a href="http://liskell.org/emacs/liskell-mode.el">liskell-mode.el</a>.</li></ul>
<a href="http://www.international-lisp-conference.org/2007/speakers#fruhwirth_clemens">Audio</a> and <a href="http://video.google.com/videoplay?docid=-3068792936936576299">video</a> recordings of the original session are available. But unfortunately, the video is incomplete and the quality is insufficient for reading anything from the projection, also the background noise of the audio recording is quite high. I recommend to download the screencast above. The slides and source code files are available <a href="http://clemens.endorphin.org/ilc-talk/">here</a>.
<br /><br />
And finally a few photos in <a href="http://flickr.com/groups/ilc07/pool/7669802@N02/">my semi-private flickr stream</a>.
]]>
</content>

</entry>
<entry>
<title mode="escaped">liskell.org</title>
<author>
<name>clemens</name>
</author>
<link rel="alternate" type="text/html" href="http://clemens.endorphin.org/weblog/archives/2007-05.shtml#e2007-05-14T13_47_47.txt"/>
<id>http://clemens.endorphin.org/weblog/archives/2007-05.shtml#e2007-05-14T13_47_47.txt</id>
<issued>2007-05-14T13:47:47+01:00</issued>
<modified>2007-05-14T13:47:47+01:00</modified>
<created>2007-05-14T13:47:47+01:00</created>
<dc:subject>Liskell</dc:subject>
<content type="application/xhtml+xml" xml:lang="en" xml:space="preserve" mode="escaped">
<![CDATA[
Liskell &#8212; my favorite Lisp+Haskell pet &#8212; has a new
website, namely <a
href="http://liskell.org">http://liskell.org</a>. There you will find
a new branch of Liskell based on GHC-6.6 and a new Liskell development mailing list <a
href="http://hwi.endorphin.org/mailman/listinfo/liskell-devel">liskell-devel@liskell.org</a>.
]]>
</content>

</entry>
<entry>
<title mode="escaped">Happy Birthday LUKS!</title>
<author>
<name>clemens</name>
</author>
<link rel="alternate" type="text/html" href="http://clemens.endorphin.org/weblog/archives/2007-05.shtml#e2007-05-07T09_55_25.txt"/>
<id>http://clemens.endorphin.org/weblog/archives/2007-05.shtml#e2007-05-07T09_55_25.txt</id>
<issued>2007-05-07T09:55:25+01:00</issued>
<modified>2007-05-07T09:55:25+01:00</modified>
<created>2007-05-07T09:55:25+01:00</created>

<content type="application/xhtml+xml" xml:lang="en" xml:space="preserve" mode="escaped">
<![CDATA[
Two years ago on the 25th of March 2005, I bumped the version of
cryptsetup-luks to 1.0. With the release of <a
href="http://luks.endorphin.org">cryptsetup-luks 1.0.5</a>, the LUKS
reference implementation -- and arguably LUKS itself -- is more than 2
years old! With this release, the LUKS branch of cryptsetup is
relabelled (in accordance with <a href="http://www.saout.de/misc/dm-crypt/">Christophe Saout</a>) and cryptsetup-luks
becomes the original cryptsetup.
<br /><br />
Number one hit on Google for "LUKS" was once the American painter <a
href="http://www.artnet.com/artist/674843/george-benjamin-luks.html">George
Luks</a>. I'm sorry George, but we have taken over. The term "LUKS" is
now a synonym for "Linux Unified Key Setup". LUKS is now part of any
major distribution, Debian includes it with their installation suite,
Gnome can talk to it via a HAL module. I am quite satisfied with my
first free software project, although my recent addiction to
Lisp/Haskell/<a href="http://liskell.org">Liskell</a> makes it a bit harder for me to code C.
<br /><br />
It's interesting, how live changes in just two years. It's interesting
how your personal interests change in just two years. I shifted my
attention from capital markets, to Lisp, to Genetic Programming, to
Typing, to Haskell, to <a href="http://liskell.org">Liskell</a>, to static reasoning about programs in
a non-turing complete language. "Making good cookies" and "world
domination" are the next on my list.
]]>
</content>

</entry>

</feed>
