site banner

Tinker Tuesday

This was really popular last week, I was really impressed with how many hardworking hobbyist type people we have here. It got me motivated to do some of my own things.

As a reminder, this thread is for anyone working on personal projects to share their progress, and hold themselves somewhat accountable to a group of peers. We can coordinate weekly standup type meetings if their is interest.

Post your project, your progress from last week, and what you hope to accomplish this week.

Also naming the thread. Tinker Tuesday or taskmaster Tuesday, or something else? I switched the thread to Tuesday instead of Monday because the culture war thread refreshes on Monday.

7
Jump in the discussion.

No email address required.

So, who wants get slapped?

The idea for this thread came from my tongue in cheek job posting for the slapper-in-chief in the last HighSpace thread. The idea being that I'd have to regularly do the "post your progress, and what you hope to accomplish", and if I went lazy they'd go "Hey Arjin, how's your work going, Arjin? You said you'll do XYZ last week Arjin, what's the status on that?" Consider this an open invitation to do exactly that to me, if I don't report in the weekly Tinker thread, but I was curious, does anyone want a similar service? I remember a few people from last week mentioning they want to hold themselves to account, and this would be a way to have a bit more enforcement that just voluntarily posting... though I also could imagine it getting annoying / stressful, so it's probably not for everyone.

I have a wife for that.

Yeah, but my wife tends to nag me about doing things that are actually useful.

Have tried a gajillion types of accountability, and find I rebel against it all. I might want to do it the day I ask for the accountability, and I might still want it done a week later, but at the time I’m supposed to be doing it, I can’t make myself do it and revert to something more interesting and rewarding (in the short term). Maybe that means my life won’t amount to more than a hill of beans, but maybe subconsciously what I really want is a hill of beans.

I know what you mean, though I also noticed that I do get focused when I'm running into a deadline, or there's some sort of a fire under my ass, so I'm hoping to emulate that.

But like you, previous attempts at self imposed accountability have been more annoying that successful, so I completely understand if people don't want to jump in.

Learning Figma to get demo prototypes for my startup ready. Was going to do hackathons next 2 weekends, but accelerators have their deadlines this week. So they gotta wait. Trying out framer as well, because my backend/ml ass doesn't have time to learn front end rn.

If someone knows how to make video prototypes in Figma, then please send me some resources. I'd appreciate it.

Happy to see 'uv' is now a full-on 'cargo for python'. I'm near certain I'll be setting up our backend with uv exclusively.

I’m officially registered for JLPT N4. I was nervous about getting because I decided last minute to try the N5 last year but it was sold out. It’s December 1 so I’m trying to buckle down on learning the rest of the grammar and clocking time listening to native speakers.

Having a blast with the piano, started some ear training for hearing intervals. My practice regimen right now is working on finishing a song, I’m transcribing a song I like so I can play along, and doing some technique and scales practice.

The running training is hard but I wanted to get faster so it’s to be expected. Was a little worried I wouldn’t be able to match the pace requirements for each workout but so far so good!

I’m officially registered for JLPT N4.

what is that

Ah! Japanese has an official proficiency exam called the Japanese Language Proficiency Test or JLPT. There are five levels, N5-N1. N1 is the hardest.

Does renovating a 1950's bungalow count? I've been working on this since January and living in the house since May. Full rewire, gutted the kitchen and bathroom down to the studs, built my own kitchen cabinets, installed a pantry over the basement stairs, hardwood floors refinished, repaired and painted every surface upstairs. With the exception of part of the wiring and refinishing the floors I've done everything myself with help from my father and a friend. I've learned so much. Electrical, cabinetry, flooring, mud and taping, working with old plaster (hauled out thousands of pounds of it), clever workarounds to avoid going into the vermiculite filled attic, plumbing, painting, demo work, landscaping, installing windows... It's so tedious and eats up all of my free time but I think it's something I'll appreciate in the long run.

Part of my wishes we'd just shelled out more money for a 'move in ready' home. It would have been much easier, waaaay less stress, and I would have had so much more free time. But I'm 'saving' tens of thousands of dollars, and all of this experience is invaluable. I wouldn't recommend it unless you know it will take twice as long and be twice as tedious as you expect.

Class Prep - Great Books

I'm a teacher (high school history/literature) so my 'tinkering projects' are mostly in the class design/class prep category, which is kicking into another gear due to how soon the school year starts up. I'm designing two different 'Great Books' classes, one for ancient lit, the other for ancient/medieval, so that's been most of my focus for the past week. I've mostly finalized the books we'll be reading, but my goal for the next few days is to finalize the specific reading assignments for each week (I plan the year ahead of time) and specific discussion questions to cover each week.

Re: 'Ancient Literature', the plan is to start with Homer's Iliad, then the Book of Job (from the Bible), then Sophocles' Antigone, then Plato's Republic, then Virgil's Aeneid, and ending with Augustine's Confessions. I was hoping to include some Thucydides' History of the Peloponnesian War in there, but I'm not sure it'll fit. Also wanted to include Boethius' Consolation of Philosophy, but there's probably not enough time and it'd fit better with next year's Medieval Literature class anyway, even though Boethius is still Late Antiquity.

Re: 'Great Books' (covering ancient/medieval), I'm looking at Antigone, Republic, Confessions, Consolation of Philosophy, then Dante's Inferno and one of Shakespeare's plays. Still figuring out whether I can fit another book in there.

If anyone has good discussion/roundtable questions for any of these books, feel free to send them my way.

The Ancient literature plan seems like a solid list, although I'm curious if you will just be doing readings from some of the longer works. Even for me as a fairly motivated reader, I found the Republic to be quite daunting just to get through, let alone begin to comprehend. At least for a intro class, a collection of Plato's shorter dialogues seems more optimal and a better introduction. Hard to go wrong with the classic Trial and Death sequence (Euthyphro, Apology, Crito, Phaedo). Lots of good discussion to be had in those four.

Also interested to know why you went for Antigone instead of starting with Oedipus Rex.

Here are a couple cool websites for Dante specifically; commentary and illustrations that might be helpful for students: http://danteworlds.laits.utexas.edu/ (this one has study questions at the bottom of each section) https://digitaldante.columbia.edu/ (commentary, side-by-side Italian/English)

Second the recommendation of the trial and death sequence. The Republic is a very daunting text, whereas those are more engaging and comprehensible. I'd suggest, if that frees up space, to add Xenophon's Apology alongside Plato's. That can start a discussion about how to read Plato's portrayal of Socrates critically - e.g. Xenophon's Socrates is much funnier, explicitly making jokes. A couple possible questions that could get students reading critically, particularly regarding the dramatic framing of the dialogues (which often goes unquestioned, but is extremely important):

  • Why does Socrates decide, right before his trial for impiety, to publicly play games with a priest?
  • Did Socrates want to die, and if so, why? (This connects to the themes of glory in the Iliad, if you raise the explanation that perhaps Socrates wanted a death that was glorious in its own way, which would ensure the immortality of his legend and of philosophy itself. Also to the Job/Antigone question of bad things happening to good people, if Socrates has found a way to turn the bad to his good)
  • How serious is Socrates? Is it different from the way we would think of a philosopher or teacher as serious? Can joking or even trolling be a way to be serious about something higher?
  • Plato was the founder of the Academy (and, in some ways, closer to a startup founder than the dean of a modern university), whereas Xenophon was a military man who lived outside Athens and had little fear of their authorities. Does that show up in the way they write their Apologies? E.g. Plato provides a magnificent speech showing off his rhetoric (which could be yours, for a small fee), whereas Xenophon makes Socrates more relatable.
  • Were the authorities right, from their perspective, to execute Socrates? Was philosophy destabilizing to Athens? Is youthful ambition inherently dangerous to the powerful? (connects to Iliad and to some extent Antigone)

Here's an interesting article about teaching the Iliad to Chinese high schoolers: https://scholars-stage.org/how-i-taught-the-iliad-to-chinese-teenagers/

As far as History of the Peloponnesian War, maybe make that the first half of your Friday class or similar? Also, Landmark Thucydides kicks ass as an edition.

Maybe try and force consistent translations for the epics? Fagles did a great job.

It's a bit unorthodox, but you could try to teach the kids to skim read properly, the funeral games in the Aeneid and also some of the same-y parts in Italy.

In the medieval course, I'd throw in Beowulf or Song of Roland. Going from Boethius to Dante is too much of a historical gap imo. Maybe also selections from Canterbury Tales or Decameron?

Open class discussion or even brief personal essay on "Why Bad Things Happen To Good People" before tackling Job might make the text more interesting, having articulated their personal beliefs.

Song of Roland is an excellent companion to the Iliad. The parallels are strong enough that it can be a great set-up for a discussion on the differences between ancient and medieval warrior culture - roles of kingship, religion, loyalty, violence, etc.

I was in a Great Books class in high school and very much enjoyed it. Each day was a presentation on a different book. There was a lecture, a reading, and a test. What was unique about this class was that a majority of the lessons were conducted by the students themselves. At the beginning of the semester, everyone chose which book they would present on and we began to go through them in publication order. Unfortunately, I don’t have any suggestions for your class, but I wish you luck.

I wish I'd gone to your school.

HighSpace

Last week:

It went pretty well, I did all the tasks I was planning to, and even got an early start on this week. Issues I managed to close are:

  • Spawning of enemy ships

The idea for the prologue scenario is that the player jumps into a system where allies were ambushed, and chose to scatter their squadron by making random short-range jumps throughout the system. Subspace jumps can be tracked, albeit imperfectly, so the enemy is hot on their heels, but outside their field of view. The screenshot for the monthly thread included a part of that - ships spawning in random orbits throughout the system. Currently there's no sensor mechanics therefore there's no "field of view" to speak of, so the goal here was to have the ability to spawn in a random spot within a given range. At first glance the ships might look like they're on top of each other, but these are astronomical distances we're talking about, so it ain't all that bad when you zoom in. I'm pretty happy with it so far.

  • Load New Game state from data files instead of hardcoding it in LUA

I did a bunch of hardcording at the beginning, since it was just a proof of concept, but even the scenario with one friendly group and 2 enemy ships ended up taking up a whole bunch of space in the script file, and wasn't all that friendly to read. Moving it to a json file doesn't help all that much with the readability, but at least the game state lua file is reserved for logic, and I don't dread opening it anymore.

  • CTD on start of campaign under some circumstances.

Not a very helpful title, but originally this bug felt pretty mysterious. It ended up being a result of an allied ship spawning on top of an enemy, and thus triggering a mission. There's a known problem where a mission currently needs a ship designated as "Alpha 1" or the game will crash, and this bug was (most likely) a result of that. In any case the scenario of an allied ship meeting an enemy was outside the scope of what I was planning to do, so all I did here was throw a more descriptive error, and closed the issue.

  • Add Find group by name functionality.

Star systems are a kind of a tree structure, where a star has it's satellites, which can have their satellites, etc., this helps with calculating the orbits. Aside from that, there's a "flat" map that allows me to get an object by name, except a group is also a valid object, and their construction is somewhat dynamic, so you can't rely on them having a particular name/ID

This ended up being an issue in 2 cases:

  1. Finding the player's battle group, so the camera can lock on it
  2. Removing individual fighters from their wing in the global game state, if you shoot them down in a mission.

Grouped ships now have their own flat map. Quick and dirty, but it works.

  • Crash on win/lose of the game.

Somewhat easier to reproduce before I spammed the map with enemy ships, but the name is self-explanatory. Turned out to be a case of overzealous refactoring, where I renamed a call to a function necessary for the win/lose dialog to show up.

  • Neutral ships join player on rendezvous.

Freespace lets you define "teams" and I put the allies in the "unknown" team so the player has no direct control of them. The goal was to have them switch the team to "friendly" when you encounter them. Quick and easy.

This week:

  • Document code with annotations.

I may have gotten an early start, but I think I also nerd-sniped me self here...

One of the pain-points in working on this project was lack of auto-complete. It wasn't a big deal at the start, but it gets more annoying as complexity grows. Still, there didn't seem much I could do about it, since even annotated code I lifted from other mods didn't seem to do anything for me... until I decided to update the plugins for my IDE - lo and behold, turns out that EmmyLua supports annotations, and I must have been using some bugged out version that didn't do anything with them.

So naturally now I want to Annotate All The Things, except EmmyLua is pretty good at figuring out of the autocompletions all on it's own, so the immediate need for that also went down. However one place where it would be really helpful is the Freespace scripting API, until now I was just looking up their HTML docs. The problem here is that the API us pretty massive, so annotating it by hand, and maintaining it would b a pain in the ass. Luckily the Freespace exec has a switch that let's you dump the scripting docs, but currently it only supports HTML (for the website, I'm guessing) and JSON (for autocomplete in typescript, which can later be transpiled to LUA, which I find a bit galaxy-brained).

So now I'm extending it to support a LUA annotation format. Still a few kinks to iron out, but I'm pretty happy with the results so far, and if I clean up the code this might even be useful enough for others to get merged into the main FS2 repository.

Later on I will want to annotate at some of the mod code itself, because there's a few common data structures that a bunch of classes use, that currently just get parsed as table, but I'll probably split that into a separate issue.

  • Map AI: Aggro and chasing

I want the enemies to have some basic AI. For the moment I'll go with a simple "chase the ship with the highest aggro", algorithm, but even that has it's implication (ships having AI, the existence of different AI profiles, the existence of aggro) so it might be a bit more complex than it looks at first sight.

  • Distinct icon for bomber wings

Something nice and easy after the other two tasks. Currently bomber wings are indistinguishable from fighter wings on the system map, which could lead to some terrible tactical decisions.


I might get to other issues, but right now it's looking like this will be enough for this week.

I have two software projects I'm tinkering on.

The first one is a display library for the Zig programming language. You'd use it to get a platform-agnostic way of rendering graphics, so you can make really tiny (a handful of kilobytes!) graphical applications that compile to every platform (well, at least Windows, Mac, and Linux). For fun and bragging rights I'm making it ridiculously backwards-compatible, so it's e.g. supporting Windows all the way back to Windows 95 (not especially hard, the core Windows API hasn't really changed that much since the 90s).

My second projects is a superoptimizer for the 6502 CPU. It takes CPU/memory states as input, and bruteforces all possible assembly instructions until it finds the shortest/fastest* possible program that satisfies some output for each possible input. The 6502 was the CPU used in the Nintendo NES, so the program would be pretty useful for making extremely optimized routines for homebrew games and such (given that the generated code stays below a few bytes). I'm also writing a blog post in parallel where I explain all the little tricks I'm doing to speed up the search, which I'll probably post to Hacker News or something after I'm done.

* Actually it prints all** programs on the speed/size tradeoff frontier, though usually it's just one.

** Up to a configurable cycle limit, I have not actually solved the halting problem.

I'm planning to coach a rec sports team at my local college. The sport is underwater hockey. Its real and it's awesome, look it up.

Anyways I made some good progress on getting ready for the semester. Mostly that meant getting through the bureaucracy of the university. I attended the mandatory class, and got some of the forms filled out. But I also got to the more interesting part of writing some basic coaching plans and figuring out goals for the coming season. I .mostly want to make sure the club survives, it's in a rough spot from COVID. The kids who found underwater hockey before COVID are mostly graduated or about to graduate. So we desperately need a bumper crop of new people to try out. I'm hoping for just two good players that want to keep the sport going. And only one of them needs to stay around and be willing to do extra paperwork so the club won't collapse next year.

Try to host as many events as you can that aren't games. For the college crowd, social proof and social esteem are big motivators.

For a bunch of both good and bad reasons, my Fraternity had to do an inordinate amount of paperwork all of the time. We never had a shortage of volunteers because there was a shared attitude that paperwork being done led to awesome parties which led to awesome things happening at parties (fill in the blanks on your own).