<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Reality tunnels &#187; programming</title>
	<atom:link href="http://blog.superadditive.com/tag/computer-programming/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.superadditive.com</link>
	<description>Pseudo-random thoughts by Juan M. Bello Rivas</description>
	<lastBuildDate>Mon, 27 Jun 2011 07:32:24 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>Go Replicants!</title>
		<link>http://blog.superadditive.com/2011/06/21/go-replicants/</link>
		<comments>http://blog.superadditive.com/2011/06/21/go-replicants/#comments</comments>
		<pubDate>Tue, 21 Jun 2011 20:31:03 +0000</pubDate>
		<dc:creator>jmbr</dc:creator>
				<category><![CDATA[mathematics]]></category>
		<category><![CDATA[molecular simulation]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://blog.superadditive.com/?p=147</guid>
		<description><![CDATA[Last November I wrote a molecular simulator called Go Replicants! that uses Go potentials to simulate protein folding processes and study some of their thermodynamic properties. Its source code and some instructions can be found here. My goals while writing the program were manifold (pun intended): First and foremost, I wanted to understand the simulation [...]]]></description>
			<content:encoded><![CDATA[<p>Last November I wrote a molecular simulator called <strong><a href="http://curio.mat.ucm.es/~jmbr/go-replicants/">Go Replicants!</a></strong> that uses <a href="http://ender.quim.ucm.es/SklogWiki/index.php/Go_potential">Go potentials</a> to simulate protein folding processes and study some of their thermodynamic properties. Its <a href="http://curio.mat.ucm.es/~jmbr/go-replicants/">source code and some instructions can be found here.</a></p>
<p><span id="more-147"></span>My goals while writing the program were manifold (pun intended):</p>
<ol>
<li>First and foremost, I wanted to understand the simulation techniques used by <a href="http://www.madrimasd.org/programas/web/24195/39">a research group that I collaborate with</a>. Among these are <a href="http://www.sklogwiki.org/SklogWiki/index.php/Parallel_tempering">parallel tempering (a.k.a. replica exchange)</a> Monte Carlo, <a href="http://www.sklogwiki.org/SklogWiki/index.php/Weighted_histogram_analysis_method">WHAM</a>, etc.</li>
<li>I was also looking forward to learning <a href="http://openmp.org/">OpenMP</a> and the <a href="http://www.gnu.org/software/gsl/">GNU Scientific Library</a> for quite some time, so this gave me the perfect opportunity to do so.</li>
<li>Many projects have been migrating from GNU autotools to <a title="CMake" href="http://www.cmake.org">CMake</a>. I was curious about it and wanted to become acquainted with CMake too.</li>
</ol>
<p>The code can still be improved upon, of course. But besides cleanups or feature additions, and considering that my new <span style="text-decoration: line-through;">toy</span>computer at work has two <a href="http://www.nvidia.com/docs/IO/105880/DS_Tesla-M2090_LR.pdf">NVIDIA Tesla M2050</a>s, I think the next step is to develop GPU capabilities.</p>
<p>Oh, I almost forgot that its <a href="https://github.com/jmbr/go-replicants">Git repository is cloned at Github</a>.</p>
<p style="text-align: center;">&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.superadditive.com/2011/06/21/go-replicants/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Emacs bankruptcy</title>
		<link>http://blog.superadditive.com/2008/10/10/emacs-bankruptcy/</link>
		<comments>http://blog.superadditive.com/2008/10/10/emacs-bankruptcy/#comments</comments>
		<pubDate>Fri, 10 Oct 2008 00:25:44 +0000</pubDate>
		<dc:creator>jmbr</dc:creator>
				<category><![CDATA[programming]]></category>
		<category><![CDATA[emacs]]></category>

		<guid isPermaLink="false">http://blog.superadditive.com/?p=89</guid>
		<description><![CDATA[I decided to follow the zeitgeist and declare .emacs bankruptcy.  This is the outcome.]]></description>
			<content:encoded><![CDATA[<p>I decided to follow the <em>zeitgeist</em> and declare <a href="http://www.emacswiki.org/cgi-bin/wiki/DotEmacsBankruptcy">.emacs bankruptcy</a>.  <a href="http://superadditive.com/dotfiles/">This is the outcome</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.superadditive.com/2008/10/10/emacs-bankruptcy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Trivial doctests in Common Lisp</title>
		<link>http://blog.superadditive.com/2007/12/06/trivial-doctests-in-common-lisp/</link>
		<comments>http://blog.superadditive.com/2007/12/06/trivial-doctests-in-common-lisp/#comments</comments>
		<pubDate>Thu, 06 Dec 2007 11:50:32 +0000</pubDate>
		<dc:creator>jmbr</dc:creator>
				<category><![CDATA[programming]]></category>
		<category><![CDATA[lisp]]></category>

		<guid isPermaLink="false">http://blog.superadditive.com/2007/12/06/trivial-doctests-in-common-lisp/</guid>
		<description><![CDATA[The pros and cons of doctests have been discussed elsewhere so I won&#8217;t enter that debate here. I was told it was trivial to roll your own doctest suite in Common Lisp. I have done that and it is easy indeed but I have included the code in incf-cl for those who would like to [...]]]></description>
			<content:encoded><![CDATA[<p>The pros and cons of <a href="http://en.wikipedia.org/wiki/Doctest">doctests</a> have been <a href="http://groups.google.com/group/comp.lang.lisp/search?group=comp.lang.lisp&amp;q=doctest&amp;qt_g=Search+this+group">discussed elsewhere</a> so I won&#8217;t enter that debate here.</p>
<p>I was told it was trivial to roll your own doctest suite in Common Lisp.  I have done that and it is easy indeed but I have included the code in <a href="http://superadditive.com/projects/incf-cl">incf-cl</a> for those who would like to use it right away.<br />
<span id="more-77"></span><br />
Here&#8217;s an example:</p>
<pre>  (<span style="color: #afeeee;"><strong>defpackage</strong></span> <span style="color: #87ceeb;"><strong>:test</strong></span>
    (<span style="color: #7fffd4;">:use</span> <span style="color: #7fffd4;">:common-lisp</span> <span style="color: #7fffd4;">:incf-cl</span>)
    (<span style="color: #7fffd4;">:export</span> <span style="color: #7fffd4;">:factorial</span>))

  (<span style="color: #afeeee;"><strong>in-package</strong></span> <span style="color: #7fffd4;">:test</span>)

  (<span style="color: #afeeee;"><strong>defun</strong></span> <span style="color: #7fffd4;"><strong>factorial</strong></span> (n <span style="color: #87ceeb;"><strong>&amp;optional</strong></span> (acc 1))
    <span style="color: #87cefa;">"Returns the factorial of N, where N is an integer &gt;= 0.

    Examples:

    TEST&gt; (assemble (factorial n) (&lt;- n (range 1 5)))
    (1 2 6 24 120)

    TEST&gt; (factorial 450/15)
    265252859812191058636308480000000

    TEST&gt; (signals-p arithmetic-error (factorial -1))
    T

    TEST&gt; (signals-p type-error (factorial 30.1))
    T

    TEST&gt; (factorial 0)
    1"</span>
    (<span style="color: #afeeee;"><strong>declare</strong></span> (type integer n))

    (<span style="color: #afeeee;"><strong>cond</strong></span>
      ((minusp n) (<span style="color: #ff0000;"><strong>error</strong></span> 'arithmetic-error))
      ((/= n (floor n)) (<span style="color: #ff0000;"><strong>error</strong></span> 'type-error)))

    (<span style="color: #afeeee;"><strong>if</strong></span> (= n 0)
        acc
        (factorial (1- n) (* n acc))))</pre>
<pre><span style="color: #afeeee;"><strong>CL-USER&gt; </strong></span><strong>(doctest :test)</strong>
<span style="color: #87cefa;">.....</span><span style="color: #ff0000;">T</span></pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.superadditive.com/2007/12/06/trivial-doctests-in-common-lisp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Call graphs using the GNU Project Debugger</title>
		<link>http://blog.superadditive.com/2007/12/01/call-graphs-using-the-gnu-project-debugger/</link>
		<comments>http://blog.superadditive.com/2007/12/01/call-graphs-using-the-gnu-project-debugger/#comments</comments>
		<pubDate>Sat, 01 Dec 2007 10:46:46 +0000</pubDate>
		<dc:creator>jmbr</dc:creator>
				<category><![CDATA[programming]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://blog.superadditive.com/2007/12/01/call-graphs-using-the-gnu-project-debugger/</guid>
		<description><![CDATA[Chris Ball asked everyone who likes Unix for a tool which would be to function calls what strace and ltrace are for system and library calls respectively. I wanted to write this myself for a long time but what prevented me from doing so was the fact that I had come up with a trivial [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.printf.net/articles/2007/11/30/tracing-internal-function-calls-in-a-binary">Chris Ball asked everyone who likes Unix</a> for a tool which would be to function calls what strace and ltrace are for system and library calls respectively.</p>
<p>I wanted to write this myself for a long time but what prevented me from doing so was the fact that I had come up with a trivial shell/awk script that achieved almost the same goal.  <span id="more-74"></span>Since that little program was useful for someone other than me, I thought I&#8217;d polish it slightly and post it <a href="http://superadditive.com/software/callgraph.tar.gz">here</a>.</p>
<p>This tool&#8217;s original intent was to print a call graph from a given program.  It works by taking control of <a href="http://www.gnu.org/software/gdb/">GDB</a> and automatically setting breakpoints at each function call.  Of course, the executable must include debugging symbols (that is, it must have been compiled with gcc&#8217;s -g option).  Here&#8217;s some sample output (the format is: caller callee arguments):<br />
<code><br />
xmltree_parse xmltree_itor_next (self=0x80571e8)<br />
xmltree_itor_next xmlnode_stack_push (stack=0x80571f0, n=0x8056780)<br />
xmltree_parse h_requires (n=0x8056808, u=0xbff9d504)<br />
h_requires xmlnode_get_attr (self=0x8056808, name=0x80520ea "plugin")<br />
h_requires probe_get_name (self=0x8056af0)<br />
h_requires htab_lookup (self=0x8058100, key=0x8056868, len=3, create=0, value=0x0)<br />
</code></p>
<p>You can use the included <strong>cg2dot.awk</strong> script to produce files suitable for processing with <a href="http://www.graphviz.org">graphviz</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.superadditive.com/2007/12/01/call-graphs-using-the-gnu-project-debugger/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>List comprehensions in Common Lisp</title>
		<link>http://blog.superadditive.com/2007/11/09/list-comprehensions-in-common-lisp/</link>
		<comments>http://blog.superadditive.com/2007/11/09/list-comprehensions-in-common-lisp/#comments</comments>
		<pubDate>Fri, 09 Nov 2007 15:23:40 +0000</pubDate>
		<dc:creator>jmbr</dc:creator>
				<category><![CDATA[programming]]></category>
		<category><![CDATA[lisp]]></category>

		<guid isPermaLink="false">http://blog.superadditive.com/2007/11/09/list-comprehensions-in-common-lisp/</guid>
		<description><![CDATA[List comprehensions are a programming language construct that closely mimics the way you declare a set in mathematics and sometimes are more succinct and readable than using a composition of mapcar, delete-if or an ad hoc imperative loop. Having list comprehensions in Lisp was something I was missing from Python and Haskell. So I tried [...]]]></description>
			<content:encoded><![CDATA[<p>List comprehensions are a programming language construct that closely mimics the way you declare a set in mathematics and sometimes are more succinct and readable than using a composition of <strong>mapcar</strong>, <strong>delete-if</strong> or an ad hoc imperative loop.</p>
<p>Having list comprehensions in Lisp was something I was missing from Python and Haskell.  So I tried to find something similar and discovered that <span id="more-71"></span> <a href="http://subpic.blogspot.com/2007/02/more-then-list-comprehensions-lisp-loop.html">the LOOP facility can be used as a means of achieving this goal</a> but this, although nice, didn&#8217;t feel natural enough.  In the end, I read the paper <a href="http://www.iro.umontreal.ca/~latendre/publications/listCompFinal.pdf">Simple and Efficient Compilation of List Comprehension in Common Lisp</a> by Mario Latendresse which appeared at <a href="http://www.international-lisp-conference.org/2007/speakers#latendresse_mario">ILC 2007</a> and have decided to adopt that implementation for translating list comprehensions into <strong>loop</strong>s.</p>
<p>For example, the set  \(\left\{ (x, y) \in \{0, 1, 2\}^2 \, | \, x +y = 2 \right\}\) can be expressed as</p>
<pre><strong>(lc (cons x y) (&lt;- x '(0 1 2)) (&lt;- y '(0 1 2)) (= (+ x y) 2)) </strong> ==&gt;
<span style="color: #ff0000;">((0 . 2) (1 . 1) (2 . 0))</span></pre>
<p>Another example:</p>
<pre><strong>(lc (sin x) (&lt;- x (range 0 .1 (/ pi 2))))</strong> ==&gt;
<span style="color: #ff0000;">(0.0 0.09983342 0.19866933 0.29552022 0.38941833 0.47942555 0.5646425 0.6442177
 0.71735615 0.783327 0.8414711 0.8912074 0.93203914 0.96355826 0.9854498
 0.997495)</span></pre>
<p>The macro I&#8217;m using is <strong>lc</strong>:</p>
<pre>(<span style="color: #afeeee;"><strong>defmacro</strong></span> <span style="color: #7fffd4;"><strong>lc</strong></span> (collection-form <span style="color: #87ceeb;"><strong>&amp;rest</strong></span> quantifiers)
  <span style="color: #87cefa;">"Assembles a multiset containing the results of evaluating
COLLECTION-FORM and subject to QUANTIFIERS."</span>
  (<span style="color: #afeeee;"><strong>labels</strong></span> ((translate (collection-form qs)
             (<span style="color: #afeeee;"><strong>if</strong></span> (null qs)
                 `(collect ,collection-form)
                 (translate-generator-or-filter collection-form qs)))
           (translate-generator-or-filter (collection-form qs)
             (<span style="color: #afeeee;"><strong>let</strong></span> ((q (first qs))
                   (qr (rest qs)))
               (<span style="color: #afeeee;"><strong>if</strong></span> (eq (first q) '&lt;-)
                   (translate-generator collection-form (second q) (third q) qr)
                   (translate-filter collection-form q qr))))
           (translate-generator (collection-form variable collection qs)
             `(nconc (<span style="color: #afeeee;"><strong>loop</strong></span> for ,variable in ,collection
                          ,@(translate collection-form qs))))
           (translate-filter (collection-form filter-form qs)
             `(<span style="color: #afeeee;"><strong>when</strong></span> ,filter-form ,@(translate collection-form qs))))
    (<span style="color: #afeeee;"><strong>when</strong></span> quantifiers
      `(<span style="color: #afeeee;"><strong>loop</strong></span> repeat 1 ,@(translate collection-form quantifiers)))))</pre>
<p>and the helper function <a title="range.lisp" href="http://blog.superadditive.com/wp-content/uploads/2007/11/range.lisp"><strong>range</strong></a> is:</p>
<pre>(<span style="color: #afeeee;"><strong>defun</strong></span> <span style="color: #7fffd4;"><strong>range</strong></span> (a b <span style="color: #87ceeb;"><strong>&amp;optional</strong></span> c)
  <span style="color: #87cefa;">"Builds a range of numbers as Matlab would do"</span>
  (<span style="color: #afeeee;"><strong>flet</strong></span> ((|:| (start step stop)
           (<span style="color: #ff0000;"><strong>assert</strong></span> (and (&lt;= start stop) (&gt; step 0)))
           (<span style="color: #afeeee;"><strong>loop</strong></span> for x from start to stop by step collect x)))
    (<span style="color: #afeeee;"><strong>if</strong></span> c
        (|:| a b c)
        (|:| a 1 b))))</pre>
<p>A possible enhancement would be to translate to <strong>series</strong> instead<br />
of <strong>loop</strong> in order to have lazy list comprehensions.</p>
<p>This code (and more) can be found in the <a href="http://superadditive.com/projects/incf-cl/">(incf cl) utilities</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.superadditive.com/2007/11/09/list-comprehensions-in-common-lisp/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>cl-buchberger is out!</title>
		<link>http://blog.superadditive.com/2007/10/19/cl-buchberger-is-out/</link>
		<comments>http://blog.superadditive.com/2007/10/19/cl-buchberger-is-out/#comments</comments>
		<pubDate>Fri, 19 Oct 2007 17:36:10 +0000</pubDate>
		<dc:creator>jmbr</dc:creator>
				<category><![CDATA[programming]]></category>
		<category><![CDATA[lisp]]></category>
		<category><![CDATA[mathematics]]></category>

		<guid isPermaLink="false">http://blog.superadditive.com/2007/10/19/cl-buchberger-is-out/</guid>
		<description><![CDATA[I&#8217;ve just released the first version of cl-buchberger, a Common Lisp implementation of Buchberger&#8217;s algorithm for the computation of Gröbner bases. There are many improvements waiting in the pipeline but the basic functionality is there. &#160; You can read more about cl-buchberger here.]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve just released the first version of cl-buchberger, a Common Lisp<br />
implementation of Buchberger&#8217;s algorithm for the computation of<br />
Gröbner bases.</p>
<p><img class="size-full wp-image-95 alignleft" title="lisplogo_alien_128" src="http://blog.superadditive.com/wp-content/uploads/2007/10/lisplogo_alien_128.png" alt="Lisp logo" width="128" height="75" /></p>
<p>There are many improvements waiting in the pipeline but the basic<br />
functionality is there.</p>
<p>&nbsp;</p>
<p>You can <a href="http://common-lisp.net/project/cl-buchberger/">read more about cl-buchberger here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.superadditive.com/2007/10/19/cl-buchberger-is-out/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Interoperability between Source Code Management systems with Tailor</title>
		<link>http://blog.superadditive.com/2006/09/23/interoperability-between-source-code-management-systems-with-tailor/</link>
		<comments>http://blog.superadditive.com/2006/09/23/interoperability-between-source-code-management-systems-with-tailor/#comments</comments>
		<pubDate>Fri, 22 Sep 2006 11:17:41 +0000</pubDate>
		<dc:creator>jmbr</dc:creator>
				<category><![CDATA[programming]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://blog.superadditive.com/2006/09/23/interoperability-between-source-code-management-systems-with-tailor/</guid>
		<description><![CDATA[Tailor is an application that lets you migrate changesets between different kinds of source code repositories. It is written in Python and supports most open source SCM systems. With Tailor you can: Create a local repository using your favorite source control system of a project managed by another source control system. Do your work. Export [...]]]></description>
			<content:encoded><![CDATA[<p><a title="Tailor" href="http://progetti.arstecnica.it/tailor">Tailor</a> is an application that lets you migrate changesets between different kinds of source code repositories. It is written in Python and supports most open source SCM systems.</p>
<p>With Tailor you can:</p>
<ol>
<li>Create a local repository using your favorite source control system of a project managed by another source control system.</li>
<li>Do your work.</li>
<li>Export your changes back to the original repository.</li>
</ol>
<p>Here&#8217;s an example of using Tailor to import a branch of <a title="Axiom, my open source computer algebra system of choice" href="http://www.axiom-developer.org">Axiom</a> (uses <a href="http://subversion.tigris.org/">Subversion</a>) into a local <a title="darcs revision control system" href="http://darcs.net">darcs</a> repository:</p>
<p>First of all, we create a configuration file for the project</p>
<p>$ tailor &#8211;verbose &#8211;source-kind svn &#8211;target-kind darcs \<br />
&#8211;source-repository https://svn.sourceforge.net/svnroot/axiom \<br />
&#8211;source-module branches/build-improvements \<br />
&#8211;start-revision INITIAL \<br />
&#8211;target-repository file:///home/rwx/lab/math/axiom/axiom-darcs/ \<br />
&#8211;target-module axiom-build-improvements axiom-build-improvements \<br />
&gt; axiom-build-improvements.tailor</p>
<p>Now that we have the config file stored in <em>axiom-build-improvements.tailor</em>, we can launch the tool to do the initial import</p>
<p>$ tailor &#8211;configfile=axiom-build-improvements.tailor</p>
<p>After a while, we have a local darcs repository for that branch and we can write:</p>
<p>$ darcs get ~/lab/math/axiom/axiom-darcs</p>
<p>to get a working copy in which to do your modifications.</p>
<p>Today, there are a myriad of SCM tools available and projects like Tailor will become increasingly important because they let you stick to your tools of choice. In this way, instead of learning the details of other source control systems, you can focus on what you do best: writing code.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.superadditive.com/2006/09/23/interoperability-between-source-code-management-systems-with-tailor/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Halberd screen shots</title>
		<link>http://blog.superadditive.com/2006/09/20/halberd-screen-shots/</link>
		<comments>http://blog.superadditive.com/2006/09/20/halberd-screen-shots/#comments</comments>
		<pubDate>Tue, 19 Sep 2006 10:28:29 +0000</pubDate>
		<dc:creator>jmbr</dc:creator>
				<category><![CDATA[programming]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[security]]></category>

		<guid isPermaLink="false">http://blog.superadditive.com/2006/09/20/halberd-screen-shots/</guid>
		<description><![CDATA[Because a picture is worth a thousand words I uploaded some screen shots of halberd in action]]></description>
			<content:encoded><![CDATA[<p>Because a picture is worth a thousand words I uploaded <a title="halberd screen shots" href="http://halberd.superadditive.com/screenshots/">some screen shots of halberd in action</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.superadditive.com/2006/09/20/halberd-screen-shots/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Halberd 0.2.1 is out!</title>
		<link>http://blog.superadditive.com/2006/08/25/halberd-021-is-out/</link>
		<comments>http://blog.superadditive.com/2006/08/25/halberd-021-is-out/#comments</comments>
		<pubDate>Thu, 24 Aug 2006 22:41:37 +0000</pubDate>
		<dc:creator>jmbr</dc:creator>
				<category><![CDATA[programming]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[security]]></category>

		<guid isPermaLink="false">http://blog.superadditive.com/2006/08/25/halberd-021-is-out/</guid>
		<description><![CDATA[I just released the next revision (0.2.1) of halberd, my load balancer detection tool. If you&#8217;re curious about the way the program works, you can read this part of the user&#8217;s guide. Halberd has been tested in real world scenarios for quite some time and it seems to be solid. I hope the wider audience [...]]]></description>
			<content:encoded><![CDATA[<p>I just released the next revision (0.2.1) of <a href="http://halberd.superadditive.com/">halberd</a>, my load balancer detection tool.  If you&#8217;re curious about the way the program works, you can read <a href="http://halberd.superadditive.com/doc/manual/node4.html">this part of the user&#8217;s guide</a>.</p>
<p>Halberd has been tested in real world scenarios for quite some time and it seems to be solid.  I hope the wider audience it is gaining now will uncover some bugs and after fixing those I&#8217;ll think of it as stable software.  Future work could happen in the following areas:</p>
<ul>
<li>Clustering algorithm
<ul>
<li>The module Halberd.clues.analysis currently implements an ad-hoc hierarchical clustering algorithm to isolate possible real servers. I would like halberd to report to the user the degree of trust he should place in its conclusions.</li>
<li>I think the way to go would be to test some algorithms in <a href="http://www.r-project.org">R</a> (fuzzy clustering comes to mind) using real world data and see what works best before implementing anything.</li>
</ul>
</li>
<li>SSL session reuse
<ul>
<li>When an SSL/TLS session begins, the server issues an SSL session ID to the client.  This ID will be used to resume transactions between client and server (remember the stateless nature of HTTP).</li>
<li>Some load balancers can keep track of which real server dealt with which SSL session and direct the client to the right server (the one having the client&#8217;s session ID in its cache). This could be used by halberd as an extra technique to enumerate real servers.</li>
</ul>
</li>
<li>Test suite improvements
<ul>
<li>The test harness is tied to my own development environment. This should change.</li>
<li>More tests never hurt.</li>
</ul>
</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.superadditive.com/2006/08/25/halberd-021-is-out/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Introduction to the lambda calculus</title>
		<link>http://blog.superadditive.com/2006/08/21/introduction-to-the-lambda-calculus/</link>
		<comments>http://blog.superadditive.com/2006/08/21/introduction-to-the-lambda-calculus/#comments</comments>
		<pubDate>Sun, 20 Aug 2006 21:28:23 +0000</pubDate>
		<dc:creator>jmbr</dc:creator>
				<category><![CDATA[mathematics]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://blog.superadditive.com/2006/08/21/introduction-to-the-lambda-calculus/</guid>
		<description><![CDATA[A Brave New Hope briefly reviews an interesting text on the lambda calculus. This reminded me of one of the books that got me started in functional programming: An introduction to functional programming through lambda calculus by Greg Michaelson. It is an enjoyable and fast-paced text which I&#8217;d recommend if you&#8217;re looking for a good [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.scannedinavian.com/hope/entry/93">A Brave New Hope</a> briefly reviews an <a href="http://www.cs.ru.nl/E.Barendsen/onderwijs/T3/materiaal/lambda.pdf">interesting text on the lambda calculus</a>.  This reminded me of one of the books that got me started in functional programming: <a href="ftp://ftp.macs.hw.ac.uk/pub/funcprog/gjm.lambook88.ps.Z">An introduction to functional programming through lambda calculus by Greg Michaelson</a>.  It is an enjoyable and fast-paced text which I&#8217;d recommend if you&#8217;re looking for a good introduction to the subject.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.superadditive.com/2006/08/21/introduction-to-the-lambda-calculus/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

