Coder Social home page Coder Social logo

pothos / zpaqlpy Goto Github PK

View Code? Open in Web Editor NEW
20.0 4.0 3.0 17.61 MB

Compiles a zpaqlpy source file (a Python-subset) to a ZPAQ configuration file for usage with zpaqd

License: GNU General Public License v3.0

Makefile 0.84% Rust 61.01% Python 36.21% Shell 0.41% C++ 1.53%
zpaq compiler compression bytecode python-subset zpaql

zpaqlpy's Introduction

About me

I'm a software developer at Microsoft Azure through the Kinvolk acquisition, working on Flatcar Container Linux since it got readied as replacement for CoreOS Container Linux. The work covers a broad range from the high-level build system architecture down to developing the low-level software components and collaborating with various upstream projects (Linux kernel, systemd, etc). I also worked on Lokomotive, Inspektor Gadget, and traceloop.

As a fun interview task at Kinvolk I implemented the idea of a systemd option to define BPF programs as packet filters for all network sockets of a CGroup. This is now part of systemd since version 243 and lets you use a custom network filter for your systemd service. Try out the examples in my bpf-cgroup-filter repo, and read the first and second blog post.

I did my dual degree Master in computer science at TU Berlin and KAIST (South Korea), where I was part of Prof. Sue Moon's Advanced Networking Lab. I did my Bachelor in computer science at FU Berlin. I'm part of the German association Forum Computer Scientists for Peace and Social Responsibility, where Joseph Weizenbaum was a founding member (I recommend you to watch some of his interviews or the documentary »Plug & Pray«).

My Master's thesis was about memory-safe userspace networking to protect against security vulnerabilities in the OS kernel's TCP/IP network stack due to memory corruption bugs. The solution consists of usnetd a memory-safe L4 switch to share a NIC between multiple userspace network stacks and the kernel's network stack, and usnet_sockets a Rust userspace networking library based on smoltcp that is still able to integrate with the loopback device. It offers various options on direct or shared NIC access. It uses my usnet_devices library for netmap, macvtap, and UNIX domain sockets smoltcp interfaces.

In my spare time I maintain GNOME Disks and implemented filesystem resize, check, and repair support for it in a GSoC project. This made me also work on udisks and libblockdev. Please reach out if you want to improve GNOME Disks. I still have a long todo list even though I don't find the time to write new code.

I like compilers and compression, and even more if both are combined. My Bachelor's thesis was about a compiler for a subset of Python to ZPAQL bytecode. ZPAQ is a compression format which embeds the decompression bytecode in the archive, allowing to change the algorithm without requiring the decoder to be updated. This idea addressed the incompatibility problem that all the versions of PAQ compressors had, and also allowed to choose different algorithms depending on the type of input data. However, ZPAQL wasn't used by many people because it is an assembly-like language. With a Python-like language to compile from I wanted to lower this barrier to write custom compression algorithms and also prove that the format can embed non-context modeling algorithms like Brotli (which I ported to Python from a Rust implementation). Custom algorithms are useful because the key element in data compression is prediction of future data which works best when the current context is taken into account. E.g., with ZPAQ it was easy to write a compression model for PNM image data that uses the color of the neighbor pixels to predict the next. The generated code is not the fastest because my malloc implementation isn't but it is a good playground for data compression. A fun exercise was to detect the decimal digits of Pi and then switch from a generic text compression model to perfectly predicting the next digits of Pi, essentially wasting almost no bytes on storing this seemingly random string it in a text despite it appearing like incompressible random data to any other compression algorithm.

In university I also worked on a Twee to Z-Code compiler with a tracing garbage collector. If you are into Arduinos you may find my library for Nintendo 64 controllers useful which you can try out playing a tetris port on your TV (or anything that displays the composite video signal the Arduino generates in software). I'll spare you my QBasic and Visual Basic code but if GitHub existed then, you would find it here ;)

I'm not actively writing on my blog but you can find my email address there, or create an issue in this readme repo to contact me.

My GNOME Account: gitlab.gnome.org/kailueke

zpaqlpy's People

Contributors

pothos avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

Forkers

mikalv isgasho fwip

zpaqlpy's Issues

Mouse reset immediately after move

Hello, thanks for the software.

I may have discovered a rather annoying issue. The software works just fine except for instead of registering the distance the mouse currently is from an arbitrarily set centre as the joystick tilt. It registers it as a joystick flick, which somewhat defeats the point of the app when used in conjunction with DOSBOX.

I reckon that it may have something to do with how the mouse cursor is centred in the first place. My knowledge of C++ is limited, but I'll give it a try and see if I can fix it.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.