Andreas Klöckner's web pagehttps://mathema.tician.de/2018-01-16T19:39:00-06:00The State of OpenCL for Scientific Computing in 20182018-01-16T19:39:00-06:002018-01-16T19:39:00-06:00Andreas Klöcknertag:mathema.tician.de,2018-01-16:/the-state-of-opencl-for-scientific-computing-in-2018<p>As someone who maintains a <a href="http://github.com/inducer">fair number of software
packages</a> that build, in one way or an other, on
OpenCL (and keeps creating more!), a friend recently asked me what I thought of
the state of the OpenCL ecosystem in 2018. In part, I am writing this to support
the …</p><p>As someone who maintains a <a href="http://github.com/inducer">fair number of software
packages</a> that build, in one way or an other, on
OpenCL (and keeps creating more!), a friend recently asked me what I thought of
the state of the OpenCL ecosystem in 2018. In part, I am writing this to support
the notion that it is healthier than one might assume. So, with that: here is
my personal, subjective view of how OpenCL is doing.</p>
<h2>OpenCL as a Standard</h2>
<p>First, to get one thing out of the way, independently of the state of concrete
implementations (which I’ll get to in a second), the OpenCL machine model makes
a great deal of sense (to me). It provides:</p>
<ul>
<li>Two heavily overdecomposed levels of parallelism (one for cores, the other for
vector lanes), with lightweight (“barely any”) synchronization.</li>
<li>A dependency graph between computations (“kernel invocations”) that are
submitted in large batches</li>
<li>Shared virtual memory. This means that memory handles are just pointers in the
host address space, and multiple devices and the host can access this memory
with potentially strong coherency guarantees. (This is in OpenCL 2, on devices
that support it.)</li>
<li>Just-in-time compilation</li>
</ul>
<p>Even while OpenCL is headed for its tenth birthday, that machine model still
maps very cleanly onto the multi-core CPUs and GPUs of today, and if you write
scientific computing code with code generation, there is hardly a better, more
coherent machine model that lets you target a broad class of machines. So even
if OpenCL were to not ‘make it’, the abstraction itself is likely to continue to
make sense for the foreseeable future. For instance, OpenCL and <span class="caps">CUDA</span> do not
differ by much except aside from spelling. <a href="http://libocca.org/"><span class="caps">OCCA</span></a> and
<a href="https://ispc.github.io/">ispc</a> expose much the same model. A very similar
computing environment can be assembled out of OpenMP’s core parallelism and
<code>#pragma simd</code>.</p>
<p>In addition, OpenCL-the-standard provides:</p>
<ul>
<li>A fairly complete set of transcendental functions that, typically, vectorize cleanly</li>
<li><a href="https://github.com/inducer/pyopencl">Easy access from Python</a> and interoperability
with numpy (<span class="caps">OK</span>, this one is a shameless plug)</li>
<li>Compared with many custom <span class="caps">JIT</span> solutions, OpenCL has fairly rigorous semantics,
so you’re not likely to be left guessing whether an implementation’s behavior
is correct or not.</li>
</ul>
<h2>Implementations</h2>
<p>A standard is only as good as its implementations—so what <em>is</em> the state of the
available OpenCL implementations? OpenCL is a large and complex specification,
so implementing it fully and correctly is a substantial effort.</p>
<p>A number of fairly recent developments have helped substantially in that regard:</p>
<ul>
<li><span class="caps">LLVM</span>’s built-in OpenCL support keeps improving</li>
<li>Khronos’ OpenCL conformance test suite became open-source and publicly available</li>
<li>Khronos’ OpenCL <span class="caps">ICD</span> loader has become open-source</li>
</ul>
<h3>Nvidia <span class="caps">GPU</span></h3>
<p>Nvidia’s OpenCL implementation is capable and generally works well.</p>
<p>Occasionally, one does get the impression that, as a vendor of a directly
competing solution (<span class="caps">CUDA</span>), Nvidia has a vested interest in crippling OpenCL
support on their devices: from lacking tool support (debugging, profiling) to
reports of performance differences from <span class="caps">CUDA</span> (in both directions!) to lagging
support for newer OpenCL versions, there is plenty that could be better.</p>
<p>That said, Nvidia’s leverage in this regard <em>may</em> be limited—surprisingly.</p>
<ul>
<li><span class="caps">POCL</span> (see below) has a proof-of-concept <span class="caps">CUDA</span> backend that uses Nvidia’s <span class="caps">CUDA</span>
APIs to implement OpenCL. With some work, this could be made actually useful.</li>
<li>There is ongoing work in the Linux graphics stack to support computation.
While there is substantial work to be done, this work has come very far in the
past few years.</li>
</ul>
<h3><span class="caps">AMD</span> <span class="caps">GPU</span></h3>
<p><span class="caps">AMD</span>’s brand-new open-source <a href="https://rocm.github.io/documentation.html">rocm</a>
stack has <em>just</em> become usable for me on Debian on Radeon R9 Fury <span class="caps">GPU</span>, now that
they’ve switched to shipping their kernel driver as a <span class="caps">DKMS</span> module. While I
haven’t done comprehensive performance measurements, it passed most of the
PyOpenCL test suite on the first attempt.</p>
<h3><span class="caps">POCL</span> <span class="caps">CPU</span></h3>
<p><a href="https://github.com/pocl/pocl"><span class="caps">POCL</span></a> is an <span class="caps">LLVM</span>-based OpenCL implementation for
(mainly) CPUs. It has just celebrated its 1.0 release. Most of all, it is
conformant and correct. My group builds and tests software mainly on <span class="caps">POCL</span>,
because it is easy to install on basically any machine (see below under
‘Shipping Software’).</p>
<p>Its vectorization performance varies from competitive to ‘needs work’, but in
general, code executes at least as fast as reasonably written C or Fortran code.
With work out of Intel on an outer-loop vectorizer for <span class="caps">LLVM</span>, this has the
potential for substantial improvement in the near future. <span class="caps">POCL</span> also integrates
the <a href="http://sleef.org/"><span class="caps">SLEEF</span></a> vectorized special function library.</p>
<h3>Intel Integrated GPUs</h3>
<p>Intel’s <a href="https://01.org/beignet">Beignet</a> implements <span class="caps">CL</span> for Linux on their
integrated GPUs. It passes most of the PyOpenCL test suite and performs well.</p>
<p><strong>Update June 2018:</strong> In early 2018, Intel has released an <em>additional</em> OpenCL <a href="https://github.com/intel/compute-runtime">compute runtime</a> for its “Gen” family of integrated
GPUs that supersedes Beignet for Broadwell (“Gen8”) and newer chips. I do not have
first-hand experience with this <span class="caps">ICD</span> yet, but since it is reportedly based on Intel’s
previously closed Windows <span class="caps">CL</span> runtime, I expect a mostly competent implementation.</p>
<h3>Apple <span class="caps">GPU</span>/<span class="caps">CPU</span></h3>
<p>While Apple originated the OpenCL standard, the implementations they ship are
borderline unusable due to bugs. For <span class="caps">CPU</span> work, <span class="caps">POCL</span> can be built on macOS with
little trouble (or see below under ‘Shipping Software’). For <span class="caps">GPU</span> work, Linux
provides a nicer environment.</p>
<p><strong>Update June 2018:</strong> Apple has deprecated OpenCL in favor of their own
graphics abstraction, Metal, that is unavailable on any other platform.</p>
<h3>Intel <span class="caps">CPU</span> (Updated August 2019)</h3>
<p>Intel has a (now open-source) <a href="https://github.com/intel/llvm/releases/tag/oclcpuexp-2019.8.7.0.0725_rel"><span class="caps">CPU</span> OpenCL
<span class="caps">ICD</span></a> that has
fairly competitive code generation. Based on file names, it appears that this is an
updated version of their <a href="https://software.intel.com/en-us/articles/opencl-driver">previous closed-source OpenCL <span class="caps">CPU</span>
<span class="caps">ICD</span></a>.
One unfortunate aspect of this implementation is
that it ships with a number of shared libraries that are very likely to clash with
other shared libraries already installed on your system. So, for use of this <span class="caps">ICD</span>,
make sure to configure (e.g.) the <code>$LD_LIBRARY_PATH</code> environment variable so as to
prefer the libraries shipped with the implementation over the system ones.
<a href="https://github.com/intel/llvm/issues/453">This bug</a> has discussion of this issue.</p>
<p>A previous version of this guide mentioned code generation bugs and crashes. I suspect
that was not true, and the crashes I observed instead due to the clashes with system
libraries noted above.</p>
<h2>Shipping Software</h2>
<p>Shipping software based on OpenCL sounds like it might be troublesome, since,
in addition to the actual software, a user must have an <span class="caps">ICD</span> loader
(<code>libOpenCL.so</code>) in addition to an <span class="caps">ICD</span> (the actual implementation).</p>
<p>This concern is mostly a thing of the past though. <a href="https://documen.tician.de/pyopencl/misc.html">Five easy shell
commands</a> install a usable
environment on Linux and macOS.</p>
<h2>The Future</h2>
<p>Recent news out of the OpenCL working group is that OpenCL might become
implementable on top of Vulkan, a graphics <span class="caps">API</span> that is rapidly gaining ubiquity,
by way of a single ‘shim’ <span class="caps">ICD</span> provided by the OpenCL working group. While this
is dependent on a number of future developments, it would make OpenCL support
essentially ubiquitous on all GPUs supporting Vulkan.</p>
<h2>Conclusions</h2>
<p>While OpenCL has been around for a while, many recent developments make me
optimistic for its future. If I missed anything, do let me know, and I would be
happy to add it here.</p>Nvidia Highlights PyCUDA/PyOpenCL Applications2016-02-14T13:18:00-06:002016-02-14T13:18:00-06:00Andreas Klöcknertag:mathema.tician.de,2016-02-14:/nvidia-coverage<p>Nvidia’s <a href="https://devblogs.nvidia.com/parallelforall/">Parallel Forall blog</a>
recently highlighted two applications that are using my <a href="/software/pyopencl">Python</a>
<a href="/software/pycuda"><span class="caps">HPC</span> packages</a> to accelerate their computational science workloads:</p>
<ul>
<li>
<p><a href="https://devblogs.nvidia.com/parallelforall/increasing-luminosity-beam-dynamics-gpus/">Increasing the Luminosity of Beam Dynamics with GPUs</a>,
a writeup of <a href="http://people.epfl.ch/adrian.oeftiger">Adrian Oeftiger</a>‘s work
on <span class="caps">CERN</span>’s <a href="https://github.com/PyCOMPLETE/PyHEADTAIL">PyHEADTAIL</a> code.</p>
</li>
<li>
<p><a href="https://devblogs.nvidia.com/parallelforall/open-reproducible-computational-chemistry-python-cuda/">Open, Reproducible Computational Chemistry with Python and <span class="caps">CUDA …</span></a></p></li></ul><p>Nvidia’s <a href="https://devblogs.nvidia.com/parallelforall/">Parallel Forall blog</a>
recently highlighted two applications that are using my <a href="/software/pyopencl">Python</a>
<a href="/software/pycuda"><span class="caps">HPC</span> packages</a> to accelerate their computational science workloads:</p>
<ul>
<li>
<p><a href="https://devblogs.nvidia.com/parallelforall/increasing-luminosity-beam-dynamics-gpus/">Increasing the Luminosity of Beam Dynamics with GPUs</a>,
a writeup of <a href="http://people.epfl.ch/adrian.oeftiger">Adrian Oeftiger</a>‘s work
on <span class="caps">CERN</span>’s <a href="https://github.com/PyCOMPLETE/PyHEADTAIL">PyHEADTAIL</a> code.</p>
</li>
<li>
<p><a href="https://devblogs.nvidia.com/parallelforall/open-reproducible-computational-chemistry-python-cuda/">Open, Reproducible Computational Chemistry with Python and <span class="caps">CUDA</span></a>
a writeup of <a href="http://www.mecanica.usm.cl/index.php/quienes-somos/10-profesores/42-christopher-cooper">Christopher Cooper</a>‘s work
on the <a href="https://github.com/barbagroup/pygbe">PyGBe</a> code.</p>
</li>
</ul>Tutorial: Domain Specific Languages and Code Generation in Python2015-11-25T18:55:00-06:002015-11-25T18:55:00-06:00Andreas Klöcknertag:mathema.tician.de,2015-11-25:/tutorial-dsl-codegen<p>At <a href="http://sc15.supercomputing.org"><span class="caps">SC15</span></a> last week I had the opportunity to
present a
<a href="http://sc15.supercomputing.org/schedule/event_detail-evid=tut174.html">tutorial</a> on
how to design, build, and compile your own domain-specific language using
Python. I am now releasing the tutorial material under a Creative Commons
license for the community to use and build on.</p>
<p><strong><a href="https://github.com/inducer/languages-and-codegen-tutorial">Browse tutorial</a></strong></p>
<p>Specifically, the material …</p><p>At <a href="http://sc15.supercomputing.org"><span class="caps">SC15</span></a> last week I had the opportunity to
present a
<a href="http://sc15.supercomputing.org/schedule/event_detail-evid=tut174.html">tutorial</a> on
how to design, build, and compile your own domain-specific language using
Python. I am now releasing the tutorial material under a Creative Commons
license for the community to use and build on.</p>
<p><strong><a href="https://github.com/inducer/languages-and-codegen-tutorial">Browse tutorial</a></strong></p>
<p>Specifically, the material covers:</p>
<ul>
<li>
<p>how to <strong>define</strong> mathematically-oriented <strong>domain-specific languages</strong> (“DSLs”) in Python</p>
</li>
<li>
<p>how to build <strong>transformations</strong> for your DSLs to take them from <strong>abstraction</strong> to
<strong>implementation</strong></p>
</li>
<li>
<p>how to generate highly efficient code from your domain-specific language</p>
</li>
<li>
<p>how to use <strong>just-in-time compilation</strong> with OpenCL from Python to <strong>execute
generated code</strong></p>
</li>
<li>
<p>a few existing <strong>design studies</strong> and <strong>use cases</strong> for domain-specific languages</p>
</li>
<li>
<p>how to use loopy to generate <strong>highly efficient code</strong> to work with <strong>array data</strong>
targeting <strong>heterogeneous processor architectures</strong> (CPUs/GPUs)</p>
</li>
</ul>
<p>A brief, generic introduction to Python and Numpy is also included for those
coming from other languages.</p>
<p>Using Github’s rendering of IPython/Jupyter notebooks, it’s quite easy (and
hopefully <em>fun</em>) to click around and browse the <strong><a href="https://github.com/inducer/languages-and-codegen-tutorial">source
repository</a></strong>.
A virtual machine image is also available to support experimentation with
the software tools being demonstrated.</p>
<p>I am making the material for this tutorial available under a Creative Commons
license for others to use and build on.</p>Dr. Dobb’s article series on PyOpenCL2013-11-14T16:10:00-06:002013-11-14T16:10:00-06:00Andreas Klöcknertag:mathema.tician.de,2013-11-14:/dr-dobbs-article-series-on-pyopencl<p>Gaston Hillar has written a very nice <a href="http://www.drdobbs.com/open-source/easy-opencl-with-python/240162614">introductory
article</a>
on using <a href="/software/pyopencl">PyOpenCL</a>, to be part of a two-part series. I’m
already looking forward to the second part. :)</p>
<p>If you’d like to try to follow along with the article, check out the <a href="http://wiki.tiker.net/OpenCLHowTo">OpenCL
installation howto</a>, then follow the easy …</p><p>Gaston Hillar has written a very nice <a href="http://www.drdobbs.com/open-source/easy-opencl-with-python/240162614">introductory
article</a>
on using <a href="/software/pyopencl">PyOpenCL</a>, to be part of a two-part series. I’m
already looking forward to the second part. :)</p>
<p>If you’d like to try to follow along with the article, check out the <a href="http://wiki.tiker.net/OpenCLHowTo">OpenCL
installation howto</a>, then follow the easy
<a href="http://wiki.tiker.net/PyOpenCL/Installation">installation instructions</a> for
PyOpenCL, and you’ll be in business. If you find that you need help in the
process, <a href="http://lists.tiker.net/listinfo/pyopencl">help</a> is
<a href="http://stackoverflow.com/questions/tagged/pyopencl">available</a>.</p>The Devil’s dictionary of programming2013-11-02T13:55:00-05:002013-11-02T13:55:00-05:00Andreas Klöcknertag:mathema.tician.de,2013-11-02:/the-devils-dictionary-of-programming<p>As someone who, on occasion, has created a
domain-specific-<a href="/software/hedge">language</a> or <a href="/software/loopy">two</a>, this
entry of the <a href="http://programmingisterrible.com/post/65781074112/devils-dictionary-of-programming">Devil’s Dictionary of
Programming</a>
hit close to home:</p>
<blockquote>
<p><span class="caps">DSL</span></p>
<p>A domain specific language, where code is written in one language and errors are given in another.</p>
</blockquote>
<p><a href="http://programmingisterrible.com/post/65781074112/devils-dictionary-of-programming">Link</a> (found on hacker news)</p>New (Py)OpenCL tutorial2013-09-17T20:10:21-05:002013-09-17T20:10:21-05:00Andreas Klöcknertag:mathema.tician.de,2013-09-17:/new-py-opencl-tutorial<p><a href="http://www.cs.bris.ac.uk/~simonm/">Simon McIntosh-Smith</a> from Bristol University just let me know that he and <a href="http://www.tomdeakin.com/">Tom Deakin</a> have published a new set of lecture slides and excercises (with solutions!) to teach (more generally) OpenCL and (specifically) PyOpenCL. I’ve added a link to this and a few older tutorials to </p>
<blockquote>
<p>PyOpenCL’s main …</p></blockquote><p><a href="http://www.cs.bris.ac.uk/~simonm/">Simon McIntosh-Smith</a> from Bristol University just let me know that he and <a href="http://www.tomdeakin.com/">Tom Deakin</a> have published a new set of lecture slides and excercises (with solutions!) to teach (more generally) OpenCL and (specifically) PyOpenCL. I’ve added a link to this and a few older tutorials to </p>
<blockquote>
<p>PyOpenCL’s main <a href="http://documen.tician.de/pyopencl">documentation page</a>.</p>
</blockquote>
<p>Simon requested that if you spot issues with the tutorials, you file them as issues <a href="https://github.com/HandsOnOpenCL/Lecture-Slides">on github</a>.</p>Quote of the day2013-05-03T09:14:38-05:002013-05-03T09:14:38-05:00Andreas Klöcknertag:mathema.tician.de,2013-05-03:/quote-of-the-day<p>Quote of the day:</p>
<blockquote>
<p>In Python 2.6, no one can hear you scream.</p>
</blockquote>
<p>(<a href="http://emptysquare.net/blog/another-thing-about-pythons-threadlocals/">source</a>) This reminds me of that one time when I was debugging some odd interaction between threading and contexts in PyCUDA. Never again, hopefully. :)</p>Job? UIUC!2013-03-21T14:58:29-05:002013-03-21T14:58:29-05:00Andreas Klöcknertag:mathema.tician.de,2013-03-21:/job-uiuc<div class="ak-left-float">
<p><img alt="UIUC logo" src="/images/uiuc-logo.png" /></p>
</div>
<p>After many long weeks (months, really) spent applying for and searching for the right job, white smoke! (sorry, couldn’t resist) I will be joining Luke Olson, Bill Gropp, Mike Heath and everyone else in the <a href="http://scicomp.cs.illinois.edu/index.html">Scientific Computing Group</a> at the <a href="http://cs.illinois.edu/">Computer Science Department</a> of the <a href="http://illinois.edu/">University of Illinois at …</a></p><div class="ak-left-float">
<p><img alt="UIUC logo" src="/images/uiuc-logo.png" /></p>
</div>
<p>After many long weeks (months, really) spent applying for and searching for the right job, white smoke! (sorry, couldn’t resist) I will be joining Luke Olson, Bill Gropp, Mike Heath and everyone else in the <a href="http://scicomp.cs.illinois.edu/index.html">Scientific Computing Group</a> at the <a href="http://cs.illinois.edu/">Computer Science Department</a> of the <a href="http://illinois.edu/">University of Illinois at Urbana-Champaign</a>. I’ll be moving out there sometime in July or August. I’m really excited.</p>
<p>Chambana, here I come! :)</p>GPUs and Python at PyData NYC 20122012-11-12T17:42:54-06:002012-11-12T17:42:54-06:00Andreas Klöcknertag:mathema.tician.de,2012-11-12:/gpus-and-python-at-pydata-nyc-2012<p>This October I had the honor of presenting my work on using Python with GPUs at <a href="https://nyc2012.pydata.org/">PyData <span class="caps">NYC</span> 2012</a>.</p>
<!--Here's a video of my talk:
<iframe src="https://player.vimeo.com/video/53052481?badge=0" width="500" height="281" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe>
-->
<p>There was also a panel discussion on Python+Parallel that I was a part of—great fun.</p>
<!--
<iframe src="https://player.vimeo.com/video/53108179?badge=0" width="500" height="281" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe>
-->
<p>Also be sure to check out all the videos of the <a href="https://vimeo.com/channels/pydata/">other great talks …</a></p><p>This October I had the honor of presenting my work on using Python with GPUs at <a href="https://nyc2012.pydata.org/">PyData <span class="caps">NYC</span> 2012</a>.</p>
<!--Here's a video of my talk:
<iframe src="https://player.vimeo.com/video/53052481?badge=0" width="500" height="281" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe>
-->
<p>There was also a panel discussion on Python+Parallel that I was a part of—great fun.</p>
<!--
<iframe src="https://player.vimeo.com/video/53108179?badge=0" width="500" height="281" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe>
-->
<p>Also be sure to check out all the videos of the <a href="https://vimeo.com/channels/pydata/">other great talks</a> to see what you’ve missed.</p>
<p>If this sounds interesting to you, also be sure to check out their next conference, <a href="https://sv2013.eventbrite.com/">PyData Silicon Valley 2013</a>. And please (continue to!) support <a href="http://numfocus.org/">NumFocus</a> and check out what <a href="http://www.continuum.io/">Continuum</a> are doing for big data in Python. They deserve a lot of credit for bringing the Python community together at events like PyData.</p>PyCUDA and PyOpenCL at Nvidia GTC 20102010-09-28T16:55:56-05:002010-09-28T16:55:56-05:00Andreas Klöcknertag:mathema.tician.de,2010-09-28:/pycuda-and-pyopencl-at-nvidia-gtc-2010<p>Like last year, I had the honor of being invited to present PyCUDA and PyOpenCL along with a few examples of their use to a great crowd at <a href="http://nvidia.com">Nvidia</a>‘s inaugural <a href="http://nvidia.com/gtc"><span class="caps">GPU</span> Technology Conference 2010</a>.</p>
<p><img alt="gtc-slide-1.png" src="/images/gtc-slide-1.png" /></p>
<p>Please click the following link to view the slides: <a href="/dl/main.pdf">PyCUDA and PyOpenCL at Nvidia <span class="caps">GTC …</span></a></p><p>Like last year, I had the honor of being invited to present PyCUDA and PyOpenCL along with a few examples of their use to a great crowd at <a href="http://nvidia.com">Nvidia</a>‘s inaugural <a href="http://nvidia.com/gtc"><span class="caps">GPU</span> Technology Conference 2010</a>.</p>
<p><img alt="gtc-slide-1.png" src="/images/gtc-slide-1.png" /></p>
<p>Please click the following link to view the slides: <a href="/dl/main.pdf">PyCUDA and PyOpenCL at Nvidia <span class="caps">GTC</span> 2010</a>.</p>
<p><strong>Update:</strong> Nvidia has posted a <a href="http://nvidia.fullviewmedia.com/gtc2010/0922-a3-2041.html">recording</a> of the session. There’s also a <a href="http://developer.download.nvidia.com/compute/cuda/docs/GTC_2010_Archives.htm">full list of sessions</a>, with many talks that are worth being watched. In particular, I’d like to recommend the ones by <a href="http://embedded.eecs.berkeley.edu/mescal/people/catanzaro.html">Bryan Catanzaro</a> on <a href="http://nvidia.fullviewmedia.com/gtc2010/0922-n-2050.html">Copperhead</a>, which is built on top of PyCUDA, by <a href="http://www.caam.rice.edu/~timwar">Tim Warburton</a> on <a href="http://nvidia.fullviewmedia.com/gtc2010/0922-san-jose-2078.html">all things <span class="caps">GPU</span>-based discontinuous Galerkin</a>. Also check out the <a href="http://www.nvidia.com/object/I24-Atomic-Hedgehog-Productive-High-Performance-Computing-with-Python.pdf">poster on Atomic Hedgehog</a> by Cyrus Omar.</p>
<h3>Attachments</h3>
<ul>
<li><a href="/dl/main.pdf">main.pdf</a></li>
</ul>PyCUDA at PyCon Quattro (Italy)2010-05-20T08:34:32-05:002010-05-20T08:34:32-05:00Andreas Klöcknertag:mathema.tician.de,2010-05-20:/pycuda-at-pycon-quattro-italy<p>At the recent PyCon Quattro, which took place in early May in the beautiful Tuscan city of Florence, Fabrizio Milo gave a talk on <a href="/software/pycuda">PyCUDA</a> entitled</p>
<blockquote>
<p><a href="http://www.pycon.it/conference/talks/pycuda-come-sfruttare-la-potenza-delle-schede-vide">PyCuda: Come sfruttare la potenza delle schede video nelle applicazioni python</a>
(PyCUDA: How to make use of the power of graphics cards in Python …</p></blockquote><p>At the recent PyCon Quattro, which took place in early May in the beautiful Tuscan city of Florence, Fabrizio Milo gave a talk on <a href="/software/pycuda">PyCUDA</a> entitled</p>
<blockquote>
<p><a href="http://www.pycon.it/conference/talks/pycuda-come-sfruttare-la-potenza-delle-schede-vide">PyCuda: Come sfruttare la potenza delle schede video nelle applicazioni python</a>
(PyCUDA: How to make use of the power of graphics cards in Python applications)</p>
</blockquote>
<p>He made a set of rather nice slides (in English), which may be of interest. They are downloadable in <span class="caps">PDF</span> form at the link.</p>
<p>Thanks Fabrizio for taking the time to talk about PyCUDA!</p>Putting the “Hard” in “Hardware”2010-02-20T12:15:04-06:002010-02-20T12:15:04-06:00Andreas Klöcknertag:mathema.tician.de,2010-02-20:/putting-the-hard-in-hardware<p>Quite often, I hear complaints that coding for GPUs is difficult. In response to such comments, I believe that, for correct perspective, the discussion needs to be framed somewhat differently.</p>
<p>First of all, squeezing the last drop of performance out of modern CPUs is hard, too. Here’s a nice …</p><p>Quite often, I hear complaints that coding for GPUs is difficult. In response to such comments, I believe that, for correct perspective, the discussion needs to be framed somewhat differently.</p>
<p>First of all, squeezing the last drop of performance out of modern CPUs is hard, too. Here’s a nice <a href="http://igoro.com/archive/gallery-of-processor-cache-effects/">article on cache effects</a> by Igor Ostrovsky that explains some of the phenomena one needs to take into account and the surprising things that can happen.</p>
<p>It just appears to me that on the <span class="caps">CPU</span>, fewer people <em>care</em> about good performance, whereas for GPUs, you admit that you do care simply by your choice of architecture. Not caring about <span class="caps">CPU</span> is not entirely unreasonable—you are somewhat likely to get ‘average’ performance even without detailed analyses. On the <span class="caps">GPU</span> on the other hand, carelessly written code is not as likely to perform well.</p>
<p>So, in summary, my belief is that both CPUs and GPUs can be equally difficult to understand, it’s just that the potential payoff of caring about performance is much greater on one than on the other.</p>Why is GPU Computing significant?2009-12-05T18:01:35-06:002009-12-05T18:01:35-06:00Andreas Klöcknertag:mathema.tician.de,2009-12-05:/why-is-gpu-computing-significant<p>In my opinion, <span class="caps">GPU</span> computing is significant because I—as a grad student—can easily afford a machine that allows me to perform a simulation like the following in 40 minutes instead of a whole workday. That’s why.</p>
<object width="500" height="218"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="https://vimeo.com/moogaloop.swf?clip_id=8005374&server=vimeo.com&show_title=0&show_byline=0&show_portrait=0&color=00ADEF&fullscreen=1" /><embed src="https://vimeo.com/moogaloop.swf?clip_id=8005374&server=vimeo.com&show_title=0&show_byline=0&show_portrait=0&color=00ADEF&fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="500" height="218"></embed></object>
<p>If you’re curious, this shows the density of a vortex …</p><p>In my opinion, <span class="caps">GPU</span> computing is significant because I—as a grad student—can easily afford a machine that allows me to perform a simulation like the following in 40 minutes instead of a whole workday. That’s why.</p>
<object width="500" height="218"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="https://vimeo.com/moogaloop.swf?clip_id=8005374&server=vimeo.com&show_title=0&show_byline=0&show_portrait=0&color=00ADEF&fullscreen=1" /><embed src="https://vimeo.com/moogaloop.swf?clip_id=8005374&server=vimeo.com&show_title=0&show_byline=0&show_portrait=0&color=00ADEF&fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="500" height="218"></embed></object>
<p>If you’re curious, this shows the density of a vortex shedding flow behind a square obstacle at Re=100 and Ma=0.1. The attentive viewer may notice a sound wave at the beginning as the system settles from uniform flow to flow around the obstacle, as well as the passing of a gentle density “nudge” intended to throw the system off balance and accelerate the onset of shedding. This was computed using my Discontinuous Galerkin solver <a href="/software/hedge">hedge</a> on an Nvidia <span class="caps">GTX</span> 260. </p>
<p>This work owes a lot to Hendrik Riedmann from <a href="http://www.iag.uni-stuttgart.de"><span class="caps">IAG</span>, Uni Stuttgart</a> who wrote the initial version of the Navier-Stokes operator in hedge.</p>
<p>(Btw: did you notice how the movie cleverly avoids the typical criticism of being “<span class="caps">CFD</span>”—<em>colorful</em> fluid dynamics? :-)</p>You are being preyed on2009-12-02T22:22:45-06:002009-12-02T22:22:45-06:00Andreas Klöcknertag:mathema.tician.de,2009-12-02:/you-are-being-preyed-on<p>Do you have a free checking account? A free credit card? Do you perhaps even get money back from your credit card company? Ever wonder who pays for all these freebies? This <a href="http://is.gd/5aJp5">Frontline report</a> (also embedded below) provides some answers and sheds light on the shady things going on in …</p><p>Do you have a free checking account? A free credit card? Do you perhaps even get money back from your credit card company? Ever wonder who pays for all these freebies? This <a href="http://is.gd/5aJp5">Frontline report</a> (also embedded below) provides some answers and sheds light on the shady things going on in <span class="caps">US</span> consumer banking.</p>
<script type="text/javascript" src="http://www.pbs.org/wgbh/pages/frontline/js/pap/embed.js?frol02c3592qcbb"></script>Submitted: PyCUDA: GPU Run-Time Code Generation for High-Performance Computing2009-11-26T10:12:13-06:002009-11-26T10:12:13-06:00Andreas Klöcknertag:mathema.tician.de,2009-11-26:/submitted-pycuda-gpu-run-time-code-generation-for-high-performance-computing<p><a href="http://pinto.scripts.mit.edu/">Nicolas Pinto</a>, <a href="http://www.eecs.berkeley.edu/~yunsup/">Yunsup Lee</a>, <a href="http://embedded.eecs.berkeley.edu/mescal/people/catanzaro.html">Bryan Catanzaro</a>, <a href="http://pirsquared.org/blog/">Paul Ivanov</a>, <a href="http://www.ece.osu.edu/~fasiha/">Ahmed Fasih</a> and I have recently submitted an article that explains how <a href="/software/pycuda">PyCUDA</a> allows the user to do <em>run-time code generation</em> (“<span class="caps">RTCG</span>”), and how that is an enormous boon to implementation efforts of most high-performance codes. Among many other things, PyCUDA also …</p><p><a href="http://pinto.scripts.mit.edu/">Nicolas Pinto</a>, <a href="http://www.eecs.berkeley.edu/~yunsup/">Yunsup Lee</a>, <a href="http://embedded.eecs.berkeley.edu/mescal/people/catanzaro.html">Bryan Catanzaro</a>, <a href="http://pirsquared.org/blog/">Paul Ivanov</a>, <a href="http://www.ece.osu.edu/~fasiha/">Ahmed Fasih</a> and I have recently submitted an article that explains how <a href="/software/pycuda">PyCUDA</a> allows the user to do <em>run-time code generation</em> (“<span class="caps">RTCG</span>”), and how that is an enormous boon to implementation efforts of most high-performance codes. Among many other things, PyCUDA also underlies our efforts to bring <a href="/node/476">discontinuous Galerkin <span class="caps">PDE</span> solvers onto the <span class="caps">GPU</span></a>.</p>
<p>Get it while it’s hot: <a href="http://arxiv.org/abs/0911.3456">Arxiv</a>, <a href="http://www.dam.brown.edu/scicomp/reports/2009-40/">Brown <span class="caps">SC</span></a></p>
<p><strong>Update:</strong> Fixed arXiv link.</p>
<h2>Abstract</h2>
<p>High-performance scientific computing has recently seen a surge of interest in heterogeneous systems, with an emphasis on modern Graphics Processing Units (GPUs). These devices offer tremendous potential for performance and efficiency in important large-scale applications of computational science. However, exploiting this potential can be challenging, as one must adapt to the specialized and rapidly evolving computing environment currently exhibited by GPUs. One way of addressing this challenge is to embrace better techniques and develop tools tailored to their needs. This article presents one simple technique, <span class="caps">GPU</span> run-time code generation (<span class="caps">RTCG</span>), and PyCUDA, an open-source toolkit that supports this technique.</p>
<p>In introducing PyCUDA, this article proposes the combination of a dynamic, high-level scripting language with the massive performance of a <span class="caps">GPU</span> as a compelling two-tiered computing platform, potentially offering significant performance and productivity advantages over conventional single-tier, static systems. It is further observed that, compared to competing techniques, the effort required to create codes using run-time code generation with PyCUDA grows more gently in response to growing needs. The concept of <span class="caps">RTCG</span> is simple and easily implemented using existing, robust tools. Nonetheless it is powerful enough to support (and encourage) the creation of custom application-specific tools by its users. The premise of the paper is illustrated by a wide range of examples where the technique has been applied with considerable success. </p>PyCUDA talk at Nvidia’s GPU Technology Conference2009-10-04T16:20:11-05:002009-10-04T16:20:11-05:00Andreas Klöcknertag:mathema.tician.de,2009-10-04:/pycuda-talk-at-nvidias-gpu-technology-conference<p>This past week, I had the honor of presenting a talk on <a href="/software/pycuda">PyCUDA</a> at <a href="http://nvidia.com">Nvidia</a>‘s inaugural <a href="http://nvidia.com/gtc"><span class="caps">GPU</span> Technology Conference</a>.</p>
<p><img alt="pycuda-nvidia.png" src="/images/pycuda-nvidia.png" /></p>
<p>Please click the following link to view the slides: <a href="/dl/pycuda-nvidia.pdf">PyCUDA talk at Nvidia’s <span class="caps">GPU</span> Technology Conference</a>.</p>
<p><strong>Update:</strong> Nvidia has posted a <a href="http://nvidia.fullviewmedia.com/GPU2009/1002-empire-1400.html">recording</a> of the session that you may watch …</p><p>This past week, I had the honor of presenting a talk on <a href="/software/pycuda">PyCUDA</a> at <a href="http://nvidia.com">Nvidia</a>‘s inaugural <a href="http://nvidia.com/gtc"><span class="caps">GPU</span> Technology Conference</a>.</p>
<p><img alt="pycuda-nvidia.png" src="/images/pycuda-nvidia.png" /></p>
<p>Please click the following link to view the slides: <a href="/dl/pycuda-nvidia.pdf">PyCUDA talk at Nvidia’s <span class="caps">GPU</span> Technology Conference</a>.</p>
<p><strong>Update:</strong> Nvidia has posted a <a href="http://nvidia.fullviewmedia.com/GPU2009/1002-empire-1400.html">recording</a> of the session that you may watch or <a href="http://www.nvidia.com/content/GTC/videos/GTC09-1400.flv">download</a>.</p>
<p><strong>Update 2:</strong> Giancarlo Colasante has transcoded the above video into just 16 <span class="caps">MB</span>. You may download the resulting <a href="/dl/pub/nvidia-gtc-2009.mp4">video</a> here.</p>
<h3>Attachments</h3>
<ul>
<li><a href="/dl/pycuda-nvidia.pdf">pycuda-nvidia.pdf</a></li>
</ul>Nena vs Eminem2009-09-05T10:27:14-05:002009-09-05T10:27:14-05:00Andreas Klöcknertag:mathema.tician.de,2009-09-05:/nena-vs-eminem<p>Is it possible to take the instrumentals from one track, the vocals from another, and come up with something that you’d actually want to listen to? Turns out yes:</p>
<object width="320" height="100"><param name="movie" value="https://www.youtube.com/v/cYKq2f2-N-4&hl=de&fs=1&rel=0"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="https://www.youtube.com/v/cYKq2f2-N-4&hl=de&fs=1&rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="320" height="100"></embed></object>
<p>Amazing what computers can do these days. (via <a href="http://layer-acht.org/blog/debian/">Holger Levsen</a>)</p>
<p><a href="https://www.youtube.com/watch?v=xFYQQPAOz7Y">Original 1</a>, <a href="https://www.youtube.com/watch?v=gXmTezTWnXY">Original 2</a>.</p>SciPy‘09: Advanced Tutorial on PyCUDA2009-08-25T11:23:03-05:002009-08-25T11:23:03-05:00Andreas Klöcknertag:mathema.tician.de,2009-08-25:/scipy09-advanced-tutorial-on-pycuda<p>The <a href="http://conference.scipy.org/">SciPy‘09 conference</a> ended less than a week ago. At the invitation of the SciPy‘09 organizers (especially <a href="https://cirl.berkeley.edu/fperez/index.html">Fernando Perez</a>), <a href="http://pinto.scripts.mit.edu/">Nicolas Pinto</a> gave a talk in the <a href="http://conference.scipy.org/advanced_tutorials">Advanced Tutorials track</a> on how to use <a href="/software/pycuda">PyCUDA</a> to do <span class="caps">GPU</span> scripting.</p>
<p>First, I would like to use this opportunity to publicly …</p><p>The <a href="http://conference.scipy.org/">SciPy‘09 conference</a> ended less than a week ago. At the invitation of the SciPy‘09 organizers (especially <a href="https://cirl.berkeley.edu/fperez/index.html">Fernando Perez</a>), <a href="http://pinto.scripts.mit.edu/">Nicolas Pinto</a> gave a talk in the <a href="http://conference.scipy.org/advanced_tutorials">Advanced Tutorials track</a> on how to use <a href="/software/pycuda">PyCUDA</a> to do <span class="caps">GPU</span> scripting.</p>
<p>First, I would like to use this opportunity to publicly thank Nicolas for all the work and time he put into making this tutorial a reality. Second, I would like to point out the <a href="http://www.archive.org/details/scipy09_advancedTutorial_7">video</a> of his session, which you can watch below:</p>
<p><embed type="application/x-shockwave-flash" width="500" height="400" allowfullscreen="true" allowscriptaccess="always" src="http://www.archive.org/flow/flowplayer.commercial-3.0.5.swf" w3c="true" flashvars='config={"key":"#$b6eb72a0f2f1e29f3d4","playlist":[{"url":"http://www.archive.org/download/scipy09_advancedTutorial_7/format=Thumbnail?.jpg","autoPlay":true,"scaling":"fit"},{"url":"http://www.archive.org/download/scipy09_advancedTutorial_7/scipy09_advancedTutorial_7_512kb.mp4","autoPlay":false,"accelerated":true,"scaling":"fit","provider":"h264streaming"}],"clip":{"autoPlay":false,"accelerated":true,"scaling":"fit","provider":"h264streaming"},"canvas":{"backgroundColor":"0x000000","backgroundGradient":"none"},"plugins":{"audio":{"url":"http://www.archive.org/flow/flowplayer.audio-3.0.3-dev.swf"},"controls":{"playlist":false,"fullscreen":true,"gloss":"high","backgroundColor":"0x000000","backgroundGradient":"medium","sliderColor":"0x777777","progressColor":"0x777777","timeColor":"0xeeeeee","durationColor":"0x01DAFF","buttonColor":"0x333333","buttonOverColor":"0x505050"},"h264streaming":{"url":"http://www.archive.org/flow/flowplayer.h264streaming-3.0.5.swf"}},"contextMenu":[{"Item scipy09_advancedTutorial_7 at archive.org":"function()"},"-","Flowplayer 3.0.5"]}'> </embed></p>Introducing UIH: Math + Unicode, Happy Together2009-06-10T21:04:22-05:002009-06-10T21:04:22-05:00Andreas Klöcknertag:mathema.tician.de,2009-06-10:/introducing-uih-math-unicode-happy-together<p>As a math person, you’re often faced with the task of communicating about math. Unfortunately, most modern means of communication, be it email, the web or instant messages, aren’t really suited to typing math. Fortunately, however, many of these means <em>do</em> allow the use of <a href="http://www.unicode.org">Unicode</a>, and Unicode …</p><p>As a math person, you’re often faced with the task of communicating about math. Unfortunately, most modern means of communication, be it email, the web or instant messages, aren’t really suited to typing math. Fortunately, however, many of these means <em>do</em> allow the use of <a href="http://www.unicode.org">Unicode</a>, and Unicode allows for certain limited forms of mathematical typography.</p>
<p>Putting Unicode formulas together usually requires a fair amount of patience and some quality time with your favorite <a href="http://gucharmap.sourceforge.net/">character map application</a>. But now there’s an easier way: The <em>Unicode Input Helper</em>—or “<span class="caps">UIH</span>”. Here’s an image of it in action:</p>
<p><img alt="uih-screenshot.png" src="/images/uih-screenshot.png" /></p>
<p>Using it, you may use <a href="http://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references"><span class="caps">HTML</span> entity names</a> with backslashes (such as <code>\int</code> for an integral) to put together the basics of a formula, and then use a searchable list of all known Unicode characters to add the finishing touches. The screenshot gives you an idea. Once you’ve finished your masterpiece, simply use your computer’s copy-and-paste function to get it to where it needs to be.</p>
<p><center><a href="http://github.com/inducer/uih">Download the most recent version of <span class="caps">UIH</span></a></center></p>
<p>(Like <a href="/software/pudb">PuDB</a>, <code>uih</code> requires Ian Ward’s <a href="http://excess.org/urwid">urwid</a> library.)</p>
<p>As a side benefit, I think <code>uih</code> makes for a nice replacement for pretty much every character map program—but its original purpose was easy typing of math. </p>Debug Python in Style2009-06-09T18:39:06-05:002009-06-09T18:39:06-05:00Andreas Klöcknertag:mathema.tician.de,2009-06-09:/debug-python-in-style<p>I’m happy to introduce <a href="http://pypi.python.org/pypi/pudb">PuDB</a>, a full-screen, console-based visual debugger for Python that I recently cooked up.</p>
<p><center><a href="http://pypi.python.org/pypi/pudb">Download it here</a></center></p>
<p>Or install it simply by typing</p>
<pre><code>easy_install pudb
</code></pre>
<p>into your Unix shell. Here’s a screenshot of it in action:</p>
<p><img alt="PuDB screenshot" src="http://tiker.net/pub/pudb-screenshot.png" /></p>
<p>Python has had decent debugging support for a while …</p><p>I’m happy to introduce <a href="http://pypi.python.org/pypi/pudb">PuDB</a>, a full-screen, console-based visual debugger for Python that I recently cooked up.</p>
<p><center><a href="http://pypi.python.org/pypi/pudb">Download it here</a></center></p>
<p>Or install it simply by typing</p>
<pre><code>easy_install pudb
</code></pre>
<p>into your Unix shell. Here’s a screenshot of it in action:</p>
<p><img alt="PuDB screenshot" src="http://tiker.net/pub/pudb-screenshot.png" /></p>
<p>Python has had decent debugging support for a while now, in the form of</p>
<ul>
<li><a href="http://docs.python.org/library/pdb.html">Pdb</a>, the command-line debugger that comes with the interpreter</li>
<li><a href="http://winpdb.org">Winpdb</a>, a very nice <span class="caps">GUI</span> debugger</li>
<li>IDEs such as <a href="http://eric-ide.python-projects.org/">Eric</a></li>
</ul>
<p>But I felt that there was a gap between these offerings—Pdb being very austere, and Winpdb and the IDEs being rather heavyweight. I wanted a comfortable debugger that’s easily usable in a shell and doesn’t require me to touch my mouse. PuDB uses Ian Ward’s excellent <a href="http://excess.org/urwid">Urwid</a> library for its interaction with the console.</p>
<p><strong>Update:</strong> Looks like PuDB is slowly growing a community. There’s now a <a href="http://lists.tiker.net/listinfo/pudb">mailing list</a> to host discussions.</p>Git Commit Timelines2009-06-01T14:39:18-05:002009-06-01T14:39:18-05:00Andreas Klöcknertag:mathema.tician.de,2009-06-01:/git-commit-timelines<p>Here’s a waste of time I could just not resist: <a href="http://web.mit.edu"><span class="caps">MIT</span></a>‘s <a href="http://simile.mit.edu/">Project <span class="caps">SIMILE</span></a> has released a rather nice <a href="http://simile-widgets.org/timeline/">Timeline Web Widget</a>. Combine that with <a href="http://pypi.python.org/pypi/GitPython/">GitPython</a> and a bit of glue code in Python, and you get a neat, one-page <a href="http://git.tiker.net/commit-timeline">summary</a> of the software work I’ve done as …</p><p>Here’s a waste of time I could just not resist: <a href="http://web.mit.edu"><span class="caps">MIT</span></a>‘s <a href="http://simile.mit.edu/">Project <span class="caps">SIMILE</span></a> has released a rather nice <a href="http://simile-widgets.org/timeline/">Timeline Web Widget</a>. Combine that with <a href="http://pypi.python.org/pypi/GitPython/">GitPython</a> and a bit of glue code in Python, and you get a neat, one-page <a href="http://git.tiker.net/commit-timeline">summary</a> of the software work I’ve done as part of working towards my PhD. Here’s a screenshot if you’re too lazy to click through:</p>
<p><img alt="timeline-shot.png" src="/images/timeline-shot.png" /></p>
<p>Note that (nearly) every commit is hyperlinked to the git web frontend, where you can view what was actually changed—just click the title text in the popup bubble.</p>
<p>If you’d like to do this yourself, the code is <a href="http://git.tiker.net/commit-timeline.git">available</a>, you can get it with</p>
<pre><code>git clone http://git.tiker.net/trees/commit-timeline.git
</code></pre>1 Billion seconds on this Earth2009-04-13T12:45:43-05:002009-04-13T12:45:43-05:00Andreas Klöcknertag:mathema.tician.de,2009-04-13:/1-billion-seconds-on-this-earth<p>Happy 10<sup>9</sup>-day to me!</p>
<pre><code>date -d'NNNN-NN-NN + 1000000000 seconds'
Mo 13. Apr 01:46:40 EDT 2009
</code></pre>World Builder2009-04-04T13:01:27-05:002009-04-04T13:01:27-05:00Andreas Klöcknertag:mathema.tician.de,2009-04-04:/world-builder<p>From the department of “what’s Andreas wacthing on <a href="https://vimeo.com">Vimeo</a>“: Here’s something amazing you can apparently do with one day of filming and two years of post-production.</p>
<object width="400" height="300"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="https://vimeo.com/moogaloop.swf?clip_id=3365942&server=vimeo.com&show_title=1&show_byline=1&show_portrait=0&color=&fullscreen=1" /><embed src="https://vimeo.com/moogaloop.swf?clip_id=3365942&server=vimeo.com&show_title=1&show_byline=1&show_portrait=0&color=&fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"></embed></object>
<p><a href="https://vimeo.com/3365942">World Builder</a> from <a href="https://vimeo.com/user1349603">Bruce Branit</a> on <a href="https://vimeo.com">Vimeo</a>.</p>
<p>One thing I could especially relate to about this video is the feeling of time-constrained …</p><p>From the department of “what’s Andreas wacthing on <a href="https://vimeo.com">Vimeo</a>“: Here’s something amazing you can apparently do with one day of filming and two years of post-production.</p>
<object width="400" height="300"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="https://vimeo.com/moogaloop.swf?clip_id=3365942&server=vimeo.com&show_title=1&show_byline=1&show_portrait=0&color=&fullscreen=1" /><embed src="https://vimeo.com/moogaloop.swf?clip_id=3365942&server=vimeo.com&show_title=1&show_byline=1&show_portrait=0&color=&fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"></embed></object>
<p><a href="https://vimeo.com/3365942">World Builder</a> from <a href="https://vimeo.com/user1349603">Bruce Branit</a> on <a href="https://vimeo.com">Vimeo</a>.</p>
<p>One thing I could especially relate to about this video is the feeling of time-constrained emptiness at the beginning… If you’ve tinkered with creating video games, you probably know what I’m talking about. Research is somehow not too different.</p>
<p><br /></p>Credit Crisis? What Credit Crisis?2009-04-04T11:01:52-05:002009-04-04T11:01:52-05:00Andreas Klöcknertag:mathema.tician.de,2009-04-04:/credit-crisis-what-credit-crisis<p>If you haven’t been living under a rock, you’ve probably heard about the global economic meltdown. You’ll probably have also listened to people explain it, maybe even understood what’s going on. Regardless, this video I recently found sums it up again <em>very</em> nicely:</p>
<object width="400" height="300"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="https://vimeo.com/moogaloop.swf?clip_id=3261363&server=vimeo.com&show_title=1&show_byline=1&show_portrait=0&color=&fullscreen=1" /><embed src="https://vimeo.com/moogaloop.swf?clip_id=3261363&server=vimeo.com&show_title=1&show_byline=1&show_portrait=0&color=&fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"></embed></object>
<p><a href="https://vimeo.com/3261363">The Crisis of …</a></p><p>If you haven’t been living under a rock, you’ve probably heard about the global economic meltdown. You’ll probably have also listened to people explain it, maybe even understood what’s going on. Regardless, this video I recently found sums it up again <em>very</em> nicely:</p>
<object width="400" height="300"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="https://vimeo.com/moogaloop.swf?clip_id=3261363&server=vimeo.com&show_title=1&show_byline=1&show_portrait=0&color=&fullscreen=1" /><embed src="https://vimeo.com/moogaloop.swf?clip_id=3261363&server=vimeo.com&show_title=1&show_byline=1&show_portrait=0&color=&fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"></embed></object>
<p><a href="https://vimeo.com/3261363">The Crisis of Credit Visualized</a> from <a href="https://vimeo.com/jonathanjarvis">Jonathan Jarvis</a> on <a href="https://vimeo.com">Vimeo</a>.</p>
<p><br /></p>boostmpi: Initial Release2009-02-11T11:28:36-06:002009-02-11T11:28:36-06:00Andreas Klöcknertag:mathema.tician.de,2009-02-11:/boostmpi-initial-release<p>I’m happy to announce the initial public release of <a href="/software/boostmpi">boostmpi</a>, an <span class="caps">MPI</span> wrapper for Python.</p>
<p>boostmpi is a high-quality Python wrapper around the <a href="http://www.mpi-forum.org">Message Passing Interface</a> (<span class="caps">MPI</span>). <span class="caps">MPI</span> is a standardized interface to libraries such as <a href="http://www.open-mpi.org">OpenMPI</a> and <a href="http://www.mcs.anl.gov/research/projects/mpich2/"><span class="caps">MPICH</span></a> that provide high-performance inter-process communication for distributed-memory computing.</p>
<p>boostmpi uses …</p><p>I’m happy to announce the initial public release of <a href="/software/boostmpi">boostmpi</a>, an <span class="caps">MPI</span> wrapper for Python.</p>
<p>boostmpi is a high-quality Python wrapper around the <a href="http://www.mpi-forum.org">Message Passing Interface</a> (<span class="caps">MPI</span>). <span class="caps">MPI</span> is a standardized interface to libraries such as <a href="http://www.open-mpi.org">OpenMPI</a> and <a href="http://www.mcs.anl.gov/research/projects/mpich2/"><span class="caps">MPICH</span></a> that provide high-performance inter-process communication for distributed-memory computing.</p>
<p>boostmpi uses the <a href="http://www.boost.org/doc/html/mpi.html">Boost.<span class="caps">MPI</span> library</a>, which gives <span class="caps">MPI</span> a very usable C++ interface. This C++ interface is then made accessible to Python via the <a href="http://www.boost.org/doc/libs/release/libs/python/doc/">Boost.Python library</a>.</p>
<p>boostmpi was originally distributed as part of the <a href="http://boost.org">Boost C++ library</a>. This separate distribution aims to make the software more accessible.</p>
<p><strong>Disclaimer:</strong> boostmpi (born as Boost.<span class="caps">MPI</span>.Python) is the work of <a href="http://www.osl.iu.edu/~dgregor/">Doug Gregor</a>. I just do maintenance and distribution work around here.</p>CodePy: Initial public Release2009-02-05T00:58:50-06:002009-02-05T00:58:50-06:00Andreas Klöcknertag:mathema.tician.de,2009-02-05:/codepy-initial-public-release<p>I’m happy to announce the initial public release of <a href="/software/codepy">CodePy</a>, a
native-code <a href="http://en.wikipedia.org/wiki/Metaprogramming">Metaprogramming</a> toolkit for Python.</p>
<p>The idea is the following:</p>
<ul>
<li>You build a string that is actually C code.</li>
<li>CodePy compiles it, links it, and dynamically loads it into the Python interpreter.</li>
</ul>
<p>Ta-da: Instant native-code performance, with no …</p><p>I’m happy to announce the initial public release of <a href="/software/codepy">CodePy</a>, a
native-code <a href="http://en.wikipedia.org/wiki/Metaprogramming">Metaprogramming</a> toolkit for Python.</p>
<p>The idea is the following:</p>
<ul>
<li>You build a string that is actually C code.</li>
<li>CodePy compiles it, links it, and dynamically loads it into the Python interpreter.</li>
</ul>
<p>Ta-da: Instant native-code performance, with no explicit pre-compilation step. CodePy can also help you with the generation of the code, by letting you build a data structure and turning that into C code. CodePy works well with Boost.Python and <a href="/software/pycuda">PyCuda</a>. In conjunction with the latter, it offers an easy way of doing <span class="caps">GPU</span> Metaprogramming, a very effective tuning technique for the <span class="caps">GPU</span>.</p>Talk slides: PyCuda@MIT2009-01-28T14:14:08-06:002009-01-28T14:14:08-06:00Andreas Klöcknertag:mathema.tician.de,2009-01-28:/talk-slides-pycuda-mit<p><a href="http://pinto.scripts.mit.edu/">Nicolas Pinto</a> at <span class="caps">MIT</span> was nice enough to invite me over to give a talk in their <a href="http://sites.google.com/site/cudaiap2009/"><span class="caps">CUDA</span> class</a>. I made a bunch of slides that I think are of general interest to people who are interested in PyCuda. You can find them <a href="/dl/pub/pycuda-mit.pdf">here</a>.</p>Submitted: “Nodal Discontinuous Galerkin Methods on Graphics Processors”2009-01-27T19:19:47-06:002009-01-27T19:19:47-06:00Andreas Klöcknertag:mathema.tician.de,2009-01-27:/submitted-nodal-discontinuous-galerkin-methods-on-graphics-processors<p><a href="http://www.caam.rice.edu/~timwar/">Tim Warburton</a>, Jeff Bridge, my advisor <a href="http://www.cfm.brown.edu/people/jansh">Jan Hesthaven</a> and I have recently submitted an article detailing our efforts to accelerate Discontinuous Galerkin computations by using <a href="http://nvidia.com/cuda">Nvidia <span class="caps">CUDA</span></a> GPUs. <span class="caps">DG</span> seems to be a good fit for these machines.</p>
<p>Get it while it’s hot: <a href="http://arxiv.org/abs/0901.1024">Arxiv</a>, <a href="http://www.dam.brown.edu/scicomp/reports/2008-27/">Brown <span class="caps">SC</span> reports</a>, <a href="http://dx.doi.org/10.1016/j.jcp.2009.06.041"><span class="caps">JCP</span></a></p>
<h2>Abstract …</h2><p><a href="http://www.caam.rice.edu/~timwar/">Tim Warburton</a>, Jeff Bridge, my advisor <a href="http://www.cfm.brown.edu/people/jansh">Jan Hesthaven</a> and I have recently submitted an article detailing our efforts to accelerate Discontinuous Galerkin computations by using <a href="http://nvidia.com/cuda">Nvidia <span class="caps">CUDA</span></a> GPUs. <span class="caps">DG</span> seems to be a good fit for these machines.</p>
<p>Get it while it’s hot: <a href="http://arxiv.org/abs/0901.1024">Arxiv</a>, <a href="http://www.dam.brown.edu/scicomp/reports/2008-27/">Brown <span class="caps">SC</span> reports</a>, <a href="http://dx.doi.org/10.1016/j.jcp.2009.06.041"><span class="caps">JCP</span></a></p>
<h2>Abstract</h2>
<p>Discontinuous Galerkin (<span class="caps">DG</span>) methods for the numerical solution of partial differential equations have enjoyed considerable success because they are both flexible and robust: They allow arbitrary unstructured geometries and easy control of accuracy without compromising simulation stability. Lately, another property of <span class="caps">DG</span> has been growing in importance: The majority of a <span class="caps">DG</span> operator is applied in an element-local way, with weak penalty-based element-to-element coupling.</p>
<p>The resulting locality in memory access is one of the factors that enables <span class="caps">DG</span> to run on off-the-shelf, massively parallel graphics processors (GPUs). In addition, <span class="caps">DG</span>’s high-order nature lets it require fewer data points per represented wavelength and hence fewer memory accesses, in exchange for higher arithmetic intensity. Both of these factors work significantly in favor of a <span class="caps">GPU</span> implementation of <span class="caps">DG</span>.</p>
<p>Using a single <span class="caps">US</span>$400 Nvidia <span class="caps">GTX</span> 280 <span class="caps">GPU</span>, we accelerate a solver for Maxwell’s equations on a general 3D unstructured grid by a factor of 40 to 60 relative to a serial computation on a current-generation <span class="caps">CPU</span>. In many cases, our algorithms exhibit full use of the device’s available memory bandwidth. Example computations achieve and surpass 200 gigaflops/s of net application-level floating point work.</p>
<p>In this article, we describe and derive the techniques used to reach this level of performance. In addition, we present comprehensive data on the accuracy and runtime behavior of the method. </p>Boost Numeric Bindings 200811162008-11-16T14:05:19-06:002008-11-16T14:05:19-06:00Andreas Klöcknertag:mathema.tician.de,2008-11-16:/boost-numeric-bindings-20081116<p>I’ve just rolled release 20080816 of the bindings, with the following stuff changed:</p>
<ul>
<li>Fix asserts in gbsv.hpp as suggested by Vardan.</li>
<li>Sync Thomas’s remaining fixes.</li>
<li>Apply patch to gels* from Naoki at http://mathema.tician.de/node/391.</li>
<li>Remove duplication in lapack_names.h.</li>
<li>Fix line endings in …</li></ul><p>I’ve just rolled release 20080816 of the bindings, with the following stuff changed:</p>
<ul>
<li>Fix asserts in gbsv.hpp as suggested by Vardan.</li>
<li>Sync Thomas’s remaining fixes.</li>
<li>Apply patch to gels* from Naoki at http://mathema.tician.de/node/391.</li>
<li>Remove duplication in lapack_names.h.</li>
<li>Fix line endings in Jesse’s gelsd stuff.</li>
<li>Add obvious improvements from current bindings svn.</li>
<li>Modify sync procedure even more.</li>
<li>Apply Thomas’s sync patch.</li>
<li>Update boost update procedure.</li>
<li>Apply Thomas’s svn sync patches.</li>
<li>Karl’s geev fix.</li>
<li>Followed Thomas’s idea of sygv->hegv.</li>
<li>Reduce diff with svn, step 4.</li>
<li>Reduce diff with svn, step 3.</li>
<li>Reduce diff with svn, step 2.</li>
<li>Reduce diff with svn, step 1.</li>
<li>Fix diff command.</li>
<li>Install to boost-numeric-bindings.</li>
<li>Bart Janssen’s UMFPACk bug fix.</li>
<li>Add missing checks for BOOST_NUMERIC_POOR_MANS_TRAITS in blas1.hpp.</li>
</ul>
<p>I’m happy to report that the diff with the official bindings has
shrunk to just Vardan’s gbsv and Jesse’s gels* stuff. I think that’s pretty
great, and in no small part due to Thomas’s work on getting stuff merged. </p>PyCuda 0.912008-11-12T13:16:34-06:002008-11-12T13:16:34-06:00Andreas Klöcknertag:mathema.tician.de,2008-11-12:/pycuda-0-91<p>I’m happy to announce the availability of <a href="http://pypi.python.org/pypi/pycuda/0.91">PyCuda 0.91</a>. There is full, up-to-date <a href="http://documen.tician.de/pycuda/">documentation</a> available.</p>
<p>The following exciting stuff is in PyCuda 0.91:</p>
<ul>
<li>Support for Windows and MacOS X, in addition to Linux. (Gert Wohlgemuth,
Cosmin Stejerean, Znah on the Nvidia forums, and David Gadling)</li>
<li>Support more …</li></ul><p>I’m happy to announce the availability of <a href="http://pypi.python.org/pypi/pycuda/0.91">PyCuda 0.91</a>. There is full, up-to-date <a href="http://documen.tician.de/pycuda/">documentation</a> available.</p>
<p>The following exciting stuff is in PyCuda 0.91:</p>
<ul>
<li>Support for Windows and MacOS X, in addition to Linux. (Gert Wohlgemuth,
Cosmin Stejerean, Znah on the Nvidia forums, and David Gadling)</li>
<li>Support more arithmetic operators on pycuda.gpuarray.GPUArray. (Gert Wohlgemuth)</li>
<li>Add pycuda.gpuarray.arange(). (Gert Wohlgemuth)</li>
<li>Add pycuda.curandom. (Gert Wohlgemuth)</li>
<li>Add pycuda.cumath. (Gert Wohlgemuth)</li>
<li>Add pycuda.autoinit.</li>
<li>Add pycuda.tools.</li>
<li>Add pycuda.tools.DeviceData and pycuda.tools.OccupancyRecord. pycuda.gpuarray.</li>
<li>GPUArray parallelizes properly on <span class="caps">GTX200</span>-generation devices.</li>
<li>Add support for compiling on <span class="caps">CUDA</span> 1.1. Added version query
pycuda.driver.get_version(). Updated documentation to show 2.0-only functionality.</li>
<li>Make pycuda.driver.Function resource usage available to the program. (See,
e.g. pycuda.driver.Function.registers.)
Cache kernels compiled by pycuda.driver.SourceModule.</li>
<li>Allow for faster, prepared kernel invocation. See pycuda.driver.Function.prepare().</li>
<li>Added memory pools, at pycuda.tools.DeviceMemoryPool as experimental,
undocumented functionality. For some workloads, this can cure the slowness of pycuda.driver.mem_alloc().</li>
<li>Fix the memset family of functions.</li>
<li>Improve Error Reporting.</li>
</ul>
<p>Check the <a href="http://documen.tician.de/pycuda/faq.html#version-0-91">docs change list</a> for a fully hyperlinked version of the above.</p>
<p>Have fun, Andreas</p>Brown Beamer Template2008-06-21T18:58:09-05:002008-06-21T18:58:09-05:00Andreas Klöcknertag:mathema.tician.de,2008-06-21:/brown-beamer-template<p>If you’re anything like me, you go to Brown University and really like Till
Tantau’s <a href="http://latex-beamer.sourceforge.net/">Beamer</a> LaTeX package for
making slides. Unfortunately, Beamer’s theming can be a bit obstinate, and
figuring out how to give your slides a Brown flavor (yum!) can be tedious.</p>
<p>Luckily for you …</p><p>If you’re anything like me, you go to Brown University and really like Till
Tantau’s <a href="http://latex-beamer.sourceforge.net/">Beamer</a> LaTeX package for
making slides. Unfortunately, Beamer’s theming can be a bit obstinate, and
figuring out how to give your slides a Brown flavor (yum!) can be tedious.</p>
<p>Luckily for you, I just spent some time and put together a template that you
can use for exactly that purpose. This is what it looks like:</p>
<p><img alt="slides-0.png" src="/images/slides-0.png" /></p>
<p>I’ve also attached a sample <span class="caps">PDF</span> to this story.</p>
<h2>Download</h2>
<p>You can download a tarball of the
<a href="http://git.tiker.net/?p=brown-beamer.git;a=snapshot">most recent version</a>
or
<a href="http://git.tiker.net/?p=brown-beamer.git;a=summary">browse the source code</a>.
If you like, you can also directly get a git checkout:</p>
<pre><code>git clone http://git.tiker.net/trees/brown-beamer.git
</code></pre>
<h2>Instructions</h2>
<p>To use this template, obtain the source tree, edit <code>slides.tex</code>, then change
to the <code>out</code> directory and type <code>./make.sh</code>. (If you’re on Windows, maybe
you can send me a batch file that does the same thing.)</p>
<h3>Attachments</h3>
<ul>
<li><a href="/dl/slides.pdf">slides.pdf</a></li>
</ul>Reproducibility in Scientific Computing2008-06-20T21:29:10-05:002008-06-20T21:29:10-05:00Andreas Klöcknertag:mathema.tician.de,2008-06-20:/reproducibility-in-scientific-computing<p>In <a href="http://www.amath.washington.edu/~rjl/pubs/cise08/index.html">this recent
paper</a>, Finite
Volume guru <a href="http://www.amath.washington.edu/~rjl/index.html">Randall J.
LeVeque</a> addresses an issue
that is near and dear to my heart: Computational Scientists must start thinking
about the reproducibility of their results.</p>
<p>Scientific results obtained by experimentation are expected to be reproducible.
This has long been demanded of published results …</p><p>In <a href="http://www.amath.washington.edu/~rjl/pubs/cise08/index.html">this recent
paper</a>, Finite
Volume guru <a href="http://www.amath.washington.edu/~rjl/index.html">Randall J.
LeVeque</a> addresses an issue
that is near and dear to my heart: Computational Scientists must start thinking
about the reproducibility of their results.</p>
<p>Scientific results obtained by experimentation are expected to be reproducible.
This has long been demanded of published results in, for example, physics or
chemistry. Yet, scientific computing, while often experimental, has been
strangely exempt from this requirement. This ought to change.</p>
<p>In his paper, LeVeque formulates several demands to be placed on scientific codes:</p>
<ul>
<li>
<p><strong>Availability in source code form.</strong> Codes used to obtain results in
published research must be <em>available</em> for other researchers to inspect.
While LeVeque is not as clear about this point, I would like to emphasize
that this availability should be of the same kind as that of the paper
advertising results obtained by the code. In most cases, this means that the
code should be downloadable from the same place as the paper. (There should
not be <a href="http://en.wikipedia.org/wiki/Open_access">access restrictions</a> on the
paper either, but that’s a different issue.)</p>
</li>
<li>
<p><strong>No dependencies on for-pay software.</strong> For widest availability and
reproducibility, it is preferable to not have scientific codes depend
on commercial, for-pay software. That notably includes Matlab.</p>
</li>
<li>
<p><strong>Readability.</strong> Codes should be written mostly to be read, not so much
to be executed. We need to grow an understanding that code is a valid
expression of the ideas that it contains. The more apparent these ideas
are from the code, the better.</p>
</li>
</ul>
<p>Given these constraints, he arrives at virtually the same toolset that I’ve
been using for a while now, consisting of <a href="http://www.python.org">Python</a>,
<a href="http://www.numpy.org">numpy</a>, <a href="http://matplotlib.org">matplotlib</a> and
<a href="http://visit.llnl.gov/">VisIt</a>.</p>
<p>I am hoping that this issue gets the attention it deserves. I’ll try to do my part.</p>Joint release 0.92 of PyUblas and PyUblasExt2008-04-20T18:33:04-05:002008-04-20T18:33:04-05:00Andreas Klöcknertag:mathema.tician.de,2008-04-20:/joint-release-0-92-of-pyublas-and-pyublasext<p>I’m happy to announce the availability of <a href="/software/pyublas">PyUblas</a> and its companion package <a href="/software/pyublas/pyublasext">PyUblasExt</a> in version 0.92. While PyUblasExt is available for the first time in released form, these are the changes made to PyUblas:</p>
<ul>
<li>Sparse wrappers are now <em>not</em> compiled by default. You have to request them using …</li></ul><p>I’m happy to announce the availability of <a href="/software/pyublas">PyUblas</a> and its companion package <a href="/software/pyublas/pyublasext">PyUblasExt</a> in version 0.92. While PyUblasExt is available for the first time in released form, these are the changes made to PyUblas:</p>
<ul>
<li>Sparse wrappers are now <em>not</em> compiled by default. You have to request them using <code>--with-sparse-wrappers</code> at <code>configure</code> time.</li>
<li>Provide implicit to-/from-python conversion for Ublas’s <code>vector</code>, <code>bounded_vector</code>, and <code>matrix</code> types.</li>
<li>Provide from-Python converters for Numpy’s array scalars.</li>
<li>Instantiate converters for a much wider range of element types.</li>
<li>Fixed compilation without <code>-DNDEBUG</code>.</li>
<li>Plus a slew of other cleanups and fixes.</li>
</ul>TagPy 0.94.12008-04-20T12:11:53-05:002008-04-20T12:11:53-05:00Andreas Klöcknertag:mathema.tician.de,2008-04-20:/tagpy-0-94-1<p>Responding to a patch from Bill Nottingham, I’ve uploaded TagPy 0.94.1. It fixes building TagPy against TagLib 1.5 and also fixes a mis-wrap of the <code>clear</code> method of the <code>Map</code> type.</p>
<p>In case you were wondering, 0.94 was a dud, but by the time I …</p><p>Responding to a patch from Bill Nottingham, I’ve uploaded TagPy 0.94.1. It fixes building TagPy against TagLib 1.5 and also fixes a mis-wrap of the <code>clear</code> method of the <code>Map</code> type.</p>
<p>In case you were wondering, 0.94 was a dud, but by the time I realized that, I had already uploaded the tarball to the Python Package Index, which made it unchangeable. :(</p>
<p>Additionally, I’ve decided to only upload new releases of TagPy to its page in the <a href="http://pypi.python.org/pypi/tagpy">Python Package Index</a>. Easier maintenance, yay! :)</p>Release 0.91.2 of Synoptic2008-04-20T11:32:36-05:002008-04-20T11:32:36-05:00Andreas Klöcknertag:mathema.tician.de,2008-04-20:/release-0-91-2-of-synoptic<p>Yay, here I go again. (<em>Update:</em> and again) There were a few small wrinkles in Synoptic 0.91 (and 0.91.1) for which I felt it warranted to push out a followup release, aptly called 0.91.2. It fixes the following things:</p>
<ul>
<li>Depend only on Python 2.4 …</li></ul><p>Yay, here I go again. (<em>Update:</em> and again) There were a few small wrinkles in Synoptic 0.91 (and 0.91.1) for which I felt it warranted to push out a followup release, aptly called 0.91.2. It fixes the following things:</p>
<ul>
<li>Depend only on Python 2.4 by reverting to Python Paste’s <span class="caps">WSGI</span> httpd.</li>
<li>Speed up page load by serving all javascript as one big clump.</li>
<li>Change <span class="caps">JS</span>/<span class="caps">CSS</span> load order to fix history slider size.</li>
<li>(new in 0.91.1) unbreak daemon mode in Python2.4</li>
<li>(new in 0.91.1) launch browser from background thread, to avoid deadlock.</li>
</ul>
<p><a href="http://pypi.python.org/pypi/synoptic">Download from PyPI</a></p>First real public release of Synoptic2008-04-19T16:18:58-05:002008-04-19T16:18:58-05:00Andreas Klöcknertag:mathema.tician.de,2008-04-19:/first-real-public-release-of-synoptic<p>I’m happy to announce the first truly public release of <a href="/software/synoptic">Synoptic</a>, my own web-based dynamic note taking application. If you find yourself lost in a jumble of either paper notes, text files on a hierarchical file system, or an overgrown <a href="http://www.gnome.org/projects/tomboy/">Tomboy</a> wiki, and find yourself craving order, categories, and …</p><p>I’m happy to announce the first truly public release of <a href="/software/synoptic">Synoptic</a>, my own web-based dynamic note taking application. If you find yourself lost in a jumble of either paper notes, text files on a hierarchical file system, or an overgrown <a href="http://www.gnome.org/projects/tomboy/">Tomboy</a> wiki, and find yourself craving order, categories, and simplicity, Synoptic may well be for you.</p>
<p>So go check it out! :)</p>Boost Bindings 200804052008-04-05T20:28:54-05:002008-04-05T20:28:54-05:00Andreas Klöcknertag:mathema.tician.de,2008-04-05:/boost-bindings-20080405<p>I’ve rolled another new <a href="/software/boost-bindings">Boost bindings</a> snapshot, dated 20080405.</p>
<p>This time around, I’ve done a bit more than update to current svn. I’ve tried
to scavenge past contributions from the Ublas mailing list that got dropped on the floor.
I’ve created a new version control tree …</p><p>I’ve rolled another new <a href="/software/boost-bindings">Boost bindings</a> snapshot, dated 20080405.</p>
<p>This time around, I’ve done a bit more than update to current svn. I’ve tried
to scavenge past contributions from the Ublas mailing list that got dropped on the floor.
I’ve created a new version control tree where I intend on maintaining these changes:</p>
<p><a href="http://git.tiker.net/?p=boost-bindings.git;a=summary">http://git.tiker.net/?p=boost-bindings.git;a=summary</a></p>
<p>For starters, I’ve picked up:</p>
<ul>
<li>Jesse Manning’s gels* routines.</li>
<li>Vardan Akopian’s gbsv routines.</li>
<li>Georg Baum’s non-std::complex<> fixes.</li>
<li>Georg Baum’s Fortran naming override.</li>
</ul>
<p>If there’s anything I’ve missed, or if you have a contribution to the bindings
sitting on your disk waiting for submission, please email me now!
The bindings are a tremendous resource, let’s try to not let them wither away.</p>On Hybrid Scientific Codes, Part I: The Idea2008-04-05T13:37:45-05:002008-04-05T13:37:45-05:00Andreas Klöcknertag:mathema.tician.de,2008-04-05:/on-hybrid-scientific-codes-part-i-the-idea<p>How should scientific codes be constructed? Scientific codes are often experimental in nature, and therefore need to be easy to change, and, of course, quick to develop in the first place—who wants to invest any more than necessary into an idea that might not work out after all? On …</p><p>How should scientific codes be constructed? Scientific codes are often experimental in nature, and therefore need to be easy to change, and, of course, quick to develop in the first place—who wants to invest any more than necessary into an idea that might not work out after all? On the other hand, computational scientists are an impatient bunch: Once the method stabilizes, or it becomes clear that it is generally useful, more and more demands get placed on a prototype code, most of all speed. It is clearly desirable to respond to these demands in an evolutionary manner. Why rewrite an entire code, possibly in a different language, if only one small part is responsible for most of the run time?</p>
<p>One answer that I have found to address these problems well is what I call hybrid development. Nearly all my code these days is “hybrid”. Now what does that mean? That means, I start developing in a high-level language that is quick to modify and separates me from the more menial tasks of coding, allowing me to code and test an algorithm quickly. The cost for this quick development turnaround is that the initial prototype is often fairly slow because many small operations are performed in the (often interpreted, instead of compiled) high-level language. This is an effect that everybody who has developed larger-scale code in <span class="caps">MATLAB</span> or similar environments has seen. Often, the bulk of the run time is concentrated in 10% or less of the entire code. In this case, the sensible solution is to replace the slow part of the high-level code with a lower-level compiled implementation, while keeping as much of the existing high-level code intact. This is the idea of hybrid development.</p>
<p><span class="caps">MATLAB</span> supports this idea to some extent with its <span class="caps">MEX</span> mechanism. There are however many more powerful tools on the market (and available for free) that make hybrid development easier and faster by orders of magnitude. In a future installment of this mini-series, I will highlight the software environment I use for my hybrid codes, and point out what I believe its advantages over other solutions are.</p>
<!--break-->Getting the Most out of the Home Row2008-02-25T21:59:18-06:002008-02-25T21:59:18-06:00Andreas Klöcknertag:mathema.tician.de,2008-02-25:/getting-the-most-out-of-the-home-row<p>If you’re willing to exchange a bit of memory for a lot less strain on your wrists, let alone work speed, this is your lucky day. In this post, I will describe how I’ve tuned my everyday work environment to a point where it feels completely unnatural for …</p><p>If you’re willing to exchange a bit of memory for a lot less strain on your wrists, let alone work speed, this is your lucky day. In this post, I will describe how I’ve tuned my everyday work environment to a point where it feels completely unnatural for me to have to move my hands away from the home row. And that’s a good thing—the less often my hands have to go anywhere, the less I am at risk of having <a href="http://en.wikipedia.org/wiki/Repetitive_strain_injury">painful wrist trouble</a> later in life.</p>
<p>So what’s the are the keys to all these benefits? You might laugh, but in fact they are H, J, K, and L. Namely, the cursor motion keys in <a href="http://en.wikipedia.org/wiki/Vi">Vi</a>. It may seem strange to tell people to use <em>H</em> to move to the left, <em>J</em> to move down, <em>K</em> to move up and <em>L</em> to move right, when there are these handy arrow keys right next to where your hands typically sit. But the problem is that your hands have to move quite a ways, and if you’re like me, you also flex your wrist somewhat unnaturally just to reach those. On the other hand, <span class="caps">HJKL</span> are right there on the home row, if you touch type. No wrist movement required.</p>
<p>Now, much of what you do every day on your computer involves moving around. So why not make use of these convenient motion keys in as many places as possible? Read on for a slew of suggestions.</p>
<!--break-->
<h1>Text Editor</h1>
<p>First of all, if you aren’t already a convert, you might want to consider switching to <a href="http://vim.sf.net">Vim</a> as your text editor. The learning curve may be steep at first, but with time you’ll become more of a text surgeon than you’ll realize, and many rather complex text editing tasks will commit to muscle memory. Delete a word? “dw” Change a word? “cw” Delete a line? “dd” Change a line? “cc”. If you edit text a lot, this is time well spent.</p>
<p>While on the topic of Vim, here are a few tricks that I find valuable:</p>
<ul>
<li>Use <code>*</code> to search for the word under the cursor.</li>
<li>Use <code>Control-n</code> to search for completions of the word under the cursor. This is especially worthwhile if you write code with rather long, descriptive names.</li>
<li>Vim requires you to hit “Escape” a lot. That’s another nasty twist of the wrist, until you discover that Control-[ does the same thing.</li>
</ul>
<h1>Window management</h1>
<ul>
<li>If you use multiple desktops, find a way to configure your window manager to move from desktop to desktop by using Control-Alt-<em><span class="caps">VI</span> Motion Key</em>. </li>
<li>One big use of the mouse is moving windows you just opened to the right place. However, with the following <a href="http://bugs.opencompositing.org/show_bug.cgi?id=810">patch</a>, the window manager <a href="http://www.compiz.org">Compiz</a> can move (and resize) windows around using Vi motion keys.</li>
</ul>
<h1>Internet</h1>
<ul>
<li>To me, this is today’s big discovery: The <a href="http://vimperator.mozdev.org/">Vimperator</a>. This makes Firefox look and behave a lot like Vim. What this means is that you can use a web browser without ever moving your hand to the mouse. Important problem: How do you click on a link then? Vimperator’s solution, to me, is pure genius. By hitting <em>F</em>, every link on the page shows a little one- or two-letter shortcut (such as “<span class="caps">HN</span>”). Type that, and you’ve followed the link. Shift-H (remember, that’s Vi-Left) and Shift-L (that’s Vi-Right) allow you to navigate through history. If you know Vim, you’ll feel right at home in Vimperator.</li>
<li>Also, Google Mail and Google Reader support Vi motion keys, once you enable them.</li>
</ul>
<h1>Desktop environment</h1>
<ul>
<li>I use tabbed X terminals a lot. Alt-h and Alt-L make nice shortcuts for switching to the tab on the left or on the right. If you use a <span class="caps">GTK</span>-based terminal, you might find yourself unable to change your keyboard shortcuts until you use this <a href="http://www.pixelbeat.org/lkdb/gtk.html">trick</a>.</li>
<li>Lastly, I find that Control-Alt-semicolon (at least on a <span class="caps">US</span> keyboard) makes a nice shortcut for opening a new terminal.</li>
</ul>
<p>May your wrists find this information useful! :)</p>Barf Detergent and other Successes of Modern Marketing2008-02-05T22:41:38-06:002008-02-05T22:41:38-06:00Andreas Klöcknertag:mathema.tician.de,2008-02-05:/barf-detergent-and-other-successes-of-modern-marketing<p>I had a good laugh off this <a href="http://en.wikipedia.org/wiki/User:Benjamin_Mako_Hill/List_of_unintentionally_offensive_product_names">list of unintentionally offensive product names</a>. As the title hints, <em>Barf</em> detergent is up there. But there’s one name that takes the cake. It hails from Germany, as it had to. To be precise, the electronics firm Trekstor decided to name the …</p><p>I had a good laugh off this <a href="http://en.wikipedia.org/wiki/User:Benjamin_Mako_Hill/List_of_unintentionally_offensive_product_names">list of unintentionally offensive product names</a>. As the title hints, <em>Barf</em> detergent is up there. But there’s one name that takes the cake. It hails from Germany, as it had to. To be precise, the electronics firm Trekstor decided to name the black-colored addition to their “iBeat” line the <a href="http://gizmodo.com/gadgets/oops/trekstor-renames-ibeat-blaxx-after-a-bit-of-self+flagellation-293667.php">Trekstor i.Beat Blaxx</a>.</p>
<p>The name sounds convoluted enough that, no doubt, it took lots of effort-by-committee to find it. And all of that just to get the whole thing catastrophically wrong. Sounds somewhat typical of Germany to me…</p>Hey, Americans!2008-02-05T08:51:09-06:002008-02-05T08:51:09-06:00Andreas Klöcknertag:mathema.tician.de,2008-02-05:/hey-americans<p>If you’re choosing between Obama and Hillary, <a href="http://lessig.org/blog/2008/02/20_minutes_or_so_on_why_i_am_4.html">here</a> is a compelling argument brought forward by <a href="http://lessig.org">someone</a> who <a href="http://www.creativecommons.org">knows</a> <a href="http://lawschool.stanford.edu/">what</a> <a href="http://eldred.cc/">he</a> is <a href="http://cyberlaw.stanford.edu/">doing</a>. (<a href="http://blog.printf.net/articles/2008/02/05/transcript-of-lawrence-lessig-obama-video">transcript</a>)</p>
<p>I couldn’t agree more. Go ahead, spread this! :)</p>Forums!2007-12-05T13:06:34-06:002007-12-05T13:06:34-06:00Andreas Klöcknertag:mathema.tician.de,2007-12-05:/forums<p>Since I’ve received a number of calls for help with regard to my software packages, in particular <a href="/software/meshpy">MeshPy</a> and <a href="/software/pylinear">PyLinear</a>, I’ve decided to create a public forum for these requests for help. Here they are: the <a href="/software/meshpy/forum">MeshPy forum</a> and the <a href="/software/pylinear/forum">PyLinear forum</a>.</p>
<p>Here’s to years of useful …</p><p>Since I’ve received a number of calls for help with regard to my software packages, in particular <a href="/software/meshpy">MeshPy</a> and <a href="/software/pylinear">PyLinear</a>, I’ve decided to create a public forum for these requests for help. Here they are: the <a href="/software/meshpy/forum">MeshPy forum</a> and the <a href="/software/pylinear/forum">PyLinear forum</a>.</p>
<p>Here’s to years of useful discussions! ;)</p>Visualizing Greenhouse Gases2007-12-02T10:16:32-06:002007-12-02T10:16:32-06:00Andreas Klöcknertag:mathema.tician.de,2007-12-02:/visualizing-greenhouse-gases<p>Have a friend who does <em>not</em> believe <span class="caps">CO</span><sub>2</sub> emissions are real and may be harmful? Show them this:</p>
<object width="425" height="355"><param name="movie" value="http://www.youtube.com/v/6Eg_SEAnE-M&rel=1&border=0"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/6Eg_SEAnE-M&rel=1&border=0" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"></embed></object>TagPy 0.932007-10-24T23:53:57-05:002007-10-24T23:53:57-05:00Andreas Klöcknertag:mathema.tician.de,2007-10-24:/tagpy-0-93<p>I’ve pushed out yet another version of <a href="/software/tagpy">TagPy</a>. This time it is to mop up after some rather unhelpful default in TagLib. That is, unless you have the magic lines:</p>
<pre><code>import tagpy.id3v2 as id3v2
id3v2.FrameFactory.instance().setDefaultTextEncoding(tagpy.StringType.UTF8)
</code></pre>
<p>in your code, the generic <span class="caps">API</span> <code>tag …</code></p><p>I’ve pushed out yet another version of <a href="/software/tagpy">TagPy</a>. This time it is to mop up after some rather unhelpful default in TagLib. That is, unless you have the magic lines:</p>
<pre><code>import tagpy.id3v2 as id3v2
id3v2.FrameFactory.instance().setDefaultTextEncoding(tagpy.StringType.UTF8)
</code></pre>
<p>in your code, the generic <span class="caps">API</span> <code>tag.artist = u"*some funky unicode string*"</code> will write Unicode tags as Latin1 if the previous ID3v2 tag was also Latin1-encoded. This will of course destroy your carefully crafted unicode string. Therefore I urge all users to include these lines in their code, in order to avoid such trouble.</p>
<p>All that’s new in 0.93 is the wrappers that make this call possible.</p>
<p>I tought about making the above code the default for TagPy, but I wasn’t sure whether that was the right thing to do, seeing as how this default would deviate from TagLib.</p>Yuck!2007-10-11T21:08:57-05:002007-10-11T21:08:57-05:00Andreas Klöcknertag:mathema.tician.de,2007-10-11:/yuck<p><a href="http://www.justsayhi.com/bb/keyboard" style="color: #99CC00; text-decoration: none; display: block; width: 303px; height: 128px; padding-top: 50px; background: url(http://www.justsayhi.com/bb/img/keyboard/badge.jpg) no-repeat; font-family: Arial, sans-serif; font-size: 33px; text-align: center;"><strong>1,662,780</strong><span style="display: none;">How Many Germs Live On Your Keyboard?</span></a></p>
<p><img alt="Alternate Method: Convince them it's an Etch-A-Sketch and have them try and erase it" src="http://imgs.xkcd.com/comics/keyboards_are_disgusting.png" /></p>
<p>(<a href="http://xkcd.com">xkcd</a> is great.)</p>Möbius Transforms2007-10-02T23:10:04-05:002007-10-02T23:10:04-05:00Andreas Klöcknertag:mathema.tician.de,2007-10-02:/moebius-transforms<p>Complex analysis on YouTube:</p>
<object width="425" height="350"><param name="movie" value="https://www.youtube.com/v/JX3VmDgiFnY"></param><param name="wmode" value="transparent"></param><embed src="https://www.youtube.com/v/JX3VmDgiFnY" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"></embed></object>
<p>Yup, too cool not to share. :)</p>TagPy 0.92 released2007-10-02T10:10:34-05:002007-10-02T10:10:34-05:00Andreas Klöcknertag:mathema.tician.de,2007-10-02:/tagpy-0-92-released<p>In order to fix <a href="http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=438556">Debian bug #438556</a> (a crasher that made almost all of the ID3v2 infrastructure useless), I have just release version 0.92 of tagpy. Go <a href="/dl/software/tagpy">get it</a> while it’s hot.</p>Not enough Flash video yet?2007-09-26T22:12:42-05:002007-09-26T22:12:42-05:00Andreas Klöcknertag:mathema.tician.de,2007-09-26:/not-enough-flash-video-yet<p>Then go watch something <a href="http://www.slatev.com/player.html?id=1182700684">sad</a> and then <a href="http://www.slatev.com/li_mashups.html">laugh</a>.</p>PSI Smilies in Gaim/Pidgin2007-09-25T16:45:06-05:002007-09-25T16:45:06-05:00Andreas Klöcknertag:mathema.tician.de,2007-09-25:/psi-smilies-in-gaim-pidgin<p>Thanks to Debian, I got <a href="http://pidgin.im">pidgin</a> 2.2.0 today, and with it, its new atrocious smiley theme—eyebrows and all. This prompted me to make a smiley theme out of <a href="http://psi-im.org">Psi</a>‘s old smileys, which I still remember liking the most.</p>
<p>You can download that theme here: <a href="/dl/PSI_Smileys.tar.gz"><span class="caps">PSI</span> Smilies …</a></p><p>Thanks to Debian, I got <a href="http://pidgin.im">pidgin</a> 2.2.0 today, and with it, its new atrocious smiley theme—eyebrows and all. This prompted me to make a smiley theme out of <a href="http://psi-im.org">Psi</a>‘s old smileys, which I still remember liking the most.</p>
<p>You can download that theme here: <a href="/dl/PSI_Smileys.tar.gz"><span class="caps">PSI</span> Smilies in Gaim/Pidgin</a></p>
<p>And this is what they look like: </p>
<p><img alt="psi-smileys.png" src="/images/psi-smileys.png" /></p>
<h3>Attachments</h3>
<ul>
<li><a href="/dl/PSI_Smileys.tar.gz">PSI_Smileys.tar.gz</a></li>
<li><a href="/images/psi-smileys.png">psi-smileys.png</a></li>
</ul>Fermat’s Last Python Script2007-09-18T10:58:45-05:002007-09-18T10:58:45-05:00Andreas Klöcknertag:mathema.tician.de,2007-09-18:/fermats-last-python-script<pre><code>def fermat(n):
"""Returns triplets of the form x^n + y^n = z^n.
Warning! Untested with n > 2.
"""
from itertools import count
for x in count(1):
for y in range(1, x+1):
for z in range(1, x**n+y**n + 1):
if x**n + y**n …</code></pre><pre><code>def fermat(n):
"""Returns triplets of the form x^n + y^n = z^n.
Warning! Untested with n > 2.
"""
from itertools import count
for x in count(1):
for y in range(1, x+1):
for z in range(1, x**n+y**n + 1):
if x**n + y**n == z**n:
yield x, y, z
</code></pre>
<p>Nicked from <a href="http://earthboundkid.jottit.com/fermat.py">the earthbound kid</a>.</p>What they don’t tell you about VTK XML binary formats2007-09-18T09:52:10-05:002007-09-18T09:52:10-05:00Andreas Klöcknertag:mathema.tician.de,2007-09-18:/what-they-dont-tell-you-about-vtk-xml-binary-formats<p>You might have been trying to implement the new-style <a href="http://www.vtk.org"><span class="caps">VTK</span></a> <a href="http://www.vtk.org/pdf/file-formats.pdf"><span class="caps">XML</span> file formats</a>. And you might have realized that what they tell you in the file format “specification” is just incomplete. Well, here are a few bits of information missing from there:</p>
<p><strong>Binary Blob Header:</strong> In front of every binary …</p><p>You might have been trying to implement the new-style <a href="http://www.vtk.org"><span class="caps">VTK</span></a> <a href="http://www.vtk.org/pdf/file-formats.pdf"><span class="caps">XML</span> file formats</a>. And you might have realized that what they tell you in the file format “specification” is just incomplete. Well, here are a few bits of information missing from there:</p>
<p><strong>Binary Blob Header:</strong> In front of every binary blob, base64 or raw-binary, appended or not, there is an UInt32 length indicator. If you do not have this length indicator, you might get error messages like</p>
<pre><code>Cannot read cell offsets from XXXX in piece 0 because the "offsets" array is not long enough.
</code></pre>
<p>Note that if you are encoding in <code>base64</code>, that length header must be encoded separately, so that the end result looks like <span class="caps">XXXXXX</span>==<span class="caps">XXXX</span>… (note the two equals signs indicating the early end of the length header block).</p>
<p><strong>Compression Header:</strong> If you use compression, the following header applies instead:</p>
<pre><code>struct {
uint32 blocks;
uint32 blocksize;
uint32 last_blocksize;
uint32 compressed_blocksizes[];
};
</code></pre>
<p>Again, this header is encoded <em>separately</em> from the data. This was figured out by <a href="http://public.kitware.com/pipermail/paraview/2005-April/001391.html">Thomas Svedberg</a>. Thomas adds that the following works for him:</p>
<pre><code>struct {
uint32 blocks = 1
uint32 blocksize = total data size
uint32 last_blocksize = total data size
uint32 compressed_blocksizes[] = compressed data size
};
</code></pre>
<p><strong>Offset Field Meaning for <code>base64</code>:</strong> The “offset” field on DataArrays with format=”appended” is not a binary offset, it is the base64 character count from the underscore that starts the AppendedData section.</p>
<p><strong>Vector Element Order:</strong> If you are encoding vectors (i.e. anything with NumberOfComponents=”3”), and suppose your vectors are X,Y,Z,…, then the encoded data stream has the ordering X[0], X[1], X[2], Y[0], Y[1], Y[2], Z[0]…</p>Books, Books and more Books2007-09-07T22:55:55-05:002007-09-07T22:55:55-05:00Andreas Klöcknertag:mathema.tician.de,2007-09-07:/books-books-and-more-books<p>I’ve found it sad for a long time that I’ve read many books in my life, but my memory of them is slowly fading, and I would at least like to keep a list around. As you have probably guessed, you would not be reading this if I …</p><p>I’ve found it sad for a long time that I’ve read many books in my life, but my memory of them is slowly fading, and I would at least like to keep a list around. As you have probably guessed, you would not be reading this if I hadn’t stumbled on a cool site that lets me easily put together a catalog of books that own or have read.</p>
<p>And that site is: <a href="http://www.LibraryThing.com">http://www.LibraryThing.com</a>. And if you care what kind of books I read and own, here’s <a href="http://www.librarything.com/catalog/inducer">my library</a>. That list is still pretty incomplete, but I hope to add more over time.</p>Singing the praises of2007-08-29T10:07:13-05:002007-08-29T10:07:13-05:00Andreas Klöcknertag:mathema.tician.de,2007-08-29:/singing-the-praises-of-link-rel-next<p>Here’s a chicken-and-egg problem for you. And you can be part of the egg. I’ll show you how in a minute.</p>
<p>I bet you’ve noticed that bajillions of websites have little links that say “next” and “previous”, right? Like previous page, previous item, previous whatever. And sometimes …</p><p>Here’s a chicken-and-egg problem for you. And you can be part of the egg. I’ll show you how in a minute.</p>
<p>I bet you’ve noticed that bajillions of websites have little links that say “next” and “previous”, right? Like previous page, previous item, previous whatever. And sometimes there’s “up”, too. As in “up” to the parent directory, “up” to the category containing this item, and so on. And every time you come upon a web page like that, you ask yourself, “so where is the link that takes me to the ‘next’ page?” Wouldn’t it be nice if that button was always in the <em>same</em> spot, preferably on your browser user interface?</p>
<p>You might be surprised to learn that a solution to this already exists. The <span class="caps">HTML</span> standard specifies the <link rel=”next”> and <link rel=”prev”> header tags. But how can you make them show up in your browser? Easy: Use the <a href="https://addons.mozilla.org/en-US/firefox/addon/2933">Link Widgets</a> Firefox extension. By installing and using that, you’ve become part of the egg. Now the chicken is that more sites need to start using the <link rel=”…”> tags. There are already enough of them to make the extension worthwhile, for example Google, or any Drupal site (such as this one :) ), or anything generated by latex2html, which includes surprisingly large swaths of web documentation. But the more people have the <span class="caps">UI</span> to use these links, the more sites will include the markup, making the whole thing more and more useful over time.</p>
<p>And making the web more useful is not a bad thing, is it? ;)</p>New release of Boost.Bindings tracking Boost 1.35 CVS2007-08-26T13:11:02-05:002007-08-26T13:11:02-05:00Andreas Klöcknertag:mathema.tician.de,2007-08-26:/new-release-of-boost-bindings-tracking-boost-1-35-cvs<p>I’ve rolled a new release (20070826) of the <a href="/software/boost-bindings">Boost.Bindings</a> library to track what’s currently going on in the Boost <span class="caps">CVS</span> tree leading up to release 1.35. What’s released works with current <span class="caps">CVS</span> as of 8/26/2007, I assume it will also work with the …</p><p>I’ve rolled a new release (20070826) of the <a href="/software/boost-bindings">Boost.Bindings</a> library to track what’s currently going on in the Boost <span class="caps">CVS</span> tree leading up to release 1.35. What’s released works with current <span class="caps">CVS</span> as of 8/26/2007, I assume it will also work with the final release. I suspect that it will <em>not</em> work with boost 1.34.1 and older.</p>
<p>Additionally, this release has a configure script and a Makefile to enable it to be installed with the familiar ./configure;make;make install procedure. Using this is completely optional, the library will also work without installation, as before.</p>D*mn sp*mmers2007-08-26T13:05:39-05:002007-08-26T13:05:39-05:00Andreas Klöcknertag:mathema.tician.de,2007-08-26:/d-mn-sp-mmers<p>Ok, the spammers yet again figured out how to circumvent my anti-spam measures. So yet again, I’ve disabled anonymous commenting. Only this time it’s final. And I have a mess of seven bajillion comments to clean up.</p>
<p>I’m just so sick of these people: :barf:</p>Trip to the Northwest2007-08-20T15:21:04-05:002007-08-20T15:21:04-05:00Andreas Klöcknertag:mathema.tician.de,2007-08-20:/trip-to-the-northwest<p>For the first two weeks of August this summer, Frank and I went on a two-week trip through the northwestern United States. The trip was nothing short of amazing to me, and I’m having a hard time adjusting back to the dull (by comparison) life in Providence. We saw …</p><p>For the first two weeks of August this summer, Frank and I went on a two-week trip through the northwestern United States. The trip was nothing short of amazing to me, and I’m having a hard time adjusting back to the dull (by comparison) life in Providence. We saw some <em>really</em> amazing nature, and had tons of fun. Naturally, there are <a href="http://gallery.tiker.net/v/andreas/vacation/nwtrip07">pictures</a> available. Thanks to Google Maps, you can also take a pretty precise look at our route: (You have to zoom out a couple times to see the whole thing.)</p>
<iframe width="425" height="350" frameborder="no" scrolling="no" marginheight="0" marginwidth="0" src="http://local.google.com/maps?f=d&hl=en&geocode=&saddr=pdx&daddr=Astoria+Bridge%2FUS-101+%4046.230750,+-123.869770+to:US-101+%4046.673400,+-123.769960+to:Paradise+Rd+%4046.781840,+-121.762160+to:E+Valley+Rd+%4047.453510,+-122.218190+to:US-2+%4047.594090,+-120.665410+to:I-90+E+%4047.653840,+-117.353600+to:Going+to+the+Sun+Hwy+%4048.673840,+-113.613810+to:47.794707,-112.225342+to:Main+St+%4046.937280,+-110.740350+to:US-89+%4045.059640,+-110.760240+to:US-89+%4042.346850,+-111.106950+to:US-89+%4041.931080,+-111.561590+to:I-15+S+%4040.769360,+-111.911890+to:I-80+W+%4039.374450,+-120.108460+to:CA-89+%4038.945930,+-120.102110+to:NV-28+%4039.102520,+-119.912860+to:I-80+W+%4039.330770,+-120.285170+to:sfo&mrcr=7,8&mrsp=8&sz=8&mra=dpe&sll=47.945786,-112.681274&sspn=2.763271,3.592529&ie=UTF8&ll=47.945786,-112.681274&spn=2.763271,3.592529&om=1&output=embed&s=AARTsJooNsvg6jSjU-VlxiduiOOJjf_z5w"></iframe>
<p><a href="http://local.google.com/maps?f=d&hl=en&geocode=&saddr=pdx&daddr=Astoria+Bridge%2FUS-101+%4046.230750,+-123.869770+to:US-101+%4046.673400,+-123.769960+to:Paradise+Rd+%4046.781840,+-121.762160+to:E+Valley+Rd+%4047.453510,+-122.218190+to:US-2+%4047.594090,+-120.665410+to:I-90+E+%4047.653840,+-117.353600+to:Going+to+the+Sun+Hwy+%4048.673840,+-113.613810+to:47.794707,-112.225342+to:Main+St+%4046.937280,+-110.740350+to:US-89+%4045.059640,+-110.760240+to:US-89+%4042.346850,+-111.106950+to:US-89+%4041.931080,+-111.561590+to:I-15+S+%4040.769360,+-111.911890+to:I-80+W+%4039.374450,+-120.108460+to:CA-89+%4038.945930,+-120.102110+to:NV-28+%4039.102520,+-119.912860+to:I-80+W+%4039.330770,+-120.285170+to:sfo&mrcr=7,8&mrsp=8&sz=8&mra=dpe&sll=47.945786,-112.681274&sspn=2.763271,3.592529&ie=UTF8&ll=47.945786,-112.681274&spn=2.763271,3.592529&om=1&source=embed" style="color:#0000FF;text-align:left;font-size:small">View Larger Map</a></p>
<p>Yes, we did indeed drive all that. 3300 miles altogether.</p>
<p>Here’s a brief summary what we did each day:</p>
<h2>August 1</h2>
<ul>
<li>Arrive at <span class="caps">PDX</span>. To me, this was a flight that visited <em>every</em> corner of the <span class="caps">US</span>. (by going through <span class="caps">PVD</span>-><span class="caps">BNA</span>-><span class="caps">LAS</span>-><span class="caps">PDX</span>. Thanks, Southwest. :P Anyone wondering why I arrived with a headache?)</li>
<li>Shop at Target.</li>
<li>Find camping in Scappoose, <span class="caps">WA</span>.</li>
</ul>
<h2>August 2</h2>
<ul>
<li>Shop at Fred Meyer in Scappoose.</li>
<li>Establish that coffee with each breakfast is a good idea.</li>
<li>Establish that dry milk with cereal is not a good idea, but a necessary evil.</li>
<li>Repack the car to make stuff more accessible.</li>
<li>Drive along <span class="caps">US</span>-30 to the <span class="caps">WA</span> coast, including <a href="http://gallery.tiker.net/v/andreas/vacation/nwtrip07/1oregon/IMG_4465.JPG.html">Cape Disappointment</a>. Cross the Astoria bridge.</li>
<li>See Mount Saint Helens from a distance.</li>
<li>Return inland and crash at Mt. Rainier for the night, seeing a photo presentation at the campground in the evening.</li>
</ul>
<h2>August 3</h2>
<ul>
<li>Go hike the Skyline trail at Mt. Rainier in total fog. At first, that was fairy-tale lovely (while there was still vegetation and animal life to gawk at), but as soon as there were only snow fields and dirt, that was pretty boring.</li>
<li>Drive the National Park road, and actually <em>see</em> Mt. Rainier.</li>
</ul>
<h2>August 4</h2>
<ul>
<li>Leave Mt. Rainier for Seattle.</li>
<li>Stop at a suburban McDonald’s to score some wireless. Book a kayak trip for 8/6. Book a hotel for Seattle.</li>
<li>Check into said hotel, take well-deserved showers.</li>
<li>Head into Seattle, find parking <em>way</em> outside town, about 15 minutes walk from the Space Needle.</li>
<li>Ride the Seattle Monorail, see Pike Place Market, find it underwhelming. Walk underneath <span class="caps">WA</span>-99 to find Seattle’s “waterfront”. Ride the ferry to Bainbridge Island and back, see Mt. Rainier in the distance.</li>
<li>Visit Pioneer Square, find it underwhelming. Go eat African food.</li>
<li>Return to the hotel, getting stuck in traffic for about an hour (at 11pm, no less).</li>
</ul>
<h2>August 5</h2>
<ul>
<li>My birthday, yay. :)</li>
<li>Get up bright and early, shower! ;)</li>
<li>Leave hotel room, taking parts of door frame with us. (Well no, the door had a latch that was supposed to keep the bad guys from coming in. But when I opened the door without opening the latch, it simply pulled the door frame off the wall. <em>Real</em> secure, that.)</li>
<li>Figure Seattle’s got not too much more to see. Move kayak trip from 8/6 to 1pm today, leave Seattle via I-90 East at 9am.</li>
<li>Arrive in Leavenworth, <span class="caps">WA</span> at <a href="http://www.riverrider.com/">River Rider</a>, ready for a cool kayaking trip by eating the provided (yummy) <span class="caps">BBQ</span>.</li>
<li>Have tons of fun kayaking down the Wenatchee in inflatable <a href="http://images.google.com/images?q=inflatable.kayak&ie=utf-8&oe=utf-8&rls=org.debian:de:unofficial&client=iceweasel-a&um=1&sa=N&tab=wi">duckies</a>.</li>
<li>Drive onward down the Wenatchee river, pretty. ;)</li>
<li>Reach the Spokane <span class="caps">KOA</span> by nightfall.</li>
</ul>
<h2>August 6</h2>
<ul>
<li>Leave Spokane, <span class="caps">WA</span>.</li>
<li>Go shopping at Safeway in Cœur d’Alene, <span class="caps">ID</span>. God, Safeway is awful.</li>
<li>Eat lunch at Cœur d’Alene lake, pretty.</li>
<li>See wildfires somewhere in Montana.</li>
<li>Reach the Fish Creek campground at Glacier <span class="caps">NP</span> around 6pm.</li>
<li>Go swimming in Lake Dogulas.</li>
</ul>
<h2>August 7</h2>
<ul>
<li>Hike the Loop Trail up to Granite Park Chalet. Be deadly afraid of bears, yell “Hallo” all the time.</li>
<li>Pause at Granite Park, continue on to Logan Pass.</li>
<li>See some white mountain goats (?) and a bighorn sheep (yes, they’re called that for a reason.). Be even more scared of bears. :)</li>
<li>Arrive at Logan Pass, take Glacier’s cool new shuttle back to the Loop.</li>
<li>Very cool, but very exhausting hike. I was longing for a shower and convinced Frank to go find pay for showers at the West Glacier <span class="caps">KOA</span>. Also illegally used the hot tub there for a while. (So sue us. ;))</li>
<li>Drop into bed nice and early.</li>
</ul>
<h2>August 8</h2>
<ul>
<li>Drive the Going-to-the-Sun Road to the eastern exit of Glacier, shoot plenty of pictures.</li>
<li>Leave Glacier <span class="caps">NP</span> on <span class="caps">US</span>-89, follow that to the entrance of Yellowstone, seeing endless prairies, Great Falls, <span class="caps">MT</span> and Lewis <span class="amp">&</span> Clark National Forest, which itself is really pretty.</li>
<li>Arrive at Yellowstone by nightfall, only to be told that all park campgrounds are full.</li>
<li>There’s a commercial campground with all the bells and whistles, and a government campground with the bare necessities (vault toilets) to choose from. Disagreement arises over which to pick. Frank gets his way, and we live comfortably with showers, running water, laundry, electricity at the site and <em>gasp</em> wireless internet.</li>
<li>Make noodles in celebration.</li>
<li>Tease Frank for being a capitalist.</li>
</ul>
<h2>August 9</h2>
<ul>
<li>First day in Yellowstone. See Mammoth Hot Springs, find them stinky and unremarkable. While they might’ve looked way awesome int the past, they don’t so much when there’s not much water.</li>
<li>See the Golden Gate, Sheepeater Cliff and Norris Geyser Basin. Weather turns to the usual National Park Weather in Norris.</li>
<li>Head across to Canyon Village, hiking down to every viewpoint at the (very cool) Grand Canyon of the Yellowstone. The last one was best, but also the most strenuous, involving stairs: Uncle Tom’s viewpoint.</li>
<li>Ate dinner in the park, return to campsite via Tower in pitch darkness. Think about running over grizzlies in the car.</li>
</ul>
<h2>August 10</h2>
<ul>
<li>Second day in Yellowstone.</li>
<li>Drove into the park via Tower and Canyon village, seeing Tower falls on the way in. A bit further down the road, there was the Mud Volcano area, and much to our surprise, there were bisons all over it. One crossed the walkway about 10 meters ahead of us. Lots of signs that say, “more people get hurt by bisons than grizzlies.” But bisons just look like big cows. They must be harmless. :)</li>
<li>Wildlife jam a little bit down the road, bison walking across one car ahead of us.</li>
<li>Lake Yellowstone’s pretty, too. A crow (raven maybe?) came really close to us while we ate lunch and showed no fear of people at all.</li>
<li>Finally arrived at Old Faithful, saw it go <em>squirt</em> (which is actually more impressive than it sounds here, definitely worth seeing—even though that’s where the crowds are).</li>
<li>Walked around the geyser basin at Old Faithful. More of the same, but still worth seeing.</li>
<li>Ate dinner somewhere at Firehole creek</li>
</ul>
<h2>August 11</h2>
<ul>
<li>Saw Midway Geyser Basin on the way out of Yellowstone to the south. That one is actually <em>not</em> more of the same, it’s really impressive, big and blue. And not stinky.</li>
<li>Drove through Grand Teton National Park. Went swimming in Jackson Lake.</li>
<li>Drove through Jackson, <span class="caps">WY</span>. Tries to look like an old western town, doesn’t really fail miserably. Somewhat Touri-Nepp. :)</li>
<li>Drove through more of <span class="caps">WY</span> and <span class="caps">ID</span>. Saw Bear Lake by nightfall, ate a cold can of ravioli for dinner.</li>
<li>Reached <span class="caps">UT</span>, got gas, saw wildfires over Salt Lake City. Hit I-80 west towards Tahoe.</li>
<li>Played Battle for Wesnoth, Gianna Sisters and many other things while driving.</li>
<li>Found a parking lot, slept in the car at 4am.</li>
<li>900 miles in a day. Dude. Far.</li>
</ul>
<h2>August 12</h2>
<ul>
<li>Licked our wounds from the long overnight drive. Found the Tahoe State Recreation Area campground, way cool—with hot (pay) showers and a cool attendant.</li>
<li>Drove around Lake Tahoe.</li>
<li>Saw the Stream Profile Chamber at the Taylor Creek visitor center just south of pretty Emerald Bay.</li>
<li>South Lake Tahoe’s not so pretty.</li>
<li>And the casinos start right when you get to the <span class="caps">NV</span> state line—in a town sensibly called Stateline, <span class="caps">NV</span>. Yay for inventive city naming. :)</li>
</ul>
<h2>August 13</h2>
<ul>
<li>Mountain biked the Flume trail from Incline Village. Very cool. Very exhausting. :D</li>
<li>Ate ribs <em>and</em> steak at a local restaurant for dinner. Actually, the ribs were too much. Took them home in a box.</li>
<li>Fell into bed dead-tired.</li>
</ul>
<h2>August 14</h2>
<ul>
<li>Kayaked around for four hours on Lake Tahoe starting from Tahoe City. Covered quite a bit of distance, and ate lunch out on the lake—ribs on the water taste twice as good as ribs on land, even if they’re cold. Yum. :) Also got horribly sunburned, because I didn’t put sunscreen on my legs. They’re still peeling as of 8/29. Bad. (But still worth the fun.)</li>
<li>Drove to Mountain View and ate dinner with Hendrik at the Google cafeteria.</li>
<li>Hung out with Hendrik, played <span class="caps">DDR</span> and looked at our photos on his bedroom wall—using his projector.</li>
</ul>
<h2>August 15</h2>
<ul>
<li>Repacked the car in preparation of my flight out that night.</li>
<li>Breakfast again thanks to Google, Inc. :)</li>
<li>Drove south on 101 to Santa Clara to see a bunch of logos on building walls, including Intel, Yahoo, Sun.</li>
<li>Drove back north to see Stanford.</li>
<li>Continued towards the Golden Gate on I-280, drove to the Marin vista point and back, walked halfway across the bridge. Foggy, cold and windy. And very cool, yet again. :)</li>
<li>Chilled in Golden Gate Park.</li>
<li>Checked Frank into his hotel.</li>
<li>Met up with Hendrik, saw Coit Tower, drank coffee (except Frank, whose coffee got pooped into), ate pizza. Headed towards Twin Peaks, where the wind and the evening sun provided plenty of entertainment. Ate quesadillas for dinner at Taqueria Can-Cun.</li>
<li>Headed to <span class="caps">SFO</span>, and back home via <span class="caps">ATL</span> into <span class="caps">BOS</span>.</li>
</ul>
<p><br/></p>Back in Debian2007-07-12T23:28:49-05:002007-07-12T23:28:49-05:00Andreas Klöcknertag:mathema.tician.de,2007-07-12:/back-in-debian<p>So after madman is currently <a href="http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=384397">orphaned</a> in Debian and might <a href="http://people.debian.org/~terpstra/message/20070702.155802.ad2e5b7d.en.html">get kicked out</a> of the archive along with xmms kicking the bucket, I just noticed that one of my newer pieces of code made it <em>into</em> Debian: <a href="http://packages.debian.org/unstable/python/python-tagpy">tagpy</a>! :) That’s awesome.</p>
<p>To everybody who is holding their breath waiting for …</p><p>So after madman is currently <a href="http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=384397">orphaned</a> in Debian and might <a href="http://people.debian.org/~terpstra/message/20070702.155802.ad2e5b7d.en.html">get kicked out</a> of the archive along with xmms kicking the bucket, I just noticed that one of my newer pieces of code made it <em>into</em> Debian: <a href="http://packages.debian.org/unstable/python/python-tagpy">tagpy</a>! :) That’s awesome.</p>
<p>To everybody who is holding their breath waiting for a madman update: I still use madman for my own music managing needs, as it still (surprise) is exactly what I want in a music manager. But I simply don’t have enough time for serious maintenance. I might switch it to audacious in the near future to keep it working for me, but I’m not promising extensive new features…</p>Trust2007-03-11T14:59:49-05:002007-03-11T14:59:49-05:00Andreas Klöcknertag:mathema.tician.de,2007-03-11:/trust<p>Watch this:</p>
<object width="425" height="350"><param name="movie" value="http://www.youtube.com/v/UnXU7z2_6Jg"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/UnXU7z2_6Jg" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"></embed></object>
<p>You won’t regret it. :) (<span class="caps">PS</span>: Yes, I know it was made by a bunch of Germans, and yes, they misspelled “belief”, but that doesn’t kill it, in my opinion.)</p>
<p><strong>Embarassing Update:</strong> I figured out how to embed youtube videos. :)</p>New release 0.91 of lircd-xpc2007-02-26T19:35:34-06:002007-02-26T19:35:34-06:00Andreas Klöcknertag:mathema.tician.de,2007-02-26:/new-release-0-91-of-lircd-xpc<p>I have just uploaded version 0.91 of lircd-xpc to the site. This should make the daemon a bit more resilient against a state where one endpoint thread crashes, and the other lives on, resulting in an unresponsive daemon. If you’ve encountered this, you might want to update. This …</p><p>I have just uploaded version 0.91 of lircd-xpc to the site. This should make the daemon a bit more resilient against a state where one endpoint thread crashes, and the other lives on, resulting in an unresponsive daemon. If you’ve encountered this, you might want to update. This requires the latest libhid (and Python wrappers) including a patch that I’ve just sent to the list. That patch should make it into libhid svn pretty soon. Until then, you may grab my custom libhid Debian packages from the download directory.</p>Merry Christmas2006-12-26T21:33:43-06:002006-12-26T21:33:43-06:00Andreas Klöcknertag:mathema.tician.de,2006-12-26:/merry-christmas<p>Dearest readership! It is with great pleasure that on this second day of christmas I offer you my best wishes for the feast of love—with this picture that I have, in true christmas spirit, lifted from <a href="http://alobbs.com/modules.php?set_albumName=albun26&id=belen&op=modload&file=index&name=gallery&include=view_photo.php">elsewhere</a>:</p>
<p><img alt="bethlehem-400.jpeg" src="/images/bethlehem-400.jpeg" /></p>
<p>Merry Christmas to all anyway… :)</p>
<h3>Attachments</h3>
<ul>
<li><a href="/images/bethlehem-400.jpeg">bethlehem-400.jpeg</a></li>
</ul>Why does the Web have a Problem?2006-11-19T12:28:21-06:002006-11-19T12:28:21-06:00Andreas Klöcknertag:mathema.tician.de,2006-11-19:/why-does-the-web-have-a-problem<p>Because when you’re looking for <a href="http://en.wikipedia.org/wiki/Runge%E2%80%93Kutta_methods">Runge-Kutta methods</a>, you find <a href="http://myphysicslab.com/">neat stuff</a> and end up playing with it. That’s why.</p>
<p>(How’s that for a first journal post after fifteen years, huh?) :)</p>GCC 4.1 breaks Pylinear2006-07-01T22:49:17-05:002006-07-01T22:49:17-05:00Andreas Klöcknertag:mathema.tician.de,2006-07-01:/gcc-4-1-breaks-pylinear<p>If you get errors like</p>
<pre><code>multiple definition of
`_ZN5boost7numeric5ublas21scalar_divides_assignIT_T0_E8computedE'
</code></pre>
<p>when compiling PyLinear, it is because of this <a href="http://gcc.gnu.org/bugzilla/show_bug.cgi?id=28016"><span class="caps">GCC</span> bug</a>, and it’s quite likely that you are using <span class="caps">GCC</span> 4.1. Supposedly, this will be fixed in <span class="caps">GCC</span> 4.2. This bug will likely also affect other <span class="caps">UBLAS</span> applications.</p>
<p>The …</p><p>If you get errors like</p>
<pre><code>multiple definition of
`_ZN5boost7numeric5ublas21scalar_divides_assignIT_T0_E8computedE'
</code></pre>
<p>when compiling PyLinear, it is because of this <a href="http://gcc.gnu.org/bugzilla/show_bug.cgi?id=28016"><span class="caps">GCC</span> bug</a>, and it’s quite likely that you are using <span class="caps">GCC</span> 4.1. Supposedly, this will be fixed in <span class="caps">GCC</span> 4.2. This bug will likely also affect other <span class="caps">UBLAS</span> applications.</p>
<p>The suggested workaround is to use <span class="caps">GCC</span> 4.0.</p>
<p><strong><span class="caps">UPDATE</span></strong>: Everything seems fine in at least Debian’s gcc package of version 4.1.1-11.</p>Comcast, DHCP and MTU2006-06-26T23:50:33-05:002006-06-26T23:50:33-05:00Andreas Klöcknertag:mathema.tician.de,2006-06-26:/comcast-dhcp-and-mtu<p>If you are a Comcast customer (particularly in Illinois) and your Voice-over-<span class="caps">IP</span> (or other large-<span class="caps">UDP</span>-packet-using) application does not work as it should, don’t worry, it’s their fault. :P</p>
<p>For some reason, they include</p>
<pre><code>...
OPTION: 26 ( 2) Interface MTU 576
...
</code></pre>
<p>in the replies from their <span class="caps">DHCP …</span></p><p>If you are a Comcast customer (particularly in Illinois) and your Voice-over-<span class="caps">IP</span> (or other large-<span class="caps">UDP</span>-packet-using) application does not work as it should, don’t worry, it’s their fault. :P</p>
<p>For some reason, they include</p>
<pre><code>...
OPTION: 26 ( 2) Interface MTU 576
...
</code></pre>
<p>in the replies from their <span class="caps">DHCP</span> servers, which leads your computer to throw away large <span class="caps">UDP</span> packets (such as <span class="caps">SIP</span> <span class="caps">INVITE</span> replies). I don’t know why they’d do this since a) it breaks their customers’ applications (on purpose?!) and b) it puts more load on their network.</p>
<p>In any case, here’s the antidote: In <code>dhclient.conf</code>, say</p>
<pre><code># F!$#$ stupid comcast.
supersede interface-mtu 1500;
</code></pre>
<p>After that, everything should be working fine. If you’re violating their terms of service in doing so, it’s your own fault. I didn’t tell you. 8)</p>
<p>It only cost me like two hours of my life to find and fix this. Quote from the reply from the customer service rep:</p>
<blockquote>
<p>I’m sorry, but we do not have any information as to why the <span class="caps">MTU</span> is configured for the level that it is. That decision is likely made by the Network Department and something we would not be able to obtain or discuss.</p>
</blockquote>
<p>I love you, too.</p>Version 0.91 of TagPy is out2006-06-26T23:33:17-05:002006-06-26T23:33:17-05:00Andreas Klöcknertag:mathema.tician.de,2006-06-26:/version-0-91-of-tagpy-is-out<p>I’ve just released version 0.91 of TagPy. Besides some minor fixes, the biggest change is that you don’t say any more</p>
<pre><code>tag.setArtist("Fat Boy Slim")
</code></pre>
<p>Instead, the (<span class="caps">IMO</span>) much more pythonic</p>
<pre><code>tag.artist = "Fat Boy Slim"
</code></pre>
<p>is now where it’s at. Reading these attributes (and …</p><p>I’ve just released version 0.91 of TagPy. Besides some minor fixes, the biggest change is that you don’t say any more</p>
<pre><code>tag.setArtist("Fat Boy Slim")
</code></pre>
<p>Instead, the (<span class="caps">IMO</span>) much more pythonic</p>
<pre><code>tag.artist = "Fat Boy Slim"
</code></pre>
<p>is now where it’s at. Reading these attributes (and just these) is also changed from <code>tag.artist()</code> to <code>tag.artist</code>. I repeat, this only affects</p>
<ul>
<li><code>Tag.title</code></li>
<li><code>Tag.artist</code></li>
<li><code>Tag.album</code></li>
<li><code>Tag.genre</code></li>
<li><code>Tag.year</code></li>
<li><code>Tag.track</code></li>
<li><code>AudioProperties.length</code></li>
<li><code>AudioProperties.bitrate</code></li>
<li><code>AudioProperties.sampleRate</code></li>
<li><code>AudioProperties.channels</code></li>
</ul>
<p>Since these are so frequent, I saw a compelling reason to change them. Everything else in the <span class="caps">API</span> will remain as close as possible to TagLib’s C++ conventions.</p>
<p>Sorry for the source-incompatible change, it will not happen again.</p>
<p>Enjoy.</p>Clockwork now shows statistics on the current day2006-06-23T00:57:49-05:002006-06-23T00:57:49-05:00Andreas Klöcknertag:mathema.tician.de,2006-06-23:/clockwork-now-shows-statistics-on-the-current-day<p>I’ve made a minor update to clockwork that now allows you to immediately see how much longer the <em>current</em> workday is supposed to last, from the output of <code>clockwork howlong</code>. This update came out of a particular need that I had at my new summer job at the <a href="http://www.mcs.anl.gov">Math …</a></p><p>I’ve made a minor update to clockwork that now allows you to immediately see how much longer the <em>current</em> workday is supposed to last, from the output of <code>clockwork howlong</code>. This update came out of a particular need that I had at my new summer job at the <a href="http://www.mcs.anl.gov">Math and Computer Science divsion</a> at <a href="http://www.anl.gov">Argonne National Labs</a>. I’ve also released Version 1.1, with that (and another minor) change.</p>Rattle back, Rattleback!2006-05-13T14:20:46-05:002006-05-13T14:20:46-05:00Andreas Klöcknertag:mathema.tician.de,2006-05-13:/rattle-back-rattleback<p>As part of the course requirements for the mechanics class I took, a team of which I was a part designed a <a href="http://demo.physics.uiuc.edu/LectDemo/scripts/demo_descript.idc?DemoID=1148">Rattleback</a>. A rattleback is a top that appears to have a preferred direction of rotation, i.e. if you start spinning it the wrong way, it (unintuitively) will …</p><p>As part of the course requirements for the mechanics class I took, a team of which I was a part designed a <a href="http://demo.physics.uiuc.edu/LectDemo/scripts/demo_descript.idc?DemoID=1148">Rattleback</a>. A rattleback is a top that appears to have a preferred direction of rotation, i.e. if you start spinning it the wrong way, it (unintuitively) will turn around and spin “the right way”. There’s quite a bunch more to know about the physics [1] of it, if you care. It might also be an interesting dynamical system to study, as little is known about it past what can be found by numerical simulations. Speaking of numerical simulations, if you are a student of <span class="caps">EN137</span> after me and would like to take a peek at our simulation code (which was written in <a href="http://www.octave.org">Octave</a>, with a bit of <a href="/software/pylinear">PyLinear</a> sprinkled in), be my <a href="http://git.tiker.net/rattleback.git">guest</a>.</p>
<p>In any case, you may view the <a href="/dl/rattleback.avi">Rattle back, Rattleback!</a> of our rattleback to see for yourself!</p>
<p><span class="caps">PS</span>: I blatantly stole the title of this entry from one of the other teams. :)</p>
<p>[1] <em>A. Garcia, M. Hubbard</em> Spin Reversal of the Rattleback: Theory and Experiment Proceedings of the Royal Society of London. Series A, Mathematical and Physical Sciences, Vol. <strong>418</strong>, No. 1854 (Jul. 8, 1988) , pp. 165-197</p>
<h3>Attachments</h3>
<ul>
<li><a href="/dl/rattleback.avi">rattleback.avi</a></li>
</ul>Boost Bindings update for UFsparse2006-04-30T00:07:48-05:002006-04-30T00:07:48-05:00Andreas Klöcknertag:mathema.tician.de,2006-04-30:/boost-bindings-update-for-ufsparse<p>I have released a new version of the <a href="/software/boost-bindings">Boost Bindings</a> that fixes a problem with <a href="http://www.cise.ufl.edu/research/sparse/umfpack/"><span class="caps">UMFPACK</span></a> now typically being packaged as part of <a href="http://www.cise.ufl.edu/research/sparse/UFsparse/">UFsparse</a>. While I don’t think that this kind of packaging is a smart idea, Debian has recently jumped on the bandwagon, and thus this fix is …</p><p>I have released a new version of the <a href="/software/boost-bindings">Boost Bindings</a> that fixes a problem with <a href="http://www.cise.ufl.edu/research/sparse/umfpack/"><span class="caps">UMFPACK</span></a> now typically being packaged as part of <a href="http://www.cise.ufl.edu/research/sparse/UFsparse/">UFsparse</a>. While I don’t think that this kind of packaging is a smart idea, Debian has recently jumped on the bandwagon, and thus this fix is necessary. The only change is from</p>
<pre><code>#include <umfpack/umfpack.h>
</code></pre>
<p>to</p>
<pre><code>#include <umfpack.h>
</code></pre>
<p>to let the code find an <code>umfpack.h</code> that is now under a directory called <code>ufsparse</code>.</p>
<p><strong>Note:</strong> This version diverges from boost-bindings <span class="caps">CVS</span>, by this one change.</p>Think of those out there in the cold.2006-03-26T17:34:53-06:002006-03-26T17:34:53-06:00Andreas Klöcknertag:mathema.tician.de,2006-03-26:/think-of-those-out-there-in-the-cold<p>While I don’t typically propagate knitting or crochet content, this one was too good to pass up. :)</p>
<p>So, if you have a pretty pitiful-looking tree outside your window, why don’t you do it a favor, and…</p>
<p>…<a href="http://erika.fisherking.org/?page_id=271"><span class="caps">KNIT</span> <span class="caps">IT</span> A <span class="caps">SWEATER</span>?</a> :D</p>
<p><img alt="tree-sweater.jpeg" src="/images/tree-sweater.jpeg" /></p>
<p>Oh, and Josie (whose friend Jay pointed …</p><p>While I don’t typically propagate knitting or crochet content, this one was too good to pass up. :)</p>
<p>So, if you have a pretty pitiful-looking tree outside your window, why don’t you do it a favor, and…</p>
<p>…<a href="http://erika.fisherking.org/?page_id=271"><span class="caps">KNIT</span> <span class="caps">IT</span> A <span class="caps">SWEATER</span>?</a> :D</p>
<p><img alt="tree-sweater.jpeg" src="/images/tree-sweater.jpeg" /></p>
<p>Oh, and Josie (whose friend Jay pointed her to this story) will claim that she <a href="http://gramma.tiker.net/node/169">posted first</a>, which is <s><em>untrue</em></s> almost untrue. But my post has a picture. And more original commentary. So, there. Me = better. :)</p>Audio player problems2006-03-26T17:17:40-06:002006-03-26T17:17:40-06:00Andreas Klöcknertag:mathema.tician.de,2006-03-26:/audio-player-problems<p>I have generally been very happy with my new Samsung <span class="caps">YP</span>-<span class="caps">MT6Z</span>, until I hit a snag today. From my tests, it seems that the total lengh of all folder names on the device cannot exceed a certain number, on the order of a kilobyte or so. That boils down …</p><p>I have generally been very happy with my new Samsung <span class="caps">YP</span>-<span class="caps">MT6Z</span>, until I hit a snag today. From my tests, it seems that the total lengh of all folder names on the device cannot exceed a certain number, on the order of a kilobyte or so. That boils down to, say, 50 decently-named folders. That’s it. No more. Oddly enough, that kind of kills the advertised second use of the device as a means of data transport, seeing how it has more than enough storage, a gigabyte to be precise.</p>
<p>And the best part is, if you have more than that, the player will fail <em>unobviously</em> and <em>gracelessly</em>. It will simply display <code>NO FILE</code> in the <span class="caps">LCD</span> and refuse to find or play all my audio files. There is no error message, alerting me to the fact that I might have hit an internal limitation. It also won’t just ignore any extra folders. No, it insists on just ceasing to perform its main function altogether. Great work there, Samsung software engineers.</p>
<p>To top it off, I had the pleasure of speaking with Samsung Technical Support, who, after lenghty “research”, claimed that the device would not support more than <em>one</em> folder. I got the sneaking suspicion that the guy didn’t even know what I meant by “folder”, and terms such as “nesting” or “hierarchy” seemed to give him endless trouble. Yay!</p>
<p>Buyer, beware. It’s a good device if you can live with this limitation, which I will have to.</p>Rain Damage, Rain Damage, Go Away2006-01-28T20:05:39-06:002006-01-28T20:05:39-06:00Andreas Klöcknertag:mathema.tician.de,2006-01-28:/rain-damage-rain-damage-go-away<p>As I <a href="/node/375">previously reported</a>, my old laptop, aramis, got rained on and sustained water damage resulting in—lo and behold—not a dead computer. In fact, most of it was fine, it even booted into X, and all of its components were usable, it would just always crash after around …</p><p>As I <a href="/node/375">previously reported</a>, my old laptop, aramis, got rained on and sustained water damage resulting in—lo and behold—not a dead computer. In fact, most of it was fine, it even booted into X, and all of its components were usable, it would just always crash after around 15 minutes. That led me to believe that maybe, by switching out the mainboard, I might obtain a usable machine again.</p>
<p>Putting that plan into practice, I downloaded <span class="caps">IBM</span>’s <a href="ftp://ftp.software.ibm.com/pc/pccbbs/mobiles_pdf/23p0896.pdf">maintenance manual</a> for the laptop, which, for the record, was an <a href="http://thinkwiki.org/wiki/Category:A21m"><span class="caps">IBM</span> Thinkpad A-Series A21m</a>, and looked up the “<span class="caps">FRU</span>” (Factory Replacible Unit) number of the mainboard, which, in my case, was supposed to be 08K3264. These boards were hardly to be found on ebay and were hideously expensive, whereas a good bunch of cheaper boards labeled with <span class="caps">FRU</span> 12P3156, which suppposedly are compatible with ThinkPad A20 and A21 models, were readily available. I was unsure, but decided to take the risk—given that the 12P3156 board cost only $44.</p>
<p>After two nights of rather nerve-wrecking work on the laptop, I can announce that it is functioning again. :D The difference between the two boards types seems to be only that the one I had (which turned out to be <span class="caps">FRU</span> 12P3288) had a header for <span class="caps">TV</span>-Out, whereas the new one didn’t. Big deal. I can use my 800 MHz <span class="caps">CPU</span> on it, and as far as I can tell, it is being run at full speed.</p>
<p>It turns out that my old board had some visible corrosion damage that probably caused the trouble I described above. If I had taken my laptop apart right after the water came in, it might have dried and thus been rescued right away. May this be a lesson to whoever has to do this next. :)</p>
<p>Summary: When buying laptops, buy <span class="caps">IBM</span>! Why?</p>
<ul>
<li>Sturdily built</li>
<li>Maintenance information available</li>
<li>Existence of a sizable components <a href="http://ebay.com">aftermarket</a>.</li>
</ul>
<p>That said, I’m not sure Lenovo is going to do as well, but I hope so.</p>Taking notes like Germans do2006-01-24T22:09:41-06:002006-01-24T22:09:41-06:00Andreas Klöcknertag:mathema.tician.de,2006-01-24:/taking-notes-like-germans-do<p>Since the semester at Brown starts back tomorrow, I was a little concerned about my total lack of writing material. I still have my non-standard ruled paper from last year, but since a) it’s not a standard size, not even <span class="caps">US</span>-Letter, much less A4 and b) I don …</p><p>Since the semester at Brown starts back tomorrow, I was a little concerned about my total lack of writing material. I still have my non-standard ruled paper from last year, but since a) it’s not a standard size, not even <span class="caps">US</span>-Letter, much less A4 and b) I don’t like ruled paper, I figured, hey, I’m going to take notes in style like I used to.</p>
<p>Tadaa: Good old German <a href="/dl/graphpaper.pdf">Taking notes like Germans do</a>, letter size, 5mm squares on it.</p>
<p>Courtesy of <a href="http://incompetech.com/beta/plainGraphPaper/">Incompetech</a>. :)</p>Sports & The obligatory Aftermath2006-01-20T16:29:43-06:002006-01-20T16:29:43-06:00Andreas Klöcknertag:mathema.tician.de,2006-01-20:/sports-the-obligatory-aftermath<p>I spent today doing something very laudable: :yes: I went on an extended <a href="http://tinyurl.com/cc32e">bike ride</a>. Of course, riding your bike is not half as fun if you can’t waste some time letting your computer process the greatness of what was achieved. Fortunately, the <a href="http://gmap-pedometer.com">Google Maps Pedometer</a> comes to the …</p><p>I spent today doing something very laudable: :yes: I went on an extended <a href="http://tinyurl.com/cc32e">bike ride</a>. Of course, riding your bike is not half as fun if you can’t waste some time letting your computer process the greatness of what was achieved. Fortunately, the <a href="http://gmap-pedometer.com">Google Maps Pedometer</a> comes to the rescue! If you follow that link, you can even see a height profile of my ride, and you can witness the fact that I fulfilled my private goal of riding into Massachusetts. Not that I knew that I did, since there were no big “Welcome to Massachusetts” signs around. It was just when my legs started hurting badly enough that I thought the return trip might not be fun if I didn’t turn around now.</p>
<p>Well. Let’s think about that for a second, and make it into a general law of cycling: </p>
<blockquote>
<p>Don’t wait till your legs hurt to turn around!</p>
</blockquote>
<p>Otherwise, the return trip might hurt. Badly. Not that this reflects my experience today or something. (Owww… my legs…)</p>
<p>(As an added bonus, and since the GMaps-pedometer is so fun, I also put in my <a href="http://tinyurl.com/ct68k">way to school</a>.)</p>2005 in Review2006-01-09T07:49:47-06:002006-01-09T07:49:47-06:00Andreas Klöcknertag:mathema.tician.de,2006-01-09:/2005-in-review<p>Since it’s been relatively (<em>cough</em>) quiet around here, despite promises to the contrary, I’ll add a summary of my highlights of 2005, and hope that that will shed a bit of light on the latter half of the year, where many of you might not have heard as …</p><p>Since it’s been relatively (<em>cough</em>) quiet around here, despite promises to the contrary, I’ll add a summary of my highlights of 2005, and hope that that will shed a bit of light on the latter half of the year, where many of you might not have heard as much as promised from me.</p>
<h2>January</h2>
<ul>
<li>After my botched oral exam, I got my Diplom in Technomathematik from Uni Karlsruhe.</li>
<li>Went to <a href="/node/61">Amsterdam</a> with Josie for some fun. Crappier hostels along the year still make me yearn for the Flying Pig. :)</li>
</ul>
<h2>February</h2>
<ul>
<li>Started work at Prof. Dörfler’s institute, teaching and generally having fun with Jan, Kim and all the others.</li>
<li>Finished the month with a week-long snowboard vacation in Gleiming with Robert, Kiki, Frank and Lippe. Des war cool.</li>
<li>Got admitted to Brown Graduate School.</li>
</ul>
<h2>March</h2>
<ul>
<li>Work in Karlsruhe is in full force before the semester has begun, with bits of research and administrative software.</li>
<li>At the end of the month, I fly out to New York, then Providence, then <span class="caps">DC</span> and finally Raleigh to take a brief look at the graduate school from which I had </li>
</ul>Initial fixes2006-01-08T12:56:40-06:002006-01-08T12:56:40-06:00Andreas Klöcknertag:mathema.tician.de,2006-01-08:/initial-fixes<p>I have just released Version 0.90.1 of TagPy to fix a few build hiccups that were reported. Keep up the good work! Additionally, and as a cool benefit of me using Drupal for these pages, you can subscribe to the TagPy <a href="/taxonomy/term/30/0/feed"><span class="caps">RSS</span> feed</a>. :)</p>
<p>And of course you may …</p><p>I have just released Version 0.90.1 of TagPy to fix a few build hiccups that were reported. Keep up the good work! Additionally, and as a cool benefit of me using Drupal for these pages, you can subscribe to the TagPy <a href="/taxonomy/term/30/0/feed"><span class="caps">RSS</span> feed</a>. :)</p>
<p>And of course you may <em>download</em> the new version from <a href="/software/tagpy">the TagPy home page</a>.</p>A Stapler for PDFs2005-12-11T20:39:15-06:002005-12-11T20:39:15-06:00Andreas Klöcknertag:mathema.tician.de,2005-12-11:/a-stapler-for-pdfs<p><a href="http://www.accesspdf.com/pdftk/">pdftk</a> is a piece of <span class="caps">GPL</span> software that I’ve been looking for for a long time: It can split, join and otherwise mangle <span class="caps">PDF</span> files, which in my specific case helped me submit one of my (many) take-home final exams as a single file instead of three separate ones …</p><p><a href="http://www.accesspdf.com/pdftk/">pdftk</a> is a piece of <span class="caps">GPL</span> software that I’ve been looking for for a long time: It can split, join and otherwise mangle <span class="caps">PDF</span> files, which in my specific case helped me submit one of my (many) take-home final exams as a single file instead of three separate ones, reducing the margin for error on the professor’s part. :)</p>
<p>Oh, and of course, Debian’s already been there:</p>
<pre><code>aptitude install pdftk
</code></pre>
<p>:)</p>madman added to FreeBSD ports2005-10-24T00:18:57-05:002005-10-24T00:18:57-05:00Andreas Klöcknertag:mathema.tician.de,2005-10-24:/madman-added-to-freebsd-ports<p>Daniel Roethlisberger wrote in to note that madman is now in the FreeBSD <a href="http://www.freshports.org/audio/madman">ports</a> collection, which should make it a lot easier for you <span class="caps">BSD</span>’ers out there to try madman. A corresponding note has also been added to the download page.</p>The beagle has landed2005-08-22T15:16:56-05:002005-08-22T15:16:56-05:00Andreas Klöcknertag:mathema.tician.de,2005-08-22:/the-beagle-has-landed<p>We made it! Since last Friday (pretty late) night, we’re officially in Rhode Island. For the time being, we’re staying at <a href="http://www.ginny-b.com">Ginny-B campground</a>, and they are a <em>pretty decent</em> place. I mean, they didn’t prevent the rain yesterday, but you don’t get that at many campsites …</p><p>We made it! Since last Friday (pretty late) night, we’re officially in Rhode Island. For the time being, we’re staying at <a href="http://www.ginny-b.com">Ginny-B campground</a>, and they are a <em>pretty decent</em> place. I mean, they didn’t prevent the rain yesterday, but you don’t get that at many campsites anyway.</p>
<p>Even better, we’re looking at two apartments that we might actually want to move in to. We just need to figure out which, since, how else could it be, Josie likes one, and I like the other. 8)</p>
<p>More later. Wish us luck. Things are great. :)</p>Selling my stuff2005-08-12T11:51:27-05:002005-08-12T11:51:27-05:00Andreas Klöcknertag:mathema.tician.de,2005-08-12:/selling-my-stuff<p>While I’m in the process of packing up all my stuff, why don’t you help me out by <a href="http://tiker.net/sale">buying</a> some? I’d, you know, really appreciate that. And, knowing that it was mine, you know that it’s some quality junk. ;) And I <em>do</em> take Paypal.</p>
<p>You can …</p><p>While I’m in the process of packing up all my stuff, why don’t you help me out by <a href="http://tiker.net/sale">buying</a> some? I’d, you know, really appreciate that. And, knowing that it was mine, you know that it’s some quality junk. ;) And I <em>do</em> take Paypal.</p>
<p>You can also find us at the flea market in Singen tomorrow (i.e. Saturday). Come and give us your money. Oh, and take our stuff, too.</p>Linux on an IBM/Lenovo Thinkpad R522005-08-07T09:31:52-05:002005-08-07T09:31:52-05:00Andreas Klöcknertag:mathema.tician.de,2005-08-07:/linux-on-an-ibm-lenovo-thinkpad-r52<p>This post summarizes my experience of making the hardware in my shiny new <span class="caps">IBM</span> ThinkPad R52 work with Linux.</p>
<p>I initially tried Debian on this computer, but later on headed over to Ubuntu with a home-built kernel for a bunch of reasons on which I won’t elaborate here. <strong>Update …</strong></p><p>This post summarizes my experience of making the hardware in my shiny new <span class="caps">IBM</span> ThinkPad R52 work with Linux.</p>
<p>I initially tried Debian on this computer, but later on headed over to Ubuntu with a home-built kernel for a bunch of reasons on which I won’t elaborate here. <strong>Update:</strong> I’ve been back on Debian for a good while now.</p>
<p>The following remarks relate to Linux version 2.6.12.3, if not otherwise specified.</p>
<h2>Serial <span class="caps">ATA</span>: Intel <span class="caps">ICH6</span></h2>
<p>The Debian Sarge installer, using the “kernel26” option, fails to recognize the hard disk. The default 2.4 kernel works ok.</p>
<p>After building my own kernel, using the <code>Intel PIIX/ICH SATA support (SCSI_ATA_PIIX)</code> driver worked fine for the hard disk, but the <span class="caps">PATA</span> <span class="caps">DVD</span>/<span class="caps">CDRW</span>/<span class="caps">CDROM</span> was not found. The <a href="http://meltin.net/hacks/linux/t43.html">first attempt</a> was to compile support for <span class="caps">PATA</span> into the kernel as well (<em>not</em> just as a module), as the driver’s help states:</p>
<pre><code> This option enables support for ICH5 Serial ATA.
If PATA support was enabled previously, this enables
support for select Intel PIIX/ICH PATA host controllers.
</code></pre>
<p>However, this is only one part of the way there. The next part is to change</p>
<pre><code>#undef ATA_ENABLE_ATAPI /* define to enable ATAPI support */
#undef ATA_ENABLE_PATA /* define to enable PATA support in some
* low-level drivers */
</code></pre>
<p>into</p>
<pre><code>#define ATA_ENABLE_ATAPI /* define to enable ATAPI support */
#define ATA_ENABLE_PATA /* define to enable PATA support in some
* low-level drivers */
</code></pre>
<p>in <code>include/linux/libata.h</code>. I’m really puzzled why this is not on by default.</p>
<p><strong>Update:</strong> In Kernel 2.6.14, this patch is no longer necessary (or possible, for that matter). Instead, append <code>libata.atapi_enabled=1</code> to your boot command line.</p>
<p><strong>Update:</strong> In Kernel 2.6.16, there is a bad interaction of early versions of suspend2 and libata, which prevents <span class="caps">ATAPI</span> devices from working. The fix is to upgrade suspend2.</p>
<h2>Modem: A Conexant <span class="caps">HCF</span> WinModem</h2>
<p>You need to buy the driver from Linuxant to actually make this work. The <code>snd-intel8x0m</code> module loads, but does not work, so the <a href="http://linmodems.technion.ac.il/packages/smartlink/">Smartlink</a> modem daemon can’t work with this, at least not yet.</p>
<h2>Graphics: Intel i915</h2>
<p>Intel i915, supported out of the box by X.Org, using the 2.6.12.3 stock <span class="caps">DRI</span> module for that card. Two things made life with this chip a lot better:</p>
<pre><code>Section "Device"
Identifier "Intel Corporation Intel Default Card"
Driver "i810"
BusID "PCI:0:2:0"
Option "MonitorLayout" "CRT,LFP"
# NOTE THESE TWO
VideoRam 65536
Option "DDC" "false"
EndSection
</code></pre>
<p>The <code>VideoRam</code> option makes the card use more main memory during 3D operation, which makes many <span class="caps">GL</span> applications <em>lots</em> faster, because there’s less texture thrashing going on.</p>
<p>The <code>DDC</code> option allowed me to use my <span class="caps">NEC</span> Multisync <span class="caps">LCD</span> <span class="caps">1860NX</span> with the card; when the option was not specified, it refused to come up with anything higher than 640x480.</p>
<p><strong>Update:</strong> I have recently gotten multihead to work, so that I am now using an <span class="caps">LCD</span> and the laptop panel side-by-side. Pretty wicked cool. I’ve attached a working xorg.conf.</p>
<h2>Network: Broadcom Tigon3</h2>
<p>Works great using the <code>tg3</code> driver.</p>
<p>The only stumbling block is that Debian refuses to include this driver in its stock 2.6 kernels, since it has a builtin firmware blob. Nathanael Nerode, however, recently made a <a href="http://lwn.net/Articles/144133/">patch</a> that splits this out into a separate file, which would allow distribution with Debian in the future.</p>
<p><strong>Update:</strong> Debian seems to have come to its senses; the <code>tg3</code> driver is back in the stock kernels as of 2.6.14, at least.</p>
<h2><span class="caps">WLAN</span>: Intel <span class="caps">IPW2200BG</span></h2>
<p>Theoretically supported through the <a href="http://ipw2200.sf.net"><code>ipw2200</code></a> driver, but this is really flaky right now. Early versions (0.19, <span class="caps">IIRC</span>) drop the connection every once in a while and need to be reloaded to work again. Newer versions (>1.0.4) are bitten by “Firmware error” messages, as detailed in <a href="http://bughost.org/bugzilla/show_bug.cgi?id=592">this bug log</a>. No solution as yet.</p>
<p><strong>Update:</strong> Version 1.0.3 is reported working somewhere, but it apparently needs a patch to compile against 2.6.12.3. I haven’t tried this yet.</p>
<p><strong>Update:</strong> Version 1.0.0, as included in Kernel 2.6.14, works like a charm. Get firmware version 2.2 to go with it. Better yet, this version is also in the Debian stock kernels.</p>
<h2>Sound: Intel <span class="caps">AC</span>‘97</h2>
<p>No problems using the <span class="caps">ALSA</span> <code>snd-intel8x0</code> driver.</p>
<h2>Power management</h2>
<p>SpeedStep and <span class="caps">ACPI</span> work out of the box with the appropriate drivers. Suspend-to-<span class="caps">RAM</span> works, just like -to-disk, even though currently, 3D (<span class="caps">DRI</span>, that is) can’t be used after wakeup.</p>
<h2>Other things</h2>
<p>The display is <em>very</em> bright, even a bit <em>too</em> bright for my taste. The keyboard is excellent, as is usual for <span class="caps">IBM</span> machines. The fan is louder than on my old ThinkPad A21m, but with the processing power of a Pentium-M running at 1.7 GHz, I am supposing that this was to be expected. I’m a bit concerned that the <span class="caps">ACPI</span> Thermal Zone 0 reports temperatures of 76 degrees Celsius under sustained peak load, which sounds a bit high. But then, the trip point is at 90 degrees, so I guess it’s fine.</p>
<p>Also, I’m currently trying to return the copy of Windows <span class="caps">XP</span> that came with the machine, and on the upside, my complaint has not yet been smacked down by Lenovo. So there is <em>some</em> hope. I’ll write a detailed report once this is over.</p>
<p>I’ll keep this report updated as I continue to tame the hardware. Martin Schwenke’s <a href="http://meltin.net/hacks/linux/t43.html">page</a> on the T43, quoted above, was of great help in getting everything to run.</p>
<h2>Suspend-to-Disk/Suspend-to-Ram</h2>
<p>Suspend to Disk is straightforward, for Suspend to <span class="caps">RAM</span> to work you need one little non-obvious trick: specify <code>acpi_sleep=s3_bios</code> on the command line. Also make sure that vbetool does <em>not</em> mess with your video card (i.e. no repost, no state saving). Thanks to <a href="http://thinkwiki.org">ThinkWiki</a> for the hint.</p>
<h2>Conclusion</h2>
<p>I’m perfectly happy with the machine. :)</p>
<h3>Attachments</h3>
<ul>
<li><a href="/dl/dualhead-xorg.conf">dualhead-xorg.conf</a></li>
</ul>Life in London2005-08-04T12:30:08-05:002005-08-04T12:30:08-05:00Andreas Klöcknertag:mathema.tician.de,2005-08-04:/life-in-london<p>The <a href="http://gallery.tiker.net/v/andreas/vacation/london05">pictures</a> from our trip to London are up. Enjoy this one, as well.</p>
<p>I’ll update this post with an account of the trip soon-ish. Before then, let me just add that you should <em>not</em> stay at the “Smart Backpackers Hyde Park Inn Hostel”, even though they tend to …</p><p>The <a href="http://gallery.tiker.net/v/andreas/vacation/london05">pictures</a> from our trip to London are up. Enjoy this one, as well.</p>
<p>I’ll update this post with an account of the trip soon-ish. Before then, let me just add that you should <em>not</em> stay at the “Smart Backpackers Hyde Park Inn Hostel”, even though they tend to be dirt cheap. You’ll regret it… </p>Life and the Office, and Work, too2005-08-04T08:00:31-05:002005-08-04T08:00:31-05:00Andreas Klöcknertag:mathema.tician.de,2005-08-04:/life-and-the-office-and-work-too<p>Did you ever wonder how much the terms “guilt” and “office” are connected? Did you ever wish to just relax while working (and have your work benefit from it), but didn’t actually do so, since it looks bad? Wish you could work at home, knowing you’d be more …</p><p>Did you ever wonder how much the terms “guilt” and “office” are connected? Did you ever wish to just relax while working (and have your work benefit from it), but didn’t actually do so, since it looks bad? Wish you could work at home, knowing you’d be more effective there? Did nine-to-five ever feel like a nice corset, like an excuse for not getting work done? Do you want to know why there’s no way past proper discipline? I felt many of these things during my days at Prof. Dörfler’s institute, as a consequence of having a proper office, colleagues and all, but I was never really able to put them into context or come to a conclusion on what to do about them.</p>
<p>Paul Graham, of whose writing I’ve been a fanboy for a while, says it <a href="http://www.paulgraham.com/opensource.html">straight and to the point</a>, and many of his points seem like appropriate endpoints of thoughts I’ve had.</p>
<p>I’m glad I found this before starting grad school for several reasons:</p>
<ul>
<li>Now I know I’m not alone in feeling like this.</li>
<li>Feeling guilty about stuff is nearly always a bad idea.</li>
<li>It’s almost always a better idea to just do what you think is reasonable, even if it looks bad.</li>
</ul>
<p>Duh? Maybe. But I challenge you to live by these principles every day. (And myself, too.)</p>
<p><em><span class="caps">PS</span>: Sorry that this is propagated straight from Slashdot. But then, I think it’s too important to miss.</em></p>Trip to Augsburg2005-07-21T03:39:45-05:002005-07-21T03:39:45-05:00Andreas Klöcknertag:mathema.tician.de,2005-07-21:/trip-to-augsburg<p>The <a href="http://gallery.tiker.net/v/andreas/short-trips/augsburg">pictures from our trip to Augsburg</a> are up. Enjoy.</p>Losing my Faith in Debian2005-07-18T06:09:48-05:002005-07-18T06:09:48-05:00Andreas Klöcknertag:mathema.tician.de,2005-07-18:/losing-my-faith-in-debian<p>I really do not like the way things are going in recent times within the Debian project. I feel that a group of people has gained way too much control over how things are run, and those people do not seem to care about users, they seem to care about …</p><p>I really do not like the way things are going in recent times within the Debian project. I feel that a group of people has gained way too much control over how things are run, and those people do not seem to care about users, they seem to care about enforcing the <span class="caps">DFSG</span> (the Debian Free Software Guidelines) to the letter. This manifests itself in several changes that have the potential to harm Debian in the short and in the long term:</p>
<ul>
<li>Drivers containing binary firmware has been removed from the stock kernels, on the argument that they are “non-free”. This is, of course, true. Yet, I don’t see the difference between storing the firmware in an <span class="caps">EEPROM</span> in the hardware, or in a binary blob in the driver. Also, demanding that the source to these binaries be open is pure utopia: manufacturers are already struggling to keep the programming info for their chips secret. Forcing them to open up their firmware is a) going to <em>really</em> reveal the company’s <span class="caps">IP</span>, somewhat unlike chip datasheets, making this completely unjustifiable from a business standpoint b) mostly useless technically. While I see the point of being able to hack your firmware, the toolchains required to do so are often also not open, <em>most</em> users are not going to care and would rather prefer their device to just <em>work</em>, and, lastly, the binary blobs do <em>not</em> pose any obstacle to kernel development (be it from a portability, maintainability, or clarity point of view).</li>
</ul>
<p>The most telling part of the story is that while these people (I am tempted to say “zealots”.) were quick to remove the corresponding firmware, but did not care enough to make it available through non-free to be able to cater to the users’ very real interest to use their hardware. Even worse, for the Broadcom Tigon3 Gigabit ethernet chip</p>These are turbulent times.2005-07-13T18:52:19-05:002005-07-13T18:52:19-05:00Andreas Klöcknertag:mathema.tician.de,2005-07-13:/these-are-turbulent-times<p>To follow up on the previous post, my laptop did find its way back to life. But unfortunately, only briefly so. It started all the way into X just once, and now seems to be dead forever. In the light of this, I’ve given in and ordered <a href="http://thinkwiki.org/wiki/Category:R52"><code>aramis</code><span class="quo">‘</span>s …</a></p><p>To follow up on the previous post, my laptop did find its way back to life. But unfortunately, only briefly so. It started all the way into X just once, and now seems to be dead forever. In the light of this, I’ve given in and ordered <a href="http://thinkwiki.org/wiki/Category:R52"><code>aramis</code><span class="quo">‘</span>s successor</a>, tentatively named <s><a href="http://gallery.tiker.net/v/josie/completed_projects/IMG_4541.JPG.html"><code>little-bear</code></a></s> <code>grizzly</code>. (I was looking for something a bit more manly than <code>little-bear</code>.) :)</p>
<p>In the meantime, the only reliable computer I’ve had is at work, while at home, I first had the apartment server, then my mom’s <span class="caps">PC</span>, which I had fortunately begun to build before my laptop died, then my parents’ old <span class="caps">PC</span> (a K6-300, yuck!) and now the apartment-server-turned-my-dad’s-<span class="caps">PC</span> once again. All these computers have been blessed with <a href="http://kubuntu.org/">kubuntu</a>, which I can recommend as a really sweet piece of engineering. It makes installing a Debian system with non-server-capabilities easier than ever before.</p>
<p>Work is promising to be busy for the rest of my time there, with a bunch of trivial things still to be done, and other, less trivial, but more fun things expected (like a few good pointers on where to take my <a href="/academic">past thesis work</a>, and someone else in the physics department to bounce ideas off of). Private life will be equally as busy, with</p>
<ul>
<li>a trip to France</li>
<li>a trip to Great Britain</li>
<li>a farewell party for myself</li>
<li>packing <span class="amp">&</span> moving to Providence</li>
</ul>
<p>all lined up.</p>
<p>Unfortunately, all this means that most of my private projects are on hold until everything settles again, which I pretty much do not expect to happen until October or so. Indeed, these are turbulent times.</p>
<p><strong>Update:</strong> <code>grizzly</code> has landed on my desk, and thus far, I’m really happy with it. Except for one dead (red) pixel at the top right of my screen. Which doesn’t really matter. :yes:</p>Uh, yay.2005-07-04T18:48:00-05:002005-07-04T18:48:00-05:00Andreas Klöcknertag:mathema.tician.de,2005-07-04:/uh-yay<p>This July 4th could have been better. While it was a very appropriate day to get my visa (yay!), the evening was actually fairly bad. First, I discovered that a heavy rainstorm this afternoon has found its way into my laptop through an opened window. As yet, the laptop is …</p><p>This July 4th could have been better. While it was a very appropriate day to get my visa (yay!), the evening was actually fairly bad. First, I discovered that a heavy rainstorm this afternoon has found its way into my laptop through an opened window. As yet, the laptop is drying, and as far as I can tell, the hard drive is dry. So this might be just monetary damage.</p>
<p>Then, I find out that Drupal has a few severe security bugs. I upgraded my (recent-version) site and yanked the plug from Josie’s. I can almost already hear her complain. I’ve also yanked the gallery site, as I’m not sure whether its software is affected.</p>
<p>Altogether, the good thing is that tomorrow can’t be much worse.</p>
<p><strong>Update:</strong> How appropriate. At present, the house does not have running water. What next?</p>Hendrik on Spiegel Online2005-06-24T12:35:32-05:002005-06-24T12:35:32-05:00Andreas Klöcknertag:mathema.tician.de,2005-06-24:/hendrik-on-spiegel-online<p>A friend of mine, <a href="http://www.spiegel.de/fotostrecke/0,5538,PB64-SUQ9MTA1NDQmbnI9MQ_3_3,00.html">Hendrik</a>, is on Spiegel Online with his pet project, the <a href="http://www.stanfordracing.org/">Stanford entry</a> into the <span class="caps">DARPA</span> grand challenge. His team also made <a href="http://hardware.slashdot.org/article.pl?sid=05/06/06/2243229&tid=216&tid=14">Slashdot</a> a while ago. :D</p>
<p>Go, Hendrik! Will you ever talk to me again, now that you’re famous? ;)</p>ARPACK/LAPACK Symbol Duplication2005-06-22T19:26:29-05:002005-06-22T19:26:29-05:00Andreas Klöcknertag:mathema.tician.de,2005-06-22:/arpack-lapack-symbol-duplication<p><strong>Update:</strong> The packages distributed here have been superseded by the new <a href="/software/arpack">autotoolized <span class="caps">ARPACK</span></a>.</p>
<p>This evening, I ran into a pretty frustrating problem with <a href="http://www.caam.rice.edu/software/ARPACK/"><span class="caps">ARPACK</span></a>. It aborted without being able to compute an Arnoldi factorization from within one program, but the same snippet of code (with the same matrix!) would work …</p><p><strong>Update:</strong> The packages distributed here have been superseded by the new <a href="/software/arpack">autotoolized <span class="caps">ARPACK</span></a>.</p>
<p>This evening, I ran into a pretty frustrating problem with <a href="http://www.caam.rice.edu/software/ARPACK/"><span class="caps">ARPACK</span></a>. It aborted without being able to compute an Arnoldi factorization from within one program, but the same snippet of code (with the same matrix!) would work just fine in another.</p>
<p>To make a long story short, I eventually tracked down the root cause: Both <span class="caps">LAPACK</span> and <span class="caps">ARPACK</span> define a routine called <code>SECOND</code>, but with different call signatures. <span class="caps">LAPACK</span>’s copy is a function, whereas <span class="caps">ARPACK</span>’s copy is a subroutine. Usually, all goes well, and the linker is intelligent enough to pick the right copy in all instances. I was unfortunate enough to be in a situation where that was not the case. The call to the wrong <code>SECOND</code> messed up the stack, and things got really strange from there. (For example, <code>DLARNV</code> returned a NaN instead of a proper number.)</p>
<p>Hence, the <span class="caps">ARPACK</span>-supplied <code>SECOND</code> routine needs to be renamed. The attached <a href="/dl/arpack-arscnd-3.patch.gz"><span class="caps">ARPACK</span>/<span class="caps">LAPACK</span> Symbol Duplication</a> against <span class="caps">ARPACK</span> version 96 (a revised version of a quick sed job) realizes this suggestion by renaming the routine to <code>ARSCND</code> (as in “ARpack SeCoND”), which fixed the problem for me. Apparently, somebody else on the <a href="http://www.octave.org/octave-lists/archive/help-octave.2004/msg01466.html">Octave</a> team ran into a similar problem, but appeared to get only unhelpful replies.</p>
<p>Hopefully, this posting will save somebody some trouble.</p>
<p><strong>Update:</strong> This <a href="http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=315570">Debian bug</a> tracks progress on the issue.</p>
<p><strong>Update 2:</strong> <a href="/dl/arpack-arscnd-3.patch.gz"><span class="caps">ARPACK</span>/<span class="caps">LAPACK</span> Symbol Duplication</a> of the patch works against <span class="caps">ARPACK96</span> with patch.tar.gz applied. It’s also slightly cleaner: It renames <code>second.f</code> to <code>arscnd.f</code>.</p>
<p><strong>Update 3:</strong> I got a reply from Rich Lehoucq acknowledging the bug two years ago, but he never got around to posting my patch. Thus I’m taking the liberty to redistribute an updated version of <span class="caps">ARPACK</span> here. The build system has also been updated so that it should work on most modern flavors of Linux without any tweaking.</p>
<h3>Attachments</h3>
<ul>
<li><a href="/dl/arpack-arscnd-2.patch.gz">arpack-arscnd-2.patch.gz</a></li>
<li><a href="/dl/arpack-arscnd-3.patch.gz">arpack-arscnd-3.patch.gz</a></li>
<li><a href="/dl/arpack-akloeckner-07.tar.gz">arpack-akloeckner-07.tar.gz</a></li>
</ul>Burning you were to know…2005-06-20T06:39:42-05:002005-06-20T06:39:42-05:00Andreas Klöcknertag:mathema.tician.de,2005-06-20:/burning-you-were-to-know<p>…the true origin of <a href="http://news.tiker.net/node/352">Darth Tater</a>. Wait <a href="http://storewars.org">no longer</a>.</p>While pretty unnecessary, …2005-06-15T17:31:51-05:002005-06-15T17:31:51-05:00Andreas Klöcknertag:mathema.tician.de,2005-06-15:/while-pretty-unnecessary<p>…I think it’s cool that somebody at <a href="http://radiobremen.de">Radio Bremen</a> translates each month’s news into <a href="http://www.radiobremen.de/nachrichten/platt/">Plattdüütsch</a> and <a href="http://www.radiobremen.de/nachrichten/latein/">Latin</a>. Such things only happen when commercial interest is <em>not</em> at the forefront of everyone’s mind.</p>Find the word2005-06-04T13:49:14-05:002005-06-04T13:49:14-05:00Andreas Klöcknertag:mathema.tician.de,2005-06-04:/find-the-word<p>Josie’s doing something with kids tomorrow, and she needed a word puzzle. I made her one. No. I made her a program to make <em>any number of them</em>. :) Like this one:</p>
<pre><code>KJAPANINAW
ACOUSLAPDO
NIUSBELEUR
GPRDIPPAPC
ASOUDEHCTE
RBCBHGAERS
OEKYMOUSET
OOEALEHLIE
WIRIJSELAR
CATNGMHIDU
</code></pre>
<p>I’ve attached the <a href="http://www.python.org">Python</a> <a href="/dl/find-the-word.py.txt">Find the word …</a></p><p>Josie’s doing something with kids tomorrow, and she needed a word puzzle. I made her one. No. I made her a program to make <em>any number of them</em>. :) Like this one:</p>
<pre><code>KJAPANINAW
ACOUSLAPDO
NIUSBELEUR
GPRDIPPAPC
ASOUDEHCTE
RBCBHGAERS
OEKYMOUSET
OOEALEHLIE
WIRIJSELAR
CATNGMHIDU
</code></pre>
<p>I’ve attached the <a href="http://www.python.org">Python</a> <a href="/dl/find-the-word.py.txt">Find the word</a> to produce stuff like this to this story, should you happen to need something like that. It’s the stupidest possible algorithm, purely random. It works well enough, though. You also need a word file, I’ve attached an <a href="/dl/words">Find the word</a>. Then you call it with</p>
<pre><code>python find-the-word.py words
</code></pre>
<p>and it spits out what you want. Golly. :P</p>
<h3>Attachments</h3>
<ul>
<li><a href="/dl/words">words</a></li>
<li><a href="/dl/find-the-word.py.txt">find-the-word.py.txt</a></li>
</ul>Sieve of Erathostenes2005-06-02T15:41:00-05:002005-06-02T15:41:00-05:00Andreas Klöcknertag:mathema.tician.de,2005-06-02:/sieve-of-erathostenes<p>I challenge you to come up with a shorter/simpler piece of code that executes the <a href="http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes">Sieve of Erathostenes</a> than this Python snippet:</p>
<pre><code>N = 1000
candidates = range(2, N+1)
i = 0
while i < len(candidates):
candidates = [n for n in candidates
if n % candidates[i] != 0
or n <= candidates …</code></pre><p>I challenge you to come up with a shorter/simpler piece of code that executes the <a href="http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes">Sieve of Erathostenes</a> than this Python snippet:</p>
<pre><code>N = 1000
candidates = range(2, N+1)
i = 0
while i < len(candidates):
candidates = [n for n in candidates
if n % candidates[i] != 0
or n <= candidates[i]]
i += 1
print candidates
</code></pre>
<p>Of course, renaming variables or such silliness does not count. I know that a stopping condition of <code>candidates[i] < math.sqrt(N)</code> would make the whole thing faster, but that’s beside the point. This is about <em>simplicity</em>.</p>
<p>So, go ahead and humiliate me. I know you want to. }:)</p>LinuxTag is not free any more (Update: or is it?)2005-05-31T14:24:42-05:002005-05-31T14:24:42-05:00Andreas Klöcknertag:mathema.tician.de,2005-05-31:/linuxtag-is-not-free-any-more-update-or-is-it<p>Just now, I was thinking about which weekend I’d have to reserve to go to <a href="http://www.linuxtag.org">LinuxTag</a>, which will be taking place in my current home town, Karlsruhe. Turns out that I don’t even need to decide that: They will be charging 35€ to get in this time around …</p><p>Just now, I was thinking about which weekend I’d have to reserve to go to <a href="http://www.linuxtag.org">LinuxTag</a>, which will be taking place in my current home town, Karlsruhe. Turns out that I don’t even need to decide that: They will be charging 35€ to get in this time around. The show was good in 2003, but yaaaawningly boring in 2004. (Yes, I can hear you yawn now, too.) Even though I am officially employed now and the entrance fee would not be a major problem, I will <em>not</em> pay, and consequently <em>not</em> go. I don’t think charging money is a good idea, and I firmly believe that most of the community will stay away as well. They have a figleaf “community ticket” program that depends on some sort of viral scheme, but I <em>really</em> doubt that it will work out. Look at the people who have made Linux what it is, and who matter the most: the developers. In general, they don’t have much money to just spend on random stuff. Plus, they <em>are</em> already contributing valuable time for free. If LinuxTag wants to turn them away, so be it. In my case, they’ve succeeded. But who else would be the target audience? Commercial users? Maybe. Private users? I doubt they’ll pay. Then who? I don’t know.</p>
<p>Back in 2003, I made a donation to them to keep up the good work. I’d be willing to donate more this year (and yes, more than the 35€ they’re demanding), if they told me that they really needed the support and the whole thing was still free. If they’re forcibly trying to separate me from my money, I’ll really rather stay at home. I’m stubborn like that. Screw them.</p>
<p>They say that Linux has “grown up”, and so, LinuxTag needs to do the same. If they are trying to become a commercial fair, fine. Let them be another <em>BuzzwordWorldExpo</em>(tm). Other fairs are giving away exposition space to <span class="caps">OSS</span> projects as well, and have generally more to offer. Let them compete and see how they fare.</p>
<p><strong>Update:</strong> The “viral scheme” seems to have worked out at least to a point where I got a free ticket to LinuxTag. I guess that public whining is a good way to score one. So, now I know what to do that weekend. :) Based on how things pan out, I might have to take back what I said above, in which case I’ll do so on this journal.</p>
<p>By the rules, I may now be able to invite more people to LinuxTag. I’m certainly willing to do my part to get more people invited, should they want to. Just drop me an <a href="/aboutme">email</a>.</p>“Sith” is a four-letter word2005-05-31T01:30:49-05:002005-05-31T01:30:49-05:00Andreas Klöcknertag:mathema.tician.de,2005-05-31:/sith-is-a-four-letter-word<p>Think anagrams. ‘Nuff said. :)</p>Don’t shop at K&M2005-05-27T08:22:11-05:002005-05-27T08:22:11-05:00Andreas Klöcknertag:mathema.tician.de,2005-05-27:/dont-shop-at-k-m<p>If you ever thought about shopping at <a href="http://www.kmelektronik.de">K&M Elektronik</a>, don’t do it. They suck. Here’s why:</p>
<p>I bought a <a href="/node/205">wireless card</a> from them a while ago, which, over time, <s>bit the bullet</s>kicked the bucket. I am supposing that I was seeing thermal problems, since the card …</p><p>If you ever thought about shopping at <a href="http://www.kmelektronik.de">K&M Elektronik</a>, don’t do it. They suck. Here’s why:</p>
<p>I bought a <a href="/node/205">wireless card</a> from them a while ago, which, over time, <s>bit the bullet</s>kicked the bucket. I am supposing that I was seeing thermal problems, since the card would always start out fine, but then degrade and finally cut the connection as it “warmed up”. So far, so good. That can happen. Understandably, I wanted the broken card exchanged. They gave me three options:</p>
<ul>
<li>Get my money back, minus an apparently time-dependent “fee” of 2,70 Euros. (Hello? The card is <em>broken</em>. You sold me <em>broken stuff</em>.) :o</li>
<li>Exchange it for another card with unknown Linux support right now and let me pay the price difference, without the chance to return it if it doesn’t work in Linux. (Errr, no.)</li>
<li>Send it in and give me a replacement, but even then I can’t be sure that I get the same type of card. (Not even close.)</li>
</ul>
<p>The rep’s explanation was that I bought the card as “Markenfabrikat” (=”brand name”) without being guaranteed a specific brand of card. Riiiiight. Now I’m really not so sure I bought <em>anything</em> except abysmal customer service. :barf:</p>
<p>Needless to say, I went for the money option and took what little money was left straight to a <a href="http://www.arlt.com">competitor</a>, which has this far always had good service, even in borderline cases.</p>Drupal 4.62005-05-25T17:47:44-05:002005-05-25T17:47:44-05:00Andreas Klöcknertag:mathema.tician.de,2005-05-25:/drupal-4-6<p>I’ve just finished updating this site to Drupal 4.6. It went pretty smoothly, except for some hiccups with the <code>image</code> module. I like the new version, even though not much is different. The slightly changed look of the site might give this away, too. If there are any …</p><p>I’ve just finished updating this site to Drupal 4.6. It went pretty smoothly, except for some hiccups with the <code>image</code> module. I like the new version, even though not much is different. The slightly changed look of the site might give this away, too. If there are any problems with the upgrade, let me know.</p>
<p><strong>Update:</strong> The new <code>image</code> module is a dog. I’ll be using <a href="/gallery">gallery2 integration</a> instead. The Drupal module <a href="http://drupal.org/project/gallery">project</a> has more info.</p>
<p><strong>Update 2:</strong> Screw it. Not even that works right. My galleries and journal stay nice and separate. Period. :no:</p>Check…2005-05-18T14:42:22-05:002005-05-18T14:42:22-05:00Andreas Klöcknertag:mathema.tician.de,2005-05-18:/check<p>…<a href="http://funnyfox.org">this</a> out. :)</p>Misspelling my Domain2005-05-17T15:48:46-05:002005-05-17T15:48:46-05:00Andreas Klöcknertag:mathema.tician.de,2005-05-17:/misspelling-my-domain<p>In recent times, I’ve actually seen more <em>mis</em>spellings of the domain which hosts this journal than accurate ones. I’ve seen</p>
<ul>
<li><a href="http://tinker.net">tinker.net</a>—which, in reality, is a site on how to catch <a href="http://www.reel-big-fish.com/">reel big fish</a>.</li>
<li>ticker.net—which, in reality, is held by some domain squatter.</li>
<li>fiker …</li></ul><p>In recent times, I’ve actually seen more <em>mis</em>spellings of the domain which hosts this journal than accurate ones. I’ve seen</p>
<ul>
<li><a href="http://tinker.net">tinker.net</a>—which, in reality, is a site on how to catch <a href="http://www.reel-big-fish.com/">reel big fish</a>.</li>
<li>ticker.net—which, in reality, is held by some domain squatter.</li>
<li>fiker.net—which, in reality, does not exist, but bears a close phonetic relationship to a pretty vulgar German word. Worst of all, I caught this misspelling from somebody in my tutorial session. I really don’t know what she thinks of me, but I’m fairly sure I’m not like that.</li>
</ul>
<p>This makes me feel the accomplishment of someone who’s found the right domain name, since people can’t seem to spell my last name either. :) Of course, I can’t really judge how many people just think, “Awww man, learn to spell.” To which I could grinningly say, with the same feeling of accomplishment, “Hah! The pun you’re missing is in <em>German</em>. The equivalent pun in English can be pulled off using <code>tician.net</code> (which you may grab while it’s not taken).” Unfortunately, I might not be there to enjoy the occasion. ;)</p>
<p>Of course, my desire to add one pun on top of another by calling my journal “news.tiker” has only aggravated the problem. Oh well. }:)</p>madman meets musepack2005-05-17T15:43:52-05:002005-05-17T15:43:52-05:00Andreas Klöcknertag:mathema.tician.de,2005-05-17:/madman-meets-musepack<p>Thanks to Scott Wheeler’s tireless work on Taglib, madman (the development version in Arch, really) now has support for Musepack (or “<span class="caps">MPC</span>”) files. This was half-way to being added once before, but support in Taglib makes this a no-brainer. Seems like tag writing in Taglib is still not 100 …</p><p>Thanks to Scott Wheeler’s tireless work on Taglib, madman (the development version in Arch, really) now has support for Musepack (or “<span class="caps">MPC</span>”) files. This was half-way to being added once before, but support in Taglib makes this a no-brainer. Seems like tag writing in Taglib is still not 100%, but I assume it’ll get there. I hope you’re happy. :)</p>
<p>To celebrate this, I also fixed Arch downloads. If you got complaints about 2004 last time you tried to get something from Arch, try again.</p>Debian packages of the development version2005-05-16T16:41:35-05:002005-05-16T16:41:35-05:00Andreas Klöcknertag:mathema.tician.de,2005-05-16:/debian-packages-of-the-development-version<p>Ben Montgomery made some <a href="http://www.montynet.org/packages/madman">Debian packages</a> of a recent development version of madman. Try them out, and bother Ben or the list if you have trouble. Yes, I do agree that this is a strong sign that I should release 0.94 <span class="caps">ASAP</span>. It’s coming, don’t worry. ;)</p>
<p><strong>Update …</strong></p><p>Ben Montgomery made some <a href="http://www.montynet.org/packages/madman">Debian packages</a> of a recent development version of madman. Try them out, and bother Ben or the list if you have trouble. Yes, I do agree that this is a strong sign that I should release 0.94 <span class="caps">ASAP</span>. It’s coming, don’t worry. ;)</p>
<p><strong>Update:</strong> Ben just told me that he doesn’t have time to keep up with development any more, so he’s retired his packages. Any volunteers to take his place?</p>Semolina Pudding / Grießpudding2005-05-15T13:41:50-05:002005-05-15T13:41:50-05:00Andreas Klöcknertag:mathema.tician.de,2005-05-15:/semolina-pudding-griesspudding<p>Yesterday, Josie and I were shopping at <a href="http://penny.de">Penny</a> and found a pack of semolina that had a really gorgeous-looking pudding on the front. I mean gorgeous, like, just the right reflectiveness, wobbliness, everything. And the pack, whose side conveniently showed the recipe, was only 35 cents. Arrr. Soo good. In …</p><p>Yesterday, Josie and I were shopping at <a href="http://penny.de">Penny</a> and found a pack of semolina that had a really gorgeous-looking pudding on the front. I mean gorgeous, like, just the right reflectiveness, wobbliness, everything. And the pack, whose side conveniently showed the recipe, was only 35 cents. Arrr. Soo good. In any case, if you need dessert and are not afraid of converting from metric, here goes:</p>
<ul>
<li>125g of semolina (Weichweizengrieß in German),</li>
<li>1 liter of milk,</li>
<li>4 heaping tbsp of sugar,</li>
<li>a pinch of salt,</li>
<li>peels scraped off a lemon with a <em>fine</em> cheesegrater (Josie says that’s called “zest”),</li>
<li>and an egg.</li>
</ul>
<p>Now do the following:</p>
<ul>
<li>Bring the milk to a boil.</li>
<li>Separate the egg white from the yolk, stir the yolk into 2 tbsp of water until smooth.</li>
<li>Beat the egg white until it’s pretty stiff.</li>
<li>Once the milk is boiling, take it off the heat and stir in sugar, salt, zest, and watery yolk. Bring to a brief boil, and take it off the stove.</li>
<li>Fold the egg white into the mixture, pour into serving bowls and let it get cold.</li>
</ul>
<p><em>Hmmmm.</em> Oh, and while you’re at it, make lemonade from what’s left of the lemon. Don’t you remember? If life gives you lemons, … ;)</p>