Tagged ‘PHP’

ISBN変換

やらなきゃいけない事は他にもいろいろあるのにまたツールを作った。
以前からAmazonで言うところのISBN-13のハイフンの打つタイミングがよく分からないので調べてみたら桁数は違うけど規則性がある事を発見した。
例えば、978-4088745213だと正式には978-4-08-874521-3になる。
wikipedia風に言うと「接頭記号」-「グループ記号」-「出版者記号」-「書名記号」-「チェックデジット」となる。「接頭記号」と「グループ記号」と「チェックデジット」は桁数が決まってるので問題無いが「出版者記号」「書名記号」は桁数が決まっていない、そこでISBN 出版社リストを見ていると「出版者記号」の頭の2桁を見ると桁数が分かる事を発見した。
PHPで書くと下記の様な感じだ($aに「出版者記号」の頭の2桁が代入されてるとする)
if ($a < 25) $keta = 2; else if ($a < 75) $keta = 3; else if ($a < 86) $keta = 4; else if ($a < 90) $keta = 5; else if ($a < 99) $keta = 6; else $keta = 7; 更に調べてみるとISBN-10とISBN-13は現在のところ変換可能という事が分かった。 ISBN-13とISBNの大きな違いは「接頭記号」が付くかどうかで、「接頭記号」には978と979があるという事でISBN-10からISBN-13への変換は無理と思いこんでいたんだけど実際は979は使われていないみたい。そうなると978付けて「チェックデジット」を付け直すと変換が可能という事になる。 ISBN変換

GDを使って激安な価格表示その2

前回の価格表示を画像に埋め込む事にした。
前に作った価格.comとconeco.netとベストゲートとベストプライスの比較サイトを一括でチェックするやつに追加する感じで入力していくとブログに貼るソースデータを作れる様にしたかったので、それを更にハッティンさせて画像をトリミングしてその中に価格表示を埋め込む事にした。
今回の肝は「jsCropperUI」というやつだ。
demo
半年以上前から存在は知ってたんだけど「いつかやろう」とほったらかしていた。
どうも、AJAXとかオープンソース系は乗り気になれないんだけど。こんなの自分では作れないのでトリミング座標はcropperに任せて作ったんだけどずっとjavascriptエラーがでてる。
深刻なエラーではないのか普通に動作はするんだけど気になる。
エラーの場所を見るとデバッグみたいな英語が書いてあったので「いらないか」と思って消したら、エラーがでなくなった。
http://uda2.com/blog/price/
まだ、細かいトコ詰めてないんで動作が怪しいけど、これのおかげてそんなに安くないのについつい載せてしまった。
あと残る問題は見に来る人が少ない事だけだ・・・・

GDを使って激安な価格表示

どうも心躍る!期間限定激安高校「大特価情報部」の価格表示があんまり激安感が無かったので激安な表示にすることにした。
参考にしたのは激安で有名なドン・キホーテのチラシだ。
なんか、いい感じで数字が重なって激安感が出てる。
チラシの数字部分とカンマと円をトレースして、赤黄の部分と黒白(背景が白なんで白はイマのところ意味無い)の部分の各2枚のpngを作った。
赤白
黒白
↑こんな感じの画像。
そんで、PHPのGDってのを使って
白いベースを作って
黒白の画像を左からつめつめで乗せていって
次に赤黄の画像を左からつめつめで乗せていって
最後に点を打っている。
画像があればその画像を表示してなければ作る感じなんで、なんかの間違いで大人気ブログになっても大丈夫なはず。
http://uda2.com/price/priceimage/19800.png
赤いところの数字をいろいろ変えてみて。
(0~999999円まで対応)
これ作るのに半日かかってしまった、一日100PVも超えられないページには豪華すぎる価格表示!
どうっすか?

DNRH-001にVINEその5

宣言通り、セキュリティソフトを入れることにした。
まず、アンチウイルスのソフトだけど何がいいのかよく分からんので毎度のVine Linuxで自宅サーバーに載ってるF-Prot AntivirusてのとClam AntiVirusてのを入れる事にした。
(正直2つもいるのかも分からんが・・・)
F-Prot AntivirusはWindowsマシンで落としてからファイル共有(SAMBA)経由でVINE側に送ってインストールした。
なぜか個人情報を入れる事無くダウンロードが出来インストールをしてウイルス定義を更新したが既に最新版で何も起こらなかった。
自動起動等の処理も指示通りやったら、問題なく登録できた。

続いてClam AntiVirus。Vine Linuxで自宅サーバーでは/etc/apt/sources.listを弄る様に書いてたが既に指示通りになってたので保存せず閉じる。
それ以外はこれまた指示通りやったらすんなりインストールと自動起動等の処理も完了。

あとは、chkrootkitってのを導入してみた。正直、何をしてくれるのかよく分からんけど守ってくれそうだ。
これもすんなりインストールが終わった。

あまりに早く終わったのでphpMyAdminを入れてみた。

(さらに…)

DNRH-001にVINEその4

家にはlink stationがあり「Link de 録!!」という素敵な連携プレイでファイル共有だけでなくftpも録画も賄ってたのでDNRH-001の居場所も無く、置き場所も仮の場所で微妙に邪魔で電源切りっぱなしだったんだけどようやく置き場所だけ決まったんで何かしようと検索してたら。
ファンレスPC DNRH-001ってどうよ?Part2ってのを発見!って既に2スレ目に突入してる。
結構人気あるんだねDNRH-001って。
「そうそう、熱いんだよね」とか「そうそう、意外と重いんだよね」とか「そうそうOEMだから他のパソコンにXP入れられないだよね、オレまたOS買っちったよ」思いながら見てたらwiki(まとめサイト)を発見。
( ゚д゚) ・・・
(つд⊂)ゴシゴシ
(;゚д゚) ・・・
(つд⊂)ゴシゴシゴシ
(;゚ Д゚) …!?
DNRH-001のwikiにこのブログが掲載されてる~~~。
DNRH-001目当てで見に来てくれた人すいません、そんなに役に立ちそうな事は書けません。

(さらに…)

PHPの日本語処理2

気になる仕事50職の年収公開SPを観て自分との年収の差に愕然としながら、PHPを弄ってるとあることに気づいた。
mbereg_replace
ん?「mb_ereg_replace」で無くて?
もしかしたら誤記してしまってたのか?
と一瞬青くなったがよく考えてみると何の問題もなくずっと動いてる。
調べてみると「mbereg_replace」というのもあるそうだ。PHPを始めた頃よく参考にしてたSAK 図書館でmbereg_replaceを使ってたんでそのままこの記述にしてたんだろう。
それでも気になるので更に調べてみるとれぶろぐに「mb_ereg 系の関数は PHP 4.2.0 以降でないと使えないことが判明。」とあった。
前回、「i18n_」系の関数の為に処理を追加したのに「mbereg_」系でも処理を追加しなくてはならないのか~?
あ、よく考えるとオレってオープンソースなの作った事無いから、その都度サーバーに合わせて修正すればいいんやった。
ま、とりあえず「mb_ereg_replace」に統一しときますか。

いろんな空白

PHPに関わらず大抵の言語で$a==""ってすると未定義のものもNULLのモノもTRUEを返す。
そこで調べてみた。
if ($a=="") print "true";
$aが""の場合だけでなく未定義、NULL、0、"0"、FALSE、array() なども"true"を返す。
下記も同様の動きをする。
if (!$a) print "true";
if (empty($a)) print "true";

文字列の検索

文字列の検索する際に使う関数の速度を比較してみた。
preg_match : 0.156914ms
→ preg_match (“/”.$pattern.”/”, $subject )
mbereg : 0.198855ms
→ mbereg ($pattern, $subject )
strpos : 0.093295667ms
→ strpos($subject ,$pattern) !== false
mb_strpos : 0.226389333ms
→ mb_strpos($subject , $pattern) !== false
(3回の平均)
当然だけどstrposが一番、
ただmb_strposが遅いのが以外だった。
mberegとmb_strposを比較してもmb_strposの方が遅い、
ただ、今回のテストでmberegはコンパイルエラーが出た。
再読込すると直ったので原因はよく分からない。
数十回に一回ぐらい同じファイルなのに検索結果が違うときがある。
これも再読込すると直る。
負荷をかけすぎなのかもしれないがロリポは何か挙動がおかしい気がする。
(XREAは偶に表示できなくなるけど・・・)
本格的に運用するならもう少し高価なサーバーの方がいいのかもしれない。