Gama's work log 2008

From OpenCog


  • Spent a some time in the mailing-list discussion.
  • Eventually found the cause and came up with a fix to the AtomTable::extract bug. It's far from ideal, however, as the bug is triggered by a broken premisse of the Atom class: that incoming sets are *sets* (and not *lists*, as currently). The *right* fix is not trivial, though, so I added a note about it to my "nice to have" todo list.
  • Fixed a bug in the AtomTable::merge method.
  • Added unit tests to catch the aforementioned bugs.
  • Pushed the changes that the Petaverse guys have validated to the 'staging' branch.
  • Finished the clean up/split of the atom types hierarchy; published the latest release of the 'classserver' branch for the petaverse guys to test
  • Fixed the initialization of the query and wsd modules
  • Added a 'merge atom' signal (another requirement from the petaverse port) and corresponding unit tests
  • Started evaluating an experimental implementation of the atomtable using boost::multi_index. Should be very interesting as an "opencog-ng"-like project (or even as a benchmark base line to compare against the current implementation)
  • After lots of doc reading and some experimentation, figured that in order to implement the atom table with boost::multi_index we'd need to use boost::intrusive too, and right now they don't play along well. Bummer. Maybe with boost 1.37 or 1.38...
  • Downloaded and started studying ladsutils and comboreduct.
  • Rebased the classserver branch with the latest staging as best as I could (some things are broken as of Oct-31)
  • Applied a handful of patches sent by Welter on top of the staging & classserver branches and requested another review + tests from the petaverse guys.


  • Rebased the 'classserver' branch on top of the latest 'signals' branch.
  • Fixed a handful of bugs in the classserver branch which were uncovered when I migrated the hebbian atom types to the dynamics/attention directory.
  • Merged the 'rest' branch on top of the 'signals' branch. Had to change the original simplified MVC structure of the cogserver quite a bit.
  • Fixed and extended some of the current built-in requests.
  • Fixed an anoying bug in the OpenCogConfig.cmake script (reported by Welter).
  • Merged/rebased the remaining fixes submitted by the petaverse guys.
  • Pushed the updated 'signals', 'classserver' and 'rest' 'branches'.
  • Started investigating a bug in the AtomTable::extract method that seems to be connected to one of the Petaverse-port patches.


  • Finished implementing the cmake script & macros that automatically generate & update the c++ code snippets used by the new ClassServer.
  • Wrote the user docs of the new ClassServer extensibility mechanism.
  • Wrote an example module extending the ClassServer
  • Adapted and merged Welter & Erickson latest changes (Petaverse)
  • Started investigating another suggestion from the Petaverse port: replace the Handle typedef with a real class. This should help us find out several semantic bugs in the code that rely on the assumption that Handle == unsigned long.
  • Merged the initial "Handle class" implementation from Welter
  • Spend some time evaluating the performance impact of such a change; it seems to be negligible (with gcc >= 4.1, at least).
  • Finished the implementation of the Handle class and converted the whole code base to use the new class.
  • Got bit by a nasty cmake/ctest bug that led me to think that our test suite was broken. Ended up wasting a lot of time to find out that it was actually a cmake bug dug very deep inside their cross-platform classes. Will file it upstream once their bugtracking system has been fixed (currently, I can't create an account :-( )
  • Pushed the new Handle class implementation to the lp:~gama/opencog/signals branch and asked the Petaverse guys to review and test it.


  • Finished the implementation and unit tests of the notifications/signals system. Currently, only 'addAtom' and 'removeAtom' have been added
  • pushed the 'signals' branch to my personal tree and published it to the Petaverse people
  • Documented a couple more classes
  • The petaverse people uncovered a bug in the cmake scripts that is triggered if we're using an older ubuntu version. Part of the fix I came up with involves copying the newest FindBoost script from cmake into our tree (not the best solution, I know). The other option would be to enforce cmake >= 2.6, but most current stable distros ship 2.4.X currently. :-(
  • Finished documenting the libserver's main classes.
  • Started investigating and implementing another request from the Petaverse port: an extensibility mechanism for the ClassServer.
  • Helped the petaverse people fix a few bugs related to the opencog port.
  • Started implementing a cmake script to parse the type.script file and generate the new c++ structures needed by the new extensible ClassServer.


  • reinstalled my os11 vm as using rpmbuild requires lots of disk space :-(
  • finished the os11 rpm packages
  • rebased the latest changes from main
  • tried (in vain) to figure out why the new unit tests from joel are breaking
  • regenerated the deb and rpm packages as the changes from main added new dependencies
  • tried the novel's build service; it looks like a nice rpm-friendly version of ubuntu's ppas
  • uploaded & published the rpm packages on novell's build service. Unfortunalely, there's a bug in cmake that prevents the packages from being generated on amd64 archs
  • fixed several bugs pointed out by novell's build service and the rpmlint utility
  • fixed the build so that it succeeds even when gsl is not installed
  • fixed the build so that it succeeds even when no odbc provider is installed
  • fixed the last remaining bugs reported by the novell build service and published the rpms
  • started documenting the main classes of the dynmod branch.
  • fixed a couple of last minute minor bugs found while preparing to push the dynmod/staging branch
  • pushed the staging branch to launchpad's bazaar and the associated packages to my launchpad ppa and novell's build service repository
  • Continued documenting the staging branch classes.
  • At the request of the Petaverse folk, started investigating/implementing a notification system that will be incorporated to the atomtable


  • rebased the latest changes from trunk
  • split the opencog packages into libatomspace and opencog
  • re-rebased the latest changes from trunk
  • further splitted the deb packages into libatomspace, opencog-server and opencog-core
  • started to look into rpm packaging
  • wasted quite some time converting my Fedora VMware image to the VirtualBox format :-(
  • made good progress with the RPM packages
  • re-re-rebased the dynmod branch
  • finished the fc9 RPM packages
  • started working on the os11 rpm packages


  • Finished rebasing of the latest changes on 'main' from Linas (as of sep 12th). I've decided to not rebase his latest commits because as long as he keeps working directly on 'main', rebasing will be a never-ending stream of fruitless work (and I need to push the 'dynmod' branch for review asap).
  • Make sure we build with gcc 4.3
  • Fix the gentoo readme and custom packages
  • Add Erickson changes from the petaverse port
  • Added version checking to the FindGuile.cmake script (btw, cmake sucks!)
  • Collapsed a few minor commits and discovered "bzr replay", which eases a bit of the pain of editing a series of revisions (as there's no "-i|--interactive" option in "bzr rebase" :-( )
  • Spent an obscene amount of time trying to figure out why the guile/scheme module didn't work on the new threaded network server. Turns out it was due to a bug in guile/libguile that's been fixed in version 1.8.5 (hardy has 1.8.3).
  • Properly backported the guile packages. Turns out way more anoying than I'd expect.
  • Fixed my testing deb repository by properly learning about and using apt-ftparchive
  • Setup a local pbuilder to ease fixing ppa-related problems
  • Fixed a handful of bugs due to cmake's version incompatibilities
  • published the opencog packages to my launchpad ppa
  • pushed the dynmod branch
  • pushed the sampleagents tree
  • retested on my local ubuntu VM; everything seems ok now
  • wrote the announcement email (with brief "get started" docs)
  • quick chat with dhart about the new branch and possible alternatives to properly add multi-threads support in opencog


  • Started rebasing the latest changes from 'main' with the 'dynmod' branch.
  • Wrote the documentation of the sample agents and modules.
  • Created a tree/repository with examples of build files (CMakeLists.txt) and template code to build and deploy external agents.
  • Struggled a bit to find a bug in the new NetworkServer initialization code (the thread wouldn't start on a few machines)