My public projects portfolio
A few projects that I completed as part of my academic work, in my spare time or as a part of job interview processes.
- Linux kernel module for assessment
- Tool to plot churn-complexity
- Simple system interpreter implemented using different interpretation techniques
- CPUID tool
- Limited network packet parser
- Tool to prevent Windows process from working
- JOSM plugin for snapping polygon boundaries to each other
- A better time utility for Windows that takes into account children times
- Linux module to measure latency of VM entry-exit
- Xed branch with better disassembler syntax
- Simics-based simulation of CHIP16 computer
- Book on simulation, labs and slides
Linux kernel module for assessment
The task was to prepare a new character device kernel module that satisfied
a list of requirements. There were a few complications embedded into the assignment,
such as putting the character file into /proc instead of /dev/, and ensuring
that concurrent accesses work properly.
I approached the task with tests-first strategy.
https://github.com/grigory-rechistov/linux-kernel-module-for-assesment
Tool to plot churn-complexity
An adaptation of Michael Feathers’ ideas from this article.
It is built on parsers for a few languages based on Tree-Sitter.
https://github.com/grigory-rechistov/cyclomatic
Simple system interpreter implemented using different interpretation techniques
A group of interpreters for the same stack-based language that I built for illustrations of my article about different interpretation techniques. It includes even a simple just-in-time compiler variant.
https://github.com/grigory-rechistov/interpreters-comparison
CPUID tool
There exists a myriad of tools to dump values of cpuid. x86 architecture’s CPUID layout is being constantly expanded as new features are being added to it. So, none of those public tools stay up-to-date for long enough.
This tool was developed together with Evgeny Yulyugin. It covers Intel 64, Intel Itanium and ARM central processor architectures. It still works fine on x86, but I have no means to test it on Itanium or on ARM these days.
https://github.com/grigory-rechistov/ggg-cpuid
Limited network packet parser
Done as a job interview assessment. It is incomplete with regards to TCP/IP specification, but it was enough to cover the provided input Wireshark traffic dump. In retrospective, I over-engineered this tool to use too many C++ stuff.
https://github.com/grigory-rechistov/pcapparser
Tool to prevent Windows process from working
Do you have a process that you do not want to see messing with your Windows system? You can kill it but it gets constantly resurrected by some other system service? Instead of killing it, why not attach a debugger to it and thus stall it until reboot? https://atakua.org/w/stall-debugger.html
https://github.com/grigory-rechistov/stallattach
JOSM plugin for snapping polygon boundaries to each other
This is a plugin written in Java to load into JOSM GIS-editor for Openstreetmap. It creates a new menu option to unify boundaries of two polygons representing two areas of land, for example, a forest and a lake, by snapping nodes of one to segments of another.
https://github.com/grigory-rechistov/snapnewnodes
A better time utility for Windows that takes into account children times
I wanted to have a Unix’ time utility on Windows, but the existing ones, in particular, Cygwin’s time, only tracked time of a parent process and ignored times of children processes. So I found a way to write my own.
https://github.com/grigory-rechistov/chronos
Linux module to measure latency of VM entry-exit
This is a kernel that programs VMCS on Intel x86 CPUs, enters and exits VMX non-root mode several times and reports latency of the operations. It was used to measure and compare virtualization overhead across multiple generations of Intel CPUs.
It is based on work of vishmohan. Note that in its current state, the module does quite poor job with resource management and it could not be cleanly unloaded without a reboot.
https://github.com/grigory-rechistov/vmlatency
Xed branch with better disassembler syntax
X86 Decoder-Encoder (Xed) is the reference x86 assembler, disassembler and decoder. Its big disadvantage is that syntax of its CLI tools, in particular its assembler, is baroque/obscure. It is incompatible with anything else, including Xed’s own disassembler.
This branch is an attempt to add Bison-based parser frontend for more convenient Intel-style assembler syntax.
https://github.com/grigory-rechistov/xed/tree/asm-syntax-2
Simics-based simulation of CHIP16 computer
This has been a multi-year collaborative development/educational project for MIPT students. We developed a full-platform software simulator for CHIP16 architecture. It was based on Wind River/Intel Simics framework.
https://github.com/grigory-rechistov/ilab-simics
Book on simulation, labs and slides
These are sources for my publications for the aforementioned educational project: simulation handbook, software engineering labs and slides for lectures on the topic.
These documents are in Russian.
https://github.com/grigory-rechistov/simbook
https://github.com/grigory-rechistov/simlab
https://github.com/grigory-rechistov/sim-lectures