2d 3d bot chat cpp csharp demo docker game go gui java javascript k8s lib minecraft mod php proxy video web

3D prints

I’ve been fascinated by magnets even since I was a kid, but it only turned into experimentation when I came across a video about Halbach arrays. I wondered whether I could come up with an unassisted levitation design, so I got myself an FLSUN Q5 delta 3D printer, a few dozens of magnetic cubes and learned how to create models in TinkerCad. Even though I did not succeed in my initial plan, I still ended up with some fun magnetic toys I can show my guests and a bunch of rock-paper-scissors dices for boardgames.

Botkit
Thumbnail of Botkit

Source code:
github.com/razzie/botkit

Year: 2023 - 2024

Tags: bot go lib

A Telegram bot library designed to handle commands and dialogs. Both of these support replying with sticker, photo, video, audio, album or file (even files not directly uploaded by the bot). Dialogs are composed of one or more queries, which can be single choice, multi choice or file queries. In theory you could run multiple instances to help balance the load, as long as they share the same Redis database.

Broadcaster
Thumbnail of Broadcaster

Source code:
github.com/razzie/broadcaster

Year: 2023 - 2024

Tags: go lib

Broadcast messages from one channel to many, with timeouts, server sent events and much more. Zero external dependencies. Designed for scenarios when it’s unpractical to connect to the same event source using many parallel connections.

Commander
Thumbnail of Commander

Source code:
github.com/razzie/commander

Year: 2023 - 2024

Tags: bot go lib

Execute Go functions from CLI or from a chatbot. Register any function as a command, then supply a context variable and a string slice as input arguments. If the original function has Context parameter(s), the context variable will be passed, otherwise the arguments from the string slice will be converted using Sscanf. The function’s return values are converted into a []any slice and if any of these values is an error, it will be extracted into a separate error return value.

Json2Go
Thumbnail of Json2Go

Try it here:
json2go.razzie.cloud

Source code:
github.com/razzie/json2go

Year: 2023 - 2024

Tags: docker go web

A webapp that helps you write Go client libraries for JSON web APIs. One of my experiments required building a database that included data from many third party JSON web APIs. The process of deserializing data into manually crafted Go structs quickly got exhausting, so I had to come up with a solution. Json2Go is by no means perfect (it only looks at the fields of the first item of a JSON array), but it gets the job done. You can input a JSON or a URL that returns a JSON. Field names are automatically converted into camel case, stripped of unsupported characters and correctly annotated with the original name. The resulting generated structure is formatted and uses syntax highlighting.

Personal website

  • 2015 version

    The site made use of user friendly URLs (thanks to Apache web server’s mod_rewrite) and loaded pages dynamically via jQuery’s AJAX API. A server side PHP script automatically parsed the static HTML pages for sections, which could then be accessed individually by the user. It wasn’t very CPU friendly, but made it easy for me to add new content to the page without using a database. Later my Twitter feed was integrated as a news feed, using OAuth and Twitter’s API.

  • 2018 version

    Implemented in C# using NancyFX and a brand new design. It used Github API to list my latest open-source interests and contributions. Project data was stored in XML.

  • 2019 version

    Everything completely rewritten in Go. Data was still stored in XML files initially, but later all the content (including resume) was moved to a single yaml file, which was periodically updated directly from the repository.

  • 2024 version

    Completely rewritten everythign again, using Go + PicoCSS + HTMX stack. It supports light and dark themes (based on user preferences reported by the browser) and features HTMX boosted page loads and loading spinner. Project data is stored in individual yaml files, everything else is in HTML templates. It does not rely on third party feeds anymore.

Raz-Stack
Thumbnail of Raz-Stack

Source code:
github.com/razzie/raz-stack

Year: 2022 - 2024

Tags: docker k8s web

A simple Kubernetes stack that hosted many of my own projects plus an email service (Dovecot + Postfix) and Nextcloud. The goal of this project was simplified deployment and cost saving, without horizontal autoscaling, though I picked K8s to be able to scale in the future. Many of the hosted webapps used a shared Redis (Kvrocks) instance with separate namespaces, thanks to k8s-db-operator. Deployment was done via Helmfile and Helm under the hood, but it was managed by a Makefile to make things even simpler.

RazCache
Thumbnail of RazCache

Source code:
github.com/razzie/razcache

Year: 2023 - 2024

Tags: go lib

A minimalist abstraction layer above Redis, Badger and a custom in-memory cache. As many of my self-hosted services rely on Redis for caching or data storage, I often had to fire up a local instance for manual testing. This process was too cumbersone for me, so I figured I could come up with a wrapper around Redis supporting the functionaly only I use the most, and during development it should mimic this functionality in-process. Supporting key expirations was a mandatory requirement, so the in-memory cache implements a “janitor” goroutine that cleans up these keys exactly when they expire, one at a time.

0x40 Hues
Thumbnail of 0x40 Hues

Try it here:
hues.razzie.cloud

Source code:
github.com/razzie/0x40hues

Year: 2023

Tags: docker go javascript web

I’ve come across Kepstin’s amazing 0x40hues project and caught myself listening to it a lot. After finding community resource packs to try, it quickly became troublesome to configure and run them. This motivated me to fork the project and after a great deal of refactoring, it now supports loading many respacks and on-the-fly configuration.

k8s-db-operator
Thumbnail of k8s-db-operator

Source code:
github.com/razzie/k8s-db-operator

Year: 2022 - 2023

Tags: docker go k8s

Kubernetes operator to provide access to shared PostgreSQL and Redis. It relies on the DatabaseClaim CRD, but unlike most other operators, this one only deploys Kubernetes secrets containing connection strings. Databases and Redis namespaces are not shared between dbclaims.

RazChess
Thumbnail of RazChess

Try it here:
chess.gorzsony.com
chess.razzie.cloud

Source code:
github.com/razzie/razchess

Year: 2022 - 2023

Tags: docker game go javascript web

I’ve had a sudden spark of interest in chess as of late 2022 and decided to build my own web chess app with focus on simplicity and ease of use. Also I didn’t want to waste time convincing friends to register to [insert your favorite chess platform here]. With RazChess you just visit the website, copy the link of the session and pass it to the person you want to play with. As weeks passed I kept adding new features like chess puzzles (mate in two steps), Fischer random (chess960) game, included chess openings encyclopedia, custom games and the ability to download your matches as GIFs. There is also Redis support to restore active games after a restart.

Beepboop
Thumbnail of Beepboop

Source code:
github.com/razzie/beepboop

Year: 2020 - 2022

Tags: go lib web

A lightweight webapp framework that powers Razbox. Most of the original code was taken from Razlink, but it has heavily evolved since. The core mechanic consists of registering pages (which are mostly a template + handler bundle) and returning view objects from inside the handlers. There are some utilities for session handling, access management and logging too, but this library is not suitable for production use.

Razvhost
Thumbnail of Razvhost

Source code:
github.com/razzie/razvhost

Year: 2020 - 2022

Tags: docker go proxy web

Virtual hosting/reverse proxy with TLS termination and automatic certificate management. It supports proxying, file/directory serving, redirection, accessing SFTP or S3 buckets, hosting PHP projects or even tailing log files. The configuration is loaded from a single file that contains simple hostname -> target rules, where even templates are supported (check readme in repo). Changes to the config files are detected and applied during runtime. It can even watch Docker containers with VIRTUAL_HOST and VIRTUAL_PORT environment variables and direct traffic to them (though it would’ve been better to check labels instead, but it didn’t cross my mind at the time).

Razbox
Thumbnail of Razbox

Source code:
github.com/razzie/razbox

Year: 2020 - 2021

Tags: docker go web

Super simple cloud file storage with almost zero configuration - powered by Beepboop Razbox stores all configuration and metadata in JSON files on the local filesystem and doesn’t rely on a relational database (though it has opt-in support for Redis caching). Each folder can contain a .razbox file (which can be generated by included tools) and the content is ready to be served. Read and write access to these folders can rely on separate passwords, so you can share read access only if you want. Subfolders are also supported and they inherit the read/write passwords, unless a .razbox file is generated for them. Uploaded files can have an arbitrary number of tags that allow filtering. Thumbnails are generated for media files (using ffmpeg for videos!), which are visible in gallery view. Some archive formats are also supported for read-only browsing. Individual files can be shared publicly, this making them readable without any password.

Riddle Solver
Thumbnail of Riddle Solver

Riddles:
The Jindosh Riddle

Download:
riddle-solver-gui.exe
riddle-solver-tui.exe

Source code:
github.com/razzie/riddle-solver

Component library:
github.com/razzie/razgio

Year: 2019 - 2021

Tags: go gui

Riddle Solver is a terminal app designed to solve Einstein’s 5 house riddle (also called zebra puzzles in general). I think I came across this kind of riddle playing Dishonored 2 first, as a third option to get inside a locked place. It was written by a fictional genius game character named Kirin Jindosh and it’s clearly based on Einstein’s five house riddle. It took me (sadly) at least 30 minutes to solve on paper, but it earned me an achievement. Fast forward 3 years, I had the random idea of implementing this riddle solver, which seemed like a simple way to sharpen my Golang skills. I was wrong. Coming up with the UI design and the solver algorithm caused me some sleepness nights, but I’m really proud of the result.

Geoip server
Thumbnail of Geoip server

Try it here:
geoip.razzie.cloud

Source code:
github.com/razzie/geoip-server

Year: 2020

Tags: docker go web

A web service that serves IP address geolocations in JSON format. Instead of relying on a local database it collects data from a (configurable) series of 3rd party providers, converting the results to a commom format. It supports provider fallbacks and caching.

Mediaserver
Thumbnail of Mediaserver

Source code:
github.com/razzie/mediaserver

Year: 2020

Tags: docker go web

A web service that fetches thumbnails with title from URLs. Originally planned to use it in a chat service to prevent the tracking of users by letting them download images directly.

Razproxy
Thumbnail of Razproxy

Source code:
github.com/razzie/razproxy

Year: 2020

Tags: go proxy web

SOCKS5 tunneled through TLS connection. The project consists of a custom server and client, which enable encrypted traffic between them. The client opens a SOCKS5 port locally which can be used by multiple applications (like web browsers) running in parallel.

RazTools
Thumbnail of RazTools

Source code:
github.com/razzie/raztools

Year: 2018-2020

Tags: csharp lib

A collection of reusable helper classes:

  • ArchiveReader and ArchiveWriter, based on Doboz.NET
  • 2 alternative versions of CommandParser
  • FileSystem class that seamlessly integrates local OS filesystem + ArchiveReader
  • ObjectDeserializer to construct objects from a custom text format
  • PluginManager & RemoteLoader simplify interaction with plugins using remoting
  • Timeout class with Expired event
  • XmlReader static class which returns dynamic objects

S3proxy
Thumbnail of S3proxy

Source code:
github.com/razzie/s3proxy

Year: 2020

Tags: docker go

A super simple S3 proxy server that obfuscates file content before transmitting the request to the target. Obfuscation is done via a lookup table which is generated from a user provided key. Only signature v2 authentication is supported.

GTA Online videos
Thumbnail of GTA Online videos

YouTube channel:
www.youtube.com/c/razzquez

Year: 2015 - 2019

Tags: game video

I have way more playtime in Grand Theft Auto V (or GTA Online to be specific) than I would like to admit and most of that I’ve spent with friends I’ve met in the game. It became our little tradition to record funny, exciting or any memorable moments and later create videos of it. At this point there is quite a collection of those videos and I’ve uploaded the ones I made to my youtube channel. Most of the content is only meaningful to us, but I still hope viewers will find them entertaining.

PocceMod

Created the first GTA5 (FiveM) game mod that allowed players to have fun with GTA’s unused and undocumented rope API in a multiplayer environment. After sharing it with the community early on to receive feedback, the mod went through 2 months of intensive development, adding many of the requested features and changes. The project quickly gained popularity due to its uniqueness and led to community members requesting my services.

RazTracer
Thumbnail of RazTracer

Source code:
github.com/razzie/raztracer

Year: 2019

Tags: go

Command line debug information explorer and function call tracer for Linux, based on the Ptrace API. I was in the process of implementing a GUI for the project (borrowing elements from Riddle Solver), but lost interest in continuing the project.

LibRazzie
Thumbnail of LibRazzie

Source code:
github.com/razzie/librazzie

Year: 2016 - 2018

Tags: cpp lib

A header-only multi-purpose library designed to help me get started with my projects. It includes helpers for logging, events, input, memory, thread and network+serialization and has some additional stuff like: a bitset class with iterators for true and false position, stream manipulators and parsers and an easy to use random number generator. Examples are provided for each of them.

RazTalk

A simple lobby/channel based registration-free webchat. Implemented using NancyFX + Razor + SignalR stack and relies on RazTools to support dynamic loading of bot libraries during runtime. The repo contains (outdated) bot implementations for CleverBot, Giphy, Imgur and Reddit. There is also a standalone desktop client, which is just a wrapper around the web interface.

RazzieCraft Vanilla

RazzieCraft Vanilla is Minecraft version 1.12.2 on steroids! This pack contains a ton of strictly curated mods that enhance the visuals and gameplay of vanilla Minecraft, but without breaking its charm. There are a lot of recipes for uncraftable existing items (like chain armor, slime ball, spawn eggs, etc) and a very few brand new stuff.

GGlib & GGlib2
Thumbnail of GGlib & GGlib2

Source code:
github.com/razzie/gglib
github.com/razzie/gglib2

Year: 2013 - 2017

Tags: cpp lib

GGlib and GGlib2 were libraries I used to develop between 2013 and 2017. They served as a sandbox to help me to learn about the new features of the C++11 standard. I also found a great use of them while working on other side projects. Due to some early design choices (including too heavy use of virtual function calls) I finally decided to send them into retirement and started working on the successor: LibRazzie.

Potato Game
Thumbnail of Potato Game

Download:
demos.zip

Videos:
potato.mp4
development.mp4

Source code:
github.com/razzie/PotatoGame

Year: 2017

Tags: 3d cpp demo game video

PotatoGame was meant to be a game about little potatoes with customizable AI gaining world domination, though my real motivation was to make art. I wanted to try something out of the box and build a tech demo of a completely procedurally generated abstract looking 3D game world. During the development I’ve been a part of a coach guided mastermind program, where participants could follow the progress of graphical designs and world map and level generator algorithms. At the end of the mastermind program I had the chance to publicly talk about the project in front of an audience, where one person told me I inspired him to learn programming. This has been one of my proudest moments in life.

RazzGravitas
Thumbnail of RazzGravitas

Download:
razzgravitas.exe

Source code:
github.com/razzie/razzgravitas

Year: 2017

Tags: 2d cpp game

RazzGravitas is a simple multiplayer game about gravity. At the time of making it I just gave up on a somewhat larger project and I needed to give myself a smaller task that I can prove to be able to finish. The sole objective was to experiment with something simple with no regrets about design decisions and no promises about the outcome. After about a month of development it ended up having multiplayer support with competitive game rules I’m satisfied with. I consider the game finished.

Floating Islands

Floating Islands is yet another example of my experiments with procedurally generated terrains. I developed an algorithm that takes island positions and island connections as input parameters and generates a 3D grid world using a Perlin noise internally. I focused on the cartoonish design with edge outlining and also had an A* pathfinder algorithm set up for the little red cube.

Ground Tool
Thumbnail of Ground Tool

Source code and binary:
github.com/razzie/hobby-projects/2016/groundtool

Year: 2016

Tags: 3d cpp demo

The idea behind the demo was a game with floating islands. Though this game never made it to the reality, Ground Tool was born as a result of experimenting with the rendering of these islands. The user can draw a polygon border to the island and when all points are connected, the program generates an island which can be inspected by zooming and moving the camera around.

Hexagon
Thumbnail of Hexagon

Source code and binary:
github.com/razzie/hobby-projects/2015/hexagon

Year: 2015

Tags: 3d cpp demo

I wanted to try rendering hexagon blocks (hexagonal prisms to be correct) instead of cubes. The underlying datastructure is a 3D grid procedurally generated by Perlin noise. This demo does not use textures, but has a custom GLSL shader that draws grass or rock details based on the normal vectors.

Prepi
Thumbnail of Prepi

Download:
prepi.zip

Source code:
github.com/razzie/prepi

Year: 2014

Tags: 2d cpp game

Prepi is an indie rage game project I was working on together with a friend. It has been a serious project requiring both of our full-time commitment. Having zero clue about sales and with the mindset of “great products sell themselves” we tried to finance the project via an Indiegogo campaign, which failed (though the game received Steam GreenLight later). Due to the failure of the campaign and smaller disagreements regarding the game design we decided not to continue the development.

Minecraft clone

Minecraft clone is a graphics project I worked on during the final year of the university. Contrary to its name it is not a real clone, it features no game elements aside from placing and removing blocks. My primary motivation was the recreation of a Minecraft-like rendering in C++, focusing on optimizations like omitting hidden block sides and dynamic loading of chunks/zones.

Flyff fansite
Thumbnail of Flyff fansite

Source code:
github.com/razzie/hobby-projects/2007/flyff

Year: 2007 - 2010

Tags: php web

Flyff.extra.hu was a hungarian fan site of Flyff (Fly For Fun) online game. During the 3-4 years of its existence I developed more and more new features to make it a fully functional web portal. It was very interesting to see it slowly getting attention. Members started generating content in the forms of forum entries, polls, screenshots and news for the home page. The site even had a few moderators and admins. In 2010 extra.hu decided to close its free hosting service and the site went offline. I could have moved it to a different(even paid) hosting service, but most members and I have already lost interest in the game.

Labyrinth

Labyrinth is a small university project I developed together with a friend. It features random labyrinth generation with size, multi-level options. The user could select the wall and floor texturess or the optional bush wall (instead of the rock one). I have done the rendering part (using Irrlicht 3D engine) while my friend worked on the random generator algorithm and the bush modeling.

Logic Circuit Simulator

Logic Circuit Simulator was a university project I had to finish in a semester. It offers a variety of logic gates and a lot of visual customization options. Some special elements are also available, like seven-segment display, matrix display, JK flip-flop, adjustable timer and module. A selected part of a logic circuit can be converted to a module, where the circuit’s input elements (buttons, switches) become the input pins and output elements (LEDs) become the output pins of the module. Modules also support recursion.

Process Manager
Thumbnail of Process Manager

Download:
Process Manager.exe

Year: 2008

Tags: gui

Process Manager is a replacement application for the built-in Windows Task Manager with a lot of additional features. It keeps running in the background after closing the main window and can be brought back from the tray icon or by pressing Ctrl+F12.

Razzie Messenger

Razzie Messenger is a messenger client and server I started working on during a one-week vacation at lake Balaton (Hungary). It uses a very simple plain text based protocol for network communication, look at the picture to see it in details. (Since then I prefer binary protocols due to the ineffeciency of string parsing and large packet sizes in case of text protocols.) The user can chose a nickname and pick colors for the name and the text messages. There is no registration and password authentication, however the server rejects the connection if a nickname is already taken in the current session. It is possible to send a file to an other user: in this case the server opens a random port which receives and forwards the file. Both users have to connect to this port, but it is done automatically. This solution was necessary due to the limitations of the text based protocol.

Server - client application
Thumbnail of Server - client application

Download:
server-client.exe

Year: 2008

Tags: gui

Server - client application is a small tool which helps creating and debugging text based network protocols. I developed it while working on Razzie Messenger and it had a great use. On the server tab the user can select one of the connected clients as a message target or just close the connection to them.

Windows Manager
Thumbnail of Windows Manager

Download:
wmanager.exe

Year: 2008

Tags: gui

Windows Manager is a reworked and extended edition of Process Manager. Besides the improved visual appearance it introduces new window tweaking options which you can see in the picture. One can for example change a sticky (always on top) window to act as a normal one.

RTS game

This was my very first coded game (after finishing some games in an early version of GameMaker). I’ve created all the graphics in Microsoft Paint, so the game looks terrible. The goal is to destroy the enemy’s base. The player needs to collect resources (money and energy) to deploy buildings and produce units (soldiers, tanks, citizens, etc). Energy can be harvested by building windmills, while money can be gathered by mining. The enemy’s AI is very basic: its units are moving randomly and once they notice a player building or unit, they just attack it. They also deploy new buildings randomly once they have enough resources. Due to the lack of timing, the more units appeared in the game, the slower they became.

PowerMan

PowerMan is one of my earliest games, made in Game Maker. It had been sitting on an unreadable floppy disk for 21 years, as it was written by a drive with misaligned head. I managed to recover it using GreaseWeazle and KryoFlux DTC.

SpyLand