タグ

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

  • 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 以後では気にせずに $& を利用してもよいようだ。 という話が社内チャットで出た。

  • 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

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

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

  • 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 =

  • なぜ Teng は良いものなのか - tokuhirom's blog

    なぜ Teng は良いものなのか、を YAPC で再考させられたのでここにメモしておく。 Teng は自社開発のウェブアプリケーションを作ってる人たちが作っていて、それがうちのニーズにあってるのでいいっていう話であって、どこでもすごい最高!! と主張したいわけではないです。まあ、個人の感想ですね。 ソースが読みやすい ソースがよくモジュール化されていて、読みやすい。自身で書いている部分が多いという贔屓目を抜きにしても読みやすいんじゃないかなーと。 僕らのような自社開発のウェブ屋では、なにか無茶な要望を受けた時にささっと対応するということが求められるシーンが多いので、ソースの読みやすさというのはかなり重要なファクターとなっています。 複雑な SQL を発行できないように機能が制限されている SQL ビルダーを使って JOIN やサブクエリを駆使したウェブアプリケーションを開発してしまうと、運

  • 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

  • Devel::NYTProf で Starlet/Starman (Plack) でうごくウェブアプリケーションのプロファイリングをおこなう方法まとめ - tokuhirom's blog

    Devel::NYTProf は Perl5 の世界でもっとも人気があるプロファイラである。表示が美麗であるし、ステップごとの処理速度が簡単にわかるのでとても便利だ。 そんな Devel::NYTProf であるが、Starlet/Starman のようなプリフォーク式のサーバーでうごくウェブアプリケーションとくみあわせる場合の方法論として、わかりやすい資料がみあたらなかったのでここに記すものである。 環境変数 NYTPROF を設定する Devel::NYTProf は環境変数で挙動を変えられる。 plack とくみあわせる場合には、以下のようにするとよい。 NYTPROF=sigexit=int:savesrc=0:start=no sigexit=int 通常、Devel::NYTProf は END { } ブロックでデータのファイナライズ処理をおこなうのだが、SIGNAL によっ

  • __DATA__ の何行目をよんでいるかを知りたい - tokuhirom's blog

    DATA からデータをよんでいるときに、今ソースコード全体のうち、何行目をよんでいるかを知りたいというケースがある。 そんな場合は以下のようにすればよいだろう。 #!/usr/bin/env perl use strict; use warnings; use utf8; use 5.010000; use autodie; use Fcntl qw(:seek); my $line_number; my $pos = tell(*DATA); seek DATA, 0, SEEK_SET; read DATA, (my $buf), $pos; $buf =~ s/\n/$line_number++/ge; while (<DATA>) { warn $line_number + $. . " : " . $_; } __DATA__ hoge fuga hige そもそも *DATA

  • 119行でPlack対応のWeb Application Framework を書いてみる - tokuhirom's blog

    拡張性等を考慮しなければ、以下のように簡単にかくことができる。 View を XSlate きめうち。ルータは given-when で、設定ファイルは .pl という構成。だいたいのウェブアプリケーションは、これぐらいの機能の WAF で十分。ルーター部分は Router::Simple とかにさしかえた方がよいかもだけど。 5年前に Python で似たような記事をみたのだが、今はみんなのがんばりによって Perl でもおなじことができるようになった。 use strict; use warnings; use 5.10.1; package MyWAF; use parent qw/Class::Data::Inheritable/; use Path::Class; use Text::Xslate qw/mark_raw/; use Encode; use Time::Piece

    azumakuniyuki
    azumakuniyuki 2013/09/04
    参考になった
  • CPAN における Authority の話 - tokuhirom's blog

    ざっくりいうと: 他の人にかわりにアップロードしてもらう時は x_authority を設定するとよい CPAN では、共同メンテナ(co-maintainer)を任命するなど、権限まわりでいろいろなことができます。 しかし、この共同メンテナ機能は、基的にパッケージ単位で管理されていることに注意する必要があります。 得に注意が必要なのは、パッケージの追加時です。新しいパッケージが PAUSE に登録されると、そのパッケージをふくむ dist をアップロードした人が権限をもつことに なってしまいます。 たとえば Teng を例にとると、Teng の primary maintainer は nekokak さんですが、現在は cho45 さんが主にメンテナンスをおこなっています。 ある時、cho45 さんが Teng::Plugin::BeautifulQuery というパッケージを Te

  • PAUSE における comaint とはなにか - tokuhirom's blog

    よく miyagawa さんとかが comaint が云々といっていますが、意外としられていないのが comaint の実態です。 まずは PAUSE の処理フローについて考えてみましょう。 まず minil release とかして tar ball を PAUSE のサーバーにアップロードします。この時、アップロード先は authors/id/M/MO/MOZNION/HTML-Shakan-0.18.tar.gz とかになります。 そうすると PAUSE のインデクサがブンブンと動きだして、META.json の provides セクションまたは .pm を解析して、package とバージョンの情報が抽出され、データベースに登録されます。 この際、新規ネームスペースや、自分がもってるネームスペースならいいのですが、他の人がもってる namespace の場合には UNAUTHOR

  • JSON::XS とそれにまつわる歴史的な過去の話、まとめ。 - tokuhirom's blog

    今日リリースされた common::sense-3.7 が壊れていた影響で、日の皆さんが混乱しているようなので、丁寧な JSON::XS の歴史解説エントリをここに記す。 perl-5.18 の hash randomization に関するゴタゴタ 5.17 で JSON::XS のテストがこける hash randomization の影響。これにたいし、mlehmann 氏は、hash randomization ではセキュリティが強化されないし、意味がないと主張。 修正版をリリースしない。 reini 氏、Cpanel::JSON::XS をリリース(2013-03-01) https://metacpan.org/module/RURBAN/Cpanel-JSON-XS-2.33_03/XS.pm JSON::XS の修正がなされないので、ついに forkの術。 reini 氏

  • Web アプリケーションのロジックを手続きとして実装する話 - tokuhirom's blog

    yusukebe のObject::Containerを応用したModel呼び出し のあたりをよんでの感想ですが。 一時期 Catalyst の影響もあって、モデルのインスタンスつくったりなんだりもしていたのですが、結局のところウェブアプリケーションにおいては、モデルをがんばってオブジェクトにモデリングしようとか考えるよりも、つまり手続として扱った方がしっくりくるな、ということに自分の中でなりまして、最近は、ごちゃごちゃ考えるのをやめて、手続きとして実装しています。 yusukebe の例をベースにはなしをすすめると、コントローラを以下のようにかきます。 package MyApp::Web::Controller::Root; use Mojo::Base 'Mojolicious::Controller'; use MyApp::M::Entry; sub index { my $se

  • Future Perl - YAPC::NA 2013 に参加して - tokuhirom's blog

    YAPC::NA 2013 に参加してきました。その中でも印象にのこったことを取り急 ぎアップしておきます。 今回は日からは @yusukebe と @xaicron と TPF の President である Karen が参加していたようです。 僕は今回がはじめての US だったので、いろいろと困惑することもありました が、旅行記などには興味がないという人も多いでしょうし、書くのがめんどく さいですし、たぶん xaicron が書くと、ほとんど内容がかぶるので割愛させ ていただきます。 デニーズのシェイクに興奮する yusukebe と xaicron エントリーでは YAPC::NA で僕が感じたこと、技術的に Perl Community が どこに向いているか、といったあたりのことについて述べていきたいとおもい ます。 今年は Perl 25 周年ですので、これまでの Per

  • Reply is awesome! - tokuhirom's blog

    https://metacpan.org/release/Reply Reply is new REPL command written by doy++! It's pretty lightweight! I switched to this repl yesterday!

    azumakuniyuki
    azumakuniyuki 2013/06/07
    試してみたけど此れは良い、長いワンライナーの代用で使える。
  • Minilla を用いた Perl モジュールの作り方 - tokuhirom's blog

    http://shanon-tech.blogspot.jp/2013/05/perl.html Perl モジュールの作り方、2013年においては Authoring tool をつかって作るのがよいです。具体的には Minilla でつくるのがオススメであります。 perlbrew なり plenv なりで perl をいれたあとは、 % cpanm Minillaとして Minilla をインストールします。 % minil new Fooとすると、Foo.pm のスケルトンができあがります。作者の名前などは ~/.gitconfig などから自動的にさがしてきますので、設定不要です。 できあがったディレクトリは以下のような形になっています。 Foo ├── Build.PL ├── Changes ├── cpanfile ├── lib │   └── Foo.pm ├── LI

  • OSS とテスティングと CPAN Testers の話 - tokuhirom's blog

    http://blogs.itmedia.co.jp/hozawa/2010/01/post-b5e0.html URL とあんま関係ないかんじのチラ裏ですけど。 実際、オープンソースのプロダクトって、作者の環境とちがう環境だとうまくうごかないみたいなことはあって、memcached は Solaris だと変な挙動をしてたし、Q4M は i386 固有の問題があったとか、まあそういうのは色々ありますわな。 で、どうするかというと、みんながつかってる構成をつかえばいいじゃーん、という。memcached を linux 2.6.x でつかってるユーザはたくさんいるので、その環境におけるバグはすくないはずだから、linux 2.6 でつかうのが一番安全だろう。とかそういうこと。 OSS はつかうユーザがおおいほど、バグにあたる可能性は低くなるはず。 Solaris でうごかないのは残念だとお

  • httpstatus コマンドで、HTTP のステータスコードをすばやくしらべる! - tokuhirom's blog

    一般的な Web Programmer ならば、HTTP Status code はすべて暗記していると聞きました。 しかし、僕は初心者なので、なかなか覚えきれていないので、HTTPのステータスコードをさがすのに便利なツールを用意しました。App::httpstatus です。インストール方法は cpanm App::httpstatus です。というか依存とかないのでhttp://api.metacpan.org/source/TOKUHIROM/App-httpstatus-v1.0.0/httpstatus をコピーしてくればうごきます。 使い方は以下のとおりです。 4xx なコードを列挙する。 % httpstatus 4 400 Bad Request 401 Unauthorized 402 Payment Required 403 Forbidden 404 Not Foun

    azumakuniyuki
    azumakuniyuki 2013/02/22
    Webから遠いところにいるので助かる
  • ☆plenv☆ 〜 brand new perl5 installation management tool♪ 〜 - tokuhirom's blog

    Hi, I implemented brand new perl5 installation management tool named plenv. from rbenvplenv is inspired from rbenv, from ruby world. rbenv provides a missing feature in perlbrew, it can use .ruby-version file to manage project local perl module. Use .perl-version!!With plenv, when you put a .perl-version file to ~/dev/MyProj/.perl-version, you can use your required perl version under the ~/dev/MyP

  • tokuhirom blog

    Blog Search when-present<#else>when-missing. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: ${entry.path} [in template "__entry.ftlh" at line 3, column 25] - Reached through: #include "__entry.ftlh" [in template "entry.ftlh" at