2008年12月18日木曜日

DVDROMドライブからブートするには

Let's note Y7ですが、買ってすぐにOSをXPにダウングレードしました。
初期導入OSはVistaです。XPにダウングレードする前にVistaのUIもちょっと見てみようかな~と思ったのですが、セットアップが面倒なのでやめました。
というわけで一度もVistaの起動画面を拝まずにXPのDVDROMでリカバリしようと思ったんですが、なぜかDVDROMからブートできない。困った。。
BIOSのブート順設定も問題ないのに、おかしいな~と思ってBIOS設定を見てみたら、「起動時にDVDROMドライブの電源をOFFにする(省エネモード)」がONになってて、これをOFFにしたら無事DVDROMからブートできました。たしかにDVDROMドライブって使う機会少ないので、普段はブート時に電源OFFのほうが効率的です。
ほかにも「FnとCtrlキーを入れ替える」とか設定できるようになってました。BIOSも微妙に変わってるんですね。

2008年12月17日水曜日

Letsnote Y7購入

3年半使ったLet's note Y4がスペック不足になってきたので、Let's note Y7を買いました。
1シーズン前の夏モデルが147000円(税込)という激安価格でゲット。追加のメモリ1GBもamazonで6000円(当然送料無料)で購入。かなりいい買い物が出来たと思います。


とりあえずの印象は、
・液晶が明るい
・XPの起動と終了が速い
・何もかもが速い
・CPUやHDDがカリカリ言わない
・逆にファンの音がちょっと気になる
・相変わらずタッチパッドが使いづらい
・キーボードが安っぽくなったような気がする
・SDカードスロットがすごく使いづらい位置にある
・LANケーブルの差込口が以前と変わっていて、ケーブル先端の留め具(?)みたいなのがないとケーブルが外れてしまってすごく困る
といったところ。
細かいところを挙げていくときりがないですが、やはり新しいPCはいいですね。快適です。

2008年12月12日金曜日

SQLで数値や日付の範囲指定(between句)

従業員番号100~200を抽出したい、というような場合、between句が使える

select * from EMPLOYEE where employee_id between 100 and 200;

100~200以外を抽出したい場合はnot between。

select * from EMPLOYEE where employee_id not between 100 and 200;

between句って昔勉強してこれまで一度も使う機会がなかったけど、意外と便利かも。
あと日付の範囲指定もOKのようです。普通に「>=」とか「<=」を使うよりbetween使ったほうが視認性が上がるのでいいですね。

2008年12月4日木曜日

javascriptでonClick属性をダイナミックに変更する

あるリンクを1回しかクリックされたくない、つまりダブルクリックを防止したいというケースがあったので、調べてみたところこんな感じで実装できるのがわかりました。
document.getElementById("button").onclick = new Function("alert('連打しちゃいや~ん');");
これで動作を確認し、実装時には「new Function("void(0);")」に直しました。

2008年12月2日火曜日

JavaScriptでページを移動する前に警告メッセージを出す

最近よくあるアレです。
何か処理をしてる途中でブラウザを閉じようとしたり、前に戻ろうとすると「今作業中ですよ。ページ移動したら消えちゃいますよ」と警告してくれるアレです。
テキストフィールドに入力してる時とか、Youtubeで動画をアップしてる途中とか。
そういうのをどうやって実現するのかを調べてみたのですが、どうやらJavaScriptの「onbeforeunload」というのを使うといいみたいです。
http://css-eblog.com/javascript/js-onbeforeunload.html
覚えておいて損はなさそうですね。

2008年11月19日水曜日

Oracleのdecode関数

Oracleのdecodeという関数があるのを知りました。
case whenと同じような処理ができます。
DECODE(num, 1, 'I', 10, 'X', 20, 'XX', 30, 'XL', 'UNDEFINED')

これは、caseにすると以下のようになります。

case num
when 1 then 'I'
when 10 then 'X'
when 20 then 'XX'
when 30 then 'XL'
else 'UNDEFINED'
end

かなり使えそうです。
http://www.shift-the-oracle.com/sql/functions/decode.html

2008年10月31日金曜日

like '%...%'の中で文字列%を使う

「そうさ100%勇気もうやりきるしかないさ」という文字列を探したい場合、
select * from TABLE where COLUMN like '%そうさ100%勇気もうやりきるしかないさ%';
これだとダメ。
select * from TABLE where COLUMN like '%そうさ100%%勇気もうやりきるしかないさ%';
こんな風に%を二つ並べればOK。
これもOracleでやりました。
他のRDBMSでは試してませんが、たぶん同じように動作すると思います。

Oracleで改行コードを扱う

CR は CHAR(13)
LF は CHAR(10)
CR+LF は CHAR(13)||CHAR(10)
update TABLE set COLUMN = replace(COLUMN, CHR(10), '')
↑は、該当カラムの改行をすべて取り除く、という処理になります。
http://www.shift-the-oracle.com/element/literal-string-number.html

2008年10月29日水曜日

JavaScriptでFlashプレイヤーのバージョン取得

「javascript flash バージョン」でググるといくつか出てきます。
ブラウザによってバージョンの判断方法が違うのでなかなか面倒みたいですね。
さらにFlashプレイヤーのバージョンが上がった場合、それに応じた対応もしなくちゃいけないみたいです。
http://phpspot.org/blog/archives/2006/10/flashhtmljavasc.html
http://feb19.jp/blog/archives/000154.php
http://www.mizunotomoaki.com/hack/get_flashplayer_version.html
http://groundwalker.com/blog/2007/08/flash_version_detection_with_javascript.html
http://scriptstesting.org/checkFlash/index.htm

2008年10月17日金曜日

見知らぬbot3つ

ひさしぶりにwebalizerを見てみたら、はじめてみるUserAgentのbotからのアクセスがけっこうありました。
1個目
Mozilla/5.0 (compatible; DotBot/1.1; http://www.dotnetdotcom.org/, crawler@dotnetdotcom.org)
ググってみてもこれといった情報はなし。とりあえず様子見。
2個目
Mozilla/5.0 (compatible; MJ12bot/v1.2.3; http://www.majestic12.co.uk/bot.php?+)
ググってみるとこちらのページがヒット。
http://iwatakenichi.blogspot.com/2008/01/majestic12-distributed-search-engine.html
ウイルスで拡大するニセモノがでまわってるとか。でもうちに来てるのはニセモノではないっぽいのでこれも様子見。
3個目
portalmmm/2.0 N500iS(c20;TB) (compatible; Mediapartners-Google/2.1; +http://www.google.com/bot.html)
ググってみたらこちらがヒット。
http://www.marguerite.jp/Nihongo/Labo/ForeignMobile/UserAgent.html
portalmmmというのは、海外のiモード端末のUserAgentだそうです。うちにきてるのはGoogleBotなので、海外のグーグルのiモードサイト用のクロールってことなんでしょうか?
これも様子見。
というわけで今回は3つとも様子見となりました。最近は目立ったスパムボットは来てないですね。

2008年10月7日火曜日

OracleのTO_CHAR関数で日時指定

TO_CHAR(日付データ, 日付書式)
で、任意の日時書式に変換できます。
こんな感じ。
TO_CHAR(sysdate, 'YYYY/mm/dd hh24:mi:ss'))
先日の作業中、hh24を使うべきところを間違えてhhを使ってしまいました。
おかげで9割方終わっていた作業を最初からやり直しする羽目に。。
気をつけましょう。
http://oracle.se-free.com/dml/07_todate.html

2008年10月2日木曜日

ブラウザをリサイズするブックマークレット

http://www.creativetechs.com/iq/resize_your_web_browser_with_bookmarklets.html
便利です。自分は1024x768と800x600をブックマークに入れてます。
ウィンドウをリサイズするWindowsのアプリは以前使ってたんですけど(Sizer.exeだったかな?)、いちいち起動するのが面倒なのであまり使わなくなってました。ブックマークレットだとそういうわずらわしさがなくて良いです。

2008年9月6日土曜日

シェル(bash)スクリプトを書くときのTips

http://labs.unoh.net/2008/09/bashtips.html
たま~にシェルスクリプトを書くことがあるので、そういうときに役立ちそうなTips。
$(...)の動きとか、ちょっとトリッキーなのでこうやってまとめてあると参考になります。

2008年8月29日金曜日

エクセルの書式で日付から曜日を表示

書式のユーザー定義で「aaa」と入れるだけ。
例)「m"月"d"日("aaa")"」→「8月29日(金)」
「aaa」と指定すれば「木」
「aaaa」と指定すれば「木曜日」
しかしなぜ「aaa」「aaaa」なのか。技術者がやっつけで作ったのかな。。
http://www.relief.jp/itnote/archives/000017.php

2008年8月26日火曜日

[SQL]ifnullとnullif

nullif関数は主要なRDBMSでサポートされていますが、ifnullはMySQL独自のもののようです。名前が似ていて間違いやすいので要注意。
MySQL ifnull,nullif
http://dev.mysql.com/doc/refman/4.1/ja/control-flow-functions.html
Oracle nullif
http://oracle.se-free.com/dml/04_nullif.html

2008年8月5日火曜日

JavaScript製プルダウンメニューとFlashの共存

JavaScriptでプルダウンメニューを作っていたんですが、プルダウンメニューを開いたとき、下にFlashがある場合、プルダウンメニューを突き破って表示されてしまいます。cssのz-indexなどを使ってもダメです。
調べてみるとほかの人もみんな同じ問題で困っており、メニューの位置やFlashの位置をかえてかぶらないようにしたり、メニューをを開いてるときだけFlashをjpgに差し替えるとか、かなりの力技を使って回避してるようでした。
力技はあまり使いたくなかったのでもう少し調べてみたところ、以下の情報を発見。
http://www.koikikukan.com/archives/2006/03/17-021717.php
http://bluelucky777.blog120.fc2.com/blog-entry-8.html
こんな感じのタグで回避できました。
<object ...>
<param name=movie value="...">
<param name=loop value=true>
<param name=quality value=high>
<param name=wmode value=transparent>
<embed src="..." wmode="transparent" ...>
</embed>
</object>
最近思うんですが、AjaxやFlash、CSSの普及によって覚えなきゃいけないこと、いろいろな決まりごとがぐっと増えたように思います。
ウェブ制作もなかなか大変です。

2008年7月2日水曜日

JavaScriptでフォームのフリガナを自動入力させる

http://ceo.sourcelab.jp/archives/97
すごい。ホントにふりがなが自動で入力される。
しかも外部JSを読み込む方式だからHTMLも汚さず実装できるし、かなり使えそう。

2008年6月14日土曜日

2008年5月12日月曜日

max,min関数でグループの最大値、最小値を求める

こんなテーブルがあって、この中からAの最大値とBの最大値を求めたい場合。

+-----+-------+-------+
| id | grp | score |
+-----+-------+-------+
| 1 | A | 90 |
+-----+-------+-------+
| 2 | B | 80 |
+-----+-------+-------+
| 3 | A | 70 |
+-----+-------+-------+
| 4 | B | 85 |
+-----+-------+-------+
| 5 | A | 95 |
+-----+-------+-------+
| 6 | B | 75 |
+-----+-------+-------+

select max(score), group from table group by grp;
こんな感じで最大値が求められます。
最小値が必要な時はminが使えます。

2008年4月22日火曜日

IEでmethod getで扱える文字列長は2083文字

http://support.microsoft.com/kb/208427/ja
だそうです。
ウェブアプリを作っていて、原因不明のエラーが発生したのでGETの値を見たら途中でとぎれてました。そういえばGETは文字列長に制限があったっけ、と思って調べたら、やっぱりそういう仕様でした。
ちなみにこれはIEのみの仕様なので、FireFox等ではエラーになりません。
面倒だけど、postにするしかないかか。

2008年4月17日木曜日

3キャリア対応ケータイXHTML

3キャリア対応ケータイXHTMLのTIPS 8つ
最近の機種はCSSにも対応してるんですね。このエントリは実用的な情報がまとめられてて参考になります。

2008年4月8日火曜日

なぜ、「購入 VS 賃貸」 という比較がナンセンスなのか?というエントリにつ いて

なぜ、「購入 VS 賃貸」 という比較がナンセンスなのか?
タイトルに釣られて読んでしまいました。
話が論理的に展開されて、読んでいて気持ちがいいです。
そして最後に
新築価格が 4000万円のマンションを 35年ローンで買ってもいいのは、
ローン完済時に 5214万円以上で売却することが期待できる場合に限られる。

と、具体的な数字でトドメをさされる。
「おお~、そ、そうだったのか!」と、目からウロコ状態。。。
なんですが、我に返って冷静に考えてみるといろいろ疑問がわいてきます。
まず最初に「35年後のマンション価格なんて分かるわけないだろ」という点。35年後というと2043年です。そのとき自分は65歳ですが、どんな時代になっているのか想像もつかないです。
それに人間には感情ってもんがあるので、不動産を完全に投資対象として見るのはなかなか難しいと思われます。誰だって「広い家に住みたい」とか「オープンキッチンがいい」とか、普通の人は不動産を感情的になって見るわけで、数字として見るのは厳しいと思います。
あと日本人は農耕民族だから、土地への執着が強いです。これは2000年かけてDNAにすり込まれているので、土地至上主義はこの先もずっとなくならないと思います。
そんなことを含めて考えると、やっぱり「ケース・バイ・ケースあるいは価値観の問題」という結論に行き着くんじゃないでしょうか。
でもだからといってこのエントリが役に立たないと言っているわけではなく、不動産の購入にはそれだけのリスクが伴うものだ、ということを教えてくれている点では非常に有効だと思います。
・・・普段は不動産のことなんてほとんど気にもとめないんですけどね。それだけこの記事がおもしろいんだと思います。

2008年3月18日火曜日

MySQLで小数点を扱う

小数点といえばfloatかdoubleというイメージがあったんですが、MySQLのマニュアルによると

DECIMAL 型は、SQL-92 標準で使用可能なデータ型と同じデータ型として実装されます。これらのデータ型は、金額データに関する値など、正確な精度で保存することが重要となる値に対して使用されます。


とありました。
ちょうどお金関係の小数点を扱っていたので、急いでfloatからdecimalに変更することにしました。
ちなみに以下のような感じで桁数を指定できます。

decimal(6,2)

上のケースだと「1234.56」みたいな、全体で6桁、小数点以下が2桁という指定になります。

2008年3月13日木曜日

phpでスクレイピイング

スクレイピングとは、HTMLから必要なデータを抜き出す処理のことを言うそうです。
この単語事態を知らなかったんですが、ググるといっぱいでてきます。
使えそうなライブラリがいっぱいあるので、今後ウェブの部分的なデータが必要になったら使ってみようと思います
http://dxd8.com/archives/85/

LogWatchのメールがすごいことに・・・

自宅でたてているサーバーから「LogWatch for localhost.localdomain」というメールが毎日届きます。サーバーへのアクセスを毎日まとめて送ってくれるものなんですが、このメールの容量が、なんと5万7千行、3MBになってました。。。

内容を見てみると、SSHDへの攻撃が99%を占めていました。発信元IPは韓国。

rootとかpgsql、adam、andrew、michaelなど、存在しそうなアカウント名で手当たり次第アタックをかけられてました。

うちはiptablesでアクセス制限してるので攻撃はすべてはじくんですが、SSHDへのアタックにはhosts.denyを使うのが有効らしいので、さっそく導入。

まずhosts.allowで許可するIPを指定
sshd: 192.168.1. : allow
sshd: 123.456.789.012 : allow


そしてhosts.denyで全部拒否
sshd: ALL

そして翌日、LogWatchからのメールは6KBになりました。。

参考
http://fg-180.katamayu.net/archives/2005/11/05/104105

RSSフィードが簡単に吐き出せる「FeedWriter.php」

http://phpspot.org/blog/archives/2008/03/phpatomrss12fee.html
これはいい。今までsmartyでテンプレ作ってRSS吐いてましたが、今度からこれ使います。

2008年3月10日月曜日

ntpdの設定(サーバー時刻を自動で同期)

自宅サーバーの時刻が1分ほど遅れていた。
調べてみると、ntpdの設定をするのを忘れていた。
というわけで、早速設定。このページを参考にしました。
http://memorva.jp/memo/linux/date_ntp.php

vi /etc/ntp.conf
------------------------------------------------------------------------------------------------
server 130.69.251.23 # ntp.nc.u-tokyo.ac.jp
server 133.31.180.6 # ntp.sut.ac.jp (tusntp.tus.ac.jp)
server 130.34.11.117 # ntp1.tohoku.ac.jp (zao.net.tohoku.ac.jp)
server 130.34.48.32 # ntp2.tohoku.ac.jp (izumi.gw.tohoku.ac.jp)
------------------------------------------------------------------------------------------------

2008年3月4日火曜日

2008年3月3日月曜日

サーバーのUSBメモリを自動マウントにする

うちの自宅サーバーにはUSBメモリが2本刺さっていて、バックアップ用に使ってます。OSはCentOS4です。

サーバーなので滅多に再起動しないんですが、最近カーネルパニックで落ちたりしており、その都度USBメモリをマウントするのが面倒に感じていました。
そんなわけで自動マウントにすることにしました。

さっそく/etc/fstabをのぞいてみると、すでに記述がありました。


/dev/sdc1 /media/usbdisk ext2 pamconsole,noatime,sync,exec,noauto,managed 0 0
/dev/sdb1 /media/usbdisk1 vfat pamconsole,noatime,sync,exec,noauto,managed 0 0


最近のディストリビューションだと、USBメモリを刺した時点で既にfstabにこれらの記述をしてくれるみたいです。便利だ。

調べてみたところ、noautoが自動マウント拒否の指定のようなので、ここを削除して再起動。すると無事マウントされてました。これでよし、と。

2008年2月29日金曜日

phpで、要素の文字列長で配列をソートする

usortという関数を使って実現できました。
ユーザー定義の比較関数を使って配列をソートできます。
http://phpspot.net/php/man/php/function.usort.html

$sample = array("aaaaa","bbb","c","dd","eeee");
usort($sample, "cmp");//文字列長でソート
function cmp($a, $b)
{
if(strlen($a) == strlen($b)) {
return 0;
}
return (strlen($a) < strlen($b)) ? -1 : 1;
}

こんな感じ。
phpマニュアルのサンプルをちょっといじるだけだったので、なかなか簡単でした。

2008年2月21日木曜日

2008年2月20日水曜日

ウェブサイトデザインの相場

相場はだいたいこんなもんでしょうか。
表が見やすくていいですね。デザイン案件の打ち合わせをするときに使えそう。
http://web-tan.forum.impressrd.jp/e/2008/02/20/2456

カーネルパニック発生。自動リブート設定をする

自宅サーバーがカーネルパニックで止まっていた。原因は不明。
/var/log/messageを見ても、特にてがかりになるようなものはなし。
帰宅して手動でサーバーを再起動。その後カーネルパニックについてちょっと調べてみたら、/etc/sysctl.confを編集しておけばカーネルパニック時に自動でリブートしてくれる設定にできることを知りました。
http://builder.japan.zdnet.com/news/story/0,3800079086,20365637,00.htm
さっそく「kernel.panic = 20」を設定しました。
これでいつカーネルパニックが起こっても怖くありません。ていうかそんな頻繁に発生されても困りますけど。

2008年2月18日月曜日

ページがいつグーグルにインデックスされたかを知るには「&as_qdr=y19」を使 う

googleの検索オプションには「次の期間内に初めてクロールされたウェブページ: 」という項目があります。
この項目はデフォルトでは最大「1年以内」までとなっているが、これを19年にすることでページがインデックスされた日付を知ることができ、すごく便利です。
使い方はgoogleの検索結果URLのおしりに「 &as_qdr=y19 」を付け加えてやるだけ。以下のサイトにはフォームも用意されています。
http://e-club3.hyperposition.com/seoblog/google/tools/20080214165317.html
&as_qdr=y19

2008年2月13日水曜日

Pear::File_Archiveの使い方いろいろ

複数のファイルをまとめてひとつのzipにするやり方を探していたらこちらのサイトにたどりつきました。
詳しく書かれていてわかりやすかったです。
http://d.hatena.ne.jp/litt/20070905/p1
単純に圧縮するだけのシンプルな使い方はこちら
http://kawama.jp/archives/2007/09/file_archive.html

2008年2月5日火曜日

phpのheader関数で301リダイレクト


header("HTTP/1.1 301 Moved Permanently");
header("Location: http://example.com/");

これだけ。非常にお手軽です。
ちゃんと301になってるかはこちらで確認できます。
http://web-sniffer.net/

2008年1月29日火曜日

128.241.20.xxからのアクセス

アクセス解析を眺めていたら、
「128.241.20.xx」
というIPからまとまったアクセスがあったので、気になって調べてみました。
http://qp3c.com/str/archives/2006/12/16-2351.php
ウイルスバスターの機能なんだそうです。
ユーザーが危険なサイトにアクセスしないよう、チェックする役割があるみたいですが、いろいろと弊害もあるようです。

2008年1月24日木曜日

phpで携帯のUserAgent判別

携帯からのアクセスがあった場合、ユーザーエージェントによってリダイレクト先を分ける。
という機能を追加したんですが、こちらのサイトが参考になりました。よくまとめられていて見やすいです。
http://memorva.jp/memo/mobile/http_user_agent.php

2008年1月17日木曜日

RBL(ブラックリスト)について

RBLというツール(サービス)がある。
うちの会社ではこのサービスを利用してスパム判定をしているらしいが、たまにスパムじゃないメールもスパム判定されてしまうことがあります。少し調べてみたら、こんな記事を見つけました。
http://neta.ywcafe.net/000678.html
やはり人間が運用している以上、いろいろ問題があるようですね。
最近、もうメールは確実な連絡手段じゃなくなってきてるように思います。メールに変わって新たな連絡手段が出てくるんじゃないかって気がしてます。

ネットワークはなぜつながるのか

はじめてインターネットに触れてから早8年。
ウェブ、メールに始まってPerlでのCGIプログラム作成、phpでのウェブアプリ作成、自宅サーバーの管理など、これまでさまざまな経験を積んできました。が、ネットワークに関してのみはほとんど勉強する機会がなく、素人同然の知識でした。
概要は理解しているけど詳細は理解していない、そんな状態でこの本を読んだので「なるほど、あの時のアレってそういうことだったのか!」といった発見が多く、楽しみながらスムーズに最後まで読めました。
本書を読んでも何か具体的なテクニックが身につくわけでもなく、すぐに役立つような知識を得られるわけでもありません。しかしネットワークに限らず、基本をしっかり抑えておくのは本当に大事なことです。
本書の知識は自分の中で血、肉となって、(決して目立つことはないけれど)末永く役立ってくれると思います。
ネットワークはなぜつながるのか 第2版 知っておきたいTCP/IP、LAN、光ファイバの基礎知識


価格: 2,520円

戸根 勤
日経BP社

2008年1月8日火曜日

PHPで文中のキーワードを自動的にリンクする

こういう感じで実現できるそうです。
http://labs.unoh.net/2008/01/keyword-autolink-using-php-and-mecab.html
意外とカンタンですね。いろんな場面で使えそうなので覚えておこうと思います。