These pages are written by only Japanese.

Welcom to My Diary.com
最新の日記タイトル一覧カテゴリ別タイトル一覧トップへ戻る〜

こんばんわ♪ 現在は3月30日(土)0時10分。 日付が変わりました。


hns - 日記自動生成システム - Version 2.19.5 (色々 Fixed)

先月 2010年11月 来月
01 2 03 4 05 06
7 8 09 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Namazu for hns による簡易全文検索です。
詳細は 詳細指定/ヘルプをご参照下さい。
検索式:

2010年11月01日(月)

swfed 0.24 リリース (bitmap shape タグ検索機能)

bitmap shape タグ検索機能がメインのリリースです。

bitmap shape タグ検索:

0.23 の setShapeAdjustMode を使うと、画像を入れ替える際に枠に合わせてよしなに調節しますが、画像を参照する Shape タグを SWF 中から検索するので原理的に重たいです。
一方、0.22 から機能する applyShapeRectFactor applyShapeMatrixFactor は処理は軽めですが、shape_id と変換するサイズの比率を指定するメソッドで
image_id を調べるだけでも面倒なのに、shape_id も調べなきゃとか。変換前の画像サイズを覚えるとかやってらんない。
という状況が予想されるので、以下のメソッドを用意しました。
  • getShapeIdListByBitmapRef($image_id) : image_id を指す Shapeタグid一覧取得
  • getBitmapSize($image_id) : image_id に対応する画像の縦横サイズを得る
$image_id は仕方なく SWF を dump して調べて指定して貰うとして、
入れ替え後画像のサイズを $newSize で渡せば、
$oldSize= $swfed->getBitmapSize($image_id);
$scale_x = $oldSize['width']  / $newSize['width'];  // 逆数
$scale_y = $oldSize['height'] / $newSize['height']; // 逆数
$shape_id_list = $swfed->getShapeIdListByBitmapRef($image_id);
foreach ($shape_id_list as $shape_id) {
	$swfed->applyShapeMatrixFactor($shape_id, $scale_x, $scale_y, 0, 0, 0);
}
のように出来て、$shape_id_list を何らかの方法(memcached とか)で cache すれば、 重たい所も対処できるはず。という目的で用意しました。

version:

php -i で swfed の version が分かるようにしました。
% php -i | grep -i swf
/etc/php.d/swfed.ini
swfed
SWF Editor support => enabled
SWF Editor version => 0.24
SWF Editor PNG support => yes
SWF Editor GIF support => yes
PWD => /home/yoya/svn/swfed/trunk/src
_SERVER["PWD"] => /home/yoya/svn/swfed/trunk/src
_ENV["PWD"] => /home/yoya/svn/swfed/trunk/src
今までなくて、ほんと済みません。

2010年11月03日(水)

雲取山

東京で一番高い山に登ってきました。

午前10時に登山を開始して午後5時に戻れました。
丁度、紅葉の時期で赤青(緑)黄の色が楽しめました。

山頂近くでは足が重たくなりましたが、 思ったよりあっさり登れたので自信がついたかも。
さて、次はどこ行こう。

2010年11月05日(金)

PHPの整数格納

PHP の integer は C 言語の singed long (符号付32bit整数)相当で、大量のデータを扱ってるとすぐに表現できる範囲を超える。
float や string の型を使えば表現出来る範囲が広がるけど、その代りに操作出来る事が減る。

操作と範囲のトレードオフ:

  • integer: ビット演算+四則演算+大小比較 (但し singed long の範囲しか表現できない)
  • float: 四則演算+大小比較 (正負共に14桁 *1 まで表現出来る)
  • string: 大小比較 (心配する意味がない程度の桁は扱えるはず)範囲を超える
integer の範囲を超えると自動で float になる
float の範囲を超えると、上位14桁だけ保持して下位の桁は 0 に丸められる (単に 0 クリアするのでなく丸まる)
浮動小数点なので当たり前なんだけど。。

そもそも:

BCMath 使えば任意の桁で四則演算できるけど、 型として任意精度がほしいデスよね。
bcadd とか bccomp とか面倒だし。読みにくいし。

hnw さんの指摘:

@hnw @yoya 32bit環境でfloatをstringにキャストすると14桁で切れるみたいですね。64bit環境だと再現せず。謎だわ。 
当初、12桁と書いていたのですが、hnm さんから指摘を受けて、
かつ手元の環境で追試したら14桁だったので、文言修正。

*1: この桁数は環境によって異なります。php.ini の precision

2010年11月06日(土)

妙義山、白雲山、大の字まで

妙義山は三つの山で構成されていて、
そのうちの白雲山の中腹にある大の字まで登りました。

登山:

妙義神社の奥に登山道入口があります。

ガイドブックに中級者向けとあったので気軽に向かったのですが、
いざ登ってみるとボルダリング本番みたいな道が多かったです。

途中で、ここから先は上級者向けという看板があり、
大の字の岩に登った所で難易度を実感出来たので、
今日はそこで満足して引き返してきました。

この先は万が一の為に一人で行くのは遠慮します。
あと保険入った方がよいですね。これ。。

ガイドブック:

よくよく見直したら、ガイドブックの道は山を登らずに、山の横を通る道でした。
パンフレットに滑落事故多発とか書かれてる道が中級者向けな訳ないですね。

寄居PA:

妙に気合いが入ってると思ったら、星の王子様テーマパークだそうです。

でも、売ってるのがいちいち高いので、PA としては実用的じゃないです。

2010年11月09日(火)

array_diff_recursive

ググっても見つからなかったので作ってみた。(所要時間10分)

解決したい問題:

<?php
$a = array('a' => 'a',
        'b' => array('b', 'c'));

$b = array('a' => 'a',
        'b' => array('b'));

var_dump(array_diff($a, $b));
残念な結果
array(0) {
}

function:

<?php
function array_diff_recursive($a, $b) {
    $result = array();
    foreach ($a as $k => $v) {
        if (array_key_exists($k, $b)) {
            if (is_array($v)) {
                $result[$k] = array_diff_recursive($v, $b[$k]);
            } else {
                if ($v != $b[$k]) {
                    $result[$k] = $v;
                }
            }
        } else {
            $result[$k] = $v;
        }
    }
    return $result;
}

テスト:

<?php
$a = array('a' => 'a',
        'b' => array('b', 'c'));

$b = array('a' => 'a',
        'b' => array('b'));

var_dump(array_diff($a, $b));
var_dump(array_diff_recursive($a, $b));

結果:

array(0) {
}
array(1) {
  ["b"]=>
  array(1) {
    [1]=>
    string(1) "c"
  }
}

追記:

ほぼ同じルーチンが既にありました。(count 0 の扱いが違うだけ) 見ないで作ったのに、そっくりになったのはちょっと感動。

追記2:

当初(5分で)作った没バージョン。色々微妙だけど晒してみる。
<?php
function array_diff_recursive($a, $b) {
    $result = array();
    if (is_array($a)) {
        foreach ($a as $k => $v) {
            if (isset($b[$k])) {
                $ret = array_diff_recursive($a[$k], $b[$k]);
                if (count($ret) > 0) {
                    $result[$k] = $ret;
                }
            } else {
                $result[$k] = $a[$k];
            }
        }
    } else {
        if ($a != $b) {
            return $a;
        }
    }
    return $result;
}
これを5分位で改良して、冒頭の array_diff_recursive が出来ました。

これで、5 日分だよ〜。

タイトル一覧
カテゴリ分類
Database
JXTA
Java
XML
awm
bookmark
keyword
memo
news
research
Powered by hns-2.19.5, HyperNikkiSystem Project