Clean up
This commit is contained in:
parent
82a241ddee
commit
070a03142f
17 changed files with 8 additions and 30 deletions
|
|
@ -13,7 +13,7 @@ project: {}
|
|||
|
||||
---
|
||||
|
||||
January 2018, my first browser game. You're a dot; other dots stream in from the edges and chase you; you have to out-manouver them to escape while getting them to collide with each other. The game is simple but rather fun, at least for the first few minutes.
|
||||
January 2018, my first browser game. You're a dot; other dots stream in from the edges and chase you; you have to out-manoeuvre them to escape while getting them to collide with each other. The game is simple but rather fun, at least for the first few minutes.
|
||||
|
||||
This project marks my first encounter with the `<canvas>` element acting as the catalyst for my later (and still going) obsession with graphics programming.
|
||||
|
||||
|
|
|
|||
|
|
@ -17,11 +17,11 @@ article:
|
|||
scale: One container, multiple targets per host, four years of restored incidents
|
||||
---
|
||||
|
||||
There's merit to keeping systems simpler the more critical they are. More precisesly, we must keep them easily understandable by building on solid foundations and only adding on top the most necessary extra logic.
|
||||
There's merit to keeping systems simpler the more critical they are. More precisely, we must keep them easily understandable by building on solid foundations and only adding on top the most necessary extra logic.
|
||||
|
||||
A good example of this is my home server's backup. I ran various databases, even when I aim to mostly use sqlite, there are multiple postgres instances, redis, message queues, etc. Who doesn't like time machine like backups which allow granular file history? To achieve this, we need frequent backups, my setup uses an hourly cadence. However, we can't shut down the entire stack every hour to back it up. So the only solution is to backup everything live.
|
||||
|
||||
I could've gone down the rabbit hole of using each database's dedicated backup mechansim, however, that would've been everyhing but simple. So instead I rely on the DB's crash recovery mechanism being solid.
|
||||
I could've gone down the rabbit hole of using each database's dedicated backup mechanism, however, that would've been everything but simple. So instead I rely on the DB's crash recovery mechanism being solid.
|
||||
|
||||
With the above context, I can now reveal that the backup container is just a short shell script that takes a btrfs snapshot (all container volumes are mounted from a btrfs subvolume) and then feeding into borg which handles incrementality and deduplication. The backup script supports configuring borg to run against multiple remote backup servers, gracefully handle failures, and to maintain a healthcheck status in case human intervention is needed.
|
||||
|
||||
|
|
|
|||
|
|
@ -9,7 +9,6 @@ thumbnail:
|
|||
article:
|
||||
tags: ['simulation', 'systems']
|
||||
stack: ['Unity', 'C#', 'REST API', 'Blender']
|
||||
outcome: Visible consequences for an otherwise abstract PLC challenge
|
||||
project:
|
||||
title: City Simulation
|
||||
---
|
||||
|
|
|
|||
|
|
@ -16,11 +16,9 @@ article:
|
|||
tags: ['games', 'web', 'systems']
|
||||
stack: ['TypeScript', 'Node.js', 'WebSockets', 'WebGL', 'SDF-2D']
|
||||
scale: Game servers ticking at 200 Hz, each serving 16–32 clients at 25 updates a second, browser and mobile
|
||||
outcome: A multiplayer browser game that proved SDF-2D survived a real game loop
|
||||
media:
|
||||
- type: image
|
||||
src: ./_assets/decla-red.jpg
|
||||
alt: The decla.red browser game interface showing a space scene with team controls and planets.
|
||||
caption: Two teams, small planets, real gravity. The renderer underneath is the SDF-2D library from my thesis.
|
||||
project:
|
||||
title: decla.red
|
||||
|
|
|
|||
|
|
@ -14,7 +14,6 @@ links:
|
|||
article:
|
||||
tags: ['web', 'tools']
|
||||
stack: ['jQuery', 'vanilla HTML/CSS', 'Node/Express', 'JSON', 'localStorage']
|
||||
outcome: A free practice app real students still find when they search for past érettségi physics papers
|
||||
project:
|
||||
title: Fizika
|
||||
technologies: ['jQuery', 'HTML/CSS', 'Node/Express', 'JSON', 'localStorage']
|
||||
|
|
|
|||
|
|
@ -16,11 +16,9 @@ article:
|
|||
tags: ['graphics', 'simulation', 'web']
|
||||
stack: ['TypeScript', 'WebGPU', 'WGSL', 'Compute shaders', 'Vite', 'Tweakpane']
|
||||
scale: One HTML file, 10 WGSL shaders, 6 vibe presets, up to 1.5M agents, 60 FPS target on consumer hardware
|
||||
outcome: A browser drawing toy where user strokes seed an agent simulation that overwrites them
|
||||
media:
|
||||
- type: image
|
||||
src: ./_assets/fleeting-garden.jpg
|
||||
alt: Close-up of intertwining cyan, violet, and yellow agent trails radiating into a kaleidoscopic central knot.
|
||||
caption: A snapshot from one session. What you see is the trail texture; the agents that drew it are already gone.
|
||||
project:
|
||||
title: Fleeting Garden
|
||||
|
|
|
|||
|
|
@ -22,11 +22,9 @@ article:
|
|||
'Atkinson dither',
|
||||
]
|
||||
scale: One panel, one household, ~64 refreshes a day at peak
|
||||
outcome: A wall-mounted photo frame that pulls from self-hosted Immich, gated on home presence, with no cloud dependencies
|
||||
media:
|
||||
- type: image
|
||||
src: ./_assets/frame.jpg
|
||||
alt: The frame on the wall showing a 6-colour Atkinson-dithered landscape scene, with "2 years ago" and a location label painted into the bottom corners.
|
||||
caption: The bottom corners carry the photo's age and EXIF location. Painted as text on top, so the dither can't smear them.
|
||||
project:
|
||||
title: Frame
|
||||
|
|
|
|||
|
|
@ -19,11 +19,9 @@ article:
|
|||
tags: ['ai', 'systems', 'tools']
|
||||
stack: ['Python', 'decorators', 'FastAPI', 'survey design']
|
||||
scale: 33 deployment habits surveyed, 6 proposed additions, framework evaluated by working data scientists and engineers
|
||||
outcome: A pip-installable framework, an MSc thesis, and one strong opinion about API surface area
|
||||
media:
|
||||
- type: image
|
||||
src: ./_assets/great-ai.png
|
||||
alt: Example Python code using GreatAI decorators and prediction helpers.
|
||||
caption: A working GreatAI service is about ten lines on top of a plain prediction function.
|
||||
project:
|
||||
title: GreatAI
|
||||
|
|
|
|||
|
|
@ -14,11 +14,9 @@ article:
|
|||
tags: ['systems', 'web', 'tools']
|
||||
stack: ['Python', 'Angular', 'TypeScript', 'FastAPI', 'SQLite']
|
||||
scale: Multi-device goal and task state shared between clients and a server
|
||||
outcome: A goal tracker still in use, and a lesson about when clever sync isn't worth it
|
||||
media:
|
||||
- type: image
|
||||
src: ./_assets/towers.jpg
|
||||
alt: Screenshot of a life tracking web interface represented with tower-like visual structures.
|
||||
caption: Towers of finished tasks, one column per goal. Done blocks fall into place with a small gravity animation.
|
||||
project:
|
||||
title: Life Towers
|
||||
|
|
|
|||
|
|
@ -9,7 +9,6 @@ thumbnail:
|
|||
article:
|
||||
tags: ['systems', 'tools']
|
||||
stack: ['Python', 'NumPy', 'FFT', 'Raspberry Pi', 'MOSFETs', 'vanilla web']
|
||||
outcome: The first non-trivial project I started and finished
|
||||
project:
|
||||
title: Lights Synchronized to Music
|
||||
---
|
||||
|
|
|
|||
|
|
@ -11,15 +11,12 @@ article:
|
|||
tags: ['simulation', 'systems', 'tools']
|
||||
stack: ['Python', 'Flask', 'NumPy', 'HTML canvas', 'JavaFX']
|
||||
scale: One remote sim server, many monitoring clients, separate JavaFX graph editor
|
||||
outcome: A believable PLC simulation usable by non-specialists during a live cybersecurity challenge
|
||||
media:
|
||||
- type: image
|
||||
src: ./_assets/process-simulator.jpg
|
||||
alt: Screenshot of the cooling system simulator with pipes, pumps, coolers, and temperature values.
|
||||
caption: Flow ran first as a graph traversal, then heat solved as a matrix equation.
|
||||
- type: image
|
||||
src: ./_assets/process-simulator-input.jpg
|
||||
alt: Screenshot of the JavaFX graph editor used to define simulator input.
|
||||
caption: The JavaFX editor produced JSON that the simulator ate as input.
|
||||
project:
|
||||
title: Cooling System Simulation
|
||||
|
|
|
|||
|
|
@ -26,11 +26,9 @@ article:
|
|||
'Gemini',
|
||||
]
|
||||
scale: ~25M historical properties, ~2.5M postcodes, ~150 numeric features per row, all in RAM on a single VM
|
||||
outcome: A single-binary UK property-intelligence service with sub-100ms hexagon aggregations under filter
|
||||
media:
|
||||
- type: image
|
||||
src: ./_assets/perfect-postcode.jpg
|
||||
alt: A Perfect Postcode dashboard view of Manchester with five active filters (property type, price, public-transport time to Manchester city centre, crime, noise) and a hex heatmap of 1,247 matching properties.
|
||||
caption: A normal user pan triggers a hexagon aggregation under filter. The hot path holds itself to three integer compares per row.
|
||||
project:
|
||||
title: Perfect Postcode
|
||||
|
|
|
|||
|
|
@ -9,7 +9,6 @@ thumbnail:
|
|||
article:
|
||||
tags: ['games', 'systems']
|
||||
stack: ['C', 'SDL 1.2', 'Voxel terrain']
|
||||
outcome: A playable course project, and the moment programming clicked
|
||||
project:
|
||||
title: Platform Game
|
||||
---
|
||||
|
|
|
|||
|
|
@ -22,11 +22,9 @@ article:
|
|||
tags: ['systems', 'tools', 'web']
|
||||
stack: ['Rust', 'WebAssembly', 'Python', 'pyo3', 'wasm-bindgen']
|
||||
scale: One Rust core, three published packages (crates.io, npm, PyPI), driving an Obsidian sync plugin
|
||||
outcome: A small Rust library that auto-resolves prose conflicts, with WASM and Python bindings
|
||||
media:
|
||||
- type: image
|
||||
src: ./_assets/reconcile.png
|
||||
alt: The reconcile-text logo, a stylised merge arrow, with the tagline "Conflict-free 3-way text merging".
|
||||
caption: reconcile-text weaves conflicting edits together instead of asking a human to choose.
|
||||
project:
|
||||
title: reconcile-text
|
||||
|
|
|
|||
|
|
@ -26,11 +26,9 @@ article:
|
|||
'Dynamic shader generation',
|
||||
]
|
||||
scale: Browser library, mobile-targeted, real-time on consumer GPUs, both WebGL1 and WebGL2 paths
|
||||
outcome: An NPM package and BSc thesis; the renderer behind the decla.red multiplayer game
|
||||
media:
|
||||
- type: image
|
||||
src: ./_assets/sdf2d.jpg
|
||||
alt: Browser demo page showing SDF-2D scenes rendered with soft lighting effects.
|
||||
caption: SDF-2D shipped as a TypeScript library, not a one-shot demo. That distinction shaped most of the design.
|
||||
project:
|
||||
title: SDF-2D
|
||||
|
|
|
|||
|
|
@ -27,7 +27,6 @@ article:
|
|||
'reconcile-text',
|
||||
]
|
||||
scale: One Rust server, one TypeScript sync engine, three published consumers (Obsidian plugin, CLI, fuzz/deterministic test harnesses)
|
||||
outcome: A self-hosted Obsidian sync I trust enough to use as my primary vault transport
|
||||
project:
|
||||
title: VaultLink
|
||||
selected: true
|
||||
|
|
|
|||
|
|
@ -19,12 +19,14 @@ const personJsonLd = buildPersonJsonLd();
|
|||
|
||||
<Base jsonLd={personJsonLd}>
|
||||
<section class="home-intro">
|
||||
<p class="eyebrow">Engineering notes</p>
|
||||
<h1>
|
||||
<span class="home-intro-name">Andras Schmelczer</span> sharing cool projects and lessons learned
|
||||
<span class="home-intro-name">Andras Schmelczer</span> sharing cool projects and lessons
|
||||
learned
|
||||
</h1>
|
||||
<p>
|
||||
I enjoy learning by building exciting things that sometimes even turn out to be useful. This page is dedicated to the projects I actually finished. To learn more about me, check out the <a href="/about/">About page</a>.
|
||||
I enjoy learning by building exciting things that sometimes even turn out to be
|
||||
useful. This page is dedicated to the projects I actually finished. To learn more
|
||||
about me, check out the <a href="/about/">About page</a>.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue