iPhone SDK4.0 GM版が何かと曲者で不便なので、3.2に戻す。今インストールされているXcodeをアンインストールする。
$ sudo /Developer/Library/uninstall-devtools --mode=all
その後、iPhone SDK3.2をインストールすれば元通り!
iPhone SDK4.0 GM版が何かと曲者で不便なので、3.2に戻す。今インストールされているXcodeをアンインストールする。
$ sudo /Developer/Library/uninstall-devtools --mode=all
その後、iPhone SDK3.2をインストールすれば元通り!
スパムメールが増えたのかなんなのか、ウチのサーバのログが暴れだしたので、ちょこっと調べてみることにした。
host spamc[9130]: connect to spamd on 127.0.0.1 failed, retrying (#1 of 3): Connection refused host spamc[9130]: connect to spamd on 127.0.0.1 failed, retrying (#2 of 3): Connection refused host spamc[9130]: connect to spamd on 127.0.0.1 failed, retrying (#3 of 3): Connection refused
このようなログがけっこう前からあった。どうも Spamassassin が動いていないようだ。
リブートしてみようと思い下記のコマンドを実行
[root@host]~# /etc/init.d/spamassassin start spamd を起動中: child process [14793] exited or timed out without signaling production of a PID file: exit 255 at /usr/bin/spamd line 2588.
なんだか調べていったら下記のページにたどり着いた。
http://www.komine.biz/modules/d3forum/index.php?topic_id=34
http://www.gossamer-threads.com/lists/spamassassin/users/151177?page=last
そこでは、
Hi
Just found the solution: Run the command ‘sa-update’
Note: Found the hint, after I tried to run spamd without ‘–daemonize’
Hope this works also for others!
と書いてあるので、下記コマンドを実行後、改めてSpamassassin を起動してみた。
[root@host]~# sa-update [root@host]~# /etc/rc.d/init.d/spamassassin start spamd を起動中: [ OK ]
おぉ、無事に起動した!あとはこれで様子見である。
JavaScriptしかロクに書けない自分です。こんぬつわ。
C言語における配列をメモって置きます。
JSだと配列ってすごい簡単に扱えますが、C言語だとリソースをきちんと確保してあげないとダメなんですね。ちゃんと頑張って書いてみましたよっと。
まずは配列。
//配列の初期化
int ary1[] = {0,1,2,3,4,5,6,7,8,9};
//lengthの取得
const int _ary1Length_ = sizeof ary1 / sizeof ary1[0];
//配列の中身をすべて取り出す
for( int i = 0; i < _ary1Length_; i++ ){
NSLog(@"%d", ary1[i]);
}
多次元配列の場合。
/**
* 多次元配列処理
*/
int ary2[7][10] = {
{0,1,2,3,4,5,6,7,8,9},
{10,11,12,13,14,15,16,17,18,19},
{20,21,22,23,24,25,26,27,28,29},
{30,31,32,33,34,35,36,37,38,39},
{40,41,42,43,44,45,46,47,48,49},
{50,51,52,53,54,55,56,57,58,59},
{60,61,62,63,64,65,66,67,68,69}
};
const int _ary2Length_i_ = sizeof ary2 / sizeof ary2[0];
const int _ary2Length_j_ = sizeof ary2[0] / sizeof ary2[0][0];
for( int i = 0; i < _ary2Length_i_; i++ ){
for( int j = 0; j < _ary2Length_j_; j++ ){
NSLog(@"%d", ary2[i][j]);
}
}
JSだとarrayObj.lengthとかで簡単にとれるものも、きちんと計算してあげないととれないんですね。これはなんだか挫けそうです!w
zsh autoload -U tetris zle -N tetris bindkey '^T' tetris
Control-T を押せばゲーム開始。zsh最強!
しかもちょっとキー操作が難しい。
JavaScriptやRubyやPHPといったインタプリタな緩くて便利な言語しか使ったことがないので、C言語の文字列の扱いが非常に難しかった。というかC言語単体は挫折したけど…。
Objective-Cに置いてはクラスが拡張されているのでやはり文字列の扱いはものすごい便利になっている。それでも記述する内容多すぎなんだけどね…。
JavascriptとObjective-Cでの書き方をメモっとく。
[js]
//文字列を代入
var str1 = “あひゃ!”;
var str2 = “ヒーハーッ!”;
//文字列の連結
var str3 = str1 + str2;
var str4 = str3 + str1 + str2;
//出力
alert(str1); //あひゃ!
alert(str2); //ヒーハーッ!
alert(str3); //あひゃ!ヒーハーッ!
alert(str4); //あひゃ!ヒーハーッ!あひゃ!ヒーハーッ!
[/js]
//文字列を代入 NSString *str1 = @"あひゃ!"; NSString *str2 = @"ヒーハーッ!"; //文字列の連結 NSString *str3 = [str1 stringByAppendingString:str2]; NSString *str4 = [str3 stringByAppendingString:[str1 stringByAppendingString:str2]]; //NSLogで出力 NSLog(@"\n%@",str1); //あひゃ! NSLog(@"\n%@",str2); //ヒーハーッ! NSLog(@"\n%@",str3); //あひゃ!ヒーハーッ! NSLog(@"\n%@",str4); //あひゃ!ヒーハーッ!あひゃ!ヒーハーッ!
ちなみにメッセージ式の書式もメモっとく。
//メッセージ式 [オブジェクト メッセージ]; //メッセージ式の戻り値を変数に代入 変数 = [オブジェクト メッセージ] //引数を1つもつメソッドの呼び出し [オブジェクト メソッド名:引数] //引数を複数もつメソッドの呼び出し //※ラベルとは引数の説明のような文字列 [オブジェクト メソッド名:引数1 ラベル:引数2]
他にインスタンスメソッドとクラスメソッドが存在するが、次の機会に書けたら書きます。
iPhoneアプリ開発をがっつりやりたいので、Objective-Cに入門してみた。
C言語すらきちんとやったことないのに大丈夫かとも思ったけど、結構すんなり入れたんだお!
/* * NSStringクラスで文字列を扱ってみる。 */ //NSStringクラスから、myStrインスタンスを生成 //Class名 *変数名 = @"文字列"; NSString *myStr = @"あひゃ"; //NSLogで出力 NSLog(@"\n%@", myStr);
インタプリタでは使うことがない(?)フォーマット演算子だとか、結構ちゃんと書かなきゃいけないんだねって思った。
AS3を本気で勉強しようと思い過去に何度入門したかわからないAS3を再び始めました。今回は本気です!(ってみんな言うよね。)
とりあえずTextField()から入門してHelloWorld的なことをやろうと思い頑張っていたら、with文がなかなか厄介でつまづきました。べつに使う必要ないんだけどね。
とりあえず、HelloWorld的な。
[as]
//************************************************************
// HelloWorld – TextField()
// とりあえず文字を書き出してみる。
//
package {
import flash.display.*;
import flash.text.*;
public class Main extends Sprite {
//————————————————————
// Mainコンストラクタ
//
public function Main() {
//h1 TextFormat() を定義
var tf_h1:TextFormat = new TextFormat();
tf_h1.color = 0×666666;
tf_h1.size = 30;
tf_h1.font = ‘Times New Roman’;
tf_h1.align = TextFieldAutoSize.CENTER;
//titleを定義
var title:TextField = new TextField();
title.text = ‘HelloWorld!! – TextField()’;
title.width = stage.stageWidth;
title.height = 40;
title.x = 0;
title.y = (stage.stageHeight/2);
title.setTextFormat( tf_h1 );
title.background = true;
title.backgroundColor = 0xEEEEEE;
//stageに要素を追加
stage.addChild( title );
}
}
}
[/as]
▽結果
インスタンスのプロパティをwith文を使ってまとめてみる。
[as]
//titleを定義
var title:TextField = new TextField();
with( title ){
text = ‘HelloWorld!! – TextField()’;
width = stage.stageWidth;
height = 40;
x = 0;
y = (stage.stageHeight/2);
setTextFormat( tf_h1 );
background = true;
backgroundColor = 0xEEEEEE;
}
[/as]
・・・これがですね、実は思わぬ落とし穴があって動いてくれないんです。
with文の中身というのは、親オブジェクトの名前領域の中にいる状態(表現あってる?)です。ここで問題になっているのは、stageオブジェクトです。”stage.stageWidth” の部分。
親が”title”オブジェクトなので、with文の中では、”title.stage.stageWidth” というように見られてしまいます。もちろん、titleインスタンスにはそんな階層のプロパティをもっていません。
それでもwith文を使いたい場合はこのように書きます。
[as]
//titleを定義
var title:TextField = new TextField();
var stageInstance:Object = stage;
with( title ){
text = ‘HelloWorld!! – TextField()’;
width = stageInstance.stageWidth;
height = 40;
x = 0;
y = (stageInstance.stageHeight/2);
setTextFormat( tf_h1 );
background = true;
backgroundColor = 0xEEEEEE;
}
[/as]
一旦、上のスコープ内でstageを参照するオブジェクト”stageInstance” を生成して、”stageInstance” を参照しに行きます。この手間を考えると、そこまでしてwith文使う必要ないんじゃない?という気になります。名前領域に気を使うのはめんどくさ過ぎる気がします。
そんなwith文ちゃんでした。
あるサーバを管理しているのだが、Tripwire で、下記のようなエラーが出ていた。
1. File system error.
Filename: /var/lib/xen/images/CentOS5.img
Value too large for defined data type
ファイルサイズがでかすぎるんだよ!って怒られた。
ググってみたら、ファイルサイズが 2G を越えているのが原因らしい。 UNIX では「2G の壁」というものが存在しているようで、これは lseek() など、ファイル内の読み出し位置を移動する関数に与えるオフセット値が伝統的に signed long であるためらしい(もうよくわからん)。
signed long では 2147483647 、要するに 2G バイトまでしか表現できないので、これを越えると単に fseek()に渡せないだけでなく、 内部の位置計算処理に多大な混乱が起こる(ということらしい)。ちなみに相対位置指定のために負の値も必要(だそうです)。
いろいろとめんどくさいのねー。もう1TBとかが当たり前の時代ですのに。
さて、解決方法である。
Tripwireのファイルチェックをスキップしてしまえばよいのである。
#ポリシーファイル(テキスト版)の復元
[root@host ~]# twadmin -m p -c /etc/tripwire/tw.cfg -p /etc/tripwire/tw.pol -S /etc/tripwire/site.key > /etc/tripwire/twpol.txt
[root@host ~]# vi /etc/tripwire/twpol.txt
################################################
# ##
################################################ #
# # #
# Monitor Filesystems # #
# ##
################################################
(
rulename = "Monitor Filesystems",
)
{
/ -> $(ReadOnly) ;
/home -> $(ReadOnly) ; # Modify as needed
/usr -> $(ReadOnly) ;
/var -> $(ReadOnly) ;
!/var/lib/xen/images; #<- 追加
}
#ポリシーファイル(暗号署名版)を作成
[root@host ~]# twadmin -m P -c /etc/tripwire/tw.cfg -p /etc/tripwire/tw.pol -S /etc/tripwire/site.key /etc/tripwire/twpol.txt
Please enter your site passphrase: #<- サイトパスフレーズ応答
#ポリシーファイル(テキスト版)削除
[root@host ~]# rm -f /etc/tripwire/twpol.txt
#データベース初期化
[root@host ~]# tripwire -m i -s -c /etc/tripwire/tw.cfg
Please enter your local passphrase: #<- ローカルパスフレーズ応答
他にも動画ファイルを保存していたりなどで2GB超えてしまうファイル群を格納しているディレクトリがあったら、そこを登録しておいても良いと思う。
ブログを更新しようと管理画面にログインしてみたら、
「でも今のところ スパム はありません。」
どうでも良いけど、”でも” の部分要らなくね?ぇ、スパムあったのなかったの!?って思ったけど何かおかしいかなー?
そういえば昔こんなことやろうとしてた。
▽スパム検索エンジン
http://hiropo.co.uk/archives/11
バカだったんだね。今もバカだけど。