<?xml version="1.0"?>
<rss version="2.0">
  <channel>
    <title>Advogato blog for lukeg</title>
    <link>http://www.advogato.org/person/lukeg/</link>
    <description>Advogato blog for lukeg</description>
    <language>en-us</language>
    <generator>mod_virgule</generator>
    <pubDate>Wed, 8 Oct 2008 00:29:30 GMT</pubDate>
    <item>
      <pubDate>Sat, 26 Feb 2005 17:03:21 GMT</pubDate>
      <title>26 Feb 2005</title>
      <link>http://www.advogato.org/person/lukeg/diary.html?start=34</link>
      <guid>http://www.advogato.org/person/lukeg/diary.html?start=34</guid>
      <description>I've moved over to a new &lt;a href="http://fresh.homeunix.net/~luke/weblog/ChangeLog" &gt;high-tech weblog&lt;/a&gt; of my own now!&lt;br&gt;
&lt;b&gt;Update:&lt;/b&gt;That was not quite high-tech enough so I made a &lt;a href="http://fresh.homeunix.net/~luke/weblog/glog.html" &gt;new one&lt;/a&gt; instead.</description>
    </item>
    <item>
      <pubDate>Sat, 23 Oct 2004 23:44:30 GMT</pubDate>
      <title>23 Oct 2004</title>
      <link>http://www.advogato.org/person/lukeg/diary.html?start=33</link>
      <guid>http://www.advogato.org/person/lukeg/diary.html?start=33</guid>
      <description>&lt;strong&gt;EUC'04&lt;/strong&gt;
&lt;p&gt;

&lt;p&gt; &lt;p&gt; I went to the &lt;a href="http://www.erlang.se/euc/04/" &gt;10th annual Erlang conference&lt;/a&gt; on thursday and had a
great time, as usual. &lt;p&gt;

&lt;p&gt; &lt;p&gt; My favourite talk was about the &lt;a href="http://www.it.uu.se/research/group/hipe/dialyzer/" &gt;Dialyzer&lt;/a&gt; (Discrepancy
Analyzer). This program analyzes regular Erlang object-code to find
discrepancies that suggest programming errors. The analysis seems
very much like what CMUCL does: infer type information from the way
variables are used, propagate it around, then warn about any
contradictions. Very impressive that it runs on unmodified object code, appears to really find bugs, and has managed to consume a 1.1 million line Erlang program without exploding.
 These guys have done an exceptional job of designing their
tool to actually appeal to working Erlang programmers. (So far it hasn't found as many bugs as I'd expected, but I'm not sure if that's good or bad.)
 &lt;p&gt;

&lt;p&gt; &lt;p&gt; I also saw a really amazing demo of Virtutech's &lt;a href="http://www.virtutech.com/products/simics.html" &gt;Simics&lt;/a&gt; product, which is only
related to Erlang in that one of the &lt;a href="http://www.it.uu.se/research/group/hipe/" &gt;HiPE&lt;/a&gt; guys has joined them. It's
much like Bochs or QEMU but it emulates a wide range of machines: x86,
AMD64, SunFire/sparc, Alpha, and so on. It has some extra-fancy
features like the ability to run the machine in simulated time, so
that when the kernel enters the idle-loop it "fast forwards" to the
next event. Really amazing, but unfortunately it isn't free software
and I gather it's priced only for large corporations. &lt;p&gt;

&lt;p&gt; &lt;p&gt; And of course free beer at the post-conference ErLounge didn't go
astray. Hurray for the Erlang companies who sponsored the event
:-)
&lt;p&gt;
&lt;strong&gt;XML&lt;/strong&gt;
&lt;p&gt;
I'm currently implementing a protocol based on XML Schema and SOAP. As good as it was to spend five-odd years in blissful ignorance of XML, now I do wish that I'd started using it before XML-bashing became pass&#xE9;.</description>
    </item>
    <item>
      <pubDate>Tue, 5 Oct 2004 20:48:17 GMT</pubDate>
      <title>5 Oct 2004</title>
      <link>http://www.advogato.org/person/lukeg/diary.html?start=32</link>
      <guid>http://www.advogato.org/person/lukeg/diary.html?start=32</guid>
      <description>&lt;a href="http://www.advogato.org/person/apenwarr/" &gt;apenwarr&lt;/a&gt;: I think a really interesting case that's somewhat related to your &lt;i&gt;Scripting Languages and Reliability&lt;/i&gt; question is Emacs Lisp. The standard Emacs distribution today includes about one million lines of Emacs Lisp, and though the language lacks basic features like a module system it's still comfortable to program with, even in such a large system. This amazes me.</description>
    </item>
    <item>
      <pubDate>Fri, 20 Aug 2004 22:22:33 GMT</pubDate>
      <title>20 Aug 2004</title>
      <link>http://www.advogato.org/person/lukeg/diary.html?start=31</link>
      <guid>http://www.advogato.org/person/lukeg/diary.html?start=31</guid>
      <description>&lt;strong&gt;Onward!&lt;/strong&gt;
&lt;p&gt;
I'm not &lt;tt&gt;luke@bluetail.com&lt;/tt&gt; anymore, but I'm still &lt;tt&gt;@member.fsf.org&lt;/tt&gt;.
&lt;p&gt;
&lt;a href="http://www.advogato.org/person/ncm/" &gt;ncm&lt;/a&gt;: Hi! I just noticed that you work at ITA Software. I have a question that you might be able to help me with, about this part of the &lt;a href="http://www.paulgraham.com/carl.html" &gt;article&lt;/a&gt; on paulgraham.com:
&lt;ul&gt;
9. We can do 10 seconds of Lisp computation on a 800mhz box and cons less than 5k of data. This is because we pre-allocate all data structures we need and die on queries that exceed them. This may make many Lisp programmers cringe, but with a 250 meg image and real-time constraints, we can't afford to generate garbage. For example, rather than using cons, we use "cons!", which grabs cells from an array of 10,000,000 cells we've preallocated and which gets reset every query.
&lt;/ul&gt;
I don't understand the CONS! bit. Doesn't this have the same performance characteristics as using a generation-scavenging collector with a 10MB nursery, forcing a GC between requests ("for free" because the nursery is pure garbage), and aborting if a GC is triggered before the request ends? Why don't you do it that way?</description>
    </item>
    <item>
      <pubDate>Fri, 23 Jul 2004 21:58:58 GMT</pubDate>
      <title>23 Jul 2004</title>
      <link>http://www.advogato.org/person/lukeg/diary.html?start=30</link>
      <guid>http://www.advogato.org/person/lukeg/diary.html?start=30</guid>
      <description>&lt;strong&gt;Surreal&lt;/strong&gt;
&lt;pre&gt;
&amp;lt;tibo&amp;gt; Luke, you won't believe it, your photo is in a newspaper today, here in
       Portugal
&amp;lt;tibo&amp;gt; It is the picture that appears on your web page (assuming it is you).
&amp;lt;tibo&amp;gt; I'm serious !
&amp;lt;tibo&amp;gt; Well it not a very serious newspaper... The 10 lines "news" is about a
       "study" that concludes that 17% Germans adults "drink in order to
       become drunk"
&amp;lt;tibo&amp;gt; I will try to scan it.
&lt;/pre&gt;
&lt;a href="http://www.bluetail.com/~luke/misc/portugal.jpg" &gt;The price&lt;/a&gt; of &lt;a href="http://www.advogato.org/person/lukeg/diary.html?start=17" &gt;fame&lt;/a&gt;! :-)</description>
    </item>
    <item>
      <pubDate>Thu, 22 Jan 2004 20:42:04 GMT</pubDate>
      <title>22 Jan 2004</title>
      <link>http://www.advogato.org/person/lukeg/diary.html?start=29</link>
      <guid>http://www.advogato.org/person/lukeg/diary.html?start=29</guid>
      <description>&lt;pre&gt;
Example 8
---------
 
"C" provides a conditional expression.
Thus if "a" and "b" are integer vari-
ables,
 
        (a &amp;gt; b ? a : b)
 
is an expression whose value is that of
the larger of "a" and "b".
 
 
However this does not work if "a" and
"b" are to be regarded as unsigned 
integers. Hence there is a use for the
procedure
 
6326 max (a, b)
     char *a, *b;
     {
       if (a &amp;gt; b)
         return(a);
       return(b);
     }
 
The trick here is that "a" and "b",
having been declared as pointers to
characters are treated for comparison
purposes as unsigned integers.
&lt;/pre&gt;
</description>
    </item>
    <item>
      <pubDate>Tue, 25 Nov 2003 10:27:16 GMT</pubDate>
      <title>25 Nov 2003</title>
      <link>http://www.advogato.org/person/lukeg/diary.html?start=28</link>
      <guid>http://www.advogato.org/person/lukeg/diary.html?start=28</guid>
      <description>&lt;a href="http://www.bluetail.com/~luke/misc/emacs/gnus-truetype-x11.png" &gt;Joy&lt;/a&gt;!!</description>
    </item>
    <item>
      <pubDate>Wed, 22 Oct 2003 14:49:52 GMT</pubDate>
      <title>22 Oct 2003</title>
      <link>http://www.advogato.org/person/lukeg/diary.html?start=27</link>
      <guid>http://www.advogato.org/person/lukeg/diary.html?start=27</guid>
      <description>I just saw in the paper that Christiania, the big hippie commune and soft-drugs haven in the middle of Copenhagen, was just raided by a hundred police. They put a lot of people in jail for a long time.

&lt;p&gt; The world is less of a cool place now.
</description>
    </item>
    <item>
      <pubDate>Thu, 25 Sep 2003 20:15:45 GMT</pubDate>
      <title>25 Sep 2003</title>
      <link>http://www.advogato.org/person/lukeg/diary.html?start=26</link>
      <guid>http://www.advogato.org/person/lukeg/diary.html?start=26</guid>
      <description>&lt;a href="http://www.ewtoo.org/~matt/monkey/waves/intro.mp3" &gt;Monkey!&lt;/a&gt;
</description>
    </item>
    <item>
      <pubDate>Sun, 17 Aug 2003 17:04:02 GMT</pubDate>
      <title>17 Aug 2003</title>
      <link>http://www.advogato.org/person/lukeg/diary.html?start=25</link>
      <guid>http://www.advogato.org/person/lukeg/diary.html?start=25</guid>
      <description>&lt;strong&gt;re: Clear and informative error messages&lt;/strong&gt;

&lt;p&gt; &lt;p&gt; &lt;a href="http://www.advogato.org/person/raph/" &gt;raph&lt;/a&gt;: CMU Common Lisp is a system that takes &lt;a
href="http://cvs2.cons.org/ftp-area/cmucl/doc/cmu-user/compiler.html#toc102"&gt;error-reportage
with macro-expansion&lt;/a&gt; seriously.

&lt;p&gt; &lt;p&gt; In the case of compile-time errors in the results of macro expansion,
CMUCL's error reportage gives some very useful information: the actual
source expression that expands to erroneous code, some context to say
which part of the expansion is in error, and an easy way to see how
particular expressions get expanded (&lt;tt&gt;macroexpand-1&lt;/tt&gt;) so that
your eyeball can spot the error.

&lt;p&gt; &lt;p&gt; For errors occuring &lt;i&gt;during&lt;/i&gt; macro-expansion, you get full
source-level debugging, since the macro is a Lisp program.

&lt;p&gt; &lt;p&gt; Now I'm curious about how well it works for debugging runtime errors
in macro-expanded code. I mustn't have done much of that.

&lt;p&gt; Another more upbeat observation is how good programs like &lt;tt&gt;strace&lt;/tt&gt; and &lt;tt&gt;ethereal&lt;/tt&gt; are, and the fact that you can understand a lot about a program by looking at how it interacts with other programs. Is this what they call "stratified design"?</description>
    </item>
  </channel>
</rss>
