MacでPostfixを起動

PerlやPHPを使った開発でメールを送信する機能を実装することがありますが、Macの場合、標準の状態ではメールが送信されないようです。

※sendmailコマンドや、mail関数(phpの場合)を使って送信する場合の話です。以下は、Mac OSX 10.7.5で試しました。環境によっては違うかもしれません。

 

Macには最初からPostfixがインストールされているのですが、自動起動はしないので設定して起動する必要があります。

ps_postfix.png

sudoを使ってルートユーザで起動します。

postfix_start.png

警告が出ていますが、とりあえず起動はしたようです。

Perlのchomp

Perlのchompは、文字列の最後の改行コードを削除してくれる関数ですが、ちょっと癖があります。

Perlでテキストファイルの読み込みをする時に次のように使ったりします。


open( IN, "hoge.txt" );
while( <IN> ) {
    chomp;
    print length;
    print "\n";
}
close( IN );

これは単にテキストファイルの内容を読みこんで、各行の長さを表示しているだけです。

各OSで作成したファイルをそのOSで処理する分にはこれで問題ないのですが、例えばWindowsで作成したテキストファイルをMacで処理すると問題が発生します。

Windowsのメモ帳で次の内容のhoge.txtを作成し、


a
bb
ccc

Macで上のスクリプトを動かすと、結果は


2
3
4

と表示されます。期待した長さより1大きな値が表示されてしまいます。

これは、各OS間の改行コードの相違に起因しています。

http、httpsを省いたURLの指定

SSLで暗号化しているページにアクセスする場合は、https://~というURLを使いますが、このページにhttp://で始まるリンクが含まれていると、ブラウザによっては警告が表示されます。

例えば、JQueryをCDN(コンテンツを配置している外部のサービス)からリンクする場合、次のような書き方ができますが、


<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>

同じようにSSLのページでJQueryをリンクする場合は、


<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>

と、書かないと、IEでページを見た時に以下のような警告が出てしまいます。

Webサイトにおくアイコン

近頃は、スマホに特化したしたサイトも多くみられるようになりましたが、スマホ用のサイトを作ったらスマホ用のアイコンを設置しておくのが望ましいです。

スマホが無い時代は、サイトに用意するアイコンというと、favicon.icoでしたが、今ではそれぞれの端末用に以下のようなアイコンが必要になります。

 

CakePHPでデータを一括登録する

CakePHPでちょっとハマったので、メモ

 

CakePHPのモデルを使うと、SQL文を書かなくてもレコードの登録や更新ができます。

例えば、citiesというテーブルがあるとします。


CREATE TABLE `cities` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `post_code` char(7) NOT NULL,
  `name` tinytext NOT NULL,
  PRIMARY KEY(`id`),
  UNIQUE KEY `post_code` (`post_code`)
);

このテーブルにレコードを登録する場合は、Cityというモデルクラスを用意して、

※テーブル名が英語の複数形で、モデルクラス名が単数形なのは、CakePHPの既定の命名規則で、この規約に従って命名すると、いろいろ記述を省略できて便利なんですが、この規約に従わないように記述することもできます。

MySqlの自動採番の値をリセットする

MySQLでAUTO_INCREMENTのフィールドは、レコードを追加するたびに自動的に値が増えていきますが、この値は全てのレコードを削除しても、1には戻りません。また1から番号を振るようにしたい場合は、


ALTER TABLE テーブル名 AUTO_INCREMENT = 1;

とSQL文を発行してリセットします。

ちなみに、レコードが残っている状態でリセットした場合は、SQL文の発行自体は成功しますが、リセットはされませんでした。

えばろぐ v2.9をリリースしました

えばろぐのv2.9をリリースしました。

Evernote SDKの最新版(1.1.0)を利用したため、本バージョンより、iOS5.0以降の対応とさせて頂きました。

 

本バージョンでは、ノートに任意の位置情報を設定できるようにしました。今までは、「位置情報の送信」をオンにした場合に、その時点の位置を取得して自動的に送信していたのですが、今いる位置だけでなく、任意の位置を設定して送信できるようになりました。

 

あまり使われる機会はないかもしれませんが、あるユーザーさんから、子供が学校で描いてきた絵を写真に撮ってEvernoteに残しておきたいけど、その時に学校の位置情報を付加して送りたいとリクエストがあり、実装した次第です。

公式アプリでも位置の設定はできるんですが、今回はテンプレートにも位置の初期値を設定できるようにしたので、このユーザーさんのように場所がある程度固定されている場合は、便利かも知れません。

 

PHPで可変引数を使う

phpで引数を受け取る関数を定義する時、普通は、


function add($a, $b) {
    return $a + $b;
}

といった感じで定義しますが、実は次のようにも書けます。


function add() {
    $args = func_get_args();
    return $args[0] + $args[1];
}

func_get_args()で、関数に渡された引数が配列で返されます。

この書き方だと、引数の数も限定されません。


function add() {
    $args = func_get_args();
    $sum = 0;
    foreach ($args as $v) {
        $sum += $v;
    }
    return $sum;
}

echo add(10, 20, 30, 40, 50);	// 150が出力される。

関数定義で引数を宣言しても構いません。

正規表現を読む

正規表現はプログラミングで文字列が、あるパターンに従っているかどうか確認したい時等によく使いますが、?とか+とか*とかの記号を使った記述が多いため、一見するとどういうパターンにマッチさせようとしているのか理解しにくい場合があります。こいういう場合、パターンの頭から注意深く見て行く必要があります。

 


var parse_url = /^(?:([A-Za-z]+):)?(\/{0,3})([0-9.\-A-Za-z]+)(?::(\d+))?(?:\/([^?#]*))?(?:\?([^#]*))?(?:#(.*))?$/;

これは、JavaScriptでURL文字列にマッチさせる正規表現です。一見すると頭がクラクラしてきそうな記号の羅列です。

この正規表現を読み解いて行こうと思います。

 

最初の/と最後の/で、これが正規表現リテラルであることを示しています。意味的には次のように書いた場合と同じです。

findの便利な近い方

先日の「UNIXコマンド これだけは覚えておけ!」に続いて、同じサイトから今回は、findコマンドについての記事の抜粋&意訳&補足です。

 

findコマンドはUNIXの中でも最も便利なコマンドの1つです。もしあなたがJavaやC++のプログラマで、UNIX環境で作業してるなら、IDEが無くても、ソースファイル中の任意のワードを探すのにfindコマンドが役に立ちます。

 

  • !find で、最後に実行したfindコマンドを再実行

    findコマンドは引数も含めて長くなりがちです。コマンドの前に!をつけると最後に実行した形式で同じをコマンドを実行することができます。

    
    !find 
    

    と入力して、再実行しましょう。