タグ

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

  • [Ruby] オーバーライドとか無視してKernel#classを直接呼びたい - Islands in the byte stream (legacy)

    直接 `self.class` を呼ぶと、#class がオーバーライドされている可能性があるので任意のオブジェクトに対して呼ぶことはできません。よってKernel#classを直接呼ぶ必要があります。そこで、以下のように#classのUnboudMethodを得て、それにレシーバを与えて呼び出すことで解決できます。 def self.class raise "boom!" end get_class = Kernel.instance_method(:class) # and later p get_class.bind(self).call とはいえパフォーマンスがあまりよくないのでもっといい方法があればそっちを使いたい。 あと Kernel#class の上書きはやめてくださいお願いしますm(_ _)m。 [追記] 別解もあるようです。 このままだと汎用的には使えないのでFixnum

    [Ruby] オーバーライドとか無視してKernel#classを直接呼びたい - Islands in the byte stream (legacy)
    taka222
    taka222 2013/09/06
    ”[Ruby] オーバーライドとか無視してKernel#classを直接呼びたい - Islands in the byte stream”
  • 常識を覆すソートアルゴリズム!その名も"sleep sort"! - Islands in the byte stream (legacy)

    TwitterのTLで知ったのだが、少し前に海外掲示板で"sleep sort"というソートアルゴリズムが発明され、公開されたようだ。このアルゴリズムが面白かったので紹介してみる。 Genius sorting algorithm: Sleep sort 1 Name: Anonymous : 2011-01-20 12:22 諸君!オレは天才かもしれない。このソートアルゴリズムをみてくれ。こいつをどう思う? #!/bin/bash function f() { sleep "$1" echo "$1" } while [ -n "$1" ] do f "$1" & shift done wait example usage: ./sleepsort.bash 5 3 6 3 6 3 1 4 7 2 Name: Anonymous : 2011-01-20 12:27 >>1 なん…だと

    常識を覆すソートアルゴリズム!その名も"sleep sort"! - Islands in the byte stream (legacy)
    taka222
    taka222 2011/05/20
  • コマンドラインからPSGIアプリを一度だけ実行する - Islands in the byte stream (legacy)

    ときどきPSGIアプリをコマンドラインから呼び出したくなる*1ので、ハンドラを書きました。それなり*2に$psgi_envを整えてくれるので便利です。 https://github.com/gfx/p5-Plack-Handler-CLI http://search.cpan.org/dist/Plack-Handler-CLI/ `plackup -s CLI app.psgi`で実行できます。また、以下のようにしてREQUEST_URIやQUERY_STRINGを渡せます。 $ plackup -s CLI app.psgi # Request: / $ plackup -s CLI app.psgi --foo bar # Request: /?foo=bar $ plackup -s CLI app.psgi hoge fuga # Request: /hoge/fuga これを使

    コマンドラインからPSGIアプリを一度だけ実行する - Islands in the byte stream (legacy)
    taka222
    taka222 2011/05/11
  • プログラミング初心者にオススメのPerl本 - Islands in the byte stream (legacy)

    この時期、Perlを学び始める方も多いと思います。そこでプログラミング初心者がPerlを学ぶのに適したを、私が実際に読んだことのあるものの中から選んでみました。 1冊目 1冊目はなんでもいいと思うのでとりあえず定番としてリャマを挙げておきます。 初めてのPerl 第5版 作者: Randal L. Schwartz,Tom Phoenix,brian d foy,近藤嘉雪出版社/メーカー: オライリージャパン発売日: 2009/10/26メディア: 大型購入: 22人 クリック: 293回この商品を含むブログ (41件) を見るこれで基的なPerlの文法が学べるはずです。この手の入門書は「課題」がつきものですが、すべて解く必要はないと思います。幾つか気になるもの・面白そうなものだけ試してみればいいでしょう。 1冊目読了の辞典では、以下のプログラムの簡易バージョン*1を実装できるよう

    プログラミング初心者にオススメのPerl本 - Islands in the byte stream (legacy)
    taka222
    taka222 2011/05/06
  • DeNAに入社しました - Islands in the byte stream (legacy)

    既に2週間ほど経過していますが、4/1付けでDeNAに入社しました。なかなか刺激的な毎日を送っています。 さて、これからは忙しさが増す一方でしょうから、今のうちに初心を振り返っておきます。 私はこの数年間、コードを書きながら、自分の人生の中でやりたいことはなんだろうかを考えてきました。私は主にソフトウェアのパフォーマンスに興味があります。プログラミング言語やツールに興味があります。また、テストや開発手法にも興味があります。エンジニアのコミュニティのあり方や、ハッカー文化にも興味があります。これらの興味を導きだすもの、それは以下のような考えだと思い至りました。 ソフトウェアエンジニアがもっと幸せになれるような技術を提供する この考えは、以下のid:TAKESAKOさんのインタビューを読んでから鮮明になりました。 Webエンジニア武勇伝 第29回 竹迫良範氏 (2008) 竹迫 日ITエン

    DeNAに入社しました - Islands in the byte stream (legacy)
    taka222
    taka222 2011/04/17
  • 自己紹介と過去の話 - Islands in the byte stream (legacy)

    新卒準備カレンダー 2011春に何か書くにあたって、まずは軽く自己紹介的な挨拶を書こう…と思ったら予想外に長い自分語りになってしまったので別途書き出しておきます。エンジニアとしてのスキルや活動については編に書くので、ここではそれ以外のことを書きます。 現在の私 この3月で大学を卒業し、4月からはDeNAにエンジニアとして入社します。 プログラミングが大好きで、3年ほど前からShibuya.pmによく顔を出しています。最近の成果物としては、Perl用のテンプレートエンジンXslateです。これについてはWeb+DB Presss誌で解説の機会をいただき、「Xslate 次世代テンプレートエンジン」としてWebでも公開済みです。 ところで、私は今年29歳になります。しかし、大学院にいったわけでも二度目の大学というわけでもありません。これは大学入学が24歳のときと遅かったためです。私が大学を目

    自己紹介と過去の話 - Islands in the byte stream (legacy)
    taka222
    taka222 2011/03/16
  • IT業界を目指す大学生へ - Islands in the byte stream (legacy)

    新卒準備カレンダー 2011春という企画のエントリです。来であれば3/11日の投稿でしたが、東日大震災があったため日の投稿となりました。 東日大震災を目の当たりにして衝撃を受けつつも、身の回りでは困難があるわけでもないので何もしないのがもどかしく、しかし実のところ何もできることはなく、Twitterを眺める、NHKを眺める、コーディングするなどして過ごしています。しかし、電力不足等の懸念はあるものの、春からは社会人になることは依然として明らかです。であれば、今は粛々と日常生活を送るしかありません。そういう訳で、平常モードでポストします。 お前誰よ? [twitter:@__gfx__]と申します。この春からDeNAで働くPerlプログラマです。Perl好きが高じてPerlの仮想マシンをpure Perlで実装したりしたことがあります*1。Shibuya.pmやYAPC::Asiaで

    IT業界を目指す大学生へ - Islands in the byte stream (legacy)
    taka222
    taka222 2011/03/16
  • 「優れたPerlプログラマを見分ける27の質問」の日本語訳 - Islands in the byte stream (legacy)

    (追記あり) How to Identify a Good Perl Programmer (by chromatic) が面白かった*1ので、27の質問を訳してみました。chromatic氏によれば、いずれも単純明快な質問でPerlの哲学や特徴をよく現しており、優れたPerlプログラマであれば少なくとも80%は答えられるべきだそうです*2。あなたは全ての質問に答えられますか? Perl5において変数のシジル*3が示すものは何か 配列のアクセスする際の $items[$index] と @items[$index] の違いは何か == と eq の違いは何か ハッシュをリストコンテキストで評価すると得られるものは何か Perlドキュメントからキーワードを検索するにはどのようにするのか Perl5における関数とメソッドの違いは何か Perl5が変数のメモリを再利用するのはいつか 変数のスコー

    「優れたPerlプログラマを見分ける27の質問」の日本語訳 - Islands in the byte stream (legacy)
    taka222
    taka222 2011/03/01
  • Re: バリデーションはどの位置で必要か - Islands in the byte stream (legacy)

    バリデーションはどの位置で必要か - サンプルコードによるPerl入門 バリデーションはアクセサメソッドの内部で行うのではなく、バリデーションの専用のモジュールを使用して、データを受け取った入り口で行うのがよいでしょう。 私はこれには反対です。アプリケーションにせよライブラリにせよ、原則としてすべての公開APIの入力値はバリデーションするのが望ましいと考えます。 すなわち、アクセサメソッドもそれがパブリックなAPIであればバリデーションをしたほうがいいと思います。 とはいえ以下の基的な考え方に異論があるわけではありません。 データのバリデーションを行う主要な目的は、外部から入力されるデータが正しい値かどうかをチェックするためのものです。 問題は、どこまでを「外部からの入力」とみなすかということでしょう。私は、そのプログラム/ライブラリのパブリックなAPIが受け取る値はすべて「外部からの入

    Re: バリデーションはどの位置で必要か - Islands in the byte stream (legacy)
    taka222
    taka222 2010/11/18
  • XSでCの文字列操作関数を使用するべきでない理由 - Islands in the byte stream (legacy)

    またはRe: PerlとC言語の型に対応する値への相互変換 XSでCの文字列操作関数の使用はなるべく避けるべきです。Cの文字列操作関数は危険で使いにくいものです。その代わりに、Perlが提供する安全で使いやすいSV APIを使ったほうが余計なことを考えずに済みます。 まずC言語でプログラミングする際の一般論として、strcat()やsprintf()などの文字列長を制御できない関数を使用するべきではない、というものがあります。これらの関数を使用して安全なプログラミングをするのは非常に困難であり、代わりにstrncat()やstrlcat()、あるいはsnprintf()といった文字列長を制御できる関数を使うべきです。 またPerl/XSに関して言うならば、そもそもCの文字列操作関数を使う必要はほとんどありません*1。char*の代わりにSV*を使うようにし、なるべくPerl API で文字

    XSでCの文字列操作関数を使用するべきでない理由 - Islands in the byte stream (legacy)
    taka222
    taka222 2010/09/07
  • App::ginitというコマンドを書いたッ! - Islands in the byte stream

    gitリポジトリを公開していない、ないしリポジトリがgitでないソフトウェアのソースコードをちょっといじりたいことがあります。そんなときは、大体以下のようにしてgitリポジトリを初期化してからソースコードをいじり始めるのがよくある方法だと思います。 $ curl -LO http://example.com/great-software-2.0.tar.gz $ tar xzf great-software-2.0.tar.gz $ cd great-software-2.0 $ git init $ git add . # どこからとってきたのか明記する $ git commit -m "Initial import from http://example.com/great-software-2.0" # git diff initial で簡単にpatchを作れるようにする $ gi

    App::ginitというコマンドを書いたッ! - Islands in the byte stream
    taka222
    taka222 2010/08/24
  • ホットスポットを最適化する - Islands in the byte stream (legacy)

    最適化するのに相応しいサブルーチンのみ最適化できるように,optimizer::hotspotというモジュールを考えてみた。まだCPANクオリティではないのでgithubのみ。 http://github.com/gfx/Perl-optimizer-hotspot 仕組みとしては,PL_peeppをフックして,生成されるサブルーチンの頭にホットスポット計測のためのopcode*1を仕込み,そのopcodeが一定数呼ばれると,最適化器*2を起動するというものだ。 最適化の基は,いまのところ特定パターンをもつ構文木を高速な一つのノードに置き換えるというもの。少し実装してみたところ,以下のような結果となった。 benchmarks/arbit.pl # 's' represents 'single-threaded' $ sperl -Mblib benchmarks/arbit.pl Pe

    ホットスポットを最適化する - Islands in the byte stream (legacy)
    taka222
    taka222 2010/02/07
  • XS基礎文法最速マスター - Islands in the byte stream (legacy)

    元ネタ:Perl基礎文法最速マスター(id:perlcodesample) XSを始めるための手順といくつかの要素の解説です。C言語をある程度知っている人でも,これを読んだだけでXSの基礎をマスターしてXSを書くことができるようにはなっていません。リファレンスでもありません。 XSとは,狭義ではPerlでエクステンションを書くためのマクロ言語の名前ですが,広義ではエクステンションを書くための技術の総称です。ここでは,広義のXSを俯瞰します。 XSはいろいろと特殊なのでテンプレは無視で行きます。 目次: h2xsで空のディストリビューションを作る XSファイルの構成 スレッドコンテキスト SVファミリ GCとスコープ さらなる学習のために h2xsで空のディストリビューションを作る 以下のコマンドで空のXSディストリビューションを作ることができます。 h2xs -A -b 5.8.1 -n

    XS基礎文法最速マスター - Islands in the byte stream (legacy)
    taka222
    taka222 2010/02/02
  • 1