2011年12月31日土曜日

phpのデバッグ

php.iniでエラー表示がOff(下記)になっている環境でデバッグする場合。
display_errors = Off
スクリプトに、ini_set( 'display_errors', 1 ); と書く。
<?
ini_set( 'display_errors', 1 );
...何らかの処理....
?>
そうしておいてテストすると、こんな風にエラーが表示される。
php -f foo.php

Fatal error: Call to undefined function bar() in /home/como/foo.php on line 15
リリース版では元に戻すのを忘れずに。

2011年12月29日木曜日

Lion ServerでのApache設定

Mac OSX Lion ServerのWebサーバのDocumentRootは、
/Library/Server/Web/Data/Sites/Default/
設定ファイルは、
/etc/apache2/sites/0000_any_80_.conf
システム環境設定→共有→Web共有→コンピュータのWebサイトフォルダを開く... からだと、
/Library/WebServer/Documents
が開かれてしまうので注意する。

2011年12月27日火曜日

NodeでWebSocket

2011/12/27現在NodeでWebSocketを使うなら、WebSocket-Nodeがベストなようだ。
ブラウザサポートが幅広い。

proxy環境内からnpm

npmnodeにパッケージを追加しようとしたらエラー発生。
対策はこちら。
npm config set registry http://registry.npmjs.org/

先人の知恵に感謝。 proxy環境でnpm使おうとしたら、Error: socket hang up

2011年8月9日火曜日

vimdiffは忘れやすい

たまにしか使わないのでいつも忘れてしまう。
とりあえずdoとdpの使い方さえマスター出来れば、マージ作業の速度は10倍ぐらいに上がるはず。

起動
vimdiff file1 file2 [file3 [file4]]

起動 gvimの場合
gvim -d file1 file2 [file3 [file4]]

あるいは
alias gvimdiff='gvim -d' #もし無ければaliasを設定

gvimdiff file1 file2 [file3 [file4]]

前の差分へ移動
[c

次の差分へ移動
]c

現在のバッファをもう1つのバッファと同じくなるように変更をする
"o" は "obtain"の意味 (via :h vimdiff)
do

もう1つのバッファを現在のバッファと同じくなるように変更する
"p"何だろう?"put"のp?
dp

2011年6月3日金曜日

デュアルブートをシングルブートにしてパーティションサイズを広げる方法

WindowsとUbuntuのデュアルブートにしていたPCから、Windowsを削除してUbuntuのみシングルブートにした時のやり方。

ゴール
プライマリパーティションのWindowsを削除する
拡張パーティションのUbuntuをプライマリパーティションに移動する
拡張パーティションを削除する
プライマリパーティションを目一杯大きく取る

前提条件
プライマリパーティションが拡張パーティションよりも容量が大きいこと。
そうでない場合は、一時退避用に外部のストレージを用意する必要がある。

手順

  1. UbuntuのLiveCDを用意する

  2. 1のLiveCDでブートする

  3. 一時転送

  4. ddrescueを入れて、パーティションのクローンを作る
  5. ここらへんを参考に。
  6. GPartedをインストールする

  7. GPartedで転送先のパーティションをチェックする

  8. GPartedで不要となる拡張パーティションを削除し、プライマリパーティションを広げる

  9. 拡張パーティションにSwap領域を確保してマウントしている場合、swapoffする必要があるかも。
  10. Grubをインストールしなおす
  11. ここらへんを参考に。
  12. 再起動する
  13. 再インストールしたGrubによって、新しいパーティションのUbuntuで起動。


転送先の容量を間違えて転送元よりも小さなものを使ってしまい、クローン作成に失敗してはまった。

数百GBあるとかなり時間がかかるので、暇なときにやるとよいでしょう。

2011年5月29日日曜日

git-upload-pack: not found のとき

自分でgitをインストールしたサーバーにレポジトリを作って、ローカルからgit+sshでcloneしたら怒られた。そんな時の対策。

現象
$ git clone ssh://username@server/~/myrepo.git
bash: git-upload-pack: command not found
fatal: The remote end hung up unexpectedly

サーバーにログインして確認してみると、git-upload-packへのパスはちゃんと通っている。
$ which git-upload-pack
/home/username/local/bin/git-upload-pack

なぜ?
それは、ssh経由でログインした場合、PATHを.bashrcに設定したとしても読み込まれないのが原因。

対策A
--upload-packオプションで毎回指定する

git clone --upload-pack=/home/username/local/bin/git-upload-pack ssh://username@server/~/myrepo.git


対策B
git-configでサーバーのgit-upload-packのパスをconfigに書きこむ
git config remote.origin.uploadpack /home/username/local/bin/git-upload-pack

2011年5月22日日曜日

さくらのスタンダードプランでWebSocket

さくらインターネットのスタンダードプランで、WebSocketサーバーを実行してみたらうまく行った、という話。

使う物
  1. Ruby 最新版でいいだろう。

  2. RubyGems これも最新版でいいだろう。

  3. rev-websocket



手順
  1. node.jsのインストール → 失敗
  2. 定番WebSocketサーバーのnode.jsはport絡みのファイルの書き込み権限の問題で断念。
    きっとVPSならそんな心配はないのだろう。
  3. ローカルへのRubyのインストール

  4. $ wget ftp://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.2-p180.tar.bz2
    $ tar jxvf ruby-1.9.2-p180.tar.bz2
    $ cd ruby-1.9.2-p180
    ホームディレクトリ直下のlocalにインストールする。
    $ ./configure --prefix=$HOME/local
    $ make
    $ make install

  5. インストールしたRubyへのパスを設定する

  6. .bash_profile(.bashrc派の人もいるかな)に以下を記述
    前略
    export PATH=$HOME/local/bin:$PATH

    $ . .bash_profile

  7. RubyGemsをインストール

  8. $ wget http://rubyforge.org/frs/download.php/74886/rubygems-1.8.3.tgz
    $ tar zxvf rubygems-1.8.3.tgz
    $ cd rubygems-1.8.3
    $ ruby setup.rb

  9. rev-websocketをインストール

  10. $ gem install rev-websocket


    以下は動作テスト。

  11. rev-websocketのサンプルを~/wwwにコピー

  12. $ cp -r ~/local/lib/ruby/gems/1.9.1/gems/rev-websocket-0.1.3/examples/public ~/www
    $ cd ~/www/public

    エディタでecho.htmlを開く
    WS_URL = "ws://localhost:8081"; を WS_URL = "ws://サーバーのホスト名:8081"; に修正

  13. rev-websocketのサンプルのechoサーバーを起動

  14. $ ruby ~/local/lib/ruby/gems/1.9.1/gems/rev-websocket-0.1.3/examples/echo.rb
    start on 0.0.0.0:8081

  15. Webブラウザーでrev-websocketのサンプルにアクセス

  16. http://ホスト名/public/echo.html
    こんな表示が出ればOKだ。
    server: Hello, world!
    client: hello
    Sun May 22 2011 09:41:40 GMT+0900 (JST)connecting to ws://ホスト名:8081...
    Sun May 22 2011 09:41:40 GMT+0900 (JST)connected.
    Sun May 22 2011 09:41:40 GMT+0900 (JST)message sent: client: hello
    Sun May 22 2011 09:41:40 GMT+0900 (JST)message received: server: Hello, world!
    Sun May 22 2011 09:41:40 GMT+0900 (JST)message received: client: hello
    Sun May 22 2011 10:17:32 GMT+0900 (JST)disconnected...


さて、何を作ろうか?

2011年2月24日木曜日

スウェーデンでTeliaのプリペイドSIMカードを使う


スウェーデンに行って、SIMロックフリーのNexus Oneに現地のキャリアTeliaのプリペイドSIMカードを買って使った時のメモ。

SIMカード自体はストックホルムのアーランダ空港にある売店で購入。
店番のおばちゃんにプリペイドSIMカード下さい、と言ったらいろいろあるけどどれがいい?と聞かれたので、一番メジャーそうなTeliaを選んだ。

金額はカード本体100SKRと50SKRのチャージ、合わせて150SKR。

APNは、Nexus Oneに刺してデフォルトAPNを選択にしたら勝手に設定された。
おばちゃん曰く、実際に使えるようにするには、レシートに記載されている*125*と#と14桁の番号に電話しろとの事。

結果的には、下記に電話すると通話が出来るようになった。
*125*XXXXXXXXXXXXXX# (XXXXXXXXXXXXXXはレシートに記載されていた14桁の番号)

この組み合わせがちゃんと理解してないと曲者。
上記のように*125*XXXXXXXXXXXXXX#の順序で連続して入力した番号に電話しなければいけないのだ。が、話を聞きそびれて、全て組み合わせてる必要があることが分からなかった。想像を働かせて個別に*125*とか14桁の番号とか#とかを間を置いてバラバラに入力してみたところ、この番号は使われていません的なアナウンスが流れるばかり。ホームページを見てもスウェーデン語は意味不明。

結局なんだかんだとやってるうちに正解を見つけるまでに3日もかかってしまった。
一旦繋がった後は地下鉄でもどこでも利用可能だった。この辺は日本より自由度が高い。
ただし連続したデータ転送を開始すると3GからすぐにEDGEになることから、帯域の連続使用時間がある程度を超えると速度制限がなされる模様。

料金の方はと言うと、Web見たりしまくっていたにもかかわらず消費したのは当初のチャージの範囲で20SKR程度で済んだ。

もし次回利用することがあれば、買ったらすぐに店内で設定するようにして分からなかったらすぐに店員に聞こうと思った。

Refillは Ladda med laddningscheck からが一番簡単っぽい。
残高確認は *120# に電話すると結果が返ってきて画面に表示される。


追記: レシートの画像をアップしました。赤丸の部分が14桁の番号が書かれている部分です。