トップページへ戻る
過去の日記へ


予定


10月22日(日)

 壊滅的なスケジュール。とにかく固体物理の原稿をなんとかしなければならない。


10月21日(土)

 NOP

 期日前投票。なんか、ちょっと前からすごく期日前投票が便利になって、ほとんど期日前投票で済ませてるんだけど、 これ、投票率向上に寄与しているのかなぁ。それとも、期日前投票するような人は、その制度がなくても結局投票するんだろうか・・・。


10月20日(金)

 HPCをどうにかしたいと思うなら、C++/Fortran以外の選択肢を若者に与えないとダメだと思う。 FortranはともかくC++はちょっとアレすぎる。っていうか今時若者にC++やFortranは無いでしょう。 せめてPython/Ruby。できればもっと新しい言語。ScalaとかGoとかJuliaとか。

 そこそこ大きなアプリケーションを組むのに必要な言語仕様と、ハードに密着したカーネルを組むのに必要な言語仕様は全く違う。 それを一つの言語でなんとかしようとするのはもう無理。無理無理無理無理カタツムリ。

 あとさ、もうGCもいらないんじゃないかな。長時間の実行によりメモリを食いつぶしたら再起動でいいじゃん。

 Fortranに比べてC++のアレ度が高いのは、やっぱりC++仕様警察の存在が(悪い意味で)大きいと思う。 彼ら、すぐに初心者に「未定義動作だ鼻から悪魔だ処理系依存だ」ってマサカリ投げるけどさ、 その草の根運動が本当に言語の発展に寄与していると思ってるんだろうか。 少なくとも僕はC++に対する印象がかなり悪くなったよ。

 未定義動作とか処理系依存についてはFortranも負けず劣らずいろいろある気がするんだけど、そっちは警察いないんだよね・・・。 出てくるのは警察というより、「昔のFortranはこうじゃったんじゃよ・・・」と回顧する人々。

 数ヶ月前に投げたマサカリたちにまさかの返事。最初に投げたのは2011年だったのだが、そこからなんと6年越しに対応してもらえた。 このワーキンググループが何をするグループなのか未だに理解していないのだが、とにかくグループメンバーになってみるものだ(誘っていただいてありがとうございます>Nさん)。

 我々は「声をあげた」ことで満足し、それで対応されなくても「ボールは既に投げたのであり、こちらの責任ではない」という態度をとりがちなのだが、たとえ声を上げても自分が理想とする未来の実現にいたらなければなんの意味も無い。声をあげて対応されないのであれば、 それは声をあげるパスが間違っているか、声をあげる自分の立場が間違っている(「えらさ」が足りない)かのどちらかなんだよな・・・。

 そういや、こんなとこ誰も見てないだろうけど「スパコンとみなされる計算能力の下限の改正」を働きかけたのも僕であることは言っておきたい。 これはわりと偉い人経由で文科省に働きかけた。僕は声を上げただけで、実際に働きかけていただいたのは偉い人だけれども、声をあげなければ実現もなかったわけで・・・と自己満足。


10月19日(木)

 今日の健康診断、予約表と問診票を事前に印刷して持っていかないといけない。 しかし、書類置き場のどこを探しても予約表と問診票が見当たらない。 絶対に作成したはずなのに!

 で、机の引き出しという引き出しをひっくり返して探したあと、ふと思い出して ディレクトリを見たら・・・あった。どうせいま印刷しても無くすから、「PDFとして保存」して置いたんだ・・・。

 しかし、この予約システム、予約も問診も、完了時にメールを飛ばした方が良いと思う。 いまどき確認メール飛ばさない予約システムなんて見たことないよ・・・。

 あと、問診票システムもどうもおかしい。予約を取った後に飛んだ時と、予約を取らずに飛んだ時で 振る舞いが違う。予約取った後に問診票を作ると予約番号が記載されるが、 予約を取らずにそのまま問診票を作成すると、通し番号がつくらしい。 つまり、問診票は必ずしも予約番号、つまり個人と紐付けられてないので重複チェックがない。これ、どうなってるんだ?

 いま、僕は問診票が無いと思ってもう一度作ったんだけど、そうしたら「僕と紐付けられていない」問診票ができて、 通し番号が振られた。多分、サーバには問診票が貯められており、後で統計処理に使うんだろう。 その時、問診票の重複チェックはしてないので、僕の分は二回カウントされるんだろう。 まぁ、紐付けは面倒くさいし、その分個人情報の扱いに気を使わないといけなくなるから、 「紐付けない代わりに重複チェックもしない」というのも一つの設計思想ではあるが・・・。

 とあるシステムから「パスワードの有効期限が切れそうだからパスワード変えろ」というメールが。 最近は「パスワードの定期的変更の強制」は「セキュリティ上のリスクを上げる」という方向で専門家は合意が取れてると思ってけど、違うのかな。

 パスワードの話、調べたけど、もう少し話がややこしいな。まず「単一のシステム」でパスワードを定期的に変更するのは メリットのわりにデメリットが大きい。しかし、ユーザは複数の異なるシステムを使っている。かつ、少なくないユーザは パスワードの使い回しをしているであろう。使っているサイトの中には、管理が甘いサイトや悪意のあるサイトもあるだろう。 そこからパスワードが漏れる、ということはありそうな話。

 さて、パスワードが漏れるとまずいサービス、特にお金がからむサービスの提供側としては、 常にパスワードが「別の場所から」漏れる可能性がある。その可能性に対処するには、 二段階認証にするのが最も効果的なのだが、ユーザの抵抗もあるのだろう。 なので、「パスワードに有効期限を設けて、パスワードを定期的に変更させることを強制する」のを次善の策として採らざるを得ない・・・と。

 というわけで、僕が考える(いまのところ)最善の策は、「Googleなどを二段階認証で守る」 「パスワードを廃止。ログインのたびにGmailにログイン用ワンタイムURLを飛ばし、そのURLにアクセスしたらしばらくログイン状態とする」 というところかなぁ。ワンタイムURLのところはOAuthでもいいけど、とにかく「一つだけ厳重に守る」「そこを利用して認証する」のがポイント。


10月18日(水)

 来週火曜日のスライド作って送った。

 なんか最近HPC関連のイベント多いんだけど、ひょっとして俺ってHPCの人なのか? スパコンは使ってるけど「HPCの人」では無いつもりだったんだけど。

 2の平方根を計算するRubyスクリプト

 「だからなに?」と言われたらそれまでだけど。

 ちなみに検算用→The Square Root of Two to 1 Million Digits

What follows are the first 1 million digits of the square root of 2. Actually there are slightly more than 1M digits here. These digits were computed by Robert Nemiroff (George Mason University and NASA Goddard Space Flight Center) and checked by Jerry Bonnell (University Space Research Association and NASA Goddard Space Flight Center). There were computed during spare time on a VAX alpha class machine over the course of a weekend. Although these digits have been checked once we encourage others to check them as well.

とのこと。


10月17日(火)

 大量のTODOに埋もれそうになりつつもひとつずつ片付けるしかない。

 AIに何かを学習させ、それにより予想させるシステム、何かで見たな、と思ってたんだけど、 グレッグ・イーガンの「ぼくになることを」だ。ネタバレになってしまうが、 要するに「ある人の行動は、視覚や聴覚などのインプットに対するアウトプットとして定義できる。 さて、インプットに対するアウトプットを出力するデバイスがブラックボックスである時、 同様な振る舞いをする別のシステムに入れ替えたとしても『個』は連続するといえるか?」 という問題である。

 この問い自体は古典的なものだが、そこにAIによる学習というテーマが入ってくる。 生まれてからずっと、あなたの行動を完全に学習していたAIがいる。20年も学習すれば、 そのAIの行動はあなたそのものとなるだろう(少なくとも周りの人にとっては)。 ある瞬間、あなたとAIが入れ替わる。あなたの脳は捨てられる。 この時、「まわりから見れば」あなたは永遠の命を手に入れたことになるが、 はたしてあなたは生きているのか?それとも死んだのか?

 例えば、あなたのYahooニュースへのコメントをAIに学習させる。Twitterでの言動でも良い。 すると「こういうニュースにはこういう反応をするであろう」という予想が立つ。 「こういうツィートはRTして、直後にこんなことを言うだろう」という予想も立つ。 数年分も学習させれば、もはやAIは「あなたをネット越しにしか知らない人々」にとっては 「あなたそのもの」の発言ができるようになるだろう。そして、「ネット越しにしかあなたにアクセスしない人」 にとっては、ネットでの発言があなたそのものであるのだから、もはやこのAIは「あなた」と言って過言ではない。 でも我々の直感は「それはあなたではない」と定義したがっている。

 昨今のAIだの機械学習だのの進展により、この古典的な問いが含む気持ち悪さをずっと感じている。 「なにか」を決める、もっといえば「個」とは、結局のところ「入力に対する応答」で特徴づけられる。 そこを理解したい、というのは物理の根源的な欲求であったはずだが、そこを機械学習で置き換えてしまう、 というのは物理でない気がする。少なくとも僕の直感は「それは物理ではない」と定義したがっている。

 ↑という曰記を今日発見して驚く。昨日、「明日の曰記」を書いていたようだ。 さらに、しばらく前から日付が11月になっていた。「10月11日」を書く際、「10月10日」をコピペして 「10→11」としたが、その際に月も更新してしまったようだ。アホ過ぎるな・・・。

 やや旧聞だが成功者は「ToDoリスト」を使わない。要約すると、タスクは「いつ」「どれくらい時間をかけて」やるかをセットで考えて、「リストではなくスケジュール管理せよ」というもの。 まぁそうだよね、という話。

 結局のところ、タスクが溜まると、プロセスが多すぎるOSのように動作が重くなる。これを防ぐために 「いま必要のないタスク」を外のデバイスに書き出して、メモリから追い出す、という作業が必要。 だが、これは言うは易く行うは難し。やる必要のあるタスクが「全て」外のデバイスに記載されており、 その外のデバイスをそれなりの頻度で確認し、漏れが無いようにしなければならない。 また、予定は変わるものだが、その際のリスケジューリング能力も必要とされる。

 何より、TODOリストにせよスケジューリングにせよ、大事なのは 「何をやるか」ではなく「何をやらないか」であり、もっと言うなら 「やらないと決めたことをやらないどころか、そもそも考えないようにする」というのが必要。 要するに「考えなくて良いことを考えない」というスキルなんだけど、 これはかなり「人を選ぶ」レアなスキルだと思う。 何かタスクがぶつかって(例えば仕事と遊び)、どちらかを諦めなければならない時、 一度決断したら「選ばなかった方」を考えるのは無駄だが、それでもうじうじ考えてしまうのが人間。

 まぁ、何がいいたいかというと、なんでもかんでも才能のせいにするのはよくないけど、 少なくとも「タスク管理」というのは極めて高度なスキルを要求するので、一朝一夕で身につくものではないということ。


10月16日(月)

  アプリ開発のアンチパターンを踏み抜きながら アプリをフルリニューアルした話

「システム開発に銀の弾丸はないかもしれないが、金の実弾ならある」

 名言すぎる。ビルドが遅くなって開発の障害になりかけたのを、開発資源を増やすことで対応する話。 個人的な経験として、お金で解決できることはお金で解決するのが、結局のところ低コストであることが多い。 ちょっとのお金をケチって、どえらい(見えない)コストが増える、というのはよくある話。


10月15日(日)

 一般公開のスライド1/2くらい作った。

 いろいろ多正面作戦になっててつらい。


10月14日(土)

 固体物理原稿1/3位書いた。


10月13日(金)

 銀の流れ弾って単語を見て笑ってしまった。 AIとか機械学習とかを銀の弾丸だと思って、その流れ弾を被弾する人、いるよね・・・。

 なんというか、悪意には中毒性があるという話。 例えばYahooニュースのスポーツ/芸能人関係のニュースには、だいたい悪意むき出しのコメントがついてる。 マイナーな芸能人のどうでもいいニュースには「誰?」とか「興味ない」とか書いてあるし、 スポーツで誰かが不振に喘いでる、みたいなニュースにはすごい上から目線で「お説教」するファンがいる。 だんだん、「あ、このニュースには気持ち悪いコメントつくな」とわかるようになるんだけど、 それをわかっていながら、「見ると気持ち悪くなるだろうな」と思いながら見に行って、やっぱり気持ち悪くなりました 、みたいな。

 例えば、ある人のことをよく思わないらしい人がいる。例えばTwitterである人のつぶやきをその人がRTしたら、 「その後に何か批判的なことを書くだろうな」と予想がつく。RTされた人は、その見に行っても嫌な思いしかしないのに、つい見に行ってしまう。 そして嫌な気持ちになる、みたいな。

 これ、「つぶやきをRTして批判的なことを書く人」も「RTされた人」も、どちらも悪意中毒に罹患している。 「RTして批判的なことを書く人」は、そもそもその人の書くことが気に入らない。気に入らないなら見なきゃいいのに、 わざわざフォローして、何か気に入らないことを書くのを待って、RTして批判する。 「RTされた人」も、嫌ならミュートすればいいのに、その人にRTされたら「批判」を見に行って嫌な気持ちになってしまう。

 以前、人は嫌いな人を、より嫌いになるための情報収集をする、という心理状態があるらしいことを知ったが、おそらく上記の行動は より一般的なしくみなんだと思う。自分に向けられていればもちろんのこと、「自分に向けられていない」悪意も、そこに「悪意がある」と思うとつい見に行ってしまう、みたいな。それを「悪意中毒」と呼ぶのが適切かどうかはわからないが。

 バイナリファイルを倍精度実数だと解釈してダンプするコマンド、標準ではないのかと思っていちいち

$ ruby -e 'puts File.binread("test.dat").unpack("d*")' 

とかやってたんだけど、od -Fで普通にできた。

$ od -F test.dat 
0000000     1.000000000000000e+00    2.000000000000000e+00
0000020     3.000000000000000e+00    5.000000000000000e+00
0000040

探し方が悪かったな。

 ネタにされてる動画

 std::ifstreamやofstreamにstd::stringを渡せるの、C++11からだったのか・・・。しばらくコンパイラがなんで怒ってるかさっぱりわからなかった。ローカルのGCC 7.2.0だとデフォルトで通るから気が付かなかったよ・・・。

 たまにYouTubeで流れるAdobe Document Cloudの公告、いきなり

数字を読み、売上を伸ばし、商談を速やかにまとめなければなりません

って言われて「なんだそりゃ?」ってなる。原文は

You need to crush your numbers, grow your revenue, and close deals faster.

 これ、おそらく日本語ネイティブでない人、もしくは日本のビジネスに慣れてない人が直訳している。

 他にも

With Adobe document cloud for enterprise, you can do it all.

が、

Adobe Document Cloudエンタープライズ版は、これを実現します。

になってる。文法的には間違ってないけど、日本ビジネス語になってない。

 これ、僕が訳すなら

日々、大量の資料と格闘していませんか? Adobe Document Cloudエンタープライズ版が、あなたのビジネスを効果的にサポートします。 Adobe Document Cloudエンタープライズがあれば、もう紙ベースの見積もりや、契約書のやり取りは不要です・・・

みたいな感じになると思う。

 英語の公告は特に変な感じはしないので、おそらく英語の公告ムービーを、日本語翻訳サービスに突っ込んで、それを 日本語話者に読み上げさせたのだろう。無いよりマシといえばそうだが、ちゃんと広告するつもりなら 日本法人に投げ、必要に応じて日本の広告代理店に任せるべきだったと思う。

 で、ここからが本題なんだけれど、これはAdobeもわかってるんじゃないかと思う。 もし、本気で日本市場を考えるなら、日本の広告代理店にまかせて日本用の広告を作るはず。 次点で、英語版のローカライズを日本企業に任せる。それすらせず、おそらくアメリカの企業に(安く)投げたということは、 それくらいしかお金をかけないよ、という意識のあらわれではないか。

 以前、Nvidiaの日本語ブログがおかしいのを見つけたのと同様、 日本語ローカライズは「してもらえるだけマシ」の状況なのだろうか。うーむ・・・。

 和訳をちゃんとやるか、という意味ではSkypeとMicrosoftの話も思い出す。


10月12日(木)

 全盛期のJeff Dean伝説。 面白い。こういう「全盛期ネタ」好き。このひとを知らなかったんだけど、伝説的なプログラマみたいで、 MapReduceやTensorFlowの開発に関わっているらしい。どれも面白いが、これが好き。

Jeff Deanのコードを書く速度は2000年にUSB2.0が出たときに40倍になった。

 10月はわりとスケジュールが破綻しているんだけど、乗り切れるかな・・・。一般公開向けに数独の問題アップデートしたかったんだけど、トークが3つも入って正直それどころじゃない状況。

 CentOS 7にはデフォルトでWebalizer入ってないのか。何を使うのが普通なんだろ。AWStatsも標準リポジトリに入ってないっぽいしなぁ。

 調べ物してて、いわゆる「警察」による初心者叩きを見てしまって気持ちが暗くなった。 いくらその人の理解が甘かったからって「そんな知識を得るにいたった本の名前を教えてください」みたいなことまで言わなくてもいいじゃない。 誰だって最初は初心者なんだし。承認欲求だなんだって人は言うけれど、何か知識を公開するのって、結局はボランティアなんだよ。 少なくとも僕は情報を公開することで得たメリット(有用な情報を提供してもらったとか)とデメリット(嫌な気持ちになる反応を見たとか)を比較すると、デメリットの方が大きいと思ってる。それでも情報を公開するのは、「僕がネットで有用な情報を得ているのは、誰かがそれをボランティアで書いているからだ」という気持ちがあるから。それを「メリット」に加えるのはちょっと違うと思うけど、その気持を足してかろうじてプラスになってるから公開しているわけで、面倒くさくなったら全部消す。 結局その人はブログを継続するのをやめてしまったっぽい。その人は、最初は知識が甘かったかもしれないけど、もし継続して情報を公開し続けていったら、有用な情報の発信者になったかもしれない。いわゆる「警察」はネットに書かれた情報の良し悪しだけを判断しているっぽいけど、全ての情報は人間が書いているという事実を忘れてるんじゃないかなぁ。「自分が得た知識をブログ等で公開しようとする人」をそうやって潰していくことが分野のためになるとは思わない。


10月11日(水)

 SubversionとGitの共存、それぞれにリポジトリを持っていると問題があるな・・・。

 僕のソースコードは全て一本のsvnリポジトリに突っ込んであり、そのdumpをバックアップとしている。 プロジェクトはディレクトリで分けている。しかし、通常の開発にはGitを使いたいため、当該プロジェクトを Gitのプロジェクトとしてgit svnで切り出して、普段はGitで開発をする。

 さて、ローカルとスパコンでソースの同期をしたい。この時、スパコン側でもGitを使いたいのと、両方でgit svnを使うと ややこしくなるから、スパコン側はGitのリポジトリとしてcloneする。そのために、svnとは別にGitのリモートリポジトリも使っている。

 さて、ローカルの修正をリモートに反映させたい。この時、もしかしたらsvn側に変更があるかもしれないので、 git svn rebaseして修正を取り込んでからpushする必要がある。すると、gitのremote側から見ると、既にpushされたものが rebaseされてしまって困る。具体的には、「修正→git push→git svn dcommit」とすると問題が起きる。 「修正→git svn dcommit→git push」の順番なら大丈夫だけど、そうすると、例えばスパコンからGitリポジトリにpush/pullができなくなる。 結局、気にせずにgit push -fするか、Subversionへの取り込みを手でやるか・・・。git push -fしちゃったら、他のサイトで整合性とれなくなって大変だよなぁ。結局この管理方法はダメか。公式にもダメって書いてあるしな・・・。


10月10日(火)

 タスク管理にTodoistを使いはじめ、短期のタスク管理にはそれなりに便利なのだが、中長期のタスク管理がまだうまくいかない。 僕のTodoistの使い方が悪いせいかもしれないけど。

 Todoistは、基本的に「大きなタスクをプロジェクトとして管理、プロジェクトはいくつものタスクからなり、必要があればサブタスクに分割し、タスク/サブタスク単位で空いている日に割り当てていく」というスタイル。これは一日〜一週間単位くらいは良いのだが、もう少し長いスパンの仕事とうまく連携したい。

 例えば今月末締め切りの原稿が二つある。まず、どのあたりでやるかをざっくりと「こっちの原稿はこの週、あっちの原稿はこの週」くらいで決めたい。で、最初はぼやっと割り当てておき、実施が近づいたら「細かくしろ」というアラートが飛んでくるのでそれをタスク分割する、みたいなことをしたい。・・・って書いてて思ったけど、「A原稿タスク分割」というタスクを作って、週頭に割り当てておけばいいのか。

 なんかこうやってタスク管理とかしだすと、意識が高い人みたいではないか。ライフハックっていろんな意味で苦手なんだよな・・・。

 真面目な話、タスク管理をきっちりやりだすと「自分の本当の能力」を直視することになる。とにかく締め切りが近いものから単に片付ける、とかやってると、自分の実力を見なくてすむ。勉強でもそうなんだけど、「実力を直視する」って精神的に結構な負担なんだよね・・・。まぁ、やらなきゃいけないことなんだけどさ。

 「ファイルが消えてしまった。なんとかならないか」と言われてなんとかしようとしたが、どうもおかしい。調べてみるとファイルシステムがext4ではなくxfsだった。さらに調べてみるとCentOS 6まではext4、CentOS 7からxfsに変わったらしい。どおりでextundeleteが動かないわけだ。Wikipediaにも「xfsでは削除されたファイルの復活はほぼ不可能」と書いてありますね。残念ですがどうにもなりません・・・。

 一般公開用の新しい顔ハメパネル作ったぞ。すっげー時間かかった。ポスドクさんに「Is this your duty?」とか聞かれたけど気にしない。

 とりあえず回らない頭で「やる」と決めたタスク用リポジトリを作りまくってるんだけど、これ、できるんかいな。


10月9日(月)

 NOP


10月8日(日)

 自分の「プログラム力」について考え込んでしまった。

 「プログラム力」を「プログラムの知識」「バグのないプログラムを組む力」のことだとするならば若い頃よりは向上している。 しかし「他の人が使うソフトウェアを作り、公開する力」とするならば確実に衰えている。っていうか最近「他の人が使うことが前提のコード」を全く組んでいない。そういう意味ではフリーソフト作家をやっていた学部〜博士課程の学生の頃の方が確実に力があった。

 適当に作り散らかしたコードや知見を適当に公開しているが、これでは力にならない。形にしなければ意味がない。 そのあたりは論文と同じか・・・。うーむ・・・。

 Bit scan reverse (bsr)の話。この命令は、一番MSBに近い立っているビット(Left Most Bit, LMB)の位置を返してくれる。 ただし、ゼロを食わせた時の動作は未定義で、そのときにはZFが立つので、jeかなにかで処理する前提。

 で、入力のうち、LMBだけが立っているビットが欲しい、というニーズがあった。 「Right Most Bitだけが立っているビット」は簡単で「v & (-v)」で良い。 で、LMBの場合、bsrに対応する組み込み関数__builtin_clzを使ってこんな感じにかける。

 実行結果はこんな感じ。

$ ./a.out
00000000000000000100000110100111
00000000000000000100000000000000

00010000110101100011101011110001
00010000000000000000000000000000

01100000101101111010110011011001
01000000000000000000000000000000

00111010101101010000110000101010
00100000000000000000000000000000

01000100001100011011011110000010
01000000000000000000000000000000

 さて、もともとbsrはLMBを「右から」数えた位置を返してくれるのだが、__builtin_clzは「Count Leading Zero」の名の通り、「LMBの左に何個0があるか」を返す関数になっている。なので、内部でbsrを実行した後に31とxorをかけている(__builtin_clzlは63とxor)。 なので、上記ソースのように、bsrで得た数字を31とxorした数字を、さらに31とxorしてからビットシフトする必要がある。 その辺、VCならbsrの値をそのまま返してくれるので良い、ということが光成さんの日記(10/6)にある。その日記にもあるように、31とのxor(日記では63とのxor)については最適化で相殺されてアセンブリには出てこないが、引数のゼロチェックについては、GCCはtest→jeでやっているのに対し、VCだとそのままbsrに食わせてjeとしているのが違いである・・・と。なるほど。

 どうでも良いが、以前もどこかでBit scan reverse見たんだよな・・・。なんかちょっとビット演算しようとすると、わりと目にする関数な気がしてきた。

 自分でSubversionとGitを混在させて開発しているのでごっちゃになってきた。特に、svnのディレクトリの一つを git svnで切り出して管理していると、こいつが元のsvnのどこに対応しているのか(git svn dcommitしたときにどこにコミットされるのか)が わからなくて困った。dcommitの飛び先はgit remote -vvとかでは出てこないが、git svn infoで出てくるのでそこを確認すれば良い・・・と。

 ややこしくなってきたので覚書。

 うーん、どうしたもんかな・・・。「1. submoduleをあきらめ、シンボリックリンクで行く」「2. git svn dcommitをあきらめ、手動でコピー、svn ciする」の二択か・・・。

 なんかgit svn dcommitする前にgit svn rebaseを忘れてたらしく、リポジトリがしっちゃかめっちゃかになってしまった。 最終的にsvn側に手動マージして、git側を新たにgit svn cloneし直した。うーん・・・なんか余計なことでえらく時間を使ってしまっている・・・。

 最終的にこうなった。

 これが最良かはわからん。

 本質的でないソースの整理(というかリポジトリの整理)だけでえっらい時間がかかってしまった。開発はまた火曜日以降か・・・。


10月7日(土)

 NOP


10月6日(金)

 画像をカジュアルにアップロードしつつ、それを参照しながら文章を作りたい。 特に、この曰記に画像付きの解説記事を貼り付けたい。 わりと理想なのはQiita。ここは画像をドラッグ・アンド・ドロップしたり、クリップボードからコピペしたり すると、Amazonにアップロードされてそこへのリンクが作成される。特にクリップボードからコピペできるのが かなり便利。パワポやイラレで適当にイラスト書いて、スクリーンショットをコピペ、とかできる。

 とりあえずGistに画像を載せる方法を試したのだが、実際にpushするまで画像のURLがわからないようで手間がかかる。 具体的には、

  1. gistでmarkdownファイルを作る
  2. ローカルにcloneする
  3. 画像を追加してコミット、push
  4. gistで画像の「Raw」を確認して画像URLを取得
  5. ローカルでそのURLを表示するように修正、コミット、push

などとする必要があって非常に面倒くさい上に、GistをEmbedで貼り付けると画像そのものも表示されてしまう。

 Scrapboxを使うか迷ったが、基本的にローカルに保存したい(10年後も見返すので、その際に画像がなくなってしまっては困る)。 その点、Qiitaにいろいろ書くのも迷ったのだが、Kobitoによりローカルにデータを保存できるし、 exportスクリプトもあるので、問題があったら全部引き上げることにしている。

 さて、どうすべきか。エディタのマクロか何かに機能を登録し、 ショートカットキーを押したら「その時点でクリップボードにある画像が imgに保存され、いまカーソルがある位置に リンクが挿入される」というのが理想の動作。なにでやるかな。mi+Luaでやるか、AtomでJavaScriptでプラグインを作るか・・・。

 なんだか細かいことで忙しい。とにかく「これをやるのだ」とリポジトリを作るところから。

 所謂「う○こもりもり」脆弱性、Gitが有名だがSubversionにもCVSにも存在する。Gitとsvnはすぐに対策されたが、 CVSは、Windows+Cygwin、Mac+Homebrew、CentOS+yumで手に入る全てにおいて脆弱性が残っている。 しかし、物性研スパコンで提供されているCVSについてパッチが適用された。これが「ちゃんと脆弱性が消えたか」確認しないといけない。 というわけで10年ぶり(?)にCVSを触る。脆弱性の本質は-dオプションによるCVSROOT指定に-oProxyCommandが指定できることによる OSコマンドインジェクション。ローカル、リモートでできることはなんでもできる。ただし、Gitと違ってオプション指定しなければ ならないので、脆弱性を突いた攻撃はやりづらいかな。いずれにせよ、ローカルには脆弱性があり、スパコンでは修正されていることを確認。

 Velocity VerletのSIMD化、画像をなんとかするのが面倒になったので、記憶にあるうちに文章化しておく。

 以上を繰り返せば、相互作用するi,j粒子のインデックスが交互に入った配列ができるので、 それをi粒子の番号でソートすればペアリスト完成。

 うーん、テクニカルだ。特にデータの書き戻し。hashとあるように、この数字を使って「右」に寄せるのにvpermdを使ってる。 これをせずに、マスクを一つずつビット解析してif文で登録すると遅い。僕も似たようなことをやって遅かった経験があり、そこで止まったのだが、「右寄せ」と「i,j粒子を交互に一つの配列にまとめる」というのは思いつかなかった。

 っていうか今後SIMD幅増えるとそういうのばっかり要求されるの?キツくない?キツすぎない?


10月5日(木)

 「固体物理」のスタイルファイル作った。そろそろ中身を書いていく。

 Windowsの無線LANの設定がよくわからなかった。大学の無線LANアカウントの有効期限が切れるから更新しろ、 という連絡が来て、なんとか更新した。これは「有効期限を延長する」形ではなく、「別のアカウントを新たに作る(以前のアカウントは失効する)」 という形になっている。しかし、WindowsはこのSSIDのログイン情報を「プロファイル」に保存しており、 アカウントが更新されても「プロファイル」に古い情報が残っているために接続に失敗する。

 で、対処方法は、「スタート」「コントロールパネル」「ネットワークの状態とタスクの表示」「ワイヤレスネットワークの管理」から、 対応する「プロファイル」を削除することなのだが、削除しようとすると「このネットワークを削除しますか?削除すると、新しいプロファイルを作成しない限り、接続することはできません。」という確認ダイアログが出てくる。これ、極めてわかりにくいと思う。

 僕はこの文章を読んで「このプロファイルを削除すると、このSSIDのネットワークを手動で再設定しない限りこのネットワークに接続できない」というように読める。しかし、実際にこの文章の意味するところは「このプロファイルは認証情報のキャッシュであり、削除したらまた認証する必要があるよ」ということである。実際、プロファイル一覧と「現在受信可能なSSID一覧」がごっちゃにされてしまっている。プロファイルを消しても「接続可能なSSID一覧」は表示されたままで、そこに接続しようとすると認証情報が要求される。

 このUI、二つおかしいところがある。まず、キャッシュされたプロファイルに基づいて接続しようとして認証に失敗したら、 プロファイルを削除して再度アクセスした時に出る認証ダイアログを出すべきだと思う。そして、これまでと異なるアカウント+パスワードで 認証に成功したら「プロファイルを更新しますか?」と聞いて、OKを押したらプロファイルを更新すべきだと思う。 ようするブラウザがアカウントとパスワードをキャッシュする仕組みと同じにすべき。

 また、「プロファイル」と「SSID」がごっちゃにされているのも問題。少なくともプロファイルを削除する時に 「このネットワークを削除しますか?」と聞くのはダメでしょ。「このプロファイルを削除しますか?」と聞くべき。 そして、プロファイルを削除してもネットワークには接続できること、しかし認証が要求される場合があることを言うべき。 文案としては「このプロファイルを削除しますか?削除すると、このネットワークに接続する際に再度ユーザー認証が要求される場合があります」 とするべきでしょう。いつもながらMicrosoftはUIの専門家いないのかな、と思う。少なくとも日本語がおかしい。

 今日のセミナーは中川さんで「MDのVerlet ListのSIMD化」。非常にテクニカル。 記憶にあるうちにまとめておきたいが今日は時間切れ。キーワードだけ。

 しかし、こんな曰記(←しつこく日記と書かない)、まだ見ている人がいたとは・・・。 僕の中ではかなり優先度が低いため、気が変わったらいつでも非公開にするし、問題があればざっくり消します。 ここにはその程度のことしか書いていません。


10月4日(水)

 固体物理の原稿書くためにスタイルファイル作ってるのだが、せっかくなので今まで曖昧にしてきた ところを全部ちゃんと理解しようと、TeXマクロを全部LaTeXマクロに書き直したりしている。 その中で、いままで謎だった「\relax」命令について、良い文献を見つけた。
\relax の使い方 12連発

 おおー、わかりやすい。TeX/LaTeXは基本的に「文字列置換マクロ」の固まりなので、意図せぬ誤作動が起こりやすい。 なのでこういう「何もしない命令」が必要になるケースが多いのか・・・。

 調べ物してて「Texの質問です」という質問に対して「Texというものは知りませんが、もしかしてTeXのことでしょうか」的な回答がついててゲンナリする。冗談のつもりなのかも知れないが笑えない。こういうマウンティングは見ていて大変気持が悪い。


10月4日(水)

 APSから来たメール冒頭の「Dear Dr. [Last Name],」の残念感。

 一般公開用の顔ハメパネル、迷っていたのだが、やっぱり作ることにした。 こういう時のために前回記録を残しておいた。 購入したのはのり付きスチレンボードで、 型番は「のりパネ5mm厚A0 BP-5NP-A0」らしい。

 2014年。

 2015年。

 2016年は使いまわした。

 地面に置くやつは今年はやめよう。一般公開は、個人でできる範囲でいろいろ頑張っている。最初は「解くと絵が浮かび上がる迷路」を作った。 次は「Flashで物性研クイズ」を作った。顔ハメパネルも作った。数独も配った。プレスリリースの話もしたし、脱出ゲームも作った。 どれもイマイチだったな。次はどうするか・・・。


10月3日(火)

 あるローカル変数を、毎回計算してほしくなくてstatic constをつけた。 で、その後やっぱり引数に依存してほしくなって修正した。こんなイメージ。

void func(int a){
  static const b = a;
}

 で、これは最初の代入しか実行されないので、意図しないコードになってバグる。 それに気がつくのにしばらくかかった。これ、警告出してくれないかなぁ・・・。

 サーバのセットアップ。CentOS7になっていろいろ変わっていた。一番変わっていたのが ネットワーク。nmcliコマンドとか知らないよ・・・と思ってたらnmtuiというのTUIクライアントがあり、それで ネットワークを起動することができた。

 まず何からいれるべきか・・・。とりあえず全部アップデートするか。以下、作業記録。

$ sudo yum update
$ sudo hostnamectl set-hostname apollon # ホスト名変更
$ sudo yum -y install zsh
$ chsh -s /bin/zsh # zshに変更。

 本命。Apache+WebDAV。

$ sudo yum install httpd-devel
$ sudo yum -y install mod_ssl
$ sudo yum -y install mod_dav_svn

 /etc/httpd/conf.d/userdir.confを修正。

+     UserDir enable
+     UserDir public_html
- OptionsのIndexes

 ポートを開ける。

$ sudo firewall-cmd --zone=public --add-service=http --permanent 
$ sudo firewall-cmd --reload 

 このあと、httpdを再起動したがpermission deniedで見えない。これは SELinuxが禁止しているから。SELinuxによるものかどうかは/var/log/httpd/error_logではなく、 /var/log/audit/audit.logを見ればよい。

 で、いろいろ試したのだが、SELinux管理下でいろいろやるのは厳しすぎる。あまりよくないが無効にしよう。 /etc/selinux/configでSELINUX=disabledにする。

 ネットワークがデフォルトで起動しない件、及び固定IPその他を振る件はnmtuiでできた。

 httpdの自動起動。

$ sudo systemctl enable httpd.service

 っていうかなんだよsystemctlって。僕の知識は/etc/init.d/httpd restartあたりで止まってるよ。

 WebDAV。/etc/httpd/conf.dにwebdav.confを作る。

<Location /path/to/url>
  AuthUserFile /path/to/.htpasswd
  AuthName "Basic Auth"
  AuthType Basic
  DAV svn
  Require valid-user
  SVNPath /path/to/repository
</Location>
$ sudo htpasswd -c -b -i ./.htpasswd username
パスワード入力して^D

 最近のBASIC認証はcryptではなくてbcryptというのを使うんですか・・・。

 Xも入れておく。デスクトップ環境はいいや。Rubyや日本語フォント(IPA)も入れよう。

$ sudo yum -y groupinstall "X Window System"
$ yum install -y ipa-gothic-fonts ipa-mincho-fonts ipa-pgothic-fonts ipa-pmincho-fonts
$ yum install -y ruby

 自分が個人的に使っている論文管理CGIがperlで書かれている!。Rubyで書き直したかと思ってた。 Jcodeが無いとか言うのでいれる。CPANから。

$ sudo yum install -y perl-CPAN
$ sudo perl -MCPAN -e shell # しばらく適当にyes
cpan[1]> install Jcode
cpan[2]> install XML::DOM

 CGIが動かない。「End of script output before headers: hoge.cgi」とか言われてる →結局パーミッションの問題。755にしたらうまくいった。

 WebDAV+svn連携が上手く行ったところでおしまい。やれやれ、一日仕事だな・・・。

 このサーバの設定したのっていつだっけ?2011年とか?まぁ6年もたてばもう設定コマンドからしてだいぶ変わっても仕方ないのか・・・。 そういうのってあんまり変わらないと思ってたけど・・・。


10月2日(月)

 サーバの再インストールとか。


10月1日(日)

  NOP


トップページへ戻る