生涯未熟

生涯未熟

プログラミングをちょこちょこと。

TebataというGoライブラリを作りました

最近色々とPubSubのプログラムをGoで書いていて、「こんなライブラリほしいなぁ」と思って生まれたのが、このTebataです。

github.com

どういうライブラリ?

Tebataは一言で言うと「シグナルハンドラ」です。

Subscriberを作っている時に、よくこういう処理を書いていました。

こういう感じの「シグナルを受け取ってホニャララな処理」を簡単に書くためのライブラリです。

既存ライブラリを調べる

作る前に既存ライブラリを調べたのですが、近いのがこちらのライブラリでした。

github.com

「おっ、これいいじゃん」と思ったものの、わざわざ構造体拵えて、TearDownを表す構造体メソッドを拵えて・・・ってのが面倒でした。
個人的に、実行したいfunctionを流し込んでそれを実行してくれる、くらいの感じが欲しかったのです。

あと、シグナルをキャッチしてTearDownが実行されたらプログラムが終了するのも汎用性が無くて勿体無い、という気持ちもありました。

で、作った

で、出来上がったのがTebataです。

使い方は簡単で、 tebata.New() の引数にキャッチしたいシグナルを指定して、

で、実行したいfunctionを流し込んでいきます。

これで、設定したシグナルを受け取った時にfunctionが動き出します。

書き直してみる

さて、最後に例として出したsubscriberをTebataで書き直してみます。

なんかあまり変わってない感じですが、もうちょっと複雑な処理だと効果が実感できるような気がします。

おわりに

というわけで、良かったら使ってみて下さい。
どんなご意見でも良いのでIssueやらPRやら送って頂けると嬉しいです。

Audibleは果たしてどこまで使えるのか?

AmazonにはAudibleと呼ばれるオーディオブックサービスがあり、以前見かけた時に気になっていたので今回どこまで使えるのか試してみました。

f:id:syossan:20180217130245p:plain

オーディオブックとは?

オーディオブックとは、書籍を朗読したコンテンツのことで、国内ではAudibleの他にFeBehontoなどの配信サービスが存在します。

スキマ時間を使って本を聴くことが出来、手が塞がる単純作業の合間を有効活用することが可能となります。

Audibleの使用感

早速、Audibleの使用感についてなのですが、主に以下が挙げられます。

  • 聴いていて違和感の無い朗読
  • 豊富な書籍ラインナップ、だが・・・
  • 声優さんもナレーション

聴いていて違和感の無い朗読

聴き始める前はあまり朗読の質に期待はしていなかったのですが、聴いてみると朗読家の皆さんのレベルが高く、
一部英語になっている箇所については別途外国の方が朗読していたり、特殊な形態の本(単語帳など)はそれぞれの特色に合わせてカスタマイズされていたりします。

また機能として、朗読スピードを0.75倍〜3倍まで調節することが出来ます。
ただ、人間が聴き取れる範囲は2倍が限界な感じがしていて、「2.5倍や3倍を聴き取れる人はいるのだろうか?」と思ったりしたのですが、一応そういったハイスピード朗読も存在します。

f:id:syossan:20180217133728j:plain:w300

豊富な書籍ラインナップ、だが・・・

Audibleにある書籍のラインナップですが、これがなかなか豊富にあります。

f:id:syossan:20180217133805j:plain:w300

特に小説は古いものから新しいものまで種々様々揃っている印象を受けました。

アニメ化もされた柳広司先生のジョーカー・ゲームがあったのですが、この本を渋い声で朗読されるとたまらないものがありました。
ちなみに、こちらは続編のダブル・ジョーカーや、パラダイス・ロスト、ラスト・ワルツもあります。

また、全体を眺めるとラノベや英語に関する書籍も豊富に存在します。

あとは、意外な所でアダルトカテゴリーが豊富です。
男性向け・女性向けともにコンテンツが用意しており、驚きました。

f:id:syossan:20180217133830j:plain:w300

ただし、問題点として一部カテゴリーが機能していないという面もあります。
一例として、「科学・テクノロジー」というカテゴリーがあるのですが、あまり書籍数が無いように見受けられます。

声優さんもナレーション

書籍を探していてビックリしたのですが、一部の本では声優さんがナレーションしているものもあります。
数は決して多くはないのですが、釘宮 理恵さんや大塚 明夫さんなどの大御所もナレーションしているものもあります。

f:id:syossan:20180217134036p:plain

声優さんの聞き慣れた声で体験するオーディオブックは、また格別なものがありますのでファンの方は一ヶ月のお試し期間中に試してみるのもいいかもしれません。

まとめ

このような感じの使用感になります。

書籍のラインナップに偏りがある感じがしますので、人によっては使えると言えるかもしれません。
英語学習者や、小説・ラノベ好きな方はAudibleがフィットする可能性は大のような気がします。

というわけで、以上ザッと試してみた感想でした。

【Go】Unixドメインソケットでのinterruptを使った終了処理

GoでUnixドメインソケットを組んでいる時に、掲題が疑問だったので調べてみました。

Why?

最初このようなListenerのコードを書いていました。

単純に net.Listen/tmp/connection.sock をlistenして、 listener.Accept でコネクションを待ち受けているという非常に簡単なコードです。

で、このプログラムを普通に動かしてSIGINT Signal で割り込みすると、本来削除されるべきsocketファイルが存在したままとなり、再度プログラムを動かすとエラーとなります。

これをどうにかしたかったのですが、 listener.Accept で待ち受けている状態で、どうやったら signal.Notify で受け取ったシグナルを元にプログラムを終了させるのか、パッと考えつきませんでした。

How

インターネットをふらついていると、以下のようなコード片を発見しました。

golang unix domain socket · GitHub

このコード片の server.go にお目当てのコードがありました。

どういうことかというと、メインのスレッドは listener.Accept で待ち受けておいて、goroutineで作った新しいスレッドでSIGINT Signalをキャッチして、プログラムを終了させるという流れです。

goroutineのスレッド側でSignalをキャッチする、というのがちょっと思いつきませんでした。

kirimori v0.0.4 update

OSSメンテしないとな〜と突然意欲が湧いてきたのでやりました。

github.com

内容

vim pluginの検索機能をつけました。
こんな感じのやつです。

$ kirimori search Shougo
Total: 52

Plugin Name                        Short Description
shougo/unite.vim                   🐉  Unite and create user interfaces
shougo/vimproc.vim                 Interactive command execution in Vim.
shougo/neocomplete.vim             Next generation completion framework after neocomplcache
shougo/neosnippet-snippets         The standard snippets repository for neosnippet
shougo/neomru.vim                  MRU plugin includes unite.vim/denite.nvim MRU sources
shougo/neosnippet.vim              neo-snippet plugin
shougo/neocomplcache.vim           Ultimate auto-completion system for Vim.
shougo/vimshell.vim                🐚  Powerful shell implemented by vim.
shougo/unite-outline               outline source for unite.vim
shougo/vimfiler.vim                📁  Powerful file explorer implemented by Vim script
shougo/deoplete.nvim               🌠  Dark powered asynchronous completion framework for neovim/Vim8
shougo/neoyank.vim                 Saves yank history includes unite.vim history/yank source.
shougo/neoinclude.vim              Include completion framework for neocomplete/deoplete
shougo/context_filetype.vim        Context filetype library for Vim script
shougo/unite-help                  help source for unite.vim
shougo/vinarise                    Ultimate hex editing system with Vim
shougo/vinarise.vim                Ultimate hex editing system with Vim
shougo/unite-session               unite.vim session source
shougo/junkfile.vim                Create temporary file for memo, testing, ...
shougo/echodoc                     Print documents in echo area.

他所様のAPIを叩いているため、上位20件しか表示されません。ご了承下さい。

今後

細々とメンテしたいとは思ってます。
何か欲しい機能とかありましたらISSUEに書いて頂けるとありがたいです。