Perl Modules

These are the perl modules I've written over the years. Some unpublished, others published. Many are buggy, some are not. If I'm intending for others to use the modules, then I almost certainly published them here also: http://search.cpan.org/~jettero/

In fact, I'd be rather surprised if anyone really looked at this page that didn't come to my site for some other reason.

They're also mostly all on github if you'd like to check out a copy.

I've been using a tool for years that I find so handy that I can't believe nobody else has done it. Or, perhaps they have, how would I know.

Anyway, this tool (called hi, for highlight) is a little like grep except it doesn't limit the output coming though. It's just colorizes things. It comes packaged with a couple modules (Term::ANSIColorx::ColorNicknames and Term::ANSIColorx::AutoFilterFH) and the tool itself is an optional (default: no) install.

Term-ANSIColorx-ColorNicknames-2.7193.tar.gz.

Changes:

2.7193: Tue Feb 08 2022
   - add --file parameter to 'hi' (via zhmylove, thanks)
   - ↑ it took like 13 months to notice this contribution, so thanks again

2.7191_2: Sun Mar 29 2015
   - perl v5.10 required for _ prototype
   - the tests require ExtUtils::MakeMaker 6.64, fixed

2.7191_1: Thu Mar 26 2015
   - some of my tests are failing and one of them is a total mystery

2.7191: Wed Mar 25 2015
   - resolve these vile -CA bugs
   - remove open SYMBOL usages in t/ and replace with IPC::Run
     or open my $mem, '>', \my $str
   - switched from File::Slurp to Path::Tiny — not at all concerned about the
     controversy or the implications of using slurp() from an author-only test
     … I Just like Path::Tiny

2.7191: Sun Mar 22 2015
   - Experimenting with a new _hashed_ color that's random space madness hashed for each match
     (more on this in the docs later if it survives testing)

2.7190: Sun Mar 22 2015
   - support utf8 in params to 'hi'

2.7190: Tue Dec 09 2014
   - limited Makefile support

2.7189: Tue Jul 08 2014
   - little fixes and things

2.7187: Sun Jun 22 2014
   - taught App::HI how to list all the colors
   - XXX: interestingly, I can modify the color stack in %ENV, no reason to do
     the weird scope hacking; project for later I guess
     (There's also a coloralias() sub now, but you can't replace standard
     colors, so it's not useful here.)
   - use color() and colorvalid() instead of more scope hacking
   - export color() and colorvalid() (et al) insteadof scope hacking
   - move most of the hi command to App::HI
   - changed my mind on black and pitch.  Reversing them.
   - black is black, pitch is bold black; emotional problems solved.  Hrm,
     coal.  Maybe coal?  Heck, I put that too.

2.7186: Sat Jun 21 2014
   - added a few more color nicknames

2.7185: Sat Apr 30 2011
   - Add App::HI namespace so I can install this easier

2.7184: Mon Aug 10 2009
   - hi default install
   - make hi show up under App::HI

2.7183: Fri May 22 09:14:55 EDT 2009
   - docbug

2.71828: Mon May  4 06:13:52 EDT 2009
   - my dev was against a very old version of Term::ANSIColor
   - fixed bugs
   - fixed tests

2.7182: Fri May  1 16:47:19 EDT 2009
   - added a README

2.718: Fri May  1 07:26:56 EDT 2009
   - added support for bold-blue in ./hi

2.71: Fri May  1 06:18:37 EDT 2009
   - added many tests and skelled my truncate code

2.71: Thu Apr 30 09:39:04 EDT 2009
   - got extracolors working
   - got autofh working

Back in about 2001, I wanted to build a huge library of Technical Analysis tools for perl. I only built three of them originally. More recently, I decided to make as complete a list as possible. I wouldn't call the current list complete, but it certainly has more stuff than back in 2001.

Each algorithm added is intended to be as close to the original inventor's method as possible.

Math::Business::StockMonkey.

stockmonkey-2.9409.tar.gz

Changes:

2.9309: Sun Jun 10 2018
   - fix division by zero bugs in SM/Stochastic; side note:
     What is the correct computation of K and D when H==L or L=0? We can't really know.
     Lane didn't actually give any notes on this afaik. Marcel's notion is to
     just set D and/or K to 100 in such situations — seems reasonable to me.

2.9308: Wed Jun 06 2018
   - It's been a few years since I thought about this project, but Marcel Ebbrecht sent
     a patch to CCI.pm to avoid overwriting the sma in the while loop — an
     artifact that remains untested in t/12_cci.t

2.9307: Fri Feb 12 2016
   - No sense using // in exactly one spot and spoiling the perl5.8 tests for no reason

2.9306: Tue Feb 09 2016
   - patches for https://rt.cpan.org/Ticket/Display.html?id=111834

2.9305: Fri Apr 25 2014
   - I never noticed http://search.cpan.org/perldoc?Math::Business::Stochastic and
     accidentally tried to steal his FCFS namespace.  Woops.  Moved to
     Math::Business::SM::Stochastic.
     Fail.

2.9303: Mon Oct 21 2013
   - lazy test in t/13: https://rt.cpan.org/Ticket/Display.html?id=89645

2.9301: Fri Oct 04 2013
   - added an undocumented (experimental) tag feature,
     descriptors for the models, mainly for graphing purposes.

2.9300_1: Thu Oct 03 2013
   - added ConnorRSI - Still lacks docs and tests
   - added a Bayesian example to the examples directory
   - added a trading strategy example

2.9200: Sun Sep 22 2013
   - added Stochastics

2.9100: Sat Sep 21 2013
   - added a new index (CCI)
   - added an example program showing loading a database with
     MACD and RSI from Forex M1 data.

2.9020: Thu Nov 29 2012
   - Erik Axelkrans discovered a bad bug in the stddev
     computation of bollinger bands.  Thanks!!

2.9015: Sat Jun 09 2012
   - Alan Wee feels Bollinger Bands should support floating point
     arguments.  Probably other modules should do that too...

2.9014: Fri Sep 17 2010
   - fixed a 0/0 error.... clearly since the DI is 0, the DX is
     also 0, even though it's indeterminant form.
   - relicensed as Perl artistic

2.9013: Tue Mar 31 06:58:51 EDT 2009
   - I just noticed that the reason my versions are screwed up is
     that at some point (circa Jul12 2008) I went down in version
     -- foolishly forgetting about floating point versions. Grrz.

2.13: Mon Mar 30 09:54:57 EDT 2009
   - I changed the way the tests worked.  The rand() calls in the
     tests were making the tests fail fairly rarely, but also
     randomly.  I'm hopeful that the rare circumstances where the
     assumptions in the tests fail ... won't happen at all with
     pre-generated data.

2.111: Fri Mar 27 18:35:35 EDT 2009
   - added chorny code to the makefile that makes the repo show
     on cpan.

2.11: Sun Jul 13 13:08:22 EDT 2008
    - fixed the HMA test.  HMA can apparently exceed (or
      under-ceed) input-min-max boundaries.  Huh.

2.10: Sat Jul 12 20:33:50 EDT 2008
    - Gustav  found that ParabolicSAR fails to
      accept four tuples that That must have been hard to figure out...
    - I also apparently misspelled tuple everywhere, wow
    - I added a FAQ pointing to Genius Trader

2.9: Wed Jul  2 15:44:30 EDT 2008
    - Added LaguerreFilter (a fascinating take on moving averages
      using digital filter processing)
    - added a test for the LF
    - switched the adaptive diff filter from an average to a
      median (more literally what's in Ehlers' book)

2.8: Sun Jun 30 19:55:50 EDT 2008
    - I axed the start_with functions... Storable's
      freeze()/thaw() should work better anyway.  Choose that.
    - gave instructions on using the dumpers and storable to
      avoid recalcs
    - Added WMA
    - Added the HMA (suggested by John Baker). I'm
      intrigued by it's purported low-lag smoothing abilities..

2.7: Fri Jun 20 16:41:36 EDT 2008
    - my doc rearrange didn't help...  I added NAME sections.
      Might work.

2.7: Thu Jun 19 06:24:27 EDT 2008
    - rearranged the distribution a little... the ::cookbook and
      ::faq pods weren't indexing right on search.cpan.org
    - perl5.6.x needs constant 1.05 (or at least greater than
      1.02) so I can use that nice constant { NAME => 1 } block.

2.6: Wed Jun 18 18:48:20 EDT 2008
    - finished the Parabolic SAR

2.6: Tue Jun 17 07:30:57 EDT 2008
    - skeled a ParabolicSAR module

2.5: Mon Jun 16 19:38:44 EDT 2008
    - screwed up the fix by not realizing that do{} evaluates to
      a scalar in 5.6 (wow).  So my 363 element list was setting
      my @close = do "file"; like it was @close=(363).
      Nice.  Oh well, 5.6 is ancient history.

2.4: Sun Jun 15 22:04:12 EDT 2008
    - fixed a do {} useless context "bug" so the amit test will
      pass on perl 5.6
    - I have been version-ing each module up each time I change
      the dist version, but I'm going to stop doing that now.

2.3: Sun Jun 15 19:01:53 EDT 2008
    - Doc bug...  Forgot to add
      set_alpha(14) = set_days(27)

2.2: Sat Jun 14 20:22:05 EDT 2008
    - RSI(14) really means EMA[27]/EMA[27]
      (indirectly suggested by Amit Dutt)

2.1: Mon Jun  9 13:39:44 EDT 2008
    - responding to a bug report from Greg Jessup
      ... seems the example in the MACD module is frelled in
      various ways.   Fixed.
    - improved the t/03_macd test
    - lost the use version since I'm using a floating point
      version

2.0: Wed Jun  4 19:19:33 EDT 2008
    - added a wantarray return to MACD query
    - fixed minor return() bug in MACD (boolean $m verses boolean
      defined($m))
    - minor doc-fix for RSI
    - unified versions

1.4: Mon Jun  2 06:52:18 EDT 2008
    - more documentation: what are these for?
    - finished the DMI start_with() function

1.4: Sun Jun  1 18:21:49 EDT 2008
    - fixed an irritating pseudo-bug in the ADX logic.
    - fixed a divide by zero bug in ADX... grrz.

1.3: Sat May 31 18:43:46 EDT 2008
    - doc bugs in the Bollinger Bands
    - added $class->recommended instantiaters.
    - sqrt(-2.07093e-20) in Bollinger Bands
    - ATR added
    - DMI added

1.2: Wed May 28 16:13:43 EDT 2008
    - version hell still

1.1: Wed May 28 15:29:56 EDT 2008
    - Yeah, my versions were too low on two modules.  Wow.

1.0: Wed May 28 07:36:23 EDT 2008
    - I combined all the Math::Business::* modules I wrote into
      one distribution
    - I made EMA faster and "better" and fixed the while(insert)
      where insert is 0
    - Refactored SMA to be smarter for long DBI calculations and
      possibly less smart for huge multi scalar inserts
    - Authored the RSI module to my tastes
    - Authored the Bollinger Bands module

I am the current maintainer of Net::IMAP::Simple. It is not my invention. I did refactor it to my tastes, because I intend to maintain it for the long term. I'm pretty responsive on it via email or via rt.cpan.org. Just let me know!

Net-IMAP-Simple-1.2212.tar.gz

Changes:

1.2212: Wed Jun 06 2018
   - I don't know what Zimbra is, but mss@github sent in PR10 for it

1.2211: Thu May 17 2018
   - minor doc fix: https://rt.cpan.org/Ticket/Display.html?id=125334

1.2210: Wed May 09 2018
   - https://rt.cpan.org/Public/Bug/Display.html?id=125286

1.2209: Thu Jun 08 2017
   - made SimpleX not optional
   - made testing work against dovecot again
   - move a bunch of things to the lib/ dirs (I don't really get why this is a thing, but whatever)
   - add put_with_date() from billhess

1.2207: Sat Oct 01 2016
   - repair unit tests to work with gmail (pfft)
   - added in pull requests on github
     the only non-doc item was https://github.com/jettero/net--imap--simple/pull/6

1.2206: Thu Dec 18 2014
   - minor debug issue

1.2205: Sat May 17 2014
   - Patch from Rob Hoelz to fix bug/docbug regarding port numbers.

1.2204: Sat Dec 14 2013
   - disable error checking on expunge.  It's not clear to me
     that this ever produces an error (which would be with the
     delete or select commands, not expunge).

1.2203: Mon Oct 07 2013
   - https://rt.cpan.org/Public/Bug/Display.html?id=89296
     I think I fixed a design problem (no argument sanitization)
     thinking it fixed the bug, but there may have never been a
     bug.
   - nope, was a format problem.  Holborn supplied his own
     patches.

1.2202: Wed Oct 02 2013
   - really minor pod fix
     https://rt.cpan.org/Public/Bug/Display.html?id=89195

1.2201: Mon Aug 05 2013
   - stupid bug in the new ssl defaults code, fixed by
     ChinaXing(陈云星) — how do I miss this stuff?

1.2200: Wed Apr 07 2013
   - SSL evolved on me.  They actually expect me to check certs?
     Madness.  I came up with some reasonable defaults and some
     settings and things.  The final solution to the defaults
     puzzle was an amalgam of various ideas from Tom Heady
     (https://github.com/tomheady).

   - I deleted the Net::IMAP::Server from inc/ and there is no
     longer a Net::IMAP::Server environment to test in.  It was
     driving me crazy how buggy that was in some places, and I
     had no ability to reproduce those environments, so I removed
     it.  If you want to test against a real dovecot or uwash
     server, super! check the t/test_runner.pm file for the
     settings.  They are intentionally unobvious -- please don't
     run automated tests unless you're willing to help debug.
     The automated results don't help anybody without further
     information on the failures.  Normally, cpan testers is the
     best thing in the world ... IMAP sucks.

1.2034_2: Fri Nov 16 2012
   - finally, some testers rand _1 ... didn't tell me anything;
     but they ran it.  I'm just going to remove the offending
     module load.  I'm never going to figure out why it fails on
     so many machines (but never ever mine).

1.2034_1: Thu Oct 25 2012
   - I still have no idea why t/07 fails on basically everyone's
     machine except mine, but I did find that croaks and dies are
     totally lost because of the way I run the tests.

1.2034: Wed Oct 10 2012
   - https://rt.cpan.org/Ticket/Display.html?id=80088

1.2033: Mon Jul 23 2012
   - https://rt.cpan.org/Public/Bug/Display.html?id=78539

1.2032: Thu Apr 05 2012
   - my school switched to SSLv3 only and they just kinda time
     out on autonegotiation...  So I added a way to specify the
     ssl version.

1.2031: Fri Mar 02 2012
   - these tests don't work under this new EV multithreaded
     system.  Disabled all tests unless people promise to test
     single threaded.  I'd rather have nobody test it than have
     all the tests fail every time.  I'll fix the tests later.

1.2030: Mon Feb 06 2012
   - fixed bug in get that was fetching more message than there
     actually was to get (spuriously appending FLAGS \Seen and
     the like)
   - made sure the tests run in order (re: EV testers).  What I
     did is really truly awful.  If there is a good way to force
     the tests to run in order, please tell it to me.  My
     solution is just horrible (see top of t/test_server.pm)

1.2029: Mon Jan 30 2012
   - spelling fix from the debian people

1.2028: Wed Jan 25 2012
   - separator method from glaess@glaessixs

1.2027: Wed Dec 28 2011
   - ...

1.20271: Wed Dec 28 2011
   - heh, spurious number of tests

1.2027: Fri Dec 23 2011
   - deal with this: https://rt.cpan.org/Ticket/Display.html?id=73431

1.2026: Mon Oct 10 2011
   - Bug in UID search, contribs by Jorge

1.2025: Fri Sep 02 2011
   - removed unused build rules that fail to compile in dmake

1.2024: Tue Aug 02 2011
   - Jason Woodard submitted a patch to remove the post-sort from
     range2list.  I don't recall why the sort was there to begin
     with, so the patch seems reasonable to me.  All tests
     passed, released.

1.2023: Wed May 25 2011
   - patch for minor (but annoying) options bug. Thanks Mr.  Griffiths!

1.2022: Fri Mar 04 2011
   - horrid little typo in socket builder

1.2021: Fri Mar 04 2011
   - removed the die() after do("") loading the test server
     http://goo.gl/FUQPn

1.2020: Mon Feb 07 2011
   - Andrzej Adam Filip requested a CLOSE method for ::PipeSocket

1.2019: Wed Dec 01 2010
   - _process_flags() was a little too aggressive about what's a
     valid flag and what isn't.  Really, it needs to be up to the
     server.  https://rt.cpan.org/Ticket/Display.html?id=63282
   - many doc bugs fixed thanks to HM 2k

1.2018: Thu Oct 28 2010
   - minor bug with the sloppy CRLF code
     Thanks go to: http://github.com/marado

1.2016: Sun Sep 05 2010
   - fixed ipv4 address stuff

1.2016: Wed Sep 01 2010
   - added readline callbacks; which I think I may leave
     undocumented for now.

1.2016: Mon Aug 30 2010
   - found something to fix in https://rt.cpan.org/Ticket/Display.html?id=60537

1.2015: Sun Aug 29 2010
   - got the pipesocket working
   - made sure it ps works in the context of nisim

1.2014: Sun Aug 15 2010
   - added uidsearch() -- just like search()

1.2013: Mon Aug 09 2010
   - created the PipeSocket object
   - skeled the connect support

1.2013: Sat Aug 07 2010
   - added seq()
   - added list2range
   - added contrib/uidfetch
   - fixed a BODY bug in the fetch grammar

1.2012: Sun Aug 01 2010
   - added uidcopy()

1.2011_00: Sat Jul 31 2010
   - .{32766} appears to be a limit for that type of matching.
     I also found a SIGSEGV in (??{ _noexist }) that may or may
     not be known.  Result?  A billion times better interface for
     the {#}\r\nstrings .

1.2010_99: Sun Jul 25 2010
   - added a logout method that's just like quit, but doesn't
     expunge and doesn't have a hardquit option.

1.2010_99: Sat Jul 24 2010
   - I really like the way body_summary works and I love writing
     grammars, so I wrote a generalized fetch() routine.  It
     could probably be used by body_summary() in the future.

1.2010: Mon Jul 19 2010
   - If the client is not yet setting on a mailbox and a search
     is issued, the client now selects the default mbox first.
   - RFC3501 wants RFC 2822 dates for date-based searches,
     %d-%m-%Y is therefore wrong, it should be %d-%b-%Y (huh).
   - provide uidnext, uidvalidity, and uid
   - also (incidental to the above) make status() take field
     arguments
   - fixed a "bug" where not passing coderefs to _process_cmd
     will probably cause various crashes.

1.2010: Sun Jul 18 2010
   - I was having some issues getting the debugs to work inside
     Coro threads.  Rather than debugging it properly I just
     added more debug options
   - changed the behavior of ->top($id) so that )\r\n isn't left
     on the end of the last line of headers as they come back.
     *** let me know if this broke something for you ***

1.2001: Wed Jul 14 2010
   - Ugh.  I have seen it before and I already found this
     problem.  It's still that DateTime bug:

     https://rt.cpan.org/Public/Bug/Display.html?id=58459

1.2000_1: Wed Jul 14 2010
   - ugh, I'm *STILL* getting that bug (is it?) where sometimes
     machines can't copy messages (line 25) after there's
     definitely (line 22) 10 messages in the mailbox. WHY WHY WHY
     WHY?  Naturally, the logdump is truncated at the point where
     I really need it.

     http://www.cpantesters.org/cpan/report/590a9a6e-8e97-11df-b0b7-6c9e78e28bc1

     Changed the t/22 test to dump the last 200 lines instead of
     the first few hundred.

1.2000: Tue Jul 06 2010
   - Jason and I (due to a disagreement about what should be
     returned by body_summary()) begun using objects instead.
     This way the return value can be interrogated easily to see
     what it is and what it has.

1.2000: Sat Jul 03 2010
   - woodward sent in some rfc3501 fetch-body support and docs.
     The extension requires Parse::RecDescent for correct
     parsing, so body_summary() was forked off to an extensions
     module.

1.1916: Mon Jun 07 2010
    - woodward sent in an RFC-5256 patch to make SEARCH more correct

1.1915: Sat Jun 05 2010
   - import the latest Net-IMAP-Server to the inc/ dir (1.27)
   - report various bugs
   - fix various bugs in inc/ dir

1.1913: Wed May 26 2010
1.1914: Wed May 26 2010
   - pulled in changes from alexmv

1.1912: Fri Apr 23 2010
   - Doug confirmed that it worked.  I'm going to go ahead and
     release this as a new version.

1.1912_1: Thu Apr 22 2010
   - Hrm, per Doug Reed at Service Optimi, I noticed that _last
     returns self->{last} regardless of whether it's ever been
     set.  Seems like we can DWIM and call self->select if it's
     never been called yet and make ->list (et al) function.

     We'll see what he thinks of this fix.

1.1911: Sun Mar 14 2010
   - Fixed [introduced] bugs illuminated in #55552 (RT), thanks
     to Aaron Wilson  for a positively excellent
     bug report!

1.1910_2: Wed Feb 17 2010
   - http://www.nntp.perl.org/group/perl.cpan.testers/2010/02/msg6764802.html
     - I still can't figure out what's causing this... NO IDEA
     - I made the test ridiculously verbose if two conditions are
       met: 1) automated testing; 2) the copy tests fail in some
       way.

1.1910_1: Sun Jan 17 2010
   - http://www.nntp.perl.org/group/perl.cpan.testers/2010/01/msg6625605.html
     It seems the t/22_* tests are failing, but I can't seem to
     build a perl for which the tests fail. :(  No idea.
     I added another prereq to the makefile and added another
     line (perhaps informative?) to the t/22_copy* test.

1.1910: Tue Oct 27 2009
   - documented search() and added a bunch of kid functions that
     issue searches on your behalf.  Added tests for search().

1.1908: Thu Sep 24 2009
   - top() does a surprisingly terrible job at groking header
     lines.  If you have something like this:

       message-id:
            

       date: wednesday, blarg blarg
            xx:xx:xx (pdt)

     The results are somewhat random concerning, lines vs
     header-rows.  My goal is to make sure each element of the
     arrayref returned is a header line, not just a line of text.

1.1908: Sun Sep 20 2009
   - added a really weak search command.  I think we can do a
     little better...

1.1907: Sun Jul 26 2009
   - PREAUTH fix and tests
   - a nifty little contrib/ dovecot pipe server thingy
   - fixed serious issues with the greeting timeout

1.1905: Mon Jul 20 2009
   - I apparently need Class::Accessor installed for tests.
     Pulling over all deps of the now included net-imap-server

1.1904: Fri Jul 17 2009
   - bestpractical's patch makes more sense than mine does

1.1903: Fri Jul 17 2009
   - actually use the inc/ copy of net-imap-server

1.1902: Fri Jul 17 2009
   - I decided to include a static copy of net-imap-server so I
     know precisely what version is there for tests.  Suggested
     net-imap-server build tests using net-imap-simple this way.

1.1902: Thu Jul 16 2009
   - There's apparently 5.10 problems with the tests (probably
     not with the module).  The tests are kinda hinky anyway.

1.1900: Fri Jul 10 2009
   - I really thought I released this already.  Lawl.

1.1900: Fri Jun 26 16:03:16 EDT 2009
   - prolly going to release this, it seems to test fine all over
     the place.

1.1899_07: Sun Jun 21 07:16:36 EDT 2009
   - I decided to do get() my way, without ruining everything, by
     blessing the arrayref and overloading '""'.
   - I tought the t/35 test to prove that _process_command fails
     just as Jonathan Kamens says.
   - applied JIK's patch.

1.1899_07: Sat Jun 20 22:12:00 EDT 2009
   - I want to change the way get() works.  I don't think I
     should, but I'd like to return the actual message in scalar
     context and the lines in list context.  Returning the lines
     as an arrayref makes no sense to me.

1.1899_07: Sat Jun 20 15:26:13 EDT 2009
   - while trying to get some delete and copy tests I ended up
     working on expunge_mailbox() a little
   - found another bug in Net::IMAP::Server::Mailbox... It's
     clearly just a demo, but since I'm using it for my tests,
     it's worth fixing.
   - my delete tests do show that ranges like 3:5 really do work,
     which makes me think RT#40203 may turn out to be spurious.
     I'll let the tests prove it out before I close it though.
   - I refactored the _reselect() stuff away, it was poorly
     thought out.  There's a _clear_cache() instead.  Yeah, 40203
     appears to be bogus because the client doesn't really parse
     the sequence-set numbers.  I have confirmed for sure that
     you can $imap->delete("3:5,7,10") and it'll work just like
     you called delete 5 times.
   - Copies seem to work fine too.  I'm going to close the
     ticket.
   - Documented the sequence set stuff so RT#40203 doesn't come
     up again.

1.1899_06: Fri Jun 19 08:54:07 EDT 2009
   - added a status() sub for the STATUS command
   - added a status() test, with some unseen() flag tests
   - added a select() and current_mailbox() test -- failed to unescape
     the working mailbox for current_mailbox()
   - reported a status command bug (in Mailbox) to
     Net::IMAP::Server
   - moved a bunch of contrib and t7lib modules around to keep
     pause from indexing them.
   - worked on the docs for seen and unseen
   - created a method for error-checking when using msg_flags(),
     seen() and unseen() -- which I think solves ticket 33189.
     Basically, if Cyrus-imap is returning different values for
     FETCH (FLAGS) than for STATUS, what can I really do to fix
     it?  However, the log provided by Mr Spiegl seems to suggest
     he was counting errors as unseen messages... so this may
     just fix it.

1.1899_05: Wed Jun 17 06:25:39 EDT 2009
   - documented see, unsee, add_flags, and sub_flags
   - used the IMAP RFC to show that gmail is wrong,
     Net::IMAP::Server is right.  google apps for domains
     apparently selects an unseen message willy nilly (or which
     ever is last) for the OK [UNSEEN #] message.  It should be
     the *first* unseen message.  Their IMAP is notoriously
     un-IMAP though.  I shouldn't be so surprised.
   - added undelete to go with the other flaggy functions
   - added more flag tests

1.1899_05: Tue Jun 16 06:42:16 EDT 2009
   - I started working on ticket 45953,
   - created sub_flags() and add_flags()
   - taught delete() to use add_flags() -- adds \Deleted
   - providing see() and unsee() for ticket 45953
   - I started building tests for the flag manipulation stuff and
     put reselect stuff ... noticed a possible bug in
     Net::IMAP::Server

1.1899_05: Sun Jun 14 07:14:54 EDT 2009
   - fixed t/test_server.pm (use IO::Socket::INET, not Net::TCP)

1.1899_04: Sat Jun 13 18:33:46 EDT 2009
   - added deleted() from JIK 's
     patch.

1.1899_03: Sat Jun 13 17:05:55 EDT 2009
   - added a connection class so we might reject connections
     after the 4th, or whatever, and possibly solve ticket 30229
   - banged my head on the IO::Socket::SSL wall for a while
   - buu (#perl freenode) set me straight on something enabling
     me to close 30229.

1.1899_02: Sat Jun 13 07:39:29 EDT 2009
   - moved some tests around and fixed the manifests
   - added support, docs and test for EXAMINE

1.1899_01: Fri Jun 12 22:06:36 EDT 2009
   - man Coro is disaggreable in the shutdown epoch, it took a
     fork, a setsid and another fork to disssociate the test from
     the Coro ... um... messing with exit().
   - decided as I clear tickets from RT, I'll write tests.  As I
     write tests, I'll release dev releases, the *goal* will be
     1.1900 -- all RT cleared.

1.1900: Thu Jun 11 07:17:13 EDT 2009
   - fixed a bug I created in select
   - moved the tests around a little, getting ready for a whole
     suite

1.1900: Wed Jun 10 22:01:53 EDT 2009
   - It took me forever to figure out why the append command
     wouldn't work.  Bug submitted to Net::IMAP::Server
   - added my login function to contrib
   - I think I fixed the oldest bug on RT

1.1810: Sun Jun  7 10:52:30 EDT 2009
   - made $imap->select return "0E0" when 0 messages are found
     after an otherwise successful select.

1.1810: Sat Jun  6 22:13:34 EDT 2009
   - Started working on the tests.    Net::IMAP::Simple doesn't
     seem to be able to handle the results of a select command as
     returned by Net::IMAP::Server.  This may indicate other
     problems with protocol compliance.  I can't say definitley
     for sure that it's ::Simple, but that's the most likely
     suspect.

   - Made the module pull in IO::Socket::SSL without needing to
     involve another module that probably shouldn't be a whole
     separate distribution anyway.  Considering deprecating the
     Net::IMAP::Simple::SSL for that reason, and because that
     whole distribution is only 2 useful lines anyway.

1.1800: Thu Jun  4 21:44:59 EDT 2009
   - jettero started pulling in his changes.

1.17  2006-10-11
      - Beta/Developer release -> production

1.16_1 2006-10-02
      - Beta Release
      - Added debugging
      - Upgraded imap.pl example script
      - Updated documentation
      - Added a few patches here and there

1.16  2006-06-13
    - Multiple bugs identified by nate@cs.wisc.edu. Patch
      provided by Nate.  Nate also provided new release tests -
      thanks man.

1.15  2005-11-21
    - Added mailboxes_subscribed() function introduced by John
      Cappiello.  This function provides a method for retreiving
      a list of mailboxes which the user has subscribed to. This
      differs from the mailboxes() function in that with the
      mailboxes() function all mailboxes are returned, regardless
      ass to whether or not the user has subscribed to them.

1.14  2005-10-01
    - Fixed error in sample code within the POD documentation
      identified by Matthew S. Hallacy

1.13  2005-09-28
    - Versioning schema changed to use CVS versioning rather than
      hard coded versioning. This is to address issues some
      people are having with bug tracking and package management
      tools.

0.105 2005-09-28
    - Fixed syntax problem in the bindaddr option. Thanks
      Dagobert Michelsen for pointing this out.

0.104 2005-08-06
    - Fixed major bug discovered in get() and getfh() which
      caused message lines to be dropped if they started with an
      "*"

0.103 2005-07-10
    - Fixed error in select() identified by Guido Kerkewitz and
      Jonathan B. Glatt
    - Added folder_subscribe() and folder_unsubscribe() functions
      provided by Guido Kerkewitz.

0.102 2005-06-25
    - Fixed protocol error identified within the
      expunge_mailbox() function. (Thanks alot to William Faulk
      for pointing this out)
    - Fixed bugs in the sample imap.pl script provided.
    - Added flags() and recent() routines
    - Added current_box() function
    - Added use_select_cache and select_cache_ttl options. These
      options will allow you to enable internal caching for
      select() operations.

0.101 2005-01-06
    - Fixed bug which resulted in inconsistant results from
      login()

0.100 2005-14-05
    - Fixed dates in Changes file
    - Fixed IMAP protocol error identified by John A. Murphy
    - Changed behavior of login() to only return true or false.
      This change means that to get the current number of
      messages in a users INBOX folder you will need to preform a
      simple $imap->select("INBOX") after successfully logging
      in.
    - Added messages() function
    - Added the frame work within select() to provide more
      detailed information about the current IMAP framework

0.99  2005-28-04
    - Added multi-line header patch for bug discovered in top(),
      thanks Sergey Mudrik for pointing this out.

0.98  2005-27-04
    - Minor document changes
    - Fixed implimentation bug with the new option set

0.97  2005-26-04
    - Added patch submitted by LTHEGLER to address the multiple
      line output problem.

0.96  2005-26-04
    - Took over module development (Colin Faber)
    - Fixed synopsis to provide a functional example (Colin
      Faber)
    - Added error handling (Colin Faber)
    - Added IPv6 support (Colin Faber)
    - Added port, timeout, use_v6, retry, retry_delay and
      bindaddr options to the object creation method.

0.95  2004-06-09
    - Accept port configuration (Matt Bradford).
    - Documentation overhaul (Casey West).
    - Huge internal code overhaul (Casey West).
    - Implemented expunge_mailbox() (Florin Andrei).

0.94  Thu May 20 15:24:21 EDT 2004
    - Taken by Casey West.
    - Quoted the password argument to login() when sending to
      IMAP LOGIN command.
    - Added arguments for searching in paths and for mailboxes in
      the mailboxes() command.
    - Distribution clean up.


0.93  Thu Dec 16 16:15:00 1999
    - LIST ... {\d}\r\nmailbox parsing in mailboxes()
        - better escaping of \" e \\ (Netscape server doesn't put
          the \\ in the mailbox name. Why?)

0.92  Tue Dec 13 15:07:00 1999
    - seen method
        - \r\n as EOL. Thanks to Edward Chao!
        - \" escaping. Thanks to Edward Chao!

0.91  Tue Nov  9 11:41:00 1999
    - getfh method
        - fixed bugs in the documentation(!!!)

0.90  Wed Nov  3 15:29:13 1999
    - original version; created by h2xs 1.18

The gentoo /sbin/functions.sh suite is really nice for shell scripts. I wanted some of that functionality for perl. Here it is: Term-GentooFunctions-1.3700.tar.gz, Term::GentooFunctions (pod).

Changes:

1.3608: Wed Dec 06 2017
   - xsawyerx removed Term::ANSIScreen ; Thanks! 
     https://github.com/jettero/term--gentoofunctions/pull/5

1.3608: Mon Oct 12 2015
   - if we ewarn/einfo/edie during spinner, nothing is printed in the right place during the print or after.
     this is my attempt to fix it.

1.3607: Mon Nov 26 2012
   - updated test for 5.17.x

1.3606: Mon Oct 04 2010
   - the edo() auto-eindents have always bugged me... made them
     work how I expect.

1.3600: Thu Sep 02 2010
   - equiet() -- turns off the prints

1.3600: Sun Aug 29 2010
   - spinners -- these aren't in /sbin/functions.sh, but they're
     handy.

1.3505: Thu Apr 30 07:11:23 EDT 2009
   - altered wash() a little, to allow \n's in the middle of messages

1.3501: Mon Apr 27 21:41:53 EDT 2009
   - added another test... mystified by errors in git-svn-replay

1.3501: Sun Apr 26 22:47:09 EDT 2009
   - fixed bug shown in t/09 

1.3501: Sun Apr 26 18:47:54 EDT 2009
   - grr, edo doesn't return arrays right, see t/09

1.3500: Sun Apr 26 09:44:40 EDT 2009
   - way more better pods
   - fixed bug in edie()
   - added edo()
   - made edie exit(0x65) instead of exit(1)

1.302: Sat Apr 25 12:47:53 EDT 2009
   - very minor doc fixes
   - bumped the version for perl 5.6.1

1.3: Thu Apr 23 15:10:07 EDT 2009
   - got rid of version.pm (blech)
   - modernized the distribution
   - added a non-trivial test
   - told Makefile.PL and GT.pm that this works fine in perl5.6.1

1.2.2: Tue May 27 12:06:23 EDT 2008
   - (wow, use version has to be on the same line as our $VERSION
      for older EUMM)

1.2.1: Mon May 26 15:58:50 EDT 2008
   - I might as well do a new version of everything using
     version.pm while I wait for all my CPAN deletes to go
     through.  I just discovered that version.pm doesn't/didn't
     go core until perl 5.9...  I really wish I'd have prereqed
     it everywhere I used it, but I didn't.  *sigh*

1.2.0: Sat May 24 09:21:21 EDT 2008
   - using version.pm as suggested by Andreas Koenig

1.2.0: Fri May 23 08:34:17 EDT 2008
   - This can work under win32... code added

1.1.7: Tue May 20 10:24:18 EDT 2008
   - People have told me that two dotted versions cause problems
     on CPAN.  It's true, and the leading zero on the second
     number sure didn't help.  I refuse to abandon this type of
     versioning though.  Linux uses it, Perl iteself uses it.

         major_version.minor_version.bugs  <- not wrong

     Oh well...

1.01.4: Mon Jun 11 2007
   - I added require 5.008 lines to the .PL and .pm

1.01.3: Mon Jun 11 2007
   - I updated the version and fixed a few things.
     edie was missing from whatever I have on cpan so I needed a new version for:
     "use Term::GentooFunctions 1.010_003 qw(:all);"

1.01.1: Mon Jun 11 2007
   - I removed a &wash regex

1.01:  Sun Feb 26 07:56:47 EST 2006
   - jettero fixed several compile time bugs

1:  Tue Feb 14 17:54:19 EST 2006
   - jettero added a $|=1 to einfon ... cuz c'mon

0.99.3:  Mon Feb  6 18:24:10 EST 2006
   - jettero have added einfon
   - jettero fixed a wrong subtraction on [ ok ] placement
     ... how did I miss that before?

0.99.2:  Mon Jan 30 15:51:09 EST 2006
   - jettero found yet another bug between the interaction
     of the shell version and the perl version

0.99.1:  Mon Jan 30 15:44:15 EST 2006
   - jettero removed some debugging code

0.99:  Mon Jan 30 15:17:05 EST 2006
   - jettero made Term::GF understand the shell
     RC_DEFAULT_INDENT and RC_INDENTATION, however you must
     export them wherever you fork to perl ... and perl
     cannot modify them back up to the shell. So maybe not
     so helpful, but complete feeling

0.98:  Fri Jan 27 16:28:10 EST 2006
   - jettero added minor changes to eend, such as $_ use and
     argument passthrough...

0.97.1:  Thu Jan 26 17:15:05 EST 2006
   - jettero made the OK an ok instead

0.97:  Thu Jan 26 15:53:17 EST 2006
   - jettero added eindent and eoutdent

0.95:  Thu Jan 26 12:00:ish EST 2006
   - jettero first built this module

Unnamed repository; edit this file to name it for gitweb.

Changes:

1.009: Thu Feb 11 2016
   - Maybe Slaven's patch will do the trick. Here's hoping.

1.008: Tue Feb 09 2016
   - trying to resolve the test failures that result from LC_NUMERIC differing from USian ($3,000.14)
   - also, try to impose alphabetical ordering on kg*m vs m*kg

1.007: Fri May 15 07:19:12 EDT 2009
   - Math::Round apparently started detecting overflows...  I was unaware of
     them myself -- so that seems like a very good thing.

1.005: Tue Mar 31 11:18:27 EDT 2009
   - Failed to account for the fact that splitting out PV::AU
     would necessitate versioning the file... *sigh*

1.001: Tue Mar 31 09:30:54 EDT 2009
   - This is pretty mature and has worked well for me for years. 1.0
   - added chorny's META.yml stuff
   - added pv to the list of exports PV() is good, pv() is
     easier.
   - split the auto units module
   - split the pod

0.71.0: Mon May 26 16:00:12 EDT 2008
   - user version needs to be on the same line as VERSION for
     older EUMM

0.71.0: Mon May 26 16:00:12 EDT 2008
   - added version.pm

0.71:  Mon Nov  5 07:33:56 EST 2007
   - jettero fixed a bunch of bugs simultaneously by using Math::BigFloat. Why didn't I use that before?

0.68:  Mon Mar  5 13:14:55 EST 2007
   - jettero fixed a problem with num_eq, by using string comparisons...

0.67:  Sun Aug 13 07:37:44 EDT 2006
   - jettero fixed an enormous bug in PV.pm where some operations could be
     reversed if the LHS is unblessed.

0.66:  Wed May 17 21:08:59 EDT 2006
   - jettero added limited support for auto plurals ... the interface may well
     change, but I'm happy with it for now.

0.53:  Tue May 16 10:45:25 EDT 2006
   - jettero added numeric and string comparison overloads. How were these not
     in here before? Has nobody sorted a PV? I certainly hadn't.  I wonder if
     anyone uses this...

0.52:  Wed Apr 12 13:31:27 EDT 2006
   - jettero added pv_str_ne

0.51:  Sun Dec 11 08:28:15 EST 2005
   - jettero added sqrt overloads...  How did I not have this before?

0.50:  Wed Dec  7 16:18:26 EST 2005
   - jettero added the scalar-0 hack

0.49:  Thu Feb 10 11:06:09 EST 2005
   - jettero added boolean support (eg, print "no mass!\n" unless PV("0 g"))

0.48:  Mon Jan 31 07:06:15 EST 2005
   - jettero fixed a log(0) bug in the &sci function.

0.47:  Mon Jan 24 13:46:45 EST 2005
   - jettero made PV understand leading and trailing spaces better

0.46:  Thu Jan 20 10:46:50 EST 2005
   - jettero added ** (exponent) support... how did I overlook that? Seriously.

0.45:  Sun Jan 16 10:26:51 EST 2005
   - jettero added a stupid sci() to return huge numbers in exponential format

0.44:  Fri Jan 14 16:04:30 EST 2005
   - jettero added reduction to scalar support ... I thought that was working.
     I guess thats what the tests are for.  (well, they were, but they were a
     touch flakey in spots)

0.43:  Fri Jan 14 15:49:40 EST 2005
   - jettero added the deunit() function

0.42:  Fri Jan 14 15:34:38 EST 2005
   - jettero improved the number formatting for huge numbers

0.41:  Fri Jan 14 13:50:44 EST 2005
   - jettero found some exponent related bugs

0.4:  Fri Jan 14 13:06:14 EST 2005
   - jettero made a temporary fix for a Number::Format issue (ie poor handling
     of scientific notation) and also fixed a nasty bug in the unit regexp
     where capital letters went unrecognized.

0.39:  Fri Jan 14 11:00:41 EST 2005
   - jettero added exponential matching to new (eg 1.99e3) ... woops.

0.38:  Thu Jan 13 15:26:13 EST 2005
   - jettero found that metric units work well (by adding a test).

0.37:  Thu Jan 13 10:29:14 EST 2005
   - jettero added the readme

0.36:  Thu Jan 13 07:16:08 EST 2005
   - jettero better docs

0.35:  Wed Jan 12 19:58:11 EST 2005
   - jettero added a huge amount of documentation

0.34:  Wed Jan 12 16:27:12 EST 2005
   - jettero added some equivalence overloads

0.33:  Wed Jan 12 15:21:46 EST 2005
   - jettero add some num/str eq overloads

0.32:  Wed Jan 12 15:12:24 EST 2005
   - jettero made this

While drawing some RSI graphs, I really wanted to draw some GD shapes on the image before GD::Graph plotted the data. There's really no intereface for that, so I kludged this in.

GD-Graph-Hooks-1.0003.tar.gz

Changes:

1.0003: Mon Nov 16 2015
   - goofy typo
   - added example

1.0002: Fri Oct 04 2013
   - fixed another minor doc bug

1.0000: Thu Oct 03 2013
   - made this

I wanted something that worked like CGI.pm but for RSS. Sadly, nobody completed anything like that before me, so I have attempted to construct it. I know precious little about the format, but I think this is a reasonable attempt. Here it is: CGI-RSS-0.9660.tar.gz, CGI::RSS.

Changes:

0.9660: Wed Jun 17 2015
   - maybe make t/05_test_cgi-fast.t stop failing

0.9659: Tue Apr 28 2015
   - still a bunch of cpan tester problems, particularly with the (somewhat
     pointless) CGI::Fast test

0.9658: Mon Apr 27 2015
   - https://rt.cpan.org/Public/Bug/Display.html?id=103981
   - additionally, the new CPAN version cannot be (easily) hacked upon to
     produce non HTML tags. So I made a pseudo-CGI.pm argument parser.
     I'm assuming it's not nearly as good, but I don't think there's any
     users of this module either.

0.9657: Mon Feb 25 2013
   - added a charset (utf8) to the cgi response

0.9655: Thu Nov 24 2011
   - more import/export issues — this time while using CGI::Fast
     https://rt.cpan.org/Ticket/Display.html?id=72662

0.9654: Fri Nov 18 2011
   - I cleaned up the compile-time/import-time code into one cute
     little block of pure evil.  This has a side effect of fixing
     a problem (bug?) where not calling import breaks the whole
     module.

0.9653: Thu Nov 17 2011
   - really minor fix so one can call (eg) CGI::RSS::start_rss()
     as a non-method.  Requested by Austin Seraphin

0.9652: Fri Oct 28 2011
   - %Z only works in the states, doesn't validate anywhere else

0.9651: Wed Oct 26 2011
   - minor change re: date formats, they're not configurable
   - fixed silly loading of CGI tags, import() vs header()

0.9600: Sat Apr 25 14:08:43 EDT 2009
   - added a begin block to set the timezone to UTC when Date::Manip can't
     otherwise figure it out.

0.9501: Mon Apr  6 17:17:51 EDT 2009
   - doc bugs

0.95: Mon Apr  6 11:06:15 EDT 2009
   - split the pod to a separate file
   - my rss does not validate...
   - added Date::Manip RFC822 date reformatting
   - taught CGI::RSS to preserve case on tags (involved
     deparse... blech)
   - fixed a bug in finish_rss
   - apparently, to validate, an RSS channel needs a
     description...

0.92: Thu Mar 26 12:00:54 EDT 2009
   - messed up the META.yml

0.91: Thu Mar 26 08:52:39 EDT 2009
   - ditching the lgpl2 gz file for the new meta
   - added chrony's meta.yml stuff

0.9: Thu Aug  7 15:53:52 EDT 2008
   - ditched version.pm

0.7.3: Tue May 27 12:03:32 EDT 2008
   - (wow, use version has to be on the same line as our $VERSION
      for older EUMM)

0.7.2: Mon May 26 15:44:02 EDT 2008
   - I might as well do a new version of everything using
     version.pm while I wait for all my CPAN deletes to go
     through.  I just discovered that version.pm doesn't/didn't
     go core until perl 5.9...  I really wish I'd have prereqed
     it everywhere I used it, but I didn't.  *sigh*

0.7.1: Sat May 24 09:31:16 EDT 2008
   - using version.pm as suggested by Andreas Koenig

Net::Pcap does the job, but it's confusing and difficult to operate. This module solves that problem in a relatively general way.

I wanted an way to build libpcap filters really quickly. It shouldn't take two hours to crank one out, particularly since I imagine they all kinda look the same. So, I wrote this to simplify writing sniffers really quickly.

Here it is: Net-Pcap-Easy-1.4210.tar.gz Read it: Net::Pcap::Easy.

Changes:

1.4210: Tue Jan 06 2015
    - found annoying memory leak from 2012 or whenever I found it (and then forgot about it)
 
 1.4210: Mon Jan 05 2015
    - add a close() method and support early shutdown (useful in SIG{BLAH} = sub { $npe->close }
 
 1.4209: Mon Nov 17 2014
    - timeouts will rarely (if ever) work — or do anything like what the user
      expects to happen.  Changed docs and added forks.pm example
 

Essentially, I wanted a set of perl native packages that would do very basic statistics. That package (Statistics::Basic) is located here: Statistics-Basic-1.6611.tar.gz. It contains things like ::Mean, ::StdDev, ::Covariance, etc.

Changes:

1.6611: Wed Dec 17 2014
    - SREZIC@cpan.org suggested LC_ALL=C for all tests
    - using Number::Format vars instead of LC_ALL to fix tests
    - yeah, that's not going to work... using setlocale()
 
 1.6608: Fri Jan 10 2014
    - bug in LSF
 
 1.6607: Mon Jan 23 2012
    - forgot to update the copyright to 2012
 

This (MySQL-Easy-2.1019.tar.gz) is something I've been using over and over. I don't remember how I used to live without it. I had quit publishing this on CPAN for a while, but I decided to put it back after soneome asked about it. I have gotten grief about the namespace previously, but moving it into DBIx didn't work out.

Check out the man page: MySQL::Easy.

Changes:

2.1019: Sun Nov 16 2014
    - try to repair connections on dhb methods like selectall_arrayref
 
 2.1017: Sat Feb 08 2014
    - make the autoloads actually autoload
 
 2.1015: Thu Jan 30 2014
    - improved autoloader for dbh
 

My little IdentServer hasn't had an update for 20 years … I moderned it up a little. It still has no IPv6, but I imagine I'll put that in there eventually.

pod: Net::IdentServer

dist: Net-IdentServer-0.604.tar.gz.

Changes:

0.604: Sun Jun 29 2014
    - one of the tests assumed certain ports would be closed when they really
      might not be ; another test assumes this also, but port7 → port7 should
      normally be closed.
    - I definitely do want the build to fail on non /proc/net/tcp systems, but I
      don't want reports about it.  I couldn't remember the syntax in 603 —
      fixed in 604.
 
 0.603: Sun Jun 22 2014
    - I thought BSD had a /proc/net/tcp ; but now that I think about
      it.  it doesn't.  There's probably a great cross platform way
      to look this stuff up, but I don't know it.  This is an easy
      fix for now.
 
 0.602: Fri Jun 20 2014
    - there's enough docbugs to increment this thing again.
 

I made this one day in ages past. I doubt it's useful for much these days, but I needed it, so I updated it. Net::SMTP::OneLiner.

Net-SMTP-OneLiner-2.0008.tar.gz

Changes:

2.0008: Mon Mar 31 2014
    - couple little tweaks to content encoding, message IDs, etc.  
 
 2.0007: Fri Mar 28 2014
    - more errors
 
 2.0005: Wed Jul 08 2009
    - cleaned up this distribution
    - fixed various pod problems
    - added critic stuff
    - fixed pet peve most hated bug ever (paul@cpan.org is not me,
      I am jettero@cpan.org)
    - modernized the makefile and posted module on github
 

Because I was doing a bunch of business related data processing recently (stockmonkey), I wanted to plot more data per time interval than just one price. I wanted to print Open, High, Close, and Low. There are a few ways to do it (candlesticks, box plots, etc), but I'm partial to the OHLC form. I may yet build candlesticks and boxplots, ... we'll see ...

Here it is: GD-Graph-ohlc-0.9703.tar.gz

Read it: GD::Graph::ohlc, GD::Graph::candlesticks,

Changes:

0.9703: Tue Jul 23 2013
    - various minor changes and bugfixes
 
 0.9607: Sun Jan 06 2013
    - major bugs relating to the alternate color stuff that I
      don't think anyone (including myself) ever used.  Stripped
      it out.
    - Zen Kurokawa (@gmail) points out major drawing failure when
      the candlesticks when there are fewer data points than
      needed to fill the graph.
 
      https://rt.cpan.org/Ticket/Display.html?id=82524
 

I was particularly thrilled with Jamis Buck's Dungeon Generator, but I wanted to design something a little more flexible that allowed for export and generation plugins.

Although images aren't the only focus of the module, screenshots sell everything, so I provided this one an this one. I have also provided XSLT samples of each of them.

It's quite tittlating don't you think? There is also a new editor that's worth checking out.

File: Games-RolePlay-MapGen-1.5008.tar.gz
Man Page: Games::RolePlay::MapGen module.

Changes:

1.5008: Mon Apr 22 2013
    - provide fix for bug in Storable:
      https://rt.cpan.org/Ticket/Display.html?id=84705
 
 1.5006: Sat Dec 29 2012
    - added some experimental things, maybe develop later,
      maybe not
    - added is_on_map(target) to mapqueue
 
 1.5005: Sun Jul 10 2011
    - use common::sense and use parent
    - no AutoLoader
 

I wanted POSIX regexs in perl. It's not the first time I've wanted them. So I cranked 'em out. The File: POSIX-Regex-1.0003.tar.gz The Manpage: Check out the man page: POSIX::Regex.

Changes:

1.0003: Wed Apr 03 2013
    - there's an enormous variety of error messages between the
      perls
 
 1.0002: Fri Mar 29 2013
    - Matthew Horsfall (alh)  contributed
      patches via github.  
 
 

I had originally posted CPAN::CachingProxy project on perlmonks, where I was encouraged (privately) to post the code as a module on CPAN. I never hesitate to post on CPAN.

CPAN-CachingProxy-1.6500.tar.gz.

Changes:

1.6500: Fri Jan 20 2012
    - added support for http ranges from rfc2616§14
 
 1.6000: Tue Jan 03 2012
    - Nobody really uses this but me I guess; otherwise someone
      surely would have noticed the various timing problems with
      the cache by now.
 
      I have resolved them with lockfiles (for now).  I haven't
      thought of a better solution, and I think this will work
      fine.  I'd like to do better.  But, then, I'd also like to
      support file download continuations.  Ahh, later.
 

Nichus and I wrote this one for our network monitoring scripts. It turns 7654321 seconds into 12w4d14h12m1s. Date-Lima-1.4300.tar.gz / Date::Lima.

This module now works under the name Time::DeltaString — arguably a better name in every way.

Changes:

1.4300: Thu Dec 15 2011
    - added rev() to go from 9h22m5s to 33_725 seconds
 
 1.4210: Sun Jan 17 2010
    - added sidereal computations.  Boring really.
 
 1.4200: Sun Jul 12 2009
    - adding a bunch of tests, like critic and the pod tests
    - added daysmallest_conversions()
 

I wanted a simpler way to query XML documents. Twig is fun. XML::Simple isn't simple. The code to read really simple things is usually quite long -- or randomly incorrect.

My solution is a miniature query language that allows you to really simply say what you want to get (and how). It's not quite done yet, but it seems close. Simple is already taken and Easy isn't quite right.

But the queries are kinda cute: XML::CuteQueries.

XML-CuteQueries-0.6614.tar.gz

Changes:

0.6613: Wed Jun 01 2011
    - minor bug in exporter … and by minor I mean major
 
 0.6613: Fri Dec 18 2009
    - tiny bug regarding attr names vs namespaces
 
 0.6612: Wed Oct 21 2009
    - Just added Data::Dumper to the Makefile.PL reqs
 

I needed a way to track down refs that were circular and still sticking around at global destruction.

Devel-FindBlessedRefs-1.253.tar.gz

Changes:

1.253: Fri May 06 2011
    - fixed a couple typos.  renamed find_refs_with_coderef
 
 1.252: Wed Mar 25 16:22:38 EDT 2009
    - added chorny's META.yml stuff
 
 1.251: Sun Oct  5 09:38:38 EDT 2008
    - removed the other SvTYPE() since it's probably also wrong
 

I've decided to resurrect this old project from my college years. Back in the olden days, one of my teachers (not a professor, a Phd Student) by the name of Roger Zanny, needed a tool to start up his parallel processing applications concurrently over ssh.

He assigned it as a project for the class ... but I took it a step further and used it at work. We had like fifty identical machines, so it was perfect for setting clocks and installing updates and things.

I abandoned the project entirely when I nolonger had a need for it. Lately though, I've got like thirty crapy servers that are all identical ...

I wonder what google uses. mrsh is what I use, the guts of which are in this module: App::MrShell.

App-MrShell-2.0210.tar.gz

Changes:

2.0210: Fri Feb 18 2011
    - made it easier to use Perl child processes as the ssh
      command
    - which incidentally fixes various problems with windows
      builds
 
 2.0207: Fri Jan 08 2010
    - Dennis Boone was kind enough to not only point out a serious
      bug in the ssh command token processing, but find and fix
      it (http://is.gd/5UxgX).  Thanks!!
 
 2.0205: Wed Jul 08 2009
    - Doc bugs (very indirectly) found by Hans Dieter Pearcey
    - added perl critic and Test::Pod
    - fix bugs (as in wrongful code execution) found by critic.t
    - fixed many punctuation problems found by critic.t
 

Games::Go::SGF2misc is yet another SGF reader (Games-Go-SGF2misc-0.9781.tar.gz). This one spews the SGF in several formats. as_perl(), as_hash(), as_png(), etc... It is designed to work without the help or need for the infamous sgf2misc by J. Van Der Steen (http://gobase.org/software/sgf2misc/).

I've been wishing for a long time that perl had a previous_object() function like Pike. They showed me how on perlmonks.org... So I wipped this together quick. Here it is: Object-Previous-1.1012.tar.gz Read it: Object::Previous.

Changes:

1.1012: Fri Apr 02 2010
    - Slaven_Rezic via RT, "Previous.xs:61: error: 'const struct
      block_sub' has no member named 'hasargs'"
 
 1.1011: Wed Jul 08 2009
    - worst bug ever: I'm jettero@cpan.org, not paul@cpan.org
 
 1.1010: Wed Jul 08 2009
    - Doc bugs (very indirectly) found by Hans Dieter Pearcey
 

I needed a tool that would let me stuff several git repos into one svn repo so I could browse the source from five logically independant projects in one logically unified trac wiki.

This project will replay a git repo into svn and will automatically keep track of which commits have been replayed and not. It uses mainly native svn and git commands to do this (so both must be installed). It carefully preserves the dates and commit log entries into svn (again, using native svn commands to do so).

git-svn-replay 1.0214 (tgz), git-svn-replay (pod)

Changes:

1.0214: Fri Oct 02 2009
    - the -q option was borked, fixed
 
 1.0213: Mon Jul 20 2009
    - I made the makefile smarter about svn permissions to avoid
      test problems
 
 1.0211: Sun May  3 17:22:29 EDT 2009
    - fixed a bunch of bad assumptions in the tests.
 

Ben Lynn's PBC library is really fun: http://crypto.stanford.edu/pbc/. But I'm a perl nerd at heart, so I ported it to perl. He's actively working on his library, so I expect to have to update this module relatively regularly. File: Crypt-PBC-0.9000.tar.gz Man Page: Crypt::PBC.

Changes:

0.9000: Wed Jul 29 2009
    - updates were needed for the 0.5.1 release, which means that
      version, or newer, is now required to build this.
 
 0.855: Fri Mar 27 18:42:50 EDT 2009
    - added chrony's meta.yml stuff for the github repo
 
 0.854: Thu Aug 21 06:21:28 EDT 2008
    - Used EU::MM's prompt() instead of rolling my own.  BingOS++.
      Woops.
 

A friend of mine has a MythBuntu box, a Hauppauge HD PVR 1212, and few of the linux skills necessary to make that work really well since it isn't yet supported by the mythtv team.

Consequently, I suggested perl (because I know it really well) and github (because it's super fun): github/jettero/videodump-pl

Here's the cpan-package as it exists presently (ie, not ready for cpan at all): videodump-pl-1.67.tar.gz

Here's the man page: Videodump-PL.

I needed a way to get info about a process. I wanted it to work under BSD and Linux. Check out the man page: Unix::Process module (Unix-Process-1.3101.tar.gz).

Changes:

1.3101: Sat Apr 25 16:15:09 EDT 2009
    - a few tweaks and bug fixes (mostly doc bugs)
    - added new meta.yml stuff
 
 1.31: 
    - I used a perl 5.8 syntax in my Makefile.PL
    - although, I think this should work in perl 5.6
      + hrm, looks like IPC::System::Simple doesn't work under
        5.6, at some point they started using the "use if WINDOWS"
        syntax, which I think is from later perls.
 
 1.300_000: Tue May 27 12:09:33 EDT 2008
    - The autoloader was kinda crappy
    - There were whitespace bugs
    - I hate M::B and went back to EU::MM
      (so I also ditched version.pm)
 

Because I was doing a bunch of business related data processing recently (stockmonkey), I wanted to plot more data per time interval than just one price. I wanted to print Open, High, Close, and Low. There are a few ways to do it (candlesticks, box plots, etc), but I'm partial to the OHLC form. I may yet build candlesticks and boxplots, ... we'll see ...

Here it is: GD-Graph-ohlc-0.9401.tar.gz Read it: GD::Graph::ohlc.

Changes:

0.9401: Wed Apr 15 07:29:37 EDT 2009
   - this seems more or less ready to distribute

0.9401: Wed Apr 15 06:53:15 EDT 2009
   - got this more or less ready to try to use

0.01: Wed Apr 15 05:46:18 EDT 2009
   - skelling this up

I wanted something that worked like CGI.pm but for RSS. Sadly, nobody completed anything like that before me, so I have attempted to construct it. I know precious little about the format, but I think this is a reasonable attempt. Here it is: CGI-RSS-0.95.tar.gz, CGI::RSS.

Changes:

0.95: Mon Apr  6 11:06:15 EDT 2009
   - split the pod to a separate file
   - my rss does not validate...
   - added Date::Manip RFC822 date reformatting
   - taught CGI::RSS to preserve case on tags (involved
     deparse... blech)
   - fixed a bug in finish_rss
   - apparently, to validate, an RSS channel needs a
     description...

0.92: Thu Mar 26 12:00:54 EDT 2009
   - messed up the META.yml

0.91: Thu Mar 26 08:52:39 EDT 2009
   - ditching the lgpl2 gz file for the new meta
   - added chrony's meta.yml stuff

I had originally posted this project on perlmonks, where I was encouraged (privately) to post the code as a module on CPAN. I never hesitate to post on CPAN. File: CPAN-CachingProxy-1.4002.tar.gz Man Page: CPAN::CachingProxy module.

Changes:

1.4002: Wed Apr  1 06:49:50 EDT 2009
   - t/01_mg-new_auto.t is failing on like 10% of the perl5.10s,
     but why?  It makes no sense.  I've made it more verbose...
     what else can I do?

1.4001: Tue Mar 24 14:29:58 EDT 2009
   - pulled in chorny's Makefile.PL
     (http://github.com/chorny/cpan--cachingproxy/tree/master)
   - The new META.yml stuff is really neat.

1.4: Tue Mar 24 11:52:10 EDT 2009
   - RSRCHBOY requested that the $pinfo regexp be converted to a
     package option.  That change has been made.

Math::Units did almost what I wanted. I really wanted something like Math::Calc::Units -- which felt unfinished, and hadn't been updated for years. This (Math-Units-PhysicalValue-1.0005.tar.gz) is something I wrote for dividing things like "6,500 ft" and "43 s" and getting "103.16 miles/hour". This module uses Math::Units and Math::Algebra::Symbols to do all it's magic. Really, PhysicalValue is just a collection of clever operator overloads. Check out the man page: Math::Units::PhysicalValue module. Last updated on Tue Mar 31 11:19:17 EDT 2009

I was particularly thrilled with Jamis Buck's Dungeon Generator, but I wanted to design something a little more flexible that allowed for export and generation plugins. Although images aren't the only focus of the module, screenshots sell everything, so I provided this one an this one. I have also provided XSLT samples of each of them. It's quite tittlating don't you think?
There is also a new editor that's worth checking out.
File: Games-RolePlay-MapGen-1.4001.tar.gz
Man Page: Games::RolePlaying::MapGen module.

Changes:

1.4001: Tue Mar 31 07:59:51 EDT 2009
   - added another keyword and versioned up

1.4: ????
   - added the chorny META.yml stuff

1.4: Fri Aug 29 07:11:55 EDT 2008
   - lost version.pm (not worth it)
   - cleaned up the makefile quite a bit
   - use prompt() instead of  in makefile, to keep from
     causing cpan testers to chase me down with pitchfork
   - taught t/05_export to skip XML tests when broken XML::Simple
     and/or broken XML::SAX are encountered.

I needed to find all the refs blessed under PackageName. I was told that can't be done, but with XS, you can pretty much do anything you want. I don't think this is very efficient, but I only needed it for debugging. Here it is: Devel-FindBlessedRefs-1.252.tar.gz Read it: Devel::FindBlessedRefs.

Changes:

1.252: Wed Mar 25 16:22:38 EDT 2009
   - added chorny's META.yml stuff

1.251: Sun Oct  5 09:38:38 EDT 2008
   - removed the other SvTYPE() since it's probably also wrong

1.25: Wed Sep 10 07:01:39 EDT 2008
   - woops: http://perlmonks.org/index.pl?node_id=709036 --
     applies to this code also

Back in about 2001, I wanted to build a huge library of Technical Analysis tools for perl. I only built three of them originally.
File: stockmonkey-2.9013.tar.gz
Man Page: StockMonkey Modules.

Changes:

2.9013: Tue Mar 31 06:58:51 EDT 2009
   - I just noticed that the reason my versions are screwed up is
     that at some point (circa Jul12 2008) I went down in version
     -- foolishly forgetting about floating point versions. Grrz.

2.13: Mon Mar 30 09:54:57 EDT 2009
   - I changed the way the tests worked.  The rand() calls in the
     tests were making the tests fail fairly rarely, but also
     randomly.  I'm hopeful that the rare circumstances where the
     assumptions in the tests fail ... won't happen at all with
     pre-generated data.

2.111: Fri Mar 27 18:35:35 EDT 2009
   - added chorny code to the makefile that makes the repo show
     on cpan.

Ben Lynn's PBC library is really fun: http://crypto.stanford.edu/pbc/. But I'm a perl nerd at heart, so I ported it to perl. He's actively working on his library, so I expect to have to update this module relatively regularly. File: Crypt-PBC-0.855.tar.gz Man Page: Crypt::PBC.

Changes:

0.855: Fri Mar 27 18:42:50 EDT 2009
   - added chrony's meta.yml stuff for the github repo

0.854: Thu Aug 21 06:21:28 EDT 2008
   - Used EU::MM's prompt() instead of rolling my own.  BingOS++.
     Woops.

0.853: Thu Aug 14 12:05:26 EDT 2008
   - Fixed a build problem for bsd 
   - Fixed an eval { use Something } problem in a test.
     It now reads eval q{ use something };  ... grrz.

Net::Pcap does the job, but it's confusing and difficult to operate. This module solves that problem in a relatively general way.

I wanted an way to build libpcap filters really quickly. It shouldn't take two hours to crank one out, particularly since I imagine they all kinda look the same. So, I wrote this to simplify writing sniffers really quickly.

Here it is: Net-Pcap-Easy-1.325.tar.gz Read it: Net::Pcap::Easy.

Changes:

1.325: Fri Mar 27 18:28:59 EDT 2009
   - gah, bug in the Makefile.PL, noticed it when I installed on
     my new server.

1.322: Thu Mar 26 06:36:05 EDT 2009
   - There were a bunch of documentation bugs.
   - I fixed some lousy Makefile.PL code

1.321: Wed Mar 25 20:54:13 EDT 2009
   - added chorny's META.yml stuff

Essentially, I wanted a set of perl native packages that would do very basic statistics. That package (Statistics-Basic-1.6005.tar.gz) is called Statistics::Basic. It contains things like ::Mean, ::StdDev, ::Covariance, etc.

Changes:

1.6005: Thu Mar 26 12:22:23 EDT 2009
   - META.yml stuff

1.6004: Sun Mar  1 07:15:37 EST 2009
   - doc bug found by Raj Chandran

1.6003: Sun Feb  8 17:21:39 EST 2009
   - perl 5.8.0 can't deal with this program, requiring 5.8.1:

I wanted POSIX regexs in perl. It's not the first time I've wanted them. So I cranked 'em out. The File: POSIX-Regex-1.0001.tar.gz The Manpage: Check out the man page: POSIX::Regex.

Changes:

1.0001: Wed Mar 25 11:21:42 EDT 2009
   - releasing this as 1.0.1 because I had accidentally released
     it as a developer release

1.0: Thu Aug  7 15:25:12 EDT 2008
   - after much hullabaloo, I have determined that version.pm
     needs Module::Build to work reliably with XS and I have
     further determined that Module::Build causes more problems
     than it solves.  I hate it.  So I'm removing version.pm and
     Module::Build and going back to the ultra stable
     ExtUtils::MakeMaker.

0.90.16: Wed Jul 30 07:28:25 EDT 2008
   - changed my author and copyright sections, they were all
     wrong
   - removed the Makefile.PL, causes problems

This exports a send_mail() function into your local namespace.
The package: Net-SMTP-OneLiner-2.0.tar.gz The Manpage: Net::SMTP::OneLiner

Changes:

2.0: Fri Mar  6 11:26:01 EST 2009
   - ditched version.pm (doesn't work reliably)
   - added content encoding and transfers

1.4.0: Sun Oct 19 13:15:01 EDT 2008
   - made the subject optional

1.3.3: Tue May 27 12:02:10 EDT 2008
   - (wow, use version has to be on the same line as our $VERSION
      for older EUMM)

I wanted a bunch of patches to Net::IMAP::Simple, and the authors do not respond via rt.cpan nor email. This is my patched version, it gives put() unseen() and a bugfix. Here it is: Net-IMAP-Simple-Plus-1.17006.tar.gz

Changes:

1.17006: Fri Oct 31 07:56:45 EDT 2008
   - trying to make the makefile.pl work in 5.6

1.17005: Tue Oct 28 13:10:40 EDT 2008
   - I fixed a couple tiny little things with flags() and a pod
     typo

1.17004: Thu Oct 16 07:20:30 EDT 2008
   - This might fix the darwin build problems.  I think the silly
     pure perl version of patch I'm distributing (thank you CWEST
     btw) was expecting darwin to do something it didn't want to
     do ... I use unlink() excessively to solve this problem
     (theoretically).

I've been wishing for a long time that perl had a previous_object() function like Pike. They showed me how on perlmonks.org... So I wipped this together quick. Here it is: Object-Previous-1.1005.tar.gz Read it: Object::Previous.

Changes:

1.1: Wed Oct 29 08:33:39 EDT 2008
   - roflmao: I quit using version.pm but left it in the pm

1.1: Thu Aug  7 15:49:49 EDT 2008
    - version.pm is incompatible with EU::MM and
    - removed the Autoloader from the .pm

1.0.0:  Sat Jun  7 19:59:19 EDT 2008
    - finished the pure perl and XS versions

Nichus and I wrote this one for our network monitoring scripts. It turns 7654321 seconds into 12w4d14h12m1s. Date-Lima-1.3.tar.gz / Date::Lima.

Changes:

1.3: Tue Aug 12 07:19:17 EDT 2008
   - I modernized this greatly

1.2:  Fri Sep 22 07:47:51 EDT 2000
   - jettero redid the NAME field to match cpan

1.1:  Fri Sep 22 07:47:51 EDT 2000
   - jettero redid the exports

I needed a way to get info about a process. I wanted it to work under BSD and Linux. Check out the man page: Unix::Process module (Unix-Process-1.31.tar.gz).

Changes:

1.31: 
   - I used a perl 5.8 syntax in my Makefile.PL
   - although, I think this should work in perl 5.6
     + hrm, looks like IPC::System::Simple doesn't work under
       5.6, at some point they started using the "use if WINDOWS"
       syntax, which I think is from later perls.

1.300_000: Tue May 27 12:09:33 EDT 2008
   - The autoloader was kinda crappy
   - There were whitespace bugs
   - I hate M::B and went back to EU::MM
     (so I also ditched version.pm)

1.2.1: Mon May 26 15:44:35 EDT 2008
   - I might as well do a new version of everything using
     version.pm while I wait for all my CPAN deletes to go
     through.  I just discovered that version.pm doesn't/didn't
     go core until perl 5.9...  I really wish I'd have prereqed
     it everywhere I used it, but I didn't.  *sigh*

This (MySQL-Easy-2.0.4.tar.gz) is something I've been using over and over. I don't remember how I used to live without it. I had quit publishing this on CPAN for a while, but I decided to put it back after soneome asked about it. I have gotten grief about the namespace previously, but moving it into DBIx didn't work out. Check out the man page: MySQL::Easy module.

Changes:

2.0.4: Mon Jun  9 20:55:50 EDT 2008
   - added a smarter last_insert_id

2.0.3: Tue May 27 12:04:27 EDT 2008
   - (wow, use version has to be on the same line as our $VERSION
      for older EUMM)

2.0.2: Mon May 26 15:56:50 EDT 2008
   - I might as well do a new version of everything using
     version.pm while I wait for all my CPAN deletes to go
     through.  I just discovered that version.pm doesn't/didn't
     go core until perl 5.9...  I really wish I'd have prereqed
     it everywhere I used it, but I didn't.  *sigh*

I didn't write this. I fetched the CPAN version and the requirements failed to mention Test::Pod::Coverage. The tests didn't pass. And I was just generally POed about it. So I repackaged it and uploaded it to my website. I won't be releasing this version on CPAN or anything. I probably won't even mention it to the author. File: Crypt-Cracklib-1.1.jet.tar.gz Man Page: Crypt::Cracklib. Last updated on Thu Jul 19 09:15:26 EDT 2007

Games::Go::SGF2misc is yet another SGF reader (Games-Go-SGF2misc-0.9.8.tar.gz). This one spews forth the SGF in several formats. as_perl(), as_hash(), as_png(), etc... It is designed to work without the help or need for the infamous sgf2misc by J. Van Der Steen (http://gobase.org/software/sgf2misc/). And also without the perfectly acceptable Games::Go::SGF.

This (Net-IdentServer-0.56.tar.gz) is something I wrote for validating DSL users from behind a masq firewall. Long story. Check out the man page: Net::IdentServer module. Last updated on Sat May 7 14:06:41 EDT 2005

AI::GAUL is just a simple XS wrapper for the most excellent GAUL C lib. It is not done yet. Snag it here: AI-GAUL-0.0.7.tar.gz Last Modified: Wed May 5 09:09:53 EDT 2004

The Text::SpellCheck module (Text-SpellCheck-0.56.tar.gz) is just something I wanted for my giving 60 site. I never did get around to installing it though.
Last updated: Tue Apr 13 07:29:01 EDT 2004

This cute little module makes dockapps.
File: Wharf-JDockApp-1.2.1.tar.gz
Man: Wharf::JDockApp

This (FoxPro-DBF-0.16.tar.gz) is something I've been meaning to make for quite a while. The FoxPro::DBF module. This first step lets you read foxpro data from any platform (with perl). Clearly this module needs a new name. This module doesn't work with DBI because DBI is too sql-centric; though, that is an end goal, I just don't see how I can get this module to work with DBI. Last updated on Sat Feb 8 12:17:44 EST 2003

I have to use Card Service International at work ... This made their API bareable. The Business::CSI module (Business-CSI-0.81.1.tar.gz). Last updated on Mon Jul 30 20:50:47 EDT 2001.

This doesn't work yet. It will (in the future) load up glorious mysql client menus and things. :) MySQL::GUI module (MySQL-GUI-0.35.tar.gz). Last updated on Thu Jan 17 11:50:50 EST 2002