avatar

@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 besed 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 icon

Neovim Frontend built on Electron, Polymer and Flux. Neovim editor is composed as Web Component and users can extend UI by reusable Web Components, HTML, CSS and JavaScript. This frontend aims providing UI extensibility without loosing Vim's comfortability on editing documents and codes. NyaoVim provides nice plugin architecture which enables to bundle Web Component HTML file for UI in Vim plugin directory. It means that Vim plugin managers can also manage UI plugins as other normal plugins.

NyaoVim screenshot

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

Shiba icon

Shiba is a rich markdown previewer. Preview is automatically updated and report errors from a linter (e.g. remark-lint). You can preview markdown document which includes emoji, code fence, math equation and mermaid.js diagrams.

Shiba screenshot

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

Trendy icon

Trendy is a GitHub Trending Repositories watcher & manager. It watches the trending page and sends you notification when finding new comer repositories. You can manage the repositories and be in the loop of trend. This app is also available as isolated-window app. Trendy works on Linux, OS X and Windows.

Trendy Screenshot

Tilectron

Tilectron icon

Recently our desktop PC gets very wide screen (4K monitar, 5K iMac, ...). However major browsers provides only tabs feature and we can only one web page at once. When we want to see multiple pages at once, we must open them in another window.
So I'm creating (WIP) Tilectron. It aims to provide flexible and space-effective tiling window management (fallback to mobile page on narrow window), powerful keyboard control features (even moving cursor). It is created on robust Chromium platform using Electron, React.js and Redux.

Tilectron screenshot

... 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 (clever-f-reset) to your favorite key. At last, you can customize the behavior of the mappings and features.
You can try it ONLINE using vim.js.

clever-f.vim screenshot
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 screenshot

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.

issue number completion link URL completion emoji completion

github-complete.vim provides completion for emoji, user name, repository name, issue number and link URL. You can see screenshots of them in README.

... And 60+ More