MySQL

晴れどこかのページで、MySQLからデータを取ってきてから、PHPで加工するより、MySQLでデータを加工して返した方が速度が速いと読んだので、やってみた。
データ量がたいしたことないからかもしれないけれど、逆に遅くなってしまった……

たかが30件ほどのデータだからかなぁ。 MySQLで加工するよりPHPのループで回した方がいいのだろうか。

JpGraphとAJAX


雨ときどきくもり仕事でタイトルの組み合わせのものを作っている。 JpGraphとはグラフが簡単に作成できるライブラリ。 AJAXはJavaScriptとxmlの非同期通信(?)みたいな技術。
どうやって、グラフを動的に作成するか悩んだ。 その結果APIみたいに作る事にした。

<src=”JpGraph/createGraph.php?data[]=100,200,300&data[]=300,400,500″>
みたいに、返り値を画像になるように指定する。
createGraph.php内で、URLの引数についている値を処理し、データとしてグラフに送る。

これで表示部分は完成。 あとはどうやってAJAXで再現するか考えた。
やっぱりonclickか。 ネットで調べたら、ページにアクセスして画面に表示された結果を返すライブラリがあったのでそれを使う事に。 動的にアクセスするPHPのURLをJavaScriptで作り、PHPで先ほどと同じように引数を処理し、DBに繋ぎグラフ用のURLをechoで吐き出す。 これで完成。
けっこういいものが作れたと自己満足。

Word Press導入

くもりついに新ブログが公開できました。
1ヶ月くらい前に、Movable Typeのデータを全てエクスポートして、Word Pressにインポートして、画像のパスやら、リンク先やらの修正をずっと行っていた。 そしてようやく作業が全て終わり、テンプレの作成も終わり公開できるレベルになったので、前のを廃止して、これからはこちらに書きます。

まずWord Pressとは……
PHP + MySQLで動くブログシステム。
個人的にはPHPで書かれているので、かなりとっつきやすい。 機能もMovable Typeに劣らない。 むしろそれより高機能に感じる。 プラグインも充実。 ただ一つだけ……それは静的なページが作成できない事。 まぁ不満はこれくらいかなぁ……

で、もちろん改造をした。 まずサイドメニューに「ランダムピックアップ」をつけた。 これは指定した件数(このブログでは10件)の記事をランダムでピックアップする。
過去に書かれた記事が表に出ることがあまりないので、少しでも露出しようと思ってつけた。 それにランダムなので楽しめる。
あとはカテゴリーに「並び順」を設定。 デフォルトの機能だと、カテゴリーの並び順が「名前順」か「登録順」しかできない。 やっぱり並び順は必須だね。
DBのwp_categoriesというテーブルに「cat_sort_order」を追加。 フィールドのタイプはint(11), NOT NULL, default = 0 にした。 既にデータが入っているので、それを崩さないようにするために、NOT NULL, default = 0、は必要。
あとは並び順を変更する箇所。 これはwp-adminフォルダのedit-category-form.phpのHTMLテーブルに列を追加。 それとDBにUPDATEするために、admin-db.phpのwp_insert_category関数のSQLにcat_sort_order = ‘$cat_sort_order’を追加。 これで完成。
追加部分にはつけてないが、デフォルトで0になるので、一番上に挿入される。

やっぱりPHPだと改造のしがいがあるなぁ。 楽しい!

mojavi

雨のちくもり仕事でPHPのフレームワーク「mojavi」というのを使う事になった。
フレームワークとは「開発の効率アップ、統一化するためのツール」みたいなやつ。
mojaviというのは外国産。 開発元http://www.mojavi.org/
しかし開発もとのサーバーか何かのハードディスクがクラッシュしたらしく、現在復旧作業中らしい。
そして日本語でmojaviを説明しているページがものすごい少ない!
散々探したけれど、http://www.stackasterisk.jp/tech/php/mojavi01_01.jsp以外に見つからなかった。
ここのページでも理解するにはほど遠い……

そんなこんなで悪戦苦闘中。 英語が読めれば海外のページでたくさん調べられるんだけどなぁ。。。

PHPカレンダー

晴れPHPでカレンダーを作ろうとしている。
どうやって考えればいいのかよくわからなかったので、他所から当月と指定した月日の日付と曜日を表示するPHPスクリプト(http://ponk.jp/php_time/index.php?page=4)を借りてきて、
それをアレンジ。

テーブルを使ってカレンダーっぽい表示にはなった。 日曜日には色をつけた。
過去と未来にどこまでさかのぼれるのかやってみた。
すると、過去は1902年1月が限界。 1901年12月を表示すると乱れる。
未来は2037年12月が限界。 2038年1月を表示すると乱れる。

過去は105年前も表示する必要がないからいいとして、問題は未来。
どうやらこれは「2038年問題」というらしい。
コンピュータ上で日付の計算方法が、1970年1月1日0時0分0秒からの累計秒で計算されているらしい。
32ビット符号つき整数を使ってあらわされてる場合がほとんどなので、上限値は21億4748万3647らしい。
そして1970年1月1日0時0分0秒から21億4748万3647秒後は2038年1月19日12時14分8秒(日本時間)を超えると値が負の値になって狂うらしい。
同様に負の値も-21億4748万3647までなので、1902年1月までしか表示できない。
まぁとても気の遠くなるような桁数の話だけど……

だけどこれが現実的なコンピュータの問題として浮き彫りになってる。 2000年問題の時は、直前になって騒がれていたような気がしたけれど、これはまだあと32年もある。 それまでにきちんと対処されるんだろうね、きっと。
対策として64ビット整数型で秒をあらわせばいいらしい。 そうすれば西暦3000億年までカウントできるらしい。
64ビット整数型にするのがものすごい大変なことなのかどうかはわからないけれど……

というわけで、2037年12月までしか表示できないカレンダーの完成。
あとは祝日の表示。

1月1日 元旦
1月第2月曜日 成人の日
2月11日 建国記念日
3月23日ごろ 春分の日
4月29日 みどりの日
5月3日 憲法記念日
5月4日 国民の休日
5月5日 こどもの日
7月第3月曜日 海の日
9月第3月曜日 敬老の日
9月23日ごろ 秋分の日
10月第2月曜日 体育の日
11月3日 文化の日
11月23日 勤労感謝の日
12月23日 天皇誕生日

2006年の段階での祝日はこれだけ。
2007年から4月29日が「昭和の日」となって、5月4日が「みどりの日」となるらしい。
春分の日は3月21日、秋分の日は9月23日というイメージを持っていたのだけど、これも確定された日にちではないらしい。 天文台の計測によって毎年変わるらしい。

春分の日は、2008年、2009年、2012年、2013年、2016年、2017年、2020年、2021年、2024年、2025年は3月20日らしい。 それ以外の年は3月21日。
秋分の日は、2012年、2016年、2020年、2024年、2028年、2032年、2036年、2040年、2044年は9月22日らしい。
それ以外の年は9月23日。

さらに知ったこと。
国民の祝日というものについて。
5月4日は「国民の休日」となっている。 これはこういう名前の休みの日かと思っていた。 だけど実際には定義があるらしい。
祝日Aと祝日Cに間を挟まれた祝日Bを国民の休日というらしい。
5月だと、5月3日が祝日A、5月5日が祝日C。 そして5月4日は普通の日。 だけど、国民の休日の法則にのっとると、
5月4日が国民の休日になる。 ただし、5月3日が日曜日、5月4日が日曜日の場合は国民の休日にはならないらしい。

ハッピーマンデー法で9月第3月曜となった敬老の日。
年によって日付が変わる秋分の日。
たとえば2009年。 予定では9月21日が敬老の日。 そして9月23日が秋分の日。 間に挟まれた9月22日が、国民の休日となるらしい。 5月4日以外では初めてのケースだって。 これと同じことが2015年にも起こるらしい。

そんなこんなで、カレンダーの祝日を入れるのに一苦労。
普通の祝日は入れることができたけれど、国民の休日、1992年以前の春分の日、秋分の日、振り替え休日はまだできてない。 むずかしすぎ!

サンプル
ソース

PHP掲示板その17

くもり今日は仕事休み。
8時半くらいに起きてきた。

昼に坂出まででかけた。

頭を悩ますPHP掲示板
本文中のURLにリンクを張るのはいいのだけど、そのおかげで検索のときにすっごい頭を悩ませている。
<a href=”http://urlurl.urlurl.com/” target=”_blank”>http://urlurl.urlurl.com/</a>
この部分が検索されてしまう。 そして色を変える為に<font>タグも組み込まれて表示がめちゃめちゃになる。

(<a hrefx3dx22.*x22
targetx3dx22_blankx22>)(.*)(</a>)

こんな正規表現を書いたんだけど、これがログ内で見つかったら、前半部分を<z>に後半を</z>に置き換えるという風にやってみた。
すると <z>http://urlurl.urlurl.com/</z> となった。
先日やった<br>を対象からはずすのと似たような正規表現で、<z>と</z>をはずすようにした。

これで表示は一応できたのだけど条件がある……

まず本文中に書かれているURLが1つの場合。 これだときちんと表示できると思うのだけど、2つ以上になると動作がおかしくなる。 一番最初に表示される<a から 一番最後の閉じるところまでが一気にまとめられちゃってるのかなぁ?
うーん、むずかしい。

それと検索されたものを表示するところで、
<a href=“http://urlurl.urlurl.com/” target=_blank“>http://urlurl.urlurl.com/</a>
この青の部分も検索されてしまう。 色こそは変わらないので表示はおかしくならないのだけど、本文中に含まれてないのに表示されてしまうのも……
<z></z>の復元を表示の場所でやればいいのかな~
あと/で検索すると表示が狂う。
で検索するとエラーがいっぱいおきる。
“で検索すると強制的にに変換される。
>を表す$gt;のgやtで検索すると表示が狂う。
↑の引用符の<font>タグの部分はまだいじってない。

というか、背景に色をつけるのをやめたい気分(笑)

サンプル
ソース
管理モードのパスはaaaa

PHP掲示板その16

晴れ今日は屋島で仕事。 7時15分~17時20分まで。 最近7時過ぎ集合ばかりで楽チン♪

今日はドラえもんを見た。 去年の4月だっけ? ドラえもんの声優が変わったときに、絵も一緒に変わってしまった。 それ以来ドラえもんに違和感を感じていた。
子供と一緒に「ドラえもん のび太のドラビアンナイト」という映画を見た。 この映画は10年くらい前の映画なので声優はオレの知っている頃のまま。
やっぱりこっちのドラえもんの方が落ち着く(笑)

PHP掲示板
検索でbrやbやrと打ち込むと改行の<br>まで検索されていた。 とりあえずそれを直した。 これで検索されなくなったはず。 正規表現で
<b?<font classx3dx22search[0-9]{1}x22>(br|b|r)</font>r?>
とやった。
<br>が検索されて文字の背景色を変えたら
<<font class=”search0″>br</font>> となり <br>や<br>や<br>
と表示されていた。
これが直った!
昨日やったのはbr対応だけ、今日はbとrにも対応。

だけど本文中には引用符の<font>もあるし、URLリンクの<a href>もあるし…… これらもfやaで検索すると表示されてしまう。
<br>は決まっていたからすぐに出来たけど、URLリンクとか文字が決まってないから難しそう……
日記書くとき各ページにリンクを張るのが面倒だから、メインの掲示板からリンクを張った。
PHPスクリプト内でHTML書くときは”を'に置き換えていたけど、それを全部”に直した。
管理モードでセッションとif文の不具合があったので直した。
検索ワードが、結果ページでも保持されるようにした。
だけど、名前、題名、本文の選択部分を保持する事が出来ず…… 検索ページを表示したとき、全部のチェックがはずれてる状態なら保持ができたのだけど、全部のチェックがついてる状態だとできない…… これも考えなくては。
表示件数は1ページ目だけ動作します。
結果が指定した件数以下ならその件数を表示。 たとえば5件表示で結果が7件あったら、最新5件を表示。 次の5件というボタンを作ってないので残りの2件が見れません…… 5件なら、5件表示したあと、6件目があるかないかの判断方法で悩み中。
サンプル
ソース
管理モードのパスはaaaa