Recently I've been teaching myself new programming languages with books. I got one for D, Elixir, Erlang, and Go.
OCaml was also on my list of languages to learn, but there is no good OCaml book available. I started reading an online course textbook (for Cornell's CS 3110), only to find it painfully slow, beginner-level, and aimed at course tools besides. Eventually, I found the official OCaml manual to be the best source of information.
Unforunately, there is no published version of the manual. It is available online as HTML, PDF, or even a text file, but that's all. So, I went to Lulu and published my own copy of their PDF.
The PDF is so long I split it into two volumes. I'm pleased by how the manual turned out, though I haven't actually used it much for reference -- I've already spent two weeks programming OCaml before it arrived (Lulu is not fast).
I've been working on a text editor
I've been working on a terminal text editor in OCaml for two weeks. I'll post about that in more detail if and when I finish it.
Here’s a list of books I read in 2024. The ones in bold I recommend.
Fiction:
(Aether's Revival, Book 1) Aether's Blessing by Daniel Schinhofen
Agartha Loop 1 by RavensDagger
Agartha Loop 2 by RavensDagger
All the Skills 3 by Honour Rae
All the Skills 4 by Honour Rae
Among Others by Jo Dalton
Assistant to the Villain (Book 1) by Hannah Nicole Maehrer
(Androne, Book 1) Androne by Dwain Worrell
(Androne, Book 2) Alliance by Dwain Worrell
(Arcane Ascension, Book 4) The Silence of Unworthy Gods by Andrew Rowe
(Arcane Ascension, Book 5) When Wizards Follow Fools by Andrew Rowe
Astral Odyssey by Virgil Knightley, Jay Aury
(Babel, Book 1) Senlin Ascends by Josiah Bancroft
(Babel, Book 2) Arm of the Sphinx by Josiah Bancroft
(Babel, Book 3) The Hod King by Josiah Bancroft
(Babel, Book 4) The Fall of Babel by Josiah Bancroft
Beware of Chicken by Casualfarmer
Blood for Power 1 by Scott W. James
Book of the Dead: Awakening by RinoZ
(Budding Scientist in a Fantasy World, Book 1) A Small Town in Southern Illvaria by Acaswell
(Budding Scientist in a Fantasy World, Book 2) Society of Starry Eyes by Acaswell
The Coworker by Freida McFadden
Cultination Begins with Generosity by Plutus
Dead Tired 1 by RavensDagger
Dead Tired 2 by RavensDagger
Delve by SenescentSoul
Discovery of Witches by Deborah Harness
(Discworld) Science of Discworld by Terry Pratchett et al
(Discworld) Night Watch by Terry Pratchett
(Disinherited Prince, Book 1) The Disinherited Prince by Guy Antibes
(Disinherited Prince, Book 2) The Monk's Habit by Guy Antibes
(Disinherited Prince, Book 3) A Sip of Magic by Guy Antibes
(Disinherited Prince, Book 4) The Sleeping God by Guy Antibes
(Disinherited Prince, Book 5) The Emperor's Pet by Guy Antibes
(Disinherited Prince, Book 6) The Misplaced Prince by Guy Antibes
(Dumb Luck and Dead Heroes, Book 1) The Worst Ship in the Fleet by Skyler Ramirez
(Dumb Luck and Dead Heroes, Book 1) The Worst Spies in the Sector by Skyler Ramirez
Dungeon Devotee by Nixia
(Dungeon Crawler Carl, Book 7) This Inevitable Ruin by Matt Dinniman
Eight by Samer Rabadi
Eight 2 by Samer Rabadi
Eight 3 by Samer Rabadi
(God of Density, Book 1) Dawn of the Density God by ToraAKR
(Gods of the Game, Book 1) Krieg Chess by Phil Tucker
(Gods of the Game, Book 2) Gods of the Game by Phil Tucker
(Grand Game, Book 5) Wolf in the Void by Tom Elliot
(Grand Game, Book 6) A Scion's Duty by Tom Elliot
(Grand Game, Book 7) Ancient Debts by Tom Elliot
Grimmwald by Jay Aury
Heavenly Shae by daneislazy
Hell Difficulty Tutorial by Cerim
Heretical Fishing by Haylock Jobson
(Immortal Great Souls, Book 3) LastRock by Phil Tucker
(Industrial Strength Magic, Book 1) Industrial Strength Magic by Macronomicon
(Industrial Strength Magic, Book 2) Sequel.exe by Macronomicon
(Industrial Strength Magic, Book 3) Rival.EXE by Macronomicon
The Kaiju Preservation Society by John Scalzi
Law of the Jungle 1 by Vasily Mahanenko
Law of the Jungle 2 by Vasily Mahanenko
Law of the Jungle 3 by Vasily Mahanenko
Law of the Jungle 4 by Vasily Mahanenko
Law of the Jungle 5 by Vasily Mahanenko
Law of the Jungle 6 by Vasily Mahanenko
Law of the Jungle 7 by Vasily Mahanenko
Law of the Jungle 8 by Vasily Mahanenko
Library System Reset (Book 1): Overdue by K.T. Hanna
Library System Reset (Book 2): Damaged by K.T. Hanna
Library System Reset (Book 3): Rebound by K.T. Hanna
Machine of Death edited by Matthew Bennardo and Ryan North
Magic's Mantle by Bruce Sentar
Mercy of Gods by James S.A. Corey
(Millenial Mage, Book 7) Eskau by J.L. Mullins
(Millienial Mage, Book 8) Ironbound by J.L. Mullins
Minute Mage 1 by Reg Rome
Minute Mage 2 by Reg Rome
Morning Glory Milking Farm by C.M. Nascosta
Murder Your Employer by Rupert Holmes
(Murderbot, Book 2) Artificial Condition by Martha Wells
(Murderbot, Book 3) Rogue Protocol by Martha Wells
Never Die Twice by Maxime J. Durand (Void Herald)
Newt and Demon by Edwin M. Griffiths
(Nothing Mage, Book 3) Syzygy by J. P. Valentine
Orconomics by J. Zachary Pike
Pale by wildbow
Path of Ascension 1 by C. Mantis
Path of Ascension 2 by C. Mantis
Path of Ascension 3 by C. Mantis
Path of Ascension 4 by C. Mantis
Path of Ascension 5 by C. Mantis
Path of Ascension 6 by C. Mantis
Path of Ascension 7 by C. Mantis
Press Start to Play edited by Daniel H. Wilson and John Joseph Adams
The Primal Hunter 1 by Zogarth
The Primal Hunter 2 by Zogarth
Quest Academy (Book 1): Silvers by Brian J. Nordon
Quest Academy (Book 2): Scavengers by Brian J. Nordon
Quest Academy (Book 3): Saviors by Brian J. Nordon
(Revelation Space) The Prefect by Alastair Reynolds
(Revelation Space) Elysium Fire by Alastair Reynolds
(Revelation Space) Machine Vendetta by Alastair Reynolds
(Revelation Space) Revelation Space by Alastair Reynolds
Royals of Villain Academy 1-4 by Eva Chase
Seek by wildbow
(Shades of Magic, Book 2) A Gathering of Shadows by V.E. Schwab
She of Many Dragons by Honour Rae
(Stargazers War, Book 1) To Flail Against Infinity by J.P. Valentine
(Stargazers War, Book 2) To Catch a Falling Leaf by J.P. Valentine
(Mortal Techniques, Book 3) Spirits of Vengeance by Rob J. Hayes
(Steerswoman, Book 4) Words of Power by Rosemary Kirstein
(Strings of Empire, Book 1) The Wizard Corps by Guy Antibes
(Strings of Empire, Book 2) The Cloister Wizard by Guy Antibes
Three Kinds of Lucky by Kim Harrison
Translation State by Ann Leckie
(Undying Magician, Book 3) The Undying Caverns by Shane Purdy
(Unbound, Book 1) Dissonance by Nicoli Gonnella
(Unbound, Book 1) Silence by Nicoli Gonnella
(Unbound, Book 1) Hunger by Nicoli Gonnella
(Unbound, Book 1) Fury by Nicoli Gonnella
(Unbound, Book 1) Threshold by Nicoli Gonnella
(Unbound, Book 1) Expanse by Nicoli Gonnella
Villain for Hire (Book 1): Bad Girls Abound by Jay Aury
Villain for Hire (Book 2): Damsels and Deathrays by Jay Aury
Villain for Hire (Book 3): Maidens and Master Minds by Jay Aury
Villain for Hire (Book 4): Hell on High Heels by Jay Aury
Villain for Hire (Book 5): Fembots with Benefits by Jay Aury
The Villainess Is An SS+ Rank Adventurer 1 by Kaye Ng
The Way of Shadows by Brent Weeks
Nonfiction:
Coders at Work by Peter Seibel
The Madman's Library by Edward Brooke-Hitching
To-Do List Formula by Damon Zahariades
Veneering Made Easy by Herman Hjorth
Here’s a list of books I read in 2023 (a year later!). The ones in bold I recommend.
All the Skills 1 by Honour Rae
All The Skills 2 by Honour Rae
(Alpha Physics, Book 1) Wagga by Alex Kozlowski
(Alpha Physics, Book 2) Delay by Mr Alex Kozlowski
(Alpha Physics, Book 3) Disquiet by Mr Alex Kozlowski
(Alpha Physics, Book 4) Albury by Alex Kozlowski
(Alpha Physics, Book 5) Dungeon by Alex Kozlowski
(Alpha Physics, Book 6) Home Bound by Alex Kozlowski
The Amber Project by J.N. Chaney
Amelia The Level Zero Hero 1 by V.A. Lewis, Melas Delta
Among Strangers by Robert Silverberg
(Arcane Ascension, Book 1) Sufficiently Advanced Magic by Andrew Rowe
(Arcane Ascension, Book 2) On the Shoulders of Titans by Andrew Rowe
(Arcane Ascension, Book 2) The Torch that Ignites the Stars by Andrew Rowe
(Arcane Awakening, Book 1) Imperial Wizard by J Parsons
(Arcane Awakening, Book 2) Imperial Wizard 2: Ambitions by J Parsons, Niki Prince
Armada by Ernest Cline
(Astra Academy, Book 1) Academy Arcanist by Shami Stovall
(Astra Academy, Book 2) Mimic Arcanist by Shami Stovall
The Atlantis Gene by A.G. Riddle
(Body Electric, Book 3) Hardware by Electra Shepherd
Bridge of Birds by Barry Hughart
(Brightest Shadow, Book 1) The Brightest Shadow by Sarah Lin
(Brightest Shadow, Book 3) The Unnecessary Victory by Sarah Lin
(Budding Scientist in a Fantasy World, Book 1) Small Town in Southern Illvaria by Acaswell
Brute Force by Scott Meyer
The Chemist By Stephanie Meyer
Clear (Comixology Originals) by Scott Snyder, Will Dennis, Francis Manapul, AndWorld Design
(Completionist Chronicles, Book 1) Ritualist by Dakota Krout
(Completionist Chronicles, Book 2) Regicide by Dakota Krout
(Completionist Chronicles, Book 3) Rexus, Side Quest by Dakota Krout
(Completionist Chronicles, Book 4) Raze by Dakota Krout
(Completionist Chronicles, Book 5) Ruthless by Dakota Krout
(Completionist Chronicles, Book 6) Inflame by Dakota Krout
(Completionist Chronicles, Book 7) Invent by Dakota Krout
(Completionist Chronicles, Book 8) Implode by Dakota Krout
(Completionist Chronicles, Book 9) Tenacity by Dakota Krout
(Completionist Chronicles, Book 10) Thesaurize by Dakota Krout
Conspiracy of Truths by Alexandra Rowland
(Cradle, Book 12) Waybound by Will Wight
Dawn of the Void 1 by Phil Tucker
Dawn of the Void 2 by Phil Tucker
Dawn of the Void 3 by Phil Tucker
Dead Tired 1 by RavensDagger
(Divine Dungeon, Book 1) Dungeon Born by Dakota Krout
(Dungeon Crawler Carl, Book 1) Dungeon Crawler Carl by Matt Dinniman
(Dungeon Crawler Carl, Book 2) Carl's Doomsday Scenario by Matt Dinniman
(Dungeon Crawler Carl, Book 3) The Dungeon Anarchist's Cookbook by Matt Dinniman
(Dungeon Crawler Carl, Book 4) The Butcher's Masquerade by Matt Dinniman
(Dungeon Crawler Carl, Book 4) The Gate of the Feral Gods by Matt Dinniman
(Dungeon Crawler Carl, Book 6) The Eye of the Bedlam Bride by Matt Dinniman
(Dungeon from the Void, Book 1) The Void Dungeon by Shane Purdy
(Dungeon from the Void, Book 2) The Dungeon Delve by Shane Purdy
(Dungeon from the Void, Book 3) The Dungeon Assault by Shane Purdy
(Dungeon from the Void, Book 4) The Neutral Nation by Shane Purdy
(Elemental Magic, Book 1) SORCERER by Michael Nowotny, Mark Woodhouse, Trent Landt
Ella Minnow Pea by Mark Dunn
Emergency Skin by N. K. Jemisin
Enter System (Natural Laws Apocalypse Book 1) by Tom Larcombe
(Evander Tailer, Book 1) The Enchanter by Tobias Begley
(Evander Tailer, Book 2) The Diviner by Tobias Begley
The Extractionist by Kimberly Unger
The Final Decree by Shami Stovall
First Contact by D. L. Harrison
(Galactogon, Book 1) Start the Game by Vasily Mahanenko
(Gild, Book 1) Gild by Raven Kennedy
(Gild, Book 2) Glint by Raven Kennedy
(Gild, Book 3) Gleam by Raven Kennedy
(Good Guys, Book 1) One More Last Time by Eric Ugland
The Good Samaritan by John Marrs
(Grand Game, Book 1) The Grand Game by Tom Elliot
(Grand Game, Book 2) Way of the Wolf by Tom Elliot
(Grand Game, Book 3) World Nexus by Tom Elliot
(Grand Game, Book 4) House Wolf by Tom Elliot
(Heavenly Throne, Book 1) Force Cultivation by Yuri Ajin
The Hedge Wizard by Alex Maher
The Housemaid by Freida McFadden
How Long Til Black Future Month by NK Jemisin
Hunter x Hunter by Yoshihiro Togashi
(Immortal Great Souls, Book 1) Bastion by Phil Tucker
(Immortal Great Souls, book 2) The Rascor Plains by Phil Tucker
(Iron Widow, Book 1) Iron Widow by Xiran Jay Zhao
The Killing Moon by NK Jemisin
The Last Conversation by Paul Tremblay
(Last Horizon, Book 1) The Captain by Will Wight
Ledge by Stacey McEwan
Machine of Death, edited by Matthew Bennardo and Ryan North
(Mage Errant, Book 1) Into the Labyrinth by John Bierce
Mage Stones: Part 1 by D.J. Dammeyer
(Magic 2.0, Book 1) Off to Be the Wizard by Scott Meyer, Liz Pulido
(Menocht Loop, Book 2) The False Ascendant by Lorne Ryburn, caerulex, Silas Sontag
(Menochy Loop, Book 1) The Menocht Loop by Lorne Ryburn, caerulex, Silas Sontag
Mickey 7 by Edward Ashton
(Millenial Mage, Book 1) Mageling by J.L. Mullins
(Millenial Mage, Book 2) Mage by J.L. Mullins
(Millenial Mage, Book 3) Binding by J.L. Mullins
(Millenial Mage, Book 5) Bound by J.L. Mullins
(Millenial Mage, Book 5) Fusing by J.L. Mullins
(Millenial Mage, Book 6) Fused by J.L. Mullins
(Monarch, Book 1) Monarch: A Prince Out of Time by J. McCoy, Eligos
(Murderbot, Book 1) All Systems Red by Martha Wells
(Naga Brides, Book 1) Viper by Naomi Lucas
Natural History of Hell by Jeffrey Ford
Nettle & Bone by T Kingfisher
Never Lie by Freida McFadden
(Nexus Games, Book 2) The Nexus Gamesby Shami Stovall
(Nexus Games, Book 2) The Nexus Knight by Shami Stovall
(Nexus Games, Book 3) The Nexus Challenge by Shami Stovall
(Nothing Mage, Book 1) The Nothing Mage by J. P. Valentine
(Nothing Mage, Book 2) Untolled by J. P. Valentine
The One by John Marrs
One Piece by Eiichiro Oda
Page Keeper 1 by Dante King
(Paranoid Mage, Book 1) Paranoid Mage 1 by Inadvisably Compelled
(Paranoid Mage, Book 2) Renegade Mage 2 by Inadvisably Compelled
(Paranoid Mage, Book 3) Heretic Mage 3 by Inadvisably Compelled
The Perfect Run by Maxime J. Durand
Poor Man's Fight by Elliott Kay
Quantum Radio by A.G. Riddle
Randomize by Andy Weir
(Reckoners, Book 1) Steelheart by Brandon Sanderson
(Reckoners, Book 2) Firefight by Brandon Sanderson
(Reckoners, Book 3) Calamity by Brandin Sanderson
(Resonance Cycle, Book 1) Divine Invasion by Aaron Renfroe
Rueberry Orchard by Michele Notaro
(Selection, Book 1) The Selection by Kiera Cass
(Selection, Book 2) The Elite by Kiera Cass
(Selection, Book 3) The One by Kiera Cass
The Silent Patient by Alex Michaelides
The Silver Queendom by Dan Koboldt
(Solar Clipper, Book 1) Quarter Share by Nathan Lowell
(Solar Clipper, Book 2) Half Share by Nathan Lowell
(Solar Clipper, Book 3) Full Share by Nathan Lowell
Spell Thief: A Deck Building LitRPG Adventure (Tower of Cards Book 1) by J Pal
Starter Villain by John Scalzi
(Sybil, Book 1) Primordial Ascension by Azrie
(System Universe, Book 1) System Change by SunriseCV
(System Universe, Book 2) Torith by SunriseCV
(System Universe, Book 3) Savannah by SunriseCV
Teleport by Joshua T. Calvert
The Thinking Machine by Jaques Futrelle
(This Trilogy is Broken, Book 1) This Quest is Bullshit! by J. P. Valentine
(This Trilogy is Broken, Book 2) This Class is Bonkers! by J. P. Valentine
(This Trilogy is Broken, Book 3) This Guild is Batty! by J. P. Valentine
(This Trilogy is Broken, Book 4) This Plot is Bananas! by J. P. Valentine
(Thomas Covenant, Book 1) Lord Foul's Bane by Stephen R. Donaldson
(Titan, Book 1) Nova Terra: Titan by Seth Ring
(Titan, Book 2) Nova Terra: Greymane by Seth Ring
(Undying Magician, Book 1) The Arcane Academy by Shane Purdy
(Undying Magician, Book 2) Kingdom of the Fallen by Shane Purdy
(Warformed, Book 1) Iron Prince by Bryce O'Connor, Luke Chmilenko
(Warformed, Book 2) Fire and Ice by ?
The Watchmaker of Filigree Street by Natasha Pulley
(Weirdest Noob, Book 1) The Weirdest Noob by Arthur Stone, Mark Berelekhis, Mikhail Yagupov
(Weirkey, Book 2) Rainhorn by Sarah Lin
(Weirkey, Book 3) Archcrafter by Sarah Lin
(Weirkey, Book 4) Chasmfall by Sarah Lin
(Weirkey, Book 5) Bondsfungi by Sarah Lin
(Weirkey, Book 6) Bloodcrete by Sarah Lin
(Whimbrel House, Book 1) Keeper of Enchanted Rooms by Charlie N. Holmberg
(Whimbrel House, Book 2) Heir of Uncertain Magic by Charlie N. Holmberg
The Wizard's Butler by Nathan Lowell
You Have Arrived at Your Destination by Amor Towles
Non-Fiction
Be Slightly Evil by Venkatesh Rao (of Ribbonfarm)
Toki Pona: The Language of Good by Sonja Lang
The Ultimate Micro-RPG Book edited by James D'Amato
Year 0 – I filled 10 32-GB Kingston flash drives with random data.
Year 1 – Tested drive 1, zero bit rot. Re-wrote drive 1 with the same data.
Year 2 – Tested drive 2, zero bit rot. Re-tested drive 1, zero bit rot. Re-wrote drives 1-2 with the same data.
Year 3 – Tested drive 3, zero bit rot. Re-tested drives 1-2, zero bit rot. Re-wrote drives 1-3 with the same data.
Year 4 – Tested drive 4, zero bit rot. Re-tested drives 1-3, zero bit rot. Re-wrote drives 1-4 with the same data.
Year 5 - Re-tested drives 1-3, zero bit rot. Re-wrote drives 1-3 with the same data.
Will report back in 1 more year when I test drive 5.
We want to generate some random numbers. For simplicity, we'll assume we want a random number between 1 and 100. We want our random-number generator to be:
Public (everyone knows the same random numbers, at roughly the same time)
Fair (every number has the same odds of coming up)
Trustable (everyone knows it's fair--it should be above doubt)
Fast (we want to generate as many numbers as possible, as often as possible)
Unpredictable (you shouldn't be able to guess the result before it's revealed)
Some security experts suggest that a trustable system should also be:
Decentralized (no single person, organization, or computer picking the numbers). This is because a central trusted group requires faith in that group and its security.
One for this in the real world was the "Numbers Game", a popular illegal lottery in the 1800s, in the USA. The winning numbers were selected at random each day, like most lotteries--by the mob. After complaints about rigged lotteries, the winning numbers started to be picked more transparently. For example, it might be the closing price of the New York Stock Exchange--just the cents value. For a hundred dollar lottery, you would be crazy to worry about someone messing with the New York Stock Exchange. (But if it became a billion- or trillion-dollar lottery, you should worry again.)
The biggest problem with using a stock exchange that it's slow. You only get one set of numbers a day.
Can you come up with a better random-number generator?
Using electrical tape, I split a whiteboard into sections. Voila, whiteboard calendar.
A teacher friend of mine already knew exactly how to do this--apparently it's common knowledge among teachers.
I did look if there were either large, disposable calendars (no) or existing whiteboard calendars (they're laminated posters that don't actually erase). A 3ft x 2ft (1m x 0.6m) whiteboard costs $30, and you can get electrical tape for $1.
The stickers look bad--I half-assed them. I need tons of big stickers or none at all. This was way too tentative. I do want some kind of decoration, though.
In 2022, 2023, and 2024, I did "Hack-a-Day", a challenge to myself to do one project a day for all of November. It's vaguely modelled off NaNoWriMo, a challenge to write a book in November.
This year, I completed 21 projects in 30 days. On average, I worked 7.5 hours per project. My expenses for the month were $130, divided over only three projects--ingredients for Project L.E.M.B.A.S. ($85), aluminium to mill for soma cubes ($28), and missing parts for my TODO whiteboard ($19).
To see a list of all projects from this year and previous ones, check out my hack-a-day website.
Having prepped my ESP-32, I decided to make an LED fireplace today.
The plan was to put an LED strip on a piece of cardboard, and have slowly shifting red, orange, and yellow lights going up and down, somewhat like a music visualizer. I knew the bare LEDs wouldn't look good, so the plan was to put the cardboard somewhat deep into the fireplace, and add some translucent tissue paper layers in front to diffuse the lights.
vertical 'strips' of lights
Sadly, of my three ESP-32s, two were broken. I ended up instead using an ESP-8266, since I had several laying around. Annoyingly, the boards I have are so wide it's impossible to breadboard the, so I used perfboard instead.
Having carefully set up the circuit, I flipped the on switch and... nothing happened. It was about 10pm at this point, and I was starting to run out of energy, so I gave up.
Very late that night, I found the problem was the resistor I added--the LED strip has a built-in resistor as well, and apparently the two together were too much. I eventually got the lights to turn on, but too late to finish the project for the day.