SlideShare uma empresa Scribd logo
1 de 24
Baixar para ler offline
PHP Classes
Desenvolvimento de sites de Web 2.0 em
     PHP para grandes audiências
              Manuel Lemos
              mlemos@acm.org
       http://www.ManuelLemos.net/
             webdevcamp 2007




      São Paulo, 2 de Dezembro de 2007
Origem

    1997 – Participação em listas de discussão
●



    1998 – PHP 3 lançado com suporte a OOP
●



    Componentes prontos resolviam problemas
●

    frequentes de outros usuários
    Divulgação de classes prontas nas listas de
●

    discussão aumentaram muito a procura
    1999 – Lançamento do site PHP Classes →
●
Objetivos

    Meio de distribuição automática de classes
●


    Minimizar esforço dos autores na divulgação
    Aumentar a base de usuários das classes
●


    Alertar usuários por e-mail sobre novas classes e
    suas atualizações
    Estimular a partilha de conhecimento
●



    Contribuição de novas classes e mais conteúdo →
Crescimento interminável

               Web 2.0: Regra do 1%
    Site de conteúdo contribuído pelos usuários
●



    Por cada 100 novos usuários, 1 contribui
●



    Mais contribuições atraem mais usuários
●



    Quanto mais usuários, mais contribuidores →
●
Propaganda viral
         Divulgação que traz mais divulgação
    Troca de anúncios com sites parceiros
●



    Top de autores
●



    Iniciativa amigos do site
●



    Espelhos do site
●



    Lista de grupos regionais de usuários de PHP
●



    Divulgação de novidades através de RSS →
●
As dores do crescimento
    Problemas do crescimento interminável

1. Qualidade das contribuições

2. Custos de operação →
Qualidade das contribuições
           O problema de ter muito do mesmo
    Sistema de votação
●



        Utilidade, consistência, exemplos, documentação,
    –
        tutoriais em vídeo, e testes de unidade
        Top das classes mais votadas
    –

    Prêmio de inovação
●



        Nomeação de classes inovadoras em cada mês
    –

        Prêmios patrocinados para todos nomeados →
    –
Custos de operação
                    Nada é de graça
    Custos de hospedagem
●


        Capacidade de processamento
    –

        Largura de banda
    –

        Espaço em disco
    –

    Custos de pessoal
●


        Atendimento aos usuários
    –

        Desenvolvimento de novas capacidades →
    –
Redução de custos
    Melhor software consome menos recursos
    Cache e mais cache
●


        Turck MMCache para cache de PHP compilado
    –

        Classe File Cache em PHP para cache de conteúdo
    –

        Lighttpd: cache de acessos a conteúdo estático
    –

    Compressão de conteúdo
●


        mod_gzip reduz tamanho de páginas até 5 vezes
    –

        Todos os navegadores modernos suportam
    –

        Páginas carregam mais rapidamente →
    –
Mais redução de custos
         Aceleração com software automático
    Atendimento self-service
●


        Robôs de resposta a e-mail de descadastramento
    –

        Páginas com respostas a perguntas frequentes
    –

    Ferramentas de geração de código
●


        Metastorage gera código de acesso a objetos em
    –
        banco de dados definidos a partir de modelo
        Redução do tempo de escrita, teste e correção →
    –
Cobertura de custos
             Alternativas consideradas
1. Doações

2. Publicidade paga

3. Serviços pagos exclusivos para assinantes →
Doações

    Doação de hospedagem
●


        Troca de hospedagem por publicidade
    –

        Sites espelhos
    –

    Doação de dinheiro
●


        Não é garantido
    –

        Não é recorrente →
    –
Publicidade paga
    Pagamento por: exibição, clique ou tempo
●



    Receita cresce com a audiência
●



    Negociação direta é difícil à distância
●



    Intermediação por agências
●


        Google AdSense, Tribalfusion, Fastclick, etc.
    –

        Facilidade de alcance a grandes anunciantes
    –

        Agências ficam com comissão elevada
    –

        Pagamento por cheque, Paypal ou transferência →
    –
Assinaturas pagas
    Serviços exclusivos assinantes
●


        Navegação do site sem publicidade
    –

        Acesso a fóruns de especialistas para resolver
    –
        problemas difíceis
        Buscas e páginas favoritas personalizadas
    –

        Diretório de profissionais disponíveis para prestar
    –
        consultoria paga
    Adesão de uma pequena parte dos usuários
●



    Pagamento pelo Paypal ou PagSeguro
●



    Receita recorrente →
●
Riscos
      Quem semeia e não segura pode colher
          amargura! (provérbio popular)
       O que pode comprometer o projeto?
    Perda de informação por danos no servidor
●



    Perda de informação por invasão de crackers
●



    Número de acessos excessivos
●



    Ausência de simulação de problemas →
●
Cópias de segurança

    Cópias de segurança diárias dos bancos de
●

    dados e arquivos de conteúdo
        mysqldump + tar
    –

    Replicação das cópias para outros servidores
●



        gnupg ou truecrypt + rsync
    –

        Amazon S3 + Jungle Disk →
    –
Auditoria de segurança

    Auditoria regular com ferramentas dedicadas
●



        nessus: testes de exploração de buracos de
    –
        segurança conhecidos

    Desativação de serviços não usados e
●

    bloqueio das respectivas portas na firewall
    Eliminação de indícios do tipo e versão dos
●

    programas usados →
Vulnerabilidades comuns
                      Como evitar?
    XSS: Cross-site Scripting
●


        Conteúdo não confiável é servido por domínio
    –
        distinto: safe.phpclasses.net
    SQL Injection
●


        Validação com a classe de formulários
    –

        “Escape” de valores com Metabase →
    –

    CSRF: Cross-site Request Forgery
●


        Plug-in “secure submit” da classe de formulários
    –
Limitação de acessos
    Redirecionamento de usuários para espelhos
●



    Verificação CAPTCHA para parar robôs
●



    lighttpd: servidor para conteúdo estático
●



    Limitação dos processos do Apache
●



    mod_throttle: limitação de acessos
●

    simultâneos
    mod_fastcgi: balanceamento de carga usando
●

    mais computadores servidores
    Uso de filas para retardar tarefas pesadas →
●
Curiosidades
    Linhas de código: ~135.000 em PHP (4.6MB)
●


    Cadastros: ~540.000 (~10.300 novos por mês)
●


    Autores: ~1.800 contribuiram ~3.600 componentes
●


    Consumo de banda: ~200GB por mês
●


    Cache de conteúdo: ~184.000 arquivos (1.5GB)
●


    Servidor: dedicado com Pentium 4 HT 3.2GHz 1GB
●


    Sistema operacional: Linux SuSE 9.2
●


    Discos: 18GB SCSI com controlador RAID
●


    Base de dados: MySQL 4 em partição dedicada 2.7GB
●


    Maior tabela: 5.9 milhões de registros
●


    Servidor e-mail: qmail ~2 milhões de e-mails/mês →
●
Futuro
    Mais serviços pagos para assinantes
●



    Reclassificação de classes em sub-categorias
●



    Sincronização de classes a partir de
●

    repositórios CVS ou Subversion
    Canais PEAR
●



    Concurso de novo design para o site
●



    Divisão de lucros com os melhores autores
●



    O que mais os usuários sugerirem →
●
Perguntas?


    Manuel Lemos
●



    mlemos@acm.org
    Repositório PHPClasses
●



    http://www.phpclasses.org/
Conclusão

        Lembrem-se sempre:

Cooperar é melhor que competir

Abracem a comunidade com vontade, que
a comunidade vos abraçará muito mais

        Obrigado pela atenção
Referências
    Classe File Cache                               Amazon S3
●                                               ●

    http://www.phpclasses.org/filecache             http://aws.amazon.com/s3
    Classe Forms generation and validation          Jungle Disk
●                                               ●

    http://www.phpclasses.org/formsgeneration       http://www.jungledisk.com/
    Metabase                                        Gnupg
●                                               ●

    http://www.phpclasses.org/metabase              http://www.gnupg.org/
    Metastorage                                     TrueCrypt
●                                               ●

    http://www.metastorage.net/                     http://www.truecrypt.org/
    Google AdSense                                  Rsync
●                                               ●

    https://www.google.com/adsense/                 http://rsync.samba.org/
    Tribalfusion                                    Nessus
●                                               ●

    http://www.tribalfusion.com/                    http://www.nessus.org/
    Fastclick                                       lighttpd
●                                               ●

    http://www.fastclick.com/                       http://www.lighttpd.net/
    Paypal                                          Turck MMCache
●                                               ●

    https://www.paypal.com/                         http://turck-mmcache.sourceforge.net/index_old.h
    PagSeguro                                       mod_gzip
●                                               ●

    https://pagseguro.uol.com.br/                   http://www.schroepl.net/projekte/mod_gzip/
                                                    FastCGI
                                                ●

                                                    http://www.fastcgi.com/

Mais conteúdo relacionado

Semelhante a PHP Classes: Desenvolvimento e gestão de um repositório de código aberto

Melhorando a performance de aplicações com o uso do MemCache
Melhorando a performance de aplicações com o uso do MemCacheMelhorando a performance de aplicações com o uso do MemCache
Melhorando a performance de aplicações com o uso do MemCacheElton Minetto
 
Desenvolvendo aplicativos web escaláveis
Desenvolvendo aplicativos web escaláveisDesenvolvendo aplicativos web escaláveis
Desenvolvendo aplicativos web escaláveisManuel Lemos
 
Tutorial visão automação de testes e casper js
Tutorial visão automação de testes e casper jsTutorial visão automação de testes e casper js
Tutorial visão automação de testes e casper js4ALL Tests
 
Tutorial - Visão sobre Automação de Testes com CasperJS
Tutorial - Visão sobre Automação de Testes com CasperJSTutorial - Visão sobre Automação de Testes com CasperJS
Tutorial - Visão sobre Automação de Testes com CasperJSFrederico Allan
 
Desenvolvimento Web Avançado usando PHP
Desenvolvimento Web Avançado usando PHPDesenvolvimento Web Avançado usando PHP
Desenvolvimento Web Avançado usando PHPelliando dias
 
CDNs – Introdução
CDNs – IntroduçãoCDNs – Introdução
CDNs – Introduçãoelliando dias
 
WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )
WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )
WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )João Moura
 
Desenvolvimento web ágil com Django
Desenvolvimento web ágil com DjangoDesenvolvimento web ágil com Django
Desenvolvimento web ágil com DjangoIgor Sobreira
 
LabMM3 - Aula teórica 04
LabMM3 - Aula teórica 04LabMM3 - Aula teórica 04
LabMM3 - Aula teórica 04Carlos Santos
 
Introdução ao Windows Azure - Sessão 1 (mais teórica)
Introdução ao Windows Azure - Sessão 1 (mais teórica)Introdução ao Windows Azure - Sessão 1 (mais teórica)
Introdução ao Windows Azure - Sessão 1 (mais teórica)Giovanni Bassi
 
Drupal Performance - Dicas e técnicas para levar seu Drupal às nuvens
Drupal Performance - Dicas e técnicas para levar seu Drupal às nuvensDrupal Performance - Dicas e técnicas para levar seu Drupal às nuvens
Drupal Performance - Dicas e técnicas para levar seu Drupal às nuvensPaulino Michelazzo
 
Darkmira - Performance em aplicações PHP
Darkmira - Performance em aplicações PHPDarkmira - Performance em aplicações PHP
Darkmira - Performance em aplicações PHPCiro Vargas
 
Javascript no SAPO e libsapojs
Javascript no SAPO e libsapojsJavascript no SAPO e libsapojs
Javascript no SAPO e libsapojscodebits
 
Utilizando cache com WordPress: tenha o seu website decolando sem sair do lugar
Utilizando cache com WordPress: tenha o seu website decolando sem sair do lugarUtilizando cache com WordPress: tenha o seu website decolando sem sair do lugar
Utilizando cache com WordPress: tenha o seu website decolando sem sair do lugarmeetupwordpressfln
 
(A04 e A05) LabMM3 - JavaScript
(A04 e A05) LabMM3 - JavaScript(A04 e A05) LabMM3 - JavaScript
(A04 e A05) LabMM3 - JavaScriptCarlos Santos
 
Segurança em Rails
Segurança em RailsSegurança em Rails
Segurança em RailsJuan Maiz
 
SAPO Broker
SAPO BrokerSAPO Broker
SAPO Brokercodebits
 

Semelhante a PHP Classes: Desenvolvimento e gestão de um repositório de código aberto (20)

Melhorando a performance de aplicações com o uso do MemCache
Melhorando a performance de aplicações com o uso do MemCacheMelhorando a performance de aplicações com o uso do MemCache
Melhorando a performance de aplicações com o uso do MemCache
 
Desenvolvendo aplicativos web escaláveis
Desenvolvendo aplicativos web escaláveisDesenvolvendo aplicativos web escaláveis
Desenvolvendo aplicativos web escaláveis
 
Tutorial visão automação de testes e casper js
Tutorial visão automação de testes e casper jsTutorial visão automação de testes e casper js
Tutorial visão automação de testes e casper js
 
Tutorial - Visão sobre Automação de Testes com CasperJS
Tutorial - Visão sobre Automação de Testes com CasperJSTutorial - Visão sobre Automação de Testes com CasperJS
Tutorial - Visão sobre Automação de Testes com CasperJS
 
Vamos conversar sobre cache
Vamos conversar sobre cacheVamos conversar sobre cache
Vamos conversar sobre cache
 
Desenvolvimento Web Avançado usando PHP
Desenvolvimento Web Avançado usando PHPDesenvolvimento Web Avançado usando PHP
Desenvolvimento Web Avançado usando PHP
 
CDNs – Introdução
CDNs – IntroduçãoCDNs – Introdução
CDNs – Introdução
 
WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )
WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )
WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )
 
Desenvolvimento web ágil com Django
Desenvolvimento web ágil com DjangoDesenvolvimento web ágil com Django
Desenvolvimento web ágil com Django
 
LabMM3 - Aula teórica 04
LabMM3 - Aula teórica 04LabMM3 - Aula teórica 04
LabMM3 - Aula teórica 04
 
Introdução ao Windows Azure - Sessão 1 (mais teórica)
Introdução ao Windows Azure - Sessão 1 (mais teórica)Introdução ao Windows Azure - Sessão 1 (mais teórica)
Introdução ao Windows Azure - Sessão 1 (mais teórica)
 
Drupal Performance - Dicas e técnicas para levar seu Drupal às nuvens
Drupal Performance - Dicas e técnicas para levar seu Drupal às nuvensDrupal Performance - Dicas e técnicas para levar seu Drupal às nuvens
Drupal Performance - Dicas e técnicas para levar seu Drupal às nuvens
 
Darkmira - Performance em aplicações PHP
Darkmira - Performance em aplicações PHPDarkmira - Performance em aplicações PHP
Darkmira - Performance em aplicações PHP
 
Javascript no SAPO e libsapojs
Javascript no SAPO e libsapojsJavascript no SAPO e libsapojs
Javascript no SAPO e libsapojs
 
Palestra parse
Palestra parsePalestra parse
Palestra parse
 
Ruby On Rails Regis
Ruby On Rails RegisRuby On Rails Regis
Ruby On Rails Regis
 
Utilizando cache com WordPress: tenha o seu website decolando sem sair do lugar
Utilizando cache com WordPress: tenha o seu website decolando sem sair do lugarUtilizando cache com WordPress: tenha o seu website decolando sem sair do lugar
Utilizando cache com WordPress: tenha o seu website decolando sem sair do lugar
 
(A04 e A05) LabMM3 - JavaScript
(A04 e A05) LabMM3 - JavaScript(A04 e A05) LabMM3 - JavaScript
(A04 e A05) LabMM3 - JavaScript
 
Segurança em Rails
Segurança em RailsSegurança em Rails
Segurança em Rails
 
SAPO Broker
SAPO BrokerSAPO Broker
SAPO Broker
 

PHP Classes: Desenvolvimento e gestão de um repositório de código aberto

  • 1. PHP Classes Desenvolvimento de sites de Web 2.0 em PHP para grandes audiências Manuel Lemos mlemos@acm.org http://www.ManuelLemos.net/ webdevcamp 2007 São Paulo, 2 de Dezembro de 2007
  • 2. Origem 1997 – Participação em listas de discussão ● 1998 – PHP 3 lançado com suporte a OOP ● Componentes prontos resolviam problemas ● frequentes de outros usuários Divulgação de classes prontas nas listas de ● discussão aumentaram muito a procura 1999 – Lançamento do site PHP Classes → ●
  • 3. Objetivos Meio de distribuição automática de classes ● Minimizar esforço dos autores na divulgação Aumentar a base de usuários das classes ● Alertar usuários por e-mail sobre novas classes e suas atualizações Estimular a partilha de conhecimento ● Contribuição de novas classes e mais conteúdo →
  • 4. Crescimento interminável Web 2.0: Regra do 1% Site de conteúdo contribuído pelos usuários ● Por cada 100 novos usuários, 1 contribui ● Mais contribuições atraem mais usuários ● Quanto mais usuários, mais contribuidores → ●
  • 5. Propaganda viral Divulgação que traz mais divulgação Troca de anúncios com sites parceiros ● Top de autores ● Iniciativa amigos do site ● Espelhos do site ● Lista de grupos regionais de usuários de PHP ● Divulgação de novidades através de RSS → ●
  • 6. As dores do crescimento Problemas do crescimento interminável 1. Qualidade das contribuições 2. Custos de operação →
  • 7. Qualidade das contribuições O problema de ter muito do mesmo Sistema de votação ● Utilidade, consistência, exemplos, documentação, – tutoriais em vídeo, e testes de unidade Top das classes mais votadas – Prêmio de inovação ● Nomeação de classes inovadoras em cada mês – Prêmios patrocinados para todos nomeados → –
  • 8. Custos de operação Nada é de graça Custos de hospedagem ● Capacidade de processamento – Largura de banda – Espaço em disco – Custos de pessoal ● Atendimento aos usuários – Desenvolvimento de novas capacidades → –
  • 9. Redução de custos Melhor software consome menos recursos Cache e mais cache ● Turck MMCache para cache de PHP compilado – Classe File Cache em PHP para cache de conteúdo – Lighttpd: cache de acessos a conteúdo estático – Compressão de conteúdo ● mod_gzip reduz tamanho de páginas até 5 vezes – Todos os navegadores modernos suportam – Páginas carregam mais rapidamente → –
  • 10. Mais redução de custos Aceleração com software automático Atendimento self-service ● Robôs de resposta a e-mail de descadastramento – Páginas com respostas a perguntas frequentes – Ferramentas de geração de código ● Metastorage gera código de acesso a objetos em – banco de dados definidos a partir de modelo Redução do tempo de escrita, teste e correção → –
  • 11. Cobertura de custos Alternativas consideradas 1. Doações 2. Publicidade paga 3. Serviços pagos exclusivos para assinantes →
  • 12. Doações Doação de hospedagem ● Troca de hospedagem por publicidade – Sites espelhos – Doação de dinheiro ● Não é garantido – Não é recorrente → –
  • 13. Publicidade paga Pagamento por: exibição, clique ou tempo ● Receita cresce com a audiência ● Negociação direta é difícil à distância ● Intermediação por agências ● Google AdSense, Tribalfusion, Fastclick, etc. – Facilidade de alcance a grandes anunciantes – Agências ficam com comissão elevada – Pagamento por cheque, Paypal ou transferência → –
  • 14. Assinaturas pagas Serviços exclusivos assinantes ● Navegação do site sem publicidade – Acesso a fóruns de especialistas para resolver – problemas difíceis Buscas e páginas favoritas personalizadas – Diretório de profissionais disponíveis para prestar – consultoria paga Adesão de uma pequena parte dos usuários ● Pagamento pelo Paypal ou PagSeguro ● Receita recorrente → ●
  • 15. Riscos Quem semeia e não segura pode colher amargura! (provérbio popular) O que pode comprometer o projeto? Perda de informação por danos no servidor ● Perda de informação por invasão de crackers ● Número de acessos excessivos ● Ausência de simulação de problemas → ●
  • 16. Cópias de segurança Cópias de segurança diárias dos bancos de ● dados e arquivos de conteúdo mysqldump + tar – Replicação das cópias para outros servidores ● gnupg ou truecrypt + rsync – Amazon S3 + Jungle Disk → –
  • 17. Auditoria de segurança Auditoria regular com ferramentas dedicadas ● nessus: testes de exploração de buracos de – segurança conhecidos Desativação de serviços não usados e ● bloqueio das respectivas portas na firewall Eliminação de indícios do tipo e versão dos ● programas usados →
  • 18. Vulnerabilidades comuns Como evitar? XSS: Cross-site Scripting ● Conteúdo não confiável é servido por domínio – distinto: safe.phpclasses.net SQL Injection ● Validação com a classe de formulários – “Escape” de valores com Metabase → – CSRF: Cross-site Request Forgery ● Plug-in “secure submit” da classe de formulários –
  • 19. Limitação de acessos Redirecionamento de usuários para espelhos ● Verificação CAPTCHA para parar robôs ● lighttpd: servidor para conteúdo estático ● Limitação dos processos do Apache ● mod_throttle: limitação de acessos ● simultâneos mod_fastcgi: balanceamento de carga usando ● mais computadores servidores Uso de filas para retardar tarefas pesadas → ●
  • 20. Curiosidades Linhas de código: ~135.000 em PHP (4.6MB) ● Cadastros: ~540.000 (~10.300 novos por mês) ● Autores: ~1.800 contribuiram ~3.600 componentes ● Consumo de banda: ~200GB por mês ● Cache de conteúdo: ~184.000 arquivos (1.5GB) ● Servidor: dedicado com Pentium 4 HT 3.2GHz 1GB ● Sistema operacional: Linux SuSE 9.2 ● Discos: 18GB SCSI com controlador RAID ● Base de dados: MySQL 4 em partição dedicada 2.7GB ● Maior tabela: 5.9 milhões de registros ● Servidor e-mail: qmail ~2 milhões de e-mails/mês → ●
  • 21. Futuro Mais serviços pagos para assinantes ● Reclassificação de classes em sub-categorias ● Sincronização de classes a partir de ● repositórios CVS ou Subversion Canais PEAR ● Concurso de novo design para o site ● Divisão de lucros com os melhores autores ● O que mais os usuários sugerirem → ●
  • 22. Perguntas? Manuel Lemos ● mlemos@acm.org Repositório PHPClasses ● http://www.phpclasses.org/
  • 23. Conclusão Lembrem-se sempre: Cooperar é melhor que competir Abracem a comunidade com vontade, que a comunidade vos abraçará muito mais Obrigado pela atenção
  • 24. Referências Classe File Cache Amazon S3 ● ● http://www.phpclasses.org/filecache http://aws.amazon.com/s3 Classe Forms generation and validation Jungle Disk ● ● http://www.phpclasses.org/formsgeneration http://www.jungledisk.com/ Metabase Gnupg ● ● http://www.phpclasses.org/metabase http://www.gnupg.org/ Metastorage TrueCrypt ● ● http://www.metastorage.net/ http://www.truecrypt.org/ Google AdSense Rsync ● ● https://www.google.com/adsense/ http://rsync.samba.org/ Tribalfusion Nessus ● ● http://www.tribalfusion.com/ http://www.nessus.org/ Fastclick lighttpd ● ● http://www.fastclick.com/ http://www.lighttpd.net/ Paypal Turck MMCache ● ● https://www.paypal.com/ http://turck-mmcache.sourceforge.net/index_old.h PagSeguro mod_gzip ● ● https://pagseguro.uol.com.br/ http://www.schroepl.net/projekte/mod_gzip/ FastCGI ● http://www.fastcgi.com/