2013-01-01から1年間の記事一覧

Android Studio projectをTravis-CIでビルドする

embarkmobile/android-maven-example を参考にしつつこんな感じでいけた。.travis.yml language: java jdk: oraclejdk7 before_install: # Install base Android SDK - sudo apt-get update -qq - sudo apt-get install -qq libstdc++6:i386 lib32z1 - expor…

Dart 1.0 を触ってみた。

Dart 1.0 がリリースされて、ECMAでの標準化作業が始まったようです。Chromium Blog: Ecma forms TC52 for Dart StandardizationDartはJavaScriptと比較してずっと使いやすいので、いずれ標準化されたDartが様々なブラウザで実行できるようになれば*1、JavaS…

JSX Advent Calendar 13th

JSX Advent Calendar 2013 13日目です。--test と test-case.jsxについて、公式ドキュメントを書きました。日本語での解説は以前書いてます。 Unit tests for JSX - Islands in the byte stream Enjoy!

Perlのbug report eco-systemはどのように素晴らしいのか

Perlのbug report eco-systemまわりはOSSとしてはわりと理想的だと思っています。つまり有用なレポートを生成する仕組みがあり、perlコア開発者だけでなくライブラリ開発者もその仕組を活用できるため、可搬性のあるソフトウェアとしてメンテナンスし続けや…

はぐれ学生だった話から飛んでグダグダ語る

はぐれ学生Advent Calendar 4日目の記事です。さて勢い余ってはぐれ学生Advent Calendarでも書いてみるかと宣言したものの、どういうテンションで書けばいいかよくわかってません。っていうかなんだこれ。まあ、昔話については過去のエントリを紹介するにと…

Perl XS を書くようになったきっかけ

THE INTERVIEWS がサービス終了ということで、一つだけ消えるには惜しいというか懐かしい記事があったので少し加筆修正して転載します。JHackers でも似たようなことを話してますね。 Perl XS を書くようになったきっかけ、また、どのようにして今のような X…

Macでgithub markdownのpreviewはsublime text 3がよさそう

Macでgithub markdownを楽に書くにかくのにどうしたらいいだろうと。Kobitoが使える状態ならKobitoでいいけど急に使おうとするとログインが面倒だし、vimやMauはgithub拡張に対応していないし、gistは日本語入力に難がある。とりあえず現状は sublime text3 …

chomp() は $/ に依存していると知れ!

perldocにあるように、chomp()の挙動は $/ に依存します。ということは、うっかり local $/ したスコープで chomp() を行うと、何もおきません。この結果起きる現象がきわめて不可解なので、readlineの直後以外の場面ではchomp()を使わず s/\r?\n\z//xms す…

ISUCON3 参加すれども スコアなし

ISUCON公式Blog チーム「潰すつもりで来てください」として参加しましたが、最終結果はfailでスコアはでませんでした。けっきょく私の書いたコードはすべてrevertしたので特に語ることはありません。実力不足の一言に付きます。ありがとうございました。

ISUCON用にltsvのaccess logをSQLで集計できるようなツールをつくった

最近 Treasure Data につっこんだアクセスログを Hive で集計するみたいなことをちょろっとやっているのですが、同じ感じでアクセスログもみたいなと思って「LTSVなaccess logをその場で立ち上げたmysqldに突っ込んでそのままmysqlクライアントを起動する」…

ISUCON用にNYTProf+Prefork PSGI serverのベストプラクティスをコマンドにまとめた

これが価値を発揮するような出題ではなかったので結局つかいませんでしたが。あとでCPANizeはするつもりです。てきとうなところで ^C でとめると結果を自動的に集計してreportをつくるところまでやってくれます。あくまでも開発用で、本番用ではありません。…

git bisect run はスクリプトファイル用意しなくてもいける

git bisect run で cd foo && prove ... としたいときに以下のようにしてもうまくいきません。 $ git bisect run 'cd foo && prove t/foo.t' .... /usr/local/Cellar/git/1.8.4.2/libexec/git-core/git-bisect: line 437: cd foo && prove t/foo.t: command …

visual_widthというgemを書いた

UnicodeのEast Asian Width (東アジアの文字幅)特性を扱うgemを書いた。CPANの Unicode::EastAsianWidth, Text::VisualWIdth::PP, Text::UnicodeTable::Simpleの機能をマージしたようなものになってる。文字特性のデータはUnicode仕様書から自動生成している…

Xslate 3.0.0 released!

This is an important release because it could break the existing code. https://metacpan.org/release/GFUJI/Text-Xslate-3.0.0 Includes a bug fix that has changed behavior: if you use a multi-byte string literal for a hash key like $hash["こ…

ISUCON3 に参加しました

id:yappo & id:kamipo とチーム「潰すつもりで来てください」を結成してISUCON3に参加してきました。結果は(失格にならなければ)11位で予選は通過できそうです。 YappoLogs: ISUCON3 で暫定で本戦進出らしいです #isucon 好きな子のことかslow query logの…

Perlでコールスタック上のサブルーチンの引数を得る

@DB::args でできます。 use strict; use warnings; use Data::Dumper; sub foo { bar(1, 2, 3) } sub bar { package DB { our @args; my $i = 0; while (() = caller $i) { print "$i: ", ::Dumper \@args; $i++; } } } foo('a', 'b', 'c'); outout: 0: $VA…

C以外のコードもemscriptenしてみる

emscriptenのwikiをみるかぎり、すでにかなり様々なアプリケーションがemscriptenで動いているようです。ちょっと試したところ、以下のようなC++11なコードも動きましたし、純粋にロジックだけのコードはかなり動くようですね。 #include <memory> #include <iostream> class g</iostream></memory>…

YAPC::Asia 2013に参加しました

YAPC::Asia 2013に参加してきました。今年も大盛況で、処理系の話、大規模サービスの話、ホビープログラミングの話など盛りだくさんで楽しいイベントでした。また今年でlestrrat & 941体制は終了ということです。長い間お疲れ様でした&ありがとうございまし…

PerlでWebAppの開発に必要なN個のこと

あるプログラミング言語で実際にWebAppを開発できるようになるまで、何が必要だろうか。言語仕様の習得は終えているとしよう。おそらく、最低限以下のような知識が必要だと思われる。とりあえずPerlについて知っていることを書いた。 パッケージマネージャ …

Released rack-devfavicon

開発環境と本番環境で favicon を変える というのに感動したのでRack middlewareでやってみました。というか、昨日のPlack::Middleware::DevFaviconをRackに移植しただけですけど。Plack版とおなじく単に favicon.ico ないし favicon.png という名前にマッチ…

Released Plack::Middleware::DevFavicon

開発環境と本番環境で favicon を変える というのに感動したのでPlack middlewareでやってみました。単に favicon.ico ないし favicon.png という名前にマッチしたらグレースケールにして返すというだけの代物ですが、enable_ifで簡単に導入できるのが楽かな…

[Ruby] オーバーライドとか無視してKernel#classを直接呼びたい

直接 `self.class` を呼ぶと、#class がオーバーライドされている可能性があるので任意のオブジェクトに対して呼ぶことはできません。よってKernel#classを直接呼ぶ必要があります。そこで、以下のように#classのUnboudMethodを得て、それにレシーバを与えて…

Rubyは標準ライブラリにRuby lexer/parserがあるのがいい

これは特筆すべき特徴だと思う。ヒアドキュメントもちゃんと処理できる。 require "ripper" require "pp" src = <<'END' def foo p [<<-"A", <<-"B"] Hello, %{"Ruby"} world! A one, two three B end END pp Ripper.lex(src) 結果: [[[1, 0], :on_kw, "def"…

vim 7.4 でSEGVを回避する設定

vim 7.4 で導入された正規表現エンジンがまだ安定していないようなので、以下の設定で古い正規表現エンジンを使うといいです。 set regexpengine=1 SEGVを修正するパッチ自体はすでに取り込まれているので、いずれこの設定は必要なくなると思われますが、と…

emscriptenでgotoって使えるの?

A. 使えます。というか clang -> LLVM bitcode -> JavaScriptという変換なのでwhileなどのループもすべてgotoで表現されたあとJSに変換するので、gotoを表現できないとループすらできません。中身を見てみると、たとえば以下のCのコード #include <stdio.h> int main(</stdio.h>…

『パーフェクトRuby』の感想

Ruby言語自体はまあ書ける、というレベルでも、さてRubyでコマンドのひとつでも作ってgemにして公開しようかとなるといろいろ知らなきゃいけないことがたくさん出てきてああ大変だと思うわけですが、『パーフェクトRuby』はbundle gemを使った雛形の作り方か…

emscriptenをMacで使うときにしておくといいたったひとつのこと

sudo ln -s /usr/bin/python /usr/bin/python2

JSXの複数行文字列リテラル

JSX v0.9.62 より複数行文字列*1がサポートされました。構文はPythonライクな """..."""です。また、'''...''' も同じです。 class _Main { static function main(args : string[]) : void { log """ Hello, world! """; // => "\n Hello, world!\n " } } 複…

emcc-jsx の proof-of-concept #upcamp

emscriptenでJSにコンパイルできるものの、JSからのインターフェイスは使いやすいとは言いがたいし、ましてやJSXから呼び出すとなると本来型のあるCの関数を呼び出すのにccall()経由では静的型チェックの恩恵をうけられない。そこでJSXのラッパを自動生成す…

JSXからemscriptenで生成したJSを呼ぶ #upcamp

#upcamp でハッカソンしてます。JSXからemscriptenで生成したJSを呼び出してみました。emscriptenはhomebrewでbrew install llvm --with-clangでllvmを入れ、emccのshebangを修正するだけで動きました。コンパイル は EXPORTED_FUNCTIONS を指定すること以外…