Profile: ffe18389...

I'm not vegan and don't expect to ever become vegan, but I can understand that it can be difficult to ensure you only eat foods that fit your ethics.

Yes, vegans can be irritating, but your actions help ensure that others can order their own special foods without being thrown out of the restaurant.

That's Hindu-Arabic numbers.

But, yeah. I can see that this will get people angry. Over nothing.

The body's defenses still fight the foreign tissues, even with immunosuppressants, so I wouldn't expect that organ to last a long time.

Neither of the two people I knew who received transplants even made it to a decade.

I, for one, appreciate your work, jb55. I also appreciate all the promotional work Derek does.

On socials like XTwitter, I long ago stopped paying attention to famous or popular folks, but y'all are legit.

Livin' the "college student" life. That and instant ramen noodles.

nostr:npub16c2fsg7fp3yxte9ugd9yhcdpa68h924asv5d6pvm5nc37a3nkzmqd2xaj2 someone in the Fediverse is exploring Reticulum. Since you're the only user I know, I linked to your Soapbox account.

I remember 1979, so I understand. But if he wasn't willing to replace their regime, he should not have attacked in the first place. Save it for a time when that's on the table and has credible internal support.

https://www.ccn.com/news/crypto/california-bill-seize-inactive-crypto-wallet/

California bill allowing state to seize "inactive" crypto wallets after three years passes Assembly, awaits Senate action. Not believed to affect self-hosted 'cold' wallets, just exchange wallets.

Replying to Avatar delete

nostr:npub1sg6plzptd64u62a878hep2kev88swjh3tw00gjsfl8f237lmu63q0uf63m Why stay CEO of Block when you are so dispassionate about product? Let someone else drive the company, someone that has a spirit of competition and like to win? Giving product to a bunch of people working from home and phoning it in has led to your products falling behind competition in every dimension. I know you’re excited about codename goose but look at what Meta and X are doing, lol…. get out of bed!

I don't know what is going on with Square/Block/Cashapp, but remote doesn't have to mean disinterested or low-effort. In $FORMER_EMPLOYER, during the lockdowns, productivity soared when people didn't have to come to the office every day.

It was a marvellous time. I honestly expected more and faster user growth than we got.

I don't have a link, but there was a religious leader claiming that Trump is almost equivalent to Jesus. I don't know whether people in other countries are doing this with their own leaders, but it's really worrisome.

I still think Reticulum should try to interoperate with Meshtastic or even allow its stack to ride atop Meshtastic. Just because that would greatly expand its reach.

I'm not much of a _"new years resolutions"_ type of guy in fact I think those sort of things

are incredibly stupid and lead to you getting **no where in life**; so _it's best you stop that_

if you are currently engaged in such a bizarre tradition that oofloads what you _could do **now**_

onto a future date. If you can start now, there's no excuse.

Before I get into what is to come in the next year and indeed what I have been working

on so much this year that I haven't "written" a single blog post, I first need to give

a little bit of an explanation for the first paragraph.

So here goes nothing...

# On procrastination

Now you may be asking as to why I started off with such a brazen statement? It has to be said;

we have **all** fallen to the devil of _procrastination_. I remember it hogging me down multiple

times (months even) before I actually started working on my compiler. Guess what, now and then

it tries to rear its head but I am getting better at controlling it.

How did I stary controlling it? I don't have some cookie cutter _buy me a book_ answer to this

actually. What I realised was that I was _scared of the endeavour_ at hand. So, for the example

of my compiler project: "I was scared that I wouldn't be able to take on such a huge task of

writing a compiler from scratch entirely". So in my case it was being scared of an academic

hurdle of sorts. However, I had experience in writing a basic one already from my second year

of computer science - so what gives? I clearly could have laid the basic foundation for the

compiler and worried about the next challenges as they rolled in. No, I was worried about

even writing the first few lines of the code structure I _already knew_ - **the basics!**

The reason? Well, I was scared that I wouldn't be good enough. I was worried that I wouldn't

be able to claim any of it for myself because I would probably require having to reach out

online consistently and if that became a pattern then how would I be able to claim the majority

of the code written as my own? Luckily, however, I didn't need any help. Let me stop here for

a moment - I am in _no way_ saying that reaching out for help should stop you from completing

your dreams. You could argue that my second year of CS was preconditioning for me having the

knowledge to be able to write my compiler almost a year or so later - I think so!

Anyways... let's continue. So I began writing the lexer for my compiler and that started

to go well, then I started work on the parser and declaring all the AST types that I needed

as I wrote the compiler for a language design that was being built concurrently. As time

went on I actually started to surpase the capabilities of the compiler I had written for

my second year computer science module. I had to hit many challenges head on, those of

which I had never faced before in my undergrad course. Therefore there was no one to rely

on. Just an aside, as I stated earlier, yes I could have gone online and searched for

answers but this was against my ideology _then_ and still **now** for this particular

project - I wanted to go through the motions myself.

>Put simply, I wanted to learn **not copy**

As things kept on this line of progression I had to re-write the dependency generator

about three times until I realised it was doing what I wanted it to do. This was a great

success for me. I remember looking at the de-cycled graph output (a visitation-marking

sort of graph traversal) for the first time when it started working and I was immensely

happy. I knew how important it was to get this particular algorithmn/mechanism implemented

correctly because I knew it would solve all future problems generally - it was integral

to the compiler. Even though I had nowhere near the features in my language implemented

as I do now - I could still tell that:

>I need not worry now, anything I _need_ to implement can _easily_ be done just with

a few lines of code since this mechanism will allow me to build out advanced features

too and not just simple ones.

---

Long store short, procrastination can be over come. All that is required is for you

to take the initial risk. Don't worry that you _may_ need to reach out for help

and if you try to do it all yourself (to a degree, nothing is done in solitude)

then take the risk too and spend the time it takes to overcome challenges. Remember

how I rewrote a particular component three times until it did what I wanted it to

do? That was me figuring out not just how to get it to work but what it should be

doing in the first place as well. I was truly thinking for myself instead of

getting someone else (or ChatGPT) to do it for me.

# What have I been up to

Well, there is just so much and it feels rather hard to prove too ever since I

have taken on the "work on it, talk later" mantra. So there's quite a few

things per project but let's start with a few in roughly chronological order:

## My homelab

My word, have I put in hours of work, debugging and documentation into this.

I had decided a while back already that I want a multi-router homelab, complete

with my own self-built rack and with a setup that was fully Dockerized. The

Docker part was very important as I wanted easy-to-deploy containers and I

wanted a declarative approach to stating what I wanted and how I wanted

it deployed. Dockerizzing (yes, I have immense rizz).

On the networking side of things I wanted to also get my DNS resolver back

up _along_ with it running as a nameserver so that I could have records

resolved via it whenever people wanted to reach certain domains hosted

in the `*.deavmi.assigned.network` region.

I also wanted to deploy OSPF (open shortest path first) to my routers

and learn that. Now, I didnt have the most advanced setup for it but

I got the basics done as that was all that I needed. I was very happy

with the dynamism of the results.

>Add a route to `fd77::420/69` here on `router1` and it appears a few

seconds later on `router2`

## The T compiler

I have been working on the compiler for my **T programming language**

quite a lot. I have been working on the following:

1. Enumeration type support

* And yes, my enums beat that of C's as my enumeration type names

do not need to be globally unique but rather follow the `EnumType.MemberName`

format.

2. Struct support

3. Comment support

* Specifically within the parser as that is where I last stopped

working on such support

4. Clean ups here and there

* There has been quite a lot of code-churn (the good kind) due to

me reworking a lot of the code; this has meant getting rid of code

as well - this is the best type of churn!

5. Internal API changes

* Cleaning up of the `CodeEmitter` API to remove the stuff relating

to `SymbolMapper`(s) which are no longer used and are rather internal

to the given code emitter _implementation_ such as the C emitter `DGen`

6. Dotting support

* This took majority of the type and was actually required before

I could get to work on struct support or enumeraiton type support.

* What it amounts to is the treating of the `.` operator (the `SymbolType.DOT`)

as an actual operator. This is still being worked on but for the

most part it is probably done and the other things that rely on

it like enumeration types and struct types just have to have

their additions added to it.

There are probably many other things here and there that I can't

remember right now as I type this; however all I can say is that

between those 6 items there has been **a lot** of work done.

Oh, and a surprise! I have been working on a package manager

for T! It can both fetch and build packages along with generating

documentation:

### Docgen

![]()

The above shows the output of doing documentation generation

for an example single-module program `simple_comments.t` (which

is actually part of the T test suite).

### Fetching a package

![]()

We can see in the above how a search is performed with the

regular expression `tsh*` and how a matching candidate is

found for `tshell`. This is then fetched over the network

in chunks (hence the usage of a progress bar). It comes

in the form of a `.zip` archive. This is unzipped and stored

and some basic checks are performed.

I was quite proud of the callback-based (using a delegate/closure)

approach to fetching using D's `libcurl` wrapper. You

firstly make an _HTTP HEAD_ request to get the `content-length`

field of the resource (the `.ZIP` archive) you want

to fetch. Then you do a chunked fetch of that whereby

after each chunk you call a method (your callback)

that consumes the just-received bytes. You then use

this to update the progress bar as `numberOfBytes/expectedTotal`.

### Building the package

![]()

Once the package has been stored, a `StoreRef` is returned,

this is then used to actually setup an instance of the `Compiler`

such that we can trigger the `compile()` method on it. After

which the compilation process begins and we get information

about how long the procedure took and then also the path

to the created executable.

## Reticulum, LoRa, radios and serial adaptors

![]()

I have had a bit of a foray into the [Reticulum Network Stack](https://reticulum.network/)

and I have decided I want to extend the testnet physically into

my area. This will be a long term project of acquiring some

relatively inexpensive hardware but then for the type of

installation I want to do - some of it will be more expensive

and require longer term savings (for outdoor enclosures of

the type I may be looking at).

![](lora_2.jpeg)

That's the one part, but as for the software side I helped

add IPv6 support ([here](https://github.com/markqvist/Reticulum/pull/601) and

[here](https://github.com/markqvist/Reticulum/pull/545)) to

Reticulum - something that was desperately needed.

I the decided I wanted to try IPv6 over `tncattach` (which

is a program that let's you use your [RNode](https://unsigned.io/software/RNode_Firmware.html)

as a TAP/TUN interface). So I went ahead [and did some

C programming for that](https://github.com/markqvist/tncattach/pull/16).

There is just **so much** I have in store relating to this.

# What to expect

I do have some blog posts pre-written for the upcoming year

that I will be releasing shortly. It's a mixed back as to

what they're about but nonetheless some of them will give

you a greater understanding of each of the things I have

mentioned and what exactly I was so busy with.

---

## Have a blessed Christmas, be with your loved ones whilst you still can.

### See you in 2025

Great to see this, Deavmi.

Nearly all of the thousands of Fediverse instances are hosted and funded by individuals out of their own pockets.

There are lots of issues there, just as there are lots of issies here. It doesn't mean that I'm not going to celebrate every time I make a contact across decentralized networks instead of having to join big corporate socials to reach my contacts.

If you can't see the benefit, that's only an issue for you. When you have to run back to TwitFaceGram because you need to connect with someone that isn't here, you'll understand.