Daily Log's


Day 32 Update (3/11/2025)

Yesterday I worked on the collision system again. I mostly read my book though while relaxing on the couch. The book is really helpful in explaining why something is the way it is but not to much on how to create it. All that is left to the reader which I really appreciate.

Hope your day is epic!


Day 31 Update (3/10/2025)

Yesterday I worked on my game collision system a bit. Ive been working on better debugging tools that I can turn on and off which has help a great deal. I also messed with some godot learning some cool stuff with it. Its wild how fast you can throw something together with it. It got me thinking of maybe making a simple phone game with it. Most of the most popular games on moblie besides clash of clans are simple games. Thinking of something simple but engaging is the hard part.

Welp thats all the time I got today! Hope your day is epic!


Day 30 Update (3/9/2025)

Yesterday, I spent some time working on a web app using Rust and Elm. I really liked Elm at first, but over time, the novelty has worn off. Debugging is pretty difficult—it seems like the only real option is using print statements. Maybe I'm missing something?

I'm still early in the process, so I might switch to something else, like Next.js or Yew (Rust).

Hope you have an epic day!


Day 29 Update (3/8/2025)

Yesterday, I spent some time working on Bitbox, but I got distracted by food and TV with my family. I did manage to clean up the code I already had, though.

For the most part, the Wasm IR is pretty much done—I just need to figure out a clean way to generate the bytecode.

Lately, life has been pretty distracting, and today is shaping up to be quite eventful. We'll see how much I can get done!

Hope you have an awesome day!


Day 28 Update (3/7/2025)

Yesterday, I continued working on Bitbox, hooking up the compiler backend. Nothing too exciting—just going through and adding new WASM sections. So far, I have the Function, Global, and Memory sections in place.

I’m still not generating bytecode yet, but maybe I’ll get to that this weekend. Progress is slow since some nights I only get 45 minutes, while other nights I might get 3 hours—just depends!

Hope you have an awesome day! 🚀


Day 27 Update (3/6/2025)

Yesterday, I spent more time working on Bitbox, trying to see if this pattern is worth pursuing. I'm essentially consolidating all the information needed to generate data in WASM form into a single node while still maintaining the necessary references for later use. Pretty standard compiler stuff—but maybe I’m overthinking it.

I’m sure someone out there could come along and show me a mind-blowing pattern. LOL.

Anyway, I hope you have an awesome day! 🚀


Day 26 Update (3/5/2025)

Yesterday, I did it again… I reworked the pattern I'm using in Bitbox for WASM. I originally tried using a trait to walk through every part of the IR, but that proved to be a challenge. I might revisit it later, but another big hurdle was ensuring that each section of the bytecode was generated correctly—kind of an obvious statement, really. 🤣

Instead of going straight to bytecode, I’m now transforming the SSA IR into a structured WASM data representation in an array. Once everything is in one place, I think converting it to bytecode will be much easier. We’ll see how it goes!

For now, I haven’t deleted the other two approaches I’ve tried—still keeping my options open.

If your interested in checking out what I have (not up to date with the post), you can find it here.

Hope you have an awesome day!


Day 25 Update (3/4/2025)

Yesterday, I worked on Bitbox, filling in the new pattern for the compiler. That was pretty much the only productive thing I got done, but there’s still plenty more to do.

Hope you have an awesome day!


Day 24 Update (3/3/2025)

Yesterday, Yesterday, Yesterday...

Have you ever looked at some code and thought, "Wow, I can do better"? But then, halfway through rewriting it, you realize you’re only about 5% better—stuck with essentially the same pattern? Yeah, that happened to me yesterday.

While working on my NeoLisp language, I initially structured the bytecode so I could simply append instructions to the end. But WASM bytecode works differently. It’s not just a flat list of instructions—it’s structured into sections, and within those sections, there are blocks.

When compiling a function down to bytecode, it gets broken into different sections of the binary. There’s the Type section, where function type information is stored. Then, there’s the Function section, which declares all functions—whether imported or defined within the module. Finally, the Code section is where all the actual mutation and execution logic happens.

So, just appending to an array wasn’t going to work. I ended up creating some abstractions to handle the structure more cleanly. Maybe it’s better? Maybe not. After work today, I’ll take another look—hopefully, sleep has cleared my head a bit.

Any who, hope your day is awesome!


Day 23 Update (3/2/2025)

Yesterday, I spent a few hours working on the pixel editor before shifting my focus back to BitBox. BitBox is my attempt at building a compiler backend that I hope to use across multiple languages.

I started studying how to compile assembly-like code into WASM bytecode. Right now, the code is admittedly rough. My work on NeoLisp made me appreciate the visitor pattern for traversing tree-like data structures, especially when multiple passes are required. However, BitBox’s IR isn’t a tree—it’s a flat array of nested data structures that must be processed and compiled into target architectures. Establishing a clear and structured pattern is crucial for maintainability and ease of implementation.

For now, WASM is the only target, but x86_64-linux is next on the roadmap. Establishing a structured approach for handling multiple architectures will be beneficial in the long run. Since each architecture requires multiple passes for type checking, semantic analysis, and optimizations, a well-defined pattern for walking the IR efficiently is essential.

Tomorrow I hope to make some progress on rewritting what I currently have for wasm backend and establish a pattern I can use for x86_64-linux.

Welp as I said before, I hope you have an awesome day!


Day 22 Update (3/1/2025)

Yesterday was quit eventful but I had not time to do any side work. I read a little before I went to bed but that is it.

Till tomorrow, hope your day is Epic!


Day 21 Update (2/28/2025)

Yesterday, I spent some time working with COBOL just for fun. The language is pretty fascinating, and I’m learning a lot about how it works. It has a very different feel from modern programming languages, especially with its rigid structure and verbose syntax.

One thing that really stands out is how wordy COBOL is. Unlike more concise languages like Python or C, COBOL emphasizes readability through plain English statements. This was intentional—COBOL was designed in the 1950s to be easily understood by business professionals, not just programmers. While that makes it interesting to study, I can’t imagine using it for professional development today. The verbosity, combined with its fixed-column formatting and older paradigms, would make large-scale projects feel slow and cumbersome compared to modern languages.

That said, playing around with COBOL has been fun. It’s a cool way to see how early programming languages were structured and how they influenced modern software development. Even though I wouldn’t want to use it in a professional setting, I definitely appreciate its historical significance and unique approach to problem-solving.


Day 20 Update (2/27/2025)

Yesterday, I spent about an hour working on bitbox—well, kinda. After my last blunder with the return mishap, I decided to dig deeper into WAT. I ended up writing a few small scripts—not to accomplish anything specific, just to test the semantics of the language. That’s pretty much all I had time for last night.

Welp, I’m off to work out this morning! It’s been a hot minute since I last exercised, and, well… my shape is definitely showing.

Hope you have an awesome day!


Day 19 Update (2/26/2025)

Yesterday, I spent some time working on the README for C-Flat. Writing isn’t my strongest skill, so I usually jot down a bunch of ideas and let ChatGPT refine them. I go through several iterations until it looks good.

I also worked on one of my blog articles about my experience developing NeoLisp, but it still needs a lot of polishing.

Anyway, hope you're having an awesome day!


Day 18 Update (2/25/2025)

Yesterday, I worked on my bitbox compiler, trying to format the Wasm code to run as expected. A good night's sleep seems to have helped.

Bitbox is an SSA language, so it uses blocks of instructions. Currently, all instructions must be placed within blocks, but I’m unsure if that should be required. Regardless, my issue was misunderstanding Wasm blocks and the return instruction. I initially thought return in Wasm acted as an early return rather than returning control to the parent scope and placing the block’s topmost value onto its stack.

(func $main
    (block $block0
        i32.const 0
        ;; This just puts a 0 on the main function's local stack
        return ;; This does not return early from the function
    )
    ;; Now there is a 0 on the stack, and any code below would be executed
)

Now that I’ve had that epiphany, restructuring the generated code should be much easier.

Last night, I also started brushing up on COBOL, such a crazy language! Definitely fun to mess with.

       IDENTIFICATION DIVISION.
       PROGRAM-ID. HELLO-WORLD.
       PROCEDURE DIVISION.
           DISPLAY "Hope your day is awesome!".
           STOP RUN.

I’m not sure how to run this on other platforms, but on Linux, you can install gnucobol and run it with:

cobc -x <filename>.cob

And if you do run it, you’ll see:

Hope your day is awesome!

Day 17 Update (2/24/2025)

Yesterday, I made good progress on the pixel editor, getting many of the old features working in a reasonable amount of time. I also set up Godot to open scripts in Neovim, making development smoother.

Nothing too exciting happened, but I hope your day has something awesome in store! Talk to you tomorrow.


Day 16 Update (2/23/2025)

Yesterday, I bounced between several projects. I started the day working on the C-Flat compiler, then shifted to the Bitbox compiler, an IR language for which I’m developing both an x86_64-linux and WASM backend. Currently, I’m focused on the WASM backend, but I’ve been struggling with block creation and mismatched return types. I've been testing different approaches to pinpoint the issue, but progress has been slow.

Feeling stuck, I switched gears. Some friends and I are planning to participate in an in-person game jam, so I’ve been exploring Godot, which seems like a solid choice for the event. Whether we actually use it remains to be seen.

I also needed some artwork, which led me back to working on my pixel editor. A few months ago, I rewrote it due to poor original design, and this version is significantly better. Now, it's just a matter of plugging in features and following the improved structure.

Overall, it was a productive day—coding, learning, and even squeezing in some Minecraft!

Hope your day is awesome! Talk to you tomorrow. 🚀


Day 15 Update (2/22/2025)

Yesterday, I made progress on the C-Flat compiler. I got conditional statements to compile and return data correctly. Then, I worked on allowing functions to return more than just s32 (i.e., i32). Since bool seemed like low-hanging fruit, I started there. However, I soon realized that I wasn't strictly enforcing declared types. A type checker would have made this issue more apparent, so it might be worth working on that today.

That said, there's so much to do that any progress would be worthwhile.

As always, hope your day is Awesome!


Day 14 Update (2/21/2025)

Yesterday, I read Write a C Compiler to get myself motivated to work on my new language, C-Flat (or CB). I've been experimenting with languages for the past three or four years, and while it may seem like I have a lot of projects, in reality, they all revolve around a single goal: the language.

My ultimate aim is to create a language I can use for all my projects—including a game I’d like to release on Steam someday. I’m not trying to do everything at once, but setting goals is important. Right now, I’m aiming to have C-Flat working well enough to complete Advent of Code 2025. If I don’t hit that milestone, no worries—but that’s the plan.

Aside from C-Flat, I also have a few smaller projects, like a game in Zig using Raylib, and a pixel editor in Zig as well. Sometimes, building tools for projects is the most fun part!

Anyway, last night, I worked on C-Flat, specifically getting assignment working in the compilation stage. The lexer and parser already handle variables—I just need to wire everything up. That’ll be tomorrow’s task.


Day 13 Update (2/20/2025)

Last night, I worked on a blog article, and it ended up being longer than I initially expected. I'm not the strongest writer, as you’ve probably gathered from my daily posts, but it's a skill I'd like to improve. And the only way to get better is through practice.

Hope your day is calm and relaxing!


Day 12 Update (2/19/2025)

Yesterday, I focused on cleaning up the game’s code, specifically the collision system. I believe I now have a better understanding of how to fix some persistent but minor bugs that have been there from the start. I'm considering pulling the collision code into its own project for easier debugging, though I might also need to build better debugging tools directly into the game.

Hope your day is full of epicness!


Day 11 Update (2/18/2025)

Yesterday, I got a minifier working for the site and also enabled Gzip compression for text files like JS, CSS, HTML, and XML. It wasn’t too difficult, but it did require a lot of Googling.

Short and sweet! Hope you have an epic day!


Day 10 Update (2/17/2025)

Yesterday, I worked on the website again. I think it's getting close to being finished in terms of functionality. I still need to complete the sitemap, but after that, I should be able to step away from development and focus solely on content.

One major change I made was completely restructuring the code—again. The site generation logic and the server code are now two separate binaries, making it more reusable for other sites instead of being tied specifically to this project. I also managed to embed all the site’s content directly into the binary itself—big thanks to Adam for the suggestion!

I also spent some time working on an Easter egg. If you poke around, you might find it, but I won’t mention it again. Just keep in mind that it’s not finished as of today.


Day 9 Update (2/16/2025)

Yesterday, I worked on getting the site to auto deploy with github actions. I also started to work on moving some of the content that gets reused a lot into templates I can drop in anywhere. The templating system in Go is really nice!

As always, hope your day is Awesome!


Day 8 Update (2/15/2025)

Yesterday, I worked on getting the og tags setup on the site! But that was about it. Seeing how it was valentine's day, I spent it mostly with my wife as I should.

As always, hope your day is Awesome!


Day 7 Update (2/14/2025)

Yesterday, I spent more time working on the site, adding content like the About section. I didn’t finish it, but I made some progress. I also started writing a standalone blog post about my experience with Neolisp. There’s never enough time in the day!

Not a super exciting day.

As always, hope your day is Awesome!


Day 6 Update (2/13/2025)

Yesterday, I continued working on the Markdown parser. I have to say, I’ve really tried to like Go, but it often feels like the language is working against the user rather than with them.

If you think of a compiler as a game, where the interface between the user and the compiler consists of error messages, and general feedback, Go does a poor job of facilitating that interaction. The error messages are often cryptic and lack detail, usually compressed into a single unhelpful line. Running tests provides little context—there’s no clear indication of which tests ran unless they fail, and even then, the feedback is minimal.

Another major frustration is Go's strict yet inconsistent enforcement of rules. For example, it will aggressively complain about unused imports but won't warn you about dead code within your own project. The lack of generics for so long forced workarounds that felt clunky, and while the recent addition of generics is welcome, it still feels like an afterthought rather than a well-integrated feature.

Despite these issues, I don’t completely hate the language, just certain aspects of it. But to be fair, that can be said for pretty much every language. Nothing is perfect.

I hope your day is Awesome!


Day 5 Update (2/12/2025)

Yesterday, I continued working on the markdown parser. I didn't have much time, but I managed to develop several parser combinators, including Then, Many, Or, Not, OneOf, and TakeUntil. I also created smaller, reusable parsers such as IntParser, SpaceParser, CharParser, WordParser, and LineParser.

For example, I used the following combination of parsers to parse headers:

headerParser := Then(OneOf("######", "#####", "####", "###", "##", "#"), Then(SpaceParser, LineParser))

I'm considering implementing the parser as methods to improve readability. That approach might look something like this:

headerParser := OneOf("######", "#####", "####", "###", "##", "#").Then(SpaceParser.Then(LineParser))

I think this structure makes the code more readable while maintaining the same debugging experience. I haven't explored this deeply yet, but it’s something I plan to look into.

Any who, hope your day is Awesome! I'm off the the dentist today. 🤮


Day 4 Update (2/11/2025)

Yesterday, I worked on improving the RSS feed and identified the issue as improperly encoded content. I also refactored main.go into multiple files to improve readability, even though it was under 500 lines. This restructuring helped me discover some dead code, which I feel Go should warn about, similar to unused imports. Additionally, I began developing my own Markdown parser to eliminate external dependencies.

As always, hope your day is awesome!


Day 3 Update (2/10/2025)

Yesterday, I made more progress on the RSS feed. I got it somewhat working, but it's still not functioning correctly. I discovered that the RSS XML file contains the entire contents of each post. While the <description> tag now shows the post content, some posts are still missing.

Another issue is that my site is static, and I store all my daily logs in a single markdown file. This setup works well for new blog entries, but daily logs get appended continuously. The RSS feed updates when regenerated, but it didn’t seem to show its new or makes a copy of the hole post in RSS readers—though I could be mistaken. Maybe have some kind of syntax to break up the file into single blogs for the RSS but that would litter the users reader with a lot of post. As always I hope your day is awesome!

Hope your day is AWESOME!


Day 2 Update (2/9/2025)

Yesterday, I continued working on my blogging site. Since it was my wife's birthday, I only had time to work on it in the morning and right before bed. I focused mainly on improving the site's appearance, including making the navigation bar disappear when scrolling down and reappear when scrolling up. I also started working on RSS feeds, but that will have to wait until tomorrow.

Have an awesome day!


Day 1 Update (2/8/2025)

Yesterday, I finally decided to finish my blogging site! It's a simple static site generator I built using Go, where all the content is written in Markdown. I can't say I'll commit to daily blogging, but I do plan to add more than 100 entries to this 2025 section—just like last year.

Keeping it short and 2025 daily blogssweet—hope you have an epic day! 🚀