<?xml version="1.0"?>
<rss version="2.0">
  <channel>
    <title>Advogato blog for wainstead</title>
    <link>http://www.advogato.org/person/wainstead/</link>
    <description>Advogato blog for wainstead</description>
    <language>en-us</language>
    <generator>mod_virgule</generator>
    <pubDate>Sat, 18 May 2013 07:44:30 GMT</pubDate>
    <item>
      <pubDate>Sun, 9 Dec 2012 22:16:28 GMT</pubDate>
      <title>Waverous patches soon to be integrated into Stunt</title>
      <link>http://www.advogato.org/person/wainstead/diary.html?start=101</link>
      <guid>http://waverous.blogspot.com/feeds/2241637442397910438/comments/default</guid>
      <description>&lt;p&gt;I saw a &lt;a href="https://groups.google.com/forum/?fromgroups=#!topic/MOO-talk/tF7nyc2lRJk" &gt;wonderful message&lt;/a&gt;&#xA0;from Todd Sundsted this weekend on the MOO-Talk list: &lt;br/&gt;&lt;/p&gt;&lt;blockquote&gt;Next up, I'm going to start integrating Steve Wainstead's C++ patches into Stunt.  This will give us better tools for abstracting away some of the complexity in the current codebase. &lt;/blockquote&gt;I haven't been doing anything with Waverous for months now and this is a shot in the arm. In part I took a deep dive into &lt;a href="https://minecraft.net/" &gt;Minecraft&lt;/a&gt; and spent a lot of time on it -- a few hundred hours of playing time. &lt;br/&gt;&lt;br/&gt;This was a direct result of reading Jane McGonigal's "&lt;a href="http://www.amazon.com/Reality-Broken-Games-Better-Change/dp/0143120611" &gt;Reality Is Broken: Why Games Make Us Better and How They Can Change the World&lt;/a&gt;." I never knew all those years of &lt;a href="http://www.amazon.com/review/R1I3VBUBYME9RN" &gt;playing Grand Theft Auto&lt;/a&gt;&#xA0;were making me happier and mentally healthier. I sold my PS3 a couple of years ago and decided I wouldn't sink any more time into gameplay. When my wife took a four day trip to New Orleans I decided to spend the alone-time in a new immersive experience. I loved every minute of it.&lt;br/&gt;&lt;br/&gt;This is related peripherally to LambdaMOO development work in that some people still use MOOs to create and play games. The MOO I reside on does not do this, but one of the projects I want to pursue is use the &lt;a href="http://stunt.io/packages" &gt;package management system of Stunt&lt;/a&gt;&#xA0;to create some rooms and objects... I think prefabricated worlds (or even just portions of worlds) offer some good potential for wizards and world building. Imagine someone recreated the world of Harry Potter in a MOO: another person could contribute the Hogwarts Express, for example. The world builder might have two or three Hogwarts Express packages to choose from, offering different features. Todd's package management system will allow a level of sharing that was never possible before with LambdaMOO.&lt;br/&gt;&lt;br/&gt;I highly recommend watching Jane McGonigal's TED talk "&lt;a href="http://www.ted.com/talks/jane_mcgonigal_the_game_that_can_give_you_10_extra_years_of_life.html" &gt;The Game That Can Give You Ten Extra Years of Life&lt;/a&gt;."&lt;div&gt;
  &lt;img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/3253888304126050756-2241637442397910438?l=waverous.blogspot.com" alt=""/&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <pubDate>Wed, 26 Sep 2012 16:38:48 GMT</pubDate>
      <title>26 Sep 2012</title>
      <link>http://www.advogato.org/person/wainstead/diary.html?start=100</link>
      <guid>http://www.advogato.org/person/wainstead/diary.html?start=100</guid>
      <description>I haven't called AppleScript from Emacs in a while. Cooked up an Emacs command today to to make iTunes either play or pause, depending on its state. It's nothing fancy.&lt;br/&gt;
&lt;code&gt;&lt;br/&gt;
(defun sw-pp ()&lt;br/&gt;
  "Make iTunes either pause or play"&lt;br/&gt;
  (interactive)&lt;br/&gt;
  (setq apscript "&lt;br/&gt;
tell application \"iTunes\"&lt;br/&gt;
        if player state is paused then&lt;br/&gt;
                play&lt;br/&gt;
        else&lt;br/&gt;
                pause&lt;br/&gt;
        end if&lt;br/&gt;
end tell&lt;br/&gt;
"&lt;br/&gt;
        )&lt;br/&gt;
  (do-applescript apscript)&lt;br/&gt;
  )&lt;br/&gt;
&lt;/code&gt;&lt;br/&gt;
(An aside: I'm using the &lt;tt&gt;code&lt;/tt&gt; HTML tag here to render the above code, which doesn't honor indentation. Using the &lt;tt&gt;pre&lt;/tt&gt; tag double spaces the code, which strikes me as a bug).&lt;br/&gt;
&lt;br/&gt;
Formally, I should use &lt;tt&gt;(let)&lt;/tt&gt; instead of &lt;tt&gt;(setq)&lt;/tt&gt; (which creates and sets a global variable) but I'm too lazy to work out the syntax. Writing Emacs Lisp is not yet second nature to me.</description>
    </item>
    <item>
      <pubDate>Wed, 22 Aug 2012 15:53:12 GMT</pubDate>
      <title>22 Aug 2012</title>
      <link>http://www.advogato.org/person/wainstead/diary.html?start=99</link>
      <guid>http://www.advogato.org/person/wainstead/diary.html?start=99</guid>
      <description>TIL Emacs's &lt;a href="http://www.delorie.com/gnu/docs/elisp-manual-21/elisp_621.html" &gt;"echo area"&lt;/a&gt; is a different thing from the minibuffer.&lt;br/&gt;
&lt;br/&gt;
I was looking for a way to write to the &lt;tt&gt;*Messages*&lt;/tt&gt; buffer only, and not to the "echo area" at the same time. The function &lt;tt&gt;message&lt;/tt&gt; writes to both the "echo area" and the &lt;tt&gt;*Messages*&lt;/tt&gt; buffer, which is too noisy for my little Emacs extension, &lt;tt&gt;&lt;a href="https://github.com/wainstead/swainlisp/blob/master/desktop-auto-save.el" &gt;desktop-auto-save&lt;/a&gt;&lt;/tt&gt;.</description>
    </item>
    <item>
      <pubDate>Tue, 7 Aug 2012 16:00:44 GMT</pubDate>
      <title>7 Aug 2012</title>
      <link>http://www.advogato.org/person/wainstead/diary.html?start=98</link>
      <guid>http://www.advogato.org/person/wainstead/diary.html?start=98</guid>
      <description>How to teach &lt;tt&gt;ctags&lt;/tt&gt; to read Cheetah template files:&lt;br/&gt;
1) Create a file in your home directory, &lt;tt&gt;.ctags&lt;/tt&gt; (i.e. &lt;tt&gt;$HOME/.ctags&lt;/tt&gt;).&lt;br/&gt;
&lt;br/&gt;
2) Edit it:&lt;br/&gt;
&lt;pre&gt;&lt;br/&gt;
--langdef=cheetah&lt;br/&gt;
--langmap=cheetah:.tmpl&lt;br/&gt;
--regex-cheetah=/^#def[ \t]*([a-zA-Z0-9_]+)/\1/d,definition/&lt;br/&gt;
&lt;/pre&gt;&lt;br/&gt;
(This assumes your Cheetah templates use the extension &lt;tt&gt;.tmpl&lt;/tt&gt;. Change &lt;tt&gt;--langmap&lt;/tt&gt; to suite your needs).&lt;br/&gt;
&lt;br/&gt;
This is for &lt;a href="http://ctags.sourceforge.net/" &gt;Exuberant Ctags&lt;/a&gt;, not the stock one that ships on some systems. If you run &lt;tt&gt;ctags --version&lt;/tt&gt; and it doesn't tell you it's Exuberant Ctags you probably have a different version.&lt;br/&gt;
&lt;br/&gt;
Cheetah is a templating system used in Python programming. I use it at work and yesterday I finally decided to do something about Cheetah template support in my TAGS file (I use Emacs; vim users will use a file called "&lt;tt&gt;tags&lt;/tt&gt;").&lt;br/&gt;
&lt;br/&gt;
Be sure to run &lt;tt&gt;ctags&lt;/tt&gt; again to generate a new tags file; you may need to tweak the command line flags so &lt;tt&gt;ctags&lt;/tt&gt; picks up your template files:&lt;br/&gt;
&lt;br/&gt;
&lt;tt&gt;ctags -e -R --languages=-html,python&lt;/tt&gt;&lt;br/&gt;
&lt;br/&gt;
It's neat that this can be accomplished just through command line flags! I thought about writing an extension or a patch in C, but this small bit of work does pretty much all I need.&lt;br/&gt;
</description>
    </item>
    <item>
      <pubDate>Fri, 13 Jul 2012 04:10:40 GMT</pubDate>
      <title>A C++ version of Stunt is born</title>
      <link>http://www.advogato.org/person/wainstead/diary.html?start=97</link>
      <guid>http://waverous.blogspot.com/feeds/5159804665903514534/comments/default</guid>
      <description>&lt;p&gt;Compiling:  &lt;/p&gt;&lt;pre&gt;&lt;br/&gt;-*- mode: compilation; default-directory: "~/Sites/projects/moowork/stunt-swain/" -*-&lt;br/&gt;Compilation started at Thu Jul 12 19:38:35&lt;br/&gt;&lt;br/&gt;make&lt;br/&gt;[ config.h : config.status ]&lt;br/&gt;./config.status&lt;br/&gt;config.status: creating Makefile&lt;br/&gt;config.status: creating config.h&lt;br/&gt;config.status: config.h is unchanged&lt;br/&gt;g++ -m32 -O -DHAVE_CONFIG_H  -c -o ast.o ast.c&lt;br/&gt;g++ -m32 -O -DHAVE_CONFIG_H  -c -o base64.o base64.c&lt;br/&gt;g++ -m32 -O -DHAVE_CONFIG_H  -c -o code_gen.o code_gen.c&lt;br/&gt;g++ -m32 -O -DHAVE_CONFIG_H  -c -o collection.o collection.c&lt;br/&gt;g++ -m32 -O -DHAVE_CONFIG_H  -c -o db_file.o db_file.c&lt;br/&gt;g++ -m32 -O -DHAVE_CONFIG_H  -c -o db_io.o db_io.c&lt;br/&gt;g++ -m32 -O -DHAVE_CONFIG_H  -c -o db_objects.o db_objects.c&lt;br/&gt;g++ -m32 -O -DHAVE_CONFIG_H  -c -o db_properties.o db_properties.c&lt;br/&gt;g++ -m32 -O -DHAVE_CONFIG_H  -c -o db_verbs.o db_verbs.c&lt;br/&gt;g++ -m32 -O -DHAVE_CONFIG_H  -c -o decompile.o decompile.c&lt;br/&gt;g++ -m32 -O -DHAVE_CONFIG_H  -c -o disassemble.o disassemble.c&lt;br/&gt;g++ -m32 -O -DHAVE_CONFIG_H  -c -o eval_env.o eval_env.c&lt;br/&gt;g++ -m32 -O -DHAVE_CONFIG_H  -c -o eval_vm.o eval_vm.c&lt;br/&gt;g++ -m32 -O -DHAVE_CONFIG_H  -c -o exceptions.o exceptions.c&lt;br/&gt;g++ -m32 -O -DHAVE_CONFIG_H  -c -o exec.o exec.c&lt;br/&gt;g++ -m32 -O -DHAVE_CONFIG_H  -c -o execute.o execute.c&lt;br/&gt;g++ -m32 -O -DHAVE_CONFIG_H  -c -o extension-fileio.o extension-fileio.c&lt;br/&gt;g++ -m32 -O -DHAVE_CONFIG_H  -c -o extensions.o extensions.c&lt;br/&gt;g++ -m32 -O -DHAVE_CONFIG_H  -c -o functions.o functions.c&lt;br/&gt;g++ -m32 -O -DHAVE_CONFIG_H  -c -o hmac_sha2.o hmac_sha2.c&lt;br/&gt;g++ -m32 -O -DHAVE_CONFIG_H  -c -o http_parser.o http_parser.c&lt;br/&gt;g++ -m32 -O -DHAVE_CONFIG_H  -c -o json.o json.c&lt;br/&gt;bison -y -d parser.y &lt;br/&gt;mv -f y.tab.c parser.c&lt;br/&gt;g++ -m32 -O -DHAVE_CONFIG_H  -c -o parser.o parser.c&lt;br/&gt;touch y.tab.h&lt;br/&gt;g++ -m32 -O -DHAVE_CONFIG_H  -c -o keywords.o keywords.c&lt;br/&gt;g++ -m32 -O -DHAVE_CONFIG_H  -c -o list.o list.c&lt;br/&gt;g++ -m32 -O -DHAVE_CONFIG_H  -c -o log.o log.c&lt;br/&gt;g++ -m32 -O -DHAVE_CONFIG_H  -c -o map.o map.c&lt;br/&gt;g++ -m32 -O -DHAVE_CONFIG_H  -c -o match.o match.c&lt;br/&gt;g++ -m32 -O -DHAVE_CONFIG_H  -c -o md5.o md5.c&lt;br/&gt;g++ -m32 -O -DHAVE_CONFIG_H  -c -o name_lookup.o name_lookup.c&lt;br/&gt;touch net_single.o&lt;br/&gt;touch net_multi.o&lt;br/&gt;g++ -m32 -O -DHAVE_CONFIG_H  -c -o network.o network.c&lt;br/&gt;touch net_mp_selct.o&lt;br/&gt;touch net_mp_poll.o&lt;br/&gt;touch net_mp_fake.o&lt;br/&gt;g++ -m32 -O -DHAVE_CONFIG_H  -c -o net_mplex.o net_mplex.c&lt;br/&gt;touch net_bsd_tcp.o&lt;br/&gt;touch net_bsd_lcl.o&lt;br/&gt;touch net_sysv_tcp.o&lt;br/&gt;touch net_sysv_lcl.o&lt;br/&gt;g++ -m32 -O -DHAVE_CONFIG_H  -c -o net_proto.o net_proto.c&lt;br/&gt;g++ -m32 -O -DHAVE_CONFIG_H  -c -o numbers.o numbers.c&lt;br/&gt;g++ -m32 -O -DHAVE_CONFIG_H  -c -o objects.o objects.c&lt;br/&gt;g++ -m32 -O -DHAVE_CONFIG_H  -c -o parse_cmd.o parse_cmd.c&lt;br/&gt;g++ -m32 -O -DHAVE_CONFIG_H  -c -o pattern.o pattern.c&lt;br/&gt;g++ -m32 -O -DHAVE_CONFIG_H  -c -o program.o program.c&lt;br/&gt;g++ -m32 -O -DHAVE_CONFIG_H  -c -o property.o property.c&lt;br/&gt;g++ -m32 -O -DHAVE_CONFIG_H  -c -o quota.o quota.c&lt;br/&gt;g++ -m32 -O -DHAVE_CONFIG_H  -c -o regexpr.o regexpr.c&lt;br/&gt;g++ -m32 -O -DHAVE_CONFIG_H  -c -o server.o server.c&lt;br/&gt;g++ -m32 -O -DHAVE_CONFIG_H  -c -o sha1.o sha1.c&lt;br/&gt;g++ -m32 -O -DHAVE_CONFIG_H  -c -o sha256.o sha256.c&lt;br/&gt;g++ -m32 -O -DHAVE_CONFIG_H  -c -o storage.o storage.c&lt;br/&gt;g++ -m32 -O -DHAVE_CONFIG_H  -c -o streams.o streams.c&lt;br/&gt;g++ -m32 -O -DHAVE_CONFIG_H  -c -o str_intern.o str_intern.c&lt;br/&gt;g++ -m32 -O -DHAVE_CONFIG_H  -c -o sym_table.o sym_table.c&lt;br/&gt;g++ -m32 -O -DHAVE_CONFIG_H  -c -o tasks.o tasks.c&lt;br/&gt;g++ -m32 -O -DHAVE_CONFIG_H  -c -o timers.o timers.c&lt;br/&gt;g++ -m32 -O -DHAVE_CONFIG_H  -c -o unparse.o unparse.c&lt;br/&gt;g++ -m32 -O -DHAVE_CONFIG_H  -c -o utils.o utils.c&lt;br/&gt;g++ -m32 -O -DHAVE_CONFIG_H  -c -o verbs.o verbs.c&lt;br/&gt;g++ -m32 -O -DHAVE_CONFIG_H  -c -o version.o version.c&lt;br/&gt;g++ -m32 -O -DHAVE_CONFIG_H  -c -o yajl.o yajl.c&lt;br/&gt;g++ -m32 -O -DHAVE_CONFIG_H  -c -o yajl_alloc.o yajl_alloc.c&lt;br/&gt;g++ -m32 -O -DHAVE_CONFIG_H  -c -o yajl_buf.o yajl_buf.c&lt;br/&gt;g++ -m32 -O -DHAVE_CONFIG_H  -c -o yajl_encode.o yajl_encode.c&lt;br/&gt;g++ -m32 -O -DHAVE_CONFIG_H  -c -o yajl_gen.o yajl_gen.c&lt;br/&gt;g++ -m32 -O -DHAVE_CONFIG_H  -c -o yajl_lex.o yajl_lex.c&lt;br/&gt;g++ -m32 -O -DHAVE_CONFIG_H  -c -o yajl_parser.o yajl_parser.c&lt;br/&gt;g++ -m32 -O -DHAVE_CONFIG_H  -c -o yajl_version.o yajl_version.c&lt;br/&gt;g++ -m32 -O -DHAVE_CONFIG_H ast.o base64.o code_gen.o collection.o db_file.o db_io.o&lt;br/&gt; db_objects.o db_properties.o db_verbs.o decompile.o disassemble.o eval_env.o&lt;br/&gt; eval_vm.o exceptions.o exec.o execute.o extension-fileio.o extensions.o functions.o &lt;br/&gt;hmac_sha2.o http_parser.o json.o keywords.o list.o log.o map.o match.o md5.o &lt;br/&gt;name_lookup.o network.o net_mplex.o net_proto.o numbers.o objects.o parse_cmd.o &lt;br/&gt;pattern.o program.o property.o quota.o regexpr.o server.o sha1.o sha256.o storage.o &lt;br/&gt;streams.o str_intern.o sym_table.o tasks.o timers.o unparse.o utils.o verbs.o &lt;br/&gt;version.o yajl.o yajl_alloc.o yajl_buf.o yajl_encode.o yajl_gen.o yajl_lex.o &lt;br/&gt;yajl_parser.o yajl_version.o parser.o -lexpat  -o moo&lt;br/&gt;rm parser.c&lt;br/&gt;&lt;br/&gt;Compilation finished at Thu Jul 12 19:38:51&lt;br/&gt;&lt;/pre&gt; Running:  &lt;pre&gt;&lt;br/&gt;bash-3.2$ ./moo Stunt.db Stunt.db.new&lt;br/&gt;Jul 12 19:46:36: CMDLINE: Outbound network connections enabled.&lt;br/&gt;Jul 12 19:46:36: STARTING: Version 1.8.3+?_ad_hoc_?? of the LambdaMOO server&lt;br/&gt;Jul 12 19:46:36:           (Using BSD/TCP protocol)&lt;br/&gt;Jul 12 19:46:36:           (Task timeouts measured in server CPU seconds.)&lt;br/&gt;Jul 12 19:46:36:           (Process id 39697)&lt;br/&gt;Jul 12 19:46:36: LOADING: Stunt.db&lt;br/&gt;Jul 12 19:46:36: LOADING: Reading 11 objects ...&lt;br/&gt;Jul 12 19:46:36: LOADING: Done reading 11 objects ...&lt;br/&gt;Jul 12 19:46:36: VALIDATING the object hierarchies ...&lt;br/&gt;Jul 12 19:46:36: VALIDATE: Phase 1: Check for invalid objects ...&lt;br/&gt;Jul 12 19:46:36: VALIDATE: Phase 2: Check for cycles ...&lt;br/&gt;Jul 12 19:46:36: VALIDATE: Phase 3: Check for inconsistencies ...&lt;br/&gt;Jul 12 19:46:36: VALIDATING the object hierarchies ... finished.&lt;br/&gt;Jul 12 19:46:36: LOADING: Reading 94 MOO verb programs ...&lt;br/&gt;Jul 12 19:46:36: NAME_LOOKUP: Started new lookup process&lt;br/&gt;Jul 12 19:46:36: LOADING: Done reading 94 verb programs ...&lt;br/&gt;Jul 12 19:46:36: LOADING: Reading forked and suspended tasks ...&lt;br/&gt;Jul 12 19:46:36: LOADING: Reading list of formerly active connections ...&lt;br/&gt;Jul 12 19:46:36: LOADING: Stunt.db done, will dump new database on Stunt.db.new&lt;br/&gt;Jul 12 19:46:36: INTERN: 770 allocations saved, 9815 bytes&lt;br/&gt;Jul 12 19:46:36: INTERN: at end, 750 entries in a 10007 bucket hash table.&lt;br/&gt;Jul 12 19:46:36: Loaded protect cache for 177 builtin functions&lt;br/&gt;Jul 12 19:46:36: LISTEN: #0 now listening on port 7777&lt;br/&gt;Jul 12 19:46:36: &amp;gt; WARNING: Log-in via passkey is enabled for the following players&lt;br/&gt; (specified in $passkey_players):&lt;br/&gt;Jul 12 19:46:36: &amp;gt; WARNING:   "Wizard" (#5)&lt;br/&gt;Jul 12 19:46:36: &amp;gt; WARNING:   "Programmer" (#6)&lt;br/&gt;Jul 12 19:46:36: &amp;gt; WARNING: This is a severe security vulnerability.  In a secure &lt;br/&gt;environment you should:&lt;br/&gt;Jul 12 19:46:36: &amp;gt; WARNING:   disable passkey login:&lt;br/&gt;Jul 12 19:46:36: &amp;gt; WARNING:     ; $disable_passkey_login = 1&lt;br/&gt;Jul 12 19:46:36: &amp;gt; WARNING:     ; $passkey_players = {}&lt;br/&gt;Jul 12 19:46:36: &amp;gt; WARNING:   disable existing passkeys:&lt;br/&gt;Jul 12 19:46:36: &amp;gt; WARNING:     ; #5.passkey = 0&lt;br/&gt;Jul 12 19:46:36: &amp;gt; WARNING:     ; #6.passkey = 0&lt;br/&gt;Jul 12 19:46:36: &amp;gt; WARNING:   and for good measure:&lt;br/&gt;Jul 12 19:46:36: &amp;gt; WARNING:     ; set_player_flag(#5, 0)&lt;br/&gt;Jul 12 19:46:36: &amp;gt; WARNING:     ; set_player_flag(#6, 0)&lt;br/&gt;Jul 12 19:46:36: &amp;gt; PASSKEY for "Wizard" (#5): 14FC3656E763CB43C5E16F4CE9A9B77EE742629677A29048C44423C640A59442 (keep it secret)&lt;br/&gt;Jul 12 19:46:36: &amp;gt; PASSKEY for "Programmer" (#6): 2B3BE77D36447234AE5AEBB920FC1E3F7B0FDAB8D4169A3FED23C57C0753C398 (keep it secret)&lt;br/&gt;Jul 12 19:46:54: ACCEPT: #-2 on port 7777 from localhost, port 56831&lt;br/&gt;Jul 12 19:47:11: CONNECTED: Wizard (#5) on port 7777 from localhost, port 56831&lt;br/&gt;&lt;/pre&gt; And connecting:  &lt;pre&gt;&lt;br/&gt;Trying 127.0.0.1...&lt;br/&gt;Connected to localhost.&lt;br/&gt;Escape character is '^]'.&lt;br/&gt;Welcome to Stunt!  For information about Stunt, check out http://stunt.io/.  To &lt;br/&gt;connect to the server, type "connect &lt;credentials&gt;".&lt;br/&gt;connect 14FC3656E763CB43C5E16F4CE9A9B77EE742629677A29048C44423C640A59442&lt;br/&gt;*** Connected ***&lt;br/&gt;&lt;/credentials&gt;&lt;/pre&gt; In truth, there's one more file that needs modification: &lt;tt&gt;exec.c&lt;/tt&gt;, which uses &lt;tt&gt;goto&lt;/tt&gt; as it was meant to be used but &lt;tt&gt;g++&lt;/tt&gt; doesn't like it. But that's a small obstacle to overcome. &lt;p&gt;
  &lt;b&gt;UPDATE! &lt;a href="https://github.com/wainstead/stunt/commit/64b24b1704af58ea6bd83df67cf1a3ac496ae97c" &gt;Todd sent me a patch&lt;/a&gt; for &lt;tt&gt;exec.c&lt;/tt&gt;. I've applied, compiled, tested, committed and pushed it.&lt;/b&gt;
&lt;/p&gt;&lt;div&gt;
  &lt;img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/3253888304126050756-5159804665903514534?l=waverous.blogspot.com" alt=""/&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <pubDate>Mon, 9 Jul 2012 16:08:45 GMT</pubDate>
      <title>The finish line nears!: Merging Waverous's C++ changes into Stunt</title>
      <link>http://www.advogato.org/person/wainstead/diary.html?start=96</link>
      <guid>http://waverous.blogspot.com/feeds/8093553500547142111/comments/default</guid>
      <description>&lt;p&gt;Yesterday I had several blissful hours to hack away, &lt;a href="https://github.com/wainstead/stunt/commits/waverous" &gt;applying patches to the "waverous" branch in my fork of Stunt&lt;/a&gt;. &lt;/p&gt;&lt;p&gt;I had to deal with a few more places in the Stunt code that differed from the Waverous code; namely, Stunt was forked from a later commit of LambdaMOO than Waverous was. (I started with the &lt;a href="http://sourceforge.net/projects/lambdamoo/" &gt;code base on Sourceforge&lt;/a&gt;, whereas Todd started with &lt;a href="https://github.com/wrog/lambdamoo" &gt;the code base on Github&lt;/a&gt;). There are &lt;a href="https://github.com/wainstead/stunt/blob/waverous/list.c#L628" &gt;several places that use a new macro&lt;/a&gt;, &lt;tt&gt;TRY_STREAM&lt;/tt&gt;, which in turn uses &lt;a href="https://github.com/wainstead/stunt/blob/waverous/exceptions.h#L93" &gt;the original &lt;tt&gt;TRY&lt;/tt&gt; macro&lt;/a&gt;. I fixed the compiler error occurring after macro expansion (which didn't turn out to be all that hard, fortunately). &lt;/p&gt;&lt;p&gt;By midnight last night I had the project successfully compiling, which was quite exciting. But the linking phase was failing; I found I was missing a handful of source files in &lt;tt&gt;Makefile.in&lt;/tt&gt;, like &lt;tt&gt;json.[hc]&lt;/tt&gt;, &lt;tt&gt;collection.[hc]&lt;/tt&gt; and a few others. &lt;/p&gt;&lt;p&gt;I think the &lt;tt&gt;Makefile.in&lt;/tt&gt; is now up to date and I just have to update the files for File I/O to make &lt;tt&gt;g++&lt;/tt&gt; happy. After that, there's about 100-150 patches to look at but the vast majority of them are specific to my goals with Waverous, like including the LambdaMOO and JHCore databases, removing scripts used during porting, adding documentation, helper tools like Neil Fraser's &lt;a href="http://neil.fraser.name/software/moobrowser/" &gt;Moo Database Browser&lt;/a&gt;, etc. &lt;/p&gt;&lt;p&gt;I think there are a handful of patches to apply still that deal mostly with updates to the &lt;a href="http://www.gnu.org/software/autoconf/" &gt;Autotools&lt;/a&gt; but I consider those to come after the milestone of a running "Stunt++" server.  Todd &lt;a href="https://groups.google.com/forum/?fromgroups#!topic/MOO-talk/owPAsY49olw" &gt;announced my work on the MOO Talk mailing list this morning&lt;/a&gt;.&lt;/p&gt;&lt;div&gt;
  &lt;img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/3253888304126050756-8093553500547142111?l=waverous.blogspot.com" alt=""/&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <pubDate>Sun, 1 Jul 2012 23:13:44 GMT</pubDate>
      <title>Backporting: Patching Waverous from Stunt</title>
      <link>http://www.advogato.org/person/wainstead/diary.html?start=95</link>
      <guid>http://waverous.blogspot.com/feeds/5916555706174137232/comments/default</guid>
      <description>&lt;p&gt;Today I wrapped up a bit of work needed in &lt;tt&gt;db_file.c&lt;/tt&gt; where the TRY/EXCEPT/ENDTRY macros were replaced with their respective code. Somehow one block went missing during the patching process, and I compared files by eyeball between &lt;a href="https://github.com/toddsundsted/stunt" &gt;Stunt&lt;/a&gt; and &lt;a href="http://code.google.com/p/waverous/" &gt;Waverous&lt;/a&gt; to figure out where things went wrong. &lt;/p&gt;&lt;p&gt;I then &lt;a href="https://github.com/toddsundsted/stunt/commit/caf3f26e3fea34dcfefa26e650a649ac95abc61d" &gt;applied a change from Stunt to Waverous&lt;/a&gt;, the first such change: Todd found the files &lt;tt&gt;ref_count.h&lt;/tt&gt; and &lt;tt&gt;ref_count.c&lt;/tt&gt; were never used since their innards were never seen by the compiler, being hidden by &lt;tt&gt;#IF 0 ... #ENDIF&lt;/tt&gt; blocks. &lt;/p&gt;&lt;p&gt;I &lt;a href="http://code.google.com/p/waverous/source/detail?r=3c6b51236b587b7fc56b883b5b15ed748133ff7a" &gt;cleaned up Waverous's Makefile.in dependency list&lt;/a&gt; the usual hard way, which means getting the project to compile and running &lt;tt&gt;make depend&lt;/tt&gt;. I have to revisit how this is done some day because there has to be a better way. Maybe &lt;a href="http://mad-scientist.net/make/autodep.html" &gt;this approach will work&lt;/a&gt;. &lt;i&gt;(Edit: actually, with a little bit of thought it isn't necessary to get the project to compile... one just has to run the &lt;tt&gt;bison&lt;/tt&gt; command plus a couple others to generate &lt;tt&gt;y.tab.h&lt;/tt&gt; and &lt;tt&gt;parser.c&lt;/tt&gt;, and then &lt;tt&gt;make depend&lt;/tt&gt; will work fine).&lt;/i&gt;&lt;/p&gt;&lt;p&gt;I finally found what I was looking for in &lt;tt&gt;git: &lt;a href="http://www.kernel.org/pub/software/scm/git/docs/git-format-patch.html" &gt;git-format-patch&lt;/a&gt;&lt;/tt&gt;. Running this in the Waverous project for every commit from where I am now in the commit history to HEAD, I get 223 files. This sounds worse than it actually is:  &lt;/p&gt;&lt;pre&gt;&lt;br/&gt;bash-3.2$ git format-patch 763e7648518c54cf011f4df6011cc796b6838175^..HEAD&lt;br/&gt;0001-Another-questionable-change-that-could-cause-headach.patch&lt;br/&gt;0002-largely-cast-fixes-and-replacing-new-with-_new.patch&lt;br/&gt;0003-Another-one-to-watch-out-for-as-I-did-this.patch&lt;br/&gt;0004-More-cast-fixes-should-have-all-instances-of-try-as-.patch&lt;br/&gt;0005-A-tricky-one.-The-passed-in-data-struct-pointer-was-.patch&lt;br/&gt;0006-Minor-cast-fix.-But-casting-TYPE_STR-is-getting-to-b.patch&lt;br/&gt;0007-Changed-void-to-int-to-satisfy-longjmp-note-that-cb-.patch&lt;br/&gt;0008-The-biggest-issue-in-this-commit-was-the-copying-of-.patch&lt;br/&gt;0009-For-now-committing-this-even-though-the-compiler-iss.patch&lt;br/&gt;0010-Oops.-Accidentally-converted-this_arm-to-self_arm-wh.patch&lt;br/&gt;0011-Fixing-a-few-more-enum-comparisons-the-compiler-didn.patch&lt;br/&gt;0012-Casts-all-around-to-satisfy-the-compiler.patch&lt;br/&gt;0013-There-were-a-few-cases-of-__new-and-new-which-should.patch&lt;br/&gt;0014-one-cast-to-fix-this-file-for-our-old-void-pointer-f.patch&lt;br/&gt;0015-Moved-an-enum-out-of-a-struct-so-it-would-be-in-scop.patch&lt;br/&gt;0016-one-_new-and-a-number-of-casts-made.patch&lt;br/&gt;0017-scratch-file-to-be-deleted-later-list-of-occurances-.patch&lt;br/&gt;0018-ignoring-the-TAGS-file.patch&lt;br/&gt;0019-Added-comment-pointing-to-the-CPP-manual-explaining-.patch&lt;br/&gt;0020-after-macro-expansion-g-complained-that.patch&lt;br/&gt;0021-Fixed-calls-to-getsockname-with-casts.patch&lt;br/&gt;0022-Borrowed-the-definition-of-the-struct-exception-from.patch&lt;br/&gt;0023-various-casts-to-make-the-compiler-happy.patch&lt;br/&gt;0024-More-cast-fixes.patch&lt;br/&gt;0025-Casts-but-these-are-rather-suspicious-to-me.patch&lt;br/&gt;0026-assorted-casts-none-too-scary-looking.patch&lt;br/&gt;0027-Fixing-up-the-function-signatures-so-it-passes-g-.-T.patch&lt;br/&gt;0028-Made-a-goof-changing-the-function-signature-omitting.patch&lt;br/&gt;0029-Fixed-several-function-signatures-which-were-using-p.patch&lt;br/&gt;0030-Some-casts-and-an-accidental-change-of-this_program-.patch&lt;br/&gt;0031-More-casts-one-set-of-macros-expanded-to-fix-casting.patch&lt;br/&gt;0032-fixed-a-missed-catch-keyword-changed-to-_catch-and-a.patch&lt;br/&gt;0033-Casts-and-two-places-there-s-an-in-an-if-statement-w.patch&lt;br/&gt;0034-Fix-cast-to-var_type.patch&lt;br/&gt;0035-Added-workaround-for-casting-a-bitmask-operation.patch&lt;br/&gt;0036-Another-casting-fix-to-get-rid-of-the-compiler-s-com.patch&lt;br/&gt;0037-I-commented-out-the-definition-of-var_type-an-enum-i.patch&lt;br/&gt;0038-cleaning-up-scripts-used-to-massage-the-code-base.patch&lt;br/&gt;0039-cleaning-up-scripts-used-to-massage-the-code-base.patch&lt;br/&gt;0040-cleaning-up-scripts-used-to-massage-the-code-base.patch&lt;br/&gt;0041-cleaning-up-scripts-used-to-massage-the-code-base.patch&lt;br/&gt;0042-Previously-in-execute.c-I-copied-an-enum-out-of-a-st.patch&lt;br/&gt;0043-adding-FUP-to-the-project-not-yet-compiled-in-just-a.patch&lt;br/&gt;0044-temporarily-stashing-this-in-svn-so-I-don-t-lose-it.patch&lt;br/&gt;0045-commiting-Avalon-patch-files-for-now-will-delete-lat.patch&lt;br/&gt;0046-adding-LambdaCore-database.patch&lt;br/&gt;0047-Adding-FUP-files-per-install-instructions.patch&lt;br/&gt;0048-Tweaks-to-compile-on-RedHat-based-linux-system.patch&lt;br/&gt;0049-Tweak-to-let-crypt-be-found-on-linux-use-the-header-.patch&lt;br/&gt;0050-Tweak-to-let-lrand48-be-found-on-linux-use-the-heade.patch&lt;br/&gt;0051-applied-first-avalon-patch-tORIGINAL-d20040322.patch.patch&lt;br/&gt;0052-applied-d20040322-d20040323.patch.patch&lt;br/&gt;0053-applied-d20040323-d20040415.patch.patch&lt;br/&gt;0054-applied-d20040415-d20040416.patch.patch&lt;br/&gt;0055-applied-d20040416-d20041022.patch.patch&lt;br/&gt;0056-applied-d20041022-d20050324.patch.patch&lt;br/&gt;0057-applied-d20050327-d20051106.patch.patch&lt;br/&gt;0058-applied-d20051106-d20051107.patch.patch&lt;br/&gt;0059-Resolved-the-issues-with-expat-and-ident-and-the-cas.patch&lt;br/&gt;0060-removing-ident-stuff-specifically-commented-it-out-o.patch&lt;br/&gt;0061-This-largish-commit-is-mostly-the-work-of-Merlin-and.patch&lt;br/&gt;0062-cleaning-up.patch&lt;br/&gt;0063-oops-missed-one-new-file-to-commit.patch&lt;br/&gt;0064-handle-nil-value-gracefully.patch&lt;br/&gt;0065-Adding-a-tools-directory-and-two-of-Neil-Fraser-s-mo.patch&lt;br/&gt;0066-Rudimentary-script-to-test-the-server.patch&lt;br/&gt;0067-Minor-formatting-change.patch&lt;br/&gt;0068-minor-formatting-change.patch&lt;br/&gt;0069-adding-braces-so-Wall-does-not-complain-about-no-exp.patch&lt;br/&gt;0070-Changed-the-formatter-in-printf-to-ld-to-satisfy-gcc.patch&lt;br/&gt;0071-Linux-on-the-other-hand-does-not-like-ld-at-all-so-s.patch&lt;br/&gt;0072-I-changed-the-printf-s-to-cout-s-to-try-to-make-the-.patch&lt;br/&gt;0073-It-seems-for-Fedora-14-strchr-does-not-want-a-const-.patch&lt;br/&gt;0074-removing-ending-comma-which-pedantic-errors-complain.patch&lt;br/&gt;0075-Cleaning-up-warnings-generated-when-compiled-with-pe.patch&lt;br/&gt;0076-Cleaning-up-warnings-generated-when-compiled-with-pe.patch&lt;br/&gt;0077-though-I-don-t-see-what-the-deal-is-the-compiler-war.patch&lt;br/&gt;0078-removing-unused-variable-timeout-from-proto_accept_c.patch&lt;br/&gt;0079-Added-a-ifndef-for-INT32_MAX-which-is-predefined-by-.patch&lt;br/&gt;0080-annotating-a-function-even-if-briefly.patch&lt;br/&gt;0081-Adding-Neil-Fraser-s-Python-tool-to-convert-a-Moo-da.patch&lt;br/&gt;0082-Minor-cleanup-creating-a-directory-to-store-database.patch&lt;br/&gt;0083-Adding-a-set-of-moo-objects-I-ve-written-over-the-ye.patch&lt;br/&gt;0084-added-a-note-about-missing-features-causing-objects-.patch&lt;br/&gt;0085-directory-to-store-random-artifacts-like-patch-files.patch&lt;br/&gt;0086-I-found-this-via-some-link-for-the-enCore-database-f.patch&lt;br/&gt;0087-I-forget-where-I-picked-up-this-patch-but-it-shows-o.patch&lt;br/&gt;0088-adding-JHCore-database-and-its-copyright-notice.patch&lt;br/&gt;0089-gzipping-the-db-files-for-massive-space-savings.patch&lt;br/&gt;0090-adding-config.log-and-config.cache-to-distclean.patch&lt;br/&gt;0091-commenting-the-rule-pure_moo-purify-is-a-memory-acce.patch&lt;br/&gt;0092-main-must-return-int-claims-g.patch&lt;br/&gt;0093-noting-that-Pavel-used-a-custom-build-of-gperf-to-ge.patch&lt;br/&gt;0094-fixing-the-subpath-to-Minimal.db.patch&lt;br/&gt;0095-removed-the-t-flag-to-etags-which-it-doesn-t-have.-t.patch&lt;br/&gt;0096-This-copy-of-configure.in-comes-from-wp-lambdamoo-of.patch&lt;br/&gt;0097-ed-not-found-on-my-system-changing-it-to-ex.patch&lt;br/&gt;0098-added-configure_input.patch&lt;br/&gt;0099-Updated-versions-of-configure.in-and-the-generated-c.patch&lt;br/&gt;0100-changing-AC_CONFIG_HEADER-to-AC_CONFIG_HEADERS-per-t.patch&lt;br/&gt;0101-quoting-the-argument-to-AC_CONFIG_HEADERS.patch&lt;br/&gt;0102-I-m-removing-the-hardcoded-definition-of-the-compile.patch&lt;br/&gt;0103-Turns-out-I-just-needed-to-change-AC_PROG_CC-to-AC_P.patch&lt;br/&gt;0104-New-generated-configure-file.patch&lt;br/&gt;0105-default-to-m32-for-compiles-since-the-server-is-not-.patch&lt;br/&gt;0106-I-added-the-following.patch&lt;br/&gt;0107-Removing-the-distribution-making-rule-and-its-variab.patch&lt;br/&gt;0108-Basic-top-level-Makefile-the-main-use-being-to-build.patch&lt;br/&gt;0109-getting-rid-of-this-cvs-cruft.patch&lt;br/&gt;0110-Creating-a-chrooted-environment-to-run-waverous-in.patch&lt;br/&gt;0111-Removing-trailing-comma-to-make-pedantic-happy.patch&lt;br/&gt;0112-Ran-GNU-indent-on-all-.h-and-.c-files-to-standardize.patch&lt;br/&gt;0113-Cleanup-removing-all-the-old-rcs-string-constants-an.patch&lt;br/&gt;0114-Currently-this-generates-HTML-only-i.e.-no-Latex-or-.patch&lt;br/&gt;0115-removed-old-CVS-log-entries.patch&lt;br/&gt;0116-removed-outdated-bits-updated-others.patch&lt;br/&gt;0117-Renamed-task_queue-to-TaskQueue-as-a-start-to-making.patch&lt;br/&gt;0118-Removing-more-hopefull-all-of-the-CVS-log-entries-an.patch&lt;br/&gt;0119-Reformatted-struct-names-that-are-internal-to-this-m.patch&lt;br/&gt;0120-In-options.h-it-was-noted-that-using-a-copy-of-GNU-s.patch&lt;br/&gt;0121-removed-CVS-log-entries.patch&lt;br/&gt;0122-commenting-what-a-static-inline-function-is-in-C-ter.patch&lt;br/&gt;0123-Experimental-patch-that-converts-the-Task-struct-to-.patch&lt;br/&gt;0124-1-CPPFLAGS-was-used-but-never-defined-I-ve-added-the.patch&lt;br/&gt;0125-Adding-install-sh-per-the-GNU-Coding-Standards-the-m.patch&lt;br/&gt;0126-stripped-out-old-CVS-log-entries.patch&lt;br/&gt;0127-1-I-don-t-think-anyone-needs-to-mail-Pavil-anymore-r.patch&lt;br/&gt;0128-newest-generated-configure-script.patch&lt;br/&gt;0129-Check-for-expat.h-and-don-t-check-for-the-expat-libr.patch&lt;br/&gt;0130-I-ve-removed-the-DEXPAT_XML-flag-from-the-compiler-f.patch&lt;br/&gt;0131-added-the-standard-DEFS-DEFS-variable-and-DEFS-to-th.patch&lt;br/&gt;0132-I-ve-added-conditionals-to-configure.in-to-test-if.patch&lt;br/&gt;0133-typo-fix-missing-space.patch&lt;br/&gt;0134-I-ve-removed-the-patches-for-configure-aclocal.m4-an.patch&lt;br/&gt;0135-Now-the-user-can-specify-enable-expat-yes-no-to-.-co.patch&lt;br/&gt;0136-Added-ifdef-endif-around-the-code-to-handle-conditio.patch&lt;br/&gt;0137-Added-ifdef-endif-around-the-externs-and-function-ca.patch&lt;br/&gt;0138-Added-USE_EXT_FUP-and-HAVE_EXPAT_H-for-conditional-c.patch&lt;br/&gt;0139-Broke-out-ext-xml.c-from-the-main-group-of-source-fi.patch&lt;br/&gt;0140-Let-the-user-choose-whether-to-include-expat-or-FUP-.patch&lt;br/&gt;0141-Preparing-for-beta2-soonish.patch&lt;br/&gt;0142-Updating-the-name-from-configure.in-to-configure.ac-.patch&lt;br/&gt;0143-updating-the-rule-for-configure.in-to-confiture.ac.patch&lt;br/&gt;0144-Experimental-you-can-now-say-.-configure-enable-open.patch&lt;br/&gt;0145-The-macro-AC_TEST_PROGRAM-was-deprecated-and-replace.patch&lt;br/&gt;0146-yet-another-newest-version-of-configure.patch&lt;br/&gt;0147-Rolling-back-my-changes-for-now-not-sure-why-all-the.patch&lt;br/&gt;0148-I-was-running-into-the-problem-of-in-gdb-linux-I-cou.patch&lt;br/&gt;0149-Documented-the-depend-target-which-requires-files-ge.patch&lt;br/&gt;0150-I-ve-changed-the-configure-options-from-enable-woobl.patch&lt;br/&gt;0151-README-file-added-to-explain-this-directory-and-the-.patch&lt;br/&gt;0152-removing-extraneous-lines-from-chroot.sh.patch&lt;br/&gt;0153-Renaming-this-to-waverous-tester.exp-and-giving-it-t.patch&lt;br/&gt;0154-Renamed-this-file-to-waverous-tester.exp.patch&lt;br/&gt;0155-Adding-the-files-for-fileio.patch&lt;br/&gt;0156-Adding-a-LICENSE-file-to-clarify-all-the-licenses-fo.patch&lt;br/&gt;0157-Inserting-the-license-for-this-file-that-exists-in-a.patch&lt;br/&gt;0158-Adding-the-license-on-behalf-of-Andy.patch&lt;br/&gt;0159-Adding-the-licensing-that-goes-with-this-file.patch&lt;br/&gt;0160-Commenting-on-the-licensing-of-this-file.patch&lt;br/&gt;0161-Expounding-some-more-on-the-licensing-of-the-sources.patch&lt;br/&gt;0162-Renaming-restart.sh-to-mooctl-in-line-with-scripts-i.patch&lt;br/&gt;0163-Updating-the-instructions-by-s-restart-mooctl-g.-Not.patch&lt;br/&gt;0164-Use-0-instead-of-the-script-name-use-gzip-instead-of.patch&lt;br/&gt;0165-testbed-for-playing-with-the-features-of-getopt_long.patch&lt;br/&gt;0166-Got-rid-of-optreset-which-GNU-didn-t-like-and-I-wasn.patch&lt;br/&gt;0167-Explanatory-comments-for-the-case-of-zero.patch&lt;br/&gt;0168-Moved-the-option-to-log-user-commands-in-the-event-o.patch&lt;br/&gt;0169-Adding-the-MCP-2.1-implementation-updating-the-READM.patch&lt;br/&gt;0170-Moved-UNFORKED_CHECKPOINTS-into-.-configure-and-frie.patch&lt;br/&gt;0171-Minor-formatting-update.patch&lt;br/&gt;0172-Redid-the-no-forking-configure-option-is-now-with-fo.patch&lt;br/&gt;0173-Including-licensing-info-for-the-external-package-Fi.patch&lt;br/&gt;0174-Notes-on-what-to-add-in-this-prototype-of-command-li.patch&lt;br/&gt;0175-Largish-commit-to-add-finally-the-package-File-I-O-a.patch&lt;br/&gt;0176-Two-file-wide-changes-and-one-small-one.patch&lt;br/&gt;0177-Small-object-to-test-File-I-O.patch&lt;br/&gt;0178-Added-a-small-example-for-file_open.patch&lt;br/&gt;0179-Fixed-the-dumb-mistakes-I-made-in-my-first-attempt-t.patch&lt;br/&gt;0180-Bumped-up-the-version-number-of-Waverous-tweaked-the.patch&lt;br/&gt;0181-Updated-configure-file.patch&lt;br/&gt;0182-Note-added-about-make-install-in-the-future.patch&lt;br/&gt;0183-Changed-the-default-text-editor-mode-from-c-to-autoc.patch&lt;br/&gt;0184-Dropped-pgperf-the-customized-verion-of-GNU-gperf-th.patch&lt;br/&gt;0185-Removed-pgperf-from-the-LICENSE-file-as-it-s-no-long.patch&lt;br/&gt;0186-Check-for-GNU-gperf-issue-a-warning-if-not-found.-gp.patch&lt;br/&gt;0187-Latest-.-configure-script.patch&lt;br/&gt;0188-Dropping-LambdaMOO-specific-redeclaration-of-AC_FUNC.patch&lt;br/&gt;0189-Removed-checks-for-AUX-ALPHA-NeXT-SGI-HPUX.patch&lt;br/&gt;0190-Moved-the-custom-MOO-m4-macros-into-their-own-file-i.patch&lt;br/&gt;0191-Missing-quote-in-a-comment-fixed.patch&lt;br/&gt;0192-Dropping-the-test-to-see-if-malloc-is-defined-in-std.patch&lt;br/&gt;0193-Further-removing-MOO_MALLOC_H-from-configure.patch&lt;br/&gt;0194-By-specifying-C-as-the-project-language-via-the-auto.patch&lt;br/&gt;0195-At-some-point-in-the-past-I-modified-the-JHCore-db-b.patch&lt;br/&gt;0196-Removing-the-test-for-bzero.-In-some-older-systems-i.patch&lt;br/&gt;0197-Latest-configure.patch&lt;br/&gt;0198-Dropping-the-test-for-the-compiler-s-support-for-the.patch&lt;br/&gt;0199-Latest-configure-file.patch&lt;br/&gt;0200-Next-version-number-will-be-0.2-instead-of-beta2.patch&lt;br/&gt;0201-Removing-errant-use-of-AC_PREREQ-which-autoconf-2.61.patch&lt;br/&gt;0202-I-dunno-if-I-have-the-wrong-version-of-aclocal-or-wh.patch&lt;br/&gt;0203-Latest-.-configure-file-created-by-autoconf.patch&lt;br/&gt;0204-Somehow-I-missed-the-call-to-MOO_CONST-and-autoconf-.patch&lt;br/&gt;0205-Updated-.-configure-script-with-no-more-MOO_CONST.patch&lt;br/&gt;0206-Make-OUTBOUND_NETWORK-a-configure-option.patch&lt;br/&gt;0207-First-cut-at-crediting-the-authors-for-the-conversio.patch&lt;br/&gt;0208-Updated-the-authors-list.patch&lt;br/&gt;0209-Updated-authors-list-again.patch&lt;br/&gt;0210-Adding-the-other-two-canonical-programmer-user-refer.patch&lt;br/&gt;0211-Xythian-s-.gitignore-from-lambdamoo-on-github.patch&lt;br/&gt;0212-Example-make-distcheck-per-the-Autotools-book.patch&lt;br/&gt;0213-Removed-CVS-log-entries.patch&lt;br/&gt;0214-New-version-of-autoconf-thus-new-version-of-.-config.patch&lt;br/&gt;0215-Temporary-log-file-I-m-working-off-of-while-patching.patch&lt;br/&gt;0216-I-m-marking-blocks-with-leading-semicolons-to-note-w.patch&lt;br/&gt;0217-Fix-void-pointer-problems-when-BYTECODE_REDUCE_REF-i.patch&lt;br/&gt;0218-Commented-out-SHAs-I-ve-applied-as-patches-to-Stunt-.patch&lt;br/&gt;0219-Marked-another-commit-as-patched-to-Stunt.patch&lt;br/&gt;0220-Porting-a-change-over-from-Stunt-ref_count.-hc-are-n.patch&lt;br/&gt;0221-Removed-references-to-ref_count.h.patch&lt;br/&gt;0222-Added-some-needed-macros-like-delref-copied-from-Stu.patch&lt;br/&gt;0223-Removed-all-references-to-ref_count.h-and-ref_count..patch&lt;br/&gt;&lt;/pre&gt; Many of these are not germane to porting Stunt to C++. Some have funny names, and it's a lesson on why one should start every commit with what looks like a &lt;tt&gt;Subject:&lt;/tt&gt; line, something I hadn't adopted while working in Subversion.&lt;div&gt;
  &lt;img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/3253888304126050756-5916555706174137232?l=waverous.blogspot.com" alt=""/&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <pubDate>Fri, 22 Jun 2012 03:15:41 GMT</pubDate>
      <title>Porting code_gen.c and db_fileio.c</title>
      <link>http://www.advogato.org/person/wainstead/diary.html?start=94</link>
      <guid>http://waverous.blogspot.com/feeds/8981445515632425827/comments/default</guid>
      <description>&lt;p&gt;(This entry was written offline during a flight from Las Vegas to Milwaukee today, June 21st 2012. I'm continuing the task of merging &lt;a href="https://code.google.com/p/waverous/" &gt;Waverous&lt;/a&gt; into &lt;a href="http://stunt.io/" &gt;Stunt&lt;/a&gt;, or put another way, getting Stunt to be C++ compliant). &lt;/p&gt;&lt;p&gt;Here's something you hope to never see: &lt;/p&gt;&lt;pre&gt;&lt;br/&gt;-*- mode: compilation; default-directory: "/Users/swain/Sites/projects/moowork/waverous/server/" -*-&lt;br/&gt;Compilation started at Thu Jun 21 07:10:01&lt;br/&gt;&lt;br/&gt;make&lt;br/&gt;[ config.h : config.status ]&lt;br/&gt;./config.status&lt;br/&gt;config.status: creating Makefile&lt;br/&gt;config.status: creating config.h&lt;br/&gt;config.status: config.h is unchanged&lt;br/&gt;g++ -m32 -O -DHAVE_CONFIG_H  -c -o code_gen.o code_gen.c&lt;br/&gt;code_gen.c: In function 'Bytecodes stmt_to_code(Stmt*, GState*)':&lt;br/&gt;code_gen.c:1220: error: invalid conversion from 'int (*)(int*, int*)' to 'int (*)(const void*, const void*)'&lt;br/&gt;code_gen.c:1220: error:   initializing argument 4 of 'void qsort(void*, size_t, size_t, int (*)(const void*, const void*))'&lt;br/&gt;make: *** [code_gen.o] Error 1&lt;br/&gt;&lt;br/&gt;Compilation exited abnormally with code 2 at Thu Jun 21 07:10:01&lt;br/&gt;&lt;/pre&gt; The issue here is the standard &lt;tt&gt;qsort()&lt;/tt&gt; function wants a pointer to a function whose signature has two &lt;tt&gt;const void&lt;/tt&gt; pointers, but LambdaMOO's implementation has two &lt;tt&gt;int&lt;/tt&gt; pointers: &lt;pre&gt;&lt;br/&gt;     void&lt;br/&gt;     qsort(void *base, size_t nel, size_t width,&lt;br/&gt;         int (*compar)(const void *, const void *));&lt;br/&gt;&lt;/pre&gt; I never caught this when I ported Waverous to C++ because I never defined BYTECODE_REDUCE_REF. This suggests to me a way of testing the server by compiling it with every possible combination of flags... this would be one hell of a build-and-smoke test. For every combination of compile-time options: compile the server, start it up, log in and do some basic tasks, shut down. I would have caught this long ago if I'd thought of writing such a test. &lt;p&gt;After some dedicated surfing via my phone at Milwaukee's airport, which does not have free wi-fi (pththth) I found the solution on &lt;a href="http://www.cplusplus.com/reference/clibrary/cstdlib/qsort/" &gt;www.cplusplus.com&lt;/a&gt;:  &lt;/p&gt;&lt;pre&gt;&lt;br/&gt;#ifdef BYTECODE_REDUCE_REF&lt;br/&gt;// See http://www.cplusplus.com/reference/clibrary/cstdlib/qsort/ for&lt;br/&gt;// this usage of standard C's qsort() function&lt;br/&gt;static int&lt;br/&gt;bbd_cmp(const void *a, const void *b)&lt;br/&gt;{&lt;br/&gt;  return ( *(int *)a - *(int *)b );&lt;br/&gt;}&lt;br/&gt;#endif    /* BYTECODE_REDUCE_REF */&lt;br/&gt;&lt;/pre&gt; It's curious and non-obvious to me that the args within the function are cast and that this satisfies the compiler. On a side note I think being able to google our compiler errors and find solutions is an exception to &lt;a href="http://en.wikipedia.org/wiki/No_Silver_Bullet" &gt;Fred Brooks's "No Silver Bullet" argument&lt;/a&gt;. It feels like an order of magnitude increase in productivity to get help so easily. &lt;p&gt;I'm now past one of the stickier parts of porting: past the TRY/EXECEPT/ENDTRY preprocessor macros in &lt;tt&gt;code_gen.c&lt;/tt&gt;. I had to edit the file by hand and incorporate the needed expansion of the macros because the block of code in question had added blank lines spacing out the code. I would think &lt;tt&gt;&lt;a href="http://savannah.gnu.org/projects/patch/" &gt;patch&lt;/a&gt;&lt;/tt&gt; would have a command line flag to account for this situation, but &lt;tt&gt;patch&lt;/tt&gt; can only handle changes in leading and trailing whitespace.&lt;/p&gt;&lt;div&gt;
  &lt;img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/3253888304126050756-8981445515632425827?l=waverous.blogspot.com" alt=""/&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <pubDate>Wed, 20 Jun 2012 07:09:40 GMT</pubDate>
      <title>Waverous-to-Stunt patching procedes</title>
      <link>http://www.advogato.org/person/wainstead/diary.html?start=93</link>
      <guid>http://waverous.blogspot.com/feeds/7603891324316635688/comments/default</guid>
      <description>&lt;p&gt;I'm making progress patching my fork of &lt;a href="http://stunt.io/" &gt;Stunt LambdaMOO&lt;/a&gt; by generating patches from the &lt;tt&gt;git log&lt;/tt&gt; of &lt;a href="http://waverous.googlecode.com/" &gt;Waverous LambdaMOO&lt;/a&gt;. There have been the occasional rejections by &lt;tt&gt;patch&lt;/tt&gt; that have puzzled me a bit; I wonder if it's a white space problem? I doubt it. I didn't look terribly close because doing the edits by hand only took a minute.  I'm now up against the dreaded TRY/EXCEPT/ENDTRY set of C preprocessor macros. By my commit log in Waverous:  &lt;/p&gt;&lt;pre&gt;&lt;br/&gt;commit c7b9cf521033fa816fbe650c8d00c720e453cfdf&lt;br/&gt;Author: Steve Wainstead &lt;wainstead&gt;&lt;br/&gt;Date:   Sun Jun 7 19:28:43 2009 +0000&lt;br/&gt;&lt;br/&gt;    Replaced the TRY, CATCH and ENDTRY macros with their respective&lt;br/&gt;    code bodies to solve a void pointer problem.&lt;br/&gt;&lt;br/&gt; server/db_file.c |  150 ++++++++++++++++++++++++++++++++++++------------------&lt;br/&gt; 1 file changed, 101 insertions(+), 49 deletions(-)&lt;br/&gt;&lt;/wainstead&gt;&lt;/pre&gt; Geez, that was three years ago? I was hacking away in my little second-bedroom-turned-office in Jackson Heights, Queens; and these days I'm in a high rise in downtown Las Vegas. &lt;p&gt;Anyway this patch was completely rejected. It's late and my brain is too short on glucose to get the job done. Time to &lt;a href="https://github.com/wainstead/stunt/commits/waverous" &gt;push to master&lt;/a&gt; and try to catch up on &lt;a href="https://groups.google.com/forum/?fromgroups#!forum/MOO-talk" &gt;MOO-talk&lt;/a&gt; again. I can't keep up with it lately!&lt;/p&gt;&lt;div&gt;
  &lt;img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/3253888304126050756-7603891324316635688?l=waverous.blogspot.com" alt=""/&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <pubDate>Fri, 15 Jun 2012 07:10:35 GMT</pubDate>
      <title>Hacking Waverous changes into Stunt</title>
      <link>http://www.advogato.org/person/wainstead/diary.html?start=92</link>
      <guid>http://waverous.blogspot.com/feeds/6083351334441462017/comments/default</guid>
      <description>&lt;p&gt;A few months ago &lt;a href="https://github.com/toddsundsted" &gt;Todd Sundsted&lt;/a&gt;, the owner/developer of the &lt;a href="http://stunt.io/" &gt;Stunt LambdaMOO&lt;/a&gt; server code, emailed me inquiring about the effort it took to get LambdaMOO to compile as C++. I ventured it would be interesting to try to apply my changes in &lt;a href="http://code.google.com/p/waverous/" &gt;Waverous LambdaMOO&lt;/a&gt; to a branch of Stunt LambdaMOO.  A month or so ago I did &lt;a href="https://github.com/wainstead/stunt" &gt;fork Stunt on Github&lt;/a&gt; and made a local clone. I then looked at the git log of Waverous and chose my &lt;a href="http://code.google.com/p/waverous/source/detail?r=755558bdd368cb23a8c9a9fa52df4f4febcdf54b" &gt;first commit that converted some of the files from C to C++&lt;/a&gt;. Applying that as a patch to Stunt was about, I'd say, 65% successful: some of the hunks applied, some failed and gave me .rej files.  &lt;/p&gt;&lt;pre&gt;&lt;br/&gt;patching file ast.c&lt;br/&gt;Hunk #9 succeeded at 209 (offset 11 lines).&lt;br/&gt;Hunk #10 succeeded at 220 (offset 11 lines).&lt;br/&gt;Hunk #11 succeeded at 344 (offset 29 lines).&lt;br/&gt;Hunk #12 succeeded at 413 (offset 29 lines).&lt;br/&gt;patching file ast.h&lt;br/&gt;Hunk #1 succeeded at 83 (offset 7 lines).&lt;br/&gt;Hunk #2 succeeded at 112 with fuzz 2 (offset 9 lines).&lt;br/&gt;Hunk #3 succeeded at 190 (offset 11 lines).&lt;br/&gt;patching file db.h&lt;br/&gt;Hunk #1 succeeded at 298 (offset 62 lines).&lt;br/&gt;patching file exceptions.h&lt;br/&gt;Hunk #6 FAILED at 159.&lt;br/&gt;Hunk #7 succeeded at 182 (offset 3 lines).&lt;br/&gt;1 out of 7 hunks FAILED -- saving rejects to file exceptions.h.rej&lt;br/&gt;patching file execute.h&lt;br/&gt;Hunk #1 FAILED at 46.&lt;br/&gt;Hunk #2 FAILED at 94.&lt;br/&gt;2 out of 2 hunks FAILED -- saving rejects to file execute.h.rej&lt;br/&gt;&lt;/pre&gt; I didn't have oodles of time so I let it slide for a few weeks... my time was being taken up by a &lt;a href="http://www.udacity.com/courses" &gt;Udacity course&lt;/a&gt;, running &lt;a href="http://www.meetup.com/Las-Vegas-Developers/" &gt;LVDev&lt;/a&gt;, campaigning for a &lt;a href="http://www.heidiswank.com/" &gt;political candidate&lt;/a&gt;, working on a &lt;a href="http://www.greenerblocks.com/" &gt;GreenerBlocks.org project&lt;/a&gt; and more!  But the itch is there and wants scratching. Tonight I packed my laptop and went over to the &lt;a href="http://wiki.workatjelly.com/w/page/38951064/Las%20Vegas%20Jelly" &gt;Vegas Jelly in /usr/lib above The Beat Coffeehouse&lt;/a&gt;. It meets every Thursday night. The &lt;a href="http://www.hackerish.org/events/65803622/" &gt;Linux, Bitcoin and All Things Open Source&lt;/a&gt; group was meeting in the conference room (Hi, Julian!) and I took a seat in the back of the room. I worked while a debate raged about the prospects of &lt;a href="http://en.wikipedia.org/wiki/Bitcoin" &gt;Bitcoin&lt;/a&gt; but I barely took notice.  What I first found was &lt;tt&gt;gcc&lt;/tt&gt;, &lt;tt&gt;make&lt;/tt&gt; and friends were not present on my system anymore. I upgraded my laptop to OS X Lion recently when I &lt;a href="http://www.meetup.com/adobeweb/events/59254272/" &gt;participated in an iOS Boot Camp&lt;/a&gt;. But I installed XCode; wtf? Googling told me I needed to install the command line tools via Preferences -&amp;gt; Downloads. Completely obvious in retrospect, heh.  I renamed &lt;tt&gt;configure.in&lt;/tt&gt; to &lt;tt&gt;configure.ac&lt;/tt&gt;, copied my Waverous version of the file over it and ran &lt;tt&gt;autoconf&lt;/tt&gt;. All good. I ran &lt;tt&gt;./configure&lt;/tt&gt;:  &lt;pre&gt;&lt;br/&gt;bash-3.2$ ./configure&lt;br/&gt;checking for bison... bison -y&lt;br/&gt;checking for g++... g++&lt;br/&gt;checking whether the C++ compiler works... yes&lt;br/&gt;checking for C++ compiler default output file name... a.out&lt;br/&gt;checking for suffix of executables... &lt;br/&gt;checking whether we are cross compiling... no&lt;br/&gt;checking for suffix of object files... o&lt;br/&gt;checking whether we are using the GNU C++ compiler... yes&lt;br/&gt;checking whether g++ accepts -g... yes&lt;br/&gt;configure: error: cannot find install-sh, install.sh, or shtool in "." "./.." "./../.."&lt;br/&gt;&lt;/pre&gt; Another wtf moment. I googled around but didn't really find anything specific enough for my situation; maybe upgrading the autotools?  I did &lt;tt&gt;
  &lt;a href="http://guide.macports.org/#using.port" &gt;port update&lt;/a&gt;
&lt;/tt&gt; on autoconf and automake; but still the same error. Finally I just copied &lt;tt&gt;install-sh&lt;/tt&gt; from the automake directory; this is scratch hacking after all, and with version control you never have to say you're sorry. (EDIT: Duh, I forgot to run &lt;tt&gt;automake --install-missing&lt;/tt&gt;, was all).  &lt;pre&gt;&lt;br/&gt;bash-3.2$ ./configure&lt;br/&gt;checking for bison... bison -y&lt;br/&gt;checking for g++... g++&lt;br/&gt;checking whether the C++ compiler works... yes&lt;br/&gt;checking for C++ compiler default output file name... a.out&lt;br/&gt;checking for suffix of executables... &lt;br/&gt;checking whether we are cross compiling... no&lt;br/&gt;checking for suffix of object files... o&lt;br/&gt;checking whether we are using the GNU C++ compiler... yes&lt;br/&gt;checking whether g++ accepts -g... yes&lt;br/&gt;checking for a BSD-compatible install... /usr/bin/install -c&lt;br/&gt;checking for gcc... gcc&lt;br/&gt;checking whether we are using the GNU C compiler... yes&lt;br/&gt;checking whether gcc accepts -g... yes&lt;br/&gt;checking for gcc option to accept ISO C89... none needed&lt;br/&gt;checking how to run the C++ preprocessor... g++ -E&lt;br/&gt;checking for grep that handles long lines and -e... /usr/bin/grep&lt;br/&gt;checking for egrep... /usr/bin/grep -E&lt;br/&gt;checking whether gcc needs -traditional... no&lt;br/&gt;checking how to run the C preprocessor... gcc -g -E&lt;br/&gt;checking for ANSI C header files... yes&lt;br/&gt;checking for sys/types.h... yes&lt;br/&gt;checking for sys/stat.h... yes&lt;br/&gt;checking for stdlib.h... yes&lt;br/&gt;checking for string.h... yes&lt;br/&gt;checking for memory.h... yes&lt;br/&gt;checking for strings.h... yes&lt;br/&gt;checking for inttypes.h... yes&lt;br/&gt;checking for stdint.h... yes&lt;br/&gt;checking for unistd.h... yes&lt;br/&gt;checking minix/config.h usability... no&lt;br/&gt;checking minix/config.h presence... no&lt;br/&gt;checking for minix/config.h... no&lt;br/&gt;checking whether it is safe to define __EXTENSIONS__... yes&lt;br/&gt;checking for library containing strerror... none required&lt;br/&gt;checking for strftime... yes&lt;br/&gt;checking for gcc -g option to accept ISO C99... unsupported&lt;br/&gt;checking for gcc -g option to accept ISO C89... (cached) none needed&lt;br/&gt;checking for gcc -g option to accept ISO Standard C... (cached) none needed&lt;br/&gt;checking sys/bsdtypes.h usability... no&lt;br/&gt;checking sys/bsdtypes.h presence... no&lt;br/&gt;checking for sys/bsdtypes.h... no&lt;br/&gt;checking sys/select.h usability... yes&lt;br/&gt;checking sys/select.h presence... yes&lt;br/&gt;checking for sys/select.h... yes&lt;br/&gt;checking for memory.h... (cached) yes&lt;br/&gt;checking for pid_t... yes&lt;br/&gt;checking for mode_t... yes&lt;br/&gt;checking for size_t... yes&lt;br/&gt;checking whether struct tm is in sys/time.h or time.h... time.h&lt;br/&gt;checking for struct tm.tm_zone... yes&lt;br/&gt;./configure: line 4810: syntax error near unexpected token `sqrt,'&lt;br/&gt;./configure: line 4810: `MOO_HAVE_FUNC_LIBS(sqrt, -lm /lib/libm.a "-static -lm")'&lt;br/&gt;&lt;/pre&gt; OK, more wtf material... I called it an evening, had a nice discussion with a couple of the Linux guys about LambdaMOO and the problems of getting the masses to use new software, and headed home. &lt;p&gt;Back in my home office I googled the error a bit, editing out the particulars of the error message to make the search query more generic; somewhere I found one forum post where the reply was "Your aclocal got borked." Ah! Did I not move some of the MOO m4 macros to another file to reduce the size/complexity of &lt;tt&gt;configure.ac&lt;/tt&gt;? &lt;/p&gt;&lt;p&gt;Indeed I did, and I left a &lt;a href="http://code.google.com/p/waverous/source/browse/server/acinclude.m4" &gt;helpful log entry in git&lt;/a&gt; to that effect. &lt;/p&gt;&lt;p&gt;So I copied &lt;tt&gt;acinclude.m4&lt;/tt&gt; over from the Waverous project, ran &lt;tt&gt;aclocal&lt;/tt&gt;, ran &lt;tt&gt;autoconf&lt;/tt&gt; and finally &lt;tt&gt;./configure&lt;/tt&gt; and everything went well. I now have a &lt;tt&gt;Makefile&lt;/tt&gt; that will correctly call &lt;tt&gt;g++&lt;/tt&gt; for the project. Time to commit my work, push it to github and sleep on it a bit. &lt;/p&gt;&lt;p&gt;What comes next, should I undertake it, is a lot of bare knuckle hacking to resolve conflicts between Waverous's code base and Stunt's. Todd has made a lot of edits to the C sources, I'm sure, and I started from the &lt;a href="http://sourceforge.net/projects/lambdamoo/" &gt;most recent version of LambdaMOO on Sourceforge&lt;/a&gt;. It means I'll have to come to understand a lot of the changes Todd made, and that will be challenging.&lt;/p&gt;&lt;div&gt;
  &lt;img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/3253888304126050756-6083351334441462017?l=waverous.blogspot.com" alt=""/&gt;&lt;/div&gt;</description>
    </item>
  </channel>
</rss>
