bzip2 と xz の比較

root@sv tmp]# /usr/bin/time -v xz -9 youme-20140223-11hour.pcap 
	Command being timed: "xz -9 youme-20140223-11hour.pcap"
	User time (seconds): 574.53
	System time (seconds): 2.16
	Percent of CPU this job got: 99%
	Elapsed (wall clock) time (h:mm:ss or m:ss): 9:37.74
	Average shared text size (kbytes): 0
	Average unshared data size (kbytes): 0
	Average stack size (kbytes): 0
	Average total size (kbytes): 0
	Maximum resident set size (kbytes): 2759904
	Average resident set size (kbytes): 0
	Major (requiring I/O) page faults: 1
	Minor (reclaiming a frame) page faults: 170496
	Voluntary context switches: 20
	Involuntary context switches: 4595
	Swaps: 0
	File system inputs: 1054840
	File system outputs: 446224
	Socket messages sent: 0
	Socket messages received: 0
	Signals delivered: 0
	Page size (bytes): 4096
	Exit status: 0

[root@sv tmp]# /usr/bin/time -v xz youme-20140223-11hour.pcap
	Command being timed: "xz youme-20140223-11hour.pcap"
	User time (seconds): 436.28
	System time (seconds): 1.54
	Percent of CPU this job got: 99%
	Elapsed (wall clock) time (h:mm:ss or m:ss): 7:18.77
	Average shared text size (kbytes): 0
	Average unshared data size (kbytes): 0
	Average stack size (kbytes): 0
	Average total size (kbytes): 0
	Maximum resident set size (kbytes): 384224
	Average resident set size (kbytes): 0
	Major (requiring I/O) page faults: 4
	Minor (reclaiming a frame) page faults: 24048
	Voluntary context switches: 12
	Involuntary context switches: 4809
	Swaps: 0
	File system inputs: 1030472
	File system outputs: 442800
	Socket messages sent: 0
	Socket messages received: 0
	Signals delivered: 0
	Page size (bytes): 4096
	Exit status: 0

[root@sv tmp]# /usr/bin/time -v xz -6 youme-20140223-11hour.pcap
	Command being timed: "xz -6 youme-20140223-11hour.pcap"
	User time (seconds): 471.36
	System time (seconds): 3.86
	Percent of CPU this job got: 99%
	Elapsed (wall clock) time (h:mm:ss or m:ss): 7:58.38
	Average shared text size (kbytes): 0
	Average unshared data size (kbytes): 0
	Average stack size (kbytes): 0
	Average total size (kbytes): 0
	Maximum resident set size (kbytes): 384512
	Average resident set size (kbytes): 0
	Major (requiring I/O) page faults: 4
	Minor (reclaiming a frame) page faults: 20501
	Voluntary context switches: 83
	Involuntary context switches: 9157
	Swaps: 0
	File system inputs: 1120024
	File system outputs: 475480
	Socket messages sent: 0
	Socket messages received: 0
	Signals delivered: 0
	Page size (bytes): 4096
	Exit status: 0

[root@sv tmp]# /usr/bin/time -v bzip2 -9 youme-20140223-11hour.pcap 
	Command being timed: "bzip2 -9 youme-20140223-11hour.pcap"
	User time (seconds): 68.78
	System time (seconds): 0.46
	Percent of CPU this job got: 99%
	Elapsed (wall clock) time (h:mm:ss or m:ss): 1:09.45
	Average shared text size (kbytes): 0
	Average unshared data size (kbytes): 0
	Average stack size (kbytes): 0
	Average total size (kbytes): 0
	Maximum resident set size (kbytes): 28176
	Average resident set size (kbytes): 0
	Major (requiring I/O) page faults: 2
	Minor (reclaiming a frame) page faults: 1792
	Voluntary context switches: 5
	Involuntary context switches: 92
	Swaps: 0
	File system inputs: 200
	File system outputs: 480072
	Socket messages sent: 0
	Socket messages received: 0
	Signals delivered: 0
	Page size (bytes): 4096
	Exit status: 0

mysqli のラッパクラスを書いた

prepare(プリペアドステートメント)どころかプレースホルダもなしにプログラマーSQLを書かなければならない某社の自称フレームワーク()に辟易して、ナントカさんオススメの MDB2 を試したが MySQL-4.1.x ではどうも対応していないようで、とても悲しい目に遭ってしまいました。
さらにPDOもいまいちな評判が目に付いたので、仕方なくmysql()を使うべきかなやんていたところ、mysqli()なるものをphpマニュアルで見つけたので、使ってみることにしました。
ところが!ネイティブにprepare出来るのはよいけれど、prepare()の前に値の型をバインドしないといけない。fetch()の前に値を入れる変数をバインドしないといけない。こんだけ面倒なのに、名前付きホルダーが使えない。すっげー面倒くさい縛りがある。
既に MDB2 を使うつもりで名前付きホルダーの前提でクエリーリストをつくってしまっていた。

というわけで仕方なく myqli を名前付きホルダーっぽい使い勝手の出来るラッパクラスを書きました。
まだ全然使っていないので、バグもあるだろうし、機能的にも足りていないでしょうが、最低限動くようにはなっているはずです。

んで、例によって例のごとく。ライセンス表記はなく、著作権は私にあり、コピペして使うのは自由だが、配布していたりはしないのです。

サンプルコード

<?php
require_once('YamaDB.class.php');

    $db = new YamaDB( array( 'host'      => 'localhost',
                            'user'      => 'username',
                            'passsword' => 'passwd',
                            'db_name'   => 'dbname',
                            'port'      => 5432,
                            'charset'   => 'ujis',,
                            'socket'    => '/tmp/my.sock') );
    $sql = " SELECT server_id as id, count(*) as calls, sum(Price) as price ";
    $sql .= "FROM cdr WHERE End_tm >= :startDate AND End_tm < :endDate ";
    $sql .= "AND server_id = :serverId ";
    $sql .= "GROUP BY server_id ORDER BY server_id asc";
  
    $types = array( 'startDate' => 's', 'endDate' => 's', 'serverId' => 'i' );
  
    $vars = array( 'serverId' => 6800002345,
                   'startDate' => '2012-04-05 12:00:00',
                   'endDate' => '2012-04-06 00:00:00'
                 );

  try {
    $db->prepare( $sql, $types, $vars );
    $db->execute();
    $res = $db->fetch();
  }
  catch( Exception $e ) {
    die( $e->getMessage() );
  }
続きを読む

Android入門の復習メモ

新春!androidを1からやってみる勉強会<第3回>@東京・半蔵門 : ATNDで習ったことの復習です。

SDKのインストールとセットアップ

  1. C:\android 以下にusbから3つのフォルダをコピー
  2. pleiades/eclipse/eclipse.exe を起動する
  3. eclipse → ウィンドウ → 設定 で「ワークスペースの設定」、AndroidSDKワークスペースを選択
  4. 右上の「Java」をクリック
    • 新規Androidプロジェクトでプロジェクトを作成する
      • プロジェクト名: test1
      • ビルド・ターゲット: 1.6
      • アプリケーション名: Test1
      • パッケージ名: com.oboetel.test1
      • Create Activity: Test1
      • Min SDK Version: 4

これでプロジェクトを作成するまでは完了です。*1

Hello World!! 的なプロジェクトの実行

最初につくったプロジェクトをビルドしてみる。

  • eclipseの一番左のウィンドウでビルドしたいプロジェクトを右クリック

して、実行 → Androidアプリケーション を選ぶと自動でターゲット端末にビルドしたアプリをインストールして実行までやってくれます。ターゲットがない場合は、エミュレータを起動して、エミュレータ内にアプリをインストールしてくれます。*2

出力文字列を変えてみる

最初の状態だとプロジェクト名が表示されるので、これを別の文字列に書き換えてみます。

test1
 |
 -- res
    |
    -- values
       |
       -- strings.xml

リソースマネージャのxmlエディタで、上記の値を編集すればO.K.。保存してから『実行』すれば、ターゲット上のアプリも書き換えられています。

*1:ウィンドウズのユーザー名(ログインアカウント)に日本語を含んでいるとAVDのセットアップに失敗します。

*2:AVD(ヴァーチャルコンソール)が起動するまでがドエライ時間が掛かる。AVDが起動してさらに待つと、ビルドしたアプリが起動します。実際の開発時にはターゲットがないとやってらんないす。

2009年10月2日での最新版 携帯電話ゲートウェイip帯域情報を更新しました。

兎に角、放置しまくりだったのですが、先月ちょっとだけ更新しました。出来れば今後はイー・モバイルにも対応したいです。
ケータイキャリアのIPアドレス帯域を更新しました。

続きを読む

Google Apps とレンサバでつくるメール駆動型Webサービス

必要最小限の手間で携帯電話向けのウェブサービスをつくってみる。なぜなら暇だから。つかお前の予定!をつくったノウハウをまとめておくよ。
以下、目次。それぞれの項目が書きあがったら公開していきます。

独自ドメインとメール転送

自宅サーバーよりもレンサバで

  • 自宅サーバーはリスキーでコスト高
  • なんでも出来ちゃうレンサバ(さくらとか)
  • もっとなんでも出来ちゃうVPS

サーバーの準備

ドメインとメールの設定

メール受信を引き受けるスクリプト

メール送信を引き受けるスクリプト

  • shellからメールを渡す
  • cronでメールスプールディレクトリを監視する
  • これからは smtpgmail から出したほうが良いかもね SMTP-AUTH

ケータイ向けWebアプリの設計

  • ユーザーをどうやって特定するか
    • メールアドレス? or UID?
  • クッキーとセッション
    • セッションを使わずにUIDに依存する
  • 画面(UI)設計
    • スクロールしない、クリックを減らす、アクセスキーを使う

認証とセッション

  • uid と端末製造番号を使った認証
  • セッションでの認証とその維持
  • uid に限った認証とその維持
    • 常にuidをチェックすることで認証する

メールの受信データを登録データにするために

  • 個別のメールアドレスでの受信と判別をする方法
  • テキスト読み取り処理
    • 日付、時刻フォーマットを読み取る
    • メールアドレスを読み取る

タスクリストを作ってみよう

  • 要求仕様をまとめてみる
  • 画面遷移を設計してみる
  • テーブルを設計してみる
  • 必要な処理や機能をまとめてみる
  • 共通処理と機能をまとめたライブラリにしてみる
  • メインの処理orページを作ってみる

2009年3月10日での最新版 携帯電話ゲートウェイip帯域情報を更新しました。

ケータイキャリアのIPアドレス帯域を更新しました。

続きを読む

新機能:予定をやり直せます

お前の予定!!に新機能を追加しました。

予定の画面(予定詳細画面)のメニューに「編集する」を追加しました。

  • タイトル
  • 本文(詳細)
  • 日付時刻

を書き換えることが出来ます。
予定を再利用したり、先延ばしすることも出来ます。また、途中から共有メンバーを増やすということも出来るようになりました。