View all of my projects on github!

AnkiPandas

Analyze and modify your Anki collection with pandas.
Source on Github gh actions Coveralls Documentation Status Pypi status Gitter License Black

Anki is one of the most popular flashcard system for spaced repetition learning, pandas is the most popular python package for data analysis and manipulation. So what could be better than to bring both together? With AnkiPandas you can use pandas to easily analyze or manipulate your Anki flashcards.

Analyzing the relationship between the numbers of reviews and   the retention rate for different decks of cards.
Analyzing the relationship between the numbers of reviews and the retention rate for different decks of cards. More examples are available in the documentation.

GNN tracking

Reconstructing particle trajectories with graph neural networks
Source on Github DOI Documentation Status pre-commit.ci status gh actions Check Markdown links codecov

This open source project uses graph neural networks to reconstruct charged particle trajectories in particle detectors (โ€œtrackingโ€). Batteries are included: The package implements the whole processing pipeline, several models and approaches, and the evaluation of the final performance metrics. Built around pytorch lightning, the models are easy to train and to restore. By using hooks and callbacks, everything remains modular and maintainable.

Charged particle tracking as an embedding task: The network is trained to map
Charged particle tracking as an embedding task: The network is trained to map "locations" of the same particle to the same area in the latent space.

Wandb offline sync hook

A convenient way to trigger synchronizations to Weights & Biases if your compute nodes don't have Internet
Source on Github Documentation Status PyPI version Python 3.8โ€’3.11 PR welcome pre-commit.ci status .github/workflows/test.yaml link checker codecov gitmoji Black

Many large scientific compute clusters are built around login and compute nodes (allocated by a workload manager). Often, the compute nodes do not have direct access to the Internet and cannot communicate with cloud-based services. This package provides a convenient way to work around this problem when synchronizing data to Weights & Biases, a machine-learning experiment tracker.

wandb-osh uses a shared file system to forward synchronization requests to a node with Internet access
wandb-osh uses a shared file system to forward synchronization requests to a node with Internet access

Sunburst

Package for matplotlib
Source on Github gh actions pre-commit.ci status Documentation Status Pypi status PR welcome Black License

Sunburst is a package to create sunburst plots/ring charts/hierarchical pie charts with matplotlib.

Sunburst plot generated with my package
Sunburst plot created with the sunburst package, similar to the diagrams shown by disk usage monitors. Each wedge corresponds to a folder, with the angle of the wedge proportional to its size. If a folder contains a subfolder, the latter is placed "on top" of the folder. Files that are in the folders therefore show up as "missing wedges". Wedges that are too small can be ignored.

ClusterKinG

Cluster sets of histograms in high energy physics phenomenology
Source on Github CI Pre-commit status Coveralls Documentation Pypi Binder Gitter License Black PR welcome

This package provides a flexible yet easy to use framework to cluster sets of histograms (or other higher dimensional data) and to select benchmark points representing each cluster. The package particularly focuses on use cases in high energy physics. A physics use case has been demonstrated in this paper.

Example plot produced by ClusterKinG
Example plot produced by ClusterKinG: clustering of a a three dimensional parameter space results in three distinct clusters. Benchmark points are highlighted with enlarged markers.

Piezo Puzzle

An interactive birthday puzzle
Source on Github gh actions pre-commit.ci status Documentation Status Pypi status PR welcome Black License

An interactive birthday puzzle with a piezo buzzer operated by an atmega8 MCU. Different values can be selected on a rotary dial. For each selected value, letter combinations are communicated with morse code. Once their meaning is understood, they can be brought in the right order to get a code. After this code has been entered, three dial values play different birthday songs.

View of the main board before packaging
View of the main board before packaging

Codenames

Online version of a popular word game ๐ŸŽฒโœจ
Source on Github pre-commit.ci status Black License PR welcome

Experimental/educational online implementation of Codenames, a popular word game. Czech Games Edition have since released an official (and much more complete) online version, so play that instead.

Player view of Codenames
Player view of Codenames

ppserver

Keeping track of characters in an RPG
Source on Github pre-commit.ci status PR welcome Black License

A small flask server that helps to keep track of story lines and characters (NPCs) in my pen & paper game. The underlying data is collaboratively maintained in google sheets.

Relationships between characters are visualized in an interactive network.
Relationships between characters are visualized in an interactive network.

InspiderWeb

Visualize networks of citations
Source on Github License Travis Build Status

InspiderWeb is a tool to analyze networks of papers referencing and citing each other. It automatically looks up the relationship of papers based on information from inspirehep (a large database for papers in high energy physics), then uses the dot language to describe the resulting network. The result can then be plotted by the Graphviz Package and similar programs. Example of a large network of papers. InspiderWeb comes with an easy to use command line interface, but can also be used as a python package to allow for further customization.

InspiderWeb rendering of a network of but a few papers.
Example with very few nodes. Every green node corresponds to a paper from inspirehep, labeled e.g. by the inspirehep citation keys. If saved as a pdf, the nodes are furthermore clickable and open the corresponding paper. Connection between the nodes correspond to citations. Papers can furthermore be ordered by years.

Teaching Material

Various projects

Smaller or more experimental projects
  • RandomFileTree: Create a random file/directory tree/structure in python for testing purposes.
    Source on Github gh actions pre-commit.ci status Coveralls Documentation Status Pypi status Black Gitter PR welcome
  • jekyll-relative-url-check: Enforce that all URLs in your Jekyll setup are relative to site.baseurl
    Source on Github gh actions pre-commit.ci status Black License PR welcome
  • Verzettler: Non-linear, non-hierarchical knowledge management: Helper scripts for your Zettelkasten.
    experimental Source on Github gh actions pre-commit.ci status Black License PR welcome
  • video-frame-merger: Overlay the moving elements of video frames to condense a whole motion into one still image.
    experimental Source on Github Black pre-commit.ci status License PR welcome

Anki Plug-ins

Plug-ins & Templates for learning (Japanese) with Anki
Anki is a spaced repetition flashcard program that boasts high customizability with Add-ons. Here are a few things I have been working on, while going through the various stages of trying to learn Japanese.
  • Template tester: The styling of Anki's flashcards is governed by templates written in HTML and CSS. This is a small tool to batch generate previews of templates for different user input cases, which comes in handy when maintaining multiple and complicated templates.
    Source on Github License Travis Build Status
  • Ignore duplicates: Customize how and when Anki flags cards as duplicates.
    Source on Github License
  • Sync fields: Add-on to synchronize information/field values between different cards/notes, e.g. including information/mnemonics about the kanji used in Japanese words also on the cards of Japanese words that use them (and add these as exemplary use cases to the kanji cards). Requires substantial configuration.
    Source on Github License
  • Merge notes: Plug-in to merge a set of notes (flashcards) into another set of notes. Rudimentary Add-on intended for one time use!
    Source on Github License
  • cbcImport: Adds a new toolbar to Anki's Add Card dialog to load .csv files and then cycle through them, adding cards/vocabulary items step by step.
    Source on Github License
  • Readings Audio: Add Kunyomi/Onyomi audio to kanji readings flashcards in Anki. Currently not completely functional.
    Source on Github License
  • Reset Fields: Adds a button to reset all fields in the editor window in Anki.
    Source on Github License
  • Templates: The styling of Anki's flashcards is governed by templates written in HTML and CSS. Here are the ones I am using to learn Japanese.
    Source on Github License
A new toolbar for Anki's 'Add Card' dialog from the addon cbcImport
A new toolbar for Anki's 'Add Card' dialog (the three framed rows of buttons/labels/checkboxes at the bottom of the dialog) created by cbcImport, allowing to cycle through .csv files to speed up adding cards, while still being able to make changes case by case.
A new toolbar for Anki's 'Add Card' dialog from the addon cbcImport
Dialog from the Readings Audio plugin, that aims to add onyomi/kunyomi audio to kanji reading flashcards.

Other tools for learning Japanese

  • RTK Lookup: For people who learn kanji with the books from James Heisig (Remembering The Kanji). A little command line interface that allows to look up multiple kanji by keyword (or parts of it), by parts of the story/mnemonic or by frame number.
    Source on Github License
  • rtk-table-tools: Generates beautiful posters of all JLPT kanji! Also includes a web scraper to get additional information for that purpose.
    Source on Github License