読者です 読者をやめる 読者になる 読者になる

c91とか年が明けた話とか

おくればせながらあけましておめでとうございます 今年もよろしくお願いいたします 今日知ったのですが年賀のあいさつ(というにはいささか遅いですが)は句読点を使わずに書くと良いそうです 曰くおめでたい感じを区切ることのないようにとのことです

こうやって書いてみたもののめちゃくちゃ書きづらい。 普段いかに句読点を無意識に使いこなしているのかが分かります。

C91

去る2016年12月29日、サークル「ちくわおでん」としてコミックマーケットC91にサークルとして参加してきました。 新刊「実践みんなのGo言語」と既刊を少し持ち込みまして、新刊の方は無事にすべてハケることができました。 お手にとって下さった皆さん、ありがとうございました。 ちなみにこんな本です。 中身は「みんなのGo言語」を読んで、その内容にもとづいて手前のプロダクトを改修してみようというものです。

f:id:kandayasu:20170105023914p:plain

ちなみに題材とした既存のプログラムというのがこちら。 (このポストを書いている時点では、まだちゃんと改修したコードをコミットできていません、ごめんなさい)

2017/01/09 追記 改修したコードをGitHubに反映しました

GitHub - ykanda/fod: fod (file open dialog)

こちらのエントリでも紹介しています。

CLIでファイルとかディレクトリを選択するツールを Go で書いた - kandayasu

ところで今回のサークル、配置が西館の角にあって全開シャッター * 2 が正面と右側面にあって、やたら寒かったです。 途中、体を動かして少しでも温めようと椅子から立ったり座ったりする変なオッサンになってました。

あと既刊を一部パクられました。 見本なのでよかったら見てね(意訳)って手に取らせたらそのままどっか行かれてしまいました。 見本って言われたからって普通持って行かないですよね?無料なら無料頒布って書くよね?

テクブの人が絨毯爆撃してました。 技術書典盛り上がるといいですね。 黄色い服をお召になってたのがわかめ氏?(間違ってたらごめんなさい)

2017年もよろしくお願いいたします。

CLIでファイルとかディレクトリを選択するツールを Go で書いた

fod というツールを Go で書いてみました。 ちみちみと書いてきて、思いの外の苦労もありましたが、コンセプトを示しつつそこそこドッグフーディング的に使えるようになってきた気がするので、GitHub で公開しました。 インストール方法やリファレンス的な事は GitHub ページの README をご覧ください。このポストでは、READMEには書かなかった補足的な雑文を書いてみようと思います。

github.com

何奴?

GUIで良くある「ファイルを開く」ダイアログみたいなことをCLIでやります。 対話的にディレクトリやファイルを選択して、そのパスを標準出力に送ります。 このツール単体では特別な意味はほとんどありません。ls や cd、rm といった、ディレクトリやファイルのパスを引数にとるコマンドと組み合わせて使うことを想定しています。 もしかしたら同じことをするアプリがありそうですが、もしご存知の方がいらっしゃいましたら、@kandayasu までお知らせ下さい。

mv $(fod)

どこかで見た気がするのですが、パーソナルコンピューティングでは、ディレクトリの移動やファイルの検索(アプリケーション的な意味ではなくて、人間が行う動作として)が操作時間の7割を占めるとか。つまり、ファイルやディレクトリの選択を効率よく、かつミスなく行えるようにすることは作業効率の向上に寄与します。 実際に、これらの操作を素早く行うためのツールやUIというのは、実に多様な手法とアプリケーションが存在しています。

なぜ作った?

たとえば、peco/peco とか junegunn/fzf というツールがあります。 fod もこれらとノリが近いと思うのですが、これらはフィルタであったりファインダと銘うたれていています。 fod はこれらと違い、File Open Dialog の名が示すとおり「ファイルを開く」ダイアログの挙動をCLIに逆輸入(?)することを目的としました。

逆に、選択する以外のことは一切行わないのがコンセプトのようなものになっています。 細かくいうと、一つのことを上手くやる小さいアプリケーションとして機能する、他のツールとの柔軟な連携を可能とする、複雑すぎる設定やオプションの指定をできるだけ省く、などといったところです。

おまちしております

もし興味があって使ってみてくださるという方は、ぜひ感想などをお寄せ下さい。 PR もどうぞ。

rthornton128/goncurses をインストールしようとして苦労した話

Abstract

表題のとおり、Go 言語で ncurses バインディングであるところの rthrnton128/goncurses を使おうとしてインストールに苦労した話し。 最後には(肯定的な理由で)nsf/termbox-go を使う事にしたのですが、ネタとして供養したいので書いてみます。

goncurses がインストールできない

環境は OS X + Homebew 0.9.5 + Go 1.4.2 です。 goncurses のインストールのためには、まず ncurses と、pkg-config をインストールする必要があるっぽい。 というわけでインストールします。

$ brew install ncurses pkg-config
...

続いて gonucurses をインストールしようとするも、これが通りません。 pkg-config でなんだかかんだか言われているみたいです。

$ go get github.com/rthornton128/goncurses
...
# pkg-config --cflags ncurses form menu ncurses ncurses panel
Package ncurses was not found in the pkg-config search path.
Perhaps you should add the directory containing `ncurses.pc'
to the PKG_CONFIG_PATH environment variable
No package 'ncurses' found
...

どうやら goncurses が想定している ncurses のインストール後の状態と、Homebrew によって作られた ncurses インストール後の状態がうまくかみ合わないみたいです。 具体的には goncurses が参照する pkg-config の .pc ファイルに相当するものが、Homebrew からは作られないみたいです。

Homebrew ncurses の .pc ファイルとして次のようなものを生成します。 見た感じ、w とプリフィックスされていて、マルチバイト対応されたバージョンをインストールしているのでしょうか? goncurses は w プリフィクス付きでないものを想定しているようで、ここで食い違いが発生しています。

  • /usr/local/opt/ncurses/lib/pkgconfig/formw.pc
  • /usr/local/opt/ncurses/lib/pkgconfig/menuw.pc
  • /usr/local/opt/ncurses/lib/pkgconfig/ncurses++w.pc
  • /usr/local/opt/ncurses/lib/pkgconfig/ncursesw.pc
  • /usr/local/opt/ncurses/lib/pkgconfig/panelw.pc

解決策として

作っていたプログラムのリポジトリに、goncurses に対応するための .pc ファイルを用意しました。 用意したファイルは次のとおりです。

pkg-config がこれを参照できるように、環境変数 PKG_CONFIG_PATH を設定します。 シェルの設定ファイルに、こんな感じで追加することにしました。

export PKG_CONFIG_PATH=path/to/repo/pkg-config-files:$PKG_CONFIG_PATH

これで元の goncurses にむやみに手をいれたり、Homebrew の中身を荒らす事無く goncurses がインストールできるようになりました。 この対応を行うにあたり、次の記事が参考になりました(というかほぼそのままです)

なぜ nsf/termbox-go に乗り換えたの?

まず一つに、こんなことがあったので ncurses に依存するのは筋が悪いかなと思い、Pure Go termbox implementation をうたっている termbox-go を選びました。 移植性に優れるという Go の良さをスポイルする選択はしたくないよな、というところです。

二つ目に、作りたいツールが比較的シンプルなコンセプトだったというものがあります。 そもそも両者の目指す方向性は異なるのでしょうが、ncurses とくらべて termbox は良く言えばシンプル、悪く言えば貧弱な印象があります。 しかし、貧弱といえども、作りたいものに合うプリミティブさを持ったライブラリを選択するのが良いと考えた結果となります。

C88にいってきたのん

リピートはみてません

C88三日目にサークル参加してまいりました。 新刊20部弱程度の頒布予定数でしたが、無事全てハケました。 ありがとうございました。 How To Implement Extend Squirrel Interpreterはまたもや頒布しきれませんでした。

遅刻

起床したら8時・・・サークル入場締め切りが9時なので遅刻確定。 とりま会場に向かい、着いたのは9時をやや過ぎたくらい。

ダメもとでサークル入場入り口まで行ったらそのまま並ばされて、開催時刻と同時に入場。 つまり、一般入場の先頭グループと同程度の扱いという事になります。 「次はちゃんと来てね」ぐらいの注意がスタッフから降ってきました。 申し訳ない。

いやーこんな仕組みになってるんですね。アピールとか申込書セットみてもそれと思しき記載が見つけられなかったので、正直焦りました。 そこから参加受付、見本誌提出なんかやるわけですが、焦りからか見本誌票を表紙1に貼り付けてしまい、ここでも注意をうける。 表紙2か表紙4に貼れとのこと。 申し訳ない。

無事10時30分くらいには出展準備が整ってあとはいつも通りです。 そんなこんなで、今回はいろいろ無様で全方位的に迷惑をかけまくってしまい、なんとも反省の絶えないコミケとなりました。

C89

C89も申し込みをしていますが、これでやっと状況が落ち着いた感じです。 夏から冬はスケジュール的に辛みがあるけど、冬の方が気候的にラクなんで今度は冬に行きたいですね。

C88

C88参加します。 日曜日東O49b、サークル名「ちくわおでん」にてお待ちしております。 ちくわ成分だけを残して前回からサークル名変えておりますのでよろしくお願いいたします。

コミケはC87は当選しなかったので、C86以来の参加です。 ものっそい汗っかきなので、できれば冬の当選がよかったけれどもなぜ夏当選が連続するんじゃい!

新刊情報

f:id:kandayasu:20150804034003p:plain

  • Goでラーメン二郎WEB APIサーバ
  • B5版
  • 表紙カラー, 本文モノクロ
  • 36P(本文 + 表紙)
  • 頒布価格 500JPY

Go初心者のおれがGoで簡単なWebAPIサーバを作ってみようという内容になります。 二郎とうたっておきながら二郎成分はほぼ表紙のみという表紙詐欺っぽさがウリの一冊です。

これにあわせてC86で頒布しきれなかった既刊のHow To Implement Extend Squirrel Interpreter も小々持ち込む予定です。

広告を非表示にする

SONY SBH-50


f:id:kandayasu:20141112224635j:image

 
遊んでた回線を解約しに行ったら、ポイントが溜まってるから適当な商品を選んで持ってけと言うので SONY SBH-50 をもらってきた。
 
ぼくは普段から歩きながら音楽やラジオ、ポッドキャストといった音声メディアを聞くことはなかったけど(ケーブルをひょろひょろさせているのが不格好だなあと思って、むしろ避けてたといってもいいかもしれない)、せっかくもらったのだし、ものは試しという具合にここ最近持ち歩いてみている。
 
ボタンは誤爆しやすいし、イヤホン付けるからケーブルが結局うっとうしいし、付属の電源ケーブルは短いしイヤホンはむしろ付けないでほしいレベルだったりするけど、最近増えた通勤での電車の乗車時間の良い暇つぶしの道具になりつつある感じ。
広告を非表示にする

C86の感想とか書こうと思ってたら二週間くらい過ぎそうになってた

夏コミ(C86)書こうと思ってたら、すでに二週間がすぎそうになってました。 サークルにお越しいただいた方々、ありがとうございました。 備忘録も兼ねて、少し思ったことというか知見的なやつをポストしておこうかと。

ペーパーと電子版

今回は電子版も用意したので、その宣伝をと思ってペーパーを若干部数持っていきました。 これが少し裏目にでて、電子版もあるって説明すると「そっちが良い」といって、現物が出ない事態に。

結果として需要を食い合うような形になってしまって、失敗した感じ。 ちなみに電子版はこちらになります。

表紙はキャッチーに

今回の新刊の表紙は英語のタイトルに動物を使ったものでしたが、これが良くなかったように思います。 チラ見はするけど、手に取って見てくれる人が C85 と比べて明らかに少なかった。 特にタイトルは、パッと見で概要が伝わりやすいよう、日本語にするのが良さそう。

あとイーゼル持っていったけどこれは裏目だったかも。 遠巻きには視認しやすいかもしれないけど、逆にスペースに近づいてくれなくなるので声かけはしづらい。

島の外周部(?)という配置位置

島の外周部、といって合っているかどうかわかりませんが、壁に接する島側に位置されると人の流れが速い。速いとサックリとスルーしていく人が多くなる。 C85 は島中に配置されたので、人詰まりが起こりやすい反面、自然とじっくり見てくれる人が多くなるという状態になっていた気がします。

C87 も申し込みしましたが、新しいネタが決まっていません。 冬までは期間が短いので、小さくても瞬発力のあるネタがいいと思ってますが、なにか面白そうなのはないでしょうかねえ。