Posts Tagged ‘情報工学実験3/4’

(進化計算班議事録) 2011/04/18, 全体概説+イントロ+zsh補足+Mercurial補足

月曜日, 4月 18th, 2011

情報工学実験3/進化計算班の1回目が終了しました。MLに議事録を流しているのですが、参照し難い部分もあるので公開を兼ねてHTML版を投稿。


目次
議事録
zsh補足
Mercurial補足
 ・(1) 環境変数の設定。
 ・(2) hg 設定ファイルの編集。
 ・(3) リモートでリポジトリを作成。
 ・(4) ローカルにリポジトリを複製する。
 ・(5) リポジトリ内で作業する。
 ・(6) 必要に応じて古いバージョンに戻す。
 ・(extra.) マージの例。
 ・(extra.) 必要ないファイルを add 対象にしてしまった場合。


議事録

・プレガイダンス
・レポート確認: Level0: オープンソース外観
背景・基礎知識
・課題: Level1
・グループ作成
 ・グループ1: 095751J 東川上一成, 095720J 慶留間諒太, 095731D 新城幸之佑
 ・グループ2: 095771C 宮里友美, 095725K 重信琢人
 ・グループ3: 095708K 太田陽祐, 095701B 青木史林
・オプション: zsh & Mercurial 実習(複数人でシェアする使い方)。
・次回予定: GA概要、auto-complete.el &簡易プログラミング予定。


zsh 補足

参考サイト
漢のzsh
zshは、tcshやbash等を使っている以下のような症状に悩んでいる人に有効 である。

今回は便利な設定をコピーして利用しましたが、各設定の意味を理解するには自分で設定を読んだり、上記サイトやドキュメントを読んでください。便利な機能についてもいろいろ解説されてます。


Mercurial 補足

利用前の準備(個別リポジトリの場合)

バージョン管理システムの一例として学科でも提供してるMercurialを利用して開発を進めます。

(1) 環境変数の設定。
~/.zshrc 等のシェル用設定ファイルで
export HGENCODING=UTF-8
EDITOR=emacs

を設定。shark 側は設定済みですので、ローカル側にやっておきましょう。EDITOR は設定しなくても良いですが、デフォルトだと commit 時のエディタが vi になります。vi好きな人はviを指定しましょう。

(2) hg 設定ファイルの編集。
commit する際のユーザ名を指定しておきましょう。
~/.hgrc に
[ui]
username = Naruaki TOMA 

ぐらいを設定。ローカル側でやっときましょう。これを設定しておくと、commit 時の username が見つからなかったとかいうwarning が出なくなります。

(3) リモートでリポジトリを作成。
shark にログインし、リポジトリを作成します。リポジトリの場所は、~info3/HG/2011/ 以下にしてください。
 ・個人利用のものは ~info3/HG/2011/e095700/
 ・グループ利用のものは ~info3/HG/2011/groupname/
 ・全員共同利用のものは ~info3/HG/2011/share2/
とします。

例えば、e095700 というアカウントの人が個人利用のリポジトリをつくる場合には以下のようにします。

macbook> ssh info3@shark.nal.ie.u-ryukyu.ac.jp
shark% cd HG/2011
shark% hg init e095700

これで shark 側での作業は終了です。

(4) ローカルにリポジトリを複製する。
実際に作業するには、ローカル側で前述のリポジトリを複製し、ローカル内で管理するようにします。リポジトリを複製するためには以下のコマンドを実行しましょう。
macbook> mkdir temp	#作業用ディレクトリを作成
macbook> cd temp
macbook> hg clone ssh://info3@shark.nal.ie.u-ryukyu.ac.jp//home/info3/HG/2011/e095700/

引数が長ったらしいですが、これも一度zshで実行しておくと、「hg」や「hg clone」まで入力した状態で Ctrl+P で以前利用した引数を自動で補完してくれます。

(5) リポジトリ内で作業する。
ファイル生成したら add して、必要な時に commit します。
macbook> hg add (ファイル名)
 *ファイル名を省略することが可能ですが、その場合には
  未登録のファイル全てが対象になりますので、不要な
  ファイルまで登録候補になってないか確認してください。
macbook> hg commit
 *ただし、この時の commit ではメインリポジトリには反映しません
  ので、ローカルのみの管理になります。サーバ上にも反映するには
  commit してから push します。
macbook> hg push
 *普段は commit だけをやっておき、共用が必要になるタイミングで
  push する使い方になるでしょう。

(6) 必要に応じて古いバージョンに戻す。
macbook> hg log -v
 で更新履歴を参照できるので、そこで付けられてるバージョン番号を見つけ、
macbook> hg update -r (バージョン番号)
 として指定したバージョンに戻します。

(extra.) マージの例。
前提:サーバ側に最新状態があり、ローカル側で古いリポジトリで作業をしてしまった。
macbook> emacs test
macbook> hg commit
macbook> hg push
 *エラー!
macbook> hg pull
macbook> hg merge
 *新旧混ざったファイルが生成されるので、それを目視確認しながら編集。
macbook> emacs test
macbook> hg resolve --list	# マージ状態の確認
macbook> hg resolve -m test
 *編集し終えたことを明示。
macbook> hg commit
macbook> hg push

(extra.) 必要ないファイルを add 対象にしてしまった場合。
macbook> hg status
macbook> hg revert test~
macbook> hg status
 *問題無ければcommit&push

(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で試せ.

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

水曜日, 7月 22nd, 2009

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

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

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

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

(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年次) 情報工学実験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としてインストール&稼働させるにはどうすれば良いか,調査せよ.
  • 調査に基づき実際にインストール&稼働させよ.