My name is Philipp C. Heckel and I write about nerdy things.



I’ve done a couple of (hopefully) interesting things over the last few years. Here is a selection of my favorite projects:

ntfy – HTTP-based pub-sub notification service

ntfy (pronounce: notify) is a simple HTTP-based pub-sub notification service. It allows you to send notifications to your phone or desktop via scripts from any computer, entirely without signup or cost. It’s also open source (as you can plainly see) if you want to run your own. There’s a web client, and an iOS/Android client. The source is on GitHub
Language: Go (server/client), React (web app), Kotlin (Android), Swift (iOS) / Status: actively maintained

Syncany – An open-source cloud storage and filesharing application.

Syncany is the one thing I spend most of my time with. It’s like Dropbox, but awesomer! Check it out on the project website, on GitHub or on my first or second blog post. I even wrote my Master Thesis about it.
Language: Java (with a little bit of Python) / Status: Syncany has taken a (likely indefinite) hiatus. People loved it. I love it, but I don’t have time for it, and it likely grew too big too fast. Feature creep and all that. I learned a lot from that.

pcopy – Shared clipboard across computers

pcopy is cross-machine clipboard that allows copying and pasting across different computers.
Language: Go / Status: It works wonderfully. I use it every day.

keeplog – Two-way synchronization between Google Keep and a local text file

keeplog is a simple two-way synchronization tool to sync a local daily log with Google Keep. When run, keeplog parses the local file and synchronizes each entry to individual Keep notes. Updates within Keep are populated to the local file as well.
Language: Python / Status: It works wonderfully. I use it every day.

elastictl – Simple tool to import/export Elasticsearch indices into a file, and/or reshard an index

Simple tool to import/export Elasticsearch indices into a file, and/or reshard an index. The tool can be used to backup/restore of an Elasticsearch index, for performance test an ES cluster, or to change the shard/replica count of an index
Language: Go / Status: It works great. We occasionally use it at work for testing and resharding in prod.

fsdup – Dedup disks with NTFS partitions, and later expose them as a block device. Also, it can store the chunk index in Ceph/RADOS.

fsdup is a proof-of-concept application to deduplicate NTFS file systems using file-level dedup for files inside the NTFS filesystem. It operates on raw disks or image files and parses NTFS. It was a proof-of-concept to determine how much space savings one can get when deduping hundreds of thousands of NTFS file systems.
Language: Go / Status: fsdup was an experiment, nothing more. It has been filed as a patent too, now.

natter – A peer-to-peer TCP port forwarding library using NAT traversal with QUIC

natter is a peer-to-peer TCP port forwarding library and command line tool. It connects two clients across the Internet, even if they are behind a NAT via UDP hole punching (NAT traversal) as per RFC 5128. Connections are brokered (but not relayed!) via a rendevous server (“broker”), and tunneled via the QUIC protocol.
Language: Go / Status: natter was an experiment, nothing more. It was so much fun to work on this.

JSON-RPC extensions for request-mapping, authentication, logging, and validation

At Datto, we use JSON-RPC based APIs very heavily, in particular with our JSON-RPC library php-json-rpc. I wrote four extensions for it. Namely php-json-rpc-auth, php-json-rpc-validator, php-json-rpc-simple and php-json-rpc-log.
Language: PHP / Status: Actively being used by Datto.

socksproxy – Simple SOCKS proxy to tunnel your way around things

socksproxy is a simple script to run a SOCKS proxy on your own server. It is merely a wrapper script to orchestrate SSH and iptables properly to make it easier in everyday use. I’ve also written a blog post about it.
Language: Bash / Status: I use socksproxy every now and then when I need to access stuff in Germany that I can’t from here. It works.

zfsu – Collection of ZFS utilities

zfsu is a collection of ZFS utilities. It consists of the following tools: zfsu tx (aka zfstx) maintains a mirror of a ZFS pool over the network. zfsu ret (aka zfsret) is a simple script to apply local retention (destroy snapshots) of a filesystem and its snapshots. zfsu res (aka zfsres) is script to resilver a slow mirror, e.g. a HDD disk if mirrored with a SSH.
Language: Bash / Status: In maintenance mode, since it just works. My automated backup scripts use it every day.

Terminator Host Watch – Terminator plugin to apply host-specific themes

This plugin monitors the last line (PS1) of each terminator terminal, and applies a host-specific profile if the hostname is changed. It’s very simple, but very useful.
Language: Python / Status: Abandoned, although I should probably revive it. It was a cool project.

sf – Wrapper script around sshfs to make mounting/unmounting easier

sf is a wrapper script around sshfs to make mounting/unmounting easier. It probably doesn’t deserve its own package, but I use it on so many machines that it might just be worth it. Again, super simple, but useful.
Language: Bash / Status: Abandoned, I may use it again if I need to do a lot of sshfs stuff.