Um aplicativo web on-line tem muitas vantagens e desvantagens – \u00e9 claro – Eu recomendo mesmo assim o desenvolvimento de aplicativos web.<\/p>\n
Todavia, h\u00e1 uma desvantagem que \u00e9 capaz de cortar o f\u00f4lego: a queda da internet. A internet tem uma caracter\u00edstica not\u00e1vel firmemente alicer\u00e7ada na Lei geral de Murphy que quando voc\u00ea n\u00e3o precisa dela, seus filhos a utilizam na boa, mas quando voc\u00ea precisa dela, ela n\u00e3o funciona ou o faz a ritmo de tartaruga ajudando bicho pregui\u00e7a.<\/p>\n
Uma das solu\u00e7\u00f5es pode ser desenvolver um Chrome App<\/a>. Uma das vantagens \u00e9 que toda a interface do usu\u00e1rio j\u00e1 est\u00e1 carregada do lado do cliente. Outra \u00e9 que voc\u00ea pode armazenar dados localmente com \u00a0o que o uso da sua magra largura de banda (sempre \u00e9) \u00e9 melhor utilizada.<\/p>\n Obviamente que isso nos leva a outro conjunto de desvantagens e vantagens que podem ser motivo de um outro artigo mas que – com certeza – n\u00e3o \u00e9 o foco deste. Baste apenas dizer que quase tudo o que voc\u00ea (bem) aprendeu de programa\u00e7\u00e3o web on-line \u00e9 aplic\u00e1vel a um aplicativo Chrome App assim como o \u00e9 para aplicativos de dispositivos m\u00f3veis usando Cordova, por exemplo.<\/p>\n O prop\u00f3sito deste artigo \u00e9 apenas mostrar como usar YeAPF para construir um Chrome App consultando um servi\u00e7o RESTful na web. Dividiremos este exercicio em duas grandes partes: 1) Criar o aplicativo 2) Mostrar os dados puxados da Web. Um outro artigo demonstrar\u00e1 como manter esses dados no banco de dados local. Por enquanto \u00e9 suficiente dizer que tudo o que vc j\u00e1 faz com ycomm.invoke()<\/em> se aplica ao ifc.plead()<\/em>. Invoke, Crave e Plead s\u00e3o as interfaces desenvolvidas na s\u00e9rie 0.8.x. Nosso projeto \u00e9 atingirmos uma interface \u00fanica de consulta de dados na serie 0.9.x com o que o programador apenas indicar\u00e1 se a url de requisi\u00e7\u00e3o e o m\u00e9todo utilizado (XMLHttpRequest, RESTful) e o YeAPF se encarregar\u00e1 do resto.<\/p>\n O banco de dados para os testes \u00e9 p\u00fablico e bem conhecido. Voc\u00ea pode fazer sua pr\u00f3pria copia assim:<\/p>\n Se seu aplicativo \u00e9 distribuido pela loja da Google, este passo n\u00e3o \u00e9 necess\u00e1rio. Mas se estiver desenvolvendo ou quer aprender como funciona, \u00e9 essencial.<\/p>\n Crie uma pasta (n\u00e3o precisa estar sob seu www) e despeje l\u00e1 o conte\u00fado da distribui\u00e7\u00e3o<\/a>.<\/p>\n O arquivo mais importante \u00e9 manifest.json<\/em>. \u00c9 nele que indicamos ao Chrome se se trata de um aplicativo, uma extens\u00e3o, os direitos que precisamos para rodar, etc. Dos valores que ali h\u00e1 dois requerem especial aten\u00e7\u00e3o: o permissions<\/strong><\/em> e o sandbox<\/em><\/strong>. No permissions<\/strong><\/em> especificamos que iremos usar as habilidades de armazenar dados do Chrome e no sanbox<\/strong><\/em>, lhe indicaremos que algumas p\u00e1ginas (no nosso caso apenas uma) dever\u00e1 rodar com certos privilegios (mas sem contato com o mundo exterior)<\/p>\n O segundo arquivo importante \u00e9 o ifc.html<\/em> que faz parte da distribui\u00e7\u00e3o do YeAPF na serie 0.8.x Simplificando quilos de documenta\u00e7\u00e3o<\/a> fica assim: a sua p\u00e1gina principal (sua tela) vai conseguir enxergar o mundo exterior (leia-se RESTful) utilizando a p\u00e1gina que est\u00e1 no sandbox e a sua sandbox n\u00e3o tem contato com o usu\u00e1rio.<\/p>\n O terceiro arquivo importante \u00e9 o background.js<\/em>. Estamos seguindo aqui a nomenclatura utilizada no site do Chrome App para que quando a leia (se \u00e9 que voc\u00ea tem tempo para isso) n\u00e3o fique fazendo tradu\u00e7\u00f5es na sua cabe\u00e7a; mas pode chamar este arquivo de qualquer nome que lhe pare\u00e7a correto. Observe neste arquivo duas coisas: a exist\u00eancia de uma vari\u00e1vel global chamada ySandboxFrame<\/strong> e a fun\u00e7\u00e3o de callback que preenche esta vari\u00e1vel com a janela que est\u00e1 sendo criada.<\/p>\n Se for sua primeira vez, abra chrome:\/\/flags<\/a> e procure por \u201cExperimental Extension APIs<\/em>\u201d. Verifique que esteja habilitada.<\/p>\n Uma vez feito isso, abra chrome:\/\/extensions\/<\/a><\/p>\n Confirme que o modo desenvolvedor esteja habilitado<\/p>\n Clique no bot\u00e3o \u201cLoad Unpacked extension<\/em>\u201d<\/p>\n Procure sua pasta (aquela na que voc\u00ea despejou o zip) e clique em \u201cOpen<\/em>\u201d H\u00e1 duas formas de rodar o aplicativo: Clicando em “launch<\/em>” no chrome:\/\/extensions ou ca\u00e7ando ele no men\u00fa iniciar do seu computador.<\/p>\n A estas alturas j\u00e1 deve estar feliz que nem cachorro com dois rabos e se nunca viu uma ChromeApp na vida e \u00e9 programador Desktop, deve de estar dando pulos de alegria.<\/p>\n Mas, por enquanto \u00e9 apenas uma telinha branca sem muita informa\u00e7\u00e3o, ent\u00e3o pare de dar chilique e volte para sua mesa e tente ficar quieto. Seus vizinhos e parentes v\u00e3o achar que voc\u00ea est\u00e1 louco e n\u00e3o est\u00e3o muito longe da verdade.<\/p>\n Como esses dados chegaram \u00e0 sua tela? Eles foram puxados on-line via RESTful. Especificamente a chamada que \u00e9 feita \u00e9 a seguinte:<\/p>\n Isso \u00e9 definido no departaments.js<\/em> assim:<\/p>\n Qual a gra\u00e7a disso tudo? Trazer apenas os dados do servidor.<\/p>\n Qual a dor de cabe\u00e7a? As mesmas de um aplicativo Desktop: toda vez que voc\u00ea atualiza o fonte, tem que atualizar seus clientes.<\/p>\n Qual a solu\u00e7\u00e3o? Voc\u00ea passar a distribuir seus aplicativos pelo Web Store da Google<\/p>\n Tem custo? N\u00e3o<\/p>\n Por que voc\u00ea n\u00e3o est\u00e1 fazendo isto ainda? N\u00e3o fa\u00e7o ideia. Culpa minha que n\u00e3o \u00e9.<\/p>\n <\/p>\n","protected":false},"excerpt":{"rendered":" Um aplicativo web on-line tem muitas vantagens e desvantagens – \u00e9 claro – Eu recomendo mesmo assim o desenvolvimento de aplicativos web. Todavia, h\u00e1 uma desvantagem que \u00e9 capaz de cortar o f\u00f4lego: a queda da internet. A internet tem uma caracter\u00edstica not\u00e1vel firmemente alicer\u00e7ada na Lei geral de Murphy que quando voc\u00ea n\u00e3o precisa […]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"spay_email":"","jetpack_publicize_message":"","jetpack_is_tweetstorm":false},"categories":[49,8],"tags":[],"jetpack_featured_media_url":"","jetpack_publicize_connections":[],"jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p5O6UV-4y","jetpack-related-posts":[{"id":455,"url":"http:\/\/www.yeapf.com\/wp\/?p=455","url_meta":{"origin":282,"position":0},"title":"Como instalar YeAPF?","date":"agosto 3, 2018","format":false,"excerpt":"Voc\u00ea n\u00e3o precisa instalar YeAPF. O que sim \u00e9 bom ter instalado s\u00e3o as ferramentas dele. Mas antes disso, \u00e9 bom deixar claro como funciona ele sem instalar. A todos os efeitos, vamos supor que voc\u00ea fez download da \u00faltima vers\u00e3o do YeAPF e o colocou na pasta ~\/Downloads\/YeAPF\/ e\u2026","rel":"","context":"Em "Yet Another PHP Framework"","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":167,"url":"http:\/\/www.yeapf.com\/wp\/?p=167","url_meta":{"origin":282,"position":1},"title":"Sem medo de servir","date":"outubro 7, 2014","format":false,"excerpt":"Muitas vezes me encontro ante a tarefa de ajudar outras pessoas a desenvolver a tarefa de desenvolver e vejo que as mesmas dificuldades se repetem de TI a TI. Me explico: Alguns programadores (desenvolvedores) chegam a um ponto da vida em que n\u00e3o mais conseguem desenvolver (levar adiante) o trabalho\u2026","rel":"","context":"Em "Opini\u00e3o"","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":91,"url":"http:\/\/www.yeapf.com\/wp\/?p=91","url_meta":{"origin":282,"position":2},"title":"Aplicativos mono p\u00e1gina","date":"mar\u00e7o 14, 2014","format":false,"excerpt":"Aplicativos que usam s\u00f3 uma p\u00e1gina t\u00eam um lugar assegurado no desenvolvimento de software atual e futuro. Bem feitos s\u00e3o elegantes e f\u00e1ceis de manter. Tamb\u00e9m s\u00e3o uma m\u00e3o na roda na hora de fazer um aplicativo que funcione tanto em desktop como em mobile. Para construirmos um aplicativo com\u2026","rel":"","context":"Em "Desenvolvimento"","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":181,"url":"http:\/\/www.yeapf.com\/wp\/?p=181","url_meta":{"origin":282,"position":3},"title":"Como utilizar um mesmo c\u00f3digo em Desktop, Mobile e Web","date":"dezembro 26, 2014","format":false,"excerpt":"O Nirvana do programador O nirvana de todo programador \u00e9 quase com certeza ter um \u00fanico c\u00f3digo para ser utilizado em quantas plataformas seja poss\u00edvel. Isso tem muita vantagens, entre elas n\u00e3o limitar o campo de escolha do cliente e se preocupar uma \u00fanica vez com o c\u00f3digo. Para eliminar\u2026","rel":"","context":"Em "Desenvolvimento"","img":{"alt_text":"","src":"https:\/\/i2.wp.com\/www.yeapf.com\/wp\/wp-content\/uploads\/2019\/05\/work-731198_1920.jpg?resize=350%2C200","width":350,"height":200},"classes":[]},{"id":318,"url":"http:\/\/www.yeapf.com\/wp\/?p=318","url_meta":{"origin":282,"position":4},"title":"Usando btSync para sincronizar e desenvolver em equipe.","date":"novembro 28, 2016","format":false,"excerpt":"Um dos grandes desafios do desenvolvimento grupal \u00e9 manter o c\u00f3digo sincronizado. Concordo, claro, com aqueles que utilizam as ferramentas git\u00a0para poder criar uma vers\u00e3o tempor\u00e1ria (e pessoal) do c\u00f3digo e depois se enganchar de novo com a \u00e1rvore principal. \u00c9 obvio que\u00a0git \u00e9 bem melhor que\u00a0svn por exemplo. Muit\u00edssimo\u2026","rel":"","context":"Em "Desenvolvimento"","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":334,"url":"http:\/\/www.yeapf.com\/wp\/?p=334","url_meta":{"origin":282,"position":5},"title":"Usando a bancada de desenvolvimento para criar p\u00e1ginas com YeAPF","date":"fevereiro 8, 2017","format":false,"excerpt":"Um aplicativo que vem na distribui\u00e7\u00e3o 0.8.x do YeAPF \u00e9 o workbench ou bancada. Este artigo foi escrito na vers\u00e3o 0.8.54 do YeAPF, ent\u00e3o se est\u00e1 com uma difernte, podem haver mudan\u00e7as. Workbench ou\u00a0bancada permite ao programador construir seu aplicativo como se fossem telas separadas e depois junt\u00e1-las para formar\u2026","rel":"","context":"Em "Yet Another PHP Framework"","img":{"alt_text":"","src":"https:\/\/i0.wp.com\/yeapf.com\/wp\/wp-content\/uploads\/2017\/02\/workbench-01-300x283.png?resize=350%2C200","width":350,"height":200},"classes":[]}],"_links":{"self":[{"href":"http:\/\/www.yeapf.com\/wp\/index.php?rest_route=\/wp\/v2\/posts\/282"}],"collection":[{"href":"http:\/\/www.yeapf.com\/wp\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.yeapf.com\/wp\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.yeapf.com\/wp\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/www.yeapf.com\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=282"}],"version-history":[{"count":3,"href":"http:\/\/www.yeapf.com\/wp\/index.php?rest_route=\/wp\/v2\/posts\/282\/revisions"}],"predecessor-version":[{"id":285,"href":"http:\/\/www.yeapf.com\/wp\/index.php?rest_route=\/wp\/v2\/posts\/282\/revisions\/285"}],"wp:attachment":[{"href":"http:\/\/www.yeapf.com\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=282"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.yeapf.com\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=282"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.yeapf.com\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=282"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}cd ~\/dev\r\ngit clone https:\/\/github.com\/datacharmer\/test_db.git<\/pre>\n
Criando o aplicativo<\/h2>\n
Instalando o aplicativo<\/h2>\n
\nSe tudo ocorreu bem, seu app estar\u00e1 na lista de extens\u00f5es (mesmo sendo um Chrome App) e no seu menu iniciar (Imagino que em Windows seja a mesma coisa, estou fazendo isto com Ubuntu)<\/p>\nRodando o aplicativo<\/h2>\n
A fonte de dados<\/h2>\n
http:\/\/www.inovacaosistemas.com.br\/employees\/rest.php?s=emp&a=getDepartamentList&callback=minhaFuncao<\/a><\/pre>\n
ifc.setConnParams(\"http:\/\/www.inovacaosistemas.com.br\/employees\/\");<\/pre>\n