タグ

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

  • potatotips #7 at DeNA で Power Assert について発表しました - Islands in the byte stream (legacy)

    potatotips #7 at DeNA を開催しました! 今回も面白い話が多く大変勉強になりました。 さて!私はここ二週間ほど開発していたAndroid Power Assertについて発表しました。 https://speakerdeck.com/gfx/jun-hapower-assertwozhi-tuteiruka-number-potatotips https://github.com/gfx/android-power-assert-plugin まだ出力がイマイチな部分はありますが、とりあえず仕事上の自分のプロジェクトで使い始めました。実際、assertが信頼できるというのはかなり安心感があります。これはもっと使えるように、これからも改善していきたいですね。

    potatotips #7 at DeNA で Power Assert について発表しました - Islands in the byte stream (legacy)
    karupanerura
    karupanerura 2014/05/16
    sugoi
  • Android的には、LevelDBはSharedPreferencesの高速な代替として使えそう - Islands in the byte stream (legacy)

    参考: LevelDB入門 (基編) - from scratch AndroidにおけるLevelDB bindingは複数あるようだけど、今回はMaven Centralに上がっていてかつ読み書きAPIがわかりやすい以下のものを使った*1。 https://github.com/googolmo/Leveldb-Android dependencies { compile 'im.amomo.leveldb:leveldb:1.0.+@aar' } KVSなのでSharedPreferencesのように使える。速度はopen/closeにSharedPreferencesよりコストが掛かるものの、読み書きは非常に高速にできるようだ。 サンプルアプリのソースコード: https://github.com/gfx/Android-LevelDBExample 使っているところはこんな感じ

    Android的には、LevelDBはSharedPreferencesの高速な代替として使えそう - Islands in the byte stream (legacy)
  • Dart 1.0 を触ってみた。 - Islands in the byte stream (legacy)

    Dart 1.0 がリリースされて、ECMAでの標準化作業が始まったようです。 Chromium Blog: Ecma forms TC52 for Dart Standardization DartJavaScriptと比較してずっと使いやすいので、いずれ標準化されたDartが様々なブラウザで実行できるようになれば*1、JavaScriptに付随する問題の多くが解消され altJS も使われなくなるかもしれませんね。 Dartのメリットとしては、JSのしがらみにとらわれないぶん奇妙なイディオムに支配されることがないことや、それゆえ言語仕様やListやMapなどのコレクション型を含む標準ライブラリが独自に設計されており高機能ということ。デメリットとしては、JSの常識が通じない分学習コストが高いことと実行時のオーバーヘッドが高い*2ことなどでしょうか。 というわけで、以前作ったDartプロ

    Dart 1.0 を触ってみた。 - Islands in the byte stream (legacy)
  • 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
  • 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)
    karupanerura
    karupanerura 2013/12/03
    すごい
  • 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)
    karupanerura
    karupanerura 2013/09/10
    gfx++
  • 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)
  • 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)
    karupanerura
    karupanerura 2013/07/27
    ++
  • JSX minifierの圧縮性能 - Islands in the byte stream (legacy)

    JSX compilerのソースコードで検証してみました*1。 Mode Size(KiB) Ratio original 1507 1.00 JSX minifier 277 0.18 Closure Compiler/D 602 0.40 Closure Compiler/A 301 0.20 対象にしたソースコードがJSXから変換したJSというやや特殊な状況ですが、Closure CompilerのADVANCED_OPTIMIZATIONSよりもサイズが小さくなりました。また、ADVANCED_OPTIMIZATIONSと異なりJSX minifier*2はコードを破壊する圧縮は一切行わないので、圧縮したらコードが動かなくなるということが非常に起こりにくくなっています。しかしそれでも、JSXの豊富な型情報を使って圧縮すればADVANCED_OPTIMIZATIONSよりもサイズを小

    JSX minifierの圧縮性能 - Islands in the byte stream (legacy)
  • perl v5.18.0 released! - Islands in the byte stream (legacy)

    perl v5.18.0 がリリースされました。 https://metacpan.org/release/RJBS/perl-5.18.0 このリリースでの新規機能はほとんどないものの、二つの非常に大きな変更があります。 ハッシュキーのランダム化 each(), keys(), values() で返されるハッシュキーの順番がハッシュ毎にランダムになりました。同じプロセス内、同じキーセットのハッシュでさえ順番が一致しなくなります。 use 5.18.0; use strict; use warnings; my %a = map { $_ => 1 } qw(foo bar baz); my %b = %a; say join ", ", keys %a; say join ", ", keys %b; 実行例: $ perl randomized-keys.pl baz, bar, f

    perl v5.18.0 released! - Islands in the byte stream (legacy)
  • JSXのgeneratorで同期的なsleep()を実装してみる - Islands in the byte stream (legacy)

    [追記]v0.9.84現在、--enable-generator-emulationが必要です。これを付けないと、ES6のgeneratorを使うようにコンパイルされます。[/追記] 最近、JSの非同期まわりが新しい盛り上がりがありました。 Google Chromeに入ったジェネレータとPromiseで非同期処理に革命が起きた - 素人がプログラミングを勉強していたブログ 2013-05-02 とくにES6のgeneratorを使えば、非同期コードを同期的に書けるようになるということで期待が持てます。 ところで、JSXにも最近実験的にgeneratorが実装されました*1。生成されるJavaScriptはES5準拠ですから、スマートフォンでも実行可能です。 すなわち、これが格的に使えるようになれば、ブラウザの対応を待たずにgeneratorが使い放題になるというわけですね!genera

    JSXのgeneratorで同期的なsleep()を実装してみる - Islands in the byte stream (legacy)
    karupanerura
    karupanerura 2013/05/04
    すごい
  • PUREPERL_ONLY=1 for pure Perl build - Islands in the byte stream (legacy)

    2013年のランカスター合意によれば、XS/PP両実装を持つモジュールは PUREPERL_ONLY=1 / --pureperl-only というコマンドラインオプションでXSをオプトアウトしたビルドをできるようにすべきだ、とのことです。そこで、Module::Install::XSUtil 0.44 では PUREPERL_ONLY=1 を指定できるようにしました。 なお、cpanminus 1.7からは --pp オプションで PUREPERL_ONLY を有効にしてインストールできるようになるようです。 Text::Xslate, Mouse, Data::MessagePackはすでに対応済みなので、cpanmが正式にリリースされれば簡単にpure Perlビルドでモジュールをインストールできます。 以下該当セクションと日語訳: Specifying pure-perl bui

    PUREPERL_ONLY=1 for pure Perl build - Islands in the byte stream (legacy)
  • Data::Dumper が壊れているという惨事 - Islands in the byte stream (legacy)

    あるいは PERL_CPANM_OPT=-n は危険だという話。 それはこのtweetから始まった。 結局これは Data::Dumper 2.143 が壊れていたからなのだが、そこに至るまでがちょっと大変だったので記録しておく。 まず、再現スクリプトは以下のものだった。 # executed in perl 5.10.1 use strict; use warnings; use Data::Dumper; use Text::Xslate; my $tx = Text::Xslate->new({ syntax => 'TTerse' }); my $template = <<TMPL; [% value | dump %] TMPL my $value = +{ 'ab' => 'c', }; print Dumper($value); my $ret = $tx->render_s

    Data::Dumper が壊れているという惨事 - Islands in the byte stream (legacy)
  • Chrome for iOSのJSエンジンはJITなしのJavaScriptCore - Islands in the byte stream

    Chrome for iOSが発表されたが、スクリプトエンジンのパフォーマンスパターンがUIWebViewと同じである。したがって、アプリケーションの実装はUIWebViewベースで、スクリプトエンジンはJITのないJavaScriptCoreと考えられる。 Chrome for iOS で測定したV8Bench v7の結果は以下のとおり。 Chrome for iOS (iOS4.3.5/iPhone4): Score: 77.9 Richards: 68.1 DeltaBlue: 50.2 Crypto: 47.8 RayTrace: 126 EarlyBoyer: 144 RegExp: 34.2 Splay: 160 NavierStokes: 83.8これはUIWebViewと結果のパターンが同じである*1。 Score: 79.4 Richards: 65.1 DelaBlue

    Chrome for iOSのJSエンジンはJITなしのJavaScriptCore - Islands in the byte stream
  • Xslate 1.5008 released - Islands in the byte stream (legacy)

    異常系の振る舞いを少し変えました。 https://metacpan.org/release/Text-Xslate Xslateでは、render()へ渡すテンプレートパラメータや登録関数からの戻り値は必ずEncodeモジュールでデコードしたテキスト文字列であるべきです。しかし、デコードしてないバイト列を渡したときの挙動は未定義で、XS/PPあるいはcacheの有無によって挙動が異なっていました。特にcacheの有無で挙動が変わることがあるのが厄介で、特定の条件が重なるとリロードすると文字化けするという挙動を示すことがありました。 Xslateに限らず、Perlではスクリプト内のテキストの操作はデコードされたテキスト文字列で行うべきで、これを守らなければ文字化けを引き起こします。よって、Xslateでも、上記のようにデコードされていないバイト列を与えると文字化けが起きるのが、Perl的に

    Xslate 1.5008 released - Islands in the byte stream (legacy)
  • 正月なので #発火村 に参加してきた - Islands in the byte stream (legacy)

    国境の長いトンネルを抜けると、そこは雪国だった。 正月発火村 #発火村 - Togetter 群馬の秘境、水上でハッカソンに参加してきた。 ハッカソンではClion.JSというECMA-335*1の仮想マシンのJavaScript実装を作りたかったのだけど、作業量的に一日二日でできるものでは到底なかったでので「実装を始めた」という程度でした。Clion.JSの開発は続けるつもりです。 さて、ハッカソン前半はずっとmonoを参考にしながらCLI executableのローダを書いていたのだけど、複雑すぎてまるで形になりませんでした*2。そこで急遽VMだけを先に作ることにし、最終的に発表したものが以下のスクリプトです。これにCLI executableを別途disassembleしたものを与えると実行します。 CLI VMは仕様を読むとスタックマシンのようですね。なのでスタックを用意して、di

    正月なので #発火村 に参加してきた - Islands in the byte stream (legacy)
  • quick sortよりも高速でmerge sortのように安定しているソートアルゴリズムtim sort [勘違い] - Islands in the byte stream

    <追記>ベンチマークプログラムに誤りがありました。ソート済のシーケンスに対してソートを掛けていました。ご指摘ありがとうございます>ak氏 そんな夢のようなソートアルゴリズムがあるのかというと、あるらしいんです。それがtim sortと呼ばれるアルゴリズムです。 画期的(?)なソートアルゴリズム「Sleep Sort」:濃縮還元オレンジニュース|gihyo.jp … 技術評論社 このあたりで拾ってきたネタですね。 merge sortを改良したアルゴリズムで、安定*1しており、しかも実行速度にも優れているとか。アルゴリズムの性能の評価は済んでいるらしく、CPythonやJDK7には既に導入済みのようですね。 ならば当然Perlのソートも…と考えるわけですが、まず評価のためにJavaのソースをC++にそのまま移植してみました。それがこれ(いちおうテスト済): https://github.co

    quick sortよりも高速でmerge sortのように安定しているソートアルゴリズムtim sort [勘違い] - Islands in the byte stream
    karupanerura
    karupanerura 2011/10/19
    Sort::Timの予感!
  • プログラミング初心者にオススメの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)
  • 1