1ファイルで提供されるzipソースコードライブラリ miniz

minizはC言語の1ファイル”miniz.c”で作られたZIPライブラリ。簡単にプロジェクトに組み込んで使うことができる。

使うには”miniz.c”をインクルードして使うが、すでに大きいプロジェクトの場合は、このファイルは普通にコンパイルして、minizの機能を利用するファイルでは、MINIZ_HEADER_FILE_ONLYを定義してからインクルードする。こうすればヘッダファイルとして振舞う。warningがひどいのでここではそうした。

VC++2005で試した。

これは圧縮。あらかじめ全体をメモリで確保するので小さいサイズ向け。本体のサンプルではほかにもファイルを圧縮するものや、infalte、deflateを使って少しずつやる方法などがわかる。ただしファイルを直接圧縮する関数のファイル名引数がchar*なのでunicodeで困るかもしれない。

jQueryでハイライト

ここにあるjquery-highlight.jsをダウロードしてサーバに置いて以下のHTMLでハイライトできる。

スタイルシートの.highlightでスタイルを指定、hightlight()関数でハイライト、最初の引数はハイライトする文字列、2番目は大文字小文字を区別するならtrue。

テストページ

PHPでサイトが重いときにもう少し待ってくださいhtmlを表示する

家サーバで遊んでいて、virtual hostをたくさん作ってサーバPCが重くなったときに、PHPで簡単なページを表示する方法。もっとまともな方法があると思うがここでは適当に作った。

最初にエラーのとき表示するHTMLを用意する。ここでは以下の物を作った。

これを/phpGlobal/busy.htmlに保存する。ディレクトリは適当でいい。

次にPCが重いかどうかチェックするPHPを書く。

これを/phpGlobal/check.phpに保存する。
これはサイトの負荷が3を越えたらbusy.htmlを表示する。

つぎにapache2の設定ファイルapache2.confなどに以下の行を追加する。

これでapache2をリスタートすると、すべてのPHPの実行前にcheck.phpが実行される。

ただしこの方法だと文字コードによって化けることがあるし、その他にも問題があるかもしれない。POSTリクエストのときは処理したほうがいいと思われる。

PCの現在の負荷はtopコマンドの右上に表示されるのでそこで確認できる。

/proc ファイルシステム

/procは以下のファイルやフォルダは実際のファイルではなくカーネルが提供する擬似ファイル。
ファイルのようにアクセスすると、カーネルにアクセスし情報を取得できる。
擬似ファイルシステムにしておくと、プログラムからはインターフェースが統一される。

/proc/[数字]
数字はPID(プロセス毎につけられた番号)をあらわす、プロセスのいろいろな状態を知ることができる。
サーバーなどは起動時に自分のPIDをファイルに書き込んでいたりするので、そこからPIDを知ることができる。

apache2は/var/run/apache2.pidなどに自分のPIDを書き込む。
よって以下のようにして、apache2のプロセス状態を取得できる。

/proc/loadavg
CPUの使用率を表示する。uptimeコマンドなどで利用する。

ほかにもいろいろあるがこれらは man proc で知ることができる。

phpで処理にかかった時間を調べる

PHPやjavascriptで処理にかかった時間を計算する。
PHPの場合、まずいかの関数を用意する。これはpukiwikiからコピーした。

microtime関数は、現在時刻をスペースで区切ったミリセカンドと、秒で返します。
explodeでスペースで区切った配列に変換し、それをlistで受けます。
listは右辺に配列をおいて代入できるPHP言語の組み込み機能です。

時間を測定したい処理の前に以下のようにSTART_MICROTIMEを定義します。

defineは定数を定義できます。一度定義すると変更できないので便利です。

処理が終わったところで以下のようにして時間を計ります。

書式文字’01.03f’は、以下のように解釈します
0 : 0で埋める。
1 : 最低1桁を表示する。
. : 浮動小数点の区切り
0 : 0で埋める。
3 : 3桁以上は切り捨て。小数点以下は前とは別解釈になる。

svnのレポジトリ全部から検索する

以前書いたやつだとうまくファイル名がわからないのでbashスクリプトを書いた。

使い方

このスクリプトは*.cpp,*.c,*.hを固定でフィルタしている。

以下過去の記事:

svnレポジトリの中から全部を検索する。サーバーはserver、検索語句はaaa

以下、落書き
一つのコマンドにするのは大変だったので少しずつやる。

まずレポジトリの中のファイル一覧を取り出す。

ファイル名を検索したい場合はここからgrepすればいいが、ここでは内容から検索することを考える。
ここでallファイルにはディレクトリが含まれているのでこれを削除する。ディレクトリは最後が/で終わっているのでこれを削除する。

all2の各行にsvn://svnserver.example.comを加える。

これでall3はsvnのフルパスになった。つぎにsvn catを足す。

grep を足す。ここでは”abc”を検索する。