PHPを5.3にアップデートすると、今までのスクリプトが動かなかったりエラーが表示されるようになったりする。
特に、split関数を使うなコノヤローと、
「Deprecated: Function split() is deprecated in…」
と怒られるので、見逃してもらえるようphp.iniに呪文を唱える。
「error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED」
標準では、
「error_reporting = E_ALL」
となっているのでコメントアウトしておこう。
php.iniを保存して、httpdをリスタートさせれば、エラー表示が消えるはずです。
とりあえず、今後はsplitを使うのをやめて、explodeを使うように心がけよう。
でめたしでめたし。
投稿者「admin」のアーカイブ
郵便番号から都道府県を調べる
PHPで郵便番号から都道府県を導く処理が必要になりました。
郵便番号から住所を調べるには、日本郵便で公開されているCSVをDBに突っ込んで、クエリを投げるのですが、データサイズもでかいし、市区町村までは必要がないのでとりあえず都道府県だけを簡単に調べる方法がないか探していました。
適当に調べていたところ、郵便番号の先頭2桁を見ればいいだろうという記事が多いものの、一部の都道府県は他県に混ざっているものがあるらしいく、それに対応したコードが見つからなかったので、日本郵便の検索と格闘しながら新しくコードを用意することにしました。
で、以下のようになりました。
とりあえず動けばいいので、処理速度の最適化は確認していません。
/*==============================================================================
郵便番号から、都道府県番号を取得する簡易版
要素:
郵便番号(nnn-nnnn or nnnnnnn)
戻り値:
都道府県番号
※ 備考:
1 北海道
2 青森県
3 岩手県
4 宮城県
5 秋田県
6 山形県
7 福島県
8 茨城県
9 栃木県
10 群馬県
11 埼玉県
12 千葉県
13 東京都
14 神奈川県
15 新潟県
16 富山県
17 石川県
18 福井県
19 山梨県
20 長野県
21 岐阜県
22 静岡県
23 愛知県
24 三重県
25 滋賀県
26 京都府
27 大阪府
28 兵庫県
29 奈良県
30 和歌山県
31 鳥取県
32 島根県
33 岡山県
34 広島県
35 山口県
36 徳島県
37 香川県
38 愛媛県
39 高知県
40 福岡県
41 佐賀県
42 長崎県
43 熊本県
44 大分県
45 宮崎県
46 鹿児島県
47 沖縄県
2011-06-06 新設
------------------------------------------------------------------------------*/
function _prefecture_from_zip( $zip ){
if( preg_match( '/^01/', $zip ) ){ return 5; } // "秋田県"; }
else if( preg_match( '/^02/', $zip ) ){ return 3; } // "岩手県"; }
else if( preg_match( '/^03/', $zip ) ){ return 2; } // "青森県"; }
else if( preg_match( '/^0[4-9]/', $zip ) ){ return 1; } // "北海道"; }
else if( preg_match( '/^1[0-9]/', $zip ) ){ return 13; } // "東京都"; }
// ^20は欠番
else if( preg_match( '/^2[1-5]/', $zip ) ){ return 14; } // "神奈川県"; }
else if( preg_match( '/^2[679]/', $zip ) ){ return 12; } // "千葉県"; }
// ^28は欠番
else if( preg_match( '/^3[01]/', $zip ) ){ return 8; } // "茨城県"; }
else if( preg_match( '/^32/', $zip ) ){ return 9; } // "栃木県"; }
else if( preg_match( '/^3[3-6]/', $zip ) ){ return 11; } // "埼玉県"; }
else if( preg_match( '/^37/', $zip ) ){ return 10; } // "群馬県"; }
else if( preg_match( '/^3[89]/', $zip ) ){ return 20; } // "長野県"; }
else if( preg_match( '/^40/', $zip ) ){ return 19; } // "山梨県"; }
else if( preg_match( '/^4[1-3]/', $zip ) ){ return 22; } // "静岡県"; }
else if( preg_match( '/^4[4-9]/', $zip ) ){ return 23; } // "愛知県"; }
else if( preg_match( '/^50/', $zip ) ){ return 21; } // "岐阜県"; }
else if( preg_match( '/^51/', $zip ) ){ return 24; } // "三重県"; }
else if( preg_match( '/^520\-?046[1-5]$/', $zip ) ){ return 26; } // "京都府"; } // 特殊
else if( preg_match( '/^52/', $zip ) ){ return 25; } // "滋賀県"; }
else if( preg_match( '/^5[3-9]/', $zip ) ){ return 27; } // "大阪府"; }
else if( preg_match( '/^6[0-2]/', $zip ) ){ return 26; } // "京都府"; }
else if( preg_match( '/^630\-?027[12]$/', $zip ) ){ return 27; } // "大阪府"; } // 特殊
else if( preg_match( '/^63/', $zip ) ){ return 29; } // "奈良県"; }
else if( preg_match( '/^64/', $zip ) ){ return 30; } // "和歌山県"; }
else if( preg_match( '/^6[5-7]/', $zip ) ){ return 28; } // "兵庫県"; }
else if( preg_match( '/^68/', $zip ) ){ return 31; } // "鳥取県"; }
else if( preg_match( '/^69/', $zip ) ){ return 32; } // "島根県"; }
else if( preg_match( '/^7[01]/', $zip ) ){ return 33; } // "岡山県"; }
else if( preg_match( '/^7[23]/', $zip ) ){ return 34; } // "広島県"; }
else if( preg_match( '/^7[45]/', $zip ) ){ return 35; } // "山口県"; }
else if( preg_match( '/^76/', $zip ) ){ return 37; } // "香川県"; }
else if( preg_match( '/^77/', $zip ) ){ return 36; } // "徳島県"; }
else if( preg_match( '/^78/', $zip ) ){ return 39; } // "高知県"; }
else if( preg_match( '/^79/', $zip ) ){ return 38; } //"愛媛県"; }
else if( preg_match( '/^8[0-3]/', $zip ) ){ return 40; } // "福岡県"; }
else if( preg_match( '/^84/', $zip ) ){ return 41; } // "佐賀県"; }
else if( preg_match( '/^85/', $zip ) ){ return 42; } // "長崎県"; }
else if( preg_match( '/^86/', $zip ) ){ return 43; } // "熊本県"; }
else if( preg_match( '/^87/', $zip ) ){ return 44; } //"大分県"; }
else if( preg_match( '/^88/', $zip ) ){ return 45; } // "宮崎県"; }
else if( preg_match( '/^89/', $zip ) ){ return 46; } // "鹿児島県"; }
else if( preg_match( '/^90/', $zip ) ){ return 47; } // "沖縄県"; }
else if( preg_match( '/^91/', $zip ) ){ return 18; } // "福井県"; }
else if( preg_match( '/^92/', $zip ) ){ return 17; } // "石川県"; }
else if( preg_match( '/^93/', $zip ) ){ return 16; } // "富山県"; }
else if( preg_match( '/^9[45]/', $zip ) ){ return 15; } // "新潟県"; }
else if( preg_match( '/^9[67]/', $zip ) ){ return 7; } // "福島県"; }
else if( preg_match( '/^98/', $zip ) ){ return 4; } // "宮城県"; }
else if( preg_match( '/^99/', $zip ) ){ return 6; } // "山形県"; }
return NULL;
}
突込みがある人は遠慮なくどうぞ。
とりあえず、これで一つ機能が追加できたので、でめたしでめたし。
夏に向けてCPUクーラーを換装した
開発予備機という名目で最近組み立てたBOINC機なのですが、CPUクーラーがリファレンスのままでした。
CPUはAMDでAM3ソケットタイプです。
さすがにこのままでは夏を越えられそうにもないので、新しくCPUクーラーを入手しました。
トップフローかサイドフローか悩みながらも、twitterでオススメされたので忍者3に決定。TWOTOPで3,280円、他のショップでは3,980円や3,380円もありましたが、おそらく底値でしょう。いい買い物しました。
ケースはKUROSUKEで、パーツの付け替えもしやすいハズだったのですが、見事に裏切られました。というか事前に確認していない自分の責任なのですが。
一応背面に穴が空いているのですが、マザーボードを固定するフレームが邪魔して外せませんでした。結局パーツを全部外してマザーボードを取り出し換装することに。
実際につけるとデカイですね。リファレンスと比べて4倍ぐらいの体積があるかもしれません。表面積も大きそうでよく冷えそうですね。
CPUクーラーの設置にはちょっと手間取ったものの、マザーボードを破壊することもなく無事に換装完了。
パーツを全て元に戻しました。配線も変更してスッキリさせてみました。
ここでファンの付け忘れに気づいたので、あわてて付け直すことにしました。
隙間が狭くて指が入らないので、奥はビニタイで固定、手前は用意されたパーツで固定しました。
実際にはケースに入れてからすぐに確認したのですが、ここでは最後に載せます。ちゃんと蓋が閉まるかどうか、予め確認してみました。
結構ギリギリで蓋を強く押すとぶつかるぐらいの隙間しか空いていませんでした。忍者3は高さが16センチですね。「KUROSUKEには16センチ」これテストに出ますよ!
というわけで、パーツが破損することもなく、生身に怪我をすることもなく無事換装が完了。回転数のボリュームがついてますが今は絞って稼働中。それでもそこそこの風量があるので、夏場は最大にでもすれば何とかなるでしょう。
でめたしでめたし。
IT系のイベントに行ってきた
2011年05月11日~13日までの3日間、ビッグサイトでイベントがありました。13日の金曜日に行ってきました。
複数のイベントが同時に開催されるのですが、掲載順に
第13回 データストレージ EXPO
第 1回 スマートフォン&モバイル EXPO
第20回 ソフトウェアハウス開発環境 EXPO
第16回 データウェアハウス&CRM EXPO
第14回 組み込みシステム開発技術展
第 2回 クラウドコンピューティングEXPO
第 6回 RFIDソリューション EXPO
第 5回 ダイレクト マーケティング EXPO
第 5回 Web&モバイル マーケティング EXPO
第 3回 グリーンIT&省エネソリューション EXPO
といった感じです。
ひとつだけEXPOってつかないのが気になりますが、こらえましょう。
まず最初の感想としては「コンパニオンサイコー」です。
普通っぽい格好は空気読めって感じで、和服からヘソだし、ボンテージっぽいのもいました。素材がアレなのもたまにいますが、基本はどこかの登録派遣で審査済みなのでしょう、3次元に興味がなくて(オイ)もそれなりな面々でした。まれにアニメ声チックな第一声を聞くだけで、思わず顔を向けてしまう人もいました。
ということで、今手がけている仕事に関係がありそうな帳票とかPDF周りを中心に冷やかしてきました。一部のブースでは、技術的に出来ないって言ってた内容をすでに自分が実装させていることを話すと、自信が崩れたのか急に態度が変わったのには受けましたね。大阪の会社。こっちが関西弁っていうのも、態度の変化に拍車をかけたのかもしれませんが。
一つ気になったのが、電子書籍関連のブースが極端に減ったこと。というか一つもなかったのでは?一応一通り回ったつもりですが、電子書籍関連がなくなって、PDF帳票が増えていた気がします。電子書籍はやはりもうだめだということですかね。独自フォーマットを売りにしていたところはどこにもなかったかと。
あと、毎度のことなのですが、超大手のブースは無駄に人が多い。講演の内容も正直たいしたことないので基本的に毎回スルーするのですが、個人的にはプレスの撮影に映るのを期待しているだけに見えて仕方が無いのです。実際映るのですが。
去年はWBSにチラッと映っていた(たぶん)のですが、今年は映っていなかったですね。カメラはそれなりにいたのですが。まぁ、映るなら取材に来てくれるぐらいで無いと、ね。
あと個人的な意見ですが、営業しない技術系の人は、こういうイベントには履きなれた靴でいきましょう。会場の端にある休憩所でいかにも歩き疲れたようにやつれながらノーパソを叩いている、明らかに技術系の人を沢山見かけるのですが、そんな靴では・・・。
ということで、最後に一言。コンパニオn(略
フォームパーツがフォームの何番目かを調べるJavaScript
フォームでちょっとゴニョろうとしまして、パーツが何番目にあるのか取得する必要が出てきました。
ちょっとだけ調べてみましたが、ズバリそのものを取得できるメソッドがないようです。
document.form(0).item(0).focus()みたいに、指定は出来るんですが、オブジェクトから逆引きが出来ないみたいです。
ライブラリにあるとは思うんですけど、それっぽいのが見つからず、コード自体も大したことないですし、自前で用意してみました。
やり方は簡単、パーツを順番に走査するだけ、こんな感じ。
function getNumberByItem( itemObj ){
var formObj = itemObj.form;
for( var i = 0; i < formObj.length; i++ ){
if( itemObj == formObj[i] ) return i;
}
return null;
}
指定されたオブジェクトの種類の確認もつけておけば安心ですね!
HP ProLiant MicroServerを買ったよ(ちょっと前に)
商品が実際に到着したのは2011年3月の23日でしたが、とにかく使える状態にするのが先決でしたのでレポートが今頃になりました。
さて、まず届いたときの写真がこれ。
HPの直販ではなく、電脳売王から29,800円で購入しました。
用途はNAS、なんでNAS専用を買わないのかというと、単純に高いからです。NAS専用は小さいのが魅力ですが、やはり基本は金です。
内容はこれだけ、本体とドライバディスクに電源ケーブル、とってもシンプル。
本体を開けるとこんな感じ。といっても、開けたらHDDカートリッジがこのように並ぶわけじゃありません、念のため。
最初から入っていたのはシーゲイトの250Gでした。
スワップベイが良く見えるようにフラッシュを焚いてみました。
表向きにはホットスワップは対応してないらしいですが、どうも可能なようです。
と言っても、怖いのでできませんが。
後日、日立の1Tを2台購入しました。
OSはWindowだとハードRAIDが使えるらしいのですが、余ってるライセンスがないのでFreeNASでソフトRAIDのミラーリングを利用しています。
いままでは250GのHDDがファイルサーバだったので、1Tでも使い切ることはないでしょう。
というわけで、2週間ほど経ってしまいましたが、現在でも特に問題なく使用できています。作動音はとても静かなので、寝室にも置けますね。というか、ワンルームだから寝室なんてありませんが、枕の横に置いてあっても気がつかないまま寝られるぐらいです。消費電力もHDDが2台しか入れてないためかなり抑えられます。
個人情報への取り組み
この震災では、個人情報を盾にした可笑しな対応がなかったようで何よりです。
個人情報だからTVで被災者名簿を映すなとか、もう少し前ならそういう話も出ていたかもしれないですね。
生命にかかわる可能性があるならば、個人情報は公に出来ます。とはいえ、どこまでを想定しているのかは曖昧立ったりするのですが。
前置きはこれぐらいにして、今は印刷関係のシステム開発に携わっています。印刷といってもほとんどが名刺です。その名刺といってもビジネスから趣味のものまで、さらには裏の顔用の名刺まであります。
これらは個人情報です。
配る目的のものだから保護される必要はないという人もたまにいますが、それは大きな間違いです。
とにかく印刷屋というものは、沢山の個人情報を扱います。プライバシーマークを取得している会社にした発注しない企業もあるぐらいです。
といっても、プライバシーマークなんて実はゲフンゲフン、ISO90001の方がまだまし・・・と脱線から戻します。
<一部削除>
現在2011年4月10日現在、個人情報保護士のマークで私の番号の掲載許可しているサイトで、私が運営していないサイトでは1つもありません。あるのは全て私が責任を持って運営しているサイトで,
商用サイトはプリントライのみです。もし、この番号を掲載しているサイトがあれば、それは不正な使用なので、見つけたら使用料を請求しますよ、今のところは無さそうですが。
ゆうちょ銀行払い込み用紙印刷ライブラリ
お仕事の都合でゆうちょ銀行の払い込み用紙に印刷するライブラリを作ることになりました。
ベースになるのはTCPDFです。
とりあえずクラス化して、適当に放り込んでoutすれば印刷できちゃうものを作ろうと思います。
ちなみに振込ではなく、払込(払い込み)と呼ぶのが正しいようです。
アイコンその3を公開したよ
バーコードリーダーを買ったよ
今は印刷の受注システムを請け負っているのですが、その中で商品管理にバーコードを導入することになりました。
請負先にはすでに導入済みだったのですが、動作確認用に貸し出してもらうような余裕が無いみたいでしたので、自分で購入することにしました。
ネットで色々調べると、5,000円前後でそれなりに安いものもありましたが、せっかく秋葉原が近いので店頭で売っていれば購入することにしました。
メーカーを気にすると値段が結構張りますから、とりあえず基本的なバーコードさえ読めればいいわけです。
今回はQRコードに代表される2次元コードとか、郵便局のカスタマーコードはまた今度の機会に。
ということで、秋月電子で気になっていたバーコードリーダーを購入しました。
USB接続のCCDタイプですが、ちょっとだけ離しても読み取れます。
といってもレーザーほど距離を稼げるわけでもなく、サイズがでかいとダメですが。
お値段は4,800円で遊ぶにも高くない値段です。
amazonのAPIなどに連携して在庫管理したりするのもいいですね。
ちなみに、頭をスキャンしても数字は出てきませんでした。