Archive for the ‘ススメ’ Category

万能な表現方法はない

水曜日, 5月 8th, 2019

論文・書籍・解説記事・事例集等、あれこれ何かを学ぶための「教材的なもの」はありますが、どれもこれも一長一短。一般的には人それぞれのそれまでに蓄積した知識であったり応用力であったり抽象力だったり、場合によっては文化的背景や育ってきた環境要因等の外部要因も含めて個々人の立ち位置は異なるので、誰かにとってベストであっても、それが他の人にもそうであるとは限らないのが当然。

「数学ガール」に何度も出てくる「例示は理解の試金石」もそうだし、理解を深めるためには自分で例示したり、それらを俯瞰したり、共通項探してみたり、あれこれ弄り倒すことが必要。別の言い方をすると「インプット(読む)だけでは理解度は深まらない」。

分かりやすく用意された解説記事(のようにみえるもの)がweb上に溢れ、それなりに何かを一点突破するような学習がしやすくなりつつありますが、単に例に触れてるだけだと「ハウツー本的な理解」に留まってしまいがち。極端な例をだすと、ハンマーは釘を打つために使う(それ以外の使い方は想像できない)とか、そういう理解の仕方をしてしまう。

そうならないためにも、教科書なりで「良くわからない表現」が出てきたなら、それがどういうことなのか弄り倒してみよう。

インタビュー

木曜日, 2月 21st, 2019

いつ頃からだったか忘れていますが、卒論&修論発表会が終わったタイミングで学生へのインタビューを実施しています。意図としてはクローズドになりがちな研究室活動や授業といったカリキュラムに関する不満を拾ったり、より広い意味での大学生活サポートへの問題点をあぶり出したり。もしくは逆に良いシステムだと残すべきものや、ある教員に閉じてる活動をより広めるべきものを共有するためだったり。何か追加したほうが良い授業なりについての希望調査だったり。様々な意図を込めての実施です。

聞いたものをどこまで改善に結びつけているかが大事なんですが、その辺りをうまく回すシステムが構築できていないかも。個々人でどうにかできる範疇については少しずつ取り組んでいるぐらいかな。

今回は「後輩に伝えたいことは?」というのも聞いてみました。ニュアンス違ってる部分があるかもしれませんが、以下の通り。かなり似通ったアドバイスも多いですね。

  • 研究室紹介まで知らなかった、早めに調べた方が。
  • 課題を継続してちゃんと終わらせる。自分の時間見積もり、バッファとかを普段から見積もる練習。
  • 迷わず人を頼れ。忙しいときは断るから、気にせず頼れ。
  • 授業出席はしておいたほうが良い。
  • 数学素養はかなり大事だが、それに気づくのがB4で研究始めてから。英語も同様。
  • 横と縦のつながりを増やしたほうがお得。他研究室に遊びに行くぐらいでも。
  • 今になって振り返ると、B4になってから卒業研究として始めるのではなく、興味を持ったことについて取り組んで、LTなりでも発表する練習してたら良かった。
  • 互いに頼るために学科内に友達作っておいたほうが良い。
  • 思ったより選択科目の選択肢が少ない、どんどん減っているのでよく考えて取ろう。
  • 留年するなよ。縦のつながりも作れるなら良いけど。
  • 吉田研は11〜12月(電気学会九州支部講演会への参加)が一番大変。逆にそれがあるので最終発表時期は割と楽。
  • 学校にできるだけいたほうが良い。友達を作ろう。
  • 他研究室遊びに行こう。ゼミ聴講も、本当に遊びに行くだけでも。
  • 遠藤先生のインターンシップは取ろう。(當間補足:就職センターのセンター長としてやってるかもしれないので、次年度以降は担当教員変わってる可能性あり)

1年次が終わる頃にオススメしたい書籍

火曜日, 1月 29th, 2019

入学したてではなく、数学英語等の共通科目をある程度終えてたり、プログラミング等の専門科目も入門ぐらいは終えてたりする時期です。学期末テストが終わると(やること決めてない人は)それなりに時間が取れるので、おすすめ書籍を紹介したいなと。

学科slackで先輩学生らに自由に書き込んでもらった所、こんなリストになりました。

ここ以外にも紹介したい先輩、教員はいますので、なにか興味があるけど取っ掛かりが分からないという人は相談してみよう。他学部の先生でもよいし、全学の学習サポートルームあたりで院生に相談してみるのも手。こういうためにも大学を活用しよう。

論文の読み方もいろいろ

金曜日, 6月 15th, 2018

全体ゼミではこんな感じで説明してるんですが、「ArXiv時代の論文の読み方」として整理されたのが公開されてました。イイネ!

修士が講義を取るタイミング?

金曜日, 4月 27th, 2018

修士2年間の受講状況を眺めてみると、多くの学生は

  • 1年目で研究以外に必要な単位分の授業を取る。空いた時間で研究。
  • 1年目終わり〜2年目のタイミングで就活。GW明けまで続く人も少なくない。
  • 終わってから研究本腰。

みたいな流れになってるケースが多い気がします。

2年目というか1年目終わりには就活始まるからその前に終わらせておこうという考えですね。それはそれで理解できます。

その一方で、就活するときに研究実績としてどれだけ示せるかであったり、研究の話をどれだけできるか、間接的にはどのような問題として捉えてどのように取り組んだのかといった話をできることの方がメリットあったりしないのかなとも思います。研究が直接活かせる職場というのは珍しいけれども、間接的に「取り組み方」自体を話すことができない修士というのはどうなのと思うし。

言い換えると、

  • 先に研究集中するとしてM1前期は必修のみか+1,2科目。研究集中。
  • M1後期も同様に必修+1,2科目。研究集中。
  • M2前期は必修のみで就活しつつ、研究。
  • M2後期に不足単位分取りつつ、研究まとめ。集中してたならまとめるぐらいになるはず。

みたいなスケジュールはどうか、と。

私の場合は修論締切を結果的に騙されて12月に書き終わったのだけど、それ以前の問題として研究発表してたのを整理しただけなのでそもそも修論書くこと自体にはそんなに手間かかってないのだよな。という体験談的には、まず研究成果出すことに集中したほうが良いんじゃない?というお話でした。

バックアップは 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!

振り返って整理してみよう

木曜日, 6月 8th, 2017

先週のプログラミング1を終えてターミナル作業は半数近くがしどろもどろ?とか書いてますが、今週のプログラミング演習1を見てもその思いがより強くなりました。

今週の内容はgnuplotで、新しい内容で戸惑うのは問題ないです。けど、説明時に「$はプロンプトなので除いて、この行をコピーして実行して下さい」と言ってるのに

oct:tnal% $ brew cask install aquaterm
zsh: command not found: $
oct:tnal%

と$付きコピペ実行して(まだ分かる)、結果としてエラーが出ている(エラーだと分からなくても出力されてる内容を読めば何か怪しいことは気付ける)にも関わらず「出来たと思い込んで次に進む」みたいなケースが少なくないです。

シェルスクリプトの例とgnuplotスクリプトの例を区別できていないケースも多い。というか「シェルスクリプト?」と悩むだけで、過去にやった資料を参照しようともせず、単にうんうん悩むケースがあって。それは時間を浪費してるだけで、勉強になってないです。「忘れた時にどう行動したら良いか」、「習ったことをどうやって身につけるか」といったことを自習時間でやらないと、「以前やったことを踏まえて次に進む」ことができない。それはとても悲しい。

プログラミング言語に関して言えば、これまでに出てきているのは「Python, shell (bash/zsh), gnuplot」の3種類。Python言語で書いたスクリプトをシェルで実行するのは無理だし、gnuplot言語で書いたスクリプトをPythonで実行するのも無理。シェル言語で書いたプロぐあr無をシェルスクリプトと呼ぶし、Python言語で書いたものをPythonスクリプトと呼ぶ。ファイル拡張子はファイルの中身を見なくても想像しやすくするための慣習。シェルスクリプトなのに.py拡張子付けちゃうと、混乱の元です。

言語 ファイル拡張子 実行方法
Python .py python3 file.py
Shell .sh sh file.sh
Gnuplot 特になし or .gplot gnuplot < file.gplot

とか、自分なりに整理してみよう。鳥の眼と虫の眼のように、「今自分がやってるのは何なのか」を見やすくする工夫をしてみよう。

教科書・参考書は自分で使うもの

水曜日, 4月 26th, 2017

中高ぐらいまでは「授業中に読む・参照する」ことが多いからか、大学で授業中に使わない場合「使わないなら教科書指定しないで欲しい」みたいな意見が届くことがあるらしい。そうじゃなくて、教科書は自分で使うものです。という話もちゃんとしないと伝わらないよね。ということで1年次の必修科目を担当するようになってからは何度か「授業内容とは直接関係ないけど言っておきたい話」をするようにしています。題して「今週のお告げ」。


教科書に話を戻すと、教員としては多数の書籍の中からベストと思われる1冊に絞り込んで教科書に指定したり、保管する目的で参考書をシラバスに掲載しているのであって、授業中に読ませるためではないです。

じゃ、どう使えばいいか。例えば、、

  • まず一通り頭から通して読む。分からないところがあったらマーキングするなりして後で読み直す・質問する等の対応を取りやすくする。適度な区切りまで読み終えたら、また頭に戻って読み直す。2回目以降は分かる所は理解度に応じて斜め読みしたり、スキップするなりしよう。これを繰り返して5回は全体を読み直そう。
  • 「5回」はただの目安ですが、単に回数重ねるだけではダメで、気になる所はできるだけ対策(参考書参照、相談等)しよう。
  • シラバス以外にも関連書籍・情報源を数多く知ってるので、目的ができる都度相談すると、ベターな情報源をゲットしやすい。
  • プログラミングに限らず、読むだけでは不十分。手を動かそう。
  • これらをすべての授業でやるのは辛いかもしれない。せめて好きな科目、目指したい目標に近い授業についてはやろう。

みたいな話をしています。1回では話しきれないので複数回に分けてたりしますが。

P.S.
書籍を読み飛ばすのが難しいという話がtimelineに流れてました。

書籍によりますが、技術書は目的に沿った読み方をするのが良い。目的が抽象的な勉強なら最初から通して読んだり、好きな場所から読んだり。達成目的があるならそういう場所をうまく見つける技術が必要。目次や索引使うなり、電子書籍なら検索したり。

見つける技術を身につけるには、一度は体系的な学びをしながら、自分なりにキーワードマップなり情報紐付ける作業をするといいかな。検索エンジン主体でも良いけど、ピンポイントな情報出てても「気付かずに多数のタブを行ったり来たりしてる」のを見ると悲しい。最初から読み飛ばすなんて無理ですよ。

Let’s shadowing

火曜日, 4月 18th, 2017

データマイニング論の輪読が始まりました。暫くはData Mining: Practical Machine Learning Tools and Techniquesで基礎固めです。

毎週2グループ、1グループ当たり約20ページという分量で割り振ってます。前半の知識がないと後半は読むのが辛いということは往々にしてありますが、ま、頑張ってください。概要掴むだけなら割りと楽勝な質&分量です。

留学生も5人ぐらい受講していますが、英語教材使ってるので今のところ大丈夫そうではあるかな。というか今日担当してた一人には優しすぎたかもしれない。と思うぐらいには読み込んでました。資料も説明もGoodで、質問も的を得ていて凄い。

日本人グループは、英語教科書がベースにあるので資料のテキスト文は良いです。一方で、発表時のイントネーションと区切り方(リズム)が宜しくないです。単語の発音もそうだけど、そっちはその人や日本人の癖として暫くしたら慣れる(慣れやすい)側面もあるけど、文章としてはイントネーションと区切り方が重要。これらがバラバラだと聞くのが辛い。逆に余程酷い発音じゃなければ、イントネーションや区切り方から類推しやすかったりします。

ということでイントネーションや区切り方を練習しよう。

代表的な練習は、シャドーイング「英語を聞きながら、止めずに、後から追いかけて同じように発音を真似する練習」が効果的です。

シャドーイングのためには元になる音源が必要ですが、
 (1) NHKの語学番組から選ぶ。
 (2) 実ニュースを使う
 (3) ESL
 (4) Cursera等の動画コンテンツを使う(スピード調整できて、スピーチ文も見れます)。
 (5) 教科書や自前で用意した英文を say で喋らせる。
あたりが良いんじゃないかと。