Dart, webapps nativas e de maneira estruturada

31 respostas
J

Recentemente comecei alguns estudos em uma nova tecnologia da google chamada Dart. Uma linguagem orientada a objetos e com recursos funcionais concebida para criar aplicativos para a web. Dart oferece uma ide onde é possível depurar código, ter recursos como refatoração, code completion, etc..

O interessante dessa nova aposta é que as aplicações web executam nativamente dentro de uma vm chamada dart vm. É possível construir aplicações cliente e também servidor. O compilador de dart pode gerar código para dartvm ou javascript para fazer cross browser.

O código dart pode mapear quase totalmente o html5(ou totalmente) e css3.

Escrevi uma pequena aplicação de captura de vídeo em um dos estudos, quem que utiliza a webcam como fonte de mídia, aplica efeitos e o mais importante, "faz a captura" de um snapshot:

import 'dart:html';

var filtros = ['sepia', 'invert', 'contrast'];

bool hasCamSupport(){
  return MediaStream.supported;
}

void main() {
  //recupera componentes das tags html5 por meio do css selector #
  var cmdStart = query("#cmdStart");
  var cmdStop = query("#cmdStop");
  var cmdSnapshot = query("#cmdSnapshot");
  var cmdSepia = query("#cmdSepia");
  var cmdInvert = query("#cmdInvert");
  InputElement rgContrast = query("#rgContrast");
  InputElement rgBrilho = query("#rgBrilho");
  CanvasElement canvas = query("#screenshot");
  ImageElement imagem = query("#imagem");
  
  //esconde a tag da imagem
  imagem.hidden = true;
  
  //verifica se o browser oferece suporte para WebRTC
  if(hasCamSupport()){
    print("Api de vídeo suportada");
    VideoElement video = query("#vid");
    CanvasRenderingContext2D ctx = canvas.getContext("2d");
    
    window.navigator.getUserMedia(audio:false, video: true).then((stream) {
        video.src = Url.createObjectUrl(stream);
    
        //inicia preview
        cmdStart.onClick.listen((event){
          video.classes.removeAll(filtros);
          video.play();
          
        });
        
        //pausa preview
        cmdStop.onClick.listen((event){
          video.pause();
        });
        
        //adiciona o filtro sepia
        cmdSepia.onClick.listen((event){
          video.style.filter = "";
          video.classes.removeAll(filtros);
          video.classes.add(filtros[0]);
        });
        
        //adiciona o filtro invert
        cmdInvert.onClick.listen((event){
          video.style.filter = "";
          video.classes.removeAll(filtros);
          video.classes.add(filtros[1]);
        });
        
        rgContrast.onChange.listen((event){
          String val =  event.target.value;
          video.classes.removeAll(filtros);
          String contraste = "contrast(${val}%)";
          video.style.filter = contraste;  
          print(contraste);
        });
        
        rgBrilho.onChange.listen((event){
          String val =  event.target.value;
          video.classes.removeAll(filtros);
          String brilho = "brightness(${val}%)";
          video.style.filter = brilho;  
          print(brilho);
        });
        
        //captura snapshot do preview
        cmdSnapshot.onClick.listen((event){
          if(stream != null){
            ctx.drawImage(video, 0, 0, 300, 150);
            imagem.src = canvas.toDataUrl("image/webp");
          }
        });
        
    });
  }else{
    print("Api de vídeo não suportada");
    
  }
}

Dart é uma tecnologia recente mas já concebeu o google plus e vários webapps da chrome store.

Código fonte em anexo.



31 Respostas

H

Legal. [=

A google realmente gosta de jogar o código para javascript viu…

J

Hebert Coelho:
Legal. [=

A google realmente gosta de jogar o código para javascript viu…

Pelo livro que li dart é justamente a reestruturação da bagunça que é o javascript. Esse código acima pode compilar javascript ou gerar um executável. Quem puder fazer um teste verá que o desempenho da captura é incrível. Acho que consegue mais que 24 fps.

H

Tem como você colocar o código gerado aqui? Da página?

J

No source tem o html e o javascript que foi compilado. Você pode testar aí na sua casa com o chromium ou chrome, por enquanto os que suportam webrtc.
Vou expandir esse exemplo para pintar o vídeo em uma superfície 3d com webgl posteriormente.

Como fonte se você se interessar, pode começar a estudar aqui:

[youtube]https://www.youtube.com/watch?feature=player_embedded&v=5KlnlCq2M5Q[/youtube]

H

Estudar por agora tá complicado, mas olhei o código aqui.

O HTML fica limpo, o problema é se o javascript começar a dar pau em outros browsers. aí fica tenso.

Mas achei legal a idéia deles.

J

A página é um simples html5.

Dart consegue fazer a parte dinâmica usando os selectors do css3 e alterando o dom.

<!DOCTYPE html>

<html>
  <head>
    <meta charset="utf-8">
    <title>Teste</title>
    <link rel="stylesheet" href="teste.css">
  </head>
  <body>
    <h1>WEBRTC Snapshot estudo</h1>
    <img id="imagem" src="">
    
    <video id="vid"></video>
    <canvas id="screenshot"></canvas>
    <button id="cmdStart">Start</button>
    <button id="cmdStop">Stop</button>
    <button id="cmdSnapshot">Snapshot</button>
    <button id="cmdSepia">Sepia</button>
    <button id="cmdInvert">Invert</button>
    <input id="rgContrast" title="Contraste" alt="Contraste" type="range" max="200"/>
    <input id="rgBrilho" title="Brilho" alt="Brilho" type="range" max="100"/>
        
    <script type="application/dart" src="teste.dart"></script>
    <script src="packages/browser/dart.js"></script>
  </body>
</html>

Javascript gerado em anexo

H

Eu olhei aí, mas depois também olhei o dart.js e vi muuuuuito “if” lá. [=

N

É, engenheiros da Google trabalhando fortemente nisso.
Na apresentação dela, comentavam que seria a substituta da javascript para os browsers.

A linguagem é bem recente (foi lançada em 2011). Li comentários de que tinha como objetivo principal sistemas web alta escala.
Tinha alguns comparativos entre as linguagens mas não cheguei a ler/estudar a fundo sobre ela.

Só acho difícil remover parcialmente ou completamente o Javascript como a linguagem web nativa.
Ela está embutida a bastante tempo e tem sido evoluída constantemente. Também tem API´s muito interessantes como jQuery, que tem facilitado ainda mais o seu uso.
Mas enfim, veremos…

J

Existem outros arquivos que são usados pelo debugger. Eles fazem o mapeamento para a linguagem poder ser depurarada.

N

Uma “varrida” para baixo do tapete né? rs

R

É bem interessante, porém eu li em alguns lugares que essa tal de “Dart VM” não será suportada em browsers como o Mozilla Firefox. Isso ainda é verdade, ou já mudaram de ideia?

J

Uma “varrida” para baixo do tapete né? rs

O if pode implicar na falta de “legibilidade” mas não do desempenho. O objetivo é o compilador fazer o código mais otimizado possível até porque sua atenção é para o código da linguagem dart. Javascript vai ficar como assembly para web.

J

É verdade, mas aí você compila para javascript. :slight_smile:

J

Hebert Coelho:
Estudar por agora tá complicado, mas olhei o código aqui.

O HTML fica limpo, o problema é se o javascript começar a dar pau em outros browsers. aí fica tenso.

Mas achei legal a idéia deles.

Eu cheguei a testar até no rekonq, e no que ele suporta de tags, algumas aplicações rodam perfeitamente. No mais, opera, mozilla e webkits +(chrome, chromium, web, etc…) rodam perfeitamente.

H

juliocbq:
Hebert Coelho:
Estudar por agora tá complicado, mas olhei o código aqui.

O HTML fica limpo, o problema é se o javascript começar a dar pau em outros browsers. aí fica tenso.

Mas achei legal a idéia deles.

Eu cheguei a testar até no rekonq, e no que ele suporta de tags, algumas aplicações rodam perfeitamente. No mais, opera, mozilla e webkits +(chrome, chromium, web, etc…) rodam perfeitamente.

O x da questão é na hora que começarem com códigos complexos.

JSF é uma marvilha para mostrar um valor ou outro na tela, na hora que o sistema cresce os problemas aparecem. O mesmo para struts, spring mvc e assim vai.

O que eu fico pé atrás é justamente ser tudo em javascript e cada browser interpretar isso como quiser.

J

Hebert Coelho:
juliocbq:
Hebert Coelho:
Estudar por agora tá complicado, mas olhei o código aqui.

O HTML fica limpo, o problema é se o javascript começar a dar pau em outros browsers. aí fica tenso.

Mas achei legal a idéia deles.

Eu cheguei a testar até no rekonq, e no que ele suporta de tags, algumas aplicações rodam perfeitamente. No mais, opera, mozilla e webkits +(chrome, chromium, web, etc…) rodam perfeitamente.

O x da questão é na hora que começarem com códigos complexos.

JSF é uma marvilha para mostrar um valor ou outro na tela, na hora que o sistema cresce os problemas aparecem. O mesmo para struts, spring mvc e assim vai.

O que eu fico pé atrás é justamente ser tudo em javascript e cada browser interpretar isso como quiser.

Pelo menos o google plus tá firme e forte. Toda a infraestrutura dele é feita no dart. O jsf na minha humilde opinião e falando pela experiência que tenho nele é a pior tecnologia de web que já usei. O resultado é isso que você falou, código cheio de blobs e requisições desnecessárias no servidor. Com dart o processamento em sua maioria fica todo no cliente, que se comunica com o server somente para trafegar json. Então é muito rápido.

H

juliocbq:
Pelo menos o google plus tá firme e forte. Toda a infraestrutura dele é feita no dart. O jsf na minha humilde opinião e falando pela experiência que tenho nele é a pior tecnologia de web que já usei. O resultado é isso que você falou, código cheio de blobs e requisições desnecessárias no servidor. Com dart o processamento em sua maioria fica todo no cliente, que se comunica com o server somente para trafegar json. Então é muito rápido.
Pois é, toda ferramenta má utilizada pode ferrar tudo.

É a mesma coisa que dar um caviar para um cozinheiro (que nunca estudou sobre isso) fazer.
Por isso vejo muita gente falando do JSF coisa errada… (ñ sei se foi seu caso)

Do mesmo modo esse cara aí pode ser utilizado de modo errado, ou interpretado de modo errado pelo browser.
Vamos ver até onde vai. Diversas coisas surgiram para ficar e estão morrendo. [=

G

Por esses dias estava disponível um Refcardz da DZone sobre Dart. Para quem quiser, é só ir no site da DZone e se cadastrar. Eu já tinha a visto antes, mas ainda não parei para dar uma olhada melhor.

Para quem quiser, há a linguagem CoffeScript também que gera JavaScript, mas creio que a abordagem da Dart e CoffeScript sejam diferentes, já que a Coffe está mais para uma wrapper language para o JS.

J

Hebert Coelho:
juliocbq:
Pelo menos o google plus tá firme e forte. Toda a infraestrutura dele é feita no dart. O jsf na minha humilde opinião e falando pela experiência que tenho nele é a pior tecnologia de web que já usei. O resultado é isso que você falou, código cheio de blobs e requisições desnecessárias no servidor. Com dart o processamento em sua maioria fica todo no cliente, que se comunica com o server somente para trafegar json. Então é muito rápido.
Pois é, toda ferramenta má utilizada pode ferrar tudo.

É a mesma coisa que dar um caviar para um cozinheiro (que nunca estudou sobre isso) fazer.
Por isso vejo muita gente falando do JSF coisa errada… (ñ sei se foi seu caso)

Do mesmo modo esse cara aí pode ser utilizado de modo errado, ou interpretado de modo errado pelo browser.
Vamos ver até onde vai. Diversas coisas surgiram para ficar e estão morrendo. [=

Eu acabei tendo que portar a aplicação para extjs por causa do desempenho. O gargalo todo fica em requisições desnecessárias no servidor por causa de alguns componentes do jsf. Com o dart você edita o html5 na mão ou pode criá-lo dinâmicamente. Então é menos abstração e mais controle no código.

Portar o código deu trabalho muito grande mas aumentou em muito a qualidade da aplicação.

N

Mas na boa…falar de uma aplicação do Google criada por uma linguagem desenvolvida pelos engenheiros da Google, é complicado né?
Se eles mesmos não conseguirem desenvolver um sistema estável e “inteligente” com a linguagem dart, imagine a comunidade.

O interessante é ver os resultados que a comunidade vai conseguir alcançar usando o dar, se usarem.

J

nel:
Mas na boa…falar de uma aplicação do Google criada por uma linguagem desenvolvida pelos engenheiros da Google, é complicado né?
Se eles mesmos não conseguirem desenvolver um sistema estável e “inteligente” com a linguagem dart, imagine a comunidade.

O interessante é ver os resultados que a comunidade vai conseguir alcançar usando o dar, se usarem.

Devem usar para webapps com o chrome essencialmente. Como fizeram aquele cad para arquitetura na chrome store.

Dá uma olhada nessa app aqui:

N

Bem bacana o APP mesmo.

Enfim, é outra alternativa e isso é muito importante.
O ruim (péssimo) é se ficarmos a mercê de uma única tecnologia.

V

Eu lembro q quando lançaram o Dart ele virou motivo de piada pq um “Hello World” compilava em 17k de linhas de javascript

Não vai haver Dart nos outros browsers, e levantar uma VM javascript a cada page load parece ser uma péssima idéia

J

victorcosta:
Eu lembro q quando lançaram o Dart ele virou motivo de piada pq um “Hello World” compilava em 17k de linhas de javascript

Não vai haver Dart nos outros browsers, e levantar uma VM javascript a cada page load parece ser uma péssima idéia

Bom, o dart não funciona do jeito que você falou para começar.

Primeiro que a dartvm executa o código nativo do processador. Inclusive você pode escrever programas de linha d comando com ele e servidores:

dart.exe seuscript.dart

executa um programa nativo.

Segundo que o javascript no chrome também vira assembly com o v8. As chrome apps são nativas, por isso o desempenho é tão alto.

Aposto que você não consegue criar um código com uma qualidade tão boa quanto esse que eu postei o fonte aí com java que faça a mesma coisa. Faz o teste e me fala depois.

V

juliocbq:
victorcosta:
Eu lembro q quando lançaram o Dart ele virou motivo de piada pq um “Hello World” compilava em 17k de linhas de javascript

Não vai haver Dart nos outros browsers, e levantar uma VM javascript a cada page load parece ser uma péssima idéia

Bom, o dart não funciona do jeito que você falou para começar.

Primeiro que a dartvm executa o código nativo do processador. Inclusive você pode escrever programas de linha d comando com ele e servidores:

dart.exe seuscript.dart

executa um programa nativo.

Segundo que o javascript no chrome também vira assembly com o v8. As chrome apps são nativas, por isso o desempenho é tão alto.

Aposto que você não consegue criar um código com uma qualidade tão boa quanto esse que eu postei o fonte aí com java que faça a mesma coisa. Faz o teste e me fala depois.

Firefox, Safari, IE, Opera, nenhum deles tem a Dart VM, a opção é compilar Dart pra Javascript

O Dart ganhou críticas de todo mundo quando lançado, enquanto isso o CoffeeScript, feito por um única pessoa independente ganhou um público razoável (não que eu use)

Mas se lhe serve de consolo acabei de ver que o compilador que gerava essa aberração em um Hello World já foi depreciado, em favor de outro que nunca implementou a linguagem toda e foi depreciado também. O atual é o dart2js

J

victorcosta:
juliocbq:
victorcosta:
Eu lembro q quando lançaram o Dart ele virou motivo de piada pq um “Hello World” compilava em 17k de linhas de javascript

Não vai haver Dart nos outros browsers, e levantar uma VM javascript a cada page load parece ser uma péssima idéia

Bom, o dart não funciona do jeito que você falou para começar.

Primeiro que a dartvm executa o código nativo do processador. Inclusive você pode escrever programas de linha d comando com ele e servidores:

dart.exe seuscript.dart

executa um programa nativo.

Segundo que o javascript no chrome também vira assembly com o v8. As chrome apps são nativas, por isso o desempenho é tão alto.

Aposto que você não consegue criar um código com uma qualidade tão boa quanto esse que eu postei o fonte aí com java que faça a mesma coisa. Faz o teste e me fala depois.

Firefox, Safari, IE, Opera, nenhum deles tem a Dart VM, a opção é compilar Dart pra Javascript

O Dart ganhou críticas de todo mundo quando lançado, enquanto isso o CoffeeScript, feito por um única pessoa independente ganhou um público razoável (não que eu use)

Mas se lhe serve de consolo acabei de ver que o compilador que gerava essa aberração em um Hello World já foi depreciado, em favor de outro que nunca implementou a linguagem toda e foi depreciado também. O atual é o dart2js

O dart ganhou e ganha muitas críticas, mas levantou o google plus e a maioria das aplicações na chrome store. O dart2js gera javascript bem enxuto. O otimizador remove espaço e muitas coisas que nós não fazemos. Ele já adiciona código concorrente com isolates, adiciona informação de debug também. Para ficar com o código pequeno você precisa remover isso nas opções do ide antes de compilar.

V

Eu não consegui encontrar uma única referência do Google+ ter sido feito com o Dart

Todos indicam que ele é feito com Servlets no backend (+ o banco e sistemas de arquivos do Google) e Javascript + Closure Tools no cliente

Até o site do Google dá a entender isso também:

J

[quote=victorcosta]Eu não consegui encontrar uma única referência do Google+ ter sido feito com o Dart

Todos indicam que ele é feito com Servlets no backend (+ o banco e sistemas de arquivos do Google) e Javascript + Closure Tools no cliente

Até o site do Google dá a entender isso também:

Sim, é verdade, mas nas palestras do google developers você verá que todas essas aplicações serão portadas para dart por causa da facilidade de se usar a linguagem orientada a objetos e que pode compilar javascript, ao invés de usar um framework desenvolvido com essa linguagem.

gwt, clojure compiler e posteriormente o dart que ainda está beta(no m3)

https://developers.google.com/chrome/?hl=pt

E porque dart?

Porque a dartvm hoje é 50% mais rápida que o chrome v8. Logo o chrome usará dart vm

Aqui caso se pergunte porque “não” uma vm de bytecode:

*ps - acho que “ser portada” não é o termo adequado já que todas as aplicações rodam o “mesmo” javascript - Então acho que o correto é trocar o compilador(para cross browser). Mas a intenção é fazer tudo correr na dartvm quando utilizado o chrome.

H

Ou seja, você falou o tempo inteiro de google+ em dart mas ainda nem é…

De algo que pode vir a ser? -_-’’ triste confiar assim viu…

J

Hebert Coelho:
Ou seja, você falou o tempo inteiro de google+ em dart mas ainda nem é…

De algo que pode vir a ser? -_-’’ triste confiar assim viu…

Falei o que ouvi nas palestras e eles dizem que escrevem o plus e boa parte das suas aplicações com dart. Se usam clojure nos produtos também não faz diferença alguma. Além do mais a algum tempo as aplicações do google usam gwt também.

J

A maioria das aplicações do google são mais antigas até que o próprio gwt. Uma que me vem a mente e usa esse toolkit é o AdWords. Existem várias outras também.

achei essa lista na net:

http://www.quora.com/What-web-applications-use-Google-Web-Toolkit-(GWT)
algumas dessas aí também estão naquele link da closure.

http://wallet.google.com
https://www.google.com/flights/
https://www.google.com/cars
https://play.google.com/apps/pub
http://adwords.google.com/
http://bibale.com/
http://bookedin.net/
http://chrome.angrybirds.com/
http://drawmics.com/
http://engage.calibreapps.com/
http://engagiert-in-deutschland.de/
http://envolve.com/
http://evernote.com/
http://ghostnest.com/
http://netsas.com/
http://opennetworx.org/
http://orkut.com/
http://rstudio.org/
http://seesmic.com/app
http://www.squidjob.com/
http://tasktop.com/blog/tasktop/
http://vchub.com/
https://agreedo.com/
https://apps.facebook.com/friend
https://clarityaccounting.com/
https://google.com/webfonts/v2
http://www.pictarine.com/
http://bigli.st

Criado 25 de fevereiro de 2013
Ultima resposta 26 de fev. de 2013
Respostas 31
Participantes 6