UPSがおかしいと思ってたらバッテリ配線が…
昨日、サーバ監視ソフトが異常を知らせてくるので、確認したら UPSがフリーズしてる。給電されていないし、パネルのボタンを押しても無反応。 しかたがないので、落ちたサーバなどを一時的に別コンセントにつないで 起動させ、一度完全放電させて壊れていないか確認してみた。
完全放電させたら、復活してくれて万々歳なんだが、 先月にも同じように給電が止まってサーバが落ちたし、 改めてUPSの機能を確認。 すると、UPSの横に貼られた黄色い目立つシールに、 "STOP/HALT Connect Battery"と書いてあるじゃん。 UPSを買った時には、STOP/HALTの文字だけみて給電を止める時の注意書きと 勝手に誤解していたけど"Connect Battery"とな。 しっかりシールを剥がして確認すると、UPS内部のバッテリーの配線が "安全のために"抜いてある….(x_x; ということは、今まではUPSといっておきながら、単なる大きなコンセント状態。 停電・瞬停であれば、そのまま落ちてあたりまえ。
あまりにも恥ずかしいミス….
UML構造図
前回の授業の締めで説明をしていたUMLについて、 本格的に説明を行う。
UMLは、OOD(オブジェクト指向デザイン)などからOML(オブジェクトモデリング言語)などを経て、UMLへと変化していった。 UMLでは、大きく分けると構造図・振る舞い図に分類され、 それぞれについて、さらに具体的な図の書き方が決められている。
- 構造図
- クラス図とオブジェクト図
- コンポーネント図
- 配置図
- パッケージ図
- 振る舞い図
- ユースケース図
- アクティビティ図
- ステートチャート図(状態遷移図)
- 相互作用図
- シーケンス図
- コミュニケーション図
クラス図とオブジェクト図
クラス図は、クラスの中身と他のクラス間の関係を記述するための図。
1つのクラスは、上段にクラス名・中段に要素・下段にメソッドを記載する。 各要素・メソッドの前には、限定子として("-":private,"+":public,"#":protected)などを 記載する。
コンポジションと集約
クラスと他のクラスの間の関連は直線で表し、多重度やその役割を書き添える。 継承は白抜き△矢印で表現し、そのクラスの基底クラスに向かって矢印を描く。 関連においてオブジェクトの寿命が同じ(クラスの要素に別要素が包含される)場合は、 コンポジション(合成)と呼ばれ、黒塗り◆で矢印を描く。 寿命などが別であり、ポインタで結合されるような関係は集約と呼ばれ、 白抜き◇で矢印を描く。
class Engine { // エンジン } ; class Tire { // タイヤ } ; class Car { Engine engine ; // コンポジション Tire* wheel[ 4 ] ; // 集約 } ;
is-a,has-a
クラス構造で派生で表現できるような関係 例えば、基底クラス:どうぶつ、から派生した哺乳類とか鳥といったクラスを 考えると、"哺乳類はどうぶつである"という言い方が可能であり、これを"is-a"の関係と呼ぶ。 一方、"哺乳類は足を持っている"という言い方ができる場合は、"has-a"の関係と呼ばれ、 "足"というクラスを、集約なりコンポジションで実装することになる。
class Animal { // どうぶつ } ; class Mammalia : Animal { // is-a 関係,派生で実装 // 哺乳類 } ;
後回しにしていた、UPKI…(06/21)
この記事は、 の @TohruSaitohに掲載した #fnct タグ付き記事を、まとめたものです。
UPKIのオープンドメイン証明書の更新
学術機関向けにサービスされているUPKIのオープンドメイン証明書の 更新の時期となった。 国立情報学研究所より、更新の連絡が来ていたので、作業を行う。 といっても2年ぶり?の作業ですっかり忘れている。 ひとまず自分のページに貼ってあったメモ記事と、 更新マニュアルを見ながら作業を行い、ようやく切替成功。
リスト処理演習
リスト処理の基本の説明として、簡単なリスト処理・データの先頭追加・末尾追加、途中データの挿入削除の解説が終わったので、今日は演習。
出席番号を除算した余りで、下記のデータの中から1つについて作成する。 データに対する処理は、条件で検索であったり、平均計算であったり、自分の理解度に応じて 何らかの計算処理を施すプログラムとした。
- 名前と誕生日
- 名前と身長体重
- 名前と成績(例:国語,算数,理科,社会,英語)
OSの歴史と絶対PATH/相対PATH
前期中間から前期期末までは、ファイルに関する説明を行う。 これにあたり、ベースとなるOSの話が重要となるので、 簡単にOSの歴史と、PATHの概念を説明する。
OSの歴史
初期のコンピュータは、ハードウェア中心でOSという概念は無かったが、 ハードウェアの使い方を共通化しないと、プログラムを作る手間が増えるため、 プログラムの起動方法を定めた制御モニタなどが使われるようになり、 これがOSとして発達していく。 大型コンピュータでは汎用機のためのOSが発達していく。
一方、家庭用のコンピュータでは、8bitコンピュータでは機能が無かったため、 プログラム言語BASICがOSの代りとなっていた。 まともなOSは、intel系ではCP/Mぐらいしか無かった。 16bitコンピュータが出始めた頃、IBMのAT機のためのOSが必要となり、 マイクロソフト社が DR-DOS などを元に MS-DOS を開発し普及していく。
一方、Apple社は Apple-I,Apple-IIの開発の後、16bitコンピュータに GUI操作が便利な Macintosh を開発する。このGUIの操作性は広く普及していき、 マイクロソフト社は、MS-DOS上のGUI環境 MS-Windows を発表する。 この後、MS-DOS,MS-Windows を統合した Windows-95 などが発表される。 しかし、この時代のコンピュータは、シングルユーザ・シングルタスクであり、 フィアルの所有者の概念もなく、プログラムも処理の切り替えをある程度 意識して作らなければならなかった。また、複数のプログラムを動かせても、 他のプログラムのメモリ領域を触ろうとしても、OSが保護する機能は無かった。
32bitコンピュータが出た頃から、CPUがメモリ保護機能を実装したころから、 複数のプログラムの並列処理が安定してできるようになり、マルチユーザ・マルチタスク のOSが一般的になる。Windowsは、NT,2000,Xp,Vista,7と開発されていく。 一方、汎用機のOSを目指して作られた unix で、Macintosh 用のOSとして、 Mac OS X も開発される。unix は、インターネットのオープンソースの開発者 のもと、Linux や FreeBSD が開発されていった….
絶対PATH/相対PATH
コンピュータの中には沢山のファイルがあり、これらを分類して保管するための機能が、 ディレクトリ(最近のOSではフォルダと呼ばれる)である。 分類されて管理された大量なファイルを使う場合、そのファイルの場所を指し示す 必要があり、その概念がPATHである。起点となる場所から、目的のファイルにたどり つくまでのディレクトリ名を書き連ねれば良い。
ディスクの大元の根っこから、ディレクトリ名を書き連ねる方式は、 絶対PATHと呼ばれる。絶対PATHはファイルの場所を明記できるが、 ディレクトリの深い底のファイルをアクセスするには、長いPATHとなってしまう。 これに対応すべく、あらかじめ起点となるディレクトリを指定しておき、 その起点からファイルの場所を記述する方法が相対PATHと呼ばれる。
簡単な演習として、Windows のコマンドプロンプトを立ち上げ、 C言語のbin,includeなどを例としてPATHの説明を行った。 (親ディレクトリ・カレントディレクトリの説明がまだなので、来週の最初に説明しよう)
多重継承
多重継承の説明の前に、オブジェクト指向とは少し違うけど実装方法として 主流となっているテンプレート機能について説明を行う。
テンプレート機能
オブジェクト指向でよく言われる「プログラムの再利用」では、 継承を使った物が多い。 コンテナクラスでは、汎用のデータの入れ物となる純粋仮想基底クラスを宣言し、 自分で取り扱いたいデータ構造がでてくると、基底クラスから派生クラスを作り、 必要最小限の仮想関数を記述するスタイルが一般的。
しかし、純粋仮想基底クラスによるコンテナクラスでは、処理の実装の負荷が高いので、 最近ではテンプレート機能が利用されることが増えた。
template <class T> class Data { private: T data ; public: Data( T x ) : data( x ) {} void print() { cout << data << endl ; } } ; void main() { Data<int> a( 123 ) ; a.print() ; Data<double> b( 1.23 ) ; b.print() ; } ;
このプログラムでは、Data<int> の型が宣言されると、型Tにintが割り当てられ、 int型のDataが宣言され、Data<double> で、double型のDataが作られる。
多重継承
課題としている、純粋基底クラス「図形」から、具体的な「四角」や「丸」の 図形表示クラスを派生させ、さらに「色付」の「四角」や「丸」の図形クラスの プログラムでは、様々な実装方法がある。 一つの方法として、多重継承がある。 複数の異なる基底クラスから派生クラスを作る方法で、課題であれば 「色クラス」と「図形クラス」から、「色付の四角」といったクラスを派生させる。
多重継承は、以下のように書けば良い。
class Figure { public: virtual void draw() ; } ; class Color { private: // 色情報 : } ; class FigureBoxColor : Figure , Color { // FigureとColorの特徴を多重継承 } ;
ただし、多重継承は実装時の複雑さや効率の問題から、 すべてのオブジェクト指向言語で利用できる訳ではない。 Java は、様々な問題を考慮し、多重継承は実装せず、 代わりに interface 機能を用いる。
// 多重継承がややこしい例 class どうぶつ { // } ; class とり : どうぶつ { // 卵生・くちばし } ; class ほにゅうるい : どうぶつ { // 胎生・4つ足 } ; class かものはし : とり , ほにゅうるい { // } ; // (a) とり,ほにゅうるいが、同名のメソッドfoo()を持っていたら、 // かものはし.foo() は、どちらが呼び出されるのか? // (b) どうぶつ が、要素を持っていた場合、 // かものはしは、2つの要素を持つことにならないか?
トクトクきっぷ2000円か…
週末の日曜日は、バドミントン部の交歓試合で石川津幡までのおでかけ。 電車で移動となると団体割引などの申請が面倒なんだけど、 学生さんに準備を頼んだら、 トクトクきっぷ(一日普通列車乗り放題=2000円)なるものがあり、 津幡往復=1890円×2×50%=1890円と遜色なし。
団体で移動すると、福井乗車・下車があると団体行動からはずれる度に、 駅員に「福井で下車するので…」と説明+団体券への書き込みをしてもらう 必要があるけど、不要になる。切符取得も3日前までにとればいいみたい。 なんてべんりなんだ…
WiFi通信のXBee / WPA,W…(06/15)
- 06/14 WiFi通信のXBee / WPA,WPA2に対応可能 http://www.marutsu.co.jp/shohin_132580/ #fnct
この記事は、 の @TohruSaitohに掲載した #fnct タグ付き記事を、まとめたものです。