GitHub Releasesから実行可能ファイルをダウンロードするCLIツールを作った

長らくZshのプラグインマネージャとして使用してきたZinitからsheldonへと移行するため、GitHub Releasesから実行可能ファイルをダウンロード・インストールするCLIツール gh-rd を Deno で作成しました。 github.com これは何? 経緯 Zinitをやめた理由 代…

自作シェルプロンプトを (8ヶ月前に) 作り直した - croque

数度本ブログ内で記事にしていますが、自作したシェルプロンプト almel を長らく使用していました。 ryooooooga.hateblo.jp ryooooooga.hateblo.jp 数点思うところがあり、シェルプロンプトを (8か月前に) 新たに作り直しました。 作成したプロンプトは croq…

Lazygitに投げたPRまとめ

この2年ほど、LazygitにちまちまとPull Requestを投げています。 マージされたものもなんだかんだでほどほどの数になったので、それぞれについて振り返ってみます。 ちなみに私は英語が大の苦手であるため、PRに書かれている英語はGoogle翻訳とパッションに…

自作Zshプラグイン・CLIツールの使用状況報告

ここ数年の間にいくつかの小さいZshプラグイン・CLIツールを作成しました。 頻繁に使用しているものもあればその実そうでないものもあります。本記事では現在の自作プラグイン・ツールの使用状況を報告します。 1. Almel 2. Zouch 3. zabrze 1. 正規表現によ…

ヘッダーオンリーのC言語向け単体テストフレームワークCUTEを作った

C99以降向けのヘッダーオンリーで動作する単体テストフレームワークCUTEを作成しました。 github.com モチベーション C言語のコードに対する単体テストを書く際、ごく簡単なものであれば assert() を使用することが多いと思います。 しかし、テスト対象が複…

自作Zshプロンプトを非同期対応した

自作のシェルプロンプト、almelを非同期対応させることで巨大なリポジトリ内での硬直を軽減し、使用感を向上させました。 github.com Almel とは almel はRust製の高速に動作するシェルプロンプトです。 現在はBash, Zsh, fishに対応しています*1。 以前の記…

Denoでcommitizen的なツールを作った

Denoでcommitizen互換のツールを作りました。 github.com commitizenはGitのコミットメッセージをいい感じにするためのツールです。 commitizenのようなツールには公式である commitizen/cz-cli の他に、streamich/git-cz や Go製の lintingzhen/commitizen-…

Tmuxinatorの代替ツールをDenoで作った

Tmuxinator の代替CLIツール qtmut *1 を作りました。 github.com 1. これはなに 2. 使い方 3. なぜ自作したか 3.1. 普段のTmuxの利用方法 3.2. Tmuxinator の導入 3.3. Tmuxinator と qtmut の思想の違い 2. なぜDenoを選択したか 3. まとめ *1:qtμt という…

Git 2.0.0から2.33.1までのDockerイメージを作った

Git 2.0.0から2.33.1までの各バージョンのDockerイメージを作りました。 hub.docker.com github.com Git のバージョンごとの挙動を検証したかったのですが、丁度いいDockerイメージが無かったので作りました。 ベースイメージは扱いやすいようにUbuntuを採用…

文脈を指定可能な自動展開されるglobal aliasを実現するZSHプラグイン zabrze を作った

ZSHにはglobal aliasという機能があります。 これは、行頭以外に入力された場合にも展開されるaliasです。 $ alias -g B='"$(git symbolic-ref --short HEAD)"' $ git push -u origin B # → git push -u origin [現在のブランチ名] 使いこなせれば便利そうな…

Sublime Text 4で追加された設定など

昨日 (2021/05/21)、Sublime TextのメジャーアップデートであるSublime Text 4がリリースされました。 www.sublimetext.com forest.watch.impress.co.jp デフォルトのカラースキームがMonokaiからMarianaに変わったり、Open GLによるGPUアクセラレーションが…

Dockerでカスタムsubcommandをあれする

Gitでは git-foo のような名前のスクリプトファイルを PATH の通っている位置に置いておくと、 git foo とするだけで呼び出せる便利な仕組みがあります。 本記事の趣旨はDockerでもそんな感じのことをしたいよね。というあれです。 実装 で、以下のような関…

テンプレートから新規ファイルを作成するCLIツール zouch を作った

例えば新しいプロジェクトを作成するとき、何かと新しいファイルを作成する必要があります。 README.md, LICENSE, .editorconfig, あるいはC/C++ならCMakeLists.txtやmain.cppなどをプロジェクトに含める必要があるでしょうが、 そのうちいくつかは毎度似た…

fzf+pmyでzshの補完をカスタマイズする

最近 relastle/pmy というツールにハマっています。 よき pic.twitter.com/ywqdDZmD4S— キラキラの虚無感 (@Ryooooooga) 2020年12月25日 (邪悪な正規表現を代償に)いろいろできる pic.twitter.com/Q0GMzD76zT— キラキラの虚無感 (@Ryooooooga) 2020年12月25…

Sublime Text 3からghqで管理されたリポジトリを開くプラグインを書いた

Sublime Text 3 から x-motemen/ghq で管理されたリポジトリを開くプラグインを書きました。 github.com なぜいま Sublime Text 3 高機能テキストエディタ Sublime Text が Atom と覇権を競い合ったのも今は昔、 ご存知の通りいまやGUIテキストエディタ界は …

x64セルフホスティングCコンパイラを書いた

前回: ryooooooga.hateblo.jp はじめに セルフホスト(自分自身をビルド)できるCコンパイラmoccを書きました。 github.com 前回はバックエンドをLLVMに頼っていたため、今回はx86_64向けのアセンブリを吐くようにしました。 基本的な設計はほぼ前回と同じです…

Almel v1.1.3 をリリースした

ryooooooga.hateblo.jp 自作shellテーマ、Almel を更新しました。 v1.0.xとの変更点は以下の通りです。 コードを全部書き直した コンフィグファイルの構造を変えた fish, bashに対応した 現在時刻を表示する time セグメントを追加 直前に実行されたコマンド…

zshのプロンプトテーマを自作した

自分用にzshのプロンプトテーマをRustで自作しました。 自分が常用しても問題ない程度の完成度になったので公開しました。 github.com 使用時の様子 セグメントの表示内容は左上から OS ユーザ名@ホスト名 (中間省略された) カレントディレクトリ Gitブラン…

セルフホスティングCコンパイラを書いた

セルフホスト(自分自身をビルド)できるCコンパイラnoccを書きました。 github.com はじめに 去年の夏あたりからCコンパイラを書くのが流行っていたのでやってみました。 例によって@rui314さんの8cc、9ccと低レイヤを知りたい人のためのCコンパイラ作成入門…

JITコンパイル時の関数呼び出しの扱い方

x86_64での関数呼び出し x86_64(以下x64)ではcall命令の呼び出し関数の指定を相対アドレスで行うため、JITコンパイルをする際はそのアドレスの取り扱いに苦労します。 #include <stdio.h> #include <string.h> #include <sys/mman.h> int main(void) { const char code[] = { /* * int f(voi</sys/mman.h></string.h></stdio.h>…

structured bindings(構造化束縛)を自作クラスで行えるようにする

はじめに structured bindings (構造化束縛) をstd::pair<>やstd::tuple<>以外の自作のクラスに対して適用するための方法をコード例込みで解説している日本語の記事が見つからなかったのでメモを兼ねて残しておきます。 結論 std::tuple_size<T>を特殊化する st</t>…

MSVCでempty base optimizationの効かないパターンと対策

問題 2つ以上の空クラスを継承するようなクラスについて、MSVCで empty base optimization (EBO) が期待した通りに働かず、余分な領域が消費される。 struct Empty1 {}; struct Empty2 {}; // 1つの空クラスを基底に持つ struct Derived1 : Empty1 { int i; …

最近プリプロセス時処理が楽しい

はじめに Boost.Preprocessorの実装を調べているうちに色々出来ることが分かって楽しくなってきた。基本的なことから曲芸的なことまで適当にパターンをメモっておきます。 シンボルの結合 #define PP_CAT(a, b) PP_CAT_I(a, b) #define PP_CAT_I(a, b) a ## …

数式微分器の作成 (2) 式木の最適化

前回の記事の続きです。 数式微分器の作成 と D言語での木走査 - 茅の下 前回の内容 前回の記事で数式微分器を作成したが、出力が繁雑になった。 結論 今回はそれを解消するために式木に対してより強力な最適化を掛けるようにした結果、出力がこましになった…

はいふり 人称行列

`はいふりのキャラクター間の一、二、三人称を纏めています。 docs.google.com 現在本編とOVA前編・後編、加えてローレライの乙女たち3話まで完了しています。 収集の条件は大まかに、 呼び掛ける側が呼ばれる側の名前を認識していること。 (例えば、2話気絶…

数式微分器の作成 と D言語での木走査

モチベーション 無性に微分がしたくなった。 結論 出力が頭悪い。 D言語と振り分け式の外部訪問器は相性がいい。 特に数学的におもしろい話はありません。 はじめに 偏導関数値を求める方法には、数値微分 や (トップダウン/ボトムアップ)型自動微分などがあ…

C++17 optionalの実装について

C++17で、optionalが標準ライブラリに入ることが決定した。そして、C++17 optionalはconstexprに対応している。以前からその実装について気になっていたので調べたついでに少しまとめる。 optionalとは 無効値を取ることのできる型である。C++17 optionalはB…