Skip to content

Latest commit

 

History

History
298 lines (150 loc) · 22.1 KB

my-repositories.md

File metadata and controls

298 lines (150 loc) · 22.1 KB

As any other developer, I have some small utilities and libraries that I developed, and a lot more unfinished projects and random repositories. Here's the full list with my comments — why I started them, why I abandoned them, and what I learned from them.

Python, LLMs

I'm actually kind of proud of this one! It's a small but very useful utility to generate a standup message for your standup slack chat about your progress over the previous day. It parses all the latest commits in the repository, and generates a message with all the progress, grouped by branch (assuming that they map to tasks). Just don't forget to specify your OPENAI_API_KEY before you run it.

I haven't worked with git API for a long time, and it was fun trying to optimise GPT prompt to do what I wanted it to do.

(This project was mostly written by GPT-4 with my prompting and corrections, took about 2 hours to write and 2 hours to debug. I'm not sure if I should count it as my project, but it's definitely my idea.)

Python, Poetry

The project I generated my previous project with! Of course, there's probably a lot of Python project generators out there with all kinds of options and features, but I wanted to make my own, and I wanted it to be as simple as possible. It just copies over a template directory, and replaces all the placeholders in the files with the project name and other parameters.

After a big break with Python, figuring out modern package management and project structure was a bit of a challenge, but I'm glad I did it. And Poetry feels almost as good as cargo or npm!

(Also mostly written by GPT-4).

Python, ChatGPT, Advent of Code

I decided to run a scientific experiment and solve Advent of Code circa 2022 with ChatGPT which was just released a few days prior. Unfortunately, the experiment ended in a complete failure — we never got past day 2. When ChatGPT encountered an error, he would suggest a fix which would trigger another error, and to fix that, he would circle back to the first solution. I could have guided it through, but I decided to keep it as pure as possible, and it didn't work out.

I learned a lot about ChatGPT, and I'm still a big fan of it. I also learned that it's not a good idea to use it for anything that requires a lot of backtracking. But as I'm writing this in May 2023, I'm 95% sure that GPT-4 would easily solve the whole thing.

Typescript, React, Vercel

A simple web app to solve worlde puzzle, deployed here. It was nice to try out vercel and complete a small project. I've used a few patterns that I like to use in React development there:

rs-lox (2022)

Rust, Virtual machines, Parsing, Programming languages

After implementing the first part of the wonderful book Crafting Interpreters in Typescript, I decided to try and follow the second part of the book, originally intended to be implemented in C, in Rust instead.

Unfortunately, I didn't finish this project. Managing memory with Rust is hard, and when you have to do low-level stuff with unsafe, it gets even more tedious. I stopped working on it when I felt that I'm spending more time fighting borrow checker than learning about programming languages. Still glad I did it — I learned a lot, and it was nice getting back to basic CS and implementing things like this basic hashtable.

thrw (2021)

Typescript

A small ergonomic helper with Typescript. Out of the box, the language has a throw statement (throw 'something'), but doesn't have throw expression which you would be able to use, for example, in a conditional. There's a proposal, but until it's implemented, you can use this library. The whole implementation is just (three lines of code)[https://github.com/tc39/proposal-throw-expressions], but despite the whole 'leftpad' situation, I still think it's better to import a library than to copy-paste code.

Typescript, Postgresql, Redis

Originally this project was a test assignment for an interview, but I liked working on it and developed into a full-fledged project. It was nice to do something simple, but with all the right practices: linting, migrations, detailed documentation and even optional redis-based caching and commit hooks.

Frontend is very simple and can even run without JS enabled, so I decided to go with server-rendered templates with pug template engine and bulma css framework instead of a full-blown SPA. (TBH, I didn't particularly like developer experience and would rather go with server-rendered React, but it was a nice experiment). I've also developed extensive test coverage for the API, and using raw SQL (with types generated with pgtyped) instead of an ORM was the right choice for such a small project.

I have also tried to implement user management, but learned that using passport for node is painful as hell. I should have probably just implemented this myself.

ts-lox (2020)

Typescript, Interpreters, Programming languages

The first part of Crafting Interpreters (book that teaches you how to build a programming language from scratch). I've implemented it in Typescript instead of Java in order to learn the language better and prevent myself from being able to blindly retype the code from the book. I've learned a lot of new things, and I think it's been the first time I've actually generated code. I'm also quite proud of extensive test coverage — it was the first project I've used copilot on, and turns out, it's great at generating texts.

pg-tx (2020)

Typescript, Postgres, Transactions, Node

Wrapper for transactions on top of node-postgres package. I developed it for my job after I found out that the top answer on Stack Overflow about implementing transactions on top of this library had a fatal flaw. It's a rare occasion where I can publicly show my work on debugging a tricky bug in production, as it's something usually strictly under NDA. I should have probably used JS proxy instead of just re-implementing the whole class myself, but the solution works, and it's the most important thing.

Also, how do you get you promote a package? I truly believe that it's very useful and could prevent a lot of bugs for a lot of people, but it only gets a few hundred downloads on npm per week.

Typescript, Procedural generation, Randomness

A small tool for a game I was writing at the time — given a list of names (for example, for given fantasy world), generate a new one. I learned that even very simple algorithms can do a pretty good job for procedural generation, and on the main thing is for them to be simple to use — and what can be simple than just coming up with a list of names and putting them in a text file?

Node, Postgresql, Telegram, SQL

I spend a lot of time on HN, and I was annoyed that there's no mechanism of notifications — you have to manually go to "threads" and check if you got any replies. So I build a bot that would keep track of the comments, find new ones, and send you messages. It's a bit hacky and after I've used it for a couple months, Heroku shut down the server and I never brought it back again — turns out, manually checking your past conversations is it's own dopamine hook.

Building graph-like data structures in a relational database was fun, although I'm not 100% happy with the result. I also was a fan of pgtyped library at the time, so most of my work with the database was in raw SQL queries like this one.

Typescript, Algorithms, Programming puzzles

Abandoned at day 6, so nothing to be proud of.

Postgresql, Transactions, Node

A small project I used to test a deadlock bug in production. I've learned a lot about Postgresql transactions and isolation levels, and also about how to debug a bug in production. G

Typescript, Node

My standard template for Node projects. I haven't updated it in a while, though, and would probably do a few things differently now. For one, I'd rather to use Vitest than Jest.

Go, TCP, Docker, Heroku

This was less about code and more about deployent — I wanted to learn more about deployments, Docker and godeps, and to document the whole process. I haven't really finished this one, but it was a good learning experience.

Google cloud functions, Typescript, Serverless

I wanted to use GCF for a project I was CTO at, but couldn't find a tutorial or a template for it, so I made my own. I actually ended up opting out for a traditional Node/Postgresql server instead, but this project got whooping 29 stars on Github, thanks to the fact that it was the only template for GCF in Typescript at the time and me sharing it on StackOverflow.

Learned a bit about serverless and some google cloud functions quirks, but mostly about setting up projects with Typescript.

Haskell, Functional programming

My homework as I've been completing the cis194 course of Haskell. I've always loved functional programming, but Haskell has been very intimidating with all it's advanced math terminilogy, so this course has been a big help. I've learned a lot about Haskell, including not only the language itself, but setting setting up projects with Cabal.

Rust, Telegram, Game development, ORM

I was a fan of RIIR and decided to rewrite a game I haven't even completed yet. I've enjoyed learning Diesel ORM, but compared to implementation in Typescript, writing business logic in Rust turned out to be a bit of a pain.

Typescript, Node, Telegram, Game development

A game about exploration of infinite space, playable as a Telegram bot. I'm particularly proud of procedural generation of star systems and the fact that there were, theoretically, billions and trillions of stars in the game, which would materialize only when you actually visit them.

etoya (2018)

Python, Django

A blog developed for a journalist friend. I've worked with Django before, but here I really had an opportunity to create a greenfield project, and I quite liked it. It's a shame it's based on Python though.

anon-chat (2017)

Javascript, Node, Redis, Telegram

A simple Chatroulette clone for Telegram — you're paired with a anonymous user and your messages get forwarded to one another. I've used pure JS on this one, and since it was a very simple, straightforward project, I decided to experiment with using Redis as the main source of truth instead of just a cache. It worked out pretty well, and I've learned a bit about Redis in the process. I've also experimented with prototype-based and class-based OOP in Javascript, learned a bit about the language and once again came to the conclusiong that I prefer functional programming.

C#, Unity, Game development

A tower defense game.

Go, Telegram

A small toy project that I developed to learn Telegram API. I've worked with Go before, so it was not something very new to me.

Unity, Game development, UI

A utility to display a very, very large texts in Unity UI that breaks them down to chunks that don't kill the renderer. There are actually a few approaches imlpemented in this repo for the sake of benchmarking.

Mix (2016)

Go, Virtual machines

An emulator of Mix, a computer designed by Donald Knuth for his book "The Art of Computer Programming". I have already implemented it as a school project in 2004 in Delphi, and it was interesting to go back to it. Only implemented a few basic opcodes.

Python

A wrapper around Bugsnag's API to get reports over bugs in the last releases.

C, Threads, Memory management

Small experiment with C about splitting work into separate threads working with the same chunk of memory and making all application's memory static. As far as game mechanics go, it's very minimal — player can move around a level and damage enemies.

brainfuck (2015)

C, Brainfuck, Interpreters, Programming languages, bash

Interpreter of Brainfuck that fits into 157 lines of code. I refreshed my knowledge on interpreters and virtual machines, and writing data-based tests was a pretty neat idea that I've occasionally used later. However, programming in bash certainly wasn't an experiment that I want to repeat — I'd rather use tcl next time I want to go oldschool.

.vimrc (2015)

Vim

I haven't used Vim in quite a while now. I still think that mode-based text editors are a genious idea, and use Vim emulation plugin in any text editor I use, but I don't want to constantly maintain my text editor.

Unity, C#, Game development

Test assignment back from when I was primarily a Unity developer. I've learned that using ScriptableObject is one of the best ways to manage game designer editable data not related to any particular scene or game object.

Unity, C#, Game development

Another test assignemnt, an action game about shooting asteroids. One trick I've used there is to just change texture offsets on the floor model to emulate player's movement instead of actually moving all objects in 3d space. One thing I certainly wouldn't do now is to use singletons for all game systems — although I have to admit, at small scale it's a very convenient way to manage dependencies.

pong (2014)

Unity, C#, Game development

A small pong game in my Unity small project showcase.

Bower, Front-end, Angular

Just a single form to interactively calculate real estate tax. I don't particularly like Angular, to be honest.

Rust, Iron

As I was learning Rust, I decided to develop a simple file server based on iron framework that would serve files from current folder.

judgement (client and server) (2014)

iOS, Objective-C, Node, Javascript, Postgresql

I wanted to develop a social network and marketplace around predictions. Didn't get very far, but I've learned a lot about iOS development and Objective-C.

Commando (2014)

Unity, C#, Game development

A platformer game.

Java, Algorithms

Decided to take a refresher course on algorithms and data structures. I've also learned that I don't particularly like Java.

Unity, C#, Game development

A 2d game using orbital mechanics, developed with a friend. Developed the core mechanics, but couldn't get it to actually be fun.

Unity, C#, Game development

A top-down shooter indie game, also unfinished.

Unity, C#, Game development

A platformer game developed for a client.

Wargame (2013)

Unity, C#, Game development

Prototype of a tactical RPG game.

FileHash (2012)

Objective-C

A toy project to learn Objective-C — calculates hash sums of files.

Vision (2012)

Unity, C#, Game development

Vision system for other games. Once I learned how bad package management works for Unity, I stopped attempts to develop small reusable libraries for it.

Unity, C#, Game development, Networking, Multip-player

A real-time strategy game prototype. It used lock-step networking model, and it was nice to learn more about networking.

C#, Genetic programming

I was interested in genetic programming, and decided to try it out on a simple problem of finding a path for ants to food. I've learned that genetic programming is a very slow process, and that it's very hard to get it to work.