タグ

ブックマーク / blog.64p.org (73)

  • Perl5 での Plack に当たる Crust をみんなで作った話 - tokuhirom's blog

    この記事は Perl 6 Advent Calendar 2015 の1日目です。 Perl 6 は、2015年のクリスマスにリリースされることになっており、我々としてはそれを待ち受ける必要があると考えました。 Perl6 がリリースされた暁には、いろいろ遊ぼうかなという気持ちをみなさんお持ちだと思います。 Perl6 には夢が詰まっており、様々な機能が含まれている夢の言語です。 そういった、夢の機能については今後、クリスマスまでの間に、語られていきますが、稿では、現実的な話をします。 今年のクリスマスに Perl6 がリリースされるぞ、という宣言がでたわけですが、そうなってくると、Perl6 をクリスマスから早速遊びたいなと思うわけですよね。 そして、私は web engineer なので、 Perl6 が出たら早速 web application を書きたいと思うわけです。 しかし、

    karupanerura
    karupanerura 2015/12/01
    Crustすごい
  • Perl6 のフィボナッチ数列生成についての解説 - tokuhirom's blog

    mattn ブログで紹介されている Perl6 のフィボナッチ数列が奇妙に見える人が多いようなので、まともな解説。 ref. http://mattn.kaoriya.net/software/lang/perl6/20151026144119.htm フィボナッチ数列とは以下のような数列です。 1, 1, 2, 3, 5, 8, 13, 21, 34, 55 最初の2つの数字が 1, 1 でして、その後のものは直前2つの数字を足したものです。 よって、Perl5 で記述した場合、先頭10個のフィボナッチ数列を求めるには以下のようになります。 use v5.16.0; sub fib { state %memo; # 一応 memoize ぐらいはしておく my $n = shift; $memo{$n} //= do { if ($n == 0 || $n == 1) { 1 } els

    karupanerura
    karupanerura 2015/10/27
    わかりやすい解説
  • Perl 5.20 以後 $& は遅くない - tokuhirom's blog

    Perl では長らく $& を一度でもプログラム中に記載しているとあらゆる正規表現マッチが遅くなるというイシューが知られていた。 しかし perldoc perlvar してみると、以下のように記載されている。 In Perl 5.20.0 a new copy-on-write system was enabled by default, which finally fixes all performance issues with these three variables, and makes them safe to use anywhere. Perl 5.20 以後では気にせずに $& を利用してもよいようだ。 という話が社内チャットで出た。

    karupanerura
    karupanerura 2015/05/21
    yatta!
  • Linux 上で5秒で chroot jail を使えるコマンド「jailing」が凄い! - tokuhirom's blog

    https://github.com/kazuho/jailing/ kazuhoさんがやってくれました。 ずいぶん前からlinuxでchroot jailを作るのに簡単な方法ないかなーと思ってました。個人的にはsystemd-spawnというのを使ってたのですが、幾らか気に入らない所があったり構築に時間がかかったり、ディスク容量を消費していました。簡単に使えて、ディスク容量を消費しないやつがほしいなーっておもってたんです。 とあるIRCで昨日、kazuhoさんと「ほしいですよねー」という話から始まって、github にある docker とかも物色しながら「いいのないねー」とか言ってたらkazuhoさんが「もすこし綺麗に書けそう」って言い出して朝から格的に書き始めてついさっき出来上がりました。速いw 名前はjailing とても小さく、実装コードだと100数十ステップ程です。しかもpe

    karupanerura
    karupanerura 2015/05/13
    sugoi...!!
  • perl 5.21.1+ で POSIX.pm が C99 functions を default で export する問題。 - tokuhirom's blog

    https://github.com/yappo/p5-Geo-Coordinates-Converter/pull/1 Perl 5.21.1+ だと思うんだけど、POSIX.pm が C99 functions をサポートしていて、さらにそれを default で export してくる。具体的には round() とかそのへん。 具体的には以下のものね。 'strtold', # platform varying (C99) # C99 math qw/acosh asinh atanh cbrt copysign cosh erf erfc exp2 expm1 fdim fma fmax fmin fpclassify hypot ilogb isfinite isgreater isgreaterequal isinf isless islessequal islessgrea

  • GS Collections Kata をひと通りやった - tokuhirom's blog

    GS Collections というゴールドマン・サックスさんが出してる Java 用のコレクションライブラリがある。 Java Day Tokyo/JJUG CCC 2015 Spring で知ったのだが、これは以下のような利点を持っているようだ。 使いやすいインターフェース メモリ使用量が標準のコレクションよりもよい場合がある Multimap や sortedbag などの標準にはないコレクション GS Collections には GS Collections Kata という、チュートリアルがある。これは junit test case の形式をしていて IDE で読みこめばすぐに試せる。 順番に指示通りにやっていけば試せるんで、なかなか良い。 例も Company, Order, Supplier, LineItem など具体的で、わかりやすい。結構手間かかってるな、という印象

  • [perl] Error in tempfile() using template /tmp/XXXXXXXXXX: Have exceeded the maximum number of attempts (1000) to open temp file/dir at hoge.pl line 14. のようなエラーが発生した場合の対処方法 - tokuhirom's blog

    File::Temp を使っていると、表題のようなエラーが発生することがある。 これは一件すると、ファイルを開く処理が失敗した用に見えて、ファイル開き過ぎとかかなあと思うんだけど、実際はそういうことではないようだ。 File::Temp の実装はこのへんになっていて、要するに EEXIST が発生した場合に 1000 回ファイル名を変えてリトライして、その結果としてダメだったというときにいい感じにあがる例外である。 https://github.com/Perl-Toolchain-Gang/File-Temp/blob/master/lib/File/Temp.pm#L602 ここを見れば分かる通り、EEXIST の時だけしか次のループにいかないので、OS 的な問題ではない。 https://github.com/Perl-Toolchain-Gang/File-Temp/blob/ma

  • Xslate の mark_raw は template に書かない - tokuhirom's blog

    Xslate の mark_rawtemplate 側では使わずに、Controller ないし Model で使って欲しい。 ある文字列が、HTML として処理すべきものかどうかは、サーバー側で判断すべき事案であって、マークアップエンジニアが判断すべき事項ではないから、というのが大きい。 「タグがうまく入力できないんですけど」というディレクターからの起票によって、それをマークアップエンジニアがなんとなく TT の | html はずして XSS 大発生! というような事態は、昭和の時代には多発していたという。 そのような惨事を我々は繰り返すべきではない。 歴史に学ばなくてはならない。

    karupanerura
    karupanerura 2015/03/20
    EscapeをするかしないかはTemplateで判断するべきでないという話。
  • TOEICで125点しかとれないような人でもできる英文バグレポートの方法。 - tokuhirom's blog

    または、Pros と Cons をまちがえて書いてしまうような人でもできる英文バグレポートの方法。 まあ小手先のノウハウだけど、俺はこうやってるよ、という話。 ともかく再現可能なテストケースをかく再現可能なテストケースを書けば、コミュニケーションコストを大幅に削減することが可能。これは日人同士の場合でもそうだし、プログラマにとっては必須の技能の一つであるから、是非身につけて実践するべき。 マルチスレッドに起因するものなど、再現可能なテストコードがかきづらいものはともかく、それ以外であれば、再現テストコードを書くべき。 再現テストコードを書けない場合、そもそも自分がバグの原因を把握できていない場合がおおいので、そんな状況でなれていない言語によるコミュニケーションをとるのは困難。

  • [perl] epoch 秒っぽいやつを置換する - tokuhirom's blog

    https://metacpan.org/pod/from_unixtime をみてやってみた。 > cat sql_result id 1 created_at 1419702037 updated_at 1419702037 > perl -MTime::Piece -pe 's/\b(1[0-9]{9})\b/"$1(".localtime($1)->strftime("%F %T").")"/ge' < sql_result id 1 created_at 1419702037(2014-12-28 02:40:37) updated_at 1419702037(2014-12-28 02:40:37) 自分の場合だとこんぐらいのワンライナーでいいかな、と。 上記の正規表現は極めて雑だが、以下のように、一般的に求めたい範囲の unix time にはそれなりにマッチする。 > ep

    karupanerura
    karupanerura 2015/01/04
    epochコマンド便利っぽい
  • JJUG CCC 2014 Fall で「Java で1から10まで書いた話」を発表してきました - tokuhirom's blog

    Blog Search JJUG CCC 2014 Fall で「Java で1から10まで書いた話」を発表してきました Javaで1から10まで書いた話(sanitized) from Tokuhiro Matsuno コード書いた話が少ない中でわりと異色な感じでしたが、思ったより反応もあってよかったです。 Created: 2014-11-28T08:09:37 Updated: 2014-11-28T08:09:37

    karupanerura
    karupanerura 2014/11/26
    いいはなしだった
  • tinyorm 0.28.7 がでてます - tokuhirom's blog

    SELECT ~ FOR UPDATE と INSERT ~ ON DUPLICATE KEY UPDATE の2つの機能が実装されてます。 この2つは、mysql 特有のクエリですが、ないと不便なのでつけました。 【追記】 FOR UPDATE は標準だそうです!!

  • LL から Java に移行した人がはまりがちなこと - tokuhirom's blog

    こんにちは。Java 初心者です。 Java 初心者、得に LL から Java に来た人にありがちな問題について社内向けに書いたものをオープンアンドシェアさせていただきます。 前提として、我々は Java 8 でガンガン攻めているということをご承知おきください。 また、自分がこの数ヶ月で「うわー。こうしとくべきだったのかー」と気づいたやつをドヤ顔で語っているということにもご注意ください。 【追記】 対象は中規模 B2C の場合です(中規模というのは facebook より小さいという程度の意味です) 例外を握りつぶさないようにしよう Eclipse が生成する以下のようなコードをそのまま残しているケース。 これは言うまでもなく良くないですね。デバッグが困難になります。 try { } catch (IOException e) { e.printStackTrace(); } Perl

    karupanerura
    karupanerura 2014/10/01
    良い
  • Content-Security-Policy と nonce の話 - tokuhirom's blog

    Content-Security-Policy の nonce を利用すると、XSS の脅威をかなり軽減できます。 そこで、Web Application Framework ではデフォルトで対応したほうがよいのではないか、という旨を @hasegawayosuke さんから教えて頂いたので、実装について考えてみました。 とりあえず CSP の nonce はどういうものなのかを考慮するために、コード例を探していたのですが、実際に動くサンプルというものが nonce 関連のもので見当たりませんでした。 そこで、実際に動くサンプルを用意しました。 https://github.com/tokuhirom/csp-nonce-sample 以下は Sinatra で書かれたサンプルコードです。 require 'sinatra' require 'securerandom' get '/' d

    karupanerura
    karupanerura 2014/09/25
    よさそう
  • Perl 初心者がウェブアプリケーションを書く時に気をつけるべきこと - tokuhirom's blog

    $c->req->param('id') みたいなメソッドは使ってはいけない。これは歴史的経緯から残っているものなので、基的に使わない方がいい。 $c->req->parameters->{id} をかわりに使ってください。 Perl の世界には List コンテキストというものがあって、これがウェブアプリケーションを開発するときには鬼門となります。 +{ id => $c->req->param('id') } のようなコードは、param メソッドはリストコンテキストではすべての id を返すので、 ?id=3&id=hasegawa&id=yosuke というようなクエリが来ている場合、 +{ id => 3, hasegawa => 'yosuke' } のようなデータ構造が作成される。これは明らかに意図していない挙動である。 以下の様にかくのがおすすめです。 my $id =

  • js-xlsx で js で excel のファイルを生成する - tokuhirom's blog

    Excel ファイルの生成、めんどくさいですよね。CSV の生成めんどくさいですよね。HTML を出力した上でさらにやるのはだるい、というわけで、HTML の DOM を解析して JS で XLSX 生成してダウンロードさせたらいいんじゃね?と思ってそういうのやれるやつ探したら、js-xlsx ってのがあった。 これをつかって、HTML のレポートから XLSX を生成するコードを書いた。なかなかうまく動く感じしてる。 http://tokuhirom.github.io/js-xlsx-demo/ td タグに class を指定すると数字カラムになる、みたいな感じになってるのがいいかんじです。 js-xlsx で生成したXLSXは、FileSaver.js で保存させてます。 デモで利用している JS は以下のようなものである。簡単でしょ。 "use strict"; var data

  • Date::Simple が local $ENV{TZ} をさしかえててタイムゾーンがかわっちゃう件 - tokuhirom's blog

    Date::Simple#format が内部で local $ENV{TZ}='UTC+0'; POSIX::strftime(...); のようにしており、Date::Simple#formatの呼出以後でタイムゾーンが UTC にかわってしまうという問題がよくしられている。 この問題は、そういえば最近は話題にあがらないなあ、とおもっていろいろ調べたところ、これは Perl 体の issue と判断されて、perl 5.8.9 の時点で修正されていた。 On some systems, changes to C<$ENV{TZ}> would not always be respected by the underlying calls to C<localtime_r()>. Perl now forces the inspection of the environment on

  • Shipped Localizer 0.01 - tokuhirom's blog

    https://metacpan.org/release/Localizer Abstract: I released yet another localizetion library for us(me and co-workers). Localizer というモジュールをだした。 Locale::Maketext はよいモジュールだが、OO-ish ではないしドキュメントがわかりづらい。 Locale::Maketext::Lexicon は便利だが、内部のコードが高度すぎてなにをやっているのかよくわからず、オーバースペックな感じだなと感じることがあるし、なにか変えようとしたときになにをしているのかさっぱりわからないので、よく困っていた。 Locale::Maketext::Lexicon をハックする謎コードをつみあげていたのだが、つみあげたコードの方がでかいぐらいのノリになってき

  • Perl で簡単にパーザを書く - tokuhirom's blog

    パーザを書こうという場合、Parse::RecDecsent のようなモジュールを使うのが一般的だが、Perl5 の正規表現は強力すぎるため、そんなものに頼らなくても超絶簡単にパーザを実装することが可能だ。 以下に、四則演算のパーザを示す。 use 5.018000; package Calc { use Carp (); sub parse { local $_ = $_[1]; _parse_expr(); } sub err { my ($msg) = @_; my $ret = join('', $_, "\n", (" " x pos()) . "^\n", $msg, "\n", ); Carp::croak $ret; } sub _parse_expr { my @nodes; until (/\G\s*\z/gc) { my $m = _parse_add() or do

    karupanerura
    karupanerura 2014/01/22
    benri
  • AngularJS を本気でつかうための tips - tokuhirom's blog

    最近、管理画面で AngularJS をつかってみている。 そんな中で、いくつか工夫した点があるのでそれをシェアさせていただきます。 XHR のエラーを表示する XHR のエラーがおきた際のハンドリングをいちいち手でかくのは非効率。管理画面とか中の人しかつかわないので、エラーがおこった旨を随時報告するだけでよい。 そんなケースでは以下のようにする。 angular.module('myapp.exceptionHandler', []) .config(['$httpProvider', function ($httpProvider) { $httpProvider.interceptors.push(function($q, $log, $rootScope) { return { 'responseError': function(response) { $log.error(res