About me⌗
Hello! I’m Kamila Szewczyk (kspalaiologos). I am 20 years old. I’m an expert programmer and aspiring mathematician, primarily interested in compiler construction, data compression, esoteric languages, statistics and numerical algorithms. I further consider myself knowledgeable with regards to low level development and performance optimisation. Currently I am a full-time student based in Germany. Please check my “About Me” page for contact infromation.
Technologies and fields⌗
- Expert: C, C++, APL, Lisp, x86/8051/6502/Z80 assembly, Perl, Java/JVM, LaTeX
- Comfortable user: Lua, TypeScript, ActionScript, Rust, Haskell, OCaml
- Learner: Python, Haxe, Prolog, Erlang, Elixir, MIPS assembly, Mathematica
- Esoteric languages: asm2bf, Brainfuck, Malbolge, Seed, Befunge 93/98…
- Fields:
- Data compression - Designed and implemented bzip3; implemented and improved upon various algorithms (fast minimum-redundancy codes, McIlroy-Tamayo LZP; Hash-chain, suffix array LZ77, LZW, LZMW, LZAP, PPM, various CM experiments, etc.), currently working on an introductory book to data compression.
- Artificial intelligence - Implemented jcram (a neural-network powered, PPM-like JavaScript compressor trained on the corpus of ECMAScript CGCC submissions); researched selected topics in Chess engines and engine-driven PGN compression.
- Reverse engineering - Implemented intellectual property protection solutions, fixed abandonware bugs, implemented PE/ELF packers and dumpers; currently hosting a reverse engineering contest. Analysed malware samples present in the wild.
- Compiler/interpreter construction - Designed and implemented various programming languages; more specifically, register allocators, advanced (generational, compacting) garbage collectors, runtime libraries, push lexers/push parsers, rudimentary optimising compilers and fast parsers for data formats (e.g. the APL array notation). Implemented efficient esolang-targetting toolchains (notably asm2bf/asm3bf/asm2ws).
- Numerical analysis - Implemented numerical libraries for programming languages, investigated arbitrary precision computation for some of my projects, designed numerical approximation algorithms.
- Theoretical computer science - Implemented functional programming languages, gave talks on functional programming; researched selected topics in automata theory, formal languages and computability theory.
- Code golf - Participated in various code golf contests, implemented a few code golf languages, wrote a few code golf challenges. Primarily golfing using esoteric languages and C.
- Mathematics - Primarily interested in number theory, probability theory, statistics, information theory, numerical analysis and linear algebra.
- Other areas in which I hold some degree of expertise: database design, network programming, image processing, data mining, graphics programming, high-performance computing.
- Latent interests:
- Computer algebra - Despite being interested in various computer algebra concepts (e.g. Gruntz algorithm, Risch algorithm/RUBI, etc), I have not yet implemented a semblance of a computer algebra system from scratch.
- Cryptography - I generally don’t deploy cryptographic code that I wrote, but I have implemented a few cryptographic primitives and happen to be interested in the theoretical aspects of cryptography, particularly focused on formalisation of the field, cryptographically secure pseudorandom number generators and hash functions.
- Operating systems - I have implemented a few toy kernels and I find the theory behind operating systems fascinating, but I have not had a chance yet to design one from smaller primitives.
- Formal methods - I was briefly interested in Lean and contributed some proofs to mathlib4, but I did not find it particularly enjoyable (at least within the scope of the current technology).
- Retrocomputing - I ported some of my programs to MS-DOS and briefly used old BASICs and assembly languages. I do not own any retrocomputing hardware, with an exception of a few old calculators.
- Competitive programming - I have participated in competitive programming contests to fill my time, but I do not find it particularly enjoyable or desirable to pursue.
Talks, lectures and papers⌗
- Dyalog'23 in Helsingør - Talk: An Implementation of the APL Array Notation
- APL Germany Herbsttagung 2023 in Berlin Adlershof - Seemingly Impossible APL Programs
- APL Germany Journal 2023 - Seemingly Impossible APL Programs
- ArrayCast, Ep. 74, 2024 - KamilaLisp and Kamila Szewczyk
- Iverson College 2024 - Data Compression in Depth
- 18 Sesja Linuksowa in Wrocław - Statistical Data Compression
- Maja - A numerics-oriented Mathematical library for Java; DOI: 10.5281/zenodo.7777404.
Projects⌗
Data Compression:
- bzip3 (2022-2023), a better and stronger spiritual successor to bzip2. Features higher compression ratios and better performance thanks to a context modelling and adaptive arithmetic coding-based entropy coder, fast Burrows-Wheeler transform code making use of suffix arrays and a RLE with Lempel Ziv+Prediction pass. Packaged for every major linux distribution (Alpine, Arch, Debian, Devuan, Fedora, Gentoo, Kali, NixOS, Manjaro, Void and others). Usually outperforms RAR, LZMA and Zstandard on text data.
- modern-rzip (2022-2023), a modernised fork of the rzip. Includes a Reed-Solomon implementation and a custom archiver with support of locality-sensitive hashing for i-node ordering. Can compete with dwarfs, squashfs, lrzip, etc…
- mri (2022), minecraft region interchange format. A format for storing minecraft worlds in a more compact and efficient way.
- qbdiff (2023), building and applying patches to binary files.
Programming Languages:
- asm2bf (2016-2021), a very powerful custom assembler targetting over 200 languages.
- mtcracker (2019), the most efficient (seed size to generation time ratio) mersenne twister cracker (recovering the initial seed) made for use with the Seed esolang. Includes source code in x86 assembly and a description of a better generation algorithm. My first Wikipedia mention which I had earned at the age of 14.
- malbolge-lisp (2020-2021), a lisp interpreter in malbolge unshackled, considered the most advanced program written in malbolge to date. Alongside a malbolge “hello world” program I made, mentioned on the english wikipedia. Supports point-free programming, lexical scoping, mu-recursive functions, arbitrary precision arithmetic, functional programming and lazy evaluation. My second large project I had made at the age of 16.
- KamilaLisp (2021-2023), a Lisp I had dreamed up. Concise, flexible and functional. Loosely inspired by malbolge-lisp, APL, Haskell, and Scheme.
- blc-mb (2022), a Binary Lambda Calculus evaluation engine written in Malbolge. Supports garbage collection, monadic I/O, tail call optimisation and it’s compatible with existing BLC8 programs.
- asm2ws (2021), a just-in-time compiler, assembler, optimiser, interpreter and disassembler for the Whitespace virtual machine.
Misc:
- tiny-6502 & tiny-z80 (2021), small but fully compliant 6502 and z80 emulators.
- Maja (2023), a slick numerics-oriented Mathematical library for Java. Maja implements around 300 different special functions for use in Java programs.
- elfdude (2024), an ELF32 executable packer.
Single day SDL games. Github: sdlgames (2022-2023):
- Spider Solitaire (Windows XP, 22-12-2022). Play Online.
- Minesweeper (Windows XP, 11-06-2023). Play Online.
- Reversi (Windows XP, 16-06-2023). Play Online.
All online games are playable in your browser. Only mouse and keyboard input is supported.
Commercial experience⌗
Available upon inquiry, send me an e-mail.
Contributions⌗
I have helped in development of the following projects by reporting issues, writing documentation or contributing fixes:
- discord bots (2021-2023) - volunteer work as a verification helper and a site helper.
- ghidra, a reverse-engineering environment.
- notepad++, a Windows code editor.
- gcc, the GNU Compiler Collection.
- re/flex, a very fast lexer generator for C++.
- dwarfs, a fast high compression read-only file system.
- ppmd_sh, a statistical compressor based on Dmitry Shkarin’s ppmd vJr1
- zpaq, a journaling archiver.
- LLVM Project, a compiler infrastructure.