年別アーカイブ: 2012年

データベースのデータを定期的に順番に利用する

例えば、MYSQLデータベースのデータを1番から順番に(順番にの部分が重要)、1日10個ずつ利用するためにはどうしたらいいか調べた。
実際に選んだのは、カウンターとCRONを使った方法。
まず、実行ファイルは、CRONで一日一回動かす。
これはやり方は簡単なので省略。
次に、データベースから順番にデータを取り出す方法。
順番に取り出すには、連続性を持たせるために、取り出したデータの順番をどこかに一旦保存しないといけない。
そのために外部にテキストファイルを作って置いて、そこでカウンターを動かしてやることで、データの順番の記憶に使える。
PHPの場合は、実行ファイルの中に、以下を入れておき、同じ場所にcount.txtという空白のテキストファイルを置いてあげる。

$file_pointer = @fopen(“count.txt”,”r+”);
if(flock($file_pointer, LOCK_EX)){
$count = fgets($file_pointer, 65);
if(!isset($count) or !is_numeric($count)){
$count = 0;
}
$count++;
rewind($file_pointer);
fwrite($file_pointer, $count);
flock($file_pointer, LOCK_UN);
}else{
echo “失敗”;
}
fclose($file_pointer);

内容はテキストファイルを開いて、中の数字を取り出し、1を足して、新しく書き換えて保存するというもの。

このプログラムで、count.txtの中の数字が、プログラムがCRONで実行されるたびに1づつ増えていき、1,2,3,4,5,・・・となる。
この数字を利用すると、データを毎日順番に取り出して利用することができる。

$count++;

の部分を

$count–;

とすると、逆に一個ずつ減らすことも可能。
他にも方法があると思うけど、取り敢えず今はこの方法がお手軽なので使ってみた。

水泳の本

ちゃんとしたフォームというか泳ぎ方とか、周辺知識も頭に入れておこうと思い、初心者の水泳用の本を何冊か買ってきた。初心者向けの水泳の本って思ったより少なくて、迷うほど選択肢はなかった。買ってきたのは以下4冊。

DSC_0730

オールカラー版 DVD付き 基礎からマスター 水泳(amazon) | 楽天
クロールがきれいに泳げるようになる!(amazon) | 楽天
クロールが速くきれいに泳げるようになる!(amazon) | 楽天
平泳ぎが速くきれいに泳げるようになる!(amazon) | 楽天

もし、一冊だけ選ぶなら、「オールカラー版 DVD付き 基礎からマスター 水泳」一択。
内容も編集もよくて、DVDも余計な待ち時間がなくてさくさく見れる。よくできてる。
本の方は、基礎の基礎から、人間の体の比重がどうなってるかとか、浮く理由、沈む理由、水中での形による抵抗の違い(マグロの形の抵抗を1とすると、球体は抵抗が10くらいあるらしい)。他に水中での揚力は角度40度で最大になり、上手く利用すれば、揚力を利用しない場合に比べて3分の1の力で同じ力を引き出せるとか、ちゃんと理論的に説明してくれるから頭に入る。
本の中での説明は、大部分が絵を使ってあるから見やすい、他の本では写真で説明してある物もみたんだけど、写真だと見づらい。説明は抽象的ではなく、具体的で、何度も読み返すくらいに役に立つ。

「きれいに泳げる~」のシリーズの方は、DVDの待ち時間が長めなのと、本の説明が抽象的な部分が多い。ある程度泳いでると、こちらの説明でもわかりやすいのかもしれない。今の段階だと前者の基礎からマスターの説明の方がわかりやすい。この辺は好みの問題かもしれないけど。

「クロールがきれいに泳げるようになる」と「クロールが速くきれいに泳げるようになる」の違いは、「クロールがきれいに泳げるようになる」の方が初心者向けで、DVDもついてない。「クロールが速くきれいに泳げるようになる」はある程度は泳げる人向け。「平泳ぎが速くきれいに泳げるようになる」もある程度は泳げる人向け。「きれいに泳げる~」のシリーズもゆっくり泳ぐことの大切さについて書いてあるから、競技でやるんじゃなくて、健康や楽しみのためにプールで泳ぎたいという向け。

追記
市民プール検索
公共プールの使い方

水泳用のタオル

最近健康と気分転換のため時々プールで泳ぐようになったので、いくつか水泳に必要な道具を買い揃えた。
スポーツ用品なんていままでまったく興味がなかったので、何見ても素材の進化に驚いてしまう。

水泳用のタオルは以下の2つを購入。綿のタオルはかさばるし、一度水分を含むと乾くまで時間がかかるので、新素材を使ったスイムタオル(セームタオル)というものがよく売れている。スイムタオルの特徴は、水分を含んでも一度絞って水分を落とせばすぐに吸水性が復活する点。今回は、アマゾンでスイムタオルで一番売れていたミズノの商品を購入。

MIZUNO スイムタオル 85ZT750 34×44cm
ミズノ(MIZUNO) スイムタオル ブルー 85ZT75127
【amazon】 【楽天】

サイズは34×44cm。このサイズが一番売れ筋。もう一つ大きなサイズがあるんだけど、実際使ってみたらこのサイズで十分だとわかった。

MIZUNO スイムタオル 85ZT750 34×44cm

MIZUNO スイムタオル 85ZT750 34×44cm

MIZUNOスイムタオルを使ってみた感想ですが、肌触りは独特なものがあって、柔らかい少し厚みのあるゴムのような感触で、いかにも合成素材という感じです。お世辞にも肌触りがいいとは言えない。こんな素材で水なんて吸うの?という感触で逆に吸水性が悪そうな感想を持った。ただ実際に使ってみると吸水性と速乾性は抜群で、プールにⅠ枚だけタオルを持って行くとしたら間違いなくこれを選ぶくらいに便利。軽く絞ると水がざぶざぶ落ちるし、濡れた体を拭くとグングン水を吸ってくれる。サイズは34×44cmとハンカチくらいのコンパクトサイズなんだけど、吸水性がいいので、このサイズで十分。絞ればすぐ吸水性が復活するので、大きなサイズを使うメリットはあまりない。欠点をあげるとすれば、乾いた後にパリパリに固まるので、干す時に収納時のことを考えてから、干したほうがいいのと、パリパリに乾いた状態で曲げると割れそうなのが気になる。使う前には一度水で濡らして柔らかくしてやると使いやすい。このスイムタオル1枚でも十分なんだけど、最後の仕上げに体を拭く用&着替えの時用にもう1枚、以下のスワンズのバスタオルサイズの水泳用タオルを購入。

SWANS(スワンズ) ドライタオル ) バスタオルサイズ
SWANS(スワンズ) ドライタオル バスタオルサイズ 80×150cm 
【amazon】 【楽天】

SWANS(スワンズ) ドライタオル ) バスタオルサイズ

SWANS(スワンズ) ドライタオル ) バスタオルサイズ

こちらは、ミズノのスイムタオルとは素材がだいぶ違って、ゴムっぽさはあるけど普通の綿のタオルの感触に近い、ミズノのスイムタオルと綿のタオルの中間くらいの感触。ただし綿よりこちらのほうが極薄で、バスタオルサイズなのに、畳むと、普通の綿のタオルと同じくらいのサイズになる。乾いた後も柔らかいまま。ミズノのものより、肌触りがいいので、最後の仕上げに拭くのと、着替えの時に使う兼用にしている。タオルはこのふたつがあれば十分。どちらもコンパクトなので、プールに行くときの荷物が嵩張らず軽くていいです。

追記
市民プール検索
公共プールの使い方

複数のテーブルの扱い

MYSQLのデータベースで、10万件くらいのデータが入ったテーブルが2つあって、
両方に共通したカラムがあって、
両方のデータを同時に使うために、内部結合とかビューを使ったら異様に遅くて、取り出すデータの量が多いと途中でとまってしまった。
たぶんやり方が悪いんだろうけど、試しに新しいテーブルを作ったらあっさり解決。体感的にはほぼタイムラグ足しで結果が取り出せる。
テーブルの作り方は簡単で

CREATE TABLE 新しいテーブル名 SELECT 選ぶカラム名 FROM テーブル1 JOIN テーブル2 ON テーブル1.共通のカラム名1=テーブル2.共通のカラム名2

CREATE TABLEの後は、内部結合のクエリをのそまま書いてあげるだけでできた。

できるだけシンプルなmysqlimportの使い方メモ

mysqlのデータベースにテキストやCSVファイルからデータをインポートする時、サイズが小さければphpmyadminでブラウザ上から簡単にクリックだけでインポートできる。
ただし、サイズが大きくて100Mのファイルなどは無理。ちなみに今回はロリポップ!と、さくらインターネットのレンタルサーバー上で試した。

そこで直接クエリを発行してインポートさせようとしたけど、はまった・・・。LOAD DATA INFILEとmysqlimportを使う2つの方法があるらしいんだけど、
最初にLOAD DATA INFILE 構文を使ってみたけど、無理だった。
次に、mysqlimportを使っていろいろ試してたら上手く行った。
データはtxtでもcsvでも成功。データ自体は前もってサーバー上にアップしておく。
以下phpでやる方法。

$frogs = ‘mysqlimport –host=ホスト –user=ユーザー –password=パスワード –fields-terminated-by=”,” -L データベース名 ファイル名’;
system($frogs);

これをサーバー上にアップして動かせばOK。
最初に、ネット上に転がっていた説明通りにしたんだけど、いくらやっても上手くいかなくて、いろいろ総当りで試して成功。
気をつける点は以下。
ホスト、ユーザー、パスワード、データベース名の箇所はお決まりのmysqlへ接続する時に使うものを入れる。
–fields-terminated-by=”,”の部分はフィールドの区切りに使ってある記号を指定。
-Lはローカルの意味で、このファイル自体をftpでサーバーにアップして使うので、この場合はそのサーバー上のファイルということになる(この辺自信なし)。
ファイル名はフルパスで指定。
/home/users/なんとかかんとか/test.txt
レンタルサーバーならこんな感じになる。
ここで指定したファイル名(拡張子は関係ない)と同じ名前のテーブル名を探してそこへデータがインポートされるので、あらかじめ、テーブルをちゃんとカラムの数やデータ構造など揃えて同じ名前で作って用意しておく必要がある。

300Mくらいのデータをインポートしてみたけど、数秒でインポートが終わった。かなり早い。

このへん、最初の一回は面倒だけど、一度できれば後はいろいろ使い回しができるので楽ちん。

mysqlは、必要な時に必要な物だけ調べて使ってるんだけど、一番最初に買った基礎からのMySQL 改訂版 (西沢 夢路)は良書で、今だに時々見返すことがある。自分でサイト作るためにmysql使っている人ならこれ一冊あれば十分な気がする。たぶん下手に小難しい本に手を出したら挫折してただろうなと思う。