Migração para o Joomla 1.5

Texto rápido, apenas para dizer que migrei o Manifesto.blog.br para o Joomla 1.5 (finalmente!), e deu muito trabalho mas parece que esta tudo ok.

Esta tudo devidamente atualizado, o RSS já aponta para o novo conteúdo sem perder os links, os links antigos estão redirecionando com 301 para os novos (são os mesmos links na verdade, só na pasta diferente), a URL estão amigáveis e o layout parace estar certo. 

Uma dica valiosa: nunca esqueçam do cache!

Simples Ideias evolui para IdeasWall.org!

Como disse em um texto anterior, acho que tecnologia se aprende fazendo, como eu queria aprender e testar algumas coisas, surgiu o Simples Ideias. Na época, em janeiro, queria colocar em prática o máximo que aprendi sobre Restful, JQuery e Spaghetti,  e o Simples Ideias foi uma boa experiência.

Mas agora eu queria mais, então primeiro com o intuito de internacionalizar o aplicativo, surgiu o IdeasWall.org, que é a evolução do simples ideias, mas em inglês e com novas tecnologias. 

O básico continua o mesmo serviço, de guardar Idéias em Tags e acessar em qualquer lugar. Mas só isso que continua o mesmo.

Eu ia reescrever o serviço em outra linguagem sem ser PHP, como Clojure, mas essa mudança iria demorar muito então resolvi por reescrever, mas em PHP mesmo, mas sem usar o Spaghetti* por motivos que vou explicar mais a frente. Como o serviço é simples foi rápido reescreve-lo e graças aos testes em CURL, estava tudo funcionando. Vamos as interfaces:

Mobile. (J2ME)

O principal objetivo do app, desde antes, era acessar em qualquer lugar. Então a primeira nova interface a ficar pronta foi a para celular. Feita em J2ME de forma extremamente simples aqui pus em prática o estudo desta tecnologia.

As telas são simples e com controles rápido, todos os algoritmos foram reduzidos para caber nos aparelhos mais limitados, e o acesso a web é feito apenas quando necessário e com chamadas o reduzidas.

Obviamente também não oferece muitos recursos e não haverá muitos updates, exceto a opção de trabalhar offline e sincronizar por demanda no futuro.

Web. (JQuery)

A versão web, escrita em JQuery, foi a cópia da antiga interface do serviço, apenas adaptando as mudanças no webservice. É a primeira interface rica, e foi a ultima a ficar pronta, pois o JavaScript esta um lixo, shame on me.

Apesar disso é talvez a melhor opção de acesso, oferece todos os recursos implementados no serviço com um desempenho muito bom, além de esta a um link de distância.

Nela usei os recursos de Arrastar nós, Edição sem sair da página, Abas e muita requisição assíncrona com Json. Funciona no Opera, no Firefox, no Chrome e no IE 7, não funciona no IE6. No IE7 até que foi fácil, neste app eu não ligo para o IE6 mesmo. Não pude testar no Safari, mas aposto que não funciona.

Desktop. (JavaFX) 

Sem dúvida, o principal motivo do novo aplicativo. Estou muito empolgado com  a tecnologia do JavaFx e resolvi fazer um app para o JavaFx Challenge,  como não tive muito criatividade em pensar em algo novo, resolvi refazer o app de idéias. Como ia para o challenge ia ter que passar a Inglês e padronizar mais o serviço, então refiz logo tudo.

JavaFx é muito bom de trabalhar, com sua sintaxe declarativa e similaridades com programação funcional(um pouco longe, mas…) e ainda assim acesso a todo poder dos pacotes do Java. Essa foi o primeiro do novo serviço a ser implementado, logo após reescrever o PHP pela primeira vez. 

Essa é com certeza o que mais me dediquei, a interface esta tão trabalhada quanto aguentei, usei os belos icones do KDE, Oxygen e Crystal SVG, para me ajudar, e tentei deixar a interface o mais funcional possível.

Graças ao JavaFx o app funciona nos navegadores(Qualquer) como applet, ou pode ser lançado separado com o WebStart, além de poder arrasta-lo para área de trabalho para deixar instalado localmente.

Infelizmente ainda existem problemas, o  tempo para carregar o applet ainda acho muito demorado, mas a versão Webstart e local não sofrem disso, a API ainda tem poucas coisas mas de fácil extensão, e esbarrei num bug sinistro nos HttpRequest que paravam de funcionar. 

O Runtime é razoavelmente rápido até, e a experiência é boa, com  resposta rápida da interface o feedback é bom. Com as otimização corretas no código é fácil eliminar os gargalos. E em todo lugar que testei funcionou igual.

Webservice. (PHP e GAE) 

Como disse no começo reescrevi o webservice por que o queria em inglês e mais padronizado. Como o foco inicial era o JavaFx a primeira reescrita em PHP foi rápida, usei o RestServer e um classe de Sql qualquer, e em meio-dia estava pronta para testar o Javafx e mais tarde baixaria o Framework novamente e melhoraria o código.

No decorrer do desenvolvimento porém resolvi aproveitar a oportunidade para testar o Google App Engine, que tinha lançado o ambiente Java e já havia resultados usando o PHP através do Quercus. Quando o JavaFx já estava quase pronto, me cadastrei no GAE e registrei o domínio. 

Enquanto esperava entrar no GAE, instalei o Quercus para começar a portar o serviço, deu um bom trabalho mas funcionou. Aproveitei e comecei a adaptar logo a interface Web. Ai o tempo  estava esgotando, já que meu prazo é o JavaFx challenge.

Quando resolvi finalmente passar ao GAE tive ainda de configurar tudo, e a parte que mais me atrapalhou, mudar o esquema de banco de dados. Quer dizer, no GAE não temos um banco de dados comum, disso eu sabia, mas o que eu não tinha percebido é que não poderia usar um externo também!

Bom, tive que aprender JDO, fazer a persistência o mais simples possível em Java adaptar todo o PHP para usar o novo esquema, "wrapping" toda a alteração em uma classe de conexão em PHP.  

Enfim, estou cansado e resolvi deixar o web service como esta, já que ainda havia o bug no JavaFx, a página a escrever e testar tudo no Windows. Mas, finalmente, desde de o começo de abril com esse projeto, esta tudo pronto! Viva viva.

E agora?(futuro)

Pronto esta, mas ainda tem muito o que acrescentar:

  • Vou reescrever o serviço com certeza, mas ainda não sei se em PHP.
  • Um interface(ou adaptar a atual) capaz de ficar na bandeja.
  • Possibilidade de usar offline com sincronismo por demanda, em todas as versões.
  • IPhone?
  • Ambiente compartilhado?
  • Integração com o Google Calendar e E-mail?
  • Notas com data para termino ou para acontecer.

Fim. 

Espero que não tenha muito erro de português, não revisei o texto e estou com fome ;) 

A arte geek de aprender

Acho que todo bom nerd(Yeah, sou nerd!) gosta de aprender coisas novas, principalmente geeks da área de tecnologia, aonde surgem novidades a cada segundo. Basta um semana de feeds novos que vamos descobrir várias coisas novas, das quais pelo menos uma vai nos interessar em aprender.

Infelizmente, a grande quantidade de novidades empolgantes somadas as nossas atividades obrigatórias, como estudar e trabalhar, costuma atrapalhar nossa busca por novos conhecimento interessantes.

Na maioria dos casos de tecnologias novas, eu prefiro aprender fazendo. De preferência com alguma idéia nova, ou revitalizando algum projeto antigo usando as novidades. Criar um projeto novo especificamente para testar as novas tecnologias.

Nessa caso estou falando de tecnologias, de implementação. No caso de conceitos, a abordagem é diferente, começando pelo estudo. Por exemplo, para aprender Orientação a Objetos é interessante ler primeiro, para depois aprender a implementar(ai sim, na prática), ou para aprender sobre modelos de webservices(REST ou SOAP), são itens abstratos. Arquiteturas, Design, e por ai vai.

Mas se quer aprender uma nova linguagem ou framework, faça uma aplicação. Um tecnologia de virtualização, crie uma pequena rede virtual. Administração de sistema, instale e rode um servidor, mesmo que virtual. Um novo CMS, instale e use. Enfim, faça algo! Mesmo que seja numa aplicação pequena.

As vezes vou ao extremo nisso, crio o projeto antes de ler o primeiro tutorial. Começo o projeto e consulto a documentação conforme for avançando. E é importante lembrar sempre de fazer as coisas da nova forma, usando o máximo de recursos da nova tecnologia, e evitar cair na tentação de usar os métodos antigos “apenas aqui para ser rapidinho”.

E para complementar os estudos, que tal publicar artigos sobre o assunto? Tentar ensinar e passar conhecimento adiante é uma ótima forma de reavaliar seus conhecimento e aprimorar-se. 

Estes dias estou aprendendo JavaFX, que introduz o JavaFx Script, uma linguagem com sintaxe declarativa, e todo um novo pacotes de elementos ao Java. Além possuir conceitos diferentes quanto a criação de aplicações.

Não adiantaria muito se, por exemplo, eu fizesse as interfaces com swing, ou usasse o tempo todo a sintaxe padrão do Java, que é suportada. Assim não estaria aprendendo as novidades dessa tecnologia e não estaria aproveitando seus recursos únicos.

Seria o mesmo que aprender Orientação a Objetos, apenas para fazer listas de métodos chamados um após o outro de forma procedural. Ou tentar aprender um linguagem funcional sem usar closures, macros e currying. Ou usar um framework novo, e fazer gambiarras para usar os mesmos recursos do antigo. No fim não vai aprender a parte interessante da tecnologia, e ainda vai ficar reclamando que a tecnologia é ruim por que é diferente.

O interessante a notar é que a cada "milestone" do projeto, tem-se vontade de apagar tudo e começar do zero, por que nesse ponto você descobre que poderia ter feito tudo diferente e bem melhor. Ai o melhor é refatorar um pouco, deixe terminar o projeto. Ao final, faça a versão 2.0 do zero, pois ai você já tem a visão macro das melhorias e novidades.

Enfim, se quer aprender algo novo. Pegue uma das opções, e faça!

Virtualizando o ambiente

Algo que tem me fascinado fora da programação, na área de infraestrutura, são os recursos de virtualização de sistemas. A idéia de aproveitar a mesma máquina para rodar diversos Sistemas Operacionais de forma independente é simplemente ótima, mesmo não sendo nova já que os mainframes se virtualizam desde sempre.

Em ambientes de produção as vantagens são claras, é econômico, facilita migrações, fallbacks, homologação, cluster, etc etc. No uso pessoal, é interessante por que temos um ambiente pronto em questão de instantes e podemos testar diferentes recursos de forma prática.  

O fato é que estou virtualizando a estrutura aqui de casa, são dois ambientes fundamentais: o Famlilar e o de Desenvolvimento.

No ambiente familiar é "aquele" desktop que todo mundo usa, compartilha e estraga junto. Como os usuário são heteregêneos(mãe, pai e irmã pre-adolescente), não é incomum haver problemas. 

O ambiente familiar mantemos o Linux por bastante tempo e as pessoas foram felizes, e eu não tive problemas, usavam o Windows em dual nas poucas vezes necessárias. Fato que é que os requisitos do sistema mudaram: O provedor de internet teve uma série de frescuras e não deixava meu linux se autênticar(burlavel porem) e meus pais precisavam de alguns programas especificos(financeiros e bancos principalmente). Isso somado a falta de tempo, fez o Windows passar a ser o padrão novamente. O que foi um problema.

Fato é, o Windows dá problema, e eu não tenho tempo de resolver. Pega vírus, "bloated" rapidamente… essas coisas.

A virtualização do ambiente familiar tem dois pontos chaves: O OS principal, Debian, onde eles podem navegar com o firefox, assistir videos, instant messengers e etc, de forma segura, e uma VM com o Windows, para poderem usar o  IE e os programas financeiros sem dor de cabeça. Tem ainda uma área compartilhada para troca de arquivos.

Ponto importante é que mantenho o repositório das imagens recem criadas, limpas ainda. Então assim que a Imagem em produção do Windows der problemas(Virús, bloat, etc), *mato-a* e recoloco a limpa, de forma rápida.

No ambiente de Desenvolvimento, tenho também o Debian rodando como OS principal, com os editores e etc, uma máquina Windows XP para testes, e uma VM para simular um ambiente de servidor(ainda em construção). 

É interessante que posso testar openSolaris ou Linux ou BSD, diferentes combinações de webserver(lighthttpd, apache, nginx), banco de dados (postgres, mysql…) e etc, sem correr riscos de prejudicar o ambiente de produção. E posso fazer testes, benchmarks e etc.

Mantenho também aqui um repositório das imagens limpas, e algumas pré-instaladas, para poder refazer tudo assim que necessário.

É bem legal. 

Incremente sua leitura com esses blogs sobre desenvolvimento

Eu poderia fazer aqui uma longa lista de blogs e tudo mais, mas já fizeram um bom trabalho e vou repassar por aqui.

Lá tem boa parte do que leio em português, revisando meu google reader acrescento, dentro de blogs que falam sobre desenvolvimento, os seguintes:

Acho que não esqueci nenhum que ainda não estava nas outras lista. Boa leitura.

Os aplicativo que acompanham meu celular

Para a virada do ano fiz uma curta viagem "de férias"(Freela não tira férias, mesmo), apesar de ter levado meu netbook, ele sequer saiu da mochila. O trabalho que me manter conectado e me distrair ficou a cargo do meu celular mesmo. Apesar de não ser nenhum smartphone, ele aguenta bem o tranco.

Aplicativos para Celuluar 

O principal aplicativo dele é, sem dúvidas, o Opera Mini. Navegar é preciso, e o que mais faço nele é realmente acessar o gmail e o twitter, direto pelas versões mobile dos sites. Mas além do opera tem mais alguns aplicativos legais que me acompanham, são eles:

  • BagOfDice – Para poder rolar dados direto do celular, não é a coisa mais util e eu nem uso direito, mas é legal.
  • BT File Manager – Gerenciador de arquivos para flexibilizar a transferência via bluetooth, esse sim é bem útil.
  • Kaywa Reader – Leitor de QR Codes (tipo códigos de barras evoluído)
  • PaderSyncFTP – Gerenciador de arquivos, mas este voltado para FTP permitindo sincronia e backup.
  • Qik – Para fazer streaming de video direto do celular.

Além desses tenho também, é claro, alguns joguinhos comigo, nada muito sofisticado:

  • Doom RPG
  • Mario Kart
  • MeBoy – Emulador de game boy
  • PAC-MAN
  • Super bomberman

Dos jogos nem precisa explicar.

São todos aplicativos simples, a "instalação" se faz apenas copiando os arquivos para o cartão de memória. Uma ótima dica é o site getjar.com e também o MOSH da nokia, lá tem bastante coisa, apesar de achar o site baita ruim de usablilidade. E você, o que carrega de legal?

Melhores textos de 2008 do Manifesto

Por que não lembrar o que escrevi em 2008? É complicado, por que foi em fevereiro que comecei a usar o Joomla!, assim muitos textos ainda estão com a mesma data. Então vou considerar depois disso apenas. Vamos a lista:

Antigo Template do Joomla! do Manifesto.blog.br 

  1. O Post sobre acpi e bateria no acer 5050 sem dúvida foi muito importante, prestou um bom serviço. 
  2. Sobre codificações de caracteres em PHP foi um texto interessante, explorando esse assunto importante através de uma experiência complexa que tive.
  3. Acompanhando o anterior, o texto sobre desempenho do MySql.
  4. Classes como array explicou como usar a SPL do PHP.
  5. Instalando o Linux no Positivo Mobo é outro texto que agrega conteúdo.
  6. Performace e testes de sistemas fala sobre boas práticas no desenvolvimento.
  7. Frameworks para persistência em PHP, falando do Doctrine e do Outlet.
  8. Para que todas essa modelagem? fala sobre um problema muito comum o overengineering.
  9. Boas práticas em Orientação a Objetos uma curta lista sobre alguns tópicos.
  10. DAO ou Active Record? falando sobre persistência.

Esses são os que eu considero os textos mais legais, vejo que o principal assunto é o PHP mesmo, ou então programação genérica.

As voltas que a vida dá (ou resolução de 2008 para 2009)

Primeiro: análise anual é uma merda! Um ano é MUITO TEMPO, tanto para recordar quanto para planejar… seis meses seria um intervalo melhor, com certeza. Especialmente em tecnologia, seis meses é o tempo de mudanças. Mas como agora vai virar o ano, vai resolução anual mesmo.

Analisando o texto do ano passado para ver como foram as coisas, quanto ao que eu esperava. Tudo que cumpri de lá, cumpri em seis meses, o resto nem pretendo mais. Foi um puta ano afinal:

Primeiro, entrei na faculdade! Estou fazendo Análise e Desenvolvimento de Sistemas, curso de 2 anos e meio. Nem tenho paciência para um curso chato de 4 anos, um curso chato de 2,5 é o bastante. As notas estão boas, apesar do conteúdo não acrescentar muito na prática. A decepção maior é falta de nerds no curso.

Não me certifiquei em java, nem em linux. Nem tenho planos para isso por enquanto. Mas aprendi bastante em ambos.

Os projetos da primeira metade do ano foram todos mais ou menos, medianos mesmo. Mas nesses primeiros seis meses do ano aprendi muita coisa sobre desenvolvimento, Orientação a Objetos, Domínios e etc tendo como por em prática tudo isso. Foi realmente um salto de qualidade e produtividade na programação. Quem mais se beneficia é o PHP mesmo.

Eis que chega o meio do ano, e a coisa esquenta!

Uma vaga para estagiar numa grande empresa aparece… grande não, na maior. Um estágio na IBM! Vejam só minha surpresa quando, ainda no primeiro semetre da faculdade consegui o estágio.

A vaga em si não era o que eu queria, mas poderia abrir muitas portas(e abriu). Trabalharia com suporte a servidores… windows. Mas foi muito bom, aprendi bastante, e apesar do foco ser windows estive o tempo todo em contato com as áreas de middleware, UNIX e DB. Além disso o cliente para qual prestava serviço era a Tv Globo, em um ambiente gigantesco!

Conheci grandes pessoas e aprendi bastante, com certeza. Principalmente processos, os que funcionam, como funcionam e quando não funcionam também.

Mas também não tinha mais tempo para muita coisa. Quase não programava, projetos estagnados e faculdade decaindo. Além do cansaço eu já quase não tinha tempo para namorada, tão paciente.

Infelizmente eu não queria suportar servidores, faço minha carreira de desenvolvimento, quero programar, tocar bons projetos e tudo mais. É para isso que eu estudo e é isso que eu gosto. Numa decisão muito difícil, larguei o estágio.

Quer dizer, estou largando. Eu já sai, mas ainda falta alguma papelada. E a faculdade, consegui recuperar no final, e foi OK. Mas é tempo de arriscar e correr atrás do que quero.

Assim chego ao fim do ano, com certeza esqueci de muita coisa que aconteceu, mas o mais relevante esta ai para ser recordado quando chegar o ano que vem. Agora de volta a 100%(voltando ainda ao rumo) freela, 100% livre, e podendo me dedicar aos projetos legais.

Para o ano que vem? Ao menos para o começo refazer este site horrível, dominar a arte do desenvolvimento Mobile, gastar menos e ganhar mais rsrs. E conforme for indo, vou vendo.

Abraços,
Boas festas!

Navegando bem em casa, na rua e em qualquer lugar com o opera

Muitos conhecem mas poucos usam o Opera. Eu uso já tem algum tempo, e cada versão fica cada vez melhor. Muitos recursos que os navegadores modernos tem hoje já eram implementados pelo Opera, mas por algum motivo ele sempre ficou na obscuridade dos navegadores. Seria o Opera um navegador de nicho? 

Opera Browser 

Uso o Opera em todo lugar, no meu PC principal, no meu mini-notebook, o Mobo, e no meu celular. O primeiro recurso dele que acho incrível é o Opera Link. Com ele você sincroniza todas as suas instalações do opera. Ou seja, sempre vão ter os mesmos favoritos, notas, painéis e o speed dial.

O Speed Dial é um recurso já bem conhecido e imitado, mantém os principais sites disponíveis na pagina inicial e acessíveis através dos atalhos de ctrl+1 até ctrl+9.

Além disso temos o My Opera, uma rede social integrada ao navegador e sincronizado, com direito a blog, fotos, menssagens além do sincronimo do opera link. E esses podem ser acessados via web, caso em outro navegador.

O Opera é mais que um navegador, é uma suíte de aplicativos. Tem leitor de email bom, gerenciador de downloads, notas e leitor de feeds. Temos ainda os widgets, que permitem estender a capacidade do navegador(como as extensõesdo Firefox), e a possibilidade de criar botões personalizados facilmente.

O sistema de Zoom da um show a muito tempo, com Zoom de imagens e todo o conteudo sem perder o layout, e hoje os outros navegadores funcionam de forma parecida. Os painéis e botões são facilmente reorganizados, e o painel lateral oferece acesso rápido aos principais recursos.

Tem também scripts javascript do usuários e folhas de estilo css definidas para um site, até a escolha de exibir ou não as imagens das paginas. Agora há ainda um modo para banda estreita, economizando. E têm o Dragonfly, incrível debugger javascript, html, dom, css e etc semelhante ao conhecido Firebug do Firefox.

O Opera Mini é um show aparte, a navegação no celular é super confortável, além de contar com os recursos de sincronismo e o my opera. É rápido e renderiza as paginas de forma satisfatória. Só não temos ainda flash ou java né. Ele usa um proxy do opera para pré-processar a pagina e economizar banda, além permitir acontamanhar o consumo, ajudando a se manter dentro do plano de dados contratado.

Um texto apenas para "babar" para o navegador, que é o meu padrão a um bom tempo, deixando para trás o Firefox. Se você usa o Firefox, vale a pena experimentar o Opera. Se você ainda usa o Internet Explorer… morra, ou use o Firefox pelo menos.