その手の平は尻もつかめるさ

ギジュツ的な事をメーンで書く予定です

Released IO::Blob for perl6

Released IO::Blob.


This is a perl6 module which provides IO:: interface for reading and writing a Blob.
IO::Blob inherited from IO::Handle, means it supports to handle a Blob like a filehandle (writable, readable and seekable).
For example, in case of you want to buffer string without real file, IO::Blob will help you to do that.

This module is inspired by perl5's IO::Scalar so basic usage is almost the same.

Please see documentation for more details.
https://github.com/moznion/p6-IO-Blob/blob/master/README.md


Enjoy!

perl6 の正規表現の or (|) は longest match

perl5 での正規表現の or は | のみでした.以下のように使うことができます.

'aaabbb' =~ /(a|a+b)/

これは a にマッチします.左に書いてあるマッチャが優先されますね.


同様に | を用いて perl6 で書いてみましょう.

'aaabbb' ~~ /(a|a+b)/

おおっと,これは aaab にマッチしてしまいます.
何故かと言うと perl6 の | は longest match だからなんですね.すごいぞ,これは便利!!!!

しかし上の perl5 の例と同じような挙動をさせたい場合もあるでしょう.まあ大体はそうですね.
そういう時は | の代わりに || を使うとよろしい.

'aaabbb' ~~ /(a||a+b)/

こうすると a にマッチします.やりましたね.

GitHub のリポジトリページにアクセスするだけで自動的に git clone される Chrome 拡張書いた

GitHubリポジトリページにアクセスするだけでローカルに git clone される Chrome 拡張を書きました.ggc という略称になりますが,まあなんかこれ紛らわしいですね.

なぜこんなものが必要になったかというと GitHubリポジトリ内検索は割と結果がひどくて,手元に clone してきてから grep なりなんなりをかけた方が必要なものを得られる可能性が極めて高い,というのがあるためです.
そんでもっていちいち clone するっつうのもダルいので,それだったらブラウザでリポジトリのページにアクセスした瞬間に自動的に clone すればいいじゃーん,もう2015年なのでストレージとか気にせず豪快にいこうやガッハッハ,という方法に id:s5r 氏と話していて辿り着いたのでそれを実装したというのが経緯になります.


Chrome 拡張を名乗っていますが,実態は Chrome 拡張 + サーバサイド実装という風になっています.
Chrome 拡張から直接コマンドラインを叩くのは不可能では無さそうだったけれど割とへんてこりんなステップを踏まなければならなそうな上に,Chrome のバージョンが変わったらここらへんガンガンぶっ壊れるんだろうな〜という憂慮があった為,ローカルにサーバを立ち上げておいてそのサーバに対して Chrome 拡張から AjaxAPI を叩く,というシンプルな構成になっています.


サーバの実装は go で書いていて,GitHub Releases でバイナリを配っているので,ダウンロードしてきてシュッと立ち上げることが可能です.
拡張本体の実装はこうしたアプリケーションの特性から Chrome Web Store とかにはリリースしてません.GitHub に置いてるだけですので適宜インストールしてご利用ください.


clone 先のディレクトリの構成は ghq と統一しているので,サーバの --dir オプションで clone ディレクトリの先を ghq のディレクトリと繋いでおくと色々多幸感があるかもしれません.


また,オプションとして github.com 以外のドメイン,例えば社内 GitHub Enterprise に対応させるための設定機能などが入っています.詳しくは README などを読んでいただけると良いかと思います.


とにかくこの拡張を有効にしておくと自動的にたくさんのリポジトリが降って来るのである種の快感があります.そして便利.
この便利さは Disk Full を味わうまでは続くことと思われます.あるいは超巨大リポジトリを無意識のうちに踏んでアアアア,みたいな感じになるまでは.

ほどほどにご利用ください.


[追記]

[追記2]

流石に自動で Clone するのはつらい (場合がある) という指摘を id:gfx 氏から受けたので,そこらへん設定出来るようにしました.

f:id:moznion:20150925111919p:plain

これを disabled (なんとデフォルトが disabled になった) にすると,

f:id:moznion:20150925105020p:plain

Clone URL の下にボタンが出るようになるので手動で clone が出来るようになる.

[追記3]

ghq とディレクトリ構造が揃っているという地味な違いがあったり.
まあこまけえこと気にせず Auto Clone Mode で使えば良いと思います!!! 自動クローン最高!!!!!!!!!!

Java で 任意個の文字を何らかのデリミタ区切りで記述した文字列がサクッと欲しいみたいなとき

こう書くと手っ取り早そう.

IntStream.rangeClosed(1, 10)
    .mapToObj(ignored -> "?")
    .collect(Collectors.joining(",")); // => "?,?,?,?,?,?,?,?,?,?"

次世代っぽい!!!

[追記]
id:nowokay さんから以下の方が良いのではという指摘が.確かに分かりやすい!

Stream.generate(() -> "?")
    .limit(10)
    .collect(Collectors.joining(","));

[追記2]
ちなみに gs-collections だとこう書けるとのこと.

Interval.oneTo(10)
    .collect(ignored -> "?")
    .makeString(",")

簡単ですね!

[追記ここまで]


以下やりとりとなります.

moznion [7:52 PM]
n個の”?”を”,”区切りで記述した文字列がサクッと欲しい,みたいな時に便利な奴ってありますか
List作ってString.joinとかが楽なのだろうか……

tokuhirom [7:56 PM]
それね
IntStream.rangeClosed(1,5).map(“,”).collect(Collectors.joining(“,”))
的な感じ

moznion [7:56 PM]
oh!

tokuhirom [7:56 PM]
おかしいけどw

moznion [7:56 PM]
ナウい書き方に見えますねw
map(“?”) か

tokuhirom [7:58 PM]
.map(n -> “?”) が正しいが
join(“,”, map { “?” } 1..10 )
と同じこと
まあ perl なら `(‘?’) x 10` だけどな!

moznion [7:58 PM]
そうすねw

tokuhirom [8:01 PM]
そういえば
TinyORM に QueryTerm.in() みたいなのを
いれたくて
入れたいな、とは思っているw

moznion [8:02 PM]
IntStream.rangeClosed(1, 10)
.mapToObj(ignored -> "?")
.collect(Collectors.joining(","));
出来た〜〜
そしてIN句を組もうとしていたことがバレバレであるw

xaicron [8:06 PM]
IN いがいでなかなかそのシチュエーションないからなーw

YAPC::Asia Tokyo 2015 で Yet Another Perl Cooking というタイトルで話してきました

話してきました.以下がスライドとなります.登録時にスライド字幕を誤って「英語」にしてしまったばかりに英語スライドとなっております.
「画像がヤベえ!!」とか言われたんですが,まあこれで発表したんだし公開するスライドの画像を修正するのも違うよな〜と思ったんで無修正版でお届けします.

www.slideshare.net

PDFにしたらデモ (途中でコンソールの画面になるところ) が動かないことに気づいたので gif で.

f:id:moznion:20150822113521g:plain

f:id:moznion:20150822113714g:plain

予想以上に料理の話をしています.前半10分は料理の話をしました.後半は (アブない) 自作調理器の話をしています.
今回の発表は僕の行ったプレゼンテーション史上最高の発表になったのでは無いかと思っていて,個人的に強い手応えを感じています.予想外に会場が盛り上がったというのが大きいわけですが.
スライドだけ見てもあまり良くわからないと思うので,後日公開される発表動画などを見てもらいたいな〜と思っています.


なお,このスライドや発表の内容については不正確な事がままあると思っていて (特に調理温度のあたりとか.ここらへんには正解が無いというか,食中毒リスクを0にしていくというのは極めて難しい話題で,往々にして確率の話になってしまいます.この辺は都度紹介した Cooking for Geeks あたりを参照してもらえれば良いかなあと思います),これを真に受けてエラい事になっても責任を負いかねるという事だけを表明しておきます.自己責任でお願いします!!!!!!


ところで「風呂場で料理をすると熱いお湯がシャワーで大量に出せて便利」という事を言ったんですが皆さんひいてましたね,風呂場で料理をするのは一般的ではないというか,一般的にはやってはならないことだということがわかりました.


[追記]
トーク中言及したんですが,電源ハックの所は本来ヒューズが必要です.ヒューズが飛んで,手持ちのヒューズがなくなり,しかしYAPCは迫ってくるし仕事は山積! ということで泣く泣くヒューズを省略したのです.皆さん必ずヒューズを付けましょう.

YAPC::Asia Tokyo 2015 1日目 (Fri 8.21) 15:30 から話します!!!!

yapcasia.org

こういった話をします.一部状況が変わりましたが,大筋でこうした話をします.本当に料理の話をするのです.
裏番組が超強力! という感じなので,もしかしたら4人くらいしか来ないのではないかという不安がありますので,皆さん来てください!!!