Sunday 31 December 2017

動きました...

結構、いろいろバグってた... ちゃんとテスト書かないとバグが溜まるんだよな。引数の待ち合わせで送り忘れたり、子クラスのpublic method を親で上書きしてたり。

というわけで、今晩は安らかに眠れそうです。

よいお年を〜

Saturday 30 December 2017

再び、Java と格闘

行方不明になっていた学生に割り当てたプログラムを動かしていると、

  なんか動かなくなってる

動いていたはずの version に戻しても動かないぞ... module の微妙な version の依存性とか外しつつ書いていったので戻れない...

動いていたと思ったのは幻覚だったのか?

Thursday 28 December 2017

良くある学生の...

先輩とか僕が書いたコードがわからないので、自分で独自なものを書くというやつですね。

独自に書くのはよいと思うのだが、もちろん動けば文句はないわけですが、動いてないのだと、

  それって、僕の仕事を倍に増やしてないか?

「これ動いているんですか」みたいなことをいう学生もいるんだけど、まぁ、動かなくなる理由はたくさんあるんだけど、Mercurial をたどれば動いてた所にはたどり着くことが普通。

いろいろ気をつけてはいるんですが、やられてしまうことがあります。それもまた楽しいのが大学だな。

Wednesday 27 December 2017

Java の Singleton

昔、学生に書いてもらった Alice っていう分散フレームワークなんですが、

  Task scheduler とかが Singleton

ぐ。おかげで、

  Java で複数 Thread でテストする

ってのが不可能。手元で InteliJ でデバッグできないです。Nat だとつなぎ先を複数用意しないといけないのだが、それもできない... さらに、

  Java は fork できない

おおい。逃げ道ないんですけど。複数プロセス上げても、そこに何かを渡すには引数とか共有メモリとかめんどくさい... Thread local は遅いし、さらに混乱するだけ。

そして、残念ながら、

  Singleton の除去は自明でも簡単でもない

DIコンテナみたいに必要なものをそろえて渡してやれば良いだけなんですが、Singleton で書いたが最後、

  便利なので、どっからでも自由にアクセス

ということになってるので、まず、使用しているところを洗い出して、そこに渡す手段を作成時に用意するという作業が...

というわけなので、

  どうせなら書き直した方がまし

ってな状況です。

DBコネクションとか Logger とかは Singleton にしろとか言っている人もいるようですが、

  マルチCPU以前の古い常識

でしかないですね。単純に static を使った Singleton は禁止だと思う。

インスタンスが一つという状況はもちろんあるわけですが、それを大域変数で自由にアクセスってのは、Logger でももうないです。Haskell みたいに原理的に書けない言語とかもあるし。

Monday 25 December 2017

年末年始は沖縄

プチエトワールのクリスマスディナーはおいしかったです。

最近は東京にいるパターンだったのですが、「少し短く頻繁に帰ろう」キャンペーンで。プロシンの日程もあれなので。でも、12/28に授業を入れられてしまったこともあったりしましたが。今年は避けられました。

昨日は夏並に暑くて、久しぶりに普天間廻ったんだけど、少し汗ばむ感じ。喜友名でどしゃぶりくらいましたが。今日は少し寒いな。

Sunday 24 December 2017

ラフォンテは年内で閉店

首里桃原にあるピザ釜持ってる広いレストラン。儀保駅から歩いて3分という立地(に後からなった)で便利だったんですけどね。

お昼は1620円のバフェなのか。もっと行けば良かったな。

結構、急に決まったみたいです。

今年は、浦添のそら豆も閉まってしまったし。普天間のラーメンまるよしの北谷への移転もちょっと痛かった。

Saturday 23 December 2017

研究室忘年会

直前まで論文書いてたりしましたが...

温野菜で鍋という安直な感じが学生っぽくて良いかな。

例年だと東京で大晦日にどんなコード書こうかと考えている頃ですが、今年はずーっと沖縄にいる予定です。なんのコード書こうかな。

そういえば今日は Papers3 から論文PDFのリンクhtmlを出力するPerl script を書きました。Papers2 とは微妙に違う。DBのtableの属性名が。でも、時間がかかったのは、rsync で空白を含むファイル名をどうやってコマンドラインで渡すかだったり。--protect-args !? いつできたの?

Thursday 21 December 2017

OS X で、なんかWindowがドックに格納されてしまう

って症状に長年困ってて、xterm 使ってる時が多いんだけど。でも、今日、

  どうも、Command M 打ってるらしい

というのに気がつきました。Command Space で日本語にした後、「み」とか打つ時に、Command M と打ってるらしい。で、これに気がつけばググれる!

このダメなキーバインドを殺すにはシステム環境設定の

  keyboard -> shortcuts -> app shortcuts

に、

  Minimize
  Minimize All

を何か「打ちそうもない」キーに割り当ててやればよいらしい。たとえば Command Control M とか。でも、少し落とし穴があって、

  Minimise
  Minimise All

という綴りを使っているアプリもあるらしい...

  https://apple.stackexchange.com/questions/115562/how-do-i-disable-the-minimize-command-m-shortcut-in-mavericks

17年ぐらい気がつかなかったらしいです。

Tuesday 19 December 2017

PathFinder の続き

なんか順調に直していたんですが...

 jdk にパッチを当ててる部分がある

それ自体はなんとかなったんですが、

 パッチを当てたmoudle と、そこから呼び出している自分のmoduleが cyclic

だと文句言われました。もちろん、cyclic なんだけど。それが何か? と思ってググってみると、

 https://developer.jboss.org/blogs/scott.stark/2017/04/14/critical-deficiencies-in-jigsawjsr-376-java-platform-module-system-ec-member-concerns

で、cycles between packages in different modules ができないのはまずいだろと文句を言っている人たちが...

というわけなので、jigsaw 側の問題らしく、回避できないっぽいです。少なくとも簡単な方法は思いつかない。逆に言えば、そこがなんとかなれば動きそうです。

たぶん、cyclic を許すとか lazy loading を許すとか、そんなswitchが入るんじゃなかろうか。というわけなので諦め。java 1.8 やればいいさ。

でも、コンパイラの授業でやろうと言っていた、CbC compiler の最新llvm/gcc 対応は、なんか学生が残りをやってくれたようです。少し問題はあるっぽいがだいたいできてる。すごい! えらい!

Monday 18 December 2017

Java9 and Java Pathfinder

Starwars は見たのでネタバレだいじょうぶ〜 で、Fedora Linux Kernel の debug の方は片付いたので、

  次は、Java Pathfinder on Java9

いや、Java8 では動いているので、別に無理して Java9 で動かす必要はないんですけどね。

で、Mercurital repository

  http://babelfish.arc.nasa.gov/hg/jpf/jpf-core

から取ってくるわけですが、VM API使って Java で Model検査しようってものだからなぁ... last update 2/6 のjdk8u121用ですか。

というわけで、ばっちり ant build できない。

new Integer とかは無視して良いらしいけど、いろいろないと言っている。

Java9 で module system が導入されて、ついでに VM 系がどっかに追いやられたらしい。もう一つは、

  Pathfinder は annotationsg classes   examples  main    peers    tests

と module 分けされているのだが、Java9 では、module-info.java で

  main/module-info.java
  module gov.nasa.jpf {
    requires jdk.unsupported;
    requires java.logging;
    requires java.management;
    requires javafx.swing;
    requires gov.nasa.jpf.annotation;
  }

と明示的に記述してやらないといけないらしい。とググると出てくるわけですが、module-info.java は gov.nasa とかが置かれている top に置かないとだめらしい。

jpf は and なので、build.xml をいじるわけですが、

   <javac srcdir="src/main" destdir="build/main" includeantruntime="false"
      debug="${debug}" deprecation="${deprecation}" classpathref="lib.path">
    <compilerarg value="--module-path"/>
    <compilerarg value="build/annotations"/>
    <compilerarg value="--add-exports" />
    <compilerarg value="java.xml/com.sun.org.apache.bcel.internal.generic=gov.nasa.jpf"/>
    <compilerarg value="--add-exports" />
    <compilerarg value="java.base/jdk.internal.misc=gov.nasa.jpf"/>

と、こんな感じで module path を指定してやると良いようです。

   ant |& grep error
    [javac] jpf-core/src/main/gov/nasa/jpf/vm/HashedAllocationContext.java:111: error: cannot find symbol
    [javac] jpf-core/src/main/gov/nasa/jpf/vm/HashedAllocationContext.java:115: error: cannot find symbol
    [javac] 2 errors
    jpf-core/build.xml:103: Compile failed; see the compiler error output for details.

まで来たが...

が、まだ、動いてない... classes に Java5 互換用の java/lang とかある。java のpackage を上書きしているこいつ、なんとかなるのか?!

なんとかなるなら、御本家の方がなんとかしているんじゃないか説。動かないかもな〜

Sunday 17 December 2017

さらに ansible kernel build の続き

いろいろトラブったのですが、

  make menuconfig

を ansible script から通す方法がない。結局、いろいろググりまくった挙句、

  config file を取っておいて、それを送り込み
  make olddefconfig

してやるのが良いみたい。これで、kernel build まで ansible で通りました。

で、build したソースを VM host にコピーして、build したVMを qemu の debug mode で立ち上げて出来上がり。

な、はずだったんですが、back trace が死んでる。

どうも、linux kernel は address randomize をするらしく、それを config の時に切ってやらないといけないらしいです。

  http://tinyurl.com/y8oxjfw5

で、ansible から再 build 中。これで kernel debug できるかな?

  http://www.cr.ie.u-ryukyu.ac.jp/hg/Ansible/fedora_kernel_build/

この ansible script 、来年は絶対に動かない予感。

Saturday 16 December 2017

Fedora build の続き

順調にいくかに見えたんですが...

  ramfs がどうこう

とかいって動かない... でも、これを作ろうとすると、かなり面倒くさいらしい... くそ〜

やっぱり、fedora の中で kernel build した方が良いらしいです。で、自分で作り始めたんですが、去年10GBで失敗したので、

  20GBにしたらやっぱり失敗

くそ〜 去年は30GB足したのだが、それでは多いかと思ったんだけどな。

で、

  ansible 書くんじゃないか?

ですよね〜 で、ググってみたんですが、なんか適切なのがない。まぁ、そうだよな。毎年、Fedora の kernel build とかし3てる奴いるわけないし。

諦めて書き始めたんですが、git で取ってくると頃までは来たみたい。動くかな。

http://www.cr.ie.u-ryukyu.ac.jp/hg/Ansible/fedora_kernel_build/

Friday 15 December 2017

Kernel debug

毎年のあれですが、今年は、学科のServer上で kernel build して、それを VM に copy するのが良いんじゃないかと。去年は VM の中で comiple しようとして disk image の拡張とかで死んだらしいので。

export INSTALL_PATH=/hoge/tmp
$ make -j 8 install

とすると、/hoge/tmp に Map と vmliniuz ができます。素晴らしい。

が、それを VM の中にどうやって持ってくの? 結局、IP address 申請して dhcp 取ってしまうのが簡単らしい。そうすれば rsync できる。

あとは、grub2/grub.cfg を書き換えて... というところで力尽きました。できるのか〜

そういえば、CbC の最新 gcc/llvm への対応は、llvm は学生が自力でやってくれたらしい。素晴らしい。指導の甲斐があった。gcc は、まだ、謎です。

カレーパーティは1/7にしようかと思ってます。

Thursday 14 December 2017

東京と沖縄のIngress

まぁ、なんとなく下火になってきたゲームも悪くはないというか... AXS と東京三菱がスポンサーを降りるらしい。

東京ではミッションやろうと思っていたのですが、一つしかやらなかったかも。キーばかり200個カプセルに入れて捨ててきました。Ingress って二周はしないとCF作れないんですが、いろんなところを一周しかしなかった。

Engineer 黒が近かったので帰り際に、持ってるVR/AXSを適当に刺してきたんですが、ちょっとダメだったかも。

なぜかと言うと、戻ってきたら、自分の縄張りがかなり緑だったので。しかも、適当に修復したら多重作られた... まぁ、落とされるゲームなので、あまり強いシールドは入れないようにしてるんですけどね。

で、まぁ、学校の行き帰りに落とすわけなんですが、バースターもレゾもシールドもまったく足りない。それでも、うちの奥様がご近所は守ってくれたみたいです。ありがとうございます。

ここしばらくは緑おとなしかったので油断してたかな。年末なので、みんなストレス溜まってるのかも。おかげで楽しいともいうか。

Wednesday 13 December 2017

Felica の続き

B3の学生もだいたい決まったので、この前のFelicaの鍵をやってもらおうかなと。と思ったら、

  それはもうできてます

的なコメントが学生から。え〜、なんだって。でも、だいぶ前の話だよな。じゃぁ、ソース見せてみろってことで、夕方から...

この前の nfcpy をやっぱり使っていて、だいたい動きそうなソースだ。ラズパイ用のリレーボード Piface を使っていたので、それを Pythong の dummy class に置き換える。

で、なんか socket 呼んでるので、その部分は comment out 。nfcpy の設定とかにいつも通りはまりましたが、

  edy id は読めた!

その部分はちゃんと動いていたらしい。あとは、ldap と接続すればよいんですが、書いてあるコードは怪しいソケットルーチン。どうも学科のノートPC/VM管理ソフトである Akatsuki に接続しようとしていたらしいんですが... この部分は動いてないっぽい。そもそも、鍵開けてから閉める部分書いてないし。

うちは、edy id は ldap に入れてるので、ldapsearch でいいかな。で、Timer 使って on/off するように直してできあがり。簡単じゃん。

なんだけど、ldapsearch が遅い。edy id 部分に index 貼ってないからだな。できるはずだけど...

Monday 11 December 2017

ミニコンポ


実家にあるソニーのミニコンポ(死語)ですが、なんか、CDトレイがだしっぱなしに... まぁ、主に J-Wave 聴くのにしか使ってないんですけどね。自室のOnkyoのレシーバーもだいぶ前に壊れちゃったんだよな〜

一階と二階に一つずつ置きたい所だが... そういえば、HAP-S1 ちょっと面白そう。

   http://www.sony.jp/system-stereo/products/HAP-S1/

スピーカーも怪しいが、まぁ、生きてるみたいだから。ところが、HAP-S1 は、

  タイマーがない

え、この手のものって目覚ましに使うのが主流じゃないの? まぁ、このまま買わないかも...

安物の音で目覚ましってのもなあ。もっとも、沖縄では目覚ましなんて使ったことないんだけどさ。

Sunday 10 December 2017

しのはらとけむり


西池袋のラーメン屋さんですね。しのはらは、最近、結構行列してる。僕はけむりの方が好きなんだけど。

けむりで、うっかり「200円の特製トッピング」頼んだら、結構な量で食べるのに少し苦労しました。

しのはらは、今回は土曜日にたまたま空いたので入れました。行列している時に並ぶほどではないと思うんだが... でも、麺がしっかしていて、スープも良くできていて、流行るのも当然かな。

Saturday 9 December 2017

いつもの訪問

母方の四人姉妹もだいぶお歳で。母の妹が特養に入ったのですが、施設は変わらず。でも、前回来た時よりは調子が良さそうでした。もう、あんまり話も通じない感じではあるんですが、母を連れて会いにいくのが大切だと思ってます。

いかないと忘れられちゃうからな。

自分の未来でもあるんだけど、歳取ること自体は悪くないと思う。あの世代はネット使わないわけだけど、僕達が歳取る頃にはネット老人うるさいって感じになるんじゃんないかな。

独り言うるさい人とか、ひたすら布をたたんでいる人とか、ベッドで寝た切りとか。ひとそれぞれだな。

Thursday 7 December 2017

edy card

そういえば、なんか edy id が読めないなんて話があったなと思って、秋葉原で Felica reader を買ってきました。いや、大学のどっかにはあるはずなんだけど。千石にあったんですが、二つあった。どれだろう? で買ってきたのは、

 RC S380

Sony のUSBで繋げる奴ですね。

ソフトはいろいろあるが、python の nfc が S380をサポートしているらしい。他にもいろいろあるけど、S380 は動かない感じ。

で、
python examples/tagtool.py -v

で動くらしいんですが、だめっぽい。timeout とか言ってる。 nfc/tag/tt3_sony.py の request_service の timeout を10倍にしたら動きました。なんだよ。

なんか、妙に大きな数値のfor文でスキャンするみたいなプログラムになっていて、くそなんですが... それに、どうも、

 polling base

らしい。うーん。まあ、でも edy id は読めたので良いか。

Wednesday 6 December 2017

ハリーズ

前田のカレーのお店なんですが、おばちゃんが病気で、休みがち。年内は、

  かわいいお姉さんがたが引き継いでくれるらしい!

火曜日頼んだ分だと、おばちゃんが作った分と遜色ないです。すばらしいです。

学生が卒業カレーみたいなのにも使っているらしく、がんばってくれると良いんですけどね。

Tuesday 5 December 2017

ちょっと早めに出て Ingress

沖国大辺りを荒らしてから、お昼食べて大学へ。のんびりしたもんです。

Ingress だと運動として強度が低いってな話もあるけど、

 高血圧なんだから、そんなにがんばってもね

Sunday 3 December 2017

MoarVM 読み会最終日

最初は Rakudo 読み会だったんだけどな〜

午前中は、nqp と rakudo の文法規則を読んでました。だいたい Perl6 は nqp の5.5倍の大きさ。実際にトレースすることはできなかったんですけどね。

午後は、VM読もうということで、moar command を lldb で trace 。nqp のcommand line が出た所で、control-C 打って、lldb に。楽ちん。

でも、もはや、lldb は -O0 -g3 でも、引数がないとか変数が見えないとか。disass でレジスタから直接値を見るんですが、まぁ、疲れますね。

VMのregister は大域変数に取ってあって、オペランドからレジスタ名(数字)をとってきてアクセス。わかりやすい。レジスタには型はないので union 。それでいいのか?

で、jit のentry point を探すんですが、適当に「ここかな」というところに break point 。で、MoarVM のbyte code を graph ってのに変換する所は見つけて、それを emit ( native code を出力する) ところまではわかりました。

 nqp --target=mbc --output=fib.moarvm examples/fib.nqp
 moar --dump fib.moarvm

で、MoarVMのbyte code のdumpが見れます。

でも、

  最適化しているところはどこだ?

どうも、inline 展開と、定数式展開ぐらいしかしてないみたい。いや、見つけられなかったので想像なんですが。

まぁ、そこで時間切れかな。

10時から18時までですが、遅れ気味に始めて、12時にはお昼休み。14時まで休んで、16時に休憩はさんで18時までなので、まぁ、そんなに大変と文句をいうほどのものではありません。

感想に「普段見れない河野先生が見れた」みたいなことを言った学生がいますが、あんまり変わらない奴なので、観測力がないだと思います。

でも、今回は割とスムーズだったかな。スライドもわかりやすかったし。

Saturday 2 December 2017

nqp

というわけで、朝から Rakudo 読み会なわけですが、

 まぁ、Perl6 が何ってところから

という感じで。下位言語の nqp から動かしてみるわけですが、

 say(1) を say (1) とすると動かない

なるほど〜 いろいろググって、

 http://edumentab.github.io/rakudo-and-nqp-internals-course/

これが割と良いので、今日は、だいたいこれを読んでました。最初は、

 nqp (Not quite Perl) の説明

で、それから、

 QAST ( nqp の抽象構文木)

そして、Grammer 、Action、byte code、VM と一通り。VMの実装はあんまり書いてなかったな。

pypy の時は結構苦労したんですが、Rakudo は、このslide のおかげでだいぶわかりやすい。もっとも、まだ、Rakudo を debugger から動かすのには成功してないのですが。

Grammer が class と同じレベルで built in なので、これまで見たコンパイラの中では一番奇麗かも。

コンパイラ自体は速いんですが、JVM/MoarVM 経由なのが起動が遅い原因かな。それで、JavaScript Engine に乗り換えようとしているのかも知れないな。

明日は、実際のコードと、VMの中身に突入してみる予定です。

Friday 1 December 2017

Perl6 Rakudo

コンパイラの授業の〆は、Perl6 を読もうということで。12/2,3 10時から18時の予定です。工学部1号館321。最近は、ネット中継とかやってないんだよな。気が向けば設定するかもしれません。

今日は、LLVMをちょっとだけ読んだ後、Rakudoの準備。えーと?

 Perl6は、JVMまたはMoarVMの上で動く、
nqp で実装されている

 nqp は、JVMまたはMoarVMの上で動く
nqp で実装されている

 nqp compiler は、MoarVM/JVMのバイナリで提供されている

C compiler も Haskell compiler も、既存のC/Haskell compilerを前提としていて、

 真の意味での boot strap を失ってしまっている感じ

このあたりって、

 個体発生は系統発生を繰り返す

みたいにできないのかな。なんていうのかな、

 簡単なインタプリタ/コンパイラから細かい boot strap を繰り返して複雑なシステムが出来上がる

みたいにならないのかと。単純なシステムに fall back できないのは残念な感じ。

Perl6 を Perl6 (あるいは、その制限版である nqp )で記述すると言うのは、言語屋さんの自己満足に過ぎなくて、それが役に立つという状況になってない感じ。

で、わからないのが、

 nqp level で trace ってどうやるの?

ってことですね。nqp に debugger があれば、それで。あるいは、rakudo を Perl6 で動かせるなら、Perl6 debugger で。

でも、lldb/gdb level は用意されているようなんだが...

pypy でも、動かしてデバッグするまでにいろいろあったような。

nqp script 自体は、perl6 -mnqp hoge.nqp で動くようなんですが...