徘徊の週末

ワイン酒場という店でアウトレットワインなので安く美味いワインが飲めるとか、亀有ブックオフが1000円以上購入で30%オフとか。ふらふら出かけてみる。
ワイン酒場はチェーン店でウチからの最寄りは神田店。つまみもかなり美味かった。んだけど、ワインの種類がちょっと少なかったかなぁ。もっとバリエーションがないとキビシイ。
ブックオフは坂口尚の石の花をふたたびみたび。漫画奇想天外のたつまきを売る老人、だっけか、のあたりから大好きで、コミックスを買ってはいたんだけど、引っ越しのたびに本を捨てるという悪癖があって、手元に残ってなかったので、この機会に。
lolipopのmysqlが重くて、ページによっては、表示されるまで10秒~20秒もかかっていた。そりゃ論外だろ、ということでcronで静的ページを生成する、という苦肉の策を弄してたんだけど。SQLiteが使えるということで、一部を乗り換え。10秒かかっていたページ表示が6秒弱にまで短縮された。…て、それでもページ表示に6秒弱なんてヘボすぎ。amazonに問い合わせに行くので、これ以上の短縮は難しい、のかなあ。
とはいえ。速いのは確かなので、とりあえず、静的ページ生成は残したまま、データベースはMySQLからSQLiteに乗り換え。それなりにいろいろできてありがたいlolipopだけど、このあたりはちとツライな。
» ローカル環境で電子書籍を作る、Macアプリ・Windows版ツール 「かんたんEPUB3作成easy_epub」
pg restore

ウチのポンコツサーバー。データベースの操作ミス、ていうか、たぶんupdateの時の where句か、シングルクオートが原因で、いくつか不備ってたのを見つけて腰を抜かす。面倒だから削除…てのもちらっと頭をよぎったんだけど、ひとさまのデータを勝手に消すわけにはいけない。
幸い、バックアップはあるので、そこからリストアしてみた。忘れないうちに、そのメモ。
postgresのコマンドラインにはいって、
create database tempdb with ENCODING='UTF8'
臨時のデータベースを作成する。
一度抜けて再び今度は作成したばかりのDBに接続
psql -d tempdb user
コマンドラインで覗くとtemplateに使われるのか以前作ったテーブルが入っているので DROPしておく
その後OSのコマンドラインで必要なテーブルだけを臨時に作ったデータベースにリストアする
pg_restore -U username -d tempdb -t TABLE -F c backup
後は、「やっちゃったデータ」をバックアップからピックアップして、稼動中のデータベースに流し込んで終了。
うーむ。とりあえず、無事修正できたけど、なんかDBの保守運用管理系の知識が怪しいままだなぁ。
[12/06 07:23:11]
IEの妙なURLによる404エラー。アクセスログの生ログを見るとテーブルタグの一部をぶら下げていた。
なんでやねん。
» ローカル環境で電子書籍を作る、Macアプリ・Windows版ツール 「かんたんEPUB3作成easy_epub」
10万回ループ

10万以上あるレコードをそのままループにしてたら当然10万回…て、当たり前だけど、今日、事務所で若いプログラマさんに指摘されて目からウロコ。SQL、GROUP BY である程度まとめて取り出して、ループ回数を減らせば良い、と。試しに、GROUP BYでちらっとまとめてみたら10万回のループ2000回程度になって、はっきりスピードUP。
SQLの修行が全然足りませんなぁ。
» ローカル環境で電子書籍を作る、Macアプリ・Windows版ツール 「かんたんEPUB3作成easy_epub」
スクリプトいじり

相変わらず仮死状態の平日。あれこれ困ったもんだ。それでも、ふたたびみたびよたびで、帰宅後へろへろ状態でスクリプトいじりを再開。
書き込み系にAjaxを使わないで素直にページ遷移させることにしたら、わかりやすくなった。考えなきゃいけないことが減るわけなんで、当然だ。
ただ、Ajaxでデータを取ってきてコンテナに表示させるのは、使う側も気楽な感じだろうし、なにより、ページを新たに作る必要がないのでこっちもラクなんだよねえ。思わぬ利点。ちょっとした閲覧表示系を追加するのにちょうどいいかも。
postgreqlで
select *,(select count(*) from TABLE where NNN=T.MMM) from TABLE as T where YYY=ZZZ
一度問い合わせて、その結果の一部を条件にして select の中でさらにselect してみたら、がくんと重くなった。以前、同じことをして格段に早くなったのは、条件を間違えていてゼロ件だったから。
これならperlでループして一行ずつ $dbh->selectrow_array した方が早かった。sqlだとページ表示まで10秒以上かかったのがperlでループの方は3秒弱。
で、この3秒弱が遅くていらつくんでsqlを、と思って試したんだけど、よくみるとsqlの方が数倍遅いんで話はふりだしに。
登録されている本の冊数をカウントするところ。そろそろ9万冊超えてるし、数かぞえるだけで大変なのかなあ。…て、たかだか9万でpostgresqlが重くなるはずはない。テーブルの作り方とかインデックスとかの問題。
薄い髪をかきむしってもなにもでてこないんで、件数表示はあきらめて、あるなし表示に変更。これで表示まで2秒を切った。
SEOがどーしたとかUIがどーしたとかリッチな表現がどーしたとかWEB標準がどーしたとか、あれこれあるけど、webサイトって絶対にこれが正しい、なんてことはほとんどない。いつも変化するし、中には声のでかいやつの理屈だけなんてのもあるだろう。でも、ページの表示に関しては単純で、早さは絶対。
今回はある程度書き込み部分も作りながらなので遅々として進まず。だるいなあ。
» ローカル環境で電子書籍を作る、Macアプリ・Windows版ツール 「かんたんEPUB3作成easy_epub」
簡単が一番だ

世間はすっかり夏休みモードなのか。電車がガラガラで親子連れも目立つ。
sql一発でデータを引っ張り出すのがなにかと便利で安全、なのはよくわかる。でも、副問い合わせが入って重くなるんだったら、そこはスクリプトを挟んだほうが良くないか、と。あいかわらずSQLとスクリプトの関係というか、よくわかってないんだよなあ。そこんとこperlで連想配列使った方が早くないか、とか、それ引っ張ってくるならSQLでしょ、とか。
ここんとこウチでは脱データベース、ていうかDBを使うほどでもない量で作りも単純なテキストデータが対象。perlだけでごにょごにょしていて、気楽でいいなあ、と改めてしみじみつくづく。たいしたことをしてるわけでもないのに、意図どおりに動かない・見えないのは、perlなのかSQLなのか、Javascriptなのかcssなのか、とあれこれ絡んでめんどくさいんだよね、WEBサイトって。
なんとかもっと簡単にできないものかしらん。
いろんなことが面倒になってきてるような気がするのは歳のせいなのかなあ。
» ローカル環境で電子書籍を作る、Macアプリ・Windows版ツール 「かんたんEPUB3作成easy_epub」
めも

簡単なパズルで現実逃避。
データを、表示順で並べて、同じ表示順の中ではID順で並べる、てのは当たり前のありがちで、SQL文だとたぶん
order by displayorder asc, id desc
てな感じでさくっと書ける、のかな。
これをどうしたもんかとちょっと悩んで。…hashに放り込んでループすればイケる。
foreach (keys %{ $ref } ){
$pos->{ $ref->{$_}->{displayorder} }++;
$disp->{ $ref->{$_}->{displayorder} }->{$_} = 1;
}
foreach my $display ( sort {$a<=>$b;} keys %{ $pos } ){
foreach ( sort {$b<=>$a;} keys %{ $disp->{$display} } ){
print $ref->{$_};
}
}
でも、なんかダサい(死語)
並べかえたい、というのはよくあることなのに、こんな書き方してしまうと、バリエーションの数だけ同じようなことを書かなきゃいけないじゃん。…うううむ。
とはいえ、忘れないうちにメモっておこう。
» ローカル環境で電子書籍を作る、Macアプリ・Windows版ツール 「かんたんEPUB3作成easy_epub」