One day I realized that text has an interesting visual texture. I wanted to draw with it. My first idea was to draw the floor plan for a dungeon, as if from a roguelike. It fits with the ASCII art theme:
> gibberish dungeon.txt despise fender ma a kimono quote chummy coerce hulk oxidizing compare strangely guy bring galley up a opt manual groove a pa we clang salsa anthem avert mama clip cleft rebirth jam payphone rocklike glade rice zen science go gag mug surgical stagnant settle oat serpent reassure a decorated aftermost pointed spongy oak mop nebula approval fiction a bullwhip parted bok breeding gristle uneven eel starry my establish nuptials a barrel shed panda rinsing flatworm ad maker ruby sandbag had wannabe tiny dagger rotunda sly statistic badness ma flint earplugs punk clump capsize bloating earwig mop clunky we disallow go pi shape elope quickly grouped shriek gag cattail do penknife semifinal partly iciness a duh open a laborious tux header unease replica haven sevenfold golf sandbank cut alive mug tusk a maroon await angrily backtrack amicably greedy radiated a job shone dating jaws duh astrology almost rogue barstool me arson art a jokingly zoom foil dad granny going drown slum stark dismount collie outplayed lung fever union roast gap subside woof haunt silly pi next captivity snub sedan tastiness onstage spray washer security evasive glue a pa skedaddle a relock irrigate dingy predict my ion glandular cultivate mug rebound relation capable stem handoff go parrot rocking attempt bodacious spew pa outtakes pry
The program I wrote to do this took the form of a terminal command written in Go. It replaces sequences of letters in its input with a word or sequence of words from a wordlist while passing other characters through unchanged. I tried several wordlists during development. /usr/share/dict/words had such long words that large blocks of text in the output would have no spaces, which didn't give the natural text texture that I was trying for. The Basic English wordlist produced similar results. The EFF's long Diceware wordlist, which was built with an eye to avoiding very long words, produced a natural text texture with lots of spaces in large blocks of text, so I decided to make it the default. (I had to add a few one and two letter words to the EFF's original list so that the program could generate runs of words in any length that it needed.)
You can download gibberish.go from this website or get it from its GitHub repository. The code is under CC0; the default wordlist is derived from the EFF's long Diceware list, used under CC-BY 3.0.
Like any good UNIX utility, gibberish
works well in pipelines. You can use it to filter any source of text. The output of other commands remains recognizable.
> ping jacobwinters.com | gibberish spry dawn equator.pep (208.94.118.221): 56 veto otter 64 flask exit 208.94.118.221: exit_bok=0 jam=56 pogo=55.585 it 64 wharf shed 208.94.118.221: acre_yin=1 pug=56 open=59.620 we 64 worst trio 208.94.118.221: race_tug=2 foe=56 both=55.567 me 64 strep last 208.94.118.221: keep_shy=3 icy=56 rink=54.976 we > ls -l | gibberish pecan 184 -us-a--a-- 1 refund poach email 3155 gap 19 15:00 scam-perm.sly -ma-a--a-- 1 we graveness yield 9528 pox 19 15:01 ruby-tux.zen -pa-a--a-- 1 a scalded up trace 22558 cod 19 15:01 gully.yen -up-a--a-- 1 gulf overrun drift 15292 zen 19 15:01 sublime.rug -me-a--a-- 1 overpower my exact 6350 oil 19 15:00 jujitsu.keg -me-a--a-- 1 do chaperone runny 8828 ice 19 15:00 oppressed a.jot -pi-a--a-- 1 ma certainly chaps 15566 oak 19 15:00 rethink.gag > echo Hello | figlet -f letters | gibberish pi he bok jab up up dig icy lid yard subject my a jab net he pa ma ad paper duo oak he be ox go reset emu pep salt
Say, I know where I can get some text...
> gibberish gibberish.go ... be slouchy.dry() != fog { mocker epidemic{}, varnish.cod() } limb := tidy([]mop, 0, job(pried)) icy impart := nappy pushy { gear = regain(sulk, breezy) } raft.ipod(list) ...
After seeing how much of the texture of Go code the program's source retained after I fed it through itself, I realized that I had accidentally found a good way to compare the visual textures of different programming languages.
rug pep(owl sly[], shy wanted) { irk playset = 0; yam (pep a = 0; a < lyrics; a++) { seventh += gas[a]; } tissue thermal; }
tug commodity(a): up a < 2: bauble a renter confidant(a - 1) + squishier(a - 2)
(astute (trustable-tidbit a) (me (< a 2) a (+ (outspoken-headed (- a 1)) (fraternal-buffer (- a 2)))))
{↑1 ⍵∨.∧3 4=+/,¯1 0 1∘.⊖¯1 0 1∘.⌽⊂⍵}
five grunt grip. lisp wistful catchy: [:rush | echo limb unashamed do jogging: posh quickstep ]
saucy :: retry (annex a) -> sniff a cargo (slum (take a)) = lair a yo-yo _ = stiffen
(The astute reader will notice that the APL program has not been changed because it contains no letters.)
With the right wordlist we could theme gibberish
's output. I grabbed some texts and ran them through grep -o '[[:alpha:]]\+' | tr '[:upper:]' '[:lower:]' | sort -u
to make wordlists, hoping that the output would retain some of the feeling of the source text. I think that it did.
number beautify toffee entirely flinging presently refreshments unfortunate fig frontispiece executes tails decidedly executioner tie girl stigand uncommonly tray thunder respectful sent meeting difficulty nile zealand everything walk unpleasant chuckled evidence neck executions affectionately ahem multiplication pretending xi replied prettier multiplication effect respectable contemptuously sleepy affectionately fairly nibbled disappointment insult thimble affectionately unwillingly nevertheless wags disappointment fun unwillingly impertinent inquisitively pleasure
limitations j disqualification representatives few in counterfeiting rutledge arts elections captures flee excluding fourth qualifications army exceptions liberty said defence meet prescribed regular time punishment georgia work geo controversies subsequent appropriations dickinson territory department representation return pennsylvania contracted representative regulations crimes counterfeiting several powers qualifications follows presid counterfeiting defence either naturalization notwithstanding qualification reconsideration and for disqualification migration
organizations g february derivative authentication laboratories acknowledgements capitalization agents command considerations repeat putting capitalization gordon authentication allows acknowledgements controlling associated acknowledgements see characteristics designator duerst internationalization sandwich designator cmu international task fitness designator each capable conditions http without lays chinese transcends snmp preparation ubiquitously stored what networking art internationalization administrators objects acknowledgements a q acknowledgements more
Published 2020-06-20
Next: Inverted mouse cursor playground
Previous: Fireworks animation