タグ

ブックマーク / songmu.jp (21)

  • Goでテスト中に現在時刻を差し替えたりするflextimeというのを作った | おそらくはそれさえも平凡な日々

    https://github.com/Songmu/flextime flextimeはテストコードの中で現在時刻を切り替えるためのライブラリです。Sleep時に実際に時間を止めずに時間が経過したように見せかける機能もあります。 つまり、PerlのTest::MockTimeやRubyのtimecop的なことをしたいわけですが、Goだとグローバルに関数の挙動を切り替えるといったことはできないため、利用にあたってはtimeパッケージで使っている関数を、flextimeパッケージに切り替える必要があります。 具体的には、flextimeはtimeパッケージと同様のインターフェースを備える以下の9つの関数を提供しています。 now := flextime.Now() flextime.Sleep() d := flextime.Until(date) d := flextime.Since(da

    Goでテスト中に現在時刻を差し替えたりするflextimeというのを作った | おそらくはそれさえも平凡な日々
    mackee_w
    mackee_w 2020/01/19
  • 恐らくそれなりに正確なGoのApacheログパーザーを書いた | おそらくはそれさえも平凡な日々

    https://github.com/Songmu/axslogparser/ 下記のようにすれば、ApacheログかLTSVログをよしなにパーズしてくれます。 import "github.com/Songmu/axslogparser" log, err := axslogparser.Parse(line) Apacheのログ形式として知られるアクセスログはいろいろな形式があり、正確なパーズが何気に困難であることが知られています。よく使われるのは以下のような形式です。axslogparserはこれらの形式をサポートしています。 commonログ commonログの先頭にvhostが付いたもの combinedログ combinedに独自フィールドが追加されたもの フィールドの区切り文字は一般的には半角スペースが使われますが、パーズし易さのためにタブ文字が使われることもあります。現在は

    恐らくそれなりに正確なGoのApacheログパーザーを書いた | おそらくはそれさえも平凡な日々
    mackee_w
    mackee_w 2017/06/24
    "もしくはローカルのファイルシステムにアクセスログを書き込むのはもう古い。" オッ
  • Test::mysqld 0.20をリリースしました | おそらくはそれさえも平凡な日々

    この記事は、Perl5 Advent Calendar 2016 の16日目の記事の穴埋めということにしました。 https://metacpan.org/release/SONGMU/Test-mysqld-0.20 YAPC::Hokkaidoでkazuhoさんにコラボに加えてもらったので諸々調整してリリースしました。大きな機能差分は以下のとおりです。 MySQL5.7.6以降対応 複数のMySQLプロセスを同時に立てられるように(start_mysqlds) start_mysqlds 対応が入ったことに併せて、App::Prove::Plugin::MySQLPool 0.06がリリースされています。これに伴いテスト起動時に直列で複数プロセスを起動していたのが、並列で起動するようになり高速化が望まれます。 お試しください。 MySQL5.7.6対応は、Goの方はhttps://gi

    Test::mysqld 0.20をリリースしました | おそらくはそれさえも平凡な日々
  • YAPC::EU 2015 @ Granada に参加してトークしてきた | おそらくはそれさえも平凡な日々

    9/2~4にかけて、スペインのグラナダで開催されたYAPC::EUに参加してきました。渡航費、宿泊費等はすべて所属である、株式会社はてなに出してもらいました。 トークもしてきました。多くの方に来ていただいてありがたかったです。20分の英語トークを勢いでなんとか乗りきれて良かった。 貴重な体験になったのは勿論のこと、YAPC::Asiaは今年で一段落だけど、YAPC自体は続いていくんだなーという当たり前のことを実感できたのが大きかった。来年もどこかしらのYAPCで話そうと思う。 発表資料: 50 CPAN modules developed in 2 years; my experience as a developer in Japan’s Perl Community 発表おわったあとに「お前のあのモジュール便利につかってるぜ。ありがとう」みたいなことを何人かに声かけてもらえたりもして感

    YAPC::EU 2015 @ Granada に参加してトークしてきた | おそらくはそれさえも平凡な日々
  • kamipo TRADITIONALでは防げないINSERT IGNOREという名の化け物 | おそらくはそれさえも平凡な日々

    インスパイア元→kamipo traditional (というかSTRICT_ALL_TABLES) では防げないMyISAMという名の化け物 タイトルが全てです。ピンときた方は読み進む必要はありません。 データがなかったらINSERTして欲しいけど既に入っている場合には何もして欲しくないみたいな処理をするときに、 INSERT IGNORE を使ってしまうことがありますが、 INSERT IGNORE はユニークキー制約違反だけじゃなくて、あらゆるエラーをIGNOREしてしまいます。つまりkamipo TRADITIONALすらIGNOREしてしまうのです。なので使わないほうが安全です。 様子です。 mysql> SET SESSION sql_mode='TRADITIONAL,NO_AUTO_VALUE_ON_ZERO,ONLY_FULL_GROUP_BY'; Query OK, 0

    kamipo TRADITIONALでは防げないINSERT IGNOREという名の化け物 | おそらくはそれさえも平凡な日々
  • ソースコード以外もとにかくテストする。もしくはカバレッジだけではダメだという話 | おそらくはそれさえも平凡な日々

    あなたはプロジェクトのソースコードに対して適切にCIを回しているかもしれません。定期的にコードカバレッジの測定も行い、90%以上もしくは100%の数字を出しているかもしれません。 しかし果たしてそれで十分でしょうか?もしくはコードカバレッジだけにとらわれすぎていないでしょうか? 監視とは(システムに対する)継続的なテストである、というのは筆者の尊敬する奥一穂氏の言葉ですが、その逆もしかりで 「テストとはプロジェクトに対する継続的な監視である」 ということも言えます。 その観点に立ってみると、プロジェクトのソースコード以外にもテストが必要なものがたくさんあることに気づくでしょう。以下に実際に筆者が自分のプロジェクトの中でソースコード以外にテストを書き、CIを回していたものを挙げてみます。 アプリケーション設定ファイルのテスト 開発中に番用の設定ファイルを使うことはないため、番用の設定ファ

    ソースコード以外もとにかくテストする。もしくはカバレッジだけではダメだという話 | おそらくはそれさえも平凡な日々
  • 俺がDHMOについて知ってること,またそれに対する所感 | おそらくはそれさえも平凡な日々

    参考: http://moznion.hatenablog.com/entry/2014/06/17/223342 「わかりました。あなたは世界を革命するしかないでしょう」 浄水器 C1 スタンダードタイプ 去年買ったものの中で一番よかったなーとか思ってるのがこれ。そんなに舌の鋭くない僕でも明らかに分かるくらいにDHMOの味が変わった。家でいれるコーヒーが格段に美味くなったのがかなりの収穫。 場所もそんな取らない。洗い物ラックの隣においてある。取り付けも簡単だった。ウォーターサーバーほど場所取らないし、注文とかする必要もない。年に一回くらいカートリッジを買い換える必要があるくらい。 世界が変わった。

    俺がDHMOについて知ってること,またそれに対する所感 | おそらくはそれさえも平凡な日々
    mackee_w
    mackee_w 2014/06/18
    ためになる話
  • Yokohama.pm #11 でライブコーディングしてきました | おそらくはそれさえも平凡な日々

    発表資料 リポジトリ CPAN 動画 一時間強の長きにわたってお付き合いいただいいた皆様有難うございました。 今回ライブコーディングを引き受けた上で考えたのは以下の点。 いつもの開発っぽい雰囲気ですすめたい ちゃんとテストは書きたい 普段どのように開発しているかの雰囲気と、どういうタイミングでテストを書いているのかとかを、普段テストを書き慣れていない人にもできれば勘所が分かるようにしたいなーとか思っていました。 実際は結構内容を詰め込んでしまって駆け足になってしまったりとか、コンソールでの作業が長かったのでちょっとイメージを掴みづらい人も多かったかもしれないなと反省しています。 最初1時間もらった時は長すぎだと思っていたのですが、実際は全然足りませんでした。あれ以上長くやっても、見ている方もダレると思うので、もっとうまくまとめてできるようになりたい。 またやりたくなった。YAPC::Asi

    Yokohama.pm #11 でライブコーディングしてきました | おそらくはそれさえも平凡な日々
  • MouseX::Getoptでハイフン区切りの引数を受け取る方法 | おそらくはそれさえも平凡な日々

    MouseX::Getoptはプロジェクトで便利に使っているのですが、細かいことで気になっていたのはそのまま使うとオプション名がアンスコ区切りになってしまうことでした。--dry_runとかちょっとかっこ悪いやん、くらいのほんと些細などうでもいいやつです。 gfxからそういう変換を受け付けるようにするp-rあったら送ってきてもいいよとは言われていて、そういうTrait作る感じかなーとか思ってたけど、まあ以下の様な感じで良いかってなりました。 package MyCLI { use Mouse; with 'MouseX::Getopt'; has dry_run => ( traits => [ 'Getopt' ], is => 'ro', isa => 'Bool', cmd_flag => 'dry-run', ); } my $app = MyCLI->new_with_optio

    MouseX::Getoptでハイフン区切りの引数を受け取る方法 | おそらくはそれさえも平凡な日々
    mackee_w
    mackee_w 2013/12/27
    便利スクリプトおじさん情報
  • Windows開発機でVMのLinuxとクリップボードを共有するの法 | おそらくはそれさえも平凡な日々

    このエントリーはPerl Advent Calendar 2013の17日目です。 WindowsマシンのVM上で開発していると慣れてくるとそんなに困ることはなくなりますが、たまにクリップボードをホストマシンと共有したくなることがあります。そんな時はホストマシンのWindows側にクリップボード共有サーバーを立ててしまえばよいでしょう。 最近は、ActivePerlでもStrawberryPerlでも簡単にPlackがインストールできて、コマンドプロンプトからカジュアルにplackupできる便利な時代となっておりますのでPlackアプリでサクッと作ってしまいましょう。 それがこちらのWinPBです。 使い方は簡単です。POSTでクリップボード上書き、GETでクリップボード取得。わかりやすい。 eg以下にpsgiとbatファイルのサンプルが置いてあります。認証が気になるなら適当にPlack:

    Windows開発機でVMのLinuxとクリップボードを共有するの法 | おそらくはそれさえも平凡な日々
    mackee_w
    mackee_w 2013/12/17
    "ところで今年は仕事ではMacしか使いませんでした。"
  • Plack::Request::WithEncodingがなぜ便利なのか | おそらくはそれさえも平凡な日々

    Plack::Request::WithEncoding というモジュールをリリースしました 上記の記事にも書いているのですが、Plack::Request::WithEncodigが便利なのは、単に車輪の再発明がされまくっているのが無駄感あるってのもあるんですけど、 個人的には$env->{'plack.request.withencoding.*'}に共通の格納位置を獲得したってのが大きいと思ってます。 例えば、リクエストの文字コード判別ってのは結構だるいのですが、アプリケーションの前段のPlack::Middlewareで、リクエストのエンコーディングの判別をして $env->{'plack.request.withencoding.encoding'}に格納しておくみたいなことをすることにより、よしなに文字列をdecodeしたりすることが出来るようになります。 まーそんなことを考え

    Plack::Request::WithEncodingがなぜ便利なのか | おそらくはそれさえも平凡な日々
  • Teng::Plugin::RowObjectCreationSwitcherが便利な件 | おそらくはそれさえも平凡な日々

    https://metacpan.org/release/Teng-Plugin-RowObjectCreationSwitcher @tsucchi さんに上げてもらったのでその話。 追記 注意 tokuhiromに意見をもらって0.02でインターフェースが変わりました。 temporary_suppress_row_objects_guard( 1 / 0 ) を新設 (dis|en)able_row_object を廃止 ガードオブジェクト受け取らないとエラーになるように 「こういう$tengみたいなグローバルなオブジェクトの内部を一時的に変えるみたいなのはやらないほうがいいですね!」 と、tokuhiromに言われており、実際そうなので、やるなら自己責任で気をつけて使いましょう。 言われてみると、$teng->suppress_row_objectsがそもそもrwなのが怖い感じがし

    Teng::Plugin::RowObjectCreationSwitcherが便利な件 | おそらくはそれさえも平凡な日々
    mackee_w
    mackee_w 2013/10/01
    coooooooooooooool
  • そろそろText::Markdown::Discountについてひとこと言っておくか | おそらくはそれさえも平凡な日々

    Text::Markdown::Discountってどうなの?って話があったりするわけですが、Perlの人は積極的に使ったほうが良いと思うし、Discount自体はPerlに限らずおすすめだよーっていうエントリです。 これはDiscountというCのMarkdownライブラリのバインディングです。Rubyにはrdiscountという、メジャーなMarkdownのgemがありますが、これもDiscountのバインディングです。Jekyllとかで利用している人も多いでしょう。 Rubyの世界だと他にもredcarpetというgithubが採用したことで一躍有名になったMarkdownライブラリがあります。これはsundownというCのMarkdownライブラリのバインディングです。 sundownは処理が高速なのがウリらしく、PerlでもText::Markdown::Sundownを書こうか

    そろそろText::Markdown::Discountについてひとこと言っておくか | おそらくはそれさえも平凡な日々
  • おそらくはそれさえも平凡な日々: Puncheurのご紹介改めオレオレWAFを作ってしまった件

    職質テックトークでもちょっと話したのですが、 PuncheurというWAFを作ってCPANにもあげてしまいました。 読み方はパンチャーですが、パンツァーでもパンチラでもなんでもいいです。 気軽に開発を始められてカスタマイズ可能なWAFとなっております。 最低限のユーティリティーを提供しつつ、DispatcherとViewは差し替え可能になってるという、最近よくあるあれです。 実際かなりAmon2からコピペです。 ちょっとしたPSGIアプリケーションをCPANで配布する的な用途に向いているのが大きな特徴となっています。 主な特徴としては以下。 Perl5.8切り捨て すべてMyApp->new(%opt)から始まる MyApp->new(%opt)->to_psgi; って書ける my $c = MyApp->new(%opt); ってCLIで書ける Lite的な奴も.psgiにべろっと書か

    mackee_w
    mackee_w 2013/07/30
    Puncheurショック
  • おそらくはそれさえも平凡な日々: Teng::Plugin::SearchJoinedとSQL::Maker::JoinSelectとKyoto.pmの話

    https://metacpan.org/module/Teng::Plugin::SearchJoined https://metacpan.org/module/SQL::Maker::Plugin::JoinSelect N+1問題という近年まことしやかに語られるようになった言葉があります。当たり前の事象に大げさに名前をつけるのどうなのかと思ったりもするわけですが、名前が付いていると案外説明に便利だったりして「名前重要」だなーとか思ったり思わなかったりするわけです。 最近はTengを便利に使わせてもらっているわけですが、Tengはシンプルな分、何も考えないで使うとN+1問題が多発してしまいます。そう言う思想なわけです。 クエリ数を抑えるためにJOINしたクエリを投げたくなるわけですが、そうなると自分で投げるしか無くて、それはまだいいとしても、普段Rowオブジェクトを使い慣れているゆる

    mackee_w
    mackee_w 2013/07/09
    きちょうなTengおやくだちじょうほう
  • おそらくはそれさえも平凡な日々: Perl製のWebアプリケーションをherokuで3分で動かすの法

    PSGIアプリなら簡単にherokuで動かせます。 Miyagawaさんのbuildpack(https://github.com/miyagawa/heroku-buildpack-perl)を 使います。使い方もREADMEに書いてあったけど、以下にも書きます。 アプリ側の準備 deployしたいアプリケーションのgitリポジトリ上で以下をやります。 cpanm --installdeps . で依存モジュールがちゃんと入るようにする(cpanfile使うのがオススメ) アプリ起動用のapp.psgiを配置する herokuにアカウントを作る https://www.heroku.com/ toolbeltを入れる https://toolbelt.heroku.com/ インストールが終わるとherokuコマンドが使えるようになります。 % heroku login と打ってコマンド

    mackee_w
    mackee_w 2013/05/22
    #Perl入学式 でCGIはやらないほうがいいと言われた皆様にもおすすめです
  • おそらくはそれさえも平凡な日々: ジンバブエドルとギャンブルに関するお役立ち情報です

    紙くず同然に思われがちなジンバブエドルですが、2009年に 12桁のデノミ(旧1兆ジンバブエドル=1ジンバブエドル)を行った 発行自体も止めた(=ハイパーインフレが止まった) という感じなので、今は実はレートはそんなに低くありません。 発行が止まり、ジンバブエの公式通貨でもなくなっていて、死にゆくことが約束されている通貨ではありますが、通貨価値が消滅したわけではなく、一部の地域で使えはするようです。 具体的には、2013年5月現在1ジンバブエドル=0.3円程度のレートとなっています。これは多くの人に取って意外な数字なのではないでしょうか。ついうっかり1億ジンバブエドルを賭けて負けてしまうと3000万円の損失です。 入手も困難ですし、使える地域も限られているという意味ではやはり紙くず同然なので、安易に多額のジンバブエドルを賭けるのは危険ですし、賭けに勝った方もやはり嬉しくないので、皆様注意し

  • おそらくはそれさえも平凡な日々: CSRFDefender的なやつでコンテンツフィルタはしないほうがいいんじゃないかという話

    日の組長のお話。 Ark::Plugin::CSRFDfenderに機能追加したりいろいろバグっていたりしたのに手を入れていたのだが、それに対して組長に意見を頂いた話。結論はタイトルの通り。 CSRF対策をフレームワーク側で入れるのは良いと思うが、フィルタしてformに自動的にhiddenを埋め込むのはあんまよろしくないんじゃないかという話です。 CSRFDefender的なやつには以下のような機能があるが、それぞれに関して述べる。 POST, PUT, DELETE時に自動でtokenチェックしてエラー画面強制表示 自動的にコンテンツフィルタしてform要素にhiddenを埋め込む POST, PUT, DELETE時に自動でtokenチェックしてエラー画面強制表示 OK。安全側に倒している。 自動的にコンテンツフィルタしてform要素にhiddenを埋め込む あまり好ましくない。厳密

    mackee_w
    mackee_w 2013/05/14
    Arkおじさんのインターネットむずかしい情報
  • おそらくはそれさえも平凡な日々: 「仕事に対する愛と情熱とプライド」若しくは新卒に向けたスピリチュアルな話

    そろそろ新卒研修とかどうしようかとかで、エンジニア陣でわたわたしたりしています。「Songmu先生にはスピリチュアルな話をしてもらわないといけませんね」みたいなことを言われてなんかスピリチュアルキャラとして定着しているのもどうかと思います。 去年も「『仕事に対する愛と情熱とプライド』ってお題でソーシャルゲームチームの新卒向けに話してください」とか研修担当の人に言われて、なんでそんな熱いキャラとして認知されてるか謎だったんだけど、それで30分くらい話しました。 それが結構評判良かったみたいで、直接はあまり言われなかったんだけど「研修の時の先輩の話の中で一番印象に残っている」って言ってくれている人が多いって話を2年目の人から又聞きで知って嬉しく思っていました。 とか思っていたら、hisaichi5518の人は「なんかすごくいい話してた覚えはあるんですけど内容全く覚えてません」とかsoh335の

    mackee_w
    mackee_w 2013/03/24
    「そうは言ったものの「自分にしかできないこと」なんてそうそう見つかるもんじゃないと思ってしまうかもしれません。でもそんなに難しくない方法があります。それは「レッテルに乗っかる」ことです。」
  • おそらくはそれさえも平凡な日々: App::Xaicron構想

    タスクの定期実行としてcronが使われ続けていることに問題意識を抱えている人は数多く居れども、多くは惰性で使い続けている。何を隠そう私もその1人である。 そんな中、近年ではcronの代替としてjenkinsを使うという斜め上の発想が蔓延りつつあるが、 そんなことをすると「cronに500Mもメモリ使ってられるかー」と椅子が飛ぶこと請け合いなので非常に難儀するものである。 斯くの如く問題意識を抱えていたものの、やはり惰性でcronを使い続けていたのだが、 昨日、代替cronのネーミングとして “xaicron” という非常に格好良い名前を思いついてしまったので、 この際代替cronについて考えてみることにする。 懸念事項としては、将来RPMパッケージ化などされた時に、実行ユーザーとしてxaicronが作られてしまって、 万が一xaicronというユーザー名を使っている人がいた場合に困るという

    mackee_w
    mackee_w 2013/03/10
    欲しい