タグ

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

  • Furl の timeout と SSL - tokuhirom's blog

    Furl の timeout と SSL Furl は、XS モジュールへの依存を排除するために IO::Socket::SSL のロードを実行時に行っております。 結果として SSL を利用したアクセスのうち、初回のアクセス時は若干の遅延が生じます。 use IO::Socket::SSL には 0.05sec〜0.1sec 程度かかります。 通常は問題がありませんが、timeout を0.1secなどに設定していると、モジュールのロードだけで timeout sec を消費してしまう可能性があります。 HTTPS で通信する場合には use IO::Socket::SSL しておくことを推奨します。 なお、この動作は仕様です。

    punitan
    punitan 2017/05/17
  • WebSocket with Perl6 - tokuhirom's blog

    Yay, I released WebSocket.pm on ecosystem. You can write a WebSocket server very easy! Here is an example chat server in Perl6. https://github.com/tokuhirom/p6-WebSocket/blob/master/eg/chat.pl6 use v6; use HTTP::Server::Tiny; use WebSocket::P6SGI; sub MAIN(Int :$port=80) { my $html = $=finish; $html ~~ s:g/'<<<PORT>>>'/$port/; my $supply = Supply.new; my $s = HTTP::Server::Tiny.new(port => $port);

    punitan
    punitan 2015/10/27
  • Shipped full featured Plack clone for Perl6 named `Crust` - tokuhirom's blog

    Hi, i'm tokuhirom, one of the core developer of Plack. During the past few weeks, I've been hack the Perl6. This is to celebrate the Christmas in the best mood. I'm a minimalist, and I love a software built on clean and well tested parts. I mean tokuhirom loves CPAN. To write the practical web applications in Perl6, it has released some of the library. HTTP::Server::Tiny - IO::Socket::Async based

    punitan
    punitan 2015/10/14
  • 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 のプロセスごと死ぬので、綺麗な状態で都

    punitan
    punitan 2015/06/03
  • perl 5.21.1+ で POSIX.pm が C99 functions を default で export する問題。 - tokuhirom's blog

    perl 5.21.1+ で POSIX.pm が C99 functions を default で export する問題。 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 isfi

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

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

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

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

    punitan
    punitan 2014/09/30
  • なぜ Teng は良いものなのか - tokuhirom's blog

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

    punitan
    punitan 2014/09/01
  • Perl 5.19.9 で実装された signatures の構文をためしてみる - tokuhirom's blog

    use 5.019009; use autodie; use feature 'signatures'; no warnings "experimental::signatures"; package Foo { sub new($class, $n) { bless {n=>$n}, $class; } sub bar($class, $a) { $a+3; } sub baz($self, $a) { $self->{n} * $a; } } sub add($left, $right) { return $left + $right; } say add(1,2); say Foo->bar(4); say Foo->new(5)->baz(4); みたいな感じでつかえる。 【追記】 use 5.019009; use feature 'signatures'; no warning

    punitan
    punitan 2014/02/24
  • anton & giton - tokuhirom's blog

    giton について https://github.com/tokuhirom/giton giton ってのかいた。 git submodule で github においてあるモジュールをインストールしようとしてたけど、ln でリンクはったりするのがめんどいので、なんとなくインストールしてくれる仕組みをつくった。 依存関係とかはとくに面倒みてくれない。 まあ、社内モジュールとかでそんなに依存が複雑になったら負けなかんじするので、そこまでいくようなら CPAN にあげてね、ぐらいのかんじです。 giton.json というファイルに以下のようにかく。 { "dependencies":[ { "repository":"[email protected]/tokuhirom/JKML.git', "ref":"0.01", }, ] } そうするとそれを元に cpanm がなんとなくインス

    punitan
    punitan 2014/02/21
  • 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

    punitan
    punitan 2013/12/14
  • 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 初心者が、ステップアップできるように、私のもっている情報をここ

    punitan
    punitan 2013/11/30
  • Xslate と Mouse と Perl 5.20の話 - tokuhirom's blog

    Perl 5.20 で Mouse とか Xslate がおかしいな! ってことになったら、Mouse のバージョンが古くないかを確認しよう。 Mouse の 1.13 より前のバージョンは Perl 5.20 で実行時エラーになる問題がある。 通常はおきないが、 おきるケースがありえる。 具体的には cpanfile に required 'Mouse', '==1.12'; って書いていたり、cpanfile の中身をとか書いてたりするとか、古いバージョン対象でつくった cpanfile.snapshot を carton install --deployment でいれたりすると、Mouse の古いバージョンがはいってしまう。 この状況におちいったときにわかりづらいエラーになるので、今のうちに Mouse のバージョンをあらかじめアップデートしておいてもよいかもしれない。 たぶんこれ

    punitan
    punitan 2013/11/21
  • Example code for postfix dereference(It'll come with Perl 5.20) - tokuhirom's blog

    #!/usr/bin/env perl use strict; use warnings; use utf8; use 5.019005; use autodie; use LWP::Simple; use JSON::XS; use feature 'postderef'; no warnings 'experimental::postderef'; binmode *STDOUT, ':utf8'; my $json = get('http://c.hatena.com/s/bt847uolrcm3/nearby.json'); my $dat = decode_json($json); for ($dat->{items}->@*) { say join(', ', $_->@{qw(spot_name lat lon)}); } It's useful.

    punitan
    punitan 2013/11/19
  • 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 によっ

    punitan
    punitan 2013/10/08
  • [perl] Text::Markdown::Hoedown was released - tokuhirom's blog

    Text::Markdown::Hoedown was released on CPAN. It's a new markdown parser library for Perl5. It's so great because: T::M::H supports github extensions T::M::H supports custom parsers. You can write markdown2confluence, markdown2hatena or something. T::M::H is a bindings for hoedown library. It's fork of Sundown. T::M::H supports 100% of API in hoedown. Enjoy!

    punitan
    punitan 2013/10/02
  • Carton 1.0 時代の Web アプリケーション開発フロー - tokuhirom's blog

    Carton 1.0 がでたところで、Web アプリケーション開発のフローを一度見直しておきたい、そんな人も多いでしょう。 そんな方のために僕のやりかたをまとめました。各社、議論の叩き台にしていただければよろしいかと存じます。 もっとも重要なことは、、 Carton を使うときに、僕が最重要だと思うことは、できるだけ番環境と開発環境の環境をそろえるということです。CPAN モジュールが番と開発でバージョンちがうから挙動がちがってた!! なんてのは時間の無駄ですし、よくないことですからね。 ですから、各開発環境と番環境をできるだけそろえることを意識していきたいとおもいます。 DarkPAN は使ってない そんなに DarkPAN 的なのを使うほど、DarkPAN 的なオレオレモジュールがないので、git submodule で管理しています。 【201308061241update】

    punitan
    punitan 2013/08/10
  • YAPC::Asia 2013 で「FuturePerl - My thoughts」というタイトルで発表します - tokuhirom's blog

    YAPC::Asia 2013 で、Perl5 の過去、Perl5 のこれから、Perl6 の過去、Perl6 のこれから。そういった話をします。 Perl6 まわりがいろいろうごいている中で、どういう風に対応していくべきなのか、そういったことを初心者の人にもわかりやすく説明するセッションとなる予定です。 是非ご参加ください。 チケットの販売はこちらです →→ http://peatix.com/event/11775

    punitan
    punitan 2013/08/10
  • 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 氏

    punitan
    punitan 2013/08/03
  • alarm(2) と sigitimer(2) の関係 - tokuhirom's blog

    setitimer - 流の処理とは別に定期的に割り込み処理をしたいときにというエントリをよんでおもったことのメモ。 settimer(2) alarm(2) のあたりがこのへんの情報については参考になるわけですが。 alarm() and setitimer(2) share the same timer; calls to one will interfere with use of the other. setitimer(2) って linux だと alarm(2) と同じタイマーを共有してて たぶん setiimer(2) を発行したあと alarm(2) つかうと、setitimer(2) がクリアされるので ライブラリとかが中で alarm() つかってるケースについて注意する必要があるのかな とおもいました。 意外とタイマー制御に alarm() つかってるライブラリっ

    punitan
    punitan 2013/07/26