Automatorでshell scriptを走らせるときの注意

Automatorでshell scriptを走らせるときに注意しなければいけないのは外部コマンド等を呼び出すときに出力を退避させないとコマンドが終了できずにスクリプトが永遠に終了待ちしてしまうこと。

標準出力と標準エラーをファイルに落とすか、

command &> /dev/null

で捨てるかすること。

すぐ忘れるsedの後方参照の仕方

sedの後方参照、いっつも忘れてしまう。

$ echo ABCD | sed -E "s/(C)/\1\1/g"
ABCCD

$ echo ABCD | sed -e "s/\(C\)/\1\1/g"
ABCCD

コマンドをダブルクオートでかこった場合、拡張モード(-E)では括弧をエスケープしない。

$ echo ABCD | sed -E s/\(C\)/\\1\\1/g
ABCCD

コマンドをダブルクオートでかこってない場合、拡張モード(-E)では括弧と参照をエスケープする。えーと、-eではできないんだっけ。。。

Serial Programming: Baudrateの設定

シリアルポートの通信速度の設定の仕方はOSによって違うようで、

Linuxでは:

newtio.c_cflag = BAUDRATE | CRTSCTS | CS8 | CLOCAL | CREAD;

のようにtermios構造体のc_cflagに直接設定するが、

MacOSXなどのBSD系では:

cfsetspeed(&newtio,BAUDRATE);

のようにBaudrate設定関数を用いて設定するようだ。(cfsetispeed()/cfsetospeed()のように入出力を個別に設定することも可)。

linuxでもcfsetispeed()/cfsetospeed()が実装されているのでとりあえずこれ使っておけば問題ないかもしれない。

ちなみにtermios.hで例えばB115200はlinux(arm)では

#define B115200 10002

OSX 10.6では

#define B115200 115200

のようにOS/アーキテクチャによって異なって定義されている。
知らなかった。


参考:

(POSIX では、 termios 構造体に格納されたボーレートは正確なものではなく、 ボーレートを操作するために cfgetispeed() と cfsetispeed() が提供されている。 c_cflag 内の CBAUD で選択されたビットを使うシステムもあれば、 sg_ispeed や sg_ospeed といった独立したフィールドを使うものもある。)

http://www.linux.or.jp/JM/html/LDP_man-pages/man3/termios.3.html

gdb

gdbでは配列の内容を表示することができるらしいがなぜか自分の環境(コード?)では表示できない。
ちょっと調べてみたところ、"人口配列"という演算子あるらしいのでこれを使ってみた。

double array[100];

と定義された配列があった場合に

p *array@100

をすることで配列の中身が出力される。

IBを使ってUITableViewCellのCellのデザインをする

UITableViewで複数のsubviewを持つような複雑なcellをコードを書いて表示させるのはめんどくさい。どうもIBでやるのは推奨されていないらしいけれど、面倒すぎるのでそこは気にしないことにした。

IBでTableCellをデザイン後、以下のコードのYourCustomCellClassIDYouSetInXIBFileYourXIBNameを作ったものに適当に置き換えてtableView:cellForRow:atIndexPath: method:の中のcellをインスタンス化する所に入れる。

YourCustomCellClass *cell = (YourCustomCellClass *)[tableView dequeueReusableCellWithIdentifier:];
if ( cell == nil )
{
NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed: owner:self options:nil];
id firstObject = [topLevelObjects objectAtIndex:0];
if ( [ firstObject isKindOfClass:[UITableViewCell class]] )
cell = firstObject;
else cell = [topLevelObjects objectAtIndex:1];
}

以下より:
objective c - Is it possible to design NSCell subclasses in Interface Builder? - Stack Overflow

mailmanのweb interfaceをssl対応に

OSX ServerのWikiActive Directoryユーザーも使えるようにするためにweb serviceをすべてSSL化した。その影響でmailmanSSL対応にするはめに。
そのままだとweb interfaceの管理画面はリンクがすべてhttpのままでうまく動かない。

リンクもすべてhttpsになるようにするには

1) /usr/share/mailman/Mailman/mm_cfg.pyに以下を追加

DEFAULT_URL_PATTERN = 'https://%s/mailman/'

メーリングリストサーバー構築(Postfix+Mailman編) - Fedoraで自宅サーバー構築

2)既にリストを作ってある場合は以下のコマンドでhttpsに書き換える
$prefix/bin/withlist -l -a -r fix_url

Lurker - Database message source pull failure