http://commetter.net/ �֤���ä����פǤ���
����Υ����Ȥ˸�����Twitter�ǤĤ֤䤤�ơ�ɾȽ�Ȥ����ۤȤ������礦�����Ǥ���
���������֥å��ޡ����ߤ����ʤ��Ǥ���
�������Ϥ��Ĥ��̤�github�Ǹ�����
http://github.com/hirafoo/commetter/tree/master
����HTTP::Engine�Ȥ�Data::Model�Ȥ�¾�������Τ�ʤ�ʪ��Ȥäƺ�äƤߤ��Τ����ѤǤ������Ǥ⤽��ʬ�ȤƤ��ٶ��ˤʤä��ΤǤ��Ĥ��̤����Ǥ�񤤤Ƥߤޤ���
���줸����⥴����
HTTP::Engine
yappo���󤬺�äƤ�ץ������ȡ�waf�ߤ����ʤ��ʤ�Ǥ�����catalyst��rails�ߤ����˿����Ѱդ���Ƥ�櫓�ǤϤʤ��ơ����������äƴ����Τ�Ρ�sinatra�ߤ����ʤ��Ǥ���
�Ȥꤢ������ư������ץȡ�
script/server.pl
HTTP::Engine�ʰʲ�HE�ˤε�ư�ˤϿ����������ͤ�����HE�Υ��󥹥��󥹺�ä�run��������ʤ�Ǥ������٥��ñ¤¤ï¿½ï¿½ï¿½Î¤ï¿½Æ¬ï¿½ï¿½ï¿½ï¿½ï¿½Î¤Ç´Ø¿ï¿½ï¿½ï¿½ï¿½ï¿½
�Ȥꤢ���������������IP�񤯤Τ����ݤʤΤ� http://d.hatena.ne.jp/naoya/20080110/1199944996 ����ˡ��Ȥä�IP�������Ƥޤ���
���ȡ�HE����Ū����ƥ�Ĥ򰷤ä��ꡢ��ư���ɤ߹��ߤ������ꡢ����2�Ĥϳ�ȯ�Ķ��Ǥ����������ꡢ���å���������ʤɤ��Ƥޤ���
���å����Ϥɤ��˻��Ĥ�Ǻ����ΤǤ��������å����ϥե�����˻�������/etc/fstab �˰ʲ����ɵ�����ram�ǥ�������������������˥ե�������֤��Ƥޤ���
tmpfs /tmp/ram/commetter tmpfs defaults,size=64m 0 0
����Ķ������ɤ������Ǥ��礦�͡�
�����Ƥ���ä�memcached�Ȥ�������٤ƥѥե����ޥ󥹤Ȥ��ɤ��ʤ�Ǥ��礦����äȤ⡢DB/APP/CACHE���������Ƥ��̥����Фʾ��ʤɤϻȤ��ʤ���ˡ�Ǥ�����
�ͤ�����1��Υ����ФǤޤ��ʤäƤޤ�����ĥ�ä��ͤ�T41������٥�5��ư���Ƥ�ʤ����äƥ����ФǤ���
����MVCŪ�����֡�������򤷤Ƥߤޤ�������HE��catalyst�ߤ���������ξ��ˤ���pm���ɤ���ꤷ�ʤ��Τǡ���ʬ���ɤޤ���ɬ�פ�����ޤ���
����⼫ư����
lib/Commetter/AppLoader.pm
������ꤷ��Module::Pluggable::Fast���ɤޤ���use���Ƥ�����Ǥ�����ʸ�����򤱤Ƥ�����ͳ�ϸ�ҡ�
������ɤ߹��ߤ⼫ʬ�Ǥ��ޤ�����ʬ�Ǻ�ä�Config::Divide��ȤäƤߤޤ�����
�����catalyst�ߤ����ˡ��١�����������ɲä�������ɤ���Τǡ���äƤ�������ɲä�����Ǿ�ñ¤¤ï¿½ï¿½Þ¤ï¿½ï¿½ï¿½
���̤������١����˺ܤ���DB�ξ���ʤɤγ�ȯ�Ķ������ִĶ��ǰۤʤ�������ɲä�����˺ܤ����ꤷ�ޤ���
����ϡ���ȯ�Ķ���development�����ִĶ���production��̾�Ť��ޤ�������ͳ���ͤ�rails�ߤ�����Ǥ���
�ʤ����ͤ�rails�ϥޥ����졼����󤯤餤�����Ȥ��ޤ���
lib/Commetter/ConfigLoader.pm
config/app/base �ʲ��˥١���������ե���������֤��� config/app/[development|production] �˴Ķ��̤Υե�������֤��Ƥޤ���
Data::Visitor�Dz������Ƥ�Τϡ�����ե�������ˡ�__path_to(hoge)__�פäƽ񤫤줿�ͤ����ä��顢�����ե�ѥ����֤������Ƥޤ���
�����Catalyst::Plugin::ConfigLoader�����ĵ�ǽ�ǡ��������ä��Τǥѥ���ޤ�����
���ץ�����־�꤬/home�ʲ���������/var�ʲ������������ѥ���٥��ñ¤¤ï¿½ï¿½ë¤³ï¿½È¤Ê¤ï¿½ï¿½Õ¥ï¿½Ñ¥ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Ç¤ï¿½ï¿½Þ¤ï¿½ï¿½ï¿½
HE��URI�ǥ����ѥå��⤷�ޤ���sinatra�Ϥ��Ƥ���ޤ���
�����HTTPx::Dispatcher��Ȥ��ޤ�����
package Commetter::Web::Dispatcher; use Commetter::Utils; use HTTPx::Dispatcher; connect 'site/' => { controller => 'Site', action => 'index' }; connect 'site/:action/:id' => { controller => 'Site', }; connect 'site/:action' => { controller => 'Site', }; connect ':action' => { controller => 'Root', }; connect '' => { controller => 'Root', action => 'index' }; 1;
rails��router.rb�ߤ����˽񤱤ޤ���
���졢���Τ褦�˽ñ¤¤ï¿½ï¿½ï¿½ï¿½ï¿½Ç¤ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ñ¤¯¤ï¿½Æ°ï¿½ï¿½ï¿½Þ¤ï¿½ï¿½ï¿½
connect '' => { controller => 'Root', action => 'index' }; connect ':action' => { controller => 'Root', }; connect 'site/' => { controller => 'Site', action => 'index' }; connect 'site/:action' => { controller => 'Site', }; connect 'site/:action/:id' => { controller => 'Site', };
�ꥯ�����ȥϥ�ɥ����ޤ�������⼫ʬ�Ǻ��櫓�Ǥ��������������ʤ褦�˺��ޤ���
�㤨�С���rails/catalyst�Ǥ�get/post��Ʊ���᥽�åɤ˹Ԥ��Τ����פȤ�����sledge�Ǥϥ᥽�å�̾��dispatch_�ä��դ���Τ����ݡ�post�θ��get�ѤΥ᥽�åɤ��¹Ԥ����Τ����פȤ�
������������⡢��ʬ�ǥ롼�����Τǹ����ʤ褦�˽���ޤ���
����ϥ�����Ĺ���ΤDz���Τߡ�
����Ū�� /class/method �Υꥯ�����Ȥˤ� class���饹��method ��Ƥӡ�get�ξ���method��post�ξ���post_method��¹Ԥ�����post_method�θ��method��¹Ԥ��ʤ��褦�ˤ��ޤ�����
������ʸ�ˤ����ʬ����Ť餤��
catalyst����äơ�class���饹��auto�᥽�åɤ���äƤ���С�method�¹�����auto�᥽�åɤ�¹Ԥ��ޤ���template��"class/method".tt ��Ȥ��ޤ���
�����ӥ塼��Template�ȤäƤޤ���
���Ȥ�HE�����äƤ����ѥ�᡼���ȡ�HTTPx::Dispatcher�����äƤ����ѥ�᡼����ޡ������Ƥޤ���
�ޤ�����method�ϥϥå����ե���󥹤��֤��褦�ˤ���redirect����������Ф����ͤ˥�����쥯�Ȥ���template����������С������ͤ�ƥ�ץ졼�Ȥ˻Ȥ��ޤ���
����ȥ�����˥����å���ͤ�����ڤϤ��������ڤ��ȿ���������ʤ������ˤҤͤ��٤��٤��ʤΤǡ������å��ϴ��ܥ�ǥ���ͤù��ߡ�����ȥ����������URI�ǥ����ѥå���Ȳ����Ƥޤ���
��Ĥ��������å���ͤ������᥽�åɤ�Í��ޤ�����ҡ�
�����դ�Data::Model�β��⡣
�����yappo���󤬺�äƤ��Τǡ�OR�ޥåѤߤ����ʤ�ΤǤ���KVS��ռ����ƺ���Ƥ��ꡢRDBMS��R�ε�ǽ�ϸ��ʳ��Ǥ���ޤ���
Data::Model�ʰʲ�DM�ˤβ���Ϥޤ� http://github.com/tokuhirom/data-model-tutorial/tree/master ��
����������column_sugar��Ȥ��Τ������餷���Ǥ�������������ˤ��Ƥߤޤ�����
sub id { column id => int => { auto_increment => 1, require => 1, unsigned => 1, }; key 'id'; }
����ʴؿ���������äơ�
install_model guest => schema { id; string 'name'; string 'screen_name'; foreign_key 'twitter'; # not foreign key, twitter user id string 'icon'; string 'access_token'; string 'access_token_secret'; common_columns; index 'name'; schema_options create_sql_attributes => { mysql => 'TYPE=InnoDB', }; };
����ʴ����ǥơ��֥����������ʴ����������������ä��Τȡ�column_sugar��Ȥä��Ȥ����㤨��sugar��"common.name"�ʤɤˤ����顢���Τޤ��"common_name"�ʤɤȤ���̾���Ǻ����Τ���򤹤���ˡ��ʬ����ʤ��ä��Τǡ������ܤ˥�������pod�ɤ�Ф���ʬ���ꤽ���ʤ�ΤǤ���
���ȡ��쥳���ɤκ���������������ư�����줿���ä��ΤǤ������Ƥߤޤ�����
# auto insert created_at / updated_at sub update { my ($self, $obj) = @_; $obj->updated_at(now_c->()); $self->next::method($obj); } my $auto_created_at = sub { my $self = shift; $_[2]->{created_at} = now_c->(); $self->_insert_or_replace(0, @_); }; no warnings 'redefine'; *Data::Model::Driver::DBI::set = $auto_created_at;now_c�ϸ��߻���򥳡��ɥ�ե���󥹤��֤��ޤ���Utils��������Ƥޤ���
�����������ä����Ȥ����ȡ� http://blog.livedoor.jp/dankogai/archives/50708234.html ���ɤ�Ǥ���������
¿ʬ$tz�ϰ��٤�������Ƥʤ��Ϥ���
�ǡ����Υơ��֥������Ȥä�DB���������櫓�Ǥ�����
�ǡ����١����ϼ�ư�Ǻ�äơ����Ȥ� script/handle_table.pl ��Ȥ��ޤ���
���ץ����� [-create|-delete|-reset] ���ꡢ���줾��ơ��֥�κ���������������˺�����Ԥ��ޤ�����ά���� [-c|-d|-r] �Ǥ⤤���ޤ���
�����ϥǡ����١����κ���������ޤǤ�ꤿ���ä���Ǥ������ǡ����١�����¸�ߤ��ʤ��Ȥ���DBI�ǥϥ�ɥ������ˡ��ʬ����ʤ��ä��Τ���ǰ���ޤ�����
rails�Υޥ����졼�����Ϥɤ���äƤ��Ǥ��硣¿ʬ activerecord/lib/active_record/connection_adapters ��������ɤ��ʬ����Ϥ���
script/create_dummy.pl �Ϥ���̾�ΤȤ�����ߡ��ǡ�����������ޤ��������������Ϥ�äƤޤ���
�ӥ塼�ǤϤ�����������äƤޤ��󡣥�åѡ����餤�Ǥ��礦����
rails�ߤ��ͤ�rails��link_to���Ȥ������ä��Τǡ�Template::Plugin::LinkTo��Ȥä�Ʊ̾�Υޥ�����äƤޤ���
�ͤ�html/css�ʤɡ�������ӥ塼����ǽ�Ϥϲ���Ū�ǡ�����Ū��html/css�����������٤Ǥ���
�ƥ�ץ졼�Ȥϳ�������ե꡼�ʤΤ�õ���Ƥ��ޤ�����������Ϥ�٤����Ȥ����ϼ�ʬ�Ǻ��ʤ���Фʤ餺����ϫ���ޤ�����
�ץ���������٤������˹Կ��Ͼ��ʤ���Ǥ�������äѤ��̤�����ƤǤ��͡�
Twitter�ȤΥǡ���Ϣ�Ȥˤ�Net::Twitter��ȤäƤޤ���ǧ�ڤˤ�OAuth��
�ͤ�������OAuth�κǤ��ɤ��Ȥ����ϡ��ͤ�DB�˥桼���Υѥ���ɤ�����ʤ��ƺѤळ�ȤǤ���
����ʽ��פʥǡ���������������ޤ���OAuth��Ȥ��С��ѥ���ɤ�������Ȥ�桼����Twitter�ؤΥݥ��Ȥ��ͤΥ����Ȥ��̤��ƹԤ碌��줿�ꤷ�ޤ���
����ǧ�ڤκݡ����å�������ߤκ�Ȥ򤹤�Τǡ�������������ȥ�����˥����å���񤤤Ƥޤ���
��ǥ�˻��äƤ����������ޤ�����������ޤ�򤷤��ʤ����������פ��դ��ʤ��ä��Τ��פ����ʤ���
�ͤ�web���ץ����ݤϡ����ޤǤ��äȥե���Ȥ�apache/�Хå���modperl�Ȥ����������ä���Ǥ���������lighttpd��ȤäƤߤޤ�����
����������ͳ�ϡ��Ȥä�����̵���ä��Τǻ�����ä���modperl���ڤ��餷�����顢�Ȥ�����Ρ�
�����������ͳ�ϡ����ץ��modperl��ư�����ʤ��ä��Ȥ�����Ρ�������
���Τˤϡ�ư���������ɡ��ꥯ�����Ȥ�����뤿�Ӥ�Commetter->setup���ƤФ�Ƥ��ޤ��ޤ���������ʤ��cgi��
����ե������ http://perl-users.jp/modules/http_engine.html �Ȥۤ�Ʊ���Ǥ���
�㤦�Τϡ���ư���˴Ķ��ѿ����ɤߡ�production�Ѥ�������ɤߤ˹Ԥ��Ȥ������餤�Ǥ���
����listen�ݡ��Ȥޤǻ����Ƥޤ���������wan¦�ˤ϶����Ƥʤ��Τǡ��֥Хå��Υץ�����������ˤ�ǤäƤ��פȤ����̤��ޤ���
���䡢����ˤ�����̤˿���ä������ǻ��Ǥ��ޤ������Ǥ������ץ���������Ŭ�ڤ��ͤ�ʬ����ʤ��ä��Τǡ��Ȥꤢ�����Ǿ�������Ȥ��10�Ĥǡ�
���ơ���������ˤʤäƤʤ����⤷�ޤ��������դǡ�
¾�ˤⲿ���������ٹ����Ƥޤ���������Ū�˴�ȴ�ʤ��ȤϤ��Ƥޤ��󡣤Ȥ���������ޤ���
���ۤȤ��Ƥϡ�web���ץ��äƤ�Ȥ������waf��äƤ봶���Ǥ�����
���Ϥ�ϡ����줳������ʬ���餺��HE��DM��ɤ���äƻȤ��Τ����äѤ�Ǥ������Ǥ⡢��äѤ꼫ʬ��Ĵ�٤ʤ��饳���ɽ񤤤ƿ������μ���Ȥ��դ���Τϳڤ����ä��Ǥ���
�ͤϻȤ�¦�˵�뤰�餤�����Ǥ��ޤ��󤬡�����ʤ�κ�ä��㤦�ͤϳ������Ǥ��͡�
�ۤ�Ȥϥ�Х����б���ͤ��Ƥ��Ǥ���������������ͽ���������Ķ���Ƥ�Τǡ����ä��󤯤��äƻ����Ƥߤޤ�����
HE��DM�Dz������ͽ��ǤϤ��ޤ������������ޤǺ�ꤳ��ȤϹͤ��Ƥޤ���Ǥ��������ٺ��Ϥ᤿�顢����⤳���ĤäƤʴ����ǿ����Ĥ�夬�äƤ��ޤä���
3����ꥢ�б��Υ�Х��륵���Ȥ���ǽ�ϤϤ���ޤ�����������ͤ��켰��docomo�������äƤʤ�����iphone�ϰ��ä����Ȥ�̵�������ͤΥ��������������⤬���2000�ߤ��礤�ʻ��Ǥ���
DB�߷פǴ��������������Ȥ����ͥ��Ϥޤ����������Ǥ������Τ����ñ¤¤Þ¤ï¿½ï¿½ï¿½
����⥢�ɥХ������줿���οͤο��˴��ա��������٤ۤ���ٶ��ˤʤ�ޤ���
����ǤϤ�����ͤǤ�����
�㤤�Ƽդ�ޤ�dis��줿���Τǡ�������Ҥǻ����Ƥߤ���ˤ��ޤ���