NEWS for ttn-pers-scheme
- 0.50 | 2008-03-16
- License now GPLv3+ (see COPYING)
- Dropped (ttn html-world) procs: render-html-world, html-world
These were announced in release 0.48 (2007-04-07).
- Dropped module: (ttn METAINFO)
This was introduced in release 0.33 (2004-01-30), but
proved to be useless. Sorry, no pre-announcement (see
"Imminent retirement" below).
- Bugfix: (ttn listener) make-listener regression
A bug was introduced in ttn-pers-scheme 0.18 (2001-04-09)
whereby the variable holding the current connection socket was
accessed out of scope. Caught by "guile-tools lint".
- New configure check: (ice-9 optargs-kw) proc `remove-keys'
This proc originated from module (ttn optargs-kw-utils).
- Benchmarks back
It's been several years since benchmarks were run, partly due to
slow hardware (200MHz Pentium Pro, 300MHz Openbrick) and twitchy
release fingers. Now the infrastructure has been spruced up and
the files benchmarks/tea-{0.1,2.0} are again being distributed.
Default iterations bumped 10x for 10 years of progress... :-/
Note: These files will probably not be updated on every release.
- Imminent retirement
As of this release, ttn-pers-scheme is heading towards
retirement. This means useful functionality has been migrated
elsewhere and that after 2008-12-31, the package will no longer
be available. See "Future" in the documentation for details.
- 0.49 | 2007-04-09
- Changes to module (ttn markup)
- New proc: symbol<-kw/sym
- New proc: string<-kw/sym
- New proc: css-tree
Might as well put these common operations here.
- New parameter to `expand': #:xbsc
Aka "XMLish (blech) start close". Really: "blech!"
- New (ttn flatten) proc: flatten-to
- New module: (ttn html-data2)
For XHTML 1.0 generation.
- 0.48 | 2007-04-07
- After DATE, THING will be removed; DO NOT rely on it
- 2007-10-15: proc `(ttn html-world) render-html-world'
- 2008-04-15: proc `(ttn html-world) html-world'
You can use `html-world.html-data' (cleaner, more general).
- Dropped module: (ttn echo)
- Dropped module: (ttn stringutils)
These were announced in release 0.44 (2005-09-04).
- Dropped (ttn abbrev-tree) proc: scrub
- Dropped (ttn abbrev-tree) proc: split-first-word
- Dropped (ttn abbrev-tree) proc: list->sep-string
These were announced (in the manual but not in NEWS -- oops!)
in release 0.43 (2005-08-20).
- Dropped module: (ttn moduleutils)
- Dropped feature: quoting support in `read-text-db-table'
These were announced in release 0.42 (2005-06-05).
- Changes to module (ttn html-world)
- External program no longer needed: mogrify(1)
This is part of the package `ImageMagick' and was used to invert
a ppm image . Now, this is done with another external program,
pnminvert(1), part of the package `Netpbm'. See modules.af for
a full list.
- New #:gen method: #:ppmforge
This uses ppmforge(1) with options `-quiet -stars 0' to create
the ppm image. A large majority of the time, the image does not
correspond to any landmass found on Earth, but sometimes a vague
similarity occurs. The #:ppmforge method is now the default for
`html-world' and `html-world.html-data'.
- New keyword arg for `html-world.html-data': #:link-tree
Normally, the proc `href' from module (ttn html-data) is used to
construct the tree (nested list of strings) that represents a
chunk of text that is to be marked up w/ an HTML
tag. This option lets you use another proc.
- New proc: string<-image-command
- New proc: randomly-hyperlinked
These are the underlying mechanisms in `html-world.html-data',
now generalized and documented. Let the madness begin...
- Optimization: `flatten' does nothing for the null string
- New (ttn html-data) procs: link tt, pre, div, span
- New keyword for `listener': #:catch-tag SYMBOL
- New (ttn dirutils) macro: with-cwd
- New (ttn shell-command-to-string) proc: file-lines
- New (ttn sanity) proc: ppsrc
- New module: (ttn markup)
Procedures in this module support definition of markup languages
and related tree (nested list of strings) construction. Flatten
the trees to get the grotty
" and "
", respectively) style rendering around the arg. - New field type for (ttn read-text-db-table) proc: `read-text-db-table' A field may now be declared as having type `rest-lines-trim', which arranges for the reading procedure to extract the rest of the lines of the record before the delimiter (exactly like field type `rest-lines'), and additionally to apply `string-trim-both' (from SRFI-13) to the result before collecting it. - New module: (ttn rw-vcg) VCG is a program to layout and visualize graphs in 2D. This module allows you to read and write .vcg files (which specify "nodes" and "edges" and their attributes as well as global attributes) produced by or for VCG, from a Scheme program. - 0.40 | 2005-01-04 - Bugfix to (ttn spewutils) proc `eval-html-data-file' ttn-pers-scheme 0.39 introduced a bug whereby this proc evaluated the data file in the wrong environment. - New procs for (ttn html-data) Specifically: q, em, strong, dfn, code, samp, kbd, var, cite, abbr. - 0.39 | 2005-01-03 - New (ttn grep) proc: grep-l - New (ttn expand-file-name) proc: substitute-env-vars - New (ttn expand-file-name) proc: expand-file-name-substituting-env-vars - Experimental read-hash extension Proc `give-me-a-sane-environment-please!' (for interactive sessions) now extends the read-hash table to handle `#^Ffoo' as essentially `(expand-file-name-substituting-env-vars "foo")', a string. Here is some elisp that uses this feature: (local-set-key "\C-cf" (lambda (file) (interactive "fFile: ") (insert "#\C-f" file))) - New (ttn sanity) proc: pp - New (ttn html-data) proc: blockquote - Module (ttn edit) now simply re-exports (ice-9 editing-buffer) The functionality and the exported macro `editing-buffer' of module (ttn edit) has been moved to Guile 1.4.x. At some point (ttn edit) will no longer be maintained, although the interface is still provided for the time being. Along w/ this change, module (ttn gpgutils) uses module (ice-9 editing-buffer) directly now, instead of (ttn edit). - 0.38 | 2004-12-03 - Bugfix to (ttn edit) expansion of `case' The expander for `editing-buffer' used to transform `case' expressions incorrectly: adding an extra set of parens for each element in the choices list. - Module no longer maintained: (ttn display-table) This functionality has migrated to Guile-PG (see link below). - Module no longer maintained: (ttn eformat) - Module no longer maintained: (ttn defvar) These will be dropped in some future release. - New module: (ttn sgf) - Extensions to (ttn html-data) proc `href' This now takes an optional third arg `name'. For example: (flatten (href "x" "y" "z")) =| y Additionally, `url' can be #f, in which case it is omitted. For example: (flatten (href #f "y" "z")) =| y - Extension to `collect-files-sorted-by-mtime' This proc now takes keyword args: #:key PROC, applying PROC to each element in `files' to get the actual filename to stat. - Info entry now under category "Guile modules" It used to be under "Software Libraries". - 0.37 | 2004-08-05 - Module no longer maintained: (ttn pgtype) - Module no longer maintained: (ttn pgtable) - Module no longer maintained: (ttn pgmeta) The functionality provided by these modules has migrated to Guile-PG, with homepage: http://www.glug.org/people/ttn/software/guile-pg/ Thus, although these modules are still provided here for the time being, they are no longer being maintained. This means, among other things, that the configure script no longer recognizes option "--enable-pgtable-check-db=NAME". - Extension to (ttn edit) "e:" proc `insert' If OBJECT is a gap buffer, its contents are inserted. Point moves forward as usual. - Bugfixes to (ttn edit) buffer traversal "e:" procs New tests for this module revealed some discrepencies w/ Emacs for return values and behavior of `forward-line', and behavior of `beginning-of-line' and `end-of-line'. In particular (i.e., as expected ;-), edge and corner cases for buffers w/ and w/o newlines proved most useful for exposing bugs. See edit.test in the tests/ subdirectory for details (more tests welcome). - New (ttn dirutils) proc: mkdir-p - New (ttn fileutils) proc: filename-absolute-or-in-vicinity - New (ttn expand-file-name) proc: reset-tilde-cache! - Changes to (ttn html-world) procs The procs `html-world' and `html-world.html-data' now also accept keywords for the #:gen value. - Start of switch to (ice-9 gap-buffer) In preparation for migration of (ttn gap-buffer) functionality to module (ice-9 gap-buffer), modules that used the former have been changed to use the latter. The complete list is: (ttn call-process-to-buffers) (ttn edit) (ttn find-file) (ttn flatten-to-buffer) (ttn gpgutils) (ttn make-buffered-caller) (ttn parse-rfc822) (ttn save-buffer) (ttn write-buffer-if-changed) (ttn write-buffer) At some point (ttn gap-buffer) will no longer be maintained, although it is still provided here for the time being. - 0.36 | 2004-07-02 - Change to (ttn personal-pgtable) proc: `all-defs' This proc now understands the two-form format of the meta file, where the first form is a list of (KEYWORD EXPANSION) specs, and the second form is the database table-spec alist, as before. For example, before the change -- one form: (("mydb" ("table1" (a text "NOT NULL" "UNIQUE") (b text "NOT NULL" "UNIQUE")) ("t2" (a text "NOT NULL" "REFERENCES table1 (a)" "MATCH FULL" "ON UPDATE CASCADE") (a text "NOT NULL" "REFERENCES table1 (b)" "MATCH FULL" "ON UPDATE CASCADE")))) After the change -- two forms: ((#:nn "NOT NULL") (#:u "UNIQUE") (#:r "REFERENCES") (#:mf "MATCH FULL") (#:uc "ON UPDATE CASCADE")) (("mydb" ("table1" (a text #:nn #:u) (b text #:nn #:u)) ("t2" (a text #:nn #:r "table1 (a)" #:mf #:uc) (b text #:nn #:r "table1 (b)" #:mf #:uc)))) The table specs after the change are easier to read and less prone to typing errors, especially in an environment that fontifies Scheme keywords (like Emacs), than before the change. - 0.35 | 2004-06-21 - New (ttn edit) "e:" procs These procs are now available: (forward-line &optional n) (beginning-of-line &optional n) (end-of-line &optional n) (bolp) (eolp) They are valid within the `editing-buffer' macro. Please refer to Emacs docstrings for functions by the same name, for more info. - Performance improvements in (ttn edit) search/replace Some unnecessary string consing has been eliminated in the search/replace operations; they are now a bit quicker. - 0.34 | 2004-06-10 - Changes to functionality - Bugfix to (ttn filesystem-tree-to-list) This proc used to improperly nest empty sibling subdirectories due to mis-{understanding,handling} of level information. The DFS collection algorithm has been rewritten to use base (prefix) comparisons. - `read-text-db-table' handles CRLF for eol in addition to LF - `email-log-if-fail' changes This now supports multiple semicolon-separated command lists (not only a single list). Also, the return value is now specified: #t means the command was successful, #f means not (implies mail was sent out). - `call-process-to-buffers' no longer requires external program touch(1) - `slackful-concat-proc' now accepts a keyword as well as a symbol - New procs - In (ttn personal-pgtable): `personal-pgtable-worker' - In (ttn dirutils): `extract-stem-proc' - In (ttn html-data): `br' and `center' - Dropped module: (ttn psql) - Dropped scripts - display-rcs-state-summary - generate-autoload - 0.33 | 2004-01-30 - Info page installed At long last, there is documentation. Also distributed, but not installed, is the same documentation in HTML format. The availability of docs somewhat explains the brevity of the New Foo items below. - Installation updates module catalog (if supported by system) - Bugfix to (ttn edit) proc: `looking-at' A bug was fixed whereby regular expressions beginning with "^" were not handled correctly: `looking-at' would return #f when point was in fact at the beginning of the line. It would only return #t if point was at the beginning of the buffer. - Input pipe explicitly closed The following procs now explicitly do a `close-pipe' when done reading input, allowing memory to be collected: (ttn shell-command-to-string) shell-command-to-string shell-command-to-list shell-command->string shell-command->list - Internal (ttn gap-buffer) values bumped up (define default-initial-allocation (* 2 1024)) (define default-chunk-size 1024) (define default-realloc-threshold 32) - New (ttn dirutils) proc: `filtered-files-in-vicinity' - New module: (ttn METAINFO) - New module: (ttn cvsutils) This is analogous to (ttn rcsutils), for CVS. - New module: (ttn read-text-db-table) - New module: (ttn personal-pgtable) - New module: (ttn rlog-scan-proc) - New scripts These are not installed but are mentioned here since they play a part in the methodology. - steal-this-package Actually, running this program results in an error at this time. The adventurous may wish to pursue the matter anyway. - collect-lessons This is used to help maintain the "Learning Scheme Programming" node in the Guide. The mechanisms are in place but the actual recording of lessons is still very much in the future. - Makefile oriented to CVS Source has moved from RCS to CVS and the top-level Makefile now reflects that (notably for "make dist"). - 0.32 | 2003-08-05 - "make check" improvements The test for (ttn gpgutils) does a "gpg --verify" and compares expected values against obtained results. The time component of the test has been localized to work outside of the PST (UTC offset "+0800" or 28800 seconds) time zone. - New module: (ttn optargs-kw-utils) At the moment, this just exports `remove-keys', which is used to remove keyword/value pairs from an "argument rest" list, since those are not automatically removed by `define*' et al. - Changes to (ttn call-process) The `remove-keys' proc is no longer available in this module. See new module (ttn optargs-kw-utils) above, instead. - Changes to (ttn html-world) - proc `html-world' now takes keywords #:size and #:gen - proc `html-world.html-data' likewise The original image as generated by xearth(1) has a default size of 150x150 pixels (which after ASCIIfication fits comfortably in an 80-column screen). You can now pass #:size N to `html-world' to specify an NxN-pixel originating image. Additionally, the default backend program has been changed from xearth(1) to xplanet(1), the former having been stigmatized as non-free software, at least by Debian. As it turns out, by the time you read this, the LZW patent will have expired, so now it's ok to use xearth after all! In any case, you can pass #:gen BACKEND, where BACKEND is a symbol `xplanet' or `xearth', to `html-world' to select the preferred image generator. - procs `refresh' and `textarea' now handle numerical args These now detect if the `sec' and `row'/`col' args, respectively, are numbers and do a `number->string' for you. Strings continue to be supported. - bugfix for proc `input' Elements are now properly interspersed with spaces. - 0.31 | 2002-09-27 - Bugfix to (ttn spewutils) Use `eval-in-module' to be explicit. - New configure option Previously, enabling (ttn pgtable) testing was a hairy process. Now this is handled by passing "--enable-pgtable-check-db=NAME" to configure. See README. - Distribution changes - Directory ttn/testing/benchmarks/ is now at top-level Benchmarking is back; i.e., you can now do "make tea" again. See Makefile for BENCHMARK_ITERATION_MULTIPLIER usage. - Directory ttn/testing/ttn/ is now renamed to tests/ at top-level Additionally, the tests are broken out into individual files, and the Makefile now uses "guile-tools run-all-tests" to run them. You can choose specific tests to run like so: make check ALLTESTS="ftw.test gap-buffer.test" DEBUG=1 Omit DEBUG=1 for a more silent running. The log is written to tests/CHECK.LOG. You can do "make check" in either top-level or directly in the tests/ subdirectory. - 0.30 | 2002-08-13 - Bugfix to (ttn html-data) Proc `copyright' no longer hardcodes "2001". Instead, the value is taken from the current year. - Bugfix to (ttn expand-file-name) The new algorithm has been implemented that now handles "../.." in the presence of a "~USER" and other funky cases properly. - Deprecated module: (ttn ftw) The `ftw' and `nftw' procs have now been folded into Guile in its (ice-9 ftw) module. (ttn ftw) just loads (ice-9 ftw) for now but it will probably go away in the future. - New (ttn gap-buffer) proc: gb->port! This proc sends GB contents to PORT efficiently. - `save-buffer' now verifies operation This proc, in (ttn save-buffer), now checks the written file to see that it has the same size as the buffer contents, returning #t if so. - 0.29 | 2002-01-12 - Functionality news - Change to (ttn html-data) Proc `html' now includes the "!DOCTYPE" jazz, woo hoo! - New module: (ttn split-mbox) Exported proc `split-mobx' doc: Read lines from PORT, splitting at "^From " (note space), and returning a list of messages, each a list of lines. - Change to (ttn parse-rfc822) Proc `parse-rfc822' now also accepts a list of lines as arg `mailmsg', in addition to gap-buffer or string. The returned closure now accepts key `body-lines', which returns the lines comprising the body. The intent is to allow easy line-oriented processing. - Change to (ttn pgtable) New proc `pg-result-symbol' can be used instead of `pg-result-status' from module (database postgres), to return a symbol (e.g., `PGRES_COMMAND_OK'). This change allows (ttn pgtable) to be used w/ any installed version of guile-pg 0.07, instead of only those hacked by ttn (e.g., 0.07ttn4) to do the symbolic translation in C. See README for updated dependency info. - Administrative news - New files: modules.af, autogen.sh Configuration now makes use of some Guile facilities for automatically maintaining module dependency info. The file modules.af is processed by "guile-tools autofrisk" to create modules.af.m4, which defines AUTOFRISK_CHECKS now referenced by ./configure.in. Following widespread packaging convention, there is now the top-level script autogen.sh, which invokes various tools to set things up. This script accepts option "--verbose". Lastly, (ttn gpgutils) and (ttn pgtable) testing configuration is now handled in part by ./configure, although there is still some manual component. This will continue to lessen in the future. See README for details. - Testing output less verbose Output of "make check" is now more of summary (by module). You can do "make DEBUG=1 check" to see details. - "make dist" no longer requires full tag The full tag is computed in the same way used in "make newtag=FRAG tag". Thus, you can use FRAG everywhere. The varname is changed as a reminder: "make dtag=FRAG dist" (instead of "disttag="). - No more autoload file This means the benchmarks are not available this release. - 0.28 | 2001-12-17 - (ttn ftw) benchmark now uses "/etc" instead of "/" / can be humongous, /etc is big enough anyway. (Actually, /etc isn't very deep, maybe /usr is better.) - Changes to (ttn html-data) - New procs: `name', `dl', `dll' These are and" and "". - Bug fix: `html' no longer includes "Content-type: text/html\n\n" - 0.26 | 2001-11-14 - "New" modules The following modules were created by pulling out one or two procs from either (ttn fileutils) or (ttn shellutils). This was done to reduce memory overhead in the case of unused definitions in the same module as the definition you are actually interested in. (ttn email-log-if-fail) from (ttn fileutils) (ttn expand-file-name) (ttn save-buffer) (ttn write-buffer) (ttn find-file) (ttn call-process) from (ttn shellutils) (ttn call-process-to-buffers) (ttn make-buffered-caller) In the future, other (ttn *utils) modules will probably be similarly factored. - Other changes to (ttn fileutils) Three new procs are exported: `filename-sans-end-sep-proc', `filename-components' and `filename-components-append'. The latter two are inverses. Here are the docstrings: - filename-sans-end-slash NAME Return NAME, a string, stripping the terminating "/" character. If there is no "/", just return NAME. - filename-components STRING Return a list of filename components parsed from STRING. Components are delimited by "/", which is discarded. - filename-components-append LS Return a string composed by interspersing LS elements w/ "/". - Other changes to (ttn shellutils) A new proc is exported: `(sysfmt . args)'. Docstring: Apply `format' to ARGS and pass to `system'. - Changes to (ttn html-data) Three new procs are exported: `ull', `copyright' and `copyright-since'. Signatures are: (ull x) ; variant of `ul' that takes single list (copyright . prefix) (copyright-since year) - 0.25 | 2001-11-02 - New distributed file: BUGS This file is formatted similarly to the guile BUGS file. - New module: (ttn html-data) This module exports the following procs: (html . x) (href url text) (head . x) (title x) (body . x) (h1 x) (h2 x) ... (h6 x) (hr) (b x) (p) (textarea rows cols name x) (input type name value) (form method action . x) (refresh sec url) (li x) (ul . x) (table x) (tr x) (td x) All procs return lists (possibly nested), suitable for walking w/ a "flattening" procedure, something like: (define (output-html-data x) (cond ((string? x) (actual-output x)) ((list? x) (for-each output-html-data x)) (else (error "unknown type:" x)))) ACTUAL-OUTPUT might send X to a port, for example. - 0.24 | 2001-10-30 - (ttn gap-buffer) `gb?' is now exported - New module: (ttn parse-rfc822) This module exports one procedure `parse-rfc822', which has the following docstring: Parse MAILMSG, return a query proc. MAILMSG may be a gap-buffer, or something that `make-gap-buffer' takes. The query proc takes a symbol COMP, and returns the message component COMP. Supported values for COMP are: from -- first whitespace-delimited token after "^From " on first line headers -- the headers as an alist (keys are strings), order maintained body -- rest of the mail message Any other query results in a "bad component" error. - 0.23 | 2001-10-04 - Configuration accepts guile versions 1.5.x, 1.6.x, 1.7.x - New distributed file: .release.scm This is basically a program for doing a release, included here for completeness. (At this time, it is evaluated completely by the human maintainer, but the goal is to eventually mechanize the release process entirely.) - Bugfixes - (ttn stringutils) `string-append/separator' handles null 2nd arg - (ttn pgtable) `tuples-result->table' handles zero-tuples case Previously, `tuples-result->table' would try to create a table of size 0, causing an error. This has been changed to instead create a table of size 1. (In fact, should some result imply a negative number of tuples, the returned table still has size 1.) - Throughout, `write-line' replaced w/ `display' and `newline' - New platform: benchmarks fubar for now - 0.22 | 2001-08-26 - "make check" for `call-process' no longer looks for exact string match Part of the testing for (ttn shellutils) proc `call-process' is to check the buffer caputuring standard error for non-successful calls. Previously, the stderr output was subject to direct string comparison w/ an expected value. This methodology fails, however, when the locale differs from that of the author's, since a localized error message will be unlikely to match directly, even though the behavior is correct. (In this case, /bin/ls stderr in French is definitely not the same as that in English.) Thus, these tests now check that the stderr buffer is non-empty instead of doing a string match. This is less rigorous than before, but the alternative is to dig deep into localization issues, which is somewhat of a pain. - 0.21 | 2001-08-14 - Changes to (ttn scat) - Macro `define-sl' no longer provided - New proc: `sl->bytes' - More procedure documentation: now 88/128 (69%) complete - "make tea" now uses ttn/autoload.scm directly The benchmarking process used to process the autoload file to replace "guile-user" with "guile" because Guile used to set the default current module differently for scripts and for repls. Since Guile has been changed to use "guile-user" consistently for all situations, the substitution is no longer necessary. - Dependencies updated - Guile 2001-08-13 (from cvs repo) - guile-pg 0.07ttn3 - 0.20 | 2001-07-14 - "make check" and "make tea" now allow choice of Guile interpreter By default, the interpreter "guile" is used (should be on your path). However, you can specify another Guile like so: make GUILE=/some/path/to/alternate/guile check This is useful to identify (in)compatibilities. At this time, no effort is made to infer the proper `%load-path' given an arbitrary Guile interpreter; you will need to set env var `GUILE_LOAD_PATH' manually, either in the shell or passing it through `make' similar to how `GUILE' is handled. - Changes to (ttn scat) This module, not under any active development since 1998, has undergone an overhaul. A bug was fixed in `make-scat' whereby omission of DEFAULT-VALUE caused an error. The semantics of `scat-concat' are now reversed: first arg is shifted instead of second arg. `make-sl' now accepts field defs w/ numeric values instead of hex strings, as long as the bit length is also specified. User var `sl-field-def-check-func' is no longer available and `make-sl' no longer calls it. `copy-sl' has been renamed to `sl-copy'. `sl-edit' has been renamed to `sl-edit!', and a copying (non destructive) version named `sl-from-template' is now available. Additionally, we now do some (ttn scat) testing on "make check". - 0.19 | 2001-05-19 - Benchmarking news A traversal benchmark for (ttn gap-buffer) was added. The poor results prompted a complete implementation redesign (interface not changed). Traversal performance is now linear w/ buffer size instead of being higher-powered (it was so very VERY *VERY* inefficient we had to kill the benchmark for fear of burning out the CPU on the dev box -- how's that for "higher-power"? ;-). Redesign helped all operations. Insert performance is now linear w/ length of inserted string. Delete performance is now O(1). Intimate module (ttn edit) was also modified with expected (though unquantified) performance gain. - Administrative news - Sync w/ development Guile (1.5.x) There was previously some attempt at remaining compatible w/ guile-1.4, but that has now been abandoned, due primarily to these features / changes available only in the Guile development version: - (ice-9 rdelim) required for `read-line' and friends, but `use-modules' no longer can be conditionalized, so the old `(or (defined? 'read-line) (use-modules (ice-9 rdelim)))' workaround no longer works. - new `use-modules' functionality -- actually, we have sufficient functionality in (ttn moduleutils) (where the new `use-modules' stuff originated :-) but `use-modules' is more standard. - `identity' makes a return -- this used to be provided in (ice-9 boot-9), then someone renamed it `id' then someone re-renamed it `identity' again; welcome back, old friend! - (ice-9 documentation) and (ice-9 session) now work together to allow files following the Guile Documentation Format Version 2 to be added to the search list and searched using "(help 'NAME)". - (scripts read-scheme-source) is useful for bin/snarf-docs. - README dependencies more explicit Starting w/ this release, the Dependencies section in the README specifies a development version (usually by date) of guile-core that works well with ttn-pers-scheme (has been tested with "make check"). Sorry for the extra hassle. Once the next version of Guile is released (supposedly Real Soon Now), we will sync to that and try to remain there. Aside from the overall Guile dependency, we also list packages or programs which are required for specific modules. - Documentation methodology starting to be defined Doing "make" now also produces ttn-procedures-docs.txt, which follows the Guile Documentation Format Version 2, and doing "make install" copies this file to the site directory (see README). The goal is to have all exported procedures documented by next release; this is approximately 59% (76/129) complete. Procedure documentation is snarfed using bin/snarf-docs, a work in progress (significant bits of which will probably make it into Guile's (scripts read-scheme-source) module at some point). So far, the recognized format is simply: contiguous comments before a top-level form that share the same number of leading semicolons. See bin/snarf-docs for more info. - Makefile changes Bug fixes: Symlink now made in ttn/testing/benchmarks and bin. On "make dist", touch file ttn/testing/ttn/.dont-check-gpgutils in dist dir to prevent "make check" from trying to check (ttn gpgutils). See README for more info. Documentation is now made and installed. See news item above. Doing "make clean" now removes autoload and docs files. - New program: snarf-docs This is described above (see "Administrative news"). - New module: (ttn gpgutils) This module exports eight procedures: read-line-no-echo siginfo:signer clearsign-message-interactively siginfo:time verify-signed-message siginfo:method siginfo:sig siginfo:body See the documentation for each procedure for more info. - Changes to (ttn sanity) New proc `know-that-ttn-procedures-docs-is-available!' finds ttn-procedures-docs.txt using `%search-load-path' and adds the file's absolute path to (ice-9 documentation) variable `documentation-files'. This allows "(help 'grep)" to work, for example. This proc is exported. Proc `give-me-a-sane-environment-please!' now calls `know-that-ttn-procedures-docs-is-available!'. Also, it no longer tries to activate the readline library. - Changes to (ttn edit) A bug was fixed in `e:re-search-forward' that caused the "^" regular expression operator to fail to match beginning of line. This was due to omission of the `regexp/notbol' flag. - Changes to (ttn pgtable) Column definitions are now extended to have the form: (NAME TYPE [OPTION1 OPTION2...]) Each OPTION is a string. Options are concatenated with spaces separating them and passed directly to the back end. The old form: (NAME . TYPE) is still recognized but is deprecated and will no longer be supported in a future release. Three new element extraction procedures are now available: `def:col-name', `def:type-name' and `def:type-options'. These DTRT w/ both the old form and the new. - 0.18 | 2001-04-09 - Benchmarking news Some benchmarks for (ttn ftw) have been added. You can run them specifically with: "make benchmarks=ftw tea". The "make tea" command now also works in ttn/testing/benchmarks. To reduce maintenance, benchmark common header code now no longer uses modules directly with `use-modules', with the exception of a few absolutely required modules. Instead, the autoload file created by top-level "make" is copied to the benchmark directory and modified so that the module defined to receive all the autoloaded bindings is `(guile)' instead of `(guile-user)'. This modified copy is then loaded. The release process now specifies capturing logs of two runs of "make tea", the second with iteration multiplier of 1/5. These logs are in the benchmark directory as tea-1.0 and tea-0.2, respectively. - Changes to (ttn ftw) Both `ftw' and `nftw' procs now handle optional arg sequence `hash-size N', where N specifies the size of the hash table to used for recording visited files. The default size is 211. Thanks to Brad Knotwell for this performance enhancement patch. - New module: (ttn pgtype) PostgreSQL type conversion has been moved into this module. Additionally, PostgreSQL array conversion has been generalized. Docstrings reproduced here (note that `define-db-col-type' docstring has changed from VERSION 0.16 release): - `dbcoltype-lookup' TYPE-NAME - `dbcoltype:name' LOOKUP-VALUE - `dbcoltype:default' LOOKUP-VALUE - `dbcoltype:stringifier' LOOKUP-VALUE - `dbcoltype:objectifier' LOOKUP-VALUE Return lookup value of TYPE-NAME, a symbol, from `*db-col-types*'. Use procs `dbcoltype:name', `dbcoltype:default', `dbcoltype:stringifier' and `dbcoltype:objectifier' on this value to access those components, respectively. - `define-db-col-type' NAME DEFAULT STRINGIFIER OBJECTIFIER Register type NAME with DEFAULT, STRINGIFIER and OBJECTIFIER procs. NAME is a symbol. DEFAULT is a string to use if the Scheme object is #f. STRINGIFIER is a proc that takes a Scheme object and returns a string suitable for use in an "INSERT VALUES" SQL command. OBJECTIFIER is a proc that takes a string and returns the Scheme object parsed out of it. Both STRINGIFIER and OBJECTIFIER need not worry about SQL-style quoting (using single quotes) and related quote escaping. If NAME already exists, it is redefined. - `define-db-col-type-array-variant' COMPOSED SIMPLE [PROCS] Register type COMPOSED, an array variant of SIMPLE, with optional PROCS. SIMPLE should be a type name already registered using `define-db-col-type'. COMPOSED is conventionally formed by appending SIMPLE with one or more pairs of square braces "[]", with the number of pairs indicating the array dimensionality. For example, if SIMPLE is `text', a two-dimensional text array would be named `text[][]'. Optional arg PROCS is a list specifying alternative stringifier and objectifier procedures (in that order). If unspecified, SIMPLE is looked up and its stringifier and objectifier are used. The default value of all array types is "{}" and cannot be changed. - Changes to (ttn pgtable) Typing machinery has been moved to (ttn pgtype). This includes var `*db-col-types*' and convenience proc `double-quote'. Also, some modules (ttn pgtable) depends on are now autoloaded. - New program: display-rcs-state-summary This is a simple wrapper around the procedure of the same name in (ttn rcsutils). This type of wrapping may be automated in the future. - Program generate-autoload no longer sets env var GUILE_LOAD_PATH The makefile that calls generate-autoload now sets the path appropriately. This change is so that generate-autoload can be conveniently called in different contexts. Generally, programs in this directory should not set GUILE_LOAD_PATH. - Administrative news Doing "make rcs-state-summary" now also checks subdir bin. Distribution also includes benchmark logs. These are to satisfy curiosity only; it's unlikely that the numbers mean anything. - 0.17 | 2001-03-29 - Administrative changes - Autoload file no longer distributed Instead it is created when you do "make". The script bin/generate-autoload also serves as a sanity check for the package since it uses some of the modules right from the distribution. The no longer necessary elisp program ttn/update-autoload.el has been removed. - New directory: bin This holds maintenance scripts. At this time, there is only generate-autoload. - Change to (ttn stringutils) - New proc: string-quoted/escaped STRING Return `write'-like output of STRING, with some characters escaped. This means that instead of, for example, a literal newline appearing in the output, the two-character sequence `\n' is used. The complete list of escaped characters is: #\\, #\newline, #\ht, #\cr, #\page. These result in `\\', `\n', `\t', `\r' and `\f', respectively." - Changes to (ttn pgtable) - New supported type: `serial' - `pgtable-manager' enhancements The closure returned by this proc now can handle commands `delete-rows' and `update-col', and queries `table-name' and `defs'. Also, when doing a `drop', if the table has any columns that have type `serial', any associated magic PostgreSQL sequences are also dropped. As of PostgreSQL 7.x, the sequence name is TABLENAME_COLNAME_seq. For more info, see the PostgreSQL User Guide, Chapter 3: Data Types. - Bugfix in type `text[]' The objectifier proc now handles the empty set correctly. - Bugfix in (ttn fileutils) The autoload trigger lists now include `gb->string'. - Change to (ttn grep) Both `grep' and `grep-matches' now take an additional flag `literal' which means that STRING is to be searched for literally and not to be considered a regular expression. - Change to (ttn gap-buffer) Proc `make-gap-buffer' now takes an arg INIT, which can be a string or an input port. If INIT is a port, it is read until EOF. In both cases point is left at the end of the buffer. - Changes to (ttn edit) - New "e:" proc: `buffer-port' This returns a soft port on the current buffer. See bin/generate-autoload for an example use. - Bugfix in `letrec' and `let*' expansion Previously, these forms were expanded correctly with the exception of the initial symbol, which was hardcoded to `let'. This is now fixed to preserve the variant name. - `insert' now also takes symbols and sexps The string inserted is computed by applying `symbol->string' to symbols, and `write' to sexps. - Change to (ttn shellutils) The exit value of applying the closure returned by `make-buffered-caller' to `execute' is now saved and can be retrieved later with the `exit-val' query. An error is signalled if `exit-val' is requested before either `execute' or `execute/no-init' has been invoked after initial closure creation or command redefinition. - New module: (ttn listener) One proc is exported: `make-listener'. Docstring follows: - `make-listener' LISTENER-PORT #:SETUP-SOCK #:NQUEUE #:PRE #:HANDLE #:POST Return a thunk that listens on TCP/IP port number LISTENER-PORT. Key #:setup-sock specifies a procedure that is passed the listener socket right before doing `bind'. This is a good place for `setsockopt' calls. Key #:nqueue specifies the number of queued requests, default 10. Keys #:pre, #:handle and #:post specify procedures that take two args, PORT and CONN, the output of `accept', q.v. These three procedures are thunkified to form the branches of a `dynamic-wind' operating in its own thread. After calling the post procedure, PORT is closed. If pre, handle, and post are unspecified, the default action is to do nothing. - 0.16 | 2001-03-19 - Benchmark framework added You can now do "make tea" which runs some benchmarks, displaying user and system CPU usage for each case. You can increase or decrease the iteration counts by specifying an env var like so: make BENCHMARK_ITERATION_MULTIPLIER=N tea N can be an integer, a floating point number, or even a rational number. The actual number of iterations computed is displayed. See ttn/testing/benchmarks/Makefile var `benchmarks' for the full list of benchmarks. You can specify a subset like so: make benchmarks='baseline gap-buffer' tea Furthermore, for benchmark FOO, see FOO.scm for various options to skip parts of the benchmarks. For example: make benchmarks='gap-buffer' opts='--skip-make-gap-buffer' tea At this time, there are only a few benchmarks, but if your computer is as slow as the author's, perhaps you can escape the scourge of "instant tea". - Changes to (ttn pgtable) - New proc: `define-db-col-type' NAME DEFAULT STRINGIFIER OBJECTIFIER Register type NAME with DEFAULT, STRINGIFIER and OBJECTIFIER procs. NAME is a symbol. DEFAULT is a string to use if the Scheme object is #f. STRINGIFIER is a proc that takes a Scheme object and returns a string suitable for use in an "INSERT VALUES" SQL command (including SQL quotes). OBJECTIFIER is a proc that takes a string (without SQL quotes) and returns the Scheme object parsed out of it." See ttn/pgtable.scm for examples; (ttn pgtable) uses this proc for its own initialization. - New supported type: `bool' - Bugfixes The return value of the `table->object-alist' `pgtable-manager' managed proc is now ordered properly. The `timestamp' stringifier only attempts to convert numbers, and leaves strings alone. - Changes to (ttn moduleutils) - Retired proc: `ls' This was such a thin wrapper around `apropos' that we can forego it w/o much sadness. - New macro: `import-from-module' OTHER-MODULE-NAME . NAMES Import into current module from OTHER-MODULE-NAME variables NAMES. Each element of NAMES is taken to be either a variable name, or a pair (OLD-NAME . NEW-NAME) describing the mapping to be used. OLD-NAME needs to be defined in OTHER-MODULE-NAME, though it need not be exported. - New macro: `reexport-from-module' OTHER-MODULE-NAME . SPECIFICALLY Re-export variables from module named OTHER-MODULE-NAME. If optional args SPECIFICALLY is the empty list, all public variables from OTHER-MODULE-NAME are exported, otherwise, each element in SPECIFICALLY is taken to be either a symbol naming a variable to be exported, or a pair of symbols of the form (OLD-NAME . NEW-NAME) describing the mapping to be used. OLD-NAME should name an exported variable in OTHER-MODULE-NAME. This macro was snarfed from in THUD. - Changes to (ttn fileutils) - Performance enhanced procs: `find-file', `save-buffer' - New proc: `write-buffer' BUFFER FILENAME Write BUFFER into file FILENAME. FILENAME is passed through `expand-file-name', q.v. This makes the buffer visit that file. FILENAME cannot be a directory. - Changes to (ttn gap-buffer) - Performance enhanced proc: `gb->lines' - Bugfix `gb-goto-char' now returns `new-point', even if that is an invalid point (in which case, point is set to `point-min' or `point-max' anyway). This mimics the behavior of GNU Emacs. - New module: (ttn edit) This module exports a macro `editing-buffer'. Docstring: Consider BUFFER the "current buffer" and execute BODY. In BODY, applications of one of `current-buffer-procs' (see source) are handled specially. There is too much other stuff to document in this NEWS file, so here's a short program that gives a taste of what can be done: #!/bin/sh exec guile -s $0 $0 # -*- scheme -*- !# (use-modules (ttn fileutils) (ttn edit) (ttn echo)) (editing-buffer (find-file (cadr (command-line))) (while (re-search-forward "^.+<([^>]*[^^])>" (point-max) #t) (echo (match-string 1)))) ;;
") (render-html-world display (html-world "just" "some" "urls")) (echo "") If you put the above into test.scm, you can do: guile -s test.scm > test.html - `shell-command->list' now takes optional 2nd arg This arg (or the symbol `trim', if omitted) is passed to `read-line'. Valid args are symbols `trim', `peek', `concat' and `split'. - 0.06 | 2000-12-24 - New module: (ttn mixp) --- simplified abstraction for mixp You must install mixp to use this module. See http://www.thbz.cx/mixp for more info. - Bug fix for "make check" A bug was fixed in the Makefile that caused "make check" to fail for the distribution but not in the developer build directory, which goes to show that the development process is not quite mature yet. (Although "make check" failed, ttn-pers-scheme 0.05 installed correctly and was usable, anyway.) - Path to xearth no longer hardcoded in (ttn html-world) To use (ttn html-world) you need to have `xearth', `mogrify', `pbmtoascii' and `tr' in your PATH somewhere. - 0.05 | 2000-12-22 - Changes in installation procedure We now use the standard configure.in-based install procedure, which uses "guile-config info pkgdatadir" to determine where to install files. See file README for more info. Also, the file INSTALL has been removed from the distribution. - New modules - (ttn slackful-concat) --- Low-hassle string/symbol concatenation - (ttn html-world) --- Render xearth in ASCII, inserting HTML links See the Commentary and procedure docstrings in each module for more info. - Changes to (ttn sanity) and (ttn original-sin) The development version of Guile no longer allows certain procs (e.g., `getenv') to accept symbols. We use `symbol->string' where things break; however, there has not been a systematic code review. - Changes to (ttn shell-command-to-string) - new procs: `shell-command-to-list', `shell-command->list' The second is an alias for the first. Each line of the shell command (sans newline) is an element of the return value, a list. - 0.04 | 2000-10-16 - New modules See the Commentary in each module for more info. - (ttn filesystem-tree-to-list) --- grok fs tree as nested list - (ttn original-sin) --- frictionless value transfer - (ttn moduleutils) --- module system hackery - Retired modules - (ttn @) --- Macro to peek at variables inside modules - (ttn ls) --- Commands for interactive module browsing These were merged into (ttn moduleutils). - Changes to (ttn echo) - new procs: `echow', `echo-n' and `echow-n' `echow' is similar to `echo' but uses `write' instead of `display'. The "-n"-named variants are similar to those w/o "-n" but omit the terminating newline. - 0.03 | 2000-10-02 - New modules See the Commentary in each module for more info. - (ttn scat) --- serial concatenation for building packets - (ttn abbrev-tree) --- hierarchical abbreviations - (ttn slice) --- sub-sequence selection using indexes - Changes to (ttn dirutils) - new proc `filename-sans-end-sep-proc' This procedure takes one arg, a character used to separate components in a filename, and returns a procedure that, given a filename, returns the filename w/o a terminating separating character. In the case where the filename consists only of the separating character, it is returned unchanged. - Changes to (ttn ftw) - bug fix in procedure `ftw' The procedure `ftw' now returns #t only if all callbacks return #t. Any value other than #t is immediately taken as the return value for `ftw'. Previously, only #f would terminate the walk. - procedure `nftw' implemented This is similar to `ftw' but w/ more options ("nftw" stands for "new filesystem tree walk"). See Commentary in ftw.scm for more info. - Testing framework added The Makefile target "check" (i.e., "make check") now runs several tests to ensure functionality of various modules. If you see an error when doing this, please mail the maintainer the result of running the command "make DEBUG=1 check". - More helpful Makefile The default target (i.e., "make") now displays command lines grepped from the Makefile directly. Here is the current output: $ make No default action makes sense; read the Makefile. Or be adventurous, and try one of these: make check make TTN_CHECK_DONT_MUNGE_LOAD_PATH=1 check make instdir=DIR install make newtag=SOME-TAG tag make disttag=FULL-TAG dist make rcs-state-summary make snapshot - 0.02 | 2000-09-12 - New modules See the source file for each module for more info. - (ttn dirutils) --- handle directories - (ttn ftw) --- filesystem tree walk - (ttn rcsutils) --- handle RCS files - (ttn shell-command-to-string) --- capture shell command stdout - Makefile now supports "make instdir=DIR install". See file INSTALL for installation instructions. - You can now use update-autoload.el in the distribution. If there is no RCS subdir in the distribution directory, one is created and autoload.scm is registered there. From then, when you load update-autoload.el into Emacs, it will do the right thing and keep a history of its changes to autoload.scm. - 0.01 | 2000-07-09 This initial release is mainly to get the release process going so that we may debug it. Local Variables: mode: outline outline-regexp: "\\([ ][ ]\\)*- " fill-column: 72 fill-prefix: "\t" End: