<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;DE8HRHkzeip7ImA9WxBQGEo.&quot;"><id>tag:blogger.com,1999:blog-1123743929918981950</id><updated>2010-01-19T13:53:55.782+09:00</updated><title>blog.hori-uchi.com</title><subtitle type="html" /><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://blog.hori-uchi.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://blog.hori-uchi.com/" /><link rel="hub" href="http://pubsubhubbub.appspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/1123743929918981950/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>horiuchi</name><uri>http://www.blogger.com/profile/10139525039076752147</uri><email>noreply@blogger.com</email></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>391</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/Bloghori-uchicom" /><feedburner:info uri="bloghori-uchicom" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><entry gd:etag="W/&quot;CEIARns-eyp7ImA9WxBQF04.&quot;"><id>tag:blogger.com,1999:blog-1123743929918981950.post-6779195866760284966</id><published>2010-01-17T21:42:00.004+09:00</published><updated>2010-01-17T21:49:07.553+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-01-17T21:49:07.553+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="amazon web service" /><title>Amazon ELBを5つ以上作る方法</title><content type="html">ELBはデフォルトでは1アカウントあたり5つまでしか作れない。&lt;br /&gt;&lt;br /&gt;それ以上作ろうとすると以下のように怒られる。&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ elb-create-lb test-lb --availability-zones us-east-1d --listener "protocol=HTTP, lb-port=80, instance-port=80"&lt;br /&gt;elb-create-lb:  Malformed input-Exceeded quota of account xxxxxxxxxx&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;5つ以上作るためには、アマゾンに申請しないといけない。&lt;br /&gt;申請は下記のフォームから行える。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://aws.amazon.com/contact-us/elb-request/"&gt;http://aws.amazon.com/contact-us/elb-request/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1123743929918981950-6779195866760284966?l=blog.hori-uchi.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/wxlsNvq3sC8N1GwL_sOVPxCgxvk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/wxlsNvq3sC8N1GwL_sOVPxCgxvk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/wxlsNvq3sC8N1GwL_sOVPxCgxvk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/wxlsNvq3sC8N1GwL_sOVPxCgxvk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Bloghori-uchicom/~4/SpnJrUawMfM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.hori-uchi.com/feeds/6779195866760284966/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://blog.hori-uchi.com/2010/01/amazon-elb5.html#comment-form" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1123743929918981950/posts/default/6779195866760284966?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1123743929918981950/posts/default/6779195866760284966?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Bloghori-uchicom/~3/SpnJrUawMfM/amazon-elb5.html" title="Amazon ELBを5つ以上作る方法" /><author><name>horiuchi</name><uri>http://www.blogger.com/profile/10139525039076752147</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="10581251585663261456" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.hori-uchi.com/2010/01/amazon-elb5.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUABR38-fSp7ImA9WxBTGEk.&quot;"><id>tag:blogger.com,1999:blog-1123743929918981950.post-6630208995514521522</id><published>2009-12-15T12:19:00.003+09:00</published><updated>2009-12-15T12:29:16.155+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-15T12:29:16.155+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="opensocial" /><title>Shindig + Partuzaでキャッシュさせない設定</title><content type="html">Shindig + Partuzaで開発するならキャッシュ機能をオフにしないと不便。&lt;br /&gt;Shindig,Partuzaの両方ともキャッシュに関する設定があるので、両方ともオフにする。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Shindig (PHP版)&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;cache_timeを0に設定する。&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ cat /path/to/shindig/php/config/local.php&lt;br /&gt;'PartuzaService',&lt;br /&gt;                     'activity_service' =&gt; 'PartuzaService',&lt;br /&gt;                     'app_data_service' =&gt; 'PartuzaService',&lt;br /&gt;                     'messages_service' =&gt; 'PartuzaService',&lt;br /&gt;                     'oauth_lookup_service' =&gt; 'PartuzaOAuthLookupService',&lt;br /&gt;                     'extension_class_paths' =&gt; '/Library/WebServer/Documents/partuza/Shindig',&lt;br /&gt;                     &lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;'cache_time' =&gt; 0,&lt;/span&gt;&lt;br /&gt;                     );&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Partuza&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;こちらもcache_timeを0に設定する。&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ cd /path/to/partuza/html/&lt;br /&gt;$ diff -u config.php.org config.php&lt;br /&gt;--- config.php.org      2009-12-15 12:27:12.000000000 +0900&lt;br /&gt;+++ config.php  2009-12-15 12:25:25.000000000 +0900&lt;br /&gt;@@ -20,7 +20,7 @@&lt;br /&gt;&lt;br /&gt;$config = array(&lt;br /&gt;// Language to use, used for gettext / setenv LC_ALL&lt;br /&gt;-'language' =&gt; 'en_US',&lt;br /&gt;+'language' =&gt; 'ja_JP',&lt;br /&gt;&lt;br /&gt;// prefix of where partuza lives, empty means it's /&lt;br /&gt;'web_prefix' =&gt; '',&lt;br /&gt;@@ -58,7 +58,7 @@&lt;br /&gt;// If you use CacheStorageMemcache as caching backend, change these to the memcache server settings&lt;br /&gt;'cache_host' =&gt; 'localhost',&lt;br /&gt;'cache_port' =&gt; 11211,&lt;br /&gt;-'cache_time' =&gt; 24 * 60 * 60,&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;+'cache_time' =&gt; 0,&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1123743929918981950-6630208995514521522?l=blog.hori-uchi.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/KtGCGWeM2SWdRmnyMjNa2_jWqhA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/KtGCGWeM2SWdRmnyMjNa2_jWqhA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/KtGCGWeM2SWdRmnyMjNa2_jWqhA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/KtGCGWeM2SWdRmnyMjNa2_jWqhA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Bloghori-uchicom/~4/Q84eZ51DcWw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.hori-uchi.com/feeds/6630208995514521522/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://blog.hori-uchi.com/2009/12/shindig-partuza.html#comment-form" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1123743929918981950/posts/default/6630208995514521522?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1123743929918981950/posts/default/6630208995514521522?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Bloghori-uchicom/~3/Q84eZ51DcWw/shindig-partuza.html" title="Shindig + Partuzaでキャッシュさせない設定" /><author><name>horiuchi</name><uri>http://www.blogger.com/profile/10139525039076752147</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="10581251585663261456" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.hori-uchi.com/2009/12/shindig-partuza.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0cCQnk6cCp7ImA9WxBTF0o.&quot;"><id>tag:blogger.com,1999:blog-1123743929918981950.post-7220792670195827840</id><published>2009-12-14T16:08:00.003+09:00</published><updated>2009-12-14T16:17:43.718+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-14T16:17:43.718+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="mysql" /><title>デフォルトのストレージエンジンをInnoDBにする</title><content type="html">LeopardにdmgからインストールしたMySQLのデフォルトのストレージエンジンがMyISAMだってことに最近気付いた。&lt;br /&gt;デフォルトのストレージエンジンを変更するにはmy.cnfでdefault-storage-engineを指定すればOK&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ sudo vi /etc/my.cnf&lt;br /&gt;$ cat /etc/my.cnf&lt;br /&gt;[mysqld]&lt;br /&gt;default-storage-engine=InnoDB&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;mysqlを再起動して、実際にInnoDBになったか確認&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ mysql -uroot&lt;br /&gt;mysql&gt; create database foo;&lt;br /&gt;mysql&gt; use foo&lt;br /&gt;mysql&gt; create table bar(id int not null);&lt;br /&gt;mysql&gt; show table status bar ¥G&lt;br /&gt;*************************** 1. row ***************************&lt;br /&gt;      Table: bar&lt;br /&gt;Create Table: CREATE TABLE `bar` (&lt;br /&gt; `id` int(11) NOT NULL&lt;br /&gt;) ENGINE=InnoDB DEFAULT CHARSET=latin1&lt;br /&gt;1 row in set (0.00 sec)&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1123743929918981950-7220792670195827840?l=blog.hori-uchi.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/la3RSOsPycA98VLlGC0GLz2Y6d4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/la3RSOsPycA98VLlGC0GLz2Y6d4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/la3RSOsPycA98VLlGC0GLz2Y6d4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/la3RSOsPycA98VLlGC0GLz2Y6d4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Bloghori-uchicom/~4/1p35TAEnuM8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.hori-uchi.com/feeds/7220792670195827840/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://blog.hori-uchi.com/2009/12/innodb.html#comment-form" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1123743929918981950/posts/default/7220792670195827840?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1123743929918981950/posts/default/7220792670195827840?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Bloghori-uchicom/~3/1p35TAEnuM8/innodb.html" title="デフォルトのストレージエンジンをInnoDBにする" /><author><name>horiuchi</name><uri>http://www.blogger.com/profile/10139525039076752147</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="10581251585663261456" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.hori-uchi.com/2009/12/innodb.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkICRXkyfyp7ImA9WxNaGE0.&quot;"><id>tag:blogger.com,1999:blog-1123743929918981950.post-1281968054567542265</id><published>2009-12-03T10:36:00.002+09:00</published><updated>2009-12-03T10:42:44.797+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-03T10:42:44.797+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="mysql" /><title>MySQL 主キーの追加・削除</title><content type="html">忘れるのでメモ&lt;br /&gt;&lt;br /&gt;主キーの追加&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;ALTER TABLE テーブル名 ADD PRIMARY KEY (カラム名1[,カラム名2...]);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;主キーの削除&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;ALTER TABLE テーブル名 DROP PRIMARY KEY&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;削除時下のようなエラーがでたら制約を疑う&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;OperationalError: (1025, "Error on rename of './foo/#sql-b6f_3958' to './foo/bar' (errno: 150)")&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;制約を確認&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;mysql&gt; SHOW CREATE TABLE foo;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1123743929918981950-1281968054567542265?l=blog.hori-uchi.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/x_gRhRsYOpHO6qE5J9Hs_l4JMaY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/x_gRhRsYOpHO6qE5J9Hs_l4JMaY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/x_gRhRsYOpHO6qE5J9Hs_l4JMaY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/x_gRhRsYOpHO6qE5J9Hs_l4JMaY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Bloghori-uchicom/~4/uck8J_q_fIY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.hori-uchi.com/feeds/1281968054567542265/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://blog.hori-uchi.com/2009/12/mysql.html#comment-form" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1123743929918981950/posts/default/1281968054567542265?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1123743929918981950/posts/default/1281968054567542265?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Bloghori-uchicom/~3/uck8J_q_fIY/mysql.html" title="MySQL 主キーの追加・削除" /><author><name>horiuchi</name><uri>http://www.blogger.com/profile/10139525039076752147</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="10581251585663261456" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.hori-uchi.com/2009/12/mysql.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkAFQHY4eCp7ImA9WxNaEEk.&quot;"><id>tag:blogger.com,1999:blog-1123743929918981950.post-8776683297844150009</id><published>2009-11-24T16:15:00.007+09:00</published><updated>2009-11-24T16:45:11.830+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-24T16:45:11.830+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="RDS" /><category scheme="http://www.blogger.com/atom/ns#" term="mysql" /><category scheme="http://www.blogger.com/atom/ns#" term="amazon web service" /><title>AmazonRDSでslow queryを出力するようにする方法</title><content type="html">AmazonRDSは、デフォルトの設定ではslow queryを出力するようになっていない。&lt;br /&gt;また、MySQLが動いているサーバにアクセスすることができないので、slow queryをログファイルに出力したとしてもそれを閲覧する術がない。&lt;br /&gt;RDSでも採用されているMySQL 5.1からは、slow queryをテーブルに保存できるようになったので、それを使う。&lt;br /&gt;&lt;br /&gt;方針&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;ログはテーブル(mysql.slow_log)に出力する。&lt;/li&gt;&lt;br /&gt;&lt;li&gt;実行に1秒以上かかったクエリを記録する&lt;/li&gt;&lt;br /&gt;&lt;li&gt;100行以上を読み込んだクエリを記録する&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;普通なら以下のオプションをmy.cnfに設定すればOK。&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;[mysqld]&lt;br /&gt;slow_query_log = ON&lt;br /&gt;long_query_time = 1.000&lt;br /&gt;log_output = TABLE&lt;br /&gt;min_examined_row_limit=100&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;RDSの場合は、db-parameter-groupを作成し、パラメータを編集し、db-instanceに適用する。&lt;br /&gt;今回はacme-param-grpというdb-parameter-groupを作成し、acmeというdb-instanceに適用する。&lt;br /&gt;&lt;br /&gt;db-parameter-groupを作成&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ rds-create-db-parameter-group acme-param-grp -e MySQL5.1 -d "parameter group for acme"&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;db-parameter-groupのパラメータを編集&lt;br /&gt;(log_outputはデフォルトでTABLEになっているので設定しない。設定しようとしてもできない)&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ rds-modify-db-parameter-group acme-param-grp \&lt;br /&gt;--parameters="name=slow_query_log, value=ON, method=immediate" \&lt;br /&gt;--parameters="name=long_query_time, value=1, method=immediate" \&lt;br /&gt;--parameters="name=min_examined_row_limit, value=100, method=immediate"&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;methodに指定できる値はimmediate もしくは pending-reboot&lt;br /&gt;&lt;br /&gt;編集したパラメータの確認&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ rds-describe-db-parameters acme-param-grp --source user&lt;br /&gt;DBPARAMETER  long_query_time         1    user  integer  dynamic  true&lt;br /&gt;DBPARAMETER  min_examined_row_limit  100  user  integer  dynamic  true&lt;br /&gt;DBPARAMETER  slow_query_log          1    user  boolean  dynamic  true&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;sourceに指定できる値はuser 、system、 engine-default&lt;br /&gt;&lt;br /&gt;db-parameter-groupをdb-instanceに適用&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ rds-modify-db-instance acme --db-parameter-group-name=acme-param-grp&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;db-instanceを再起動&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ rds-reboot-db-instance acme&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;db-instanceにdb-parameter-groupが適用されているか確認&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ rds-describe-db-instances&lt;br /&gt;DBINSTANCE  acme  2009-11-04T10:59:28.860Z  db.m1.large    mysql5.1  100  xxxx  available  acme.xxxxxxx.us-east-1.rds.amazonaws.com  3306  us-east-1d  1&lt;br /&gt;     SECGROUP  xxxx  active&lt;br /&gt;     PARAMGRP  acme-param-grp  in-sync&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;PARAMGRPがacme-param-grpになっていて、ステータスがin-syncになっていればOK。&lt;br /&gt;&lt;br /&gt;さらにmysqlにアクセスしパラメータが有効になっているか確認する。&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;mysql &gt; show global variables like 'slow_query_log';&lt;br /&gt;+----------------+-------+&lt;br /&gt;| Variable_name  | Value |&lt;br /&gt;+----------------+-------+&lt;br /&gt;| slow_query_log | ON    |&lt;br /&gt;+----------------+-------+&lt;br /&gt;1 row in set (0.00 sec)&lt;br /&gt;&lt;br /&gt;mysql&gt; show global variables like 'long_query_time';&lt;br /&gt;+-----------------+----------+&lt;br /&gt;| Variable_name   | Value    |&lt;br /&gt;+-----------------+----------+&lt;br /&gt;| long_query_time | 1.000000 |&lt;br /&gt;+-----------------+----------+&lt;br /&gt;1 row in set (0.00 sec)&lt;br /&gt;&lt;br /&gt;mysql&gt; show global variables like 'min_examined_row_limit';&lt;br /&gt;+------------------------+-------+&lt;br /&gt;| Variable_name          | Value |&lt;br /&gt;+------------------------+-------+&lt;br /&gt;| min_examined_row_limit | 100   |&lt;br /&gt;+------------------------+-------+&lt;br /&gt;1 row in set (0.00 sec)&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1123743929918981950-8776683297844150009?l=blog.hori-uchi.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/atFA3ILK99YuC2xfSW3xzvVtPVo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/atFA3ILK99YuC2xfSW3xzvVtPVo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/atFA3ILK99YuC2xfSW3xzvVtPVo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/atFA3ILK99YuC2xfSW3xzvVtPVo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Bloghori-uchicom/~4/6Tiq6V-amkA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.hori-uchi.com/feeds/8776683297844150009/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://blog.hori-uchi.com/2009/11/amazonrdsslow-query.html#comment-form" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1123743929918981950/posts/default/8776683297844150009?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1123743929918981950/posts/default/8776683297844150009?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Bloghori-uchicom/~3/6Tiq6V-amkA/amazonrdsslow-query.html" title="AmazonRDSでslow queryを出力するようにする方法" /><author><name>horiuchi</name><uri>http://www.blogger.com/profile/10139525039076752147</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="10581251585663261456" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.hori-uchi.com/2009/11/amazonrdsslow-query.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkQER3w-cSp7ImA9WxNbF0w.&quot;"><id>tag:blogger.com,1999:blog-1123743929918981950.post-5605396903513230602</id><published>2009-11-20T20:36:00.003+09:00</published><updated>2009-11-20T20:58:26.259+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-20T20:58:26.259+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="python" /><title>Python 今日覚えたこと</title><content type="html">utf-8な文字列を内部で扱う形式にデコードする際、&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;unicode_str = utf8_data.decode('utf-8')&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;とするとutf8_dataにデコードできないバイト列があった場合、UnicodeDecodeErrorの例外をだす。&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;UnicodeDecodeError: 'utf8' codec can't decode byte 0xb4 in position 1: unexpected code byte &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;デコードできない文字列を削除してしまっていいのなら'ignore'を引数で渡してやればよい。&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;unicode_str = utf8_data.decode('utf-8', 'ignore')&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;さらにdecodeよりunicodeの方が高速らしい。&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;unicode_str = unicode(utf8_data, "utf-8", 'ignore') &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;エンコード、デコードの概念はPerlと同じなので理解しやすかった。&lt;br /&gt;&lt;br /&gt;参考&lt;br /&gt;&lt;a href="http://snippets.hachinos.net/lang/python/user/piro_suke/3/"&gt;http://snippets.hachinos.net/lang/python/user/piro_suke/3/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://snippets.hachinos.net/lang/python/user/piro_suke/3/"&gt;http://d.hatena.ne.jp/methane/20090816/1250433407&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1123743929918981950-5605396903513230602?l=blog.hori-uchi.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/oqAyQcXUe4r4egfc19ebozs0eIY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/oqAyQcXUe4r4egfc19ebozs0eIY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/oqAyQcXUe4r4egfc19ebozs0eIY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/oqAyQcXUe4r4egfc19ebozs0eIY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Bloghori-uchicom/~4/_wPLX-m9Qxg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.hori-uchi.com/feeds/5605396903513230602/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://blog.hori-uchi.com/2009/11/python.html#comment-form" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1123743929918981950/posts/default/5605396903513230602?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1123743929918981950/posts/default/5605396903513230602?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Bloghori-uchicom/~3/_wPLX-m9Qxg/python.html" title="Python 今日覚えたこと" /><author><name>horiuchi</name><uri>http://www.blogger.com/profile/10139525039076752147</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="10581251585663261456" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.hori-uchi.com/2009/11/python.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUMAR30yeCp7ImA9WxNbFU4.&quot;"><id>tag:blogger.com,1999:blog-1123743929918981950.post-7067675638041754567</id><published>2009-11-18T18:39:00.002+09:00</published><updated>2009-11-18T18:44:06.390+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-18T18:44:06.390+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="django" /><category scheme="http://www.blogger.com/atom/ns#" term="python" /><title>saveをオーバーライドする時はforce_insert、force_updateを渡す</title><content type="html">Djangoでdjango.db.Modelsのsaveメソッドをオーバーライドする際&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;def save(self):&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;とすると、create()とget_or_create()で以下のようなエラーを吐いた。&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;TypeError: save() got an unexpected keyword argument 'force_insert'&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;saveにforce_insert,force_updateを渡すようにしないといけないらしい。&lt;br /&gt;正解はこう&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;def save(self, force_insert=False, force_update=False):&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://code.djangoproject.com/wiki/BackwardsIncompatibleChanges"&gt;http://code.djangoproject.com/wiki/BackwardsIncompatibleChanges&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;create() and get_or_create() will never update existing objects ¶&lt;br /&gt;&lt;br /&gt;In [8670] a change was made to both create() and get_or_create() that affects people in two ways:&lt;br /&gt;&lt;br /&gt;Firstly, if you have a custom save() method on your model and it is going to be called using create() or get_or_create(), you should make sure you accept the force_insert parameter (best to accept force_update as well, just like django.db.models.base.Model.save()). You don't have to do anything with these parameters, just pass them through to the Model.save() method. &lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1123743929918981950-7067675638041754567?l=blog.hori-uchi.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/obfs3-Hu-bg9kfdY9ObeR-fdAZ4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/obfs3-Hu-bg9kfdY9ObeR-fdAZ4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/obfs3-Hu-bg9kfdY9ObeR-fdAZ4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/obfs3-Hu-bg9kfdY9ObeR-fdAZ4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Bloghori-uchicom/~4/GOYwvqN2qhc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.hori-uchi.com/feeds/7067675638041754567/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://blog.hori-uchi.com/2009/11/saveforceinsertforceupdate.html#comment-form" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1123743929918981950/posts/default/7067675638041754567?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1123743929918981950/posts/default/7067675638041754567?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Bloghori-uchicom/~3/GOYwvqN2qhc/saveforceinsertforceupdate.html" title="saveをオーバーライドする時はforce_insert、force_updateを渡す" /><author><name>horiuchi</name><uri>http://www.blogger.com/profile/10139525039076752147</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="10581251585663261456" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.hori-uchi.com/2009/11/saveforceinsertforceupdate.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkQMRXk4cSp7ImA9WxNbFE4.&quot;"><id>tag:blogger.com,1999:blog-1123743929918981950.post-7383419260186511789</id><published>2009-11-17T14:52:00.003+09:00</published><updated>2009-11-17T15:13:04.739+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-17T15:13:04.739+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="python" /><title>urllib2でgzipされたデータを扱う</title><content type="html">ここに書いてあった。&lt;br /&gt;&lt;a href="http://diveintomark.org/projects/misc/httpgzip.py.txt"&gt;http://diveintomark.org/projects/misc/httpgzip.py.txt&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;StringIOよりcStringIOのが高速でよいと聞いたのでそちらを使ってみる。&lt;br /&gt;それ以外はまるパクリ。&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;br /&gt;import urllib2, gzip, cStringIO&lt;br /&gt;&lt;br /&gt;def get(uri):&lt;br /&gt;    request = urllib2.Request(uri)&lt;br /&gt;    request.add_header("Accept-encoding", "gzip")&lt;br /&gt;    usock = urllib2.urlopen(request)&lt;br /&gt;    data = usock.read()&lt;br /&gt;    if usock.headers.get('content-encoding', None) == 'gzip':&lt;br /&gt;        data = gzip.GzipFile(fileobj=cStringIO.StringIO(data)).read()&lt;br /&gt;    return data&lt;br /&gt;&lt;br /&gt;if __name__ == '__main__':&lt;br /&gt;    import sys&lt;br /&gt;    uri = sys.argv[1:] and sys.argv[1] or 'http://mixi.jp/'&lt;br /&gt;    print get(uri)&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1123743929918981950-7383419260186511789?l=blog.hori-uchi.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/-1aQ61jqZ9a0k4NRLFR2fc_y9To/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-1aQ61jqZ9a0k4NRLFR2fc_y9To/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/-1aQ61jqZ9a0k4NRLFR2fc_y9To/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-1aQ61jqZ9a0k4NRLFR2fc_y9To/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Bloghori-uchicom/~4/9G2c-SNf52M" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.hori-uchi.com/feeds/7383419260186511789/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://blog.hori-uchi.com/2009/11/urllib2gzip.html#comment-form" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1123743929918981950/posts/default/7383419260186511789?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1123743929918981950/posts/default/7383419260186511789?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Bloghori-uchicom/~3/9G2c-SNf52M/urllib2gzip.html" title="urllib2でgzipされたデータを扱う" /><author><name>horiuchi</name><uri>http://www.blogger.com/profile/10139525039076752147</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="10581251585663261456" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.hori-uchi.com/2009/11/urllib2gzip.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkIHQHs9cSp7ImA9WxNbEEU.&quot;"><id>tag:blogger.com,1999:blog-1123743929918981950.post-4640260036737266804</id><published>2009-11-13T11:38:00.004+09:00</published><updated>2009-11-13T11:48:51.569+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-13T11:48:51.569+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="mysql" /><title>MySQL 外部キー制約の追加、削除</title><content type="html">忘れるのでメモ&lt;br /&gt;&lt;br /&gt;MySQL 5.1で確認した。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;外部キー制約の確認&lt;/span&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;SHOW CREATE TABLE テーブル名;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;show create table bbs_thread;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;外部キー制約の追加&lt;/span&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;ALTER TABLE テーブル名 ADD FOREIGN KEY (制約を張りたいカラム) REFERENCES 張りたいテーブル(張りたいカラム);&lt;/span&gt;&lt;/blockquote&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;alter table bbs_thread add foreign key (creator_id) references accounts_user(id);&lt;/blockquote&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;外部キー制約の削除&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="font-size:100%;"&gt;ALTER TABLE テーブル名 DROP FOREIGN KEY 制約名;&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;ALTER TABLE bbs_thread drop foreign key creator_id_refs_id_75448b6c;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1123743929918981950-4640260036737266804?l=blog.hori-uchi.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/XRJGTPj67poK01uV-0wcCepBjJw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/XRJGTPj67poK01uV-0wcCepBjJw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/XRJGTPj67poK01uV-0wcCepBjJw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/XRJGTPj67poK01uV-0wcCepBjJw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Bloghori-uchicom/~4/vgXckv_-qMg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.hori-uchi.com/feeds/4640260036737266804/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://blog.hori-uchi.com/2009/11/mysql.html#comment-form" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1123743929918981950/posts/default/4640260036737266804?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1123743929918981950/posts/default/4640260036737266804?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Bloghori-uchicom/~3/vgXckv_-qMg/mysql.html" title="MySQL 外部キー制約の追加、削除" /><author><name>horiuchi</name><uri>http://www.blogger.com/profile/10139525039076752147</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="10581251585663261456" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.hori-uchi.com/2009/11/mysql.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0QMSH4_fyp7ImA9WxNUGUw.&quot;"><id>tag:blogger.com,1999:blog-1123743929918981950.post-5728156027921181957</id><published>2009-11-11T14:59:00.002+09:00</published><updated>2009-11-11T15:03:09.047+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-11T15:03:09.047+09:00</app:edited><title>Leopardでcapistrano</title><content type="html">Leopardにはデフォルトでcapistranoが入っているが、バージョンが古いので、更新する&lt;br /&gt;&lt;br /&gt;$ sudo gem install capistrano&lt;br /&gt;&lt;br /&gt;複数環境にデプロイできるように。capistrano-extをインストールする&lt;br /&gt;&lt;br /&gt;$ sudo gem install capistrano-ext&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1123743929918981950-5728156027921181957?l=blog.hori-uchi.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/c3XiGz_wb1a4KSJHEcyfqbc0f8A/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/c3XiGz_wb1a4KSJHEcyfqbc0f8A/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/c3XiGz_wb1a4KSJHEcyfqbc0f8A/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/c3XiGz_wb1a4KSJHEcyfqbc0f8A/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Bloghori-uchicom/~4/jjketGx56js" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.hori-uchi.com/feeds/5728156027921181957/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://blog.hori-uchi.com/2009/11/leopardcapistrano.html#comment-form" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1123743929918981950/posts/default/5728156027921181957?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1123743929918981950/posts/default/5728156027921181957?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Bloghori-uchicom/~3/jjketGx56js/leopardcapistrano.html" title="Leopardでcapistrano" /><author><name>horiuchi</name><uri>http://www.blogger.com/profile/10139525039076752147</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="10581251585663261456" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.hori-uchi.com/2009/11/leopardcapistrano.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUUER3o-eSp7ImA9WxNVFUg.&quot;"><id>tag:blogger.com,1999:blog-1123743929918981950.post-3302993231865206645</id><published>2009-10-26T19:26:00.003+09:00</published><updated>2009-10-26T19:33:26.451+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-10-26T19:33:26.451+09:00</app:edited><title>LeopardにPILをpipでインストール</title><content type="html">$ pip install PIL&lt;br /&gt;&lt;br /&gt;とすると&lt;br /&gt;IOError: [Errno 2] No such file or directory: '/Path/to/build/PIL/setup.py'&lt;br /&gt;というエラーがでてインストールできない。&lt;br /&gt;&lt;br /&gt;ソースのURLを指定してインストール。&lt;br /&gt;&lt;br /&gt;$ pip install http://effbot.org/downloads/Imaging-1.1.6.tar.gz&lt;br /&gt;&lt;br /&gt;Jpeg support not availableとログに出た場合は、&lt;br /&gt;jpegを利用できるようにするために、libjpegをインストール&lt;br /&gt;&lt;br /&gt;$ wget http://www.ijg.org/files/jpegsrc.v7b.tar.gz&lt;br /&gt;$ tar zxvf jpegsrc.v7b.tar.gz&lt;br /&gt;$ cd jpeg-7&lt;br /&gt;$ ./configure&lt;br /&gt;$ make &amp;&amp; sudo make install&lt;br /&gt;&lt;br /&gt;そんでもいっかいpip&lt;br /&gt;&lt;br /&gt;$ pip install http://effbot.org/downloads/Imaging-1.1.6.tar.gz&lt;br /&gt;&lt;br /&gt;JPEG support ok とでればOK。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1123743929918981950-3302993231865206645?l=blog.hori-uchi.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/05BOGxf0Fh3W9k-wtIAGAFxFVmU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/05BOGxf0Fh3W9k-wtIAGAFxFVmU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/05BOGxf0Fh3W9k-wtIAGAFxFVmU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/05BOGxf0Fh3W9k-wtIAGAFxFVmU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Bloghori-uchicom/~4/pr2YfW5IXBo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.hori-uchi.com/feeds/3302993231865206645/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://blog.hori-uchi.com/2009/10/leopardpilpip.html#comment-form" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1123743929918981950/posts/default/3302993231865206645?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1123743929918981950/posts/default/3302993231865206645?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Bloghori-uchicom/~3/pr2YfW5IXBo/leopardpilpip.html" title="LeopardにPILをpipでインストール" /><author><name>horiuchi</name><uri>http://www.blogger.com/profile/10139525039076752147</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="10581251585663261456" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.hori-uchi.com/2009/10/leopardpilpip.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Dk4CQ38_cSp7ImA9WxNVEUQ.&quot;"><id>tag:blogger.com,1999:blog-1123743929918981950.post-9051163135616398174</id><published>2009-10-22T15:08:00.005+09:00</published><updated>2009-10-22T16:02:42.149+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-10-22T16:02:42.149+09:00</app:edited><title>safari3でjTemplatesがうまく動かない問題を解決</title><content type="html">jTemplatesのsetTemplateElementメソッドを使ってテンプレートをロードする際、テンプレートに日本語が含まれていると、safari3では何も表示されないという問題に遭遇。&lt;br /&gt;jQuery,jTemplatesのバージョンはそれぞれ現在最新の、1.3.2と0.7.8。&lt;br /&gt;&lt;br /&gt;原因を調べるため、jquery-jtemplates.jsを見てみると、なんのことはない、replaceの正規表現がうまくマッチせず、テンプレート内のコメント部分の除去がうまくいってないだけだった。&lt;br /&gt;&lt;br /&gt;具体的にはjquery-jtemplates.jsの中のjQuery.fn.setTemplateElement内にある下のコード。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;s = s.replace(/^&lt;\!\[CDATA\[([\s\S]*)\]\]&gt;$/im,'$1');                                                                                                                                       &lt;br /&gt;s = s.replace(/^&lt;\!--([\s\S]*)--&gt;$/im, '$1');&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;これがsafari3だとうまくマッチせず、&amp;lt;!--と--&amp;gt;が除去されず、そのままコメント扱いになり、表示されていなかった。&lt;br /&gt;&lt;br /&gt;とりあえず、上記コードを下記のように修正することで対応した。&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;s = s.replace(/^&lt;\!\[CDATA\[/m, '').replace(/\]\]&gt;$/m, '').replace(/^&lt;\!--/m, '').replace(/--&gt;$/m, '');&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1123743929918981950-9051163135616398174?l=blog.hori-uchi.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/JDwKIb6vdJ5ysj_TdLBc4G0kYck/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/JDwKIb6vdJ5ysj_TdLBc4G0kYck/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/JDwKIb6vdJ5ysj_TdLBc4G0kYck/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/JDwKIb6vdJ5ysj_TdLBc4G0kYck/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Bloghori-uchicom/~4/znb2r9Fhy14" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.hori-uchi.com/feeds/9051163135616398174/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://blog.hori-uchi.com/2009/10/safari3jtemplates.html#comment-form" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1123743929918981950/posts/default/9051163135616398174?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1123743929918981950/posts/default/9051163135616398174?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Bloghori-uchicom/~3/znb2r9Fhy14/safari3jtemplates.html" title="safari3でjTemplatesがうまく動かない問題を解決" /><author><name>horiuchi</name><uri>http://www.blogger.com/profile/10139525039076752147</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="10581251585663261456" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.hori-uchi.com/2009/10/safari3jtemplates.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUEERno7fip7ImA9WxNRGUw.&quot;"><id>tag:blogger.com,1999:blog-1123743929918981950.post-164196306836811110</id><published>2009-09-14T16:47:00.016+09:00</published><updated>2009-09-14T17:40:07.406+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-14T17:40:07.406+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="jquery" /><category scheme="http://www.blogger.com/atom/ns#" term="mixiアプリ" /><category scheme="http://www.blogger.com/atom/ns#" term="opensocial" /><title>mixiアプリの表示領域(高さ)を調整する最適な方法</title><content type="html">mixiアプリの開発をはじめてからずっと表示領域(高さ)の調節に悩まされていたのですが、下記の記述でうまく調整されるようになりました。&lt;br /&gt;&lt;br /&gt;&lt;blockquote style="font-weight: bold;"&gt;&lt;span style="font-size:130%;"&gt;gadgets.window.adjustHeight($(document).height());&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;$(document).height()でjQueryを使ってdocumentの高さを取得し、&lt;br /&gt;コンテナの提供するgadgets.window.adjustHeightに渡すようにしています。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;そもそも、gadgets.window.adjustHeightは引数を渡さず実行すると、表示領域の高さを自動調整してくれるはずなので、引数なしで呼びだせばそれでOKなはずなのですが、これが結構うまく動作してくれません。&lt;br /&gt;その結果コンテンツが全て画面に入りきらずに、スクロールバーが表示されてしまい、見づらいし、使いずらいということになってしまいます。&lt;br /&gt;&lt;br /&gt;ここで問題なのが、開発環境と本番環境で挙動が異なるということで、&lt;br /&gt;僕の場合ローカルの開発環境(Partuza+Shindig)では高さの自動調整がうまく行くのに、mixi上で動作させると高さがうまく調整されずスクロールバーがでてしまうという現象になやみました。&lt;br /&gt;&lt;br /&gt;そこで上記の解決策です。jQueryで高さを取得することで、コンテナに依存しなくなるので、開発環境でも本番環境でも同じ挙動を得ることができるようになりました。&lt;br /&gt;&lt;br /&gt;コンテナが成熟してくればこの手の問題はある程度解決していくとは思いますが、コンテナ毎の微妙な差異というのは少なからず残るのではないかと思います。&lt;br /&gt;&lt;br /&gt;そのため、今回のようにコンテナに依存しないような方法を取るというのは、様々なプラットフォームで動かすアプリを作る時には考えなければいけないなと思います。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1123743929918981950-164196306836811110?l=blog.hori-uchi.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/UFoi1c75sWw5AQnGQOWsphqR9j8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/UFoi1c75sWw5AQnGQOWsphqR9j8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/UFoi1c75sWw5AQnGQOWsphqR9j8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/UFoi1c75sWw5AQnGQOWsphqR9j8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Bloghori-uchicom/~4/Zajj5SQVjAA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.hori-uchi.com/feeds/164196306836811110/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://blog.hori-uchi.com/2009/09/mixi.html#comment-form" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1123743929918981950/posts/default/164196306836811110?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1123743929918981950/posts/default/164196306836811110?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Bloghori-uchicom/~3/Zajj5SQVjAA/mixi.html" title="mixiアプリの表示領域(高さ)を調整する最適な方法" /><author><name>horiuchi</name><uri>http://www.blogger.com/profile/10139525039076752147</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="10581251585663261456" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.hori-uchi.com/2009/09/mixi.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0ENRH45cSp7ImA9WxNSEE4.&quot;"><id>tag:blogger.com,1999:blog-1123743929918981950.post-114690263431573304</id><published>2009-06-04T04:12:00.000+09:00</published><updated>2009-08-23T22:54:55.029+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-23T22:54:55.029+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="python" /><title>10日でおぼえるPython入門教室</title><content type="html">CMSコミュニケーションズの寺田さんから「10日でおぼえるPython入門教室」を献本いただきました!&lt;br/&gt;どうもありがとうございます!!&lt;br/&gt;&lt;br/&gt;ちょうど僕の中で「Python」が熱くなっていたところだったんです!&lt;br/&gt;まさにベストなタイミング!&lt;br/&gt;&lt;br/&gt;10日目にはGoogle App Engineの使い方の解説もあるみたい。&lt;br/&gt;これからじっくり読んでみます。&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;div class="amazlet-box" style="margin-bottom:0px;"&gt;&lt;div class="amazlet-image" style="float:left;"&gt;&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/4798118753/horiuchiweblo-22/ref=nosim/" name="amazletlink" target="_blank"&gt;&lt;img src="http://ecx.images-amazon.com/images/I/51iy-nMV8aL._SL160_.jpg" alt="10日でおぼえる Python 入門教室" style="border: none;" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="amazlet-info" style="float:left;margin-left:15px;line-height:120%"&gt;&lt;div class="amazlet-name" style="margin-bottom:10px;line-height:120%"&gt;&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/4798118753/horiuchiweblo-22/ref=nosim/" name="amazletlink" target="_blank"&gt;10日でおぼえる Python 入門教室&lt;/a&gt;&lt;div class="amazlet-powered-date" style="font-size:7pt;margin-top:5px;font-family:verdana;line-height:120%"&gt;posted with &lt;a href="http://www.amazlet.com/browse/ASIN/4798118753/horiuchiweblo-22/ref=nosim/" title="10日でおぼえる Python 入門教室" target="_blank"&gt;amazlet&lt;/a&gt; at 09.06.03&lt;/div&gt;&lt;/div&gt;&lt;div class="amazlet-detail"&gt;穂苅 実紀夫 寺田 学 中西 直樹 堀田 直孝 永井 孝 &lt;br /&gt;翔泳社 &lt;br /&gt;売り上げランキング: 5963&lt;br /&gt;&lt;/div&gt;&lt;div class="amazlet-link" style="margin-top: 5px"&gt;&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/4798118753/horiuchiweblo-22/ref=nosim/" name="amazletlink" target="_blank"&gt;Amazon.co.jp で詳細を見る&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="amazlet-footer" style="clear: left"&gt;&lt;/div&gt;&lt;/div&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1123743929918981950-114690263431573304?l=blog.hori-uchi.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/OTcRNMjVf33POAILJfEXWxkG_bs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/OTcRNMjVf33POAILJfEXWxkG_bs/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/OTcRNMjVf33POAILJfEXWxkG_bs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/OTcRNMjVf33POAILJfEXWxkG_bs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Bloghori-uchicom/~4/Nhjsb64ikP8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.hori-uchi.com/feeds/114690263431573304/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://blog.hori-uchi.com/2009/06/10python.html#comment-form" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1123743929918981950/posts/default/114690263431573304?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1123743929918981950/posts/default/114690263431573304?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Bloghori-uchicom/~3/Nhjsb64ikP8/10python.html" title="10日でおぼえるPython入門教室" /><author><name>horiuchi</name><uri>http://www.blogger.com/profile/10139525039076752147</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="10581251585663261456" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.hori-uchi.com/2009/06/10python.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0ENRH44eCp7ImA9WxNSEE4.&quot;"><id>tag:blogger.com,1999:blog-1123743929918981950.post-488382414869634638</id><published>2009-03-14T10:43:00.000+09:00</published><updated>2009-08-23T22:54:55.030+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-23T22:54:55.030+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="FlipClip" /><category scheme="http://www.blogger.com/atom/ns#" term="OpenPNE" /><title>OpenPNE　flipclip小窓スクリプト　新URL対応版</title><content type="html">FlipClpリニューアルに伴って、クリップのURLを下記のように変更しました。&lt;br/&gt;&lt;br/&gt;旧URL&lt;br/&gt;&gt;&lt;pre&gt;&lt;br/&gt;http://www.flipclpi.net/{userid}/{clip_no}&lt;br/&gt;&lt;/pre&gt;&lt;&lt;br/&gt;&lt;br/&gt;新URL&lt;br/&gt;&gt;&lt;pre&gt;&lt;br/&gt;http://www.flipclpi.net/{clip_no}&lt;br/&gt;&lt;/pre&gt;&lt;&lt;br/&gt;&lt;br/&gt;旧URLから新URLへはリダイレクトするようにしているので旧URLはそのままにしておいて問題ないのですが、クリップのURLを正規表現でマッチさせてごにょごにょしたりしている場合、新URLだとマッチせずうまく動かないってことがおこっちゃってます。&lt;br/&gt;&lt;br/&gt;OpenPNEの小窓機能もそのひとつで、新URLを貼り付けるとうまくURLがマッチせず、動画が表示されなくなってしまってます。&lt;br/&gt;OpenPNEの中の人が対応してくれると思いますが、取り急ぎ、新URLでも動くものをのっけておきます。&lt;br/&gt;以下のflipclip.net.js、www.flipclip.net.jsをダウンロードして、public_html/cmd/に上書きコピーすればOKです。&lt;br/&gt;&lt;br/&gt;&gt;&lt;pre&gt;&lt;br/&gt;OpenPNE　flipclip小窓スクリプト　新URL対応版&lt;br/&gt;&lt;a href="http://hori-uchi.com/misc/flipclip.net.js"&gt;flipclip.net.js&lt;/a&gt;&lt;br/&gt;&lt;a href="http://hori-uchi.com/misc/www.flipclip.net.js"&gt;www.flipclip.net.js&lt;/a&gt;&lt;br/&gt;&lt;/pre&gt;&lt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1123743929918981950-488382414869634638?l=blog.hori-uchi.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/JjolrpQKO8pL8wkAW_RzpilRcPU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/JjolrpQKO8pL8wkAW_RzpilRcPU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/JjolrpQKO8pL8wkAW_RzpilRcPU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/JjolrpQKO8pL8wkAW_RzpilRcPU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Bloghori-uchicom/~4/oJZAMttwgmU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.hori-uchi.com/feeds/488382414869634638/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://blog.hori-uchi.com/2009/03/openpneflipclipurl.html#comment-form" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1123743929918981950/posts/default/488382414869634638?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1123743929918981950/posts/default/488382414869634638?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Bloghori-uchicom/~3/oJZAMttwgmU/openpneflipclipurl.html" title="OpenPNE　flipclip小窓スクリプト　新URL対応版" /><author><name>horiuchi</name><uri>http://www.blogger.com/profile/10139525039076752147</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="10581251585663261456" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.hori-uchi.com/2009/03/openpneflipclipurl.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0ENRH44eCp7ImA9WxNSEE4.&quot;"><id>tag:blogger.com,1999:blog-1123743929918981950.post-2107895848575923504</id><published>2009-03-11T20:00:00.000+09:00</published><updated>2009-08-23T22:54:55.030+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-23T22:54:55.030+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="FlipClip" /><title>FlipClipがリニューアルしました!</title><content type="html">FlipClipがリニューアルしました。&lt;br/&gt;&lt;br/&gt;詳しい内容はこちら&lt;br/&gt;http://blog.flipclip.net/2009/03/post_57.html&lt;br/&gt;&lt;br/&gt;今回のリニューアルで体感できるほど、サイトのレスポンスが上がったと思います。&lt;br/&gt;&lt;br/&gt;今までサービス全体のレスポンスを下げていた、全レコードに対する検索を見直すことで、DBの負荷が50〜100分の1になりました。&lt;br/&gt;&lt;br/&gt;レコードの検索に対して、様々な場面を想定して、柔軟に条件を指定検索できるような実装をしてしまっていたのが、DBのレスポンスを悪くして、サイトを重くしていた主な原因であり、反省する点です。&lt;br/&gt;&lt;br/&gt;今回の件で、&lt;strong&gt;「なんでもできる」ものは「なんにもできない」&lt;/strong&gt;のと同じだってことを痛感しました。&lt;br/&gt;リーンな開発を心がけようと心に誓いました。&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1123743929918981950-2107895848575923504?l=blog.hori-uchi.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/7XQJycvpm9p6bCP863gJZqTkLjY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7XQJycvpm9p6bCP863gJZqTkLjY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/7XQJycvpm9p6bCP863gJZqTkLjY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7XQJycvpm9p6bCP863gJZqTkLjY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Bloghori-uchicom/~4/vAPdz1jYXZQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.hori-uchi.com/feeds/2107895848575923504/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://blog.hori-uchi.com/2009/03/flipclip.html#comment-form" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1123743929918981950/posts/default/2107895848575923504?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1123743929918981950/posts/default/2107895848575923504?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Bloghori-uchicom/~3/vAPdz1jYXZQ/flipclip.html" title="FlipClipがリニューアルしました!" /><author><name>horiuchi</name><uri>http://www.blogger.com/profile/10139525039076752147</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="10581251585663261456" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.hori-uchi.com/2009/03/flipclip.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0ENRH44eCp7ImA9WxNSEE4.&quot;"><id>tag:blogger.com,1999:blog-1123743929918981950.post-1926812419711038782</id><published>2009-02-13T03:28:00.000+09:00</published><updated>2009-08-23T22:54:55.030+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-23T22:54:55.030+09:00</app:edited><title>DjangoXPython</title><content type="html">僕のとなりの席の露木さんがDjangoの本を書きました!&lt;br/&gt;&lt;br/&gt;「ディージャンゴ」じゃないよ「ジャンゴ」だよ。&lt;br/&gt;&lt;br/&gt;Googleも使ってるPythonのフレームワークで、優秀なadmin機能が標準装備されていたり、テンプレートの継承ができたりします。&lt;br/&gt;&lt;br/&gt;僕もDjangoに(露木さんに?)インスパイアされてテンプレートの継承っぽいことができるTTのプラグイン書いて、FlipClipで使ってます。&lt;br/&gt;&lt;br/&gt;&lt;img src="http://img.skitch.com/20090212-c3fb7uk3af8wdb6jepjbm9u9e8.preview.jpg" /&gt;&lt;br/&gt;&lt;div class="amazlet-box"&gt;&lt;div class="amazlet-info"&gt;&lt;div class="amazlet-name"&gt;&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/477413760X/horiuchiweblo-22/ref=nosim/" name="amazletlink" target="_blank"&gt;Django×Python&lt;/a&gt;&lt;div class="amazlet-powered-date"&gt;posted with &lt;a href="http://www.amazlet.com/browse/ASIN/477413760X/horiuchiweblo-22/ref=nosim/" title="Django×Python" target="_blank"&gt;amazlet&lt;/a&gt; at 09.02.12&lt;/div&gt;&lt;/div&gt;&lt;div class="amazlet-detail"&gt;露木 誠 &lt;br /&gt;技術評論社 &lt;br /&gt;売り上げランキング: 5011&lt;br /&gt;&lt;/div&gt;&lt;div class="amazlet-link"&gt;&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/477413760X/horiuchiweblo-22/ref=nosim/" name="amazletlink" target="_blank"&gt;Amazon.co.jp で詳細を見る&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="amazlet-footer"&gt;&lt;/div&gt;&lt;/div&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1123743929918981950-1926812419711038782?l=blog.hori-uchi.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Xbw0lZzoKT5c70ybt816MW62dcA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Xbw0lZzoKT5c70ybt816MW62dcA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Xbw0lZzoKT5c70ybt816MW62dcA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Xbw0lZzoKT5c70ybt816MW62dcA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Bloghori-uchicom/~4/SvYoYREVK9s" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.hori-uchi.com/feeds/1926812419711038782/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://blog.hori-uchi.com/2009/02/djangoxpython.html#comment-form" title="3 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1123743929918981950/posts/default/1926812419711038782?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1123743929918981950/posts/default/1926812419711038782?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Bloghori-uchicom/~3/SvYoYREVK9s/djangoxpython.html" title="DjangoXPython" /><author><name>horiuchi</name><uri>http://www.blogger.com/profile/10139525039076752147</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="10581251585663261456" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">3</thr:total><feedburner:origLink>http://blog.hori-uchi.com/2009/02/djangoxpython.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0ENRH44eCp7ImA9WxNSEE4.&quot;"><id>tag:blogger.com,1999:blog-1123743929918981950.post-8355860753503690795</id><published>2008-06-05T04:46:00.000+09:00</published><updated>2009-08-23T22:54:55.030+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-23T22:54:55.030+09:00</app:edited><title>友人の奥さんがサロンをオープンしました。</title><content type="html">久しぶりの更新かつ、まったくPerlとは関係ありませんが、、&lt;br/&gt;&lt;br/&gt;同僚の奥さんが、浦和にまつげエクステ専門サロンをオープンするそうです。&lt;br/&gt;&lt;br/&gt;自宅サロンでゆっくり丁寧にカウンセリング、施術をしてくれるそうなので、興味のある方は是非チェックしてみてください！&lt;br/&gt;&lt;br/&gt;&lt;a href="http://www.mido3.jp/"&gt;まつげエクステ専門サロンmido&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1123743929918981950-8355860753503690795?l=blog.hori-uchi.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/7aWpmTJtfpPXH326l8qXW1vAGoA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7aWpmTJtfpPXH326l8qXW1vAGoA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/7aWpmTJtfpPXH326l8qXW1vAGoA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7aWpmTJtfpPXH326l8qXW1vAGoA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Bloghori-uchicom/~4/jfMOixbw0rE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.hori-uchi.com/feeds/8355860753503690795/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://blog.hori-uchi.com/2008/06/blog-post.html#comment-form" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1123743929918981950/posts/default/8355860753503690795?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1123743929918981950/posts/default/8355860753503690795?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Bloghori-uchicom/~3/jfMOixbw0rE/blog-post.html" title="友人の奥さんがサロンをオープンしました。" /><author><name>horiuchi</name><uri>http://www.blogger.com/profile/10139525039076752147</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="10581251585663261456" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.hori-uchi.com/2008/06/blog-post.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0ENRH44eCp7ImA9WxNSEE4.&quot;"><id>tag:blogger.com,1999:blog-1123743929918981950.post-1513151367770263400</id><published>2008-01-25T10:35:00.000+09:00</published><updated>2009-08-23T22:54:55.030+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-23T22:54:55.030+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ad" /><category scheme="http://www.blogger.com/atom/ns#" term="flash" /><category scheme="http://www.blogger.com/atom/ns#" term="WebDevelopment" /><title>adsという文字列を動画のURLに入れてはいけない</title><content type="html">ユーザーから動画が見れなくなったという問い合わせが来たので確認すると、自分達の環境では普通に見れる。原因がよくわからない。&lt;br/&gt;&lt;br/&gt;詳しく聞いてみるとどうやらIE7 ProというIE 7のAdd-onを入れてから見れなくなったらしい。ということでそれを入れてみたところ見事に動画が再生されなくなった。&lt;br/&gt;&lt;br/&gt;さらに詳しく調べていくと、IE7 ProのFlash広告をブロックする機能が、プレイヤーが取得しようとする動画を広告とみなしてブロックしてしまい、動画を取得できないため再生できないことがわかった。&lt;br/&gt;&lt;br/&gt;ブロックされていた動画のURLがこれ。&lt;br/&gt;http://www.flipclip.net/ads/logo_animation_a.flv&lt;br/&gt;&lt;br/&gt;この広告ブロック、広告かどうかの判定をURLにテキストマッチをかける形で行っていて、「/ads/」という部分が判定にひっかかていたみたい。&lt;br/&gt;&lt;br/&gt;原因がわかれば対応は簡単!&lt;br/&gt;動画のURLを変更することで無事問題解決しました。&lt;br/&gt;&lt;br/&gt;めでたしめでたし。&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1123743929918981950-1513151367770263400?l=blog.hori-uchi.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/0Gr0kfEmfzAHDztZRrqjKPEBrXA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/0Gr0kfEmfzAHDztZRrqjKPEBrXA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/0Gr0kfEmfzAHDztZRrqjKPEBrXA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/0Gr0kfEmfzAHDztZRrqjKPEBrXA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Bloghori-uchicom/~4/C7aNecO4slY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.hori-uchi.com/feeds/1513151367770263400/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://blog.hori-uchi.com/2008/01/adsurl.html#comment-form" title="2 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1123743929918981950/posts/default/1513151367770263400?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1123743929918981950/posts/default/1513151367770263400?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Bloghori-uchicom/~3/C7aNecO4slY/adsurl.html" title="adsという文字列を動画のURLに入れてはいけない" /><author><name>horiuchi</name><uri>http://www.blogger.com/profile/10139525039076752147</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="10581251585663261456" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://blog.hori-uchi.com/2008/01/adsurl.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0ENRH44eSp7ImA9WxNSEE4.&quot;"><id>tag:blogger.com,1999:blog-1123743929918981950.post-1837436395364340520</id><published>2008-01-18T21:21:00.000+09:00</published><updated>2009-08-23T22:54:55.031+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-23T22:54:55.031+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ffmpeg" /><category scheme="http://www.blogger.com/atom/ns#" term="perl" /><category scheme="http://www.blogger.com/atom/ns#" term="book" /><title>「FFmpegで作る動画共有サイト」が発売されます!</title><content type="html">動画共有サイトを作ってみたいという方向けの書籍「&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/483992466X/horiuchiweblo-22/ref=nosim/"&gt;FFmpegで作る動画共有サイト&lt;/a&gt;」が1/29にに毎日コミュニケーションズさんから発売されます!&lt;br/&gt;FFmpegとはというところから始まり、インストールから各言語でのFFmpegの使いかた、実際にサイトを構築するところまで入ったてんこ盛りな書籍です。&lt;br/&gt;&lt;br/&gt;僕も4章のPerlでFFmpegを使うという部分を書きました。&lt;br/&gt;僕が書いた部分ですが、まずはシンプルにsystem関数を使ってPerlからffmpegを実行する方法をサンプルスクリプトを使って紹介し、そのスクリプトをffmpegコマンドの実行結果を取得したり、タイムアウト処理をすることができるように拡張していくという内容になっています。&lt;br/&gt;&lt;br/&gt;拡張していくにあたって、誰でも簡単に試せるよう、CPANモジュールは使わず、標準モジュールと組み込み関数のみを使うようにしました。&lt;br/&gt;&lt;br/&gt;ただ、CPANモジュールの便利さも知ってもらいたかったので、ここまでに拡張したスクリプトをCPANモジュールを使って書くとどうなるか?というのを最後に紹介しています。&lt;br/&gt;&lt;br/&gt;ここではmizzyさん作の&lt;a href="http://search.cpan.org/~mizzy/FFmpeg-Command/"&gt;FFmpeg::Command&lt;/a&gt;を使ってサンプルコードを書きました。&lt;br/&gt;&lt;br/&gt;今回CPANモジュールを使うコードと使わないコードを書いてみて、改めてCPANモジュールの便利さを痛感しました。&lt;br/&gt;これを読んで、Perlっていいかも、ちょっと試してみようかなと思ってくれる方が少しでも増えたら幸いです。&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;div class="amazlet-box" style="margin-bottom:0px;"&gt;&lt;div class="amazlet-image" style="float:left;"&gt;&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/483992466X/horiuchiweblo-22/ref=nosim/" name="amazletlink" target="_blank"&gt;&lt;img src="http://ecx.images-amazon.com/images/I/218OfCjwUzL.jpg" alt="FFmpegで作る動画共有サイト" style="border: none;" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="amazlet-info" style="float:left;margin-left:15px;line-height:120%"&gt;&lt;div class="amazlet-name" style="margin-bottom:10px;line-height:120%"&gt;&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/483992466X/horiuchiweblo-22/ref=nosim/" name="amazletlink" target="_blank"&gt;FFmpegで作る動画共有サイト&lt;/a&gt;&lt;div class="amazlet-powered-date" style="font-size:7pt;margin-top:5px;font-family:verdana;line-height:120%"&gt;posted with &lt;a href="http://www.amazlet.com/browse/ASIN/483992466X/horiuchiweblo-22" title="FFmpegで作る動画共有サイト" target="_blank"&gt;amazlet&lt;/a&gt; on 08.01.18&lt;/div&gt;&lt;/div&gt;&lt;div class="amazlet-detail"&gt;月村 潤 本間 雅洋 堀田 直孝 原 一浩 足立 健誌 尾花 衣美 堀内 康弘 寺田 学 &lt;br /&gt;毎日コミュニケーションズ (2008/01/29)&lt;br /&gt;売り上げランキング: 15883&lt;br /&gt;&lt;/div&gt;&lt;div class="amazlet-link" style="margin-top: 5px"&gt;&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/483992466X/horiuchiweblo-22/ref=nosim/" name="amazletlink" target="_blank"&gt;Amazon.co.jp で詳細を見る&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="amazlet-footer" style="clear: left"&gt;&lt;/div&gt;&lt;/div&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;blockquote&gt;&lt;br/&gt;・予価：2,940円（税込）&lt;br/&gt;・B5変型判　272ページ&lt;br/&gt;・ISBN978-4-8399-2466-9&lt;br/&gt;・発売日：2008年01月29日&lt;br/&gt;&lt;br/&gt;■内容紹介&lt;br/&gt;&lt;br/&gt;YouTubeやニコニコ動画など、最近のWebサービスでは動画共有サービスが大人気です。その多くのサイトで、動画投稿時の変換に利用されているのがオープンソースの動画変換ソフト（エンジン）「FFmpeg」です。&lt;br/&gt;&lt;br/&gt;FFmpegは、様々な動画・音声形式の変換に対応しており、動画共有サービス立ち上げの際に必須の技術ですが、これまでまとまった解説書がありませんでした。本書は、動画共有サイトの開発を日常的に行っている著者による、FFmpegを利用して動画共有サービスを構築するための技術解説書になります。&lt;br/&gt;&lt;br/&gt;本書では、動画に関する基本的な解説から、FFmpegのインストールや使い方、Perl、PHP、Python、Javaの4つのプログラム言語での利用方法、字幕を入れられるFlashを使った動画プレイヤーの制作方法、Pythonを使った動画共有サイトの構築まで、サンプルを交えて解説します。本書で解説するのは、比較的小規模での動画共有サイトの作り方となりますが、サーバサイドの工夫次第では、大規模な動画共有サイトにも発展させることも可能です。&lt;br/&gt;&lt;br/&gt;動画共有サイトの開発環境は多岐に渡り、本書はそのエッセンスをまとめたもので、すべての環境や手順は解説してません。また、本書の開発環境は、著者が日常的に利用している環境で、必ずしも一般的な環境ではないかもしれません。ただ、実際に動画共有サイト構築のために、著者自身が試行錯誤しながら身につけた知識や技術は、FFmpegを利用した動画共有サイト構築の際に、必ず参考になると考えています。&lt;br/&gt;&lt;br/&gt;著者：原一浩・寺田学・本間雅洋・足立健誌・堀内康弘・堀田直孝・月村潤・尾花衣美&lt;br/&gt;&lt;/blockquote&gt;&lt;br/&gt;&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1123743929918981950-1837436395364340520?l=blog.hori-uchi.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/eYSEHAffp_ZqrSGYEKbr0_DBuaM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/eYSEHAffp_ZqrSGYEKbr0_DBuaM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/eYSEHAffp_ZqrSGYEKbr0_DBuaM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/eYSEHAffp_ZqrSGYEKbr0_DBuaM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Bloghori-uchicom/~4/ohJTWlwBzDc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.hori-uchi.com/feeds/1837436395364340520/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://blog.hori-uchi.com/2008/01/ffmpeg.html#comment-form" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1123743929918981950/posts/default/1837436395364340520?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1123743929918981950/posts/default/1837436395364340520?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Bloghori-uchicom/~3/ohJTWlwBzDc/ffmpeg.html" title="「FFmpegで作る動画共有サイト」が発売されます!" /><author><name>horiuchi</name><uri>http://www.blogger.com/profile/10139525039076752147</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="10581251585663261456" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.hori-uchi.com/2008/01/ffmpeg.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0ENRH44eSp7ImA9WxNSEE4.&quot;"><id>tag:blogger.com,1999:blog-1123743929918981950.post-2171404734434461029</id><published>2007-02-02T04:53:00.000+09:00</published><updated>2009-08-23T22:54:55.031+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-23T22:54:55.031+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="FlipClip" /><category scheme="http://www.blogger.com/atom/ns#" term="API" /><category scheme="http://www.blogger.com/atom/ns#" term="WSSE" /><category scheme="http://www.blogger.com/atom/ns#" term="Feed" /><title>FlipClipでクリップ検索用フィード公開しました。</title><content type="html">最近どこもかしこもAPI公開なご時勢ですが、&lt;a href="http://www.flipclip.net/"&gt;FlipClip&lt;/a&gt;もクリップ検索用のフィードをAPI第1段として公開しました。&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;FlipClip開発者向け情報のページ&lt;br/&gt;&lt;a href="http://www.flipclip.net/developer/"&gt;http://www.flipclip.net/developer/&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;フィードと言うよりAPIといったほうが世間の受けはよさそうな気がしますが、フィードはフィードなんで、フィードという名前にしときました。&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;今のところ、以下のクリップを取得できます。&lt;br/&gt;&lt;br/&gt;- 一般公開クリップ&lt;br/&gt;- 特定ユーザーのクリップ&lt;br/&gt;- 特定ユーザーの友だちのクリップ&lt;br/&gt;- 特定ユーザーのお気に入りクリップ&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;フィードのフォーマットはAtomフィード、JSONフィード、RSS2.0を用意しました。&lt;br/&gt;フォーマットの指定はクエリパラメータでできるんですが、別の方法として、Acceptヘッダを使った指定ができるようにしてあります。&lt;br/&gt;リソースを取得するためのURLがあって、そのURLに対してこのフォーマットでくれというと、その形式で返す、というようにRESTっぽくしたかったので、つけました。&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;それと、絞り込み機能を充実させています。&lt;br/&gt;タグやフリーワード、カテゴリ、撮影日時に位置情報など、対応できそうなのにはひととおり対応してみました。&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;また、ソートもいろいろな基準でできるようにしてあります。&lt;br/&gt;フィードなんで基本日付以外でソートできるのは、よろしくないような気もしましたが、&lt;br/&gt;使い勝手を考えて、再生回数とか投票の数などでソートできるようにしてあります。&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;もうひとつ、フィードの認証も実装してあります。&lt;br/&gt;認証にはWSSEを採用しました。&lt;br/&gt;&lt;br/&gt;フィードのリクエストの際にWSSEヘッダを付与してリクエストを送れば、&lt;br/&gt;認証されたユーザの権限でクリップが取得できるようになります。&lt;br/&gt;たとえば、自分のクリップなら、プライバシー設定に関係なくすべて取得できますし、&lt;br/&gt;自分の友だちのクリップで友だち公開なクリップも取得できます。&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;使ってみて、気づいた点、使いにくい点などありましたら、お知らせいただけるとうれしいです。&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1123743929918981950-2171404734434461029?l=blog.hori-uchi.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/c8mZUlVYBQPwea0pGu8KAz0ZUAs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/c8mZUlVYBQPwea0pGu8KAz0ZUAs/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/c8mZUlVYBQPwea0pGu8KAz0ZUAs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/c8mZUlVYBQPwea0pGu8KAz0ZUAs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Bloghori-uchicom/~4/RPRyqMCDtFg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.hori-uchi.com/feeds/2171404734434461029/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://blog.hori-uchi.com/2007/02/flipclip.html#comment-form" title="5 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1123743929918981950/posts/default/2171404734434461029?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1123743929918981950/posts/default/2171404734434461029?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Bloghori-uchicom/~3/RPRyqMCDtFg/flipclip.html" title="FlipClipでクリップ検索用フィード公開しました。" /><author><name>horiuchi</name><uri>http://www.blogger.com/profile/10139525039076752147</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="10581251585663261456" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">5</thr:total><feedburner:origLink>http://blog.hori-uchi.com/2007/02/flipclip.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0ENRH44eSp7ImA9WxNSEE4.&quot;"><id>tag:blogger.com,1999:blog-1123743929918981950.post-2116514096895278869</id><published>2006-12-05T20:07:00.000+09:00</published><updated>2009-08-23T22:54:55.031+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-23T22:54:55.031+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="文字化け" /><category scheme="http://www.blogger.com/atom/ns#" term="mysql" /><title>mysqldumpで文字化けしないためのメモ</title><content type="html">ローカルの開発環境で使っていたMySQLなんですが、何も考えずデフォルトの設定で使っていたら、mysqldumpした際に、データが文字化けして、ちょっとは待ったのでメモ。&lt;br/&gt;&lt;br/&gt;MySQLのバージョンは4.1.20。&lt;br/&gt;文字化けする原因は、mysqldumpがデフォルトでは、文字コードをUTF-8で出力するようになっていて、フィールドの型がUTF-8でない場合は、自動でUTF-8に変換するためのようです。&lt;br/&gt;&lt;br/&gt;僕が使っていたDBは文字コードについて特に何も設定していなかったので、デフォルトの文字コードであるlatin1になっていました。&lt;br/&gt;&lt;br/&gt;なので、これもmysqldumpするとlain1 -&gt; UTF-8な変換が自動で行われ文字化けしたということのようです。納得。&lt;br/&gt;&lt;br/&gt;この自動変換を行わないようにすれば解決するはず。ということで調べてみると、--default-character-setというオプションを使うとよいことがわかりました。これを使ってデフォルトの文字コードをDBの文字コードとあわせてやることで、自動変換が行われなくなり、文字化けしないようです。&lt;br/&gt;で、結局以下のコマンドで文字化けせずdumpすることができました。&lt;br/&gt;&lt;br/&gt;&gt;&lt;pre&gt;&lt;br/&gt;mysqldump --default-character-set=latin1 -uroot --all-databses &gt; db.dump&lt;br/&gt;&lt;/pre&gt;&lt;&lt;br/&gt;&lt;br/&gt;これでデータ自体は文字化けしなくなりますが、これをそのまま、UTF-8なDBに取り込むと、取り込んだデータが文字化けしてしました。&lt;br/&gt;ダンプしたデータを見てみると、所々にSET NAMES latin1とかDEFAULT CHARSET=latin1のように「latin1]の文字が。。&lt;br/&gt;これが原因だったようで、ワンライナーでlatin1をutf8に変更してからインポートしたところ、文字化けせずに取り込むことができました。&lt;br/&gt;&lt;br/&gt;&gt;&lt;pre&gt;&lt;br/&gt;perl -pi -e 's/latin1/utf8/' db.dump&lt;br/&gt;&lt;/pre&gt;&lt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1123743929918981950-2116514096895278869?l=blog.hori-uchi.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/RGCrvN8eYyqpxX9YfTD5Li5Ya6M/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/RGCrvN8eYyqpxX9YfTD5Li5Ya6M/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/RGCrvN8eYyqpxX9YfTD5Li5Ya6M/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/RGCrvN8eYyqpxX9YfTD5Li5Ya6M/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Bloghori-uchicom/~4/Ng-_cF5Gtis" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.hori-uchi.com/feeds/2116514096895278869/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://blog.hori-uchi.com/2006/12/mysqldump.html#comment-form" title="1 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1123743929918981950/posts/default/2116514096895278869?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1123743929918981950/posts/default/2116514096895278869?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Bloghori-uchicom/~3/Ng-_cF5Gtis/mysqldump.html" title="mysqldumpで文字化けしないためのメモ" /><author><name>horiuchi</name><uri>http://www.blogger.com/profile/10139525039076752147</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="10581251585663261456" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://blog.hori-uchi.com/2006/12/mysqldump.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0ENRH44eSp7ImA9WxNSEE4.&quot;"><id>tag:blogger.com,1999:blog-1123743929918981950.post-8188956045133953618</id><published>2006-11-25T09:48:00.000+09:00</published><updated>2009-08-23T22:54:55.031+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-23T22:54:55.031+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="REST" /><category scheme="http://www.blogger.com/atom/ns#" term="Sledge" /><title>SledgeでもRESTfulなアプリケーションを書きたい！</title><content type="html">今日参加した&lt;a href="http://www.asahi-net.or.jp/~eb2m-mrt/kaihatsu9.html"&gt;第9回XML開発者の日&lt;/a&gt;の川村さんによる「Ruby on RailsにみるRESTfulアプリケーションの方向性」の話を聞いて、SledgeでもRESTfulなコードを簡単に書きたいと思いたち、ちょっとパッチを書いてみました。&lt;br/&gt;&lt;br/&gt;&gt;&lt;pre class="perl"&gt;&lt;br/&gt;&lt;br/&gt;--- Sledge/Pages/Base.pm.orig   2006-11-25 00:40:59.000000000 +0900&lt;br/&gt;+++ Sledge/Pages/Base.pm        2006-11-25 09:27:50.000000000 +0900&lt;br/&gt;@@ -8,6 +8,9 @@&lt;br/&gt;use strict;&lt;br/&gt;use base qw(Class::Accessor Class::Data::Inheritable);&lt;br/&gt;&lt;br/&gt;+use vars qw($MethodQueryKey);&lt;br/&gt;+$MethodQueryKey  = '_method';&lt;br/&gt;+&lt;br/&gt;__PACKAGE__-&gt;mk_accessors(&lt;br/&gt;'r',                       # Apache::Request or Sledge::Request::CGI&lt;br/&gt;'session',                 # Sledge::Session&lt;br/&gt;@@ -81,10 +84,16 @@&lt;br/&gt;eval {&lt;br/&gt;$self-&gt;init_dispatch($page);&lt;br/&gt;$self-&gt;invoke_hook('BEFORE_DISPATCH') unless $self-&gt;finished;&lt;br/&gt;-       if ($self-&gt;is_post_request &amp;&amp; ! $self-&gt;finished) {&lt;br/&gt;+       if ( $self-&gt;is_put_request &amp;&amp; ! $self-&gt;finished) {&lt;br/&gt;+           my $putmeth = 'put_dispatch_' . $page;&lt;br/&gt;+           $self-&gt;$putmeth() if $self-&gt;can($putmeth);&lt;br/&gt;+       } elsif ( $self-&gt;is_delete_request &amp;&amp; ! $self-&gt;finished) {&lt;br/&gt;+           my $deletemeth = 'delete_dispatch_' . $page;&lt;br/&gt;+           $self-&gt;$deletemeth() if $self-&gt;can($deletemeth);&lt;br/&gt;+       } elsif ($self-&gt;is_post_request &amp;&amp; ! $self-&gt;finished) {&lt;br/&gt;my $postmeth = 'post_dispatch_' . $page;&lt;br/&gt;$self-&gt;$postmeth() if $self-&gt;can($postmeth);&lt;br/&gt;-       }&lt;br/&gt;+    }&lt;br/&gt;unless ($self-&gt;finished) {&lt;br/&gt;my $method = 'dispatch_' . $page;&lt;br/&gt;$self-&gt;$method();&lt;br/&gt;@@ -188,6 +197,16 @@&lt;br/&gt;return $self-&gt;r-&gt;method eq 'POST';&lt;br/&gt;}&lt;br/&gt;&lt;br/&gt;+sub is_put_request {&lt;br/&gt;+    my $self = shift;&lt;br/&gt;+    return ($self-&gt;r-&gt;method eq 'PUT' || ($self-&gt;r-&gt;method eq 'POST' &amp;&amp;  lc($self-&gt;r-&gt;param($MethodQueryKey)) eq 'put'));&lt;br/&gt;+}&lt;br/&gt;+&lt;br/&gt;+sub is_delete_request {&lt;br/&gt;+    my $self = shift;&lt;br/&gt;+    return ($self-&gt;r-&gt;method eq 'DELETE' || ($self-&gt;r-&gt;method eq 'POST' &amp;&amp; lc($self-&gt;r-&gt;param($MethodQueryKey)) eq 'delete'));&lt;br/&gt;+}&lt;br/&gt;+&lt;br/&gt;sub make_content {&lt;br/&gt;my $self = shift;&lt;br/&gt;# template output, then fillin forms&lt;br/&gt;&lt;br/&gt;&lt;/pre&gt;&lt;&lt;br/&gt;&lt;br/&gt;これを使って書いたPagesクラスのサンプルはこんな感じです。&lt;br/&gt;&lt;br/&gt;&gt;&lt;pre class="perl"&gt;&lt;br/&gt;package MyProj::Pages::Items;&lt;br/&gt;use strict;&lt;br/&gt;use base qw(MyPfoj::Pages);&lt;br/&gt;&lt;br/&gt;sub dispatch_index {&lt;br/&gt;my $self = shift;&lt;br/&gt;my $item_id = int $self-&gt;r-&gt;param('id');&lt;br/&gt;if ( $item_id ){&lt;br/&gt;# アイテム単体を返すコードを記述&lt;br/&gt;} else {&lt;br/&gt;# アイテムリストを返すコードを記述&lt;br/&gt;}&lt;br/&gt;}&lt;br/&gt;&lt;br/&gt;sub post_dispatch_index {&lt;br/&gt;my $self = shift;&lt;br/&gt;# アイテムを追加するコードを記述&lt;br/&gt;}&lt;br/&gt;&lt;br/&gt;sub put_dispatch_index {&lt;br/&gt;my $self = shift;&lt;br/&gt;# アイテムを更新するコードを記述&lt;br/&gt;}&lt;br/&gt;&lt;br/&gt;sub delete_dispatch_index {&lt;br/&gt;my $self = shift;&lt;br/&gt;# アイテムを削除するコードを記述&lt;br/&gt;}&lt;br/&gt;&lt;br/&gt;&lt;/pre&gt;&lt;&lt;br/&gt;&lt;br/&gt;MyProj::Pages::Itemsクラスがアイテムをあらわすリソースに対応していて、&lt;br/&gt;各メソッドにあわせて、CRUDの操作を実行するという風に書けてすっきりする気がします。&lt;br/&gt;ブラウザからはPUT,DELETEリクエストはできないので、_method=putまたはdeleteとクエリパラメータを使うことで代用しています。&lt;br/&gt;&lt;br/&gt;こんなのいかがでしょうか？&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1123743929918981950-8188956045133953618?l=blog.hori-uchi.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/nxNRvpLrE-hXNPgUXHWOlJV7Of0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/nxNRvpLrE-hXNPgUXHWOlJV7Of0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/nxNRvpLrE-hXNPgUXHWOlJV7Of0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/nxNRvpLrE-hXNPgUXHWOlJV7Of0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Bloghori-uchicom/~4/vpa6Z23zTX0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.hori-uchi.com/feeds/8188956045133953618/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://blog.hori-uchi.com/2006/11/sledgerestful.html#comment-form" title="2 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1123743929918981950/posts/default/8188956045133953618?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1123743929918981950/posts/default/8188956045133953618?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Bloghori-uchicom/~3/vpa6Z23zTX0/sledgerestful.html" title="SledgeでもRESTfulなアプリケーションを書きたい！" /><author><name>horiuchi</name><uri>http://www.blogger.com/profile/10139525039076752147</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="10581251585663261456" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://blog.hori-uchi.com/2006/11/sledgerestful.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0ENRH44eSp7ImA9WxNSEE4.&quot;"><id>tag:blogger.com,1999:blog-1123743929918981950.post-8388230710529191248</id><published>2006-10-23T05:18:00.000+09:00</published><updated>2009-08-23T22:54:55.031+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-23T22:54:55.031+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="mixi" /><category scheme="http://www.blogger.com/atom/ns#" term="Technology" /><category scheme="http://www.blogger.com/atom/ns#" term="akamai" /><title>Akamaiで認証付きコンテンツを配信する方法</title><content type="html">IPAに脆弱性として提出されていた、ミクシィにアップロードされた画像がURLを直接たたけばログインしていなくても閲覧できる件が技術的には改修せず、ヘルプにその旨を記載することで決着したという話題について、その理由のひとつに画像の配信は一部、CDN（akamai）を使っているため、そこに認証をかけるのが難しいのではというものを見かけました。&lt;br/&gt;&lt;br/&gt;このakamaiなのですが、実は、僕が開発運用している動画共有サイト&lt;a href="http://www.flipclip.net/"&gt;FlipClip&lt;/a&gt;でも、日ごとに増え続けるサーバへの負荷、トラフィックに対応すべく、動画の配信にこれを使えないかと検討してまして、先日akamaiの人にきていただいて話を聞いてみました。&lt;br/&gt;&lt;br/&gt;このとき一番聞きたかったのがまさに今回のミクシィの件で話にでてきた「認証のかかったコンテンツをakamaiで配信できるのか？」という点でした。&lt;br/&gt;というのもFlipClipでは動画・サムネールの配信はすべてmod_perlアプリケーションから動的に行っていて、動画に設定されたプライバシーからユーザのアクセス権を判定し、OKならば動画・サムネールを吐き出すという処理をおこなっているからです。&lt;br/&gt;&lt;br/&gt;この質問に対してのakamaiの方からの回答は、3つの方法があるというものでした。&lt;br/&gt;&lt;br/&gt;+ akamai-FlipClip間でルールを決めて作成したCookieを使ってアクセス権を制御する方法&lt;br/&gt;+ akamai-FlipClpi間でルールを決めて作成したクエリパラメータを使ってアクセス件を制御する方法&lt;br/&gt;+ akamaiはIf-Modifiedヘッダ付きのリクエストを毎回FlipClipに送りつけ、認証はFlipClipに任せる方法&lt;br/&gt;&lt;br/&gt;1のCookieを使う方法と2のクエリパラメータを使う方法は、どちらもあらかじめakamaiとFlipClipの間で認証OKかNGかをakamaiが理解できるクッキー、クエリパラメータ生成ルールを決めておき、それを動画・サムネールのリクエストと一緒に送りつけると、それを元にakamaiが認証を行い、キャッシュがあればakamaiからコンテンツを返すという方法だそうです。&lt;br/&gt;この方法の利点としては、&lt;br/&gt;&lt;br/&gt;- akamaiが認証を行うので、動画のリクエストの際に、FlipClipまでリクエストが飛んでこず、FlipClipのサーバへの負荷はかなり減る&lt;br/&gt;&lt;br/&gt;という点があげられるんですが、欠点として、&lt;br/&gt;&lt;br/&gt;- 認証箇所が2箇所（akamaiでの認証だけでなく、FlipClipでもCookieやクエリパラメータを生成する際に認証が必要）になってしまうため、セキュリティ的にリスクが大きくなってしまう&lt;br/&gt;- akamaiのためにそれ用の実装をしないといけない&lt;br/&gt;- 仮にクエリパラメータがばれたら誰でもアクセスできることになる&lt;br/&gt;- そもそもクエリパラメータをつけるなんてかっこ悪い&lt;br/&gt;&lt;br/&gt;という点があり、ちょっと微妙な感じだなーと感じました。&lt;br/&gt;&lt;br/&gt;3の毎回FlipClip側に認証を求める方法ですが、これは、akamaiは認証は行わず、akamaiに動画・サムネールのリクエストが送られてきたら、そのリクエストにIf-Modified-SinceヘッダをつけてFlipClipのサーバに転送してくれるという方法だそうです。&lt;br/&gt;&lt;br/&gt;これの利点は、&lt;br/&gt;&lt;br/&gt;- アクセス制御はFlipClip側1箇所で行うので、ここだけを考えればいい。&lt;br/&gt;- 同じ動画・サムネールへのリクエストが多いという傾向があれば、キャッシュのヒット率があがり、FlipClipサーバからのトラフィックをぐんと軽減することが期待できる&lt;br/&gt;&lt;br/&gt;欠点としては、&lt;br/&gt;&lt;br/&gt;- FlipClip側がIf-Modified-Sinceヘッダを理解できるようにしないといけない&lt;br/&gt;- 動画・サムネールへのアクセスがほどよく分散されているような傾向の場合は、キャッシュヒット率があまりあがらず、本サーバ側の負荷軽減は小さくなる&lt;br/&gt;- リクエストごとにFlipClip側にリクエストが飛ぶので、クッキーやクエリパラメータを使った方法よりは、サーバの負荷がかかる&lt;br/&gt;&lt;br/&gt;という点があげられますが、&lt;br/&gt;1つ目の欠点は、すでにIf-Modified-Sinceは理解するようになっているので、問題なし。&lt;br/&gt;2つ目の欠点は、FlipClipの動画の配信傾向を見ていると、パレートの法則にほぼ従っていて、1日に配信される動画のうち20％の動画の再生数が全体の再生数の約90％を占めているという状況なので、キャッシュのヒット率はかなり高くなりそうなので、問題なし。&lt;br/&gt;3つ目の欠点はリクエストは毎回FlipClipのサーバまで飛んできますが、上記のとおりキャッシュがうまく働いてくれそうなので、FlipClipサーバはほとんど、302をレスポンスとして返すだけで済むはずで、負荷、トラフィックはかなり減らすことが期待できそうなので、まあ問題なし。&lt;br/&gt;&lt;br/&gt;ということで、この方法はいいかもという感想でした。&lt;br/&gt;&lt;br/&gt;このようにakamai経由でも認証付きコンテンツの配信はできそうなのですが、なぜミクシィがそれをできないのかというと単純にこの修正で影響を受ける箇所が多すぎて、直すに直せないってことなんじゃないかなーとか、静的に返していたコンテンツを動的にアプリケーションから吐き出すようにすると、パフォーマンスがでないと考えているのかなーとか考えちゃいますがほんとのところはどうなんでしょうねぇ。&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;via: &lt;a title="スラッシュドット ジャパン | ミクシィ、画像に認可制御なしの欠陥を改修できず、ヘルプで弁解" href="http://slashdot.jp/security/06/10/17/1958219.shtml"&gt;スラッシュドット ジャパン | ミクシィ、画像に認可制御なしの欠陥を改修できず、ヘルプで弁解&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1123743929918981950-8388230710529191248?l=blog.hori-uchi.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/f615j8zzdsf3LUx8eK1Etykusp0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/f615j8zzdsf3LUx8eK1Etykusp0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/f615j8zzdsf3LUx8eK1Etykusp0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/f615j8zzdsf3LUx8eK1Etykusp0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Bloghori-uchicom/~4/ksHBnRGTwoM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.hori-uchi.com/feeds/8388230710529191248/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://blog.hori-uchi.com/2006/10/akamai.html#comment-form" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1123743929918981950/posts/default/8388230710529191248?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1123743929918981950/posts/default/8388230710529191248?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Bloghori-uchicom/~3/ksHBnRGTwoM/akamai.html" title="Akamaiで認証付きコンテンツを配信する方法" /><author><name>horiuchi</name><uri>http://www.blogger.com/profile/10139525039076752147</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="10581251585663261456" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.hori-uchi.com/2006/10/akamai.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0ENRH44eSp7ImA9WxNSEE4.&quot;"><id>tag:blogger.com,1999:blog-1123743929918981950.post-5694103710362225469</id><published>2006-10-04T19:24:00.000+09:00</published><updated>2009-08-23T22:54:55.031+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-23T22:54:55.031+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="firefox" /><title>Firefoxの「選択した部分のソースを表示」はJavaScriptで動的に生成したHTMLも表示される</title><content type="html">これ知りませんでした。「選択した部分のソースを表示」しても、普通にその部分の生のソースが出てくるだけかと思い込んでました。&lt;br/&gt;&lt;br/&gt;最近はJemplateなんかを使って動的にHTMLを生成するというのをやることが多いんですが、これ、HTMLのメンテがしづらいとデザイナーさんからはすこぶる評判がわるかったんです。&lt;br/&gt;これで少しはメンテが楽になるかなー。&lt;br/&gt;&lt;br/&gt;via: &lt;a title="subtechグループ - マングローブ - JavaScriptなんかでいじられた後の現在のソースを表示" href="http://subtech.g.hatena.ne.jp/h2u/20061002/1159762557"&gt;subtechグループ - マングローブ - JavaScriptなんかでいじられた後の現在のソースを表示&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1123743929918981950-5694103710362225469?l=blog.hori-uchi.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/mp23sI3XANeW-wbFOsClWlVdcks/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/mp23sI3XANeW-wbFOsClWlVdcks/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/mp23sI3XANeW-wbFOsClWlVdcks/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/mp23sI3XANeW-wbFOsClWlVdcks/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Bloghori-uchicom/~4/rTPnTplTypo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.hori-uchi.com/feeds/5694103710362225469/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://blog.hori-uchi.com/2006/10/firefoxjavascripthtml.html#comment-form" title="3 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1123743929918981950/posts/default/5694103710362225469?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1123743929918981950/posts/default/5694103710362225469?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Bloghori-uchicom/~3/rTPnTplTypo/firefoxjavascripthtml.html" title="Firefoxの「選択した部分のソースを表示」はJavaScriptで動的に生成したHTMLも表示される" /><author><name>horiuchi</name><uri>http://www.blogger.com/profile/10139525039076752147</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="10581251585663261456" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">3</thr:total><feedburner:origLink>http://blog.hori-uchi.com/2006/10/firefoxjavascripthtml.html</feedburner:origLink></entry></feed>
