yusukebe in Yokohama.pm 090909
Upcoming SlideShare
Loading in...5
×
 

yusukebe in Yokohama.pm 090909

on

  • 4,978 views

 

Statistics

Views

Total Views
4,978
Views on SlideShare
3,094
Embed Views
1,884

Actions

Likes
4
Downloads
0
Comments
0

12 Embeds 1,884

http://yusukebe.com 1820
http://hiroki.jp 28
http://kamawada.com 12
http://www.iweb34.com 7
http://yusukebe.typepad.jp 6
http://66.249.89.132 2
http://www.slideshare.net 2
http://webcache.googleusercontent.com 2
http://test.hiroki.jp 2
http://74.125.155.132 1
http://www.hanrss.com 1
http://j2k.naver.com 1
More...

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

yusukebe in Yokohama.pm 090909 yusukebe in Yokohama.pm 090909 Presentation Transcript

  • エロサイト管理者の憂鬱Ⅱ - How I build, operate, monetize, and tune up small web applications - yusukebe Yokohama.pm 2009/9/9
  • yusukebe • Yusuke Wada / 和田裕介 • 1981年12月23日生 • 神奈川県鎌倉市鎌倉山 • 株式会社ワディット代表取締役 • 株式会社オモロキCTO • 「yusukebe the Erogeek!」
  • yusukebe • Yusuke Wada / 和田裕介 • 1981年12月23日生 • 神奈川県鎌倉市鎌倉山 • 株式会社ワディット代表取締役 • 株式会社オモロキCTO • 「yusukebe the Erogeek!」
  • “Kailas” • Yet Another BPM Framework • 9/10 13:45 - • ワディットコーポレートトラック • Masanori will talk!
  • What I’ve done. • About 10 web applications • About 10 ero sites
  • Total PV 600,000 pv over / 1day
  • How I BUILD OPERATE MONETIZE TUNE UP these small web applications.
  • Why I make small web applications? • 楽しい • セルフ・ブランディング • 勉強 • お金 • 全て一人でできる! – 企画・開発・運用・マーケティング・プロモーション
  • 1. BUILD
  • Off course using Perl !
  • Perl • use Catalyst (5.7系) • use Mouse (not Moose) • use DBIx::Class
  • 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
  • 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
  • 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__
  • ./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__
  • たくさん作って自分なりのスタイルを作る こと 素早い開発が可能に!
  • フロントエンドは ライブラリを有効活用しよう!
  • JavaScript • jQuery • jQuery UI • Shadowbox
  • CSS • jQuery UI • YUI
  • できないHTMLデザインは 他の人の力で解決しよう
  • HTML Themes • WooThemes – http://www.woothemes.com/ • Open Source Web Design – http://www.oswd.org
  • 2. OPERATE
  • 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
  • 自宅サーバールーム(納戸) App / sc1435 Bokete App DB Front App / Q6600 Router FS iSCSI 2 UPS
  • 自宅 ec2 Front Apache 2.2 Amazon S3 App Apache 2.2 with mod_perl DB FS MySQL 5 NFS
  • 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>
  • 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
  • Using S3 as Front-end Server
  • 3. MONITIZE
  • 収入源は基本的にアフィリエイト – DTI, sbs, DMM, Amazon, Rakuten, etc. – AdSense • 気楽でいい • 成果報酬 • 継続報酬
  • 単純だけど基本原理 運用コスト 収入 = アクセス
  • 運用コストを下げれば儲かる = サーバーの台数を減すんだ = 1 台でまかなえる処理数を増やす = ソフトウェアチューニング!
  • 4. TUNE UP
  • Basic tuning • ゆーすけべー日記「YourAVHost その後」 – YourAVHostのページ内に含まれる画像を全て mod_perl の apache でサーブしていた – そこで画像を全て static なコンテンツを扱う apache2 でサーブさせようとしたが、キャッ シュの設定、具体的には mod_expire の設定を何もしていなかった – mod_perl で処理する必要の無い静的コンテンツは mod_perl で扱うな – 静的コンテンツには mod_expire で Expires ヘッダーをつけてキャッシング させよ
  • use Worker; # on Twib Stream Fecher Reader Q4M use AnyEvent::Twitter::Stream; Web App DB
  • 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
  • それPla それPlack でやりなよ Plack HACKS
  • “Noe” based on Plack
  • Other tips • use Cache::FileCache; # on ec2 • 意図的なdbの非正規化 • mod_perl の Cow なメモリ共有を増やす
  • More…
  • そこで (内緒だよ♡)
  • おかげで
  • ルータ交換しました^ ^ ;
  • 今後 • 継続するサービスを – コンテンツ – 運用 • 更なる省力化 – Front-end レイヤーでの File Cache
  • Wrap up • Building a small web application is fun. • アプリケーションの最適化は奥が深い • けれども個人で様々な工夫ができる! – 開発 – 運用 – マネタイズ – チューニング
  • Make your own web applications ! END