Chronological listing of my recent accomplishments:
- 1995 (SegMat, MaasInfo.html)
- 1996 (4 full screens: flashcard program, Macintosh internals, porting to Solaris, Go program)
- 1997 (Fred windows, procmail,
MS-Windows, knot, PCNET)
- 1998 (flashcards, file maintenance)
- 1999 (peer counseling, personal growth)
- 2000 (peer counseling, porting software to Unix)
- 2001 (porting software to CGI, new CGI demos)
- 2001.Nov-2002.Jan (spam-fighting software)
- 2002 (more spam-fighting software, new CGI services, tutoring, flashcard-drill via CGI)
- 2002.Dec..2003.May (much more spam-fighting software)
- 2003 (classes, tutorials, more spam-fighting software, WAP/cellphone pages)
- 2004 (classes, interval arithmetic, Java programming, more spam-fighting software, tutorials, UniCode)
- 2005 (classes, J2EE, BeanShell, SAX, ELISP, Web-accessible instant alert service)
- 2007.Jan -- Began work on my multi-programming-language "cookbook"
-- Wrote new software module for mostly-balanced binary search tree
containing intervals instead of single integers as the keys.
- 2007.Feb -- Completed chapters 1,2, began work on chapter 3, the actual matrix relating two different datatypes to show all utilities which work between them.
-- Began making new decks for my flashcard-drill optimizer: Pre-school reading readiness, ESL, citizenship, English-to-Mandarin. Started another round of enhancements to my existing English-to-Spanish deck.
-- Began re-organizing my old spam-fighting code and related utilities
to have each module in its own separate file, with interfaces between modules
clearly delimited. Also wrote some new modules, and added code to old modules,
and changed old code to be more flexible:
- 2007-2-cmucl.lisp -- Low-level patches etc. specific to CMU
Common Lisp.
- 2007-2-dialup.lisp -- Functions related to VT-100 dialup,
including deliberately-slow printing to avoid buffer overflow.
- 2007-2-mayload.lisp -- Automatic one-time loading of modules
that are needed but haven't been loaded before.
- 2007-2-roll.lisp -- Rolling main version of file to backup and
latest uploaded temporary version to be new main version.
- 2007-2-span1.lisp -- Utilities for dealing with Spanish-language
text, including generating English-to-Spanish flashcard records.
- 2007-2-top.lisp -- Toplevel applications.
- 2007-2-util.lisp -- Low-level utilities not specific to any
specific type of application.
- 2007.Mar -- Continuing work on flashcard decks. Made improvements to flashcard-drill program, including fixing a couple minor bugs which hadn't been noticed before. Began seriously using my program to simultaneously learn Spanish and Mandarin. Making JI\NBU\ daily...
-- More reorganization of old software modules and writing new modules:
- 2007-3-html.lisp -- Fullfledged two-pass parser for HTML syntax!
- 2007-3-nntp.lisp -- Connect to NNTP server and issue commands and download+collect data such as headers or articles.
- 2007-3-rawbw.lisp -- Utilities specific to configuration of this shell machine and the ISP's mail server.
- 2007-3-rfc822.lisp -- Parsing RFC822 headers etc.
- 2007-3-spamu.lisp -- Dealing with spam as it specifically relates to e-mail that arrived on a Unix shell account.
- 2007-3-top.lisp -- More toplevel applications.
- 2007-3-whois.lisp -- Querying WHOIS servers and parsing the result.
- 2007.Apr -- More reorganization of old software modules and writing new modules:
- 2007-4-glean.lisp -- Smart system for recognizing tens of different ad hoc formats by which admins have mentionned spam-complaint (CTW) addresses within whois records, and gleaning the appropriate addresses found there.
- 2007-4-html.lisp -- More add-ons to HTML parser.
- 2007-4-lynx.html -- Running Lynx as sub-process.
- 2007-4-spam.lisp -- Generic routines for dealing with spam, not specific to Unix
- 2007-4-spamu.lisp -- More Unix-specific code related to spam.
- 2007-4-whois.lisp -- Query a WHOIS server to download records (which are later parsed by either the proper WHOIS-record parser here, or simply gleaned by the smart system in another file).
- 2007.May -- More reorganization of old software modules and writing new modules:
- 2007-5-dig.lisp -- Running DiG as sub-process and parsing the report it generates, used to query Domain Name Servers to learn MX and A records.
- 2007-5-mbbt-intlen.lisp -- Add-on to MBBT (mostly-balanced binary-search-tree) to store intervals as keys, and maintain both sub-tree node count and sub-tree total of interval lengths.
- 2007.Jun -- 2007-6-smtp.lisp -- New code for SMTP client using direct
TCP streams.
- 2007.Jul -- Began translating SMTP and NNTP clients to Java, for
porting to MicroSoft Windows.
- 2007.Oct -- Continued work on 2007-4-spamu.lisp which processes spam that arrived on Unix, keeping track of postings to newsgroup news.admin.net-abuse.sightings and Yahoo! Group "Binary Spam Attachments".
Continued work on 2007-2-fc2.lisp which contains maintainence utilities for my flashcard Web applications, including automatically building new decks of flashcards for foreign languages etc.
- 2008.Mar -- Began serious development of ProxHash technology for specific application: Transferrable/Soft skills.
Wrote 2008-3-TextGraphics.lisp which draws diagrams of nodes connected by edges using ASCII-art technique.
- 2008.Apr -- Continued ProxHash development, achieved success mid-month.
Began work on 2008-4-MayLoad.lisp which is similar to the Unix 'make' utility (updating outputs whenever inputs have changed) except that it works with both disk files and in-memory data structures.
Began refactoring ProxHash code to support automatic maintainance of dataflow from input to various needs using 2008-4-MayLoad.lisp.
- 2008.May -- Continued refactoring ProxHash work-to-date to use automated dataflow.
Wrote first draft of specification of 2008-4-MayLoad.lisp
- 2008.Jun-Sep sometime -- Conceived the basic idea of filtering job ads to automatically eliminate any that require skills the jobseeker doesn't have, see FilJob later below.
- 2008.Jun -- Began R&D for additional stages of ProxHash application to transferrable skills, including automatic generation of a listing of outliers starting with the most distant from nearest neighbor.
- 2008.Jul -- Re-implemented the basic idea of my 1977 quick-and-dirty algorithm for generating large random proven prime numbers using a newly-conceived cleaner algorithm.
Modified the pseudo-random hashing algorithm used for ProxHash to run as a lazy infinite series, thereby making it usable as an unlimited stream of of pseudo-random numbers that are determined by a seed string.
Modified my quick-and-dirty random-prime algorithm to use the seeded pseudo-random number sequence, thereby providing a deterministic map from seed plus parameters to specific prime(s), thereby allowing the seed to serve as a "password" for re-creating a user's secret prime number(s).
Got InterNet enabled on my cellphone ($5 for up to 5 megabytes download over a 30-day period). Edited my existing WAP pages from 2003 back down to appropriate
tiny size and started creating new WAP pages including ESL for former-Chinese residents who don't yet understand the concept of our semi-phonetic alphabet.
After discovering my login form from 2003 doesn't work on my new cellphone, in parallel with the regular HelloCGI+steps, I've now started HelloWAP+steps for cellphone, to see what needs changing to make CGI applications work on cellphones.
- 2008.Aug -- Finished the ESL page (see link above) for lower-case English letters as first letter of word for easily recognized picture.
Developed extremely defensive measures to protect me from loss of work each time PowerLisp hangs my computer forcing a COLD RESTART.
Wrote PL-patch.lisp which defines nearly-essential Common Lisp functions missing from PowerLisp (REDUCE SLEEP BREAK).
Converted 2005-7-ranpri-gp.lisp and 2005-8-readers.lisp to work in PowerLisp.
Wrote 2008-8-cols.lisp which parses multi-column tabular layout such as directory listing from FileList.
Wrote 2008-8-fill.lisp which fills paragraph with prefix copied to start of each line, essentially what the original EMACS at MIT used to do. One standard usage copies the prefix from the first line. This is useful for quoting what somebody said before you in a discussion forum or e-mail. Another standard usage copies the whitespace indentation from the second line. This is useful for emulating the indentation of HTML list items in lynx or prettyprinting text inside parenthesized expressions.
Wrote 2008-8-wordParse.lisp, which defines a utility to parse words from a string, and uses that utility plus additional code to correctly parse lines from my caller-ID log file, and converts them to scriptlets to report harassing calls to whocalled.us.
- 2008.Sep -- Wrote 2008-9-pp.lisp which optimally pretty-prints a
Lisp structure as an s-expression, confined to various column widths.
- 2008.Oct -- Wrote a proposed plan for recovery from current housing/finacial/economic crisis.
Found somebody at ProMatch in EDD building who liked my idea of a "cooperative" to tag data for automatic filtering of job ads.
- 2008.Nov -- Wrote a plan for my longstanding idea of a "cooperative" filtering service for job ads.
- 2008.Dec -- Wrote 2008-C-digits.lisp which efficiently computes the number
of digits (in arbitrary base) of a large integer.
- 2009.Jan -- Began maintaining listing of digital-TV channels with info about their quality of service.
- 2009.Feb -- Begin writing PHP code to implement Turing tests to distinguish live humans from spambots, as entry-portals to new Web-based services I'll be setting up, and getting custom TINYURLs to redirect to them. See for example:
- HotNot (photo-verification services affiliated with HotOrNot & America's Most Wanted & Vanished Children's Alliance)
- LinkII (combination of ideas from six degrees of freedom and LinkedIn)
- FilJob (filtering job ads to eliminate jobs requiring skills/experience you don't have)
- UrlBad (registry of bad Web pages and where to report each to appropriate WebMaster)
- xspamx (sample of Turing test, with PHP source which you are free to copy and adapt to protect your own Web-service site)
- NewEco (overall proposal for a new type of economy, namely a "cooperative" barter system, in which the specific services (some listed above) are functional components)
- 2009.Feb... Twitter.Com/CalRobert contains moment-by-moment notes on current work, vaguely analagous to a transaction journal in business, which I plan to eventually copy (selected items) to here.
- 2009.Mar: Wrote business logic of set-barter algorithm, working as demo on both PowerLisp IDE and Unix-shell stdio.
Wrote 2009-3-NestAL.lisp which provides a set of utilities to
build and use nested associative arrays.
- 2009.Mar-Jul: Wrote generic non-validating SGML/XML DOM parser.
- 2009.Mar thru 2011.Feb: Finalized first design of NewEco, built essential account-management and first major features, see details listed in various months.
- 2009.Mar: Realized that NewEco could be merged with a government program such as CCC or WPA or ELR, whereby NewEco takes money earmarked for people in various jurisdictions and allows qualified individuals to "cash out" some of their labor credits. Realized that the same merge can occur with charitable contributions and gift cards etc.
- 2009.May: Started to write PHP/MySQL scripts to implement NewEco: Wrote code for use case:
- [create new user account].
- 2009.Jun: For NewEco, wrote code for use cases:
- [log in]
- [log out]
- [if credit=0 require take Turing test]
- [get information]
- [optional extra Turing test to avoid credit reaching zero]
- 2009.Aug: Designed and implemented a way to covertly bootstrap a public-key cryptosystem across an insecure link between my Macintosh and the remote Unix shell account.
- 2009.Nov-2010.May: Within NewEco, implemented first major feature:
- [Surveys] with these use cases:
- User nominates meta-answer to "what question"
- Master approves meta-answer
- Users see list of meta-answers with current total and self votes
- Users invest funds to vote for meta-answer
- Master promotes popular meta-answer to be actual question
- User nominates answer to promoted question
- Master approves answer
- Users see list of answers with current total and self votes
- Users invest funds to vote for answer
Most important question is "what feature should I implement next in NewEco"
- 2010.Apr: Wrote first draft of full design of using public-key cryptosystem to control satellite servers.
- 2010.May: Converted my chronologocal NewEco proposal and journal of progress to be structured instead.
- 2010.May-Jun: Implemented VTAorg to select cellphone-sized excerpt from public-transit schedules.
- 2010.Jul: Implemented Web-server application, for cellphone, to interactively crop (trim) images so that the remaining part blows up to fill the cellphone screen.
Implemented Web-server application to harvest images from Google image search and display them much more compactly on cellphone screen than images.google.com does, and upon selecting an image to blow it up to fill whole screen instead of just most of screen as images.google.com does.
- 2010.Jul-Aug: Wrote my own PHP version of big-integer decimal-string arithmetic, which is too slow for large exponents used in private key (sign or decrypt), but usable for small powers used in public key (encrypt or verify signature).
- 2010.Aug-Sep: Wrote an interface between PHP and Common Lisp whereby PHP writes s-expressions telling Lisp what big-integer-power task to perform, and Lisp writes the results in XML to be parsed by PHP. This takes only a half second to re-start Lisp and about 5 milliseconds for Lisp to do the arithmetic, which is fast enough for large exponents used in private key (sign or decrypt).
- 2010.Oct: Wrote 2010-A-rand.php, which uses the entropy of repeated micro-second-precision timing of simple loop on a shared computer to generate truly random big-integers in a given range.
- 2010.Nov: Using 2010-A-rand.php, implemented covert bootstrap of public-key cryptosystem from bootMaster (Lisp) to remote PHP/MySQL site.
Started writing signed&encrypted commands:
- ListTables = List tables in remote DB
- ListUsers = List NewEco users on remote site
Wrote 2010-B-arch.lisp, which maintains copies of large image files on multiple remote hosts, to reduce disk space on my shell account.
Wrote 2010-B-random.lisp, translated from 2010-A-rand.php and adapted to work with Lisp's only-hundredth-of-second timing reports.
- 2010.Dec: For NewEco to interoperate with other servers: Implemented public-key server-to-server SOAP-like RPC over HTTP (PK-SS-SOAP-RPC/HTTP), which includes:
- Put funds into escrow
- Set up signed&encrypted voucher+request (ECHO for test purposes)
- Pass control to Unix
- Fetch&decrypt
- Do the requested task
- Send back signed&encrypted receipt+result
- Pass control back to NewEco
- Move spent funds from escrow to master account and unspent funds back to user's account.
- 2011.Jan: Using PK-SS-SOAP-RPC/HTTP, implemented a feature of transferring control from the NewEco main host to my Unix shell account and querying whether I'm online (thus available to provide customer support) and if so how long I've been idle, and presenting the info to user back on the NewEco site.
- 2011.Jan-Apr: Wrote software to automatially filter DICE job ads, and thus collect ads for jobs for which I might qualify. So-far it's filtered about 3300 jobs down to just 232 job ads for which either I seem to qualify or I need to complain about crappy format.
- 2011.May-Sep: Upgraded 2009-A-subcurl.lisp 2009-A-yahoo.lisp 2009-A-yahpw.lisp
and wrote 2011-8-YahLog.lisp 2011-9-YMcap.lisp, all to automatically navigate Yahoo! Mail login and download Captcha and size for cell-phone to recover an account for which somebody else had tried to guess the password too many times, and also deal with Yahoo! Mail insisting repeatedly that I upgrade to a new version that doesn't work here, with my software "jumping through hoops" to revert to the Classic version that does work here. Also after finally getting login, harvesting the toplevel list of folders and the [Edit] table showing total+unread for each folder and grand totals, displaying each nicely lined up as if on old.FastMail.fm
- 2011.Sep: Wrote 2011-9-segmat.lisp, which is an add-on to SEGMATSEQ to auto-train on sets of similar strings to form a generic template. First practical use is to match URLs with randomized CGI parameters that appear during Yahoo! Mail login.
.