ひしだまの変更履歴

ひしだまHPの更新履歴。
主にTRPGリプレイの元ネタ集、プログラミング技術メモと自作ソフト、好きなゲームや音楽です。

先週のScala:sum

2011-03-27 01:32:42 | PG(Scala)

先々週~先週のScalaのお勉強は、sum。合算
Seqコレクション(ListやArray・Vector)に入っている値を合算する方法を色々考えてみた。
Listに入っているクラスの値を合算するって、よくありそうなシチュエーションだからね。

その過程でListについてもメモ。
特にJavaのListとは、名前が同じだからといって同じイメージでいると、全く違うことにカルチャーショックを受けるので(笑)
ScalaのListは非常にシンプル。headとtail以外のデータは保持していない。
他のコレクション、例えばArrayやVectorなら要素数を保持しているが、Listには無い。
Listは不変コレクションなのでlazy valとかで要素数を保持できそうなものだが、その領域すら削っているのだろう。それに、sum・productといったメソッドもsizeと同じくlazy valに出来るとは思うけれど、そこまでやったらやり過ぎな気もするし。

話が逸れたが、Scala2.9で並列コレクションが使えるようになるというので、その合算も試してみた。当初は上手く動かなかった(と勘違いした)んだけど、Twitterで教わって、無事動かせた。
そうこうしている間にScala2.9.0RC1が出たようだが、2.9正式版が出てから改めて試してみたい。
(再帰関数を使って合算するならListは優位だが、最速はArrayのwhileループだった。ここに並列処理が加わると、並列Listは無いし、Arrayを並列Arrayにするにはコストがかかるし、どれがいいのか…)

あとは全く関係ないけど、噂のコンパイラプラグインをちょっと試してみた。
特定のメソッドを呼んでたら警告を出すとかは簡単に出来た。すげー(笑)
しかしこれを使って構造(前後関係)のチェックとかをやるのは、大変そうだ(苦笑)

コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

東北地方太平洋沖地震:東京平日

2011-03-26 20:03:06 | Weblog

平日は電車乗って会社行って暗くなった頃に電車乗って帰るだけなので周囲の様子とか観察できないんだけど。

電車の運行状況自体は路線によってまちまちで、通常通りのところもあれば70~80%のところもあるけれども、動いてはいる。
節電しているので、エスカレーターは止まっている駅が多い。電車も暗かったり空調が止まっていたり。
車内は普段より空いている気がする。人が東京から減っているのか自宅待機しているのか運行状況が当てにならないので時間帯が分散しているのか知らないが。自分は早めている方だけど、10分くらいしか変わらんしな^^;

コンビニは、弁当類は復活してきたみたい。
ティッシュがすぐ売り切れてたね(ティッシュは買い占められる商品のひとつ)。花粉症の人にはつらい。
パチンコは表の看板の電気は消しているが、店内は非常に明るい。

この一週間は、3月半ばを過ぎたとは思えないほど寒かった。そこに節電で空調ストップだから寒いねー。
夕方に雨が降った日も意外と多かった。最近は放射能漏れで雨が危ない(濃度が上がるらしい)だのと言われるから、気にならないでもないけど、どうしようもないし。そういえば酸性雨について最近では騒がれないけど、安全になったのか?って疑問を言っている人がいたなぁ。
(つまり、言われなければ気にならないだろ、って訳だな。だから政府が情報を隠す言い訳は「パニックを防ぐため」。
ちなみに今の放射線濃度も、核大国が核実験をばんばん行っていた頃の濃度に比べれば全然低いらしいが、政府は都合の悪いことは隠すので、現在の本当の濃度はどうなのかね?)

NHKのUstreamによる放送も金曜日で終了したらしい。Ustで流していたのは被災報道(特別番組)だからであり、通常番組が増えてきたから終了だそうだ。今テレビが壊れているので、これでまたニュースが見られなくなったなぁ。
そういえばこの間、民放各局はCM自粛?でAC(広告機構)のCMが一番多く放送されていたようで、その内容がネット上で話題(ネタ)になっていたが、NHKの欠点としてACについて全然放送されない、というネタがあったなw


ちょっと気になっている(大きなことが起こるとそれ以外は無視されるので気になる)ので地震以外のことについても触れておくと。
地震発生前の話題: 受験生の携帯電話によるカンニング、相撲の八百長。
名古屋の選挙: 事前に話題になっていたが震災直後ということもあって投票率20%ちょっと。
リビア情勢: あちらでは軍隊が爆撃し、東北地方では軍隊が救助活動。
石原都知事: 地震は天罰だと発言し、次の都知事選への出馬を表明、自民党が歓迎、公明党が支持。
みずほ銀行: 夜間バッチが遅延して?ATM使えなくなったとか口座振替が出来なくなったとか。
東京ドーム: 野球のジャイアンツがこの節電中に東京ドームでナイターをやろうとして批判される。
ディズニーランド: 普段から東京ドーム10個分の電気を使っていて、復旧の見込みが立たず。
ウイルス関連の法律: コンピューターウイルスを保持した人を罰する法律が出来たらしいが、感染した人も保持とみなせるので問題があるらしい。
株価・円相場: 震災で平均株価は下がったが、建設関連は上昇。円相場はなぜか円高(普通、震災があった国の通貨価値は下がる)。


あと、節電・計画停電(輪番停電)・原発危機となると、当然発電方法の話題が上る。が、たぶんほとんどは事前からあった話だが広くは認識されておらず、事後同じように忘れられるだろう。日本人は忘れるのが得意だからね。
・東西で電気を融通しやすくする為に周波数(50Hzと60Hz)を統一(今は変換所が必要なので、それ以上の量は送れないらしい)
・スマートグリッド(近所同士での電気の融通)
・太陽光発電、風力発電、地熱発電、波力発電

コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

東北地方太平洋沖地震:東京10日目

2011-03-20 23:59:32 | Weblog

外食産業(松屋とかすき屋とか)は平常通りの営業に戻った感じ。
コンビニは普段より少量ではあるが弁当も置かれるようになっている。逆にお菓子は減った感じ。たぶん弁当が優先されて、お菓子の入荷は後回しなんだろう。コーラとかのペットボトルは売り切れ。缶コーヒーは売ってる。
スーパーへ行ったら、牛乳・納豆は全然無かったが、豆腐・冷凍食品は売っていた。カップラーメンは、なぜか焼きそば系(ラーメンじゃない^^;)だけ並んでいた。ペットボトルの類もお茶以外はほとんど無い。
(外食産業とコンビニでは流通形態が違うので、こういう状態になっているらしい)
(トイレットペーパー等が買い占められているという話は聞いたが、そこは見てこなかったなぁ)

節電として、看板の電気を切っている店が多い。遠目には営業しているかどうか分からない事もあるけど止む無しだし、そういう状況だと知っているから近くまで確認しに行くので問題なし。

そういえば東京タワーも見てきたけど、てっぺん部分が「言われてみれば曲がってるなー」という感じだった。まっすぐ上に伸びず、ちょっとだけ斜めになっている程度。

余震の頻度は減ってきた感じ。揺れてもあまり驚かない。
まぁこれも建物が無事だったおかげ。(そういう意味で心配なのは耐震偽装や手抜き工事だけど、今のところは問題なさげ)

今一番の不安点は、やはり福島の原子力発電所。
東京でも大気中の放射線の濃度が普段よりは上がっているらしい。ただしμシーベルト/時というレベル(一度に1000ミリシーベルトを浴びると吐き気とかしてヤバイらしい)でレントゲン写真を撮るより少ないから、タバコの方がよっぽど害があるそうだが。
(ただし、政府は「安全」とか言いながら福島近辺の野菜を出荷停止するという相反する決定(21日)をし、牛乳も風評被害が出ている模様)
まぁそういう訳でこのまま収束してくれればとりあえずOKなんだけど、状況が悪化するとそうも言ってられなくなるので、これからどうなるかがポイント。

コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

東北地方太平洋沖地震:東京3日目

2011-03-13 18:33:00 | Weblog

ちょっと近所をぶらぶらしてきた。

道の様子は普段通り。
松屋・すき屋は復活、てん屋もやってた。吉野家はまだ閉まってる。
コンビニは、店によってはサンドイッチとかも並んでいた。菓子の類は普段とあまり変わっていない感じ。(パンが無ければお菓子を食べればいいじゃない、ってことか?^^;)
スーパーでもパンとかカップラーメン・冷凍食品の類はきれいにすっからかん。牛乳やヨーグルト、豆腐や納豆・ソーセージも無くなってたね。揚げ物のようにその場で作っているようなもの(?)については普段と変わらない感じで売ってた。

ゲーセンやパチンコ店もやってるなぁ。節電が言われてるときくらい、止めろよ。
(昨晩は電気が足りなくなるかも、と言われて節電運動(ヤシマ作戦)が功を奏して停電にはならなかった)

新聞も来ていた。
月曜以降、ごみ収集なんかは普段どおり来るのかなぁ?

コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Asakusa Scala DSL デザインレビューの勉強会の感想

2011-03-13 03:07:06 | PG(Scala)

3月10日(木)にAsakusa Scala DSL デザインレビューの勉強会に行ってきたので、そのメモ(感想)です。
(金曜日なら半徹もしくは翌日朝一番で書くところだけど、木曜日なのでtogetterにまとめるところだけ実施。改めて金曜日にメモを書こうと思っていたら、大地震が起きたので、予定より遅延…)


まず、この勉強会は『デザインレビュー』、つまり設計のレビュー。Asakusa FrameworkのScala DSLをどのように作っていくか?という話し合い。なので@asami224さんが作った現時点の「こんな感じでどう?」というサンプルが披露されたのであり、最終決定版が公開されたわけではない。

Asakusa DSLは(Model・)Operator DSL・Flow DSL・Batch DSLがあるけれども、今回はFlow DSLがターゲット。
つまりデータの入出力と処理順を記述するのが目的。

本家Java版ではアノテーションプロセッサー(apt)を使用しているけれども、Scala版は特にコンパイラプラグインを使っているという訳でもなく、アノテーションを使っている訳でもない。
普通に型パラメーターを使って記述する。
(Scalaコンパイラプラグインを使うと自分のDSLの独自エラーを出すことが出来るらしいが、プログラムは大変らしい)

型パラメーターを使っている理由は、コンパイル時に整合性をチェックする為。静的型付けはそれが利点なのは賛成。
フローに当てはまらないノード(型)を指定すると、コンパイルエラーになる。


今回はコンパイラーでチェックできるところまでで、作ったものをどう出力してAsakusa Frameworkにつなぐかについては未定(今のところはAsakusa DSLのJavaソースを出力する想定)。

これについて@ashigeruさんからAsakusa IR(Intermediate representation:中間表現)構想が披露された。各DSLはIR向けにデータを出力する。これによってJava・Scala以外のDSLも作れるというわけで、夢が広がりますな(笑)
(僕も何か作ってみようかな~。外部DSLになると思うけど。(チェックのことを考えなければ、それが一番楽だよね^^;))


asamiさんのScala DSLは型パラメーターを使っていて、場合によってその個数が異なる。
メソッドであればオーバーロードが出来る(同じメソッド名で引数の個数を変えられる)が、型パラメーターはそういう事が出来ない。なのでDataSource1[T1]、DataSource2[T1,T2]の様に、クラス名に数字を付けて別物にする。

これと統一させる意味もあると思うけど、メソッドにもproc12の様に数字を付けている。これは入力が1個、出力が2個という意味。(9個を超えたらどうするんだろう?)
数字を付けずにデフォルトの型を与えるような作りにすることも出来るらしいけど、エラーがあったときに候補がいっぱい出てくることになって分かりづらくなってしまう模様。それは確かに嫌だよね~。

メタスカラ(メタプログラミング)を使えば可変の型パラメーターっぽいものも扱えるようだけど、エラー時はとんでもないことになるらしい(爆)

自分は数字を付けること自体は止む無しかなぁと思う(ScalaにはTuple2とかFunction1とかがある)けれども、引数の個数とメソッドの数値を合わせる作業は、試行錯誤中にはつらいんじゃないかなぁ。
(ん? 設計時点でノード数は決まっているはずだから、そこは試行錯誤で変わることは無いのか?)


型パラメーターでノードを表すのではなく、インスタンスでノードを表す方式にするともっとすっきり書ける。というのを急遽@frsyukiさんが発表。

確かにこちらの方が分かり易い。ただ、インスタンスは同じクラスになるので、区別をつけることが出来ない。(フローの引数に指定した場合、本来なら異なるインスタンスを渡したらエラーにしたいところだが、コンパイル時には分からない)
チェックする為にはそれ用のプログラムを作る必要がある。

しかしながら、チェックするプログラムを自作するなら、わざわざJavaやScala上で(内部DSLで)作る必要ないよね(苦笑)
そうか、ひらめいた! つまり、インスタンス形式(frsyukiさん方式)で書いて、型パラメーター形式(asamiさん方式)のScalaプログラムを出力すればいいんだ!そうすればそちらでチェックされる(笑)

あと、ふとパス依存型を使ってインスタンスを作ったら区別できるんじゃないかな?とか思ったけど、具体的にどうすればいいかはノーアイデア…。


それから、日本語を使ってノード名やフロー名を表現しているのもポイントのひとつ。英語で書くと何を表しているのか分からなくなってきて、別途辞書が必要になったりするからね(苦笑)

ただ、日本語クラス名って何か問題があるんじゃない?って話が出ていた。jarファイル内はUTF-8にするのが仕様らしいから、問題ないはずって話だけど。
jarファイルにしない場合、例えばWindowsでコンパイルするとファイル名はShift_JIS(MS932)で作られる。これをEUCのUnixにそのまま持っていったりしたら、ダメそうな気はする。


もう一つの論点は、結局DSLをどのように使うのか?という本質的な問題。
設計書(図)を元にテキストに記述するのか、DSL上でプロトタイピングしつつ設計するのか、といった目的の違い。

個人的にはどうせ設計書では図を描くんだから、それと同じ形式の方が分かり易いと思うけど、プロトタイピングなら確かに図は後かも。
プロトタイピングで試行錯誤するなら、エラーがある場合はIDE上(コンパイル時)で即座に分かる方がいい。チェック用プログラムを作る方式は、その点では劣る。

大規模(ノードが1000個とか)なフローはGUIツールでは描けないというのはその通りだと思うけど、大規模だったらテキストで書いても結局分かりづらいよね^^;
そういうときは部分的に分割していくだろうから、どちらでも同じ気がする…。

コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする