Thursday, December 1, 2011

What I'd like to see for LambdaMOO

On the MOO-talk mailing list, the question was posed: What other things are missing from the MOO server? My answer: users. And usability. And hackers.

Saturday, September 3, 2011

Waverous is now using Git

I finally sat down, rolled up my sleeves and converted Waverous to a Git repository on Google Code. There were a few things that needed extra attention:

1) I used John Albin's instructions on converting a Subversion repository to Git. It provided the most complete way of doing it. I had to do some detective work to figure out the names and emails of some previous committers, but in the end I had a repository with all the data I wanted including all branches and tags.

2) Getting all branches to the remote was not obvious, so I just did some rectangle editing in Emacs:

git checkout AUTOCONF_TWO
git checkout CONSTANTS
git checkout FLOATSUSPEND
git checkout HEAD -> origin/master
git checkout INLINEPC
git checkout UNSAFE_OPTS
git checkout WAIF
git checkout WROGUE
git checkout avalon181
git checkout demacrofication
git checkout demacrofication@233
git checkout experimental_automake
git checkout experimental_reorg
git checkout master
git checkout pavel
3) Then I pushed everything to Google Code:
git push googlecode --all
4) I found the tags didn't make it up either. This was another step:
git push --tags
The one thing I don't like, so far, is I have to maintain a .netrc file with my Google Code password, and when I git clone the repository I have to edit out my username@ from the URL. But after that everything seems to work fine, though git push just returns "Repository up-to-date" without telling me anything happened. So, from the top:
# clone repository created from John Albin's instructions
git clone  ~/new-bare.git waverous

# add the new remote per Google's instructions
git remote add googlecode 

# check out all branches from my local repository
git checkout AUTOCONF_TWO
git checkout CONSTANTS
git checkout FLOATSUSPEND
git checkout HEAD -> origin/master
git checkout INLINEPC
git checkout UNSAFE_OPTS
git checkout WAIF
git checkout WROGUE
git checkout avalon181
git checkout demacrofication
git checkout demacrofication@233
git checkout experimental_automake
git checkout experimental_reorg
git checkout master
git checkout pavel

# push all branches to Google Code
git push googlecode --all 

# push all tags to Google Code
git push --tags

# Clone and push the wiki on Google Code as a new Git repository
git clone
svn export --force .
git add .
git commit -m "Conversion of Waverous's wiki documentation to Git."
git push origin master
Overall this was a dumb brute force approach, but it got everything done.

Wednesday, August 3, 2011

The road to 'automake'

Today I deleted another file from the repository, aclocal.m4. It redefined an Autoconf macro to support OSF/1. That was all it did, and aclocal itself wants to generate a file of the same name so that was that... and the macro in aclocal.m4 was taken from a later version of Autoconf anyway.

Now I've returned to an issue I saw a few months back:
bash-3.2$ autoheader
autoheader: warning: missing template: BZERO_IN_STDLIB_H
autoheader: Use AC_DEFINE([BZERO_IN_STDLIB_H], [], [Description])
autoheader: warning: missing template: FSTAT_WORKS_ON_FIFOS
autoheader: warning: missing template: NEED_BSDTYPES_H
autoheader: warning: missing template: NEED_MALLOC_H
autoheader: warning: missing template: NEED_MEMORY_H
autoheader: warning: missing template: NEED_SELECT_H
autoheader: warning: missing template: POLL_WORKS_ON_FIFOS
autoheader: warning: missing template: POSIX_NONBLOCKING_WORKS
autoheader: warning: missing template: SELECT_WORKS_ON_FIFOS
autoheader: warning: missing template: UNDEF_IO_IN_STROPTS_H
autoheader: warning: missing template: USE_OWN_STRING_H
autoheader: warning: missing template: _HPUX_SOURCE
autoheader: warning: missing template: _NEXT_SOURCE
autoheader: warning: missing template: const

I know there are some deprecated macros lurking in and I haven't done anything about it yet; high time I took care of this. I am going to strip support for NeXT, SGI and a few other relics too.

Saturday, July 30, 2011

Good news, everyone: 'pgperf' dropped

Yesterday I started a branch in SVN to experiment with changing the directory layout of the project.

While reorganizing everything I had to think about how to handle 'pgperf', the customized version of GNU gperf that shipped with the original LambdaMOO server. gperf is a "perfect hash generator" that creates a hashing function and a lookup function for the LambdaMOO programming language. It generates the file 'keywords.c' in the project. LambdaMOO came with a hacked version because in 1997 gperf didn't support case-insensitive lookup tables, and the original author of LambdaMOO added this feature and included it with the project.

The idea for the project reorganization I have is at the top level of the Waverous project you will see the standard directories you see in a lot of open source projects:
bash-3.2$ ls -l
total 376
-rw-r--r--    1 swain  swain  145516 Jul 29 19:57 ChangeLog
-rw-r--r--    1 swain  swain    8605 Jul 29 19:47 LICENSE
-rw-r--r--    1 swain  swain     343 Jul 29 19:44 Makefile
-rw-r--r--    1 swain  swain   10770 Jul 29 19:47 README
-rw-r--r--    1 swain  swain    2907 Jul 29 19:47 README.Minimal
-rw-r--r--    1 swain  swain   10121 Jul 29 19:47 README.rX
drwxr-xr-x    7 swain  swain     238 Jul 29 22:40 databases
drwxr-xr-x    8 swain  swain     272 Jul 29 19:49 doc
drwxr-xr-x   17 swain  swain     578 Jul 30 09:19 examples
drwxr-xr-x    5 swain  swain     170 Jul 29 19:46 extensions
drwxr-xr-x    5 swain  swain     170 Jul 29 20:00 extras
drwxr-xr-x  148 swain  swain    5032 Jul 30 09:38 src
drwxr-xr-x    8 swain  swain     272 Jul 29 19:45 tools
My goal is to write a that handled the subdirectories that formed "standalone" projects: src (the server), doc (the manual and Doxygen docs), and extras/pgperf.

While waiting for my wife's oil change at the dealership (yay free wi-fi!) I tried to compile 'pgperf' as shipped with the project. Compilation failed due a dependency on varargs.h, "gcc" telling me it was obsolete. This brought to mind a task I've thought about a number of times but hadn't written down: drop pgperf for GNU gperf IFF gperf now supported case-insensitive lookup tables.

GNU gperf added support in 2002 with the flag --ignore-case, so after an afternoon of tinkering, regenerating files, recompiling and testing I've gotten everything working just fine with gperf. I've dropped pgperf entirely from SVN.

On a side note, working with Subversion is so painfully slow now -- I've been using Git for the past six months -- that I'm going to switch the project to Git quite soonish now that Google Code supports Git.

Thursday, July 14, 2011

File I/O is here at last: now a compile-time option

Tonight I did all the legwork (fingerwork?) to make File I/O a compilation option. File I/O is a patch to the LambdaMOO server that allows programmers to manipulate files outside the server.

Someone mentioned my Waverous project on the MOO-talk mailing list back in December 2010, and a followup poster made a disparaging remark about FUP (ext-FUP is the other extension to the server for file manipulation, and they have very different ways of doing it).

I was not sure I had the most recent version of File I/O, which I downloaded from the MOO Resources site. Ken Fox created it originally, but now discourages its use. The person who patched and released it later was Andy Bakun, working at these days; he was kind enough to reply to my email that File I/O 1.5p1 was the most recent version to his recollection.

As of now, the version in HEAD of the repository has the configure option --with-fileio and will try to compile File I/O into the server, but it fails quite spectacularly; probably because it won't compile as C++. I have to pick through the errors and fix it up. (addendum, July 2011: it works just fine now. It did need some tweaking so g++ would compile it).

The other task I need to remember -- I should file a ticket -- is if File I/O is compiled in, then there has to be a target directory created to store the files manipulated by the MOO server. The original install instructions call for this directory (simply called "files") to be made in the server directory. I'll have to figure out how to handle this when I get around to developing a proper "install" target to "make."

Thursday, July 7, 2011

New configure options, MCP included in distro

I've moved a couple of the constants out of options.h into, so they are now flags to ./configure (see ./configure --help).

I've had troubles for weeks trying to commit changes, getting some 405 error back from Google Code; but I thought today my repository copy might be borked so I checked out a new one and was able to do all my commits just fine. Tho I'm at a library, so that might have made a difference (this 405 issue seems to happen when I'm in a hotel).


Tuesday, June 14, 2011

Licenses, licenses, licenses

Tonight I did a long overdue audit of all the files in the project, their licenses, and aggregating all of that in a LICENSE file. A friend of mine had contributed one of the C source files, so with his blessing I added the copyright notice and licensing terms.

There are three files with no licenses at all, and those will have to wait for another day. The good news is there's no GPL code being compiled into the server code that I can find. I think anything that is compiled into the server has to be compatible with Xerox's licensing terms, and I doubt the GPL fits.

I've been doing some tinkering with the autoconf stuff too; I changed the configure options from --enable-wooblam to --with-wooblam, which seems more natural-sounding to me.

And I've filed a few tickets. It's progress.

Wednesday, February 2, 2011

The need for a binary distribution

Today I finally got my Amazon AWS account fixed via Amazon support and ran some EC2 instances... the default Linux 64 bit image has no tools on it -- not surprisingly -- so I have to search for a suitable image.

Meanwhile... the need for binary distributions of Waverous rears its head. I hadn't really thought about it beyond creating an RPM, and perhaps a DMG.