-
Notifications
You must be signed in to change notification settings - Fork 0
/
release-notes.html
1010 lines (1010 loc) · 48.7 KB
/
release-notes.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
<title>Program D Release Notes</title>
<style type="text/css"
>
*
{
font-family:sans-serif;
font-size:10pt;
color:black;
background-color:transparent
}
body
{
padding-left: 10px;
padding-right: 10px;
}
h1, h1 *
{
font-size:18pt
}
h2, h2 *
{
background:#dddddd;
font-size:16pt;
margin-top:12pt;
margin-bottom:3pt
}
h3, h3 *
{
font-size:13pt;
margin-bottom:0pt
}
h4, h4 *
{
font-size:12pt;
margin-top:8pt;
margin-bottom:3pt
}
p
{
margin-top:0pt;
margin-bottom:8pt
}
p.docinfo
{
font-style:italic;
margin-top:0pt
}
em
{
color:#dd4444;
font-weight:bold;
font-style:italic
}
pre.code
{
font-family:monospace;
font-style:normal;
font-size: 9pt;
margin-left: 20px;
}
pre.code span.comment
{
font-family:monospace;
font-style:normal;
font-size: 9pt;
color: green;
}
span.literal
{
font-family:monospace;
font-size: 9pt;
font-style:normal
}
p.additional-notes
{
font-size:9pt;
color:#555555;
font-style:italic;
margin-bottom:8pt
}
a:link
{
color:#114466;
background-color:transparent
}
a:visited
{
color:#441166;
background-color:transparent
}
a:hover
{
color:#664411;
background-color:#ffbb44
}
a.nohover:hover
{
color:#664411;
background-color:transparent
}
a:active
{
color:#664411;
background-color:transparent
}
</style>
</head>
<body>
<h1>Program D Release Notes</h1>
<p class="docinfo"> maintainer: <a href="mailto:noel@aitools.org">Noel Bush</a>
<br/>previous authors: <a href="mailto:noel@aitools.org">Noel Bush</a>, Kim Sullivan, Thomas
Ringate, Pedro E. Colla<br/> Last updated: 26 April 2005</p>
<p class="docinfo"> The latest version of this document can always be found at <a
href="http://aitools.org/programd/release-notes.html"
>http://aitools.org/programd/release-notes.html</a>. Probably.</p>
<p> Versions documented here:</p>
<ul>
<li>
<a href="#v4.5">4.5</a>
</li>
<li>
<a href="#v4.1.5">4.1.5</a>
</li>
<li>
<a href="#v4.1.4">4.1.4</a>
</li>
<li>
<a href="#v4.1.3">4.1.3</a>
</li>
<li>
<a href="#v4.1.2">4.1.2</a>
</li>
<li>
<a href="#v4.1.1">4.1.1</a>
</li>
<li>
<a href="#v4.1.0">4.1.0</a>
</li>
<li>
<a href="#v4.0.2">4.0.2</a>
</li>
<li>
<a href="#v4.0.1">4.0.1</a>
</li>
</ul>
<h2>
<a name="v4.5">4.5</a>
</h2>
<p>This is the first release of Program D in three years. During this time, Program D has
remained the most widely used open source / free AIML interpreter in the world. It has been
employed in numerous projects, from personal-sized art projects to large, enterprise level
deployments. The stability and consistent performance achieved in version 4.1.5 have proven
enduring and reliable, despite the hiatus in available support.</p>
<p>This new release focuses on updating the Program D technology to take advantage of progress
in technologies available as part of the core Java platform. Core functionalities such as XML
parsing, logging, and various architectural matters are now handled in a fashion that
heightens stability, performance and maintainability.</p>
<p>We have finally addressed the issue of component orientation: Program D can now be easily
included into any application framework as a simple "core" object, without ever involving any
undesired interfaces (servlet container, IM interface, etc.). On the other hand, these
optional interfaces now use a more flexible and better defined API to connect to the Core, and
we are confident that additional interfaces may now be provided with far more ease than
before.</p>
<p>Every line of code of Program D has been reviewed, and "refactored" as appropriate. The
program still passes all of the AIML 1.0.1 test cases published with the previous version, as
well as a few more.</p>
<p>Following are details of what has been addressed.</p>
<ul>
<li>
<a href="#v4.5.whatsnew">What's New</a>
</li>
<li>
<a href="#v4.5.rc-notes">Release Candidate Notes</a>
</li>
<li>
<a href="#v4.5.requirements">Important Notes on System Requirements</a>
</li>
<li>
<a href="#v4.5.openissues">Significant Open Issues</a>
</li>
</ul>
<h3>
<a id="v4.5.whatsnew">What's New</a>
</h3>
<ul>
<li>
<a href="#v4.5.whatsnew.component-orientation">Component Orientation</a>
</li>
<li>
<a href="#v4.5.whatsnew.configurability">Enhanced Configurability</a>
</li>
<li>
<a href="#v4.5.whatsnew.xml-parsing">Vastly Improved XML Parsing</a>
</li>
<li>
<a href="#v4.5.whatsnew.schema-validation">Schema-Based Validation</a>
</li>
<li>
<a href="#v4.5.whatsnew.logging">Revised Logging Scheme</a>
</li>
<li>
<a href="#v4.5.whatsnew.xml-templates">XML Templating for Responders</a>
</li>
<li>
<a href="#v4.5.whatsnew.regex-substitutions">Regular Expressions for Substitutions</a>
</li>
<li>
<a href="#v4.5.whatsnew.responder-refactoring">Improved Responder Architecture</a>
</li>
<li>
<a href="#v4.5.whatsnew.graphmaster-unload">Graphmaster.unload()</a>
</li>
<li>
<a href="#v4.5.whatsnew.irc-listener-fixes">IRC Listener fixes</a>
</li>
<li>
<a href="#v4.5.whatsnew.java-language">Type Safety and Other JDK-Supported Enhancements</a>
</li>
<li>
<a href="#v4.5.whatsnew.coding-standards">Tighter Coding Standards</a>
</li>
<li>
<a href="#v4.5.whatsnew.error-checking">Better Error Checking</a>
</li>
<li>
<a href="#v4.5.whatsnew.unknown-bug-fixes">Unknown Bug Fixes</a>
</li>
</ul>
<ul>
<li>
<h4>
<a id="v4.5.whatsnew.component-orientation">Component Orientation</a>
</h4>
<p>The architecture of Program D has been thoroughly re-worked to make a clean separation
between the "core" parts of the program—those which load AIML, parse inputs, and
produce a response—and other parts, such as IM interfaces, web server
interfaces, and so on. It is possible to instantiate the Program D Core object and
configure it entirely programmatically, without manipulating any configuration files, if
that is required.</p>
<p>In the simplest form, using Program D from another program looks like:</p>
<pre class="code">
Core core = new Core();
core.setup();
core.start();
String response = core.processResponse("hello");</pre>
<p>The Core can be (and usually is) initialized with a properties file. The additional <span
class="literal">setup()</span> step is separated out so that, for instance, consoles can
be connected to the Core before proceeding with initialization. Following <span
class="literal">setup()</span>, there is again the opportunity to do any further setup
of other components before calling <span class="literal">start()</span> on the Core. The
<span class="literal">getResponse()</span> method comes in several forms, including
those that allow the specification of a particular bot, and the use of a <span
class="literal">Responder</span> object to format input and output.</p>
<p>For examples, see the classes provided in the <span class="literal"
>org.aitools.programd.configurations</span> package.</p>
</li>
<li>
<h4>
<a id="v4.5.whatsnew.configurability">Enhanced Configurability</a>
</h4>
<p>The old <span class="literal">.properties</span> file has been replaced with several
XML-formatted equivalents. Configuration is broken up among optional
components—all configuration of the Core happens in <span class="literal"
>conf/core.xml</span>, of the console in <span class="literal">conf/console.xml</span>,
and so on.</p>
<p>Each of these configuration files corresponds to a class which is automatically generated
using a simple (included) XSLT file. (The classes only need to be regenerated when the
semantics of the properties are changed.) The generated class includes getter and setter
methods for every property, so a Core object can be configured completely programmatically
as well:</p>
<pre class="code"
>
core.setRootDirectory("/usr/local/ProgramD/4.5-test");
core.setPredicateEmptyDefault("unknown");
<span class="comment">// ...etc.</span>
</pre>
</li>
<li>
<h4>
<a id="v4.5.whatsnew.xml-parsing">Vastly Improved XML Parsing</a>
</h4>
<p>The "homegrown" XML parser included in previous releases has been replaced with a
combination of SAX2 and DOM parsers now included as standard with the Java SDK. The
results are very satisfactory. Not only is the new parsing performance at least as good as
the old homemade stuff, but we now have built-in well-formedness checking <i>and</i>
schema validation (see next note). The standard XML parsing technology is used in all
aspects of the program where it applies: reading in AIML, parsing AIML templates at
runtime, parsing bot configuration files, and parsing HTML templates (if used).</p>
<p>Additionally, the XML parsers in use have been configured to be namespace aware, which
moves us farther in the direction of being a highly interoperable platform. For instance,
any embedded HTML or XHTML must now be properly notated as to its namespace; this enables
Responders and other tools to easily filter out (or not) markup belonging to one or
another namespace, and to do it in an intelligent, configurable way, rather than relying
on ad hoc heuristics that keep specific "knowledge" of HTML or some other format embedded
in the engine.</p>
</li>
<li>
<h4>
<a id="v4.5.whatsnew.schema-validation">Schema-Based Validation</a>
</h4>
<p>Program D now ships with a W3C XML Schema for AIML (also available at <a
href="http://aitools.org/aiml/schema/AIML.xsd"
>http://aitools.org/aiml/schema/AIML.xsd</a>). As AIML files are read in by the program,
they are validated against this schema. Any errors are reported to the console and log
files. As long as an error is not fatal, the remainder of the AIML continues to load.</p>
<p>Please note that this release includes a simple shell script (in the <span
class="literal">resources</span> subdirectory) that cleans up the "AAA" AIML set,
including various idiosyncratic errors.</p>
</li>
<li>
<h4>
<a id="v4.5.whatsnew.logging">Revised Logging Scheme</a>
</h4>
<p>Program D now uses the Java logging API to write information to log files and to the
console. This provides for easier customization, and opens the door to cleaner integration
with logging in larger systems.</p>
</li>
<li>
<h4>
<a id="v4.5.whatsnew.xml-templates">XML Templating for Responders</a>
</h4>
<p>The templates used by XML-oriented responders, like the HTMLResponder, now have a
bonafide XML template language of their own. This template language includes a couple of
new elements, <span class="literal">logged-in</span> and <span class="literal"
>not-logged-in</span>, which can be used to provide conditional output depending on the
user's login status.</p>
</li>
<li>
<h4>
<a id="v4.5.whatsnew.regex-substitutions">Regular Expressions for Substitutions</a>
</h4>
<p>Substitutions (for <span class="literal">input</span>, <span class="literal"
>gender</span>, <span class="literal">person</span> and <span class="literal"
>person2</span>) are now specified as regular expressions. This lends a great deal more
power and precision to the input normalization step, and to the <span class="literal"
>gender</span>, <span class="literal">person</span> and <span class="literal"
>person2</span> processors. For a guide to the regular expression syntax that is
available, see the <a
href="http://java.sun.com/j2se/1.5.0/docs/api/java/util/regex/Pattern.html#sum">JDK
documentation</a>.</p>
</li>
<li>
<h4>
<a id="v4.5.whatsnew.responder-refactoring">Improved Responder Architecture</a>
</h4>
<p>The Responder architecture, especially the class formerly known as "SmartResponder" (now
totally rewritten and called <span class="literal"
>ServletRequestTransactionEnvelope</span>) and the <span class="literal"
>HTMLResponder</span>, has been completely overhauled, addressing a number of serious
design problems in the original. I'm open to suggestions for further improvements, but at
last it is possible to say that the authentication system (a) makes sense as coded, (b) is
decoupled from input and output formatting, and (c) is reasonably reusable. A complete set
of example files to support user authentication is include in <span class="literal"
>templates/html</span>, and some important properties can be adjusted in <span
class="literal">conf/html-responder.xml</span>.</p>
</li>
<li>
<h4>
<a id="v4.5.whatsnew.graphmaster-unload">Graphmaster.unload()</a>
</h4>
<p>Eion Robb submitted a patch to 4.1.5 that fixed a fundamental problem with the <span
class="literal">Graphmaster.unload()</span> method—namely, that it didn't
work. His contribution has been incorporated into the current release.</p>
</li>
<li>
<h4>
<a id="v4.5.whatsnew.irc-listener-fixes">IRC Listener fixes</a>
</h4>
<p>A person known to me only as "Kevin W." submitted a patch for the IRC listener that did
the following:</p>
<ul>
<li>allowed joining multiple channels</li>
<li>recognises nick in any part of message</li>
<li>delay implemented (the "delay" IRC listener property)</li>
<li>fixed parameters bug with processMessageCommand</li>
</ul>
</li>
<li>
<h4>
<a id="v4.5.whatsnew.java-language">Type Safety and Other JDK-Supported Enhancements</a>
</h4>
<p>This new version of Program D makes very extensive use of the new features introduced by
<a href="http://java.sun.com/j2se/1.5.0/">JDK 5</a>. The generics framework is used
throughout the code to achieve a very high level of type safety, with far less verbosity,
and virtually no (expensive) casting. Typesafe enums have also been employed to great
effect in quite a few places. The enhanced <span class="literal">for</span> loop, which in
almost all cases obviates the need for using an Iterator, has been employed everywhere
possible. And in a couple of instances we make use of autoboxing/unboxing of primitive
types.</p>
<p>Incorporating all of these improvements has made the code easier to read, and therefore
to debug and maintain. In quite a few cases, performance gains also seem to have been
realized.</p>
</li>
<li>
<h4>
<a id="v4.5.whatsnew.coding-standards">Tighter Coding Standards</a>
</h4>
<p>This release also enforces tighter coding standards, including virtually all of those
available from the compiler, including even the most "pedantic" conventions such as avoid
unqualified access to instance variables. While some might argue that this makes the code
bulkier, I would counter that Java is already bulky and wordy—this is just the
nature of the beast—and it makes a lot of to take full advantage of the
extensive compile-time checking that the platform can provide, in the interest of avoiding
runtime errors. Why be half-hearted about it?</p>
</li>
<li>
<h4>
<a id="v4.5.whatsnew.error-checking">Better Error Checking</a>
</h4>
<p>As always, the quest to find even better techniques for capturing runtime
exceptions/errors goes onward. This release has received a thorough going-over in that
regard. Each time I've found a crash-producing situation, I've avoiding fixing the error
until I've found a satisfactory way to trap it, and if at all possible, log it. This kind
of progress is always good, although I do think that Program D was already pretty well
along with the last release.</p>
</li>
<li>
<h4>
<a id="v4.5.whatsnew.unknown-bug-fixes">Unknown Bug Fixes</a>
</h4>
<p>Numerous bugs that were never widely known or reported have been fixed. Going forward,
all new bugs should be visible in the <a href="http://bugs.aitools.org">bug tracking
system</a>, but there are no plans at the moment to retroactively publicly document all
the problems that have already been found and corrected. Suffice it to say that the
current codebase is significantly less error-prone, and more secure, than previous
releases.</p>
</li>
</ul>
<h3>
<a id="v4.5.rc-notes">Release Candidate Notes</a>
</h3>
<p>Here are notes about the release candidates.</p>
<ul>
<li>
<h4>Release Candidate 2</h4>
<p>This one follows hot on the heels of rc1, and includes the following fixes:</p>
<ul>
<li><p><b>AIML Schema bug</b>—The AIML Schema released with the previous
version did not allow non-<span class="literal">li</span> content in <span class="literal">condition</span>
elements; as a result, some valid AIML was rejected.</p></li>
<li><p><b>Bad default value for web-server conf</b>—The default value of
the web server configuration file, specified in <span class="literal">core.xml</span>,
named a non-existent file. This would have caused confusion.</p></li>
</ul>
<p>The first one is pretty critical, which is why this release is so soon after rc1.</p>
</li>
</ul>
<h3>
<a id="v4.5.requirements">Important Notes on System Requirements</a>
</h3>
<p>Program D requires <a href="http://java.sun.com/j2se/1.5.0/">JDK 5</a>. See <a
href="#v4.5.whatsnew.java-language">above</a> for the reasons why. The benefits available
from this new release far outweigh the problem that JDK 5 is not yet available for all
platforms. If you are a user of a platform that does not yet have JDK 5 support, you are
strongly encouraged to get involved in hastening the day when it does.</p>
<h3>
<a id="v4.5.openissues">Significant Open Issues</a>
</h3>
<ul>
<li>
<p>The two included IM listeners fail to function, due to changes in protocols for the
various services. Someone with knowledge of these services is invited to take a look and
submit patches. The problems, which can be easily reproduced by enabling the listeners in
the <span class="literal">bots.xml</span> file (and filling in some valid account
information), are:</p>
<ul>
<li>
<p>AIMListener: Loops with a "Error in main AIMListener loop." message (haven't tracked
this down in the debugger yet as of rc1).</p>
</li>
<li>
<p>ICQListener: Starts contacting the server, but never succeeds in logging in.</p>
</li>
</ul>
</li>
<li>
<p>The issue of "merge policies", as for so long, has not yet been addressed. And does
anyone care? Well, probably. But this author thinks that "merge policy" is just a small
part of a much larger issue of knowledge base quality issues. Addressing these should be a
project unto itself. Nonetheless, when there's a spare moment, we'll update the merge
policy handling. Or feel free to <a href="mailto:programd@aitools.org">submit a patch</a>.
</p>
</li>
<li>
<p>The AIML schema includes embedded <a
href="http://xml.ascc.net/resource/schematron/schematron.html" target="_blank"
>Schematron</a> directives that fill in a validation gap that <a
href="http://lists.w3.org/Archives/Public/xmlschema-dev/2001Jun/0026.html">W3C XML
Schemas cannot address</a>—namely, the three forms of <span class="literal"
>condition</span>. A similar approach could probably take care of the other remaining gap
of which I'm aware: the text part of mixed pattern expressions, which is currently not
fully constrained by the schema. However, as of this writing, I haven't found how to
process the Schematron directives as part of the loadtime validation process, so you still
have the possibility of loading some limited forms of "bad AIML". You
may, of course, validate your AIML using any good modern XML tool, and it will be able to
use the embedded Schematron directives. Coincidentally, the reprocessed AAA AIML set
available on aitools.org does pass this additional test when validated manually.</p>
</li>
<li>
<p>The Flash interface has not been tested. Since it has been updated to use an XML
template, I doubt it will work with the old Flash interface from Chris Fahey, but it's
worth a shot. If somebody with a copy of the Flash authoring tool (yow! that's expensive!)
will get in touch with me, I would be glad to coordinate getting this interface working
again.</p>
</li>
<li>
<p>The "readme" doc ("Getting Started with Program D") has been somewhat over-redacted,
since quite a lot needed to be updated to reflect changes in property names, etc. Any help
in this is greatly appreciated, or it will get back to its full glory sooner or later in
any case.</p>
</li>
<li>
<p>I have a strong desire to include unit testing, but just haven't gotten to it yet. The
included test cases do do a pretty good job of testing key AIML interpreter functionality,
but of course it would be very desirable to have a complete testing framework that would
cover all aspects of the application. Again, it's in the pipeline....</p>
</li>
</ul>
<h2>
<a id="v4.1.5">4.1.5</a>
</h2>
<p> The saga continues. Thanks for contributions, tips, assistance with this release to Anne
Kootstra, Jonathan Roewen, Sven Seelig, Denis Sheynihovich, Kim Sullivan, Andrew Teal and
Richard Wallace.<br/> - Noel</p>
<ul>
<li>
<a href="#v4.1.5.whatsnew">What's New</a>
</li>
<li>
<a href="#v4.1.5.requirements">Important Notes on System Requirements</a>
</li>
<li>
<a href="#v4.1.5.openissues">Significant Open Issues</a>
</li>
</ul>
<h3>
<a id="v4.1.5.whatsnew">What's New</a>
</h3>
<p> This release of Program D is significant for stability and important functionality
improvements. Here is a list of highlights:</p>
<ul>
<li>
<h4>Multiple Bot Support</h4>
<p> Program D now supports an unlimited number of bots running from the same process. You
configure the bots in the <span class="literal">startup.xml</span> file. Different bots
may share one or more AIML files, and memory usage is optimized to minimize duplication.
Bots can be enabled or disabled easily by toggling an attribute in the <span
class="literal">startup.xml</span> file. </p>
<p class="additional-notes"> The example <span class="literal">startup.xml</span> file has
been moved to the <span class="literal">conf</span> directory, and is documented inline
with XML comments. </p>
</li>
<li>
<h4>Separable/Shareable Substitution, Splitter, Predicate Definitions</h4>
<p> The <span class="literal"><substitutions>/*</span> elements (<span
class="literal"><input></span>, <span class="literal"
><gender></span>, <span class="literal"><person></span>, <span
class="literal"><person2></span>) as well as the <span class="literal"
><predicates></span>, <span class="literal"
><properties></span>, and <span class="literal"
><sentence-splitters></span> elements of the <span class="literal"
>startup.xml</span> file can each be assigned an <span class="literal">href</span>
attribute pointing to a local file that contains the actual definitions. This allows
multiple bots to share such definitions, or portions thereof, without needless
duplication. </p>
<p class="additional-notes"> The example <span class="literal">startup.xml</span> file
illustrates this configuration. </p>
</li>
<li>
<h4>Better Configuration of Listeners</h4>
<p> Alice Chat Listeners are now configured in the <span class="literal">startup.xml</span>
file, and each bot can be assigned its own listener. </p>
<p class="additional-notes"> Because of recent changes to the ICQ protocol, the <span
class="literal">AliceICQ</span> listener still does not function correctly (it connects
and receives messages, but sent messages are never received). However, it is included in
hope that a resourceful individual will be able to get it up to speed and contribute back
to the community. </p>
</li>
<li>
<h4>Database-based Logging Option</h4>
<p> You can now choose to have all chats logged to a database. This facilitates a form of
log viewing that is much more efficient and easier to work with than the XML approach in
previous releases. A companion bundle of PHP files for viewing the log database will be
released separately. </p>
<p class="additional-notes"> You can enable database-based logging by setting <span
class="literal">programd.logging.to-database.chat=true</span> in <span class="literal"
>server.properties</span>. You must first create the chatlog table as per the <span
class="literal">database/logtables.script</span> file. You also must configure your
database settings properly in <span class="literal">server.properties</span>. </p>
</li>
<li>
<h4>AIML Syntax Checking</h4>
<p> Program D now does a better job checking some aspects of your AIML syntax when files are
loaded. You will be alerted to malformed categories, invalid pattern expressions, and
non-AIML elements in certain locations. </p>
</li>
<li>
<h4>Simple GUI Console</h4>
<p> A very primitive GUI-based console is available for bot interaction. (This was actually
available in a previous release but not documented.) The console window will be a valuable
tool for people building bots in non-English languages, because it can (or should) display
all characters, not only ASCII/ISO-8859-1, correctly. The GUI provides menu commands for a
couple of common shell commands, but otherwise no additional functionality. </p>
<p class="additional-notes"> The console can be invoked with <span class="literal"
>console.bat</span> (Windows) or <span class="literal">console.sh</span> (*nix). </p>
</li>
<li>
<h4>Artificial "Heart"</h4>
<p> The bot now has a "heart", of sorts, that can issue regular pulses to let you know it's
alive. At present the only implemented pulse is a text message to the console, but an
interface has been provided so that you can easily add modules that update a database,
send email, etc. </p>
</li>
<li>
<h4>Response Timeout Control</h4>
<p> You can set a maximum time allowed for trying to get a response. For some types of
infinite loops, an arbitrary timeout is the only way to escape. This also provides a
parameter for tuning scaleability of the server. </p>
<p class="additional-notes"> Set the response timeout by editing/adding the <span
class="literal">programd.response-timeout</span> property in <span class="literal"
>server.properties</span>. </p>
</li>
<li>
<h4>Graphmaster "Node Height" Optimization</h4>
<p> An optimization to the Graphmaster algorithm <a
href="http://list.alicebot.org/pipermail/alicebot-developer/2002-March/000723.html"
>suggested by Richard Wallace on the alicebot-developer list</a> has been implemented.
This optimization is intended to reduce match times for patterns that include multiple
consecutive wildcards. </p>
</li>
<li>
<h4>Connect and Inactivity Strings</h4>
<p> Now you can customize the strings used as custom inputs to the bot to signal a new
connection or inactivity. Also, the connect string is sent to the console user session on
starting up (or switching to a new bot) so that you don't have to type it. </p>
<p class="additional-notes"> Customize these parameters in the <span class="literal"
>server.properties</span> file. </p>
</li>
<li>
<h4>Targeting Tool</h4>
<p> The targeting tool is still very much a prototype, just a cleaned-up version of what was
released in Program dB, but probably many miles/kilometers away from what it ought to be.
However, in this version you can actually type in the target panel, which I'd managed to
mess up previously. </p>
</li>
<li>
<h4>Bug Fixes</h4>
<p> 4.1.5 is the last release that predates the Foundation's new <a
href="http://alicebot.org/bugzilla">bug-tracking system</a>. Subsequent releases will
make use of this system to enumerate bugs and their status. The following bug descriptions
are more anecdotal than we'd like to provide in the future. </p>
<ul>
<li>
<p> A serious set of <em>thread synchronization</em> problems has been addressed and
seems to have eliminated most or all deadlock and race conditions that were causing
<em>sporadic, enormous delays</em> in some previous builds. </p>
</li>
<li>
<p> Some major problems with the <em>substituter</em> have been corrected. </p>
</li>
<li>
<p> The problems with <em>progressively deteriorating response times</em> seem to have
been solved. Even under heavy load, a reasonably-equipped machine should see average
response times in the <40ms range, very often down to 1-2ms. We intend to
publish some performance test results soon. </p>
</li>
<li>
<p> The <em>pathname handling for learn operations</em> has been improved to work more
"intuitively"--i.e., paths that are expressed relative to the files in which they are
listed should work. </p>
</li>
<li> The <em>AliceIRC listener</em> correctly prepends a "#" to channel names when
joining. </li>
</ul>
</li>
</ul>
<h3>
<a id="v4.1.5.requirements">Important Notes on System Requirements</a>
</h3>
<p> Program D 4.1.5 requires a JVM or JRE that is compatible with the <a
href="http://java.sun.com/j2se/1.4/download.html" target="_blank">Java 2 Platform version
1.4</a>. If you do not intend to modify the source code, you can download just the JRE (Java
Runtime Edition), which is significantly smaller than the SDK (about 9MB as compared with
~40!).</p>
<p> The current reason for the Java upgrade requirement is an internationalization-related issue
that may not pertain to all users. If the upgrade is onerous for you, post to the <a
href="http://list.alicebot.org/mailman/listinfo/alicebot-developer">alicebot-developer</a>
mailing list for assistance with learning the necessary steps to build a version that will be
compatible with JDK 1.3.</p>
<h3>
<a id="v4.1.5.openissues">Significant Open Issues</a>
</h3>
<ul>
<li>
<p> Many people have expressed the desirability of more cleanly separating Program D from
Jetty in order to allow use of better-quality servlet containers (such as Tomcat,
WebLogic, JRun, etc.). This isn't done yet but appears to be a trivial task. However,
presently the significant integration of the bot server with a web server other than Jetty
is more hypothetical than actual. </p>
</li>
<li>
<p> The question of merge policies still hasn't been satisfactorily addressed. </p>
</li>
<li>
<p> The program can still be flummoxed by malformed AIML. The decision to require Java SDK
1.4 opens the way to using standard XML technologies now included with Java (previous
linkages caused problems with the GNU GPL), but research is needed to measure the
tradeoffs between improving this aspect and possible performance degradation. </p>
</li>
<li>
<p> Finally, the program is now at the stage where it could use a real overhaul in
architecture. Several discussions are going on semi-independently about this subject. </p>
</li>
</ul>
<h2>
<a id="v4.1.4">4.1.4</a>
</h2>
<p>Bug fixes and miscellany by Noel Bush.</p>
<h3>Functional fixes</h3>
<ul>
<li>"secret.key" problem with DBMultiplexor fixed</li>
<li>Important fix to sentence-splitting: problem with method was causing multiple consecutive
punctuation marks to generate multiple "sentences", so an input like "hi!!!!!!!!!!" would
get a long, long response.</li>
<li>Fixed error in which values saved to database weren't being properly escaped.</li>
<li>"targets directory not found" problem fixed.</li>
<li>Problem in which some targets were not saved fixed.</li>
<li>Target extension algorithm fixed.</li>
</ul>
<h3>Functional improvements</h3>
<ul>
<li>Implemented support of default predicate values, and return-name-when-set predicates.</li>
<li>Configurable caching system now caches predicates in memory, writes out to disk or
database only when necessary.</li>
<li>IRC, ICQ and AIM listeners now work.</li>
<li> Interactive shell has been extended to permit: <ul>
<li>commanding listeners (currently AliceIRC is enabled this way by means of illustration)</li>
<li>delete existing target data</li>
<li>load new AIML files</li>
</ul>
</li>
<li>direct checking of some types of infinite loops</li>
<li>XML chat log now has a "rollover" capability -- will not write more than a fixed number of
entries to file before rolling it over.</li>
<li>XML chat log viewing stylesheet looks in local directory for entity declaration resources,
rather than to the W3C</li>
</ul>
<h3>Code improvements, changes</h3>
<ul>
<li>Somewhat better management of threads; inclusion of a shutdown hook from main Aliceserver
in order to do cleanup before dying.</li>
<li>Introduction of PredicateMaster -- removal of "StaticSelf" mess from Multiplexor, and
somewhat more clarity about what a Multiplexor is all about.</li>
<li>Moved Trace and MessagePrinter to util; devinfo and devfail methods will now print the
name of the method that called them (not quite perfect but useful).</li>
<li>AIMLReader works just a bit faster now, by recreating the StringBuffer after each new
category is created.</li>
<li>Dependence on third-party "LinkedList" and "LinkedListItr" has been eliminated.</li>
<li>Now use "XMLResourceSpec" instead of my embarassing String array for calling XMLWriter.</li>
<li>introduction of UserErrorException and DeveloperErrorException for the promotion of
responsible coding ;-)</li>
</ul>
<h3>Other notable changes</h3>
<ul>
<li>JavaScript interpreter is no longer hard-linked -- could easily be replaced by a wrapper
for another one.</li>
<li>Hypersonic SQL code has been removed entirely.</li>
<li>This marks the end of the effort to decouple Program D from GPL-incompatible code. We
recognize that a tightly-linked combination of ALICE code with GPL-incompatible code is a
contradiction of the terms of the GPL, and have striven to re-align the codebase with the
spirit and terms of the GPL.</li>
</ul>
<h2>
<a id="v4.1.3">4.1.3</a>
</h2>
<p>Major cleanup and optimization work by Noel Bush. User authentication implementation
sponsored by Artificial Solutions AB.</p>
<h3>Functional improvements</h3>
<ul>
<li>User authentication for HTTP introduced</li>
<li>Re-integration of targeting and minimal targeting tool (from Program dB)</li>
<li>Ability to use Program D <i>without</i>a database</li>
<li>much closer to AIML 1.0.x compliance, and additions to test cases to verify same</li>
<li>Ability to specify substitutions (including those for person, person2 and gender)
externally</li>
<li>XML logging of chat conversations</li>
<li>Ability to use different templates for Responders</li>
<li>better handling of character encodings for AIML files, HTML templates and http servlet</li>
<li>Proper support of patterns in condition/li value attributes</li>
<li>Big speed improvement for AIML loading, and for matching</li>
<li>Logging format regularized (and used more than before)</li>
<li>Much more configurable (see server properties)</li>
<li>Ability to prohibit use of <system> and/or <javascript> tags</li>
<li>Ability to deny support of deprecated AIML 0.9 tags</li>
<li>Potential to use http server of choice</li>
</ul>
<h3>Code improvements, changes</h3>
<ul>
<li> Source code cleanup (all but a few files) <ul>
<li>formatting standardized, grammar fixed</li>
<li>imports made explicit and cryptic variables renamed</li>
<li>complete javadoc on nearly all classes & variables</li>
</ul>
</li>
<li>some design improvements (more use of interfaces, less duplicated code)</li>
<li>less fixed dependence on non-GPL code (Jetty is removed to a jar file, no longer mixed in
with org.alicebot code)</li>
<li>some improvements to AIMLReader -- still not a "real" XML parser, but it's faster than
anything else -- now there's less duplicated code</li>
<li>similar comment for AIMLParser -- it also has "pluggable" processors</li>
</ul>
<h2>
<a id="v4.1.2">4.1.2</a>
</h2>
<p> Finally it's here -- the final reference version of Program D! Big thanks to Tom and Pedro,
who have taken upon themselves the difficult task of bringing the reference implementation as
close to the AIML 1.0 specification as possible. Their work has finished now -- the server is
fully under the GPL, and you can safely use version 4.1.2 as a reference base for further
development. If it's good, your work may even be incorporated into the next release!<br/>
-Kim, Tom and Pedro</p>
<ul>
<li>Targetting has been temporarily disabled </li>
<li> Code changes/fixes <ul>
<li>Cleaned up the logs directory</li>
<li>Removed unused classes from server.* scripts</li>
<li>AIMLWatcher now optional</li>
<li>Multiple wildcards support in pattern matching</li>
<li>Fixed topic bug from 4.1.1</li>
</ul>
</li>
<li> Tag changes/fixes <ul>
<li><topicstar> <thatstar> and <star> support
multiple wildcards too</li>
<li><get> can now optionaly return a default value in case the variable is
not set</li>
<li>removed <if> tag</li>
<li>removed 'src' attribute from <gossip> tag</li>
</ul>
</li>
<li>server.engine.emtpydefault="" specifies the 'default' default return value for undefined
bot properties and variables</li>
<li> bot loading/startup has been modified & moved to a simple xml file: <ul>
<li> recognized tags for startup.xml: <ul>
<li><xml></xml></li>
<li><learn></learn></li>
<li><property/></li>
</ul>
</li>
<li>ONLY ONE TAG per line please</li>
</ul>
</li>
<li>Logging of empty user inputs added</li>
</ul>
<h2>
<a id="v4.1.1">4.1.1</a>
</h2>
<p> Another update of the reference version by Thomas Ringate and Pedro E. Colla. It features a
rewrite of the template parser, support for stack variables, re-added some lost features
(scripting, substitutions). The way bot properties are handled also changed. For instructions
on how to set up the server, see _readme.txt.<br/> - Kim, Tom and Pedro</p>
<ul>
<li> Code changes/fixes <ul>
<li>Parser rewritten (AIMLParser.java), now fully recursive</li>
<li>License text provided by Noel Bush on all modified code.</li>
<li>Official Copyright notice added.</li>
<li>Server starting message (previously in SERVER.BAT).</li>
</ul>
</li>
<li> Tag changes/fixes <ul>
<li><if></if> full implementation ---> according with
archcomm discussions</li>
<li><person> <person2> <gender> substitutions</li>
<li><javascript> implemented (like <script> in ProgramD
baseline).</li>
<li>Normalize the arguments before <srai> on them.</li>
<li>Solved sequencing problem at load time that prevented the simultaneous usage of the
<learn></learn> and <load filename="XXX"/>
forms.</li>
<li>Some template tags are processed at load time, rather than just at processing time</li>
<li>Bot properties are now defined as <property name="property"
value="value"/>, the previous mechanism of <pattern>BOT
propertyname</pattern> categories has been removed</li>
<li>Fixed a bug where AIML tags inside a <condition> were evaluated only
when enclosed in <li></li> and otherwise ignored.</li>
<li>Made the value comparisson of <if>, <condition> and
<li> case insensitive.</li>
</ul>
</li>
<li> Variable handling <ul>
<li> Stack variables <ul>
<li><input index="N"/> implemented up to 5 levels of depth.</li>
<li><that index="N,M"/> implemented up to 5 levels of depth. The 2nd
index M is ignored.</li>
</ul>
</li>
<li>When the bot is started all TOPIC properties of all IP's are set to the default one
("").</li>
</ul>
</li>
<li>Change the name of the bot from the directory where the AIML is into the property name
(<bot name="name"/>).</li>
<li>Modified legend on HTML template</li>
<li> Logging & output <ul>
<li>Remove the <br/> on console output (replace it by CRLF) if debug=false</li>
<li>Normalization of eol (LF vs. CRLF) on chat.log (blank lines with WordPad).</li>
<li>Blank lines removed from chat.log logging.</li>
</ul>
</li>
</ul>
<h2>
<a id="v4.1.0">4.1.0</a>
</h2>
<p> This is the 'reference' version Thomas Ringate and Pedro E. Colla have been working on. It
is intermediate work in progress, with the goal to make Program D AIML 1.0 compliant.
Currently, in version 4.1.0 ref, the support for AIML 1.0 is partial and achieved thru quick
fixes. For the most part, AIML 0.9 is yet supported.</p>
<p> Don't use this release as a base for further development, there will yet be major changes in
the code. The next release 4.1.1 will hopefully adress the above issues within the next 2
weeks.<br/> -Kim, Tom and Pedro</p>
<ul>
<li>change "localhost" legends to actual IP number.</li>
<li>IO checking added when files are non-existent or empty</li>
<li>std-bot.aiml must be loaded before any other AIML file if bot properties other than
<bot name="name"/> are used on the pattern side.</li>
<li>Fixed <if> handling (all parameters and <else/> should work
correctly)</li>
<li>Fixed <condition> - now supports all three forms</li>
<li><sentence> now spelled correctly, as well as other occurences of this typo</li>
<li><that/> returns uppercase.</li>
<li>Fixed error when AIML file contains XML empty <aiml .. /> tag.</li>
<li> Added AIML 1.0 compliant variable tags <ul>
<li><get/></li>
<li><bot/></li>
<li><set></set></li>
</ul>
</li>
<li> Implemented the non-brainer AIML 1.0 tags <ul>
<li><id/></li>
<li><size/></li>
<li><version/></li>
<li><date/></li>
</ul>
</li>
<li> Added partial support for indexed variables (return blanks when index out of bounds). The
index may be ommited, in which case it defaults to "1". <ul>
<li><input index="N"/> N=1,2,3</li>
<li><star index="N"/> N=1</li>
<li><thatstar index="N"/> N=1</li>
<li><topicstar index="N"/> N=1</li>
<li><that index="N,M"/> N=1,2 M is ignored</li>
</ul>
</li>
<li> Commented out non standard AIML tags <ul>
<li><os/></li>
<li><typeof_/></li>
<li><display></display></li>
<li><add_xxx></li>
<li><decode></decode></li>
<li><encode></encode></li>
<li><log></log></li>
<li><timer></timer></li>
<li><nql></nql></li>
<li><event></event></li>
<li><face></face></li>
<li><log></log></li>
<li><random_xxx/></li>
<li><login/></li>
<li><logout/></li>
<li><register/></li>
</ul>
</li>
</ul>
<h2>
<a id="v4.0.2">4.0.2</a>
</h2>
<p> Now comes WITHOUT any AIML, you must install an aiml set manually and configure it in the
SERVER.properties file (pointers are in the bots/readme.txt file), otherwise you will get a
'FileNotFoundException'. You can get some AIML files (as well as the latest server release)
here:<br/> http://www.alicebot.org<br/> ftp://ftp.alicebot.org/pub/builds<br/> -Kim</p>
<ul>
<li>Finally, the release system in the CVS works (yipee!) -> even small updates are
easy to release -> possibly regular updates</li>
<li>Fixed buggy CVS entries that prevented .bat files from running smoothly</li>
<li>Code cleanup (Mark Anacker)</li>
<li>now the server.engine.startup property works</li>
<li>Note - the server is not yet 1.0 compliant so the newest AIML files may not work, try
using the 1.0.0 release</li>
</ul>
<h2>
<a id="v4.0.1">4.0.1</a>
</h2>
<p> First release out of the CVS, included Jon Baer's AIML set.<br/> -Kim</p>
<ul>
<li>New run.bat to simplify startup</li>
<li>Cleanup of source, unused libraries and miscellaneous files</li>
<li>compiles 'out of the box'</li>