<?xml version="1.0" encoding="UTF-8"?><rss version="0.92">
<channel>
	<title>Maesan blog</title>
	<link>http://blog.maesan.jp</link>
	<description>いんたーねっつが好きです。</description>
	<lastBuildDate>Wed, 07 Dec 2011 09:36:49 +0000</lastBuildDate>
	<docs>http://backend.userland.com/rss092</docs>
	<language>ja</language>
	<!-- generator="WordPress/3.1.1" -->

	<item>
		<title>Lionでportが動かなかった</title>
		<description><![CDATA[新しいMacBookPro買ったので移行アシスタントでSnow Leopardのディスクからデータ移したらportで入れたツールまできちんと移っててすごいなぁと感心してたんだけど(Snow Leopard以前の移行アシスタントではportそのものも移せなかったような気がするけど気のせい？) 実際にportを使ってみると port selfupdate とかするとエラーが出ちゃってとりあえず入れてたやつは動いているけど、新規でインストールとか出来ない状態になってました。 なんだろなぁと思いながらもしかしてLion用のXcode入れないとダメなんじゃね？とか思ってApp Storeからインストールしてみたら案の上動いたからとりあえずメモ]]></description>
		<link>http://blog.maesan.jp/1263544.html</link>
			</item>
	<item>
		<title>ロケットネットでもベンチマークしてみた</title>
		<description><![CDATA[何かロケットネットさんがキャンペーンで50GBのディスク容量にも関わらず年間1,000円キャンペーンをやってたので思わず釣られてみたw いやいや、月額じゃなくて年額1,000円ですよ！これは事件です！ まぁ共用のレンタルサーバーということでVPSとも違うのであんまり自由度も無いけど、取りあえずデータのバックアップ用にでも使おうかと思って借りてみました。 念のため（というかこれが目的になってる節もありますがw）いつものようにPHPspeedをやってみたぜ！ ちなみにOSはCentOSっぽいです。 ちょっと前にやった[AWS] EC2マイクロインスタンスのベンチマークしてみたに追記する形でまとめます。 ベンチ結果 EC2 micro EBS EC2 small instance-store さくらVPS 512 ServersMan@VPS Standard ロケットネット Synthetic PHP BenchMark 3,267 1,262 2,507 1,693 3,794 Synthetic MySQL BenchMark 13,748 5,234 11,072 5,168 6,005 Synthetic Read/Write BenchMark 865 792 1,406 901 2,910 Real World PHP BenchMark 2,639 1,320 4,659 3,090 4,493 Real World PHP [...]]]></description>
		<link>http://blog.maesan.jp/1263523.html</link>
			</item>
	<item>
		<title>[MySQL] レプリケーションしてみた</title>
		<description><![CDATA[定期的にmysqldumpとかでバックアップするのもイイんだけど、確実性を求めるならやっぱレプリケーションだろうと思いやってみた。 ちなみに定期的にmysqldumpするのは間違って更新しちゃったり消しちゃった的な時には有用なのでやっとくことに越したことはないです。 MySQLのレプリケーションって？ 簡単に説明すると、バックアップを取りたいサーバー（マスター）とバックアップ先のサーバー（スレーブ）を用意して、マスターが更新される度に同じ内容でスレーブを更新する仕組みです。更新はほぼリアルタイムに行われるため、更新系はマスターで、参照系はスレーブでやるとかそういう負荷分散的な使い方ができます。 スレーブは複数にしたり、そのスレーブをマスターとして更に多段にスレーブをつなげることもできます。 ただ、複数のマスターをバックアップするスレーブとかはできないです。（物理的に1台のサーバーに複数のMySQLを立ち上げてスレーブにするってのはアリですが） 手順 レプリケーションユーザー作成 まずレプリケーション用のユーザーを用意します。 これはスレーブからマスターにアクセスする用に使うユーザーで、スレーブから接続できるように設定する必要があります。 んでセキュリティー的にレプリケーションの権限だけにしたほうがよいです。 マスターサーバーで以下を実行 mysql&#62;GRANT REPLICATION SLAVE ON *.* TO &#8216;hoge_rep&#8217;@'スレーブのIP&#8217; IDENTIFIED BY &#8216;hoge_password&#8217;; ちなみにデフォルトで外部サーバーからmysqlに接続できないように設定されている場合があるので、my.cnfのbind-address設定を確認したほうがよいです。 bind-address = 127.0.0.1 とかなってたら自分自身からしかアクセス出来ませんのでコメントアウトするなりしてください。 マスターサーバーとスレーブサーバーの設定 マスターのバイナリログをスレーブが取得しにきて同期する仕組みなのでバイナリログを有効化擦る必要がありますので以下を追記する（コメントアウトされてたら有効にする） またマスターとスレーブの文字コードが異なるとまずいことになるので明示的に設定したほうがよいです。 特定のDBのみレプリケーションしたい場合はbinlog_do_dbやbinlog_ignore_dbを設定すればおｋです。 [mysqld] server-id=11111 log_bin=/var/log/mysql/mysql-bin.log default-character-set=utf8 binlog_do_db=hogehoge_database [mysql] default-character-set=utf8 server-idは何でも、スレーブとかぶらなければおｋです。 基本的にスレーブ側はserver-idを設定するだけで良いのですが、レプリケーションしたいDBを限定するにはreplicate-do-dbやreplicate-ignore-dbを指定します。ただし、バイナリログを取得してから対象のDBを絞り込むため、ネットワークのトラフィック量は減りません。そのためネットワークの負荷を下げたい場合はマスター側でbinlog-do-dbを設定したほうがよいです。 [mysqld] server-id=22222 default-character-set=utf8 replicate-do-db=hogehoge_database [mysql] default-character-set=utf8 ただし、スレーブをマスターにして更にスレーブをぶら下げたいときは [mysqld] server-id=22222 default-character-set=utf8 replicate-do-db=hogehoge_database log_bin=/var/log/mysql/mysql-bin.log log_slave_updates と書く必要があります。 設定が終わったらmysqlは再起動してください。 [...]]]></description>
		<link>http://blog.maesan.jp/1263512.html</link>
			</item>
	<item>
		<title>[AWS] EBSブートについての覚え書き</title>
		<description><![CDATA[エントリー[AWS] EC2マイクロインスタンスのベンチマークしてみたでも書いてましたが、EC2のマイクロインスタンスはEBSブートのAMIでしか使えません。今までinstance-storeのAMIしか使ったことが無かったので、イメージの保存〜リカバリーの勝手が分からずちょっと自分なりに調べてみたので覚え書きにする。 &#160; そもそもEC2って？ 元々EC2ではEBSってのは無くて、instance-storeのみでサービスしてたらしいです。 AMIイメージから起動して使用する手順 S3に保存されているAMIイメージを選択する クラウド上にイメージを展開する オンメモリでインスタンスが展開される。シャットダウンすると消える 起動しているインスタンスを永続化する手順 インスタンスのイメージを作成する 作成したイメージをS3にアップロードして保存する この辺の流れはシンガポールが追加されたAmazon EC2で遊んでみた[S3編]を参考にしてください。 S3はストレージサービスと言っても普通にマウントして使うようなやり方はできなくて、httpを使ってファイルを送受信するだけのシンプルなサービス（何せSimple Storage Service → S3ですからw）なので、インスタンスからマウントできるようなストレージサービスとしてEBS(Elastic Block Storage)ってのが提供されるようになったようです。 &#160; EBSについて ではS3とは別のEBSって何かってことですが、EBSを使う流れは簡単にいうとこんな感じ EBSの使い方 サイズを指定してボリュームを作成する 作成したボリュームを起動中のインスタンスにアタッチする インスタンスでアタッチしたボリュームをマウントする ココまではイイんだけど、じゃあEBSブートって何よ？ってのが疑問になったわけ。イメージ的にはシャットダウンしても消えないインスタンスが使えるようになるんだって思って、だいたい合ってました。 EBSブートのインスタンスが起動するまでの流れ EBSブート用のAMIから起動する 自動的にEBSボリュームが作成され、イメージが展開される EBSボリュームからインスタンスが起動する 終了するとstop状態でEBSボリュームが残る (設定でterminateにもできるので注意) terminateするとEBSボリュームが消える インスタンスの状態にはrunningとterminateとstopってのがあって、terminateするとデータ全部消えちゃいます。EBSだとterminateしても消えないのかなって思ったけど残念ながら消えます＞＜その代わりEBSにはstopって状態が存在して、stopにしておくとスナップショットをとって保存しておけます。また、stopならそこからもう一度起動することもできます。 &#160; スナップショットからAMIイメージを作成してリカバリーする方法 stopにしておけばデータは消えないのですが、同じインスタンスをもう１個立ち上げたいとか誰かにオレオレAMIを公開したいとかできないし、stopのままおいておくのもなんか気持ち悪いのでどうやってEBSブートAMIを作るのか調べました。 スナップショットはManagement Consoleからでも簡単にできるのですが、AMIイメージの作成はManagement Consoleからはできず、コマンドラインインターフェースを使う必要がありました。 実際の手順はこのページ「EC2においてEBS Snapshotでバックアップを取得しそれをリカバリする方法」がスゴくわかりやすかったです。 インスタンスの情報が以下でスナップショットの名前がsnap-xxxxxxxxとすると Root Device: /dev/sda1 Kernel ID: aki-xxxxxxxx RAM Disk ID: [...]]]></description>
		<link>http://blog.maesan.jp/1263499.html</link>
			</item>
	<item>
		<title>[AWS] EC2マイクロインスタンスのベンチマークしてみた</title>
		<description><![CDATA[いつの間にやらEC2にsmallインスタンスの更に下のmicroインスタンスってのが使えるようになったらしいので、ちょっとやってみた。 他のサービスと比較 まずは似たようなサービスと比較してみます。 AWSの東京リージョンも最近できましたが、前からシンガポール使ってたので、それ基準で。 VPSとEC2は違うものですが、値段的に同じくらいのさくらVPSとServersMan@VPSも表に入れてみた。 &#160; スペック 初期費用(年) 料金/時間 料金/月間 EC2 スモール（オンデマンド） CPU：仮想1コアメモリ：1.7GBストレージ：160GB* 0 $0.095 $68.4 (約5,700円) EC2 マイクロ（オンデマンド） CPU：仮想1コアメモリ：613MBストレージ：従量(EBS) 0 $0.025 $18 (約1,500円) EC2 マイクロ（リザーブ） CPU：仮想1コアメモリ：613MBストレージ：従量(EBS) $54 $0.01 $7.2 (約600円) さくらのVPS512 CPU：仮想2コアメモリ：512MBストレージ：20GB 0 &#8212; 980円 ServersMan@VPSStandard CPU：仮想2コアメモリ：512MBストレージ：30GB 0 &#8212; 980円 *ただしシャットダウンすると跡形も無く消え去ります＞＜ スモールはちょっと頭抜けてますが、マイクロのリザーブは初期費用入れるとだいたい980円くらいなのでさくらVPS 512やServersMan@VPS Standardとほぼぴったりな感じです。 ただ、EC2はデータの転送量に応じた料金がかかりますし、EC2のマイクロインスタンスはEBSブートのみなのでストレージ費用も別途かかります（月$0.1/GB+I/0に応じて） そのためやっぱちょっと金額は他と比べるとかかっちゃいます。ただ、普通のVPSと違ってアクセスが集中した時でもある程度ブーストしてくれるのでその辺はクラウドの強みかなと思います。 ベンチマーク！ では皆さんも大好きなベンチマーク結果をw ベンチマークはAWS, さくらVPS, hetemlでベンチマークしてみたと同じくPHPspeedでやってみました。 アレから時間も経ってるので、スモールとさくらVPSも再計測してみました+ServersMan@VPSも最近使い始めたのでそれもまとめてみました。 &#160; EC2 [...]]]></description>
		<link>http://blog.maesan.jp/1263487.html</link>
			</item>
	<item>
		<title>格安SSL証明書導入の記録</title>
		<description><![CDATA[SNIについてですがwww.maesan.jpの証明書でmaesan.jpも証明できるのでこの記事でSNI対応できてるというのは間違っていると思われます（コメント指摘ありがとうございます！） この記事に書いてある無理矢理な方法ではなく、きちんと対応したバージョンのapacheを使ってください＞＜ いままでSSLの証明書取得とか設定とか、レンタルサーバー側に任せっきりだったのでちょっと勉強がてら格安SSLの「エンジョイSSLダイレクト」って所を使ってmaesan.jpドメインをSSL化してみた。 何ていうか名前からしてアレな感じですが、値段は驚きの1,400円w そんな価格の証明書で大丈夫か？w 手順 サーバーのSSL化は以下の手順で行います。 1.CSRの作成 2.SSL証明書発行申し込み 3.サーバーのSSL設定 CSRの作成〜証明書発行申し込み CSRってのは企業の社会的責任のアレじゃなくて、Certificate Signing Requestの略らしく、簡単にいうと公開鍵＋サーバーの情報が含まれた謎の文字列のことです。 サーバーはDebian使ってますが、基本的な手順は一緒と思われます。 まずは秘密鍵の生成を行います。 #openssl genrsa -out maesan.jp.key 2048 秘密鍵とは公開鍵で暗号化されたものを復号化する鍵のことで、秘密鍵で暗号化されたものは公開鍵で復号化できるんだった気がしますが、それはRSAだけだったかよく分からなくなってきたので、詳しい説明は賢い人に聞いてください！ んで次にCSRの生成を行います。 #openssl req -new -key maesan.jp.key -out maesan.jp.csr Country Name (2 letter code) [AU]:JP State or Province Name (full name) [Some-State]:Kyoto Locality Name (eg, city) []:Kyoto Organization Name (eg, company) [Internet Widgits Pty [...]]]></description>
		<link>http://blog.maesan.jp/1263464.html</link>
			</item>
	<item>
		<title>[cakePHP] floatのフィールドが指数表記になっちゃう</title>
		<description><![CDATA[cakePHPでfloatのフィールドを使った場合、７桁を超える数値を入れたらフォームで指数表記されちゃうのが困る。 これが こうなる 仕方ないのでviewで $this->data["Article"]["point"] = sprintf('%.2f', $this->data["Article"]["point"]); って書いたらいけるかと思ったらいけなかった。 よくよく考えたらviewをレンダリングする前にformが出来上がってんじゃなかったっけ？w ってことに気付いて素直にcontrollerに書いたら期待通りに動いた。 function edit($id = null) { if (!$id &#038;&#038; empty($this->data)) { $this->Session->setFlash(__('Invalid article', true)); $this->redirect(array('action' => 'index')); } if (!empty($this->data)) { if ($this->Article->save($this->data)) { $this->Session->setFlash(__('The article has been saved', true)); $this->redirect(array('action' => 'index')); } else { $this->Session->setFlash(__('The article could not be saved. Please, try again.', [...]]]></description>
		<link>http://blog.maesan.jp/1263454.html</link>
			</item>
	<item>
		<title>[cakePHP] 1.3でForm-&gt;selectのパラメータ変わったのか</title>
		<description><![CDATA[今までだと、formヘルパーを使って空白を出さないselectは以下の様に書いてました echo $this->Form->select('hoge_id', $hoges, null, null, false); で1.3でこれやるとダメで、ソース見たらこうやるのが正しいっぽい echo $this->Form->select('hoge_id', $hoges, null, array('empty' => false)); だれかCookbookのフォームヘルパーのselectのページを修正してください＞＜ http://book.cakephp.org/ja#!/ja/view/1430/select ↑英語版を見るとそっちは正しいみたいだった！]]></description>
		<link>http://blog.maesan.jp/1263452.html</link>
			</item>
	<item>
		<title>[Python] メール送信</title>
		<description><![CDATA[Pythonでメールを送信したかったのでやってみた 基本的には以下のページのコピペなのですが、1点引っかかったのでメモ Pythonでメールを送信したい人のためのサンプル集 #!/usr/bin/env python # encoding: utf-8 import smtplib from email.MIMEText import MIMEText from email.Utils import formatdate def SendMail(to_addr, subject, body, from_addr=None): if from_addr is None: from_addr = "hoge@maesan.jp" msg = MIMEText(body) msg["Subject"] = subject msg["From"] = from_addr msg["To"] = to_addr msg["Date"] = formatdate() s = smtplib.SMTP() s.sendmail(from_addr, [to_addr], msg.as_string()) s.close() if __name__ == [...]]]></description>
		<link>http://blog.maesan.jp/1263445.html</link>
			</item>
	<item>
		<title>jQueryで.postしようと思ったらfileはpostできない件</title>
		<description><![CDATA[今更ながらjQueryにハマってまして、今日も画面遷移なしで画像がアップロードできるスクリプトを書こうとしたのですが、Javascriptではfileをpostできないことに気付いた＞＜ で、画面遷移なしでファイルをアップロードしようと思ったらiframeを使ったりするらしい。Ajaxではないけど、Ajaxっぽい動きですな。 ということでサクっと書いてみた アップロード用ページ upload.html &#60;html&#62; &#60;head&#62; &#60;style&#62; #dummy{ /* display:none; するとSafariだとおかしくなるらしい？ */ border:0px; width:0px; height:0px; } #image{ display:none; max-width:480px; } &#60;/style&#62; &#60;/head&#62; &#60;body&#62; &#60;iframe name="dummy" id="dummy"&#62;&#60;/iframe&#62; &#60;div id="message"&#62;&#60;/div&#62; &#60;img id="image"&#62;&#60;/div&#62; &#60;form action="upload.php" method="post" target="dummy" enctype="multipart/form-data"&#62; &#60;input type="file" name="img" /&#62; &#60;input type="submit" value="Upload"&#62; &#60;/form&#62; &#60;/body&#62; &#60;/html&#62; 注意点はiframeにdisplay:none;するとSafariだとおかしくなるらしいんだけど、ウチの環境では別にどっちでも行けた(Mac OSX 10.6.6, Safari 5.0.3) http://groundwalker.com/blog/2007/02/file_uploader_and_safari.html ファイルアップロード処理とか upload.php &#60;?php [...]]]></description>
		<link>http://blog.maesan.jp/1263439.html</link>
			</item>
</channel>
</rss>

