Posts Tagged ‘3年次’

(Ref/提言) 魔法の 10000 時間

月曜日, 8月 10th, 2009

(出典: あなたも「天才」になれる? 10000 時間積み上げの法則

自分も考えてみるに、「どんなデータでも解析できる」「研究に必要な基礎技術は全部身に付いた」と自信が持てるまでには、修士から数えて約8年かかりました。この集中した時間の投入があったからこそ、なんとか一人前になれたわけで、これ以外には方法はなかったように思います。

しかし「なんだ、それではやはりダメじゃないか」「自分には時間がないから無理だよ」と決めつけるのは早いと思います。10000 時間の積み上げは、なにも 10000 時間経たないと変化がないと言っている訳ではなく、常に上昇しながらの 10000 時間だからです。

もし、あなたが一生を費やしても実現したい、大成させたいと願っているスキルがあるのなら、次の 10-12 年、毎日何らかの形でそのスキルを磨く「仕組み」を取り入れるのは有効かもしれません。

似たような事例は他にもいろいろと出ていますので,それぐらい普遍的なことなのでしょう.

そして,上記引用先でも触れられていますが,仮に1万時間を10年かけてやろうとすると1日3時間弱で達成できますが,仕事をしながら毎日3時間別のことのために確保し続けるのは容易ではありません.だからこそ【学生時代の積み上げがいかに大切かということを表しているといっていいと思います。(同出典)】なのです.

あなたは人生をかけてやり遂げたいものがありますか?
もしあるのなら,今からどのぐらい時間を割くべきか考えて行動に移すべきです.
もしないのなら,まずは夏休みをそれを探すための時間に使ってはどうですか?

関連URL

夏休みの(継続して実行する)目標設定のススメ: プログラミング編

金曜日, 8月 7th, 2009

学生の皆さんはそろそろ夏期休暇に入りますね.
だいたい40日ぐらいになるようですが,この機会に何か一つで構わないので続けて頑張る目標を見つけ,継続して実行しましょう!

どんな苦手な物であっても,文字通り毎日少しで構わないので続ける事で得られる物があります.
何でもやらないまま放置しているとあっという間に失ってしまいますが,継続することで定着率が大きく変わります.

以下,1〜3年次向けの「夏休みの課題」設定例です.


(Opinion) プログラミングが何やってるのかサッパリ分からない!

ターミナル上で動かすことを前提としたゲームで構わないので,ミニゲームを作ってみましょう.

  1. まずはポーカーのようなトランプゲームや,数当てゲーム,バックギャモンのようなボードゲーム等,何かしらゲームを一つ選びます.
  2. そのゲームをどのように実行したいか,ユーザとしての立場から使い方を設計します.
  3. ユーザを希望通りに遊ばせるために,システム側がどのような入力を受け取り,どのように処理し,どのように出力すべきかを検討します.
  4. ゲームの開始から終了までの動作フローを整理し,疑似言語やフローチャートでプログラミングします.
  5. 疑似言語やフローチャートとしてシステム全体を描く事ができれば,その設計図を元に一つずつ機能を実装&テストを繰り返していきます.
  6. 全ての機能を実装し終えたら,システム全体を通した動作確認を行い,何も問題が出なければそれで終了!

このように,「プログラミング」はシステム開発全体における一部分でしかありません.何か作りたい物を最初に決め,その詳細を検討してから実現に向けて取り組む事で,少しでもプログラミングの意味が見えてくるのではないでしょうか?

(Quiz/3年次) 情報工学実験3/4: Apacheのログ読み

水曜日, 8月 5th, 2009

ApacheによりWebサーバを運用すると,デフォルトの設定では /var/log/httpd/ 以下にアクセスログやエラーログ等のロギング情報が保存されることが多い.

以下は,NAL研Webサイトのトップページにアクセスした際に記録されたアクセスログの例を示している.

(/var/log/httpd/access_logより抜粋)
218.113.224.10 – – [04/Aug/2009:18:36:46 +0900] “GET / HTTP/1.1” 200 7354 “-” “Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_7; ja-jp) AppleWebKit/530.19.2 (KHTML, like Gecko) Version/4.0.2 Safari/530.19”

以下は,同じくNAL研Webサイトのトップページにアクセスした際に記録されたエラーログの例を示している.

(/var/log/httpd/error_logより抜粋)
[client 218.113.224.10] PHP Notice: Undefined index: value in /var/www/html/index.php on line 130
Tue Aug 04 18:36:47 2009] [error] [client 218.113.224.10] File does not exist: /var/www/html/item/css/images, referer: http://www.nal.ie.u-ryukyu.ac.jp/

上記を踏まえて,以下のクイズに答えよ.

  • access_log として出力されている情報より,読み取れる事実を列挙せよ.
  • error_log として出力されている情報より,読み取れる事実を列挙せよ.また,それらのエラーに対する解決策としてどのような方法が考えられるか,検討せよ.
  • /var/log/httpd/以下にログが保存されていなかった場合,どのようにすればログファイルを探すことができるだろうか?

(Quiz/3年次) 情報工学実験3/4: コードリーディング

水曜日, 7月 29th, 2009

(出典: GNU GLOBAL ソースコードタグシステム

GNU GLOBAL ソースコードタグシステム

GNU GLOBAL(gtags)は、ソースコードのタグジャンプです。簡単に複数のソース中から関数や、変数の定義元/参照元を見つけ、その箇所に移動することができます。

ctags、etags(cygwin や Linux に大抵標準で含まれています)と同じ働きをしますが、gtags はさらに強力な機能を持っています。大量の他人の書いたソースを読むプログラマには、必須だと思います。

コードを書く際,ゼロから書き始めるだけでなく他人のコードを読みながら開発を進める状況(開発の引き継ぎ,拡張,バグ修正,etc.)が多々ある.

上記を踏まえて,以下のクイズに答えよ.

  • 他人の書いたコードを読む際,どのように読み進めれば良いだろうか?
  • global(gtags) は,上述の通り「簡単に複数のソース中から関数や、変数の定義元/参照元を見つけ、その箇所に移動する」ことが可能である.これはどのように実現しているのだろうか?
  • global(gtabs) をインストールし,実際にソースを読み進めてみよ.特に読みたいソースが無いのであれば,例えばFreeBSDのlsで試せ.

zshのススメ

金曜日, 7月 24th, 2009

金曜日はクイズじゃなくていろいろ紹介でもする曜日にしてみるテスト.
実体としてはその週毎に異なると思いますw

閑話休題.

栄えある(?)1回目は「zshのススメ」.
何はともかくやってみるべし.


Step1: zshをインストールする.

EasyPackage.app を起動して,shells/zsh をインストールしましょう.
これで分からない人は,以下のようにしてください.

  1. EasyPackage.app を起動.
  2. 上部メニュー「パッケージメニュー」から【一覧を取得】を選択.「Log」にいろいろ出力されると思いますが,2009年7月時点で以下のように local と latest のバージョン番号が 0.2.26 になっていればOK.もし異なっていたら,上部メニュー「EasyPackage」から【EasyPackageの更新】を選択しましょう.

    local epkg ver.0.2.26
    latest epkg ver.0.2.26

  3. アプリケーション内の左パネルから[shells]をクリックし,右パネルに表示される[zsh]を選択.
  4. 上部メニュー「パッケージ」から【インストール】を選択.


Step2: 動かしてみる.

漢のzshを開いて,「第24回 グッバイ野郎ども! コピペではじめるzshファイナル」から設定ファイルをコピペして動かしてみるべし.

これで分からない人向けの解説.

  1. 黒背景で表示されている「リスト1 コピー&ペースト対応${HOME}/.zshrc ファイル」をコピー.
  2. emacs でファイル .zshrc を新規作成する.

    prompt> emacs -nw ~/.zshrc

  3. 開いた .zshrc に,さっきコピーした設定ファイルをペーストし(張り付けして),保存する.
  4. zsh を起動する.仮起動するだけなら以下のようにするだけです.

    prompt> zsh


Step3: 何が凄いのか.

まずは漢のzshの第1回から3回ぐらいまでを読んでみましょう.

これで凄さが分からない場合には,ヒストリ機能の凄さを味わうために取りあえず以下の手順1〜手順3を試してみてください.

(手順1) 「test」と書いたhoge.txtを作成し,Webサーバにアップする.

accountは各自のアカウント名(e095700など)にしてください.

prompt> emacs hoge.txt
prompt> rsync -auvze ssh ~/Sites/ account@www.ie.u-ryukyu.ac.jp:~/public_html/

以下のように暗号化の為に RSA キーを使うかの確認が始まりますが,必要な事ですので yes と答えて接続してください.

The authenticity of host ‘www.ie.u-ryukyu.ac.jp (133.13.48.7)’ can’t be established.
RSA key fingerprint is xx:xx,,,xx.
Are you sure you want to continue connecting (yes/no)?


(手順2) ファイルがアップロード出来た事を確認する.

Safari で以下のURLを参照しましょう.test と表示されますか?

http://www.ie.u-ryukyu.ac.jp/~account/hoge.txt


(手順3) ファイルを更新して再度アップロードする.

まずは hoge.txt を開いて,test2 にするなり少し編集して保存しましょう.

prompt> emacs hoge.txt
prompt>

 ここで,通常のシェルでヒストリを利用するには「カーソルキーで上(もしくは Ctrl^p)」を押したりします.今みたいに「ついさっき」使ったばかりのコマンドであればそれでも簡単に見つかりますが,いろいろ作業しているとごちゃごちゃするし,「1週間前,1ヶ月前」のコマンドだったりする事もあるでしょう.
 そんなとき,zsh であれば「rsync」まで入力してから「カーソルキーで上」を押すと,そのコマンドに関するヒストリだけを遡ることが出来ます.つまり,

prompt> rsync

まで入力してから「Controlキー + P」を押すと

prompt> rsync -auvze ssh ~/Sites/ account@www.ie.u-ryukyu.ac.jp:~/public_html/

青字部分が自動で補完されます.

 もちろん,同じ rsync コマンドを使った異なる履歴(違う引数を指定して実行した履歴)があれば,「Controlキー + P や、Controlキー + N」を押す事で随時遡ったり,前に進んだり出来ます.


関連リンク

(Quiz/3年次) 情報工学実験3/4: プリプロセッサ

水曜日, 7月 22nd, 2009

(出典: Wikipedia:プリプロセッサ

プリプロセッサ(preprocessor)とは、一般にある処理を行うソフトウェアに対して、データ入力やデータ整形などの準備的な処理を行うソフトウェアのことである。特にコンパイラに対して使うことが多く、ここではこのことを中心に述べる。
(中略)
コンパイル処理において、プリプロセッサ(preprocessor)とは、コンパイラがソースコードをコンパイルする前に、一旦ソースコードに処理を施すためのプログラムである。

上記を踏まえて,以下のクイズに答えよ.

  • C言語における「ファイルの読み込み (including)」に相当するプリプロセッサの利用例を示せ.
  • 同様に,「マクロの展開(文字列を、あらかじめ定義された規則に従って置換する)」に相当する利用例を示せ.
  • 同様に,「コンパイル条件によるソースコードの部分的選択」に相当する利用例を示せ.
  • このような機能が実現出来ると,何が嬉しいのだろうか?検討せよ.

(Quiz/3年次) プログラミング3/4: テスト駆動開発

水曜日, 7月 15th, 2009

[動画で解説]和田卓人の“テスト駆動開発”講座: 第2回 「テスト駆動開発」とは何か?より)

このWeb連載では,テスト駆動開発の啓蒙,つまりテスト駆動開発の紹介と説明を行っていきたいと考えています。そのためにはまず,「テスト駆動開発」という言葉の説明をしなければなりません。

テスト駆動開発は,よく略されて「TDD」と呼ばれます。これは「Test Driven Development」の略です。Drivenを「駆動」と訳すので,「テスト駆動開発」となるわけです。まずみなさんにテスト駆動開発とはどのようなものなのかを説明するところから,この連載を開始します。

「テスト駆動」と同じ意味で用いられることが多い用語に「テストファースト」がある.特に後者では【モノを作るよりも前に,まずテストから着手する】という点でそれまでの開発スタイルに対して大きな衝撃を与えた.

上記を踏まえて,以下のクイズに答えよ.

  • 「テスト」とは何だろうか?
  • テスト駆動やテストファーストの利点は何だろうか?
  • 同様に,欠点は何だろうか? それとも,欠点の無い理想的な開発スタイルだろうか?

(Quiz/3年次) 情報工学実験3/4: OSS (ex. PHP) の導入,パッケージ管理システム

水曜日, 7月 8th, 2009

PHP 5.3 リリース 多数の機能追加、140以上のバグを修正 : CodeZineより)

 PHPグループでは6月30日(現地時間)、PHP 5.3.0をリリースした。PHP公式サイトよりダウンロードできる。

 今回のバージョンアップにより、名前空間のサポートや遅延静的束縛(Late Static Bindings)、ラムダ関数およびクロージャなど、数多くの機能追加と140以上のバグフィックスが施されている。変更内容の詳細は、PHP 5 ChangeLogから確認できる。

PHP とは「PHP: Hypertext Preprocessor(ピー・エイチ・ピー ハイパーテキスト プリプロセッサー)とは、動的にHTMLデータを生成することによって、動的なウェブページを実現することを主な目的としたプログラミング言語、およびその言語処理系である。(Wikipedia:PHPより)」であり,オープンソースソフトウェアとして提供されている.そして,オープンソースソフトウェアの(有名どころの)多くは,コンパイル済みのパッケージが用意されており,それをダウンロード&解凍するだけで利用する事が可能である.

上記を踏まえて,以下のクイズに答えよ.

  • 情報工学科では Mac OS X 用のパッケージ管理システムとしてEasy Packageを提供している.Easy Package 用のパッケージを作成する方法を調査せよ.
  • 新たに公開された PHP5.3.0 の Mac OS X 用のパッケージを作成せよ.この際,学科内ではまだ Mac OS X 10.4.x (PPC, Intel), 10.5.x (PPC, Intel) といった環境が混在しているため,これらに対応出来るパッケージを用意するよう注意する事.
  • 作成したパッケージの動作検証をせよ.どのようにすれば良いだろうか?
  • 作成したパッケージを配布出来るように公開せよ.どのようにすれば良いだろうか?

(Quiz/3年次) アルゴリズム論: 性能評価

水曜日, 7月 1st, 2009

Wikipedia:アルゴリズムより)
アルゴリズム(英: Algorithm)とは、数学、コンピューティング、言語学、あるいは関連する分野において、問題を解くための効率的手順を定式化した形で表現したものを意味する。算法(さんぽう)と訳されることもある。

上記のように「問題を解くための効率的手順を定式化した形で表現したもの」であるため,そのアルゴリズムの良さを評価するには如何に効率的かを可能な限り客観的な視点で判断出来るように示す必要がある.

上記を踏まえて,以下のクイズに答えよ.

  • 評価指標としてどのような基準が考えられるだろうか.言い換えると,効率の良さを示せる基準にはどのようなものがあるだろうか.
  • 客観的な評価を示すためにはどのような事に気をつければ良いだろうか.
  • アルゴリズムを提案している学術論文等をいくつか参照し,どのように評価を示しているか調査せよ.

(Quiz/3年次) 情報工学実験3/4: コンピュータ仮想化技術

水曜日, 6月 24th, 2009

情報工学科ではサーバ班が中心となって様々なサービスを提供している.

その一つに180台で構成されるPCクラスタのうち,60台程度を学生が自由に使えるよう確保しており,1台のPC上で複数の仮想OSを稼働させる事で「1人1OS」を利用した各種サービスを構築する事が可能である.(補足: 学科システムの構成や利用方法は適宜更新されており,この記事を書いてる2009年6月時点での状況です.)

このような仮想化を実現するソフトウェアには有償無償を問わず多数の種類があるが,情報工学科では Xen を利用しており,Wikipediaでは以下のように説明されている.

Wikipedia:Xen_(仮想化ソフトウェア)より)
Xen は、 一つのハードウェアで複数のオペレーティングシステム (OS) を並列実行・制御するソフトウェアである。

このお陰で,仮想化ソフトウェアが出てくる前までは「一つのPC(HDD)に複数のOSをインストールしたとしても,同時に起動出来るのは一つのOSのみ」という状況であったが,今では誰でも簡単に複数のOSを同時に起動出来るようになった.例えば,情報工学科では Mac OS X 搭載ノートPCの購入を推奨しているが,このノートPC上でも Linux や Windows を同時に動かす事が可能である.

上記を踏まえて,以下のクイズに答えよ.

  • Xen 以外にどのような仮想化ソフトウェアがあるか調査し,各々の特徴を整理せよ.
  • 情報工学科で提供しているPCクラスタ上(pw上)で,Linux系OSを仮想OSとしてインストール&稼働させるにはどうすれば良いか,調査せよ.
  • 調査に基づき実際にインストール&稼働させよ.