2008/01/20(日)分布数え

大量のデータを処理するときに使う手法の1つです.データを一読し,データの出現回数を数えてしまうものです.

これを利用したソートの一種としてバケットソートがあるのですが,データとして取りうる値の数だけメモリを用意する必要があることが欠点になります.が,取りうる値の種類が16bit程度であれば何も気にせずにメモリを確保してしまえばいいだけです.

というわけで,最近ちょっとした画像?処理をしていたのですが,さすがに早いですね.頻度分析というか特徴抽出というかそういう内容だったのですが,アルゴリズム通りに実装すると数日かかりそうな処理が1-2分で終わりました.

問題に対して制限をかけることは重要ですね.

moodle

2008/01/11プログラム

moodleのソースを読んだときのメモ.

関数

ログインしてるかテスト

// if you are logged in then you shouldn't be here!
if (isloggedin() and !isguestuser()) {
    // ログイン済み
}

ユーザ情報の取得

$user = get_complete_user_data('username', $username);

POST, GETからデータを持ってくる

データが無ければ2番目の引数の値がデフォルトとして入る.
3番目の引数はデータの型.

$value   = optional_param('p', false, PARAM_RAW);

制限

ユーザ情報における長さの最大値

lib/moodlelib.phplimitに入ってる.
データベースの構造を変えるときは,ここも同時に変えること.

$limit = array(
    'username'    => 100,
    'idnumber'    =>  64,
    'firstname'   => 100,
    'lastname'    => 100,
    'email'       => 100,
    'icq'         =>  15,
    'phone1'      =>  20,
    'phone2'      =>  20,
    'institution' =>  40,
    'department'  =>  30,
    'address'     =>  70,
    'city'        =>  20,
    'country'     =>   2,
    'url'         => 255,
);

メモ

ロールの切り替え

switchrole=xが付いているときは,そのロールに切り替わる.
ロールを追加/削除していないときの標準値

  • 1 管理者
  • 5 学生
  • 0 元のロールに戻る

2008/01/05(土)Turing Machine

チューリングマシンのよさげなプログラムが無かったので作った.
cgiにしてあるのでwebで使えるらしい.

Turing Machine Emulator(kis-labを間借りしてます)

なんとなく作ったのでバグがあるかも.

Turing Machine

よく分からないけど,すごいものらしい.

使い方

テープにいろいろ書いて,プログラムつくってrun.
サンプルとして,2進数の足し算が標準で入ってる.

制限

実行ステップ数

一度に実行できるのは50ステップまで.でも,continueできるのであまり意味は無い.
しかも,URLに?LIMIT=xxxを追加するといくらでも増やせたり減らせたりしてしまうらしい.
ただ,正の整数以外が指定された場合の動作は不明っぽい*1

使える状態とか記号

状態は整数の範囲ならいくらでも大丈夫.
使える記号は_と空白類文字を除くascii文字1文字のみ*2
_は何も書かれていない(空白)扱い.

*1 : テストしてないらしい

*2 : a-zA-Z0-9とか

サンプルプログラム

2進数の足し算

B被加算数P加算数Eとして入力.たとえば,11 + 101ならばB11P101E
2進数の足し算プログラム

2の補数

補数を求めたい2進数をそのまま入力.たとえば,01011101ならば01011101
2の補数プログラム