フレッツISDN時代から12年、連綿と続いてきた「ぱぱサーバ」ですが.... 今回ついに外部サーバへ乗り換えました。まだ試用期間(金払ってない)だけど!
tDiary2.0からtDiary3.1に乗り換えました。そして
一番困ったのは、日記データを横断サーチして独自のカテゴリとプルダウンを作成するsancプラグイン(sanc.rb, sancpulldown.rb)。データ形式が EUC-JP なので思い切り文字化け。さらにtDiaryの日記データは、一括でEUCからUTF8に変換されるわけではなく、update.rbを呼び出して更新したときだけらしい。結果 まさかのEUC/UTF8混在環境 になってしまいました。
クマさんが一生懸命料理リストとかメンテナンスしてて、心苦しいのですが......時間がとれないのでしょうがない。
そのため、至る所にリンク切れなどがあるはずです。 デザインは勝手に直してもらうとして、ファイルのリンク切れは いかんともしがたいですな。元データはありますので、 ご報告はこの日付の日記のコメント欄へ。
但し、今度はディスクが20GBしかないので何でもかんでも 置くことはできません。ご理解ください。
標準(core)に入ってるプラグインなのに何故動かない.... これが有効になっているとあいあんさんの過去ログが出ない。
神曲奏界ポリフォニカエターナル・ホワイト 4 (プリンセスコミックス)
秋田書店
¥ 440
.... なんで俺は貼れるんだ?!
うーん。isbn_detailで書影をとってくるとき、
なぜかmoonrock.jpという糞サイトにアクセスし(proxy?)、これがMyDNSの更新がかからなくて落ちているのでおかしなHTMLがXMLだと偽ってかえってくる。
プラグインには文法チェックが全くなく、REXMLにまるなげしていて、
しかもキャッシュに書いてしまうので永遠に間違い続ける。
馬鹿か。
他人にサービスを提供しているサイトを気軽にdisってしまって申し訳ありませんでした。
まとめると(言い訳ともいふ)....
の一つでも直ったら問題はおきなかったはず。 個人的には「プラグインを直すのが筋かなー」と思って既に手を加えています。 身内のページが出ないと焦るよ。
昔からそうですが、tDiaryは気軽に処理例外を投げ過ぎる..... 「データの不備が生じても日記が空白になるだけ」というのが俺の考える 一般人向けの設計なのですが、 tDiaryはruby geek(変人)のためのブログシステム なのでしょうがないですね:-)
実は、ワンセグ野郎Linuxは2ヶ月くらいでガーッと 開発してしまって、その後放置してた。震災もあったしね。
かなり思い出しながら書かなければならないのだが、 モチベーションが続かない(^^; なので「できたこと」を先に説明して、そこそこ 反響があれば連載を続ける所存。
まずはチュートリアルビデオを2件どうぞ。
当たり前に動いてるように見えるだろうけど.... ここまでやるのは大変だったという ある意味自慢話をしよう と思うので、 読みたくない人は以降省略。
足回りのポイントは以下のとおり。
他のワンセグ野郎プロジェクトではSQLite3を使っている。 これはファイルベースのDBであるがゆえに、 ガガッと登録/検索が集中するとよくロックしていた。 まあ元々アプリケーションとかに組み込むためのDBだから しょうがない。
一方、TTは並列数(=スレッド数)を自由に変えられるので、 大規模サイトにも適用可能です(何)。 まあ、TT/TCを全面採用したことによってWindowsでは動かなく なってしまったんだけどね.....MySQLの方がよかったかな。
あとdumpeitを使って、地道にTSのSDTやPMTを解析して TTに蓄積することで、物理チャンネルと放送局の紐づけを いちいちメンテする必要がなくなった。途中でサービスIDとかが 変わっても大丈夫だし、 後述する東京MXマルチ編成にも対応できたし、 他の局でもマルチ編成が始まったら自動的に対応できる。 さらに まったく同じ仕組みでフルセグにも対応できる ...はず(笑)
ストリーミングサーバの改良ポイントは以下の通り。
従来はFlashPlayerのファイル変数で欲しいストリームの情報を 渡していた。いわゆるワンセグ野郎日付YYMMDD-hhmmss-hhmmss-phych.flv、みたいな。この方法だと東京MXのワンセグ1とワンセグ2を指定することはできない。だって物理チャンネルは同じだもんね。
そこで、ストリーミングサーバperlrtmpを改良して、 DBアクセス部分を実装し、CGIを介して どの番組のどのPIDのエレメンタリーを送信すれば 良いか渡せるようにした、ということです。 これで記録するTSは1本だが、分離して別々の番組を 送信できるというわけ。
TVRollというのは、ワンセグ野郎プロジェクトでいうところの実況勢いブラウザ+MP4ファイル2ちゃんねる字幕に相当するもの。Twitterや2ちゃんねるのコメントとテレビ番組を同期して再生できる。で、対応レコーダーは、ARecX6という ネットではいたって評判のよくないレコーダー です。ええ、ワンセグ野郎共はご存知の通りです。
しかしサイト自体は別にARecX6に限ったものではなく、外部APIが公開されていて、どんなレコーダーでも連携できるようになっているようだ(以前は説明ページからリンクが貼ってあったのだが今は切れている)
仕様を軽く読んで...CGIを何個か実装してFlashプラグインを 用意すれば、 番組表やら検索やら自前で用意しなくてもいいいらしい ということがわかって、速攻実装開始。まあJSONの形式が独特(全部文字列)で面食らったけど、ほどなく動いた。
基本は3つ用意すればいい。
だから別にTTとか使わなくても従来のWindows版ワンセグ野郎でもPHPで2つCGIを書けば実装できるはず。
しかし...セキュリティ大丈夫なのかこの構造は。特にフラッシュを手元のマシンから読むとクロスドメイン制約にひっかからないのかね。
TVRollはチュートリアルビデオみればわかるけど高機能で便利。 デザインが前時代的というか古くさくてごちゃごちゃして、そこで損してる感がすごいけど。
八景島シーパラダイスに遊びに行ってきました。 ええ、想像通り ちょ混みでしたけど... そうなんだよね、 帰省ラッシュっつーても、横浜から人が居なくなるわけじゃなくて、 反対にジジババのところに孫が来る時期でもあるわけであり.....
こういうワンピースとのコラボが壮絶に ウザかった。 ゆっくり見させろよと思うんだが、まあしょうがないよね。
しかし水族館は思ったよりずっと本格的で堪能できました。 魚やイルカのみならず、ペンギンや白熊やオットセイやアザラシなど、 北海の動物群も見られます。
特に圧巻だったのはイワシの魚群。 きらめく小魚の魚群にエイやサメ(大丈夫なのか?) が悠々と泳ぐ様はあまりに綺麗で、一日ずっと座って眺めていたい 気分にさせられました。これだけでも入場料払ったかいがあるって ものであります。
TokyoTyrantで開発し終わってしまったものの、 やはりLinuxでしか動かないのはアレだし、 コンシューマでは性能面での有利はほとんどないし、 SQLite3かせめてMySQLで作り直そうか.....とか 考えていたらだいぶ間が空いてしまった。
面倒くさいのでTokyoTyrantで作る方法を公開する....が、 なんと Debian Squeezeは未だにまともなTC/TTをaptでインスコする方法がない ことが判明し、さらにやる気がなくなるのです。
FAL Labsから以下の4つを落としてくる。 バージョン進んでたらごめんね。
インストールは基本的にconfigure; make installでイナフ。
tar xvzf tokyocabinet-1.4.47.tar.gz cd tokyocabinet-1.4.47 ./configure make install cd .. tar xvzf tokyocabinet-perl-1.34.tar.gz cd tokyocabinet-perl-1.34 perl Makefile.PL make install cd .. tar xvzf tokyotyrant-1.1.41.tar.gz cd tokyotyrant-1.1.41 ./configure make install cd .. tar xvzf tokyotyrant-perl-1.16.tar.gz cd tokyotyrant-perl-1.16 perl Makefile.PL make install cd ..
これで/usr/local/binにttserver, tcrmgr, tctmgrあたりが入っていればとりあえず今後の動作に問題はない、はず。Perlスクリプトの動作確認として、
---------a.pl--------- #!/usr/bin/perl use TokyoCabinet; use TokyoTyrant; -----------------------
こんなファイルをエディタで作ってperl a.plしておいてください。 エラーが出なければモジュールもインストールされています(原始的)。
今回はTokyoTyrantで2つのサーバを動かす。
二つのサーバの性格は異なる。前者は頻繁にEPGデータを更新し続ける (ぶっちゃけ消えても良いし作り直すことも簡単)だが、 後者はある種録画リストのようなものなので消えるととっておきたかった 番組も全て消える。これは困る。うっかり消さないようにしたい。
実はTokyoTyrantはMySQLでいうところのmy.cnfを持たないので、 全部ttserverというコマンドに引数を指定することで動かす。 そしてその パラメータはけっこう多い 上に、Perlからの アクセスも完全に合わせておかなければならない。 さらに認証がないしテーブル名もないし型もないので、うっかり ポート番号を間違えてvanishコマンドを発行したりすると全部消える(笑)
また、MySQLのように同一のINDEXを持ったDBを複製するのにも、 既存のDBからmysqldumpでdumpして編集したものをWebページに 貼ったりできないので困る。
ここは....原始的でもいいから何らかのラッパーが必要である。
そこでサーバのパラメータ定義とテーブルの定義を、1つのPerlファイルに書いて、Perlスクリプト側もttserverを起動するためのrunシェルスクリプトとも共用する、というしくみにした。ファイルは全部Perlスクリプトとして開発。
定義ファイルのpostconf.plのサーバ起動部分のパラメータの例。 後でワンセグ野郎Linuxパッケージとして配布するので保存したりする必要はないです。
$postconf::table = { 'epg'=>{ 'tabletype'=>'t', 'coltype'=>'epg', 'host'=>'localhost', 'port'=>1993, 'maxcon'=>128, 'thnum'=>4, 'timeout'=>120, 'opts'=>'#dfunit=4#xmsiz=0m', 'cleantype'=>'normal', }, 'epg2'=>{ 'tabletype'=>'t', 'coltype'=>'epg', 'host'=>'localhost', 'port'=>2012, (省略)
パラメータ沢山あるけど、これらはttserverの起動に必要なものです。 これをdaemontoolsのrunスクリプト、つまり実際のttserver引数に 渡すのに、param.plというコマンドを作りました。 /mnt/epgserver/runの中身は、
(前略) port=`perl $DIR/param.pl $tablename port` timeout=`perl $DIR/param.pl $tablename timeout` (こんな風にパラメータを取り出しておいて) if [ -n "$maxcon" ] ; then ulimit -n "$maxcon" >/dev/null 2>&1 fi cmd="$cmd -kl -port $port -pid $pidfile" if [ -n "$thnum" ] ; then cmd="$cmd -thnum $thnum" fi (実際のttserverに渡す引数列を作成する)
ようになっている。 これでrunスクリプト自体はtablenameの部分を"epg", "epg2"とか 変えるだけで完全に共用化できるわけ。
TokyoTyrantはKVSの中では珍しくテーブルデータベースをサポートしている(後継のKyotoTycoonからは消えてしまった)。しかしインデックスを張る部分はけっこうバカ。Perlからはsetindexというメソッドで実行できるのだが 既にインデックスがあっても再構築する という謎な動作をしてしまう。当然動作中に誤って実行すると糞遅い。
マニュアルやソースをみても回避する手段がわからなかったので、 仕方なく実際にttserverが作るインデックスファイルの存在をチェックして、足りないインデックスだけ生成するようなラッパー関数open_tyrant()を開発した。 もちろんテーブル名だけ指定すれば、ポート番号などはpostconf.plから 勝手に引いてくるのでらくちんである。こんな感じ。
my ($pe, $pec, undef, undef) = &post2conf::open_tyrant("epg:");
$peは、raw codeでいうところの「TokyoTyrant::RDBTBL->new(); open();」した後のオブジェクトである。
もう一つ問題が。KVSではカラム名一覧がとれない。そりゃそうだ...どの行にも好きなだけカラム名を足せるのだから(凸凹テーブル)。しかし、SQLライクに使おうとすると大変不便だし 人間は間違える動物 であるから、誤字タイプミスのみならず、テーブルAにはあるカラムがテーブルBにはなかった、なんてミスを減らすために何らかの方法でカラム一覧が欲しいわけです。serviceidとserivceidなんて間違いわからねえよ..........
そこで、postconf.plの定義に、
$postconf::coltable = { 'epg'=>{ 'phych'=>102, 'ptype'=>102, 'sectionid'=>103, 'networkid'=>104, 'serviceid'=>105, 'eventid'=>106, 'starttime'=>107, (省略)
というカラムハッシュを作成しておき、open_tyrantの返ってくる リストの2つめ$pecに返ってくるようにした。 検索条件を指定する場合は、
$qry->addcond($pec->{'stime'}, $qry->QCNUMGT, $stime);
みたいにして使うわけです。わかりやすい。ついでに言うと数値変換しているので(ちょっぴり)空間効率も良くなるはずです。
_ diablo 3 [People are yours alright! . We at the very least should ge..]
TokyoTyrant版を公開しようとしたら....
実際問題、WindowsでSQLite3版を運用している人は 何人いるんでしょうか。居ても5人くらいだと思っていた。
でも割と個人的にショックだったので CGIを新規開発 しました(開発したはずです未テスト)。 oneseg24 project 準拠のepg.dbとperlrtmpが動くサーバで 動くようにね!
ダウンロード:webapi2_20110825.tar.gz
SQLite3版はもうずいぶん追いかけてないので、 da_eventの構造も進化してるかもしれないけど、 基本的に2つのCGI(sqlite0.plとsqlite2.pl)さえ動けば 大丈夫なので、環境にあわせて適時書き換えてください。
TokyoTyrant版との違いとして、 東京MXのマルチ編成、レコーダ状態表示、ファイルロック機能には 対応しません。【いいわけ】抜本的にテーブル構造を拡張して、oneseg24 projectのストリーマepg.plを使わずに、 拙作dumpeitの出すエレメンタリーPIDを保存するようにしないと、 マルチ編成などはできないと思います。 これ、多分epg.plを変更するより TokyotTyrant版に乗り換えたほうが早いので。
今回の識別子は 「sqlite」 にしました。
現在お使いのワンセグ野郎サーバの、 プライベートIPアドレスが「192.168.0.128」だとすると、 TVRollのセットアップのレコーダ登録設定には 「sqlite://192.168.0.128」 と書けば良いわけです。
この識別子は、個人個人が設定しなくても共用できるようで、 HTTPポート80番、RTMPポート1935番(要するにデフォルト) でありさえすれば良いようです。それ以外の人は自分で登録 する必要がありますが。
Apache HTTP Serverの脆弱性を突く「Apache Killer」――パッチは48時間以内にリリース予定...
未だにこんな脆弱性が残ってるのね。 Advisoryを読む限り、Rengeヘッダを単に無視してしまう方法が簡単かつ安全な対策に思えます。
例えば1MBのファイルをサーバーからダウンロード中に、 ブチ切れたとする。手元のファイルは500KBしかないが、頭から ダウンロードするのタルい。後半500KBだけ欲しい。 いわゆるレジューム動作をするときにRengeヘッダはよく使われます。
あとVODだね。HTTP Streamingはほぼ間違いなくRangeを使う。
意外なところで、多くの2ちゃんねるビューワーは、DATファイル(掲示板のスレファイル)を取得するのにRengeヘッダを使います。 最大でも500KB(だっけ?)なんだから全部ダウンロードすれば いいじゃないか、と思うのだがサーバ側の負荷対策らしいね。 なるほど影響を受けるわけだ....
いいかえると、それ以外のサービスを提供している「ふつーの」 WebサーバはRangeは無視してかまわないってことですな(断言していいのか、という懸念はあるが)
mod_headersを有効にする。
# a2enmod headers
/etc/apache2/mods-enabled/headers.confを作成(1行だけ)
RequestHeader unset Range
Apache2を再起動する。
# /etc/init.d/apache2 restart
以上。巷に出回ってる攻撃ツールのひとつ、killapache.plは「Host does not seem vulnerable」って言って瞬間に諦めるようになった(笑)
同時並列に大量のアクセスが同一IPアドレスからあると、 一定時間アクセスをカットしてくれる、 そんな便利なモジュールmod-evasiveがある。 Range攻撃の抑止を行っても、大量アクセスで落ちたら話にならんので、入れていなければ入れておこう。
aptを使ってパッケージを入れよう。
# apt-get install libapache2-mod-evasive
モジュールを有効化。
# a2enmod mod-evasive
/etc/apache2/mods-enabled/mod-evasive.confを作成。
DOSHashTableSize 3097 DOSPageCount 50 DOSSiteCount 280 DOSPageInterval 2 DOSSiteInterval 2 DOSBLockingPeriod 300
よほどの大規模サイトでない限り、この設定のままでかまわない。
Apache2を再起動する。
# /etc/init.d/apache2 restart
以上。
SQLite3版で、番組ごとのTSダウンロードができるようにしました。 本来はMP4変換とかするべきなんでしょうが、 Windowsでのエンコード環境は全く未知の世界なので対応できません。 まあtsconvかけてffmpegかければいいんでしょうが、 そこは皆さんにおまかせします。今回は枠組みだけ。
ダウンロード:webapi2_20110827.tar.gz
インストール方法は同じですが、tsdownload.plを動作させる場合は、 perlrtmpのlibディレクトリがパスに追加されるようにuse lib qw()行を 書き換えておいてください。RTMP.pmがあるディレクトリです。 たぶんSQlite3とActivePerlが動けばWindowsでも動きます。
TVRollには、番組向けのTwitterコメントをまとめて 編集保存するための機能、「ロール」があります。 番組プレイヤーの画面上(か下にある)ボタンからはいれます。
インタフェース的にはtogetterに類似してますが、一つずつ発言を選んだりする必要はなくて、とりあえず「確定ボタン」→「インポートボタン」→「公開設定をチェック」→「登録」でロールができてしまうみたい。簡単。
このロールはトップページから辿れる「マイライブラリ」に個人ごとに格納されます。
ここに「保護中」の文字が。
これ押すとダウンロードできます。
TVRollはマイライブラリを表示するときに、 ファイル保護API経由で、レコーダに対してファイル保護されているか確認しにくる。が、当然、ワンセグ野郎Linux SQLite3版にファイル保護機構はないので「全部保護されていることにして」返答するようにした(sqlite2.plを流用し、引数を少し拡張)だからロールは、手持ちのストリームの保存期間を過ぎれば、単に再生できなくなるだけです。
「保護中」のリンクは、window.open()でVGAサイズの別ウィンドウが開き、保護されているファイルの情報などを表示するために設けられたものらしい。が、ここを乗っ取っていきなりTSファイルをダウンロードできるようにしたというわけ(tsdownload.plを呼び出す)
実は、市販されているARecX6レコーダーは、好きな番組だけ残しておくことができない仕様になってる。しかしTVRoll APIやGUIを見る限り.....ある程度期待できるかもしれませんね。そもそも市販レコーダで「全く保存できない」製品ってどうなんだよと誰でも思うものね。
欲を言えば....USB接続のSDカードに書き出しできるといいんですがね。ケータイのmicroSDに待避できれば尚よろしい。それができれば、 わざわざ5万かけてワンセグ野郎サーバたちあげるよりも、 3万のARecX6買った方がいいね。
ワンセグ野郎はチューナー入手が大変困難だからね.....
思い起こせば前夜まで、
って1週間くらいずーっと悶えてたゴロ⌒ヽ`ヽ∩ __ノ。A。) ゴロゴロ
だって....美容院って言ったら女性と洒落乙メンの巣窟じゃない ですか!!ブサキモオタが行ったら 蔑まれて蹴られて石を投げられ地獄の業火に焼かれる とか思うじゃないですか!!!(被害妄想) 百歩譲って客はいいにしてもスタッフ全員女性だったら死ぬでしょ!! ドア開けた途端に嘲笑が聞こえそう!!(完全な病気)
しかし....最近白髪が増え過ぎてね(ガクリ) 今まで自分で染めてたんだけど、襟足などが うまく染まらないんだな既に。 実家帰って親にやってもらうことも考えたけど、 それはそれで情けない話だ。
引きこもりニート&ネット番長な俺はいろいろ調べました。結局 ベストサロンが一番役立ったかな。 きめ細かな検索条件が良い。 しかし男性歓迎のところを見つけても、店のHPを見ると スタッフが女性だらけのところが多く.....まあ当然か。
それでも調べて行くと、スタイリスト男性1+女性1で、 数席でこじんまりとしたメンズカット経験豊富の店が 2駅先にあるじゃあ〜りませんか....ごくり。
オタクらしく夏の日差しに汗だくになってから突撃(最悪)
屠殺場の如きQBハウスとは違うのう。白を基調とした洒落乙空間に、 観葉植物など置かれていてビビる。 すでに挙動不審と化す。どもる、足がガクガクする、 座ってもYokohamaWalkerを逆さまに読む、など。だめだ。
しかし...待ち時間が長い...(^^;
他のお客さんに対応しているスタッフを見ていたら、 汗もひいて周囲を見る余裕がでてきた。 この店はスタイリスト二人だけで、かつ他のスタッフがいないため、 5席しかなくてもてんてこ舞いのようだ。
やっと順番が回ってきたので、冷静にきっぱりと要望を伝える。 「オウフwww拙者をwwwwww若く見えるようにしてくださいディクシwwwww」 よし!なんとか通じたようだ(ぉい) いや普通に悩み相談しましたけどね.....髪が固くて伸びっきりになるとヘルメットと化すこととか、一皮めくると白髪だらけだとか。 すると「側頭が膨らんでるのは日本人にありがちなので気にしないで」「カラーはダークブラウンの方が白髪が目立たない」みたいなことを言われた。さすがにブラウンは断ったけど。
自分で染めた部分は長めのところにしか色がのっていないため、 カットが進むと どんどん真っ白 になってしまって 燃え尽きた明日のジョー感すごい....これカラー一緒に頼んで正解だったわ。
トークは、俺はキモオタなので正直話すネタがないのだけど... 代わりに男性スタイリストが店を立ち上げるまでの話をきいていた。
上場企業のチェーンで店長になって数年やってたこと(この時点で俺の中で彼は「店長」になった)。 その間、先輩のスタイリストが先に独立していっても2年くらいで店潰して戻ってきたこと(!)。 美容室の客入りは季節需要的な波があるのでけっこう大変ということ。渋谷では紹介キャンペーンやってもあまり人が来なかったこと。 だから自分が店を立ち上げるときは、ケチケチ大作戦で自力でティッシュ配りをやって顔を売ったこと。それでも最初はお客が来なくて苦労したこと。でも神奈川の片田舎の特性(?)なのかお客さんが芋蔓式に別のお客さんを紹介してくれて突然忙しくなってしまったこと、など。
聞いてた感想は、美容師という武士(もののふ)は、職人であり事業主でもあるという感じ。やっぱ単なるサラリーマンとは経験値が違うね。 俺よりずっと若いんだけどけっこうな苦労をしてるんだよね。えらいなあ。
ここで女性スタイリストに交代してカラー.... 全くトークなし!(T_T) ええキモオタとは話す価値ありませんかそうですかー! しかしすごーく入念に塗りたくってくれた。これは自分でやるのとは根本的に違うね。
洗い流すときのシャンプーはちょっと緊張した。 「お客さん初めてかい?力抜けよ」「ああんだめ////」 みたいな会話があったりなかったり(死)なんせ頭洗いがあったのは中学のときの馴染みの床屋まで。その後はずーっとカットのみ床屋、安い店を渡り歩き、しまいにはQB HOUSEまで堕ちたからなあ。
しかしあれだね、人の手で洗ってもらうだけでけっこう 癒されるね。 癒し時間を金で買う、という感じと言うと下世話な表現だが。 普通の女性にとっては、リラックス空間なんだろうなとちょっとオモタ。
Windows+ActivePerlで、CGIがタイムアウトになってしまう らしいので、少し原因を調査して直してみた。
ダウンロード:webapi2_20110830.tar.gz
ついでに改行コードもWindows(CR+LF)にして、 シェルヘッダもC:/Perl/bin/perlに変更しておいた。
さすがに全く動かさないのもアレなので、 WindowsにApache2とActivePerlをインストールして、 sqlite0.plとsqlite2.plは検証してみた。 そしてWindowsのCGIが死ぬほど遅いことに気づいた。 sqlite0.plは、たった400件で30秒以上かかる。テストマシンはSempron1.6GHzだけど...遅すぎる。Linuxサーバだと0.9秒とかそんなもんなのに。
sqlite0.plのEPGデータをとってきて所定のハッシュに登録する ループがある。擬似コードで書くと、
while ($rcols = $sth->fetch()) { (カラムをリストに取り出す) (言語やタグの変換を行う) (検索条件で間引きをする) (ハッシュに入れる) }
こんな感じだが、SQLite3からデータを取り出す部分のsth->fetch()は一瞬で終わってしまい、(言語やタグの変換を行う)の部分がめちゃくちゃ時間を消費している。つまり SQLite3は白だ。
SQLの時刻文字列をPerlのDateTimeオブジェクトにするメソッドで、軽く気軽にカジュアルに、こう書いていた。
sub searchutil::sqlite3rev { my ($str) = @_; my $dt = DateTime->now( time_zone=>'local' ); if ($str =~ m!([\d]+)-([\d]+)-([\d]+)\s([\d]+):([\d]+):([\d]+)!) { $dt->set(year=>$1, month=>$2, day=>$3, hour=>$4, minute=>$5, second=>$6); } return $dt; }
........別におかしくないよなあ?と思ったら
なんぞこれ。ActivePerlのバグじゃないのか。それともWindowsは現在時刻とってくるのにこんなウェイトが必要だというのか!!! 結局最初に1つだけ作成して、clone()で複製を作るようにしました。
人生という冒険は続く(劇違)
Before...
_ 通りすがりのあいあん [毎度のことですが生タグが表示されてしまいます。どうすればよいでしょうか。]
_ ぱ [直したはずです。もうしわけない。]
_ 通りすがりのあいあん [ありがとうございました。 12日更新分からhtml方式で記述できました。 8/9~8/11分はwikiスタイルでしか..]