<?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/category/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>Halberd screencast</title>
		<link>http://blog.superadditive.com/2009/10/14/halberd-screencast/</link>
		<comments>http://blog.superadditive.com/2009/10/14/halberd-screencast/#comments</comments>
		<pubDate>Tue, 13 Oct 2009 22:19:49 +0000</pubDate>
		<dc:creator>jmbr</dc:creator>
				<category><![CDATA[programming]]></category>
		<category><![CDATA[halberd]]></category>
		<category><![CDATA[screencast]]></category>
		<category><![CDATA[security]]></category>

		<guid isPermaLink="false">http://blog.superadditive.com/?p=106</guid>
		<description><![CDATA[Vivek Ramachandran has created a screencast demonstrating the use of my program Halberd. Do watch it if you want to see Halberd in action!]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.vivekramachandran.com/">Vivek Ramachandran</a> has created a <a href="http://www.securitytube.net/Detecting-HTTP-Load-Balancers-using-Halberd-video.aspx">screencast</a> demonstrating the use of my program <a href="http://halberd.superadditive.com">Halberd</a>.  Do watch it if you want to see Halberd in action!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.superadditive.com/2009/10/14/halberd-screencast/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Functional programming in Maple</title>
		<link>http://blog.superadditive.com/2009/02/09/functional-programming-in-maple/</link>
		<comments>http://blog.superadditive.com/2009/02/09/functional-programming-in-maple/#comments</comments>
		<pubDate>Mon, 09 Feb 2009 20:45:59 +0000</pubDate>
		<dc:creator>jmbr</dc:creator>
				<category><![CDATA[mathematics]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://blog.superadditive.com/?p=92</guid>
		<description><![CDATA[I have written some notes on functional programming in Maple mainly to help me find my way around it. For the moment these notes are very terse but I find them useful as a cheat sheet and I might expand them in the future.]]></description>
			<content:encoded><![CDATA[<p>I have written some <a href="http://blog.superadditive.com/wp-content/uploads/2009/02/funmaple.txt">notes on functional programming in Maple</a> mainly to help me find my way around it.  For the moment these notes are very terse but I find them useful as a cheat sheet and I might expand them in the future.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.superadditive.com/2009/02/09/functional-programming-in-maple/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>Libbtrace is obsolete</title>
		<link>http://blog.superadditive.com/2007/08/04/libbtrace-is-obsolete/</link>
		<comments>http://blog.superadditive.com/2007/08/04/libbtrace-is-obsolete/#comments</comments>
		<pubDate>Sat, 04 Aug 2007 19:28:06 +0000</pubDate>
		<dc:creator>jmbr</dc:creator>
				<category><![CDATA[programming]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://blog.superadditive.com/2007/08/04/libbtrace-is-obsolete/</guid>
		<description><![CDATA[I wrote Libbtrace some years ago to allow some kind of introspection in C programs: namely, to be able to inspect the program&#8217;s backtrace showing not just the addresses but also the relevant function names. This was useful when the GNU Debugger lacked proper multi-threading support. This library used an undocumented (at the time) glibc [...]]]></description>
			<content:encoded><![CDATA[<p>I wrote <a href="http://freshmeat.net/projects/libbtrace/">Libbtrace</a> some years ago to allow some kind of introspection in C programs: namely, to be able to inspect the program&#8217;s backtrace showing not just the addresses but also the relevant function names.  This was useful when the GNU Debugger lacked proper multi-threading support.</p>
<p>This library used an undocumented (at the time) glibc function called <em>backtrace(3)</em> which would return memory locations but not function names.  Today, browsing old source code, I reviewed the library and was glad to see that <em>backtrace(3)</em> is currently not only documented but it also offers the same features my library did, so I won&#8217;t be updating Libbtrace anymore.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.superadditive.com/2007/08/04/libbtrace-is-obsolete/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Halberd in Backtrack v 2.0 Final</title>
		<link>http://blog.superadditive.com/2007/03/16/halberd-in-backtrack-20-final/</link>
		<comments>http://blog.superadditive.com/2007/03/16/halberd-in-backtrack-20-final/#comments</comments>
		<pubDate>Fri, 16 Mar 2007 00:18:30 +0000</pubDate>
		<dc:creator>jmbr</dc:creator>
				<category><![CDATA[programming]]></category>
		<category><![CDATA[security]]></category>

		<guid isPermaLink="false">http://blog.superadditive.com/2007/03/16/halberd-in-backtrack-20-final/</guid>
		<description><![CDATA[The folks at remote-exploit.org have included my program Halberd in Backtrack v 2.0 Final, a live Linux distribution specializing in penetration testing. Isn&#8217;t that cool?]]></description>
			<content:encoded><![CDATA[<p>The folks at <a href="http://remote-exploit.org" title="remote-exploit.org">remote-exploit.org</a> have included my program <a href="http://halberd.superadditive.com" title="Halberd">Halberd</a> in <a href="http://www.remote-exploit.org/backtrack.html" title="Backtrack">Backtrack v 2.0 Final</a>, a live Linux distribution specializing in penetration testing. Isn&#8217;t that cool?</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.superadditive.com/2007/03/16/halberd-in-backtrack-20-final/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>

