Notes

Dwitter is a site where users write JavaScript to create demos in 140 characters or fewer. The site provides a 1920×1080 canvas and a few helper functions (e.g. S(...) returns Math.sin(...)).

I have created a few “dweets”, but I’m still very much learning and experimenting with interesting techniques.

For example, here is a screen recording of a simple demo I created that computes a Lorenz attractor and spins the rendered graph around:

Rotating Lorenz Attractor

The code for it is as follows:

// 140 characters (minus newline and indents added for readability)
for(c.width|=i=q=r=s=.1;i<t;b=4*i/t,
            x.fillRect(960+16*(q*C(t)+s*S(t)),540+20*r,b,b),i+=.01)
    o=r,r+=(q*(28-s)-r)/50,s+=(q*o-2*s)/50,q+=(o-q)/5

Some notes on compression techniques I’ve seen or employed follow. I will update these notes as I learn additional ones.

continued »


These are some notes on setting up a small mail server suitable for a single user or a few users.

This setup uses the following projects to enable sending and receiving mail using SPF, DKIM, and DMARC for email authentication:

  • Postfix for mail transfer and delivery to Dovecot via LMTP.

  • Dovecot for IMAP access and SASL for Postfix with Pigeonhole for Sieve message filtering support

  • Rspamd for spam filtering, email authentication validation, and DKIM signing (with Redis for caching)

  • Let’s Encrypt and certbot to provide SSL certs

Moreover this configuration enables support for sending and receiving mail on two domains whereby the two domains mirror each other.

continued »


For the purposes of experimentation, I set up a simple WireGuard configuration that designates one peer as a “server” and the others as “clients” to provide a VPN. Clients can connect to the internet while masked behind the server (as one would expect from a VPN) and can also interact with certain other clients. The server also acts as a DNS server to the clients.

A few notes follow on how I set this configuration up using WireGuard, nftables, and Unbound, as well as a script for automating the process of adding new clients.

continued »


My hosting provider assigns a block of IPv6 addresses for each plan, so I thought I would enable them on my plans. Overall, the process is fairly simple, but it took some studying on my part to understand what had to be done and the “right way” of doing things. This is a quick summary of what I did.

continued »


Homebridge is a tool that creates virtual HomeKit accessories from various kinds of devices. Integrating an off-the-shelf IP camera as a HomeKit camera is one valuable use case. Following are some notes concerning integration of a Panoraxy B100V.3 IP camera into a Homebridge instance running on a Raspberry Pi.

continued »


In an effort to distill the content of this site, I’ve re-architected it significantly. Missing material will be restored — in some form or another — over time.

Source for the site content and the static generator I built to render it is available in a git repo.

continued »