segunda-feira, 28 de setembro de 2009

Javascript closures

Bom dia!
Tal como tinha dito, irei neste post falar sobre closures. Os closures são uma das features mais importantes do javascript.
É algo dificil de explicar o que é o closure, mas vou tentar dar um exemplo totalmente académico e demonstrar a partir do exemplo:
<script>
function sum(x)
{
return function (y){
return x+y;
}
}
var sumaux=sum(5);
var result=sumaux(4);
alert(result==9); //true
</script>

Neste código, temos uma função sum que retorna uma outra função. Se repararmos "sum" leva x por parametro. À variavel sumaux fica atribuida a função anónima que leva como parametro y. A grande vantagem do closure, é que permite que sumaux, tenha em memória o valor 5 passado para o parametro x na instanciação, portanto, se executarmos sumaux (que é uma função), está irá lembrar-se do valor x pois foi instanciada com x=5.

Penso que estamos em condições agora de perceber o código abaixo:

window.alert = function(native) {
return function(e) {
native(e);
vbalert(e);
}
}(window.alert);

Esta instrução faz um conjunto de tarefas. A primeira linha é uma atribuição da função window.alert a uma função que iremos definir e que leva por parametro a variavel native(que se pretende que seja uma função). Dentro desta função iremos retornar uma outra função que vai invocar a função native com o parametro que for passado (neste caso a variavel e).
Portanto, se passarmos para a função principal o argumento native=window.alert (correspondente á ultima linha), a função que estamos a retornar irá conter:

return function(e)
{
window.alert(e);
vbalert(e);
}

Para finalizar estamos a igualar window.alert ás linhas que estão acima, ou seja, se executar window.alert('xpto'); estamos na verdade a executar as 2 linhas que estão dentro desta função anónima.

sexta-feira, 25 de setembro de 2009

Javascript com VBScript

Há dias colocaram-me uma dúvida engraçada :).
Um colega meu tinha o código todo cheio de alerts, e em vez de mostrar a caixa normal que é apresentada no javascript queria apresentar uma MsgBox do VB sem ter que alterar qualquer código.
Após alguns testes cheguei a este resultado:

<script Language="VBScript">
Function vbalert(e)
MsgBox e
End Function
</script>
<script Language="JavaScript">
function alert(e){
vbalert(e);
}
alert('windows');
</script>

O que estamos aqui a fazer é a "redefinir" a função alert do javascript para fazer chamar a função vbalert que neste caso vai despoletar uma MsgBox. Ao invés disso, poderiamos fazer mostrar uma DIV p.e. ou até utilizar o jQuery Dialog (componente do jQuery que desconhecia até então e que um colega me mostrou).

O contrário também é possivel (chamar javascript a partir do vbscript).

Mas surge agora uma questão. Visto que estamos a fazer override duma função javascript, como fariamos para extender a função nativa, isto é, preservar o que ela faz, mas adicionar comportamento nosso, neste caso invocar a nossa msgbox vb?

Aqui vai a solução:

<script language="javascript">
window.alert = function(native) {
return function(e) {
native(e);
vbalert(e);
}
}(window.alert);
<script>

O segredo aqui é o closure...No próximo post, explicarei o conceito do closure que é bastante util no javascript e explica na perfeição o funcionamento desta rotina

SVN (Subversion)

O SVN é um conhecido sistema de controlo de sources (SCM).
Antes de mais, devo explicar o que é um sistema SCM.
Um sistema SCM,consiste normalmente num servidor, que contêm um conjunto de repositórios (dados) para gestão de source code. Estes tipos de sistemas têm grandes vantagens, tais como:
-A informação encontra-se centralizada num único sitio (servidor).
-Permite gestão de versões de source code.
-Permite reposição de um determinado source code à imagem que ele estava numa determinada data.
-Permite efectuar branches e tags. Uma tag é uma imagem do código a uma determinada data, enquanto que um branch é um desenvolvimento paralelo que é efectuado para além do desenvolvimento principal (HEAD).
-Permite gestão de código por equipa. Podem estar várias pessoas a trabalhar nos mesmos projectos e até no mesmo source-code ao mesmo tempo.
-Gestão de conflitos que possam surgir com o trabalho em equipa.
-Comparação de versões de ficheiros (tipo windiff).

Para se trabalhar com o SVN em particular, aconselho-vos a visitar a página da SVN.
Aqui poderão encontrar plugins para os mais diversos IDEs nomeadamente o eclipse (é o que eu uso).

O SVN tem como intuito substituir um SCM já existente (CVS).
Para além do SVN existem ainda outros SCM tais como o perforce e o GIT que está a evoluir a olhos vistos podendo-se tornar como o SCM mais utilizado.

GIT-SCM

Para aficcionados do mundo .NET existe ainda o ANKH que poderá ser integrado no Visual Studio.

quinta-feira, 24 de setembro de 2009

HSQLDB

O HSQLDB é um sistema de base de dados bastante simples feito em java.
A base de dados fica guardada numa pasta e é portavel para qualquer lado.
Para correr a base de dados corre-se um batchcmd que inicia o servidor da base de dados ficando disponivel um url a usar numa query string para conexão.
Para introdução de dados, existe um ficheiro .sql na pasta da base de dados onde estarão os SQLs a executar.
Gostei muito principalmente pela simplicidade do sistema. É uma alternativa ao Access, Cloudscape/Derby muito viavel.
Ah e tem outra vantagem: É free!

Mais informações ver:
HSQLDB site

quarta-feira, 4 de março de 2009

Portal

Um portal é uma ferramenta integradora de apresentação que normalmente compreende as seguintes funcionalidades:

-Single Sign On (Inicio de sessão unico): consiste em autenticarmo-nos uma unica vez e transferir permissões de acesso entre aplicações.

-Personalização: consiste em permitir que o portal actue em função do utilizador que está ligado, conseguindo contextualizar a informação que mostra ao utilizador que está a ver.

-Customização: consiste em que cada utilizador consiga criar e manter as suas preferências, construindo páginas e portlets á medida.

E muitas outras. A meu ver a tecnologia portal acabará por vingar na sociedade, mas qual será a opinião dos utilizadores?
Irão estes algum dia tirar partido de todas estas funcionalidades?
Qual a compatibilidade entre um sistema tão complexo como um portal vs sistemas de produção em massa em que o objectivo passa por uma rápida,produtiva e continua introdução de dados?
O que acham?

Fiddler

Boa noite!
It's been a while!
Tinha saudades de escrever aqui no blog portanto vou tentar voltar à carga.

Actualmente estou a tentar optimizar uma página web do websphere portal e tem sido uma luta consegui-lo.
Assim sendo, aconselho a todos os web designers/programadores web, que começem a pensar no assunto performance desde a 1º linha de código digitada.

Para terem uma ideia, sem as devidas caches ligadas e sem que o código tenha qualquer optimização consigo ter páginas com 2MB de informação (imagens, CSS, JS, HTML e outros).

Para quem está com o mesmo problema que eu, aconselho a utilização de uma ferramenta de nome Fiddler juntamente com a extensão nExpert. Isto permite fazer debug ao trafego que circula na rede (HTTP e outros) ajudando a optimizar a cache de recursos e tamanhos das páginas.