UbuntuにObjective-Cをインストール
ubuntuにObjective-cをインストールしたときの手順
1. Objective-Cのパッケージ「gobjc」をインストールする
# sudo aptitude install gobjc
2. 関連するパッケージをインストールする。
これらをインストールしていないと、ヘッダファイル「Foundation/NSObject.h」をimportしたクラスをコンパイルした時に「error: Foundation/NSObject.h: No such file or directory」というようなエラーが出る。
# sudo aptitude install libgnustep-base-dev # sudo apt-get install gnustep # sudo apt-get install gnustep-devel
3. Objective-Cのサンプルファイルをダウンロードする
$ wget www.otierney.net/files/objc.tar.gz
Objective-Cの簡単な使い方は以下のサイトを参照。
http://www.otierney.net/objective-c.html
4. ダウンロードしたファイルを解凍する
$ tar xzf objc.tar.gz
5. まずはHello Worldを出力するサンプルを動かしてみる
解凍したディレクトリ内にサンプルが色々入っている。helloというディレクトリ下にhello worldを出力するサンプルがある。
$ cd objc/hello/ $ ls main.m output
main.mの内容はこんな感じ。
#import <stdio.h> int main( int argc, const char *argv[] ) { printf( "hello world\n" ); return 0; }
main.mをコンパイルする。
$ gcc -lobjc main.m
ファイルを確認する。実行ファイルが生成されている。
$ ls
a.exe main.m output
生成された実行ファイルを実行する。
$ ./a.exe hello world
- 参考サイト
http://d.hatena.ne.jp/ykot/20100625/1277440933
http://l-w-i.net/t/ubuntu/objc_001.txt
http://d.hatena.ne.jp/tomute/20090112/1231809116
warning: class Xxx does not implement the 'AVAudioPlayerDelegate' protocol
オーディオを再生させたりするAVAudioPlayerクラスを使おうとした時に発生した警告
AVAudioPlayerクラスのインスタンスを生成しているところで警告が出た。
ClockAppDelegate.m
@implementation ClockAppDelegate - (void) playAnnounce: (NSTimer *) timer { // AVAudioPlayerのインスタンス生成 AVAudioPlayer* avap = [ [AVAudioPlayer alloc] initWithContentsOfURL: url error: nil ]; } @end
■警告の内容
warning: class 'ClockAppDelegate' does not implement the 'AVAudioPlayerDelegate' protocol
警告: ClockAppDelegateクラスはAVAudioPlayerDelegateプロトコルを実装していない
ヘッダファイルのクラスの宣言をしているところで、AVAudioPlayerDelegateというプロトコルを書き忘れているようだ。
ヘッダファイルの構成は以下のようになっている。
@interface クラス名: スーパークラス名<プロトコル, プロトコル, ・・・> { インスタンス変数の宣言 } メソッドプロトタイプ宣言 @end
■対応
AVAudioPlayerDelegateプロトコルを追加した。
ClockAppDelegate.h
@interface ClockAppDelegate : NSObject <UIApplicationDelegate, AVAudioPlayerDelegate> { IBOutlet UIWindow* window; } @property (nonatomic, retain) IBOutlet UIWindow *window; @end
warning: 'Xxx' may not respond to '-xxx'
■下記のクラスをビルドしたら警告が発生した。
ClockAppDelegate.m
@implementation ClockAppDelegate - (void) setupTimeAnnounce { // 時報用のタイマーを生成 timerAnnounce = [ NSTimer scheduledTimerWithTimeInterval: 60.0f ]; ---略--- } @end
■警告の内容
warning: 'ClockAppDelegate' may not respond to '-setupTimeAnnounce' warning: Messages without a matching method signature will be assumed to return 'id' and accept '...' as arguments.
ヘッダファイルにsetupTimeAnnounceメソッドが宣言されていない。
ちなみに、警告なのでビルド、実行することはできる。
■対応
ヘッダファイルにメソッド名を宣言する。
ClockAppDelegate.h
@interface ClockAppDelegate : NSObject <UIApplicationDelegate> { } @property (nonatomic, retain) IBOutlet UIWindow *window; - (void) setupTimeAnnounce; // ここに追加 @end
システム監視ツール - watchdog
watchdogとはシステムを監視し、異常が発生したのを観測した場合マシンを再起動するソフトウェアである。異常観測後の動作はリブートのみである。特定の機能、例えばapacheを再起動するなどということはできない。
■インストール
# yum install watchdog ---略--- Installed: watchdog.i386 0:5.6-1.el5 Complete!
■構成
/usr/sbin/watchdog /usr/man/man5/watchdog.conf.5 /usr/man/man8/watchdog.8 /etc/watchdog.conf
■watchdog.confの設定
例として以下のような内容を設定する。
- Apacheのpidファイルを10秒間隔で監視し、ファイルが存在していれば/dev/watchdogというファイルに書き込む。pidファイルが無い場合、つまりapacheが落ちていた場合はマシンを再起動する。
設定方法は以下の通り。
watchdog.confを開く。
# vi /etc/watchdog.conf
下記3つの設定値を変更する。
-------------------------------------
watchdog-device = /dev/watchdog
interval = 10
pidfile = /var/run/httpd.pid
-------------------------------------
■確認
1. watchdogを起動する。
# /etc/rc.d/init.d/watchdog start watchdog を起動中: [ OK ]
2. apatcheを停止する。
# apachectl stop
3. 10秒後、マシンが再起動がされればOK。
■注意:watchdogを自動起動する場合の設定
Watchdogを自動起動に設定する場合、最後に起動するようにしておくこと。
でないと以下のような状態に陥ることになる。
1. マシンが起動
2. watchdogが起動
3. watchdogがapacheのhttpd.pidの確認をする
4. httpd.pidがないためapacheが異常であると判断する
5. マシンの再起動を開始する
永遠に起動できない。
■設定・監視できるもの
- 負荷の閾値:1分、5分、15分間隔で設定可能
- 利用可能仮想メモリサイズの最低値(閾値)
- 温度センサの閾値(デフォルトは120)。限界を超えるとシステム停止。また、この限界値の、90%、95%、98%で警告を発する。
- 指定されたファイルのstatコール許容戻り時間(デフォルトは1分)
- pidfileで指定されたpidのプロセス稼動監視
- プロセス・テーブルの空き状態(watchdog自身のforkプロセス使用)
- 指定されたIPアドレスに対しpingし、unreachableをチェック
- 指定インターフェースの受信トラフィックモニタ
問題発生時に、ユーザ定義コマンドの実行やemailで通知することが可能である。
■参照サイト
Linux/watchdog
PostgreSQLのJDBCドライバ
PostgreSQLのJDBCドライバのダウンロード先
http://jdbc.postgresql.org/download.html
JDBCドライバ | JDK |
---|---|
JDBC2 | JDK1.2 or 1.3 |
JDBC 2EE | JDK1.3 + J2EE |
JDBC3 | JDK1.4 or 1.5 |
JDBC4 | JDK1.6 |
[Linux]PATHの設定方法
JDKやPostgreSQLなどインストールした際、最後にコマンドのPATHを通す設定があると思う。どのようにPATHを設定するかメモしておく。
例として、/usr/java/jdk1.6.0_18をPATHに設定する方法を記す。
■方法1::bashrcにPATHを追記する方法
1. bashrcを開く
bashrcはユーザのホームディレクトリ直下に隠しファイルとして存在する。
「~/」はホームディレクトリ、「.」が先頭につくファイルは隠しファイルを意味する。
$ vi ~/.bashrc
下記を追記する。
export JAVA_HOME=/usr/java/jdk1.6.0_18 export PATH=$PATH:$JAVA_HOME/bin
パスには優先度がある。「echo $PATH」を実行した時、より左側にあるパスが優先される。例えば、echoコマンドでパスを出力すると下記のようになっていたとする。
$ echo $PATH /usr/bin/java:/usr/java/jdk1.6.0_18/bin/java
このときjavaコマンドを実行した場合、先頭の/usr/bin/javaが呼び出されることになる。
パスを先頭に追加したい場合:PATH=$PATH:$JAVA_HOME/bin
パスを末尾に追加したい場合:PATH=$JAVA_HOME:$PATH
2. bashrcに追記した設定を有効にする
設定を有効にする方法は2通りあり、1つは新しいターミナルを開くこと、もう1つは現在のターミナルで下記コマンドを実行すること。
$ source ~/.bashrc
3. PATHが設定されたことを確認する
$ java -version java version "1.6.0_18" OpenJDK Runtime Environment (IcedTea6 1.8.2) (6b18-1.8.2-4ubuntu2) OpenJDK Client VM (build 16.0-b13, mixed mode, sharing)
■方法2::ターミナル上でPATHを設定するコマンドを実行する方法
現在開いているターミナル上だけにPATHを通したい場合、下記コマンドを実行する。
export JAVA_HOME=/usr/java/jdk1.6.0_18 export PATH=$PATH:$JAVA_HOME/bin
コマンドを実行したターミナル上だけにPATHが通される。
2. PATHが設定されたことを確認する
$ java -version java version "1.6.0_18" OpenJDK Runtime Environment (IcedTea6 1.8.2) (6b18-1.8.2-4ubuntu2) OpenJDK Client VM (build 16.0-b13, mixed mode, sharing)
3. 新しいターミナルを開きjavaコマンドを実行してみる
$ java -version
java: command not found
PATHが通っていないのが分かる。