1Revision history for Hailo
2
30.75 2018-11-28 12:08:58
4
5    - In 0.73 we very aggressively put "use v5.28.0" without any
6      need. My bad. It's now "v5.10.0" again. Also in a fit of "let's
7      just use the latest" all the dependencies were pinned to
8      whatever was the latest on the author's machine in that release,
9      now they're all back to "0".
10
11      Some stuff may break due to older CPAN modules, but let's just
12      find that out as we go.
13
140.74 2018-11-28 00:26:12
15
16    - Fix missing test dependency on Pod::Section.
17    - Use MooseX::Types::Moose internally.
18    - Remove a bunch of missing Mouse things from docs / script code /
19      build system.
20
210.73 2018-11-27 13:53:39
22
23   - Fully use Moose instead of now deprecated Any::Moose.
24
250.72 2013-12-01 17:06:55
26
27    - Our tests have been broken on perl 5.19.* (soon to become
28      5.20.*) for a while because of the new warnings about given/when
29      being experimental, which would fail one of the tests where we
30      weren't expecting extra output when testing our command-line
31      invocation.
32
33      But the whole use of given/when and ~~ in the codebase was just
34      a stupid youthful indiscretion, those features of perl suck,
35      this release kills all uses of them with fire in favor of just
36      using if/elsif and =~, which is all we used them for anyway.
37
380.71 2013-11-29 00:40:38
39
40    - Super minor release, just docs and nuking an old developer
41      script that wasn't even in the CPAN tarball.
42
43    - Bump README.pod with new content from lib/Hailo.pm's POD.
44
45    - Remove unused script that used Class::MOP to close RT #91029
46      ("New Moose may break your code")
47
480.70 2011-09-18 19:15:17
49
50    - When using --train-fast, remove the "flushing cache" message when done
51
52    - Word tokenizer:
53        * Improve tokenization of email addresses
54        * Use backspace instead of escape as a magic character when
55          capitalizing text in multiple passes, since it's less likely to
56          appear in tokens.
57        * Preserve casing of words like "ATMs"
58
590.69 2011-05-07 04:02:38
60
61    - Scored engine: Prefer shorter replies, like MegaHAL/cobe do
62
63    - Word tokenizer:
64        * Improve matching/capitalization of filenames and domain names
65        * Match timestamps as single tokens
66        * Match IRC nicks (<foobar>, <@foobar>, etc) as single tokens
67        * Match IRC channel names (#foo, &bar, +baz)
68        * Match various prefixes and postfixes with numbers
69        * Match "#1" and "#1234" as single tokens
70        * Match </foo> as a single token
71
72    - Depend on MouseX::Getopt 0.33 to fix test failures
73
740.68 2011-05-03 13:16:05
75
76    - Speed up the learning of repetitive sentences by caching more
77
78    - Added Hailo::Engine::Scored, which generates multiple replies (limited
79      by time or number of iterations) and returns the best one. Based on
80      code from Peter Teichman's Cobe project.
81
82    - Fixed a bug which caused the tokenizer to be very slow at capitalizing
83      replies which contain things like "script/osm-to-tilenumbers.pl"
84
85    - Speed up learning quite a bit (up to 25%) by using more efficient SQL.
86
87    - Add --train-fast to speed up learning by up to an additional 45% on
88      large brains by using aggressive caching. This uses a lot of memory.
89      Almost 600MB with SQLite on a 64bit machine for a brain which
90      eventually takes 134MB on disk (trained from a 350k line IRC log).
91
92    - Word tokenizer:
93        * Preserve casing of Emacs key sequences like "C-u"
94        * Don't capitalize words after ellipses (e.g. "Wait... what?")
95        * When adding a full stop to paragraphs which end with a quoted word,
96          add it inside the quotes (e.g. "I heard him say 'hello there.'")
97        * Make it work correctly when the input has newlines
98
990.67 2011-04-27 23:33:08
100
101    - Word tokenizer: Improve matching of Perl class names
102
103    - Require MooseX::StrictConstructor 0.16 for Moose 2.0 compatibility
104
1050.66 2011-04-27 07:37:45
106
107    - Die when the user tries --stats without a brain
108
109    - Word tokenizer: stopped matching numbers separately in many cases.
110      "95GB", "3D", "800x600" are all single tokens now. This should reduce
111      the volume of nonsensical word-number pairs in the output.
112
1130.65 2011-04-26 19:28:27
114
115    - Expand "~" and such in the brain filename argument.
116
117    - Word tokenizer:
118        * Recognize "e.g." and other abbreviations as single tokens.
119        * Recognize '–' as a word-separating dash.
120        * Put a full stop after words separated by dots, like "sources.list".
121        * Fix capitalization problems caused by "..."
122        * Capitalize "foo!" and "foo."
123        * Preserve casing of words such as "POE-Component-IRC"
124        * Catch "Acme::POE::Tree" as one word, and preserve its casing
125        * Catch "rollin'" as one word when it makes sense
126        * Catch 'foo-" as one word when it makes sense, and capitalize at
127          start of a sentence
128        * Capitalize quoted words at the start of a line
129
130    - The --help option didn't work with Moose >=1.25 (RT #67548). Fixed.
131
1320.64 2010-12-10 11:09:08
133
134    - Say "X lines of Y" instead of "X of Y" when training with
135      hailo(1).
136
137    - Bump README.pod in the distro to 0.59~1
138
1390.63 2010-12-09 09:03:30
140    - Mark the failing tests in t/command/shell.t as TODO for now.
141
1420.62 2010-12-06 03:30:07
143    - Really fix t/command/shell.t this time. I had the arguments to
144      the test function in the wrong order.
145
1460.61 2010-12-03 06:47:22
147
148    - Use Class::Load instead of Class::MOP::load_class and eval'd require()
149
150    - Fix rare test failure in t/command/shell.t
151
1520.60 2010-11-09 01:35:49
153
154    - Match email addresses and don't capitalize them
155
156    - Don't insert additional spaces in some parsing edge-cases
157
1580.59 2010-10-23 21:20:22
159
160    - Word tokenizer: Match combining characters in words on Perl >=5.12
161
1620.58 2010-10-22 03:34:08
163
164    - Forgot to remove "use Text::Unidecode;" from Words.pm after dropping
165      that dependency in the previous release.
166
167    - Skip utf8-text.t on Perl <5.12 due to differences in Unicode matching.
168
1690.57 2010-10-21 01:25:09
170
171    - Fix typo in Schema.pm which messed up the type of the token.text
172      SQL column (only relevant to non-SQLite DBs)
173
174    - More robust matching of non-word immediately following URIs
175
1760.56 2010-10-18 05:15:10
177
178    - Add Test::Expect and Test::Synopsis to TestRequires
179
180    - Use YAML::XS in utf8-text.t for clarity, and make the test
181      optional.
182
1830.55 2010-10-16 17:58:00
184
185    - Scrap the "normal word" matching constraint from the previous release.
186      It was failing to match words like "4.1GB", causing an infinite loop.
187      Instead, we now assign different spacing attributes to components of
188      conjoined words of varying types (e.g. recognizing that "4.1GB" is a
189      normal word ("4.1") followed by a postfix ("GB").
190
191    - Don't match '>' as part of the URI in "<http://google.com>".
192
1930.54 2010-10-16 10:10:19
194
195    - Fix the previously broken `save_on_exit' so that it does what
196      it's supposed to do.
197
198      The `save_on_exit' option in Hailo.pm never worked, and nor did
199      hailo's corresponding --autosave option. Fixed that by
200      correcting some method name confusion, and solved a BUG by
201      finally adding a test for this option.
202
2030.53 2010-10-15 21:29:02
204
205    - hailo command: Fix off-by-one error when reporting the number of lines
206      learned when training.
207
208    - Don't truncate the brain file after loading it with in_memory enabled.
209
210    - Word tokenizer improvements:
211      * Recognize "´" as an apostrophe when matching words.
212      * Recognize a compound word like "anti-scientology" as a single word.
213      * Put additional constraints on where a "normal word" can be matched.
214        This enables it to match things like "3D" and "800x600" as single
215        words.
216      * Fix capitalization of words after sentences which end with dashed
217        words like "anti-scientology".
218      * Convert chunks to ASCII before looking for a URI to work around a
219        limitation in Regexp::Common.
220      * Recognize ssh:// (and foo+ssh://) URIs.
221
2220.52 2010-07-18 22:40:02
223
224    - Hailo no longer passes references to itself to its slave
225      classes, so it's garbage collected at the right time.
226
227      This bug broke the hybrid disk <-> in_memory SQLite mode, it's
228      now fixed again. The test that was supposed to check whether the
229      hybrid in-memory backend worked did the opposite of what it was
230      supposed to do, and didn't work anyway due to how it was set up.
231
232    - Giving arguments to Hailo's save method (they're passed to the
233      Storage class) never worked due to a trivial error. Now it does.
234
2350.51 2010-07-18 15:49:41
236
237    - Bump dependencies for all modules to the latest CPAN
238      versions. This avoids the issues Moose had with I<Can't locate
239      object method "add_method" via package "Moose::Meta::Role">, and
240      various other problems that might be present in older modules.
241
242    - MooseX::Getopt renames its help attribute to help_flag in
243      0.30. That broke hailo --help, work around it by checking if the
244      help_flag attribute exists in
245      any_moose('X::Getopt::GLD')->meta->get_attribute_list. By
246      checking we'll also be compatible if Mouse ever switches to the
247      new system.
248
249    - Mouse now supports MouseX::StrictConstructor, so we can delete
250      code that only used it if we were running under Moose.
251
252    - Put bin/hailo in package hailo, because Moose will whine about
253      not exporting sugar to main.
254
2550.50 2010-05-30 12:44:25
256
257    - Hailo hadn't been installed with the hailo command-line script
258      since release 0.34. Now it's built with MakeMaker::Awesome 0.08
259      with fixes this error.
260
261    - Fix the script compilation test in t/01_compile.t. Test::Script
262      renamed its script_compiles function to script_compiles_ok.
263
2640.49 2010-05-29 19:20:26
265
266    - Term::Sk fixed RT #57902 and RT #57903 which I reported. hailo's
267      progress bar now looks better as a result.
268
2690.48 2010-05-29 15:16:18
270
271    - The hailo(1) command-line interface now has a much better
272      interface. It now supports SQLite-like command syntax, and has a
273      built-in help system.
274
275    - Replace fortune(1) in hailo's --examples output with bot-training(1)
276
2770.47 2010-05-29 13:08:51
278
279    - Optimize Hailo::Tokenizer::Words to use less subroutine calls in
280      critical code. Changed the time being spent in that file from
281      5.14s to 3.72s out of a total runtime of 35.6s when running
282      t/hailo/real_workload.t.
283
284    - The initial tokenizer class is now saved as metadata to the
285      database, and loaded into Hailo from existing brains.
286
287      This means that this now works as expected:
288
289          hailo --brain db.sqlite --tokenizer Chars --train file.trn
290          hailo --brain db.sqlite --reply foo
291
292      I.e. Hailo will note that it used the Chars tokenizer in the
293      database, and load the correct tokenizer in the future. However
294      this will cause Hailo to die:
295
296          hailo --brain db.sqlite --tokenizer Chars --train file.trn
297          hailo --brain db.sqlite --tokenizer Words --reply foo
298
299      It spots that you've explicitly said you want a tokenizer that's
300      incompatible with the one in the database for doing replies and
301      dies. This is what it did before if you did the exact same thing
302      with the --order switch.
303
304    - Rename tests file in t/ to drop the DBD- prefix. Tests like
305      Words-*.t are were also moved into
306      sub-directories. e.g. Words/*.t.
307
3080.46 2010-05-27 22:47:45
309
310    - The Regexp::Common pattern added in 0.44 slowed down Hailo by up
311      to 45% in pathological cases (tests doing lots of
312      tokenization), overall test suite slowdown was closer to 10%.
313
314      Now the pattern is only compiled once for the lifetime of the
315      process with /o. This trick has also been applied to a few other
316      patterns.
317
3180.45 2010-05-27 19:56:31
319
320    - The regular expression introduced in 0.44 to check if a word was
321      of MiXeD CaSe was pathological. Changed it to a simpler one that
322      works better.
323
324    - The --no-progress option to hailo to suppress the progress bar
325      now works again. It had been broken since 0.26 at least.
326
3270.44 2010-05-27 15:55:30
328
329    - Removed the backwards-compatible "Pg" and "mysql" aliases for
330      the storage backends and the "DBD::" prefix. This use has been
331      deprecated since 0.31. Simply use "PostgreSQL", "MySQL" or
332      "SQLite" instead.
333
334    - This release contains improvements for the default Words
335      tokenizer. It's recommended that users rebuild their Hailo
336      brains when upgrading. See UPGRADING in the Hailo manual.
337
338      - Add URI support to the Words tokenizer. It will now use
339        Regexp::Common's URI regex to tokenize URIs as-is.
340
341        This improves performance a lot on input that contains URIs,
342        previously Hailo would split them up nonsensically, which
343        would inflate the token table a lot with little gain.
344
345      - Preserve the capitalization of words that change case in the
346        middle of the word. Examples include GumbyBRAIN, WoW, HoRRiBlE
347        etc. Previously these and others that weren't 100% upper-case
348        would all be lower cased.
349
350      - Preserve the capitalization of words that are all upper-case
351        followed by a non-word character followed by lower-case. This
352        preserves words like KIA'd, FYIQ'ed and other things that are
353        likely to be partial acronyms.
354
355      - Twitter names. I.e. tokens matching @[A-Za-z0-9_]+ will be
356        tokenized as-is. This ensures that Hailo users like
357        Bot::Twatterhose don't corrupt their Twitter names.
358
359      - Eliminate some redundant use of the regex engine in the Words
360        tokenizer.
361
362    - Include --help in bin/hailo's POD. It's now easier to read it
363      standalone, and `man hailo' has the same info as `hailo --help`.
364
365    - The utils/hailo-benchmark script had been broken for some time
366      due to a trivial API change in Hailo::Test. Now it works again.
367
368    - Stop pointing to the GitHub issue tracker in the
369      documentation. We now use RT instead.
370
3710.43 2010-05-11 19:54:36
372
373    - Tests failed on 0.42 without Test::Synopsis due to invalid test plan.
374
375    - Don't test with both Mouse and Moose on Windows. Failed with
376      Strawberry Perl + dmake, see report
377      07242729-b19f-3f77-b713-d32bba55d77f.
378
379    - Skip t/storage/001_meta/switch-order.t on OpenBSD where it's
380      known to fail, see report 07172161-b19f-3f77-b713-d32bba55d77f.
381
3820.42 2010-05-10 21:26:45
383
384    - Hailo should now work on Windows. Dependency on two modules that
385      had Windows failures in their dependencies has been dropped.
386
387    - Remove Term::ProgressBar dependency, use Term::Sk
388      instead. Unlike Term::ProgressBar it doesn't depend on
389      Class::MethodMaker and Term::ReadKey. Those contributed a lot to
390      our failures on Windows.
391
392    - Don't hard depend on Test::Expect. It depends IO::Tty which does
393      not work under any version of Windows, except under Cygwin (it
394      calls fcntl(*fd, F_DUPFD, 3)).
395
396    - Remove Test::Synopsis dependency. It depends on
397      Filter::Util::Call which had some failures. Now only used if
398      it's installed on the system already.
399
400    - Remove MouseX/MooseX::Types dependency. We don't use any of the
401      fancy type features, so there's no point in using this.
402
4030.41 2010-04-23 00:24:24
404
405    - Don't (optionally) use Sys::Prctl on Perl 5.13.0 and above. It
406      was made redundant in perl core commit 7636ea95c5 by yours
407      truly.
408
409    - A script to benchmark Hailo on different locally installed
410      perls.
411
412    - Correct test count for TEST_EXHAUSTIVE.
413
414    - Update HALBot on the Web link to http://bifurcat.es
415
4160.40 2010-04-13 15:10:23
417
418    - Add --reply-random to the hailo command-line interface. Allows
419      command-line babbling at random.
420
421    - Improved formatting for --train on the command line. Now outputs
422      how many lines/s were trained, e.g. "Trained from 11587 lines in
423      36.97 seconds; 313.40/"
424
425    - Fixed a bug on Mac OS X and probably some other
426      systems. Previously the SQLite code would assume that a file
427      that was `-s $file' was an empty database.
428
429      On Mac OS X these files weren't 0 byte but 1 byte files. Route
430      around this entire issue by creating a new API (->initialized)
431      that checks if the schema has really been created by doing a
432      query on the info table.
433
434    - Solved bug in the t/storage/DBD-SQLite-memory/babble.t test. The
435      test was skipped due to intermittent failures. Failures were due
436      to a programming error in the tests.
437
438    - DBD-SQLite-file-exhaustive-all.t is now run on
439      TEST_EXHAUSTIVE_ALL=1. Previously this test was unreachable.
440
441    - Add example utility to spew random names in random-names.
442
4430.39 2010-04-09 13:21:22
444
445    - Set the homepage field in META.yml to http://hailo.org
446
447    - Add TODO tests for the Words tokenizer. There are some
448      sub-optimal capitalization behaviors we'd like to fix.
449
450    - Use Prereq phases in Dist::Zilla. Hailo will have proper
451      Runtime/Test/Recommends dependencies when META.yml 2.0 comes
452      out.
453
4540.38 2010-04-03 18:15:17
455
456    - Clean up the code in Hailo::Engine::Default. It's now easier to
457      read and doesn't have duplication.
458
459    - Depend on IPC::System::Simple. Used by autodie to run
460      utils/hailo-benchmark-lib-vs-system
461
462    - Link to http://hailo.org and the freshmeat and ohloh pages for
463      hailo.
464
4650.37 2010-03-31 14:28:46
466
467    - Very minor release. Switch to using
468      Dist::Zilla::Plugin::MakeMaker::Awesome for the build tools.
469
4700.36 2010-03-29 00:15:35
471
472    - Add a test to try to smoke out a test failure we've been having
473      for a while. See the commit message for
474      21f68bd79d2fc59505887311042d6d16c5cf79dd for a very long and
475      boring explanation.
476
4770.35 2010-03-27 21:27:33
478
479    - The error "You've manually supplied an order of" error message
480      was always incorrect. It contained variables that weren't being
481      interpolated.
482
483    - Move some of our test data into the new Bot::Training dist.
484
485    - Fix 'v-string in use/require non-portable' warnings from a osx
486      smoker by using 5.010 instead of 5.10.0.
487
4880.34 2010-03-20 23:26:27
489
490    - Reword the UPGRADING section in Hailo's POD to be less
491      confusing.
492
493    - Die if the user manually specified an order that isn't
494      equivalent to the existing database he's loading from.
495
496    - Hailo now uses CPAN's RT as its default bugtracker instead of
497      GitHub's issue tracker. RT sucks but at least we can get at our
498      issues using something that isn't a web interface if we use RT.
499
500    - Link to our new website at http://hailo.github.com and mention
501      the Hailo web interface at http://www.dhdo.org in the POD.
502
503    - Enforce arguments being HashRef[Str] (instead of just HashRef)
504      in Hailo::Role::Arguments.
505
506    - Code cleanup in Hailo.pm to remove duplication.
507
5080.33 2010-03-20 01:57:33
509
510    - Optimize Hailo::Engine::Default to use less method calls. On
511      t/hailo/real_workload.t (i.e. mass replies) this speeds up Hailo
512      by 8%:
513
514                         s/iter System Hailo    lib Hailo
515            System Hailo   74.8           --          -7%
516            lib Hailo      69.4           8%           --
517
518      Furthermore replace the use of ->fetchall_hashref in a tight
519      loop with ->fetchall_arrayref. This sped up mass replies by
520      almost 60% (added to the 8% above):
521
522                         s/iter System Hailo    lib Hailo
523            System Hailo   68.2           --         -36%
524            lib Hailo      43.6          57%           --
525
526      But aside from selective benchmarking this made Hailo around 5%
527      faster in the common case:
528
529                         s/iter System Hailo    lib Hailo
530            System Hailo   21.5           --          -6%
531            lib Hailo      20.3           6%           --
532
5330.32 2010-03-19 12:00:22
534
535    - t/storage/dbd-options.t wasn't updated to take into account the
536      renaming of modules done in 0.31. It would fail on machines that
537      didn't have an older version of Hailo installed when running
538      `make test'.
539
540    - t/hailo/non_standard_plugin.t whines with `Issuing rollback()
541      due to DESTROY without explicit disconnect()' on some systems
542      since it doesn't use the Hailo::Test framework.
543
544      Issuing rollbacks at the right time is an open issue with
545      Hailo. I haven't been able to make it do the right thing by
546      sprinkling around destructors in the main code, that'll cause
547      things to be destroyed prematurely (probably some silly race
548      condition).
549
550    - Re-add Data::Section dependency. We need it for the
551      Words-utf8-text.t test.
552
5530.31 2010-03-18 21:45:25
554
555    - Optimization and cleanup release. Hailo is now much much
556      snappier and eats less memory. Here's how long it takes to run
557      the test suite before/after 0.30:
558
559                      s/iter   0.30 Hailo    0.31 Hailo
560        0.30 Hailo      20.2           --          -16%
561        0.31 Hailo      16.9          19%            --
562
563    - Split out Hailo::Storage::* into Hailo::Engine::* and
564      Hailo::Storage::*. This makes it possible to write pluggable
565      engines again (that ability was removed in 0.09). It's the
566      intent to write a XS version of the Default engine to make Hailo
567      even faster.
568
569    - In addition the storage backends have been moved
570      around. Hailo::Storage::DBD is now just Hailo::Storage and
571      DBD::Pg, DBD::mysql and DBD::SQLite are now directly under the
572      Hailo::Storage namespace as Hailo::Storage::PostgreSQL,
573      Hailo::Storage::MySQL and Hailo::Storage::SQLite.
574
575      For now "Pg" and "mysql" as short names for the storage backends
576      are supported for backwards compatability but this support may
577      be removed in a future release.
578
579    - Rather than use the ad-hoc Data::Section + Template::Toolkit way
580      of generating our SQL just use an ugly pure-perl-based class.
581
582      Hailo now uses ~7.2MB of memory when starting up & replying
583      rather than ~10MB as it did before. The startup time is also
584      reduced from around 250ms to 140ms.
585
586      See http://blogs.perl.org/users/aevar_arnfjor_bjarmason/2010/03/benchmarking-dbixclass-vs-plain-dbi-on-hailo.html
587      for some of the other things that I tried before settling
588      on this hack.
589
590    - Don't manually use SQLite's `SELECT last_insert_rowid()' or
591      PostgreSQL's `INSERT ... RETURNING' in the engine. Instead use
592      DBI's `last_insert_id()' which uses those two automatically.
593
594    - Ditch Module::Pluggable: Hailo now can only load one of its
595      hardcoded core modules as a plugin or alternatively a foreign
596      module if it's prefixed with + before the module name. See
597      Hailo's main documentation for more info.
598
599    - Fix incorrect SYNOPSIS examples in the documentation for the
600      PostgreSQL, SQLite and MySQL backends.
601
6020.30 2010-03-15 15:18:01
603
604    - Don't set EXLOCK on temporary files we create. This completely
605      broke Hailo tests on platforms like FreeBSD which aren't as
606      promiscuous as Linux about file locking.
607
608    - Use Dir::Self in hailo/Hailo::Command to work around the 0.29
609      bug in t/command/shell.t on some platforms like FreeBSD where
610      IPC3::Run calling a script that called FindBin didn't work
611      as expected.
612
613    - Add more testing including a really basic test for DBIx::Class
614      debugging (from the dbix-class branch) and making TAP output
615      more verbose.
616
617    - Run all the tests Hailo::Test runs internally for each engine
618      one-by-one using the DBD::SQLite memory driver. This makes sure
619      the internal tests don't depend on each other in odd ways.
620
6210.29 2010-03-13 10:32:43
622
623    - Remove Data::Random as a dependency. It fails the most tests of
624      all the dists we depend on and we don't really need it for
625      anything.
626
6270.28 2010-03-13 10:05:57
628
629    - Update README.pod which hadn't been bumped since 0.25
630
631    - Fix example in Hailo.pm's SYNOPSIS that didn't work and add an
632      example for a bare ->reply().
633
634    - Fix some code perlcritic whined about.
635
6360.27 2010-03-13 09:41:46
637
638    - Stop depending on Term::ReadLine::Gnu and use Term::ReadLine
639      instead. I tested Term::ReadLine once and found that it was
640      really bad (no history, C-p, C-n etc.) but now with
641      PERL_RL='Perl o=0' everything's magically awesome in it.
642
643      Term::ReadLine::Gnu was the #1 cause of our test failures so
644      it's good not to depend on it.
645
646      Also only set PERL_RL if it isn't set already.
647
6480.26 2010-03-13 08:04:32
649
650    - Split the X::Getopt parts of Hailo into Hailo::Command. This way
651      the speed / memory penalty of loading all the command-line
652      related modules is only applicable if running the command-line
653      interface. using Hailo takes 1MB less memory now and loads a
654      total of 56 modules instead of 74.
655
656    - Due to the split it was possible to rename the `brain_resource'
657      attribute to `brain'. The former is still provided for backwards
658      compatibility.
659
660    - A lot of miscellaneous cleanups in the code made possible by
661      splitting the core of Hailo from the command line UI.
662
663    - DEMOLISH was broken. it would build storage objects during
664      global destruction if they didn't exist.
665
666    - Add --examples switch to be used as --help --examples, examples
667      are now not part of --help by default since they took up most of
668      the terminal & obscured the option help output.
669
670    - A lot has been changed in the test suite. Below is a partial
671      summary:
672
673    - Test the ->run method in Hailo::Command completely. Previously
674      only a subset of its functionality was tested. The only thing
675      that isn't tested completely is the invocation of
676      Hailo::UI::ReadLine via ->run.
677
678    - Completely test the ->train and ->learn methods and make
679      ->learn() die on unknown input like HashRefs.
680
681    - Test the --help output.
682
6830.25 2010-03-12 17:45:42
684
685    - Improved documentation of the Tokenizer role and the DBD class
686
687    - Added more tests for the ReadLine UI
688
689    - Always run the Test::Script::Run tests
690
6910.24 2010-03-12 01:38:56
692
693    - Repository metadata was wrong due to RT#55136 in
694      Dist::Zilla::Plugin::Repository
695
696    - Add some very exhaustive tests for the storage engine. This
697      brings our test coverage up to 94.1% up from 92.5%. The tests
698      aren't run by default to to the time they take.
699
700    - Capitalize the first word of /^but...no/
701
7020.23 2010-03-11 20:08:27
703
704    - Increase test coverage, coverage is now up to 92.5%
705
706    - Random reply tests were disabled for MySQL for no
707      reason. They're now enabled.
708
709    - Rewording the Hailo UPGRADE section
710
711    - Re-arrange the Storage::DBD* code to be more Moosy and use roles
712      as they should be used
713
714    - Remove dead test code in Hailo::Test that was used for flat hash
715      backends who couldn't generate random replies
716
717    - Test the ->ready() storage method on all backends as part of
718      Hailo::Test
719
720    - Test Hailo::stats() on all backends as part of Hailo::Test
721
722    - Test the bin/hailo script directly if Test::Script::Run is
723      available.
724
7250.22 2010-03-10 08:46:54
726
727    - A Bug in Dist::Zilla ruined 0.21. The unpacked tarball contained
728      home/avar/g/hailo/Hailo-0.21 instead just Hailo-0.21 at the top
729      level.
730
7310.21 2010-03-09 18:25:46
732    - Word tokenizer: Various improvements to capitalization
733    - Use Sys::Prctl to set legacy process name under Linux
734    - Added documentation about upgrading Hailo
735    - Hailo now uses Dist::Zilla instead of Module::Install to build
736      releases
737
7380.20 Sun Feb 28 00:29:32 GMT 2010
739
740    - Use Mouse instead of Moose by default but depend on both of
741      them.
742
743      This saves about 8MB of resident memory bringing Hailo's memory
744      usage with SQLite from 28MB to 20MB. Startup time is also
745      reduced with the test suite running around 46% faster.
746
747    - Run tests with Moose and Mouse during `make test`
748
749    - Drop MouseX::Role::Strict / MooseX::Role::Strict. Spotted when
750      switching to Moose but mainly we just didn't care about using
751      it.
752
753    - Word tokenizer: Improve punctuation when words are split with '/'
754
7550.19 Sat Feb 27 04:23:03 GMT 2010
756    - Move File::Slurp from 'requires' to 'test_requires'
757
758    - Make the default pragma logic a bit simpler
759
760    - MySQL backend: Don't make host a required storage_args argument,
761      MySQL will use localhost by default.
762
763    - MySQL backend: Document collation settings that have to be right
764      for Hailo not to blow up.
765
766    - Fix some capitalization/punctuation issues of words with dashes/quotes
767
768    - A new hailo-benchmark-replies utility and documentation in
769      Hailo.pm about its results.
770
7710.18 Fri Feb 26 05:02:17 GMT 2010
772
773    - Don't keep the brain in memory by default anymore, but enable some
774      safety-sacrificing performance optimizations instead
775
776    - DBD::SQLite backend: It's now possible to set any PRAGMA SQLite
777      supports at the start of the connection by supplying C<pragma_*>
778      parameters in in C<storage_args>. See
779      Hailo::Storage::DBD::SQLite documentation for more info.
780
781    - Issue #28: Implement a ready() method for backends. This
782      un-breaks the command-line interface with non-SQLite backends.
783
784    - Word tokenizer: Fix capitalization of the first word in some cases
785
786    - Add more exhaustive tests for the Word tokenizer.
787
788    - Un-break t/storage/DBD-mysql.t test
789
790    - Never test PostgreSQL / MySQL unless explicitly told to do so.
791
7920.17 Tue Feb 23 04:06:50 GMT 2010
793    - Remove all storage engines that weren't DBD::*. I.e. the Perl
794      backend and the flat Perl::Flat & CHI::* backends.
795
796      These backends were added to experiment with alternate backends,
797      but between them they had no redeeming quality aside from
798      increasing our number of backends & tests. The downside is that
799      we constantly had to deal with errors in these backends that
800      weren't present in our primary DBD::* targets.
801
802    - Remove Log::Log4perl. We weren't using it for anything except
803      printing one log line. Maybe we'll add it in the future with
804      proper support. See Issue #15.
805
806    - Hailo now uses less memory by lazy-loading various modules that
807      it previously loaded even if they were redundant.
808
809    - Issue #12: --not-a-valid-option now prints the same help output
810      --help would. MooseX::Getopt::Basic is evil and hard to override
811      so this is done with some hackery.
812
813    - Renamed Hailo::Storage::Mixin::DBD to Hailo::Storage::DBD, since
814      mixin is really a misnomer for this base class.
815
816    - Improved documentation including a new SYNOPSIS with examples.
817
818    - Error on training with an undef argument.
819
820    - t/storage/dbd-switch-order.t didn't clean up the tempfile it was
821      using.
822
823    - More capitalization improvements.
824
8250.16 Mon Feb 22 17:08:46 GMT 2010
826    - Don't seed a reply with a token which is too rare
827    - Make the Word tokenizer split "example.com" into 3 tokens, while still
828      keeping "3.14" as one token. Also accept ',' as a decimal point.
829    - Various improvements to capitalization in the Word tokenizer
830    - Don't run the ReadLine UI if --stats is supplied
831    - Allow keeping the entire SQLite database in memory while running
832    - Make that the default behavior to reduce IO
833    - Declare undeclared File::Slurp dependency
834    - Declare undeclared Test::Script dependency
835    - Fixed utf8 problems with ReadLine UI
836    - Optimize the SQL schema bit, which shaves about 10% off the size of
837      the DB and cuts more than half of the time needed to generate a reply
838
8390.15 Thu Feb 18 23:55:19 GMT 2010
840    - Allow specifying SQLite's cache size with --storage-args
841    - Reduce likelhood of returning a reply which is identical to the input
842    - Instead of depending on version "0" of most modules (i.e. any
843      version) depend on the latest CPAN version. We know this works;
844      but we have no idea if the older modules work.
845    - Changed to word tokenizer so that it doesn't return whitespace tokens,
846      instead returning a flag which dictatesthe whitespace policy of the
847      token in question. Changed the default Markov order to 2 to compensate.
848    - Fixed a bug with the DBD::* backends not retrieving the Markov order
849      from an existing database
850    - Removed Text::Trim dependency due to it not being acceptable for Debian
851    - Learn from the input when using the ReadLine UI
852    - Removed Test::Exit hard dependency for tests: Not in Debian yet
853    - Added a --stats option to print some statistics about the brain
854
8550.14 Sat Feb 13 17:07:30 GMT 2010
856    - Fixed a bug in the test suite preventing optional backends from
857      being tested
858    - All tests now use Hailo::Test, consequently backends now go
859      through much more thorough testing. Lots of other test related
860      since from 0.13.
861    - utils/hailo-benchmark: Rewritten to use Hailo::Test, the
862      benchmark is now more representive of actual Hailo usage.
863    - Hailo->learn() can now take an arrayref
864
8650.13 Sat Feb 13 09:19:52 GMT 2010
866    - Add missing .trn files to the test suite
867    - Fix number of tests in t/storage/all.t
868
8690.12 Sat Feb 13 08:55:25 GMT 2010
870    - If asked for a reply before we've learned anything, return nothing
871      instead of spewing warnings
872    - Issue #19: Ability to ->train() from filehandle as well as from
873      a file
874    - Re-enable t/bug/tokens-repeat.t test disabled in
875      cc189bd7a2dc56561c71868f061307ee5068f904
876    - When replying to some input, pay more attention to rare tokens
877    - Hailo::Storage::Mixin::Hash would inevitably die due to not importing uniq()
878    - Allow Hailo->train() to take an arrayref, filename, or filehandle argument
879
8800.11 Fri Feb 12 09:44:13 GMT 2010
881    - Corrected outdated documentation in some places
882    - Fixed a problem with the SQLite backend not reading some information
883      from an existing brain if reply() is called first
884    - Fix --reply option, its argument was being ignored
885
8860.10 Fri Feb 12 02:31:34 GMT 2010
887    - Normalized the SQL schema some more. This breaks compatability with old
888      brains of course, but training/learning is quite a bit faster now.
889    - Removed Hailo::Engine and moved most of its logic into the storage
890      backends
891    - Fixed module loader picking Perl::Flat when Perl was requested
892    - Always return a reply, even when input tokens are unknown or missing
893
8940.09 Thu Feb 11 02:36:49 GMT 2010
895    - Disable SQLite's journal while training. Speeds up long imports.
896    - Add Perl::Flat backend which keeps things in a simple key-value
897      hash where key and value are both Str. It can be subclassed to
898      store data in e.g. BerkeleyDB, Cache or other key-value
899      backends.
900    - Add CHI backend with File, Memory, BerkeleyDB etc. backends
901    - Use MooseX::Role::Strict instead of Moose::Role
902    - Use Log::Log4perl for logging
903    - SQLite broke if using a :memory: brain if a :memory: file existed
904    - Use Module::Pluggable for finding plugins
905
9060.08 Wed Feb 10 00:06:20 GMT 2010
907    - 0.07 broke the PostgreSQL and MySQL backend. Fixed them.
908    - Made it less likely that non-SQLite backends will be broken in
909      the future by moving the DB-specific SQL out of Pg.pm and
910      mysql.pm into macros in SQL.pm
911    - Use of $. in Hailo.pm broke file-based backends such as Cache.pm
912    - Make MySQL docs copy-pasteable
913    - Add a benchmark script as utils/hailo-benchmark
914
9150.07 Tue Feb  9 15:23:44 GMT 2010
916    - Note: The storage backends for this release have been changed in such
917      a way that it is incompatible with brains created by older releases
918    - Add missing dependencies on Test::Script/MX::Getopt::Dashes
919    - The Words tokenizer now compresses whitespace when tokenizing as
920      well as whitespace-trimming the output it produces
921    - Make start/end expressions only start/end sentences most of the time
922      instead of all the time
923    - Issue #13: `hailo -b brain' will launch an interactive ReadLine
924      terminal
925    - Don't exit() on print_version=> in run(), just return()
926    - Add $VERSION to all .pm files
927    - Use namespace::clean everywhere
928
9290.06 Sat Jan 30 19:21:28 GMT 2010
930    - Construct SQL's dbd_options with lazy_build, not default. This
931      makes it easy to add additional options in the individual
932      storage engines.
933    - Remove some dead code in Hailo::Storage::Perl
934    - Explicitly disconnect sqlite's dbh / sth handles. This should
935      fix some cpantesters FAILs we're getting which print "database
936      is locked" errors.
937
9380.05 Sat Jan 30 13:55:18 GMT 2010
939    - Shuffle key tokens and don't reuse them. Should make for more random
940      replies.
941    - Check for definedness of $self->brain in Hailo::Storage::*
942    - Use autodie to catch open/close errors
943    - Hailo->learn() was broken when print_progress was false
944    - Add tests for Hailo invocation
945    - Use MooseX::StrictConstructor
946
9470.04 Fri Jan 29 17:48:49 GMT 2010
948    - You know that bug we talked about being fixed in 0.03? It was
949      still there now it's actually fixed.
950    - Use Class::MOP::load_class() instead of eval { require $str } to load plugins
951    - Depend on Perl 5.10
952    - Added MySQL storage backend, don't use it.
953
9540.03 Fri Jan 29 14:37:17 GMT 2010
955    - Fixed a fatal error in Hailo::Engine::Default that would
956      inevitable occur on any large brain. When Hailo was given
957      repeating input with such as [ qw(badger ! badger !) ] where
958      the probability of all the given token following each other was
959      100% (i.e. there's nothing to break the loop) it would start
960      generating infinitely long replies.
961
962      This was fixed by adding a guard clause in Hailo::Engine::Default
963      which breaks the loop if we're up to C<$order * 10> and the
964      number of unique tokens in the reply is less than the model
965      C<$order>.
966
9670.02 Fri Jan 29 03:54:32 GMT 2010
968    - Fix typo in NAME in Hailo::Tokenizer::Words which caused the POD
969      not to be displayed on search.cpan.org
970    - Present options in --help output in reverse sort order
971    - Add facility to pass arguments to storage/engine/tokenizer from
972      the command line or via Hailo->new(). Make Hailo::Storage::Pg
973      use this facility for its database connection arguments.
974    - Fix spelling error in Hailo's POD
975    - --reply on the command line didn't work
976
9770.01 Fri Jan 29 00:39:54 GMT 2010
978    - First CPAN release
979