4/7/2010 | Tags:JavaScript, lisp | Escrito por: Dirceu Pauka Jr.
Lisp foi na época de sua criação um grande avanço nas linguagens de computador. Diversos recursos disponíveis nas linguagens recentes foram criados na Lisp.
Uma característica que acho interessante no Lisp é a forma de representação de um programa ser do mesmo tipo de estrutura que é utilizado para os dados. Hoje em dia, toda linguagem possui uma certa analogia na forma de sua escrita (representação do programa) e a estrutura de dados (dados).
Jisp é uma implementação de Lisp em JavaScript. Para quem curte JS, é absurdamente interessante.
Eu realizei que JavaScript é tão parecido com Lisp que poderia ser fácil escrever um Lisp baseado em JavaScript que utiliza o parser de JavaScript do navegador em vez de escrever meu próprio parser. Brian Morearty, criador do Jisp.
PubNub é um serviço que facilita a criação de aplicativos que atualizam constantemente os dados. Além de ofecer infra-estrutura “na cloud” eles oferecem um “client” JavaScript que utiliza de todas capacidades possíveis para entregar os dados rapidamente e com menos overhead.
Se o usuário suportar, até Web Sockets será utilizado.
13/6/2010 | Tags:http, JavaScript | Escrito por: Dirceu Pauka Jr.
Node.js é um framework server-side (server-side JavaScript) para produção de aplicativos web que precisam de comunicação de rede leve e alta concorrência. Chats e aplicativos em tempo real que fazem muitas requests ou mantêm a conexão aberta para carregar mais dados são exemplos de um bom uso para o poder do Node.js
Recentemente precisei mudar o tamanho de uma imagem antes de enviar para um webservice. Apesar de parecer meio estranho isso é possível graças a tag canvas.
A biblioteca Pixastic facilita não só o redimensionamento mas também incorpora várias outras técnicas utilizadas por editores de imagem. O projeto possui um editor online (muito bem) feito em cima da biblioteca onde é possível aplicar filtros e efeitos nas imagens.
Finalmente o Android ficou pronto a ponto do Google anunciar publicamente sua marca junto a HTC, fabricante dos aparelhos. Alguns destaques do NexusOne:
Search do Google por voz (GPS + voz, na verdade, o que possibilita você falar “pizza” para o telefone e ele te mostrar no Google Maps o caminho às pizzarias próximas).
Hardware e resolução de tela (800×480) para rodar jogos muito melhor que qualquer PSP e o marketplace para baixar legalmente jogos muito melhores até que jogos de PS2. Tudo pelo 3G.
Marketplace dos modelos anteriores da HTC que rodam Android, com mais de 20 mil apps prontas para rodar no telefone do Google (Android 2.1).
Aparelho fino (1,19cm).
E o mais importante para os devs: SDK simples e publica.
Como eu disse existe um post explicando a YQL, porém aqui vai uma explicação rápida:
A YQL pode ser usada para buscar dados nas APIs do Yahoo (Flickr, Delicious, Placemaker, Maps, …), nas APIs do DataTables (Twitter, Amazon, GeoLocation, …) ou em qualquer outro documento da web (página HTML).
Para mostrar como a busca em um documento qualquer da web é feita, escrevi o seguinte código:
“JSON with Padding” é uma técnica que permite o carregamento assíncrono de informações de um domínio externo.
Toda biblioteca de JavaScript que se preze possui um método para esse procedimento.
jQuery: $.getJSON(url, function(data) { // callback });
MooTools: Request.JSON([options]);
A implementação desse tipo de requisição é bem simples.
Sabemos que o retorno de um arquivo chamado pela tag script é imediatamente executado pelo interpretador JavaScript.
Também sabemos que um objeto em JS pode ser representado por {} e pode conter pares de chave/valor. Ex: var Objeto = { chave: ‘valor’ };
Assim sendo, o que precisamos agora é que o conteúdo de um arquivo que vai ser requisitado utilizando a tag script seja uma chamada a nossa função previamente declarada.
Atente que ao contrario do xhttprequest o elemento HTML script não possui limitações quanto ao domínio que a requisição pode ser feita. Porém, para que a técnica funcione é necessário que o servidor requisitado retorne (em texto puro) uma chamada para nossa função.
Todos webservices que queiram trabalhar com JSON devem, então, aceitar um parâmetro para envio de callback.
Widget do Submarino
Fundamentadas as técnicas necessárias para a implementação vamos ao código.
// tentando duas querys diferentes. a estrutura do submarino pode ser alterada e isso evita quebrar
getJSON(query1);
}
function getJSON(query) {
// monta a requisição REST
var url = ‘http://query.yahooapis.com/v1/public/yql?q=’+
encodeURIComponent(query)+
‘&format=json’+
‘&callback=Submarino.recebe’;
// se tag head não existir, cria uma para evitar problemas
if (!document.getElementsByTagName(’head’)[0]) {
document.getElementsByTagName(’body’)[0].appendChild( document.createElement(’head’) );
}
// adiciona o elemento
Lembra? Isso é JavaScript, não Java. O código acima é tudo que você precisa para criar um plugin. Dentro da função, $this é a referencia ao objeto jQuery de onde o plugin foi chamado.
No exemplo, $this é um objeto com os elementos
e você pode fazer de tudo com eles. Como o plugin retorna $this, você pode continuar executando metodos do jQuery usando “Method Chaining”.
De volta a minha última questão. O que você possivelmente vai ganhar criando um plugin?
Alto nivel de reusabilidade
Muitos pedaços de JavaScript são geralmente reaproveitáveis, mas criando um plugin você passa ele para outro nível.
Configuração
Isso é ligado ao ponto anterior. O cenário sem plugin é ter um pedaço de código que você copia e cola modificando para seu proposito. Isso pode ficar muito mais fácil com plugins. Você pode escrever o seu para, por exemplo, aceitar algumas opções. Veja como fica agora:
Elegância
O código acima parece melhor que um script inteiro, não parece?
Agora é a hora de mostrar um exemplo real. Vamos fazer um script para tornar clicável cada linha da tabela.
Sempre que eu queria fazer as linhas clicáveis eu copiava esse código e mudava a URL ou o nome do parâmetro.
Com o plugin fica assim:
settings = $.extend(defaults, settings); // escreve em cima das opções default com as opções enviadas
$this = $(this);
É interessante para quem pretende fazer scripts de Greasemonkey utilizar a biblioteca jQuery para agilizar o desenvolvimento. Para isso o código comentado a seguir vai ajudar:
// Verifica se o jQuery pode ser usado
function GM_wait() {
if(typeof unsafeWindow.jQuery == ‘undefined’) { window.setTimeout(GM_wait,100); }
else { $ = unsafeWindow.jQuery; letsJQuery(); }
}
GM_wait();
function letsJQuery() {
// pode usar o $ aqui ;D
}
Obs: se você utiliza outro navegador existem outras opções para executar “user scripts”. Uma delas é o GreaseKit para WebKit (Safari).