タグ

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

  • WEB+DB PRESS Vol.84にSwiftの入門記事を書きました - Islands in the byte stream (legacy)

    WEB+DB PRESS Vol.84 作者: 藤吾郎,桑野章弘,福永亘,谷井靖史,野村晋之介,蛭川皓平,岡田友輔,藤真樹,伊藤直也,宮崎靖彦,佐藤健太,高橋俊幸,佐藤太一,海野弘成,佐藤歩,泉水翔吾,渡邊恵太,舘野祐一,中島聡,橋翔,はまちや2,竹原,伊賀敏樹,WEB+DB PRESS編集部出版社/メーカー: 技術評論社発売日: 2014/12/23メディア: 大型この商品を含むブログ (2件) を見る Swiftはまだ出て間もない言語で、いますぐ採用すべきかというとなかなか難しい所はあります。ただプログラミング言語としてはOptional型やパターンマッチング*1など面白い機能が豊富で、学ぶ価値のある言語だと思います。今回の特集がSwiftに触れるきっかけになれば幸いです。 *1:正規表現ではなく、関数型言語でよく見られる値のパターンの検出と分解のほう

    WEB+DB PRESS Vol.84にSwiftの入門記事を書きました - Islands in the byte stream (legacy)
    kazuhooku
    kazuhooku 2014/12/25
  • 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)
    kazuhooku
    kazuhooku 2014/05/16
    良い。リリースビルドでも有効にしてクラッシュログ等から回収できるといいんじゃないか
  • 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)
    kazuhooku
    kazuhooku 2013/12/16
  • 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
    kazuhooku
    kazuhooku 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)
    kazuhooku
    kazuhooku 2013/12/04
  • 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)
    kazuhooku
    kazuhooku 2013/05/22
  • 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)
    kazuhooku
    kazuhooku 2013/05/04
  • Perlの m// は中身が固定文字列だと爆速になる - Islands in the byte stream (legacy)

    [追記] 実際に検証してみると、パターンが短いと index() のほう速いこともあるようです。パターンが長いと正規表現のほうが高速になるのでそもそもアルゴリズムが違うようですね。 よってこのエントリの内容は必ずしも正確ではありません! cf. https://gist.github.com/kazuho/5410635 [/追記] Perlの話題を日語で – Lingr で出た話題です。 Perlの正規表現マッチはパターンが単純だと index() とおなじく Boyer-Moorアルゴリズムで検索するので非常に高速です。要は最適化のつもりでパターンマッチをindex()に書き換えるのは無意味なのです。 ソースは pp.c や regexec.c あたりを fbm_instr() で検索かな? ドキュメントもどこかで読んだ気がするのですが思い出せず>< perl -MDevel::Pe

    Perlの m// は中身が固定文字列だと爆速になる - Islands in the byte stream (legacy)
    kazuhooku
    kazuhooku 2013/04/18
    いや呼び出しコストの問題もあるでしょ https://gist.github.com/kazuho/5410635
  • なぜJSXをセルフホスティングすべきなのか - Islands in the byte stream (legacy)

    JSX をセルフホスティングしてnpm packageとしてリリースしました。 https://npmjs.org/package/jsx さてJSXコンパイラをJSXで書きなおしたわけですが、これは主にJSXコンパイラの質を高めるためです。JSXはJavaScriptと比較すると大規模な開発に向いている、というのがJSX開発チームの主張です。であれば、JSXコンパイラをJSXで書くことにより質を高められるはずです。事実、今回のセルフホスティングでtypoやリファクタ時のエンバグ、関数の引数間違いなどによるバグがいくつも見つかり改修されました。セルフホスティングはコンパイラの品質を高める一助になったといえます。 またもうひとつ、今回のJSXコンパイラの開発はJSXによる開発であり、この過程で得た知見が数多くあります。これにより、たとえばasの失敗がnullを返すのではなく例外を返すようにす

    なぜJSXをセルフホスティングすべきなのか - Islands in the byte stream (legacy)
    kazuhooku
    kazuhooku 2013/01/27
  • JSX supports WebAudio - Islands in the byte stream (legacy)

    JSX から WebAudio API を呼び出せるようになりました。これでJSXで HTML5 シンセサイザを作ることができますね。 再生するコードはこんな感じ。webkitAutdioContext しか使っていないので今のところ Chrome でしか動きません。 /*** WebAudio example, playing an MP3 music on browsers @see http://www.html5rocks.com/en/tutorials/webaudio/intro/ */ import 'js/web.jsx'; class _Main { static function main(args : string[]) : void { try { var app = new App(new webkitAudioContext); app.init(); } c

    JSX supports WebAudio - Islands in the byte stream (legacy)
    kazuhooku
    kazuhooku 2012/08/27
  • How CoffeScript classes work - Islands in the byte stream (legacy)

    CoffeeScriptのクラス機構はどんなものか調べた記録。コード量は少ないが洗練されており効率も良いようだ。 http://coffeescript.org/#classes さて、元のcoffeeスクリプトは単にクラスとサブクラスの定義をするだけのもの。 #!/usr/bin/env coffee class Animal constructor: (@name) -> console.log "constructor of Animal" move: (meters) -> console.log "Animal#move" class Snake extends Animal constructor: (@name) -> super @name console.log "constructor of Snake" move: -> console.log "Snake#move

    How CoffeScript classes work - Islands in the byte stream (legacy)
    kazuhooku
    kazuhooku 2012/03/10
    この手法だと JavaScript の instanceof は使えないんじゃないかしら
  • JavaScriptのthisの扱いが難しすぎる件 - Islands in the byte stream (legacy)

    [再々追記] (o.f = o.f)()の結果は右辺値・左辺値というルールで説明できるようです。コメント欄参照のこと。 [/再々追記] [再追記] これの解釈はどうすれば…。 [/再追記] [追記] ([o.f][0])() -> o.f は ([o.f, "a"][0])() とすると分かりやすいが、単にレシーバがArrayになっているだけらしい。 また (o.f)()と(tmp = o.f)の違いはブコメで指摘されているとおり、 o.f が (C++的な意味での)参照を返すと考えると理解できる。 [/追記] だれかこの現象を説明できる人はいませんか。私には難しすぎます。 In node: #!/usr/bin/env node var o = {}, tmp; o.f = function() { console.log(this.toString()) }; o.toString =

    JavaScriptのthisの扱いが難しすぎる件 - Islands in the byte stream (legacy)
    kazuhooku
    kazuhooku 2012/02/23
    コメントed
  • Snow Leopard & Xcode 4+ & system perl でXSをビルドできない問題の修正法 - Islands in the byte stream (legacy)

    MacOSX Snow LeopardでXcode 4以上を使っているとき、system perl向けのXSモジュールがまったくビルドできないという非常に厄介な問題があります。 これは、system perlがユニバーサルバイナリでppc用のバイナリを含むようになっているにも関わらず、Xcode 4以降のgccではppc向けのクロスコンパイラが含まれていないためです。また、system perlのccが"gcc-4.2"となっていますが、Xcode 4以降だとgcc-4.2というコマンドが存在しないことも問題です。 これを解消するためにはConfig.pm/Config_heavy.plをいじって上記の問題を修正します。 以下のコマンドを実行してconfigを修正するのが簡単でしょう。 sudo perl -i -pe 's/gcc-4.2/gcc/g; s/-arch ppc//g' \

    Snow Leopard & Xcode 4+ & system perl でXSをビルドできない問題の修正法 - Islands in the byte stream (legacy)
    kazuhooku
    kazuhooku 2011/11/15
    これは…
  • 自己紹介と過去の話 - 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)
    kazuhooku
    kazuhooku 2011/03/11
  • Should we avoid C implementation? - Islands in the byte stream

    先日のPycon mini JPでは、Tenjinのトークが好評だったようでした*1。 How to Create a Highspeed Template Engine in Python このスライドの中で述べられているのは以下のような事です。 Web Appの実行時間の中でViewコンポーネントが占める割合は意外と大きい テンプレートエンジンをCで実装する必要はない 様々な言語*2のテンプレートエンジンの実行速度を比較してみると、Perlが最速だった Djangoのテンプレートエンジンは遅い このスライド、見せ方が非常にうまいので一見なるほどという感じがしますが、この二番目の「テンプレートエンジンをCで実装する必要はない」という結論には疑問があります。 このスライドの前半にあるような最適化手法は私もずいぶん熱心にやったものです。しかし結局のところスクリプト言語はCには敵わないので、

    Should we avoid C implementation? - Islands in the byte stream
    kazuhooku
    kazuhooku 2011/02/01
    まとめると Python は遅い (tigau
  • Perl Quiz - package名について - Islands in the byte stream (legacy)

    Q.以下のテストケースが失敗するようなf()を書いてください。ただし,ライブラリを使用してはいけません。回答は一週間後くらいに。 #!perl -w use strict; use Test::More 'no_plan'; sub f{ # 何かする } f(); is ref(bless({}, 'Foo')), 'Foo'; __END__ sv_derived_from()を刻んでいるうちに見つけたちょっと変な挙動です。 2008/10/08 追記 (現トラックバック数:7) 皆さん解答ありがとうございます!意外なやり方もいくつかあって驚きました。 あとで詳しく紹介&解説したいのですが,今は定期演奏会やら学祭やらで忙しいので,また後ほど。

    Perl Quiz - package名について - Islands in the byte stream (legacy)
    kazuhooku
    kazuhooku 2008/10/07
    sub f { exit 1 } とかそういう話じゃないよね
  • 1