sexta-feira, 21 de janeiro de 2011

Clausuras Javascript

A pedido de um grande amigo, vou escrever um pouco sobre o tema.

"Eita nome feio! Deve ser difícil!". Este provavelmente é o primeiro pensamento que você teve ao ler o título.
Bem, o nome é feio, mas entender o conceito é bem...bom, é difícil mesmo. Então vamos lá.

Clausuras, se tratando de programação, são expressões (funções) que podem ter variáveis livres juntas e que possuem um ambiente que as mantêm unidas.

Ok. Começamos mal. Mas vamos simplificar. Clausuras são variáveis de uma função que na verdade são funções. Ou falando de outra forma, são funções internas de uma função que possuem escopo próprio, variáveis próprias, parâmetros próprios, mas possuem acesso ao escopo do ambiente ao qual estão contidas e podem ser acessadas de fora da função que as contêm.

No fim das contas, é difícil falar, mas é fácil implementar.

Vamos a um exemplo:

        function funcaoAmbiente(){
            variavelAmbiente = "Escopo externo";
            this.funcaoClausura1 = function(){
                alert(variavelAmbiente);
            }
            return this;
        }
       
        var teste = funcaoAmbiente();
        teste.funcaoClausura1();

Percebam três coisas importantes:
1) funcaoAmbiente foi atribuída a uma variável, e sua referência foi entendida como um objeto.
2) A função interna tem acesso ao escopo da função ambiente.
3) Foi possível, através da referência da função ambiente chamar a função interna.

Com isso, é possível simular orientação a objeto, criar callbacks, etc em Javascript. Esta técnica é largamente utilizada nas principais libs e frameworks Javascript, como por exemplo, JQuery e ExtJS.

Existe muito mais assunto para falar sobre clausuras, mas isso daria uns 10 posts. Acredito que o ponto mais importante, seria o cuidado com a utilização de escopo, pois poderia gerar (e já ví acontecendo) memory leaks terríveis.

Existe um post que eu achei que fala largamente sobre o assunto, seus benefícios e seus problemas. É este aqui.
No futuro talvez eu fale mais sobre o assunto, mas por enquanto, fiquem com essa pincelada básica.

Multas. Aahhhhhh!!!!

Eu sei que foge um pouco (tá, foge muito!) do assunto do blog, mas esse vale a pena.

Quem nunca ficou injuriado por tomar uma multa de trânsito? Eu pelo menos não fico nada feliz. Porém, toda multa cabe recurso, e existem muitos argumentos que são displicentemente (pra não dizer que não são mesmo) divulgados pelas autoridades. [modo_ironia=on]Eu não faço idéia do motivo.[modo_ironia=off]. Por exemplo, você sabia que pode recorrer da multa alegando mal funcionamento do equipamento? Basta solicitar o relatório da última inspeção pelo INMETRO. O problema é que essas inspeções costumam não estar em dia. Sem inspeção em dia, sem multa. Essas e outras dicas (inclusive modelos de recurso) podem ser encontrados nos links abaixo:

Tutorial completo de argumentos + modelos de recurso
Modelos de recurso

See you guys!!!

quarta-feira, 19 de janeiro de 2011

Programadores podem ser "felizes"

NE: Portabilidade = Característica das aplicações serem executáveis (ou facilmente recompiladas) em outras plataformas além daquela de origem.

Cara, existem muitas bizarrices no mundo. Vou falar um pouco sobre mais uma delas.

No mundo dos programadores, uma das maiores dores de cabeça é a portabilidade. E esta é uma das pricipais motivos do ambiente web ter se tornado tão popular. Aplicativos web se tornaram o modelo padrão de aplicativos. Se não é web ou simplesmente não roda num browser, todos torcem o nariz. Aplicativos desktop são encarados como coisas do passado. Mas essa mudança de pensamento (de desktop para web) não aconteceu do dia pra noite e tem tudo a ver com o assunto supra-citado.

Softwares desenvolvidos para rodar em um browser não tem que se preocupar com o Sistema Operacional do usuário. O custo com manutenção também é reduzido, já que para atualizar o software basta atualizar a versão que está rodando no servidor. Antigamente, chegava-se ao cúmulo de ter que atualizar máquina por máquina quando havia alterações. Existe muito falatório sobre Java ser multiplataforma, mas na prática não é. Dá um trabalhão compilar um projeto que foi originalmente construído em um outro SO. Isso se deve às várias JVM, às várias bibliotecas, dependências, etc, que mudam ligeiramente de uma plataforma para outra.

Para alguém que desenvolve para plataformas mobile, isso é um tormento. Existe um SDK para IPhone, um pro WebOS, um pro Maemo e por aí vai. Mas, existe luz no fim do túnel. A Nokia está investindo em uma lib C++ chamada QT (lê-se "cute") a um bom tempo e já tem algo maduro. É certo que você não vai conseguir compilar e rodar um software pra IPhone utilizando essa lib, mas já é um progresso. Você consegue criar um software realmente multiplataforma sem mudar um ponto-e-vírgula no seu código. Até onde eu sei, um app construído em QT (lembrem-se, "cute") pode rodar em Windows, Linux, Maemo, Symbian, etc, sem alterações nos fontes.

O que acontece quando um programador descobre uma linguagem realmente multiplataforma? Faz um vídeo Nerd mostrando sua inaptidão pra dança, lógico. Dá uma olhada no que a galera da TrollTech (criadores do projeto QT, hoje propriedade da Nokia) fez:




Isso sim é bizarrice. Mas devo admitir que até rí um pouco.

terça-feira, 11 de janeiro de 2011

N900 e seus customs

Comprei esse celular a alguns meses atrás e ele não pára de me surpreender. As possibilidades são infinitas. É possível instalar diversos SO's nele, apesar de não ter a enorme gama de softwares (também não tem as inutilidades) tem tudo que eu preciso e até mais. Neste último fim de semana fiz uma viagem relâmpago pra fora de Brasília. Tinha meu PSP pra passar o tempo e o N900 pra ouvir músicas. O problema é que a bateria do celular não tem uma fama muito boa. Se não me engano, segundo a Nokia, ele tem autonomia de 8 hrs de audio. Minha viagem duraria 12 hrs.
Shit, pensei. No meio do caminho, provavelmente vou ficar sem bateria. Mas não contavam com a astúcia de alguns desenvolvedores. Existem diversas formas de poupar energia no aparelho. Primeiro eu desliguei o básico.
1) Wi-fi = OFF
2) Bluetooth = OFF
3) SSH = OFF
4) Serviços On-line (Gtalk, Skype, etc) = OFF











Apartir daqui vieram os "a mais". Primeiro, eu pensei comigo mesmo, "na estrada não tem sinal da minha operadora, então pra que gastar bateria com sinal de celular?". Então ativei o modo Offline do aparelho (nem sabia que existia).











Neste momento as coisas ficaram complicadas. Não tinha mais pra onde correr. O player do aparelho tava consumindo cerca de 30% da CPU devido à taxa de amostragem diferente do esperado por ele (o aparelho trabalha a 48 khz, presente em DVD's, e o mais comum que existe é 44 khz, presente em CD's de audio).
Então veio a idéia. Se eu posso usar o QCPUFrequency (um programa) pra fazer Overclock no aparelho, porque não fazer o oposto? Isso mesmo. Diminuí o clock do processador de 600 Mhz, que estava "overclockado" pra 900 Mhz, para mízeros 250 Mhz. O aparelho fez miséria com a bateria. 12 hrs de viagem (e muita música ininterrupta) depois e ainda tinha 20 % de carga. Na volta, quando cheguei a Brasília, reativei as funções todas, fiz ligações, e ele ainda tinha carga.











Continuo feliz com meu N900. É isso e até mais!!!

segunda-feira, 3 de janeiro de 2011

Zend Framework. Por onde começar?

O que é Zend Framework?
Zend framework é a framework PHP mais utilizada no mundo. É mantida pela enpresa homônima, que também é mantenedora da linguagem PHP. O Zend é amplamente utilizado pela confiabilidade e agilidade que proporciona aos projetos que o utilizam.

Vou fazer uma série de posts que explicam como configurar e utilizar o zend.

Neste primeiro momento, vamos nos ater a configurar o servidor, criar uma estrutura de diretórios e ver o projeto rodando. Mais adiante, partiremos para a integração com o ExtJS.

Para começar, faça download da versão mais recente do zend. Ele pode ser encontrado aqui.

Agora é necessário fazer algumas explanações. Existem diversas formas de fazer a mesma coisa. A galera do Zend disponibilizou algumas ferramentas que facilitam o trabalho e que nós utilizaremos.

Primeiro, devemos setar nosso ambiente de desenvolvimento. Eu, particularmente, prefiro utilizar o Wamp (download) quando em Windows e no Linux eu utilizo o Apache + PHP instalado via repositórios (tutorial). Ative o módulo de reescrita (no Linux e no Windows basta clicar no ícone do wamp perto do relógio e ir em Apache->Apache Modules->rewrite_module). Depois, instale o zend tool (instalar e utilizar).

Inicie o projeto com o zend tool e vamos à brincadeira. Hoje, estou trabalhando em Windows, então vou imaginar que você está usando o wamp e seu projeto está em c:\wamp\www\meuProjeto.

Se tudo houver dado certo, você deverá possuir a seguinte estrutura de diretórios dentro do seu projeto:


Descompacte o zend framework baixado anteriormente, renomeie a pasta descompactada para Zend e copie-a para a pasta library do seu projeto. Inicie o Wamp. Abra seu browser e digite:

http://localhost/meuProjeto/public
obs: caso tenha configurado um VHOST, digite: http://localhost/meuAlias

Esta tela deverá aparecer:


Pronto. Seu primeiro projeto está funcionando e online. Tá certo que foi só um Hello World, mas já é um início. No próximo post falaremos sobre MVC e como o Zend trabalha com ele.