Windows
2011年12月10日
MySQLに外部から接続
UbuntuのMySQLにWindowsから接続しようとして、ちょっとはまったのでメモ。
- WindowsにODBCをインストールします。
ドライバは以下からダウンロード。
http://dev.mysql.com/downloads/connector/odbc/5.1.html - インストールと設定
普通にインストールして、コンパネ → 管理ツール → データソース(ODBC) → システムDSNタブ → 追加 → MySQL ODBC x.x Driver - MySQLを外部から接続可能に
/etc/mysql/my.cnf を編集
bind-address = 127.0.0.1はまったのは(3)で、完全に失念していました。
↓
#bind-address = 127.0.0.1 (コメントアウト)
不要な時間を費やしてしまった…。
--
そろそろ新型がでるかな?
2011年09月27日
MySQLにおけるnullの取り扱い
前提:
担当者名を入れるフィールド「charge」があり、担当者名が入っているかnullかのどちらかです。
またアクセス者名を入れる変数$userがあり、これは必ずアクセス者名が入っています。
ここで、「自分が担当者でない」データを検索するとき
〜 and charge != '$user' and 〜
としたところ、chargeがnullのデータは一切ヒットしなくなりました。
Google先生によると出てきた解は、MySQLの比較は比較物がnullの時は必ず「偽」を返す、というものでした。(これも嘘というか私の解釈違いな訳ですが)
そこで次のように変更してみます。
〜 and not(charge = '$user') and 〜
偽のnotなのでこれでうまくいくと思いましたが、結果は先ほどと全く同じ。どうもnullの扱いがよくわかりません。
さらに調べていくと…、ありました。「nullセーフ」というんだそうです。
MySQLの比較演算子「=」はnullセーフではないとのこと。「=」に相当するnullセーフな比較演算子は「<=>」なんだそうです。
つまり私の期待した答えを得られる式は
〜 and not(charge <=> '$user') and 〜
ということです。
正確な仕様は、
- MySQLの真偽は「真=1」「偽=0」と考えるとわかりやすい。
- 通常の(nullセーフでない)比較演算子は、比較対象がnullの時必ず「null」を返す。(nullは「0」(つまり偽)ではない。)
- nullセーフな比較演算子「<=>」で期待する結果が得られる。
ということの様です。(参考資料:MySQL 6.3.1.2. 比較演算子)
まとめてみると
chargeの中身 | 期待値 | charge != '$user' not(charge = '$user') | not(charge <=> '$user') |
アクセス者名 | 偽 | 偽 | 偽 |
他のユーザ名 | 真 | 真 | 真 |
null | 真 | 偽 | 真 |
こんな感じでしょうか。
ここでいう「nullセーフな比較」という概念そのものを知らなかった(全ての比較演算子がnullセーフだと思っていた)ため、ここを疑うまでに結構かかりました。
思い込みって怖いですね。
静かで安くてコストパフォーマンス最高。
Linuxサーバに最適。
2011年09月22日
PHPでのMIMEエンコード、デコードで文字化け
phpからメールを送る際に、ちょっとはまったので覚え書きを。
元々の思い込みとしては、
- メールヘッダの文字コードはJIS(ISO-2022-JP)に変換
Subject以外のヘッダの日本語部分は全てMIMEエンコードする
をきちんとやれば文字化けはしないはず、ということ。
…のつもりが何故か文字化けします。
構文は、例えば
$headers = "From: ".mb_encode_mimeheader(mb_convert_encoding("氏名", 'ISO-2022-JP', 'EUC-JP'))." <メールアドレス>\n";
な感じ。
(ちなみに訳あってコードはEUC-JPで書いてます)
ところがこれで化けます。
結論としては、
mb_language('japanease');
mb_internal_encoding('EUC-JP');
$headers = "From: ".mb_encode_mimeheader("氏名")." <メールアドレス>\n";
でいい様です。
mb_encode_mimeheader()、mb_decode_mimeheader()共に受け渡しの文字コードは指定できないわけですが、これがいわゆる「内部エンコーディング指定」で行なわれている様なんです。
つまり、内部エンコーディングに指定した文字コードで受け渡しをすれば適切に処理してくれる、ということ。
こういうブラックボックスな仕様はやめてほしいものです。
文字化けに関する基本的な考え方としては以下がとても参考になります。
PHPの文字化けを本気で解決するhttp://hain.jp/index.php/tech-j/2007/02/13/p125
何よりも問題の本質は、日本語文字コードが乱立していることなんでしょうけどね…。
なににせよ、日本語処理には悩まされることが多いですね。
--
これがないと始まりません。
かなり痛んできたので、そろそろ買い直そうかと。
2010年02月14日
Intel D510MO で AHCI (XP)
D945GCLF2上のUbuntuでNICを正しく動作させる件が途中ですが、ちょっと別のお話。
先日D510MOに交換したWindows(XP)機のHDDをAHCIで動くようにしたので、そのメモです。
本来であればWindowsのインストール時か、または修復インストールにてAHCIドライバを組み込む必要がありますが、せっかく作った環境を潰したくないので強制的にAHCIを適用していきます。
BIOSにてHDDの動作モードをAHCIにして起動するとブルーバックで落ちてしまいます。これはシステムにAHCIのドライバが適用されていないためです。
しかし通常起動してドライバを適用しようとしても、BIOSでAHCIが有効になっていないとハードウエアとして認識されませんので、OSに弾かれてしまいます。
そこでイレギュラーな手順で強制的に適用していきます。
- AHCIドライバをダウンロードしてくる
D510MOの付属CDには何故かXP用のAHCHドライバが入っていません。仕方ないのでIntelのサイトからダウンロードしてきます。
ドライバはICH7R/DH用を準備します。
- 手動でドライバを適用
適当なフォルダにAHCIドライバを準備したら、デバイスマネージャからSerial ATA Strage Controllerを選択し、ドライバの更新を行ないます。
詳細インストール → 検索しない → ディスク使用、と辿り、先ほど準備したフォルダから iaAHCI.inf を選択します。
いくつか候補が出てきますが、ICH7R/DH を選択し、適用します。
- BIOS設定と再起動
再起動し、BIOSでAHCIモードに切替えます。
その後通常起動すれば、AHCIモードで稼働します。初回は新しいハードウエアの検出が行なわれ、再起動を促されますので、ここは素直に再起動しておきましょう。
割と簡単に IDE → AHCI の切り替えが出来ました。
パフォーマンスに顕著な違いが出るわけではありませんが、この機体の仕事はHDDアクセスが命ですので気休めでもあります。
現在も問題なく稼働しています。レジストリを弄るわけでもありませんし手間も時間もかかりません。
保証はしませんが、修復インストールよりトラブルは少ないんじゃないでしょうかね。
2010年01月31日
Intel D510MO
稼働サーバのうち2台にD945GCLF2を使用しています。
それぞれLinux(Ubuntu-server)とWindowsXPで稼働させていますが、能力的には充分満足しています。
しかし唯一の問題が「騒音」です。
チップセット冷却ファンが4cmファンで結構五月蠅いわ、すぐ壊れるわで、少々頭を痛めていました。
そこで登場したIntelの新AtomボードD510MO。
グラフィックがCPUに統合されたとか色々あるそうですが、大事なのはファンレスになったことと消費電力の低下が見込めることの2点です。
普通なら指を咥えてみているだけの所ですが、今回はちょっとした次第で乗り換えることにしました。乗り換えはWindowsの方で行ないました。
乗り換え方法は単に「マザー交換」のみです。
マザーを交換して起動すると次々「新しいハードウエア」が検出され、ドライバのインストールを促してきます。しかしこの段階ではマウスもキーボードも効かないのでどうにも出来ません。
仕方ないので再起動しようとするのですが、キーボードは効かない上にサーバ用途のため電源ボタンを無反応に設定していたままだったため、仕方なくHDDが落ち着くのを待って、リセットボタンの使用となりました。
5回くらい再起動を繰り返したところでキーボードが使えるようになり、その後はスムースに移行作業は進みました。
載せ替えにあたり問題点が一つ。
HDDアクセスランプが点灯したままになるというトラブルに見舞われました。
LED以外の結線を全て外し、一つづつ結線しながら確認したところ、ケースUSB端子の接続を、「Front Panel USB with Flash Drive Support」に接続するとこの症状になることがわかりました。
ケースのUSB端子なんて延長コードくらいにしか思ってなかったので、ちょっと意外でした。
さて、載せ替えの成果です。
- 騒音
さすがファンレスです。無音です。(当たり前 ^^)
- 消費電力
350WのUPSを使用しているのですが、この負荷が11%程だったのが6%程まで下がりました。
40W近かった消費電力が20W近くまで下がったと見ていいのだと思います。
- 温度
交換前のCPU温度は50℃近くありました。
交換後のCPU温度はHWMonitorで25℃程度と表示されています。さすがに低すぎる数値であり正確な表示ではないと思いますが、ケースファンから吐き出される風は以前と比べ明らかに冷たくなっています。
(なぜかキャプチャがうまくいかないので画像はありません)
ほぼパーフェクトです。
Linux側も載せ替えたいですね。
2009年10月30日
2009年10月27日
Q9550へ換装
ここへの記録は遅くなりましたが、先日発注したQ9550、なんと翌日の午前中に届きました。
ショップも素晴らしいですが、運送屋の方に感心してしまいました。この辺はさすがヤマトですね。
さて、早速換装です。
まずは蓋を開けます。
先日メモリ増設を行ないましたが、基本的にいじくることが少ないのが母艦です。もともとパワー重視で組んでますからね。
しかもメモリスロットは蓋を外すだけでアクセス可能だったため、増設時には他のことに全く手を付けませんでした。
しかし今回はCPUの換装ですからそうはいきません。
蓋を外すと先ず目に付くのがホコリです。これはスプレーのダストブロワーと掃除機で処理します。
次はドライブ類を外します。
ケーブルか何かが邪魔をしてちゃんと外れません。
なんせ2年ほど前に組み立てたきりほとんどいじってませんでしたからね。
FDDのケーブルです。
結構微妙な位置にあり、このままでは取り外せません。
しかたないのでグラフィックボードを取り外し、向こう側から作業することにします。
で、グラボを取り外しホコリを取っていると、なんとびっくり。
保護シートが付いたままでした。
ダストブロワーを使っているとかすかに浮いたため気づきましたが…。
熱対策の点からもこれは良くありませんね。
ここでまできて、やっとCPUへアクセスできます。
ヒートシンクにもホコリが結構付いてました。
ここまで来れば後は交換するだけです。
グリス塗りには細心の注意を払い、換装後組み立てました。
--------------------------------------------------------------------
COMSクリアを行なったあと最低限のBIOS設定をし、起動します。
無事起動した後、CPUが新しいハードウエアで検出されました。特に促されませんでしたがここで一度再起動します。
再起動後、タスクマネージャを開くと、
ちゃんと4CPUで認識されています。
当たり前と言えばそれまでですが、ちょっと感動です。
今回換装したQ9550の定格クロック(?)は2.83GHz。対してこれまで使用していたE6850は3.0GHzです。今後使用していくにあたっては、せめて同程度まで上げておきたいところ。
ということで、次の課題はオーバークロックですね。^^
2009年10月25日
Q9550発注!
前から欲しいとは思ってたんです。
でも現行使用が Core2 Duo の E6850 なので、劇的な変化は期待できず完全に趣味の世界。というか、ただ欲しいだけ。
つい先日友人が Core i7 で組むに際してアドバイスを頼まれ、パーツ類の買い出しから組み立て、OSインストールまで側で口(と一部手)を出したのがきっかけで、母艦グレードアップ欲がにわかに上昇してました。
で、何気にネットを見ていると、Q9550の省電力版(?)、Q9550sというのが出てたらしく、Q9550が結構安くなってました。
消費電力ももちろんですが、それよりも気にしているのが静音性。Q9550かQ9550sかかなり迷いました。価格差は約1.5倍。かなり悩みどころです。
Q9550のTDPは95W。E685は65Wですが、製造の時期や集積率を考えると、おそらくQ9550の方が省電力低発熱にちがいない、と自分に言い聞かせ、数日考えた末に結局Q9550をポチりました。
在庫潤沢の様ですから早ければ明日にも届きそうな感じ。
楽しみです。
2009年10月14日
XPでメモリ3GB越え
母艦のWindowsはメインメモリ2GBで運用していますが、結構スワップが発生しています。
まあメールソフトやらIMやら、タスクバーの右側には10個で効かないアイコンが常に並んでいるような状況ですから、当然といえば当然です。
とはいうものの、どうしようもないほど困っている、という程でもないこと、またデュアルチャンネルで使用しようとすると4GBへ増設することになりますが、XPでは全てを有効に利用できるわけではないこと、等によりこれまで見送っていました。
しかし最近、全メモリを有効利用できそうな情報を見つけたため、チャレンジしたくなり4GBの増設に踏み切りました。
購入したのは、これ。
これまでの2GBに新規4GBを足し、デュアルチャンネル4枚差しで計6GBになりました。
早速起動してみたところ、BIOSではちゃんと認識してくれますがXPでは案の定3GB程しか認識してくれません。
この認識していない領域をRamDiskにして、なおかつそこにページファイルを置こうというのが今回の主旨です。
参考にしたのはこちら。
使用するソフトは「Gavotte Ramdisk」。
導入は至って簡単です。
なるべく新しいバージョンを落としてきて、インストールしたいフォルダに解凍します。
私の場合は C:\Tools\Gavotte_RAMDisk にしました。 解凍した中にあるレジストリ登録ファイルをダブルクリックします。(ちょっと怖いですが。) ramdisk.exe をダブルクリックすると設定が起動します。RAMドライブのドライブレターのみ希望のものに設定し、インストールをクリックします。
私は Z:\ にしました。 再起動します。
ドライブを確認してみると、約3GB確保できています。
OSで管理できない領域もきちんと利用できているようです。
ここで既に1GB消費されているのはページファイルを設定してあるからです。
Windowsはページファイルという形でHDD上のファイルをメインメモリと同様に使用します(実際にはページファイル領域を率先して使用するという話も聞きますが、よく知りません)。
つまりページファイルをRAMドライブ上に置けば、事実上メインメモリが増えたのと同じパフォーマンスが得られるはずです。
…と思ってしばらく使っていたのですが、ちょっと違う様子。
調べてみると、メモリの認識とは別に、アプリケーション使用領域に制限があり、これが2GBということらしいのです。
で、キーワードは「3GBスイッチ」。
コントロールパネル → システム → 詳細設定 → 起動と回復 → 編集
と辿り、boot.iniを編集します。
[operating systems] 欄の最後に /3GB /Userva=2900 を付け足す。
Userva無し(=3000(?))にするとグラフィックボードがうまく動いてくれませんでした。
上記設定で今のところ快適に動いてます。
ということで、とにかくメモリを消費してみたいと思い、Photoshopで重いデータを開けるだけ開いてみました。さらに動画編集ソフト等を何重にも開いていくと…
まあとにかく、2GBを超えたメモリをアプリケーションが使用できている様子です。
RAMドライブの残りの2GBは今のところテンポラリとして使用しています。こちらは環境変数の変更で簡単に実現できます。2GBは多い気もしますが、まあそのうち考えるということで。
2009年02月07日
WindowsでRAMディスク(ERAM)
Windowsのファイアウォールソフトは、基本的に「Tiny Personal FireWall」を使っていますが、モバイル用途のEeePC2台には「Norton Internet Security 2009」を入れています。
このEeePCのうち901のNortonでLiveUpdateがうまくいかなくなってしまいました。
この901はSSD容量の関係で、ProgramFilesフォルダにパーティションをマウントしたりしているせいか、時々変な挙動をします。
他にも謎な挙動があったこともあり、今回は仕方ないのでOSから再インストールすることにしました。
で、SSDへのインストールとなるため、精神衛生上RAMディスクにテンポラリを持つようにしています。
このRAMディスクを作ってくれるソフトが「ERAM」なんですが、設定の際に少々手間取ったので、使用方法の記録です。
BOOT.INIの編集
(256MBを超える容量をとるときはOS管理のメモリを制限する必要があります。)
- 「Winキー+R」から「msconfig」
- 「BOOT.INI」タブ下部の「詳細オプション」
- 「/MAXMEM(M)=」にチェックを入れて、「1536」を設定
(今回はRAMディスクに512MB充てますので、メインメモリは1.5GBにします) - 再起動
インストール
- コントロールパネル > ハードウェアの追加 > 次へ > はい、ハードウェアを接続しています > 新しいハードウェアデバイスの追加 > 一覧から選択したハードウェアをインストールする > すべてのデバイスを表示 > ディスクの使用
- 展開したERAMフォルダの 2000/ フォルダを指定
- 再起動
設定
- 「ドライブ文字」を選択(デフォルトは [Z])
- 「ディスクサイズ」を指定(今回は [512000] 。KB指定)
- 「メモリ確保元」で 「OS管理外領域」 を選択
- 「OS管理外領域」で 「メモリ上限を検出」 にチェック
- 「TEMPディレクトリ作成」 にチェック
※「実デバイス扱い」にチェックを入れると「ハードディスク」として認識されます。ただしページファイルは設定できない様子。
※「実デバイス扱い」にチェックを入れると「スタンバイ」に入ることができませんが、「OSへ通知」のチェックを外すことで回避出来ます。
以上で設定終了です。
あとは各TEMPをZドライブに移します。
移行するテンポラリは
- ユーザのTEMP
- システムのTEMP
- IEのキャッシュ
くらいだと思います。
RAMディスクの容量によっては、ファイルのダウンロード等が制限されますので注意してください。