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() ); }
- 後で読む:当たり前だけど同じようなのがいくつかありますね。そっかそっか、忘れてたけど、世の中的にはMDB2で解決できる話なんだよね。
設定のもんだいだったのかな?MDB2
Android入門の復習メモ
新春!androidを1からやってみる勉強会<第3回>@東京・半蔵門 : ATNDで習ったことの復習です。
- cf. adakoda.com -
- めんどくせいと思って全部アップデートしたら起動しなくなった。エラーログもイミフ過ぎ。【Android開発】EclipseのAndroid SDKをアップデートする方法
- Android だけをアップデートするとか、ひとつずつアップデートする。&もう一度usbから復帰させる。
SDKのインストールとセットアップ
- C:\android 以下にusbから3つのフォルダをコピー
- pleiades/eclipse/eclipse.exe を起動する
- eclipse → ウィンドウ → 設定 で「ワークスペースの設定」、AndroidのSDKワークスペースを選択
- 右上の「Java」をクリック
これでプロジェクトを作成するまでは完了です。*1
Hello World!! 的なプロジェクトの実行
最初につくったプロジェクトをビルドしてみる。
- eclipseの一番左のウィンドウでビルドしたいプロジェクトを右クリック
して、実行 → Androidアプリケーション を選ぶと自動でターゲット端末にビルドしたアプリをインストールして実行までやってくれます。ターゲットがない場合は、エミュレータを起動して、エミュレータ内にアプリをインストールしてくれます。*2
出力文字列を変えてみる
最初の状態だとプロジェクト名が表示されるので、これを別の文字列に書き換えてみます。
test1 | -- res | -- values | -- strings.xml
リソースマネージャのxmlエディタで、上記の値を編集すればO.K.。保存してから『実行』すれば、ターゲット上のアプリも書き換えられています。
2009年10月2日での最新版 携帯電話ゲートウェイip帯域情報を更新しました。
Google Apps とレンサバでつくるメール駆動型Webサービス
必要最小限の手間で携帯電話向けのウェブサービスをつくってみる。なぜなら暇だから。つかお前の予定!をつくったノウハウをまとめておくよ。
以下、目次。それぞれの項目が書きあがったら公開していきます。
独自ドメインとメール転送
- Google Apps を使うと独自ドメインを複数使えるよ
- 複数のドメインで簡単にメールを使えるよ
- メール転送もキャッチオールとフィルタで簡単に
サーバーの準備
- MTA: qmail
- アプリ系
- Apache
- PostgreSQL
- PHP
- セキュリティ系
- sshのポート設定
- jail
ドメインとメールの設定
- Google Apps でのドメイン追加
- キャッチオールな設定など
- qmail の受信設定
ケータイ向けWebアプリの設計
- ユーザーをどうやって特定するか
- メールアドレス? or UID?
- クッキーとセッション
- セッションを使わずにUIDに依存する
- 画面(UI)設計
- スクロールしない、クリックを減らす、アクセスキーを使う
認証とセッション
- uid と端末製造番号を使った認証
- セッションでの認証とその維持
- uid に限った認証とその維持
- 常にuidをチェックすることで認証する
メールの受信データを登録データにするために
- 個別のメールアドレスでの受信と判別をする方法
- テキスト読み取り処理
- 日付、時刻フォーマットを読み取る
- メールアドレスを読み取る
タスクリストを作ってみよう
- 要求仕様をまとめてみる
- 画面遷移を設計してみる
- テーブルを設計してみる
- 必要な処理や機能をまとめてみる
- 共通処理と機能をまとめたライブラリにしてみる
- メインの処理orページを作ってみる
新機能:予定をやり直せます
お前の予定!!に新機能を追加しました。
予定の画面(予定詳細画面)のメニューに「編集する」を追加しました。
- タイトル
- 本文(詳細)
- 日付時刻
を書き換えることが出来ます。
予定を再利用したり、先延ばしすることも出来ます。また、途中から共有メンバーを増やすということも出来るようになりました。