VirtualBoxの共有ディレクトリ内のファイルを更新してもApacheで表示が更新されない問題

VirtualBox.jpg

作業環境

ホスト

  • OS … Windows 7 64bit
  • 開発環境 … Eclipse 3.7.2

ゲスト

  • OS … CentOS 6.0
  • Httpd … Apache 2.2.15

起きた問題

ちょっと解りにくいので作業順に従って箇条書きで書くとこんな感じ。
  1. Eclipseのワークスペースを共有フォルダとしてVirtualBoxに登録
  2. 共有フォルダをマウントしてドキュメントルートにシンボリックリンクを貼る
  3. Eclipseでファイルを更新
  4. ゲストOS上でファイルの内容が更新されていることを確認
  5. ブラウザの表示を更新→更新されない
    • 読み込むjsファイルやcssファイルを変更しても反映されない
    • JavaScriptの場合途中までしか読み込まれずにエラーが出る
    • ExtJS4ではファイルの末尾によく解らない文字列が追加され「illegal character」エラーが出る

続きを読む

VBoxHeadlessTrayがとても便利 – VirtualBoxをタスクトレイに格納する

VirtualBox.jpg 自分の端末はWindows 7(64bit)。開発は基本的にその上でやってるんですが、テスト環境には当然Linuxが必要になります。昔はWindowsでApacheを動かしてたときもありましたが、今なら普通に仮想環境ですよね。誰でもやってることだと思います。 というわけで、Windowsに「VirtualBox」をインストールし、ゲストOSとしてCentOSを動かしてテスト環境にしています。まぁその設定についてはその昔この辺に書きました。 CentOSの開発環境、設定手順(with VirtualBox) | mutter これを書いた当時と比べるとマシンのスペックが上がっているので(メモリ16GB積んでます。こんなこともあろうかと)、VirtualBox上のゲストOSにもたっぷりメモリを割いていてかなり快適に動かせています。素晴らしい。

本題。

そういうわけで仮想環境としてVirtualBoxが動いていますが、VirtualBoxのウィンドウはおろか、ゲストOSのGUIウィンドウすら普段は見ません。全部CUIで済みますもんね。ていうかむしろCUIなかったら作業なんてしてられないですし、そもそも「テスト環境」になりませんな。本番サーバをGUIで管理してますとか聞いたことないし。片付けたい。出来れば音も無く起動し、そのままタスクトレイに格納されて、必要なときだけ呼び出せるようにしたい。 それ、「VBoxHeadlessTray」で出来ます。 ダウンロードはこちらから。 Topten Software 解説は窓の杜のコラムが詳しいです。 窓の杜 – 【REVIEW】「VirtualBox」の仮想PCをタスクトレイから直接起動「VBoxHeadlessTray」

続きを読む

【メモ】 ディレクトリ内のファイル数が知りたかったら「ls -al」で良いのかー

ディレクトリ内のファイル一覧を表示するコマンド「ls」にはいくつかオプションがありますが、そのうちの「a」オプション(隠しファイルを含むすべてのファイルを表示する)と「l」オプション(ファイルの詳細を表示する)を使うとそのディレクトリに含まれるディレクトリ、ファイルの情報が一覧で表示できて便利です。 UNIXコマンド [ls]

とあるディレクトリでの実行結果

total 940
drwxrwxrwx   18 nobody apache  4096 Sep 26  2009 .
drwxrwxr-x    5 nobody apache  4096 Jul 27 11:44 ..
drwxrwxrwx    4 nobody apache 57344 Jul 28 05:15 0
drwxrwxrwx    3 nobody apache 57344 Jul 28 05:56 1
drwxrwxrwx  222 nobody apache 57344 Jul 28 06:26 2
drwxrwxrwx  103 nobody apache 53248 Jul 28 06:45 3
drwxrwxrwx  225 nobody apache 61440 Jul 28 06:57 4
drwxrwxrwx    5 nobody apache 53248 Jul 28 07:13 5
drwxrwxrwx 1700 nobody apache 57344 Jun 27 17:20 6

ディレクトリ数も表示されてた

んで、普段はパーミッション、所有者、ディレクトリ名/ファイル名くらいしか使ってなかったんですけど、左から2番目の数字、これ「そのディレクトリに含まれるディレクトリ数」または「そのファイルのハードリンク数」なのですね。知らなかった。 Linuxコマンド道場 – ファイルの詳細閲覧:ITpro ああ、正確に言うと「ディレクトリ数+2」ですかね。これ使えばディレクトリ数なんかすぐに解る…。上記実行結果でいうと、ディレクトリ「6」に含まれているディレクトリ数は1698ということになります。そうなのかー

ファイルのサイズも表示されてた

ちなみにグループの横の数字は何だろうと思ったらファイルの容量。 「h」オプションを付けることで容量の単位を付記して表示できます。

とあるディレクトリでの実行結果

total 940K
drwxrwxrwx   18 nobody apache 4.0K Sep 26  2009 .
drwxrwxr-x    5 nobody apache 4.0K Jul 27 11:44 ..
drwxrwxrwx    4 nobody apache  56K Jul 28 05:15 0
drwxrwxrwx    3 nobody apache  56K Jul 28 05:56 1
drwxrwxrwx  222 nobody apache  56K Jul 28 06:26 2
drwxrwxrwx  103 nobody apache  52K Jul 28 06:45 3
drwxrwxrwx  225 nobody apache  60K Jul 28 06:57 4
drwxrwxrwx    5 nobody apache  52K Jul 28 07:13 5
drwxrwxrwx 1700 nobody apache  56K Jun 27 17:20 6
おー…おお?ディレクトリではあんまり意味ないのか。 ファイルでを表示した例だとこんな感じ。

別のディレクトリでの実行結果

total 124K
drwxr-xr-x 2 nobody apache 4.0K Aug 17  2010 .
drwxrwxrwx 4 nobody apache  52K Jul 24 06:51 ..
-rw-r--r-- 1 nobody apache  15K Aug 17  2010 sample1.jpg
-rw-r--r-- 1 nobody apache  33K Aug 17  2010 sample2.jpg
-rw-r--r-- 1 nobody apache 8.7K Aug 17  2010 sample3.jpg
「total」とディレクトリは表示が正しくないけど、ファイルはそのままファイルサイズ。 なるほどそうだったのか。 初歩的なことを知らないことが多すぎて、自分でも時々びっくりします。うーむ。 そんなわけで、メモ。

続きを読む

昨日、一時的にサービスが落ちていました。

15時くらいにサーバの1つが突然繋がらなくなり、何かやっちまったのか(例えばデータベースへの過剰なアクセスとか)と思ってサーバを再起動してみたのだけど全然ダメでおろおろしていたら、しれっとこんな告知が出てました。

メンテナンス・障害情報・機能追加|さくらインターネット公式サポートサイト

平素よりさくらインターネットをご利用いただき、誠にありがとうござ います。 本日、ご提供サービスにおきまして、以下の通り障害が発生いたしました。 ご利用中のお客様には大変ご迷惑をおかけしておりますことを深くお詫び 申し上げます。

影響範囲 : さくらのVPS 1Gプランの一部 IPアドレスが下記の範囲のお客様 219.94.245.15 ~ 219.94.245.134 障害内容 : サーバに接続できなくなる障害が発生しました。 障害によりVPSの意図しない再起動が発生しました。
ああうん、ドンピシャだよさくらさん。 いままでここまでビシッとターゲットになったことが無かったのでちょっと驚きました。発生したのが15時20分で復旧したのが18時05分。何が原因か解らないけど(機材の故障かなぁ)さすがに3時間とめられるのはきついなー。まぁ、障害発生は仕方ないか。ただせめてメールでお知らせくらいして欲しいなーと思いました。障害情報をRSSで読むといっても、それを読むRSSリーダーが今障害が起きているサーバに載っていたので。 とりあえず、データに何の問題も無くて良かったです。やれやれ。

続きを読む

きちんとしたエンジニアと話をするとき、僕はとても緊張する

「きちんとしたとは?」という話はあるけれども、 「コードとはどうあるべきか」を知っていて、コードを読んでそれが巧いか拙いかわかるという普通のレベルのエンジニアの人と話すとき、僕はとても緊張する。とある流れで面接的なものを受けたときも、それで酷く緊張して頭が真っ白になり「自分の得意な言語でループを効率的に書け」と言われただけなのに関数どころか書式もなにもかもが全く出てこなくなってしまって、お互いにこれは困ったねという顔をするしか無くなってしまった。もちろん、その話はそれで無しになった。書面だけでお祈りされることもなくせっかく京都から浜町まで行ったのに。ガッデム。ガッデム俺。 なぜとても緊張するのか?と言えばそれは要するに自信がないからだ。 自分なりに勉強しコードを読み、やり方を年々変化させてなんとかプログラマらしくなってきたけれど、他人にコードを読んでもらう機会がほとんど無く、自分のやり方が妥当なのかどうなのかという自信がない。コンプレックスと言ってもいい。良いとされるもの(例えば:アジャイル)を求めてしまって、それと自分の差を見てまた自信がなくなってしまう(本当はそれが今の自分のプロジェクトにとって最適かどうかの検証が必要なのだけど)。そんなの気にしなければいいじゃんといつも思うのだけど、きっとプライドが高いんだ。「ダメだこいつ」と思われたくない。つーか怖い。 だから、きちんとしたエンジニアの人と話をすると、ダメ出しを恐れてとても緊張する。 でも最近少し学んだことがある。 自信がないことや、もしかして本当に能力が足りないことや、緊張することは仕方がないけれども、緊張しながら言うべきことをまとめて丁寧に伝えることは出来る。 最初に大事なことは「聞かれたことだけを考える」。先回りして補足しておこうとかしても話が錯綜するだけだ。それよりもまず質問に回答を用意することを優先する。 次に「解らないことは解らない」と答える。なんでもかんでも解らないのはダメだが、解らないことを説明するのはあとでいい。全体としてはっきり掴んでいるわけではないことについて言及するときは、解っている部分と解らない部分を分けて解るところだけ明確に答える。解らないところを曖昧に答える必要はない(と考えておく)。 最後に「ゆっくり話す」。考えながら話さなくて良いから、いつもよりゆっくり話すことを心掛ける。早口で話すとその自分の口調に煽られてさらにテンションが上がってしまう。ゆっくり話すとだんだん周りが見えてくる。周りが見えたところで僕が優秀なエンジニアに化けるわけでは全然無いけれど、言いたいことは言えるようになる。 もちろんベースとしては、自信のなさを何とかしないことには根本的な解決にはならなくて、そのためにはコードを読んでもらう人を確保するとか、コードを公開するとか、もっとソースコードをたくさん読むべき。他の言語の実装ももっと見るべき。そういうことは解っているのだけど、そして努力を始めているけれど、今現在足りないという場面に対面したときには、上に書いたようなことを心掛けながらその時の100%を出せるようにしたい。 こういうの、意識しなくても出来る人もいるんだよなぁ…それは素直に羨ましい。いやまじで。

続きを読む

【メモ】 PDOで空文字をNULLに変換する

#需要がどれだけあるかわかりませんが PDOを使ってデータを取得する際に、空文字をNULLに変換して取得することが出来ます。 PHP: PDO::setAttribute – Manual

PDO::ATTR_ORACLE_NULLS

NULL と空文字列の変換 「ORACLE」とありますが、Oracle だけでなく、全てのドライバで利用可能です。

PDO::NULL_NATURAL

変換しない

PDO::NULL_EMPTY_STRING

空文字は NULL に変換される

PDO::NULL_TO_STRING

NULL は空文字に変換される

使用例

$connection = new PDO( 'mysql:dbname=dbname;host=your_host', 'user', 'pass' );
$connection->setAttribute( PDO::ATTR_ORACLE_NULLS, PDO::NULL_EMPTY_STRING );
PDOの設定ってだいたいライブラリの中にあるし、魔法の呪文みたいになってて意味をいちいち見ないけど、 たまに見ると面白いなというそんな話。

続きを読む

MLBのデータはXMLまたはJSONで取得できるらしい

イチローの打率が気になるので、どこかからデータを引っ張ってきてグラフ化したいなぁ、できれば毎日更新でとか思ってたんだけど、ニュースサイトをパースするのも何か面倒だしましてや手入力とか。どこかでCSV配布してるサイトとかないのかなぁとか思ったらば、なんとMLBが全選手の全データをXMLで提供していることが解って驚愕。マジか。 正確に言うと、「Gameday」っていう今日の注目試合みたいな企画のためのデータベースなのだけど。 MLB.com Gameday | MLB.com: Gameday これがオープンになってて自由に使えるみたい。 データベースはRESTチックにアクセスできそうな階層になっててルートはここ。 http://gd2.mlb.com/components/game/mlb/ 探せば色んなデータが手にはいる。すげえ。

続きを読む

Amazonアフリエイト用テスト

目的

Amazonの商品ページを開いて、そこからなるべく少ないステップでブログエントリに貼り付けるアフリエイト用パーツを取得できるようにする。

やったこと

  1. ASINなどを与えるとその商品の情報を取得し整形して表示するプログラムを作成
  2. Amazonの商品ページでアフリエイト用パーツを取得するBookmarkletを作成

1. ASINなどを与えるとその商品の情報を取得し整形して表示するプログラム

大体次のような感じ。
  • PHPベース
  • フレームワークはSymfony
  • PEAR::Services_Amazonを使用
【メモ】 PEAR::Services_Amazonを使って商品情報を取得(署名認証対応) – nplll サービスURLはこんな感じ。
  • //amazon.nplll.com/asin/[Amazon ASIN] → 特定の商品の情報を表示する
あ、一応オープンになってますが、あくまで自分向けなので突然サービス終了することもありますし、 アフリエイトIDを追加することも出来ません。

2. Amazonの商品ページでアフリエイト用パーツを取得するBookmarklet

AmazonのページからASINを抜き出して整形するBookmarklet
javascript:function%20getID(id){return%20document.getElementById(id);};var%20u=location.href,d=/(http:\/\/www\.amazon\.(com|co\.jp))/;if(u.match(d)){t=getID("btAsinTitle").innerHTML;r2=RegExp.$2;if(r2=="co.jp")l="amazon.jp/dp/";else%20if(r2=="com")l="amzn.com/";else%20exit();l='';prompt("%E3%80%8C"+t+"%E3%80%8D",l);void(0);}
例えばこのページで実行すると↓ Amazon.co.jp: THE BEST OF スチャダラパー1990~2010: スチャダラパー: 音楽 こんなのが取れます。↓
実際の表示はこんな感じ↓

続きを読む

【メモ】 DOMDocument::loadHTMLで文字化けする場合

HTML文書を読み込んでパースするときに、今までは正規表現でやっていたんですが、 処理がどうしても面倒な感じになるし改変にも弱いので、DOMでやることにしてみたらば見事に嵌るなど。 読み込む文書がXMLだと問題ないんですが、HTML、特にShift-JISで書かれた文書だとなぜか文字化け。 色々と検索した結果、多分これで行けると言うのにたどり着いたのでメモ。

参考

DOM拡張モジュールでHTMLをパースする【PHP】 – Programming Magic

文字化けさせないためのポイント

  1. 読み込む文書をUTF-8に変換しておく
  2. あらかじめ日本語文字列を数値文字参照に変換しておく

1. 読み込む文書をUTF-8に変換しておく

PHPのデフォルト文字コードに合わせる、と言う意味です。

2. あらかじめ日本語文字列を数値文字参照に変換しておく

よく解らなかったんですがこれが文字化けの直接できな原因のようです。 参考エントリでは「metaタグで文字エンコードが指定されていない」場合に起きると書かれていますが、 文字エンコードに「Shift_JIS」が指定されていても発生しました。 というわけで、あらかじめ日本語文字列を数値文字参照に変換しておきます。
$html = mb_convert_encoding($html, 'HTML-ENTITIES', 'ASCII, JIS, UTF-8, EUC-JP, SJIS');
これだと、表示上文字化けは起きません。 それどころか、コメント以外の部分は普通に日本語で書き出されているようです。 ので、このままでもいいかなーという感じ。 まぁとはいえ、あんまりDOMについて解っていないので、だいぶ泥縄であれこれやってるんですけどね… サーバの全面引っ越し(およびドメインの変更)はいつになることやら。

続きを読む