2009年12月29日火曜日

SQLチューニングのヒント

対象RDBMSはMySQL。
2000行くらいのテーブルと10000行くらいのテーブルを結合するSQLが、実行時間が10秒くらいかかっており、これを解消しようとしてました。
で、いろいろいじってみたところ
... from hoge h left outer join fuga f on h.id = f.id and h.yyyymm = 200912
とやっていたのを、
... from hoge h left outer join fuga f on h.id = f.id and h.yyyymm = '200912'
という具合にシングルクォートで囲ってみたところ、実行時間が0.3秒と、劇的に速くなりました。
カラムyyyymmはvarchar型です。他にもいろいろいじってましたが、どうもこのシングルクォートが遅さの決め手だったと思われます。
チューニングは地道な作業ですが、これまでの経験を振り返ってみるととにかく気になることは試してみると、活路が開けるような気がします。

2009年12月11日金曜日

部分最適と全体最適

最近"部分最適と全体最適"について考えさせられることがあって、ゴールドラットの「ザ・ゴール」を思い出した。

内容についてはほとんど覚えていないけど、部分最適と全体最適という言葉は印象に残っている。あと表紙のデザインと色もインパクトがあった。
目先のことばかり気にしていると「木を見て森を見ず」になってしまうから、気をつけないと。

2009年12月10日木曜日

Google ChromeでJavaScriptをオフにする

Google ChromeのJavaScriptを無効にしようと思い、オプションの中を探してみたけれど、ない。
クッキー無効はあるけど、JavaScript無効がない。
うーん、どうすれば、、、と思ってググったら方法がありました。
http://jp.sikaku-chat.com/?eid=1136416
起動時のパラメータを指定しないといけないんだそうです。。
ちょっと面倒。でもまあ滅多に使うもんじゃないからいいかな。

2009年12月3日木曜日

「汎用性」には気をつけろ

システム開発の現場にいると、「汎用性の高い仕様でお願いします」というようなフレーズがよく出てきます。
"汎用性"という言葉は「いろいろな用途に使えて便利」というような意味で使われるが、打ち合わせなどでこの言葉が出てきたときは要注意。
無能な人間が、作るべきシステムの目的や意義が明確でない時に、この言葉を口にすることが多いからです。
"汎用性"という言葉には、ちょっとカッコよく、仕事ができそうなイメージがありますが、ほとんどの場合においてその逆で、目的を設定していない/できていないことの裏返しです。
システム開発というのは、その初期段階でシステムが果たす役割と目的を鋭く、明確にしておかないと、高確率で失敗します。
作るものがはっきりしていないとあとで作り直しになることが多く、最悪、取り返しがつかなくなることもよくあります。
なので、自分自身も"汎用性"のような曖昧な言葉はなるべく使わないようにし、またそうした言葉をよく使う人に対しては注意して付き合うのがベター。
以上、これまでの経験から得た教訓でした。

2009年12月2日水曜日

MySQLで奇数と偶数の判別

where句でこうしてやればOK
■偶数
where numberColumn % 2 = 0
■奇数
where numberColumn % 2 != 0
MySQLでしか試していないけど、他のRDBMSでも使えそうです。

2009年11月17日火曜日

MySQLでフィールド値の重複をチェック

group by ... havingを使う。
こんな感じ。
SELECT id,title FROM table GROUP BY id HAVING COUNT(id) > 1;

2009年11月6日金曜日

たとえ話:Webシステムにおけるソフトとハードの関係

ソフトの不足をハードで補える、と考えている人がたまにいるけど、正直難しいと思う。
たとえるなら、ソフトは運転手で、ハードは車のような関係じゃないだろうか。
運転が下手な人(しょぼいソフト)に高性能の車(高価なハード)を与えても、加速とかハンドリングとかは車の性能で良くなるものの、"運転下手"はそのままなわけで、根本的な解決にはならない。事故に合う確率とかも、そんなに変わらないと思われます。
ところが逆の場合、たとえばF1ドライバーは高性能車はもちろん、大衆車に乗ってもその車の持つ良さを引き出し、最高のパフォーマンスを引き出すことができる。
特に今は高性能ハードが低価格で手に入る時代になっているので、投資すべきはハードよりソフトなんじゃないだろうか。
というようなことを、ふと思いました。

2009年10月27日火曜日

2009年10月20日火曜日

HTMLエンティティ

Amazon.co.jpのトップページのHTMLソースを見ていたところ、titleタグの表示がおかしいことに気がつきました。
こんな風になってます。
<title>Amazon.co.jp&#xFF1A; &#x901A;&#x8CA9; - &#x30D5;&#x30A1;&#x30C3;&#x30B7;&#x30E7;&#x30F3;&#x3001;&#x5BB6;&#x96FB;&#x304B;&#x3089;&#x98DF;&#x54C1;&#x307E;&#x3067;</title>
実際にブラウザで見ると普通の文字列です。
Amazon.co.jp: 通販 - ファッション、家電から食品まで
なにかエスケープをしているようですが、初めて見る形式です。
気になって少し調べてみたところ、HTMLエンティティというものだということがわかりました。
&gt;とか&lt;などHTML特殊文字と同じ形式なので、それの拡張版みたいなものなのでしょうか?
とりあえずphpでは、htmlentities関数で変換。html_entity_decode関数で元に戻すことができることがわかりました。
一般的には、メールアドレス収集のボット対策などに文字列のHTMLエンティティ化が使われているそうですが、amazonがtitleタグをHTMLエンティティ化している理由がわかりません。ボット対策ってわけでもないでしょうし。。
文字化け対策にもなったりするんでしょうか?

2009年10月14日水曜日

ルーターをLinksysからAtermに変えた

かれこれ7年くらい使っていたLinksysのルーターを、NECのAtermに変えました。
Linksysはすごく気に入ってたけど、もう営業を終了してしまっていて新機種も出ないようなので、無線LANアクセスポイントとして使っていたAtermのルーター機能をONにしました。
Atermでも特に問題ないんですが、Linksysに比べて劣る点が大きく2つあります。
1つはルーターのリモート管理機能がないこと。めったに使うことはないんですが、Linksysのときはこの機能が何度か役に立つことがありました。
もう1つは、LAN内からはドメイン名で自宅サーバーにアクセスできないこと。Linksysはこれができたんですが、Atermは、というかほとんどのルーターではできないようです。
hostsに書いて対応する解決策が一般的のようですが、自分はメインがノートPCなので、その方法だとちょっと不便。
ほかにプロキシサーバーを通したり、自分でDNSサーバーたてたりするやり方もあるようですが、ちょっと面倒なので、あきらめてIPで直接アクセスすることにしました。
使い慣れた環境を失うというのはなにかと不便ですね。

2009年10月12日月曜日

LinuxでUSBメモリをフォーマットする

たま~にやるLinuxでのUSBメモリのフォーマット。
よくやり方を忘れてしまうのでメモ。

mkfs.vfat /dev/sda1

あとこれもあわせて使う、現在認識されているデバイスの一覧表示。

fdisk -l

参考
Linuxトラブル対策大全 USBメモリーをパソコンに挿入しても,ドライブとして表示されない

2009年10月5日月曜日

phpで波ダッシュ対策

波ダッシュというのは、たまにみかける全角チルダのできそこないみたいなやつです。
一目見て「こいつ、文字化けしそうだな・・・」と思える風貌をしており、実際文字化けします。
今回調べてみて知りましたが、「波ダッシュ・全角チルダ問題」という、有名な問題なんだとか。
http://ja.wikipedia.org/wiki/%E6%B3%A2%E3%83%80%E3%83%83%E3%82%B7%E3%83%A5
phpでの対応はこちらが参考になりました。
http://d.hatena.ne.jp/tamamo-ch/20090730

2009年9月9日水曜日

cseはOracle Instant Client環境では使えないっぽい

Oracle Instant Client(以下OCI)という便利なものがあることを知り、試しに自分のPCに入れてみました。
http://www.oracle.com/technology/global/jp/tech/oci/instantclient/instantclient.html
OCIはその名の通り、Oracleの簡易クライアントソフトです。Oracle Universal Installerなしで、というかzipを展開するだけで利用できます(環境変数等の設定は別途必要です)
sqlplusでリモートへ接続するのは成功したんですが、普段仕事で使っているcseはダメで、「ociw32.dllが見つかりません」というエラーが出てしまいます。ググってみてもこれといった情報はなし。パスもちゃんと通したんですけど、動きません。
環境はWindowsXP、OCIのバージョンは10.2、cseのバージョンは1.59です。
2~3時間ほど格闘しましたが、どうにもならないのであきらめました。ちょっと残念。

2009年8月26日水曜日

Adminerでデータインポートする際の注意

Adminerでもテキストファイルからデータをインポートする機能があるが、オプションの指定が一切ない。
(逆にpmaはオプションの指定がかなり細かい)
何度かトライ&エラーを繰り返してインポート成功したので、わかったことをメモしておきます。
(DBの文字コードはUTF-8です)
・改行コードはLF
・カンマ区切り
・各項目は"(ダブルクオート)で囲む
こんな感じ↓
"id1","name1","1","2","3"
"id2","name2","4","5","6"
"id3","name4","7","8","9"

Adminerを使ってみた

http://phpspot.org/blog/archives/2009/08/phpmyadminadmin.html
この記事を読んで興味が湧いたので、ローカルで使ってみました。
DLは本家サイトからAdminer
結論から言うと、すごくいいです。phpMyAdmin(以下pma)からこっちに乗り換えてしまおうかと思うくらい。
具体的に良いと思った点は、
・軽い
・シンプル
・かといって機能も豊富。pmaにひけをとらない
・フレームを使ってない(pmaはフレーム)
・Viewの作成、編集とかもできる。まだ使ってないけど、Create procedure / Create function とかもあるのでpmaより多機能かもしれない
など。
しばらくはpmaと併用してみようと思います。

2009年8月19日水曜日

[2chコピペ]ちょっと待て!それはホントに必要か?

2chでたまに見かけるコピペ。
なかなか当を得ていて参考になるので保存しておきます。
不必要な消費は可能な限り避けたいものです。
「ちょっと待て!それはホントに必要か?」
■大衆の浪費を刺激する10の戦略■
1.捨てさせる・・・・・100円ライターや、1000円時計など
2.無駄遣いさせる・・・大きめの角砂糖やちょっと押しただけでスーッと出て、もとに戻らないエアゾール式容器など。
3.贈り物にさせる・・・ヴァレンタインセールや父の日セールなど
4.蓄えさせる・・・・・洋酒ビンや全集本など
5.抱き合わせ商品にする・・・カメラの連写ケースなど
6.きっかけを与える・・・読書週間や虫歯予防デーなど
7.単能化させる・・・・・専用ビタミン剤や、七色ウィークパンティーなど
8.セカンドとして持たせる・・・セカンド・ハウスやセカンド・カーなど
9.予備を持たせる・・・・タイヤ・電球などのスペア性のものやフィルムなどストック性のもの
10.旧式にさせる・・・・まだ使えても旧式だと思わせる
■消費十か条■
必要なときにだけ使え
大切にしろ、捨てるな
無駄使いをやめろ
季節感を楽しもう
贈り物などするな
必要なものだけ単体で買え
最小限の消費ですら、計画を持ってあたれ
流行?何それw
無駄買いするな、よく考えろ
最新式?ペイできるか旧式のものと比較しろ

2009年8月6日木曜日

MySQL GUI Toolsを試す

普段使うのはもっぱらphpMyAdminなんですが、こちらの「MySQL GUI Tools」はMySQL社純正のツールで、しかもフリーということで試してみました。
http://dev.mysql.com/downloads/gui-tools/
MySQL Administrator
MySQL Query Browser
これら2つのアプリが主力で、前者がDBの接続、ユーザー、ログ、ステータスなどを管理する機能を、後者がSQLでのデータ入出力を管理する機能を持ち、これらが相互に連携して総合的なGUI管理が可能になっています。
まだちょっとしか触ってませんが、かなり機能が豊富です。ビューとかプロシージャの管理などもできるので、機能だけでいえばphpMyAdmin以上だと思います。開発者ならMySQL GUI Toolsのほうがいいかもしれません。
またいくつかのブログ記事等で日本語の扱いが弱いという点を指摘されていますが、今のところそういった問題には遭遇していません。
なかなか使えそうなので、今後も継続してチェックしてみようと思います。

2009年8月4日火曜日

Windows VistaにOracle10gクライアントを入れる

Windows VistaではOracle 9iは非対応で動作もしないので、10g以上しか使えません。
日本オラクルのダウンロードページでは、「Oracle Database 10g Release 2 (10.2.0)」が配付されています。
http://www.oracle.com/technology/global/jp/software/products/database/index.html
困ったことにこの10.2.0はVista非対応で、Vistaに対応させるにはOracle10g Patch 10.2.0.3 が必要。ただしこのパッチは保守契約してないとDLできません。
が、米国の本家オラクルではパッチの当たった10.2.0.3がダウンロードできます。
http://www.oracle.com/technology/software/products/database/index.html
どちらもインストーラーで言語を選択できるので、本家でダウンロードしたほうが早いです。
なおインストール後にEnterprise Manager Consoleを起動し、データベースツリーを追加しようとしたところ
ServiceAliasException: 11
というエラーが出ました。
どうも「tnsnames.ora」が作成できないか、編集ができてないような感じなので、オラクルのインストールフォルダのセキュリティ設定を変更してみました。
Vistaは普段使っていないのでよく分からないのですが、セキュリティ設定がかなり細かいようです。
とりあえず勘でAuthenticated Userにフルコントロール権限を与えてみたところ、無事データベースツリーの追加ができました。

2009年7月23日木曜日

JavaScriptでテキストフィールドのコピー防止

こんな感じで実装できました。

<input type="text" name="noCopyTest" value="コピーできるかな?" onCopy="return false;">
FireFox3.5とIE7で動作OKでした。
試してないけどonpaste、oncutも同様に使えると思います。

2009年7月9日木曜日

PsShutdown.exeでWindowsをシャットダウン

PsShutdownという、Windowsのシャットダウン用のアプリケーションを導入しました。
http://technet.microsoft.com/en-us/sysinternals/bb897541.aspx
WinXP以降はデフォルトのshutdown.exeがあるので必要ないのですが、VMwareで動かしているWin2000用にこれを入れました。
使い方はこんな感じ。
再起動
psshutdown.exe -r -t 0
シャットダウン(電源切らない)
psshutdown.exe -s -t 0
シャットダウン(電源切る)
psshutdown.exe -k -t 0
これをショートカット登録してデスクトップに設置しておくと、ワンクリックで再起動・シャットダウンができるので便利です。
日本語の説明ページもありました。
http://technet.microsoft.com/ja-jp/magazine/2007.03.desktopfiles.aspx

2009年6月29日月曜日

コジマ vs ヤマダ エアコン購入比較(工事費含む)

暑くなってきたので、エアコンを買うことにしました。

機種はこれ。エコポイントがつく商品で1番安かった機種です。
仕事部屋と寝室で、同じ機種を2台まとめて購入します。


富士通ゼネラル ASJ22V


まず結論から入ります。ヤマダとコジマで見積もりを出したところ、これだけの差がでました。




























 ヤマダコジマ
本体価格¥67800 × 2¥64800 × 2
取付工事費¥26250¥17000
ポイント698
合計¥161850¥146600



その差は¥15250。ポイントも含めるとだいたい¥16000ほどの差です。


まずは本体価格について。
表示価格はヤマダもコジマも「¥69800詳しくは店員にお尋ねください」となっており、ヤマダは¥67800。コジマは¥64800。ただしコジマは"この場でお買い上げ"が条件でした。

次に取付工事費について。
ヤマダもコジマも本体価格に標準取付工事費を含んでいるんですが、今住んでいるマンションはちょっと特殊で、"隠蔽配管"という工事が必要なタイプになります。
標準工事費に加えて数万円の追加工事費がかかることもあるそうなので、実際に自宅に来てもらい、見積もりを出してもらったのがこの金額です。



以上は事実を述べました。


以下は所感を述べます。


正直、この金額の差は意外でした。

実はこれまで「ヤマダは勝ち組でコジマは負け組。だからヤマダは安くて、コジマは高い。」というイメージを持っていましたが、完全に覆されました。


そして取付工事の差にもおどろきました。

たとえば今回"ユニオン"という部材を使ったんですが、ヤマダが¥5000だったのに対し、コジマは¥2500。隠蔽工事もそうですが、ヤマダのほうは価格表の時点で既に高いようです。
こうした工事費用ってユーザー側は情報が少なく、ほとんど業者のいいなりになりがちなので、なんだかヤマダのほうはぼったくってる印象を受けました。



まあ価格なんて水物だし、取付工事もさまざまな状況によって変わるんでしょうが、とりあえず「ヤマダ>コジマ」という先入観は捨てました。とりあえず取付工事が必要なもの、長期保証に加入するものなどはコジマを優先して購入を検討するつもりです。


売上高No1だとか、派手なプロモーションとかに惑わされてはいけないということですね。
高い買い物をするときはよく情報収集し、時間をかけて比較検討をしたほうが良いということを再確認しました。

2009年6月25日木曜日

[CSS]clearfixの決定版

floatによるレイアウト崩れを防ぐclearfixについて調べていたところ、こちらのページで非常に詳しくまとめられていました。勉強になります。
http://norisfactory.com/stylesheetlab/000038.php

2009年6月10日水曜日

PDF結合サービス「Merge PDF」

http://www.mergepdf.net/
PDFファイルをアップロードすると結合してくれるサイト。
PDFを結合したいけど、フリーソフトを入れるほどでもない、というときに便利。

2009年6月6日土曜日

float:leftで回り込ませたカラムの高さを揃えるCSS

http://coliss.com/articles/build-websites/operation/css/558.html
padding-bottom: 32768px;
margin-bottom: -32768px;

これだけ。
32768pxというのはieが認識できる限界のpxだそうです。

フローティングメニュー「jquery-scroll-follow」

仕事でフローティングメニュー(エレベーターメニューとも言うらしい)を作ることになっていくつかライブラリを調べたんですが、これが一番ニーズにマッチしており、かつ使いやすかったです。

http://code.google.com/p/jquery-scroll-follow/

名前を見れば分かる通り、jqueryで動きます。

2009年6月4日木曜日

Excelのお節介をなくす10の方法

http://bizmakoto.jp/bizid/articles/0704/18/news123.html
こういうウザい機能ってぜひ外したいんだけど、外すやり方を調べるのが面倒でそのままにしてしまいがちなので、これは非常にありがたい記事です。
さっそくこの通りにやってウザい機能を抹殺しました。
なお「起動時に作業ウィンドウが勝手に表示されるのを防ぐ」は自分の環境ではこのTipsの通りにできなかったので、「ツール→オプション→表示→操作開始作業ウィンドウのチェックを外す」で対応しました。
Word、PowerPointバージョンもあるのでそのうちやってみようかと思います。
http://bizmakoto.jp/bizid/articles/0704/19/news051.html
http://bizmakoto.jp/bizid/articles/0704/20/news050.html

2009年5月28日木曜日

CSSのみでプルダウンメニュー

http://c-brains.jp/blog/wsg/08/06/05-155929.php
このページのソースがシンプルでわかりやすかったです。
ただie6対策についてはこのページの方法(csshover.htc)は使わず、javascriptでdisplay:block/hiddenを切り替える関数を作っておいて、onmouseover/onmouseoutで切り替えるやり方で対応しました。

2009年5月26日火曜日

Flashでフ○ーミーを動かす

とりあえずFlashの基礎を学んだので、なんか作ってみたくなりました。
そこで目を付けたのがフ○ーミー。矩形だけで簡単に描けるのが理由です。
最初の目標はこれにしました。
・とりあえず歩かせる
・音も出す
・再生ボタンと一時停止ボタンをつける
で、できたのがこれ。

ソースはこちらframy.fla
カギになった部分は以下でした。
■再生・一時停止のトグルボタン(ボタンじゃなくムービークリップを使うところがポイント)
■ムービークリップの左右反転
http://wa.otesei.com/item/189
BGMはこちらを使わせていただきました。
http://www.youtube.com/watch?v=Gctft5LHPRc
自分の書いたActionScriptでフレーミーが動いてるのを見ると嬉しいですね。
とりあえず初心者を卒業して、初級レベルくらいまでは行きたいと思います。

2009年5月25日月曜日

ファイル(F)→保存して最適化(M)

flaファイルを編集していくうちに、どんどんサイズが大きくなっていることに気が付きました。
最初数百KBだったのがいつのまにか5MBに。
どうやらflaファイルには編集履歴がどんどん蓄積されていくため、サイズが大きくなっていくようです。
そこで「ファイル(F)→保存して最適化(M)」というのを試してみたところ、一気にサイズが小さくなりました。
このコマンドで過去の編集履歴がクリアされ、コンパクトになるということらしいです。
取り消しなどで過去の編集内容を戻せなくても大丈夫ならば、マメに最適化してサイズを小さくしておくのが良さそうです。

Flashの勉強

Flashも少しかじっておこうと思い、まずはウェブで参考になりそうなサイトを見つけて一読してみました。
Flash 8 入門講座
http://itpro.nikkeibp.co.jp/article/COLUMN/20060525/238975/
著者は吉岡梅さんという方。
自分みたいに、プログラマーがFlashを勉強するようなケースには最適だと思います。
逆にデザイナーがFlashを勉強するのにはちょっとハードルが高いように感じました。
ActionScriptの書籍も出されてるようなので、そのうち買って読んでみようかと思ってます。

2009年5月21日木曜日

JavaScriptを使わずにCSSだけでマウスオーバーを実現する

cssのa:hoverを使うことで簡単に実現できます。
参考
http://www.iam-strangeman.com/blogs/2006/07/css_mouseover_1.html
http://www.stylish-style.com/csstec/basic/l-rollover6.html
良いところは、ソースが短くなり可読性があがることと、読み込む画像数も減ること。
悪いところは、特に思いつきません。
今後マウスオーバーが必要なときはCSS方式を使おうと思います。

2009年5月18日月曜日

ie6でmax-heightとmax-widthと同等の動作を実現したい

「大きさがまちまちのサムネイルに対してmax-heightを指定し、レイアウトが崩れないようにしたい」
という要件があったんですが、max-heightやmax-widthはFireFoxやie7以降では使えるんですが、ie6では使えません。すごく困ります。
いちおう、それを回避できる外部JavaScriptがあります。
minmax.js
http://www.doxdesk.com/software/js/minmax.html
実際使ってみましたが、どうもdivに対して使う目的で作られたっぽく、今回のケースで画像に対して使ってみたところ、縦横比がおかしくなってしまうという問題がありました。
次に、cssのexpressionというのを試しました。
http://materia.useyan.jp/html/expression/

expressionというのは、
body { height: expression(body.scrollTop + 100 + 'px'); }
こんな感じでCSSの中でJavaScriptが動かせてしまうという機能。IE専用です。
関数なども動かせるので、こちらを参考にして実装してみました。
http://blog.enjoitech.jp/article/135
いちおうこれで要求は実現できたんですが、expressionにはこんな弱点があります。
http://www.inter-office.co.jp/contents/187/
というわけで、expressionを使うのは見送りました。
結局この件は、ie6の場合はoverflow:hiddenを使ってレイアウトの崩れを防ぐ、という"逃げ"の手法で対応することにしました。
時間をかければよりよい解決策も見つかったと思いますが、正直ie6のためにこれ以上時間を使うのもバカらしくなってきたのでここで手を打つことに。早くie6が死滅してくれれば、こういう苦労もなくなるんですけどね。。

2009年5月8日金曜日

タグの中にはやなどのブロック要素は入れられない


<p class="hoge">
<dl>
<dt>aiueo</dt>
<dd>kakikukeko</dd>
</dl>
</p>

こういうのHTML構造で、CSS側は
.hoge dt {
font-size:14px;
}

という具合にしたのですが、どうしてもdtにスタイルの指定が効きません。
firebugで見てみたら、

<p class="hoge"></p>
<dl>
<dt>aiueo</dt>
<dd>kakikukeko</dd>
</dl>

という具合で、<dl>以下が<p>の外に出ていました。
これはおかしいぞ、と思い調べてみたら「<p>~</p>の間にはインライン要素しか含めることができない」ということが分かりました。
http://www.tohoho-web.com/html/p.htm

http://www.tohoho-web.com/html/memo/elem.htm
<address> や <blockquote> のように、ブラウザ表示時に前後に改行がはいるものがブロック要素、<big> や <strong> のように、前後に改行がはいらないものがインライン要素と覚えておくと覚え易いでしょう。

とのこと。確かに覚えやすいです。

長いことhtmlを書いてますが、こういうルールがあったとは初めて知りました。

自分もまだまだですね。

2009年5月1日金曜日

preg_replaceでマッチした文字列を関数で操作して置換したい

preg_replace("pattern", strtolower('$1') ,$str);
こんな感じでマッチした文字列を小文字にして置換したかったんですが、いろいろ試してみたけど挫折しました。
http://q.hatena.ne.jp/1149983795
このページなどを参考にしてpreg_replaceについて勉強しながらやってみたんですけど、どうにもうまくいきませんでした。
preg_replace("pattern", testFunc('$1') ,$str);
function testFunc($str){
echo $str;exit;
}

試しに↑を書いて動かしてみたんですが、結果は「$1」になってしまいます。
変数の参照渡しとかスコープとかの問題もからんでるようです。
もうちょっと調べてもよかったんですけど、時間の余裕がなくなってきたのでまわりくどいやり方で逃げました。。

ファイル名を大文字から小文字に一括変換するWindowsアプリ

ググって探して見つかったフリーソフトを4つほど試してみましたがこれが一番でした。
Cashey

2009年4月16日木曜日

新幹線車内から無線LANインターネット

してます。N700系のぞみに乗ってます。
プロバイダはこれを使ってます。1DAYパスポート500円。
http://www.hotspot.ne.jp/
速度はちょっと遅め。でもメールチェックやネットサーフィンには差し支えない程度です。
それよりも、揺れのほうがきついです。最新型の車両とはいえ、けっこう小刻みに揺れます。こうして文章を書いているだけでもちょっと気分が悪くなってきますw
無線LANの利用は今回がはじめてでしたが、新幹線に乗り込んだ直後会社から携帯に連絡があり、急遽システムの対応を行いました。不幸中の幸いでした。

2009年4月10日金曜日

Oracleのnvl関数(NULLを別の値に置換する)

select nvl(column_name, 'ヌル山') from table_name
これでcolumn_nameがNULLの場合、文字列「ヌル山」が返ります。
MySQLのifnullなんかの代わりに使えます。
http://www.shift-the-oracle.com/sql/functions/nvl-coalesce.html
ちなみにnvlは「Null Value Logic」の略だそうです。

2009年4月9日木曜日

関数の中でdistinctを使う

select count(distinct column_name) from table_name
こういう使い方もできるんですね。

2009年4月8日水曜日

MySQLのreplace構文

replace構文というのを最近知りました。

http://dev.mysql.com/doc/refman/5.1/ja/replace.html

REPLACE は、もしテーブル内の古い行が PRIMARY KEY か UNIQUE インデックスの新しい行と同じ値を持っていれば、古い行は新しい行が挿入される前に削除されるという事以外、INSERT と全く同じように機能します。


ということです。
主キーかユニークキーがあるテーブルに対して、既存レコードがある場合はupdate、レコードがない場合はinsertしてくれるというもの。

特定テーブルに対してデータの更新をする際なんか、最高に便利なんじゃないでしょうか。

自分はこういう場合、まず最初に既存レコードがあろうがなかろうが全件insertして、その後もう一度全件update、という無駄なことをやってましたが、それがこのreplace文なら一発で済むというわけです。

まだ実戦で使ってはいませんが、かなり使えそうです。

ここにも詳しく書いてありました。

http://f32.aaa.livedoor.jp/~azusa/index.php?t=mysql&p=replace

追記
INSERT ... ON DUPLICATE KEY UPDATE; というのもあるようです。
http://dev.mysql.com/doc/refman/4.1/ja/insert.html

2009年4月3日金曜日

mysqlで文字列の末尾からスラッシュを取り除く

関数使って簡単にできないかな~と思って調べてみたら、こんな感じでできることが分かりました。
SELECT TRIM(TRAILING '/' FROM column_name) FROM table_name
trim関数はいろいろと使えそうなので覚えておこうと思います。
参考
http://d.hatena.ne.jp/hosikiti/20090312/1236825301

2009年4月1日水曜日

ie6でページ内リンクが効かない


<a href="#hoge1">hoge1</a>
<a href="#hoge2">hoge2</a>
<a href="#hoge3">hoge3</a>
...
<a name="hoge1"></a>
hoge1 hoge1 hoge1 hoge1 hoge1 hoge1 hoge1 hoge1 
hoge1 hoge1 hoge1 hoge1 hoge1 hoge1 hoge1 hoge1 
hoge1 hoge1 hoge1 hoge1 hoge1 hoge1 hoge1 hoge1 
hoge1 hoge1 hoge1 hoge1 hoge1 hoge1 hoge1 hoge1 
...
<a name="hoge2"></a>
hoge2 hoge2 hoge2 hoge2 hoge2 hoge2 hoge2 hoge2 
hoge2 hoge2 hoge2 hoge2 hoge2 hoge2 hoge2 hoge2 
hoge2 hoge2 hoge2 hoge2 hoge2 hoge2 hoge2 hoge2 
hoge2 hoge2 hoge2 hoge2 hoge2 hoge2 hoge2 hoge2 
...
<a name="hoge3"></a>
hoge3 hoge3 hoge3 hoge3 hoge3 hoge3 hoge3 hoge3 
hoge3 hoge3 hoge3 hoge3 hoge3 hoge3 hoge3 hoge3 
hoge3 hoge3 hoge3 hoge3 hoge3 hoge3 hoge3 hoge3 
hoge3 hoge3 hoge3 hoge3 hoge3 hoge3 hoge3 hoge3 


こういう感じのページ内リンクが、ie6でのみ効かないという状況に遭遇しました。

厳密にはhoge1だけが有効で、hoge2,3が効かない、という症状です。
ググってみたところ、やはりie6のバグみたいです。
とりあえず、aタグの中が空だとうまく動かないという記事があったので、それにならってaタグの中に要素を入れてみたところ、うまく動くようになりました。

2009年3月24日火曜日

ie6ではclearを指定した要素の上マージンは0にする

floatを使ったレイアウトが原因不明の崩れ方をしており、「IE6 float 崩れる」でググってみたらこちらのページがヒット。
http://www.geocities.jp/multi_column/float/07.html
試しに「margin-top:0;」をしてみたら、見事解決。
普段はcssの一番最初に
*{ margin:0;padding:0;}
を指定してから書き始めるんですが、今回は既にある程度できあがったページを修正する仕事だったのでハマってしまいました。
こういうのはひたすら経験を積むしかないですね。

2009年3月6日金曜日

特定ディレクトリ以下のファイルを検索するLinuxコマンド(findとgrep)

特定ディレクトリ以下で
拡張子が.phpの
ファイル内に文字列「array_unique」がある
という条件のファイルを探すLinuxコマンドです。
ファイル名と該当する行を表示
find ./ -type f -name \*.php -print | xargs grep array_unique /dev/null
ファイル名だけ
find ./ -type f -name \*.php -print | xargs grep -l array_unique /dev/null
php5.2.9からarray_uniqueの挙動が変わるということで、このコマンドで検索してみました。
http://d.hatena.ne.jp/t_komura/20090228#1235808770
参考にしたページ
http://ryusai.hp.infoseek.co.jp/linux_cmd_grep.htm
http://www.ksknet.net/linuxai/find.html
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1315866533

2009年3月4日水曜日

放送が受信できません E202

BSデジタルを見ようとしたらこんな表示が出ました。
ググってみたらこれがひっかかりました。
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1413667844
受信レベルが低いときに表示されるそうです。
今日は雪が降っているので、その影響かな。

2009年2月9日月曜日

htmlSQL

htmlSQLという超便利なライブラリがあるようです。
http://www.plusmb.jp/2009/01/30/2378.html
スクレイピングがものすごい手軽にできるようです。
これがあれば開発工数がぐっと減りそう。今度使ってみようと思います。

2009年2月7日土曜日

IE6ではhoverはaにしか対応していない

[CSS]IE6でよく遭遇する6つのバグとその解決方法
http://coliss.com/articles/build-websites/operation/css/1036.html
タイトルの通りです。IE6対応はいろいろと面倒なことが多いですね。

2009年1月30日金曜日

HTMLフォームでオートコンプリートを無効にする

<form name="form1" action="hoge.php" autocomplete="off">
これでフォーム全体でオートコンプリートが無効に。
<input type="text" name="field1" value="" autocomplete="off">
こんな感じでインプットフィールドごとでも無効にできるみたいです。

2009年1月29日木曜日

phpでの日付の計算。前月とか、翌週とか


echo "1日前" . date("Y/m/d",strtotime("-1 day"));
echo "1ヶ月前" . date("Y/m/d",strtotime("-1 month"));
echo "1年前" . date("Y/m/d",strtotime("-1 year"));
echo "1週間前" . date("Y/m/d",strtotime("-1 week"));

「-1 month」みたいに指定可能。
覚えておくと後々役に立ちそう。
http://www.ilovex.co.jp/Division/ITD/archives/2006/03/php.html

2009年1月28日水曜日

ファイル比較ソフトWinMerge

Windows用のファイル内容比較ソフトです。
http://www.geocities.co.jp/SiliconValley-SanJose/8165/winmerge.html
結果をテキストファイルにはき出すウェブアプリを作っていて、結果ファイルの比較をするのに使いました。違う行、箇所がハイライトされて分かるので非常に便利です。

2009年1月21日水曜日

複数回のselectを実行した結果をファイルに出力する

select col1,col2 ... col10 from table where col11 = 'hoge1' and col12 = 'hoge2' and col13 = 'hoge3';
select col1,col2 ... col10 from table where col11 = 'hoge4' and col12 = 'hoge5' and col13 = 'hoge6';
select col1,col2 ... col10 from table where col11 = 'hoge7' and col12 = 'hoge8' and col13 = 'hoge9';

こんな感じで、2000件超のselect文を実行してその結果をファイルに出力する、というのをやりました。
↓やり方
1.2000件超のselect文をファイルに保存します。名前はselect2000.txtとします。
2.select2000.txをサーバーにアップ。
3.アップしたディレクトリに移動して、以下を実行。
$ mysql DB_NAME --skip-column-names < select2000.txt > output2000.txt
これでoutput2000.txtにselectの実行結果がタブ区切りで保存されます。「--skip-column-names」を入れないと、1行ごとにカラム名が入ってしまいます。実行結果が2000行だとカラム名も2000行になるので合計4000行です。
他にもいくつかオプションがあります。必要に応じて使い分けると効率が上がると思います。
参考にさせてもらったページ
http://f32.aaa.livedoor.jp/~azusa/index.php?t=mysql&p=file

2009年1月15日木曜日

Windowsでもtailコマンドを使いたい

と思って検索したらありました。
http://tailforwin32.sourceforge.net/
あまり使う機会はないんですが、ログの確認に便利です。

2009年1月13日火曜日

mod_rewriteのデバッグ

書いているうちに何がなんだか分からなくなることが多いmod_rewrite。

そんなにしょっちゅう使うわけでもないし、いじってるうちに動くようになったりとかなりいい加減に使ってましたが、httpd.confをいじってログを吐くようにすれば、どんな風に自分の書いたルールが動作してるかが残るのでデバッグがやりやすくなります。

RewriteLog logs/rewrite.log
RewriteLogLevel 9


RewriteLogLevelは9が最高みたいです。
0にしておけばログが出力されなくなるので、デバッグが終わったら0に戻しておけばOK。