Archive for the ‘日記’ Category

(Java本)全部を取り扱う都合の良い本は無さそう

火曜日, 5月 17th, 2016

1年次後期に使うJava本探しにジュンク堂であれこれ探してみました。那覇店にも洋書の専門書があったような気がしたけど、今はもうなさ気か。ということで今回は和書のみのチェック。隣の棚にAndroid本もあって「そっちでJava&オブジェクト指向導入するのもありか?」と数冊眺めてみましたが、やっぱりなしだな。達成目標に対して回り道過ぎるので。

オライリー棚とか一部にJava関連がある棚含めて4つぐらい棚をチェックしたところ、大雑把に分けると次のようなタイプに別れるのかな。跨ってるのもあるとして。

  • (1)Java言語解説書(言語仕様解説書)
  • (2)特定機能についての解説本
  • (3)取り敢えずコード書けることを目指したチュートリアル本
  • (4)オブジェクト指向開発解説等、設計中心本
  • (5)デザパタ本
  • (6)リファレンスやクックブック的な本
  • (7)周辺知識本

「1冊だけ」という縛りを入れると授業で扱いたいこと(オブジェクト指向プログラミング解説+Java8+コード多め)を一通り触れてるものは無さそう。普通はそうだよね。今やってるPython本もそれ踏まえて足りないところは補う形で使ってるし。何を補うかという点からは、年々updateされる言語最新事情についてはひとまず置いておく(補足対応する)というのがベターかしら。

Java言語仕様ついては基本を抑えるぐらい、オブジェクト指向プログラミング解説とコード例多め」を基準とすると、眺めた書籍の中での候補はこんな感じ。良さそうな順。

帯に「完全独習テキスト」と書いてるだけあって予習復習に向いてそうなのは「新わかりやすいJava入門編」。一方で楽しんでやれそうなのは「スッキリわかるJava入門 第2版」かな。特に「スッキリ」の方はスタックトレースの読み方、エラーメッセージ一覧、構文リファレンスとか痒いところも整理してくれてるのは良さそう。ただし全体的に「対話やり取り」での説明が多く、ぱっと見でどこにに何書いてるかが分かりにくそうなところが難点に感じます。最初から一通り通すだけならそれで良いんだけど、復習するのが辛そう。(復習考えると前者のほうが良さそう)

あと、Java言語プログラミングレッスン第3版が、まだノーチェックで気になる。


少し違うアプローチとして、UMLを交えて設計中心で話が進む「UML&Javaオブジェクト指向開発」も、選択子としては捨てがたい。別の講義で、モデリングと設計があるからそっちに任せるので良いとは思うんだけど。

名前だけ聞いたことがあった「EFFECTIVE JAVA 第2版」はどうかと思ったんですが、これは一度Javaを勉強した後で参考にするノウハウ集なのね。

1年次後期に使うJava本?

金曜日, 5月 13th, 2016

そろそろ後期の授業・プログラミング2の教科書選定するかということで、今週末にでもジュンク堂に行こうかと。オススメありますか?>先輩の皆さん

ちなみに私自身は Java 歴ほぼ0に近いです(ぉぃ)。学生の頃、Javaが出初めの頃にApplication, Applet作って遊んだぐらいか。Application はほぼC言語丸写しでどこにJavaらしさがあるんだ、というソースになってたはずですがw

そんな訳でJava大先輩からのオススメがあればWelcomeです。


去年までは山田先生が担当してて、最後の年は「本格学習Java入門 [改訂新版]」を指定してたらしい。これが良さげなら踏襲するのもありだよね。2011年なので結構古いのだけど、受講済み学生(現2年次)としてはどんな塩梅でしたか?

目次を眺める限りでは基本を抑えつつ、いくつか応用編を組み込んでるらしい。古いだけあって例えば(必要かは置いといて)GenericsやAnnotationあたりの話は書かれてないのかな。一方で、足りない分はオフィシャルドキュメントで補うという形もありそうではあるか。


<対象学生の背景>

  • 対象は1年次。
  • 前期にPython3(留年してる学生はC言語)でのプログラミング経験はあるので、一般的な構造化プログラミングぐらいの知識は既に勉強済み。
  • 一方でPythonしかやってないと「コンパイラ」の存在を知らない。

<教えたい知識の候補>
上記を踏まえると、、、コンパイラ、JavaVM、オブジェクト指向、クラス(軽い話はPythonでもやる予定)、継承、Absract/Interface、Annotation、Generics、といったJava話をメインにする方が良いのかしら。


教科書は置いといて、去年の時点で考えた授業計画叩き台的には次のようになってます。

第1回: プログラミング1の振り返り,インタプリタ言語とコンパイラ言語,静的な型付け,環境構築,実行
第2回: Javaの基本知識(変数と定数,演算子,型変換,配列,制御文)
第3回: コメントとコーディング規約
第4回: バージョン管理,pull request と merge,diff
第5回: ユニットテストとjarの利用
第6回: Gradleによる構成管理
第7回: 振り返り1(プログラムの実行,バージョン管理,ユニットテスト,コード読解)
第8回: オブジェクト指向1: クラスとインスタンス,コンストラクタ
第9回: オブジェクト指向2: 関数 vs. メソッド,処理と情報の隠蔽(カプセル化),継承
第10回: オブジェクト指向3: 多重定義(Overload)
第11回: オブジェクト指向4: 多態性(polymorphism)とオーバーライド,アノテーション
第12回: 抽象クラス(Abstract),インターフェース(Interface)と多重継承
第13回: 例外と例外処理
第14回: Java: クラスライブラリ
第15回: 振り返り2(実践的なプログラミング,継承,隠蔽,オーバーロード,オーバーライド,多態性)

この流れでやれるかどうかはさておき、これがJavaらしい中身になってるかの判断がつかないぐらいには、Javaのことよく分かってないんだよな。

(プログラミング1) 連休明けの内容は「課題への取り組み方・レポートの書き方のデモ」

木曜日, 5月 12th, 2016

GW直前に初めてのレポート課題を出したのですが、友人・先輩・教職員らへの相談含めて頑張ったようです。(GWめちゃくちゃ頑張りましたという報告ありw)

毎週やってるミニテストは趣向を変えて、(他の科目はともかくプログラミング1では)初めてのレポートということもあるので「他の人はどう書いてるだろう?」をやる時間に使いました。自分の学籍番号付近のレポート4件眺めて貰ってそこから良レポートをセレクト。それを隣の人と良さを説明しあってベストレポート1本を互いに検討し、投票。結果としてはダントツで票をゲットした学生が1名、3,4名から投票ゲットした学生が9名、それ以外にも1,2票ゲットした学生が20名弱でました。

投票するだけではなく理由も記入してもらったところ、

  • エラーについて詳しく調べられていた.また,web検索で色々な関数を調べて使っていた.
  • 整数以外を入力した際に整数を入力するように促すようにするなど私には思いつかなかった気遣いがあって優れていると感じたため。
  • 実行コードや結果などを四角で囲っていたのがとても見やすかったです。
  • 失敗例を漏らさず書いており、正解へのアプローチの過程がしっかりできていると思う。ファイル形式をPDFなど簡単に見られるようにしてほしかった。
  • しっかり図も踏まえて説明していて、しっかり分析できているから。さらに、より良い、方法を試そうと試みが現れてるなあと思いました。

等、多数のコメントが寄せられました。提出されたレポートはいつでも閲覧できるようにもしてあるので、次回からは良い所を真似て書いてくれることを期待します(ニッコリ)。

一方で、取り組み方への相談も少なくなく。初めてのことなので当たり前なんですが、これをどうにかしたいなということでスライドp.13のような抽象的な話をしつつ、これに基づいて実演しました。課題を読みながら「まずはこの部分について取り組んでみるか」「ここを分割するとこうなるかな」「これなら余り使えばできるな」みたいに考えてることを喋る&テキストに残しつつ、それにもとづいて書いたコードとその結果をそのテキストにコピペ。こうして「プログラミングのプロセスを残そう」という話を最後まで。所々でTips加えて「ヒストリを使おう」「置換しよう」「インデント対応してるエディタだとこういうことできるよ」「Markdownってのがあってね」等など。その結果がこんな感じに。最後らへんはテキスト化端折ってるところもありますが、「後でレポートにまとめる」のではなく、「取り組んでる最中から記録に残すことでプロセスが見れるようにしよう」と。取り組み方やレポートの書き方にどれだけ心響く形になったか分かりませんが、大分噛み砕いて実演してみたつもりです。

次回からのレポートがどれだけ質向上するか分かりませんが、相互レポートチェックと実演とで課題・レポートへの取り組み方が何となく分かってくれてたら嬉しいのですが。

P.S.
今はインタプリタ+エディタという形で進めてますが、後でJupyter Notebookも導入してみるつもりです。コピペする必要もなくなると思うので。

なんとなく聞き飛ばしちゃう・読み飛ばしちゃう癖をなくして、一歩ずつ土台を積み上げる練習をして欲しい

火曜日, 5月 10th, 2016

UdacityのDeep Learningをやってみようということで、複雑研全体ゼミ2回目が終わりました。

冒頭部分はイントロダクションの章だけあって比較的容易に進んでますが、「重みって何?」「線形結合って?」とかあれこれ突っ込んでみると分かってるような分かってないような。初めてやることなら知らなくて良いんですが、可能な範囲で調べたり、考察してみて欲しいな、とは思います。いや、調べてる学生もいたか。ただ「辞書をひく」ぐらいの調査に留まってて、その解説の上辺をなぞってるぐらい。それでもやってるだけ偉い。1つずつ知識を増やしていこう。調べ方・考え方を学んでいこう。

学生自身からの質問もそこそこあって良かったですが、もうちょっと活発に討論して欲しいかな。私が話してばかりだと片手落ちなので。

今日はwhile文の演習でガチャシミュレータを用意してみた

月曜日, 5月 9th, 2016

プログラミング1の担当をすることになってから、「学生の頃こうだったなー」というのをよく思い出してます。当時は「自分のパソコン」とかそんなもの無かったので、基本的には学内で課題。これは「皆とやる」とかそういう要因ではなくて、環境制限のため。そういう環境だったので今の学生よりも触れる時間は短かったはずですが、逆にPCルームという形で何やるにしても集中しやすかったからか、課題はちょちょいで済まして比較的「お遊びしてる」時間もあったと思います。そこの境界ははっきりしないのだけれど、やってる本人的にはかなり遊んでました。

「printf(“Hello world!¥n”;)」でも楽しかったし、そもそもタイプするだけでも楽しかった。コンピュータに触れてる感があって。そういう意味ではやっぱり「24時間自由に触れなかった」という制約がハングリー精神に繋がったという側面はあったのかも。

if文やループを覚えてからはミニゲーム作成に精が出て。
関数を覚えてからは main() 関数から何か一つ関数コールして終了するみたいなことしたり。
ポインタは何がなんだか分からないままだった気がしますが、アドレス見て「あ、メモリってこういうことか」と感動したり。
デバッガで処理途中の状態確認できるの見て震えたり。

そんなこんなで道具を少しずつ増やしていく都度あれこれ遊んでました。今の私がやってる授業でももっと遊んで欲しいという気持ちはありますが、今はまだそこまで余裕が無い学生が多いかなー。演習含めてあれこれ詰め込みすぎかしら? でも一人でやるのと、ペアでやるのとではまた違う勉強になるからなぁ。ということで今回は演習課題あれこれ作りまくっております。

プログラミング1の演習チェックでの共通項

金曜日, 5月 6th, 2016

過半数までは届いてないと思いますが、圧倒的に「変数名をてーげーに付ける」ケース多し。設問文の悪さも影響してると想像しますが。それにしても「enemy = ‘naltoma’」とするところを「enemy = (‘naltoma’)」としてるケースもそこそこあって。この書き方はどこを参照してこうしたのだろう。タプルはまだ教えてないし、例題にも出てきてないから、丸括弧は関数使う時しか使ってない気がするのだけどな。

あと、フォントサイズが異常に小さい(7.5ポイントとか)とか、色盲テストさせられてる(背景色と文字色の組み合わせがよろしくない)ケースも結構あります。文字サイズはともかくとして、よくその色で作業する気になるな。。そういうのをセレクトする人がスライド作るととんでもないことになりそう。そういう人には配色図鑑(?)的なものを見せると良いのかしら。画像検索で良いかもだけど、身近で触れてるものによろしくないのが多いとそっちに引きづられそう?

レポート課題の方は、私・先輩らを頼ってどうにか仕上げてる学生が出始めてます。考え方・取り組み方の例示(問題を分解して考えるとかのデモ)を兼ねて次回はじっくり時間取ろうかと思ってたけど、そこまでやらなくても良いのか悩むな。

プログラミング1の相談対応しながら実験1のレポート採点終了

月曜日, 5月 2nd, 2016

GW前にレポート締め切りがあると、GW中に採点できてなかなかいい塩梅です。疲れるけど、混雑嫌いなので適度な近場巡りでお仕事するのが例年の過ごし方。いや、今日は平日なんだけど。

実験1はほぼ毎週異なるテーマについての実験レポートが課されるので割りと大変な授業です。なんですが、独自課題やって良いよと書いてるとかなりハマる学生がたまにいて。今回もオリジナル課題で30ページ強書いて提出してる学生がいました。変態ですね(褒め言葉)。

採点方法は「基準点設定して、内容に応じて加点減点」してることもあって、100点を超えることが割りとあります。超えた分は自己満足にしかならないんですが、後期の実験2では私担当が2回あるので、「2回で合計200点満点」とかやってたりします。こっちだとたまに100点超えることで嬉しい人が出てきます。(それでも片方で超えちゃう人はもう片方も超えがちなんですが)


採点中に1年次からプログラミングの課題について相談が。分からないことを質問しに来るのは偉い。必要な材料は一通り教科書+授業で用意していますが、「道具が揃ってるからといってどう使えばよいか分かるわけじゃない」のはそうだよね。個々の道具をどう使えばよいかという問題と、それらの組み合わせ方を考えるという道具側からのアプローチと、逆に問題側からできるレベルにまで分解していくアプローチと。どんな方法でも良いけどやっぱりいきなり正解に辿り着けるわけでもなく。そのことは分かっているので、過程をレポートとしてまとめて欲しいです。

とか書いてたら、別学生からメールでも質問来ました。よしよし。

実験レポート採点で疲れた合間に作ってみた

日曜日, 5月 1st, 2016

diff

例年コピペレポートが数件見つかるのですが、そういうレポートに遭遇すると「採点時間使わせるなよ」と怒りゲージが溜まるか、ダークサイドに転がり落ちそうになります。まだ採点途中ですが、精神安定のために簡易なコピペチェッカーを作ってみました。シェルスクリプトな実験だったので、シェルスクリプトで。

流れとしては次のようになってます。細かいこと無視して重複行チェックを閾値調整してるだけ。空白含むファイル名の対処とか懐かしい。

  • レポートファイル(texファイル)の一覧生成
  • 二重ループにして全組み合わせをチェック
  • コピペ判定は「ファイルの中身をsort + uniqしてから共通行数をカウント」して、これがある閾値以上ならイエローフラグ立てる
  • 見やすいように重み調整してGraphvizで可視化

注意: これはあくまで共通してる行数をカウントしてるだけ。例えば texファイルのヘッダ部分や見出し等、同じ課題でテンプレートファイルも用意してるので、様々なところで同一行が出てきます。閾値もあまり良く考えずに見やすい範囲で調整しただけなので、「今回の結果=コピペ」というわけじゃない。あくまでも共通行が多いよ、というだけの出力です。

例えば、大きなクラスタの中央にe155727さんがいますが、これはtex勉強会主催者でその流れでテンプレート配ってたんだよね。共通行が多いのは内容のコピペじゃなくて、テンプレート。これは仕方ない。

document開始行以降で重複チェックするだけでも質が上がりそうですが、ま、目安なのでこのぐらいで。というかそこまでシェルスクリプトで書きたくないし、目視抽出してたコピペ関係も出てきてるので、とりあえず満足。

UnlimitedHandが届いた

金曜日, 4月 29th, 2016

ジェルパッドがかなり使いづらい(簡単に本体から剥げる+指や腕にくっつきすぎる)のだけど、これってどういう役割を果たしてるのだろう。モニタリングしやすくしてる? 本体からの剥がれやすさを踏まえると、腕に何かジェル状のものを塗る方が良さそうにも思えます。それとも沖縄の湿度の高さが問題なのかしら。

[5/2追記] ジェルパッドの件ですが、Step2で本体側のシール剥がすのを忘れてたという罠。こちらの問題じゃん!


IMG_1673

H2LのUnlimitedHandが届きました。2つゲットしてたりするので、うちの研究室内で触りたい人いないなら後で誰かに貸すことも視野に入れてます。リアルタイムにsensoring + operatingを繋げるなら2台ないと駄目だよなという意図も含めての2つだったりしますが(できるのかは確認してませんが)。

IMG_1674 IMG_1675

使用前にUSBケーブル(付属)で充電して、ジェルパッドを付けるらしい。1台に2セット分のジェルパッドが付属してましたが、どのぐらい持つのかしら。通電できて粘着性のあるもの、ということだと思うけど、通電具合が劣化しないなら粘着性落ちても外から何かで固定しても良いだろうし。

購入者(というよりは支援者と呼ぶのが適切?)にはデベロッパー・フォーラムへのログインアカウントが別途メールで届いてます。installationとかの記事は一通り認証無しで見れるみたいなので、ここのフォーラムで書き込みするためのアカウントってことなのかな。

どんな感じで使うのか写真とってましたが、公式ドキュメントにも写真付きで用意してくれてるのね。ということで取り敢えずデモを目指して試してみることに。

STEP 2. Setup the UnlimitedHand

この時点でめげそうに。ジェルパッドを貼って台座に置くだけなんですが、このジェルパッドがとても貼りにくい。両面にフィルムがついてて最初に青いシールを剥がすのは問題なし。次に空気抜くようにプレスするのもOK。次に反対側のフィルムを剥がすんですが、これが難しい。簡単に本体側から剥がれる。手で触ろうとすると指にくっつきすぎるし、フィルム越しにおしても本体側にちゃんと付いてくれない、、。えいやで何とかしましたが、この調子だと数回でジェルパッドさんお亡くなりになりそうな気がするな。

STEP 3. Install the Arduino IDE

Ardino IDE使うらしい。用意されてるコード例(ライブラリ)のangleを動かしてみると、3軸の角度が出力されました。x軸が本体前方の角度、y軸が本体横方向の角度、z軸はなんだろう。マイナス400とか超えるんだけど計測時間か?コード見る限りでは3軸角度っぽいのだけど、数値が置きっぱなしでもマイナス方向に増え続けてるな。ちなみに電源は長押しで付きました。(最初の説明には書かれてなかったけど、別のところに書いてた)

USB接続だと「/dev/cu.usbserial*」として認識されるらしい。IDEからはそれを指定してからコンパイル&本体へダウンロードすることになります。

Connecting to the device via Bluetooth

デフォルトではUSBケーブル接続になってるので、これをBluetooth接続に切り替えてみよう。一度ペアリング設定する必要があるようだけど、USBケーブルで刺したままだとBlutooth検索に引っかからず。ケーブル抜くと見れて、ペアリングできましたがその後がうまく動かず。暫くするとペアリングいつの間にか切れてたり。ちょっと癖ありそうです。確認できた範囲では「ケーブル刺さってない状態でBluetooth検索で見つかると、ペアリングできる」でした。

うまくペアリングできてると「cu.RNBT-*」というデバイスファイルで認識できてます。これをArdino IDE側で指定する必要がありますが、ArdinoもUSB接続で使ってたら一度立ち上げ直したほうがスムーズに使える気がしました。(IDEが /dev/cu.usbserial or /dev/cu.RNBTのどちらかを掴みっぱなしにしてしまうことがあるっぽい?)

整理すると、
「Bluetooth接続したいなら一度ケーブル抜き差しして、抜いた状態でBluetooth検索で見つけて、その状態でペアリング設定する。」
「ペアリング設定してからArdino IDEを起動し直す。」
ぐらいで良さそう。

で、Bluetooth接続できたので腕に装着してあれこれ試してみましたが、案の定ジェルパッドが腕にくっついて外れにくかったり、聞き手に装着してるとそれを固定するのが難しかったり。うーにゅ。


コード例がいくつかあるのだけど、軽く眺めた限りでは基本的に「本体がセンシングした値を出力する」だけで、指を操作する方向は無さそうに見えました。ひょっとしてセンシングだけなんだろうか。プレスでは「腕に巻くだけで直感的にゲームを操作でき、ゲーム内の触感も得られる新技術が搭載された「触感型ゲームコントローラUnlimitedHand(アンリミテッドハンド)」と書いてるから、本体から指示出すこともできそうだけど、コード例がまだなのかな。

あ、こっちのサイトにUnityのデモやらリファレンスやらを公開してるのね。でもひとまずここまで。

主にジェルパッドが原因でやりたいことに到達できるか怪しいw

ちなみに当面やってみたいことは、お絵かきする人の手の動きを計測&保存して、それを再生する形でお絵かき勉強。かわいい紅莉栖描きたいじゃない!

(プログラミング1) 3週目は予定通り演習時間がメイン

木曜日, 4月 28th, 2016

今日は演習時間60分近くとったのだけど、あちこちで手が挙がる。先輩らが大量に居てくれて大助かり〜。何かの機会にご飯でも食べに行きますか。

prog1-w3

3週目の内容はこんな感じ。毎週の共通フレームとして、

  • お告げ: 何かしら新入生に向けた言葉。
  • ミニテスト: 復習と予習について簡易チェックし、結果を見ながら補足説明。
  • 解説: 新しい内容についての解説。主に教科書への補足。
  • 演習時間
  • 宿題: 教科書読み指定+α。

という流れで進めてます。先週までは解説時間が長かったので、今回は「文字列、if文、関数」についての簡易的な説明に留め、先週やり残した演習からやってもらうことに。

予定通り今回は演習時間を眺め(60分弱)取れました。変数使ってみる演習1〜4と、if文と関数を使う演習5。進捗的には予想よりは遅め。過半数(6割弱)は演習2終了したぐらい。早いペアは演習3まで終了(2割弱)。遅いペアはまだ演習1が終わったぐらい(2割弱)。

これはいろんな理由が被ってるようで、
(1)タイプ(キーボード操作)が遅い(要練習)、
(2)問題文が練れてなく意図解釈で戸惑ってる、
(3)演習内容は復習のつもりだけど、まだまだ理解不足(演習で手を動かしながら悩み、1つずつ理解プロセスを歩ませるしかなさそう)、
(4)そもそも進むスピードが早い、

(5)ペアプログラミングが機能していないグループもある(喋らず、個別に悩んでるグループあり)、
といったところかしら。

問題文が練れてなくて解釈難しいのは100%私のミス。申し訳ない。質問対応でなんとかしてみてるつもりですが、見逃してる部分も多々ありそう。

進展スピードは、今週が3回目の授業で、そのうち1回目がガイダンスだったことを考えると、実質的には今日を含めてまだ2回しか具体的な中身をやっていません。その2回で、インタプリタ、スクリプト、演算子、変数、代入、型、文字列、if文、関数、マニュアル、命名規則、といった事柄に触れててアップアップ気味かも。去年までの例だと、今の時期ってまだprintf()してるぐらいなんだよね。

詰め込み過ぎかもしれないけど、各々の道具を単体では面白いことができないので、ループぐらいまでは次回で触る予定。予定は未定ですが、そこから後は復習を兼ねた演習を増やす形にした方が良さげかなー。