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.
segunda-feira, 28 de setembro de 2009
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
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.
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
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?
-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.
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.
terça-feira, 9 de setembro de 2008
Intenção na programação
Eis um link que achei interessante.
Embora refira bastante exemplos sobre Ruby, o aspecto genérico (e digamos... filosófico) sobre linguagens em si poderá ser um tópico de conversa interessante.
Programmer Intent or What you're not getting about Ruby and why it's the tits
Embora refira bastante exemplos sobre Ruby, o aspecto genérico (e digamos... filosófico) sobre linguagens em si poderá ser um tópico de conversa interessante.
Programmer Intent or What you're not getting about Ruby and why it's the tits
Etiquetas:
Conceitos,
Curiosidades,
Discussões
domingo, 9 de dezembro de 2007
O poder da fisica na informatica
Aqui está uma aplicação impressionante!
A meu ver é o facto da fisica estar tao bem aplicada que torna esta aplicação muito fixe.
A meu ver é o facto da fisica estar tao bem aplicada que torna esta aplicação muito fixe.
sexta-feira, 12 de outubro de 2007
Baterias de longa duração
Quantos de nós não gostariamos de ter um portátil totalmente autónomo por um dia?
Agora isso é possível não por um dia mas por 30 anos.
Cientistas do departamento de investigação da força aérea dos states descobriram forma de o conseguir.
Pelo que percebi eles não recorrem a energias nucleares nem nada que possa pôr em perigo o comum mortal :).
EU QUERO UM PORTÁTIL QUE NÃO PRECISE DE CARREGAR A BATERIA!!!!
Aqui vai mais detalhes sobre esta nova tecnologia
Betavoltaic
E fica aqui a questão... Será algum dia possivel alimentar veículos com este tipo de inovação?
Agora isso é possível não por um dia mas por 30 anos.
Cientistas do departamento de investigação da força aérea dos states descobriram forma de o conseguir.
Pelo que percebi eles não recorrem a energias nucleares nem nada que possa pôr em perigo o comum mortal :).
EU QUERO UM PORTÁTIL QUE NÃO PRECISE DE CARREGAR A BATERIA!!!!
Aqui vai mais detalhes sobre esta nova tecnologia
Betavoltaic
E fica aqui a questão... Será algum dia possivel alimentar veículos com este tipo de inovação?
ooVoo
Bem aqui estou eu com novidades do mundo da informática!
Já muitos de nós somos capazes de ter ouvido falar no ooVoo.
Para quem ainda não ouviu falar, o ooVoo é uma aplicação tipo messenger, mas com + suporte a video. Assim sendo, é possivel estarem várias pessoas numa mesma conversa de video. Mesmo a nivel de design e de inovação acho que supera o messsenger. Aqui vai o link onde poderão fazer download.
ooVoo
Depois quem quiser que me peça o contacto através do msn.
Já muitos de nós somos capazes de ter ouvido falar no ooVoo.
Para quem ainda não ouviu falar, o ooVoo é uma aplicação tipo messenger, mas com + suporte a video. Assim sendo, é possivel estarem várias pessoas numa mesma conversa de video. Mesmo a nivel de design e de inovação acho que supera o messsenger. Aqui vai o link onde poderão fazer download.
ooVoo
Depois quem quiser que me peça o contacto através do msn.
Subscrever:
Mensagens (Atom)