December Adventure 2024 Like last year, I'm going to participate in a December Adventure again. I had a lot of fun last time, and am looking forward to seeing what I can accomplish this year. On https://eli.li/december-adventure Eli describes the adventure as: The December Adventure is low key. The goal is to write a little bit of code every day in December. I'm not sure what all I'll be working on this year. I'll post my logs (taken from my blocks) to charles.childe.rs/DA2024.txt and probably also some notes to @crc@bsd.cafe with the hashtag #DecemberAdventure ---------------------------------------------------------------- Nov 27 (Day -4) It's a little early, but I've set up a few preliminary things. I allocated a couple of pages of blocks for the log entries and wrote a small shell+retroforth program to convert them to text and upload them to http://charles.childe.rs/DA2024.txt This will be run by a daily cron job. The program to export & upload is simpler this year. I will note that there will be some occasions where several days may pass before the entries are uploaded. I've been increasingly working on offline systems, so the logs won't be updated until I push my latest blocks. ---------------------------------------------------------------- Dec 01 I've been tired today, so didn't do a lot of programming. Later this month I'll be running a TTRPG (using Shadowdark rules), so I decided to write some code for automating some parts of this. I'm focusing the initial words for various dice combinations and character creation. Later I'll work on words for generating NPCs and then handling various checks. (I have some more serious things planned for this month, but more on this later). ---------------------------------------------------------------- Dec 02 I've continued working on my (game:shadowdark) blocks, with more of the PC generation completed, and writing some of the code for doing the checks. This now spans about 30 definitions across five blocks of code. I think I'll probably put this aside for a bit and start on a different project tomorrow. In particular, I want to do an ilo using SDL for a framebuffer. (We've explored this in the past, but want to revise it for the simpler Graphica-0 model to match the ilo for X11). ---------------------------------------------------------------- Dec 03 I've set up a TCC + SDL2 environment for Windows, so I can work on the ilo + sdl2 backed framebuffer model. Using this I've updated the existing code to work with the same embedded font data that I use on X11, and have begun fixing the remaining display issues. The overall code (sans font) is now approx 400 lines shorter. My upcoming goals for this after I complete the display fixes (prob. tomorrow) are to improve input performance, then to work on supporting (termina) programs by implementing Arland's little terminal emulator. ---------------------------------------------------------------- Dec 04 I've continued working on the ilo + SDL code. I'm trying to fix a long standing issue around input handling (reading keystrokes is signicantly slower than I'm comfortable with, and I have some issues with missing some of the keystrokes when typing quickly). At this point it's still messier overall than I'd like. Tomorrow I'll try to clean things up a bit, then post the code. An aside, on the fediverse I mentioned my dislike of SDL and was asked about this. I'll write up something soon on this topic. ---------------------------------------------------------------- Dec 05 Taking a step back, I decided to update the core ilo code to the latest one in the main C implementation, which gets rid of a big switch() and has many smaller functions. After this, I returned to working on the input issues. I've now added an input queue, but this hasn't resolved the lag. So I'll dig in deeper, and cross reference more with the other graphics capable build (using X11). [some hours later] Returning to this again, I've increased the checks for events, and the queue is gathering a lot more keystrokes now. I want to make this better, but might not get much further today. ---------------------------------------------------------------- [cont] I'm pretty happy with the progress today. Tomorrow I'll begin adding Arland's terminal emulation code so I can run the stuff using the (termina) vocabulary. Now it's off to finish my day & maybe watch my son perform in a school concert tonight. ---------------------------------------------------------------- Dec 06 I made some decent progress today. The input is closer to being tolerable, and a bunch of display fixes are in place. I was able to bring in the terminal emulation Arland wrote for the X11 & native versions, so programs using (termina) now work. Overall length is about 640 lines now. I have begun doing the (hopefully) final cleanup work now, and will try to have it done tomorrow so I can start something new on Sunday. The latest code is at http://forth.works/share/sdl-ilo.c if you want to take a look. ---------------------------------------------------------------- Dec 07 I finished the updates to ilo-sdl-1bpp.c today. It's now at 570 lines, and though still having some issues with performance, I am willing to live with this for now, so will move onto other things tomorrow. Tomorrow or Monday I'll push this into the repositories. ---------------------------------------------------------------- Dec 08 I've done a bit more on my shadowark rpg vocabulary, with more things to help in generating NPCs & encounters. With various holiday related tasks to work on this weekend, I wasn't able to devote much time to programming. Tomorrow should be better. ---------------------------------------------------------------- Dec 09 Today I did a small quality of life change in the basic block editor (as well as in tuhi). The (std) blocks now extend the `e:insert` word to save the line to a temporary buffer, and an `undo` word was added to revert the last change. I've also added a few more glossary blocks for words added in the last month or so. This isn't really programming, but is a related bit, so it seems ok to consider it part of today's work. I think this will be it for today. I'm feeling a bit tired, so am not really motivated to do more. ---------------------------------------------------------------- Dec 10 Today I did a bit of work on the inventory reporting tool. I'd rather be working on my projects, but I need to get this done & deployed soon. The work was mostly testing, and some work on generating reports from the recorded data. I made some adjustments to the DB schema and updated the code to reflect this. ---------------------------------------------------------------- Dec 11 I did a little reading on ActivityPub, as I'd like to try making something that can share via this. No coding towards this yet. For actual programming, I opted to work on the program to push parts of my blocks to the ones in the repo. I have been using `dd` for this, but am now shifting towards using Retro for it. Going this way is slower, but will give me more flexibility in comparing & approving the merges. ---------------------------------------------------------------- Dec 12 Going very light today, I updated my personal Konilo sync/start script to allow faster setup on new machines. Then I used this to setup a Termux + Konilo install on a Boox Go 6 + keyboard. The Go 6 makes a pretty nice little workstation when running Konilo. I'll try using it for coding for a few days. I'm getting back into RetroForth a bit, as I'd like to finish the UTF32 stuff. Note: dealing with UTF8->UTF32 conversions is annoying. I'm glad not to need this in Konilo, where all code is just in the blocks. ---------------------------------------------------------------- Dec 13 I started today with a few small edits to my configuration & startup blocks, then spent a bit of time setting up a RetroForth tree on the Boox Go 6. Building Retro on this eink tablet is faster than on my Linode, which is nice. Using this I've written some test code to help me try to make more sense of the UTF8 <-> UTF32 conversion issues, but I've still not solved this. I'm not going to stress out over it for now though. #DecAdv is supposed to be low key after all. So nearing the halfway point in the 2024 DA, I'm now faced with a question of what do I want to work on for the rest of it? I had originally thought I'd be working on the native (x86, esp32, teensy4, and rp2350) ilo systems, but at this point I'll prob. ---------------------------------------------------------------- just push them off until early next year. They'll require a time investment I can't commit to with the holidays approaching soon. Instead I think I'll take a bit of time to just work on making improvements across the Konilo system. These will probably all be small projects, like adding the "undo last edit" in the block editors, but making the system I now use daily nicer will be a good investment of my time. ---------------------------------------------------------------- Dec 14 Starting with the focus on little quality of life improvements, I've updated (kohure) to make use of actual prompts for input. (This is my little memory explorer / editor). Having the prompts means that the actual usage is now much more self explanatory, and it feels a lot nicer to actually use now. I also noticed that I hadn't updated to work with the change to how immediate words are handled, so this was corrected as well. I then moved onto making some improvements to the manual reader. This is a little hypertext wiki-like tool. I modified it to allow for separate block ranges for the manual data and the glossary. Then I made a few tweaks to some of the visual bits. These aren't as notable as the improvements to (kohure), but ---------------------------------------------------------------- I like it a little more now. Then I dropped into (nonix), making some small tweaks to the extended set of utility words. You can now display a map of the blocks and usage data with `.blocks`. And I'm stopping here for today. No big things, but a variety of little tasks are completed, which feels good. ---------------------------------------------------------------- Dec 15 Today's work was a minor extension of the hypertext manual tool, adding a `man` word to directly look up & display pages. It's a small thing, but will be useful for quick lookups. :man ("-) [ s:get/token nl s:keep dup man:exists? [ man:locate set load man:list ] [ 'Sorry,_topic_not_found s:put nl ] choose ] gc ; ---------------------------------------------------------------- Day 16 I decided to play a bit with the "metablock" stuff I sometimes work on. The basic ilo computer has a very limited set of I/O options. This uses a specific block (or range of blocks) to hold data, which is updated or read by external things. My current experiments for today involved writing a small X11 thing in C, and storing a bitmap in binary form into blocks. The X11 program just reads the blocks, and then updates the display. This isn't particularly fast, but the proof of concept works, so I'll do more with it in the future. (My purpose for this is to have a means of displaying visual data w/o requiring using Konilo on the x11 VM. I can have a display up, and connect in via a terminal to work.) ---------------------------------------------------------------- Dec 17 Continuing on from yesterday, I extended the X11 display program to record key presses and mouse location into the blocks. Due to the overall design, this has very high latency, so isn't really useful for interactivity, but was worth implementing to test the concept, and as a possible starting point for something better. Tomorrow I'll work on something different. I have a few things I'm considering; I might be able to make a decision tonight on what to do next. ---------------------------------------------------------------- Dec 18 I decided to do some work on Convey today. Due to recurring RSI this won't get as far as I'd like, but it's been a few months so I kind of need to do some work on it again. Today's work involved starting on a more proper REST interface to the backend. I find this uncomfortable (I'm *not* good at this sort of programming), but it'll hopefully work well enough to let me make some headway on the front end after Christmas. The other project I worked on today is my shell tooling for install / update / running Konilo, and syncing with the remote machine. I'm trying to simplify the overall process and make it easier to backup or restore specific parts of the system. This will run into tomorrow I think. ---------------------------------------------------------------- Dec 19 I continued some work on my shell scripts, but still have a few things to do. I need a better meanns of registering SSH keys on the remote side. ubut they are working ok, and will use rsync now if it's present which can help performance with larger block sets. ---------------------------------------------------------------- Dec 20 Today's programming was small: I spent some time with shell & python, working on updating various cron jobs for my employer's data management tool. I'm in-process for switching to using the Microsoft 365 SMTP servers for this. I didn't finish today, and won't go back to it until at least next week. ---------------------------------------------------------------- Dec 21 It's getting harder to do the programming lately. My hands are not in great shape, between work & the cold, so I'm only going to be doing minimal things for a while. Today's work was a small adjustment to WISP (my blog-in-blocks) which makes creating new entries slightly faster. ---------------------------------------------------------------- Dec 22 I did a bit of work on a (cal) vocabulary for date related words. This isn't complete yet, but will be helpful with the next WISP update, and maybe a few other things. Hand pain is growing, so I might have to drop out a bit before the end of December. I'll try to finish though. ---------------------------------------------------------------- Dec 23 Today's back to Shadowdark, with more work on the various words relating to NPC generation and setting up locations. Even if I do not end up using this much, it's still helpful I think for seeing how pieces fit together. In 2025 I'll try to get this cleaned up, and then work on a "solodark" utility for solo play. ---------------------------------------------------------------- Dec 24 I'm bowing out of December Adventure early this year due to RSI concerns. This is disappointing, but I need to stop before this gets any worse. ---------------------------------------------------------------- Dec 28 Not officially considering this part of December Adventure, but I wrote a little code in shell to generate .utf8 text files for my IRC logs today. ---------------------------------------------------------------- Dec 30 Another unofficial entry. I decided to do a little work on my (wiki) blocks, removing some no longer needed bits, and making it slightly faster. I'm doing some work to backport improvements from my (man) blocks for browsing the manual, but this is not something I can complete today. Maybe I'll be able to do a bit towards this tomorrow? ----------------------------------------------------------------