Thu Jan 30 10:54:01 PST 1997 Just realized my scoring function is clueless about life and death, so many of the new games will be scored incorrectly. It's still adding all these 9x9's. I'm going to go ahead and try them, see how it goes, despite the incorrect scoring. TW and TB would be a help. Thu Jan 30 09:57:09 PST 1997 Dug up still more games, still focusing on 9x9's. Using 230 9x9's now. Hopefully some are well played. :) Wed Jan 29 21:32:46 PST 1997 Dug up more 9x9's from the NNGS archive. 13's and 19's too, but I haven't really been using those. Wed Jan 29 21:22:11 PST 1997 Changed "make it a pass if <0" to "make it a pass if <=1e-10". This fixes a bug where goo tries to play overtop of a placed stone. Wed Jan 29 16:41:12 PST 1997 Tweaked a sanity check to stop checking for the wrong thing. :) Wed Jan 29 13:59:58 PST 1997 Added "make dep" rule. Wed Jan 29 12:14:12 PST 1997 Initial conversion to c++ (g++). I haven't changed to using classes yet, but prototypes are updated and basic compilation errors are removed. Found a type-related nasty bug with base_score, during the conversion. It plays better now. :) Tue Jan 28 06:57:15 PST 1997 Let P be the original slice and Pa be the slice after the selected move is made. Changed subpick to pick the best score(Pa)-score(P), instead of the best score(Pa). This is very "try it and see if it helps". Side effect: Pa won't be picked unless P exists in the database. Sat Jan 25 10:01:02 PST 1997 Fixed a subtle bug in save(); the winner variable was getting changed too much. Made subscores my_wins/your_wins*side*side*side, so that a reasonably good 9x9 can outweigh a good-looking 8x8. Fri Jan 24 18:29:29 PST 1997 Found a serious omission in move.c that had only part of the board under consideration. The right and bottom edges were probably invisible. Fri Jan 24 18:18:58 PST 1997 Began looking into how to restrict moves to being inside the perimeter of a box. Not just in box, but leaving a ring of unused positions around its edge. Fri Jan 24 16:38:40 PST 1997 Added line_graphics.c, to try debugging with checkergcc. checkergcc doesn't look ready for prime time. Fri Jan 24 09:41:33 PST 1997 Modified random mode to avoid picking illegal moves (instead of letter a top layer throw them out), and to pass when needed. Fixed a bug in is_illegal_move, using an uninitialized input. Fri Jan 24 08:51:48 PST 1997 Made two consecutive passes indicate end of game. Moved pass handling to get passes recorded in sgf output. Fri Jan 24 08:12:13 PST 1997 Fixed that goo-add bug. Can now goo-add sgf files created by goo. Fri Jan 24 08:10:24 PST 1997 Fixed that goo-add bug. Found bug in goo-add's ko check Fri Jan 24 07:52:41 PST 1997 Added simple sgf output to goo.c, on -o filename. Found a bug in goo-add; off-board reference if no TW or TB in sgf. Fri Jan 24 07:28:23 PST 1997 It plays, tho not amazingly well. It plays better against me, than it does against random moves, but it lost in both cases. Thu Jan 23 22:24:40 PST 1997 Switched to a different leak-detector. It showed that boards were being leaked. Set a breakpoint in new_board and did tracebacks, until the leak was pinpointed in read_slice(). Thu Jan 23 21:04:11 PST 1997 Brought in some leak-detection software. Thu Jan 23 18:53:39 PST 1997 It's still growing, but not as fast. Thu Jan 23 18:51:43 PST 1997 Found another memory leak, and eliminated it. This one was associated with an "unstructured" (maybe in truth!) return statement. Thu Jan 23 18:45:20 PST 1997 The VM size is still growing fast. Still can't finish a 9x9. Thu Jan 23 18:43:04 PST 1997 Found a leak and corrected it. goo seems to play vaguely like ManyFaces. That's not surprising, since I fed it mostly games I played (and lost) against ManyFaces. :) It's not playing real well. I've fed it four 9x9's. It does know to grab a side tho. Thu Jan 23 18:40:31 PST 1997 It also has a fast memory leak. Each goo turn the process SIZE goes up quite a bit. My 32M machine runs out of memory before finishing a 9x9. Thu Jan 23 18:30:02 PST 1997 It plays. Not phenomenally, but then I was playing it after having only fed it two games of relevant size. I'm afraid it's a bit slow on a 9x9; I hate to imagine what it'll be like on a 19x19. A little surprisingly, playing takes longer than storing. Thu Jan 23 18:12:49 PST 1997 Added in the last initial pieces of subpick(). Thu Jan 23 15:46:45 PST 1997 Added read_slice() to database.c. Expanded subpick to use it. Made init_database() private, added init_database_read() and init_database_read_write() - to avoid including fcntl elsewhere. Changed accordingly, and added call to init_database_read and close_database in goo.c. Thu Jan 23 14:29:58 PST 1997 Added is_within_slice(), and loops around it in subpick(). Thu Jan 23 13:40:56 PST 1997 Added code to pick_move, to pick all legal moves. Based on is_illegal_move(). Thu Jan 23 13:03:41 PST 1997 Changed around goo.c to use an is_illegal_move function afterall. This cleans up main(), and the function should be useful in pick_move(). Accidentally played against "goo" instead of "random" when testing, and found that the computer happens to pass every turn. :) Thu Jan 23 09:57:39 PST 1997 Moved some move-related functions out of top.c (which is still large) into move.c. Added board modification in response to a sample move in move.c. Thu Jan 23 09:40:35 PST 1997 Eliminated compilation errors in pick_move and subpick. Expanded a couple of "do this here" comments into code. Wed Jan 22 09:11:34 PST 1997 Erased old sketchy move.c. Pseudo-coded initial pick_move and subpick. Began moving pseudocode toward real code. Tue Jan 21 18:49:18 PST 1997 Modified to place the cursor where the last stone was left, when starting a human's move. This is probably a good way of showing where the last move was made. A pass moves the cursor to the center of the screen. Tue Jan 21 18:28:35 PST 1997 Added ko check in goo.c. That's the AGA ko rule, BTW. Tue Jan 21 16:12:21 PST 1997 Changed goo-add to be non-interactive. It still displays stuff. Changed goodata to goo-data. Added a "-br" option for random, poor moves; it was a small landmark, and could be helpful with skill levels. Eliminated a very silly array overrun in goo.c. Tue Jan 21 15:30:49 PST 1997 added an "add" rule to src/Makefile, to automatically add a small set of files into goodata-*-*. Just removed e-mail headers for the time being - sgf.c doesn't like them. Tue Jan 21 15:01:57 PST 1997 Added code to keep track of black and white wins separately. Also code to halve both counts, if either number exceeds a threshold. Using native byte order :-S Tue Jan 21 12:34:21 PST 1997 Bailed on avl routines, moved to berkeley db's btrees. Wrote code to tuck very simple stuff in for each useful subboard of a played game. Ok, so db's bigger than goo. :) Tue Jan 21 07:30:49 PST 1997 Dug up some avl routines, reorganized into two directories with a top-level Makefile. Mon Jan 20 13:01:00 PST 1997 Added canon.c. Added code to database.c to use new canon() function. Mon Jan 20 12:15:02 PST 1997 Added slice.c. Just takes a slice of a board. Modified board.c to have functions with upper left at 0,0, and also at -1,-1 (as previous). Functions with upper left at -1,-1 disallow access to EDGE pieces. Functions with upper left at 0,0 allow access to EDGE pieces. Expanded database.c slightly. Mon Jan 20 11:45:01 PST 1997 Added truly dinky start on database.[ch]. Made goo-add.c iterate over all saved boards, calling database.c's do-nothing save() function on each. Mon Jan 20 11:36:20 PST 1997 Added record_num_boards(). Mon Jan 20 11:32:43 PST 1997 Added ko check in goo-add (but not goo), and added error(msg) in graphics.c. Sun Jan 19 18:35:12 PST 1997 Added sgf_rewind, cmp_board and record.c for keeping a game history. Quite untested, but they compile strictly. Fri Jan 17 17:09:26 PST 1997 Changed board datastructure to include a surrounding set of "EDGE" pieces. Added EDGE to stone.h of course. This went better than I'd hoped. ADT's are great. Fri Jan 17 16:46:49 PST 1997 My computer was broken. :) fixed black/white bug in goo-add.c. Added backup script. Wed Jan 8 09:27:18 PST 1997 Renamed "territory" to goo-add. Added making of moves from sgf file, with unit elimination as needed. Put back the old "count" function that had seemed useless shortly after I wrote it; it happened to be exactly what's needed to finish the scoring of an SGF file. Added a simple tally of who won. This flew together. Now on to creating database entries from that, and possibly adding a "-q" option to eliminate all the flashy graphics and required keystrokes, for batch updates. Sat Jan 4 08:35:04 PST 1997 Initial shot at fixing sgf_read_position. It seems to work fine. The SGF stuff doesn't do handicaps tho - never did. It probably should. It's time for a simplified scoring function based on TW and TB, and then on to the database. Sat Jan 4 08:25:18 PST 1997 It turns out that IGS adds TW and TB items to SGF files, to indicate territory at the end of the game. This makes scoring an SGF game very easy. I may not need a scoring function after all. The new territory.c shows these board regions graphically. modified sgf_read_next to return variable,value pairs. Broke the old sgf_read_next, with intention to make it sgf_read_position, which sits overtop the new sgf_read_next. So goo's busted for sgf, right now. Various other smaller modifications. Sat Jan 4 07:01:25 PST 1997 Added means for passing, from the keyboard. The rest was already there. Still no check for two passes in a row. Fri Jan 3 08:35:35 PST 1997 Sprawled legal_move() across main(), in order to add better checking. :-S It does removals, prior to the suicide check now. :) Still no ko check. Thu Jan 2 11:35:10 PST 1997 Added up_stone function, toward capitalizing last move... Thu Jan 2 11:08:52 PST 1997 Added free_pc function, to remove malloc'd memory. Thu Jan 2 11:01:43 PST 1997 Fixed a bug in add_position_to_pc: core dump after more than 10 positions go into a pc Thu Jan 2 10:39:00 PST 1997 made legal_move non-trivial - it doesn't say absolutely everything's legal now. It still skips ko. It recognizes suicide, based on count_liberties. It overdoes suicide recognition - it doesn't see that causing a removal eliminates the suicide condition. Sadly, it'll probably have to be strewn across main(). Thu Jan 2 10:07:54 PST 1997 Finally wrapped up bugs in need_removal and count_liberties. Fixed up screen repaint after removal. Shifted to using an array of 4 vectors, instead of generating coordinates with for's, and throwing out uninteresting pairs with an if Wed Jan 1 13:34:44 PST 1997 Added initial "need_removal" function. Added "on_board" function to see if a position is on the board or out of bounds Changed board_stone and update_board to do sanity check based on on_board Tue Dec 31 19:24:25 PST 1996 Added a "close" scoring function. Enough for some initial results, anyway. Tue Dec 31 17:53:04 PST 1996 Got bored with the project for a while. Came back. Reorganized some files a bit, started some top-down design, completing the onion. :) Mon Dec 23 15:58:24 PST 1996 Implemented a "position collection" ADT. Junked the "position list (pl)" notion. Mon Dec 23 14:51:19 PST 1996 Probable next functions to implement: zero_liberty_units() clear_pl() Fri Dec 20 09:31:22 PST 1996 Added getopt parsing for SGF, black spec and white spec Eliminated bug where "q" from user interface caused core dump; sentinel value was being used as real data Fri Dec 20 08:33:19 PST 1996 Lots of go playing. Blowing off the gnugo interface, at least for now. Evaluated go-file formats. Evaluated conversion tools and consistency checkers. Tracked down some SGF archives. Added simple SGF parsing, tested with a couple of SGF files from the archives. Tue Dec 17 16:33:44 PST 1996 Tracked down a bug with the random number generator that was causing segfaults: sometimes the numbers were negative. Most of the time went to downloading ddd over a 14.4Kbps modem. Mucked around with nicer constants for the generator. Added a function to determine if there are no positions left. Added a function to count number of black & white pieces, added code to announce winner (or tie, if nonstandard board size is used) Started on an interface to gnugo, largely borrowed/stolen from xgoban Tue Dec 17 11:22:36 PST 1996 Technically I started yesterday, tho it was pretty "hello world'ish" when I left off. The user interface appears usable now. Joy. It Does have a blinking cursor (not that usual one) It Doesn't highlight the last move made, in any way.