タグ

ブックマーク / blog.livedoor.jp/xaicron (18)

  • にひりずむ::しんぷる - perlcasual#06でちょこっと話ました

    すでに昨年の話ですが、2014年10月24日に開催された perlcasual#06 で何故か基調講演しました。 http://xaicron.github.io/slide/perlcasual-06/ 最近は勉強会的なものにめっきりいかなくなっていましたが、久々に参加して楽しかったです。 perlcasual といいつつ、主催者自体が perl 全然関係な話をしていたりしましたが、気軽に参加できる勉強会があるのはなかなかよいですね。 2014年は3月あたりからハッカドールというアプリをちまちま作っており、おかげさまで AppStore の2014年ベストアプリに選ばれたりしました。たぶん AppStore の中の人が重度のオタクなのだと思います。 今年も何かしら楽しんでもらえるようなことをやっていきたいような気がしなくもないですね。

  • にひりずむ::しんぷる - Hokkaido.pm #09 に行って来ました!

    報告が大変遅くなってしまいってすいません>< 去る 03/08 から 03/10 まで JPA (Japan Perl Association) の支援を受けて北海道に行って来ました。 以下が当日の資料に大幅に加筆修正を行ったものになります。 https://xaicron.github.io/slide/hokkaidopm-09/ じつは、北海道に行っている間はずっと風邪をひいていましたことをここに告白いたします。 が、そんなことはさておき、とにかく吹雪がすごくてなんというかテンションダダ上がりでござました。 飛行機が遅れてしまって、ホテルに着くのがだいぶ遅くなったんですが @techno_neko さんの寝坊好意により、タクシーで迎えに来てもらえることになり、無事に懇親会会場まで辿りつけました。 とりあえずついたらジンギスカンです。なにはともあれジンギスカン。そして地ビールがあるじゃ

  • にひりずむ::しんぷる - DBI で KVS っぽいテーブルのデータをフラットなハッシュとして受け取りたい

    例えば以下の様なテーブルがあったとして mysql> SELECT * FROM some_table; +-----------+----------+ | key | value | +-----------+----------+ | zigorou | moja | | antipop | idol | | bayashi | condom | | kazuho | BL | | ikebe | AKB48 | | clouder | yokohama | | satoshi | -- | +-----------+----------+ 以下のようにフラットなハッシュとして取得したいケースが合った場合。 { zigorou => 'moja', antipop => 'idol', bayashi => 'condom', ... } こんな感じでやればよい # $sql は適当

    tsucchi1022
    tsucchi1022 2012/12/20
    素のDBIも結構色々できるんだよなー
  • にひりずむ::しんぷる - MySQL で SELECT のときにユーザー変数を代入して使う

    知らなかったのでメモ。 mysql> SELECT @foo := UNIX_TIMESTAMP(), FROM_UNIXTIME(@foo) +--------------------------+---------------------+ | @foo := UNIX_TIMESTAMP() | FROM_UNIXTIME(@foo) | +--------------------------+---------------------+ | 1331202141 | 2012-03-08 19:22:21 | +--------------------------+---------------------+ @variable := expr で変数に代入し、それをその場で使うことができる。いままでは SET @variable = expr してからしか使えないのかなーと思って

  • にひりずむ::しんぷる - Data::Dumper と Data::Dump の実行速度の違い

    Data::Dump はデフォルトでそれなりに整形して表示してくれるのと、コンテキストを見てよしなに処理を変えてくれるので、スクリプトのデバッグなどに使うのはまぁまぁ便利だったりします。 が、この子は PurePerl で実装されているので実行速度が結構遅いです。 どのくらい遅いかというと use strict; use warnings; use Benchmark qw(cmpthese :hireswallclock); use Data::Dump (); use Data::Dumper (); my $data = { foo => [qw/bar/], bar => { hoge => 'piyo', }, heavy => So::Heavy::Object->new(10), }; cmpthese -1, { 'Data::Dump' => sub { my $res

  • にひりずむ::しんぷる - 最近の Test::Mock::Guard

    ただのスタブなのにモックを名乗っていることで有名な Test::Mock::Guard ですが、スタブ化したメソッドの呼び出し回数を知りたいことが何気なく需要としてあったので、某アザラシのアイコンの人に実装してもらいました。 が、一部バグってたので直しました。やっぱりスタブなのにモックを名乗っているのが原因なのでしょうか。 主に、とあるメソッドでの条件分岐などで、呼び出されたかどうかを知りたい場合に使います。 use strict; use warnings; use Test::More; use Test::Mock::Guard qw(mock_guard); { package SomeClass; sub new { bless {}, __PACKAGE__ } sub some_method { my ($self, $args) = @_; return $args ? $

    tsucchi1022
    tsucchi1022 2012/01/13
    call_count 便利だわー。ってか知らなくて自前で実装してたw
  • にひりずむ::しんぷる - IO::Prompt::Simple 書いた

    リリースしました にひりずむ::しんぷる - IO::Prompt::Simple 0.01 リリース あらすじ xaicron:> ExtUtils::MakeMaker はロードに1秒ぐらいかかるから遅延ロードにしたた。prompt 使いたいだけなんだけど。IO::Prompt はなんかごついし、今後はコピペでいい気がしてきた。 tokuhir○m:> @xaicron IO::Prompt::Simpleの予感 xaicron:> @t○kuhirom srd! というわけで適当にでっち上げた。 xaicron/p5-IO-Prompt-Simple - GitHub的には ExUtils::MakeMaker の prompt() と同じだけど、第三引数で指定した文字じゃないとダメとか、この正規表現にマッチしたやつじゃないとだめとかを設定できる感じ。 あとは、terminal

  • にひりずむ::しんぷる - ISUCON に参加して FAIL してきました!

    ISUCON に @myfinder と @__gfx__ と共に参加してきました。 一部からは、下馬評でチートチームなどと言われのない誹謗中傷を浴びせかけられていましたが、結果としては、以下のようにあっさりと文字化けして終わったため、ある意味期待を裏切らなくてよかったのかなと思います。 さて、結果は全然伴わなかったわけですが、当日にやろうとした & やったことなんかを適当に箇条書きにしてみます。 とりあえず、public key 巻いて ssh config を設定して環境に入りやすくする 最初にベンチ走らせたときに DB が完全に刺さっていた slow log でクソクエリー発見 直すと速くなるだろうけど、パッと見よくわからなかったので、memcached にキャッシュしちゃえばいいんじゃね戦略でキャッシュする 最初に app サーバーの local に memcached 立てたけど

  • にひりずむ::しんぷる - subtest の出力をフラットにする Test::Flatten を書いてみた

    皆さん subtest 使ってますか?僕はよく使ってます。 でも最近いろいろとアレげだなーと思っていることがあって、適当に Test::Flatten とかいう謎モジュールをでっち上げてみました。 xaicron/p5-Test-Flatten - GitHub use Test::More; subtest 'foo' => sub { pass 'ok'; }; done_testing; というようなテストを走らせた場合の TAP 出力は以下のようになりますが、その subtest が終わったあとになって初めて「ああ、このテストは foo だったのかー」とわかります。 $ prove -lvc t/foo.t t/foo.t .. ok 1 - ok 1..1 ok 1 - foo 1..1 ok その subtest の開始時に見たいですね。 use Test::More; sub

  • にひりずむ::しんぷる - HTML::Filter::Callbacks の紹介

    追記あり Yuji Shimada / HTML-Filter-Callbacks - search.cpan.org charsbar さんにパッチを送ったら、「commit bit 付けたから自分でリリースしてちょ」って言われたので、先ほど 0.07 をリリースしました。 それはさておき、このモジュールについての情報があんまり世の中に無いようなので、いい機会なので紹介しようかと思います。 このモジュールを使えば 不要なタグの除去 url の変換 属性の追加、削除 text の置き換え などなどが簡単にできます。 似たようなモジュールとして、HTML::Scrubber というのが昔からあって、よく使われてますが、長年メンテされていなかったり*1、インターフェースがとてもわかりにくかったり*2して、今から使うのは気が引けますが、HTML::Filter::Callbacks は大変直感的

  • にひりずむ::しんぷる - 最近のセットアップスクリプトの書き方

    コードジェネレーターというかスニペットというかセットアップスクリプトというかそういうのを、最近は以下のような感じで書いてる。 実際には Getopt::Long なんかと組み合わせて使う。 #!/usr/bin/env perl use strict; use warnings; use File::Basename qw/dirname/; use File::Path qw/mkpath/; use File::Slurp qw/write_file/; use Data::Section::Simple qw/get_data_section/; use Text::Xslate; use 5.12.1; my $app = shift || die 'Usage: gen.pl app'; mkdir $app or die "$app: $!"; chdir $app; my $

  • にひりずむ::しんぷる - 死んでほしくない人のための Sub::Retry

    Sub::Retry はクールでクレバーなモジュールなのですが、retry の条件が exception のみでちょっと悲しかったので、retry 条件をカスタマイズ出来るようにしてみました。すでに取り込まれて、0.03 としてリリースされています。 Sub-Retry-0.03 - FrePAN ユースケース としては、Cache::Memcached::Fast とかで set とか get に失敗したときに retry するとかが挙げられます。 第4引数に coderef を指定することで、retry 条件を変えられます。 retry したいときは、true を返し、そうでない場合は(つまり、成功した場合は)false を返すようにします。default は 以前の挙動と同じです。 coderef の引数は return value と同じなので、その結果如何で処理を切り替えることが

    tsucchi1022
    tsucchi1022 2011/04/06
    たまたま今やってる案件で必要だった。超便利だね!
  • にひりずむ::しんぷる - flaged utf8時のprintf "%20s"とか

    utf8フラグ付き文字の場合、length()とかsubstr()とかはバイト単位でなくて、文字単位で扱ってくれてすごい便利。 で、printfの文字列指定子である「%s」も文字単位で扱うようになる。 そのせいで、2バイト表記文字のフォーマットが崩れちゃう。 use strict; use warnings; use utf8; my $sb_str = 'abcde'; my $mb_str = 'ぁぃぅぇぉ'; printf "%-10s : %d\n", $sb_str, length($sb_str); printf "%-10s : %d\n", $mb_str, length($mb_str); abcde : 5 ぁぃぅぇぉ : 5 欲しかったのは abcde : 5 ぁぃぅぇぉ : 5 なのに! うまい方法わからなかった! 仕方ないのでこんな書いて sub mb_count

    tsucchi1022
    tsucchi1022 2011/03/31
    おなじことではまった。あとでなんか書く
  • にひりずむ::しんぷる - モジュールの version を表示する シェル関数書いた

    たまに、今使ってるモジュールのバージョンが知りたいときってあると思いますが、みなさんどうやってるんでしょ? $ perl -MCGI -E 'say $CGI::VERSION' 3.49 みたいなことをターミナルでやってましたが、タイプ数が多くて、いい加減めんどくさくなってきたので、書き慣れてないシェル関数を書いてみたよ! これを、.bashrc なり .zshrc なりに書いておけば $ pm-version CGI HOGE CGI : 3.49 HOGE not found みたいになってまぁそこそこ便利かもしれない ブクマコメでご意見いただきました!ありがとうございます>< vkgtaro perl -MCGI\ 9999 とか。あとは古いけど、pmtools の pmvers とか。http://d.hatena.ne.jp/naoya/20060114/1137217478

  • にひりずむ::しんぷる - Module::Install::TestTarget released

    M::I::ExtendsMakeTestなかなかいいです+お願いというかおねだり - D-6 [相変わらず根無し] を受けて、Module::Install::ExtendsMakeTest あらため、Module::Install::TestTarget として、リリースしました Yuji Shimada / Module-Install-TestTarget - search.cpan.org それに伴って、ExtendsMakeTest は duplicated deprecated になったので、そのうち消えます。 以下、SYNOPSIS を貼っときます use inc::Module::Install; tests 't/*t'; # override the default `make test` default_test_target includes => ["$ENV{

  • にひりずむ::しんぷる - YAPC::Asia 2010 前夜祭で LT をしてきた

    こんにちは!今年も YAPC の季節がやってきましたね! 今回の前夜祭は Casual Perl がやっていたので、とりあえず LT をしてみました。 既にお酒が入っていたのでよくわからないプレゼンだったと思いますが、発表資料を張っておきます。

  • にひりずむ::しんぷる - YAPC::Asia 2010 で発表してきた #yapcasia

    「Web API のすすめ」は割と概念的な話に終始していて、コードベースのもっとゴリっとした話を期待していた人には申し訳ありませんでした。 が、やはり既存の WAF を使っているだけだとわからないことっていうのが多いと思うので、もっと下のレイヤーに降りて、自分で実装するのもありなんじゃないのかなって思っています。 「let's database testing」では、割と見落とされがちなんじゃないかという、DB のテスト方法についてざっくばらんに話しました。ちょっと質的でないことも書いてありますが、重要なのは、「実際に運用される環境に*なるべく*近い環境で、ローカルでテストをする」ってことです。DB テストのほんの足がかりになれば幸いです。 BD テストの話で使ったサンプルのリポジトリは以下になっています。 xaicron's Mayoi at master - GitHub 結構中途半

  • にひりずむ::しんぷる - Windows

    msysgitのbashからgithubにpushしようとしたら下記のようなエラーが出てしまう場合の対処 $ git push origin master Permission denied (publickey). fatal: The remote end hung up unexpectedly githubに書いてあるようにやり直したらうまく行った。 昨日も何度か同じ手順を繰り替えした気がしたけど、気のせいだったようだ。 Addressing authentication problems with SSH - Guides - GitHub 書いてあるように、ssh-keygenを叩くと上書きしていいのか聞いてくるのでy $ ssh-keygen Generating public/private rsa key pair. Enter file in which to save

  • 1