A partir de hoje, as operações deste blog se mudam para: http://www.hervalfreire.com/googletron
Anota aí: http://www.hervalfreire.com/googletron
O último que sair, feche a porta e apague a luz...
24.3.07
Desapontamentos de sábado a noite
Nem tudo são flores, no meu novo casamento. Acabei de descobrir, assim, por acaso, que a noiva costuma entrar em coma profundo sem avisar, algumas vezes por ano. E acorda como se nada tivesse acontecido.
É, o preço do baixo custo. Estava bom demais para ser verdade... :-P
É, o preço do baixo custo. Estava bom demais para ser verdade... :-P
Plugins on Rails
Uma das features mais interessantes do Rails é o mecanismo de Plugins. Até bem pouco tempo, escrever extensões para RoR era uma tarefa confusa, já que o framework suportava plugins, engines e components.
Agora decidiram entender que nem toda flexibilidade é benéfica e unificaram a coisa toda ao redor dos plugins. No Wiki do Rails já existe bastante material sobre como utilizar os milhões de plugins já existentes. Em alguns casos, dá para desenvolver aplicações inteiras apenas juntando plugins e aparando as pontas...
Agora, se o seu negócio é mesmo desenvolver o seu próprio plugin, recomendo começar por aqui. Ao contrário da maioria das coisas no universo Ruby, o processo de desenvolvimento de plugins está bem documentado e cheio de exemplos.
Agora decidiram entender que nem toda flexibilidade é benéfica e unificaram a coisa toda ao redor dos plugins. No Wiki do Rails já existe bastante material sobre como utilizar os milhões de plugins já existentes. Em alguns casos, dá para desenvolver aplicações inteiras apenas juntando plugins e aparando as pontas...
Agora, se o seu negócio é mesmo desenvolver o seu próprio plugin, recomendo começar por aqui. Ao contrário da maioria das coisas no universo Ruby, o processo de desenvolvimento de plugins está bem documentado e cheio de exemplos.
23.3.07
Lua de mel dos sonhos...
Num blog tão cheio de ranting, uma pausa para elogiar uma das poucas ilhas de sanidade da Internet. Depois de anos flertando com os promíscuos serviços de hospedagem brasileiros (onde você merece um prêmio se conseguir botar num site ar!), depois de uma curta e frustrante experiência com o godaddy e finalmente um longo e conturbado casamento com uma conta compartilhada no eapps, resolvi experimentar o serviço do DreamHost, por sugestão de um amigo.
Por algum motivo, nunca tinha parado para analisar. Com um preço 50% inferior ao que atualmente pago para manter sites no eApps, o DreamHost oferece 160gb de espaço (contra 2gb de minha hospedagem anterior), 2 TERA de tráfego (conta ridículos 30gb de meu casamento antigo), e acesso full (via ftp, ssh, telnet, whatever) a uma box Linux compartilhada.
Com jeitão de Web 2.0, o painel de controle do DreamHost é realmente muito funcional. Dá para configurar praticamente tudo sem ter que recorrer ao shell. A conta já vem preparadinha para hospedar repositórios SVN, qualquer número de bancos de dados MySql e domínios. E o suporte, pelo visto, funciona também: até agora, todos os tickets de suporte (3 no total) foram atendidos rapidamente, e sem maiores complicações.
Saldo final da operação: consegui botar dois sites no ar em menos de 2 horas, do jeitinho que eu queria. Ah, ia me esquecendo: eles também oferecem 97 dias de garantia de dinheiro de volta, em caso de desistência. Essa lua de mel promete... :)
Em tempo: caso você, querido leitor, decida experimentar uma conta no DreamHost, registre-se e faça um test drive.
Por algum motivo, nunca tinha parado para analisar. Com um preço 50% inferior ao que atualmente pago para manter sites no eApps, o DreamHost oferece 160gb de espaço (contra 2gb de minha hospedagem anterior), 2 TERA de tráfego (conta ridículos 30gb de meu casamento antigo), e acesso full (via ftp, ssh, telnet, whatever) a uma box Linux compartilhada.
Com jeitão de Web 2.0, o painel de controle do DreamHost é realmente muito funcional. Dá para configurar praticamente tudo sem ter que recorrer ao shell. A conta já vem preparadinha para hospedar repositórios SVN, qualquer número de bancos de dados MySql e domínios. E o suporte, pelo visto, funciona também: até agora, todos os tickets de suporte (3 no total) foram atendidos rapidamente, e sem maiores complicações.
Saldo final da operação: consegui botar dois sites no ar em menos de 2 horas, do jeitinho que eu queria. Ah, ia me esquecendo: eles também oferecem 97 dias de garantia de dinheiro de volta, em caso de desistência. Essa lua de mel promete... :)
Em tempo: caso você, querido leitor, decida experimentar uma conta no DreamHost, registre-se e faça um test drive.
22.3.07
Closures no Java 7
Uma série de exemplos de como deve funcionar a especificação de closures que deve sair no Java 7, de acordo com a especificação de closures para Java. No mínimo, bem esquisito... :)
Pegadinha Rails da semana: stale sessions
O dia hoje começou mal. Minha aplicação Rails fora do ar sem nenhum motivo aparente, e um e-mail do hosting reclamando da cota de disco estourada.
4 horas e muita busca frustrada depois, descobrimos que o /tmp/sessions da aplicação continha 300 MIL arquivos. Um arquivo para cada usuário que acessou o site DESDE O PRIMEIRO DIA. Traduzindo para bom português: descobri da pior maneira possível que o Rails CRIA os arquivos de sessão, mas não apaga.
Problema resolvido, googlei um pouco a respeito e descobri que na verdade este "bug" é uma "feature" documentada. Então fica a sugestão: antes que seu hosting venha dar um esporro em você por sua aplicaçãozinha gulosa, mude a maneira default de gerenciamento de sessões de sua aplicação para usar banco de dados ou sessões em memória. Afinal, no universo BancoDeDados, os hacks são bem mais elegantes.
Como diria o filósofo, "de perto, todas as coisas são feias"...
4 horas e muita busca frustrada depois, descobrimos que o /tmp/sessions da aplicação continha 300 MIL arquivos. Um arquivo para cada usuário que acessou o site DESDE O PRIMEIRO DIA. Traduzindo para bom português: descobri da pior maneira possível que o Rails CRIA os arquivos de sessão, mas não apaga.
Problema resolvido, googlei um pouco a respeito e descobri que na verdade este "bug" é uma "feature" documentada. Então fica a sugestão: antes que seu hosting venha dar um esporro em você por sua aplicaçãozinha gulosa, mude a maneira default de gerenciamento de sessões de sua aplicação para usar banco de dados ou sessões em memória. Afinal, no universo BancoDeDados, os hacks são bem mais elegantes.
Como diria o filósofo, "de perto, todas as coisas são feias"...
Launchy
Um programinha muito interessante que reproduz a única feature legal do Windows Vista: você aperta alt+space, sai digitando o nome do programa ou arquivo que quer abrir e o Launchy faz o matching do nome com as aplicações disponíveis.
Adeus, menu iniciar... :)
Adeus, menu iniciar... :)
20.3.07
PHP no Java 6
Um tutorial rápido sobre o Quercus - um engine para execução de código PHP 5.0 usando a nova especificação de script engine (JSR 223).
19.3.07
Novas Collections no Java 6!
Aqui você encontra um quickstart bem legal sobre as novas interfaces de collections do Java 6: em resumo, uma nova interface de "fila dupla" (double ended queue, ou Deque) e duas novas interfaces para maps/sets que permitem a "filtragem" de elementos (por exemplo, pegar todos os elementos de um set que sejam menores que 10).
O rant do dia vai para a incrivelmente bem bolada interface Deque, que oferece dois métodos para adicionar, dois para remover, dois para pegar o primeiro elemento e dois para pegar o último. A interface Queue havia sido adicionada no Java 5 com um método para adicionar elementos (offer()) e dois para recuperar (peek(), que não remove da fila, e poll(), que retorna e remove). Pois bem, a Deque foi muito mais além oferecendo (além dos já esperados peekFirst, e poolFirst, já que estamos falando de uma fila de mão dupla) mais um monte de novos métodos: addFirst, removeFirst, addLast, removeLast, offerLast, poolLast, peekFirst, peekLast. Pra que tanto método? Para poder oferecer um set de métodos que retorna false quando não foi possível adicionar/remover e outro que lance exceptions quando isto ocorrer.
Simplesmente formidável! Tenho certeza que pelo esta grandiosa interface múltipla vai ter pelo menos um uso: pegadinha em prova de certificação.
O rant do dia vai para a incrivelmente bem bolada interface Deque, que oferece dois métodos para adicionar, dois para remover, dois para pegar o primeiro elemento e dois para pegar o último. A interface Queue havia sido adicionada no Java 5 com um método para adicionar elementos (offer()) e dois para recuperar (peek(), que não remove da fila, e poll(), que retorna e remove). Pois bem, a Deque foi muito mais além oferecendo (além dos já esperados peekFirst, e poolFirst, já que estamos falando de uma fila de mão dupla) mais um monte de novos métodos: addFirst, removeFirst, addLast, removeLast, offerLast, poolLast, peekFirst, peekLast. Pra que tanto método? Para poder oferecer um set de métodos que retorna false quando não foi possível adicionar/remover e outro que lance exceptions quando isto ocorrer.
Simplesmente formidável! Tenho certeza que pelo esta grandiosa interface múltipla vai ter pelo menos um uso: pegadinha em prova de certificação.
17.3.07
Softbras???
Num país economicamente subdesenvolvido onde a principal fonte de receita para o mercado de TI é o governo, esta notícia é realmente excepcional. Depois da idéia estúpida de "software livre" do primeiro mandato, agora essa (que ainda não passa de boato, mas pelo que eu tenho visto tem tudo para ser verdade).
Parabéns ao governo Lula. Se superando a cada dia!
Parabéns ao governo Lula. Se superando a cada dia!
16.3.07
Caindo na Real!
Tá no ar: a tradução do livro Getting Real para português está finalmente disponível, após um longo período de re-revisão graças a alguns acidentes de percurso.
Apesar do extremismo em alguns capítulos, a leitura realmente vale a pena.
Apesar do extremismo em alguns capítulos, a leitura realmente vale a pena.
Vem aí: mais uma API Java para manipulação de datas
Todo programador Java já passou pelo trauma que é manipular datas no Java. Constatar que Janeiro é o mês zero. Perceber que objetos Date são representações absolutas de tempo (milissegundos transcorridos desde 1 de janeiro de 1970), mas as vezes quando você serializa a data de lá pra cá (especialmente através de drivers jdbc), os milissegundos mudam. Descobrir que não existe um jeito conveniente de calcular diferença de dias (ou horas, ou minutos) entre dois períodos. Sem falar nas infindáveis dores de cabeça causadas por bugs na tabela de horário de verão.
Agora a Sun anunciou a cura de todos os problemas: um novo JSR todinho para implementar uma nova API de data/hora para o Java!
Tudo que eu precisava. Mais uma API que faz a mesma coisa, e mais uma vez desenvolvida por um comitê. Mal posso esperar.
Agora a Sun anunciou a cura de todos os problemas: um novo JSR todinho para implementar uma nova API de data/hora para o Java!
Tudo que eu precisava. Mais uma API que faz a mesma coisa, e mais uma vez desenvolvida por um comitê. Mal posso esperar.
Assinar:
Postagens (Atom)