@rhysd
I dogs and creating softwares which make coding more fun.
Programming Language
I enjoy thinking about programming every day. Creating programming language provides a chance to think it in terms of programming language implementation.
Dachs
Dachs is a general-purpose programming language designed to be enjoyable, statically typed and dog-friendly. Dachs has light syntax inspired by Ruby, is aware of variables' immutablity, and supports OOP with Uniform Function Call Syntax (UFCS). Dachs is developed with C++14, Boost C++ Libraries and LLVM. Below is a Fizz Buzz example using some language features of Dachs. You can see more samples.
import std.numeric func step_to(var first, last, block) for first <= last block(first) first += 1 end end func fizzbuzz(n, block) 1.step_to n do |i| s := case when i % 15 == 0 then "fizzbuzz" when i % 3 == 0 then "fizz" when i % 5 == 0 then "buzz" else i.to_string end block(s) end end func main fizzbuzz 100 do |s| println(s) end end
Crisp
Crisp is a Lisp dialect based on Make a Lisp project. It is ready for self-hosting and a toy box for my dynamic language ideas. I wrote this with Crystal language.
Crisp = Crystal + Lisp.
(do (def! product (fn* (n) (if (= 1 n) 1 (* n (product (- n 1)))))) (prn (product 10)) )
Desktop Applications
I'm creating some desktop applications with Electron to improve my daily development
NyaoVim
NyaoVim is built on Electron framework hence it works on Linux, OS X and Windows and users can use powerful APIs and web technologies (Node.js, Electron APIs, npm packages, Neovim msgpack-rpc APIs, Web Standards, ...).
Shiba
This app aims to work with other text editors nicely. It provides customizability and keyboard shortcuts. Shiba is built on Polymer and Electron, works on Linux, OS X and Windows.
Trendy
Tilectron
... And More
Vim Plugins
I love Vim text editor to write codes and documents. So I'm writing some Vim plugins
clever-f.vim
clever-f.vim extends f, F, t and T mappings for more convenience. Instead of ;, f is available to repeat after you type f{char} or F{char}. F after f{char} and F{char} is also available to undo a jump. t{char} and T{char} are ditto. This extension makes a repeat easier and makes you forget the existence of ;. You can use ; for other key mapping.
In addition, this extension provides many convenient features like target character highlighting, smart case matching and so on. If you want to reset the searching character without moving cursor, map
You can try it ONLINE using vim.js.
input: fh f f e fo f move : _---------->_------>_---------->_->_---------------->_->_ input: F F move : _<-----------------------------_<-_ text : hoge huga hoo hugu ponyo
vim-clang-format
vim-clang-format formats C, C++, Objective-C codes using clang-format. I think that it is good way to determine code style in team and format codes by formatter automatically in order to avoid bikeshedding.
vim-clang-format provides automatic formatting and useful operator mappings to format codes.
committia.vim
When you type git commit, Vim starts and opens a commit buffer. committia.vim improves the commit buffer to provide more pleasant editing on commit message.
committia.vim splits the buffer into 3 windows; edit window, status window and diff window. You no longer need to repeat scroll and back to the former position in order to see a long commit diff. If the width of Vim window is too narrow (160 characters by default), committia.vim falls back to single column mode, which has 2 windows; edit window and diff window.
vim-crystal
vim-crystal is a filetype plugin for Crystal language. It provides fundamental features to write Crystal code such as syntax highlight, indentation, filetype detection. vim-crystal also provides official tools integration such as crystal-tools, formatter, spec runner and syntax checking. Please see screenshots in README.
github-complete.vim
github-complete.vim is a completion plugin to complete things related to GitHub. It generates, caches and contextually shows candidates of completion via GitHub API. You can use them as omni completion in Vim.
github-complete.vim provides completion for emoji, user name, repository name, issue number and link URL. You can see screenshots of them in README.