Review SampaJS 2013

No dia 9 de março de 2013, rolou a terceira edição do sampa.js no auditório da PUC-SP.

As palestras foram estas abaixo:

Grade Oficial
8:30 9:00 CREDENCIAMENTO
9:00 9:50 Gabriel Pugliese – Hands-on: criando uma aplicação real-time com Meteor
10:00 10:50 Joao Neto – Extreme Performance
11:00 11:50 Ciro Nunes – Realtime com AngularJS e Socket IO
12:00 13:00 ALMOCO
13:00 13:50 Sergio Lopes – Dominando HTML5 offline com AppCache
14:00 14:50 Luciano Ramalho – Node.js: JavaScript com Google V8 no servidor
15:00 15:20 Dan Jesus Yeoman – Lightning talk – Turbinando seu ambiente de desenvolvimento com
15:30 16:00 COFFEE BREAK
16:00 16:50 Miller Medeiros - SURPRESA
17:00 17:50 Gustavo Pantuza – Memory Leak
18:00 18:30 SORTEIOS
19:00 6:00 Pinga.js

http://bonoevento.com/sampajs/

Já fui em diversos eventos, e alguns pontos são críticos em todos eles:

Localização, Credenciamento, Almoço, nível das palestras, internet e coffee break.

Ainda são 14h30, faltam 3 palestras, o coffee break e o sorteio final, mas já deu para notar que o evento está ótimo esse ano.

Localização

A PUC tá do lado da Rua da Consolação, descendo um pouco dali da Paulista. Tá perto do centro da cidade, perfeito. Ótimo acesso, e arredores com muitas possiblidades de por exemplo: almoçar.

 

Credenciamento

Cara, todo evento peca gravemente, ou dá um pequeno deslize nesse ponto. O do sampajs começou com 30 minutos de atraso, mas nada preocupante, foi rápido, entrada organizada, espaço para circulação, stand apenas no intervalo do almoço.

Almoço

Tá bem localizado foi fácil achar onde almoçar.

Nível das Palestras

Em geral muito boas, e com algumas excelentes, por exemplo a do Sergio Lopes da Caelum.
O cara é um monstro, manja muito, sabe palestrar, e organizou muito bem o conteúdo, apresentando de forma divertida, prática e adiantando mil problemas que ele teve quando foi desenvolver appcache.

Procuramos eventos exatamente por isso: ficar por dentro do que não conseguimos estudar enquanto estamos trabalhando, ou pegar dicas que apenas com experiência do dia-a-dia alguém consegue.

Aprender com a experiência dos palestrantes, que por algum motivo, tiveram a chance de implementar projetos em linguagens/tecnologias, que nós mesmos não tivemos tempo, ou interesse, é o que faz valer a pena ir em eventos.

O SampaJS acertou nesse quesito. Até agora, nenhuma palestra foi ruim. Nenhuma palestra deu sono, e nenhuma ficou aquém do esperado.

Internet

Ok, eu que fui cego e não vi o usuário e senha nas paredes laterais, mas a internet está suficientemente boa. Funcionando.

Muitos eventos ou não tem, ou tem tanta gente pendurada que fica inavegável.

 

Coffee Break

O @osuissa, prometeu 17 salgadinhos por cabeça, vamos ver!!

@edit: Realmente, todos muito bem escolhidos, e em ótima quantidade! Tinha até brigadeiro e beijinho! huahuahua esfihas, kibe, coxinha, bolinha de queijo.. cara.. perfeito o coffee.

Ele ainda disse no final do evento que sobraram 1000 salgadinhos! fartura! hehe. Ponto positivo nisto também.

 

De modo geral, parabéns aos organizadores. Ótimo evento, particularmente achei bem melhor que ano passado(onde teve alguns jabás chatos), o que está garantindo a minha presença no evento do ano que vem.

Nos veremos nos próximos eventos de FrontEnd/Web aqui em Sampa, e lá em POA(BrasilJS).

 

 

22. março 2013 by wbruno
Categories: Eventos | Leave a comment

Web Messaging API



Provavelmente em algum projeto você já foi obrigado a utilizar um iframe para carregar conteúdo de uma página externa, e desde então só era possível visualizar o conteúdo do mesmo, e ele funciona como uma sandbox onde não existe comunicação com sua aplicação.
Nas especificações do W3C o HTML5 possui algumas APIs para comunicação. Este post trata especificamente uma delas: a HTML5 Web Messaging API que resolve o problema descrito.

API

Essa é uma API simples, que resolve o problema de comunicação entre aplicações hospedadas em diferentes origens.
Antes da existência dessa API, não era possível essa comunicação devido a “política da mesma origem”, onde não é possivel uma programação client-side de uma origem acesse ou interfira em um documento de outra origem. Resumindo: um script hopedado em um lugar não consegue acessar o DOM de um documento de outra origem.
A origem pode ser 3 tipos: protocolo, host e porta.

Exemplo: digamos que a origem de minha aplicação seja o URL: http://openblog.com.br/mensagem.php

URL Mesma origem? Razão
http://openblog.com.br/recebe.php Sim -
http://openblog.com.br Sim -
https://openblog.com.br/auth.php Não Protocolo diferente
http://openblog.com.br:9000/recebe.php Não Porta Diferente
http://blog.openblog.com.br/recebe.php Não Host Diferente

Método window.postMessage()

Este método é o responsável por criar uma mensagem a ser enviada para um objeto window em uma origem diferente. O padrão do tipo da mensagem é uma string.
O método recebe três parâmetros: dois obrigatórios e um opcional.

 
  window.postMessage(mensagem, destino, [portas])
  //mensagem: string a ser enviada
  //destino: endereço a ser enviado
  //portas: array de portas válidas para o destino

O destino pode ser um URL absoluto, um caractere curinga * que servirá para qualquer destino ou um caractere barra / que adota a política da mesma origem (ou seja, apenas o mesmo host da página).

Evento message

A API prevê o evento message que é disparado no documento destino da mensagem. Quando disparado ele chama a seguinte função callback:

 
  if (window.addEventListener) {
      window.addEventListener('message', receberMsg, false);
  } else {
      window.attachEvent("onmessage", receberMsg);
  };
 
  function receberMsg(e){
      //faça algo com a mensagem
  }

A função receberMsg como o nome já diz, recebe um parâmetro que retorna um objeto-evento com as propriedades:

 
  e.data //text da mensagem
  e.origin //origem da mensagem
  e.lastEventId //string identificadora do último evento
  e.source //retorna WindowProxy do destino
  e.ports //array das portas enviadas

Mãos na massa

Vamos criar a situação mencionada no início do post, onde um documento de origem A tenta se comunicar com um documento de origem B.
A idéia é postar uma mensagem e ela aparecer no iframe. Vamos lá…

- Documento A (http://openblog.github.com/demos/html5_msg_origin)

 
  //Javascript
 
    window.onload = function(){
      var objIframe = document.getElementsByTagName('iframe')[0];
      var btnEnviar =  document.getElementsByTagName('button')[0];
 
      btnEnviar.onclick = function(){
        var textoMsg = document.getElementsByTagName('input')[0].value;
 
        if(textoMsg == ''){
          alert('Digite uma mensagem!');
        } else{
          objIframe.contentWindow.postMessage(textoMsg, 'http://labs.vagnersantana.com');
        }
      }
    }
  <!-- HTML -->
  <section>
    <p>
      <label>Mensagem: </label>
      <button type="button">Enviar mensagem</button>
    </p>
 
  </section>

- Documento B (http://labs.vagnersantana.com/html5_msg_iframe.html)

 
  //Javascript
 
    if(window.addEventListener){
      window.addEventListener('message', receberMsg, false);
    } else{
      window.attachEvent("onmessage", receberMsg);
    };
 
    function receberMsg(e){
      var msg;
      var containerMsg = document.getElementById('recebe-msg');
 
      if(e.origin == 'http://openblog.github.com'){
        msg = 'Mensagem recebida: <br>';
        msg += 'Msg: ' + e.data + '<br>';
        msg += 'Origem: ' + e.origin;
 
        containerMsg.innerHTML = msg;
      } else{
        containerMsg.innerHTML = 'Origem não autorizada!';
      }
    }
  //HTML
  <p></p>

O Web Messaging envia uma string, porém não precisa se desesperar e pensar em ir separando os dados por | ou ; pois felizmente existe o maravilhoso JSON que oferece a funcionalidade de se transformar em string com o método JSON.stringify e recuperá-lo usando o JSON.parse(), desta forma podemos trocar e manipular dados de maneira fácil somando o Web Messaging com JSON.

Can i use ?



Para ver a API em ação é só clicar no demo abaixo, sinta-se à vontade em inspecionar o código e também fazer um fork no github. Divirta-se.


Demo


Github

Você pode conferir mais posts sobre javascript, front-end e open source no .openBlog( )

Referências

01. março 2013 by Vagner Santana
Categories: Artigos | Tags: , , | 1 comment

Utilizando o Node.js em um Windows XP sem Administrador

Cenário: ambiente corporativo, máquinas Windows XP e usuário sem permissão de administração.

Observação: embora o cenário descrito seja o Windows XP, os passos para o Windows 7 são bem parecidos.

 

Instalação e Configuração

Versão Portavél - Node.js: 0.8.6 32-bits and 64-bits

Esta versão compactada possui 2 diretórios, contendo versões para Windows 32 e 64 bits.

Basta descompactar a respectiva versão compatível com seu Windows em um diretório que você possua direito de escrita.

Por exemplo: D:/dev/nodejs

Feito isso, para facilitar o uso do Node.js pelo terminal de comandos, crie uma variável de ambiente NODE_PATH e aponte para o diretório onde você descompactou o Node.js, então adicione o NODE_PATH ao final da variável PATH.

Caminho:

Iniciar > Configurações > Painel de Controle > Sistema

ou

Windows Key (tecla com simbolo do Windows) + Pause - Atalho para Sistema

Na janela do Sistema, selecione a aba: Avançado, no final de janela, clique no botão : “Variáveis de ambiente”

Feito isso o Node.js irá funcionar no terminal de comando através do comando: node

Observação: o npm (Node Packaged Modules), como está no mesmo diretório do node, também estará disponível no terminal de comando, porém será necessário algumas configurações para seu funcionamento correto.

O diretório dos pacotes globais do npm está apontando por padrão para o diretório de dados de aplicações do usuário no Windows, ou seja, em outro diretório, diferente do local onde está o Node.js e o NPM. Com isso, será necessário atualizar o diretório dos pacotes globais utilizados pelo npm.

Para isso via, terminal de comando utilize o comando:

npm config set prefix {Diretório do Node.js e NPM}

Feito isto, o Node.js e o NPM estão prontos para uso.

 

NPM vs. Proxy NTLM

Lembrando que estamos em um ambiente corporativo, neste temos um PROXY entre o computador e a internet, e normalmente as redes corporativas utilizam PROXY NTLM, o npm não conseguirá acessar o repositório na internet. Com isto, será necessário o uso de um recurso auxiliar para passar pelo PROXY.

Conforme GitHub NPM ISSUE 2119 o NPM não possui suporte para acessar o repositório na internet através de um Proxy NTLM. Segundo a dica disponível na própria issue, será necessário utilizar uma alternativa local para passar pelo Proxy NTLM.

Dentre as alternativas apresentadas, foi utilizado:

NtlmMaps – NTLM Authorization Proxy Server (Python) | GitHub Code

NtlmMaps - é um proxy local onde se configura o proxy da empresa, definindo as configurações de acesso.

 

Instalando e Configurando o Python 2.x

Como esta implementação é em Python, será necessário ter o Python 2.x no computador.

Download : Python 2.x.x Windows Installer

Durante o processo de instalação, indique o diretório onde você possua acesso para escrita.

Por exemplo: D:/dev/python

Feito isso, para facilitar o uso do python pelo terminal de comandos, crie uma variável de ambiente PYTHON_PATH e aponte para o diretório onde você descompactou o Node.js, então adicione o PYTHON_PATH ao final da variável PATH.

caminho:

Iniciar > Configurações > Painel de Controle > Sistema

ou

Windows Key (tecla com simbolo do Windows) + Pause - Atalho para Sistema

Na janela do Sistema, selecione a aba: Avançado, no final de janela, clique no botão : “Variáveis de ambiente”

 

Instalando e Configurando o NtlmMaps

Descompacte o arquivo do ntlmmaps em um diretório que possua acesso para escrita.

Por exemplo: D:/dev/ntlmmaps

Configurando o NtlmMaps:

  • edite o arquivo server.cfg, os items abaixo (mantive a ordem em que aparece no arquivo):

PARENT_PROXY : host do proxy da empresa, sem o “http://”

PARENT_PROXY_PORT : respectiva porta utilizada pelo proxy da empresa

NT_DOMAIN : nome do domínio de rede que a sua empresa utiliza

USER : seu login de rede

PASSWORD : sua senha de rede, porém caso não queria preencher é possível, então quando for executar a aplicação lhe será solicitado a sua senha da rede

NT_PART : o valor padrão deste atributo é 0, porém em algumas redes NTLM precisam dessa informação como no meu caso, então este atributo foi alterado para 1

  • edite o arquivo : runserver.bat

inicialmente ele possui um caminho predefinido do local de instalação do Python, porém como foi feito anteriormenteadicionado o Python ao PATH do Windows, basta alterar essa string por: python >> onde a linha ficará: python main.py

Uma vez configurado, execute o runserver.bat

 

NPM configurando o Proxy Local

Pelo terminal de comando execute os respectivos comandos para configurar o NPM.

npm config set proxy http://localhost:5865

npm config set registry "http://registry.npmjs.org/"

Aponta o NPM para o proxy local e altera a URL do repositório de pacotes do Node.js do https para o http.

Feito as respectivas configurações, agora o seu ambiente de desenvolvimento Node.js e NPM irá funcionar corretamente via linha de comando.

 

Ferramenta de desenvolvimento

Uma boa ferramenta que pode ser utilizada neste ambiente, é o Sublime Text 2, a qual possui versão portável.

19. novembro 2012 by erko.bridee
Categories: Node.js | Leave a comment

Node.js – JavaScript no Servidor [visão geral]

Breve apresentação: conversando com o Suissa sobre Node.js e JavaScript, ele me convidou (Erko Bridee) para participar e publicar aqui no JavascriptBrasil. Trabalho em ambientes corporativos com Java e Adobe Flex, porém estou começando a avaliar e procurar estratégias, para utilizar o tal do “HTML5″ nesse meio corporativo.

Atenção: esta publicação é uma visão geral e superficial sobre o assunto.

Node.js / Código no GitHub / Comunidade

O Node.js é uma plataforma construída sobre a engine de JavaScript do Google Chrome (V8), para construção de aplicações, escaláveis e de rápido desenvolvimento. Utiliza um modelo baseado em eventos e I/O não bloqueantes, o que torna o Node.js leve e eficiente, perfeito para aplicações com grande volume de informações e real-time, que são acessadas por diversos tipos de dispositívos.

 

Pessoalmente, conheci, ou mais precisamente, ouvi falar sobre o Node.js, que era JavaScript executando no servidor. Um caso de uso, a rede social Geekli.st (sobre), foi construída utilizando o Node.js.

Mas a minha motivação, que me fez utilizar o Node.js, foi a possibilidade de executar códigos JavaScript, sem a necessidade e utilizar um Web Browser, o que me facilitaria os testes e estudos da linguagem JavaScript.

 

Uma visão de alto nível sobre o que é o Node.js, segundo o que compreendi:

  1.  É o V8 (Google Chrome JavaScript Runtime), que executa o JavaScript
  2.  Possui uma camada de código C++ que realiza a comunicação entre o V8 e o hardware
  3. Disponibiliza um conjunto grande de bibliotecas para o desenvolvimento de aplicações (API Docs)

(Fonte)

 

Nas versões mais recentes do Node.js (v0.6+), disponíveis para download, nos pacotes de instalação, o Node.js vem acompanhado pelo NPM - Node Packaged Modules (comando via terminal : npm), código no GitHub.

O NPM é um gerenciador de dependências para aplicações em Node.js, os quais são instalados no sub-diretório /node_modules do diretório da aplicação, ou esta dependência pode ser instalada como global, por exemplo: npm install express -g

Atualmente o NPM conta com mais de 17 mil pacotes disponíveis.

 

Fato interessante sobre o Node.js no Windows

A Microsoft fez uma parceria com a Joyent na metade de 2011, tendo como objetivo portar o Node.js para Windows, com o máximo de performance. Sendo assim, os executável node.exe e funcionamento na plataforma Windows, Windows Server e Windows Azure (Getting Started), possuem o suporte da própria Microsoft. (fonte da informação)

Joyent – empresa que mantem e atualiza o código do Node.js no GitHub

 

Meus testes com Node.js : GitHub / lab-nodejs

 

Material interessante para quem está começando:

Links que tenho catalogado sobre Node.js : delicious.com/erko.bridee

 

Ferramenta de Desenvolvimento: estou utilizando o Sublime Text 2 e o plugin para Node.js

 

19. novembro 2012 by erko.bridee
Categories: Node.js | Leave a comment

Estou iniciando em javascript, por onde começo?

Caros amiguinhos já que tive que responder isso 3 vezes hoje, preferi criar logo esse artigo para ajudar nossos incautos programadores, apenas uma compilação de materiais, então vamos direto ao assunto:

Guias

https://developer.mozilla.org/en-US/docs/JavaScript/Guide
https://developer.mozilla.org/en-US/docs/JavaScript/A_re-introduction_to_JavaScript

Notícias

Javascript Semanal
BrazilJs

Sites

Javascript do Jeito Certo
Douglas Crockford
Addy Osmani
John Resig

Artigos - Orientação a Objetos

Entendendo Javascript Orientado a Objeto
O básico do Javascript Orientado a Objeto

Artigos - Herança

Protótipos em Javascript – O que você precisa saber
Herança de Protótipo em Javascript
Herança e a Cadeia de Protótipos

Livros

Padrões Javascript
Padrões Javascript Essenciais

Javascript Sustentável
Javascript As Boas Partes
Javascript Eloquente

 

ps1: a maioria dos materiais de blogs são em inglês então aconselho-o a aprender logo pois será fundamental para sua profissão.
ps2: não é uma compilação com TUDO, apenas o necessário para a galera que esta iniciando pesquisar e será atualizado quando necessário.
ps3: qualquer contribuição será bem vinda.

30. outubro 2012 by Suissa
Categories: Artigos | Tags: , , , , , , , , | 4 comments

Workshop AngularJs – FrontinMaceio

Ae pessoal estarei dando um workshop sobre AngularJs no FrontinMaceio, espero que muitos participem pois é uma ferramenta poderosíssima criada pelo Google para facilitar a vidas dos desenvolvedores.

http://frontinmaceio.com.br/#workshops

22. outubro 2012 by Suissa
Categories: Dicas, Eventos, Frameworks | Tags: , , , | Leave a comment

Debugando TypeScript no navegador

Introdução

Existe um recurso bem interessante implementado no Firefox e no Chrome (não sei ao certo quais outros navegadores) chamado Source Maps. Para entender do que se trata tenha em mente um arquivo javascript minificado. Para rastrear um bug no código deste arquivo por exemplo teríamos que usar a versão não minificada do mesmo. Uma vez encontrado o bug este seria corrigido e um novo arquivo minificado seria gerado. Um Source Map é um arquivo de mapeamento que faz um dê-para (no nosso caso) do arquivo minificado com o arquivo real. A partir deste mapeamento o browser consegue realizar o debug no arquivo original(não minificado) em bora a execução real esteja ocorrendo no arquivo minificado.

Até aqui isso não agregou muito por que basta referenciar o arquivo original como dito anteriormente. Uma vez que tenhamos o problema rastreado ou a feature implementada minificamos tudo novamente.

Como isso pode nos ajudar no Debug de código TypeScript?

TypeScrit assim como CoffeeScrit e Dart entre outros são pré-processadores que geram no final das contas código JavaScript. Como a maioria dos pré-processadores tenta melhorar a sintaxe do código na escrita de expressões lambda, iterações, classes, interfaces, heranças e etc, temos uma dissonância entre o código escrito em TypeScript por exemplo com o código JavaScript gerado no final.

Aqui entra em ação o Source Map. Com ele assim como podemos mapear um arquivo minificado com seu arquivo original, podemos também mapear um arquivo TypeScript original com seu código final gerado em JavaScript. Isso abre novas possibilidades de debug. Novas ferramentas de debug e refatoração podem ser criadas a partir deste recurso.

É aí que entra o assunto deste artigo. Vou mostrar como debugar TypeScript em um navegador com suporte a Source Maps. No meu caso vamos usar o Chrome.

Habilitando Source Map no Google Chrome

Para habilitar o recurso de source maps no Chrome basta acessar Settings e selecionar a caixa “Enable source maps”. Veja na imagem abaixo:

Valid XHTML

Feito isso estamos pronto para debugar nosso código.

Criando o nosso código de testes

Para exemplo vamos criar um arquivo com um código TypeScript muito simples. Salve o código abaixo em um arquivo chamado script.ts.

interface IPessoa{
    nome: string;
    sobreNome: string;
    nomeCompleto: () => string;
}

class Pessoa implements IPessoa {
    nome: string;
    
    sobreNome: string;

    nomeCompleto(): string {
        return "Nome: " + this.nome + " " + this.sobreNome;
    }
}

var pessoa = new Pessoa();
pessoa.nome = "Diullei";
pessoa.sobreNome = "Gomes";

var element = document.getElementById('content');

element.innerHTML = pessoa.nomeCompleto();

Agora crie um arquivo chamado index.html e coloque o código abaixo:

<!DOCTYPE HTML>
<html>
<head>
	<meta>
	<title></title>
</head>
<body>
	<div id="content"></div>
	<script type="text/javascript" src="script.js"></script>
</body>
</html>

Estes arquivos precisam estar no mesmo folder.

Source Maps para TypeScript

Tendo nosso pequeno projeto em mãos agora precisamos gerar nosso arquivo source map. Felizmente o time que trabalha no TypeScript fez um trabalho muito bom incluindo um gerador de source maps no compilador do TypeScript. Embora não seja documentado no help do utilitário de compilação do TypeScript para gerar o arquivo sourcemap basta executar a compilação da seguinte forma: tsc --sourcemap script.ts. Feito isso repare que um arquivo chamado script.js.map é gerado. Repare também que este arquivo é referenciado no final do arquivo script.js gerado pelo compilador como na linha abaixo:

//@ sourceMappingURL=script.js.map

Tendo compilado o arquivo script.ts agora basta abrir a página index.html no Chrome. Coloque um breakpoint no código para ver o debug do TypeScript em ação. Veja na imagem abaixo:

Valid XHTML

Conclusão

Como vimos o recurso Source Maps abre muitas possibilidades no tocante a rastreamento de código.

Um grande abraço e até a próxima!

17. outubro 2012 by diullei
Categories: TypeScript | Tags: , , , , | 2 comments

Introdução ao TypeScript

Introdução

A Microsoft surpreendeu muitos a pouco tempo lançando seu próprio pré-processador de JavaScript chamado TypeScript. Muitos saíram comparando o TypeScript com CofeeScript chamando o TypeScript de “CoffeeScript da Microsoft”. Se investigarmos mais a fundo veremos que se trata de uma proposta diferente do CoffeeScript a começar pela sintaxe. Não sou programador CoffeeScript (embora já tenha trabalhado com Coffee não me considero um especialista) e por trabalhar com C# achei a curva de aprendizado do TypeScript muito suave. TypeScript nos permite escrever código puramente JavaScript mesclando ou não o código JavaScript convencional com seu incrível poder de “tipagem” e sintaxe amigável para codificação OO (Criação de classes e interfaces, utilização de herança etc).

Não é minha intenção convencer você de que TypeScript é a melhor solução do mundo ou que é melhor do que CoffeeScript. Essas discussões no fim das contas não levam a nada. CoffeeScript tem seu espaço assim como o TypeScript. Se você já programou em alguma linguagem fortemente “tipada” como C#, Java ou C++ provavelmente você irá se sentir bem com os recursos fornecidas pelo TypeScript. Nem preciso dizer que se você programa em Python vai se sentir mais a vontade ao utilizar CoffeeScript do que com TypeScript :)

Iniciei um trabalho de tradução da documentação do TypeScript. Você pode acessar a tradução da página oficial do TypeScript aqui http://diullei.github.com/TypeScript-ptBR/index.html. A documentação estará sendo traduzida no repositório do SampaJS no github e estará sendo disponibilizada em breve.

Vamos a uma breve introdução sobre TypeScript. A intenção é apresentar alguns recursos básicos interessantes sobre a linguagem.

Instalando o TypeScript

O compilador do TypeScript é escrito em TypeScript e como o TypeScript compila pra JavaScript ele pode ser executado em qualquer ambiente JavaScript. Assim podemos rodar código TypeScript em qualquer navegador e inclusive no Node.js.

Se você está habituado com o uso do Visual Studio vai ficar feliz! rs… é possível instalar um plugin no Visual Studio 2012 para trabalhar com TypeScript. Se você costuma utilizar Node.js vai se sentir mais a vontade utilizando o TypeScript no Node.js.

Para ver como instalar o TypeScript no Node.js ou no Visual Studio acesse o link: http://diullei.github.com/TypeScript-ptBR/#Download.

Se você quiser seguir este artigo sem ter o trabalho de instalar o TypeScript você pode utilizar o TypeScript Playground. Trata-se de um compilador online onde podemos experimentar o TypeScript.

Direto ao código

Para entender como as coisas funcionam vamos criar um código JavaScript bem simples. Este código será alterado no decorrer deste artigo e aos poucos irei apresentar alguns recursos do TypeScript.

function saudacao(pessoa){
    return "Olá " + pessoa;
}

var alguem = "Diullei Gomes";

console.log(saudacao(alguem));

Crie um arquivo chamado saudacao.ts e salve com o código acima. Aqui repare que o arquivo TypeScript tem extensão “.ts”. Repare também que este código é um código JavaScript puro. Iremos alterar este código aos poucos.

Execute tsc saudacao.ts (Se você instalou a versão Node.js) e veja que será criado um arquivo saudacao.js. Sempre que compilamos um arquivo “.ts” o compilador do TypeScript gera um arquivo “.js”. Se você estiver utilizando o Visual Studio verá que o arquivo “.js” é criado automáticamente sempre que o projeto é compilado.

O JavaScript é uma linguagem sem tipagem e por isso podemos passar para a função “saudacao” um numero ou uma expressão como argumento. Embora tenhamos criado o código para receber uma string com um nome este poderá receber qualquer coisa como argumento. É claro que com uma validação extra conseguimos evitar que argumentos que não sejam do tipo string sejam passados para a função. No entanto vamos utilizar um recurso do TypeScript chamado de “Type anotation” para validar esta passagem de argumento. Altere o código da função “saudacao” como no código abaixo:

function saudacao(pessoa: string){
    return "Olá " + pessoa;
}

var alguem = "Diullei Gomes";

document.body.innerHTML = saudacao(alguem);

Agora veja que se tentarmos passar um array como argumento o compilador do TypeScrit irá acusar erro.

function saudacao(pessoa: string){
    return "Olá " + pessoa;
}

var alguem = [1, 2, 3, 4];

console.log(saudacao(alguem));

O que fizemos foi dizer ao TypeScript que nossa função “saudacao” recebe um argumento do tipo “string”. Node que mesmo tendo o código com erro o TypeScrit irá gerar o arquivo “.js”. O TypeScript sempre irá compilar o arquivo, no entanto sempre que existirem erros ele irá alertar estes erros a fim de informar que alguma coisa poderá não funcionar da forma esperada. Isso é feito para permitir integração com código JavaScript convencional.

Interfaces

Vamos avançar e introduzir o uso de interfaces. Veja o código abaixo:

interface Pessoa {
    primeiroNome: string;
    ultimoNome: string;
}

function saudacao(pessoa: Pessoa){
    return "Olá " + pessoa.primeiroNome + " " + pessoa.ultimoNome;
}

var alguem = { primeiroNome: "Diullei", sobreNome: "Moura", ultimoNome: "Gomes" };

console.log(saudacao(alguem));

No codigo acima criamos uma interface que define dois campos: primeiroNome e ultimoNome. Não vou me aprofundar no conceito de interface mais entenda que interfaces definem contratos. Repare que alteramos a assinatura da função “saudacao” para receber um argumento do tipo “Pessoa”. Agora o compilador do TypeScript irá exigir que o argumento da função obedeça o contrato definido na interface, ou seja, precisamos passar um objeto que possua uma propriedade chamada “primeiroNome” com um valor do tipo string e uma propriedade chamada “ultimoNome” com um valor do tipo string. Veja que o objeto “alguem” que estamos passando também possui uma propriedade chamada “sobreNome” que não interfere de maneira alguma no código já que este objeto obedece a interface. Teríamos um erro se omitíssemos um dos campos exigidos pela interface.

Classes

Vamos alterar o código acima agora e utilizar o conceito de classes. Veja o código:

class Pessoa {
    primeiroNome: string;
    ultimoNome: string;
}

function saudacao(pessoa: Pessoa){
    return "Olá " + pessoa.primeiroNome + " " + pessoa.ultimoNome;
}

var alguem = { primeiroNome: "Diullei", sobreNome: "Moura", ultimoNome: "Gomes" };

console.log(saudacao(alguem));

Se você tentar executar o código acima vai ter um erro. O erro ocorre por que diferente da interface quando usamos uma classe o objeto esperado pela função tem que seguir exatamente as caracteristicas definidas na classe ou ser um tipo que herde desta classe. Se tirarmos a propriedade sobreNome do objeto “alguem” o código irá compilar sem erro.

O que foi apresentado até aqui é bem simples mais introduz bem a intenção do TypeScript. Para saber mais acesse a documentação oficial. Estou trabalhando na tradução desta documentação e logo estarei divulgando o link de acesso.

O argumento “declare”

Uma caracteristica interessante do TypeScript e a possibilidade de declarar variáveis que não serão geradas no momento da compilação. Isso ajudar a definir objetos que irão existir no ambiente de execução mais que não existem código. Assim não teremos erro de compilação. Um exemplo seria a utilização do jquery “$” em um browser. Ao escrever o código abaixo o TypeScrit irá acusar erro por não termos declarado o objeto “document”.

$('body').append('teste');

Para evitar que tenhamos erro podemos declarar uma variável “fantasma” que só servirá para garantir a compilação. Esta variável não será gerada pelo compilador e por isso precisamos ter certeza de que neste nosso caso o código será executado em um ambiente no qual o jquery esteja referenciado. Veja o exemplo:

declare var $: any;

$('body').append('teste');

Tipos

o TypeScript mantém os tipos nativos do JavaScript: number, string, bool entre outros e introduz um tipo novo chamado any. O tipo any é utilizado para representar um valor JavaScript qualquer. Trata-se de um tipo dinâmico que não é validado pelo compilador do TypeScript, ou seja, se você tentar invocar uma função “xyz()” de um objeto “a” do tipo “any” o compilador não irá verificar se o objeto “a” possui realmente a função “xyz()”.

var a: any;

console.log(a.xyz());

NOTA: qualquer variável declarada sem um tipo definido será automaticamente classificada pelo TypeScript como uma variável do tipo “any”.

Funções

Com TypeScript podemos definir exatamente os argumentos e o retorno de uma função. Veja o código abaixo:

var minhaFuncao: (a: number, b: string) => string;

minhaFuncao = function(){ return ''; };

minhaFuncao(1, "arg2");

Vamos entender o código acima. Usando a notação de tipos do TypeScript definimos uma variável chamada “minhaFuncao” para receber como valor uma função que tenha 2 argumentos um numero e uma string e definimos o retorno desta função para ser do tipo string. Na segunda linda de código foi adicionado o valor “function(){ return ”; }” a esta variável.

Até aqui não temos nenhum erro de compilação por que não foram definidos os argumentos desta função e o TypeScript irá validar o tipo dos argumentos passados para a função apenas quando esta função for invocada.

Tente alterar o valor do retorno da função para um tipo diferente do tipo “string” ou alterar o tipo dos argumentos passados na terceira linha quando invocamos a função e verá que o TypeScript acusará erro. Ele vai tentar sempre garantir que a interface da função definida na primeira linha seja obedecida.

Esse recurso de tipagem de funções fornecido pelo TypeScript é muito interessante quando queremos definir o tipo de uma função de “callback” na assinatura de uma função qualquer. Veja abaixo um exemplo de uma função chamada “ajax” que define o tipo do segundo argumento como uma função de “callback” que tenha um argumento de qualquer tipo e retorne um valor do tipo string:

function ajax(url: string, callback: (data: any) => string) {
    //...
}

Conclusão

Apresentei apenas o básico sobre TypeScript. Se você gostou do que viu sugiro a leitura da documentação. Espero que tenham aproveitado o artigo.

Até a próxima!

14. outubro 2012 by diullei
Categories: Node.js, Pré-processadores, TypeScript | Tags: , , , | Leave a comment

JSPro.com – Only JavaScript … Always JavaScript

Hoje conheci um ótimo portal com diversos artigos sobre Javascript. Mais um para lista de fontes fidedignas.

site: http://jspro.com/

11. outubro 2012 by Suissa
Categories: Dicas | Tags: , , | Leave a comment

Como pesquisar CEP com jQuery

Pessoal hoje o Álvaro Guimarães publicou o webservice da Simp Software, que deixou publico,  de consulta à CEP com um exemplo muito simples de utilização com jQuery. Eis o exemplo:

$.ajax({
  url: 'http://cep.s1mp.net/40.310-000',
  dataType: 'jsonp',
  crossDomain: true,
  jsonpCallback: 'getCep',
  success: function(response){
    // ** //
  }
})
 
/* Resposta
 
{
  result: true,
  data: {
    id: "8334",
    cidade: "Salvador",
    logradouro: "do Pau Miúdo",
    bairro: "Pau Miúdo",
    cep: "40310-000",
    tp_logradouro: "Rua",
    uf: ba
  },
  message: ""
}
*/

Consulta de CEP com jQuery ;) http://cep.s1mp.net/

11. outubro 2012 by Suissa
Categories: Dicas | Tags: , , | Leave a comment

← Older posts