The purpose of this website is to keep a record of the cool stuff I do. I want it to be my Feynman Notebook of a sort.
My name is Lukasz Janyst. I play with software for a living and learn how to build hardware. I also do occasional consulting.
I have been around the block for a long while and managed to learn a thing or two about a thing or two, including:
Building and running a cutting edge R&D team: I interviewed hundreds of people and had a bunch reporting to me. My team's mandate was to design and build real-time platforms for processing high-resolution imagery in safety-critical aviation applications. We created some pretty cool stuff, some of which you can read about below.
SLAM: I have played a little with various custom localization algorithms built by another team and a lot with leveraging dedicated and off-the-shelf hardware to make them fast and reliable.
Neural networks: On the research side of things, I have only played with reproducing experiments described in research papers. My SSD implementation and how-to ended up being quite popular. Frankly, I find the neural network experiments quite dull and see the data crunching side as much more enjoyable. A team I have led designed and built a custom hardware accelerator and network compiler for that. Even though I was only overseeing the project, learning how to do things like that was a blast.
Real-Time Operating Systems: Depending on the criticality level, safety-critical systems in aviation require you to have more or less complete control over the software and hardware stack you're running. The software for this kind of systems needs to be built pretty much from the hardware up. It was my daily bread for close to four years. Parts of what we did are open source: libsupcxx, dbt.
GPUs: As a part of the above, I have built a driver capable of running OpenCL kernels from bare metal on AMD Polaris-class GPUs communicating with the device directly over PCIe. I had never written a driver before that, so it was fantastic to play with it and, eventually, see it work.
Massive storage systems: I designed and built the namespace module for EOS, the Tier-0 storage system for the Large Hadron Collider's data. The last time I checked, its five instances at CERN held 200 million files and 30 petabytes of data. By now, they seem to be in the exabyte range, or at least that's what my former colleagues tell me.
C/C++: In the antiquity, when clang's support for C++ was in the planning phase, I wrote the proof-of-concept prototype for Cling. Quite surprisingly, my name is still in some of the source files, even though the code changed a lot. I also did some work on C++ introspection extending existing systems (CINT and Reflex) to handle data model evolution rules.
Network Programming: I designed and built the new XRootD client (XrdCl) library and command-line utilities. XRootD is the base technology for global data federations of the LHC experiments. The client handles the last stage of LHC data taking and most of the data analysis IO traffic worldwide. It's tens of GB/s 24/7 at CERN alone. CASTOR and EOS use it also for internal data transfers, such as pool re-balancing, parity-reconstruction, tape transfers. XRootD is a very generic technology. LSST, for instance, uses it to shard MySQL databases.
Data crunching: I made various improvements to the file formats used to store the LHC data. I wrote the code that made it possible to store collections of polymorphic pointers in column-wise mode. This approach reduces the on-disk size and read time by ~30% compared to object-wise mode. I proposed and implemented a semi-automatic way of handling data model evolution. It's useful when you need to change your data model, but already have petabytes stored using the old one.
Software engineering: I was in charge of releasing XRootD to external and internal partners. To ensure the quality, I created an automated build and testing system. The packages produced in the process were made available to other projects for incremental integration.
My current semi-professional interests (a.k.a. skills in development) include:
Hardware design: I loved it at school, and I found it even more fascinating at Daedalean. I still have minimal experience, but I want to do more of that. Multimedia and 3D graphics acceleration are of particular interest to me.
Hardware design tools: The state of the tooling in this domain and the languages used for hardware design leave a lot to be desired. The situation in the FPGA world is awful, and many companies openly admit it. I try to make use of my software skills to improve things.
Computer Graphics and Multimedia: It has changed a lot since I learned it at school, and playing with visual stuff is a load of fun.
When out of work, I like: