ブックマーク / gfx.hatenadiary.org (9)

  • Perlのbug report echo-systemはどのように素晴らしいのか - Islands in the byte stream

    Perlのbug report eco-systemまわりはOSSとしてはわりと理想的だと思っています。つまり有用なレポートを生成する仕組みがあり、perlコア開発者だけでなくライブラリ開発者もその仕組を活用できるため、可搬性のあるソフトウェアとしてメンテナンスし続けやすいのです。もっとこのあたりはもっと真似されるべき。 まずバグレポートには現象と再現手順と環境の情報が必須ですが、環境の情報は perl -V で非常に簡単に取得できます。これは以下の情報を含みます。 ソフトウェアの名前とバージョン (e.g. perl 5.18.1) ターゲットプラットフォーム (e.g. osname=darwin, osvers=12.4.0, archname=darwin-2level) ビルドオプション (e.g. config_args='-Dprefix=/Users/goro-fuji/.

    Perlのbug report echo-systemはどのように素晴らしいのか - Islands in the byte stream
    miyashiki
    miyashiki 2013/12/04
  • Perl XS を書くようになったきっかけ - Islands in the byte stream (legacy)

    THE INTERVIEWS がサービス終了ということで、一つだけ消えるには惜しいというか懐かしい記事があったので少し加筆修正して転載します。JHackers でも似たようなことを話してますね。 Perl XS を書くようになったきっかけ、また、どのようにして今のような XS マジシャンになったのか。そのあたりの事をお聞かせください 2000年頃の話です。ぼくはCGIスクリプトでちょっとしたゲームデータの集計サイトをやりたくてプログラミングを覚えたのでした。これがそこそこ重い処理で、次第にもっと高速にしたいと考えるようになりました。一方、当時ぼくはお金もなくVPSも一般的でなかったので、CGIスクリプトしか選択肢はありません。そこで初心者ながらいろいろ調べることにしました。 とりかかったのは行指向のテキストで保存していたデータをSQLiteにすることでした。しかし当時はWindows上で開

    Perl XS を書くようになったきっかけ - Islands in the byte stream (legacy)
    miyashiki
    miyashiki 2013/12/04
  • chomp() は $/ に依存していると知れ! - Islands in the byte stream

    perldocにあるように、chomp()の挙動は $/ に依存します。ということは、うっかり local $/ したスコープで chomp() を行うと、何もおきません。 この結果起きる現象がきわめて不可解なので、readlineの直後以外の場面ではchomp()を使わず s/\r?\n\z//xms するのが無難でしょう*1。 use strict; use warnings; local $/; my $s = "Hello\n"; chomp $s; print "[$s]\n"; # => #[Hello #] Xslateがまさにこれにはまっていたので修正しました。 https://github.com/xslate/p5-Text-Xslate/commit/92c7387b0f0ebdad5761c420a54564b9e8d2f635 [追記] *1:はてブのコメントをう

    chomp() は $/ に依存していると知れ! - Islands in the byte stream
    miyashiki
    miyashiki 2013/11/16
  • ISUCON用にNYTProf+Prefork PSGI serverのベストプラクティスをコマンドにまとめた - Islands in the byte stream (legacy)

    これが価値を発揮するような出題ではなかったので結局つかいませんでしたが。あとでCPANizeはするつもりです。 てきとうなところで ^C でとめると結果を自動的に集計してreportをつくるところまでやってくれます。あくまでも開発用で、番用ではありません。 なおこれを使う場合、アプリ側で DB::enable_profile() / DB::disable_profile() を行う必要があります。tokuhiromのエントリも参照のこと。 #!/usr/bin/env perl # usage: plackup-nytprof --port 1982 app.psgi use 5.10.0; use strict; use warnings; use Cwd qw(getcwd); use File::Path qw(rmtree); sub run { my(@args) = @_;

    ISUCON用にNYTProf+Prefork PSGI serverのベストプラクティスをコマンドにまとめた - Islands in the byte stream (legacy)
    miyashiki
    miyashiki 2013/11/11
  • PerlでWebAppの開発に必要なN個のこと - Islands in the byte stream (legacy)

    あるプログラミング言語で実際にWebAppを開発できるようになるまで、何が必要だろうか。言語仕様の習得は終えているとしよう。おそらく、最低限以下のような知識が必要だと思われる。とりあえずPerlについて知っていることを書いた。 パッケージマネージャ まずライブラリの管理。モジュールをインストールし、可能であればバージョンを固定し、適切にロードする機能が必要だ。Perlの場合は cpanm というCPANクライアントでライブラリをインストールする。バージョンの固定とライブラリパスの設定は carton で行う。 https://github.com/miyagawa/cpanminus https://github.com/miyagawa/carton アプリケーションサーバ Webサーバへのインターフェイスとしては、PSGIという仕様がある。PSGIに準拠したツールキットとしてPlack

    PerlでWebAppの開発に必要なN個のこと - Islands in the byte stream (legacy)
    miyashiki
    miyashiki 2013/09/10
  • Released Plack::Middleware::DevFavicon - Islands in the byte stream (legacy)

    開発環境と番環境で favicon を変える というのに感動したのでPlack middlewareでやってみました。 単に favicon.ico ないし favicon.png という名前にマッチしたらグレースケールにして返すというだけの代物ですが、enable_ifで簡単に導入できるのが楽かなと。 使い方は以下のとおり。P::M::Staticの前にenableしてください。 builder { enable_if { $ENV{PLACK_ENV} eq 'development' } 'DevFavicon'; enable 'Static', path => qr{/favicon\.(?:ico|png)$}, root => $path_to_assets; ...; }; https://github.com/gfx/Plack-Middleware-DevFavico

    Released Plack::Middleware::DevFavicon - Islands in the byte stream (legacy)
    miyashiki
    miyashiki 2013/09/08
  • 『パーフェクトRuby』の感想 - Islands in the byte stream (legacy)

    Ruby言語自体はまあ書ける、というレベルでも、さてRubyでコマンドのひとつでも作ってgemにして公開しようかとなるといろいろ知らなきゃいけないことがたくさん出てきてああ大変だと思うわけですが、『パーフェクトRuby』はbundle gemを使った雛形の作り方からgemspecの書き方、一章まるまる割いて実際のコマンドラインアプリケーション作成のチュートリアルなどまさに次の一歩を踏み出すのにちょうどよい感じです。言語仕様もわりと丁寧に説明しており、とくに初見ではわかりにくいブロックメソッドの実装方法などにも触れているのが好感をもてます。 ただ惜しいかな!14章「よく使われる標準外のツール」で典型ですが、ページのヘッダに章のタイトルしかないのが残念で、特にこの章は様々なツールを紹介する章なので扱っているツールをヘッダに書いてほしかったという思いはあります。目次をみればわかるので重箱ですけど

    『パーフェクトRuby』の感想 - Islands in the byte stream (legacy)
    miyashiki
    miyashiki 2013/08/29
  • test-travis(1)というコマンドを書いた - Islands in the byte stream (legacy)

    https://github.com/gfx/App-test-travis Travis-CI は CPAN Testers のない言語だとライフチェンジングなサービスだし、 CPAN Testers のある Perl においてもpushごとにCIを走らせたりちょっと変わった設定でテストを走らせたりできる大変便利なサービスですが、設定ファイルを正しく書くのがわりと面倒で、うまく動かすために.travis.ymlを少し変更してcommit & pushというのを何度もするはめになったりします。なので、ローカルで.travis.ymlを読んで実行するコマンドがあれば便利だろうというのがこれを作った動機です。 まだ作りはかなり適当で、before_install, install, before_script, scriptセクションを順番に実行するだけのもので、envやversionsをよし

    test-travis(1)というコマンドを書いた - Islands in the byte stream (legacy)
    miyashiki
    miyashiki 2013/08/13
  • JSXの最近の新機能 - Islands in the byte stream (legacy)

    テンプレート関数がユーザー定義できるように (0.9.58) array/mapリテラルのケツカンマを許可(0.9.58) string + number が許可。ただしその他のオブジェクトは依然として明示的な変換が必要 (0.9.58) optimizerが大幅に強化(0.9.54~58) String.fromCharCode(1, 2, 3) や "a".charCodeAt(0) などもコンパイル時に定数になる inline化で複雑な式でも展開できるケースが増えた `jsx --test a.jsx` で_Testがなくてもエラーにしない(0.9.53) 単なるsyntax checkとしても使えるようになった 型推論できる箇所がいろいろ増えた(0.9.49, 0.9.58) `jsx --enable-source-map --run a.jsx` で例外時にJSXソースのファイ

    JSXの最近の新機能 - Islands in the byte stream (legacy)
    miyashiki
    miyashiki 2013/07/27
  • 1