| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
| |
cj/lipsum returned nil when the Markov chain was empty (for example with the training file missing), so cj/lipsum-insert ran (insert nil) and raised a cryptic wrong-type error far from the cause. It now signals a user-error naming the fix: train the chain or restore the file.
The Commentary advertised M-x cj/lipsum, but the function had no interactive spec. I added one, echoing the words interactively while still returning the string for cj/lipsum-insert and cj/lipsum-paragraphs.
|
| |
|
|
|
|
| |
Final classification batch: the last 19 modules — linear-config, local-repository, lorem-optimum, mail-config, markdown-config, music-config, pdf-config, quick-video-capture, reconcile-open-repos, restclient-config, slack-config, system-commands, telega-config, tramp-config, transcription-config, video-audio-recording, vterm-config, weather-config, wrap-up. I annotated each header, added a Batch 9 table to the inventory, and extended the validation allowlist. 101 of 102 modules are now classified; only elfeed-config remains, deferred on its test fix.
Two more hidden dependencies turned up. video-audio-recording uses the boundp shim for its C-; r binding, and mail-config registers C-; e directly without requiring keybindings, so it errors standalone rather than degrading. Both recorded for Phase 2.
|
| |
|
|
| |
The Makefile's `COVERAGE_EXCLUDE' comment said why `test-all-comp-errors.el' is excluded but not why `test-lorem-optimum-benchmark.el' is. It now notes that undercover's instrumentation slows execution enough to fail the benchmark's wall-clock assertions. And `cj/markov-generate' now has a comment explaining why `tokens' is seeded reversed (`(list w2 w1)'): the list is built with `push' and `nreverse'd at the end, so without the note the reversed seed reads like a bug at a glance.
|
| |
|
|
| |
`cj/markov-join-tokens' collects tokens in a list and `mapconcat's once instead of repeated string concatenation. `cj/markov-generate' uses `push'/`nreverse' instead of repeated `append'. The Markov keys are cached as a vector so random key selection is O(1). Re-enabled the benchmark tests (the `:slow' tags were stale) and added a `cj/lipsum-title' test after byte-compilation flagged a malformed form there. `assets/liber-primus.txt' is left as-is (36 KB / 5,374 words, small enough not to need trimming). 100K-word learning now measures about 196 ms.
|
| |
|
|
|
|
|
| |
- Enable wttrin-debug in weather-config.el
- Remove redundant lipsum chain reset at startup (silences noisy message)
- Improve learn message to identify lorem-optimum as source
- Delete unused lipsum-generator.el (superseded by lorem-optimum)
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The tokenizer was creating substring copies on every iteration:
- (substring text pos (1+ pos)) for whitespace check
- (substring text pos) for regex matching - copies ALL remaining text
This caused 10K word tokenization to take 727ms instead of 6ms.
Fix: Use string-match with start position parameter and check
characters directly with aref instead of creating substrings.
Performance improvement:
- Tokenize 10K words: 727ms → 6ms (120x faster)
- Learn 10K words: 873ms → 15ms (59x faster)
- Learn 100K words: 70s → 208ms (341x faster)
|
|
|
Rename `lorem-generator.el` to `lorem-optimum.el` for fun.
Enhance text tokenization, Markov chain learning, and text
generation functions. Introduce new configuration variables for
training files and improve efficiency with vectorized access. Add
comprehensive benchmarks and unit tests under `tests/`. This
improves performance and lays groundwork for further extensions.
|