Your SlideShare is downloading. ×
0
yusukebe in Yokohama.pm 090909
yusukebe in Yokohama.pm 090909
yusukebe in Yokohama.pm 090909
yusukebe in Yokohama.pm 090909
yusukebe in Yokohama.pm 090909
yusukebe in Yokohama.pm 090909
yusukebe in Yokohama.pm 090909
yusukebe in Yokohama.pm 090909
yusukebe in Yokohama.pm 090909
yusukebe in Yokohama.pm 090909
yusukebe in Yokohama.pm 090909
yusukebe in Yokohama.pm 090909
yusukebe in Yokohama.pm 090909
yusukebe in Yokohama.pm 090909
yusukebe in Yokohama.pm 090909
yusukebe in Yokohama.pm 090909
yusukebe in Yokohama.pm 090909
yusukebe in Yokohama.pm 090909
yusukebe in Yokohama.pm 090909
yusukebe in Yokohama.pm 090909
yusukebe in Yokohama.pm 090909
yusukebe in Yokohama.pm 090909
yusukebe in Yokohama.pm 090909
yusukebe in Yokohama.pm 090909
yusukebe in Yokohama.pm 090909
yusukebe in Yokohama.pm 090909
yusukebe in Yokohama.pm 090909
yusukebe in Yokohama.pm 090909
yusukebe in Yokohama.pm 090909
yusukebe in Yokohama.pm 090909
yusukebe in Yokohama.pm 090909
yusukebe in Yokohama.pm 090909
yusukebe in Yokohama.pm 090909
yusukebe in Yokohama.pm 090909
yusukebe in Yokohama.pm 090909
yusukebe in Yokohama.pm 090909
yusukebe in Yokohama.pm 090909
yusukebe in Yokohama.pm 090909
yusukebe in Yokohama.pm 090909
yusukebe in Yokohama.pm 090909
yusukebe in Yokohama.pm 090909
yusukebe in Yokohama.pm 090909
yusukebe in Yokohama.pm 090909
yusukebe in Yokohama.pm 090909
yusukebe in Yokohama.pm 090909
yusukebe in Yokohama.pm 090909
yusukebe in Yokohama.pm 090909
yusukebe in Yokohama.pm 090909
yusukebe in Yokohama.pm 090909
yusukebe in Yokohama.pm 090909
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

yusukebe in Yokohama.pm 090909

5,738

Published on

0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
5,738
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
0
Comments
0
Likes
4
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. エロサイト管理者の憂鬱Ⅱ - How I build, operate, monetize, and tune up small web applications - yusukebe Yokohama.pm 2009/9/9
  • 2. yusukebe • Yusuke Wada / 和田裕介 • 1981年12月23日生 • 神奈川県鎌倉市鎌倉山 • 株式会社ワディット代表取締役 • 株式会社オモロキCTO • 「yusukebe the Erogeek!」
  • 3. yusukebe • Yusuke Wada / 和田裕介 • 1981年12月23日生 • 神奈川県鎌倉市鎌倉山 • 株式会社ワディット代表取締役 • 株式会社オモロキCTO • 「yusukebe the Erogeek!」
  • 4. “Kailas” • Yet Another BPM Framework • 9/10 13:45 - • ワディットコーポレートトラック • Masanori will talk!
  • 5. What I’ve done. • About 10 web applications • About 10 ero sites
  • 6. Total PV 600,000 pv over / 1day
  • 7. How I BUILD OPERATE MONETIZE TUNE UP these small web applications.
  • 8. Why I make small web applications? • 楽しい • セルフ・ブランディング • 勉強 • お金 • 全て一人でできる! – 企画・開発・運用・マーケティング・プロモーション
  • 9. 1. BUILD
  • 10. Off course using Perl !
  • 11. Perl • use Catalyst (5.7系) • use Mouse (not Moose) • use DBIx::Class
  • 12. Catalyst application ディレクトリ構成 yusuke@dev:~/work/myapp/MyApp$ tree . . |-- db | |-- myapp.sql | `-- update_schema.pl |-- cli |-- myapp_web.yml |-- lib |-- root | |-- favicon.ico | `-- static | `-- images |-- script `-- t |-- 01app.t |-- 02pod.t |-- 03podcoverage.t `-- 11_api.t
  • 13. Catalyst application ディレクトリ構成 yusuke@dev:~/work/myapp/MyApp$ tree lib/ lib/ `-- MyApp |-- API | `-- Role.pm |-- API.pm |-- CLI |-- Schema |-- Schema.pm |-- Web | |-- Controller | | `-- Root.pm | |-- Model | | `-- API.pm | `-- View | `-- TTSite.pm `-- Web.pm
  • 14. use Mouse in the service layer package Twib::API; use Mouse; with 'Twib::API::Role'; no Mouse; sub get_popular_links { my ( $self, $args, $page, $rows ) = @_; $args ||= {}; $page ||= 1; $rows ||= 20; return $self->schema->resultset('Link') ->search( $args, { order_by => 'tweet_count DESC', page => $page, rows => $rows } ); } 1; __END__
  • 15. ./db/update_schema.pl #!/usr/bin/perl use strict; use warnings; use FindBin; use DBIx::Class::Schema::Loader qw/make_schema_at/; my $schema_class = "Twib::Schema"; my $connect_info = [ 'dbi:mysql:twib:localhost', 'root', '' ]; make_schema_at( $schema_class, { components => [qw/UTF8Columns InflateColumn::DateTime/], dump_directory => File::Spec->catfile( $FindBin::Bin, '..', 'lib' ), debug => 1, }, $connect_info, ); __END__
  • 16. たくさん作って自分なりのスタイルを作る こと 素早い開発が可能に!
  • 17. フロントエンドは ライブラリを有効活用しよう!
  • 18. JavaScript • jQuery • jQuery UI • Shadowbox
  • 19. CSS • jQuery UI • YUI
  • 20. できないHTMLデザインは 他の人の力で解決しよう
  • 21. HTML Themes • WooThemes – http://www.woothemes.com/ • Open Source Web Design – http://www.oswd.org
  • 22. 2. OPERATE
  • 23. Hardware • ec2: 5 instances ( 6 cores ) • 自宅: 1 front / 1 fs / 1 db / 2 app servers Software • debian etch • apache2.2 + mod_perl • MySQL • gearman, Q4M
  • 24. 自宅サーバールーム(納戸) App / sc1435 Bokete App DB Front App / Q6600 Router FS iSCSI 2 UPS
  • 25. 自宅 ec2 Front Apache 2.2 Amazon S3 App Apache 2.2 with mod_perl DB FS MySQL 5 NFS
  • 26. from httpd.conf on Front <VirtualHost *:80> ServerName twib.jp DocumentRoot /home/yusuke/www/pulpsite/Twib/root AllowEncodedSlashes On RewriteEngine On RewriteRule ^/(static/|favicon.ico) - [L] RewriteRule ^/(.*)$ http://192.168.1.22:8102/$1 [P,L] ExpiresActive On <FilesMatch ".(jpg|gif|png|ico|css|js)$"> ExpiresDefault "access plus 365 days" </FilesMatch> </VirtualHost>
  • 27. from httpd.conf on App KeepAlive Off LoadModule perl_module /usr/lib/apache2/modules/mod_perl.so LoadModule rpaf_module /usr/lib/apache2/modules/mod_rpaf-2.0.so RPAFenable On RPAFsethostname Off RPAFproxy_ips 192.168.1.11 127.0.0.1 Listen 8102 PidFile /var/run/apache2/twib.pid StartServers 1 MinSpareServers 4 MaxSpareServers 12 MaxClients 24 MaxRequestsPerChild 10000 PerlSwitches -I/home/yusuke/www/pulpsite/Twib/lib SetHandler perl-script PerlHandler Twib::Web
  • 28. Using S3 as Front-end Server
  • 29. 3. MONITIZE
  • 30. 収入源は基本的にアフィリエイト – DTI, sbs, DMM, Amazon, Rakuten, etc. – AdSense • 気楽でいい • 成果報酬 • 継続報酬
  • 31. 単純だけど基本原理 運用コスト 収入 = アクセス
  • 32. 運用コストを下げれば儲かる = サーバーの台数を減すんだ = 1 台でまかなえる処理数を増やす = ソフトウェアチューニング!
  • 33. 4. TUNE UP
  • 34. Basic tuning • ゆーすけべー日記「YourAVHost その後」 – YourAVHostのページ内に含まれる画像を全て mod_perl の apache でサーブしていた – そこで画像を全て static なコンテンツを扱う apache2 でサーブさせようとしたが、キャッ シュの設定、具体的には mod_expire の設定を何もしていなかった – mod_perl で処理する必要の無い静的コンテンツは mod_perl で扱うな – 静的コンテンツには mod_expire で Expires ヘッダーをつけてキャッシング させよ
  • 35. use Worker; # on Twib Stream Fecher Reader Q4M use AnyEvent::Twitter::Stream; Web App DB
  • 36. use HTTP::Engine; yusuke@dev:~/work/XXX/trunk$ tree lib/ lib/ |-- XXX | |-- API.pm | |-- C | | |-- Root.pm | | `-- Video.pm | |-- ModPerl.pm | |-- Router.pm | |-- Schema | | |-- CaptchaImage.pm | | |-- Download.pm | | `-- Video.pm | `-- Schema.pm |-- SimpleApp | |-- Controller.pm | |-- ModPerl.pm | |-- Server.pm | `-- View.pm `-- WWW `-- YourFileHost `-- Break.pm
  • 37. それPla それPlack でやりなよ Plack HACKS
  • 38. “Noe” based on Plack
  • 39. Other tips • use Cache::FileCache; # on ec2 • 意図的なdbの非正規化 • mod_perl の Cow なメモリ共有を増やす
  • 40. More…
  • 41. そこで (内緒だよ♡)
  • 42. おかげで
  • 43. ルータ交換しました^ ^ ;
  • 44. 今後 • 継続するサービスを – コンテンツ – 運用 • 更なる省力化 – Front-end レイヤーでの File Cache
  • 45. Wrap up • Building a small web application is fun. • アプリケーションの最適化は奥が深い • けれども個人で様々な工夫ができる! – 開発 – 運用 – マネタイズ – チューニング
  • 46. Make your own web applications ! END

×