Ítalo Queiroz

Apenas um programador Manolo!!!

quem é o manolo?

Ítalo Queiroz, há 5 anos atua na área de Tecnologia da Informação em empresas como Preceptor, Senado Federal, X25, MEC - Ministério da Educação e Grupo 954… about.me

Mongo, Mongol, Mongolão

- - falando sobre: MongoDB, NoSQL

O que é esse MongoDB?

É um banco de dados orientado a documentos, classificado como NoSQL e foi escrito em C++.

Ok!? Mas o que é um banco de dados orientado a documentos? É uma estrutura que tenta fugir do modelo relacional (MySQL, Postgress, Oracle) que durante muito tempo foi utilizado como bala de prata. Creio que o grande aumento das startups e suas constantes mudanças em seus produtos (App’s) fez com que essa estrutura relacional fosse deixada de lado e a opção por um modelo mais adaptável e flexivél colocada em pauta. :D

O MongoDB possui Collections que no modelo relacional seriam as Tabelas, possui Documents que no modelo relacional seriam as Row. Mas a grande diferença entre estes modelos é que a Collection não influencia em nada na estrutura de seus Documents.

Ex: Se você tivesse uma gaveta com o nome “Gaveta de contratos” nela teriamos apenas contratos guardados, pois você definiu um padrão para aquela gaveta e se assemelha com o modelo relacional. Agora pensando no modelo orientado a documentos nós teriamos uma “Gaveta” e dentro dela poderiamos guardar contratos, donuts, remédios e revólver :D. Fica critério do desenvolvedor sua forma de organização. E que pode ser muito bem alterada depois sem grande complicações, algo que no modelo relacional gera uma leve dor de cabeça.

Os Documents são representados por um conjunto de dados em formato JSON, mas estes documentos quando inseridos são convertidos para um formato mais rico chamado BSON (serialização, junção de Binário com JSON) que dá muito mais performace aos seus dados e as operações que os afetam (Find, Update, Delete, etc.).

O nome Mongo vem de “humongous” que significa gigantesco (ou grande, enorme, monstruoso). MongoDB é livre e de código aberto.

Quem usa?

Empresas como: Mailbox, LinkedIn, Parse, SourceForge, eBay, GitHub e mais

Instalação

Este post não tem o foco na instalação do MongoDB, este link vai ajudar nesta tarefa. Lembrando que o time do MongoDB sugere que seja usada a versão 64-bit.

Como criar uma Database?

Então, o MongoDB tem uma característica muito interessante, para usar uma Database não é necessário criá-la anteriormente, o método “use” já faz isso, claro, caso a Database não exista.

Mostrar todas as minhas databases
1
show dbs
Criar/Selecionar minha database
1
use mongol

Como criar uma Collection?

Assim como as Databases nossas collections (tabelas) não precisam ser criadas com um comando específico, na hora do insert o MongoDB já verifica a existência da collection e cria se não encontrar (coisa linda de GOD).

Insert

Podemos inserir nossos dados assim:

Insert poderoso
1
db.usuarios.insert({"nome": "Lloyd Christmas", "filme": "Dumb & Dumber", "ator": "Jim Carrey", "idade": 52});

Como podemos também criar variáveis e referenciá-las no insert

Insert poderoso com variavel
1
2
usuario = {"nome": "Harry Débi Dunne", "filme": "Dumb & Dumber", "ator": "Jeff Daniels", "idade": 59};
db.usuarios.insert(usuario);

Note que não criamos nossa collection de “usuarios”. Ao rodar este insert o MongoDB irá verificar se a coleção de “usuarios” existe, criará se necessário e adicionará os documentos passados para inserção.

Find

Find avassalador
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#busca todos os registros de users
db.usuarios.find();

#busca todos os registros de users 
#e retorna o json formatado
db.usuarios.find().pretty();

#busca todos os registros onde
#ator seja igual a Jim Carrey
db.usuarios.find({ator: "Jim Carrey"});

#busca todos os registros que
#tenham  no nome, parecido com o like no SQL
db.usuarios.find({nome: /Débi*/i});

#busca todos os registros que
#tenham Débi no nome, parecido com o like no SQL
db.usuarios.find({nome: /Débi*/i});
#definindo um objeto regex
db.usuarios.find({nome: {$regex: 'Débi*', $options: 'i'}});

#busca todos os registros de users
#filtrando as colunas que serão retornadas
db.usuarios.find(null, {nome: 1});

Olhando o código acima você pode perceber que temos um elemento chamado “$regex”, que são operadores de avaliação. Assim como o “$regex” existem outros operadores entre eles: $where e $text. Para conhecer mais sobre estes operadores de avaliação clique aqui.

Existem também operadores de comparação que nos permite realizar buscas com definições mais detalhadas. Ex: “>”, “>=”, “<” e “<=”.

Find humilhador
1
2
db.usuarios.find({idade: {$gte: 50}});
db.usuarios.find({idade: {$gte: 54}});

No site do MongoDB tem uma lista com todos os operadores de query, clique aqui e veja como melhorar suas consultas usando esta excelente ferramenta (momento jabá hehehehe)

Update

Update demolidor
1
2
3
4
5
6
7
#atualiza todos os usuários com 
#idade >= 54 anos para 50 anos
db.usuarios.update({idade: {$gte: 54}}, {$set: {idade: 50}});

#atualiza todos os usuários com 
#idade >= 50 anos para 20 anos
db.usuarios.update({idade: {$gte: 50}}, {$set: {idade: 20}}, {multi: true});

No primeiro exemplo acima de update ele altera a idade para 50 no primeiro documento que ele encontrar onde idade seja maior igual a 54. Já no segundo ele altera todos os documentos onde a idade seja maior igual a 50.

Deletar

Delete deletador :D
1
2
3
4
#remove os documentos onde ator seja igual a Jim Carrey
db.usuarios.remove({ator: "Jim Carrey"});
#remove todos os documentos da coleção
db.usuarios.remove();

Acho que ficou claro o papel do remove nas linhas acima neh? O papel dele é te dar um frio na barriga quando for executá-lo. :D

Mean IO

Para galera que está afim de desenvolver uma aplicação média de forma rápida e robusta existe o Mean IO que é uma solução full-stack para ajudar nesse desenvolvimento. Ela é formada por MongoDB, Express, AngularJS e Node.js. No mínimo, ao final desta implementação, terá conhecido ferramentas maravilhosas e ampliado seus conhecimentos.

App’s para gerenciar sua base MongoDB

Considerações

Atualmente tenho usado em minha startup serviços NoSQL conhecidos como BaaS, eles ajudam bastante na hora de fornecer SDK’s e abstrair trabalhos rotineiros como ACL, Confirmação de email, Cadastro de usuário clique aqui para saber mais.

Sei que existem várias ferramentas para definirmos nossa arquitetura e não acho que o MongoDB deva ser implementado em todos os seus projetos, mas com certeza você deverá levá-lo em consideração.

Pretendo montar um exemplo em PHP, quando estiver diponível deixo o link aqui abaixo.

#SWBSB - StartUp Weekend Brasília

- - falando sobre: Startup, Weekend, swbsb

swbsb

Neste último FDS (21/02 - 23/02) participei do StartUp Weekend Brasília. Uma experência totalmente diferente das que já tinha vivido. Sem contar o network e as mentorias que auxiliaram em muito na definição e execução da ideia. Para quem não conhece o SWBSB vai uma breve explicação:

O Startup Weekend é um evento que dura 54 horas ao longo de um fim de semana onde empreendedores, desenvolvedores, designers e entusiastas se unem para compartilhar idéias, formar equipes e criar startups. É o maior conjunto de eventos de startups do mundo, com edições realizadas em quase 500 cidades em todos os continentes.

Pronto, com a este texto você já deve imaginar o quão intenso é este evento. Escolhi uma startup que dava atenção para Food Trucks (Comidas de rua) aqui de Brasília. Acredito muito que precisamos valorizar nossa cultura regional e ter novas experiências sem precisar gastar milhões em franquias bem sucedidas.

Valide sua ideia

Validação

Um dos aprendizados mais relevantes foi: Se você tem uma ideia, não importa se você acha ela boa ou ruim, vá para rua e valide se realmente irá ter público (cliente). Com a validação da ideia você terá em mãos os indices de público alvo e de rentabilidade (o que agrada muito os investidores). Algo que um amigo me disse foi: Não existe ideia ruim, mas existe ideia mal executada.

Faça um pitch “matador”

Pitch

Outro grande aprendizado foi montar o ”Pitch”. Ficou claro que as pessoas podem ser manipuladas e envolvidas pelo apresentador da ideia, mas isso não é fácil, depende muito do seu roteiro e do levantamento do PROBLEMA que você está disposto a resolver. Mas isso só se ganha com treinamento e quero levar isso para a vida: Pessoas não compram aplicativos, compram sonhos/soluções.

Segue um passo-a-passo para auxiliar na hora de montar o pitch que me ajudaram muito:

  • Problema
  • Solução
  • Marketing
  • Concorrência
  • Vendas/Monetização
  • Realizações
  • Conclusão

Isso pode te ajudar a impactar os seus ouvintes e quem sabe tornar sua ideia um sucesso maior ainda.

jHandlebars - v1.0.0

- - falando sobre: Handlebars, Javascript, jHandlebars, jQuery

Ontem lancei a nova versão do plugin jHandlebars v1.0.0. Também realizei o cadastro do plugin no BOWER. Corrigi alguns bugs :P e adicionei melhorias.

Instalação:

$ bower install jhandlebars

Colocando para rodar:

Para utilizar o plugin corretamente você deve importar as libs da jQuery e Handlebars.

1
2
3
<script src="http://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/handlebars.js/1.1.2/handlebars.min.js"></script>
<script type="text/javascript" src="jquery.jhandlebars.js"></script>

Alguns exemplos:

  • Exemplo 1:
1
2
3
4
5
6
$(document).ready(function(){
    $("#element").handlebars({
      json: 'http://yourLocation.com.br/data.json',
      template:'<div class="entry"><h1>jHandlebars</h1><div class="body"></div></div>'
    });
});
  • Exemplo 2:
1
2
3
4
5
6
$(document).ready(function(){
    $("#element").handlebars({
      json:{title:'Meu título'},
      template:'http://yourLocation.com.br/template.html'
    });
});
  • Exemplo 3:
1
2
3
4
5
6
$(document).ready(function(){
    $("#element").handlebars({
      json:'http://yourLocation.com.br/data.json',
      template:'http://yourLocation.com.br/template.html'
    });
});
  • Exemplo 4:
1
2
3
4
5
6
$(document).ready(function(){
    $("#element").handlebars({
      json: {title:'Meu título'},
      template:'<div class="entry"><h1>jHandlebars</h1><div class="body"></div></div>'
    });
});

Ainda não conhece Handlebars? Então não perca tempo, adicione esta lib em suas leituras e veja o quanto sua vida mudará depois disso :D.

BaaS - Backend as a Service

- - falando sobre: BaaS, Kinvey, Parse, StackMob

Sempre quando iniciamos um app perdemos muito tempo com o desenvolvimento de componentes, integrações com redes sociais e modelagem de dados. Sendo que o mais importante é a interface (o que agrada os olhos) e a lógica (o que dá inteligência ao app). Mas como podemos desenvolver um app de forma fácil e ágil?

Simples, usando o BaaS (Backend as a service).

topFiveBaaS

O BaaS fornece um armazenamento em nuvens em uma base de dados NoSQL (MongoDB, DynamoDB, etc..), mas não é somente isso, na grande maioria temos SDK’s bem desenvolvidos com componentes robustos como:

  1. Notificações Push - Em alguns servidores é possível ter uma análise detalhada dos push enviados. Ex: Quem Recebeu, Quem Abriu.

  2. Integração com Redes Sociais - É possível adicionar login com facebook em poucas linhas.

  3. Serviços de armazenamento de arquivos - Muitos usam S3 da amazon para otimizar este serviço

  4. Geoqueries - É possível montar querys de localização de forma rápida. Ex: Você precisa encontrar pessoas no raio de 1km.

  5. ACL - Controle de acesso feita a nível de usuário, perfil, collection (abstração de tabelas NoSQL).

  6. Aplicativo Offline - Para app’s mobile essa funcionalidade é essencial, ele salva os registros localmente e em alguns SDK’s a sincronia é feita automaticamente assim que o app fique online.

  7. Gestão de usuários - Cadastro, recuperação de senha, login, envio de email. Tudo pronto.

mobileEcosystem

Atualmente na minha startup (com outros amigos) estamos desenvolvendo um app (Web e Mobile) e como sempre a economia nos gastos é primordial. Foi então que encontramos o parse.com (que em 1 ano de empresa foi comprada pelo Facebook por US$ 85 milhões). Depois encontramos também StackMob e o Kinvey sendo este o que mais nos agradou. O Kinvey cobra por usuário cadastrado no sistema, sendo os primeiros 1.000 usuários gratuitos.

O Kinvey tem um excelente tutorial. Faça um “Hello world!” e veja como isso pode simplificar seu dia-a-dia e auxiliar no desenvolvimento de protótipos, provas de conceito e tudo isso sem gastar nada.

Link’s

Instalando MongoDB No Ubuntu E Habilitando Extensão No ZendServer

- - falando sobre: MongoDB, PHP, Ubuntu, ZendServer

Pois bem, a instalação do MongoDB pra quem já tentou é um pouco chata e complicada no primeiro momento. Alguns erros ocorrem dificultando a instalação e podem desistimular alguns desenvolvedores a usarem.

Montei uma VM Ubuntu com Vagrant para ter histórico de todos os comandos necessários, então para começar abra o terminal e siga os passos abaixo:

  1. 1) Importe a chave(GPG key) 10gen, necessária para pacotes Ubuntu:
1
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv 7F0CEB10
  1. 2) Crie um arquivo em “/etc/apt/sources.list.d/10gen.list” adicionando o caminho do repositório:
1
deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen
  1. 3) Recarregue o apt-get
1
sudo apt-get update
  1. 4) Instale o pacote
1
sudo apt-get install mongodb-10gen
  1. 5) Instale o automake e autoconf, necessário para utilizar o phpize
1
2
sudo apt-get install automake
sudo apt-get install autoconf
  1. 6) Instale a extensão via pecl do ZendServer
1
sudo /usr/local/zend/bin/pecl install mongo
  1. 7) Abra o painel do ZendServer(http://localhost:10081/) e no caminho “Server Setup > Extensions” habilite a extensão do mongo clicando em “Turn on”

  1. 8) Reinicie o apache
1
sudo /usr/local/zend/bin/zendctl restart

Espero que após estes 8 passos você tenha o mongo instalado em seu Ubuntu e a extensão habilitada no PHP.

Link de referência: MongoDb on Ubuntu

Código PHP - Você Segue Algum Padrão?

- - falando sobre: Coding, PHP,, Standards,, php-fig

Quando inicia seu código, você pensa em algum padrão de formatação? Ou na definição do namespace da classe? Ou prefere seguir um padrão somente seu? Ou como muitos nem sabia que um código poderia ter um padrão definido e semelhante a grande projetos no mercado?

Eu sempre gostei de seguir padrões de código, pois isso ajuda a outros desenvolvedores (que seguirem esse padrão) se adaptar melhor em projetos diferentes. Por estes motivo nunca criei o meu próprio padrão, procuro encontrar um dentre a comunidade PHP ou ZendFramework. E durante esta busca encontrei a galera do PHP-Fig.

PHPFIG icon

O que é o PHP-Fig?

The idea behind the group is for project representatives to talk about the commonalities between our projects and find ways we can work together. Our main audience is each other, but we’re very aware that the rest of the PHP community is watching. If other folks want to adopt what we’re doing they are welcome to do so, but that is not the aim.

O que realmente isso significa?

Representantes de algumas frameworks PHP (ZendFramework, Symfony, CakePHP, etc..) e outros projetos que tem seu código escrito em PHP se juntam para debater alguns pontos semelhantes entre seus fontes. Assim tentam definir padrões para que estes projetos possam trabalhar em conjunto de forma fácil e rápida (plug-and-play code) e terem ao menos um padrão de formatação e definição de layout PHP parecidos.

Como funciona?

Todas os padrões são divididos entre PSR’s (Proposing a Standards Recommendation). Hoje o PHP-Fig tem 4 PSR’s. São elas:

  • PSR-0: Tem como objetivo definir padrões para definicões de classes e namespaces afim centralizar o autoload para todos os projetos que seguem este padrão ao invés de você ter que escrever um autoload para ZF e outro para o Doctrine.

  • PSR-1: Fornece regras, como as tags PHP permitidas em um código, Enconding, nome de métodos, etc.

  • PSR-2: Define os padrões de código, como formatar uma função, um if, um método com vários argumentos, etc.

  • PSR-3: Descreve uma interface para bibliotecas de LOG.


Segue o link para quem estiver interessado PHP-FIG.

E sigam a lista, pois este padrão está em constante evolução onde sugestões são bem-vindas.

Espero ter ajudado!!!! :D

Zend Framework Certification

- - falando sobre: “Zend, Certification,, Framework”, PHP,

Fala galera, depois de um tempo sem nenhum post venho por meio desta kkkkk informar que finalmente tirei minha certificação ZF (Zend Framework).

E por que deste post? Vou tentar falar sobre todo o processo e como realizei meus estudos.

Seguinte, hoje no mercado temos dois tipos de certificação PHP que são: PHP 5.3 e Zend Framework. As duas certificações são oferecidas pela Zend e são aplicadas pela Pearson VUE e suas autorizadas.

O local onde realizei a prova se chama Fóton, tem uma estrutura muito boa e a pessoa responsável por nos encaminhar ao teste foi super simpática. A prova foi toda em inglês, com questões de única escolha, múltipla escolha e campos de texto. O tempo para realizar a prova foi de 90 minutos, eu consegui terminar faltando 4 minutos, creio que o tempo é suficiente pois o que me atrapalhou foi o MEU INGLÊS.

Ao final da prova aparece na tela “Congratulations” se você conseguiu e não sei a mensagem que aparece caso contrário.

Foquei meus estudos nos seguintes documentos:

Então é isso galera! Boa sorte para quem irá fazer!

Vagrant

- - falando sobre: DevOps, Vagrant

Galera pensei em fazer este post com o intuito de compartilhar alguns link úteis para aqueles que estão, assim como eu, na luta :D para usar o Vagrant como seu provedor de ambiente. Mas se você não sabe o que é ou pra que “bulufas” serve o Vagrant, segue uma breve abordagem.

Sempre quando entramos em um novo projeto temos um ambiente específico para aquele projeto rodar, mas agora pense em um cenário em que você está envolvido com mais de 2 projetos.

Lista dos projetos

  1. O primeiro é um legado da empresa, feito em PHP 4.x
  2. O segundo é um projeto que será o carro chefe da empresa feito em PHP 5.2
  3. O terceiro é um freelancer que está sendo desenvolvido usando ZendFramework2 e PHP 5.4

Como preparar sua máquina para atender a esta demanda?

Este problema já me atrasou muito nas migrações de projetos e Vagrant veio TAMBÉM para resolver isso. Vagrant é uma ferramenta open source lálálálá… se você quiser saber mais sobre como foi criado clique aqui.

Entendendo como funciona

  • Nele você seleciona qual será o SO ou Box (CentOS 5.8 x86_64, Ubuntu precise 32, Debian Squeeze 64, etc) de sua máquina virtual. Este SO você precisará baixar somente uma vez, podendo reaproveitar sempre que necessário para gerar suas VM.

  • Você gera a VM informando qual box irá usar (Ex: vagrant init precise32). Lembrando que você deve dar init na pasta do projeto e a mesma será usada na sua vm como seu DOCUMENT_ROOT.

  • O Vagrant irá gerar um arquivo chamado Vagrantfile, e esse cara que faz toda a mágica. Lembre que o Vagrant irá criar uma máquina virtual para você customizar da forma como bem entender, mas você não precisará editar seus códigos dentro da VM. OPA????? Ficou confuso??? Mas é exatamente isso, a VM irá prover o ambiente para você rodar seu código. No Vagrantfile você pode fazer a seguinte configuração – config.vm.forward_port 80, 8080 – Aqui estou falando que a porta 80 da minha VM irá responder a porta 8080 do HOST (Meu computador). E para visualizar o código “tinindo” é só jogar no browser a URL “localhost:8080”.

Claro que não é só para isso que o Vagrant funciona, mas isso já quebra um galhão. Sem falar que depois de criada e configurada você pode compartilhar esta VM ou box com a sua equipe, forçando a galera a conversar na mesma língua independente do HOST (Mac, Windows, Linux, etc) de cada um.

Links úteis

  • Vagrant site
  • Listagem de boxes disponíveis.
  • Puppet. Com ele você pode criar módulos que para quando gerada sua VM ela já contenha algumas configurações ou pacotes instalados (Ex: ZendServer).
  • Puppet Forge. Repositório com módulos prontos para usar com Vagrant.
  • Chef. Que também serve para gerenciar sua VM, mas usando como linguagem ruby para a construção de seus módulos.

Plugin jQuery Para Handlebars

- - falando sobre: Handlebars, Plugin, Template, jQuery

Fala manolada.

Estive usando o Handlebars e percebi que eu realizava algumas ações repetitivas, que não facilitavam em nada o desenvolvimento dos templates. Daí surgiu a idéia de criar um plugin jQuery que fizesse o simples, tendo como parâmetro o caminho do template e o do json que seria recebido para a geração do conteúdo.

jHandlebars.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
;(function ( $, window, undefined ) {
    // Nome do plugin => 'handlebars';
    var pluginName = 'handlebars',
      document = window.document,
      dataJson = null,
      templateHandleBars = null,
      defaults = {
        json: {},
        template: ''
      };

    // Construtor do nosso Plugin;
    function Plugin(element, options) {
      this.element = element;
      this.options = $.extend({}, defaults, options) ;

      this._defaults = defaults;
      this._name = pluginName;

      this.init();
    }

    Plugin.prototype = {
      //Método init();
      init: function () {
        this.refresh();
      },
      //Método refresh() que cuida de instanciar o template e o json;
      //Depois monta e compila os dados para retornar o html gerado;
      refresh: function () {
        //Verifica se o template já foi instanciado e se é uma função;
        if (!templateHandleBars && !jQuery.isFunction(templateHandleBars)) {
          templateHandleBars = this._loadTemplate();
        }
        //Verifica se já está instanciado o json de dados;
        if (!dataJson || jQuery.isEmptyObject(dataJson)) {
          dataJson = this._loadJson();
        }
        //Só é possível montar o template se o "templateHandleBars" for uma função;
        if (jQuery.isFunction(templateHandleBars)) {
          var templateHtml = templateHandleBars(dataJson);
          $(this.element).html(templateHtml);
        } else {
          $(this.element).html('Ocorreu um erro no template handleBars, verifique o caminho informado.');
        }

      },
      //Método _loadTemplate() que carrega e instancia o template handlebars;
      _loadTemplate: function () {
        var template = this._ajax(this.options.template, 'html');
        if (jQuery.type(template) === 'string') {
          return Handlebars.compile(template);
        }
        return '';
      },
      //Método _loadJson() que carrega e instancia o json de dados;
      _loadJson: function () {
        //Se o json for um objeto ele não chama o AJAX;
        if (jQuery.isPlainObject(this.options.json)) {
          return this.options.json
        } else if (jQuery.type(this.options.json) === 'string') {
          return this._ajax(this.options.json, 'json');
        }
        return {};
      },
      //Método _ajax() responsável por realizar as requisições AJAX do plugin;
      _ajax: function (url, dataType) {
        var dataReturn = null;

        $.ajax({
          url: url,
          dataType: dataType,
          async: false,
          success: function (data) {
            if (data) {
              dataReturn = data;
            }
          }
        });

        return dataReturn;
      },
    };
    //Função que instancia nosso Plugin passando o element e os options informados;
    $.fn[pluginName] = function (options) {
      return this.each(function () {
        if (!$.data(this, 'plugin_' + pluginName)) {
          $.data(this, 'plugin_' + pluginName, new Plugin( this, options ));
        }
      });
    }

  }(jQuery, window));

Para usar é muito simples

exemplo.js
1
2
3
4
5
6
7
8
9
10
11
$('#element').handlebars({
  json: {pessoas:[{nome:'italo'}, {nome:'queiroz'}]},
  template: 'caminho_do_template_handlebars.hb'
});

//ou

$('#element').handlebars({
  json: 'caminho_do_json.json',
  template: 'caminho_do_template_handlebars.hb'
});

Caso queiram colaborar fiquem a vontade, segue o link do GitHub com um exemplo do uso.