Hi all, I recently setup some Reticulum stuff.
## Transport node
I am running a _transport node_ which means I can forward Reticulum network
packets for between the _other_ nodes I am connected to over my interfaces.
### Interfaces
Speaking of interfaces I have made available my transport node to be peered
with dirctly (if you want to have me as your potential first hop) over
several networks:
```toml
[[rothbard_RNS_transport_ZA]]
type = TCPClientInterface
enabled = true
target_host = rothbard.lab.networks.deavmi.assigned.network
target_port = 4242
[[rothbard_RNS_transport_ZA_ygg]]
type = TCPClientInterface
enabled = true
target_host = 200:73eb:2e4:14be:aac7:90b3:784b:71a3
target_port = 4242
[[rothbard_RNS_transport_ZA_i2p]]
type = I2PInterface
enabled = true
peers = guuahj7pyb6ksmjv2bqrjg4cs2wou6cor3ivsi6crntqbzsxnbna.b32.i2p
```
## LXMF propagation node
I am running a propagation node at the destination address of `b4ac9705550f189cf2aff4d4748bd05e`.
You can use it as your propagation node if you want, it has a nice
big message store configured and I will probably aim at increasing
the size in the months to come.
Tristan Brice Velloza Kildaire
deavmi@deavmi.assigned.network
npub16c2f...xaj2
Computer programmer 🧑💻, wine drinker 🍷, opinion haver 🗣️, Roman Catholic ✝️
I have quite a keen interest in compilers, operating systems, routing and food.
XMR: 43jx2gRMRxBauz2gwKTb9VJyUqKNg7wVPVVhQd32cgUA6WGhs2haJXAHfrdTzTKdYfeGEbDT8FtkF45sKMAEyasWRSyG5Sj
BTC: bc1qkvduq9rwray2ymrvkrven3m8vsp9ah55f4hnc4
SimpleX: https://simplex.chat/contact#/?v=2-7&smp=smp%3A%2F%2Fhpq7_4gGJiilmz5Rf-CswuU5kZGkm_zOIooSw6yALRg%3D%40smp5.simplex.im%2FG0HWkVbLHEAC38X3oPTL6iOLZnJ0gC32%23%2F%3Fv%3D1-3%26dh%3DMCowBQYDK2VuAyEAc_KgxEP05S0o28ZO2FoaWC-fmRPWsjRUYNGTiE9N-y8%253D%26srv%3Djjbyvoemxysm7qxap7m5d5m35jzv5qq6gnlv7s4rsn7tdwwmuqciwpid.onion
‼️‼️ Absolutey HARAM radical cryptographic wireless mesh networking guide ‼️‼️
Okay, now that I have your attention you can check out this article I wrote. Spent quite a lot of time on it as it included a lot of testing in my lab 🥼.
If you're into:
1️⃣ Mesh network routing
2️⃣ Cryptography
3️⃣ Wireless radios
4️⃣ Wine
Then you're definately my type, but you should probably read this article first.
🌐 Article:
#reticulum #lora #lillygo #lxmf
Setting up Reticulum - the almost full guide to radical networking | Tristan B. Kildaire
Can everyone check my profile and tell me what LN URL they see?
#asknostr
Running Reticulum 🏃
#reticulum


@Adopting Bitcoin Cape Town Really enjoyed the conference, the rooms were cool enough for the Mzansi weather and the talks were great.
RaspiBlitz workshop was great!
Working on some #OpenWRT stuff now.
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).

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](
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

GitHub
Build software better, together
GitHub is where people build software. More than 150 million people use GitHub to discover, fork, and contribute to over 420 million projects.
# The plan
Firstly let me describe the components for what I want to accomplish today and then also what the goals are.
## Antennas
What I wanted to get done today was to test out two of my new antennas and at a further range than I had tested before with my RNodes.
### Antenna with magnetic base

These antennas come with a **3m** lead which means that you can place the radio and antenna at quite the distance apart. This is helpful for cases where you want the antenna to reach some place far away but at the same time you wouldn't be able to run the data cable to the radio (the RNode) at that same length.
We shall see how the above use case was rather handy for me in my setup that I had when using this antenna today.
These are available for purchase [here](https://www.robotics.org.za/communication-wireless-Industrial/antenna-866mhz/YN-868MHZ-5DBI).
### Longer pole antenna

These larger antennas fit the same use case of the original stubby antennas that are provided with the LoRa T3-S3 board of mine:

They are useful for portable devices that you can whip out and begin using. The antenna is probably as big as one is willing to slog around and have permanently fixed. It's also easy enough to store as it is rather rigid.
It has 3 angles it can be adjusted to on its hinge at `0`, `45` and `90` degrees.
These are available for purchase [here](https://www.robotics.org.za/communication-wireless-Industrial/antenna-866mhz/YN-868MHZ-5DBI).
## Tests
What I wanted to actually get done today was to test out _just how much better_ the new antennas would perform. Now I must state firstly that it wasn't a very scientific test really because I had nothing to compare the antennas too besides my previous stubby antennas (as mentioned earlier) but I never put them through the same test in any case so I feel it is rather unscientific.
Either way, we're going to see how they work in either case.
The approach used will be to send a few messages from my phone to my laptop. In order to test the bi-directionality I need not send something form the laptop to the phone. The reason the latter need not be _explicitly_ tested is because whenever a message is sent a message receipt is sent back (upon arrival at the endpoint) - therefore if I see that I will know that bi-directionality worked.
* Technically when establishing a _link_ it would test bi-directionality as well.
* Therefore back-and-forth communication is tested a few times already just by me sending a message from my phone to my laptop.
### Devices
I will be running tests from my phone running [_Sideband_](https://github.com/markqvist/Sideband) which is an Android-based LXMF client which can communicate over Reticulum:

The second device will be running the CLI-based LXMF client called [_nomadnet_](https://github.com/markqvist/NomadNet):

I have setup both devices such that the only interface they have available is the RNode-based interface. This will ensure that I only have traffic delivered to my phone via the LoRa radio and not any other interface such as via the Internet.
>Note: The laptop had other interfaces active but none of which my phone would have been reachable via; hence it would always have to find a path over the LoRa-based RNode interface
### Antennas
#### Stationary antenna
The antenna with the magnetic mount would be connected to the one RNode that my laptop was connected to (over USB-C).
The antenna _itself_ was mounted ontop of the patio's shade-roof as it had a metallic base that was magnetic:

The above antenna connects to the RNode (for my laptop) via the long $3m$ cable that terminates with an SMA connectors on the board:

#### Mobile antenna
As for my mobile device running Sideband, that would be connected to my phone via Bluetooth Low Energy (BLE) but powered via my phone's USB-C port:

# Test
## Test 1 - _"Line of sight"_
The first test was to walk to a road parallel to the house and right across from the antenna mounted on the roof. This was chosen as it would provide line-of-sight for the antennas and be a good first test.

I began the test by opening up Sideband and then sending some messages:

We can see that they were all delivered, this meant we received and acknowledgement from the laptop node!
I think the _last message_ was sent in the park actually (see the next test)
## Test 2 - _"obstructing concrete"_
The next test was sort of a mistake actually. I decided to walk back home through the same path I had come originally; this meant walking via the park.

It was also a **very hot** day

I was rather surprised here as there are multiple walls of concrete obstructing the stationary antenna and my mobile one. Yet, believe it or not, I was able to get some messages through here:

As you can see these messages were **all** delivered.
I found these results rather exciting as it meant it can work with some obstructions; good to know because it means slighter obstructions - perhaps of tree - should definitely still allow for the signal to reach both ways.

I do wonder if the waves were bouncing off the walls in some way - who knows? 🤔️
# Conclusion
I was rather happy with the outcome of the first test as it showed everything I had setup was in working order (the new antennas).
Secondly, the surprise of how well it worked with obstructions of the concrete walls was just mind boggling in the good sense of the word.
## Next plans
I have decided that the next place I want to test from is at a tree on top of a hill in the same line-of-sight as where I stood but just at a **much greater distance**.

In the mean time, I will plan on taking a trip to an estate that is on a hill and should have line-of-sight to my stationary antenna but at a further distance and accessible with a normal vehicle (instead of an off-road one which would be required for the tree on the hill site).
Just spent this Sunday proving to myself that, no, LoRa is not _yet_ suitable for large scale IPv6 + Babel.
I refuse to read any technical documents stating the obvious; I will figure out the obvious for myself 🤡
What's a good Nostr client for long-form Markdown-based posts?
I'm cooking bro
The first one is always the ugliest


Ordered more LoRa equipment.
Let's try get this all done in one month:
1. Finish my last LoRa tutorial
2. Write up part 2 of IPv6 and Babel over LoRa
#lora #rnode #reticulum #ipv6
Creator of Reticulum himself, Mark Qvist, talking about Reticulum!
#reticulum
https://streaming.media.ccc.de/38c3/relive/837
My blog post on IPv6 over LoRa is almost completed, working on the final touches of it now.
This is quite an easy way to power your RNode whilst on the go
#rnode #lillygo


Where my next adventure will begin...
#lora #reticulum 

I need to buy some more of these...
#reticulum #lora #lillygo


No, Bitcoin won't fix single-parenthood
