Novo endereço de FEED
28 novembro, 2007
Caros,
mudamos nosso blog de servidor, e apesar do endereço ser o mesmo (http://log4dev.com), o endereço do feed mudou:
Atualize seu leitor de feeds e continue recebendo nossos artigos e notícias.
[]s
Regexp nossa de cada dia!
19 novembro, 2007
Um professor da Unicamp com quem fiz 3 cursos sempre dizia que cada desenvolvedor deve possuir a sua caixinha de maldades. E por maldades, entenda ferramentas aplicáveis no dia a dia. Eu tenho algumas que considero indispensáveis para qualquer desenvolvedor. Expressão regular é uma delas. Aprender a sintaxe e usar corretamente regexp podeser complicado no início, mas o esforço vale a pena.
Descobri um site bem legal para testar suas habilidades nesta área, o RegexPal. A interface é das mais simples possíveis: escreva a sua expressão regular na caixa de texto superior, e o texto na caixa inferior. O site usa a mágica do Javascript para analisar e exibir em tempo real quais pedaços do texto são capturados pela expressão.
E ainda a este respeito…
Passagem de parâmetros elegante em Javascript
13 novembro, 2007
Suponha a seguinte definição de função em Javascript:
function foo(p1, p2,){
...
}
As seguinte chamadas são válidas: foo(), foo(1), foo(1, 2) e foo(1, 2, 3). No primeiro caso, a função foo será chamada e as variáveis terão todas valor null. No segundo caso, p1 terá valor 1 e p2, null. No segundo caso, p1 e p2 terão valor 1 e 2 respectivamente. No terceiro também, e o valor 3 poderá ser acessado pela variável local arguments (leia o meu post sobre argumentos variáveis em Javascript para entender esta funcionalidade).
Ou seja: uma declaração de função em javascript é extremamente flexível. Uma função sempre pode receber um número variável de parâmetros. A definição de parâmetros formais da função apenas define um nome a priori para estes valores.
Este flexibilidade toda seria ótima se Javascript, assim como Python, permitisse a identificação dos parâmetros na chamada da função. Por exemplo, se eu quisesse chamar foo apenas com o valor da variável p2, eu poderia chamar foo(p2=2). Infelizmente isto não funciona: Javascript vai preenchendo as variáveis na ordem em que elas aparecem na definição . Portanto se eu quisesse apenas atribuir um valor a p2, teria que chamar foo(null, 2). Além disso, a linguagem não permite definir valores defaut para os parâmetros.
Uma forma elegante de contornar esta limitação da linguagem, utilizando um recurso extremamente útil implementado nativamente, e de quebra permitir que as variáveis sejam identificadas na chamada ( o que facilita muito a leitura e manutenção do código, quando chamamos funções que aceitam muitos parâmetros) é criar funções que recebam sempre apenas um argumento: um dicionário.
Eis uma nova implementação de foo que recebe os mesmo 3 parâmetros, utilizando um dicionário, e que de quebra define valores default para cada um deles caso o usuário não defina:
function foo(params){
var p1 = params.p1 || 1;
var p2 = params.p2 || 2;
var p3 = params.p3 || "string"
}
Neste caso, caso eu queira chamar foo apenas com os valores de p2 e p3, eu executo foo({p2:2, p3: 3}). Simples assim.
A construção var p1 = params.p1 || 1 utiliza propriedades das expressões booleana para determinar o valor. Em javascript, uma função OR retorna o valor do primeiro elemento que for avaliado como verdadeiro, ou o valor do último elemento avaliado caso todos sejam falsos. Os valores null, 0, false, undefined e “” (string vazia) retornam falso. Caso o parâmetro não seja definido pelo usuário na chamada da função, params.<nome do atributo> retorna null, e portanto o segundo valor da expressão booleana é atribuido à variável.
Quer aprender mais dicas avançadas de Javascript? Funções com argumentos variáveis em Javascript, Captura de teclas em Javascript – Parte 1, Captura de teclas em Javascript – Parte 2 e Concatenação eficiente de Strings em Javascript e AJAX em 20 minutos.
Android Developer Challenge
12 novembro, 2007
Se uma empresa produz sistemas operacionais e deseja que a sua plataforma domine o mercado, ela tem duas opções:
- Colocar o seu CEO num palco de uma conferência, e pedir que ele fique gritando “developers, developers, developers” até perder a voz.
- Prover um ambiente de incentivo econômico para que desenvolvedores utilizem a sua plataforma, no lugar de outras alternativas.
Imagino que o pessoal da Google tenha respeito por suas cordas vocais, pois eles optaram pela segunda opção. Foi anunciado o Android Developer Challenge. A “competição” prevê prêmios para pessoas que desenvolvam novos aplicativos para a plataforma Android, totalizando até US$10 milhões.
Enquanto não há nenhum handset fabricado e pronto para o mercado, os prêmios serão pagos para as melhores propostas e idéias mais promissoras que possam fazer uso da tecnologia oferecida pelo Android. Até o começo de março de 2008, serão aceitas propostas de aplicativos. As 50 melhores propostas receberão um prêmio de US$ 25 mil. Depois disso, quando os celulares começarem a entrar no mercado e os aplicativos já puderem ser testados em campo, serão premiados os 20 melhores (entre os 50 qualificados), com prêmios de US$ 100 mil e US$ 275 mil.
A iniciativa é um reflexo dos tempos. Numa época em que aparelhos celulares são oferecidos de graça por operadoras de telefonia e que esses aparelhos são capazes de rodar sistemas operacionais livres, gratuitos e de qualidade, é difícil conseguir penetração em um mercado maduro. A alternativa, então, passa a ser fomentar desenvolvedores e criar um ecossistema de inovação na sua plataforma.
Alguém aí quer participar? Entre em contato.
Cursos Livres no MIT
12 novembro, 2007
Em 2001 o MIT anunciou a criação do OCW (MIT OpenCourseWAre). Esta é uma iniciativa que procura utilizar a internet para avançar o conhecimento e educar estudantes das mais diferentes áreas em todo o mundo – seguindo a missão da instituição. Através de seu site, o OCW publica gratuitamente materiais dos cursos utilizados no MIT, incluindo notas de aulas, conjuntos de problemas, vídeos e demonstrações.
O primeiro piloto, com 50 cursos surgiu em 2002. Em 2003 o projeto foi oficialmente lançado, contando com cerca de 500 cursos. De acordo com as informações do site, em 2007 praticamente todos os cursos do MIT foram publicados. É uma excelente fonte para aqueles que têm interesse de aprender algo novo, aprofundar seus conhecimentos e manter-se atualizado. Vale lembrar que de acordo com o ranking de universidades citado pelo Raphael, a instituição é considerada como sendo a décima melhor universidade do mundo.
Esta iniciativa inspirou diversas outras universidades do mundo, que então criaram o OpenCourseWare Consortium, que agrega desde renomadas instituições dos Estados Unidos, Europa e Japão, até instituições de países como Vietnã e Colômbia (não há nenhuma universidade brasileira no consórcio).
Cabe notar que a disponibilização do material não garante certificação de nenhuma espécie, e tampouco corresponde fielmente a todo o material dos cursos. De qualquer forma, é uma excelente fonte por aqueles ávidos por conhecimento. Eu mesmo já comecei a consultar o material de três cursos bastante interessantes: Introdução à probabilidade e estatística, Algoritmos para Biologia Computacional e Análise Econômica para Decisões de Negócios. Mas se você preferir, pode fazer um curso sobre Imperialismo Europeu nos séculos XIX e XX, Alemão (língua) ou Biomedicina Aeroespacial e Engenharia de Suporte à Vida. São várias as possibilidades.
USP e Unicamp entram na lista das 200 melhores Universidades do mundo.
10 novembro, 2007
Nóis é pobre, mais nóis é bom de pesquisa, mané!
Um relatório publicado pelo The Times Higher Education Supplement mostra o resultado de uma pesquisa feita entre os acadêmicos, empregadores e estudantes para avaliar a qualidade das universidades. Esse ano, percebe-se o notável crescimento das universidades da Inglaterra e uma agradável surpresa para os nativos da Banânia: a USP e a Unicamp aparecem listadas.
Reportagem sobre o assunto, e a lista de todas as 200 melhores universidades que eu puxei do site do THES.
Aviso aos empreendedores da Terra Brasilis
9 novembro, 2007
Um pouco em cima da hora, o Log4Dev anuncia que amanhã, dia 10 de novembro de 2008, ocorrerá em São Paulo o primeiro 1o StartupCamp Brazil Web. O objetivo do evento é fomentar o empreendorismo brasileiro, promovendo o encontro de VCs, angels, empreendedores, donos de startups, blogueiros e pessoas ligadas à web brasileira. De manhã, haverão palestras e a tarde, um encontro aberto para discutir o empreendedorismo no Brasil. Mais informações sobre o projeto StartupCamp Brazil podem ser encontradas no site deles.
Log4Dev no Webinsider
6 novembro, 2007
Atenção leitores deste blog. O Raphael está virando POP!
O artigo PC 2.0 acabou de ser publicado no Webinsider.
http://webinsider.uol.com.br/index.php/2007/11/06/android-e-o-pc-20-a-versao-mobile-do-ibm-pc/
Parabéns.
PC 2.0
6 novembro, 2007
Enquanto boa parte da molecada por aí que ainda não aprendeu a pensar por conta própria ficou triste com o anúncio da Google que encerrava as especulações sobre o gPhone, ficando sem imagens que pudessem copiar para os seus (spam-)blogs, e por tabela sem assunto para entupir os agregadores de conteúdo com notícias idênticas, o “velhaco” aqui parou para pensar no impacto e no potencial futuro da Open Handset Alliance. Eu vi, e gostei. Um plano como esse é uma lição clara de quem aprendeu com o Passado para pensar o Futuro.
Se você não entendeu o que estou falando, fique tranquilo. Vamos por partes.
Computação Pessoal
Computeiros, tautologicamente, têm suas vidas focadas no computador. Ficamos com o tocador de música ligado o dia inteiro, com nossas coleções imensas de canções nem sempre obtidas legalmente. Resgatamos contato com nosso amigo que se mudou para o Curdistão para popularizar o futebol de botão. Mantemos nossas memórias, vídeos, fotos, cartinhas de amor que queríamos enviar para a nossa musa mas ficamos com vergonha de mandar, já que você, no fundo, no fundo, sabia que não era muito romântico declarar algo como “você é tão bela quanto a Lara Croft no Tomb Raider 2″. O computador é o meio, começo e o fim de boa parte de nosso cotidiano.
Para nós e para os profissionais que já estão fazendo parte diretamente ou indiretamente da Economia Digital, a linha que separa o computador-pessoal do computador-ferramenta-de-trabalho é tênue, cada vez mais imperceptível. Entretanto, há muitos outros que olham o computador como uma besta indomável, complexa, para não dizer supérflua.
Isso não quer dizer, entretanto, que eles estão livres da evolução tecnológica. Mesmo aqueles que se recusam a sentar na frente de um monitor estão fazendo parte da revolução que começou nos anos 80, da Computação Pessoal.
Vou tentar simplificar: Computação Pessoal é tudo que envolve o uso de um computador, cuja finalidade principal não é o trabalho. Aquela viagem chata que você levava o Game Boy? Computação Pessoal. O seu primeiro Discman? Computação Pessoal. O seu decoder de tv a cabo? Câmera Digital de 32 Gigapixels? Tudo é Computação Pessoal.
O ponto mais interessante. Mesmo os tecnófobos, estes que não sabem nem mexer em um mouse, provavelmente têm o seu “Computador Pessoal”. À diferença de nós, estes fazem uso da tecnologia através de outro dispositivo. Para eles, o PC é outro e cabe no bolso: é o telefone celular.
Acho que o que eu escrevi acima não é nenhuma novidade. A velocidade do ciclo de desenvolvimento dos aparelhos celulares, as toneladas de funcionalidade presentes nos aparelhos mais básicos, as inúmeras apresentações de executivos falando sobre a questão da convergência digital, etc, etc. Você não precisa de mais um blogger chato querendo dizer “Eureka! Celulares vão se tornar tão poderosos quanto computadores”, não é mesmo?
Padronização do Desktop: um pouco de História.
Computadores, hoje, são quase oni-presentes e aparentemente são bastante diferentes. Mas, por baixo de marca, gabinete, ou até mesmo sistema operacional, todos acabam sendo muito parecidos. Todo mundo (e por todo mundo, entenda “mais de 99,99% dos consumidores normais”) tem um computador que usa um chip com arquitetura x86 (ou alguma extensão dela, como a x86-64). Placas auxiliares são instaladas em slots padronizados (AGP, PCI ou PCI-x). Periféricos se comunicam através de USB. Comunicação sem fio é predominantemente feita por Wi-Fi (802.11*).
Tudo isso não acontece por acaso. São padrões determinados pela indústria, com o propósito primário de facilitar o desenvolvimento e a fabricação de componentes para um sistema complexo. Assim, subsistemas desse sistema complexo podem ser trocados com razoavel segurança. Assim como eu sei que eu posso colocar qualquer motor elétrico de 110V na tomada aqui de casa, eu sei que eu posso comprar qualquer Pen Drive USB para o meu computador, e sei que vai funcionar.
É claro que essa padronização não surgiu de uma hora para outra. Os primeiros mini-computadores e computadores que pretendiam ser de uso doméstico tinham arquiteturas completamente diferentes entre si. Um computador como o Altair rodava apenas programas feitos para ele, e era arquiteturalmente diferente de um TRS-80. Um usuário entusiasta de um computador aprendia a programar para uma máquina e assim ficava, pois não havia necessidade de portar seu aplicativo para outra arquitetura.
Isso é muito comum, se analisarmos o progresso e a evolução de inventos humanos. Traçando um paralelo com a teoria de evolução de Darwin, uma nova tecnologia pressiona o surgimento de novos produtos (assim como uma mudança no ambiente causa um aumento no número de mutações genéticas em espécies já existentes), e desses novos produtos sobrevivem os que se mostram mais aptos ao ambiente (o produto que satisfaz melhor o público é o que acaba sendo mais copiado e prospera), determinando qual será a tendência de design de produtos. Veja como os aparelhos de TV e os primeiros aviões eram diferentes entre si, e vejam o quanto eles são similares hoje em dia. Dá pra sacar que, até com memes, existe o que é chamado de “survival of the fittest”?
No fim de 1970, as apostas de todos provavelmente seriam na Apple, com o Apple I e com o Apple II. Seus computadores poderosos e fáceis de usar começaram a ganhar momento. Empresas passaram a desenvolver aplicativos para ele. O sucesso do Visicalc serviu como um efeito bola de neve. Mais pessoas queriam o Apple por conta do Visicalc, que aumentava o interesse dos desenvolvedores pela plataforma Apple, que fazia da Apple a arquitetura com uma coleção de software mais interessante. Darwin trabalhava, enquanto a concorrência padecia. Por mais simples que fossem as arquiteturas da época, era trabalhoso portar software. Muitos programas ainda eram desenvolvidos em linguagem de máquina. Compiladores BASIC eram caros e para profissionais. A Apple parecia a grande vitoriosa.
Parecia. A Apple passou a ter concorrência da IBM e do padrão PC. Aproveitando a explosão do mercado de computadores para uso doméstico, a IBM deu a sua tacada: um padrão livre, que pudesse ser seguido por qualquer que quisesse montar um computador compatível. Dessa forma, uma empresa que quisesse entrar no mercado de desktops poderia fornecer apenas um componente do produto, ao invés de ter que desenvolver todo um computador (e ainda ter que tentar competir com a Apple). Isso também serviu para incentivar a concorrência, o que levou a uma redução acelerada dos custos.
Vá lá: tudo que a IBM acertou com o padrão-PC, ela errou ao ter dado uma licença de fornecimento exclusiva do Sistema Operacional para uma empresa pequena, chamada Micro-soft-com-hífen. Mas a estratégia do padrão aberto funcionou. A Apple, que manteve-se verticalizada (oferecendo hardware e software) acabou perdendo terreno para os milhares de concorrentes horizontais que trabalhavam no padrão IBM-PC.
Fale com o Miguel, se quiser mais detalhes da história da Apple. Mas vou resumir: eles teimaram um bom tempo em manter-se verticais, e só recentemente abriram mão disso, e foram obrigados a admitir que a estratégia vertical não deu certo. O hardware de um Macintosh é, hoje, virtualmente idêntico ao de um computador da HP ou da Dell. Para desgosto de muitos fanáticos, hoje é um Intel que roda em Macs. Até mesmo software para o mercado de DTP tem menos features em suas versões para Mac OS, comparada com a versão para Windows. Muito do charme some quando se tira o teclado com backlight.
Pois bem. Não é de hoje que o mercado de desktop é chato, sem grandes surpresas. Como eu já disse antes, POSIX já ganhou, e boa parte do pacote de soluções que gerou bilhões para a Microsoft-sem-o-hífen já é “good enough” há uns bons 6 anos.
Se é que existe alguma coisa que ainda é sexy para desenvolvedores, isso está em aplicativos que fazem uso da Internet e dos avanços de telecomunicações.
O Mercado de Mobile
Entra o mercado de mobile. Acho que foi em 1999 que meu pai chegou em casa com um StarTac, da Motorola. O que tinha de especial? Pouca coisa, além de um desenho moderno e o fato de ser um dos primeiros modelos no Brasil que foram trazidos para as linhas digitais. De qualquer forma, podemos ver o quanto mudou em apenas 8 anos. Celulares hoje em dia mandam mensagens de texto, mensagens multímidia, possuem câmera integrada, mp3, possuem jogos, conectam à internet, fazem cafezinho e até pagam suas contas – inclusive aquela conta absurdamente cara da sua última fatura de celular.
Tudo muito legal, tudo muito divertido. Mas ainda falta alguma coisa. Por exemplo: e se eu quiser trocar a minha câmera digital? Ou como faço para adicionar um HD ao meu smartphone? E se eu quiser usar outra bateria, ou adicionar uma placa que me permita usar dois chips GSM no mesmo aparelho?
Mudanças em hardware, nem pensar. Software deveria ser um pouco mais flexível, mas ainda está longe do satisfatório. Diferentes sistemas operacionais, diferentes versões, diversos padrões de rede (GSM, CDMA, iDen, entre outros) e – mais importante – diferentes plataformas de desenvolvimento de software fazem com que planejar um produto para o mercado mobile seja tão fácil quanto atirar em um grilo usando uma escopeta numa sala pequena, depois de tomar meia garrafa de tequila. Chamar de “mercado dinâmico” é um eufemismo. É um mercado caótico.
Quer adicionar uma outra variável na brincadeira? A penetração de aparelhos celulares é muito maior que a de computadores domésticos. No Brasil, já passamos há tempo a marca de 60 milhões de aparelhos ativos. Isso passa (em muito) o número de computadores. Na Itália, mais de 90% da população possui telefone celular. Os números de usuários de Internet não chegam à metade. O celular é, sem dúvida, o Verdadeiro Computador Pessoal.
E aí apareceu a oportunidade de ouro para a Apple e o iPhone. Do mesmo jeito que fizeram com o Apple I e com o Apple II, a estratégia para o iPhone é reduzir o número de subsistemas (poucos aplicativos de terceiros, sistema operacional próprio, software próprio) e lutar para manter controle sobre cada uma das partes. Quem melhor que Steve Jobs, com seu senso de design, para delimitar o melhor ponto para atender todos os requisitos conflitantes que existe num mercado caótico como o mobile?
Enquanto todos batem cabeça e não se entendem, a Apple usa a sua vantagem como fabricante de hardware e espera neutralizar as operadoras de telefonia futuramente, apostando no crescimento do Wi-Fi e pensando que o seu iPhone poderá ser um telefone (VoIP) e, principalmente, como um dispositivo para a distribuição de conteúdo digital. Só depois, e quando for do seu interesse, ela precisaria abrir o iPhone para terceiros. Ela nem mesmo precisaria ter um “Visicalc”, pois ela já se encarregou de fazer isso antes: chama-se iTunes Music Store.
Do jeito que se vê hoje, a Apple tem tudo em mãos para se tornar a força dominante do mercado de mobile computing. A vingança de Steve Jobs, tardia, seria em sua dominação do Verdadeiro Computador Pessoal.
Android: estamos de novo em 1981
Not so fast, Steve. Você acreditou mesmo que todo mundo ia ficar assistindo você ficar com todo o bolo? As operadoras de telefonia ainda querem briga. E aqueles que desenvolvem software também precisam ter um ambiente onde eles sabem que seu sistema rode sem que eles tenham que pedir permissão para ninguém.
Qual a melhor maneira de garantir isso? Ora, lançando um padrão de referência para quem quiser desenvolver dispositivos móveis! Foi exatamente isso que a Google fez essa semana. Ao invés de lançar um aparelho de celular, foi anunciado o Android. O Android é uma plataforma aberta de desenvolvimento, com especificação de sistema operacional, middleware e aplicativos finais. Quem quiser desenvolver um aplicativo para um celular que seja Android, basta trabalhar de acordo com a spec.
Os fanáticos por Java vão apontar para o JavaME, como forma de ter uma plataforma de desenvolvimento livre e definida. Eu vou dizer “Nice try, but no.” Do mesmo jeito que acontece no desktop, aplicativos JavaME acabam limitados pela qualidade da implementação das bibliotecas que funcionam “embaixo”. Por exemplo: assim como um toolkit como o SWT tem que ser um mínimo denominador comum entre os ambientes gráficos subjacentes (GTK, MFC, Cocoa), uma implementação de JavaME é, no máximo, tão poderosa quanto o pior sistema usado atualmente nos aparelhos celulares. O padrão do Android é a partir do zero, não fica obrigado então a fazer nenhum tipo de compromisso por conta de limitação tecnológica.
Em suma: Android é a versão mobile do padrão IBM-PC. Não importa se você for um desenvolvedor de aplicativo ou de componentes para celular, você poderá ter um pouco mais de segurança na hora de começar o seu investimento. Isso levará a muita inovação no mercado, pois teremos mais empresas tentando arriscar algo novo, sem medo de ver seu investimento sendo jogado fora por alguma reorientação tecnológica. Isso levará a redução ainda maior de custos. De comoditização total de hardware. Até mesmo podemos pensar em maior integração entre serviços que hoje só são pensados para web. Um celular Android poderá, efetivamente, tornar-se o PC 2.0.
Apple vs o resto. Dessa vez, até pode ser diferente.
Cabe a Apple decidir se vai querer que o iPhone se torne um sucesso como o Mac ou como o iPod. Usuários (e lucros) ela terá em qualquer hipótese. Entretanto, a insistência da Apple em manter todo o controle da arquitetura se mostrou falha na guerra dos desktops. Até hoje, com geeks tietando a Apple da mesma forma que adolescentes tietavam Britney Spears, o mercado da Apple não passa de magros 3%. Será que ela vai se posicionar, de novo, para manter apenas um nicho ou pretende ir para as cabeças?
Dois fatores pesam a favor, dessa vez. O primeiro: é muito difícil que o Google faça por alguma empresa o que a IBM fez pela Microsoft, o que levaria a uma grande procura por celulares com o padrão Android e a um possível monopólio de algum serviço dentro dele. O outro: o mercado de mobile business está bem mais maduro, hoje, do que o mercado de computadores era em 1981. Quase metade dos habitantes do planeta usa um celular, e a imensa maioria já está acostumada a mudar de aparelho a cada 18 meses. Não há nada que impeça que eles resolvam fazer a mudança.
De um jeito ou de outro, é uma época bem interessante para trabalhar com o desenvolvimento de aplicações para o Verdadeiro Computador Pessoal.
Eu só queria dar os parabéns…
31 outubro, 2007
aos colabadores e leitores assíduos do blog. O mês está encerrando, e o blog passou a marca de 6000 acessos em Outubro.
Pode parecer pouco, mas 200 acessos diários em um blog que se dispõe a buscar um público tão pequeno (desenvolvedores e pessoas que trabalham com tecnologia), que se mantém escrevendo em português, e que não se preocupa em fazer marola, primando a qualidade, é uma marca que impressiona.
Próxima meta: 10 mil acessos.
Cheers.
