Archive for the ‘日記’ Category

年明け初の火曜日授業

火曜日, 1月 16th, 2018

数日前には最高気温10度?まで下がってたかと思いきや、昨日今日と暖かくなってきて冷え込み一転、20度超えなんてニュールになるぐらいの温かい一日。今はまだちらほら花咲かせてるぐらいですが、暫く20度超えが続くっぽいので、週末ぐらいには桜もそこそこ見頃になるぐらいまで開花するのかもね。

授業自体はだいぶ前から始まってますが、先週火曜日が月曜日振替だったため、火曜日の授業自体は今日が初です。

プログラミング2は、今日でJava編終了。今日やったのは課題レポートを通した復習&リファクタリングのデモと、プログラミング作法な話をしたぐらい。あ、おまけの話として他授業との繋がりも紹介したか。授業的にはシステム設計あたりの話はほぼ省いてるし。残り2週間は、C言語入門です。

データマイニング班(実験4)は、進捗確認した後は現時点でのリポジトリチェック。開発途中だとファイルが散らばってたり、ドキュメントも少なくてどれが何のためのファイルなのか分かりづらかったり、あちこちにパラメータが直書きされててどこで何を設定したら良いのか分かりづらかったりといった「よくある光景」を探し出して、コメント付けてました。コードレビューの一種ですね。

年明けゼミ始め=追い込み時期の始まり

木曜日, 1月 11th, 2018

卒論・修論の〆切が迫ってきたこともあり、多くの学生が残り時間の少なさに戸惑い始めてる時期ですかね。前もって去年末時点でスケジュール目安を例示してたんですが、ピンときてない人もいたのか「2月上旬に一度発表があり、発表資料作成&発表練習に1週間かけるならもう2週間強ぐらいしか実験する時間はない」という話をしてみました。こちらとしては指導以上のことはできないので、頑張ってください。

とか書きつつ、私自身も学生の頃は甘く見てるというか計画的には動けていなかったんだよな。というのも分かってるので、ちゃんとやってる学生ならそれなりに付き合う気持ちはあります。

私の場合は、授業の課題とかで予想以上に遅れて徹夜したとかはないんですが、研究室入ってからは2回徹夜しました。

1回目は初めての国際会議で、私の代わりに遠藤先生が発表しに行くというタイミングで、「明日飛行機乗るんだけどまだ結果が出てない」という恐ろしい状態。一緒に徹夜デバッグして貰いながら、ようやくプログラムが動いたんだよな(ありがとうございました)。。

2回目は博士論文〆切の時で、博士3年目は丸々1年間留学してて諸々の〆切について事務から連絡貰えず。論文〆切決まったら教えてください〜と伝えてたものの「来週〆切だけどどうなってる?」というギリギリのタイミングで催促が届いて。日中は留学先のタスクして、夜は博論書くというのを1週間近く続けました。あれはもう二度とやりたくないです(遠い目)。

あれこれ準備

水曜日, 1月 10th, 2018

今週末は、金曜日に情報処理学会全国大会の予稿〆切があってその添削中です。(添削コメント送ったので)頑張ってください。

土日はセンター試験で、全国的にピリピリするイベントですね。受験会場側も朝から晩まで缶詰になるということで今のうちに晩御飯作り置きしないと。冷えてきてるし具沢山豚汁作るつもりでスーパー行ったら大根1本しかなくて、しかも高い。いや高いのはまだ良いんだけど、一人暮らしだと作り置きするにしても1本は多いのだよ。ということで見送って肉じゃがに変更しつつ、温めるだけのおでんもゲット。後は外から温めるグッズを見繕って帰宅。

今週末を乗り切ろう〜。

冬らしくなってきた沖縄

火曜日, 1月 9th, 2018

昨日は冬にしては暑かった気がしますが、日が変わり、北風強風でがらりと肌寒い日になりました。今週いっぱいぐらいは冷える見込みらしい。個人的には気温的に寒い分にはどちらかというと好きで、雪積もって欲しい人です。学生の頃、留学先が真冬にはマイナス20度下回る場所でしたがとても楽しかった。そのぐらい寒さそのものには耐性があります。(単に着膨れしてるって話かもしれないが)

これに対して沖縄の「冬らしい日」というのは、気温的には大したことないけども、風が強いのが嫌い。余り理由らしい理由はなかったんだけど、徒歩生活してるここ最近だと「(風強いと)雨天時に傘さしても役に立たない」のが理由になりつつあります。強風+雨だと外出したくないレベルで嫌い。

冷え込んだおかげで桜が開花し始め(といっても数十本で数蕾程度)て、それを眺めて歩くのは楽しんですけどね。風がなければ、晴天ならもっと楽しめます。

久しぶりに卒業生の来訪

金曜日, 1月 5th, 2018

2014年度修了生の玉城さんが、少し落ち着いたということでわざわざ挨拶に来てくれました。いくつかのルートで心配になる話を聞いてたのですが、やりたいことやって楽しんでるようで良かった。

折角来てもらったということで学生研究室(712室)に移動してだべってたんですが、業界話面白い。下手な説明会聞くより生々しい話聞けるので、先輩来たらあれこれ聞いてみると良いですね。今回はslack経由で研究室連絡もやってくれれたんですがいたのは一人。ま、タイミングもあるだろうしな。

全く別の話ですが、進路指導や研究相談でも耳にするように機械学習と自然言語処理と、具体的なタスクを効果的に回していく環境構築&運営保守あたりの人材が圧倒的に足りてないらしい。少なくとももう暫く(数年?)は需要が高止まりし続けそうな雰囲気らしい。一方で具体的なタスクに落とし込みきれてない、ふんわりしたニーズのまま動いてるところも少なくないらしく、見極めないと後で無く羽目になりそうな気もしますね。

P.S.
Twitter経由で情報工学科(知能情報コース)に関する質問見かけたので答えたけど、「あるある」だったのでどこかに回答書いてたつもりが見つけられず、直接回答する形で対応することに。後でブログに書いとくか。

(データ解析コンペ2017) 中間発表時点では見通し良さそう?

月曜日, 12月 25th, 2017

10月から始まってるデータ解析コンペの、中間発表が先週終わりました。機械の宮田研中心に発表してきてくれたのですが、他チームと比べると質疑時に聴者からの反応が強かったらしく、最終発表に進める可能性は高いんじゃないかとのこと。実際どうなるかは分からないけど、残り2ヶ月弱で最後の仕上げですね。

体調がよろしくない一日

日曜日, 12月 24th, 2017

例によって(?)、全身気だるい+軽い筋肉痛(10段階中2ぐらい?)に加えて、頭痛もそこそこあったので一日ゆっくりしてました。昼寝合わせて10時間ぐらい寝たか? それなりに回復して明日から普通に仕事やれそうだけど、だらだら旅行で気分転換したいのぅ。

バックアップは cron + rsync にお任せ! #ieAdventCalendar2017

土曜日, 12月 23rd, 2017

自由気ままにアドベントカレンダーその2(続いた)。卒業生含めて書きたい人は書くと良いよ! 今回のキーワードは「バックアップは cron + rsyncさんにお任せ!」と書いてますが、本題はrsyncです。cronはググってみよう(酷い)。

MacはOS Xになってからだったか、Time Machine付くことでかなりユーザフレンドリーなバックアップ環境が整いましたね。一方、Linux系OSではどうしたら良いでしょう。VMならそのイメージファイル全体を定期的に複製するみたいなやり方もあるかもしれませんが、ここではファイル単位でのバックアップを考えてみます。


1. cpの限界

ファイルのバックアップを取る場合、真っ先に思いつくのはcp, scpによるファイル複製でしょうか。試しにやってみましょう。

今、以下のようなディレクトリ構成になっているとします。
バックアップ対象を「home」としています。この下にroot, tnalがあり、各々hoge.txtというファイルだけがあります。ls -lから分かるように、rootディレクトリ以下は root:wheel というowner:group にしてあります。

oct:tnal% find .
.
./home
./home/root
./home/root/hoge.txt
./home/tnal
./home/tnal/hoge.txt
./mnt
./mnt/other-media
oct:tnal% ls -l home/
total 0
drwxr-xr-x  3 root  wheel  102 12 23 09:33 root/
drwxr-xr-x  3 tnal  staff  102 12 23 09:33 tnal/

home全体を、「mnt/other-media」以下に cp で複製してみましょう。

# case 1-1: cp -r で指定したディレクトリ以下を再帰的にコピーしてみる。
oct:tnal% cp -r home/ mnt/other-media/home/
oct:tnal% ls -l mnt/other-media/home/
total 0
drwxr-xr-x  3 tnal  staff  102 12 23 09:43 root/
drwxr-xr-x  3 tnal  staff  102 12 23 09:43 tnal/

# case 1-2: もう一度同じコマンドを実行してみる。
oct:tnal% cp -r home/ mnt/other-media/home/
overwrite mnt/other-media/home/root/hoge.txt? (y/n [n]) 
not overwritten
overwrite mnt/other-media/home/tnal/hoge.txt? (y/n [n]) 
not overwritten

case1-1では、-r オプションを付けることでディレクトリ全体を複製しています。一方で、このコマンドを実行したユーザは tnal のため、rootディレクトリのowerやgroupが変わってしまいました。また、タイムスタンプも違います。owner等が変わってしまうのは当然困りますね。また、mnt以下の方が新しい日付になってしまっていますが、これも嬉しくありません。例えば、バックアップ先からファイル復元しようしても「どれが更新済みか」をタイムスタンプでは判断できないため、ファイル復元しようとする都度、全体を上書きする必要があります。個人PCぐらいならそれでも良いかもしれませんが、1研究室なり複数人で利用している環境だとこのコストは馬鹿になりません。

case1-2では、1週間後とか適当な期間が過ぎ、改めてバックアップを取りたいという状況で同じコマンドを実行した状態を想定して、同じコマンドを実行した様子を示しています。今回の例では、home 以下は全く変更していない状態のため改めてバックアップする必要はないという状況です。しかし、同じコマンドを実行すると複製先に既にファイルが存在しているために、ユーザ自身に上書きするかどうかの判断を委ねられています。全てyes回答させるオプションもありますが、更新していないにも関わらず上書きするのは無駄が大きすぎます。

ということで、もうひと工夫してみた例が以下です。ここではsudoを使い、cpコマンドに-aオプションを付けてみました。

# case 2-1: sudo 付きで cp -a オプション実行してみる。
oct:tnal% sudo cp -a home/ mnt/other-media/home/
oct:tnal% ls -l mnt/other-media/home/
total 0
drwxr-xr-x  3 root  wheel  102 12 23 09:33 root/
drwxr-xr-x  3 tnal  staff  102 12 23 10:01 tnal/

# case 2-2: もう一度同じコマンドを実行してみる。
oct:tnal% sudo cp -a home/ mnt/other-media/home/
oct:tnal% ls -l mnt/other-media/home/
total 0
drwxr-xr-x  3 root  wheel  102 12 23 09:33 root/
drwxr-xr-x  3 tnal  staff  102 12 23 10:01 tnal/

case2-1では、rootディレクトリのonwer:group情報も保持しており、またタイムタンプも同じ状態で複製されていることが確認できます。(tnalディレクトリのタイムスタンプが更新されていますが、これは別用途で作業したため。)

case2-2では、同じコマンドを再度実行したとしても何も聞かれず複製が実行され、同じ状態が保たれていることが確認できます。

ということでこれで晴れて万々歳と言いたいところですが、cpコマンドは「コピーするためのコマンド」です。このため、ファイル更新の有無に関わらず、実行する都度すべての対象をコピーします。例えば数GB〜数TBあるような動画ファイルを保存していたとして、全く変更していないのだとしても、毎回必ずコピーします。また、初回のバックアップ時に100万ファイル複製したとして、次回バックアップ時点では10個だけファイル更新があったとしても、また100万ファイル全体の複製からやります。とっっっっっっっっっっっっっっっっっっっっっっっっっっっっっっっっっっっっっっっても無駄ですね。そこで、rsyncさんの出番です。


2. rsyncで同期してみる

oct:tnal% apropos rsync
colorsyncd(8)            - ColorSync Daemon
newwin(3x), delwin(3x), mvwin(3x), subwin(3x), derwin(3x), mvderwin(3x), dupwin(3x), wsyncup(3x), syncok(3x), wcursyncup(3x), wsyncdown(3x) - create curses windows
rsync(1)                 - faster, flexible replacement for rcp
rsyncd.conf(5)           - configuration file for rsync in daemon mode

上記はrsyncコマンドについてaproposコマンドで調べてみた際の結果です。「faster, flexible replacement for rcp」とあるように、rcpコマンドを置き換える、高速で柔軟性のあるコマンドがrsyncです。もちろんパーミッションを保持できますし、「変更されていない対象は複製しません」。rsyncの「sync」はシンクロ、つまり同期の意味で、バックアップ対象とバックアップ先が同期されるように作業します。同期が取れているか否かをチェックサムアルゴリズムで判定していますが、この辺りを掘り下げるのは本題ではないため、wikipediaに丸投げしておきます。ここでは「変更されていない対象は複製しません」ことだけを覚えてれば十分です。

では、一度 mnt/other-mediia/homeをまっさらにした上で rsync コマンドを実行してみましょう。

# バックアップ先をクリア。
oct:tnal% sudo rm -rf mnt/other-media/home
oct:tnal% ls mnt/other-media/

# case 3-1: sudo付きでrsyncコマンドを実行。
oct:tnal% sudo rsync -auvz home/ mnt/other-media/home/
building file list ... done
created directory mnt/other-media/home
./
root/
root/hoge.txt
tnal/
tnal/hoge.txt

sent 277 bytes  received 82 bytes  718.00 bytes/sec
total size is 0  speedup is 0.00
oct:tnal% ls -l mnt/other-media/home/
total 0
drwxr-xr-x  3 root  wheel  102 12 23 09:33 root/
drwxr-xr-x  3 tnal  staff  102 12 23 10:01 tnal/

# case 3-2: もう一度同じコマンドを実行してみる。
oct:tnal% sudo rsync -auvz home/ mnt/other-media/home/
building file list ... done

sent 181 bytes  received 20 bytes  402.00 bytes/sec
total size is 0  speedup is 0.00
oct:tnal% 

case3-1は、rsyncに-auvzオプション付きで複製した例です。ちゃんと複製できてることが確認できますね。-aはアーカイブモード、-uは複製先のファイルが新しい場合にはスキップ、-vは動作状況の出力、-zは同じメディア内なら多分邪魔ですが、ファイル転送する際に圧縮してくれるオプションです。他にもよく使うオプションは「–delete(バックアップ対象で削除されたファイルがあれば、バックアップ先でも削除する)」かな。

そしてcase3-2は、先程と同様に同じコマンドを実行した際の様子です。先ほどとは出力内容が異なり、既にバックアップ対象とバックアップ先の同期が取れている(更新がない)ため、全ての複製をスキップしています。rsync偉い!


まとめのようなもの

以上、cp使うなという話ではなく、状況に応じて使い分けようということで違いを観察できるような例を紹介してみました。また、今回は同じファイルシステム上にバックアップを取る形でやりましたが、rsyncはネットワークを介して別システムに複製を取ることもできます。例えば「rsync -auvze ssh home/ tnal@hostA.jp:/mnt/home/」とやると、hostA.jpというマシンにtnalアカウントでssh接続して、同期を実行します。同期するコマンドなので、2回目以降は更新があるファイルだけが転送されるため、とても効率が良いです。

また、rsyncコマンドをシェルスクリプトとして用意し、cron実行することで「自動的に定期的に指定したバックアップを実行」してくれるようになります。実際、それで助かったことがあります(遠い目)。重要度に応じて2重ではなく3重バックアップ取ることで「こんなこともあろうかと」と言える人生を目指しましょう!

自由気ままにアドベントカレンダー: ソースコードを効率良く読みたい(gtags編) #ieAdventCalendar2017

金曜日, 12月 22nd, 2017

Qiita Advent Calendar 2017とか技術系の記事持ち寄りカレンダー的なサムシングで賑わう昨今皆様いかがお過ごしですか。私はようやく右肩の痛みが収まりつつあります。続くかどうかも不明ですが一人気ままに書いてみます。統一テーマは「情報工学科(知能情報コース)にまつわる何某か」。テーマ付けてなくないと言われても仕方ないぐらいの条件ですが、付けたもの勝ちだし。適当にハッシュタグ(#ieAdventCalendar2017)も付けときます。後で学科のscrapboxにリンク貼る予定です。


前置きはこれぐらいにして1件目の本題「ソースコードを効率良く読みたい(gtags編)」。


1. これは何?

一言で述べるなら「ソースコード上に散らばってる情報を紐付けるツール」かな。例えば、、、

  • ある場所で宣言している変数Aがどこで使われているか?
  • 逆に、ある場所で使われている変数Bはどこで宣言されているか?

みたいなことを探す支援をしてくれます。上記は変数の例ですが、クラスや関数にも対応。対応言語は公式サイト: GNU GLOBAL source code tagging systemで調べよう。正式名称は「GLOBAL」ですが、歴史的な理由や設定ファイル名等で使われてる略称「gtags」と呼ばれることが多いかも。


2. 何ができるの?

ソースコードを読もうとすると、

  • ここで設定した変数は、どこでどう使われているのだろう?
  • ここで参照してる関数は、どこで定義されているのだろう?
  • このクラスはどういう継承になっているのだろう?

等、多数の階層関係にあるファイル群を行き来しながら解読していくことになるでしょう。IDEで定義元を辿ったりすることもできますが、gtagsを使うとターミナルやエディタで参照することができるようになります。


3. 環境構築@Mac編

動作確認したのは2017年12月22日時点。

    動作確認した環境
  • OS: macOS Sierra (10.12.6)
  • Python 3.6.1 :: Anaconda 4.4.0 (x86_64)
    環境構築@Mac編
  • ステップ1: globalのインストール。オプション無しだと素のglobalだけがインストールされますが、これだと標準対応してる言語(C言語とか)だけしか動かないので、Exuberant Ctagsと、Pygmentsを組み込んだ版をインストールするようにオプション指定しています。
    brew install global --with-ctags --with-pygments
    pip install pygments #不要かも?
    
  • ステップ2: emacsと連携するなら、~/.emacsに以下を設定しよう。setq以下はお好み。ショートカット設定です。vim連携したいなら、/usr/local/Cellar/global/6.6.1/share/gtags/gtags.vim参照するように設定すると良いんじゃないかな。多分。
    (setq load-path (cons "/usr/local/Cellar/global/6.6.1/share/gtags" load-path))
    (autoload 'gtags-mode "gtags" "" t)
    (setq gtags-mode-hook
          '(lambda ()
             (local-set-key "\M-t" 'gtags-find-tag)
             (local-set-key "\M-r" 'gtags-find-rtag)
             (local-set-key "\M-s" 'gtags-find-symbol)
             (local-set-key "\C-t" 'gtags-pop-stack)
             ))
    

4. 使ってみよう

コード例(Python): kelvinguu/neural-editor

これから上記の参考コードを読んでいくとしましょう。readmeにある実行例では、textmorph/edit_model/main.pyを動かす例が書かれているので、このファイルを眺めてみることにしましょう。

読みたいソースコードを用意したら、そのディレクトリに移動して「gtags –gtagslabel=pygments」を実行しましょう。コマンド実行したディレクトリ内にあるソースファイルを洗い出し、タグ情報を抽出&整理してくれます。前準備はこれだけ。以下では、作成したタグ情報を使ってみます。


[例1] main.pyの18行目で設定している変数 experiments はどう使われているのだろう?(コマンド利用編)

oct:tnal% global -x experiments
experiments 72 latex/namespacetextmorph_1_1edit__model_1_1main.tex \subsubsection{\texorpdfstring{experiments}{experiments}}
experiments 18 textmorph/edit_model/main.py experiments = EditTrainingRuns(check_commit=(args.check_commit==’strict’))
oct:tnal% global -xr experiments
experiments 23 textmorph/edit_model/main.py exp = experiments.new()
experiments 26 textmorph/edit_model/main.py exp = experiments[int(exp_id[0])]
experiments 32 textmorph/edit_model/main.py exp = experiments.new(config) # new experiment from config

太字はターミナル上で実行したコマンド。

1つ目のコマンド「global -x」で、指定したタグ(キーワードと読み替えてもらってok)がどこで定義されてるかの一覧を表示しています。どうやらtexファイルと、今参照しているmain.texの2箇所で定義されているようです。texファイルの方はPythonのコードとは無関係なので無視しましょうか。

2つ目のコマンド「global -xr」は、指定したタグがどこで参照されているかの一覧を表示しています。全てmain.pyで、先程の18行目で初期化された変数experimentsは、23行目で new() され、26行目で何やらリスト参照されているようです。また、32行目の new(config) があることから、news()する際に2通りの設定方法があるらしいことが読み取れます。


[例2] emacsでソース参照しながらタグ情報を利用してみる

emacsでtextmorph/edit_model/main.pyを開き、「Esc-x gtags-mode」と実行してgtagsモードに移りましょう。「Esc-x」は「Escキーを押して離して、xを入力」です。その後、「gtags」ぐらいまでを入力したらTABキーで残りのキーワードを補完入力してくれるはずです。「Esc-x gtags-mode」まで入力したら、エンターキーで入力確定します。すると、環境構築で指定したgtags.elを読み込んだ状態(gtagsモード)になります。

gtagsモードに移ったら、8行目の「set_log_level(‘DEBUG’)」がある行にカーソルを移動します。この状態で「Esc-x gtags」まで入力してTABキー押すと、関連コマンドの一覧が出てきます。キャンセルしたい場合には「Ctrl-G」(Controlキー押しながらGを押す)と、エディタ側にカーソルが戻ります。gtagsコマンドの詳細はマニュアル参照してもらうとして、ここでは「set_log_levelがどこで定義されているのかを探し、定義している箇所に移動する」ことをやってみます。

今、8行目の「set_log_level(‘DEBUG’)」がある行にカーソルがある状態です。ここで「Esc-x gtags-find-tags」と入力して実行してみて下さい。

Find tag: (default set_log_level)

という表示が出力されるはずです。特に指定しなければ、set_log_levelについてタグ情報を探すよという状態です。このままで良いので、リターンキーを押しましょう。そうすると、emacsの画面全体が新しくなり、「*GTAGS SELECT*」というバッファを開いた状態になり、以下のような情報が出力されているはずです。

set_log_level 150 gtd/log.py def set_log_level(level):
set_log_level 4 textmorph/edit_model/main.py from gtd.log import set_log_$
set_log_level 150 third-party/gtd/gtd/log.py def set_log_level(level):

上記は、
 ・set_log_levelというタグが3箇所で使われていること。
 ・1つ目は、gtd/log.pyというファイルで、150行目でdefしてる。
 ・2つ目は、今読んでるファイルと同じファイルで、4行目で import してる。
 ・3つ目は、third-party/gtd/gtd/log.pyというファイルで、150行目でdefしてる。
といったことを一覧表示しています。今はmain.pyを読んでいる最中で、上記2つ目のようにimportしてる情報を考えると、どうやらgtd.logモジュールで定義しているようだと想像できます。ということを踏まえ、1つ目の箇所に移動することにしましょう。

移動するには、emacs内で上下カーソルキー(もしくはCtrl-p or Ctrl-n)を使うことで、参照先を選択することができます。ここでは1つ目の「gtd/log.py」のある行にカーソルを移動させて、リターンキーを押しましょう。すると、gtd/log.pyの該当行(150行目)に移動してくれます。ここではdef文が書いてありますので、set_log_levelについて読み進めたい場合にはここを解読していくと良いでしょう。

補足として、環境設定でショートカットを設定しておいたならば、「Ctrl-t(gtags-pop-stack)」で「一つ前のバッファに戻る」ことができます。これは複数遡ることが可能です。あるファイルAから別ファイルBに飛び、そこからまた異なるファイルCに飛んだならば、Ctrl-tを1回実行するとファイルBに戻り、もう一度Ctrl-tすると最初のファイルAに戻れます。findで移動して、popで戻ることで行き来する形ですね。


まとめのようなもの

以上、gtagsを使ってソースファイルを読んでいく例を紹介してみました。今はIDEでも多くのことができるようになっていますが、ターミナル&エディタでもこのぐらいのことはできますし、他にもheml-gtagsなんてのもあるらしい。もしくは、Doxygenのようにソースコードからドキュメント生成してくれるツールもありますし、階層関係、継承関係、参照・被参照関係をGraphvizで可視化してくれたりと、支援してくれるツールはいろいろあります。実行しながら追いかけたいなら、PyCharmThonny(Python初心者向け)みたいな統合環境使うも良し、標準デバッガ pdfもあります。

ソースコード眺めてウンウン唸るだけではわからないので、ツールも必要に応じて使いこなしましょう! Happy code reading!

今年最後のゼミ

木曜日, 12月 21st, 2017

終わりなのは週ゼミであって、それとは別に個別ゼミしたりしてますが、それでも一つの区切りですね。今年も残りわずか。

M2は、修論関連スケジュール(審査願い、予備審査、最終発表)に向けたスケジュール確認。

B4は、卒論関連スケジュールに向けたスケジュール確認。

並行して、情報処理学会全国大会に参加するメンバは、1月上旬に予稿締切があるのでそれに向けてのスケジュール確認。
並行して、研究室サーバ移行の目安確認。(最低限のところまで年内でやって、残りは新配属生のタスクになりそう)

あたりをしつつ、個別に進捗確認しながらゴール検討。

ありがちなんですが、卒業研究みたいな1年間規模の計画で何かしら新しい知見を得るということが目標になっているタスクに対して、多くの学生は全体のストーリーを気にせずその場その場での近視的なサブゴールに注力しがちで、結果としてそれが何のためかを踏まえずに寄り道し始めて。寄り道自体は悪いことじゃないんですが、気がつけば寄り道だらけで「新規な知見」ではなく「やってみた」で終わりがちです。

別パターンとしては、理想的な目標に進もうとするのは良いけども、マイルストーンを設計できずに途中を飛ばして「いろんなよくわからないことを寄せ集め的にやってしまう」。結果として、何がどう影響してるか良くわからず、考察しようがない状況とか。うまいこと絞り込むことができていないパターンですね。

ま、そういう経験も含めて卒論だと思ってるので、一緒に泥舟乗るのは構わない人です。どういうふうにタスク設計するか、全体ストーリーを筋道立てるか、みたいなところを少しでも体験して貰えれば。