Posts Tagged ‘1年次’

(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/1年次) ソフトウェア基礎演習: ランチャー

月曜日, 8月 3rd, 2009

(出典: Wikipedia:ランチャー

コンピュータ用語では、使いやすいようにファイルやアプリケーションソフトウェアを、ショートカットキーのキーボード操作や、ボタンのクリックひとつなどの簡単な操作で起動できる機能である。近年のグラフィカルユーザインターフェース (GUI) を備えた大抵のオペレーティングシステムに、標準で備えられている機能であるほか、ツールソフトウェアの形で、様々なものが提供されている。

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

  • ファイルやアプリケーションを「ショートカットキーのキーボード操作」で操作できる機能とあるが,具体的にどのような機能があるだろうか?普段使用しているアプリケーションのショートカット機能を調べよ(どのように調べれば良いだろうか?).
  • 「ツールソフトウェアの形で、様々なものが提供されている」とあるが,どのような専用ツールがあるだろうか?
  • 使いやすさは個々人の好みに相通ずるところもあり,万人にとって便利なツールという物はなかなか見当たらない.自分にあったランチャーが見つかるまで,いろいろ利用してみよう

(Quiz/1年次) ソフトウェア基礎演習: 圧縮/アーカイブ

金曜日, 7月 31st, 2009

(出典: Wikipedia:アーカイブ (コンピュータ)

アーカイブ(英:Archive)とは、コンピュータにおいて、複数のファイルを一つのファイルにまとめたファイル、もしくはそれを作成する過程を指す。実際の利用においてはアーカイブと同時にデータ圧縮も行われる場合が多いため、圧縮技術と混同されやすい。

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

  • Linux系OSで良く使われるアーカイブ形式の一つに,tarがある.他にどのような圧縮/アーカイブ形式があるだろうか?
  • 通常は,アーカーブ形式毎に専用の圧縮・展開のためのコマンドが用意されているが,複数の圧縮形式に対応したコマンドもある.各圧縮形式に対応するコマンドは何だろうか?
  • 複数の圧縮形式に対応しているコマンド例としては,先に挙げた tar もその一つである.例えば,filename.tar.gz は gzip 圧縮したもの,filename.tar.bz2 は bzip2 圧縮したものとなる.一方,Mac OS X では Finder 上でダブルクリックしたり,ターミナル上で open コマンドを利用する事で自動で解凍してくれる形式もある.open コマンドで対応している圧縮形式にはどのようなものがあるのだろうか?
  • open コマンドのように,自動で圧縮形式に対応した解凍を行うためには,指定されたファイルがどのような圧縮形式なのかを自動判別する必要がある.どのように判別しているのだろうか?

(Quiz/1年次) プログラミング: C言語におけるデバッグ

月曜日, 7月 27th, 2009

(出典: Wikipedia:デバッグ

デバッグ (debug) とはコンピュータプログラムや電気機器中のバグ・欠陥を発見および修正し、動作を仕様通りのものとするための作業である。
(中略)
デバッグの基本的なステップは以下である。

  1. バグの存在を認識する
  2. バグの発生源を分離する
  3. バグの原因を特定する
  4. バグの修正方法を決定する
  5. 修正し、テストする

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

  • プログラムを実行した結果,誤りのある最終結果が出力された.どうやらどこかで処理を誤っているようだが,プログラムとしては正常終了(最後まで実行して処理を終了する)している.このような場合,どのように誤りを見つけたら良いか?
  • プログラムを実行した結果,何も出力する事無く Bus error,または Segmentation fault により異常終了してしまった.このような場合,どのように誤りを見つけたら良いか?
  • 「Bus error」や「Segmentation fault」とはどのような状況で起きるのだろうか?

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/1年次) ソフトウェア基礎演習: コマンドの利用

月曜日, 7月 20th, 2009

Unixのコマンドラインで使えるちょっとした小技をまとめた『Unix Comman-Line Kung Fu』より)

これは良い文書。毎年Unixをいろいろな人に教えているコンサルタント、HalさんのプレゼンテーションがScribdで公開されていました。初心者が覚えるべきちょっとしたコマンドの小技がまとまっています。

たくさんの技があるのですが、個人的にぐっときたポイントをメモ程度にまとめておきます。興味のある方は是非全文読破してください。

上記で紹介されている小技集は,bash シェルを前提としたドキュメントである.tcsh で使えない場合には bash を利用してみよう.一時的に利用したいだけならばコマンドライン上で

prompt> bash

のように実行するだけである.

これらを踏まえて,以下のクイズに答えよ.

  • プログラミング等,作業によっては「少し編集->コンパイル->実行->動作確認」のように,なんらかのループ処理を何度も繰り返すスタイルで行われる事が多い.このように「直前や少し前に実行した過去のコマンドを実行したい」という欲求に答えるものが【コマンドヒストリ】である.現在利用しているシェルでコマンドヒストリとして記録されているヒストリを出力し,確認するにはどうすれば良いか?
  • ヒストリ上に記録されている過去のコマンドを実行するには,どうすれば良いか?
  • 過去のコマンドを「全く同じように実行したい」事もあれば,「同じ引数に対して違うコマンドを実行した」事など,さまざまな欲求が出てくるシチュエーションが出てくる.このようなヒストリ機能への対応は,シェルにより大きく異なる機能の一つである.tcsh, bash, zsh でのヒストリ機能について違いを調べよ.

(Quiz/1年次) ソフトウェア基礎演習: シェル

金曜日, 7月 17th, 2009

Wikipedia:シェルより)

シェル (shell) はオペレーティングシステム (OS) の機能の一部であり、ユーザーからの指示を受けて解釈し、プログラムの起動や制御などを行うプログラムである。

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

  • 情報工学科では未だに tcsh から教えているが,実はこれは既に標準シェルとして利用されることが少なくなって来ている,古くさいシェルである.どのようなシェルがあるだろうか? tcsh より使いやすいシェルは無いだろうか?
  • 何故このように多くのシェルがあるのだろうか?シェル毎に何が違うのだろうか?
  • 一般的に,シェルは CUI である.提供している機能の多くは GUI でも実行可能なことが多い.それでもシェルを使うにはそれだけのメリットがあるからである.どのようなメリット・デメリットがあるだろうか?

(Quiz/1年次) ソフトウェア基礎演習: sudo

月曜日, 7月 13th, 2009

Wikipedia:sudoより)
sudo(“su do”)はUNIXおよびUnix系オペレーティングシステムのプログラムの1つで、ユーザーが別のユーザー(通常、スーパーユーザーすなわち root)の特権レベルでプログラムを実行するためのコマンドである。デフォルトではその別ユーザーのパスワード入力を求めてくるが、設定を変更すれば root のパスワードを求めるようにもできるし、擬似端末につき1回だけパスワードを入力すればよいようにも、全くパスワード入力を求めないようにもできる[2]。sudo は各コマンド実行を記録でき、スーパーユーザーとしてのログインの完全な代替として使う場合もある。例えば、アップルの Mac OS X や Linuxディストリビューションの Ubuntu はそのような使い方をしている[3][4]。

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

  • 「特権レベルでプログラムを実行するためのコマンド」とあるが,特権レベルとは何か? 何のために特権レベルが存在しているのだろうか?
  • 「sudo は各コマンド実行を記録でき」とあるように,その実行履歴がログとして保存されている.その保存場所は環境依存の部分もあり,必ずしも同一の場所・同一ファイル名とは限らないが大凡似たような場所にある.Mac OS X の場合はどこに保存されているだろうか? 学科サーバ(Cent OS, Fedora)の場合にはどこに保存されているだろうか?
  • ログファイルがどうしても見つけられない場合,どうやれば探し出す事が可能だろうか?

(Quiz/1年次) ソフトウェア基礎演習: テキストエディタ

金曜日, 7月 10th, 2009

Wikipedia:テキストエディタより)
テキストエディタ(text editor)とは、コンピュータで文字情報(テキスト)のみのファイル、すなわちテキストファイルを作成、編集、保存するためのソフトウェア(プログラム)である。一般的に、文字情報の入力、削除、コピー、貼り付け、検索、置換、整形などの機能を備えている。OSにこれらの基本的な機能を備えたエディタが付属していることが多い。しかし、さらに多機能なテキストエディタ(例えば、検索や置換に正規表現が使用可能なもの)がしばしば用いられる。

上記のように,テキスト編集作業を支援するために利用するのがテキストエディタである.一つの側面(見た目が良いとかGUIで直感的とか)でエディタを選ぶ事も理由にはなるが,結果として作業効率が落ちるのであればそれはそもそも選択基準に誤りがあるだろう.

情報工学科ではプログラミング等でソースを書くためのエディタとして emacs を選択(1年次の講義で指導)している.それ以外にも様々なエディタがある中で emacs を選択しているのは,プログラミングの際に便利な点がいろいろある事が理由となっているが,必ずしも emacs がベストだとは限らない.

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

  • emacs について,どのような利点があるのか調査せよ.
  • それ以外のエディタを使用している場合,emacs と比較してどのような利点・欠点があるのか整理し,その選択が妥当な物なのかを客観的に評価せよ.
  • emacs しか使用した事が無い場合には,どのようなテキストエディタがあるか調査し,試用してみよ.