From 55b5e0e6fad5bff97652520131060cd28cf280e7 Mon Sep 17 00:00:00 2001
From: robalb <11277482+robalb@users.noreply.github.com>
Date: Thu, 18 Jul 2024 16:51:12 +0200
Subject: [PATCH] writing
---
.../src/components/StackEmbed.svelte | 2 +
.../src/pages/posts/moving-data-x64.mdx | 3 +-
astro-website/src/pages/projects.mdx | 57 ++++++++++---------
.../src/pages/projects_toremove.astro | 52 -----------------
4 files changed, 34 insertions(+), 80 deletions(-)
delete mode 100644 astro-website/src/pages/projects_toremove.astro
diff --git a/astro-website/src/components/StackEmbed.svelte b/astro-website/src/components/StackEmbed.svelte
index 937e16a..3f1f7af 100644
--- a/astro-website/src/components/StackEmbed.svelte
+++ b/astro-website/src/components/StackEmbed.svelte
@@ -32,6 +32,8 @@ function init(){
232, 4, 52, 40, 253, 6, 144, 31, 0, 0, 0, 0, 255, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 158, 135, 93, 202, 47, 126, 0, 0, 0, 0, 0, 0, 0, 0, 64, 158, 194, 247, 255, 127, 0, 0, 104, 220, 255, 255, 255, 127, 0, 0, 152, 125, 85, 85, 85, 85, 0, 0, 224, 226, 255, 247, 255, 127, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 85, 85, 85, 85, 0, 0
]
+ let text = "This is example data"
+ text.split("").forEach((c,i) => data[i] = c.charCodeAt(0))
registers = [
{color: "blue", name: "rsp", bytes: [0x50, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00], preview: "hex_int"},
{color: "blue", name: "rax", bytes: [0,0,0,0,0,0,0,0], preview: "hex_int"},
diff --git a/astro-website/src/pages/posts/moving-data-x64.mdx b/astro-website/src/pages/posts/moving-data-x64.mdx
index cb424e9..9240dd5 100644
--- a/astro-website/src/pages/posts/moving-data-x64.mdx
+++ b/astro-website/src/pages/posts/moving-data-x64.mdx
@@ -23,7 +23,7 @@ and at it's essence, all the processor does is moving data.
This guide is not about writing assembly; it's about understanding the way data moves
behind the scenes when you execute a program. We'll use concrete examples for the
x86-64 architecture, but these informations apply eveywhere and are foundamental knowledge
-for reverse engineering, binary exploitation, or simply program debugging
+for reverse engineering, binary exploitation, or just writing better code.
### what is data?
@@ -281,7 +281,6 @@ Even when you are aware of this, it's common to get confused
and end up thinking:
"i put a new value on the stack, and it has a smaller address than the previous value, how it is possible?"
-
### Further Reading
This article is still under development. My goal is to improve it over time,
diff --git a/astro-website/src/pages/projects.mdx b/astro-website/src/pages/projects.mdx
index 36367e9..1118e05 100644
--- a/astro-website/src/pages/projects.mdx
+++ b/astro-website/src/pages/projects.mdx
@@ -50,10 +50,9 @@ You can try it live on [morse.halb.it](https://morse.halb.it). The code is avail
-It's clearly a pretty niche project, but it has the advantage of being large enough
-to cover all main areas of web development:
-It requires websocket communication, authentication, a database, settings synchronization,
-custom code and ux for the morse chat.
+It's a pretty niche project, which is complex enough to span all main areas of web development.
+It requires a database, real-time communication, authentication, and some custom ux and frontend functionality
+that makes everything interesting.
For this reason, I've used it over the years as a playground to test various web technologies.
It went from being a php + vanilla js web app in 2018 to being a react+redux monstruosity in 2021,
@@ -71,12 +70,10 @@ an OVH vps provisioned through Ansible scripts.
-After a year of infrastructure experimentation, i got a part-time job as
-a backend and cloud infrastructure developer.
-At my new job I was already managing unnecessarily complex k8s clusters and pipelines every day,
-so I got rid of my personal cluster.
+Since 2024, after more than a year working in the field of Devops and Cloud Infrastructure
+development, I no longer have the requirement of artificial complexity in my personal projects.
-Currently, all my projects are hosted on a Hetzner VPS.
+Right now all my projects are hosted on a Hetzner VPS.
Each project is packaged with a Docker-compose file, and deployed using Ansible.
Everything is tightly integrated with a "base layer" running Traefik, a Grafana-Prometheus-Loki stack, and various other
utilities. The code for this infrastructure is publicly available [on github](https://github.com/robalb/my-infra).
@@ -107,7 +104,11 @@ The class then gathered around a large cork pinboard, sketched the tests calenda
and started the complex process of finding the optimal candidate for each slot. The process vaguely resembled
traders fighting on an stock exchange floor.
Everyone had other oral exams, personal issues and countless other hard constraints that made this problem difficult
-to solve by hand. The web app successfully solved the problem.
+to solve by hand.
+
+This webapp was a scheduling system designed to solve a very specific need for the time,
+and it was incredibly succesful at that. It was written as a react webapp + php api, with some interesting
+experimentations in the integration between react and php
@@ -132,10 +133,11 @@ we had a detailed description of the grammar to implement
and an extensive set of tests the professor would use on the code.
You don’t get that many chances in life to practice pure test-driven development:
-I took a couple of days to write a ton of unit tests in Python, including tests for Emacs-like
+I took a couple of days to write a ton of language-agnostic unit tests in Python, including tests for Emacs-like
code formatting and for the 80-line limit. Then, together with two other classmates,
-we started the development. It was a pretty satisfying experience to know that when all tests passed,
-you had the certainty of a full grade.
+we started the actual development.
+It was a pretty satisfying experience to know that when all tests passed,
+we had the certainty of a full grade.
The code for the parsers and the language-agnostic unit tests is
[on github](https://github.com/robalb/uri_parser_project)
@@ -149,31 +151,34 @@ looking to develop the project in vim, or some other editor forbidden by the ema
This was yet another university group project, that took an unconfortable amount of my time
back in 2022.
-Our task was to develop an Android app in Java, adhering to Google's recommended best practices.
+The task was to develop an Android app in Java, adhering to Google's recommended best practices.
-We decided to create an app for managing sailing regattas. It featured a nautical map displaying a
+I worked with a group that developed an app for managing robotic buoys used in sailing regattas.
+A pretty niche application, with interesting project requirements.
+It featured a nautical map displaying a
customizable regatta track and provided real-time updates on the position of buoys and support boats.
+I designed the figma design of the app, based on the new material design guidelines.
+I'm particularly proud that we managed to fully implement it.
+
+I also wrote the app backend using FastAPI, and used the openapi documentation
+to automatically generate the schema for the Android Retrofit client.
+Additionally, I established a basic CI/CD pipeline that automatically updated the
+app repository with new Retrofit client models whenever a new version of the API was released.
+
+Both the app code and the API server are available on the [open-roboe github organization](https://github.com/open-roboe)
+
+It's worth mentioning that
Android java development can be a scarring experience when your requirements are to follow Google's best practices to the letter.
Navigating through layers of outdated Java app development practices proved
to be far more complex than any webpack-react-redux or other convoluted web projects I've encountered.
-I still have flashbacks about fighting `ViewModelProviderFactory` patterns, broken xml layout editors, and `LiveData` mixing with `rxJava`
-
-The fact that i'm talking about this project however means that i enjoyed some parts of it.
-In particular, I'm proud of the figma design I created, which we managed to fully implement.
+I still have vivid memories about fighting `ViewModelProviderFactory` patterns, broken xml layout editors, and `LiveData` mixing with `rxJava`
-I also enjoyed developing the API server for the app.
-I wrote it in FastAPI, and used the openapi documentation
-to automatically generate the schema for the Android Retrofit client.
-Additionally, I established a basic CI/CD pipeline that automatically created a pull request
-on the app repository containing new Retrofit client models whenever a new version of the API was released.
-Both the app code and the API server are available on the [open-roboe github organization](https://github.com/open-roboe)
-
### Older projects
diff --git a/astro-website/src/pages/projects_toremove.astro b/astro-website/src/pages/projects_toremove.astro
deleted file mode 100644
index c6548a0..0000000
--- a/astro-website/src/pages/projects_toremove.astro
+++ /dev/null
@@ -1,52 +0,0 @@
----
-// Component Imports
-import SharedLayout from '../components/SharedLayout.astro';
-
-let title = 'Projects';
-let description = 'A selection of projects'
-let permalink = 'https://halb.it/projects/';
-let activePage = 'projects';
-
-let allProjects = await Astro.glob('./projects/*.md');
-allProjects = allProjects.sort((a, b) => new Date(a.frontmatter.order).valueOf() - new Date(b.frontmatter.order).valueOf());
-
-let isLarge = true
----
-
-
-
-
Projects
-
A selection of open-source projects from my github profile