2008/11/30
記事を一覧にしたときに表示されるコメント数と、記事のみを表示したときに表示されるコメント数が合致していない。
以下のSQLを実行することでその不一致を修正できる。
update wp_posts p set p.comment_count = (select count(c.comment_ID) from wp_comments c where comment_post_ID=p.ID and c.comment_approved = 1);
Wordpressは一覧表示の高速化のためにコメント数をエントリーが保存されているテーブルにキャッシュしている。何らかの原因でこのキャッシュの数値がおかしくなったらしい。
約1000件の記事中、14件あった。
2008/11/28

パフォーマンステスト用と、最近のDesktop Linuxの動向を感じてみるためにUbuntu Desktop入れてみた。
3年前に比べて、すんげぇ進化してるねー。
これから、こいつをパフォーマンステストでいじめて行こうと思う。
2008/11/27

EASEUS Partition Manager
http://www.partition-tool.com/
個人だと無料で使える。神だ。
試してみたところ、ちゃんと使えた。マニュアルなんて見なくても使えるぐらい優しいUI.
2008/11/27
Wordpress 2.7が正式リリースされたので、新しくWordpressを使い出す方へのプラグインのアドバイス。
以下のプラグインを一通り入れておけば立派なCMSがあっという間にできます!
- One Click Plugin Updater
- http://w-shadow.com/files/one-click-plugin-updater.zip
これを入れなきゃWordpressが始まらない!と言っても良いぐらい今後の作業が楽になる。このプラグインをインストール後は、ブラウザ上からプラグインのURLを入力するだけでインストールが完了する。まず、このプラグインをインストールしてから以下のプラグインを入れましょう。
また、新しいプラグインが出たらアラートを表示してくれる。その後、ボタン一発でアップグレード出来る。
- All in One SEO Pack
- http://wordpress.org/extend/plugins/all-in-one-seo-pack/all-in-one-seo-pack.zip
言わずと知れた、SEOを強化するプラグイン。黙って入れておけ。
- Google XML Sitemaps
- http://www.arnebrachhold.de/redir/sitemap-dl/
Google Sitemaps形式のXMLを出力してくれる。
- Ultimate Google Analytics
- http://www.oratransplant.nl/files/uga/ultimate_ga_1.6.0.zip
Google AnalyticsのIDを管理画面から設定すると全ページに埋め込んでくれる。ログインしていたらその人が見たときにはタグが出力されないという細かいところにも気を配ってくれている。
- WP-Lytebox
- http://grupenet.com/wp-content/uploads/wp-lytebox-1.3.zip
画像のプレビュー用。
- WordPress.com Stats
- http://downloads.wordpress.org/plugin/stats.1.3.4.zip
wordpress.comと連携してアクセス解析してくれる。ダッシュボードに表示されるのでトラフィックの概要をつかむのに便利。
- Wordpress Mobile
- http://wordpressmobile.mobi/download.zip
これは、好みもあると思うが、インストールするだけでモバイル対応のWebサイトになる。HTMLテンプレートは分離されていないので手書きで修正する必要があるが、プラグインを入れるだけで勝手にモバイルサイトも出来てしまう手軽さを評価。
- Auto-hyperlink URLs
- http://www.coffee2code.com/wp-plugins/autohyperlink-urls.zip
Blogを書いていると、URLを入力する機会が多い。このプラグインを入れておけばURLが自動的にリンクされる。精度がいまいちだから、HTMLコードを多用している場合はおすすめしない。
ちなみに、このblogで動いているプラグインはこちら。

2008/11/19
アイアンと打ち方は基本的には同じ。
違うところは、スイング軌道。
アイアンはアップライトなのに対し、フラットでアッパーブローで打つ。
ボールの位置が非常に需要。
スタンスは、ボールの正面で直立し、左足のつま先を30~45度開く。
その後、右足を開く。スタンスは肩幅ぐらい。
右足は必ずスクエアにする。
グリップは軽く握る。
ドライバーの時の体重のかけ方は
右に60,左に40。
ドライバーショットは、アドレスの時に肩が開きやすくなってしまう。
アドレスの時にグリップの延長戦がズボンのジッパーに来るようにする。
インパクトの時にしっかりと頭を残す。
ダウンスイングで重要なのはクラブが右肩の下を通る。
PGAではヘッドスピードに応じてロフトの角度を算出している。
| ヘッドスピード(m/s) |
ロフト(度) |
| 30以下 |
16以上 |
| 30~35 |
12~15 |
| 35~40 |
11~12 |
| 40~45 |
10~11 |
| 45以上 |
10以下 |
上達方法
セットアップ時に、リストコックを使って30cmぐらいクラブを浮かせ、そのままバックスイングすると、フラットなスイング軌道を描ける。
ボールを打つ前に、ティーを打つ練習をする。
トップのミスショットはOKだけど、ダフリはアップライトになっているため良くない。
フラットな軌道で打つと、ボールもフラットに打てる。アップライトからボールを打ち込むと、上に上がってしまう。
テンプラしたときに、ティーの高さを下げてはいけない。テンプラはアップライトにバックスイングしているから。
2008/11/18

PHPSPotの方で取り上げられていたけど、どうしてもBlogっぽさが出ちゃうテーマばっかりなので探してみました。
このテーマなら、日本の中小規模のwebサイトには違和感なく使えると思います。
http://wordpress.org/extend/themes/corporate-theme-v2
2008/11/16
PHPのセッションハンドラをデフォルトで使っている場合のガーベージコレクタ(GC)の話。
PHPはサーバ上で保存してあるセッション情報を保存してあるファイルをを定期的に削除している。
削除するタイミングはPHPが起動する時、HTTPリクエストまたはコマンドラインからPHPが起動した際に一定の確立でGCが起動するようになっている。Javaのアプリケーションサーバならメモリ上にJVMが常駐しているからプログラムの起動とは非同期にできるが、PHPは同期で処理している。そのため、PHPではGCが起動したときにプログラムの実行時間が長ってしまう。
よって、大規模サイトになったときには必然的にセッションファイルが扱うセッションが多くなるため、GCにかかる時間が長くってしまうから、GCはPHPに任せないで自前で用意すべき。
PHPのGCを制御する設定はphp.iniに記載されている以下の3つ。
session.gc_probability = 1
session.gc_divisor = 1024
session.gc_maxlifetime = 1440
GCの起動確立は、gc_divisor 分のgc_probability。上記の例では1/1024の確立でGCが起動する。
セッションファイルの最終変更時間がgc_maxlifetime秒以前だったらセッションを削除する。
(PHP4.2.3以降はファイルの最終更新日、それより前は最終アクセス時間)
gc_probabilityを0にすればPHPのGCは無効になる。
以下のようにすれば、PHPからGCが起動されることは無くなる。
session.gc_probability = 0
session.gc_divisor = 1024
session.gc_maxlifetime = 1440
以下は、GCをcronで一定時間に削除する例。
*/10 * * * * daemon nice -n 18 find /tmp -type f -name "sess_*" -mmin +120 -exec rm {} \;
上記の例では、10分に1回GCを起動し、最終変更時間から2時間経ったら削除する例。
プロセスの優先度は低めにしてある。
2008/11/15
コマンドラインでロールバックの方法を発見。
ロールバックそのものはできないけど、merge -> commit で似たことができる。
TortoiseSVNの「Revert changes from this revision」をと同義です。
$ svn merge -c -303 http://svn.example.com/repos/calc/trunk
U integer.c
$ svn status
M integer.c
$ svn diff
…
# verify that the change is removed
…
$ svn commit -m "Undoing change committed in r303."
Sending integer.c
Transmitting file data .
Committed revision 350.
mergeスイッチにはたくさんオプションがあって、様々なロールバックを行える。
Valid options:
-r [--revision] ARG : ARG (some commands also take ARG1:ARG2 range)
A revision argument can be one of:
NUMBER revision number
'{' DATE '}' revision at start of the date
'HEAD' latest in repository
'BASE' base rev of item's working copy
'COMMITTED' last commit at or before BASE
'PREV' revision just before COMMITTED
-c [--change] ARG : the change made by revision ARG (like -r ARG-1:ARG)
If ARG is negative this is like -r ARG:ARG-1
-N [--non-recursive] : obsolete; try --depth=files or --depth=immediates
--depth ARG : limit operation by depth ARG ('empty', 'files',
'immediates', or 'infinity')
-q [--quiet] : print nothing, or only summary information
--force : force operation to run
--dry-run : try operation but make no changes
--diff3-cmd ARG : use ARG as merge command
--record-only : mark revisions as merged (use with -r)
-x [--extensions] ARG : Default: '-u'. When Subversion is invoking an
external diff program, ARG is simply passed along
to the program. But when Subversion is using its
default internal diff implementation, or when
Subversion is displaying blame annotations, ARG
could be any of the following:
-u (--unified):
Output 3 lines of unified context.
-b (--ignore-space-change):
Ignore changes in the amount of white space.
-w (--ignore-all-space):
Ignore all white space.
--ignore-eol-style:
Ignore changes in EOL style
-p (--show-c-function):
Show C function name in diff output.
--ignore-ancestry : ignore ancestry when calculating merges
--accept ARG : specify automatic conflict resolution action
('postpone', 'base', 'mine-full', 'theirs-full',
'edit', 'launch')
--reintegrate : lump-merge all of source URL's unmerged changes
http://www.rustyrazorblade.com/2007/04/06/how-to-roll-back-commits-to-an-earlier-version-of-a-repository-in-svn/
あるコミットを無かったことにする方法が書いてある。
スマートではないけど、正攻法。ダウンタイムあるのが良くない
http://timhatch.com/ark/2006/04/18/howto-svn-commit-rollback
2008/11/12
Wikipediaのおかげで今までどれだけの無駄な労働を節約できたことか。
感謝の意を表して。

2008/11/12
普通のショットはリーディングエッジから地面に当たるが、
バンカーショットはトレイリングエッジから当たる。
打ち方
フェースは1時の方向へ開いてからグリップを握る。
フェースをスクウェアに握ると砂に刺さってしまう。
ボールの位置は左足寄り。オープンに構える。
体重は60%左足。
バックスイングで右足に重心を乗せてはだめ。
グリップの強さは2から3。
テイクバックはリストコックを早めに入れる。鋭角に入るように。
砂にリーディングエッジが刺さるため、ハンドファーストに構えてはいけなく、
練習
足から2本のラインを引いて、間の砂を叩くようにする
砂をそぎ取って、グリーンに乗せるイメージ
距離の調整
必ずテイクバックは左手が地面と水平(9時)
距離は、フォロースルーの大きさで調整する
4時、3時、2時
ボールが埋まっている時の打ち方
フェースは11時。
ボールの位置はスタンスの中
グリップは強く握る