詩と創作・思索のひろば

ドキドキギュンギュンダイアリーです!!!

Fork me on GitHub

ghq など、github.com/motemen 下のリポジトリを x-motemen Org に移しています

もうけっこう前のことになりますが、github.com/motemen 下にあったリポジトリの一部を github.com/x-motemen organization に移管しました。コードやバイナリの配布形式によって、ユーザ側で対処する必要があったりなかったりしますが、それぞれのリポジトリにおける指示(あれば)に従ってもらえればと思います。

もともとこれらは id:Songmuid:itchynyid:onk らにアクティブにメンテされているもので、motemen 個人はほぼ完全にノータッチとなっているのが現状です。そういうリポジトリは他にもあるので、今後も随時このような移管をやっていくつもりです。よろしくお願いします。

Organization 移管のメリット

で、実際的な話として、個人リポジトリにコラボレータとして追加することと organization のリポジトリとすることの差なんだけど、与えられる権限が違うっぽい。

とくに個人リポジトリではコラボレータに admin 権限を与えることができず、そうすると webhook の設定ができないので、メンテナがリポジトリを積極的に改善しよう! と思ったときにいきなり出鼻をくじかれることになってしまう(とくに最近だと GitHub Actions 化しようとしてやられる)。

こちらは org 化していないリポジトリ(gore)のコラボレータ管理画面。Write 権限のあるなししかない。

f:id:motemen:20200302133140p:plain

こちらは org 化したリポジトリ(ghq)のコラボレータ管理画面。songmu さんに admin 権限をあげて、自分は Write みたいにできている。

f:id:motemen:20200302133159p:plain

移管の経緯

大きなきっかけは ghq の v1 リリース。メンテナの songmu さんと会ったときに、この際 ghq organization みたいなのを作ってそこに置きます? というような話をしたんだけど、motemen/ghq でひとつの名前として認知されてるからなー、という話もあり、その時はそのままの名前で行くことになったのでした。

OSS(とも思ってないが)を別の名前の下に移す……ということにはなかなかアンビバレントな感情があって、大方の人間と同じく自分もいわゆる承認欲求を燃料にしてこれまで生きてきたので、自分の作ったものが使われたり、言及されることはとても嬉しい。そういう面では、自分の名前から剥がしてしまうことには心理的な抵抗が長いことあった。

しかし幸いなことに自分のソフトウェアが多くの人に使われるようになってくると、自分にとって負の影響も大きくなってくる。つまりイシューや pull request がやってくるようになる。はじめの頃はこういう直接の反応がやってくるのが嬉しいので丁寧に応対しようとするけど、数は多くなくても、一つひとつがその裏に人間の意図や要望のあることであるし、否応なくコミュニケーションを必要とするので、疲れてしまう。そもそも自分は人間とアレコレしたくないからコンピュータを触っているのであった(今どきこういう考えをしている人は少ないのかもしれない)。それなのになせこんなことに……。他人に認められたいのに、他人とのコミュニケーションを拒む、という姿勢自体がはらんでいる歪みだったのかもしれない。

もうひとつ重要なのは、リポジトリを公開した時点で、そのソフトウェアによって解決したかった自分の課題はほぼ満たされているので、それ以上に手を加えるモチベーションがない、ということだった。公開したソフトウェアはそこで硬直してしまっていて、そこに変更を加えることの喜びは、他人にどんな風に使われているか分からないものを変更するコストを上回らない。自分で書いててひでーなとも思うが、そういうことである。こういうのをひっくるめて、自分の書いたものがOSSとも呼べない(というかバザール的でない)な、と思っている。

それでも使われているものは身近な人がメンテナになってくれていて、イシューに回答したりリリースまでやってくれていたりする。それはありがたいことで、コミュニケーションを拒否している罪悪感はいくらか和らぐものの、もうおれの持ち物じゃなくね? という感覚は大きくなっていく。

とまあこんなふうに、自分のものであるという主張には固執しつつ、しかし他者からの要望に応えもしないでいる、ということにだんだんと嫌気が差してきて、冒頭に書いたように org 化の話が出てくるわけです。結局その時は見送ったわけだけど、それでもそのアイデアは頭の中に残っていて、ghq 以外のソフトウェアも他の人にメンテしてもらってるものはひとつの org に移してしまおうと画策はしていた。Apache Incubator に倣って motemen-incubated とか考えてたんだけど、x-motemen という名前を思いついて、試しに organization 作成フォームに入力していたら作れてしまったので、そのまま利用したという流れであった。x- には卒業感があって、いいなあと自画自賛する次第である。

結局自分の名前残っとるやんけ、との指摘はその通りで、しかし自分の中ではもはやあまり重要でもない。

それにしても、移管と直接関係するわけではないけれど、メンテナンスされるソフトウェアの価値というものをひしひしと感じている昨今であり、brew upgrade ghq して新しいバージョンが手元に降ってくることには、自分が最初のユーザであるからこその喜びがあると思う。こればかりは特別な体験です。

テキストを画面に流していくアプリをElectronで作った

この記事は、はてなエンジニア Advent Calendar 2019の12日目の記事です。


任意のテキストを画面に流していきたいことってありませんか? ぼくはあります。定期的にエンジニアみんなの前でスライドを映しつつ話す機会があって、そんなとき Slack で実況的に反応がなされることがあるんだけど、Slack 映しっぱなしにするわけにもいかず、話し終わってあとからコメントに気づく……ってこともまあまあある。そんなとき、画面のスライドに重ねてコメントが流れてくれると自分も聞き手も共有できてうれしい。わけです。

それを達成するための1ステップとして、任意のテキストを画面に次々流してくれるアプリをElectronで作りました。

GitHub - motemen/TextCast

じつは過去のこのエントリたちも、「Slack の発言をリアルタイムにデスクトップに流したい」という欲望からうまれたものです:

使い方

ビルドしたものの配布までは作り込めてないので、git cloneyarn install した上で yarn dev で起動してみてください。 http://localhost:4140 で HTTP サーバが立つので、ここに POST リクエストを送るとテキストを描画できます。

  • curl localhost:4140/post -d text={text} で都度
  • curl localhost:4140/stream -T - でストリーミング

分かりづらいかもしれないけどスクリーンショット。デスクトップの右下からにゅっと出てきて、時間が経つと消える感じ。

f:id:motemen:20191212183358g:plain f:id:motemen:20191212145632g:plain

ニコニコ風にしてみたい気持ちもあるけどそれはみなさんの叡智に期待したい!!!

Slackとの連携

そしてSlackと連携するには! 以前の2つのエントリを組み合わせて……

こうするのじゃ:

slack-stream-json -f -i | \
    jq --raw-output --unbuffered 'select(.type == "message" and (.subtype | not) and .channel.name == "engineer") | "\(.user.name): \(.text)"' | \
    curl -s -T - localhost:4140/stream

#engineer チャンネルの内容がどんどん流れてくる! うおおこれややりたかったことは! やったね。コンテンツ的にスクショはありません。

Electron まわりの話

ウィンドウを透明化する

ウィンドウを透明化(マウスイベントを奪わないで)できんのかな~ってのが最大の障壁だったけど、以下の記事の通りにやってたらできてしまった。

qiita.com

electron-webpack

electron-webpack

Electron よくわからない状態からはじめたので、シュッとはじめたくてこういうやつを使った。TypeScript 化とかもドキュメントにある通りやればすぐできる。 バージョン番号を package.json から取りたくて少しだけ webpack 設定をいじる必要があったのだが、それもちょちょっと書けば実現できたのでたいへん楽だった。


そんなわけで、最近作ったアプリの紹介でした。どうぞご利用ください。 はてなエンジニアアドベントカレンダー2019、明日の担当は id:takuji31 です。よろしくお願いします!!!

漢字スライダー

会社では基本的にすべての場でインターネットネームによる運用なんだけど、たまに戸籍ネームが必要になることがあって、そういう時、とても威圧感がある。威圧感はどこからやってくるの? それは漢字の画数の多さだと思う。その着眼のもと、漢字の画数をコントロールできる「漢字スライダー」を作りました。

motemen.github.io

スライダーで画数をコントロールできます。文字列は好きに編集できるよ。

f:id:motemen:20191205202901g:plain

威圧感を自由に上げ下げできて、さまざまなシーンで活躍しそうですね!

unihan-etl で日本語の漢字の一覧を取得する

漢字とその画数の一覧は、ユニコードコンソーシアムによる Unihan というやつから取得するのがよさそうだった。単純に漢字(/\p{Han}/)を抽出すると見慣れない中国語の漢字まで含まれてしまうので、日本語の漢字のみに絞りたい。今回は kJis0 というフィールドを利用することで、JIS X 0208 の文字だけを対象にできそうなことがわかった。

Unihan のデータ抽出/加工には、unihan-etl という Python 製のツールが便利だった。以下のコマンドで、Unihan からデータをダウンロードして、それぞれの漢字の画数と、JIS X 0208 におけるコードを CSV で取得できる。

% unihan-etl -f kTotalStrokes kJis0 -d /dev/stdout

ちょっと余談だけど Python の argparse ではひとつのフラグに複数の引数を与えるとき上記のように書く(-f kTotalStrokes -f kJis0 とか -f -f kTotalStrokes,kJis0 とかではなく)ようで、ちょっとハマった。

はてなで一緒に働きませんか?