タグ

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

  • MySQLでタイムゾーンがどう設定されているか確認したい - tokuhirom's blog

    mysql> select @@system_time_zone, @@session.time_zone; +--------------------+---------------------+ | @@system_time_zone | @@session.time_zone | +--------------------+---------------------+ | UTC | SYSTEM | +--------------------+---------------------+ 1 row in set (0.00 sec) で。

  • Server::Starter から簡単に Java プロセスを起動できるようになった - tokuhirom's blog

    JVM には inetd から起動するときのために、file descriptor 0 をソケットとして開く機能がついている。Jetty 等もこの機能に対応しているので、簡単に利用できる。 file descriptor を 0 に固定出来る機能が Server::Starter にあればよかろうということで、以下のような指定で起動できるように実装した。 $ start_server --port=20000=0 java EchoServer この機能により、Java も LL と同様な形態でアプリケーションを運用することが可能となる。 Java では昔から ClassLoader 機構を利用することによりホットデプロイを行うことが可能だが、リソースの解放が漏れるなど開発時の難しさが指摘されている。 Server::Starter 方式では JVM のプロセスごと死ぬので、綺麗な状態で都

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

  • 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

  • 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 をハックする謎コードをつみあげていたのだが、つみあげたコードの方がでかいぐらいのノリになってき

  • テストについての個人の雑感 - tokuhirom's blog

    テストについての個人の雑感です。ここでいうテストってのは、なんかいわゆる開発をドライブするための開発者用のテストについてであって、品質の保証とかについては一切かんがえてません。 ざっくりいうと 「テストを書いた方が効率的に開発がすすむ場合にはテストを書く」 テストに対する認識 ソフトウェアにたいするテスト というものはソフトウェアそのものの価値には関係しない。 なので、テストにたいしてかけるコストなど、すくなければすくないほど良いにきまっておる。 Open Source Software のテストについて オープンソースソフトウェアの場合、送られてきた patch の品質を travis ci で確認したい、っていう要件とか、手元の環境以外での動作確認などを行いたいので、それなりにテストを書く必要がある。 まして、僕が OSS として公開しているものはライブラリが多い。ライブラリは一般にテ

  • Web Application の validation はどのレイヤーでかけるべきか - tokuhirom's blog

    数年前にも同じことかいた気がするけど、最近の状況にあわせてかいてみる。 途中で面倒になってきて説明が雑になっている点をご容赦ください。 言いたいことは「結局、昔はサーバサイドで懇切丁寧なエラーメッセージを出すためにModelではなくControllerでバリデーションに関する知識が必要だったけど 今はJavaScriptでやるから不要だよね111」ってことです。 この表題は、よく話題にあがるところなのだが、理想論としては Model, Controller, Client side のいずれにおいてもきっちりと validation を行うことがのぞましい。 しかし、実際にはなかなか面倒である。ということで、どこをはぶくかというと Controller における Validation であろう。 ユーザーに対する親切なメッセージは JS の側でだすのが理想的。model の validat

  • pull-req の本文にながながと書くぐらいならコミットログにも同じことを書こう - tokuhirom's blog

    pull-req の文にながながと背景の説明をかいているのにコミットログには一行しかメッセージを書かない人というのが非常に多い。 これはよくない。 pull-req の文は git のコミットログじゃないので、git log コマンドでは確認できないし、ソースからもよみとれない。 ながながとそこに書く必要があるならコミットログの方にも書くのがよい。

  • 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 によっ

  • Perl5 における B optree の操作方法入門 - tokuhirom's blog

    いよいよ今週から YAPC だ。YAPC にあわせて、Perl5 の内部構造を復習できるエントリーを書いたのでご一読いただきたい。 Perl5 hack においては、XS をつかった B optree の操作が楽しい。B optree というのはいわゆる AST(抽象構文木) である。Perl5 は byte code interpreter などではなく昔ながらの AST をそのままなめるインタプリタである。であるから、この B optree を操作すれば、簡単にインタプリタの挙動を変えられるというワケ。 一方で、B optree の操作については、あまり知られていないし情報がすくない。日語でも情報がすくないし、英語でもまた情報がすくなく、それっぽいモジュールのコードをよみながら会得するしかないのが現状だ。 すこしでも B 初心者が、ステップアップできるように、私のもっている情報をここ

  • Docker で Growthforecast をインストールする方法 - tokuhirom's blog

    ちょいちょい GrowthForecast のインストールが perl だから難しいとかいってる人をみかけるけれど、Dockerfile が用意してあれば、セットアップは簡単になるんじゃないだろうか。 audreyt が Dockerfile で配布する方法で irc logger を配布していたし、それを真似してみるのもアリかもしれない。そんな風におもって僕もやってみることにした。 Docker をつかうと、アプリをふくんだイメージを簡単に配布することが可能となる。インストール手順をごちゃごちゃとブログに書いたりするのもいいけれど、Dockerfile を共有したほうがいいのではないだろうか。再現可能だし。chef でもなんでもいいけど、docker はインストールが簡単なのがいいし、覚えることがすくなくていい。 いらなくなったら、イメージごとポイすればいいだけで、簡単だしね。 さて

  • 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

  • Shipped FormValidator::Lite 0.37 - tokuhirom's blog

    FormValidator::Lite に Hash::MultiValue やら Hash やらを直接くわせたいという要望がちょいちょいきくので、pull-request をまっていたのですが、こないので実装して出しました。 EXPERIMENTAL 扱いとしてあげてありますので、動作確認報告を twitter などでうけつけております。

  • Docopt.pm - Command-line interface description language in Perl5 - tokuhirom's blog

    https://metacpan.org/module/Docopt I released Docopt.pm to CPAN! Docopt.pm is perl port of [docopt]. docopt helps you: define interface for your command-line app, andautomatically generate parser for it.Docopt.pm analyze SYNOPSIS section in your CLI tool's pod! When you write SYNOPSIS to describe CLI tools usage, then you got a working code. docopt is based on conventions that are used for decades

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

  • OrePAN2 は OrePAN となにがちがうのか - tokuhirom's blog

    OrePAN2 では、モジュールを多めにつかって、コードベースをちいさくしたいとおもって OrePAN を書きかえようとおもったのですが、OrePAN は今すでにつかわれている環境がある上に、いろいろと BK がつまっていて、かきなおすと全部かきなおすかんじになっていて、互換性がうしなわれる可能性が結構あるかんじなので、メジャーバージョンアップとしました。 機能的には以下のような点がかわっていると songmu さんがいっていました。 git repo直接指定でtarball作ってくれてmirrorにしてくれるところまで自動化されているtar ball url から直接 inject できたりもする機能的にはあまりかわっていませんが、使い勝手と documentation が向上しているので、新規につかう場合には OrePAN2 がオススメよ! 【追記】 いまおもいだしたのですが、OreP

  • lexical subs in test cases - tokuhirom's blog

    rjbs says lexical subs is possible to exceed the package declaration. It's useful for testing. my sub hoge { say "hoge" } package Foo { hoge(); } package Bar { hoge(); }

  • Perl 5.18 時代における Core module についての捉え方について - tokuhirom's blog

    Perl 5.20 で、CPANPLUS とその依存モジュールたちが core distribution から分離されます。 また、5.22 では CGI.pm と Module::Build が分離されそうです。 ここにいたり、Perl 5 の core distribution にはいっている、ということの意味が徐々にかわってきつつあります。 では、現在の状況はなぜおきているのかを考えてみましょう。 configure_requires の普及Perl 5.8.5 あたりの時代では、Module::Build などは core distribution にはいっていないと、つらかったわけですが、configure_requires が普及したことにより、インストーラを CPAN shell で自動的にインストールすることができるようになりました。 これにより Module::Build

    bayashi_net
    bayashi_net 2013/05/29
    おーscan-prereqs-cpanfile 欲しかったとこでした
  • 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