About
“What we do in life, echoes through eternity.” — Maximus
I’m a vegan, type INTJ 1w2, open source enthusiast, and computer engineer who fell in love with computer programming as a teenager and hasn’t looked back. :-) You can send me an encrypted message at the address specified in my public key.
- Favorite things
- Notable works
Favorite things
“Those who are possessed by nothing possess everything.” — Morihei Ueshiba
Inspiration
“Do not imitate the old masters. Seek what they sought.” — Basho
Speech:
- Off the Menu by Philip Wollen
- The Great Dictator by Charlie Chaplin
- Four Ways of Letting Go by Ajahn Brahm
Ideas:
- Inventing on Principle by Bret Victor
- Minimum Viable Product by Henrik Kniberg
Work:
- Professional Software Development by Robert C. Martin
- Agile Everywhere! by Henrik Kniberg
- #NoEstimates by Allen Holub
- Uncomfortable with Agility by Andy Hunt
Code:
- Introduction to Clean Code by Robert C. Martin
- Architecture: The Lost Years by Robert C. Martin
- Stroop, Whorf, and Elixir by Dave Thomas
- Functional Design Patterns by Scott Wlaschin
- Transformation Priority Premise by Robert C. Martin
- Functional Programming: What? Why? When? by Robert C. Martin
- Faults, Scaling, and Concurrency by Joe Armstrong
Fun:
- One of Zombies by Fernando Guillรฉn Suรกrez
- Monads are confusing? by Scott Wlaschin
- By Fated Appointment Only by Why the Lucky Stiff
- Shaving with Ockham by Jim Weirich
- The Y Combinator by Jim Weirich
Lore:
- The Cult of Codethulu by Anonymous Embedded Programmer
- The Call of Codethulhu by Alex Papadimoulis
- The Complicator’s Gloves by Alex Papadimoulis
Operation
“A bad workman blames his tools.” — English proverb
- Glove80 ergonomic keyboard ⇒ see my configuration
- Engram keyboard layout ⇒ see my review and my fork
- Dvorak keyboard layout
- Elixir programming language
- Ruby programming language
- Linux operating system
- Tamzen monospace font, my fork of Tamsyn
- Gruvbox color scheme, adapted to terminal
- tmux terminal multiplexer
- wmii window manager, configured with Ruby
- Vim text editor
- Zsh interactive shell
- Git version control system
- LyX document processor
- Graphviz graph visualization software
- LilyPond music engraving system
- Pomodoro Technique for time management
Depiction
“Water too pure has no fish.” — Caigentan
- Children of Heaven by Majid Majidi
- Color of Paradise by Majid Majidi
- Baran (Rain) by Majid Majidi
- The Willow Tree by Majid Majidi
- Ikiru (Living) by Akira Kurosawa
- Harakiri (Dishonor) by Masaki Kobayashi
- The Hidden Blade by Yoji Yamada
- Sorcerer by William Friedkin
- Hana-bi (Fireworks) by Takeshi Kitano
- The Great Dictator by Charlie Chaplin
- Pushpak (Airlift) by Singeetham Srinivasa Rao
- Jour de Fete (Festival) by Jacques Tati
Philosophy
“First intention, then enlightenment.” — Buddha
“Mastering others is strength. Mastering yourself is true power.” — Laozi
“A man ought to live in this world like a lotus leaf, which grows in water but is never moistened by water.” — Swami Vivekananda
“Courage is standing up for what you believe in, even when you cannot win.” — Goomoonryong
“If you think that you will be inferior in doing something, you will be on that road very soon.” — Hagakure
“Why curse the darkness when you can light a candle? For all the darkness in the world cannot extinguish the light of a single candle!” — St. Francis of Assisi
“There is something to be learned from a rainstorm. When meeting with a sudden shower, you try not to get wet and run quickly along the road. But doing such things as passing under the eaves of houses, you still get wet. When you are resolved from the beginning, you will not be perplexed, though you still receive the same soaking. This understanding extends to all things.” — Hagakure
“Iron is full of impurities that weaken it; through forging—by exposure to heat, cold, and hammering—the impurities are forced out and the iron is transformed into razor-sharp steel. Human beings develop in the same fashion.” — Morihei Ueshiba
“Falling down a flight of one thousand stairs begins with slipping on the first step.” — Confucius
“Holding onto anger is like grasping a hot coal with the intent of throwing it at someone else; you are the one who gets burned.” — Buddha
“One often meets his destiny on the road he takes to avoid it.” — Oogway
“I’m tired of trying to do something worthwhile for the human race, they simply don’t want to change!” — August Dvorak
“Everything you do in life will be insignificant, but it’s very important that you do it.” — Mahatma Gandhi
“Do good and happiness will follow; but don’t get caught up in your good deeds. Forget your past and don’t place any hope on the future. Don’t regret the past… because if you do, it will consume you and you’ll find no peace.” — Phra Khru Bah, speaking to orphaned children.
“You believe a man can change his destiny? — I believe a man does what he can, until his destiny is revealed.” — Katsumoto & Algren
“He spirals down cold barren space as his safety rope spins silently above him in the everlasting expanse of Mt. Everest” — ???
“In the Kamigata area, they have a sort of tiered lunchbox they use for a single day when flower viewing. Upon returning, they throw them away, trampling them underfoot. The end is important in all things.” — Hagakure
Notable works
“When you don’t create things, you become defined by your tastes rather than ability. Your tastes only narrow and exclude people. So create.” — Why the Lucky Stiff
Academic research
“A jug fills drop by drop.” — Buddha
Kurapati, S. N. (2007). Specification-driven functional verification with Verilog PLI & VPI and SystemVerilog DPI. Masters thesis, University of California, Santa Cruz. [PDF] [HTML]
Kurapati, S. N. (2005). A Brief Survey of High-Level Approaches to Implementing Distributed Applications. Unpublished manuscript, University of California, Santa Cruz. [PDF] [HTML]
Kurapati, S. N. (2004). Addiction to Massively Multi-player On-line Games: An Ethical Analysis. Unpublished manuscript, University of California, Santa Cruz. [PDF] [HTML]
Graphical interface
tamzen-font: A programmatic remix of the Tamsyn monospace font.
userstyles: Usability overrides for Web sites and applications.
Telugu input methods
Ways of typing the Telugu language into a computer:
RTS with SCIM: using SCIM input method framework.
RTS with IIIMF: using IIIMF input method framework.
wmii window manager
I have contributed far too many patches to list them all here.
sunaku.wmiirc: My wmii configuration powered by Ruby and YAML.
dwm window manager
spawn_cwd: Spawn from focused app’s working directory. See article.
sunaku.dwm: My dwm configuration with Ruby status bar.
Textual interface
dasht: Search API docs offline, in your terminal or browser.
tmux terminal multiplexer
Patch: Add support for 24-bit RGB colors. See article.
tmux-layout-dwindle: Dwindling binary space partitions. See article.
Zsh interactive shell
- zsh-history-substring-search: Emulates the Fish shell’s history search.
(Neo)Vim text editor
sunaku.vim: A modular Vim configuration: not a single, giant vimrc file!
vim-unbundle: Fast & lazy bundle loader: a 50-line alternative to Pathogen.
vim-shortcut: Discoverable shortcut system for Vim, inspired by Spacemacs.
vim-dasht: Integrates the dasht offline API search engine into (Neo)Vim.
vim-hicterm: Highlights terminal color code numbers (think of
ctermfg
).
vim-ruby-minitest: Highlighting & completion for MiniTest.
vim-ruby-shoulda-context: Highlighting & completion for shoulda-context.
vim-test-unit-must: Highlighting for test-unit-must assertions.
Machine interface
Elixir programming language
Ruby programming language
Interpreter embedding
- ruby-coroutine-example: How to embed Ruby inside C coroutines.
Writing documentation
md2man: Markdown to UNIX manpage converter.
binman: UNIX manpages for executable scripts.
erbook: Write books, manuals, and documents in eRuby.
Template rendering
- ember: eRuby template processor.
Hardware testing
- Ruby-VPI: Ruby interface to IEEE 1364-2005 Verilog VPI.
Software testing
tork: Runs tests as they change, in parallel.
guard-tork: Guard integration for Tork.
detest: Assertion testing library for Ruby.
test-unit-must: Selfish “must” assertions for Test::Unit.
Project maintenance
- inochi: Infrastructure for Ruby projects.
Window management
rumai: Ruby interface to 9P2000 protocol and WMII window manager.
Operating system
Static blogging
readably: Static blogs: YAML + Slim → HTML5 + Zenburn.
rassmalog: Static blogging with YAML and eRuby.
Web translation
- babelfish: Ruby interface to Yahoo! BabelFish translation service.
Language improvements
Equal rights for
Hash
(likeArray
,String
,Integer
, andFloat
classes)- Establish
#to_h
convention for turning objects intoHash
. - Define
NilClass#to_h()
to convertnil
into an emptyHash
. - Add
Kernel#Hash()
for turning objects intoHash
strictly. - See associated equal_rights_for_hash gem.
- Establish
Add
Object#singleton_class
as shortcut toclass << object; self; end
Add
String#byteslice()
to slice strings as bytechar
s, notwchar
sAdd
File::write()
as shortcut toFile.open(...) {|f| f.write(...) }
Add
File::FNM_EXTGLOB
flag for{a,b}
alternation inFile::fnmatch?()
.Embed Ruby inside co-routines such as libpc, pthread, and ucontext.
Order nested
Kernel#at_exit()
execution according to C’satexit()
.Consistency between
Hash::[]( Array )
andHash::[]( *Array )
constructors.Improve power-efficiency by reducing CPU wakeups in timer thread.
UNIX shell environment
“Simplicity is the heart of the UNIX philosophy. The more code lines you have removed, the more progress you have made.” — The Suckless Philosophy
- home: Tales from my home directory (dot files & bin scripts).
Cron jobs
admit1: Admits only one instance of the given command to run at a time (by running it only if there are no other instances already doing so).
canary: Like a canary in a coal mine, this program exists to vocalize failures.
pigeon: Like a carrier pigeon, this program exists to convey changes in status.
recur: Repeatedly runs commands according to a given schedule until killed. Useful for tailing log files that rotate at the end of each day/hour.
For loops
File system
du-h: Disk usage, with live preview, sorted in human friendly format.
sort-h: Reimplementation of
sort -h
for systems with a very old sort(1).ls-summary: Counts the number of different kinds of files in a directory.
Desktop integration
yank: Copies from terminal to clipboard, even across nested tmux/SSH sessions! See article.
xcd: Runs command inside working directory of currently focused X11 window.
edit-text-field: Edit currently focused text field in GVim.
screencast-window: Take a video capture, in GIF format, of a single window.
Text alignment
align-columns: Vertically aligns columns, which are delimited by a user-defined regular expression, that are present in the input given on STDIN.
align-table: Same as align-columns(1) above, but handles multiple delimiters.
Text wrapping
wrap-text: Smarter handling of crown margins than
fmt -c
. See article.wrap-comment: Word wrapping for source code comments.
Software development
git-rebase-autocon: Automatically resolves Git merge conflicts. See article.
curl-har: Replays HAR sessions (from Webkit browsers) using curl(1).
Software testing
inotifytest-elixir-mix: Tests your Elixir project files when they change.
inotifytest-elixir: Tests your Elixir source code files when they change.
inotifytest-ruby: Tests your Ruby source code files when they change.
inotifytest-racket: Tests your Racket source code files when they change.
inotifytest-sml: Tests your Standard ML source code files when they change.
Project management
floss-rebase: Reapplies the stacked branch architecture: master => other => patch => minor => major
floss-merge: Merges all branches up to and including current branch into master branch.
floss-changes: Prints release notes ranging from the current branch to the master branch.
floss-reflect: Updates all text files in the project that mention the current version and/or date to match the first version and date from the HISTORY_FILE.
floss-commit: Creates a new commit or updates an existing commit that is labelled with the first version and date from the HISTORY_FILE.
floss-publish: Publishes manuals to the GitHub pages website after a project release.
Format conversion
iterm2xrdb: Converts iTerm2 color schemes into xrdb(1) format.
xrdb2hterm: Converts xrdb(1) color schemes into Chrome Secure Shell preferences.
C programming language
knights-tour: Knight’s Tour algorithm parallelized via GPGPU.
simple-ftp: A rudimentary FTP server and command-line client.
Javascript programming language
jquery-horizoll: Horizontal screen scrolling with automatic realignment.
ofc2_to_png: Renders “Open Flash Chart 2” JSON charts as PNG images.