GraphvizでSyntax diagramを描こうとしたけどうまくいかなかった

JGPのsyntax diagramみたいなのをGraphvizで描きたくて色々頑張ってみたんだけど、僕には無理だった。

railroad diagram

graph Heawood {
      node [label="\N", fontname=Arial, width="0.50000", height="0.500000", color=black];
      edge [color=black];
      graph [rankdir = LR];

      subgraph cluster1 {
               color=none

               Start [style=invis];
               L1 [style=invis, width=0.0, shape=point];
               Alpha [shape=box, label="アルファベット"];
               L2 [style=invis, width=0.0, shape=point];
           End [style=invis];

           Start -- L1 [arrowtail=teetee];
               L1    -- Alpha;
               Alpha -- L2;
               L2    -- End [arrowhead=teetee];

      }

      Digit [shape=box, label="   数字   "];
      Hif [shape=circle, label="-"];

      L1    -- Digit [tailport=w,headport=w];
      L1    -- Hif [tailport=w,headport=w];
      Digit -- L2 [tailport=e,headport=w];
      Hif   -- L2 [tailport=e,headport=w];
}

ProductName JavaScript: The Good Parts ―「良いパーツ」によるベストプラクティス
Douglas Crockford
オライリージャパン / 1890円 ( 2008-12-22 )


参考

最後のHaskell読書会に参加した

最終章。この章自体はさらっとしていて、どこにつながっていくのかいまいちよくわからなかったのだけど、最後にLTっぽい感じで部分評価の話が出てきてたのでソッチの方に関係していく話題だったのかな?と思った。LLVMとかPyPyの方向?あとでちゃんと追いかけてみようかな。

ProductName プログラミングHaskell
Graham Hutton
オーム社 / ¥ 2,940 ( 2009-11-11 )


@yoshinabuのイタリア土産。と思いきやフランス?

1292703303

さて、次回からはJGP(JavaScript: The Good Parts)を読んでいくことになった。HTML5のおもしろそうな機能はjavascriptいるよね?みたいな流れで、半年くらいでこれ読んだら、他の本(WebSocketとか面白そう)に行くのか、派生的に別れていくのかな。

ProductName JavaScript: The Good Parts ―「良いパーツ」によるベストプラクティス
Douglas Crockford
オライリージャパン / ¥ 1,890 ( 2008-12-22 )


第一回目は2/12(sat)@富士の予定。そのうち案内が出ると思いますが、興味があれば参加するとよいと思います。


他には入門自然言語処理とかも候補に上がっていたが、いまいち雰囲気を勝ち取れそうになかった。少し前からプッシュしていかないとなかなか難しいですね(twitterでもいいと思うけど)。もう少し動機付けが必要かな?

で、もし入門自然言語処理を選択するなら、ゴールを「twitterボットをつくってみる」とかそんな感じにしておけば雰囲気的に向かう方向がはっきりするのかなぁと思った。「本書を通してPythonを学ぶ」でもいいのかもしれないけど。

ProductName 入門 自然言語処理
Steven Bird
オライリージャパン / ¥ 3,990 ( 2010-11-11 )


その流れで恋するRubyの話とか

ProductName 恋するプログラム―Rubyでつくる人工無脳
秋山 智俊
毎日コミュニケーションズ / ¥ 2,625 ( 2005-04 )


個人的にはこっち方面も好きなのでこういう勉強会が流れるのも嬉しいが。

javascript+canvas

canvas-tetrisのソースを眺めながら、5x5の格子の色をランダムに変えてみた。sでスタートとストップを交互に繰り返す

canvas-test

整数の乱数値を取りたい時にはrandomしてfloorする

Math.floor(Math.random() * 255)

ループさせたい場合にはsetIntervalで止めたい時にはclearInterval。この例ではrunning = !runningでトグルさせてる。

if( running ){
  clearInterval( drawLoop )
  var r = Math.floor(Math.random() * 255);
  alert("stopped ");
}else{
  drawLoop = setInterval(drawMap, 50);
}
running = !running;

以下、全コード


<!DOCTYPE html>
<html>
<head>
  <title>Canvas Test</head>
</head>
<body>
  <h1 style='text-align:center'>Canvas Test</h1>
  <div style='text-align:center'>
    <canvas id='game' style='border:solid 2px #aaa;'>
      Your browser does not support the &lt;canvas&gt; element.<br>
      Please use a normal browser. Hint: Safari, Chrome, Firefox.
    </canvas>
  </div>
<script type="text/javascript" charset="utf-8">
  var SQ      = 25;   // square side in pixels
  var HCOUNT  = 5;   // horizontal width in squares
  var VCOUNT  = 5;   // vertical width in squares
  var WIDTH   = SQ * HCOUNT;
  var HEIGHT  = SQ * VCOUNT;
  var BGCOLOR = '#fff';
  var canvas = document.getElementById('game');
  canvas.width = WIDTH;
  canvas.height = HEIGHT;

  var ctx = canvas.getContext('2d');

  function line( fromx, fromy, tox, toy ){
    ctx.beginPath();
    ctx.moveTo( fromx, fromy );
    ctx.lineTo( tox, toy );
    ctx.stroke();
  }

  ctx.strokeStyle = '#999';
  ctx.lineWidth = .5;

  function drawMap() {
    // clear map and draw grid
    ctx.clearRect( 0, 0, WIDTH, HEIGHT );
    var currentSquare, w, h, i;

    // this loop draws the current map state
    for( w = 0; w < HCOUNT; w++ ){
      ctx.save();
      ctx.translate( w * SQ, 0 ); // Move the canvas horizontally
      for( h = 0; h < VCOUNT; h++ ){
        ctx.save();
        ctx.translate( 0, h * SQ ); // Move the canvas vertically
        var r = Math.floor(Math.random() * 255);
        var g = Math.floor(Math.random() * 255);
    var b = Math.floor(Math.random() * 255);
    ctx.fillStyle = "rgb("+r+","+g+","+b+")";
        ctx.fillRect( 0, 0, SQ, SQ );
        ctx.restore();
      }
      ctx.restore();
    }

    for( i = 1; i < WIDTH; i++ )
      line( i*SQ, 0, i*SQ, HEIGHT );
    for( i = 1; i < HEIGHT; i++ )
      line( 0, i*SQ, WIDTH, i*SQ );
  }

  var running = false, drawLoop;

  document.onkeydown = function(e) {
    var key = e.which;    

    if( key === 83 ) { // s - stop (pause)
      if( running ){
        clearInterval( drawLoop )
        var r = Math.floor(Math.random() * 255);
        alert("stopped ");
      }
      else{
        drawLoop = setInterval(drawMap, 50);
      }
      running = !running;
    }    
  }
</script>
</body>
</html>

canvas-tetris

canvas要素とjavascriptで書かれたテトリス。あとできちんとソースを追いかけてみる。

canvas-tetris

JavaScript: The Good Parts 5-10章

後半読んだ。継承がちょっとあやふやだったので、あとでまた。

ProductName JavaScript: The Good Parts ―「良いパーツ」によるベストプラクティス
Douglas Crockford
オライリージャパン / 1890円 ( 2008-12-22 )


最後のほうは、良いパーツ、悪いパーツとその理由など。JSLintに関しても書いてある。

javascriptでなんか作る時にまた読み返すでしょう。

JavaScript: The Good Parts 1-4章

前半を読んだ。

ProductName JavaScript: The Good Parts ―「良いパーツ」によるベストプラクティス
Douglas Crockford
オライリージャパン / ¥ 1,890 ()
通常24時間以内に発送

  • hasOwnPropertyメソッドはプロトタイプチェーンをさかのぼらない
  • 末尾最適化は提供されていない
  • カリー化

curryメソッドはFunction.prototypeを拡張して、クロージャを使えば実装できる。

perlだとこんな感じ?

use Perl6::Say;

sub add {return $_[0] + $_[1];}

sub curry (&$) {
  my ($func,$val) = @_;
  return sub {return $func->($val,$_[0]);}
}

my $add1 =  curry(\&add,1);

for my $i (1..3){
  say $add1->($i);
}

perlの詳しいのはHOPの7章

「JavaScript: The Good Parts」が届いた

明日、喫茶店にでも入り浸って読むかな

ProductName JavaScript: The Good Parts ―「良いパーツ」によるベストプラクティス
Douglas Crockford
オライリージャパン / 1890円 ( 2008-12-22 )


typepad conectとjQueryって相性悪いのかな

jQueryでCatalyst::Model::Estraierで作った関連エントリをJSONで受け取ろうとおもったのだけど、エラー。どっちか外せば残ったほうは動く。

error

なんだろなー。

明日MochiKitに変えてもう一度やってみる。

追記 2008.12.02

MochiKitでもなんかエラーがでるので、結局Catalystのコントローラーから読んでTTに渡すことにした。

あと、estwaverでクロールしたデータに対して検索するようにしてるので、タグがノイズになって関連エントリの精度が悪くなってる感じがする。

やはり、エントリの登録時にAPI経由でデータを追加するのがいい気がしてきた。

jQueryで作る Ajaxアプリケーション読了

内容は「できるJQuery」みたいな感じ(できるシリーズはExcelぐらいしか知らんけど)。

ProductName jQueryで作る Ajaxアプリケーション
沖林 正紀
技術評論社 / ¥ 2,919 ()
通常24時間以内に発送

method chainがとかそういうプログラマ向けの話題というよりはデザイナがちょろっといじりたい時にみたいな感じの本。Ajaxとかはほとんどおまけ。jQueryでバリバリとかそういうヒト向けではないと思う。

僕はちょろっと気軽に使いたかったので、買ってよかった感はある。Part2のDOM操作が図入りで分かりやすかったのと、Part4のjQueryUIが大変参考になった。

jQueryで作る Ajaxアプリケーション

これも届いた。

ProductName jQueryで作る Ajaxアプリケーション
沖林 正紀
技術評論社 / ¥ 2,919 ()
通常24時間以内に発送

入門っぽい感じで、一通り読む分にはいいかも。 あと、ちょっと字が大きい?