INTRODUÇÃO AO DESENVOLVIMENTO WEB - 2Maurício Linhares – [email protected]
QUEM SOU EU?
Desenvolvedor na OfficeDrop.com;
Instrutor da LinuxFi;
Consultor em metodologias ágeis;
JUG Leader do PBJUG;
VENDENDO O SEU COLEGA - DINÂMICA
Juntem-se em pares;
Aprenda sobre o seu par (10 minutos);
Forme uma estratégia para apresentá-lo em uma entrevista de emprego: Apresente-o; Determine suas capacidades; Demonstre porque ele é uma boa contratação;
OS PROTOCOLOS DA INTERNET
IP
TCP
UDP
DNS
POP/SMTP/IMAP
HTTP
IP - INTERNET PROTOCOL - REDE
Protocolo baseado em datagramas;
Entrega não garantida (best effort delivery);
Pacotes podem chegar em ordem incorreta;
Não é necessário haver conexão entre a origem e o destino;
TCP – TRANSMISSION CONTROL PROTOCOL - TRANSPORTE
Baseado em conexão;
Entrega garantida de dados;
Ordenação dos dados entregues;
Controle de fluxo;
Controle de congestionamento;
UDP – USER DATAGRAM PROTOCOL - TRANSPORTE
Sem conexão;
Pacotes podem chegar na ordem incorreta;
Pacotes podem não chegar do outro lado;
O controle deve ser feito pela aplicação;
DNS – DOMAIN NAME SYSTEM - APLICAÇÃO
Transforma nomes (hosts) em endereços IPs (e vice-versa);
Simplifica a lembrança de endereços em redes (como a internet);
Pode ser usado como uma forma de balancear a carga entre vários servidores;
Servidores DNS raízes são a fonte oficial dos hosts, sem eles a internet pára;
DNS no provedor
de internet
Cliente quer acessar
josé.com
Servidor de DNS
de josé.com
Servidor de DNS *.com
Qual o ip de www.josé.com?
Qual o IP do DNS de josé.com?
1.1.1.5
Qual o IP de www.jose.com?
201.1.10.24
POP/SMTP/IMAP
Protocolos de troca de emails;
Ainda o serviço mais utilizado da internet;
Possível fonte de dados para aplicações web;
Provavelmente o meio de comunicação mais eficiente da atualidade;
HTTP – HYPER TEXT TRANSFER PROTOCOL
Protocolo base para transmissão de dados na internet;
Tudo é transferido em forma de texto (pouco eficiente para dados binários);
Tudo é transferido em forma de documentos ou recursos;
É a forma mais simples de transferir dados pela internet;
FERAMENTAS DENTRO DO FIREFOX
WebDeveloper;
Yslow;
Firebug;
PageSpeed;
TECNOLOGIAS QUENTES NO DESENVOLVIMENTO WEB
Java?
ASP.NET?
PHP?
Django (Python)?
Ruby on Rails (Ruby)?
CARACTERÍSTICAS IMPORTANTES
Minimalismo;
Pouca burocracia;
Resultados rápidos;
Turnaround rápido;
Integração com tecnologias RIA;
O QUE ESTÁ EM QUEDA
Configurações extensas;
Início lento ou com vários artefatos antes do início do código;
Poucas opções de componentes/plugins de terceiros;
Código fechado;
UM BLOG UTILIZANDO RUBY ON RAILSCuidado pra não se maravilhar demais
DISPOSITIVOS MÓVEIS?
Especialização errada?
AMBIENTES
Android;
iOS;
Widows Mobile 7;
Blackberry;
Alguma coisa da Nokia;
USOS?
Aplicações que sincronizam dados entre celulares e apps web;
Aplicações feitas especialmente para navegadores de dispositivos móveis;
Aplicações para dispositivos móveis que são escritas utilizando tecnologias da web (JavaScript, HTML5, CSS);
TWITTER FOR THE IPHONE
TECNOLOGIAS RIA – RICH INTERNET APPLICATIONS
Volta dos fat clients;
Aplicações web que emulam aplicações desktop;
É possível gravar dados do lado do cliente;
Runtimes normalmente se atualizam automaticamente nos navegadores;
GROOVESHARK - FLEX
PROBLEMAS?
Versões de runtimes diferentes == problemas diferentes pra debugar;
Ocupam um pouco mais de memória e processador nas máquinas clientes;
Nem sempre estão instalados e atualizados nas máquinas clientes;
Novas linguagens, IDEs e ferramentas pra integrar ao processo;
HTML 5 – RIA SEM OS PLUGINS
Suporte nativo a áudio e vídeo (royalties?)
Engines melhores para JavaScript V8 – Chrome Spidermonkey – Firefox IE9
CSS 3;
Suporte nativo a SVG para desenhos vetoriais no browser;
PROBLEMAS?
Quando vai ficar pronto?
O IE vai implementar tudo certinho?
Quando todos os outros IEs vão morrer?
E os royalties do H.256?
Quando tudo vai funcionar igual em todos os browsers? (Youtube ainda quebra no Chrome)
TENDÊNCIAS E LINGUAGENS DE PROGRAMAÇÃO
Programação funcional;
Programação concorrente;
Linguagens híbridas;
Profissionais poliglotas;
Projetos heterogêneos;
CONCORRÊNCIA E O FUTURO
O clock dos processadores não consegue mais evoluir na mesma velocidade;
Máquinas com múltiplos cores já fazem parte do dia a dia do usuário final (chips com 6 cores para computadores comuns saem esse ano pela Intel);
Aplicações não concorrentes não vão conseguir fazer uso disso e vão continuar eternamente lentas;
PROBLEMAS DE CONCORRÊNCIA?
Linguagens OO não são boas para programas concorrentes porque costumam direcionar as pessoas a utilizar memórias compartilhadas;
Em linguagens puramente funcionais, não existe memória compartilhada;
Linguagens que juntam ambos paradigmas são as mais cotadas para o futuro próximo: Scala; Closure;
QUANDO TUDO O QUE VOCÊ TEM É UM MARTELO, TODOS OS PROBLEMAS VÃO PARECER PREGOSProfissionais poliglotas e projetos heterogêneos
INFRAESTRUTURA
Bancos de dados?
Servidores web?
Hosdedagem?
Sistemas operacionais?
Ambientes de execução?
BANCOS DE DADOS
Bancos relacionais começando a dar sinais de velhice;
Movimento NoSQL crescendo e aparecendo em grandes empresas;
Várias opções de bancos de dados não-relacionais para resolver problemas do mundo da internet;
PROBLEMAS?
Milhões de usuários produzindo bilhões de dados;
Os mesmos usuários estão: Buscando; Alterando; Reajustando; E produzindo;
...ainda mais informação;
BANCOS DE DADOS RELACIONAIS NÃO SÃO ESCALÁVEIS
Repositório central de infomações;
Modelos arcaicos de replicação;
Modelos arcaicos de conexão e extração de dados;
Pouco flexíveis quanto a alteração da estrutura das informações (criar uma nova coluna naquela tabela com milhões de linhas? FUUUUUUU!);
BANCOS DE DADOS DO MOVIMENTO NOSQL
Nascidos na era da internet com um problema definido para resolver;
Schema-less ou bem mais flexíveis quanto a alterações nos modelos;
Replicação é funcionalidade padrão;
Múltiplos servidores, sharding e particionamento/balanceamento são necessidades básicas;
OPÇÕES?
Cassandra Facebook Twitter
Amazon SimpleDB Precisa dizer?
MongoDB The New York Times Justin.tv
CouchDB
SERVIDORES WEB
Apache 2 Panela velha é quem faz comida boa né...
Lighttpd Leve, seguro e bem comum na web
Nginx Direto do gelo da Rússia para o mundo
Proxies Pound Varnish HAProxy
CADÊ OS OUTROS?
Tomcat?
JBoss?
IIS?
Jetty?
HOSPEDAGEM
Compartilhada (piedade senhor, piedade)
VPS - Virtual Private Servers
Cloud real Amazon Elastic Compute Cloud
Cloud VPS Rackspace
COMPARTILHADA
O ambiente já está pronto;
Você compartilha tudo com várias outras pessoas;
Segurança? Acredite em Papai Noel também;
Se você precisa de alguma coisa que foge do padrão...
VPS – VIRTUAL PRIVATE SERVER
Você escolhe o que vai ser instalado;
Você configura o ambiente;
Você cria contas e instala o que é necessário;
Você faz tudo, mas o ambiente não é controlado externamente;
Limites em consumo de memória, transferência e uso de processador;
CLOUD REAL - 1
O mundo é efêmero, você configura uma imagem inicial do servidor e sobe ele para executar um trabalho;
A instância não tem armazenamento estático, o que estiver gravado nela se perde se ela for “desligada” ou sair do ar;
É necessário “plugar” serviços de armazenamento as instâncias para manter dados entre a execução delas;
CLOUD REAL - 2
Perfeito para serviços “fire and forget”: Cálculos matemáticos longos; Processamento de algoritmos complexos;
Quaisquer serviços que vão demorar um tempo razoável mas costumam ter “prazo” para terminar e que dependam de muito poder computacional para serem executados;
Hospedagem em um serviço desses não é para os fracos de coração;
CLOUD VPS
É um serviço de cloud que funciona como VPS;
Você contrata uma instância em uma VPS e pode aumentar a instância ou crias novas conforme a sua necessidade;
Normalmente disponibilizam APIs para acesso e criação de “fazendas de servidores” quando é necessário;
Mais fácil de trabalhar quando o interesse é hospedagem;
SISTEMAS OPERACIONAIS
Windows;
Linux: RedHat OpenSUSE Madriva Ubuntu
Unix-based Solaris HP-UX
AMBIENTES DE EXECUÇÃO
CLR – Máquina Virtual do .Net
Mono – Máquina Virtual do .Net multiplataforma
Java Virtual Machine – Máquina Virtual Java
CLR – COMMON LANGUAGE RUNTIME
Ambiente de execução Microsoft para o ambiente .Net;
Disponível apenas no Windows;
Integração forte com APIs disponíveis do Windows e forma preferida para desenvolvimento de aplicações nessa plataforma;
PROJETO MONO - .NET MULTIPLATAFORMA
Leva o runtime do .Net para outras plataformas que não Windows;
Costuma estar atrasado quando comparado com o CLR da Microsoft;
Não implementa alguns pedaços do .Net Framework por questões jurídicas da Microsoft;
Nem sempre apresenta o mesmo comportamento do CLR no Windows;
JVM – JAVA VIRTUAL MACHINE
Ambiente de execução comumente relacionado a linguagem de programação Java;
Já tem um conjunto longo de linguagens executáveis: Ruby; PHP; Scala; Closure; Python (Jython);
TENDÊNCIAS EM NEGÓCIOS
Aplicações sociais;
Aplicações dentro de redes sociais;
Jogos em navegadores;
SAAS – Software as a Service;
O MUNDO SOCIAL AINDA NÃO MORREU
Aplicações sociais continuam surgindo, conseguindo público e ganhando dinheiro: http://foursquare.com/ http://justin.tv/ http://twitter.com/ http://shellfari.com/
Novas aplicações focam em nichos específicos;
Redes sociais “genéricas” não vão mais chamar a atenção;
deve fazer U$ 238.65 milhões de lucro em 2010
APLICAÇÕES DENTRO DE REDES SOCIAIS
Orkut BuddyPoke; Colheita Feliz; MiniFazenda; JogaCraque;
Facebook: Mafia Wars; FarmVille;
JOGOS EM NAVEGADORES
Travian;
La Brute;
BiteFight;
Continua eternamente...
SOFTWARE AS A SERVICE - 1
Modelo de negócio para começar a produzir e vender software;
Uso do software fica sempre atrelado ao pagamento de uma assinatura mensal ou taxa de uso;
O fluxo de caixa se mantém constante enquanto os clientes estão usando/pagando;
Economia de escala barateia os preços de assinatura;
SOFTWARE AS A SERVICE - 2
Aplicações com pouca customização, normalmente são produtos de prateleira que são vendidos de forma diferente;
Normalmente na forma de aplicações web (mais difícil de piratear e mais fácil de implantar atualizações);
Normalmente voltados a pequenas e médias empresas;
EXERCÍCIO – 30 MINUTOS
Juntar-se em grupos;
Pensar em um produto SAAS;
Definir: Público; Funcionalidades principais; Preços; Como atingir os clientes;
Apresentar o produto;