タグ

ブックマーク / amachang.hatenablog.com (9)

  • ブラウザで X86 のマシン語を動かす! Google 謹製 Native Client をさっそく試してみる - IT戦記

    はじめに Google から、非常に面白そうなソフトウェアがリリースされました! その名も Native Client なんとブラウザ上で X86 のバイナリを動かしてしまうそうです。 これはすごい! さっそく試してみたいと思います。その過程を逐次更新していきます。 自分が試したときの環境 自分が試す環境は、以下の通りです。 Mac OS X Xcode の gcc (version 4.0.1 (Apple Inc. build 5465)) python 2.5.1 準備 では、さっそく準備をしましょう。 http://nativeclient.googlecode.com/svn/trunk/nacl/googleclient/native_client/documentation/getting_started.html を参考にやってみます。 環境一式をダウンロード まずは、以下

    ブラウザで X86 のマシン語を動かす! Google 謹製 Native Client をさっそく試してみる - IT戦記
  • 再帰下降パーサで左再帰が何故ダメなのかが分かった - IT戦記

    やっと分かった parse("1+1+1", i); function parse(expr, i) { var left = parse(expr, i); if (expr[i++] !== '+') return 1; if (expr[i++] !== '1') throw Error; return [left, 1] } そりゃ無限ループになるわなあ。 手書きパーサなら演算子順位法を使うからいいけど ちなみに 右再帰だとこう parse("1+1+1", i); function parse(expr, i) { if (expr[i++] !== '1') throw Error; if (expr[i++] !== '+') return 1; var right = parse(expr, i); return [1, right] } 無限ループしない

    再帰下降パーサで左再帰が何故ダメなのかが分かった - IT戦記
  • Java でラムダ - IT戦記

    λ... λ... ちょっととおりますよ はじめに C++ Template の勉強をしていて、気がついた。 ネストした(内側から外側が見える)名前-値の空間が存在し 値から名前-値の空間を生成することが可能で その空間を生成するための情報を値として扱え 名前-値の空間の中の一つ以上の値を取り出せると ラムダが出来る。 という訳で Java でラムダを作ってみた import static java.lang.System.out; public class Hoge { public static void main (String args[]) { // チャーチ数 0 final λ zero = new λ () { λ call (final λ f) { return new λ () { λ call (final λ x) { return x; }}; }}; // チ

    Java でラムダ - IT戦記
  • ちょっと yacc っぽいもの作ってみる - IT戦記

    残り時間 1.5 時間 たぶん出来ない。 定義 終端は、 /^/ で囲んで、 非終端は文字列で表現する。 var y = { add: [ ['mul'], ['add', /^\+/, 'mul'], ['add', /^-/, 'mul'] ], mul: [ ['una'], ['mul', /^\*/, 'una'], ['mul', /\//, 'una'] ], una:[ ['pri'], [/^\+/, 'una'], [/^-/, 'una'] ], pri: [/^1/], [/^\(/, 'add', /^\)/] ] }; これから、状態遷移図を作る あー。ハッシュだとどれがstart かわからんな>< やっぱり $accept は手動で入れることにする。 $end は /^$/ で表現する。 var y = { $accept: [ ['add', /^$/] ]

    ちょっと yacc っぽいもの作ってみる - IT戦記
  • XPathGraph のテクニック - IT戦記

    XPathGraph とは http://xpath.kayac.com/ URL と XPath を指定すると URL の先をスクレイピングしてグラフを作ってくれるサービスです。 このエントリでは、どのような手順で XPath を組み立てていけばいいかをよくあるパターンで解説します。 0. 値の元となる要素を探す <div class="hoge">1,234,567</div>//div[@class="hoge"] 1. カンマを外すなど、純粋な数値に変換する 1,234,567translate(//div[@class="hoge"], ",", "")translate 関数は、第一引数の div を文字列に変換し、カンマを空の文字に置換します(つまり、カンマを削ります) 2. 演算する 1234567translate(//div[@class="hoge"], ",", "

    XPathGraph のテクニック - IT戦記
  • Y コンビネータって何? - IT戦記

    このエントリの 親友へ。ブログを書こう。 - IT戦記 y がブログを始めたみたいなので、読んでみた。 で、最新のエントリを読んでみたら、 Y コンビネータというものについて書いてあったので、 Y Combinatorが凄すぎる! - yuji1982の日記 Y コンビネータって何ってところから、自分でもいろいろ考えてみた。 結局なんなのかさっぱり分からなかったんですが、自分が考えたことをまとめておく まず、フィボナッチ数を求める fib を定義する var fib = function(n){ return (n <= 2) ? 1 : (arguments.callee(n-1) + arguments.callee(n-2)); }; fib(10); おお! JS すげー!名前は n しか使ってねーよ! めでたし、めでたし。。。。じゃなくて! JS が素晴らし過ぎて話が終わってしま

    Y コンビネータって何? - IT戦記
  • IT戦記 - 一行で IE の JavaScript を高速化する方法

    以下の一行をすべての JavaScript の前に読み込む /*@cc_on _d=document;eval('var document=_d')@*/ この一行を読み込むことによって IE での document へのアクセスが 5 倍速くなります。 たとえば 以下のように、読み込む前と読み込んだ後を比較してみます。 // Before var date = new Date; for (var i = 0; i < 100000; i++) document; alert(new Date - date); // 643 /*@cc_on _d=document;eval('var document=_d')@*/ // After date = new Date; for (var i = 0; i < 100000; i++) document; alert(new Date -

    IT戦記 - 一行で IE の JavaScript を高速化する方法
  • IT戦記 - JavaScript で数式パーサを書いてみた。

    背景 いままで、ちゃんとパーサというものを書いたことがなかったので勉強のためにアレコレ考えながらやってみようと思って、簡単な数式を木にするパーサを書いてみようと思ったのです>< 今回作るパーサの仕様 パースする数式の演算子は二項演算子 + - * / と単項演算子 + - だけ。 括弧とかは使わない。 演算の優先順位は * / のほうが + - より高い。つまり、 1 + 1 * 1 は 1 + (1 * 1) 単項演算子は二項演算子より優先順位が高い。つまり、 - 1 + 1 は (-1) + 1 で、作ってみた! ソースコード filter 関数とか使ってるので、 Firefox only です。 var parse = function(source) { var tokens = source.match(/[-+*/]|[^-+*/\s]+|\s+/g).filter(/^[^\

    IT戦記 - JavaScript で数式パーサを書いてみた。
  • ロケーションバーに直入力するとブクマを見に行って補完してくれるコンポーネント作った - IT戦記

    今日徹夜ぎみで作ってみた でも 使ってみたら逆に不便だった>< 勉強になったからいいや。 破棄! もったいないので、今手元にあるソースを貼っときます このソースを Firefox インストールディレクトリ以下の components に入れると textbox 要素で autocomplete="delicious" が使えるようになります。 開発中のものなのでバグありまくりです。 ちなみに、僕が一日に書けるコードはちょうどこのくらいです↓ const Cc = Components.classes; const Ci = Components.interfaces; const Cr = Components.results; const CLASS_ID = Components.ID('{aa892eb4-ffbf-477d-9f9a-06c995ae9f85}'); const C

    ロケーションバーに直入力するとブクマを見に行って補完してくれるコンポーネント作った - IT戦記
  • 1