This is a work-in-progress list of my software projects and contributions to existing projects. The list is split into the following sections:
Research
At IIT’s DataSys lab, I worked on projects that revolved around evaluating Intel oneAPI for use in high-performance computing applications. I evaluated oneTBB for fine-grained parallelism. This involved modifying existing benchmarks from the Barcelona OpenMP Task Suite and GAP Benchmark suite, and created some original benchmarks. I compared the results to those of GNU OpenMP, LLVM OpenMP, and XQueue, a lockless threading framework designed for fine-grained parallelism. oneTBB performed very well in most benchmarks, but it was difficult to explain why it performed so well. I investigated the oneTBB’s source code and met with Intel employees to find an explanation for why oneTBB performed so well. I concluded that oneTBB’s performance was due to the fact that uses has a lockless scheduler. I also tested out DPC++ and SYCL for use in static paralellism, and found that it performed well and made programming for multiple target devices, such as GPUs from multiple brands, simple.
I also contributed to MEMO (f/k/a GiGi) blockchain project. I applied my knolwedge and experience with SYCL to write a pair of benchmarking programmings, one that only supported SHA2 hashes and one that also supported BLAKE3 hashes. The results of these programs were used to evaluate the potential benefit of using GPUs for plotting in a proof-of-space cryptocurrency. The conclusion was that, although high-end GPUs did out perform high-end CPUs, the bottlenecks of organizing and storing the hashes would limit the performance regardless. During this project, I familiarized myself with AdapativeCpp (f/k/a Open SYCL and hipSYCL) and the limitations of the SYCL specification and its implementations, specifically regarding recursive kernels (the specification and Intel DPC++ did not support recursion, while AdapativeCpp did).
Original Projects
Below is a list of projects that I made from scratch.
- Single-Pass Systems Language Compiler Front-End
- An unnamed, work-in-progress systems programming language, with a single-pass compiler front-end written with Berkley yacc.
- Adaptive Status Line
- This is an opinionated, adaptive status line generator for Linux that was inspired slstatus.
- Nix Flake
- (I'll upload this soon...)
- xmonad-extensions
- A collection of various extensions and modules for XMonad—a personal xmonad-contrib. Notable modules are XMonad.Util.Keymap (which aims to make managing key mappings easier), XMonad.Layouts.Toggle3Layouts (a layout combinator that acts as a 3-way toggle), and XMonad.Actions.CompileRestart (actions and key mappings for a static installation with dynamic reloading).
- xmonad-keymap-qq
- A proof-of-concept quasiquoter for writing XMonad key mappings in a style similar to EZConfig, but with compile-time error checks for unknown key symbols, etc.
- git-credential-pass
- A very simple script that allows Git to use pass as a credential helper. This is useful for logins over HTTPS.
Modifications & Patches
These are modifications that I made to existing projects.
- dwm
- Customized version of dwm. Includes some patches from suckless.org and a few custom ones. Custom patches include preserving client tags across restarts using a file, quiting only if the quit key is double pressed (without external files, unlike the patch on suckless.org), spawning windows in the selected client's working directory using the proc(5) filesystem (work-in-progress but it mostly works).
- bgs
- Customized version of bgs. Changed the operation of some of its image scaling feature (work-in-progress but it mostly works).
Contributions
Below is a list of pull requests and patches that I submitted to other projects.
- NixOS/nixpkgs #199395
- Introduced a new configuration option for physlock into NixOS.
- termux/termux-packages #5690
- Added a package for lf to Termux.
- nix-community/home-manager #1174
- Added a module for managing lf's configuration to home-manager.
- jgm/pandoc #5702
- Changed the behavior of a command-line option such that it could be specified multiple times (when it could not be previously), and included a test for that functionality.
Minor documentation changes: