wikipediaデータ利用でハマった件

twitterデータを使って色々するサイトというかサーバは組めて、その経緯を残しておこうと思ったんだけど、この2~3日サーバ自体が不安定ですぐ落ちる。それを直してからまとめるとします。

そんでつぎにwikipediaデータで色々するサイト作ろうとしてるんだけど、まずはローカルのというかサーバでもなく手元のwindowsノートのMySQLに全データ突っ込もうとして四苦八苦。

mwdumper.jarでやるのが良さそうなのでまずは挑戦。やっぱりjavaが好き。

で、2時間ぐらいで終了。DBの中身は空w なんか初っぱなにERROR吐いてるのはわかってたんだけど、無視してた。というか処理止まらないし。このページを参考にcharcter-set指定。

java -jar mwdumper.jar –format=sql:1.5 jawiki-latest-pages-articles.xml.bz2 | mysql -u フガフガ -pホゲホゲ –default-character-set=utf8 wikidb

中身入った。けど色々見てみると何かおかしい。SELECT COUNT(*) FROM text でレコード数見てみると413000しかない。元データは1853286pagesあったのに。

ケツに >aaa.txt 2>&1  付けて処理を記録。ものすごい勢いで流れてっちゃうからね。

途中でエラー吐いてMySQLが終わってるらしい。「ERROR 1366 (HY000) at line 4241」

このページを参考にSTRICTモードを外す。my.iniで指定したんだけど上手くいかず。

mysql> SET @@GLOBAL.sql_mode=”; ってmysql内で設定する。ここで「なぜ指定が効かないのか」を追究していれば次のはまりは無かったのに…

で 結果)1853286pages count(*):1853286

無駄にDBがでかいので必要な部分だけ抜き出して別テーブルへ。
で、ERROR 1206 (HY000): The total number of locks exceeds the lock table size
ググった結果の対処法は「innodb_buffer_pool_sizeを増やす」一生懸命 C:\Program Files\MySQL\MySQL Server 5.6\my.iniを
変更しても反映されず。諦めてJAVAでなんか書くかと思ったが、最後にもう一度my.iniがどっかに隠れてないか検索。
見たことないのが出てきた→C:\ProgramData\MySQL\MySQL Server 5.6\my.ini???
変更したらちゃんと反映。くそ。

wordpressのif文がわからない

(表題の件の解答は載ってません。あくまで備忘録です。)

職業訓練も卒業制作の期間に入って、毎日自習状態。
これなら家でやってたほうが環境(現実のとPCスペックと)は良いんだけど、出席足らずで訓練終了認定もらえなかったら元も子もないので、教室に来てしょぼいPCでコード書いてます。Eclipseが使えないのでPHPコードをごりごり書くのは敬遠して、前から気になってたこのブログがW3C先生に怒られてたのを直すことにする。
細かいの(id指定をclass指定に変えるとかね)を全部つぶして、最後に残ったのがページ遷移部分。wordpressのテンプレート通りだと、例えば先頭ページの場合、当然、もっと「最近の投稿」は存在しないのだけれども、<span>タグだけは出力されるので、「中身がないですよー」って怒られる。以下試してみた対処法。

  • if文でくくる。「if(『最近の投稿』を出力する関数』){echo”<span>”. 『最近の投稿』を出力する関数』.”<span>”}」
  • 同じく。「if(『最近の投稿』を出力する関数』){echo”<span>”;(改行)『最近の投稿』を出力する関数』;(改行)echo”<span>”;(改行)}」
  • 同じく。ぐぐってwordpress(というか別の書き方)のif構文に書き換える。「if(): ~ endif;」

以上全部駄目。なぜか<span>タグだけ出力されない。『最近の投稿』は出力される。試しに実行部分の『最近の投稿』を出力する関数』を削って「echo”<span>”」だけにしても『最近の投稿』だけ出力される。幽霊みたいでちょっと怖くなった。
まぁ、良く考えたら、分岐判定部分に記述している関数が実行されて処理を抜けちゃってることがわかったんだけど、今度はそれの直し方がわからない。つまり「if文で判定にある関数の実行結果を参照したい。けど実行はさせたくない」という問題。
if(()==”TRUE”)って明示してみたりしたんだけど全然駄目。

以上、午前中いっぱい使って駄目だったのであきらめる。宿題として覚えておく。まだif構文の理解が甘い。
え、でも治ってるって?<span>タグには&nbsp;突っ込んでW3C先生を騙してます…

$_session

未来の自分への教訓(「お前も最初はこんなレベルだったんだぞ」)のために色々書いてるわけですが、恥ずかしいことは自覚してます。

でも恥ずかしいほど教訓になる、と思ってこのブログは書いてます。が。しかし。記憶力の減退が酷くて、「二三日後の自分への教訓」になってる場合がちらほら出てきてます。

今日も自分向けのメモ。

PHPで$_GETとか$_POSTとか、よく考えないで教科書通り大文字で入力してきたけど、やっぱり大文字じゃなきゃ駄目だったことをはっきり実感した。
先日書いたとおり試験勉強(いよいよ今度の日曜日!)の暇を見つけてはちまちまECサイトみたいなの(だってホントには商売できないもん)を作ってるんだけど、やっぱりちゃんとしたサービス作ろうとするとスクリプトを結構な数のファイルに分けて書いていくわけで、その場合、ある程度まとまって処理を記述し終わらないと走らせられないわけで…。

で、ようやくECサイトの会員向け部分の半分と管理画面の30%位出来たので、走らせてみたところエラー。サクラエディタとDWのお陰で入力ミスは無いんだけど、挙動が無茶苦茶。

結局if分岐のかなりの部分でうまくいってないご様子。さらに分岐がうまく行ってても必要な値が渡されていない結果。例えばログイン後画面に「いらっしゃいませさん」とか(本来あいだに名前が入る)。

犯人探しに2時間。犯人は「$_session」。「$_SESSION」じゃないとPHP君にはわからないようです。面白いのはエラーにはならないこと。JSだと未定義変数エラーばっかり見てる気がするときあるけど、そういえばPHPでは見たことないな。
勘違いか。

とにかく、スーパーglobalsの名前は大文字でが正解。小文字の場合静かに誤動作。途中のデバックやって無いから、6~7ファイル書きなおし。といってもサクラで置換だけど。サクラかわいいよサクラ!