2012.04.25

MacOS Xでローカル環境にWordPressをインストールしようとすると「Error establishing a database connection」でひっかかる場合の対処法

ここ最近(多分Lion?)から、テスト用にWordpress環境を構築しようとMacOS Xのローカルにインストールしようとすると、wp-install時に
Error establishing a database connection
と出てくることがあります。

mysqldも起動してるし、データベースもちゃんと作ってるし、wp-config.phpも間違いなく書いてるのにdbにつなぐことができないということは、configより低レベルで何かが起こっているはず。
と調べてみると、どうもOSXのmysqlだけなんだか違うようでした。
# mysqlはMacOS X用のインストーラでインストールしたものです。

■ まずはmysql側

mysql -u xxx -p

でログインし、

> status

を打ち込むとだいたい以下が出てくると思います。

mysql> status
————–
mysql Ver 14.14 Distrib 5.5.20, for osx10.6 (i386) using readline 5.1

Connection id: 4
Current database:
Current user: user@localhost
SSL: Not in use
Current pager: stdout
Using outfile: ”
Using delimiter: ;
Server version: 5.5.20-log MySQL Community Server (GPL)
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: latin1
Db characterset: latin1
Client characterset: utf8
Conn. characterset: utf8
UNIX socket: /tmp/mysql.sock
Uptime: 4 days 19 hours 17 min 52 sec

Threads: 1 Questions: 4 Slow queries: 0 Opens: 33 Flush tables: 1 Open tables: 26 Queries per second avg: 0.000
————–

↑ここで、

UNIX socket: /tmp/mysql.sock

と記述されています。
これがパッケージでインストールした場合のソケットパスです。
ところがどうもOSXのphpが見にいくソケットのデフォルトのパスと違うようなのです。

■ PHPの設定

まずはphp.iniの中身を見てみます。

$ sudo vi /etc/php.ini.default

pdo_mysql.default_socket=/var/mysql/mysql.sock
mysql.default_socket = /var/mysql/mysql.sock
mysqli.default_socket = /var/mysql/mysql.sock
になっています。

ここで2つの対処法があります。

1. php.iniの内容を編集
2. /var/mysql/mysql.sockに/tmp/mysql.sockへのシンボリックリンクを張る

最初は1.で対処していましたが、どうやら2.がおすすめです。

1. php.iniの内容を編集

php.iniの/var/mysql/mysql.sockそれぞれを/tmp/mysql.sockに変える。(このうちの2つはWordpress用には必要ないかもしれませんが…)

しかし…MacOS Xはプレーンの状態では読み込んでいるphp.iniがありません。
そこで、/etc/php.ini.defaultをphp.iniにコピーします。
パスはどこでもいいですが、OSXのPHPは/usr/local/lib/php.iniを読みに行くのでそこに作成するか、もしくは/etc/php.iniくらいに実ファイルを置き、そこに/usr/local…からのシンボリックリンクをつくります。

$ ln -s /etc/php.ini /usr/local/lib/php.ini

2. /var/mysql/mysql.sockに/tmp/mysql.sockへのシンボリックリンクを張る

/var/mysqlというディレクトリは存在しませんので、
$ sudo mkdir /var/mysql
$ sudo ln -s /tmp/mysql.sock /var/mysql/mysql.sock

上記1.2.いずれかの対処をして、Apacheを再起動すればうまくいくはず。

2012.04.19

Webページ中の画像をすべてプレースホルダに入れ替えるスクリプト

どうしてもコードが140文字に収まらなかったのでこちらにメモ。
ブラウザのデベロッパーツールのコンソールで以下を実行すると<img>画像が全部プレースホルダ画像(http://placeholder.it)に変換されます。getClientRectsに対応していないブラウザでは動作しません。(だいたいのモダンブラウザは大丈夫のはず)

if(a=document.getElementsByTagName(“img”))for(b=0;b<a.length;b++){var c=a[b].getClientRects()[0];c&&(a[b].src=”http://placehold.it/”+c.width+”x”+c.height)};

ブックマークレット

javascript:(function(){if(a=document.getElementsByTagName(“img”))for(b=0;b<a.length;b++){var c=a[b].getClientRects()[0];c&&(a[b].src=”http://placehold.it/”+c.width+”x”+c.height)};})()

- CSSバックグラウンド画像、Flashは変換されません。
- ビデオも変換されません。
- スクリプトを実行した時点で表示されていない(ClientRectがない)画像は変換されません

# 2012.04.20 imgタグや画像のClientRectがない場合に出るエラー回避処理追加。

2012.04.13

AppleScriptで、毎日勝手にiTunesのラジオをOn/Off

オフィスの人数が少ないため無音にキーボードとマウスを叩く音が響くだけで侘しいので、ファイルサーバ(Mac)をラジオサーバ兼用にして、iTunesでフランス語のラジオをかけています。

毎朝画面共有開いてiTunesを直接操作してラジオをかけているのですが、忙しい日は起動をわすれてしまったり、自分が先に帰った場合に画面共有にアクセスできない人が消せないなどの欠点があったので、かねてからどうにか自動化したいなとおもっていて今日ようやく重い腰をあげて取り組みました。

やったことは
- iTunesのプレイリストを作成(ラジオ局をプレイリストに入れて名前をつける)
- AppleScriptでiTunesの制御をするシェルスクリプトを書いて、それをcronで動かす
です。

まずはiTunesにプレイリストを作って、そこに任意のラジオ局を入れます。
ここではそのプレイリストを「Radio」と命名しました。
# AppleScriptでiTunesの特定の曲や局を再生するのは結構面倒みたいなので、プレイリストを作成しました。

次にiTunes起動シェルプログラム。

$ vi radiostart.sh
↓以下を書いてセーブします。
/usr/bin/osascript -e 'tell application "iTunes" to play playlist "Radio"'

/usr/bin/osascriptはコマンドライン環境でAppleScriptなどを動かす環境です。
「osascript [applescriptファイル]」でファイルに記述されたAppleScriptを動かしますが、-eオプションを指定すると、そのあとに続くスクリプトをそのまま実行します。この一行で、iTunesアプリが起動していなければ起動し、予め設定しておいたRadioプレイリストを再生します。

$ sh radiostart.sh

できちんと再生するかどうか確かめてみましょう。

その次はiTunes終了シェルプログラム。

$ vi radiostop.sh
↓以下を書いてセーブします。
/usr/bin/osascript -e 'tell application "iTunes" to quit'

これでiTunesが落ちます。
念のため

$ sh radiostop.sh

で動作を確かめてみましょう。

あとはcrontabに登録するだけ。
平日8:45に開始して、22:00に終了します。

$ crontab -e
↓以下を書いてセーブします。
45 8 * * 1-5 sh radiostart.sh
00 22 * * * sh radiostop.sh

ファイルパスはご自身で設定したパスを入れてください。
以上で毎日勝手に動いてくれます。

2012.03.22

新iPad(Retina iPad、iPad3、The new iPad)のUser-Agent

OSのバージョンによって多少の違いがあると思いますが、私の個体では以下でした。

Mozilla/5.0 (iPad; CPU OS 5_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B176 Safari/7534.48.3

AWSのAmazon Linuxにnode.jsをインストール、npmでモジュールをグローバルインストール

以下の3つについて。
■ Amazon Linuxにnodeをインストール
■ ついでにmongodbも
■ npmでモジュールをグローバルインストール

■ Amazon Linuxにnodeをインストール

Amazon Linuxには何もないので。

sudo yum install -y gcc-c++ make openssl-devel
wget http://nodejs.org/dist/v0.6.13/node-v0.6.13.tar.gz // 最新バージョン・ファイルURLはnodejs.orgで確認
tar -zxf node-v0.6.13.tar.gz

あとは適当にconfigureとmake、sudo make install。

■ ついでにmongodbも

バイナリファイルでインストール。

wget http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.0.4.tgz // 他のOSや最新バージョン・ファイルURLはmongodb.org/downloadsで確認
tar -xzf mongodb-linux-x86_64-2.0.4.tgz

あとは/data/dbを作って、解凍したディレクトリのbinにあるmongodとmongoを実行させるだけ。
現在のディレクトリが気に入らなければお好みのディレクトリに動かします。

■ npmでモジュールをグローバルインストール
1
npm 1.0(2011年春)から、npmでオプションを指定せずモジュールをインストールする際にデフォルトのインストールディレクトリがローカル(基本的に./node_modules、例外あり)になりました。それまではNodeのディレクトリ(/usr/local/lib/node_modulesなど)にインストールしていましたが、「プロジェクトで使うモジュールはプロジェクトフォルダにインストールする」という大方針になったようです。

ただしコマンドラインでモジュールを使いたい場合はNodeのディレクトリに「グローバルインストール」を行う必要があります。

というわけで、インストールディレクトリの振り分け方は

npm install [module] // ローカルインストール
npm install -g [module] // グローバルインストール(要root権限)

です…が、Amazon Linuxの場合はsudoで実行する際のパスが/usr/local近辺に通ってないので、そのまま

sudo npm install -g mongodb

と入れると

which: no npm in (/sbin:/bin:/usr/sbin:/usr/bin)

と言われます。
そこでnpmをフルパスで指定して

sudo /usr/local/bin/npm install -g mongodb

と入れると今度は

/usr/bin/env: node: No such file or directory

と言われてしまいます。
そこで…sudoコマンドを入れた場合のパスは/etc/sudoersというファイルに記述されていますので、これを編集します。

sudo vi /etc/sudoers

で「secure_path」を検索し、その行に/usr/local/binを加えて保存すると、

sudo npm install -g mongodb

も無事成功。

# もしくはそもそもnodeのインストールディレクトリを変えるなどの方法もあります。

2012.03.19

MacOS Xのコマンドラインで、画像の縦横ピクセルサイズを取得する方法

sips -g pixelHeight -g pixelWidth [画像ファイル]

複数可。便利だわ…
↓のような出力になります。

/path/to/image.jpeg
pixelHeight: 42
pixelWidth: 42

2012.03.14

MySQLの再インストールのための、いろいろなファイルの削除方法(OS X 10.7)

一旦インストールしたMySQLのバージョンではごにょごにょ問題があって、別のバージョンをインストールしたい場合のMySQLの削除方法。システムはOS X Lion。

sudo rm /usr/local/mysql
sudo rm -rf /usr/local/mysql*
sudo rm -rf /Library/StartupItems/MySQLCOM
sudo rm -rf /Library/PreferencePanes/MySQL*
rm -rf ~/Library/PreferencePanes/MySQL*
sudo rm -rf /Library/Receipts/mysql*
sudo rm -rf /Library/Receipts/MySQL*

/etc/hostconfigを編集し、「MYSQLCOM」の行をまるごと削除。

インストーラでインストールした場合は
sudo rm -rf /var/db/receipts/com.mysql.mysql*
も消しておかないと別バージョンのインストーラにインストール拒否されます。

2012.02.06

超しょぼいスタティックWebサイトをAWSに移植してみた その3(サーバプログラムインストールと設定)

初回(見積)前回(インスタンスの立ち上げ)に引き続き、今回はサーバへプログラムのインストールや設定を行います。
といってもここで実際発行するコマンドは5行程度とファイルの書き換え2行程度です。

  1. EC2インスタンスを立ち上げる
    • EC2インスタンスを立ち上げる
    • Security Groupを設定する
    • keyを使ってsshとsftp接続をする←前回のゴール
  2. サーバを構築する(データを移動する)←今回
    • タイムゾーンの設定(1行)
    • httpdとphpのインストール(1行)
    • httpd.conf(数行)
    • htmlやその他のドキュメントを転送(数分)
    • 起動設定(1行)←今回のゴール
  3. Elastic IPを設定し、稼働中のEC2インスタンスに固定IPを割り振る
  4. Route 53のDNSサービスを設定する

サーバを構築する

前回、EC2インスタンスを起動してログインができるようになりました。
これから、そのEC2インスタンスをWebサーバとして設定します。

タイムゾーンの設定

インスタンスを生成した状態ではシステムは標準時設定ですので、

$ sudo cp /usr/share/zoneinfo/Japan /etc/localtime

でタイムゾーンを日本に変更します。
日本以外にお住まいの方は/usr/share/zoneinfoから適当なタイムゾーンファイルを探してください。

$ date

で確認。

httpdとphpのインストール

今回インストールするものは、httpdとphp、そしてphpのマルチバイト用モジュールmbstring。
これをインストールするだけなら以下の一行ですみます。その時点で提供されているそれぞれのプログラムの最新パッケージがインストールされることでしょう。

$ sudo yum install -y httpd php php-mbstring

そのまますべてインストールされてしまいます。所要時間30秒。この時点でPHPは設定変更なしにすでに使える状態になっています。

* スクリーンショットは64bit版で作った別のインスタンスの結果です。
* 今回はDBを必要とするアプリを入れるわけではないので、よく使われるであろうMySQL、そしてphpでMySQLにアクセスするphp-mysqlモジュールなどはインストールしていません。必要に応じてインストールしてください。

ここで一度httpサーバにアクセスしてみましょう。
まずはApacheを起動します。

$ sudo /etc/init.d/httpd start

次にコンソールのEC2タブで、今起動しているインスタンスの詳細で「Public DNS」という項目を見つけます。おそらくec2-[数字].[リージョン].compute.amazonaws.comというフォーマットになっているはずです。

このドメイン名をコピーして、ブラウザでアクセスしてみましょう。
するとこんなページが出るはずです。
* 出ない場合は、「ps -e | grep httpd」でApacheの起動を確認して、起動しているならEC2インスタンスが割り当てられているSecurity Groupでポート80が開いているかどうかを確認しましょう。

これでとりあえずHTTPサーバとしてインスタンスが立ち上がったことになります。
phpがインストールされているかどうかは、/var/www/html以下に適当な.phpファイルを作成してphpinfo()を走らせてみてください。
ただしApacheインストール時の状態では、/var/www/htmlはrootが所持しているため普通のユーザではこのディレクトリのファイル操作ができません。chownでこのディレクトリの権限をEC2初期ユーザ(ec2-user)、もしくは他の適当なユーザに変更しておきます。

httpd.conf

Apacheの設定はAmazonパッケージのデフォルト設定で、そのまま運用するには少々不安なところがありますので、そのあたりをきちんと設定します。httpd.confファイルのパスは

/etc/httpd/conf/httpd.conf

です。これをsudoで編集します。

$ sudo vi /etc/httpd/conf/httpd.conf

最低限の編集ポイントは以下です。

ServerTokens OS → ServerTokens ProductOnly
Options Indexes FollowSymLinks → Options -Indexes FollowSymLinks

その他は.htaccessを使うためにAllowOverrideの設定を変えたり、ログのとり方を変えたり、必要な方はVirtual Hostの設定などです。
お使いの環境に合わせて設定してください。

htmlやその他のドキュメントを転送

前回の最後でSFTP経由でサーバに繋げられるようになりましたが、これを利用して/var/www/html(Apacheインストール時デフォルトのドキュメントディレクトリ)以下にスタティックhtmlファイルやCSS、JavaScriptファイルなどを転送します。

転送できない場合は、/var/www/htmlディレクトリのアクセス権を確認してください。

ここまでで、PHPが動くちゃんとしたWebサーバが立ち上がりました。

起動設定

起動時にhttpdが勝手に立ち上がるように設定をしておきます。

$ sudo /sbin/chkconfig httpd on

私のインスタンスのログを見ると運用開始2日目でいきなり原因不明のサーバリスタートが起こっていて、その時はまだ上記の設定をおこなっていなかったので数時間のダウンタイムを発生させることになってしまいました (´・ω・`)

次回、Elastic IPとRoute 53の設定で公開終わりです。

2012.02.03

超しょぼいスタティックWebサイトをAWSに移植してみた その2(Basic Amazon Linux AMIでサーバを立ち上げる)

前回に続いて、今度は実際にAWSのコンソールでサーバやDNSを設定してみます。
AWSアカウントはすでに開設していることにします。Amazonのアカウントさえあれば、そのアカウントIDを使ってAWSサービスのアカウントを作ることができます。とても簡単ですのでとりあえずアカウントを作っておいてAWS Management Consoleにログインしたところからはじめます。

ログインするとこんな画面。今回使うのは赤丸の2つだけです。

ここからやることは以下

  1. EC2インスタンスを立ち上げる←今回のスタート地点
    • EC2インスタンスを立ち上げる
    • Security Groupを設定する
    • keyを使ってsshとsftp接続をする←今回のゴール
  2. サーバを構築する(データを移動する)
  3. Elastic IPを設定し、稼働中のEC2インスタンスに固定IPを割り振る
  4. Route 53のDNSサービスを設定する

EC2インスタンスを立ち上げる

まずはEC2(サーバのCPUとメモリに最低限のストレージがくっついた、いわゆるハードウェアコア的なもの)のインスタンスを立ち上げます。
ハードウェアコアのイメージはAMI(Amazon Machine Image)という、OSがあらかじめインストールされているサーバの仮想イメージを自分のエリアにコピーして、そのイメージをEC2という仮想ハードウェア的なもので立ち上げます。

なんでもよかったのですが、Amazon謹製なのと★がついていておススメっぽくって、一番ベーシックそうなので、今回は「Basic 32-bit Amazon Linux AMI」というAMIを利用します。このSelectをクリックしたあとの画面でNumber of Instancesを1、Instance Typeをt1.microに設定し、Launch Instanceというオプションを選んで次の画像の画面に遷移します。(Spot Instanceはスケールするときに使うようですが今回は関係ありません。)

* EBS(Elastic Block Store)というディスクボリュームがEC2に別途追加できるのですが、このAMIのストレージが8GBあるので今回は見送りました。
EBSがあるとEC2に大容量のストレージが追加できる上に、EBSだけでバックアップスナップショットをとれたり、複数EBSを1つのEC2にマウントすることでストライピングさせて速度向上させたりといったことができるようです。今回はユーザデータが全部で400KBなので、そんなものはまったく必要としていません。

ここでは32bit版を選択しましたが、現在もしくは将来的に、Instance Typeを大きく拡張する予定がある場合は64bitにしておく必要があります。32bit版はlargeまでしか対応していません。

ここではTermination Protectionという項目を操作できます。
EC2はサーバを停止させるとき、「Stop」で停止状態にするのですが、それとは別に「Terminate」というコマンドがあり、TerminateするとStopしたあとにインスタンスが消えてしまいます。たまに「StopさせるつもりだったのにTerminateして全部消えちまったよ!」と泣くことがあるらしく、その防止策として簡単にはTerminateできないようにすることができます。この設定はあとでコンソール上から変更することができます(変更しないとTerminateできません)。

次の画面でこのインスタンスにつけるメタ情報(識別名とか。とりあえずNameに名前を入れておいたらよいでしょう。)をつけて、その次の画面ではインスタンスにアクセスするための鍵を生成します。

ここでとりあえずkeyを作ってダウンロードしておいて次に進むと、このインスタンスをどの「Security Group」に入れるかを選択します。Security Groupとは開放するポートを指定するFirewallのようなものです。Security Groupは後ほど設定します。

この次の画面で設定の確認があり、そこでインスタンスを起動します。
すると以下のような状態になります。

しばらくするとPending(黄信号)がRunning(青信号)に変わりますので、そこでサーバにアクセスできます。

Security Groupを設定する

アクセス前にまずはSecurity Groupの設定を行います。
22(SSH)と80(HTTP)をあけました。
これはテスト用なので接続元IPを0.0.0.0(どこからでも)にしていますが、運用上は特定のIPにしておいた方がいいですね。

これを設定すると、SSHでサーバに入れます。

keyを使ってsshとsftp接続をする

Instanceタブに戻って、作ったインスタンスを選択して、そこで右クリック、もしくはメニューにあるInstance Actionsから「Connect」を選びましょう。
するとSSHでの接続方法がでてきます。

以下、Macのやり方です。

SSH

  1. 先だってダウンロードした[key名称].pemをTerminalからアクセスしやすい場所、もしくはお好みの特定の場所に置いておきます。
  2. Terminalを起動し、keyを置いたディレクトリに移動します。
  3. keyのアクセス権を変更します。chmod 400 [key].pem
  4. そのディレクトリで、上記のウインドウに表示された次のコマンドを発行します。「ssh -i somekey.pem ec2-user@[サブドメイン].compute.amazonaws.com]
  5. (初回接続時に、このサーバをknown hostsに入れる旨の確認が出てきますので、yesを選択します。)
  6. これでサーバにログインできました。
SFTP – Cyberduck

  1. 新規接続を選ぶ。
  2. プロトコルはSFTPを選択。
  3. サーバにサーバアドレスを入れる。(〜.compute.amazonaws.com)
  4. ユーザ名は「ec2-user」、パスワードはなし。
  5. 「詳細設定」エリアの「公開鍵認証を使用する」にチェックをする。
  6. するとファイル選択ダイアログが出てくるので、[key].pemファイルを選択する。*1
  7. 接続する。
  8. (SSHで接続前にこの一連の操作を行うと、初回接続になるので、known hostsに入れる旨の確認が出てくるはずです。)

長くなったのでサーバ構築とIP、DNS関係は次回にします。

*1 ここではユーザフォルダの.sshという非表示ディレクトリがデフォルトで出てくるのですが、鍵はここにしまっておくのがベストプラクティスのようです。
この隠されたディレクトリにアクセスするにはTerminalを使う必要がありますが、Finderで見えるように設定も可能です。Terminalで以下のコマンドを発行します。

defaults write com.apple.Finder AppleShowAllFiles YES

アプリケーションのファイル選択ダイアログで隠しファイルを選択したい場合は、ダイアログで⌘+Shift+.を押すと隠しファイルが見えるようになります。
もう一度同じキーの組み合わせを押すと消えます。

次回に続く

超しょぼいスタティックWebサイトをAWSに移植してみた その1(見積)

今更な感じがありますが、AWSを実運用で試してみることにしました。
手始めに、自分の会社のとても小さな小さなWebサイトを載せてみました。

現在のサイト概要

  • スタティックhtmlがたった3枚、画像やJS含めて全部でたった400KB程度
  • ブログエンジンやCMSは使っていない(今後も特に使う予定はない)
  • PHPを使った問い合わせフォーム→メール送信の仕組みあり
  • 某海外ホスティングサービスのサーバ上で運用
  • ドメイン取得済
  • DNSサーバはホスティングサービスについている
  • トラフィックはスカスカ、月間3000PVもない

このようなしょぼいサイトをとりあえずAWSに移植します。
実際の作業は以下のようになります。
今回は最低限の設定しか行わないものの、下記一連の作業だけならば慣れれば5分程度で終わりそうなボリュームです。

  1. お見積(今回)
  2. EC2インスタンスを立ち上げる
    • EC2インスタンスを立ち上げる
    • Security Groupを設定する
    • keyを使ってsshとsftp接続をする
  3. サーバを構築する(データを移動する)
    • タイムゾーンの設定(1行)
    • httpdとphpのインストール(1行)
    • httpd.conf(数行)
    • htmlやその他のドキュメントを転送(数分)
    • 起動設定(1行)
  4. Elastic IPを設定し、稼働中のEC2インスタンスに固定IPを割り振る
  5. Route 53のDNSサービスを設定する

今回は見積編。次はインスタンスの立ち上げからサーバ設定、DNS設定などの実践編です。

お見積もり

上記のサイトをAWSで運用するにはどうやらまずは以下の構成が必要のようです。

  • サーバインスタンス(→EC2インスタンスmicro1個+対応するEBSブロック1つ)
    • httpサーバ
    • php
    • トラフィックは出入りとも月間1GB未満
  • IP(→Elastic IPアドレス)
  • DNS(→Route 53)

まずはこれをSIMPLE MONTHLY CALCULATORというAmazonのツールで見積もってみました。以下長々と書いていますが、最低構成の価格だけ見たい人は次の画像まで飛ばしてください。

EC2

おそらく最初はEC2設定画面になっていると思いますが、他のサービスの設定画面がでている場合は左側のタブからEC2を選択。
EC2インスタンスはUSの安めのロケーションで、気休め程度日本に近そうなUS-West(Oregon)で。(Calculatorが日本語表示の場合はCR_US_WEST_2という表示になるようです。)
「Linux/OpenSolaris」という一番安いOS、さらに一番小さいサイズのmicroを1つ選択。
ずっとインスタンスを起動したままなのでusageは100%なんでしょうか?一応100%で試算。モニタリングなし。
利用するつもりにしてるAMIのルートボリュームが8GBなので、それをそのまま使用する予定。これがEBSのボリュームになるようです。IO per second(IOPS)はスカスカトラフィックなので本当は0.001とか入れたいんですが自然数しか入らないようなので1を入力。
トラフィックはI/Oともに月間1GB未満。
Elastic IPはひとつ割り当てます。失敗しなければリマップは発生しないはずなので、一応0回。

ここで一度右上の「Add to Bill」ボタンをクリックすると、Estimateのタブがアップデートされて現時点での総合金額がでます。
だいたい$15ですが、キャンペーンが効いてる人は$0かもしれません。
とりあえず次の設定に行きます。

Route 53

AWSではDNSサービスも持っていて、今回はこれも今までのホスティングサービスからAWSに移してみます。
左側のタブからRoute 53を選択すると、Zone数とQuery数を聞かれるので、1ゾーン1百万クエリという最低構成にしてみます。

ここでもAdd to Billを押して見積画面をアップデートしてから「Estimate of your Monthly Bill」というタブを開きます。

すると以下のようになりました。

* この記事を書いている時点では、サインアップから一年間だけ一定のサービスが無料になります。上の画像に出ているものの中では、EC2サービス分すべてが無料の扱いになります。ここでは「初年度無料分をカウントしない」設定にしています。

まあ今回のネタのような超しょぼいサイトを運用するには割高ですね。
こういう利用量に適してるのはやはりロリポップかと。

もっとまともなサイトだとストレージを大きくしたり、トラフィックが増大したり、冗長化したりするんでしょうね。Windows使わないといけないとか。そういう場合はいろいろなサービスが付帯することになるので結構お高くなりそうです。

次回につづく

2012.02.01

2012年1月のモバイル端末アクセスランキング

このサイトでのモバイル端末のアクセス数ランキングです。
集計期間は2012/1/1から2012/1/31。
Google Analyticsのデータから生成しました。
パーセンテージ表示にしていますが、もとの数はVisit数なので、同期間にひとつの端末が複数回アクセスしていることも考えられます。(ただ、リピートが極端に少ないのでその影響は小さいと思いますが…)

Kindle Fireは(not set)の中に入っているのか、それともただ単にアクセスがなかっただけなのかは不明です。
iPhoneの3G(と思われる)アクセスの割合についても別レポートを参照して調べてみましたが、WiFiでアクセスしてる人も多いですね。

全アクセス数のうちモバイルが占める割合は27.8%でした。
前年同月は10.6%でした。

52.1% Apple iPhone(うち3Gアクセスは60.5%、さらにそのうちSB77.6%、au22.4%)
12.7% Apple iPad(うち3Gアクセスは10.1%)
5.9% (not set)
3.9% SonyEricsson IS11S Xperia acro SO-02C for DoCoMo
2.5% Samsung SC-02C Galaxy S II SC-02C for DoCoMo
2.5% SonyEricsson SO-01C Xperia arc SO-01C for DoCoMo
2.1% Apple iPod Touch
1.5% Toshiba IS04 Regza Phone IS04 for KDDI
1.2% Samsung SC-02B Samsung Galaxy S SC-02B for DoCoMo
1.2% Sharp IS03 IS03 for KDDI
1.2% Sharp IS05 IS05 for KDDI
1.0% Sharp A01 INFOBAR A01 for KDDI au iida
0.9% Sharp IS12SH 3D AQUOS PHONE IS12SH for KDDI au
0.9% NEC N-06C Medias WP N-06C for DoCoMo
0.8% NEC N-04C Medias N-04C for DoCoMo
0.8% Sharp IS03 Sharp IS03 for KDDI
0.7% Sharp IS11SH AQUOS PHONE IS11SH for KDDI au
0.6% Sharp SH-12C AQUOS PHONE SH-12C for DoCoMo
0.6% Casio IS11CA G’z One IS11CA for KDDI au
0.6% SonyEricsson SO-01B Xperia SO-01B for DoCoMo
0.6% Toshiba T-01C Regza T-01C for DoCoMo
0.4% Panasonic P-07C P-07C for DoCoMo
0.4% kddi ISW11HT HTC EVO WiMAX ISW11HT for KDDI
0.4% Sharp SH-03C LYNX 3D SH-03C for DoCoMo
0.3% Sharp SH-03C Sharp Lynx 3D SH-03C for DoCoMo
0.3% HTC 001HT Desire HD SoftBank
0.3% Pantech IS06 Pantech Sirius alpha IS06 for KDDI
0.3% Samsung SC-01C GALAXY Tab
0.3% Sharp 003SH Sharp Galapagos 003SH for SoftBank
0.3% Toshiba T-01C Toshiba Regza T-01C for DoCoMo
0.2% Acer A500 Picasso
0.2% Fujitsu F-12C F-12C for DoCoMo
0.2% LG L-07C Optimus bright L-07C for DoCoMo
0.2% Sharp 005SH Sharp Galapagos 005SH for SoftBank
0.2% Sharp 006SH AQUOS PHONE SoftBank 006SH
0.2% Sharp DM009SH DM009SH for Disney Mobile – SoftBank
0.2% SonyEricsson SO-03C Xperia ray SO-03C for DoCoMo
0.1% HTC ISW12HT EVO 3D ISW12HT for KDDI
0.1% LG L-06C Optimus Pad
0.1% Motorola ISW11M PHOTON ISW11M for KDDI
0.1% Sharp 009SH AQUOS PHONE THE PREMIUM 009SH for Softbank
0.1% Sharp IS01
0.1% Sharp SH-13C AQUOS PHONE f SH-13C for DoCoMo
0.1% SonyEricsson LT15i Xperia Arc
0.1% DoCoMo F-07B
0.1% HTC Flyer
0.1% HTC Liberty Aria S31HT for E-Mobile
0.1% HTC PC36100 EVO 4G
0.1% HTC X06HT HTC Desire X06HT for SoftBank
0.1% LG L-04C Optimus chat L-04C for DoCoMo
0.1% Panasonic 003P Sweety 003P for Softbank
0.1% Pantech IS11PT MIRACH IS11PT for KDDI
0.1% RIM BlackBerry 9300 Curve 3G
0.1% Sharp SH-10B Lynx
0.1% Softbank 001DL

Google Analyticsがデバイス情報を取得し始めたと思われるのは2011年4月近辺ですが、ひと月まるまる意味のあるデータがとれてそうな2011年6月(2011/6/1-2011/6/30)のデータも掲載しておきます。

58.5% Apple iPhone
13.5% Apple iPad
5.3% (not set)
3.5% Apple iPod Touch
3.4% Samsung GT-I9000 Galaxy S
1.9% Sharp IS03
1.6% SonyEricsson SO-01B Xperia X10
1.6% HTC S510e
1.4% DoCoMo T-01C Regza
1.2% SonyEricsson SO-01B
0.9% Toshiba IS04 Regza
0.9% DoCoMo SH-03C Lynx 3D
0.9% Softbank 003SH
0.8% DoCoMo Xperia arc
0.6% Toshiba T01C Regzba
0.5% Samsung Galaxy Tab
0.5% Sharp IS-03
0.4% Sharp IS01
0.3% DoCoMo N-04C
0.2% HTC PC36100 EVO 4G
0.1% DoCoMo F-06B
0.1% Google Nexus One
0.1% HTC 001HT Desire HD SoftBank
0.1% HTC DoCoMo 03A
0.1% KDDI IS05
0.1% KDDI IS06
0.1% Sharp SH-03C Lynx
0.1% Softbank DM009SH
0.1% DoCoMo DoCoMo 2.0
0.1% DoCoMo F-02B
0.1% DoCoMo F-02C
0.1% DoCoMo N-07B
0.1% DoCoMo P-03C
0.1% DoCoMo P-06B
0.1% DoCoMo SH-02B
0.1% DoCoMo SH-02C
0.1% DoCoMo SH-05C
0.1% DoCoMo SH-09B
0.1% HTC Desire X06HT
0.1% Mozilla Firefox
0.1% RIM BlackBerry 9000 Bold
0.1% RIM BlackBerry 9300 Curve 3G
0.1% RIM BlackBerry 9700 Bold

2011.12.04

北京で上海小吃にいってきた

Apple主催のiOS Tech Talkの東京開催がなかったので、それをネタにして、初中国だったこともありわざわざ北京までやってきました。

空気が汚いと聞いていたけどこれほどとは…北京の首都空港とやらに近づいたところですでにかなりのモヤに覆われていて、まだ雲厚いなと思ったらいきなり着陸してたほど。広い空港をひたすら歩かされてようやく出てからタクシー乗ろうかと思ったけどせっかくなので地下鉄使って行ってみることにした。ホテルの地図出して「ここに行きたいんだけど」っていったら最寄りの駅の名前を言ってるみたいなんだけどなんて言ってるかまったくわからなくて早速心が折れそうになった。発音「○*#&%」と中国表記「国貿」と英語表記「Guomao」にまったく一致をみる気配がしなかった…

なんだかんだでホテルに到着したら窓から変な建物が見える。
(ちょっと写真見にくいかもしれませんが、右の方の建物)

Google Mapも中国語なのでまったく意味がわからんので調べる気もしません。
そう遠くない昔に建築雑誌で見たような気もしますが。

そんなこんなで遅い昼飯でも食べようと検索してたもののよくわからんので、天安門まで散歩する途中でどこか適当に入ろうと思い、コートを着て窓の外を見るとモヤが明らかに濃くなっている。さっきの写真から20分経ってないです。

ここでこの写真とともに「毒ガスでも発生してるんじゃないですか…」とツイートしようとしたら、エラーでツイートできず。すると、なんとまあさっきまで使えていたTwitterが急に使えなくなってしまった。これが噂のグレートウォールオブチャイナ…?というわけで、わざわざこちらで長々と書いているわけです。このブログ、最近トラフィックが減って減って。

で、しばらく外を歩いてると上海小吃を見つけたわけですよ。

北京の飲食店は、看板は光ってなくて店内は暗くて外から見えないので、あいてるかどうかわからないところが多いです。特に地元のお店は。でこの上海小吃は明らかに地元の店だったわけですが、そこはやっぱり躊躇せずに入らないと男じゃないので入ってみました。フォーメーションを見て、おそらく食券制というか前払い制というのはわかったもののレジのおばちゃん、英語の数字すら通じませんでした。ワンツースリーが通じないのはリビアの雑貨屋以来の体験。

番付表のようにメニューが並んでたので、その字面で選んだのがこの二点。

なんとか麺ってのはまあ無難な選択肢だと思ったのですが、「大混沌」はなんだ…?
(あらためてよくみてみると「さんずいへん」じゃなくて「しょくへん」っぽいですね。饂飩?)
で、出てきたのがこの二点。

左がなんとか麺、右が大混沌。
大混沌はなんのことはない水餃子でした。
ニラたっぷりで美味しかったです。
この二つで22元でしたが、あとで買った星巴克のラテと同じくらいの価格でした。吉牛の並がスタバのラテと同額ってのと感覚近いのかな…?スタバは今日歩いた5キロくらいで4軒見つけました。フリーWifiが通っているところもあったので、困ったときのスタバ頼みもありかも。

結局天安門まで辿りつかずに、建設中のGALAXY SOHOを見て、満員の地下鉄に乗って帰ってきました。

GALAXY SOHOってなんなのか全く知りませんが、多分サムスンのGalaxyとは関係ないと思います。
高級そうだけどSOHOっていうくらいなので日本で言うリージャスみたいなもんなんですかね。
アップル新社屋もびっくりなデザインとスケールでした。

で、帰ってきたらあの変なビルがすっかりモヤの中に埋もれてしまっていました。

スモッグにやられたのかわかりませんが、目が痛いです。
散歩厳禁ですね…

そして中国では危ない単語をつぶやかないようにしないと、Twitterだけ遮断されてしまうかもしれませんので気をつけてください。

2011.11.08

Tポイントカード、持ってません!

いや本当は持ってるんですけど、めんどくさい。

コンビニでさっさと買ってさっさと出たいときにいちいち「Tポイントカードお持ちですか?」と聞かれるとイライラする。数円の得よりもスムーズな買い物体験(とお店のオペレーションを複雑化しない)ことの方が訴求力高いと思うんだけど、世の中はそういうふうに回っていないということのようです。

2011.10.15

Lightning Talk Timer for iOS 2.1:iPhone/iPad用プレゼンタイマー

iOS用無料アプリ「Lightning Talk Timer」のアップデートをリリースしました!
iPadに加えてiPhone/iPod Touchもサポートしています。


主にライトニングトーク(LT、たまにigniteとも)と呼ばれる、5分程度の短いプレゼン用のタイマーです。
iPadではプレゼンターから離れたタイムキーパーの方が持ったり掲げたりした際にもプレゼンター本人が遠くからでもちら見するだけで時間が確認できるようにしています。

前バージョンまではiPad専用でしたが、今バージョンではiPhone/iPod Touchをサポートしました。

  • 視認性の高い残り時間表示
  • 1分以上残っている場合は残りの分数のみ表示。
  • 残り時間が1分を切ると秒数表示。
  • 表示とは別に「Hurry-up Time」として設定した時間以降は画面が赤くなる。
  • 縦横表示可能。
  • Hurry-Up Timeおよび終了時にアラーム音。
  • iPhone、iPod Touch、iPadに対応。

ご意見などございましたらコメントいただければ幸いです。

Lightning Talk Timer for iOS 2.1: Presentation Timer for iPhone and iPad

A free iOS app “Lightning Talk Timer” has been updated to version 2.1, with iPhone/iPod Touch support added!

The app was only for iPad previously, but starting this version, iPhone and iPod Touch are also supported as well.

This app displays remaining minutes (or seconds if under 1 min.) on your iOS device for “lightning talk” (or “ignite talk”) type short presentations. The iPad can be located near presenter, or, since size of the number displayed is large enough, time keeper can hold the iPad for presenter to see during presentation from some distance. This can also be used for full-length presentations.

  • Highly visible, recognizable timer label.
  • Displays only minutes, in very large size.
  • If under one minute, displays only seconds, in very large size, flashing.
  • “Hurry-up time” support with changing background color.
  • Portrait and landscape modes.
  • Alarm sounds.
  • Works with iPhone, iPod Touch and iPad.

If you have any comments, requests or problems, please leave them in the comment!

2011.07.21

Mac OS X Server 10.6をメールサーバとして運用始めたときにしたこと防備録

本日Lion Serverが発表された日に今更Snow Leopardの話を始めるのもなんですが、先週まで待って待ちきれなくなったので社内で運用開始しました。そのために忘備録。

LionにすぐアップグレードするかもしれませんがApp StoreからiTunesアカウントで買わないといけないのはサーバや企業向けクライアントにはあまり都合よくないような気がします。ちょっと高いもののUSBメモリディスク版も出るそうなのでそれを待ってアップグレードですね。

最初にRAID化を忘れずに

Mac Mini Serverなど2つハードディスクを持ったタイプの製品を買った場合は、RAID1(ミラーリング)構成にしておいたほうがよさそうです。私は最初の時点でこれをやらなかったので、結構めんどくさそうな気がしています。そのうちバックアップからの復帰方法の確認も兼ねてやらなければいけなさそうですね…

RAIDはディスクユーティリティで構成することができます。
ディスクユーティリティの画面でハードディスクを選択すると、右側の画面の選択肢(Segmented Controlってやつですね…)に「RAID」が出るはずですので、そこでRAIDの入れ物をつくり、その入れ物に左側のディスクリストからハードディスクをドラッグ&ドロップします。各HDの内容は消去され、インストール可能なボリュームとしてはRAIDのみが出現します。

RAID設定後はOSの再インストール。
Time Machineなどのバックアップからの復帰を試したことがないのでどうなるかわかりません(ですが、情報を見つけたので下記)。正常に復活できなかったときのことも考えて、必要であればやっぱり最初にRAID化しておくべきですね…

Time Machineでは重要なファイルのバックアップができない

Time MachineはMacOS Xファイルシステムベースのソリューションなので、メールデータやDNSレコード、アドレス帳など、Unixベースアプリのデータを全くバックアップしないようです。つまりFinderで見えないデータはスルー。したがってそれらのデータは別の方法でバックアップを取る必要があります。

詳しくはこちら

クライアントをアップグレードすると、管理ツールの互換性なし

管理ツールはクライアントOSのバージョンごとに(名前が同じで)違うアプリを使わなければならないようです。

Lion用、Snow Leopard用、それ以前の歴代のOS用の管理ツールはこちらからダウンロードできます。
Mac OS X Server:管理ツールの互換性情報

メールのスパムフィルタが厳しすぎる件

どうも社外からの何通かのメールの到着が半日遅れたりすることがあり、でも同じ人でも即時到着する場合もあればしない場合もありました。エラーメッセージをみると、

+Jul 20 21:57:36 server postfix/smtpd(1647): NOQUEUE: reject: RCPT from mail.example.com(123.123.123.123): 450 4.7.1 <[自分のメールアドレス]>: Recipient address rejected: Service is unavailable; …

のようなエラーメッセージ(450)が出てきていて、このサーバ上の自分のメールアドレスが、正しくスペルされているにもかかわらずRejectされている??とわけわからない状態に陥っていました。調べてみるとどうもpostfixのgraylistingがデフォルトで有効になっていて、それが怪しい動きをしているようです。Can’t receive mail: Apple Support Communities←このスレでも話題に出てますが、Appleの運用マニュアルにはこのことは書かれていなかったと思います。多分。

追記:この450エラーは実際はrejectではなくてdelayのようなので、相手側サーバが怒らなければ再送され、その際にはきちんと届くようです。

対処方法

- /etc/postfix/main.cf を開く
- smtpd_recipient_restrictionsディレクティブを探す
- 値のリストからcheck_policy_serviceとunix:private/policyを外す
- 終わったら保存してpostfixをリスタート(postfix reload)

これは管理ツールからアクセスできるフィルタとも関係がないようですが、そこまでは不明です。上記の値を削除しても管理ツールの設定項目に変更はありませんでした。

今のところ問題なく運用できていますが、長期的に問題が出る可能性はあります。

# 追記
管理ツールで設定を変更して保存すると、main.cfを勝手に上書きします。
その際、手で直接設定ファイルに加えた変更も消してしまいます!

メーリングリストの更新ですら上書きされますのでうっかりできません。←嘘でした。すみません。
どうもこれを回避する簡単な方法はないようですので、管理ツールで設定変更した場合はもう一度上記設定項目を変更しなおすようにしましょう。さもなくばファイル監視スクリプトでファイル上書きの瞬間に書き換えるような処理が必要です。上級者の方はぜひコメントにスクリプトを残してください m(_ _)m

サーバでウイルスチェックできなかったメールのSubjectに有無を言わさず***UNCHECKED***を挿入される

これは、サーバのSpamAssassinがパスワードつきのzipなどをみつけて中身を見れなかった場合に挿入するヘッダのようでした。事情によりパスワードzipをやりとりすることが多いので、このヘッダを外しました。

対処方法

- /etc/amavisd.conf を開く
- $undecipherable_subject_tag に空白をアサインするか、コメントアウトする
- amavisdを再起動

Apple Software Updateについて

サーバはファイアウォールの後ろにあると思いますが、Apple Software Updateでアップデートを自動的に探しに行く設定にしている場合は、ポート8088番を開けておかないとASUの気が済むまでCPUのリソースを食います。少なくとも4日の間はタイムアウトすることなく絶え間なく稼働していたようです。Core2Duoの片方のコアが常時100%で動作していました。

自動アップデートを切るか、もしくはポート8088を開けておきましょう…

Workgroup Manager

Workgroup Managerで何かに変更を加えるときにはシステムのAdmin権限では足りなくて、「diradmin」という管理者ユーザで編集しなければなりません。

diradminのパスワードを忘れてしまうとえらいことになってしまいます。
というかたった今(2011/11/2)、正しいはずのパスワードでアクセスすると-14000という予期しないエラーがでていて解決の方法がこのページ(http://support.apple.com/kb/HT1194)の方法しかないようで、とても恐ろしい…すくなくとも運用中にどうにかできる代物ではなさそうなのでしばらく静観することにしました。

他にもなにかあったはずなんだけど、忘れた…

2011.07.02

MacOS Xでzipファイルにパスワードを付与

MacOS Xコマンドラインでzipファイルにパスワードを付与できます。
2行で終わりますが、ただひとつの注意点は、コマンドラインのzipコマンドで作成したzipファイルでないとパスワードがうまく付与できないようです(Snow Leopardで確認)。やり方はターミナルを起動して:

zip [zipしたファイル名] [元のファイル名]
↑zipファイルを作成。[zipしたファイル名]がすでに存在する場合はそのファイルに新しいファイルが追加されます。

zipcloak [zipしたファイル名]
↑パスワードを設定します。コマンド実行後にパスワードを訊かれます。

の2行だけ。

2011.04.30

MacOS Xのコマンドラインdsclでユーザ追加やグループ追加

MacOS XのTerminalでdsclというコマンドを使ってコマンドラインでユーザ追加やグループ追加などをおこないます。Snow Leopard(とおそらくLeopard)対応です。

ユーザ追加

dscl . -create /Users/[ユーザ名]

グループ追加

dscl . -create /Groups/[グループ名]

ユーザをグループに追加

dscl . -append /Groups/[グループ名] users [ユーザ名(複数はスペース区切り)]

ユーザをグループから削除

dscl . -delete /Groups/[グループ名] GroupMembership [ユーザ名]

ユーザのホームディレクトリを変更

dscl . -create /Users/[ユーザ名] NFSHomeDirectory [ディレクトリ]

ユーザのパスワードを変更

dscl . -passwd /Users/[ユーザ名] [パスワード]
これは古くからあるpasswdコマンドでも実行できます。

ユーザ/グループの追加や、一般ユーザが権限をもたない動作はsudoで実行する必要があります。実行時は十分に気をつけてください。

dsclコマンドは他にもいろいろできますのでぜひman dsclを。

その他ユーザ関連のコマンド

users 現在システムにログインしているユーザを表示

who am i 自分の名前を表示します

id -p 自分が所属しているグループを表示します

2011.03.31

Lightning Talk Timer:iPadプレゼンタイマー

Update 2011.10.19: iPhone/iPod Touchに対応したバージョン2.1をリリースしました!

Lightning Talk Timer for iOS 2.1:iPhone/iPad用プレゼンタイマー

Update 2011.10.5: バージョン2.0をアップロードしました。アラーム音の追加とUIのブラッシュアップを行いました。
Update 2011.4.4: 本日バージョン1.1をアップロードしました。横方向ビューおよびデバイスの回転をサポートしました。アップルのレビューが順調に終われば7-10日で配布されるはずです。

iPadアプリ「Lightning Talk Timer」をリリースしました。(無料)
ライトニングトーク(LT)と呼ばれる、主に5分程度の短いプレゼン用のタイマーです。
プレゼンターの目の前に置く使い方とともに、プレゼンターから離れたタイムキーパーの方が持ったり掲げたりした際にもプレゼンター本人が遠くからでもちら見するだけで時間が確認できるようにしています。

  • 1分以上残っている場合は残りの分数のみ表示
  • 残り時間が1分を切ると秒数表示
  • 表示とは別に「Hurry-up Time」として設定した時間以降は画面が赤くなる

デフォルトのタイマー設定は5分(Hurry-up Timeは30秒)ですが、設定変更可能です。
開始画面の時間部分をスワイプして時間設定可能です。

iTunes Storeのアイコンでは横向きに持っていますが、実はまだ縦向きにしか対応していません。ダウンロード数が多ければそのうちデバイスの回転にも対応させるようにします。バージョン1.1で横向きとデバイス回転に対応させました。

ご意見ご感想などございましたらコメントでおねがいします。

Lightning Talk Timer: Presentation Timer for iPad

Update 2011.10.19: Version 2.1 is now available! iPhone/iPod Touch support has been added!

Lightning Talk Timer for iOS 2.1: Presentation Timer for iPhone and iPad

Update 2011.10.5: Version 2.0 is waiting for review. Overhauled interface and added alarm sound.
Update 2011.4.4: Version 1.1 has been uploaded for Apple to review. Landscape mode and device rotation support has been added. Should be in store within 7-10 days.

A free iPad app “Lightning Talk Timer” has been released.

This app displays remaining minutes (or seconds if under 1 min.) on your iPad for “lightning talk” type short presentations. The iPad can be located near presenter, or, since size of the number displayed is large enough, time keeper can hold the iPad for presenter to see during presentation from some distance. This can also be used for full-length presentations.

Default presentation length is lightning-talk-standard 5 min. with “hurry-up time” for last 30 seconds. On “hurry-up” background color becomes bright red.

Total presentation time and “hurry-up time” are configurable.

If you have any comments, requests or problems, please leave them in the comment!