<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-9016404448327222924</id><updated>2014-10-31T13:25:14.573+09:00</updated><category term="rails"/><category term="google"/><category term="server"/><category term="centos"/><category term="gae"/><category term="blogger"/><category term="gmail"/><category term="javascript"/><category term="android"/><category term="api"/><category term="development"/><category term="firefox"/><category term="greasemonkey"/><category term="mysql"/><category term="pc"/><category term="vba"/><category term="apache"/><category term="chrome"/><category term="gadget"/><category term="gaeo"/><category term="webobjects"/><category term="windows"/><category term="wordpress"/><category term="GDD07 GDD07JP"/><category term="GDD08"/><category term="GDD08JP"/><category term="GDD09"/><category term="GDD09JP"/><category term="air"/><category term="apcupsd"/><category term="appsscript"/><category term="chart"/><category term="excel"/><category term="fon"/><category term="gdd2010jp"/><category term="googleearth"/><category term="googlemaps"/><category term="heatmap"/><category term="igoogle"/><category term="java"/><category term="labs"/><category term="maps"/><category term="openid"/><category term="ruby"/><category term="ups"/><category term="vista"/><category term="vsftpd"/><category term="webservice"/><category term="zabbix"/><title type='text'>守破離でいこう!!</title><subtitle type='html'>プログラムについてあれこれ</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://ishikawa.r-stone.net/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9016404448327222924/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://ishikawa.r-stone.net/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/9016404448327222924/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Naoki Ishikawa</name><uri>https://plus.google.com/100388846279954485067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-PV5mViRwW2I/AAAAAAAAAAI/AAAAAAAAAAA/H-3RmFHJOL8/s512-c/photo.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>88</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-9016404448327222924.post-7070948664444256384</id><published>2012-05-08T23:55:00.000+09:00</published><updated>2012-05-08T23:56:31.588+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="centos"/><category scheme="http://www.blogger.com/atom/ns#" term="server"/><title type='text'>さくらVPS 新プランへの移行</title><content type='html'>&lt;br /&gt;
&lt;p&gt;先日（といっても結構日が経ってしまいましたが）、さくらVPS に「絶対お得な新プラン」が登場しましたね。&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://vps.sakura.ad.jp/news/sakurainfo/newsentry.php?id=628&quot; title=&quot;「さくらのVPS」ご利用中のお客様の新プラン乗り換え優遇施策の実施について（4/5追記）&quot; target=&quot;_blank&quot;&gt;「さくらのVPS」ご利用中のお客様の新プラン乗り換え優遇施策の実施について（4/5追記）&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://vps.sakura.ad.jp/news/sakurainfo/newsentry.php?id=644&quot; title=&quot;「さくらのVPS」ご利用中のお客様の新プラン乗り換え優遇施策の実施期間延長について&quot; target=&quot;_blank&quot;&gt;「さくらのVPS」ご利用中のお客様の新プラン乗り換え優遇施策の実施期間延長について&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;開始当初は申し込みが殺到し、一次申込み停止になりましたが現在は安定しているようです。&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;というわけで、旧プラン の 「さくらのVPS 512」を、同じ金額でグレードアップした「さくらのVPS 1G」に移行してみました。&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;新プランでは CentOS 6 がインストールされています。新OSも気になりますが、ひとまずココは旧プランの CentOS 5 の環境をそのまま移行することにしました。&lt;/p&gt;&lt;br /&gt;
&lt;h3&gt;作業の流れ&lt;/h3&gt;&lt;br /&gt;
&lt;p&gt;作業の流れは大体下記のような感じになります。&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;&lt;ol&gt;&lt;li&gt;DNS の TTL を変更&lt;/li&gt;
&lt;li&gt;OS再インストール&lt;/li&gt;
&lt;li&gt;データ転送&lt;/li&gt;
&lt;li&gt;調整&lt;/li&gt;
&lt;li&gt;動作確認&lt;/li&gt;
&lt;li&gt;再データ転送&lt;/li&gt;
&lt;li&gt;DNS の A レコード を変更&lt;/li&gt;
&lt;li&gt;後始末&lt;/li&gt;
&lt;/ol&gt;&lt;/p&gt;&lt;br /&gt;
&lt;h2&gt;前提条件・事前準備&lt;/h2&gt;&lt;br /&gt;
&lt;p&gt;ここで紹介する方法は、まるごと移行してしまう方法ですので、下記の前提条件と、事前準備を実施します。&lt;/p&gt;&lt;br /&gt;
&lt;h3&gt;前提条件&lt;/h3&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;両サーバとも同じOS及びバージョンで行うこと（ここでは CentOS 5）&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;h3&gt;事前準備 &lt;small&gt;作業時間：15分程度&lt;/small&gt;&lt;/h3&gt;&lt;br /&gt;
&lt;h4&gt;DNS の TTL を変更&lt;/h4&gt;&lt;br /&gt;
&lt;p&gt;サーバ切り替えが即座に反映されるようにするため、DNS の TTL を短め（60など）に設定しておきます。&lt;/p&gt;&lt;p&gt;この DNS の設定変更タイミングは、現在設定されている TTL を目安に考えます。&lt;br /&gt;
&lt;br /&gt;
例えば、現在の TTL が 3600 だとすると、3600秒前（1時間前）までに DNS の変更をしておくのが望ましいです。&lt;/p&gt;&lt;br /&gt;
&lt;h4&gt;OS再インストール&lt;/h4&gt;&lt;br /&gt;
&lt;p&gt;両サーバとも同じOS及びバージョンで行うことが条件なので、まずは &lt;strong&gt;VPS コントロールパネル&lt;/strong&gt; から &lt;strong&gt;OS再インストール&lt;/strong&gt; を実施します。&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;カスタムOSインストール&lt;/strong&gt; から、 &lt;strong&gt;CentOS 5 x86_64&lt;/strong&gt; を選択して OS 再インストールを実行します。&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;カスタムOSインストール は、ブラウザの Java アプレット上から手動で実施します。公式サポートマニュアルを参考に進めてください。&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;なお、カスタムOSインストール実行中に表示される、ホスト名やIPアドレスなどが記載された画面は、後ほどまで確認するので閉じないようにします。念のためメモ帳などにコピペしておくのがいいです。&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;&lt;a href=&quot;http://support.sakura.ad.jp/manual/vps/mainte/custom.html&quot; title=&quot;カスタムOSインストールガイド｜さくらのVPS｜さくらインターネット公式サポートサイト&quot; target=&quot;_blank&quot;&gt;カスタムOSインストールガイド｜さくらのVPS｜さくらインターネット公式サポートサイト&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;再インストールが完了したら、VPS ホームよりサーバを起動しておきます。&lt;/p&gt;&lt;br /&gt;
&lt;h2&gt;移行作業&lt;/h2&gt;&lt;br /&gt;
&lt;h3&gt;データ転送 &lt;small&gt;作業時間：約1G の転送で30分程度&lt;/small&gt;&lt;/h3&gt;&lt;br /&gt;
&lt;p&gt;サーバの再インストールが完了したら、いよいよデータの移行です。&lt;br /&gt;
&lt;br /&gt;
データの移行は、&lt;strong&gt;旧サーバ&lt;/strong&gt; の root ユーザから下記のコマンドで一括転送します。&lt;/p&gt;&lt;p&gt;&lt;small&gt;[new_server_ip] は新サーバの IP アドレスに置き換えてください&lt;/small&gt;&lt;/p&gt;&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;
# rsync -rtlzvogpHAX --exclude /boot/ --exclude /dev/ --exclude /proc/ --exclude /sys/ --exclude /var/run/ --exclude /var/lock/ --exclude ifcfg* --exclude ssh_host_* --exclude fstab --block-size=4096 -e ssh / new_server_ip:/
&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;p&gt;コマンドの意味やオプションなどについては、下記を参考にしてください。&lt;/p&gt;&lt;br /&gt;
&lt;dl&gt;&lt;dt&gt;オプション&lt;/dt&gt;
&lt;dd&gt;動作内容&lt;/dd&gt;
&lt;dt&gt;-r&lt;/dt&gt;
&lt;dd&gt;ディレクトリ内容を再帰的にコピーします&lt;/dd&gt;
&lt;dt&gt;-t&lt;/dt&gt;
&lt;dd&gt;更新日時を保持します&lt;/dd&gt;
&lt;dt&gt;-l&lt;/dt&gt;
&lt;dd&gt;ソフトリンクを保持します&lt;/dd&gt;
&lt;dt&gt;-z&lt;/dt&gt;
&lt;dd&gt;転送時に圧縮します&lt;/dd&gt;
&lt;dt&gt;-v&lt;/dt&gt;
&lt;dd&gt;処理状況を表示します&lt;/dd&gt;
&lt;dt&gt;-o&lt;/dt&gt;
&lt;dd&gt;所有者を保持します&lt;/dd&gt;
&lt;dt&gt;-g&lt;/dt&gt;
&lt;dd&gt;グループを保持します&lt;/dd&gt;
&lt;dt&gt;-p&lt;/dt&gt;
&lt;dd&gt;パーミッションを保持します&lt;/dd&gt;
&lt;dt&gt;-H&lt;/dt&gt;
&lt;dd&gt;ハードリンクを保持します&lt;/dd&gt;
&lt;dt&gt;-A&lt;/dt&gt;
&lt;dd&gt;ACLを保持します&lt;/dd&gt;
&lt;dt&gt;-X&lt;/dt&gt;
&lt;dd&gt;拡張パーミッションを保持します&lt;/dd&gt;
&lt;dt&gt;--exclude&lt;/dt&gt;
&lt;dd&gt;除外するファイルの名前を指定します&lt;/dd&gt;
&lt;dt&gt;--block-size=&lt;/dt&gt;
&lt;dd&gt;チェックサムをとる際のブロックサイズを指定します&lt;/dd&gt;
&lt;dt&gt;-e ssh&lt;/dt&gt;
&lt;dd&gt;ssh経由でコピーします&lt;/dd&gt; &lt;/dl&gt;&lt;br /&gt;
&lt;p&gt;転送が完了したら、VPS コントロールパネルよりサーバを再起動します。&lt;/p&gt;&lt;br /&gt;
&lt;h3&gt;新サーバのネットワーク設定 &lt;small&gt;作業時間：5分程度&lt;/small&gt;&lt;/h3&gt;&lt;br /&gt;
&lt;h4&gt;GATEWAY の追記&lt;/h4&gt;&lt;br /&gt;
&lt;p&gt;再起動後、SSH で接続できない場合は、VPS コントロールパネルの &lt;strong&gt;リモートコンソール&lt;/strong&gt; から下記のようにネットワークの設定を修正します。&lt;br /&gt;
&lt;br /&gt;
GATEWAY の設定を追記します。&lt;/p&gt;&lt;p&gt;&lt;small&gt;[GATEWAY=***.***.***.***] は新サーバの ゲートウェイ アドレスに置き換えてください&lt;/small&gt;&lt;/p&gt;&lt;br /&gt;
&lt;span&gt;/etc/sysconfig/network-scripts/ifcfg-eth0&lt;/span&gt;&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;
# vi /etc/sysconfig/network-scripts/ifcfg-eth0

# Intel Corporation 82540EM Gigabit Ethernet Controller
DEVICE=eth0
BOOTPROTO=static
DHCPCLASS=
HWADDR=**:**:**:**:**:**
IPADDR=***.***.***.***
NETMASK=255.255.254.0
ONBOOT=yes
GATEWAY=***.***.***.***

# /etc/init.d/network restart
&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;h4&gt;SSH の許可&lt;/h4&gt;&lt;br /&gt;
&lt;p&gt;旧サーバの SSH の設定は、外部からの接続は 鍵認証のみ root ログイン不可 になっているので、一時的にこれを変更します。&lt;/p&gt;&lt;br /&gt;
&lt;span&gt;/etc/ssh/sshd_config&lt;/span&gt;&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;
#vi /etc/ssh/sshd_config

PermitRootLogin yes
PasswordAuthentication yes

&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;h4&gt;/etc/hosts.allow&lt;/h4&gt;&lt;br /&gt;
&lt;p&gt;/etc/hosts.allow, deny で接続制限をしている場合は、こちらも旧サーバを許可する。&lt;/p&gt;&lt;br /&gt;
&lt;span&gt;/etc/hosts.allow&lt;/span&gt;&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;
# vi /etc/hosts.allow

sshd: 旧サーバのIPアドレス
&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;h3&gt;IP アドレスに依存する設定の修正 &lt;small&gt;作業時間：それぞれ&lt;/small&gt;&lt;/h3&gt;&lt;br /&gt;
&lt;p&gt;ネットワークの設定が完了したら、IP アドレスに依存する設定などを修正していきます。&lt;br /&gt;
&lt;br /&gt;
旧サーバのユーザ情報などそのまま移行しているので、SSH クライアント の設定も IP アドレスの変更だけで OK でした。&lt;/p&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;NameVirtualHost での Apache 設定&lt;/li&gt;
&lt;li&gt;MySQL の pid 置場&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;span&gt;バックアップ無し&lt;/span&gt;&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;
$ sudo find /etc/httpd/conf.d -type f -name &#39;*.conf&#39; | xargs sudo perl -i -pe &#39;s/xxx\.xxx\.xxx\.xxx/xxx\.xxx\.xxx\.xxx/g&#39;
$ sudo find /var/www/vhosts -type f -name &#39;*.conf&#39; | xargs sudo perl -i -pe &#39;s/xxx\.xxx\.xxx\.xxx/xxx\.xxx\.xxx\.xxx/g&#39;
&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;span&gt;バックアップをとっておく場合（*.bak というバックアップファイルが作成されます）&lt;/span&gt;&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;
$ sudo find /etc/httpd/conf.d -type f -name &#39;*.conf&#39; | xargs sudo perl -i.bak -pe &#39;s/xxx\.xxx\.xxx\.xxx/xxx\.xxx\.xxx\.xxx/g&#39;
$ sudo find /var/www/vhosts -type f -name &#39;*.conf&#39; | xargs sudo perl -i.bak -pe &#39;s/xxx\.xxx\.xxx\.xxx/xxx\.xxx\.xxx\.xxx/g&#39;
&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;span&gt;/var/run 以下は転送から除外しているので、/var/rub/mysqld を作成しておく&lt;/span&gt;&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;
$ sudo mkdir /var/run/mysqld
$ sudo chgrp mysql /var/run/mysqld/
$ sudo chmod g+w /var/run/mysqld/
$ sudo /etc/rc.d/init.d/mysqld start
&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;h3&gt;動作確認&lt;/h3&gt;&lt;br /&gt;
&lt;p&gt;ここまでで既に殆どの環境が移行できているはずなので、自分のマシンの hosts を設定して動作を確認してみます。&lt;/p&gt;&lt;p&gt;なお、 hosts ファイルは管理者権限で起動したメモ帳などで編集します。&lt;/p&gt;&lt;p&gt;スタートメニュー ＞ 全てのプログラム ＞ アクセサリ ＞ メモ帳　から右クリックで管理者として実行。その後メニューの開くからファイルを開きます。&lt;/p&gt;&lt;small&gt;C:\Windows\System32\drivers\etc\hosts&lt;/small&gt;&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;
新サーバIPアドレス   ドメイン名
xxx.xxx.xxx.xxx   www.test.com
&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;h3&gt;再度データ転送&lt;/h3&gt;&lt;br /&gt;
&lt;p&gt;確認作業をしている間などの差分ファイルを転送します。&lt;br /&gt;
&lt;br /&gt;
転送中にファイルが変更されないように、旧サーバの主要なサービスは予め停止しておきます。&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;サービスを停止している間は、外部からの閲覧もダウンしている状態になります。&lt;/p&gt;&lt;br /&gt;
&lt;span&gt;コマンドは最初の転送と同じですが、旧サーバで SSH のポートを変更している場合はポートの指定を入れます。&lt;/span&gt;&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;
# /etc/init.d/httpd stop
# /etc/init.d/mysqld stop

# rsync -rtlzvogpHAX --exclude /boot/ --exclude /dev/ --exclude /proc/ --exclude /sys/ --exclude /var/run/ --exclude /var/lock/ --exclude ifcfg* --exclude ssh_host_* --exclude fstab --block-size=4096 -e ssh / new_server_ip:/

ポートを指定する場合
# rsync -rtlzvogpHAX --exclude /boot/ --exclude /dev/ --exclude /proc/ --exclude /sys/ --exclude /var/run/ --exclude /var/lock/ --exclude ifcfg* --exclude ssh_host_* --exclude fstab --block-size=4096 -e &quot;ssh -p 10022&quot; / new_server_ip:/
&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;h3&gt;IP アドレスに依存する設定の修正&lt;/h3&gt;&lt;br /&gt;
&lt;p&gt;転送で修正ファイルが上書きされてますので、上記の設定を再度実施します。&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;DNS の A レコードを変更&lt;/h3&gt;&lt;br /&gt;
&lt;p&gt;いよいよです。&lt;br /&gt;
&lt;br /&gt;
DNS の A レコードを変更することで、外部からの接続が新サーバに振られることになります。&lt;/p&gt;&lt;p&gt;各ネームサービスの指示に従って変更してください。&lt;/p&gt;&lt;p&gt;TTL の設定を変更した場合は、ついでに戻しておきましょう。&lt;/p&gt;&lt;br /&gt;
&lt;h2&gt;移行後&lt;/h2&gt;&lt;br /&gt;
&lt;h3&gt;SSH の設定などを元に戻す&lt;/h3&gt;&lt;br /&gt;
&lt;p&gt;SSH の設定など、一時的に許可した設定を元に戻すのを忘れずに。&lt;/p&gt;&lt;br /&gt;
&lt;h2&gt;お疲れ様でした！&lt;/h2&gt;&lt;br /&gt;
&lt;p&gt;これで無事に移行が終わったかと思います。お疲れ様でした。&lt;/p&gt;&lt;p&gt;さくらのVPS 新プラン乗り換え優遇施策 は、2012年5月20日（日）までなので、まだ申し込みしていない方はお早めに！&lt;/p&gt;&lt;br /&gt;
&lt;hr /&gt;&lt;br /&gt;
&lt;p&gt;参考サイト：&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://www.drk7.jp/MT/archives/001862.html&quot; title=&quot;さくら VPS 旧プランから 2G 新プランへの移行手順 :: drk7jp&quot; target=&quot;_blank&quot;&gt;さくら VPS 旧プランから 2G 新プランへの移行手順 :: drk7jp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://tanaka.sakura.ad.jp/2011/03/sakura-vps-upgrade.html&quot; title=&quot;さくらのVPSで上位プランに移行するための手順 - さくらインターネット創業日記&quot; target=&quot;_blank&quot;&gt;さくらのVPSで上位プランに移行するための手順 - さくらインターネット創業日記&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://ishikawa.r-stone.net/feeds/7070948664444256384/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9016404448327222924&amp;postID=7070948664444256384&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9016404448327222924/posts/default/7070948664444256384'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9016404448327222924/posts/default/7070948664444256384'/><link rel='alternate' type='text/html' href='http://ishikawa.r-stone.net/2012/05/vps.html' title='さくらVPS 新プランへの移行'/><author><name>Naoki Ishikawa</name><uri>https://plus.google.com/100388846279954485067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-PV5mViRwW2I/AAAAAAAAAAI/AAAAAAAAAAA/H-3RmFHJOL8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9016404448327222924.post-1738312701435446769</id><published>2011-11-04T22:00:00.000+09:00</published><updated>2011-11-04T22:00:03.895+09:00</updated><title type='text'>#gdd11jp Google Developer Day</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://1.bp.blogspot.com/-gCoiRybnOdo/TrPUtEIPq2I/AAAAAAAAA20/gkAU9ENJTwg/s1600/FxCam_1320106089200.jpg&quot; imageanchor=&quot;1&quot; style=&quot;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;214&quot; width=&quot;320&quot; src=&quot;http://1.bp.blogspot.com/-gCoiRybnOdo/TrPUtEIPq2I/AAAAAAAAA20/gkAU9ENJTwg/s320/FxCam_1320106089200.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;p&gt;11月1日、パシフィコ横浜で &lt;a href=&quot;http://www.google.com/intl/ja/events/developerday/2011/tokyo/agenda.html&quot; title=&quot;Google Developer Day 2011&quot; target=&quot;_blank&quot;&gt;Google Developer Day 2011&lt;/a&gt; が開催されました。&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;毎年参加させていただいており、今年もなんとか参加してきました。&lt;/p&gt;&lt;br /&gt;
&lt;h3&gt;サプライズ&lt;/h3&gt;&lt;br /&gt;
&lt;p&gt;結果的にはとても楽しかった GDD。セッションに迷うのは毎度のことですが、今年は色々「しかけ」が用意されており、楽しめるイベントになっていました。&lt;/p&gt;&lt;p&gt;ただ、恒例？のサプライズ発表は特になかったので、ちょっと残念。&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;全体を通して、やっぱり HTML5(Chrome) と Android(Ice Cream Sandwich) に力入ってましたね。&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;今回参加したセッションは次の通り。&lt;/p&gt;&lt;br /&gt;
&lt;ul&gt; &lt;li&gt;Android の最新情報&lt;/li&gt;
 &lt;li&gt;Google+ Hangout アプリを作ろう&lt;/li&gt;
 &lt;li&gt;今までにないサイトを作る：HTML5 による最新ウェブアプリ&lt;/li&gt;
 &lt;li&gt;Google Apps : 新しい API、新機能、ベストプラクティス&lt;/li&gt;
 &lt;li&gt;Google のエンジニアの日常&lt;/li&gt;
 &lt;li&gt;イグナイト ( ライトニングトーク )&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;p&gt;改めて見ると、新サービス関連に偏ってます。&lt;/p&gt;&lt;p&gt;セッションの内容も、サービスの説明から入る分、あまりコアな情報はありませんでした。&lt;br /&gt;&lt;br /&gt;
既存サービスのセッションのほうが割りと濃い内容だったみたいです。&lt;/p&gt;&lt;br /&gt;
&lt;h4&gt;Android の最新情報&lt;/h4&gt;&lt;br /&gt;
&lt;p&gt;気になる Android 4.0 。Android 4.0 からは、テレビ、タブレット、スマートフォンなど、すべてのデバイスをカバーする。&lt;br /&gt;&lt;br /&gt;
なので、デザインはより慎重に行う必要がある。画面サイズの管理も。&lt;/p&gt;&lt;p&gt;ソーシャルもより重要に。Google + が前面に出ています。インテントを利用した設計がおすすめ。&lt;/p&gt;&lt;p&gt;思った以上に、NFC の Android Beam は面白いですね。今開いているWebページが、相手の端末にも表示されるデモは素晴らしかったです。&lt;/p&gt;&lt;p&gt;それと、Wifi Direct ってのも気になります。端末同士がダイレクトにネットワークでつながるということで、面白い使い方ができそうですね。&lt;/p&gt;&lt;br /&gt;
&lt;h4&gt;Google+ Hangout アプリを作ろう&lt;/h4&gt;&lt;br /&gt;
&lt;p&gt;違うセッションを予定していたけど、基調講演で &lt;a href=&quot;https://developers.google.com/+/hangouts/&quot; title=&quot;Google+ Hangouts API&quot; target=&quot;_blank&quot;&gt;Hangout&lt;/a&gt; が気になったので続きを聞いてみた。&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;基本的に、iFrame のガジェットで構築。ビデオカンファレンスのようなものを手軽に構築できそう。&lt;/p&gt;&lt;p&gt;デモは、チャットルームのような Hangout で、招待された人とビデオチャットしながら、参加者のロボットアバターがアプリ内で動く。というもの。&lt;br /&gt;&lt;br /&gt;
データはひとつの Shared データなので、参加者全員にリアルタイムで更新される。&lt;/p&gt;&lt;p&gt;面白そうだけど、どんな使い道があるか？今後に期待です。&lt;/p&gt;&lt;br /&gt;
&lt;h4&gt;今までにないサイトを作る：HTML5 による最新ウェブアプリ&lt;/h4&gt;&lt;br /&gt;
&lt;p&gt;HTML5 のフルスペックである Chrome ならこんなことまでできる！という内容でした。&lt;/p&gt;&lt;p&gt;これからのWebアプリは、ビジュアルも重要だと。&lt;/p&gt;&lt;p&gt;HistoryAPI でシングルページだけど、URLが変わってブラウザの戻るも使える。GitHub みたいなページ遷移。たしかにコレ重要ですね。&lt;/p&gt;&lt;p&gt;FilesystemAPI では、ネイティブとの連携でファイルのドラッグドロップなど、ネイティブファイルを操作できる。&lt;/p&gt;&lt;p&gt;古いブラウザには、&lt;a href=&quot;https://github.com/Modernizr/Modernizr/wiki/HTML5-Cross-Browser-Polyfills&quot; title=&quot;HTML5 Cross Browser Polyfills - GitHub&quot; target=&quot;_blank&quot;&gt;Polyfills&lt;/a&gt; や &lt;a href=&quot;http://www.google.com/chromeframe?hl=ja&amp;quickenable=true&quot; title=&quot;Google Chrome Frame&quot; target=&quot;_blank&quot;&gt;Chrome Frame&lt;/a&gt; を使うのがいいみたい。&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;ライブラリは、&lt;a href=&quot;http://westcoastlogic.com/lawnchair/&quot; title=&quot;Lawnchair: Simple JSON Storage&quot; target=&quot;_blank&quot;&gt;lawnchair&lt;/a&gt; , &lt;a href=&quot;http://html5boilerplate.com/&quot; title=&quot;HTML5 Boilerplate - A rock-solid default template for HTML5 awesome.&quot; target=&quot;_blank&quot;&gt;Boilerplate&lt;/a&gt; , &lt;a href=&quot;http://www.modernizr.com/&quot; title=&quot;Modernizr&quot; target=&quot;_blank&quot;&gt;Modernizr&lt;/a&gt; を使うといい。&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;これらが ブラウザ標準で利用できるのが素晴らしいですね。（まだまだ対応していないブラウザも多いですが）&lt;/p&gt;&lt;br /&gt;
&lt;h4&gt;Google Apps : 新しい API、新機能、ベストプラクティス&lt;/h4&gt;&lt;br /&gt;
&lt;p&gt;DevQuiz での Apps Script が面白かったのでもう少し詳細を期待していましたが、やっぱり、そもそも Apps Script は知名度が低く、触り程度の紹介でした。&lt;br /&gt;&lt;br /&gt;
しかし、UI Builder や PickerAPI などビジュアル的にも Google UI と統一されたものが揃ってきて、かなり使えるという印象でした。&lt;br /&gt;&lt;br /&gt;
マーケットプレイスでの公開も拡充してきており、Apps Script は今後本気で勉強したほうがよさそうです。&lt;/p&gt;&lt;p&gt;Google Data API については、これまでの複雑なものをシンプルにすべく [HTTPS] [OAuth2] [JSON] で統一とのこと。これは嬉しいですね。&lt;br /&gt;&lt;br /&gt;
API の確認には、&lt;a href=&quot;https://code.google.com/apis/explorer/&quot; title=&quot;Google APIs Explorer&quot; target=&quot;_blank&quot;&gt;Google APIs Explorer&lt;/a&gt; が便利。&lt;/p&gt;&lt;br /&gt;
&lt;h4&gt;Google のエンジニアの日常&lt;/h4&gt;&lt;br /&gt;
&lt;p&gt;あの有名な yugui さんが登場とのことで、観てきました。&lt;/p&gt;&lt;p&gt;オープンソースな人から見た Google というのは面白かった。&lt;br /&gt;&lt;br /&gt;
オープンソースの世界では当たり前の光景が、Google という巨大な組織でも適用されているのがすごいと。&lt;/p&gt;&lt;p&gt;エンジニア主導、ドキュメント、コードレビュー、ひとつのリポジトリなどは、初めての GDD に聞いた時と変わっていないようで、その徹底ぶりが Google の強みだと改めて感じました。&lt;/p&gt;&lt;br /&gt;
&lt;h4&gt;イグナイト ( ライトニングトーク )&lt;/h4&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://1.bp.blogspot.com/-QiJkc1xDDLM/TrPU9xfAoeI/AAAAAAAAA3A/ZXQ7omynjXg/s1600/FxCam_1320143981800.jpg&quot; imageanchor=&quot;1&quot; style=&quot;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;214&quot; width=&quot;320&quot; src=&quot;http://1.bp.blogspot.com/-QiJkc1xDDLM/TrPU9xfAoeI/AAAAAAAAA3A/ZXQ7omynjXg/s320/FxCam_1320143981800.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;p&gt;最後のセッションは、おなじみ？Google スタッフによるダンス！合計30時間も練習したんだとか。みなさん、お上手でした。&lt;/p&gt;&lt;p&gt;Chrome の WebAudio と Node.js のデモはすごかったですね。基調講演でも WebAudio が紹介されていて、Javascript と HTML5 で音まで操作できるみたい。昔の MIDI を奏でるサイトをパワーアップできそうです。&lt;/p&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://1.bp.blogspot.com/-dHrmLkbTC3Q/TrPVK6voDcI/AAAAAAAAA3M/QW-Dx6E3nNg/s1600/FxCam_1320157754499.jpg&quot; imageanchor=&quot;1&quot; style=&quot;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;214&quot; width=&quot;320&quot; src=&quot;http://1.bp.blogspot.com/-dHrmLkbTC3Q/TrPVK6voDcI/AAAAAAAAA3M/QW-Dx6E3nNg/s320/FxCam_1320157754499.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;p&gt;初めにもらった、３Dメガネ。結局自分は使わなかったけど、どうやら Youtube が 3D に対応した動画があるようで、帰宅後我が家は大興奮でした。&lt;br /&gt;&lt;br /&gt;
緑と赤のあのメガネをお持ちの方は、是非御覧ください。&lt;/p&gt;&lt;br /&gt;
&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;http://www.youtube.com/embed/0U0ZDjnQiXQ?rel=0&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;まとめ&lt;/h3&gt;&lt;br /&gt;
&lt;p&gt;世の中、Javascript と HTML5 の世界になるようです。この2つの技術は必修科目ですね。&lt;/p&gt;&lt;p&gt;そして、進化した Android と AppEngine でバックエンドとモバイル。&lt;/p&gt;&lt;p&gt;ソーシャル対応に Google+ 。ビジネス Apps では、Apps Script 。&lt;/p&gt;&lt;p&gt;なんだかんだで、覚えることはイッパイです。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;最後に、スタッフやボランティアの皆様方、お疲れ様でした！&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://ishikawa.r-stone.net/feeds/1738312701435446769/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9016404448327222924&amp;postID=1738312701435446769&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9016404448327222924/posts/default/1738312701435446769'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9016404448327222924/posts/default/1738312701435446769'/><link rel='alternate' type='text/html' href='http://ishikawa.r-stone.net/2011/11/gdd11jp-google-developer-day.html' title='#gdd11jp Google Developer Day'/><author><name>Naoki Ishikawa</name><uri>https://plus.google.com/100388846279954485067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-PV5mViRwW2I/AAAAAAAAAAI/AAAAAAAAAAA/H-3RmFHJOL8/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-gCoiRybnOdo/TrPUtEIPq2I/AAAAAAAAA20/gkAU9ENJTwg/s72-c/FxCam_1320106089200.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9016404448327222924.post-1382923398397652155</id><published>2011-09-16T21:53:00.001+09:00</published><updated>2011-09-16T22:09:25.732+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="appsscript"/><title type='text'>Google Apps Script ってすごいね</title><content type='html'>&lt;p&gt;先日まで、Google Developer Day 2011 の DevQuiz がありました。&lt;/p&gt;&lt;p&gt;その中で Apps Script に関する問題が出題されていました。&lt;/p&gt;&lt;p&gt;個人的に気になっていたもので、ちょっとやってみることにしたのですが、ユーザガイドをみて驚きました。機能がすごく充実しています。&lt;br /&gt;
&lt;br /&gt;
「オラ、わくわくすっぞ！」って感じです。&lt;/p&gt;&lt;br /&gt;
&lt;h3&gt;Google Apps Script ってなに？&lt;/h3&gt;&lt;br /&gt;
&lt;p&gt;Google Apps Script は、JavaScript を使用して Docs, Spreadsheets, Sites などから各種 Google サービスを制御することできます。&lt;br /&gt;
Microsoft Office における VBA のようなものです。&lt;/p&gt;&lt;p&gt;Apps Script では、作成した JavaScript のプログラムがサーバ上で実行される、という点が特徴ですね。&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;まだまだ日本語の情報が少ない Google Apps Script ですが、 &lt;a href=&quot;http://www5d.biglobe.ne.jp/~pog/index.html&quot; title=&quot;Googleを追いかけろ！&quot; target=&quot;_blank&quot;&gt;Googleを追いかけろ！&lt;/a&gt; が参考になります。&lt;/p&gt;&lt;br /&gt;
&lt;h3&gt;Google Apps Script って何が出来るの？&lt;/h3&gt;&lt;br /&gt;
&lt;p&gt;何が出来るのかは、これから見ていきましょうｗ。&lt;/p&gt;&lt;p&gt;Excel を Apps Spreadsheets に移行する際の障壁は、VBA マクロだと思っていましたが、それが取り除かれた。と思ってもいいくらいなことができそうな予感です。&lt;/p&gt;&lt;br /&gt;
&lt;h3&gt;Google Apps Script を使ってみる&lt;/h3&gt;&lt;br /&gt;
&lt;p&gt;何はともあれ、どんなものかやってみましょう。&lt;/p&gt;&lt;br /&gt;
&lt;h4&gt;お題&lt;/h4&gt;&lt;br /&gt;
&lt;p&gt;よくある Excel マクロのように、CSV ファイルを読み込んで、Spreadsheets に出力してみます。&lt;/p&gt;&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;スクリプトエディタ&lt;br /&gt;
&lt;p&gt;新規に作成した Spreadsheet から、ツールメニューの「スクリプトエディタ」でスクリプトエディタを起動します。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;コードを記述&lt;br /&gt;
&lt;p&gt;コード欄に下記を打ち込みます。&lt;/p&gt;&lt;pre&gt;function onOpen() {
  var app = UiApp.createApplication().setTitle(&quot;Upload CSV to Sheet&quot;);
  var form = app.createFormPanel().setId(&#39;frm&#39;).setEncoding(&#39;multipart/form-data&#39;);
  var formContent = app.createVerticalPanel();
  form.add(formContent);
  var file = app.createFileUpload().setName(&#39;thefile&#39;);
  var button = app.createSubmitButton(&#39;Submit&#39;);

  formContent.add(file);
  formContent.add(button);

  app.add(form);

  var doc = SpreadsheetApp.getActive();
  doc.show(app);
}

function doPost(e) {
  var app = UiApp.getActiveApplication();
  var fileBlob = e.parameter.thefile;

  var data = fileBlob.getDataAsString();
  if (!data) {
	return app.close();
  }
  var csvData = data.split(&#39;\n&#39;);

  var sheet = SpreadsheetApp.getActiveSheet();
  sheet.getRange(sheet.getLastRow()+1, 1).setValue(fileBlob.getName());

  var startRow = sheet.getLastRow()+1;
  var startColumn = 1;
  for (var i=0,l=csvData.length;i&amp;lt;l;i++) {
	var csvRow = csvData[i].split(&#39;,&#39;);
	for (var j=0,l2=csvRow.length;j&amp;lt;l2;j++) {
	  sheet.getRange(startRow+i, startColumn+j).setValue(csvRow[j]);
	}
  }

  return app.close();
}
		&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;Script の実行&lt;br /&gt;
&lt;p&gt;フロッピーアイコンでスクリプトを保存し、「関数を選択」より「onOpen」を選択します。&lt;/p&gt;&lt;p&gt;再生ボタンでスクリプトを実行します。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;CSV をアップロード&lt;br /&gt;
&lt;p&gt;表示されたフォームより、適当な CSV ファイルを選択して、Submit です。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;CSV がシートに出力される&lt;br /&gt;
&lt;p&gt;CSV の内容がシートに書きだされました！&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;br /&gt;
&lt;p&gt;プログラムの説明を少しすると、[onOpen]という関数が、シートを開いたときに自動実行される関数です。VBA にもありますね。&lt;br /&gt;
&lt;br /&gt;
ここで、アップロードフォームを作成し、表示させています。&lt;/p&gt;&lt;p&gt;もう一つの[doPost]という関数。これはフォームポスト時に呼び出されるもので、データの取得とシートへの書き出しを行っています。&lt;/p&gt;&lt;p style=&quot;font-size:small;&quot;&gt;doPost がポスト時に呼ばれるということに気付くまで結構はまりました…。&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;参考までに、アップロード時に使用した CSV と、Spreadsheet は下記から。参考にしてください。&lt;br /&gt;
&lt;span style=&quot;font-size:small;&quot;&gt;*スクリプトの実行はできません&lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://docs.google.com/leaf?id=0B5EHWdNWJc3qNmUyNTRmZDMtMjQyNS00NTczLWIyNjUtMzM2OGMxNjllOTc4&amp;hl=ja&quot; title=&quot;GoogleAppsScriptPractice1.csv&quot; target=&quot;_blank&quot;&gt;GoogleAppsScriptPractice1.csv&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.google.com/spreadsheet/ccc?key=0ApEHWdNWJc3qdHlSNnU4Z2p5blJoX3F0R09mZ3ZnTnc&amp;hl=ja&quot; title=&quot;Google Apps Script Practice 1&quot; target=&quot;_blank&quot;&gt;Google Apps Script Practice 1&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;h3&gt;Google Apps Script をやってみて&lt;/h3&gt;&lt;br /&gt;
&lt;p&gt;&lt;a href=&quot;http://code.google.com/intl/ja/googleapps/appsscript/guide.html&quot; title=&quot;Google Apps Script - Google Apps Script - Google Code&quot; target=&quot;_blank&quot;&gt;リファレンス&lt;/a&gt;とにらめっこが必要ですが、汎用的な JavaScript で記述できるので非常にわかりやすいですね。&lt;/p&gt;&lt;p&gt;これから少しずつ、どんなことができるのか確認しながら、紹介してきたいと思います。&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://ishikawa.r-stone.net/feeds/1382923398397652155/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9016404448327222924&amp;postID=1382923398397652155&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9016404448327222924/posts/default/1382923398397652155'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9016404448327222924/posts/default/1382923398397652155'/><link rel='alternate' type='text/html' href='http://ishikawa.r-stone.net/2011/09/google-apps-script.html' title='Google Apps Script ってすごいね'/><author><name>Naoki Ishikawa</name><uri>https://plus.google.com/100388846279954485067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-PV5mViRwW2I/AAAAAAAAAAI/AAAAAAAAAAA/H-3RmFHJOL8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9016404448327222924.post-4807113794398361373</id><published>2011-09-12T19:00:00.000+09:00</published><updated>2011-09-12T19:00:14.789+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="gae"/><title type='text'>Google AppEngine の新料金体系</title><content type='html'>&lt;p&gt;とっても久しぶりのブログ更新です。皆さんお元気ですか？僕は元気です。&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;最近、AppEngine の料金体系変更によって、大幅に料金が増えるという話題をよく目にします。&lt;/p&gt;&lt;p&gt;気になって自分も確認してみました。&lt;br /&gt;そして、多分にもれず驚いたのでメモしておきます。&lt;/p&gt;&lt;br /&gt;
&lt;h3&gt;AppEngine 新料金体系&lt;/h3&gt;&lt;br /&gt;
&lt;p&gt;AppEngine の新料金体系は、従来(現行)の &lt;b&gt;CPU Time&lt;/b&gt; での課金から、&lt;b&gt;Instance Hours&lt;/b&gt; での課金に変更されます。&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;料金の詳細は、 &lt;a href=&quot;http://www.google.com/enterprise/cloud/appengine/pricing.html&quot; title=&quot;Google cloud services – App Engine&quot; target=&quot;_blank&quot;&gt;Google cloud services – App Engine&lt;/a&gt; に記載されています。&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;また、気になる、新料金体系ではどのように見積もられるのか？は、Admin Console の &lt;b&gt;Billing History&lt;/b&gt; から確認することができます。&lt;/p&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://code.google.com/appengine/articles/new_bill.png&quot; imageanchor=&quot;1&quot; style=&quot;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;829&quot; width=&quot;556&quot; src=&quot;http://code.google.com/appengine/articles/new_bill.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
via &lt;a href=&quot;http://code.google.com/intl/ja/appengine/articles/managing-resources.html&quot; title=&quot;Managing Your App&amp;#39;s Resource Usage - Google App Engine - Google Code&quot; target=&quot;_blank&quot;&gt;Managing Your App&amp;#39;s Resource Usage - Google App Engine - Google Code&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;今なら半額キャンペーン中！&lt;/h3&gt;&lt;br /&gt;
&lt;p&gt;上記のレポートの一例では、 Frontend Instance Housrs は、 $12.41 となっています。&lt;br /&gt;&lt;br /&gt;
為替レートが 1米ドル /円 = 77.089115 （ほんと円高ですね）ということなので、約956円/日。一ヶ月で 28,700円です。&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;でもよくみると、「Frontend Instance Hour costs reflect a 50% price reduction active until November 20th, 2011.」となっています。&lt;br /&gt;&lt;br /&gt;
11月20日までは半額キャンペーン中みたいです。&lt;br /&gt;&lt;br /&gt;
確かに Frontend Instance Hours: &lt;b&gt;$0.04/Hour&lt;/b&gt; となっています。正規の料金は &lt;b&gt;$0.08/Hour&lt;/b&gt; ですよね！&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;キャンペーンが終了したらどうなるのでしょうか？&lt;br /&gt;&lt;br /&gt;
単純に倍なので、約1,912円/日。一ヶ月で 57,400円です。&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;これ、みんな気づいているんでしょうか？僕は最初気がつかなかったです。&lt;br /&gt;&lt;br /&gt;
ダブルでビックリしますね。&lt;p&gt;&lt;br /&gt;
&lt;h3&gt;新料金体系対策&lt;/h3&gt;&lt;br /&gt;
&lt;p&gt;今まで無料枠で気軽にアップしていたアプリが、突然金食い虫になったらたまりません。&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;&lt;a href=&quot;http://blog.shehas.net/2011/09/02/app-engine&quot; title=&quot;App Engine アプリケーションのリソースを管理する方法 - Kay&amp;#39;s daddy&quot; target=&quot;_blank&quot;&gt;App Engine アプリケーションのリソースを管理する方法 - Kay&amp;#39;s daddy&lt;/a&gt; のリソースの管理方法が参考になります。&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;要は、ちゃんとリソース意識してアプリ作ってね、ということですが、&lt;br /&gt;&lt;br /&gt;
一番手軽な方法は、&lt;b&gt;Admin Settings&lt;/b&gt; にある、 &lt;b&gt;Max Idle Instances を 1&lt;/b&gt; にする ということでしょうか。&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;近頃は、フリーミアムモデルからフリーの部分がなくなる、もしくは縮小される傾向が強いように思います。&lt;br /&gt;&lt;br /&gt;
手軽な環境がなくなっていくのは残念ですね。&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://ishikawa.r-stone.net/feeds/4807113794398361373/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9016404448327222924&amp;postID=4807113794398361373&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9016404448327222924/posts/default/4807113794398361373'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9016404448327222924/posts/default/4807113794398361373'/><link rel='alternate' type='text/html' href='http://ishikawa.r-stone.net/2011/09/google-appengine.html' title='Google AppEngine の新料金体系'/><author><name>Naoki Ishikawa</name><uri>https://plus.google.com/100388846279954485067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-PV5mViRwW2I/AAAAAAAAAAI/AAAAAAAAAAA/H-3RmFHJOL8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9016404448327222924.post-2272575504034042894</id><published>2011-02-23T21:00:00.000+09:00</published><updated>2011-02-23T21:00:17.535+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="rails"/><title type='text'>Rails 3, MySQL, jQuery, Shoulda, FactoryGirl</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://4.bp.blogspot.com/-Wg1eGs5qmws/TVkHwVdH6HI/AAAAAAAAANg/aE-SnaD6Pgc/s1600/rails3shoulda.jpg&quot; imageanchor=&quot;1&quot; style=&quot;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;250&quot; width=&quot;320&quot; src=&quot;http://4.bp.blogspot.com/-Wg1eGs5qmws/TVkHwVdH6HI/AAAAAAAAANg/aE-SnaD6Pgc/s320/rails3shoulda.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;


&lt;p&gt;Rails 3 で、MySQL, jQuery, Shoulda, FactoryGirl を使うときのプロジェクトメモ。&lt;/p&gt;

&lt;h3&gt;MySQL でプロジェクトを作成&lt;/h3&gt;

&lt;p&gt;デフォルトでは Sqlite3 を使用するので、オプションで MySQL を使用するように指定。&lt;/p&gt;

&lt;pre&gt;
$ rails new appname -d mysql
&lt;/pre&gt;

&lt;h3&gt;jQuery, Shoulda, FactoryGirl の設定&lt;/h3&gt;

&lt;p&gt;jQuery, Shoulda, FactoryGirl を使用するために、各ファイルを編集する。&lt;/p&gt;

&lt;span&gt;environment.rb&lt;/span&gt;
&lt;pre&gt;
require &#39;openssl&#39;
OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE
&lt;/pre&gt;

&lt;span&gt;Gemfile&lt;/span&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;
gem &#39;jquery-rails&#39;
gem &#39;rails3-generators&#39;, :group =&gt; :development
group :test do
  gem &#39;shoulda&#39;
  gem &#39;factory_girl_rails&#39;
end
&lt;/pre&gt;

&lt;span&gt;application.rb&lt;/span&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;
config.generators do |g| 
  g.test_framework :shoulda, :fixture =&gt; true
  g.fallbacks[:shoulda] = :test_unit
  g.fixture_replacement :factory_girl, :dir =&gt; &quot;test/factories&quot;
end
&lt;/pre&gt;

&lt;p&gt;インストール&lt;/p&gt;

&lt;pre class=&quot;prettyprint&quot;&gt;
$ bundle install
&lt;/pre&gt;

&lt;p&gt;Shoulda / FactoryGirl が適用されているか確認。&lt;/p&gt;

&lt;pre class=&quot;prettyprint&quot;&gt;
$ rails g scaffold --help
...

Shoulda options:
  [--dir=DIR]                   # The directory where the model tests should go
                                # Default: test/unit
  [--fixture-replacement=NAME]  # Fixture replacement to be invoked
                                # Default: factory_girl
&lt;/pre&gt;

&lt;h3&gt;jQuery をインストール&lt;/h3&gt;

&lt;p&gt;generator で jQuery に置き換えます。&lt;/p&gt;

&lt;pre class=&quot;prettyprint&quot;&gt;
$ rails g jquery:install
&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://ishikawa.r-stone.net/feeds/2272575504034042894/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9016404448327222924&amp;postID=2272575504034042894&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9016404448327222924/posts/default/2272575504034042894'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9016404448327222924/posts/default/2272575504034042894'/><link rel='alternate' type='text/html' href='http://ishikawa.r-stone.net/2011/02/rails-3-mysql-jquery-shoulda.html' title='Rails 3, MySQL, jQuery, Shoulda, FactoryGirl'/><author><name>Naoki Ishikawa</name><uri>https://plus.google.com/100388846279954485067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-PV5mViRwW2I/AAAAAAAAAAI/AAAAAAAAAAA/H-3RmFHJOL8/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-Wg1eGs5qmws/TVkHwVdH6HI/AAAAAAAAANg/aE-SnaD6Pgc/s72-c/rails3shoulda.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9016404448327222924.post-2000275721290746948</id><published>2011-02-14T21:35:00.000+09:00</published><updated>2011-02-14T21:35:00.421+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="rails"/><title type='text'>Rails 3 で OpenSSL::SSL::SSLError</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://4.bp.blogspot.com/-GTogkWYLX6A/TVjOXxje0uI/AAAAAAAAANY/no4jXEj3hFY/s1600/rals3sslerror.jpg&quot; imageanchor=&quot;1&quot; style=&quot;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;258&quot; width=&quot;320&quot; src=&quot;http://4.bp.blogspot.com/-GTogkWYLX6A/TVjOXxje0uI/AAAAAAAAANY/no4jXEj3hFY/s320/rals3sslerror.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;p&gt;Rails 3 でプロジェクト作成後、まずは jquery を使うようにしようと思い&lt;/p&gt;

&lt;pre class=&quot;prettyprint&quot;&gt;$ rails g jquery:install&lt;/pre&gt;

&lt;p&gt;すると、早速エラー発生。&lt;/p&gt;

&lt;pre class=&quot;prettyprint&quot;&gt;
    fetching  jQuery UJS adapter (github HEAD)
c:/ruby/lib/ruby/1.8/net/http.rb:586:in `connect&#39;: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed (OpenSSL::SSL::SSLError)
&lt;/pre&gt;

&lt;p&gt;ソースを github から取得する際に、SSL 接続でエラーということか。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://balthazar.db.itc.nagoya-u.ac.jp/groups/suzuki/weblog/fbf38/Rails3__jQuery_.html&quot; title=&quot;Rails3 で jQuery を使う&quot; target=&quot;_blank&quot;&gt;Rails3 で jQuery を使う&lt;/a&gt; を参考に、environment.rb に下記を追記。&lt;/p&gt;

&lt;pre class=&quot;prettyprint&quot;&gt;
require &#39;openssl&#39;
OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE
&lt;/pre&gt;

&lt;p&gt;無理やり SSL 非接続にしてなんとか回避。とりあえずは、よしとします。&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://ishikawa.r-stone.net/feeds/2000275721290746948/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9016404448327222924&amp;postID=2000275721290746948&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9016404448327222924/posts/default/2000275721290746948'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9016404448327222924/posts/default/2000275721290746948'/><link rel='alternate' type='text/html' href='http://ishikawa.r-stone.net/2011/02/rails-3-opensslsslsslerror.html' title='Rails 3 で OpenSSL::SSL::SSLError'/><author><name>Naoki Ishikawa</name><uri>https://plus.google.com/100388846279954485067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-PV5mViRwW2I/AAAAAAAAAAI/AAAAAAAAAAA/H-3RmFHJOL8/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-GTogkWYLX6A/TVjOXxje0uI/AAAAAAAAANY/no4jXEj3hFY/s72-c/rals3sslerror.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9016404448327222924.post-1710425231846426430</id><published>2011-02-09T20:49:00.000+09:00</published><updated>2011-02-09T20:49:28.754+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="google"/><category scheme="http://www.blogger.com/atom/ns#" term="googlemaps"/><title type='text'>Google Maps API v3 でカスタムマップを作成</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://4.bp.blogspot.com/_3n88bcnF1Z0/TT_eQCjWyyI/AAAAAAAAAM0/4PBptw2rWVk/s1600/535784366_bc2ab5f71e.jpg&quot; imageanchor=&quot;1&quot; style=&quot;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;240&quot; width=&quot;320&quot; src=&quot;http://4.bp.blogspot.com/_3n88bcnF1Z0/TT_eQCjWyyI/AAAAAAAAAM0/4PBptw2rWVk/s320/535784366_bc2ab5f71e.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;p&gt;暫く前に、「&lt;a href=&quot;http://labs.smartnetwork.co.jp/dqmap/&quot; target=&quot;_blank&quot;&gt;googlemapでドラクエ&lt;/a&gt;」ということで、ドラゴンクエストの世界地図を Google Maps で表示するサイトが話題になりました。&lt;br /&gt;当時、コレを見て感動したのを覚えています。&lt;/p&gt;

&lt;p&gt;今では Google Maps API も v3 となり、v2 は正式に廃止され、アップデートすることが推奨されています。&lt;/p&gt;

&lt;p&gt;ということなので、カスタムマップの作成を v3 でやってみます。&lt;/p&gt;

&lt;h3&gt;大きい画像の用意&lt;/h3&gt;
&lt;p&gt;まずは、拡大時に耐えるような大きな画像を用意します。&lt;/p&gt;

&lt;a href=&quot;http://japancool.sblo.jp/article/42404814.html&quot; title=&quot;1900年に作成された日本の世界地図が面白い【海外掲示板】: 誤訳御免。&quot; target=&quot;_blank&quot;&gt;1900年に作成された日本の世界地図&lt;/a&gt; から拝借しました。

&lt;h3&gt;タイル（tile）を作成&lt;/h3&gt;

&lt;p&gt;Google Maps は、それぞれのズームレベルに合わせて 縦横 256px の画像（タイル）を地球全面に覆う仕組みになっています。&lt;br /&gt;
例えば、ズームレベル 1 では、256x256 px の画像を縦横 2枚、計 4枚のタイルにより構成されます。&lt;br /&gt;
ズームレベル 2 では、縦横それぞれ 2 倍の、計 16枚のタイルで構成されます。&lt;/p&gt;

&lt;h3&gt;GMIC - The GMap Image Cutter&lt;/h3&gt;
&lt;p&gt;というわけで、多数のタイルが必要になるのですが、自力でカットしていくのははっきり言って無理があります。&lt;/p&gt;
&lt;p&gt;そこで &lt;a href=&quot;http://www.casa.ucl.ac.uk/software/googlemapimagecutter.asp&quot; title=&quot;GMIC - The GMap Image Cutter&quot; target=&quot;_blank&quot;&gt;GMIC&lt;/a&gt; というとても便利なツールの登場です。&lt;/p&gt;
&lt;p&gt;このツールを使えば、用意した画像を Google Maps に合わせたタイルにカットしてくれます。しかも、解像度から最大ズームレベルまで判断してくれます。&lt;/p&gt;
&lt;p&gt;使用方法も簡単で、ダウンロードした zip を解凍し、GMapImageCutter.batを実行（Windows の場合。その他は .sh）して起動させます。&lt;/p&gt;
&lt;p&gt;起動したら、File を Open して、 Create するだけ！簡単です。動作も高速であっという間に作業が完了します。&lt;/p&gt;
&lt;p&gt;出力ファイルには、タイル画像だけではなく、作成したタイルを表示するためのサンプル HTML も出力されます。&lt;br /&gt;
大きな画像を Google Maps 的に見たい！というなら、これだけで OK ですね。&lt;/p&gt;

&lt;h3&gt;V3&lt;/h3&gt;

&lt;p&gt;GMIC より出力された HTML は、残念ながら今現在は v2 の Google Maps API を使用しています。&lt;/p&gt;
&lt;p&gt;そこでやっと本題の、カスタムマップを v3 で書き換えてみます。&lt;/p&gt;
&lt;p&gt;ポイントは、ImageMapType というクラスを使うことで、一から MapType インターフェースを実装する手間を省いています。&lt;/p&gt;

&lt;p&gt;サンプルは下記リンクから！&lt;/p&gt;
&lt;p&gt;
    &lt;a href=&quot;http://ishikawars-works.appspot.com/sample/World_around_1900v3.html&quot; title=&quot;Google Maps API v3 カスタムマップサンプル&quot; target=&quot;_blank&quot;&gt;Google Maps API v3 カスタムマップサンプル&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;span&gt;参考：&lt;/span&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;a href=&quot;http://code.google.com/intl/ja/apis/maps/documentation/javascript/overlays.html#CustomMapTypes&quot; title=&quot;Google Maps JavaScript API V3 オーバーレイ - Google Maps JavaScript API V3 - Google Code&quot; target=&quot;_blank&quot;&gt;Google Maps JavaScript API V3 オーバーレイ - Google Maps JavaScript API V3 - Google Code&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><link rel='replies' type='application/atom+xml' href='http://ishikawa.r-stone.net/feeds/1710425231846426430/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9016404448327222924&amp;postID=1710425231846426430&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9016404448327222924/posts/default/1710425231846426430'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9016404448327222924/posts/default/1710425231846426430'/><link rel='alternate' type='text/html' href='http://ishikawa.r-stone.net/2011/02/google-maps-api-v3.html' title='Google Maps API v3 でカスタムマップを作成'/><author><name>Naoki Ishikawa</name><uri>https://plus.google.com/100388846279954485067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-PV5mViRwW2I/AAAAAAAAAAI/AAAAAAAAAAA/H-3RmFHJOL8/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_3n88bcnF1Z0/TT_eQCjWyyI/AAAAAAAAAM0/4PBptw2rWVk/s72-c/535784366_bc2ab5f71e.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9016404448327222924.post-2374129245508022047</id><published>2011-02-02T19:58:00.001+09:00</published><updated>2011-02-02T19:58:00.863+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="centos"/><category scheme="http://www.blogger.com/atom/ns#" term="wordpress"/><title type='text'>さくら VPS で Wordpress のチューニング</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://3.bp.blogspot.com/_3n88bcnF1Z0/TUjJvqy6qYI/AAAAAAAAAM8/uKxBKkqFuQQ/s1600/resource.png&quot; imageanchor=&quot;1&quot; style=&quot;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;287&quot; width=&quot;320&quot; src=&quot;http://3.bp.blogspot.com/_3n88bcnF1Z0/TUjJvqy6qYI/AAAAAAAAAM8/uKxBKkqFuQQ/s320/resource.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;p&gt;さくら VPS はメモリが 512M とちょっと少なめです。Swap が有るためメモリオーバーで即ダウンするとこはありませんが、すぐに Swap メモリに手を出し極端なパフォーマンス低下を招いたりします。&lt;/p&gt;
&lt;p&gt;Wordpress でサイト構築した際は、チューニングを事前に実施しておくことで、Swap を食いつぶして Apache がアクセス不能になって焦る、ということがないようにしたいものですね。&lt;/p&gt;

&lt;h3&gt;APC - PHP アクセラレータ&lt;/h3&gt;

&lt;p&gt;Wordpress は PHP, MySQL を使用しています。&lt;br /&gt;
まずは PHP のチューニングということで、定評のある APC をインストールします。&lt;/p&gt;
&lt;p&gt;APC(Alternative PHP Cache) は、PHPの中間コードのキャッシュや最適化を行う拡張モジュールです。&lt;/p&gt;
&lt;p&gt;インストールは、 yum で。&lt;a href=&quot;http://akibe.com/2010/10/centos-setup-11-yum/&quot; title=&quot;AKIBE -   さくらのVPS CentOSでサーバ構築 11 &amp;#8211; yum&quot; target=&quot;_blank&quot;&gt;Remiリポジトリからインストールするので、予め有効に&lt;/a&gt;しておきます。&lt;/p&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;
$ sudo yum search php-pecl-apc
php-pecl-apc.x86_64 : APC caches and optimizes PHP intermediate code

$ sudo yum install php-pecl-apc
&lt;/pre&gt;
&lt;p&gt;設定（/etc/php.d/apc.ini）はデフォルトを使用し、インストール後は httpd を再起動します。&lt;/p&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;
$ sudo /etc/rc.d/init.d/httpd restart
&lt;/pre&gt;
&lt;p&gt;APC の動作確認用ファイルをコピーして、ブラウザから動作チェックできるようにします。&lt;br /&gt;
なお、管理者情報はデフォルトから変更しておきます。&lt;/p&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;
$ cp /usr/share/doc/php-pecl-apc-3.0.19/apc.php /var/www/html/www.domain.com/
$ sudo vi /var/www/html/www.domain.com/apc.php
defaults(&#39;ADMIN_USERNAME&#39;,&#39;apc&#39;);
defaults(&#39;ADMIN_PASSWORD&#39;,&#39;password&#39;);
&lt;/pre&gt;


&lt;h3&gt;MySQL のチューニング&lt;/h3&gt;

&lt;p&gt;次は、MySQL の設定を変更し、キャッシュとバッファの設定をします。&lt;/p&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;
$ sudo vi /etc/my.cnf
[mysqld]
query_cache_limit=1M
query_cache_min_res_unit=4k
query_cache_size=24M
query_cache_type=1
key_buffer = 16M
sort_buffer_size = 1M
read_buffer_size = 256K

$ sudo /etc/rc.d/init.d/mysqld restart
&lt;/pre&gt;

&lt;h3&gt;Apache のチューニング&lt;/h3&gt;

&lt;p&gt;次は、Apache の設定の見直し。&lt;/p&gt;

&lt;pre class=&quot;prettyprint&quot;&gt;
$ sudo vi /etc/httpd/conf/httpd.conf

Timeout 45                  #接続を切るまでの時間
KeepAlive On                #接続の継続を許可
KeepAliveTimeout 3          #継続時間
&lt;IfModule prefork.c&gt;
StartServers       5        #起動時のプロセス数
MinSpareServers    5        #待機プロセス数の最小個数
MaxSpareServers   10        #待機プロセス数の最大個数
ServerLimit       64        #プロセス数の上限
MaxClients        64        #稼動プロセスの最大個数
MaxRequestsPerChild  4000   #一つのプロセスが実行するリクエスト数
&lt;/IfModule&gt;

$ sudo /etc/rc.d/init.d/httpd restart
&lt;/pre&gt;

&lt;p&gt;ついでに、PHP の設定で、 zlib を有効にし、転送速度を向上させておきます。&lt;/p&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;
$ sudo vi /etc/php.ini

zlib.output_compression = On

&lt;/pre&gt;


&lt;h3&gt;WP Super Cache - Wordpress プラグイン&lt;/h3&gt;

&lt;p&gt;最後に、Wordpress 自身のチューニングで、WP Super Cache というプラグインをインストールします。&lt;/p&gt;
&lt;p&gt;プラグインのインストールは、Wordpress のダッシュボードからインストール出来ます。&lt;/p&gt;
&lt;p&gt;インストール後は、設定ページから Caching On にすると有効になります。&lt;/p&gt;


&lt;h3&gt;まとめ&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;APC で PHP のチューニング&lt;/li&gt;
  &lt;li&gt;キャッシュとバッファの設定で、MySQL をチューニング&lt;/li&gt;
  &lt;li&gt;メモリに合わせて、Apache をチューニング&lt;/li&gt;
  &lt;li&gt;WP Super Cache で、Wordpress をチューニング&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;これで、かなり高速・軽量になったかと思います。&lt;br /&gt;
あとは、状況に合わせて細かな設定変更をしていくといいと思います。&lt;/p&gt;


&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;dl&gt;
  &lt;dt&gt;参考&lt;/dt&gt;
  &lt;dd&gt;&lt;a href=&quot;http://akibe.com/2010/10/centos-setup-13-performance/&quot; title=&quot;AKIBE -   さくらのVPS CentOSでサーバ構築 13 &amp;#8211; パフォーマンス&quot; target=&quot;_blank&quot;&gt;AKIBE -   さくらのVPS CentOSでサーバ構築 13 &amp;#8211; パフォーマンス&lt;/a&gt;&lt;/dd&gt;
&lt;/dl&gt;</content><link rel='replies' type='application/atom+xml' href='http://ishikawa.r-stone.net/feeds/2374129245508022047/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9016404448327222924&amp;postID=2374129245508022047&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9016404448327222924/posts/default/2374129245508022047'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9016404448327222924/posts/default/2374129245508022047'/><link rel='alternate' type='text/html' href='http://ishikawa.r-stone.net/2011/02/vps-wordpress.html' title='さくら VPS で Wordpress のチューニング'/><author><name>Naoki Ishikawa</name><uri>https://plus.google.com/100388846279954485067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-PV5mViRwW2I/AAAAAAAAAAI/AAAAAAAAAAA/H-3RmFHJOL8/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_3n88bcnF1Z0/TUjJvqy6qYI/AAAAAAAAAM8/uKxBKkqFuQQ/s72-c/resource.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9016404448327222924.post-148350901746345791</id><published>2011-01-24T22:56:00.008+09:00</published><updated>2011-01-24T22:56:00.478+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="wordpress"/><title type='text'>[WordPress]ウィジェットのメタ情報デフォルト値を編集する方法</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
&lt;a href=&quot;http://2.bp.blogspot.com/_3n88bcnF1Z0/TT1L5S_NQaI/AAAAAAAAAMs/lELmDRlzHcQ/s1600/wordpress_default_meta.png&quot; imageanchor=&quot;1&quot; style=&quot;clear:left;margin-right:1em; margin-bottom:1em&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;225&quot; width=&quot;320&quot; src=&quot;http://2.bp.blogspot.com/_3n88bcnF1Z0/TT1L5S_NQaI/AAAAAAAAAMs/lELmDRlzHcQ/s320/wordpress_default_meta.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;


&lt;h3&gt;ウィジェットのメタ情報&lt;/h3&gt;
&lt;p&gt;WordPress のウィジェットで「メタ情報」というのがありますが、これをどうにか編集できないか？というわけで、その方法の Tips です。&lt;/p&gt;
&lt;p&gt;デフォルトのメタ情報&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;サイト管理&lt;/li&gt;
  &lt;li&gt;ログイン/ログアウト&lt;/li&gt;
  &lt;li&gt;投稿の RSS&lt;/li&gt;
  &lt;li&gt;コメントの RSS&lt;/li&gt;
  &lt;li&gt;WordPress.org&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;default-widgets.php&lt;/h3&gt;
&lt;p&gt;デフォルトのメタ情報の内、コメントの RSS と、WordPress.org へのリンクは不要だったのでコレを削除。&lt;/p&gt;
&lt;p&gt;wp-includes の default-widgets.php がウィジェットのデフォルト値を管理しているので、こちらを修正すれば OK です。&lt;/p&gt;
&lt;span&gt;wp-includes/default-widgets.php 300行目あたり&lt;/span&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;
      &amp;lt;ul&amp;gt;
      &amp;lt;?php wp_register(); ?&amp;gt;
      &amp;lt;li&amp;gt;&amp;lt;?php wp_loginout(); ?&amp;gt;&amp;lt;/li&amp;gt;
      &amp;lt;li&amp;gt;&amp;lt;a href=&quot;&amp;lt;?php bloginfo(&#39;rss2_url&#39;); ?&amp;gt;&quot; title=&quot;&amp;lt;?php echo esc_attr(__(&#39;Syndicate this site using RSS 2.0&#39;)); ?&amp;gt;&quot;&amp;gt;&amp;lt;?php _e(&#39;Entries &amp;lt;abbr title=&quot;Really Simple Syndication&quot;&amp;gt;RSS&amp;lt;/abbr&amp;gt;&#39;); ?&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
      &amp;lt;li&amp;gt;&amp;lt;a href=&quot;&amp;lt;?php bloginfo(&#39;comments_rss2_url&#39;); ?&amp;gt;&quot; title=&quot;&amp;lt;?php echo esc_attr(__(&#39;The latest comments to all posts in RSS&#39;)); ?&amp;gt;&quot;&amp;gt;&amp;lt;?php _e(&#39;Comments &amp;lt;abbr title=&quot;Really Simple Syndication&quot;&amp;gt;RSS&amp;lt;/abbr&amp;gt;&#39;); ?&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
      &amp;lt;li&amp;gt;&amp;lt;a href=&quot;http://wordpress.org/&quot; title=&quot;&amp;lt;?php echo esc_attr(__(&#39;Powered by WordPress, state-of-the-art semantic personal publishing platform.&#39;)); ?&amp;gt;&quot;&amp;gt;WordPress.org&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
      &amp;lt;?php wp_meta(); ?&amp;gt;
      &amp;lt;/ul&amp;gt;
&lt;/pre&gt;

&lt;p&gt;ちなみに、デフォルト値を変更せずに、各サイトごとに修正するにはどうするんだろうか…？知ってる方がいましたら教えてください！&lt;/p&gt;

&lt;p&gt;
&lt;div class=&quot;amazlet-box&quot; style=&quot;margin-bottom:0px;&quot;&gt;&lt;div class=&quot;amazlet-image&quot; style=&quot;float:left;margin:0px 12px 1px 0px;&quot;&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/ASIN/4883377245/lesgowisy-22/ref=nosim/&quot; name=&quot;amazletlink&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://ecx.images-amazon.com/images/I/51th9C%2B1nXL._SL160_.jpg&quot; alt=&quot;WordPress レッスンブック 3.x対応&quot; style=&quot;border: none;&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;amazlet-info&quot; style=&quot;line-height:120%; margin-bottom: 10px&quot;&gt;&lt;div class=&quot;amazlet-name&quot; style=&quot;margin-bottom:10px;line-height:120%&quot;&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/ASIN/4883377245/lesgowisy-22/ref=nosim/&quot; name=&quot;amazletlink&quot; target=&quot;_blank&quot;&gt;WordPress レッスンブック 3.x対応&lt;/a&gt;&lt;div class=&quot;amazlet-powered-date&quot; style=&quot;font-size:80%;margin-top:5px;line-height:120%&quot;&gt;posted with &lt;a href=&quot;http://www.amazlet.com/browse/ASIN/4883377245/lesgowisy-22/ref=nosim/&quot; title=&quot;WordPress レッスンブック 3.x対応&quot; target=&quot;_blank&quot;&gt;amazlet&lt;/a&gt; at 11.01.24&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;amazlet-detail&quot;&gt;エビスコム &lt;br /&gt;ソシム &lt;br /&gt;売り上げランキング: 874&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;amazlet-sub-info&quot; style=&quot;float: left;&quot;&gt;&lt;div class=&quot;amazlet-link&quot; style=&quot;margin-top: 5px&quot;&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/ASIN/4883377245/lesgowisy-22/ref=nosim/&quot; name=&quot;amazletlink&quot; target=&quot;_blank&quot;&gt;Amazon.co.jp で詳細を見る&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;amazlet-footer&quot; style=&quot;clear: left&quot;&gt;&lt;/div&gt;&lt;/div&gt;
&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://ishikawa.r-stone.net/feeds/148350901746345791/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9016404448327222924&amp;postID=148350901746345791&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9016404448327222924/posts/default/148350901746345791'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9016404448327222924/posts/default/148350901746345791'/><link rel='alternate' type='text/html' href='http://ishikawa.r-stone.net/2011/01/wordpress.html' title='[WordPress]ウィジェットのメタ情報デフォルト値を編集する方法'/><author><name>Naoki Ishikawa</name><uri>https://plus.google.com/100388846279954485067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-PV5mViRwW2I/AAAAAAAAAAI/AAAAAAAAAAA/H-3RmFHJOL8/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_3n88bcnF1Z0/TT1L5S_NQaI/AAAAAAAAAMs/lELmDRlzHcQ/s72-c/wordpress_default_meta.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9016404448327222924.post-530858067409101000</id><published>2010-12-31T00:13:00.000+09:00</published><updated>2010-12-31T00:13:02.113+09:00</updated><title type='text'>End Of 2010</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://2.bp.blogspot.com/_3n88bcnF1Z0/TRyhFdC-tZI/AAAAAAAAAMk/tCfDa1smsyc/s1600/IMGP2643_org.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left:1em; margin-right:1em&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;214&quot; width=&quot;320&quot; src=&quot;http://2.bp.blogspot.com/_3n88bcnF1Z0/TRyhFdC-tZI/AAAAAAAAAMk/tCfDa1smsyc/s320/IMGP2643_org.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;p&gt;
ついに 2010 年も最後の日になりました。&lt;br /&gt;
お世話になった皆様方、本当にありがとうございました。
&lt;/p&gt;
&lt;p&gt;
今年は、Android の本格的な普及や、iPad や Android タブレットなどモバイル環境が劇的に変化してきました。&lt;br /&gt;
また、Twitter や Facebook など、日本でも海外標準のものがどんどん普及していきました。
&lt;/p&gt;

&lt;p&gt;
来年はどんなことが起こるのかと、わくわくする反面、流れについて行けるのかと不安な面もありますね。
&lt;/p&gt;

&lt;p&gt;
新しいことにどんどんチャレンジし、常にエッジでいたいものです。&lt;br /&gt;
そしてそれを仕事にフィードバックできると最高ですね。
&lt;/p&gt;

&lt;p&gt;
それでは、皆様、良いお年を！
&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://ishikawa.r-stone.net/feeds/530858067409101000/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9016404448327222924&amp;postID=530858067409101000&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9016404448327222924/posts/default/530858067409101000'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9016404448327222924/posts/default/530858067409101000'/><link rel='alternate' type='text/html' href='http://ishikawa.r-stone.net/2010/12/end-of-2010.html' title='End Of 2010'/><author><name>Naoki Ishikawa</name><uri>https://plus.google.com/100388846279954485067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-PV5mViRwW2I/AAAAAAAAAAI/AAAAAAAAAAA/H-3RmFHJOL8/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_3n88bcnF1Z0/TRyhFdC-tZI/AAAAAAAAAMk/tCfDa1smsyc/s72-c/IMGP2643_org.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9016404448327222924.post-1467355443175918733</id><published>2010-09-29T15:49:00.000+09:00</published><updated>2010-09-29T15:49:42.749+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="gdd2010jp"/><title type='text'>[GDD2010JP]Google Developer Day 2010 に行ってきた</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://4.bp.blogspot.com/_3n88bcnF1Z0/TKLhJewutxI/AAAAAAAAAL8/AldZQFfvdWk/s1600/FxCam_1285646720596.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;http://4.bp.blogspot.com/_3n88bcnF1Z0/TKLhJewutxI/AAAAAAAAAL8/AldZQFfvdWk/s320/FxCam_1285646720596.jpg&quot; width=&quot;213&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;今年も恒例の、Google Developer Day に参加してきました。&lt;/p&gt;
&lt;p&gt;今年は東京会場に 1,000 人の参加があったらしく、すごい人数でした。&lt;/p&gt;
&lt;p&gt;発表している技術の内容は主に、 HTML5, Android, AppEngine で、気づけば去年とあまり変わっていません。
しかし、その内容は確実に変化していて、HTML5 は主要モダンブラウザではすべてサポートされ、 Android 端末もぞくぞく登場しています。AppEngine でのアプリケーションも、ものすごい勢いで増加しています。&lt;/p&gt;
&lt;p&gt;Apps も Marketplace が整備され、ビジネスの土台が整いました。Chrome も、 Extension や WebApps が登場し、ますますクラウドが加速しています。&lt;/p&gt;
&lt;p&gt;まさに、次のフェーズに突入したと感じるものでした。&lt;/p&gt;
&lt;p&gt;Web は HTML5 / CSS3 に置き換わり、Android, iPhone などのスマートフォンが主力になる。PC はより専門的なツールになり、一般には Android タブレットや iPad になっていくのだと感じます。&lt;/p&gt;
&lt;p&gt;今回の GDD での、HTML5, Android, AppEngine, Chrome そして Apps 、これらは全てつながっており、そしてその土台となるものは既に整っているのだと、強く認識しました。&lt;/p&gt;
&lt;p&gt;また、これらの技術はほとんどがオープンソースプロジェクトとして存在しています。そこに、 Google の強さを感じます。&lt;/p&gt;
&lt;p&gt;自分としては HTML5 以外はほとんど、なんらかの開発経験がありますが、気がつけば blogger のテンプレートも HTML5 になっていたりと、早急に HTML5 にも注力していかなければならないです。&lt;/p&gt;
&lt;p&gt;それと、ソーシャルウェブの話で 伊藤直也 さんが言っていた、「単なる繋がりの仕組みではなく、その深さもコンピューティングする」「繋がりのリニューアル」といったより実際の人間関係に近い仕組みが次のフェーズ。という話は印象的でした。&lt;/p&gt;
&lt;p&gt;気がつけば、初開催より参加し今回で 4度目になる GDD ですが、毎度のことながら非常に刺激的なものでした。&lt;br /&gt;
モチベーションをひどく向上させてくれます。&lt;/p&gt;
&lt;p&gt;時間と共に次第に薄れていくモチベーションが、こうやって定期的に向上できるのはとてもありがたいこと。&lt;/p&gt;
&lt;p&gt;素晴らしいイベントを開催してくださった Google スタッフさん、ボランティアの方々ありがとうございました！&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://ishikawa.r-stone.net/feeds/1467355443175918733/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9016404448327222924&amp;postID=1467355443175918733&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9016404448327222924/posts/default/1467355443175918733'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9016404448327222924/posts/default/1467355443175918733'/><link rel='alternate' type='text/html' href='http://ishikawa.r-stone.net/2010/09/gdd2010jpgoogle-developer-day-2010.html' title='[GDD2010JP]Google Developer Day 2010 に行ってきた'/><author><name>Naoki Ishikawa</name><uri>https://plus.google.com/100388846279954485067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-PV5mViRwW2I/AAAAAAAAAAI/AAAAAAAAAAA/H-3RmFHJOL8/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_3n88bcnF1Z0/TKLhJewutxI/AAAAAAAAAL8/AldZQFfvdWk/s72-c/FxCam_1285646720596.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9016404448327222924.post-6899957011449645758</id><published>2010-06-22T18:00:00.003+09:00</published><updated>2010-06-22T18:00:01.278+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="android"/><title type='text'>ドーナツをエクレアにしてみました</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://4.bp.blogspot.com/_3n88bcnF1Z0/TB9_5xYMB1I/AAAAAAAAALw/oQJNp2H-jmc/s1600/Android_eclair.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://4.bp.blogspot.com/_3n88bcnF1Z0/TB9_5xYMB1I/AAAAAAAAALw/oQJNp2H-jmc/s1600/Android_eclair.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;a href=&quot;http://goo.gl/ZJ9o&quot; title=&quot;新機能てんこ盛り、会場も盛り上がったAndroid 2.2の発表 － ＠IT&quot;&gt;Android 2.2 がリリース&lt;/a&gt;され、&lt;a href=&quot;http://goo.gl/L4ND&quot; title=&quot;アップル - iPhone - 携帯電話、iPod、インターネットデバイスがひとつに。&quot;&gt;iPhone 4 も発表&lt;/a&gt;され、ますますスマートフォンが勢い付いてきましたね。&lt;br /&gt;
そんな中、せめてマルチタッチを体験してみたいと思い、GDD フォンを Android 2.1 にアップしてみました。&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://goo.gl/m4uW&quot; title=&quot;守破離でいこう!!: Android 1.6 にバージョンアップ&quot;&gt;前回、Android 1.6 である Donut にした&lt;/a&gt;わけですが、その際は HTC より提供されたロムを使用しました。&lt;br /&gt;
Android 2.2 (Froyo) のアップデートも &lt;a href=&quot;http://goo.gl/SXDd&quot; title=&quot;myTouch 3G（海外版HT-03A）にAndroid 2.2のアップデートがまもなくリリース&quot;&gt;HTC よりまもなくリリースされるとのウワサ&lt;/a&gt;もありますが、その前に有志による Complete Eclair というロムを使用し、Android 2.1 にしてみました。&lt;br /&gt;
&lt;br /&gt;
手順はほとんど &lt;a href=&quot;http://goo.gl/r8HU&quot; title=&quot;GDD PhoneにComplete EclairというROMを入れてみた - stnard.jp&quot;&gt;GDD PhoneにComplete EclairというROMを入れてみた - stnard.jp&lt;/a&gt; を参考にしていますので、詳しくはそちらを参照してください。&lt;br /&gt;
なお、Android は 1.5 に戻さずとも、root 化することが出来ます。&lt;br /&gt;
&lt;br /&gt;
そして更に、せっかく root 化したので、オーバークロックにも挑戦しました。&lt;br /&gt;
GDD フォン (HT-03A) は、最大 512MHz の CPU ながら、電池消耗のためか 384MHz までしか使われてないそうで。電池の消耗は気にせずにフルで動いてもらいましょう。&lt;br /&gt;
これは、root 化が済んでいるので、Android Market から OverclockWidget をダウンロードし、ウィジェットとして配置後、クロック数の設定するだけで OK 。本当に動いてるのかは不明。というかその程度の違いなんでしょうか・・。&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://3.bp.blogspot.com/_3n88bcnF1Z0/TB98kfxub8I/AAAAAAAAALo/nc0YqDEIsI4/s1600/105681021.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;200&quot; src=&quot;http://3.bp.blogspot.com/_3n88bcnF1Z0/TB98kfxub8I/AAAAAAAAALo/nc0YqDEIsI4/s200/105681021.png&quot; width=&quot;133&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
Complete Eclair にしてみて、正直動作が快適になることはなかったです。 OverClock を含めてもほとんど変わらずで、相変わらずのモッサリです。&lt;br /&gt;
しかし、しっかりバージョンアップはされていて、1.6 に戻す気にはなりません。やっぱりマルチタッチはいいですね。&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://2.bp.blogspot.com/_3n88bcnF1Z0/TB98twRA1dI/AAAAAAAAALs/avcyTPyrztQ/s1600/device.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;133&quot; src=&quot;http://2.bp.blogspot.com/_3n88bcnF1Z0/TB98twRA1dI/AAAAAAAAALs/avcyTPyrztQ/s200/device.png&quot; width=&quot;200&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
また、なぜかビデオデバイスがおかしなことになっていて、動画を撮影することができなくなってしまいました。これは非常に残念。単にデバイスが故障しているのかもしれませんが・・・。&lt;br /&gt;
&lt;br style=&quot;clear: both;&quot; /&gt;
Android 2.2 では、非常に高速になるとのことなので、果たして 512MHz の GDD Phone でどのくらいサクサクになるのか、期待せずにはいられません！</content><link rel='replies' type='application/atom+xml' href='http://ishikawa.r-stone.net/feeds/6899957011449645758/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9016404448327222924&amp;postID=6899957011449645758&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9016404448327222924/posts/default/6899957011449645758'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9016404448327222924/posts/default/6899957011449645758'/><link rel='alternate' type='text/html' href='http://ishikawa.r-stone.net/2010/06/blog-post.html' title='ドーナツをエクレアにしてみました'/><author><name>Naoki Ishikawa</name><uri>https://plus.google.com/100388846279954485067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-PV5mViRwW2I/AAAAAAAAAAI/AAAAAAAAAAA/H-3RmFHJOL8/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_3n88bcnF1Z0/TB9_5xYMB1I/AAAAAAAAALw/oQJNp2H-jmc/s72-c/Android_eclair.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9016404448327222924.post-5237369741983677729</id><published>2009-11-28T00:57:00.005+09:00</published><updated>2009-12-10T10:55:25.269+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="chrome"/><category scheme="http://www.blogger.com/atom/ns#" term="gmail"/><title type='text'>Gmail Template Switcher for Chrome Extension</title><content type='html'>&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://www.r-stone.net/blogs/ishikawa/uploaded_images/gtsforextension-760913.jpg&quot;&gt;&lt;img style=&quot;cursor:pointer; cursor:hand;width: 320px; height: 201px;&quot; src=&quot;http://www.r-stone.net/blogs/ishikawa/uploaded_images/gtsforextension-760910.jpg&quot; border=&quot;0&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;p&gt;しばらく前から、Gmail Template Switcher が Google Chrome の User Scripts で動かなくなっていました。&lt;br /&gt;
Google Chrome 4 からの仕様変更の影響で、ページ側のコンテキストにアクセスできなくなったことが原因でした。&lt;/p&gt;
&lt;p&gt;時間を見つけては対応策を検討しましたが、結局、Extension に移行するのが早い。ということです。&lt;/p&gt;
&lt;p&gt;というわけで、Chrome Extension 版の Gmail Template Switcher を作成しましたので、 Extension が有効な Chrome をお使いの方はどうぞお試しください。&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color:red&quot;&gt;update: &lt;/span&gt;
&lt;a href=&quot;https://chrome.google.com/extensions/&quot; title=&quot;Google Chrome Extensions&quot; target=&quot;_blank&quot;&gt;Google Chrome Extensions Gallery&lt;/a&gt;からのインストールは&lt;a href=&quot;https://chrome.google.com/extensions/detail/dcafmdckachnenigiihdmmkjaenneoca&quot; title=&quot;Google Chrome Extensions: Gmail Template Switcher for Chrome Extension&quot; target=&quot;_blank&quot;&gt;こちら&lt;/a&gt;からどうぞ。
&lt;/p&gt;
&lt;p&gt;&lt;a style=&quot;
font-weight: bold;
font-family: inherit;
text-align: center;
color: #2b333c;
background: orange;
border: 1px solid;
border-color: #c4cccc #acb5b5 #6f7777 #acb5b5;
-webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);
filter:progid:DXImageTransform.Microsoft.dropshadow(OffX=0, OffY=1, Color=#AAAAAA);
box-shadow: 0 1px 2px #AAA;
padding: .2em 1.5ex;
_padding: .2em 2ex;
_width/**/:1px;
_white-space: nowrap;
overflow: visible; /* fix button width for IE 5.5 to 7 */
cursor: pointer;
_cursor: hand;&quot; href=&quot;http://sites.google.com/a/r-stone.net/river-stone-resource/resource-2/gts.crx&quot; target=&quot;_blank&quot;&gt;Gmail Template Switcher for Chrome Extension&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;参考：&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://code.google.com/chrome/extensions/index.html&quot; title=&quot;Developer Documentation - Google Chrome Extensions - Google Code&quot; target=&quot;_blank&quot;&gt;Developer Documentation - Google Chrome Extensions - Google Code&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><link rel='replies' type='application/atom+xml' href='http://ishikawa.r-stone.net/feeds/5237369741983677729/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9016404448327222924&amp;postID=5237369741983677729&amp;isPopup=true' title='6 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9016404448327222924/posts/default/5237369741983677729'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9016404448327222924/posts/default/5237369741983677729'/><link rel='alternate' type='text/html' href='http://ishikawa.r-stone.net/2009/11/gmail-template-switcher-for-chrome.html' title='Gmail Template Switcher for Chrome Extension'/><author><name>Naoki Ishikawa</name><uri>https://plus.google.com/100388846279954485067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-PV5mViRwW2I/AAAAAAAAAAI/AAAAAAAAAAA/H-3RmFHJOL8/s512-c/photo.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9016404448327222924.post-3365543627888533515</id><published>2009-10-27T19:28:00.000+09:00</published><updated>2009-10-27T19:28:00.616+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="android"/><title type='text'>Android 1.6 にバージョンアップ</title><content type='html'>&lt;img style=&quot;cursor:pointer; cursor:hand;width: 200px; height: 200px;&quot; src=&quot;http://www.r-stone.net/blogs/ishikawa/uploaded_images/android-donut-775302.png&quot; border=&quot;0&quot; alt=&quot;Android 1.6 Donut&quot; /&gt;
&lt;p&gt;先日 &lt;a href=&quot;http://www.nttdocomo.co.jp/support/utilization/software_update/version_up/ht03a/&quot; title=&quot;HT-03Aのバージョンアップ情報 : HT-03Aのバージョンアップ内容 | お客様サポート | NTTドコモ&quot; target=&quot;_blank&quot;&gt;docomo の android 携帯「HT-03A」がバージョンアップ&lt;/a&gt;し、Android 1.6 になりました。&lt;/p&gt;
&lt;p&gt;そこで、手元の &lt;a href=&quot;http://www.r-stone.net/blogs/ishikawa/2009/06/google-developer-day-2009.html&quot; title=&quot;守破離でいこう!!: Google Developer Day 2009&quot; target=&quot;_blank&quot;&gt;GDD携帯&lt;/a&gt;もバージョンアップしてみました。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://fx-gp.seesaa.net/article/130344574.html&quot; title=&quot;Android GDDJ-09 システムイメージ 1.6アップデートまとめ | 開発&quot; target=&quot;_blank&quot;&gt;Android GDDJ-09 システムイメージ 1.6アップデートまとめ | 開発&lt;/a&gt; を参考に、数ステップで完了です。&lt;/p&gt;
&lt;p&gt;途中 &lt;a href=&quot;http://www.htc.com/jp/support/android/gddj-09.html#update-recovery&quot; title=&quot;HTC - Support - GDDJ-09&quot; target=&quot;_blank&quot;&gt;手順5&lt;/a&gt;の、イメージファイルをダウンロードし本体に転送する際に、下記のメッセージが表示された場合は、SDカードをアンマウントしてから再度実行します。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&gt;adb push signed-jdd-ota-14721.zip /sdcard/update.zip
failed to copy &#39;signed-jdd-ota-14721.zip&#39; to &#39;/sdcard/update.zip&#39;: Permission denied&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Android 1.6 では、Androidマーケットや YouTubeアプリなどのインターフェイスが刷新されかっこよくなっています。&lt;br /&gt;
また、全体的に動作が軽快になっていて、いい感じです。&lt;br /&gt;
ハードの性能アップなしにソフトをバージョンアップすると重くなると思っていたので、バージョンアップで動作が軽快になるのはとてもうれしいですね。&lt;/p&gt;

&lt;p&gt;参考：&lt;/p&gt;
&lt;blockquote cite=&quot;http://fx-gp.seesaa.net/article/130344574.html&quot;&gt;
    &lt;p&gt;Android GDDJ-09 システムイメージ 1.6アップデートまとめ&lt;/p&gt;
    &lt;p&gt;htcのサポートページに書かれた手順を参考に行った。縦に長めのページだが、実際に必要なのはその一部なので以下に抜き出してまとめる（「fastboot 方式の場合のみ」必要な手順の記述が多い）。&lt;br /&gt;
「概要」では２つの方法が提示されているが、おすすめ通りに「リカバリ イメージ方式」で行った（逆に1.6から1.5へ戻すには、「リカバリ イメージ方式」では無理なので「fastboot 方式」を使う必要があるようだ）。&lt;/p&gt;
    &lt;p&gt;&lt;a href=&quot;http://fx-gp.seesaa.net/article/130344574.html&quot; title=&quot;Android GDDJ-09 システムイメージ 1.6アップデートまとめ | 開発&quot; target=&quot;_blank&quot;&gt;Android GDDJ-09 システムイメージ 1.6アップデートまとめ | 開発&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;</content><link rel='replies' type='application/atom+xml' href='http://ishikawa.r-stone.net/feeds/3365543627888533515/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9016404448327222924&amp;postID=3365543627888533515&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9016404448327222924/posts/default/3365543627888533515'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9016404448327222924/posts/default/3365543627888533515'/><link rel='alternate' type='text/html' href='http://ishikawa.r-stone.net/2009/10/android-16.html' title='Android 1.6 にバージョンアップ'/><author><name>Naoki Ishikawa</name><uri>https://plus.google.com/100388846279954485067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-PV5mViRwW2I/AAAAAAAAAAI/AAAAAAAAAAA/H-3RmFHJOL8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9016404448327222924.post-5516391738314208611</id><published>2009-10-16T19:46:00.002+09:00</published><updated>2009-10-16T19:46:00.631+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="mysql"/><category scheme="http://www.blogger.com/atom/ns#" term="rails"/><title type='text'>[rails] Mysql で Incorrect datetime value が発生</title><content type='html'>&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://www.r-stone.net/blogs/ishikawa/uploaded_images/railsmysql-749895.jpg&quot;&gt;&lt;img style=&quot;cursor:pointer; cursor:hand;width: 320px; height: 239px;&quot; src=&quot;http://www.r-stone.net/blogs/ishikawa/uploaded_images/railsmysql-749891.jpg&quot; border=&quot;0&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;p&gt;Rails 2.3.4 と Mysql 5.0 (Windows) の環境で、Unit Test を実行すると下記のエラーが発生。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&gt;rake test:units
  1) Error:
test_should_authenticate_user(UserTest):
ActiveRecord::StatementInvalid: Mysql::Error: Incorrect datetime value: &#39;2009-10-16 07:56:13 UTC&#39; for column &#39;remember_token_expires_at&#39; at row 1: INSERT INTO `users` (`salt`, `updated_at`, `crypted_password`, `remember_token_expires_at`, `id`, `remember_token`, `login`, `created_at`, `email`) VALUES (&#39;356a192b7913b04c54574d18c28d46e6395428ab&#39;, &#39;2009-10-15 07:56:13&#39;, &#39;39e3509c8a1dff4e5b35850d970992321c4f1358&#39;, &#39;2009-10-16 07:56:13 UTC&#39;, 1, &#39;77de68daecd823babbb58edb1c8e14d7106e83bb&#39;, &#39;quentin&#39;, &#39;2009-10-10 07:56:12&#39;, &#39;quentin@example.com&#39;)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Mysql の sql-mode を空白に設定することで解決しました。&lt;/p&gt;
&lt;span style=&quot;font-weight: bold&quot;&gt;my.ini&lt;/span&gt;
&lt;pre&gt;&lt;code&gt;# Set the SQL mode to strict
#sql-mode=&quot;STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION&quot;
sql-mode=&#39;&#39;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;参考：&lt;/p&gt;
&lt;blockquote cite=&quot;http://www.mail-archive.com/rubyonrails-talk@googlegroups.com/msg00775.html&quot;&gt;
  &lt;p&gt;Now, open the my.ini file located at c:program files/MySQL/MySQL&lt;br /&gt;
Server X.x/my.ini.&lt;br /&gt;
Add a # at the begining of the line: sql-mode=&quot;STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION&quot;&lt;br /&gt;
Type sql_mode=&#39;&#39; on the next line and save the file.&lt;br /&gt;
restart mysql&lt;br /&gt;
&lt;br /&gt;
fixed it&lt;/p&gt;
  &lt;p&gt;&lt;a href=&quot;http://www.mail-archive.com/rubyonrails-talk@googlegroups.com/msg00775.html&quot; title=&quot;[Rails] Re: restful_authentication rspec failures &amp;quot;Mysql::Error: Incorre&quot; target=&quot;_blank&quot;&gt;[Rails] Re: restful_authentication rspec failures &amp;quot;Mysql::Error: Incorre&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;</content><link rel='replies' type='application/atom+xml' href='http://ishikawa.r-stone.net/feeds/5516391738314208611/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9016404448327222924&amp;postID=5516391738314208611&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9016404448327222924/posts/default/5516391738314208611'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9016404448327222924/posts/default/5516391738314208611'/><link rel='alternate' type='text/html' href='http://ishikawa.r-stone.net/2009/10/rails-mysql-incorrect-datetime-value.html' title='[rails] Mysql で Incorrect datetime value が発生'/><author><name>Naoki Ishikawa</name><uri>https://plus.google.com/100388846279954485067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-PV5mViRwW2I/AAAAAAAAAAI/AAAAAAAAAAA/H-3RmFHJOL8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9016404448327222924.post-2779784879782296596</id><published>2009-10-15T19:01:00.002+09:00</published><updated>2009-10-15T19:01:00.514+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="heatmap"/><category scheme="http://www.blogger.com/atom/ns#" term="webservice"/><title type='text'>[User Heat]ヒートマップ・ツールを試してみました</title><content type='html'>&lt;p&gt;先日話題になった、訪問者がWebのページのどこの段落を注目して読んでいるのかを可視化する、 &lt;a href=&quot;http://userheat.com/&quot; title=&quot;User Heat : どこが読まれているか見える！無料ヒートマップ・ツール&quot; target=&quot;_blank&quot;&gt;User Heat&lt;/a&gt; を試してみました。&lt;/p&gt;
&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://www.r-stone.net/blogs/ishikawa/uploaded_images/Heat-Map-Results-756445.png&quot;&gt;&lt;img style=&quot;cursor:pointer; cursor:hand;width: 320px; height: 184px;&quot; src=&quot;http://www.r-stone.net/blogs/ishikawa/uploaded_images/Heat-Map-Results-756434.png&quot; border=&quot;0&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;p&gt;ユーザーヒートでは、「マウスの軌跡」、「クリック場所」、「読まれた場所」の3つを分析可能です。&lt;br /&gt;
上の画像は、「クリック場所」を示す Click Map で、クリックした回数が多い箇所ほど赤く表示されるようです。&lt;/p&gt;
&lt;p&gt;しばらく前から仕込んでおいたのですが、分析には十分なアクセスが必要なようで、残念ながらまだヒートマップは見れないようです・・。&lt;/p&gt;
&lt;p&gt;サイトがどのように見られているのかが可視化できるのはいいですね！&lt;br /&gt;
ただ、あまりアクセスがないサイトだと、分析結果が出るまでに時間がかかりそうです・・・。&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://ishikawa.r-stone.net/feeds/2779784879782296596/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9016404448327222924&amp;postID=2779784879782296596&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9016404448327222924/posts/default/2779784879782296596'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9016404448327222924/posts/default/2779784879782296596'/><link rel='alternate' type='text/html' href='http://ishikawa.r-stone.net/2009/10/user-heat.html' title='[User Heat]ヒートマップ・ツールを試してみました'/><author><name>Naoki Ishikawa</name><uri>https://plus.google.com/100388846279954485067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-PV5mViRwW2I/AAAAAAAAAAI/AAAAAAAAAAA/H-3RmFHJOL8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9016404448327222924.post-5026149601995265970</id><published>2009-09-07T18:35:00.002+09:00</published><updated>2009-09-07T18:35:00.190+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="gae"/><category scheme="http://www.blogger.com/atom/ns#" term="gaeo"/><category scheme="http://www.blogger.com/atom/ns#" term="google"/><title type='text'>Google App Engine Oil で twitter もどき STEP 1</title><content type='html'>&lt;p&gt;&lt;a href=&quot;http://www.r-stone.net/blogs/ishikawa/2009/08/google-app-engine-oil.html&quot; title=&quot;守破離でいこう!!: Google App Engine Oil&quot; target=&quot;_blank&quot;&gt;前回&lt;/a&gt;、Webアプリケーションをさくっと手軽に構築できてしまう &lt;a href=&quot;http://code.google.com/intl/ja/appengine/&quot; title=&quot;Google App Engine - Google Code&quot; target=&quot;_blank&quot;&gt;Google App Engine (GAE)&lt;/a&gt; を試してみましたが、今回は、もう少しまともなアプリケーションを作ってみます。&lt;/p&gt;
&lt;p&gt;作成する前に、つい先日 &lt;a href=&quot;http://code.google.com/p/google-app-engine-oil/downloads/list&quot; title=&quot;Downloads - google-app-engine-oil - Project Hosting on Google Code&quot; target=&quot;_blank&quot;&gt;GAEO が 0.3 にバージョンアップ&lt;/a&gt;しているようなので、早速最新のリリースを試してみましょう。&lt;/p&gt;
&lt;p&gt;バージョンアップ作業は、環境変数のパスを新しいバージョンのものに変更しただけです。&lt;/p&gt;

&lt;a href=&quot;http://twitter.com/&quot; title=&quot;Twitter&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://www.r-stone.net/blogs/ishikawa/uploaded_images/twitter-745104.jpg&quot; alt=&quot;Twitter&quot; /&gt;&lt;/a&gt;
&lt;p&gt;&lt;a href=&quot;http://twitter.com/&quot; title=&quot;Twitter&quot; target=&quot;_blank&quot;&gt;Twitter&lt;/a&gt; は、140文字以下の短いメッセージをつぶやきあうシンプルなサービスです。現在とても注目されているサービスですね。&lt;br /&gt;シンプルでわかりやすいですので、今回は Twitter もどきのアプリケーションを作成してみます。&lt;/p&gt;

&lt;h4&gt;mockker&lt;/h4&gt;

&lt;p&gt;それでは、Twitter もどきの「mockker」というプロジェクトを作成します。&lt;br /&gt;とりえあず今回は、データの登録ができればOKとします。また、アカウントは Google App Engine の ユーザーサービスを使用し、Google アカウントと連携させます。&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;prettyprint&quot;&gt;gaeo.py mockker
cd mockker&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;まずは、つぶやきの scaffold を作成します。&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;prettyprint&quot;&gt;gaeogen.py scaffold status create show &quot;text:StringProperty()&quot; &quot;user:UserProperty()&quot; &quot;created_at:DateTimeProperty(auto_now_add=True)&quot;&lt;/code&gt;&lt;/pre&gt;

&lt;h4&gt;ルーティング&lt;/h4&gt;

&lt;p&gt;デフォルトのルートへのルーティングを、welcome/index から status/index へ変更します。&lt;/p&gt;
&lt;span style=&quot;font-weight: bold&quot;&gt;gaeo/dispatch/router.py&lt;/span&gt;
&lt;pre&gt;&lt;code class=&quot;prettyprint&quot;&gt;class Router:

  &quot;&quot;&quot; Handles the url routing... &quot;&quot;&quot;


  class __impl:

    def __init__(self):
      self.__routing_root = {&#39;controller&#39;: &#39;status&#39;,
                   &#39;action&#39;: &#39;index&#39;}

&lt;/code&gt;&lt;/pre&gt;

&lt;h4&gt;model&lt;/h4&gt;
&lt;p&gt;scaffold により、 application/model/status.py が作成されます。&lt;/p&gt;

&lt;span style=&quot;font-weight: bold&quot;&gt;application/model/status.p&lt;/span&gt;
&lt;pre&gt;&lt;code class=&quot;prettyprint&quot;&gt;from google.appengine.ext import db
from gaeo.model import BaseModel, SearchableBaseModel

class Status(BaseModel):
  created_at = db.DateTimeProperty(auto_now_add=True)
  text = db.StringProperty()
  user = db.UserProperty()
&lt;/code&gt;&lt;/pre&gt;

&lt;h4&gt;controller&lt;/h4&gt;

&lt;p&gt;scaffold により作成された status コントローラを次のように修正します。&lt;/p&gt;
&lt;span style=&quot;font-weight: bold&quot;&gt;application/controller/status.py&lt;/span&gt;
&lt;pre&gt;&lt;code class=&quot;prettyprint&quot;&gt;import cgi
import logging

from google.appengine.ext import db
from google.appengine.api import users

from gaeo.controller import BaseController

from model.status import Status

class StatusController(BaseController):
    def create(self):
        r = Status(
            # Uncomment all required properties here.
            # text = self.params.get(&#39;text&#39;, None),
            # created_at = self.params.get(&#39;created_at&#39;, None),
            user = users.get_current_user(),
        )
        for prop in Status.properties():
            if prop in self.params:
                setattr(r, prop, self.params.get(prop))
        r.put()
        self.flash[&#39;notice&#39;] = u&quot;独り言を更新したよ&quot;
        self.redirect(&#39;/&#39;)

    def index(self):
        notice = self.flash.get(&#39;notice&#39;, &#39;&#39;)
        self.msg = notice
        if self.current_user:
            query = Status.all().filter(&#39;user = &#39;, self.current_user)
            query.order(&quot;-created_at&quot;)
            self.result = query.fetch(limit=10)

    def show(self):
        r = Status.get(self.params.get(&#39;id&#39;))
        if r:
            for prop in Status.properties():
                setattr(self, prop, getattr(r, prop))
        else:
            self.redirect(&#39;/&#39;)
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;ユーザー認証のため、base コントローラの before_action を次のように修正します。&lt;br /&gt;
これにより、全てのアクションの前にユーザー認証が実行されます。&lt;/p&gt;
&lt;span style=&quot;font-weight: bold&quot;&gt;gaeo/controller/__init__.py&lt;/span&gt;
&lt;pre&gt;&lt;code class=&quot;prettyprint&quot;&gt;from google.appengine.api import users

  def before_action(self):
    self.current_user = users.get_current_user()
    if not self.current_user:
      self.signed_in = False
      self.login_url = users.create_login_url(self.request.uri)
      #self.redirect(users.create_login_url(self.request.uri))
    else:
      self.signed_in = True
      self.logout_url = users.create_logout_url(self.request.uri)
      self.nickname = self.current_user.nickname()&lt;/code&gt;&lt;/pre&gt;


&lt;h4&gt;view&lt;/h4&gt;

&lt;p&gt;view を次のように修正します。&lt;/p&gt;
&lt;span style=&quot;font-weight: bold&quot;&gt;application/templates/base.html&lt;/span&gt;
&lt;pre&gt;&lt;code class=&quot;prettyprint&quot;&gt;&amp;lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.01//EN&quot;
  &quot;http://www.w3.org/TR/html4/strict.dtd&quot;&amp;gt;
&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;
  &amp;lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=UTF-8&quot;&amp;gt;
  &amp;lt;title&amp;gt;{% block title %}{% endblock %}&amp;lt;/title&amp;gt;
  &amp;lt;link rel=&quot;stylesheet&quot; href=&quot;/css/common.css&quot; type=&quot;text/css&quot; media=&quot;screen&quot; /&amp;gt;
  {% if signed_in %}
  &amp;lt;link rel=&quot;stylesheet&quot; href=&quot;/css/login.css&quot; type=&quot;text/css&quot; media=&quot;screen&quot; /&amp;gt;
  {% endif %}
  &amp;lt;script type=&quot;text/javascript&quot; src=&quot;http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
  &amp;lt;script type=&quot;text/javascript&quot; src=&quot;/js/application.js&quot;&amp;gt;&amp;lt;/script&amp;gt;

&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
&amp;lt;div id=&quot;header&quot;&amp;gt;
  &amp;lt;div id=&quot;header_inner&quot;&amp;gt;
  &amp;lt;h3&amp;gt;&amp;lt;a href=&quot;/&quot; title=&quot;Mockker&quot;&amp;gt;Mockker&amp;lt;/a&amp;gt;&amp;lt;/h3&amp;gt;
  {% if signed_in %}
  &amp;lt;ul id=&quot;nav&quot;&amp;gt;
    &amp;lt;li&amp;gt;&amp;lt;a href=&quot;{{ logout_url }}&quot; title=&quot;Logout&quot;&amp;gt;Logout&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
  &amp;lt;/ul&amp;gt;
  {% else %}
  &amp;lt;ul id=&quot;nav&quot;&amp;gt;
    &amp;lt;li&amp;gt;&amp;lt;a href=&quot;{{ login_url }}&quot; title=&quot;Login&quot;&amp;gt;Login&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
  &amp;lt;/ul&amp;gt;
  {% endif %}
  &amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div id=&quot;content&quot;&amp;gt;
  &amp;lt;div id=&quot;content_inner&quot;&amp;gt;
  {% if msg %}
  &amp;lt;div class=&quot;flash&quot;&amp;gt;
    &amp;lt;div class=&quot;notice&quot;&amp;gt;
    &amp;lt;p&amp;gt;{{ msg }}&amp;lt;/p&amp;gt;
    &amp;lt;/div&amp;gt;
  &amp;lt;/div&amp;gt;
  {% endif %}
  {% if signed_in %}
  &amp;lt;div id=&quot;update&quot;&amp;gt;
    &amp;lt;form method=&quot;post&quot; action=&quot;/status/create&quot;&amp;gt;
    &amp;lt;span id=&quot;countdown&quot;&amp;gt;140&amp;lt;/span&amp;gt;
    &amp;lt;label for=&quot;text&quot;&amp;gt;何か言いたいことは？&amp;lt;/label&amp;gt;
    &amp;lt;textarea id=&quot;text&quot; name=&quot;text&quot; rows=&quot;10&quot; cols=&quot;10&quot;&amp;gt;&amp;lt;/textarea&amp;gt;
    &amp;lt;input type=&quot;submit&quot; name=&quot;update&quot; value=&quot;Update&quot; /&amp;gt;
    &amp;lt;/form&amp;gt;
  &amp;lt;/div&amp;gt;
  {% endif %}

  {% block content %}{% endblock %}
  &amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;

&amp;lt;div id=&quot;footer&quot;&amp;gt;
  &amp;lt;div id=&quot;footer_inner&quot;&amp;gt;
  &amp;lt;div class=&quot;column&quot;&amp;gt;
    &amp;lt;ul&amp;gt;
    &amp;lt;li&amp;gt;&amp;lt;a href=&quot;/&quot; title=&quot;Home&quot;&amp;gt;Home&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
    &amp;lt;/ul&amp;gt;
  &amp;lt;/div&amp;gt;
  &amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt;

&lt;span style=&quot;font-weight: bold&quot;&gt;application/templates/status/index.html&lt;/span&gt;
&lt;pre&gt;&lt;code class=&quot;prettyprint&quot;&gt;{% extends &quot;../base.html&quot; %}

{% block title %}StatusController#index{% endblock %}

{% block content %}

&amp;lt;div id=&quot;statuses&quot;&amp;gt;
{% for r in result %}

  &amp;lt;div id=&quot;status_{{ r.key }}&quot; class=&quot;status&quot;&amp;gt;
  &amp;lt;div class=&quot;info&quot;&amp;gt;

    &amp;lt;p class=&quot;who_when&quot;&amp;gt;
    {{ r.user.nickname }}&amp;lt;br /&amp;gt;
    {{ r.created_at }}
    &amp;lt;/p&amp;gt;

    &amp;lt;p class=&quot;actions&quot;&amp;gt;
    &amp;lt;/p&amp;gt;
  &amp;lt;/div&amp;gt;

  &amp;lt;div class=&quot;text&quot;&amp;gt;
    {{ r.text }}
  &amp;lt;/div&amp;gt;
  &amp;lt;/div&amp;gt;
{% endfor %}
&amp;lt;/div&amp;gt;


{% endblock %}&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;あとは、Javascript や CSS などで、見栄えを整えます。&lt;/p&gt;

&lt;h4&gt;実行&lt;/h4&gt;

&lt;pre&gt;&lt;code&gt;dev_appserver.py .&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;登録したデータをクリアしたい場合は、「--clear_datastore」オプションをつけて実行します。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;dev_appserver.py --clear_datastore .&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://www.r-stone.net/blogs/ishikawa/uploaded_images/mockker-724628.png&quot;&gt;&lt;img style=&quot;cursor:pointer; cursor:hand;width: 320px; height: 194px;&quot; src=&quot;http://www.r-stone.net/blogs/ishikawa/uploaded_images/mockker-724626.png&quot; border=&quot;0&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;以上で、自分だけがつぶやくことができる、独り言アプリケーションの完成ですｗ&lt;br /&gt;
次回は、他人のつぶやきを表示できるようにしてみたいと思います。&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://ishikawa.r-stone.net/feeds/5026149601995265970/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9016404448327222924&amp;postID=5026149601995265970&amp;isPopup=true' title='1 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9016404448327222924/posts/default/5026149601995265970'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9016404448327222924/posts/default/5026149601995265970'/><link rel='alternate' type='text/html' href='http://ishikawa.r-stone.net/2009/09/google-app-engine-oil-twitter-step-1.html' title='Google App Engine Oil で twitter もどき STEP 1'/><author><name>Naoki Ishikawa</name><uri>https://plus.google.com/100388846279954485067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-PV5mViRwW2I/AAAAAAAAAAI/AAAAAAAAAAA/H-3RmFHJOL8/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9016404448327222924.post-8216045929841674991</id><published>2009-08-04T22:34:00.001+09:00</published><updated>2009-09-08T09:35:11.767+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="gae"/><category scheme="http://www.blogger.com/atom/ns#" term="gaeo"/><category scheme="http://www.blogger.com/atom/ns#" term="google"/><title type='text'>Google App Engine Oil</title><content type='html'>&lt;a href=&quot;http://code.google.com/p/google-app-engine-oil/&quot; title=&quot;google-app-engine-oil - Project Hosting on Google Code&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://www.r-stone.net/blogs/ishikawa/uploaded_images/gaeo-701663.png&quot; alt=&quot;Google App Engine Oil&quot; /&gt;&lt;/a&gt;
&lt;p&gt;Webアプリケーションをさくっと手軽に構築できてしまう &lt;a href=&quot;http://code.google.com/intl/ja/appengine/&quot; title=&quot;Google App Engine - Google Code&quot; target=&quot;_blank&quot;&gt;Google App Engine (GAE)&lt;/a&gt; ですが、この Google 製のエンジンに、あるオイルを入れてやると、さらに激速なマシンができるようです。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://code.google.com/p/google-app-engine-oil/&quot; title=&quot;google-app-engine-oil - Project Hosting on Google Code&quot; target=&quot;_blank&quot;&gt;Google App Engine Oil(GAEO)&lt;/a&gt; というこのオイルは、&lt;a href=&quot;http://rubyonrails.org/&quot; title=&quot;Ruby on Rails&quot; target=&quot;_blank&quot;&gt;Ruby on Rails&lt;/a&gt; を参考にして作られた App Engine 専用の レーシングスペックのエンジンオイル（Webアプリケーションフレームワーク）です。&lt;/p&gt;

&lt;h4&gt;GAEO をインストール&lt;/h4&gt;
&lt;p&gt;まず、GAEO は GAE 上で実行されますので、予め &lt;a href=&quot;http://www.python.org/download/&quot; title=&quot;Download Python Software&quot; target=&quot;_blank&quot;&gt;Python&lt;/a&gt; や、&lt;a href=&quot;http://code.google.com/intl/ja/appengine/downloads.html&quot; title=&quot;ダウンロード - Google App Engine - Google Code&quot; target=&quot;_blank&quot;&gt;GAE SDK&lt;/a&gt; をインストールします。&lt;br /&gt;
なお、以下は Windows での解説です。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://code.google.com/p/google-app-engine-oil/&quot; title=&quot;google-app-engine-oil - Project Hosting on Google Code&quot; target=&quot;_blank&quot;&gt;プロジェクトホーム&lt;/a&gt; からパッケージ（gaeo-0.2.1.zip など）をダウンロードし、好きなところに解凍します。&lt;/p&gt;
&lt;p&gt;GAEO スクリプトを利用するために、解凍先の bin ディレクトリへのパスを、環境変数 PATH に追加します。&lt;/p&gt;
&lt;p&gt;パスを設定しましたら、gaeo.py コマンドを実行し、下記のようになるとインストール完了です。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&gt;gaeo.py
Usage: C:\&amp;lt;install dir&amp;gt;\bin\gaeo.py &amp;lt;project name&amp;gt;&lt;/code&gt;&lt;/pre&gt;

&lt;h4&gt;Hello GAEO&lt;/h4&gt;
&lt;p&gt;では、早速 Hello GAEOプロジェクトを作ってみます&lt;/p&gt;
&lt;p&gt;GAEO でのプロジェクトを作成するには、作業ディレクトリで、次のコマンドを実行します。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;gaeo.py hello&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;hello プロジェクトを作成すると、hello ディレクトリには、下記のコンテンツが生成されます。Rails そっくりです。&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;app.yaml, favicon.ico, main.py
  &lt;p&gt;app.yaml と main.py は、GAE のメイン設定ファイルです。&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;application/
  &lt;p&gt;アプリケーションのコードの置き場所。基本的にこの中のファイルを編集していきます。&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;assets/
  &lt;p&gt;javascript や css ファイルの置き場所。app.yaml で設定可能です。&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;gaeo/
  &lt;p&gt;GAEO のコアライブラリ。GAEO のアップグレードは、このディレクトリのファイルを入れ替えるとOKです。&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;plugins/
  &lt;p&gt;プラグインのインストールディレクトリです。&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;アプリケーションの起動と確認&lt;/h4&gt;
&lt;p&gt;次のコマンドで GAE を起動し、作成したアプリケーションの動作を確認します。&lt;br /&gt;
なお、コマンドはアプリケーションのルートディレクトリで実行します。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;hello&gt;dev_appserver.py .
 Running application hello on port 8080: http://localhost:8080&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;http://localhost:8080/ にアクセスして、「It works!!」と表示されればOKです。&lt;/p&gt;
&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://www.r-stone.net/blogs/ishikawa/uploaded_images/itworks-749422.jpg&quot;&gt;&lt;img style=&quot;cursor:pointer; cursor:hand;width: 320px; height: 200px;&quot; src=&quot;http://www.r-stone.net/blogs/ishikawa/uploaded_images/itworks-749420.jpg&quot; border=&quot;0&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;

&lt;p&gt;なかなか刺激的な体験ですが、次はちょっとしたアプリケーションを作ってみたいと思います。&lt;/p&gt;

&lt;dl&gt;
    &lt;dt&gt;Google App Engine Oil で twitter もどき&lt;/dt&gt;
    &lt;dd&gt;&lt;a href=&quot;http://www.r-stone.net/blogs/ishikawa/2009/09/google-app-engine-oil-twitter-step-1.html&quot; title=&quot;守破離でいこう!!: Google App Engine Oil で twitter もどき STEP 1&quot; target=&quot;_blank&quot;&gt;Google App Engine Oil で twitter もどき STEP 1&lt;/a&gt;&lt;/dd&gt;
&lt;/dl&gt;

&lt;p&gt;参考：&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://doc-ja.gaeo.org/&quot; title=&quot;ホーム ‎(GAEO ドキュメント日本語和訳バージョン)&quot; target=&quot;_blank&quot;&gt;GAEO ドキュメント日本語和訳バージョン&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><link rel='replies' type='application/atom+xml' href='http://ishikawa.r-stone.net/feeds/8216045929841674991/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9016404448327222924&amp;postID=8216045929841674991&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9016404448327222924/posts/default/8216045929841674991'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9016404448327222924/posts/default/8216045929841674991'/><link rel='alternate' type='text/html' href='http://ishikawa.r-stone.net/2009/08/google-app-engine-oil.html' title='Google App Engine Oil'/><author><name>Naoki Ishikawa</name><uri>https://plus.google.com/100388846279954485067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-PV5mViRwW2I/AAAAAAAAAAI/AAAAAAAAAAA/H-3RmFHJOL8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9016404448327222924.post-5867007645027500928</id><published>2009-07-16T19:25:00.001+09:00</published><updated>2009-07-16T19:25:01.002+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="chrome"/><category scheme="http://www.blogger.com/atom/ns#" term="gmail"/><category scheme="http://www.blogger.com/atom/ns#" term="greasemonkey"/><title type='text'>[Gmail][Greasemonkey]Gmail Template Switcher を Update</title><content type='html'>&lt;a href=&quot;http://d.hatena.ne.jp/re_guzy/20070904/p1&quot; title=&quot;Gmail にテンプレート切り替え機能を付けてみた - 記憶は削除の方向で&quot; target=&quot;_blank&quot;&gt;&lt;img style=&quot;cursor:pointer; cursor:hand;width: 192px; height: 116px;&quot; src=&quot;http://www.r-stone.net/blogs/ishikawa/uploaded_images/GTS-708038.jpg&quot; border=&quot;0&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;p&gt;しばらくぶりに、&lt;a href=&quot;http://www.r-stone.net/blogs/ishikawa/2008/05/gmail-20.html&quot; title=&quot;守破離でいこう!!: Gmail 2.0 で複数の署名を切り替える&quot; target=&quot;_blank&quot;&gt;Gmail Tempolate Switcher&lt;/a&gt; を&lt;a href=&quot;http://userscripts.org/scripts/show/26426&quot; title=&quot;Gmail Template Switcher - v 2.0 for Greasemonkey&quot; target=&quot;_blank&quot;&gt;アップデート&lt;/a&gt;しました。&lt;/p&gt;
&lt;p&gt;変更点は下記の2点です。&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Google Chrome User Scripts に対応&lt;/li&gt;
  &lt;li&gt;リッチテキストに対応&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;最近の僕は、&lt;a href=&quot;http://www.google.com/chrome/intl/ja/landing.html&quot; title=&quot;Google Chrome - ブラウザのダウンロード&quot; target=&quot;_blank&quot;&gt;Google Chrome&lt;/a&gt; がメインブラウザになりつつあります。&lt;br /&gt;
Firefox は、Firebug を使いたいときや、動作確認程度になってしまいました。&lt;/p&gt;
&lt;p&gt;Chrome は、なんといっても動作速度がお気に入りです。とにかく早いですね。これで Google ツールバーがあれば最高なんですけど。&lt;/p&gt;
&lt;p&gt;そんな Chrome ですが、先日、Chrome のバージョンが上がり、これまで Greasemetal 上で動作させていた Greasemonkey Script が動かなくなってしまいました。これはまずいということで、Google Chrome User Scripts 対応にアップデートです。&lt;/p&gt;
&lt;p&gt;そして、またまた先日。今度は、右上の返信ボタンから返信しようとすると、強制的にリッチテキスト形式になってしまう現象が発生していました。&lt;br /&gt;
テンプレートが反映されず、これはまずいということで、リッチテキスト形式対応にアップデートです。&lt;p&gt;
&lt;p&gt;また、コメントでもご意見いただきありがとうございます。&lt;/p&gt;

&lt;p&gt;そんなわけで、最新版の Gmail Tempolate Switcher は、下記からダウンロードしてください。&lt;/p&gt;
&lt;p&gt;&lt;a style=&quot; font-weight: bold; font-family: inherit; text-align: center; color: #2b333c; background: orange; border: 1px solid; border-color: #c4cccc #acb5b5 #6f7777 #acb5b5; -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3); filter:progid:DXImageTransform.Microsoft.dropshadow(OffX=0, OffY=1, Color=#AAAAAA); box-shadow: 0 1px 2px #AAA; padding: .2em 1.5ex; _padding: .2em 2ex; _width/**/:1px; _white-space: nowrap; overflow: visible; /* fix button width for IE 5.5 to 7 */ cursor: pointer; _cursor: hand;&quot; href=&quot;http://userscripts.org/scripts/show/26426&quot; target=&quot;_blank&quot;&gt;Gmail Template Switcher - v 2.0&lt;/a&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://ishikawa.r-stone.net/feeds/5867007645027500928/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9016404448327222924&amp;postID=5867007645027500928&amp;isPopup=true' title='5 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9016404448327222924/posts/default/5867007645027500928'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9016404448327222924/posts/default/5867007645027500928'/><link rel='alternate' type='text/html' href='http://ishikawa.r-stone.net/2009/07/gmailgreasemonkeygmail-template.html' title='[Gmail][Greasemonkey]Gmail Template Switcher を Update'/><author><name>Naoki Ishikawa</name><uri>https://plus.google.com/100388846279954485067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-PV5mViRwW2I/AAAAAAAAAAI/AAAAAAAAAAA/H-3RmFHJOL8/s512-c/photo.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9016404448327222924.post-1316249019825750966</id><published>2009-06-15T18:52:00.003+09:00</published><updated>2009-06-29T10:32:51.882+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="GDD09"/><category scheme="http://www.blogger.com/atom/ns#" term="GDD09JP"/><category scheme="http://www.blogger.com/atom/ns#" term="google"/><title type='text'>Google Developer Day 2009</title><content type='html'>&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://code.google.com/intl/ja/events/developerday/2009/home.html&quot; title=&quot;Google Developer Day&quot;&gt;&lt;img src=&quot;http://www.r-stone.net/blogs/ishikawa/uploaded_images/gddlogo-713036.jpg&quot; border=&quot;0&quot; alt=&quot;Google Developer Day&quot; /&gt;&lt;/a&gt;
&lt;p&gt;今年も &lt;a href=&quot;http://code.google.com/intl/ja/events/developerday/2009/home.html&quot; title=&quot;Google Developer Day&quot; target=&quot;_blank&quot;&gt;Google Developer Day&lt;/a&gt; に参加してきました。&lt;/p&gt;
&lt;p&gt;すでに恒例のイベントとなっていますが、年々内容が洗練され、とてもすばらしい内容になってきました。&lt;/p&gt;
&lt;p&gt;今回の主な内容は、次のもの。&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.html5.jp/&quot; title=&quot;HTML5.JP - 次世代HTML標準 HTML5情報サイト&quot; target=&quot;_blank&quot;&gt;HTML5&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://wave.google.com/&quot; title=&quot;Google Wave Preview&quot; target=&quot;_blank&quot;&gt;Google Wave&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.google.co.jp/mobile/android/&quot; title=&quot;Google モバイル - Android&quot; target=&quot;_blank&quot;&gt;Android&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://code.google.com/intl/ja/apis/opensocial/&quot; title=&quot;OpenSocial - Google Code&quot; target=&quot;_blank&quot;&gt;Open Social&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://code.google.com/intl/ja/appengine/&quot; title=&quot;Google App Engine - Google Code&quot; target=&quot;_blank&quot;&gt;Google App Engine&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.google.com/a/help/intl/ja/index.html&quot; title=&quot;Google Apps へようこそ&quot; target=&quot;_blank&quot;&gt;Google Apps&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://sites.google.com/site/gmapsapi3/&quot; title=&quot;Google Maps API Version3 日本語ドキュメント&quot; target=&quot;_blank&quot;&gt;Google Maps&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://www.r-stone.net/blogs/ishikawa/uploaded_images/IMG_2010-732834.JPG&quot; title=&quot;Google Developer Day&quot;&gt;&lt;img style=&quot;cursor:pointer; cursor:hand;width: 320px; height: 213px;&quot; src=&quot;http://www.r-stone.net/blogs/ishikawa/uploaded_images/IMG_2010-732535.JPG&quot; border=&quot;0&quot; alt=&quot;Google Developer Day&quot; /&gt;&lt;/a&gt;
&lt;p&gt;なかでも、&lt;a href=&quot;http://www.html5.jp/&quot; title=&quot;HTML5.JP - 次世代HTML標準 HTML5情報サイト&quot; target=&quot;_blank&quot;&gt;HTML5&lt;/a&gt; と &lt;a href=&quot;http://wave.google.com/&quot; title=&quot;Google Wave Preview&quot; target=&quot;_blank&quot;&gt;Google Wave&lt;/a&gt; はあらたな時代を感じさせるすばらしいものでした。&lt;br /&gt;
ブラウザだけで（HTML + Javascript）、2D や 3D といったリッチな表現を可能にする、HTML5。&lt;br /&gt;
これまでの メール 主体のコミュニケーションを大きく変えてしまうパワーがある、Google Wave。&lt;br /&gt;
実際に普及となるとまだ先だとは思いますが、
&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.google.co.jp/mobile/android/&quot; title=&quot;Google モバイル - Android&quot; target=&quot;_blank&quot;&gt;Android&lt;/a&gt; についても、もうすぐ日本でも &lt;a href=&quot;http://ht-03a.nttdocomo.co.jp/index.html&quot; title=&quot;ケータイするGoogle(TM)って？&quot; target=&quot;_blank&quot;&gt;docomo から発売&lt;/a&gt;されますので、これから非常に注目されるものです。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://code.google.com/intl/ja/apis/opensocial/&quot; title=&quot;OpenSocial - Google Code&quot; target=&quot;_blank&quot;&gt;Open Social&lt;/a&gt; は、ついに日本最大の SNS である mixi が完全対応ということで、多くのユーザにリーチできるという点で、マーケティング的にも非常に魅力的なものになりました。&lt;br /&gt;
Android と Open Social の組み合わせは、非常に刺激的なものです。&lt;/p&gt;
&lt;p&gt;そして、&lt;a href=&quot;http://www.google.com/a/help/intl/ja/index.html&quot; title=&quot;Google Apps へようこそ&quot; target=&quot;_blank&quot;&gt;Google Apps&lt;/a&gt; と &lt;a href=&quot;http://code.google.com/intl/ja/appengine/&quot; title=&quot;Google App Engine - Google Code&quot; target=&quot;_blank&quot;&gt;Google App Engine&lt;/a&gt; の組み合わせによる、Enterprise なアプローチは、クラウド化する今日において、対企業へ非常に魅力的なソリューションを提供できるようになります。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://sites.google.com/site/gmapsapi3/&quot; title=&quot;Google Maps API Version3 日本語ドキュメント&quot; target=&quot;_blank&quot;&gt;Google Maps&lt;/a&gt; は、久しぶりのバージョンアップにより、Ver 3 になります。&lt;br /&gt;
iPhone や、Android といったモバイル端末上で快適に動作するように最適化がなされるようです。&lt;br /&gt;
GPS が普及し、地図分野はますます便利になっていきますね。&lt;/p&gt;
&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://www.r-stone.net/blogs/ishikawa/uploaded_images/IMG_2065-778875.JPG&quot; title=&quot;Google Developer Day 2009 Android&quot;&gt;&lt;img style=&quot;cursor:pointer; cursor:hand;width: 320px; height: 272px;&quot; src=&quot;http://www.r-stone.net/blogs/ishikawa/uploaded_images/IMG_2065-778115.JPG&quot; border=&quot;0&quot; alt=&quot;Google Developer Day 2009 Android&quot; /&gt;&lt;/a&gt;
&lt;p&gt;今回の GDD では、Google I/O 同様サプライズとして、Google Dev Phone の新版が無料配布されました。&lt;br /&gt;
すでにあった Dev Phone 1 (Android 1.0) を、Android 1.5 にアップデートしようかと思っていたところだったので、ちょうどいいタイミングです。&lt;br /&gt;
しかも、ロケールに日本語があって、日本語での文字入力も可能。すばらしいです。&lt;br /&gt;
これで、Android 1.5 でも実機テストが可能ですね。&lt;/p&gt;
&lt;p&gt;会場でも、iPhone を片手に講演を聴いている方が多数いて、やはり、昨年とは会場の雰囲気も違いました。&lt;br /&gt;
来年はきっと、僕も Android を片手に講演を聴いているでしょう・・。&lt;/p&gt;
&lt;p&gt;思いついたアイディアが、たとえ先見の明があったとしても、それが時期尚早だったりすることがあります。&lt;br /&gt;
しかし、それが今ならなんだかいけそうな気がする！と、今年の GDDD は、そんな気になりました。&lt;/p&gt;
&lt;p&gt;今一度、過去のアイディアを整理してみるのもいいかもしれません。&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://ishikawa.r-stone.net/feeds/1316249019825750966/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9016404448327222924&amp;postID=1316249019825750966&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9016404448327222924/posts/default/1316249019825750966'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9016404448327222924/posts/default/1316249019825750966'/><link rel='alternate' type='text/html' href='http://ishikawa.r-stone.net/2009/06/google-developer-day-2009.html' title='Google Developer Day 2009'/><author><name>Naoki Ishikawa</name><uri>https://plus.google.com/100388846279954485067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-PV5mViRwW2I/AAAAAAAAAAI/AAAAAAAAAAA/H-3RmFHJOL8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9016404448327222924.post-7224706730545480985</id><published>2009-05-24T18:00:00.002+09:00</published><updated>2009-05-25T09:17:01.804+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="excel"/><category scheme="http://www.blogger.com/atom/ns#" term="vba"/><title type='text'>Excel VBA の ADO で、メモリリークが発生する</title><content type='html'>&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://support.microsoft.com/kb/319998/en-us&quot; title=&quot;BUG&amp;#58; Memory leak occurs when you query an open Excel worksheet by using ActiveX Data Objects &amp;#40;ADO&amp;#41;&quot; target=&quot;_blank&quot;&gt;&lt;img style=&quot;cursor:pointer; cursor:hand;width: 320px; height: 213px;&quot; src=&quot;http://www.r-stone.net/blogs/ishikawa/uploaded_images/ado-717103.jpg&quot; border=&quot;0&quot; alt=&quot;BUG&amp;#58; Memory leak occurs when you query an open Excel worksheet by using ActiveX Data Objects &amp;#40;ADO&amp;#41;&quot; /&gt;&lt;/a&gt;
&lt;p&gt;Excel をデータベースとして使用すると、VBA の ADO や DAO でデータを操作した方が便利なことがあります。&lt;/p&gt;
&lt;p&gt;例えば、単純にデータの集計をしたり、特定の列のある値の行を選択したい場合は、ADO や DAO で SQL 操作すると結構便利だったりします。&lt;/p&gt;
&lt;p&gt;しかしながら、すでに開いている Excel ファイルに対し ADO や DAO による操作をすると、メモリリークが発生するバグがあるようです。 &lt;/p&gt;
&lt;blockquote cite=&quot;http://support.microsoft.com/kb/319998/ja&quot;&gt;
    &lt;p&gt;Microsoft ActiveX データ オブジェクト (ADO) を取得すると Excel プロセスで、メモリ リークが Excel で開いている Excel ワークシートから Recordset が発生します。 反復クエリ、最終的に Excel にメモリ不足のため実行しでエラーが発生するか応答を停止したように Excel があります。&lt;/p&gt;
    &lt;p&gt;&lt;a href=&quot;http://support.microsoft.com/kb/319998/ja&quot; title=&quot;[BUG]: ActiveX データ オブジェクト (ADO) を使用して、開いている Excel ワークシートをクエリすると、メモリ リークが発生します。&quot; target=&quot;_blank&quot;&gt;[BUG]: ActiveX データ オブジェクト (ADO) を使用して、開いている Excel ワークシートをクエリすると、メモリ リークが発生します。&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;数回の使用ならば気付かないかもしれませんが、繰り返し UPDATE などで更新をかけたりしていると、ものすごい勢いで使用メモリが増加していきます。&lt;/p&gt;
&lt;p&gt;ADO や DAO を使用して Excel を操作する場合は、データファイルを別に用意するなどして、開いている Excel ファイルに対して操作しないように注意する必要がありますね。&lt;/p&gt;
&lt;p&gt;参考：&lt;a href=&quot;http://blog.goo.ne.jp/end-u/e/097cc7b7924061b082817cb27f7a7563&quot; title=&quot;■ADOのメモリリーク - 半角チルダ&quot; target=&quot;_blank&quot;&gt;■ADOのメモリリーク - 半角チルダ&lt;/a&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://ishikawa.r-stone.net/feeds/7224706730545480985/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9016404448327222924&amp;postID=7224706730545480985&amp;isPopup=true' title='1 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9016404448327222924/posts/default/7224706730545480985'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9016404448327222924/posts/default/7224706730545480985'/><link rel='alternate' type='text/html' href='http://ishikawa.r-stone.net/2009/05/excel-vba-ado.html' title='Excel VBA の ADO で、メモリリークが発生する'/><author><name>Naoki Ishikawa</name><uri>https://plus.google.com/100388846279954485067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-PV5mViRwW2I/AAAAAAAAAAI/AAAAAAAAAAA/H-3RmFHJOL8/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9016404448327222924.post-4055393955292511048</id><published>2009-04-17T18:14:00.000+09:00</published><updated>2009-04-23T15:24:23.837+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="gadget"/><category scheme="http://www.blogger.com/atom/ns#" term="google"/><category scheme="http://www.blogger.com/atom/ns#" term="googleearth"/><title type='text'>Google Earth で、ツアーを作ってみる</title><content type='html'>&lt;a href=&quot;http://earth.google.co.jp/&quot; title=&quot;Google Earth&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://www.r-stone.net/blogs/ishikawa/uploaded_images/google_earth_logo-769855.jpg&quot; border=&quot;0&quot; title=&quot;Google Earth&quot; alt=&quot;Google Earth&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p&gt;先日 &lt;a href=&quot;http://jp.techcrunch.com/&quot; title=&quot;TechCrunch Japan&quot; target=&quot;_blank&quot;&gt;TechCrunch&lt;/a&gt; より、 &lt;a href=&quot;http://jp.techcrunch.com/archives/20090410google-earth-flythroughs-come-to-the-browser/&quot; title=&quot;Google Earthのフライスルーがブラウザで閲覧できるようになった&quot; target=&quot;_blank&quot;&gt;Google Earthのフライスルーがブラウザで閲覧できるようになった&lt;/a&gt; という衝撃の記事を発見しました。&lt;/p&gt;&lt;br /&gt;&lt;blockquote cite=&quot;http://jp.techcrunch.com/archives/20090410google-earth-flythroughs-come-to-the-browser/&quot;&gt;&lt;br /&gt;    &lt;p&gt;今週初め、GoogleはGoogle Earthツアーをブラウザから直接閲覧できる&lt;a href=&quot;http://google-latlong.blogspot.com/2009/04/explore-google-earth-tours-in-your.html&quot; target=&quot;_blank&quot;&gt;プラグイン&lt;/a&gt;をリリースした。2月に公開されたGoogle Earthのリリース5.0でも導入されたツアー機能を使えばGoogle Earthで表示できる場所のどこででもバーチャル・フライスルーを作成することができる。これによってなかなか印象的な作品を作り出すこともできる。Googleではいくつものベストツアーを&lt;a href=&quot;http://earth.google.com/plugin/tours/&quot; target=&quot;_blank&quot;&gt;ギャラリー&lt;/a&gt;に集めており、ハドソン川に緊急着水したFlight 1549の歴史的なフライトの再現やサンフランシスコの疾風ツアーが紹介されている。&lt;/p&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;p&gt;というわけで、早速試してみました。&lt;br /&gt;&lt;br /&gt;ビデオによるツアーの作成方法は &lt;a href=&quot;http://www.youtube.com/watch?v=jYF3UFmHyNQ&quot; title=&quot;YouTube - Google Earth 5.0 - Record your Tour Feature&quot; target=&quot;_blank&quot;&gt;こちら&lt;/a&gt; から。&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;object width=&quot;560&quot; height=&quot;340&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/jYF3UFmHyNQ&amp;hl=ja&amp;fs=1&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot;&gt;&lt;/param&gt;&lt;embed src=&quot;http://www.youtube.com/v/jYF3UFmHyNQ&amp;hl=ja&amp;fs=1&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; width=&quot;560&quot; height=&quot;340&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;そして、実際に作成してみたツアーが下のものです。プラグインをインストールすると見えるようになります。&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src=&quot;http://www.gmodules.com/ig/ifr?url=http://code.google.com/apis/kml/embed/tourgadget.xml&amp;amp;up_kml_url=http%3A%2F%2Fwww.r-stone.net%2Fblogs%2Fishikawa%2Fresources%2FGoogleDeveloperDay2009.kmz&amp;amp;up_tour_index=1&amp;amp;up_tour_autoplay=0&amp;amp;up_show_navcontrols=0&amp;amp;up_show_buildings=0&amp;amp;up_show_terrain=1&amp;amp;up_show_roads=0&amp;amp;up_show_borders=0&amp;amp;up_type_mars=0&amp;amp;synd=open&amp;amp;w=500&amp;amp;h=400&amp;amp;title=%E3%83%91%E3%82%B7%E3%83%95%E3%82%A3%E3%82%B3%E6%A8%AA%E6%B5%9C%E3%81%B8Go!&amp;amp;border=%23ffffff%7C3px%2C1px+solid+%23999999&amp;amp;output=js&quot;&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;次回の &lt;a href=&quot;http://code.google.com/intl/ja/events/developerday/2009/home.html&quot; title=&quot;Google Developer Day&quot; target=&quot;_blank&quot;&gt;Google Developper Day 2009&lt;/a&gt; の開催地である、パシフィコ横浜 へ一気にジャンプするだけですが、ブラウザだけで見れるのはなかなかですね。&lt;/p&gt;&lt;br /&gt;&lt;p&gt;サイトへの埋め込みは、 &lt;a href=&quot;http://www.gmodules.com/ig/creator?synd=open&amp;url=http://code.google.com/apis/kml/embed/tourgadget.xml&quot; title=&quot;Embedded Tour Player Google gadget&quot; target=&quot;_blank&quot;&gt;Embedded Tour Player Google gadget&lt;/a&gt; で、Google Earth で作成した KML ファイルを指定するだけ。あとは作成されたガジェットのコードをペーストすればいいんですね。&lt;br /&gt;これはおもしろいです！&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://ishikawa.r-stone.net/feeds/4055393955292511048/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9016404448327222924&amp;postID=4055393955292511048&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9016404448327222924/posts/default/4055393955292511048'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9016404448327222924/posts/default/4055393955292511048'/><link rel='alternate' type='text/html' href='http://ishikawa.r-stone.net/2009/04/google-earth.html' title='Google Earth で、ツアーを作ってみる'/><author><name>Naoki Ishikawa</name><uri>https://plus.google.com/100388846279954485067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-PV5mViRwW2I/AAAAAAAAAAI/AAAAAAAAAAA/H-3RmFHJOL8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9016404448327222924.post-4490287147010008418</id><published>2009-03-05T20:04:00.000+09:00</published><updated>2009-04-23T15:24:23.837+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="apcupsd"/><category scheme="http://www.blogger.com/atom/ns#" term="server"/><category scheme="http://www.blogger.com/atom/ns#" term="ups"/><title type='text'>[Server]Apcupsd で UPS(APC Smart-UPS) を制御する</title><content type='html'>&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://www.apcupsd.org/&quot; title=&quot;Apcupsd, a daemon for controlling APC UPSes&quot; target=&quot;_blank&quot;&gt;&lt;img style=&quot;cursor:pointer; cursor:hand;width: 320px; height: 35px;&quot; src=&quot;http://www.r-stone.net/blogs/ishikawa/uploaded_images/apcupsd-733012.gif&quot; border=&quot;0&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;UPS(無停電電源装置) とは、停電や瞬断(瞬間停電)などの電力障害時でも、パソコンやサーバなどのコンピュータに電力を安定供給するための装置です。&lt;/p&gt;&lt;br /&gt;&lt;p&gt;UPS がない場合、システムの稼働中に停電が発生するとシステムが強制シャットダウンされ、ファイルが破損したり機器が故障したりする可能性があります。&lt;/p&gt;&lt;br /&gt;&lt;p&gt;そんなわけで、サーバには欠かせない UPS ですが、 通常、UPS とシリアルケーブルでつないだ 1台のサーバしか安全にシャットダウンすることができません。しかしながら、1台の UPS を複数のサーバで共有している場合、それでは困ります。&lt;/p&gt;&lt;br /&gt;&lt;p&gt;そこで、&lt;a href=&quot;http://www.apcupsd.org/&quot; title=&quot;Apcupsd, a daemon for controlling APC UPSes&quot; target=&quot;_blank&quot;&gt;Apcupsd&lt;/a&gt; というソフトを使い、ネットワークでつながっている他のサーバも安全にシャットダウンできるようにします。&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Apcupsd とは&lt;/h3&gt;&lt;br /&gt;&lt;p&gt;Apcupsd とは、APC SmartUPS を制御、監視するソフトウェアで、Linux, Mac OC/X, Windows などの OS で動作可能です。&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Apcupsd のインストール&lt;/h3&gt;&lt;br /&gt;&lt;p&gt;今回は、NIS (Network Information Server) mode で構成します。この構成は、UPS と接続された NIS Server と、ネットワーク経由で情報を共有する NIS Client で構成されます。&lt;br /&gt;&lt;br /&gt;従来の Master/Slave mode に置き換わるものです。&lt;/p&gt;&lt;br /&gt;&lt;p&gt;今回は、CentOS 4 の Linux サーバを NIS Server に、Windows マシンを NIS Client として構成します。&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;CentOS 4 へのインストール&lt;/h4&gt;&lt;br /&gt;&lt;p&gt;&lt;a href=&quot;http://sourceforge.net/projects/apcupsd/&quot; title=&quot;SourceForge.net: Apcupsd UPS control software&quot; target=&quot;_blank&quot;&gt;SourceForge.net&lt;/a&gt; から、rpm パッケージをダウンロードします。CentOS 4 は、Red Hat Enterprise Linux (RHEL) のクローンですので、el4 の rpm をダウンロードし、インストールです。&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code class=&quot;prettyprint&quot;&gt;$ wget http://jaist.dl.sourceforge.net/sourceforge/apcupsd/apcupsd-3.14.5-1.el4.i386.rpm&lt;br /&gt;$ sudo rpm -ivh apcupsd-3.14.5-1.el4.i386.rpm&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Windows へのインストール&lt;/h4&gt;&lt;br /&gt;&lt;p&gt;&lt;a href=&quot;http://sourceforge.net/projects/apcupsd/&quot; title=&quot;SourceForge.net: Apcupsd UPS control software&quot; target=&quot;_blank&quot;&gt;SourceForge.net&lt;/a&gt; から、Windows バイナリをダウンロードします。インストールは、画面の指示に従い、すべてデフォルトでOKです。&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Apcupsd の設定&lt;/h3&gt;&lt;br /&gt;&lt;p&gt;設定ファイルである、 /etc/apcupsd/apcupsd.conf (Windows は C:\apcupsd\etc\apcupsd\apcupsd.conf) を各モードに合わせて編集します。&lt;/p&gt;&lt;br /&gt;&lt;p&gt;UPSTYPE や、UPSCABLE の設定は、各環境により異なります。詳しくは&lt;a href=&quot;http://www.apcupsd.org/manual/Supported_UPSes_Cables.html#type_005ftable&quot; title=&quot;Supported UPSes and Cables&quot; target=&quot;_blank&quot;&gt;マニュアルを参照&lt;/a&gt;してください。&lt;/p&gt;&lt;br /&gt;&lt;h4&gt;NIS Server/Client 共通の設定&lt;/h4&gt;&lt;br /&gt;&lt;br /&gt;&lt;dl&gt;&lt;br /&gt;    &lt;dt&gt;UPSNAME &lt;strong&gt;SMART-UPS_700&lt;/strong&gt;&lt;/dt&gt;&lt;br /&gt;      &lt;dd&gt;ログ等に使用される UPS 識別名&lt;/dd&gt;&lt;br /&gt;    &lt;dt&gt;UPSMODE &lt;strong&gt;net&lt;/strong&gt;&lt;/dt&gt;&lt;br /&gt;      &lt;dd&gt;ネットワーク機能を有効&lt;/dd&gt;&lt;br /&gt;    &lt;dt&gt;NETACCESS &lt;strong&gt;true&lt;/strong&gt;&lt;/dt&gt;&lt;br /&gt;      &lt;dd&gt;ネットワークアクセスを有効&lt;/dd&gt;&lt;br /&gt;&lt;/dl&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;NIS Server の設定&lt;/h4&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;dl&gt;&lt;br /&gt;    &lt;dt&gt;UPSCABLE &lt;strong&gt;940-0024C&lt;/strong&gt;&lt;/dt&gt;&lt;br /&gt;      &lt;dd&gt;SmartUPS 付属のケーブルを指定&lt;/dd&gt;&lt;br /&gt;    &lt;dt&gt;UPSTYPE &lt;strong&gt;apcsmart&lt;/strong&gt;&lt;/dt&gt;&lt;br /&gt;      &lt;dd&gt;UPS の接続タイプを指定&lt;/dd&gt;&lt;br /&gt;    &lt;dt&gt;DEVICE &lt;strong&gt;/dev/ttyS0&lt;/strong&gt;&lt;/dt&gt;&lt;br /&gt;      &lt;dd&gt;シリアルポートのデバイス名&lt;/dd&gt;&lt;br /&gt;    &lt;dt&gt;KILLDELAY &lt;strong&gt;180&lt;/strong&gt;&lt;/dt&gt;&lt;br /&gt;      &lt;dd&gt;apcupsd がシステムの再起動をコントロールできない時、UPS 自体をシャットダウンさせる&lt;/dd&gt;&lt;br /&gt;    &lt;dt&gt;NETSERVER &lt;strong&gt;on&lt;/strong&gt;&lt;/dt&gt;&lt;br /&gt;      &lt;dd&gt;NIS を有効&lt;/dd&gt;&lt;br /&gt;    &lt;dt&gt;NISIP &lt;strong&gt;0.0.0.0&lt;/strong&gt;&lt;/dt&gt;&lt;br /&gt;      &lt;dd&gt;リクエストを受け付ける IP アドレス&lt;/dd&gt;&lt;br /&gt;    &lt;dd&gt;NISPORT &lt;strong&gt;3551&lt;/strong&gt;&lt;/dd&gt;&lt;br /&gt;      &lt;dd&gt;NIS Server の Port 番号&lt;br /&gt;&lt;span style=&quot;color:green&quot;&gt;Firewall の設定で指定ポート（TCP）を開いてください&lt;/span&gt;&lt;/dd&gt;&lt;br /&gt;    &lt;dt&gt;UPSCLASS &lt;strong&gt;standalone&lt;/strong&gt;&lt;/dt&gt;&lt;br /&gt;      &lt;dd&gt;APC ShareUPS を使用している場合以外は、通常 standalone&lt;/dd&gt;&lt;br /&gt;    &lt;dt&gt;UPSMODE &lt;strong&gt;disable&lt;/strong&gt;&lt;/dt&gt;&lt;br /&gt;      &lt;dd&gt;APC ShareUPS を使用している場合以外は、通常 disable&lt;/dd&gt;&lt;br /&gt;&lt;/dl&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;NIS Client の設定&lt;/h4&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;dl&gt;&lt;br /&gt;    &lt;dt&gt;UPSCABLE &lt;strong&gt;ether&lt;/strong&gt;&lt;/dt&gt;&lt;br /&gt;      &lt;dd&gt;ネットワーク経由の設定&lt;/dd&gt;&lt;br /&gt;    &lt;dt&gt;UPSTYPE &lt;strong&gt;net&lt;/strong&gt;&lt;/dt&gt;&lt;br /&gt;      &lt;dd&gt;UPS の接続タイプを指定&lt;/dd&gt;&lt;br /&gt;    &lt;dt&gt;DEVICE &lt;strong&gt;192.168.0.80:3551&lt;/strong&gt;&lt;/dt&gt;&lt;br /&gt;      &lt;dd&gt;NIS Server の IP:Port を指定&lt;/dd&gt;&lt;br /&gt;    &lt;dt&gt;NETSERVER &lt;strong&gt;on&lt;/strong&gt;&lt;/dt&gt;&lt;br /&gt;      &lt;dd&gt;NIS を有効&lt;/dd&gt;&lt;br /&gt;    &lt;dt&gt;UPSCLASS &lt;strong&gt;standalone&lt;/strong&gt;&lt;/dt&gt;&lt;br /&gt;      &lt;dd&gt;APC ShareUPS を使用している場合以外は、通常 standalone&lt;/dd&gt;&lt;br /&gt;    &lt;dt&gt;UPSMODE &lt;strong&gt;disable&lt;/strong&gt;&lt;/dt&gt;&lt;br /&gt;      &lt;dd&gt;APC ShareUPS を使用している場合以外は、通常 disable&lt;/dd&gt;&lt;br /&gt;&lt;/dl&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Apcupsd の起動および、動作確認&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;NIS Server の確認&lt;/h4&gt;&lt;br /&gt;&lt;p&gt;起動は下記コマンドから。ついでに自動起動も設定します。&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;&lt;code class=&quot;prettyprint&quot;&gt;$ sudo /etc/rc.d/init.d/apcupsd start&lt;br /&gt;$ sudo /sbin/chkconfig apcupsd on&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;設定の確認は、下記コマンドを実行します。下記のようにズラズラと出てくれば接続成功です。&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;&lt;code class=&quot;prettyprint&quot;&gt;$ apcaccess status&lt;br /&gt;APC      : 001,052,1243&lt;br /&gt;DATE     : Fri Feb 06 17:40:30 JST 2009&lt;br /&gt;HOSTNAME : example&lt;br /&gt;RELEASE  : 3.14.5&lt;br /&gt;VERSION  : 3.14.5 (10 January 2009) redhat&lt;br /&gt;UPSNAME  : UPS_IDEN&lt;br /&gt;CABLE    : APC Cable 940-0024C&lt;br /&gt;MODEL    : SMART-UPS 700&lt;br /&gt;.&lt;br /&gt;.&lt;br /&gt;.&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;NIS Client の確認&lt;/h4&gt;&lt;br /&gt;&lt;p&gt;Windows の場合は、自動的に起動時に apcupsd サービスが起動するようになっています。&lt;/p&gt;&lt;br /&gt;&lt;p&gt;タスクトレイにあるアイコンをダブルクリックすると、状態を確認できます。&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Apcupsd をブラウザから管理&lt;/h3&gt;&lt;br /&gt;&lt;p&gt;Apcupsd には、CGI で UPS の状態を参照できるスクリプトが用意されています。このスクリプトを利用し、Web 経由で状態を確認できるようにします。&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a href=&quot;http://sourceforge.net/projects/apcupsd/&quot; title=&quot;SourceForge.net: Apcupsd UPS control software&quot; target=&quot;_blank&quot;&gt;SourceForge.net&lt;/a&gt; から、rpm パッケージをダウンロードします。apcupsd-multimon-x.x.x.rpm をダウンロードし、インストールです。&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code class=&quot;prettyprint&quot;&gt;$ wget http://jaist.dl.sourceforge.net/sourceforge/apcupsd/apcupsd-multimon-3.14.5-1.el4.i386.rpm&lt;br /&gt;$ rpm -ivh apcupsd-multimon-3.14.5-1.el4.i386.rpm&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;次のようなエラーが出た場合は、&lt;a href=&quot;http://rpm.pbone.net/index.php3/stat/4/idpl/5595133/com/gd-2.0.28-5.4E.i386.rpm.html&quot; title=&quot;RPM Search gd-2.0.28-5.4E.i386.rpm&quot; target=&quot;_blank&quot;&gt;gd を更新&lt;/a&gt; します。&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;&lt;code class=&quot;prettyprint&quot;&gt;エラー: Failed dependencies:&lt;br /&gt;        gd &gt;= 2.0 is needed by apcupsd-multimon-3.14.5-1.i386&lt;br /&gt;        libgd.so.2 is needed by apcupsd-multimon-3.14.5-1.i386&lt;br /&gt;    Suggested resolutions:&lt;br /&gt;        /home/buildcentos/CENTOS/en/4.0/i386/CentOS/RPMS/gd-2.0.28-5.4E.i386.rpm&lt;br /&gt;&lt;br /&gt;$ wget ftp://mirror.switch.ch/pool/3/mirror/centos/4.6/os/i386/CentOS/RPMS/gd-2.0.28-5.4E.i386.rpm&lt;br /&gt;$ sudo rpm -Uvh gd-2.0.28-5.4E.i386.rpm&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;インストール後は、 /var/www/cgi-bin にある次のファイルを、Web サーバの cgi ディレクトリにコピーします。&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;multimon.cgi&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;upsfstats.cgi&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;upsimage.cgi&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;upsstats.cgi&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;p&gt;ブラウザから http://example/cgi-bin/multimon.cgi へ Web 経由でアクセスし、次のような画面が表示されれば成功です。&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Apcupsd をテストする&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;最後に、実際に電源障害があった事態を想定しテストをしてみます。&lt;/p&gt;&lt;br /&gt;&lt;p&gt;テストのため、設定ファイル (/etc/apcupsd/apcupsd.conf) の下記ディレクティブの TIMEOUT を変更しておきます。&lt;br /&gt;&lt;br /&gt;BATTERYLEVEL, MINUTES, そして TIMEOUT は、どれか早い方の条件が満たされた場合にシャットダウンが開始されます。&lt;br /&gt;&lt;br /&gt;設定変更後は、 Apcupsd の再起動を忘れずに。&lt;/p&gt;&lt;br /&gt;&lt;p&gt;なお、電源復旧時にマシンが自動的に起動するためには、BIOS 設定が必要になります。デフォルトでは、電源復旧時に自動起動する設定は OFF になっていることが多いので、確認が必要です。&lt;/p&gt;&lt;br /&gt;&lt;dl&gt;&lt;br /&gt;    &lt;dt&gt;BATTERYLEVEL &lt;strong&gt;5&lt;/strong&gt;&lt;/dt&gt;&lt;br /&gt;      &lt;dd&gt;バッテリ残量が指定値以下（％）&lt;/dd&gt;&lt;br /&gt;    &lt;dt&gt;MINUTES &lt;strong&gt;3&lt;/strong&gt;&lt;/dt&gt;&lt;br /&gt;      &lt;dd&gt;バッテリ駆動が可能な予想残り時間が指定値以下（分）&lt;/dd&gt;&lt;br /&gt;    &lt;dt&gt;TIMEOUT &lt;strong&gt;300&lt;/strong&gt;&lt;/dt&gt;&lt;br /&gt;      &lt;dd&gt;バッテリ駆動となってからの時間が指定値経過（秒）&lt;/dd&gt;&lt;br /&gt;&lt;/dl&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;短期停電&lt;/h4&gt;&lt;br /&gt;&lt;p&gt;UPS がバッテリ駆動となり、サーバがシャットダウンが開始される前に電源が復旧した場合を想定します。&lt;/p&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;  &lt;li&gt;UPS の電源コードを引っこ抜きます&lt;br /&gt;    &lt;ul&gt;&lt;br /&gt;      &lt;li&gt;UPS の警告音が鳴り響き、UPS がバッテリ駆動になります&lt;/li&gt;&lt;br /&gt;      &lt;li&gt;ログに Power failure on UPS UPSNAME. Running on batteries. と表示されます&lt;/li&gt;&lt;br /&gt;    &lt;/ul&gt;&lt;br /&gt;  &lt;/li&gt;&lt;br /&gt;  &lt;li&gt;UPS の電源コードを接続します&lt;br /&gt;    &lt;ul&gt;&lt;br /&gt;      &lt;li&gt;UPS が商用電源モードに復旧します&lt;/li&gt;&lt;br /&gt;      &lt;li&gt;ログに Power is back. UPS running on mains. と表示されます&lt;/li&gt;&lt;br /&gt;    &lt;/ul&gt;&lt;br /&gt;  &lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;apcupsd[3505]: Power failure.&lt;br /&gt;apcupsd[3505]: Running on UPS batteries.&lt;br /&gt;&lt;br /&gt;Broadcast message from root :&lt;br /&gt;&lt;br /&gt;Power failure on UPS SMART-UPS_700. Running on batteries.&lt;br /&gt;wall[15799]: wall: user root broadcasted 1 lines (59 chars)&lt;br /&gt;&lt;br /&gt;Broadcast message from root :&lt;br /&gt;&lt;br /&gt;Power has returned on UPS SMART-UPS_700...&lt;br /&gt;apcupsd[3505]: Mains returned. No longer on UPS batteries.&lt;br /&gt;apcupsd[3505]: Power is back. UPS running on mains.&lt;br /&gt;wall[15861]: wall: user root broadcasted 1 lines (44 chars)&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;上記の Apcupsd からのメッセージは、root 宛てにメールでも送信されます。&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;長期停電&lt;/h4&gt;&lt;br /&gt;&lt;p&gt;UPS がバッテリ駆動となり、サーバがシャットダウンが開始された後に電源が復旧した場合を想定します。&lt;/p&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;  &lt;li&gt;UPS の電源コードを引っこ抜きます&lt;br /&gt;    &lt;ul&gt;&lt;br /&gt;      &lt;li&gt;UPS の警告音が鳴り響き、UPS がバッテリ駆動になります&lt;/li&gt;&lt;br /&gt;      &lt;li&gt;ログに Power failure on UPS UPSNAME. Running on batteries. と表示されます&lt;/li&gt;&lt;br /&gt;    &lt;/ul&gt;&lt;br /&gt;  &lt;/li&gt;&lt;br /&gt;  &lt;li&gt;設定したシャットダウン条件を満たすまで放置します&lt;br /&gt;    &lt;ul&gt;&lt;br /&gt;      &lt;li&gt;ログに Reached run time limit on batteries. と表示されます&lt;/li&gt;&lt;br /&gt;      &lt;li&gt;接続されたマシンがシャットダウンされます&lt;/li&gt;&lt;br /&gt;    &lt;/ul&gt;&lt;br /&gt;  &lt;/li&gt;&lt;br /&gt;  &lt;li&gt;接続されたマシンがすべてシャットダウンした後に、UPS もシャットダウンされるまで放置します&lt;br /&gt;    &lt;ul&gt;&lt;br /&gt;      &lt;li&gt;UPS がシャットダウンされます&lt;br /&gt;&lt;br /&gt;      ※Smart-UPS では、フロントパネルの LED が連続的に点灯する状態になります&lt;/li&gt;&lt;br /&gt;    &lt;/ul&gt;&lt;br /&gt;  &lt;/li&gt;&lt;br /&gt;  &lt;li&gt;UPS の電源コードを接続します&lt;br /&gt;    &lt;ul&gt;&lt;br /&gt;      &lt;li&gt;UPS が再起動します&lt;/li&gt;&lt;br /&gt;      &lt;li&gt;UPS が商用電源モードに復旧します&lt;/li&gt;&lt;br /&gt;      &lt;li&gt;接続されたマシンが再起動します&lt;br /&gt;&lt;br /&gt;      ※自動で再起動しない場合は、BIOS の設定を見直してください。&lt;/li&gt;&lt;br /&gt;    &lt;/ul&gt;&lt;br /&gt;  &lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;apcupsd[3280]: Power failure.&lt;br /&gt;apcupsd[3280]: Running on UPS batteries.&lt;br /&gt;wall[4761]: wall: user root broadcasted 1 lines (59 chars)&lt;br /&gt;apcupsd[3280]: Reached run time limit on batteries.&lt;br /&gt;apcupsd[3280]: Initiating system shutdown!&lt;br /&gt;apcupsd[3280]: User logins prohibited&lt;br /&gt;wall[5185]: wall: user root broadcasted 1 lines (67 chars)&lt;br /&gt;wall[5188]: wall: user root broadcasted 1 lines (47 chars)&lt;br /&gt;shutdown: shutting down for system halt&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;参考：&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;    &lt;li&gt;&lt;a href=&quot;http://www.apcupsd.org/&quot; title=&quot;Apcupsd, a daemon for controlling APC UPSes&quot; target=&quot;_blank&quot;&gt;Apcupsd, a daemon for controlling APC UPSes&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;    &lt;li&gt;&lt;a href=&quot;http://homepage1.nifty.com/Que/plamo/apc-ups/manual/index.html&quot; title=&quot;Linuxの下のAPC UPS管理&quot; target=&quot;_blank&quot;&gt;Linuxの下のAPC UPS管理&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;    &lt;li&gt;&lt;a href=&quot;http://www.tm-site.net/linuxroom/UPS.htm&quot; title=&quot;Apcupsd(UPS監視ソフト)&quot; target=&quot;_blank&quot;&gt;Apcupsd(UPS監視ソフト)&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;</content><link rel='replies' type='application/atom+xml' href='http://ishikawa.r-stone.net/feeds/4490287147010008418/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9016404448327222924&amp;postID=4490287147010008418&amp;isPopup=true' title='5 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9016404448327222924/posts/default/4490287147010008418'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9016404448327222924/posts/default/4490287147010008418'/><link rel='alternate' type='text/html' href='http://ishikawa.r-stone.net/2009/03/serverapcupsd-upsapc-smart-ups.html' title='[Server]Apcupsd で UPS(APC Smart-UPS) を制御する'/><author><name>Naoki Ishikawa</name><uri>https://plus.google.com/100388846279954485067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-PV5mViRwW2I/AAAAAAAAAAI/AAAAAAAAAAA/H-3RmFHJOL8/s512-c/photo.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9016404448327222924.post-6772094989404880202</id><published>2009-03-04T18:11:00.000+09:00</published><updated>2009-04-23T15:24:23.838+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="apache"/><category scheme="http://www.blogger.com/atom/ns#" term="centos"/><category scheme="http://www.blogger.com/atom/ns#" term="server"/><category scheme="http://www.blogger.com/atom/ns#" term="webobjects"/><title type='text'>WebObjects 5.2.4 を Apache 2.2 (CentOS 5.2) で動かす</title><content type='html'>&lt;img src=&quot;http://www.r-stone.net/blogs/ishikawa/uploaded_images/webobjects-754711.jpg&quot; border=&quot;0&quot; title=&quot;アップル - WebObjects&quot; alt=&quot;アップル - WebObjects&quot; /&gt;&lt;br /&gt;&lt;p&gt;&lt;a href=&quot;http://www.apple.com/jp/webobjects/&quot; title=&quot;アップル - WebObjects&quot; target=&quot;_blank&quot;&gt;WebObjects&lt;/a&gt; とは、&lt;a href=&quot;http://www.apple.com/jp/&quot; title=&quot;アップル&quot; target=&quot;_blank&quot;&gt;アップル&lt;/a&gt;社が開発した、Java による Webアプリケーションフレームワークで、強力なWebサービスを簡単に構築することができる素晴らしいツールです。&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Apple社自身でも、&lt;a href=&quot;http://store.apple.com/jp&quot; title=&quot;Apple Storeへようこそ - Apple Store (Japan)&quot; target=&quot;_blank&quot;&gt;Apple Store&lt;/a&gt;, &lt;a href=&quot;http://www.apple.com/jp/mobileme/&quot; title=&quot;アップル - MobileMe&quot; target=&quot;_blank&quot;&gt;MobileMe(旧.Mac)&lt;/a&gt;, &lt;a href=&quot;http://www.apple.com/jp/itunes/whatson/&quot; title=&quot;アップル - iTunes - iTunesで何をしよう？ - 概要&quot; target=&quot;_blank&quot;&gt;iTunes Store&lt;/a&gt; などを WebObjects で構築しています。&lt;/p&gt;&lt;br /&gt;&lt;p&gt;そんな WebObjects ですが、弊社で使用している WebObjects 5.2 は、Linux の場合 Apache 1.3 でないと動いてくれません。&lt;/p&gt;&lt;br /&gt;&lt;p&gt;しかしながら、最近の OS はより高機能な Apache 2.2 系が搭載されており、できれば Apache 2.2 系で動作させたいものです。&lt;br /&gt;&lt;br /&gt;これまで何度かチャレンジしたものの、なかなかうまく動いてくれませんでした・・・。&lt;/p&gt;&lt;br /&gt;&lt;p&gt;今回やっとうまくいったのでメモしておきます。&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Java のインストール&lt;/h3&gt;&lt;br /&gt;&lt;p&gt;WebObjects 5.2.4 では、Java 1.4 系を使用します。&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;$ chmod +x j2re-1_4_2_19-linux-i586-rpm.bin&lt;br /&gt;$ ./j2re-1_4_2_19-linux-i586-rpm.bin&lt;br /&gt;  inflating: j2re-1_4_2_19-linux-i586.rpm  &lt;br /&gt;Done.&lt;br /&gt;&lt;br /&gt;$ sudo rpm -ihv j2re-1_4_2_19-linux-i586.rpm&lt;br /&gt;########################################### [100%]&lt;br /&gt;&lt;br /&gt;$ sudo vi /etc/profile.d/java.sh&lt;br /&gt;# Java&lt;br /&gt;export JAVA_HOME=/usr/java/j2re1.4.2_19&lt;br /&gt;export PATH=$PATH:$JAVA_HOME/bin&lt;br /&gt;&lt;br /&gt;$ sudo chmod +x /etc/profile.d/java.sh&lt;br /&gt;$ source /etc/profile.d/java.sh&lt;br /&gt;&lt;br /&gt;$ java -version&lt;br /&gt;java version &quot;1.4.2_19&quot;&lt;br /&gt;Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_19-b04)&lt;br /&gt;Java HotSpot(TM) Client VM (build 1.4.2_19-b04, mixed mode)&lt;br /&gt;&lt;br /&gt;$ java -version -server&lt;br /&gt;java version &quot;1.4.2_19&quot;&lt;br /&gt;Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_19-b04)&lt;br /&gt;Java HotSpot(TM) Server VM (build 1.4.2_19-b04, mixed mode)&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;WebObjects 5.2 のインストール&lt;/h3&gt;&lt;br /&gt;&lt;p&gt;さて、本体のインストールです。インストールCDの Deployment/SOLARIS フォルダを ftp でアップしています。&lt;/p&gt;&lt;br /&gt;&lt;p&gt;はじめに install.sh を修正します。修正内容は、&quot;-pxZf&quot; を &quot;-pxzf&quot; に修正します。（3か所あります）&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;$ sudo ./install.sh -license X-NNN-XXX-NNN-XXX-NNN-XXX-NNN-XXX-NNN -adaptorsOnly NO -minimalInstall NO -cgibin /var/www/cgi-bin -docroot /var/www/html -woroot /opt/Apple&lt;br /&gt;&lt;br /&gt;INSTALLATION:&lt;br /&gt;   Beginning WebObjects 5.2 full installation:&lt;br /&gt;&lt;br /&gt;  .  Creating WebObjects installation directory ...&lt;br /&gt;  .  Creating WebObjects&#39; Applications and Frameworks directories ...&lt;br /&gt;  .  Installing WebObjects Adaptor source ...&lt;br /&gt;  .  Installing WebObjects Deployment ...&lt;br /&gt;  .  Installing WODocumentRoot frameworks into document root ...&lt;br /&gt;  .  Creating startup scripts ...&lt;br /&gt;  .  ... Done.&lt;br /&gt;&lt;br /&gt;  WebObjects 5.2 Deployment, Full Install is now installed.&lt;br /&gt;&lt;br /&gt;$ sudo chmod +x /etc/profile.d/webobjects.sh&lt;br /&gt;# WebObjects&lt;br /&gt;export NEXT_ROOT=/opt/Apple&lt;br /&gt;&lt;br /&gt;$ sudo chmod +x /etc/profile.d/webobjects.sh&lt;br /&gt;$ source /etc/profile.d/webobjects.sh&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;WebObjects 5.2 を WebObjects 5.2.4 へ&lt;/h3&gt;&lt;br /&gt;&lt;p&gt;WebObjects 5.2 の最終バージョンは 5.2.4 ですので、アップデートします。アップデートファイルは&lt;a href=&quot;http://support.apple.com/kb/TA23122?viewlocale=en_US&quot; title=&quot;About the WebObjects 5.2.4 Update&quot; target=&quot;_blank&quot;&gt;こちら&lt;/a&gt;から。&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;$ wget http://download.info.apple.com/Apple_Support_Area/Apple_Software_Updates/MultiCountry/Enterprise/webobjects/patches/5.2/WO524Solaris.tar.gzip&lt;br /&gt;$ wget http://download.info.apple.com/Apple_Support_Area/Apple_Software_Updates/MultiCountry/Enterprise/scripts/patcher.sh&lt;br /&gt;$ vi patcher.sh&lt;br /&gt;# COMPRESS=Z                      # gnutar compress flag: &#39;Z&#39; or &#39;z&#39; or &#39;&#39;&lt;br /&gt;# Z を z に修正&lt;br /&gt;COMPRESS=z                      # gnutar compress flag: &#39;Z&#39; or &#39;z&#39; or &#39;&#39;&lt;br /&gt;&lt;br /&gt;$ chmod 511 patcher.sh&lt;br /&gt;$ sudo ln -s /bin/tar /bin/gnutar&lt;br /&gt;$ sudo ./patcher.sh -install WO524Solaris.tar.gzip -next_root $NEXT_ROOT&lt;br /&gt;No errors, extracting patch&lt;br /&gt;&lt;br /&gt;Install of wo524/WO524Solaris.tar.gzip successful&lt;br /&gt;&lt;br /&gt;$ sudo cp -rf $NEXT_ROOT/Library/WebObjects/WODocumentRoot/WebObjects /var/www/html/&lt;br /&gt;&lt;br /&gt;$ sudo vi $NEXT_ROOT/Library/Frameworks/JavaWebObjects.framework/Resources/WebServerConfig.plist&lt;br /&gt;    //DocumentRoot = &quot;/Library/WebServer/Documents&quot;;&lt;br /&gt;    DocumentRoot = &quot;/var/www/html&quot;;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;アダプタの作成&lt;/h3&gt;&lt;br /&gt;&lt;p&gt;いよいよ本番、Apache 2.2 対応のアダプタを作成します。ソースは &lt;a href=&quot;http://projectwonder.blogspot.com/&quot; title=&quot;Project Wonder&quot; target=&quot;_blank&quot;&gt;Project Wonder&lt;/a&gt; から&lt;a href=&quot;http://webobjects.mdimension.com/wonder/releases/&quot; title=&quot;Index of /wonder/releases&quot; target=&quot;_blank&quot;&gt;取得&lt;/a&gt;します。&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;$ sudo yum install httpd-devel&lt;br /&gt;$ wget http://webobjects.mdimension.com/wonder/releases/Wonder-5.0.0.8972-Source.tar.gz&lt;br /&gt;$ tar -zxvf Wonder-5.0.0.8972-Source.tar.gz&lt;br /&gt;$ cd Wonder/Utilities/Adaptors/&lt;br /&gt;&lt;br /&gt;$ vi make.config&lt;br /&gt;#ADAPTOR_OS = MACOS&lt;br /&gt;ADAPTOR_OS = LINUX&lt;br /&gt;CC = gcc&lt;br /&gt;&lt;br /&gt;$ make&lt;br /&gt;$ cd Apache2.2/&lt;br /&gt;$ sudo /usr/sbin/apxs -i -a -n WebObjects mod_WebObjects.la&lt;br /&gt;&lt;br /&gt;$ vi apache.conf&lt;br /&gt;LoadModule WebObjects_module           modules/mod_WebObjects.so&lt;br /&gt;#LoadModule WebObjects_module           modules/mod_WebObjects.so&lt;br /&gt;&lt;br /&gt;$ sudo cp apache.conf /etc/httpd/conf.d/webobjects.conf&lt;br /&gt;$ sudo chmod 644 /etc/httpd/conf.d/webobjects.conf&lt;br /&gt;&lt;br /&gt;$ sudo vi /etc/httpd/conf/httpd.conf&lt;br /&gt;#ScriptAlias /cgi-bin/ &quot;/var/www/cgi-bin/&quot;&lt;br /&gt;&lt;br /&gt;$ sudo /usr/sbin/httpd -M&lt;br /&gt;Loaded Modules:&lt;br /&gt; WebObjects_module (shared)&lt;br /&gt;Syntax OK&lt;br /&gt;&lt;br /&gt;$ sudo /etc/rc.d/init.d/httpd restart&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;SELinux&lt;/h4&gt;&lt;br /&gt;&lt;p&gt;SELinux を使っている場合は、httpd よる 1085 ポート（wotaskd）への接続が拒否されてしまいます。&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;setroubleshoot: SELinux は http デーモンによるネットワークポート 1085 ヘの接続を阻止しています。 For complete SELinux messages.&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;次のようにして httpd がネットワークポートに接続するのを許可します。&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;$ sudo /usr/sbin/setsebool -P httpd_can_network_connect=1&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;動作確認&lt;/h3&gt;&lt;br /&gt;&lt;p&gt;最後に、起動スクリプトの作成と自動起動です。&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;$ sudo vi /etc/rc.d/init.d/WOServices&lt;br /&gt;#!/bin/sh&lt;br /&gt;#&lt;br /&gt;# Startup script for the WebObjects&lt;br /&gt;#&lt;br /&gt;# chkconfig: 345 85 15&lt;br /&gt;# description: WebObject services&lt;br /&gt;#&lt;br /&gt;&lt;br /&gt;# Source function library.&lt;br /&gt;. /etc/rc.d/init.d/functions&lt;br /&gt;&lt;br /&gt;export PATH=/usr/java/j2re1.4.2_19/bin/:$PATH&lt;br /&gt;WOSERVICES_SCRIPT=&quot;/opt/Apple/Library/WebObjects/Executables/WOServices&quot;&lt;br /&gt;&lt;br /&gt;# See how we were called.&lt;br /&gt;case &quot;$1&quot; in&lt;br /&gt;start)&lt;br /&gt;echo -n &quot;Starting WebObjects: &quot;&lt;br /&gt;daemon ${WOSERVICES_SCRIPT} start&lt;br /&gt;echo&lt;br /&gt;touch /var/lock/subsys/WebObjects&lt;br /&gt;;;&lt;br /&gt;stop)&lt;br /&gt;echo -n &quot;Shutting down WebObjects: &quot;&lt;br /&gt;${WOSERVICES_SCRIPT} stop&lt;br /&gt;echo&lt;br /&gt;rm -f /var/lock/subsys/WebObjects&lt;br /&gt;;;&lt;br /&gt;restart)&lt;br /&gt;$0 stop&lt;br /&gt;$0 start&lt;br /&gt;;;&lt;br /&gt;*)&lt;br /&gt;echo &quot;Usage: $0 {start|stop|restart}&quot;&lt;br /&gt;exit 1&lt;br /&gt;esac&lt;br /&gt;&lt;br /&gt;exit 0&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;$ sudo chmod +x /etc/rc.d/init.d/WOServices&lt;br /&gt;$ sudo /etc/rc.d/init.d/WOServices start&lt;br /&gt;Starting WebObjects: Beginning WebObjects services startup...&lt;br /&gt;                                                           [  OK  ]&lt;br /&gt;$ sudo /sbin/chkconfig --add WOServices&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;root より JavaMonitor が起動できればOKです。&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;# $NEXT_ROOT/Library/WebObjects/JavaApplications/JavaMonitor.woa/JavaMonitor -WOPort 56789 &amp;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://www.r-stone.net/blogs/ishikawa/uploaded_images/Monitor-for-WebObjects-5-721459.jpg&quot;&gt;&lt;img style=&quot;cursor:pointer; cursor:hand;width: 320px; height: 148px;&quot; src=&quot;http://www.r-stone.net/blogs/ishikawa/uploaded_images/Monitor-for-WebObjects-5-721455.jpg&quot; border=&quot;0&quot; title=&quot;Monitor for WebObjects 5&quot; alt=&quot;Monitor for WebObjects 5&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;参考：&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;&lt;a href=&quot;http://wiki.objectstyle.org/confluence/display/WO/Installing+WO+5.3+or+WO+5.4+on+Linux&quot; title=&quot;Installing WO 5.3 or WO 5.4 on Linux - WebObjects - Confluence&quot; target=&quot;_blank&quot;&gt;Installing WO 5.3 or WO 5.4 on Linux - WebObjects - Confluence&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;&lt;a href=&quot;http://www.piyosystems.com/kuki/B2060435708/C1792090254/E20080915154529/index.html&quot; title=&quot;WebObjects5.2.4のdeployment onCentOS5.2のメモ&quot; target=&quot;_blank&quot;&gt;WebObjects5.2.4のdeployment onCentOS5.2のメモ&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;</content><link rel='replies' type='application/atom+xml' href='http://ishikawa.r-stone.net/feeds/6772094989404880202/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9016404448327222924&amp;postID=6772094989404880202&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9016404448327222924/posts/default/6772094989404880202'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9016404448327222924/posts/default/6772094989404880202'/><link rel='alternate' type='text/html' href='http://ishikawa.r-stone.net/2009/03/webobjects-524-apache-22-centos-52.html' title='WebObjects 5.2.4 を Apache 2.2 (CentOS 5.2) で動かす'/><author><name>Naoki Ishikawa</name><uri>https://plus.google.com/100388846279954485067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-PV5mViRwW2I/AAAAAAAAAAI/AAAAAAAAAAA/H-3RmFHJOL8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9016404448327222924.post-2022402068886738253</id><published>2009-02-27T18:07:00.000+09:00</published><updated>2009-04-23T15:24:23.838+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="centos"/><category scheme="http://www.blogger.com/atom/ns#" term="server"/><category scheme="http://www.blogger.com/atom/ns#" term="vsftpd"/><title type='text'>CentOS 5.2 の vsftpd</title><content type='html'>&lt;a href=&quot;http://www.centos.org/&quot; title=&quot;www.centos.org - The Community ENTerprise Operating System&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://www.r-stone.net/blogs/ishikawa/uploaded_images/centos-705303.jpg&quot; border=&quot;0&quot; alt=&quot;www.centos.org - The Community ENTerprise Operating System&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p&gt;CentOS 5.2 標準の FTPサーバ vsftpd ですが、設定は間違ってないはずなのになぜかログインできません。&lt;/p&gt;&lt;br /&gt;&lt;p&gt;FTP クライアントのログには次のように出力されています。&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;500 OOPS: cannot change directory:/home/xxx&lt;br /&gt;500 OOPS: child died&lt;br /&gt;ログインできません.&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;サーバのログを見ると・・・&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;setroubleshoot: SELinux は ftp デーモンによるユーザーのホームディレ クトリ (./home) の読み込みを阻止しています。 For complete SELinux messages.&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;どうやら、OS のセキュリティを高める機能である、SELinux が vsftp によるホームディレクトリへのアクセスを拒否していたようです。&lt;/p&gt;&lt;br /&gt;&lt;p&gt;次のようにすることで、解除できます。&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;$ sudo /usr/sbin/setsebool -P ftp_home_dir 1&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;これで問題なくアクセスできます。&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://ishikawa.r-stone.net/feeds/2022402068886738253/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9016404448327222924&amp;postID=2022402068886738253&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9016404448327222924/posts/default/2022402068886738253'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9016404448327222924/posts/default/2022402068886738253'/><link rel='alternate' type='text/html' href='http://ishikawa.r-stone.net/2009/02/centos-52-vsftpd.html' title='CentOS 5.2 の vsftpd'/><author><name>Naoki Ishikawa</name><uri>https://plus.google.com/100388846279954485067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-PV5mViRwW2I/AAAAAAAAAAI/AAAAAAAAAAA/H-3RmFHJOL8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry></feed>