Pages by category
General
- Drinking distilled water
- Why I write
- How to download private Facebook videos
- Nintendo 64 over S-video
- Analog vs. digital games
- Problems with plurals in English
- My favorite YouTube video channels
- ProFont (Nayuki’s version)
- Common mistakes when using the metric system
- Designing better file organization around tags, not hierarchies
- Batch up new messages in Gmail for better productivity
- Lyrics of Mahou Shoujo Pixy Misa Shouka
- Decent feedback from readers
- RollerCoaster Tycoon saved games
- Tablet desk clock
- Overwriting confidential handwritten text
- TTC fare guide for tourists
- Web site notes
- Nanoblock modeling in POV-Ray
- The photographic exposure equation
- Absolute and relative lens apertures
- Transcript of “New Money (Filling the Void)”
- Overview of Project Nayuki software licenses
- Resizing images by area
- Public transit and monotonicity
- Understanding Facebook IDs
- Dvorak keyboard in use warning sign
- Frog Fractions guide
- Unusual chemical symbols in English
- Manufactoria solutions
- Facebook anniversary ray trace
- Site map
- Supplement to my résumé
- My university courses
- My Mario Kart 64 time trial records
- How to batch-tag photos on Facebook
- Poor feedback from readers
- Variations on Japanese romanization
- I type in Dvorak
- A septillion CPU cycles a year
- Next-hop routing in real life
- Finding dust by lighting from a grazing low angle
- 國內 doesn’t mean domestic
- Patchouli Knowledge laptop sticker
- Sister Princess Winamp skins
- About
Programming
- Hamming error-correcting codes
- FastCGI library
- Concurrent programming with monitors
- Tax brackets visualizations
- DEFLATE specification v1.3 (HTML)
- SQLite database file visualizations
- PNG library
- Zeller’s congruence
- Macshift (Nayuki’s version)
- PNG file chunk inspector
- Practical guide to XHTML
- Skill levels in Scalable Vector Graphics (SVG)
- Ending my support for Python 2
- Time-based One-Time Password tools
- My code style
- BitTorrent bencode format tools
- Summary of C/C++ integer rules
- Self-encrypted cache structure
- Don’t share commented-out code
- Creating a QR Code step by step
- Optimal text segmentation for QR Codes
- Binary indexed tree
- AA tree set
- Elliptic curve point addition in projective coordinates
- Pervasive Displays e-paper panel hardware driver
- Fast QR Code generator library
- Java SE 5 is the most significant release
- Fast discrete cosine transform algorithms
- Convex hull algorithm
- Number-theoretic transform (integer DFT)
- Near-duplicate features of C++
- Sliding window minimum/maximum algorithm
- MATLAB language pet peeves
- sRGB transform library
- Simple GUI FLAC player (Java)
- FLAC library (Java)
- Git library (Java)
- Benchmark of Nayuki’s FLAC encoder
- Simple FLAC implementation
- Undefined behavior in C and C++ programs
- B-tree set
- Reed–Solomon error-correcting code decoder
- GO Train acceleration analyzed by video
- Band-limited square waves
- CSC258 computer debugger
- The versatile sieve of Eratosthenes
- Gaussian blur demo
- Being a polyglot programmer
- Batch up new messages in Gmail for better productivity
- Java Native Interface compared to Python/C API
- Knuth’s -yllion number notation
- QR Code generator library
- Encrypted backup client for Dropbox
- Java BigInteger was made for RSA cryptography
- Large arrays proposal for Java
- A fundamental introduction to x86 assembly programming
- What are binary and text files?
- Disjoint-set data structure
- Animated floating graph nodes
- MamIRC, the headless IRC client
- Image unshredder by annealing
- Simulated annealing on pixel colors
- Symmetry sketcher (JavaScript)
- Cryptographic primitives in plain Python
- JSON library (Java)
- Tablet desk clock
- Fast Fourier transform in x86 assembly
- Compact hash map (Java)
- Bitcoin cryptography library
- GIF optimizer (Java)
- GIF89a specification (HTML)
- Barrett reduction algorithm
- 1D barcode generator (JavaScript)
- Unsigned int considered harmful for Java
- Panel de Pon puzzle solver (JavaScript)
- DEFLATE library (Java)
- Huffman-coding English words
- Knuth–Morris–Pratt string matching
- Montgomery reduction algorithm
- Native hash functions for Java
- Binomial heap
- Binary array set
- Gamma-aware image dithering
- AVL tree list
- Windows timestamp accessor library
- Random password generator (JavaScript)
- Portable FloatMap format I/O (Java)
- Iterated popcount results in 0 or 1
- Lowest SHA-512 value by brute force
- Approximating Euler’s number correctly
- Computing Wikipedia’s internal PageRanks
- DES cipher internals in Excel
- Overview of Project Nayuki software licenses
- Canada Tax-Free Savings Account simulator (JavaScript)
- Sinc-based image resampler
- AES cipher internals in Excel
- Tiny PNG Output
- Master theorem solver (JavaScript)
- A math/programming view of Canada GST/HST credit calculation
- Fast SHA-2 hashes in x86 assembly
- Next lexicographical permutation algorithm
- NetPerSec (Nayuki’s version)
- Example of simplifying and improving code
- Smallest enclosing circle
- NotepadCrypt format decrypter (Java)
- Gauss–Jordan elimination over any field
- Reference arithmetic coding
- Optimizing brainfuck compiler
- Factorize Gaussian integer (JavaScript)
- Automatic Minesweeper solver
- Forcing a file’s CRC to any value
- Prayer brackets
- Free small FFT in multiple languages
- Manufactoria solutions
- Propositional sequent calculus prover
- Simple DEFLATE decompressor
- Primitive recursive functions
- Galois linear feedback shift register
- Fast Whirlpool hash in x86 assembly
- Fast SHA-1 hash implementation in x86 assembly
- Fast MD5 hash implementation in x86 assembly
- Dumb PNG output (Java)
- Good Java idioms
- Binary counter in brainfuck
- Java’s signed byte type is a mistake
- Full screen clock (JavaScript)
- BMP I/O library (Java)
- Some bit-twiddling functions explained
- Unspecified edge cases in the DEFLATE standard
- Fast skipping in a linear congruential generator
- Tap to measure tempo (JavaScript)
- DWITE programming contest solutions
- Sorting algorithms demo (Java)
- RC4 cipher in x86 assembly
- Tiny Encryption Algorithm in x86 assembly
- Brainfuck interpreter (JavaScript)
- Project Euler solutions
- Automatic Caesar cipher breaker (JavaScript)
- Triangle solver (JavaScript)
- How to implement the discrete Fourier transform
- Fast Fibonacci algorithms
- Karatsuba multiplication
- Chemical equation balancer (JavaScript)
- Is there an ideal comparison sort?
- Reference Huffman coding
- Vigenère cipher (JavaScript)
- Calculate GCD (JavaScript)
- Calculate divisors (JavaScript)
- Calculate prime factorization (JavaScript)
- Caesar cipher (JavaScript)
Math
- Pixel is a unit of length and area
- Zeller’s congruence
- Elliptic curve point addition in projective coordinates
- My favorite YouTube video channels
- Number-theoretic transform (integer DFT)
- Reed–Solomon error-correcting code decoder
- Band-limited square waves
- The versatile sieve of Eratosthenes
- Knuth’s -yllion number notation
- Angles in elastic two-body collisions
- Handling physical quantities in math formulas
- Numerically stable law of cosines
- Barrett reduction algorithm
- Montgomery reduction algorithm
- Iterated popcount results in 0 or 1
- Approximating Euler’s number correctly
- Extending the use of logarithmic scales
- Master theorem solver (JavaScript)
- A math/programming view of Canada GST/HST credit calculation
- Resizing images by area
- Gauss–Jordan elimination over any field
- Polynomial arithmetic shorthand
- Factorize Gaussian integer (JavaScript)
- Forcing a file’s CRC to any value
- Free small FFT in multiple languages
- Propositional sequent calculus prover
- Primitive recursive functions
- Galois linear feedback shift register
- Fast skipping in a linear congruential generator
- Project Euler solutions
- Triangle solver (JavaScript)
- How to implement the discrete Fourier transform
- Fast Fibonacci algorithms
- Countable sets and Kleene star
- Boolean algebra laws
- Casio fx-991MS tips and tricks
Writing
- Pixel is a unit of length and area
- Meanings of home equity
- Drinking distilled water
- DEFLATE specification v1.3 (HTML)
- Why I write
- I dislike dividends
- How to download private Facebook videos
- Practical guide to XHTML
- Skill levels in Scalable Vector Graphics (SVG)
- Ending my support for Python 2
- Analog vs. digital games
- My code style
- Summary of C/C++ integer rules
- Self-encrypted cache structure
- Subtle ways to lose data
- Don’t share commented-out code
- Problems with plurals in English
- Java SE 5 is the most significant release
- Near-duplicate features of C++
- MATLAB language pet peeves
- Common mistakes when using the metric system
- Designing better file organization around tags, not hierarchies
- Benchmark of Nayuki’s FLAC encoder
- Undefined behavior in C and C++ programs
- Reed–Solomon error-correcting code decoder
- Being a polyglot programmer
- Batch up new messages in Gmail for better productivity
- Java Native Interface compared to Python/C API
- Java BigInteger was made for RSA cryptography
- Large arrays proposal for Java
- A fundamental introduction to x86 assembly programming
- What are binary and text files?
- Handling physical quantities in math formulas
- Tablet desk clock
- Overwriting confidential handwritten text
- TTC fare guide for tourists
- GIF89a specification (HTML)
- Web site notes
- Unsigned int considered harmful for Java
- The photographic exposure equation
- Absolute and relative lens apertures
- E-Trade: An expensive, rigid brokerage
- Extending the use of logarithmic scales
- Guide to Canada income tax by successive approximation
- Graphic overview of Canada income tax, RRSP, and TFSA
- A math/programming view of Canada GST/HST credit calculation
- Example of simplifying and improving code
- So you want to be a day trader? Bad idea.
- Public transit and monotonicity
- Prayer brackets
- I type in Dvorak
- A septillion CPU cycles a year
- Next-hop routing in real life
- 國內 doesn’t mean domestic
- Patchouli Knowledge laptop sticker
- Countable sets and Kleene star
- About
Finance
- Meanings of home equity
- Tax brackets visualizations
- I dislike dividends
- E-Trade: An expensive, rigid brokerage
- Transcript of “New Money (Filling the Void)”
- Extending the use of logarithmic scales
- Guide to Canada income tax by successive approximation
- Canada Tax-Free Savings Account simulator (JavaScript)
- Graphic overview of Canada income tax, RRSP, and TFSA
- A math/programming view of Canada GST/HST credit calculation
- Recommended articles from Canadian Couch Potato investment blog
- So you want to be a day trader? Bad idea.
Art
- ProFont (Nayuki’s version)
- Animated floating graph nodes
- Simulated annealing on pixel colors
- Symmetry sketcher (JavaScript)
- Nanoblock modeling in POV-Ray
- Dvorak keyboard in use warning sign
- Facebook anniversary ray trace
- Patchouli Knowledge laptop sticker
- Sister Princess Winamp skins
Music
- Benchmark of Nayuki’s FLAC encoder
- Transcription of Pokémon Game Boy music
- Full transcription of Ichigo Mashimaro – Main Theme
- Transcription of Hare Tokidoki Egao
- Transcription of Chasse – Instrumental solo
- Transcription of Miracle∞Hinacle
- Transcription of o-Hanabatake
- Tap to measure tempo (JavaScript)
- Transcription of Every Day
- Transcription of Kana’s Theme
- Transcription of Crystal Energy – Guitar solo
- Transcription of Nyanyanyanyanyanyanya!
Image processing
- PNG library
- Nintendo 64 over S-video
- PNG file chunk inspector
- Creating a QR Code step by step
- Pervasive Displays e-paper panel hardware driver
- Fast QR Code generator library
- Sliding window minimum/maximum algorithm
- sRGB transform library
- GO Train acceleration analyzed by video
- Gaussian blur demo
- QR Code generator library
- Image unshredder by annealing
- Simulated annealing on pixel colors
- Symmetry sketcher (JavaScript)
- GIF optimizer (Java)
- GIF89a specification (HTML)
- 1D barcode generator (JavaScript)
- Gamma-aware image dithering
- Portable FloatMap format I/O (Java)
- Sinc-based image resampler
- Tiny PNG Output
- Dumb PNG output (Java)
- BMP I/O library (Java)
Cryptography
- Time-based One-Time Password tools
- Elliptic curve point addition in projective coordinates
- Encrypted backup client for Dropbox
- Java BigInteger was made for RSA cryptography
- Cryptographic primitives in plain Python
- Bitcoin cryptography library
- Native hash functions for Java
- Lowest SHA-512 value by brute force
- DES cipher internals in Excel
- AES cipher internals in Excel
- Fast SHA-2 hashes in x86 assembly
- NotepadCrypt format decrypter (Java)
- Fast Whirlpool hash in x86 assembly
- Fast SHA-1 hash implementation in x86 assembly
- Fast MD5 hash implementation in x86 assembly
- RC4 cipher in x86 assembly
- Tiny Encryption Algorithm in x86 assembly
- Automatic Caesar cipher breaker (JavaScript)
- Vigenère cipher (JavaScript)
- Caesar cipher (JavaScript)
Language critique
- Pixel is a unit of length and area
- Practical guide to XHTML
- Ending my support for Python 2
- My code style
- Summary of C/C++ integer rules
- Problems with plurals in English
- Java SE 5 is the most significant release
- Near-duplicate features of C++
- MATLAB language pet peeves
- Undefined behavior in C and C++ programs
- Being a polyglot programmer
- Java BigInteger was made for RSA cryptography
- Large arrays proposal for Java
- Unsigned int considered harmful for Java
- Java’s signed byte type is a mistake
Java
- Hamming error-correcting codes
- Concurrent programming with monitors
- PNG library
- Zeller’s congruence
- Time-based One-Time Password tools
- BitTorrent bencode format tools
- Binary indexed tree
- AA tree set
- Fast QR Code generator library
- Java SE 5 is the most significant release
- Fast discrete cosine transform algorithms
- Convex hull algorithm
- Number-theoretic transform (integer DFT)
- Sliding window minimum/maximum algorithm
- sRGB transform library
- Simple GUI FLAC player (Java)
- FLAC library (Java)
- Git library (Java)
- Simple FLAC implementation
- B-tree set
- Reed–Solomon error-correcting code decoder
- GO Train acceleration analyzed by video
- Band-limited square waves
- CSC258 computer debugger
- The versatile sieve of Eratosthenes
- Gaussian blur demo
- Java Native Interface compared to Python/C API
- Knuth’s -yllion number notation
- QR Code generator library
- Encrypted backup client for Dropbox
- Java BigInteger was made for RSA cryptography
- Large arrays proposal for Java
- Disjoint-set data structure
- MamIRC, the headless IRC client
- Image unshredder by annealing
- Simulated annealing on pixel colors
- JSON library (Java)
- Compact hash map (Java)
- Bitcoin cryptography library
- GIF optimizer (Java)
- Barrett reduction algorithm
- Unsigned int considered harmful for Java
- Panel de Pon puzzle solver (JavaScript)
- DEFLATE library (Java)
- Huffman-coding English words
- Knuth–Morris–Pratt string matching
- Montgomery reduction algorithm
- Native hash functions for Java
- Binomial heap
- Binary array set
- Gamma-aware image dithering
- AVL tree list
- Windows timestamp accessor library
- Portable FloatMap format I/O (Java)
- Approximating Euler’s number correctly
- Computing Wikipedia’s internal PageRanks
- Sinc-based image resampler
- Next lexicographical permutation algorithm
- Example of simplifying and improving code
- Smallest enclosing circle
- NotepadCrypt format decrypter (Java)
- Gauss–Jordan elimination over any field
- Reference arithmetic coding
- Factorize Gaussian integer (JavaScript)
- Automatic Minesweeper solver
- Forcing a file’s CRC to any value
- Free small FFT in multiple languages
- Simple DEFLATE decompressor
- Primitive recursive functions
- Galois linear feedback shift register
- Dumb PNG output (Java)
- Good Java idioms
- Java’s signed byte type is a mistake
- BMP I/O library (Java)
- Some bit-twiddling functions explained
- Fast skipping in a linear congruential generator
- DWITE programming contest solutions
- Sorting algorithms demo (Java)
- Project Euler solutions
- How to implement the discrete Fourier transform
- Fast Fibonacci algorithms
- Karatsuba multiplication
- Reference Huffman coding
JavaScript / TypeScript
- Hamming error-correcting codes
- Tax brackets visualizations
- SQLite database file visualizations
- Zeller’s congruence
- PNG file chunk inspector
- Time-based One-Time Password tools
- BitTorrent bencode format tools
- Creating a QR Code step by step
- Optimal text segmentation for QR Codes
- Binary indexed tree
- Fast discrete cosine transform algorithms
- Convex hull algorithm
- Number-theoretic transform (integer DFT)
- sRGB transform library
- Band-limited square waves
- The versatile sieve of Eratosthenes
- Gaussian blur demo
- Batch up new messages in Gmail for better productivity
- Knuth’s -yllion number notation
- QR Code generator library
- Disjoint-set data structure
- Animated floating graph nodes
- MamIRC, the headless IRC client
- Image unshredder by annealing
- Simulated annealing on pixel colors
- Symmetry sketcher (JavaScript)
- Tablet desk clock
- 1D barcode generator (JavaScript)
- Panel de Pon puzzle solver (JavaScript)
- Knuth–Morris–Pratt string matching
- AVL tree list
- Random password generator (JavaScript)
- Canada Tax-Free Savings Account simulator (JavaScript)
- Master theorem solver (JavaScript)
- Next lexicographical permutation algorithm
- Resizing images by area
- Smallest enclosing circle
- Factorize Gaussian integer (JavaScript)
- Free small FFT in multiple languages
- Propositional sequent calculus prover
- Simple DEFLATE decompressor
- Full screen clock (JavaScript)
- Tap to measure tempo (JavaScript)
- Brainfuck interpreter (JavaScript)
- Automatic Caesar cipher breaker (JavaScript)
- Triangle solver (JavaScript)
- Fast Fibonacci algorithms
- Chemical equation balancer (JavaScript)
- Vigenère cipher (JavaScript)
- Calculate GCD (JavaScript)
- Calculate divisors (JavaScript)
- Calculate prime factorization (JavaScript)
- Caesar cipher (JavaScript)
Python
- Hamming error-correcting codes
- FastCGI library
- Concurrent programming with monitors
- Zeller’s congruence
- Ending my support for Python 2
- Time-based One-Time Password tools
- BitTorrent bencode format tools
- Binary indexed tree
- AA tree set
- Elliptic curve point addition in projective coordinates
- Fast discrete cosine transform algorithms
- Convex hull algorithm
- Number-theoretic transform (integer DFT)
- Sliding window minimum/maximum algorithm
- sRGB transform library
- Simple FLAC implementation
- B-tree set
- Reed–Solomon error-correcting code decoder
- GO Train acceleration analyzed by video
- Band-limited square waves
- The versatile sieve of Eratosthenes
- Java Native Interface compared to Python/C API
- Knuth’s -yllion number notation
- QR Code generator library
- Disjoint-set data structure
- Cryptographic primitives in plain Python
- Tablet desk clock
- Barrett reduction algorithm
- Knuth–Morris–Pratt string matching
- Montgomery reduction algorithm
- Binomial heap
- Binary array set
- AVL tree list
- Windows timestamp accessor library
- Lowest SHA-512 value by brute force
- Approximating Euler’s number correctly
- Next lexicographical permutation algorithm
- Smallest enclosing circle
- Gauss–Jordan elimination over any field
- Reference arithmetic coding
- Optimizing brainfuck compiler
- Forcing a file’s CRC to any value
- Free small FFT in multiple languages
- Simple DEFLATE decompressor
- Primitive recursive functions
- Galois linear feedback shift register
- Fast skipping in a linear congruential generator
- Project Euler solutions
- How to implement the discrete Fourier transform
- Fast Fibonacci algorithms
- Karatsuba multiplication
- Reference Huffman coding
Rust
- Zeller’s congruence
- Time-based One-Time Password tools
- BitTorrent bencode format tools
- Binary indexed tree
- AA tree set
- Fast discrete cosine transform algorithms
- Sliding window minimum/maximum algorithm
- B-tree set
- The versatile sieve of Eratosthenes
- QR Code generator library
- Disjoint-set data structure
- Knuth–Morris–Pratt string matching
- Binomial heap
- Binary array set
- AVL tree list
- Next lexicographical permutation algorithm
- Forcing a file’s CRC to any value
- Free small FFT in multiple languages
- How to implement the discrete Fourier transform
C++
- Zeller’s congruence
- Macshift (Nayuki’s version)
- Time-based One-Time Password tools
- Summary of C/C++ integer rules
- Binary indexed tree
- Pervasive Displays e-paper panel hardware driver
- Fast discrete cosine transform algorithms
- Convex hull algorithm
- Near-duplicate features of C++
- Sliding window minimum/maximum algorithm
- sRGB transform library
- Undefined behavior in C and C++ programs
- B-tree set
- The versatile sieve of Eratosthenes
- QR Code generator library
- Disjoint-set data structure
- Fast Fourier transform in x86 assembly
- Bitcoin cryptography library
- Unsigned int considered harmful for Java
- Knuth–Morris–Pratt string matching
- Binomial heap
- Binary array set
- AVL tree list
- Tiny PNG Output
- Next lexicographical permutation algorithm
- NetPerSec (Nayuki’s version)
- Smallest enclosing circle
- Reference arithmetic coding
- Forcing a file’s CRC to any value
- Free small FFT in multiple languages
- Simple DEFLATE decompressor
- How to implement the discrete Fourier transform
- Reference Huffman coding
C
- Zeller’s congruence
- Summary of C/C++ integer rules
- Fast discrete cosine transform algorithms
- sRGB transform library
- Undefined behavior in C and C++ programs
- The versatile sieve of Eratosthenes
- Java Native Interface compared to Python/C API
- QR Code generator library
- Disjoint-set data structure
- Simulated annealing on pixel colors
- Unsigned int considered harmful for Java
- Knuth–Morris–Pratt string matching
- Native hash functions for Java
- Lowest SHA-512 value by brute force
- Tiny PNG Output
- Fast SHA-2 hashes in x86 assembly
- Next lexicographical permutation algorithm
- Forcing a file’s CRC to any value
- Free small FFT in multiple languages
- Fast Whirlpool hash in x86 assembly
- Fast SHA-1 hash implementation in x86 assembly
- Fast MD5 hash implementation in x86 assembly
- RC4 cipher in x86 assembly
- Tiny Encryption Algorithm in x86 assembly
- How to implement the discrete Fourier transform
x86 assembly
- A fundamental introduction to x86 assembly programming
- Fast Fourier transform in x86 assembly
- Bitcoin cryptography library
- Native hash functions for Java
- Lowest SHA-512 value by brute force
- Fast SHA-2 hashes in x86 assembly
- Fast Whirlpool hash in x86 assembly
- Fast SHA-1 hash implementation in x86 assembly
- Fast MD5 hash implementation in x86 assembly
- RC4 cipher in x86 assembly
- Tiny Encryption Algorithm in x86 assembly