Archive for the ‘講義/実験’ Category

(プログラミング1) 2週目も思った以上に演習の時間がとれず

木曜日, 4月 21st, 2016

資料自体はそれほど多くない気がしますが、あれこれ説明してるうちに「こんなケースもあってね」と脱線することが多く。いや、資料自体も多かったか。「教科書補足説明+教科書にない説明+演習説明+ペアプロ説明」と説明だらけだったし。ということでそもそも詰め込み過ぎでした。

結果的にメインのつもりだった演習は20分ぐらいしかやれず。内容的には「エディタ・ターミナル・インタプリタをあれこれ行き来しながらレポート作成してね」というもの。レポートはGoogleドキュメントでテンプレートを用意して、基本的には実行の様子が分かるようにコピペで済ませるようにして、なるべく全体の流れを意識しやすくしてみたつもりです。案の定「Pythonインタプリタ上でemacs入力してエディタが起動しないと悩んでる学生」とか出まくりで楽しいです。

十分な時間がとれなかった点は反省して次回は演習メインにします。(復習+新しいことの説明でmax30分、演習1時間は取ろう)

ペア・プログラミングは厳密なやり方はさておき、「なるべく一人で考えこむのを避けろ(max数十秒)」、「悩むぐらいなら喋って相談しながらやろう」、「考えてることを言葉で説明する練習」、「何をやってるのか目的共有できてないのはまずい」、「driverがやってる操作が分からなかったら聞こう」、みたいな話で進めてみることに。感触としては「周りが賑やかだからか自分たちもやろう」という雰囲気作りにもなってることと、ペア間だけでなくTA・教員へ質問しやすい雰囲気にもなりそうな感触を受けています。(質問する学生わりといる)

「66名=33ペア」で同時にペアプログラミングするというのは無謀かとも悩んでましたが、一応、なんとかなるかも。多分。少なくとも問題を一人で抱え込むことを避けやすい、というのは大きなメリットだなと。

プログラミング1始動

木曜日, 4月 14th, 2016

今年度から初めて受け持つプログラミング1が始まりました。1週目はガイダンス中心で、

  • プログラムって何だろう?(->たくさんの関数でできてる)
  • 仕様を考えることもプログラミングの一部(->KISS原則、DRY原則)
  • テストやバージョン管理もやるでよ
  • 教科書は自分で読め
  • 授業では一人ではやれないことをサポートする。「次の一歩」が分かるまで手助けする。
  • こういうことを学ぶためにこういうシラバスになった。が、状況見ながら変更入るはず。

といった内容を例題・思考実験・具体例を交えて話しまくるという形になりました。

手を動かすのも重要だと思いますが、それは2週目以降ということで。

最後に少しだけPCでの演習(ターミナル起動、インタプリタ起動してコード例実行)でprint()したところ、「print()で「`」出力するにはどうしたら良いですか?」との質問が。いろいろ手さぐりするクセがついてる学生は有望ですね。

<申し送り事項>

  • タイピング練習させたほうが良さそう。 ->続きの「ソフトウェア演習1」で「タイピスト」で練習させるらしい。
  • ペア・プログラミングどうやって導入しよう。
  • ペア・プログラミングどうやって評価しよう。

P.S.
今日喋った内容は1割でもキャッチできてたら御の字で、最低限「関数、KISS原則、テスト」が残ってれば良いよねという気持ちでした。が、学生側はだいぶビビってるらしい。シラバスに「毎週ミニテストやる」と書いてるのが効いてるっぽいですが、そんなに難しいことやるつもりないんだよな。配点でも毎週やるにしては大分低い割合だし。

(データマイニング班) コードレビュー終了

木曜日, 2月 4th, 2016

つかの間の晴れ間が。いいタイミング(昼食で食堂行こうと思ったタイミング)で晴れ間が少し広がったので、(ほんの数分)少し足伸ばして一人撮影大会してました。やっぱり日光+青空の下だとより映えるなぁ。もっと接写したいんだけど、今回ぐらいでもピンぼけ気味だな。やっぱりそれなりのカメラが必要か。


先週(2/2)の時点で近いうちに「コードレビューするぞー。」と伝えていたにも関わらずリポジトリに殆どコミットがないorゼロな学生がいて。しくしく。作業レビューした限りではそれなりには書いてたからローカルで作業してるのは知ってるんですが、ちゃんとバージョン管理使えよ!

コメントを英語で書いてるグループは初めて見ました。エライ。

以下、比較的共通してたツッコミ一覧。

  • まず何を見たら良いのかわからない。(トップ階層にtxtファイルありすぎ、整理されていない。どれがドキュメントかわからない)
  • 実験再現手順がわからない。
  • __pycache__ は自動生成されるのでリポジトリには含めない方が良い。(.hgignore使おう)
  • 関数定義の前後、ブロックの後は空行を入れよう。
  • 余程の理由がない限りglobal 利用は避けよう。多くの場合は各関数の引数として渡すか、クラス変数として設計し直せるはず。
  • ファイルや関数の説明は docstring / sphinx / doxygen 形式で書こう。
  • 関数上部とかではなく、コード中にコメント書くのは最小限にとどめよう。特に「コードの後ろにコメント」が大量にあると、コードが読みにくくなります。
  • ループに関連する変数の初期化はループの直前でやろう。離れすぎると意図がわかりにくくなります。
  • 関数定義を挟む形で、前後にコードを書くのは辞めよう。本来連続して処理すべきコードが離れてると読みにくい。
  • クラス名・関数名・変数名から何をするか想像できないので、適切な名称付けよう。
  • マジックナンバーを含め、ハードコーディングはできるだけ避けよう。コードを再利用性しづらいし、利用しようとした時点で直接コード書き直しの手間が入るので、トラブルのもとになる。
  • readlines() は避けよう。対象が大きすぎるとメモリ不足で死ぬので、readline()で1行ずつ処理するように書きなおしたほうが良い。
  • open() は、その後で close() し忘れることがあるので with 構文使うとベター。
  • 不必要に変数を増やさないようにしよう。対象が長すぎて省略名で繰り返し使いたいとか理由があるなら良いが、不必要に変数増やすとそれだけ読みにくくand/orバグの温床になる。
  • キャストするだけの関数は逆にコード増えてしまうので辞めよう。それ以外にも処理あるならわかる。
  • インデントを統一しよう。

コードレビュー開始

水曜日, 2月 3rd, 2016

実験4(データマイニング班)の授業時間としては昨日で終了ですが、来週には成果発表会+その後でドキュメント付き公開して一通りの授業終了ということになります。ここ数週間やってた作業レビューで気づいた点についてはコメントしてたのですが、メインが作業のレビューだったのでコードへのレビューは放置気味でした。ということでまとめてレビューするのを今日から始めてます。公開するまでに修正反映できるかは別として、今後の活動に役立てばいいなという気持ちを籠めて。

なんてことを書きまくってます。

実験4もそろそろ佳境

火曜日, 1月 26th, 2016

実験4は来週が15回目で、それが終わると残りは期末試験期間。実質的にはもう残り1週間で仕上げることになります。例年の感じだと「15週目までやりこんで、期末試験期間は座学に集中して、その期間中にプレゼン準備、成果報告会が終わってからドキュメント整理し始める」パターンが多いかな。

ここ数週間は個別にコードレビューというか作業レビュー的なサムシングをやってました。ペアプロでもなくて、私に対して説明してもらいながら作業してもらう形で、相談あれば聞くし、そうでなくても気づいたことがあれば突っ込むというスタイル。コードはかけるけど説明できないという人もいるか。いろんな作業スタイルがあって面白いです。デバッグが苦手な人に共通してるのは、問題を細分化して確かめようとしてないか、その方法(細分化する方法)に気づかないってところかな。

P.S.
明日はレキサスさんのインターンシップ説明会&企業説明会があります。県内では割と面白い上に技術面でも頑張ってるところなので、知らない人は参加したほうが良いんじゃないかと。学外にも目を向けよう。教員的には機会提供するぐらいしかできません。機会をどう活かすかはみなさん次第です。

(環境構築メモ) Mac OS X 10.11.x + Freemind + brew + gnuplot + Python 3.5.1 + virtualenv + scikit-learn + matplotlib + pandas + mecab + mecab-python

月曜日, 1月 11th, 2016

10.9からOS更新をサボっていたのですが、来年度から新入生相手にプログラミング教えることもあってなるべく同じ環境にしてた方がつまづくポイントを押さえておきやすいよねということで、バックアップ取ってから環境構築中です。昔はOS更新時にどのデータを移行するか選択できたのだけど、今はできないのね。細かいことを気にしないのであれば、ほぼOSアップデートするだけで済みました。

以下は比較的良く使うツール群(表題に列挙)を使えるようにするまでの道のりです。(学科専用のie-pedia的なものがあると嬉しいのかなと思いつつ、ブログにメモを残しておこう。


Freemind

これ使えないと泣けるぐらいには必須アプリ。もともとインストールしてあったのは0.9.0なんですが、起動しようとするとJRE1.6入れろと怒られます。アプリ自体を更新したら良いかと思って最新版1.1.0をインストールしてみるものの状況変わらず。1.6 or laterって書いてるのにー。仕方ないのでJRE1.6入れてみると、今度は1.1.0起動できず。0.9.0は起動できるようになったのでひとまずこれで済ますことに。


Xcode + Command Line Tools

  • Xcodeはインストール後に起動して「Xcode and iOS SDK License Agreement」にAgree。
  • その後、ターミナルから「xcode-select –install」で Command Line Toolsのインストール。

Homebrew

  • デフォルトの/usr/local以下を使うのは気持ちが悪いのでインストール先を /opt/homebrewに変更。ちなみに MacPorts の名残りで /opt/local も残ってたのだけど、これは消して置くのが正解でした。
sudo mkdir /opt/homebrew
cd /opt
sudo chown ${USER}:staff homebrew
curl -L https://github.com/Homebrew/homebrew/tarball/master | tar xz --strip 1 -C homebrew
brew update
brew upgrade
  • インストール後、PATHに/opt/homebrew/binを追加。

  • Gnuplot + AquaTerm + XQuartz

    brew install homebrew/dupes/libiconv
    brew link libiconv -force
    brew install gnuplot --with-aquaterm --with-x11
    

    Python 3.5 + virtualenv

    • 数ヶ月前に3.5を試した限りではトラブルが多かったけど、先月出てた3.5.1は大丈夫そう。ということで、本家サイトから最新版3.5.1をダウンロードしてインストール。
    • 標準のパッケージ管理ディレクトリにあれこれ追加インストールするのは使い勝手がよろしくないので virtualenv で環境作ってそこで作業。以下は実際には試していません(以前作業したものがそのまま使えた)。
    # virtualenv, virtualenvwrapperのインストール
    sudo pip install virtualenv
    sudo pip install virtualenvwrapper
    
    # virtualenv の設定
    # ~/.zshrc に以下の設定を追加。
    # 下記if文で指定した WORKON_HOME に仮想環境が構築される。
    # 不要になったらここを削除しよう。
    if [ -f /usr/local/bin/virtualenvwrapper.sh ]; then
        export WORKON_HOME=$HOME/.virtualenvs
        source /usr/local/bin/virtualenvwrapper.sh
    fi
    
  • Python 3.5.1用の環境構築。ここではpy35という名前をつけています。正しく動くなら、買いコマンド実行後にプロンプトに (py35) が追加されるはず。
  • mkvirtualenv --python=/Library/Frameworks/Python.framework/Versions/3.5/bin/python3.5 py35
    

    scikit learn, matplotlib, pandasのインストール

    • インストールそのものはすぐ終わり。py35の環境で下記を実行するだけ。
    pip install -U numpy scipy matplotlib scikit-learn
    pip install pandas
    
  • ただしこのままではmatplotlibがうまく起動せず。~/.matplotlib/matplotlibrcに下記を設定すると良いらしい。
  • backend : TkAgg
    
  • ここまでにインストールしたパッケージのバージョン(pip freezeの結果)。
  • cycler==0.9.0
    matplotlib==1.5.1
    numpy==1.10.4
    pandas==0.17.1
    pyparsing==2.0.7
    python-dateutil==2.4.2
    pytz==2015.7
    scikit-learn==0.17
    scipy==0.16.1
    six==1.10.0
    wheel==0.24.0
    

    mecab + unidic + mecab-pythonのインストール

    brew install mecab
    brew install mecab-unidic
    
  • unidicを参照するように、/opt/homebrew/etc/mecabrc を以下のように編集。
  • dicdir = /opt/homebrew/lib/mecab/dic/unidic
    
  • mecabが/usr/local/etc/mecabrcを参照しちゃうので、そこにリンクを貼っておく。
  • ln -s /opt/homebrew/etc/mecabrc /usr/local/etc/mecabrc
    
  • mecab-python-0.996.tar.gzをダウンロードして、下記の通りsetup.pyを修正。
  • # 元の記述
    def cmd2(str):
        return string.split (cmd1(str))
    # 変更後
    def cmd2(str):
        return cmd1(str).split()
    
  • 下記の手順でmecab-pythonをインストール。
  • export CFLAGS=-Qunused-arguments
    export CPPFLAGS=-Qunused-arguments
    python setup.py build
    sudo python setup.py install
    

    注意点して、brew版mecabには-Ochasen出力オプションが無いらしい。このため、例えばここのコード例にあるように「mecab = MeCab.Tagger(‘-Ochasen’)」するとRuntimeErrorになります。-Ochasenを諦めて、「mecab = MeCab.Tagger()」として標準出力にした上で、ステミング時にはfs[6]参照してたところをfs[7]にすると良さそうです。少なくとも上記ページのコードはこれで動きました。

    仕事始め

    火曜日, 1月 5th, 2016

    時間指定のあるタスクはデータマイニング班と、その時間帯だと困ると言っても入れられてしまった会議ぐらいで、それ以外は年末年始に溜まってた事務仕事しつつIPSJ全国大会の予稿チェックするぐらいのスロースタートな日でした。

    実験の方はそろそろ成果物仕上げを見据えて計画立てようというお話と、一部のグループが取り組もうとしてる割とコスト大きめなタスクへのTips話したぐらいか。厳密には違うけど一種のベクトル量子化に近いニーズともいえるタスクで、特徴抽出から手をつけようというお話。

    予稿コメントは直接口で言った方が伝わる部分もあるかなと、実験終了後に研究室除いてみたものの言いたい人はきてないかタイミング悪かったらしい。ま、仕方ない。

    学科のパスワード周りで(個人的に)トラブル起きてたんですが、どうやらある条件に引っ掛かった人だけにおきてた症状らしい。みんな大丈夫かー。

    2015年度/情報工学実験2/探索アルゴリズム1の口頭試問日調整

    火曜日, 1月 5th, 2016

    最終更新日: 2016/02/04, 08:33

    探索アルゴリズム1の口頭試問日調整用の記事です。
    「空き時間目安」を参照の上、「口頭試問希望の手順」に沿って調整してください。
    便宜上1月末まで期日を記入していますが、レポート提出締め切り(月曜クラスは1/14(木)、金曜クラスは1/18(月))から1週間程度を目安に終えるようにしてください。
    後ろになるほど期末試験期間と被りやすくなりますので、その前には終えるようにしましょう。


    口頭試問希望の手順

    (1) レポートを提出(サーバにアップロード)する。
    (2) メールで提出報告する際に、空き時間目安を参照の上、希望日&時間帯を申請する。
     提出時点で希望日時を調整できていない場合には後日申請でも構いません。
     同様に、既に提出済みのグループは別途メール申請してください。
     なお、原則としてグループ単位での実施です。
     どうしても全員が揃う日程で調整できない場合には個別相談ください。
    (3) 特に問題無ければ、私から承認メールを返信します。
    (4) 予約時間帯にグループメンバ全員で口頭試問。(約20分程度。長いと30分オーバーになることも)
     *場所は當間部屋(705室)です。
     *当日は予め提出されたレポート(PDF)を見えるように準備します。
      用紙等の準備は不要です。(追加したい資料があれば電子データで提出ください)


    空き時間目安

    下記はあくまでも目安です。変更が入る都度変更していきますが、下記時間帯で対応できないこともありますので、ご了承ください。
    便宜上「2時限目」を開始時間にしていますが、1時限目での対応も適宜調整しますので希望するグループがいたら相談してください。また、(センター試験期間を除き)土日の希望があれば検討しますので相談ください。

    1/6(水), 2時限目
    1/7(木), 2〜5時限目
    1/8(金), NG

    1/11(月), 成人の日
    1/12(火), 2〜3時限目
    1/13(水), 2〜4時限目
    1/14(木), 2〜4時限目
    1/15(金), 2〜5時限目 (センター試験準備日のため終日休講日)
     10:20-10:35, 月2(5階会議室)
     10:35-11:05, 月6(5階会議室)
    (1/16, 17: センター試験)

    1/18(月), NG
    1/19(火), 2〜3時限目
     10:20-10:40, 月4
    1/20(水), 2時限目
    1/21(木), 2〜4時限目->NG(大学院入試のため)
     12:50-13:05, 月5->再調整
     13:10-13:30, 月8->再調整
     13:30-13:50, 金5->再調整
    1/22(金), 2〜4時限目
     13:00-13:20, 月7
     13:20-13:40, 月8
     14:40-15:00, 月3

    1/25(月), 2〜5時限目
     10:20-10:40, 金6
     14:20-14:40, 金5
     14:40-15:00, 金4
     16:20-16:40, 月5
    1/26(火), 2時限目
     10:20-10:40, 金8
    1/27(水), 2時限目
     10:20-10:40, 金2
    1/28(木), 2〜5時限目
    1/29(金), 2〜5時限目
     12:50-13:10, 金11
     13:10-13:30, 金10

    1/30(土), NG

    2/1(月), 2〜5時限目
    2/2(火), 2〜3時限目
    2/3(水), 2〜4時限目
    2/4(木), 3時限目(14:00まで)
    2/5(金), 2〜5時限目
     金9, 16:30-16:50
     月9, 17:00-17:20


    口頭試問未実施グループのリスト

    >未実施
    月9
    金9

    >終了(search1)
    月2,3,4,5,6,7,8
    金2,4,5,6,8,10,11


    メモ

    提出状況一覧(メール報告があった分)。
    下記の日付&時刻は、レポートPDFファイルのタイムスタンプです。

    >探索アルゴリズム1
    月2: 1/14, 18:36 -> 1/25, 17:18
    月3: 1/13, 04:24 -> 1/22, 15:25
    月4: 1/14, 23:34 -> 1/26, 21:44
    月5: 1/12, 16:56
    月6: 1/14, 19:35 -> 1/17, 18:44
    月7: 1/14, 23:31 -> 1/31, 20:04
    月8: 1/14, 17:35
    月9: 1/14, 18:49
    金2: 1/18, 23:03
    金4: 1/18, 21:57 -> 1/31, 01:13
    金5: 1/18, 18:34 -> 1/26, 16:35
    金6: 1/18, 19:42 -> 1/25, 12:12
    金8: 1/18, 23:52 -> 1/28, 19:37
    金9: *相談あり -> 2/3, 13:05
    金10: 1/18, 23:57 -> 1/19, 14:12
    金11: 1/18, 22:49 -> 1/30, 10:54

    >探索アルゴリズム2
    月2: 1/14, 18:26 -> 1/18, 16:58
    月3: 1/13, 04:22
    月4: 1/14, 23:34
    月5: 1/12, 16:34
    月6: 1/14, 19:24 -> 1/17, 19:00
    月7: 1/14, 23:41
    月8: 1/14, 18:56
    月9: 1/14, 22:54
    金2: 1/18, 23:00
    金4: 1/18, 17:00
    金5: 1/18, 18:29
    金6: 1/18, 20:21
    金8: 1/18, 23:51
    金9: *相談あり -> 2/3, 13:12
    金10: 1/18, 21:21
    金11: 1/18, 23:23

    この文脈におけるモデルって何?

    金曜日, 12月 25th, 2015

    2年次の学生実験はオムニバス形式ということもあって、担当する週としない週があります。そのため2年次の実験がない期間は比較的自由時間が増えるのですが、逆に担当する週は準備やら(終わった後のレポート採点やら)で忙しくなります。ここ数年はデザインスクールが11月末にあるのでその前にはなるべく授業入れたくない(自由に動ける時間を増やしたい)ということで、勢いそれが終わった12月以降に学生実験が集中しちゃってます。ということで、今月4週間は実験だけで毎週6コマ。ま、学生への何かしらの切っ掛けになっててくれればそれで良いんですが。


    例年とほぼ同じ内容ではあるけども、全く同じということはなくテコ入れしています。タイトルとやや(?)違うことやってたりしますが、よりやりたいことにシフトしてきてるつもり。具体的には機械学習寄りの話と、より抽象的な話としての「モデル」という考え方についての内容に触れるようになってきてます。というのも、学科の学習教育目標で次のような文脈で「モデル化」という話が出てきています。

    [課題解決能力と創造性] 情報工学の理論及び技術を総合的に活用し、与えられた制約下で創意工夫により課題を解決する。
    G-1: 問題を分析し、モデル化を行い、課題を適切に設定する。
    G-2: 与えられた制約の下で、修得した知識と技術を総合して課題を解決するとともに、解決法を適切な評価尺度で評価する。
    G-3: 課題解決において創意工夫を行う。

    学習教育目標から引用)

    その割には、(授業とは無関係に年次指導の一貫としてやった個人面談で話を聞く限りでは)モデル・モデル化という考え方をほぼ誰も説明できないという事実を目の当たりにしちゃいました。それを放置するのはとても忍びないというか我慢ならないので、実験・演習を通してモデルという言葉や考え方に慣れてもらうようにしてみました。

    一度や二度やったぐらいで学習効果があるかはともかく、積み重ねの一貫として実験でやってみてるつもりです。何かしらこういう教育自体を実験として設計すると論文にまでできると、理想的何打炉なとは思いつつ、重い腰はあがりません。(駄目)


    CXD7P3LUMAAWsiS CXEDrrEUkAELS1O CXDGm-TVAAAROO9.jpg-large

    TLで学生がおいしそうなケーキを作ってたので我慢ならずに美味しい物を食べて帰宅。あ、学生から頂いたスターウォーズなチョコも美味しかったです!

    暑い!!

    火曜日, 12月 22nd, 2015

    昨日時点での今日の予報最高気温26度のところ、それに準ずるぐらいの気温までは上がってしまって。日中は長袖シャツを腕まくりしても足りず、窓開けて空気入れ替えするぐらいしないとやってられないぐらいには暑い一日でした。雪降るぐらいには冷えるのは無理だとしても、せめて冬らしく冷えて欲しいのだが。。

    データマイニング班は今日が年内最後。今の所どのグループも例年よりは進み具合が早いかな?。多分。そう判断している理由は、データづくりを一度以上やってみて何かしら試行錯誤を繰り返す段階に入ってるグループが多いから。例年だとまだそこまで辿り着いていないか、もしくは辿り着いてもいないことがあるのだよな。ただ、試行錯誤する饒波良いとして、途中の結果を残すという所までは気が回っていないようにも見えます。研究活動に限らず、成果を蓄積して前進するという一般的な活動の練習という点ではそこら辺の指導もするべきか。でも、もう年明けですね。