2022年12月

ログ一覧

12月31日(土)

もう今年も終わりか。いつもやってないけど、せっかく日記っぽいことを書いてるし、一年の振り返りをしてみようかな。

うーん、わりと非生産的だなぁ。なんか「やるべきこと」に押しまくられて、「やりたいこと」ができていない。毎年のように新講義を担当しているのが厳しい。解析力学が落ち着いたら、さすがに講義関連は落ち着くだろうか。これ以上新講義はちょっと厳しいので、5年くらいはこのままで行きたいぞ。

12月30日(金)

解析力学の講義ノート書いてた。

12月29日(木)

朝は掃除。

年賀状書いた。

査読を終わらせた。

Speakerdeck Most Viewed Decksに僕のスライドがランクインしたらしい。しかし、22個のスライドのうち、21個が日本語。そういうもんなの?後、去年のランキングに入ってる奴が結構あるけど、いいのかしら?

現時点での卒論を全てチェックした。

12月28日(水)

卒論・修論の管理に悩んでたんだけど、git submoduleを使えばいいのか。普通にディレクトリで管理してると、それぞれgit pullしないといけなくて面倒だったけど、一つのリポジトリにまとめてsubmoduleで管理したら、全部一括でpullとかできる。

全部submoduleにして、一番上にmakefileおいて

all: pull_all
                        
                        pull_all:
                                git submodule foreach git pull

と書いた。make一発で全部pullできてかなり快適になった。

まずは修論チェック終わった。次は卒論だ。

あと査読もあるんだよなぁ……

大掃除。

12月27日(火)

年内最後の講義。

卒論チェック。

学生さんのMacでscpする時にワイルドカードが使えない問題、原因がわかった。ZshのGlobbingが問題。もしコマンドラインに何にもマッチしないglobbing expressionが含まれていた場合、Zshはデフォルトでエラーを出す。しかし、scpなどでリモートにファイルがある場合は、実際にはファイルがあるのにマッチしないと判断されてしまう。いろいろ細かい制御ができるっぽいが、とりあえずマッチしなかった時にエラーをださないように

setopt nonomatch

を設定すればOK。scpでのワイルドカードの他、GitのHEAD^などにも影響が出るようだ。

しかしこのglob、英単語だと思ってたら、もともとUNIXの/etc/globというコマンド由来で、このコマンド名はglobalの略だとのこと。初期のUNIXのシェルはワイルドカード展開を/etc/globに依存しており、そのために*?といったワイルドカードをglobsglobbingと呼ぶようになったらしい。昔「glob」ってなんだろうと思ってLDOCEで調べたら存在していたので、その単語由来だと思ってた。そちらの方のglobは、なんか液体か泥の塊のことらしい。「a glob of ketchup(ケチャップ一山)」みたいに使う。

12月26日(月)

1on1とか。

明日の講義の補足説明のためにProject Eulerの31番「イギリスのコイン問題」をメモ化再帰と表を使う方法両方で解いた。一応すぐ解けて安心した。解説スライドも作っておく。

卒論修論チェック開始。

MHSの質問に回答。なんか、大学かなにかの課題をそのままこちらに投げている気がしてきた。一応解説するけど、僕が返事するのはここまでだよ、そもそも僕は専門家じゃないしね、と回答。

12月25日(日)

残りのレポート採点した。疲れた。

「量子力学を学ぶための解析力学入門」を読んでいるが、面白いしわかりやすい。

物性研のお仕事、終わらせた。

数理物理のシラバス確定した。

12月24日(土)

課題研究発表会。部屋の机の配置の指示や、部屋でご飯を食べて良いかなどを確認していなかった。

Kerasのmodel.predictの出力を消すには、引数にverbose=0を指定すれば良い。

コードをいじって34.6sを598 msに高速化した。俺まだいけるやん?

レポート採点。30人分で力尽きた。

12月23日(金)

解析力学から量子力学への接続の解説のために「量子力学を学ぶための解析力学入門」を購入。序文に「東大大学院学生の宮下清二君は、学生の立場から原稿を通読して……」と書いてあり、歴史を感じた(僕の指導教員である伊藤先生は鈴木研出身だが、その鈴木研の大先輩にあたるのが宮下先生)。

Ubuntu(WSL)にTimes New Romanをインストール。

sudo apt -y install ttf-mscorefonts-installer
                        rm -rf ~/.cache/matplotlib

フォントをインストールしてもmatplotlibのキャッシュを消さないと見つけられないままになる。

「理工学ITCワークステーション室利用調査」を出したかどうか忘れたのでもう一度提出した。

修士論文発表会&中間発表会のプログラム作った。

TODOをだいぶつぶしたが、数ヶ月ずっとタスクリストに入ったままの奴、どうしよう?

12月22日(木)

学習指導のお仕事で、Google Spreadsheetで「渡辺 宙志」みたいなのを「渡辺研」に置換してた。これをポチポチやるのがとても面倒だったのでもしかしてと思ったら、Google Spreadsheetの検索と置換、正規表現に対応してた。

指導教員の名前(空白で姓名が別れているとして)を選択して

で一括でいける。エクセルはデフォルトでは対応しておらず、アドインを入れる必要があるっぽい。

年内最後の研究室ミーティング。M2の進捗報告。皆さん良い結果が出ていますね。

学習指導のお仕事たくさんした。

12月21日(水)

会議と打ち合わせ。

Minimal hitting setsのリストアップアルゴリズムについて質問が来た。これを見て質問してきたらしい。

質問内容は

e ={{1,2}{2,3,7},{3,4,5},{4,6},{6,7,8},{7}}

についてのhitting setsを求めよ、という問題について、詳しくアルゴリズムの説明をしてほしいというもの。せっかくなので回答をこっちにも残しておこう。


                        Let me summarize the notation first.
                        
                        HS: hitting set
                        MHS: minimal hitting set
                        
                        Consider the bit representation of the inputs as follows.
                        
                        00000011 e1 = {1,2}
                        01000110 e2 = {2,3,7}
                        00011100 e3 = {3,4,5}
                        00101000 e4 = {4,6}
                        11100000 e5 = {6,7,8}
                        01000000 e7 = {7}
                        
                        Consider a subset k-set containing up to ek.
                        For example, 1-set = {e1}, 2-set = {e1, e2}, and so on.
                        
                        We define k-HS and k-MHS as follows.
                        
                        k-HS: HS for k-set
                        k-MHS: MHS for kset.
                        
                        Our goal is to enumerate 7-MHS. The key idea is to construct k-MHS from (k-1)-MHS.
                        
                        The 1-MHS is easy. The following two bit strings are 1-MHS.
                        
                        h1 = 00000001
                        h2 = 00000010
                        
                        We recursively construct the 2-MHS from here.
                        Suppose we take h1. h1 is not 2-MHS. So we add a bit to it.
                        
                        h1' = 00000011
                        
                        h1' is HS of 2-set, but it is not 2-MHS because it is still a hitting set, even if we remove a bit from it. We, therefore, reject h1'.
                        
                        Next, we consider h2. This is 2-MHS because we cannot remove any bits from it. So we adopt h2, and continue to find 3-MHS from it.
                        
                        The algorithm to enumerate MHS is as follows.
                        
                        1. Enumerate 1-MHS (it is easy).
                        2. For each element of k-MHS, check whether it is (k+1)-MHS.
                        3. If t is (k+1)-MHS, then we continue to search recursively.
                        4. If t is not (k+1)-MHS, then we add a bit (t->t') so that t' becomes k-HS. Then check whether t' is (k+1)-MHS. If t' is not (k+1)-MHS, then we reject it. If t' is (k+1)-MHS, we continue searching recursively.
                        5. k -> k +1 and goto 2.
                        
                        It takes some ingenuity to determine whether a given bit string is k-MHS.
                        
                        The function check_minimal in mhs.cpp is a naive implementation. But check_minimal2 is a more efficient one adopting the idea of critical hyperedge. But it is not essential.
                        
                        I hope the above explanation helps you.

うげ、数理物理ってクォーター(月4金4)か。

量子力学を学ぶための解析力学入門 増補第2版 (KS物理専門書)を注文した。やはり最後は量子力学につなげようと思って。

数理物理のシラバスはもうちょっと考える。

修士論文発表会のプログラム。参加メンバーの最終チェック。よし、完全に把握した。明日にはプログラムを作れるはず。

明日の午前中も会議か。

12月20日(火)

講義。今日は動的計画法。メモ化のイメージが湧かないという質問があったので、来週の補足向けにフィボナッチかなにかでメモ化の概念図書いておくかな。

柔道部の振込。これ、ウェブからできるようにしようと思いつつ、まだやってないので毎回日吉まで行っている。

急に木曜日になんか話すことになって、そのスライドを作った。

修士論文発表会のプログラム作成。いろいろ手間取ってものすごく時間がかかった。うーむ。

海外から修士に来たいという連絡。もう院試(留学生向けも含む)が終わっているので来年度は無理だという連絡。前もそういう連絡が来たんだけど、その国の来年度の大学院を探す時期と、日本の院試の時期が合ってないのかしら。

12月19日(月)

なんかすごく忙しかった気がするが、何をしてたか思い出せない。目が覚めてスマホを見たら、Todoistが「おはようございます、Hiroshiさん!今日は9件のタスクが予定されています。頑張っていきましょう💪」みたいな表示をしてきて、煽られてるのか?と思ったのは覚えている。

Todoistのカルマ、今はマスターで、次はグランドマスターらしい。

解析力学の講義ノートを少し書いた。

12月18日(日)

講義の準備をして、講義まで2時間ほどある。眠いのでちょっと仮眠するか……目が覚めたら講義終了時間、という夢を見た。講義準備ができていないことによる焦りですね。がんばって準備しないと。

突然VSCodeが英語版になった。拡張機能で「Japanese Language Pack for Visual Studio Code」をアンインストールし、もう一度「install locally」を選べば復活する。

12月17日(土)

レポート採点した。

12月16日(金)

スマホのアラームで目を覚まし、Todoistの「おはようございます。今日は9つのタスクが予定されています」の表示をみてげんなりする。

午前中は打ち合わせ。

細かいTODOを潰していく。サーバ室のハブにテプラ貼ったりとか。

プログラミング基礎同演習のスライド、一部表示がおかしくなっていたのを修正。ついでにSpeaker Deckのコレクションにまとめた。

打ち合わせ。

久しぶりにRe:VIEWで製本する環境を構築。まずredcarpetがないな。Gemfileにredcarpetを追加。

source 'https://rubygems.org'
                        
                        gem 'redcarpet'
                        gem 'rake'
                        gem 'review', '2.5.0'
bundle config path vendor/bundle
                        bundle install

これでいけるはず?

だめだ。redcarpetはrequireできるが、redcarpet/render/reviewがrequireできない。

諦めてsudo gemでやる。

sudo gem install redcarpet

まだうまくいかない。redcarpetのRe:VIEW対応が消えてて、HTMLとXHTMLしかなくなってるっぽい。

md2review でなんとかする。

sudo gem install md2review

後は一週間でなれる!スパコンプログラマのファイルをコピペしてなんとかした。

そうだ、思い出した。「一週間でなれる!スパコンプログラマ」はmd2reviewで行けたんだけど、「ゼロから学ぶPython」で同じことをしようとしたら数式がうまく変換できず、それでredcarpetでなんとかしたんだった。

筑波大学学園祭 Web サイト構築の舞台裏

「なにこれ?技術力たっか!」と思ったが、著者を見て納得した。

筑波大の授業DBを自作して大学公認にした人ですね。っていうか学部2年生でしたか。なんかもっと昔から活躍していたような。

これだ。

強力なグラフィック機能を備えた組版処理システムTwight

当時高校生だったのか……

12月15日(木)

新しい免許を取りにいった。

年末調整を忘れたの、まだ凹んでる。

RustでOSを書いた

すごい。

っていうか、CPUを自作したり、OSを自作したりと、低レイヤの実力者がゴロゴロいるんだけど、彼らはいったいどの分野で、どの会社で活躍する/してるんだろうか?

「Windowsシェルエクスペリエンス」という白いウィンドウが出てるのだが、よくわからない。

分子シミュレーション学会の年会費払った。

研究室ミーティング。課題研究発表会の準備。

修論題目承認した。

配属された学生さんに連絡した。

12月14日(水)

会議。

学生さんの論文を投稿。どんどん行きたい。

会議。

「awaitはasynchronously waitの略か?」面白い。

C#のissueで聞いてみたスレッド→Question: Why was await named await instead of wait? Is it really async + wait?

しまった、年末調整の手続きを忘れてた。自分で確定申告しないといけない。凹む・・・

e-Taxを使う場合は生命保険料控除とかの添付省略ができるようだな。

提出書類にミスがあったので修正。いろいろダメだ。

「2023年度ワークステーション室及び授業用リモート環境利用調査」提出した。

「ゼロから学ぶPythonプログラミング」のKindle版を自分で買って、git logと差分を目grepして修正点をリストアップした。

うーん、出版社とリポジトリを共有したいが・・・

12月13日(火)

学生さんと対面1on1。

講義。中小構文木とバイトコード。スライドを修正しなくては。また、課題もちょっと修正が必要。

学生さんと対面1on1。

自分の本を確認するため、Kindle for Macをダウンロード。いや、Kindleの最新版と手元のGitHubのがどう違うかわからなくなったので。自分の本を自分で買うのってアホだけど・・・

っていうかKindle版、コードが検索にかからないし、コピペもできないんだなぁ。

12月12日(月)

午前中は打ち合わせ。昔お世話になった方々に何年かぶりにお会いする。お久しぶりです。

昼に関連する打ち合わせ。

午後は学生さんと打ち合わせ*3。

19時から(!)会議。

家に帰ってから論文のCover Letterを書いて、Suggested Refereesも探した。

あと、メールの返事もたくさんかいた。しかし、まだ仕事を積み残している。

小学校の同級生から同窓会のお誘いメールが。卒業してから同窓会は一度だけあったが、その時には会えなかったので、34年ぶりとか?ものすごくお久しぶりです。ちょうど用事があって同窓会には行けないのが残念。

そういえば柏のオープンキャンパスで偶然小学校の同級生に会ったこともあった。30年ぶりに会ってちゃんとわかった俺すごい。

12月11日(日)

レポートの残りを採点して、返事をアップロードした。今回なんか質問が多かったな。

そういえばなんで僕はCMakeが嫌いになったんだろう?なにかですごい苦労した気がするんだよな。

昨日のLLVMの続き。sudo make installだけした。

$ clang-format --version
                        clang-format version 16.0.0 (https://github.com/llvm/llvm-project.git ba5edfd386fcbb6bd06fe7fe499ca4d5949f1d6b)

よし、入ったぞ、と。

12月10日(土)

研究室サーバにclang-formatが欲しかったのでllvmを入れ、ようとしたがcmakeが古すぎた。

$ cmake --version
                        cmake version 2.8.12.2
sudo yum remove cmake 
                        cd build
                        wget https://cmake.org/files/v3.25/cmake-3.25.1.tar.gz
                        tar xvzf cmake-3.25.1.tar.gz
                        cd cmake-3.25.1
                        ./bootstrap
                        make
                        sudo make install
$ cmake --version
                        cmake version 3.25.1
                        
                        CMake suite maintained and supported by Kitware (kitware.com/cmake).

入ったぞ、と。

cd build
                        git clone --depth=1 https://github.com/llvm/llvm-project.git
                        cd llvm-project
                        mkdir build
                        cd build
                        cmake -DLLVM_ENABLE_PROJECTS=clang -DCMAKE_BUILD_TYPE=Release -G "Unix Makefiles" ../llvm
                        make
                        sudo make install

ってやってたら「sshfsでいいのでは?」と言われた。確かにそっちの方が楽だわ。手元のWSLにsshfsを入れる。

sudo apt install sshfs

デフォルトではVSCodeから開けないので、/etc/fuse.confuser_allow_otherを有効にしてから、

sshfs username@remote.server:/path/to/dir ~/path/to/mountpoint -o allow_other

としてマウント。あとはローカルのVSCodeで開ける。これは楽だ。

プログラミング基礎同演習のレポート、8割採点して時間切れ。明日に持ち越し。

講義ノートがちっとも進んでない。

12月09日(金)

Macにpdf2psを入れる。

brew install poppler 

pdftopsしか入らない。うーん。WSLで対応した。

学生さんの論文、最終チェックしてarxivに出した。そのうち載るはず。自分の論文もなんとかしなければ。

Wordpressにコメントスパムが。そもそも禁止してなかったのか。慌てて禁止する。

12月08日(木)

事情により在宅勤務。1on1ミーティングたくさん。研究室ミーティング。

ChatGPTが話題。正直にいって、もはやかなりの人間の理解力を超えている。少なくともウェブで見る限り、文章の読解力がChatGPTのレベルに達していない人がかなり多い。シンギュラリティはいつか突然くるのではなく、徐々に、静かに実現している。

星新一のショートショートで、人間の代わりにロボットが仕事をするが、そのロボットの成績は結局人間のチューニングに依存するため、「うまくロボットを訓練できる人が成功者となる」という未来が描かれた。また、確かアシモフだったと思うが、睡眠学習が非常に発達し、高額なソフトウェアを購入できる人が良い仕事につく未来と思いきや、その睡眠学習ソフトウェアを開発できるごく一部の人材が世の中を動かしていた、という小説もあった。

ChatGPTでも、DeepLでも、AIが出力してきた文章の真偽や良し悪しを区別できるだけの知識を持つ人間だけが、それらのツールを有効活用できる。正直、自分の専門外の分野についてChatGPTが出力してきた文章の真偽判定をできる自信がない。AIは、「AI未満の人間」と「AI以上の人間」を選別する。そしてそのハードルは年々上がっていく。

12月07日(水)

在宅勤務。会議とか。

$ python3 -m pip install tensorflow
                        ERROR: Cannot uninstall 'PyYAML'. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.

ん?

$ python3 -m pip uninstall pyyaml
                        Found existing installation: PyYAML 3.13
                        ERROR: Cannot uninstall 'PyYAML'. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.

調べたら、これはcondaのせいだった。

conda uninstall pyyaml

12月06日(火)

K-LMSのダッシュボード、担当する講義一覧が並ぶのだが、正式名称が長い講義、例えば「[他]松本 佳宣 基礎理工学特別研究第1(物理情報)」が、「[他]松本 佳宣 基礎理工学…」になってしまう。すると、「[他]松本 佳宣 基礎理工学課題研究(物理情報)」も「[他]松本 佳宣 基礎理工学…」になってしまい、区別がつかずに困っていた。しかし今日、「ニックネーム」という機能があることを知り、それぞれ「特別研究第1」「課題研究」と名付けて見やすくなった。他の講義もGitHub演習、プロ同基礎と名付けた。

プログラミング基礎同演習。今日はNumPyとSciPyについて説明するフリをして、線形代数の話。

自動作曲ツールmusikaを試してみた。簡単に曲ができる。

コマンドラインかローカルのWebサーバでの利用が前提となっており、Google Colabで試すにはインタフェースがやや面倒だな。ForkしてUI作ってPR出すかな?

12月05日(月)

1on1ミーティング。

英文校閲の請求書出した。

セミナー。

Non-reciprocal phase transitions

面白かった。Vicsekモデルを二成分に拡張子、相互作用を非対称に入れると、追いかけっこをするカイラル相が現れる。なるほど。力がポテンシャルで書けないことが本質となる相転移。2温度モデルとの関係を知りたい。

解析力学の講義ノートを書き始めた。来年に間に合うか微妙。急がないと。

12月04日(日)

昨日の疲れが残っている。プログラミング基礎同演習のレポート採点終わらせてコメントを返した。

12月03日(土)

学科分け説明会。急遽、京コンピュータのCPUを展示することにした。後はナンプレの話や、講義でゲームを作る話、AIの限界の話などをずっとしていた。朝からずっと立ちっぱなし喋りっぱなしで疲れた。

家に帰ってすぐに要旨のチェック。プログラミング基礎同演習のレポートの採点。1/3しか終わらなかった・・・。

MMDは日本の3DCGを破壊してしまった(2022年度版)

言葉は強いし、直接やり玉に挙げられた人は嫌な思いをしたであろう。しかし、ここに書いてあるような「いま自分が持っているスキル、ツールに固執し、業界の進化に乗り遅れる」という状況は様々なところで見かけるし、僕自身も心当たりがある。未だにCMakeが使えずGNU makeを使っているし、C++も11(の一部)までに留まっている。最新の技術にキャッチアップできていない人がずっとプログラミングの講義をするのはあまり良くない。特に進展の早いプログラミング界隈は老害化も早いので、なるべく早く若い人に講義をバトンタッチしたい。

いや、もちろん自分自身のスキルもアップデートしていきたいけれども……

12月02日(金)

引き続き体が重い。

日本、スペインに勝ったのか。信じられない。何人かの学生さんが見てたそうで、眠そうだった。

っていうか、前回大会でも決勝トーナメント出てたんだっけ。調べてみた

わりとグループリーグ突破してた。

課題研究発表会の要旨チェック。

学生さんの論文再投稿した。arXivのreplaceもした。

このlogを見ている人がわりといる模様。読者なんて全然いないと思ってたよ。

明日の学科分け説明会の準備。ナンプレの印刷とか。

12月01日(木)

体が激烈に重い。ベッドからなかなか起きられない。複数の全く異なるタスクをsimultaneousにこなしているので頭への負担が大きい。

研究室ミーティング。

物性研スパコンの申請をした。