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