Petr Maj
photo

I build. Compilers, virtual machines, tools for other programmers and toys for kids, furniture. I also teach - programming and compilers mostly. I am a parent of two, and a cat person.

I work for Azul on the fastest Java virtual machine - Zing, and I teach at FIT CTU.

Projects

  • RCKid WiP

    RCKid is a handheld gaming device for young kids. Build for my two betatesters to spare them the horrors of youtube:) On the surface this is just another DIY little gaming handheld, but under the hood it is much more - the first truly personal device for a child that emphasizes creation over consumption, invites learning and tinkering and is designed to grow with the child. It went through many iterations and has a grand vision.

  • MP3 Player for Kids

    MP3 player with integrated radio built for small kids in a pretty wooden case. I got inspired for this when I watched by young daughter pretending to listen to music and control it via the buttons you often find on arm chairs. This shaped the device's control interface and its formfactor. Internally it uses ESP8266 for the MP3 playback a WiFi access and ATTiny3216 for the io/power management.

  • Terminalpp

    A really fast and no-nonsense terminal emulator with real cross platform support and some nifty features. The project started because I could not find a decent terminal emulator for Windows, despite the emerging WSL (back then, this predates the Windows Terminal that exists since and which is not bad at all. That said, I am still using my terminalpp to this day:). The terminal bypasses the conpty on Windows giving it absolute compatibility with escape sequences, uses native renderers on Windows and Linux (QT for apple) and comes with ropen, a tool that can use existig terminal connection to send files from remote servers to be viewed locally - super useful for those non-terminal friendly outputs like pdfs, images, etc.

  • MagicWeb old:)

    My first big project back when I was studying high school in the early noughties, I thought having a web page is really cool. Back then I was working with Delphi, which was amazing RAD IDE, and I lacked the "advanced" editing & design features it had in contemporary web editors. So I created my own - with object inspectors, command palettes and syntax checking for the holly triad of HTML/CSS, JavaScript and PHP. Coincidentally, the syntax checker was the reason I ended up doing programming languages & compilers after I went to the university. The experience writing it (without any knowledge about lexing or parsing at the time) was so painful that I considered the whole field dead and wanted to specialize in CPU design instead. But the Compilers 101 course at the uni changed my mind completely when I saw the Chomsky hierarchy for the first time and realized how much pain I could have saved myself with proper knowledge:)

The above are just the largest projects I did, I have been part of many others - from designing and implementing educational games for kids with Down's Syndrome to weather forecasting for the Czech Academy of Sciences and to a plethora of smaller, mostly embedded, projects. For somewhat fuller list of my projects check my github page

Teaching

  • Code Generation (NI-GEN) 2017 - Now

    Graduate level compiler course focusing on backend implementation and optimizations (register allocation, instruction selection). I believe that in systems programming (whose curriculium it is part of) more so than anywhere else the devil is in the details. Those details cannot be taught during a lecture on slides, so the course is very coursework heavy. But not all details are created equal - the entaglement between instruction selection and register allocation is real and important, the minute details about x86 instruction binary encoding and executable loading is not. That is why with the help of some of my very talented students I have created Tiny86, a virtual machine emulating the interesting (from compiler's perspective) parts of CPU architectures (and not just x86, but also RISC & friends) without drowning students in the "implementation details".

  • Programming Paradigms (BI-PPA) 2016 - now

    Undergraduate introduction to non-imperative programming paradigms. Interestingly, programming languages curriculum at CTU starts with C/C++. This is the first course the students have that exposes them to different ways to think about algorithms. It covers a lot of ground, lambda calculus (for which we have developed an "IDE" and present as a "programming language" - see the SPLASH-E paper), functional programming (Racket in the past, now transitioning to Haskell) and Prolog.

  • Build a JIT with LLVM 2017

    Introduction to building a Just In Time compiler using the LLVM, part of PLISS. Co-taught with Jan Vitek and Oli Fluckiger. Source code available at github.

  • LLVM Compiler System CTU 2016

    Introduction to the LLVM compiler and its use as an optimizing JIT for dynamic languages (MI-LCF).

  • Embedded Programming 2015

    I believe that embedded programming is particularly great introduction to STEM due to its tangibility. Unfortunately, it also comes with increased cost of entry. While teaching at the grammar school, I have successfully applied for a Google CodeWeek funding that provided ample hardware for the kids to tinker with and I taught the first year of the embedded programming voluntary course at the school.

  • Advanced Programming in C++ 2013-2015

    Voluntary high school course for older students (14y+) that taught them basics of C++ (manual memory management as a feature, OOP and programming design) as well as introduction to interesting, but more advanced topics from computer science - grammars (as I wanted to avoid students falling into the same trap I did with not knowing lexer from a parser:), evolutionary programming, basics of computer graphics, interpreters, etc.

  • Informatics 2007-2009

    I have developed a brand new course for compulsory informatics at a high school switching from Pascal to Python. I have taught the pilot two classes and onboarded the other techers on the new course design. The change was extremely well received and has been used for many years to come.

I am generally available at CTU on Fridays, but please arrange consultations for current courses by email. Online via Teams or Zoom is also possible with a more relaxed scheduling. If you are coming from outside, please note that some of the course links might not work as they are internal to the CTU.

Research

I have also helped organize various conferences in different roles, mostly as a student voluteer chair.

Work Experience

  • Senior Compiler Engineer at Azul 2023 - Now

    Part of the Azul Prime Java VM group, working on the fastest Java virtual machine available and its final tier LLVM-based optimizer and code generator. While at Azul, I was responsible for improving the VM’s warmup times (devising metrics and improving the code), dealt with key customers with piloting the VM and I lead the performance analysis team (4 people).

  • Assistant Profesor FIT CTU 2023 - Now

    Focused on teaching, developed the NI-GEN course (graduate compilers, ~20 students) and BI-PPA (undergraduate programming paradigms, ~150 students). Leading bachelor and master theses, many of which received dean awards for outstanding theses.

  • Senior Developer at 0xdata. inc. 2012

    Working on the design & implementation of almost all parts of the distributed non SQL big data store and analytics framework including core messaging, user-level API, distributed execution, initial implementation of R-like distributed queries on the cloud system.

  • Compiler Engineer at SNSystems Ltd. 2010 - 2012

    Responsible for correcting bugs & developing new features for the SN compiler that is used by most developers for Sony Playstation 3, PSP and PS Vita. Apart from the compiler, also responsible for implementing PS Vita assembler from scratch (main developer).

Education

The above is heavily abridged, full CV is also available.

Petr Maj

Department of Theoretical Computer Science
Faculty of Information Technology, Czech Technical University
Thakurova 9, 16000 Praha 6
Czech Republic

h-index: 8

Linked-In

zduka@github