<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	
	xmlns:georss="http://www.georss.org/georss"
	xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#"
	>

<channel>
	<title>NodeJS Archives - Hiago Silva Souza</title>
	<atom:link href="https://www.hiago.me/category/node-js/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.hiago.me/category/node-js/</link>
	<description></description>
	<lastBuildDate>Wed, 28 Nov 2018 01:50:12 +0000</lastBuildDate>
	<language>pt-BR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.5.5</generator>

<image>
	<url>https://www.hiago.me/wp-content/uploads/2019/01/cropped-icon-hiagus-2-32x32.png</url>
	<title>NodeJS Archives - Hiago Silva Souza</title>
	<link>https://www.hiago.me/category/node-js/</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">147457425</site>	<item>
		<title>Error Tracking: Localizando bugs antes de seus clientes ?</title>
		<link>https://www.hiago.me/2018/10/05/error-tracking-localizando-bugs-antes-de-seus-clientes/</link>
					<comments>https://www.hiago.me/2018/10/05/error-tracking-localizando-bugs-antes-de-seus-clientes/#comments</comments>
		
		<dc:creator><![CDATA[Hiago Souza]]></dc:creator>
		<pubDate>Fri, 05 Oct 2018 11:00:09 +0000</pubDate>
				<category><![CDATA[Angular]]></category>
		<category><![CDATA[Infraestrutura]]></category>
		<category><![CDATA[Ionic]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[NodeJS]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Sentry]]></category>
		<category><![CDATA[bug]]></category>
		<category><![CDATA[error]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[qualidade]]></category>
		<category><![CDATA[sentry]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[tracking]]></category>
		<guid isPermaLink="false">https://www.hiago.me/?p=478</guid>

					<description><![CDATA[<p>Você tem problema em não conseguir simular ou prever os erros que acontecem com o seu software? Caso a resposta seja sim pare o que está fazendo e leia esse post agora! Vamos falar de uma ferramenta para error tracking que vai salvar sua vida e tudo isso com um custo 0. O que é &#8230;</p>
<p>The post <a href="https://www.hiago.me/2018/10/05/error-tracking-localizando-bugs-antes-de-seus-clientes/">Error Tracking: Localizando bugs antes de seus clientes ?</a> appeared first on <a href="https://www.hiago.me">Hiago Silva Souza</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Você tem problema em não conseguir simular ou prever os erros que acontecem com o seu software? Caso a resposta seja sim pare o que está fazendo e leia esse post agora! Vamos falar de uma ferramenta para error tracking que vai salvar sua vida e tudo isso com um custo 0.</p>
<h1>O que é Error Tracking?</h1>
<p><span style="display: inline !important; float: none; background-color: transparent; color: #333333; cursor: text; font-family: 'Source Sans Pro',Arial,sans-serif; font-size: 16px; font-style: normal; font-variant: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: left; text-decoration: none; text-indent: 0px; text-transform: none; -webkit-text-stroke-width: 0px; white-space: normal; word-spacing: 0px;">[wp_ad_camp_3]</span></p>
<p>Error Tracking é o ato de você rastrear erros. Aplicado na área de software o &#8220;Bug Tracking&#8221; é um aplicativo de software projetado para ajudar na <strong>garantia da qualidade de software</strong>. Ter um sistema de rastreamento de bugs é extremamente valioso no desenvolvimento de software, e eles são usados extensivamente por empresas que desenvolvem produtos de software.</p>
<p>Existem sistemas para gerir erros como o MantisBT mas hoje vamos falar de um carinha &#8220;diferente&#8221;. Apesar do MantisBT ser uma ferramenta muito popular todo o seu processo querendo ou não inicia com a iteração do usuário e nosso objetivo no post é descobrir bugs antes dos clientes reportarem ou pelo menos descobrir o máximo possível.</p>
<h1>O que eu ganho com isso?</h1>
<p>Podemos começar com tempo? Sim né, tempo é dinheiro! Se você diminui tempo para resolver problemas, automaticamente ganha tempo para criar novas soluções. Após isso acredito que á confiança de seus clientes, já pensou um cliente seu reportar um problema e você talvez já ter a solução? Ou melhor ainda, talvez ele nem precise reportar isso a você! Lindo né? Não podemos deixar de falar da qualidade de seu produto, pois a evolução vai ser constante.</p>
<p>Existem muitos ganhos poderia ficar aqui falando sobre todos eles, mas com os ganhos relatados acima já vale a pena saber mais sobre o assunto né?</p>
<h1>Onde eu posso aplicar?</h1>
<p>Praticamente em qualquer produto de software, seja aplicativos mobile, api&#8217;s, front-end, é escrito usando uma linguagem de programação suportada (acredite o suporte é grande) então você pode rastrear os erros fazendo uso da ferramenta. Eu já apliquei em aplicações escritas em PHP, Java, Ionic, FrontEnd&#8217;s HTML + Javascript&#8230;</p>
<h1>Qual o trabalho para implantar?</h1>
<p><span style="display: inline !important; float: none; background-color: transparent; color: #333333; cursor: text; font-family: 'Source Sans Pro',Arial,sans-serif; font-size: 16px; font-style: normal; font-variant: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: left; text-decoration: none; text-indent: 0px; text-transform: none; -webkit-text-stroke-width: 0px; white-space: normal; word-spacing: 0px;">[wp_ad_camp_2]</span></p>
<p>Posso dizer que foi uma das ferramentas mais rápidas que já implantei na vida! Menos de 15 minutos e uau ? estava rastreando tudo. Mas isso vai alem de rastrear os erros, então temos um trabalhinho em reanalisar nosso processo de software, como por exemplo. Você versiona sua ferramenta usando um VCS? Sua aplicação tem uma politica de versionamento como por exemplo o <a href="https://semver.org/" target="_blank" rel="noopener">Semantic Versioning</a>? Isso tudo é importante mas vamos deixar esses detalhes para um próximo post.</p>
<h1>Qual ferramenta é essa, fala logo Hiago ?!</h1>
<p><img decoding="async" class="alignnone size-medium wp-image-479" src="https://www.hiago.me/wp-content/uploads/2018/10/skydive-654822cb21db40a6b29907dc217cb209edf32a552938c0f44758c80b853e5037.svg" alt="" width="1" height="1" /> <img decoding="async" class=" wp-image-480 alignleft" src="https://www.hiago.me/wp-content/uploads/2018/10/sentry-dev-heroes-300x214.png" alt="" width="149" height="106" srcset="https://www.hiago.me/wp-content/uploads/2018/10/sentry-dev-heroes-300x214.png 300w, https://www.hiago.me/wp-content/uploads/2018/10/sentry-dev-heroes-768x549.png 768w, https://www.hiago.me/wp-content/uploads/2018/10/sentry-dev-heroes.png 817w" sizes="(max-width: 149px) 100vw, 149px" />Apresento a vocês o <a href="https://sentry.io/welcome/">Sentry</a> ele atende tudo o que mencionei de forma simples, clara e objetiva! O Sentry é uma plataforma de rastreamento de erro de código aberto que fornece lógica completa de aplicativos, contexto profundo e visibilidade em toda a pilha em tempo real. <em><strong>Pela primeira vez</strong></em>, os desenvolvedores podem corrigir erros em todos os estágios do ciclo de vida do produto, bem antes dos usuários encontrarem um problema.</p>
<h1></h1>
<h1>Vamos colocar a mão na massa?</h1>
<p>Então vamos ver isso funcionando né pessoal, muito papo e pouca ação ninguém gosta disso. Para o exemplo a seguir eu gostaria de deixar umas coisas claras.</p>
<ol>
<li>O Sentry é gratuito caso você queira baixar o sistema e hospedar ele por conta própria, mas ele oferece serviços em cloud e isso é pago (mas tem uma conta free com algumas limitações). Para mostrar o funcionamento, vou estar fazendo o uso da conta free deles.</li>
<li>Capturar informações do usuário sem seu consentimento &#8220;mesmo que o produto seja seu&#8221; pode causar problemas jurídicos, então deixe bem claro isso em sua política de privacidade e consulte o jurídico de sua empresa.</li>
</ol>
<p>Agora que já sabemos essas informações, vamos lá fazer um <a href="https://sentry.io/signup/" target="_blank" rel="noopener">registro no sentry</a> e criar uma conta grátis. Após preencher os dados ele já vai perguntar em qual linguagem seu projeto está escrito, pela popularidade e facilidade vou mostrar o exemplo para rastrear erros no javascript ok? Então podem selecionar o JavaScript colocar um nome para o seu projeto e clicar em &#8220;Create Project&#8221;.</p>
<p>Ao finalizar esse processo você vai receber as instruções para configurar seu projeto, no nosso caso é só incluir uma tag `script` em nosso index.html e logo após executar a função do sentry para capturar os erros, <em>acho bom lembrar que esses devem ser os primeiros scripts de sua aplicação a serem carregados</em>&#8230; E após isso clicar em All Done.</p>
<p><img fetchpriority="high" decoding="async" class="alignnone wp-image-484" src="https://www.hiago.me/wp-content/uploads/2018/10/sentry-error-info-300x173.png" alt="" width="409" height="236" srcset="https://www.hiago.me/wp-content/uploads/2018/10/sentry-error-info-300x173.png 300w, https://www.hiago.me/wp-content/uploads/2018/10/sentry-error-info-768x443.png 768w, https://www.hiago.me/wp-content/uploads/2018/10/sentry-error-info.png 812w" sizes="(max-width: 409px) 100vw, 409px" /></p>
<h2>Testando uma captura</h2>
<p><span style="display: inline !important; float: none; background-color: transparent; color: #333333; cursor: text; font-family: 'Source Sans Pro',Arial,sans-serif; font-size: 16px; font-style: normal; font-variant: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: left; text-decoration: none; text-indent: 0px; text-transform: none; -webkit-text-stroke-width: 0px; white-space: normal; word-spacing: 0px;">[wp_ad_camp_1]</span></p>
<p>Agora é simples, você pode gerar um problema &#8220;proposital&#8221; e ver como ele chega no Sentry. Vou deixar o código HTML abaixo para vocês fazerem seus testes, lembrem-se de mudar a linha 6 com suas credenciais.</p>
<pre class="brush: xml; title: ; notranslate">
&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;pt-br&quot;&gt;
&lt;head&gt;
	&lt;title&gt;Teste Sentry - Hiago.me&lt;/title&gt;
	&lt;script src=&quot;https://browser.sentry-cdn.com/4.0.6/bundle.min.js&quot; crossorigin=&quot;anonymous&quot;&gt;&lt;/script&gt;
	&lt;script&gt;Sentry.init({ dsn: 'INSIRA_SEU_DSN' });&lt;/script&gt;
	
	&lt;script&gt;
		var gerarErro = function () {
			var teste = null;
			teste.Acao();
		};
	&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
	&lt;h1&gt;Testando erro&lt;/h1&gt;
	&lt;button onclick=&quot;gerarErro()&quot;&gt;Clique para gerar um erro&lt;/button&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>Após clicarem no botão ele vai chamar um método dentro de um variável que é null e isso vai ser capturado e reportado para você ??. Conforme a imagem abaixo.</p>
<p><img loading="lazy" decoding="async" class="alignnone wp-image-485" src="https://www.hiago.me/wp-content/uploads/2018/10/erro-gerado-sentry-300x202.png" alt="" width="478" height="322" srcset="https://www.hiago.me/wp-content/uploads/2018/10/erro-gerado-sentry-300x202.png 300w, https://www.hiago.me/wp-content/uploads/2018/10/erro-gerado-sentry.png 761w" sizes="(max-width: 478px) 100vw, 478px" /></p>
<h1>Conclusão</h1>
<p>Com o Sentry é muito simples fazer o seu Error Tracking, ele é uma ferramenta enorme e tem muitas outras funcionalidades que não quis citar aqui no post. Essa foi uma apresentação de uma série de posts que vou fazer sobre o assunto. Espero que tenham gostado e quero que fiquem por dentro de outras dicas por isso curtam minha <a href="https://www.facebook.com/hiagodotme" target="_blank" rel="noopener">página no facebook</a> =)</p>
<p>The post <a href="https://www.hiago.me/2018/10/05/error-tracking-localizando-bugs-antes-de-seus-clientes/">Error Tracking: Localizando bugs antes de seus clientes ?</a> appeared first on <a href="https://www.hiago.me">Hiago Silva Souza</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.hiago.me/2018/10/05/error-tracking-localizando-bugs-antes-de-seus-clientes/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">478</post-id>	</item>
		<item>
		<title>Gulp + Ionic: Automatizando Release no Android</title>
		<link>https://www.hiago.me/2018/08/18/gulp-ionic-automatizando-release-no-android/</link>
					<comments>https://www.hiago.me/2018/08/18/gulp-ionic-automatizando-release-no-android/#comments</comments>
		
		<dc:creator><![CDATA[Hiago Souza]]></dc:creator>
		<pubDate>Sat, 18 Aug 2018 21:48:54 +0000</pubDate>
				<category><![CDATA[Ionic]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[NodeJS]]></category>
		<category><![CDATA[automatizando]]></category>
		<category><![CDATA[build]]></category>
		<category><![CDATA[gulp]]></category>
		<category><![CDATA[ionic]]></category>
		<guid isPermaLink="false">https://www.hiago.me/?p=368</guid>

					<description><![CDATA[<p>Todos que já finalizaram um projeto em ionic, tiveram que passar pelo &#8220;Publishing your app&#8221; e quando você tem que lançar suas atualizações constantemente fica chato ter que ficar repetindo esses procedimentos, por isso resolvi fazer esse post para mostrar como vocês podem automatizar não só esse, como qualquer outro processo usando o Gulp + &#8230;</p>
<p>The post <a href="https://www.hiago.me/2018/08/18/gulp-ionic-automatizando-release-no-android/">Gulp + Ionic: Automatizando Release no Android</a> appeared first on <a href="https://www.hiago.me">Hiago Silva Souza</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Todos que já finalizaram um projeto em ionic, tiveram que passar pelo &#8220;<a href="https://ionicframework.com/docs/v1/guide/publishing.html">Publishing your app</a>&#8221; e quando você tem que lançar suas atualizações constantemente fica chato ter que ficar repetindo esses procedimentos, por isso resolvi fazer esse post para mostrar como vocês podem automatizar não só esse, como qualquer outro processo usando o Gulp + Ionic.</p>
<h1>Gulp</h1>
<p>O Gulp é um kit de ferramentas para automatizar tarefas massantes/demoradas no fluxo de trabalho do desenvolvimento, com ele é possível automatizar essas tarefas de maneira simples e confiável.</p>
<h1>Preparando o ambiente</h1>
<p><span style="display: inline !important; float: none; background-color: transparent; color: #333333; cursor: text; font-family: 'Source Sans Pro',Arial,sans-serif; font-size: 16px; font-style: normal; font-variant: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: left; text-decoration: none; text-indent: 0px; text-transform: none; -webkit-text-stroke-width: 0px; white-space: normal; word-spacing: 0px;">[wp_ad_camp_3]</span></p>
<p>Primeiro você deve instalar em seu projeto ionic as dev-dependencies abaixo:</p>
<pre class="brush: plain; title: ; notranslate">

npm install --save-dev gulp run-sequence shelljs

</pre>
<h1>Criando sua KeyStore</h1>
<p>A keystore é única, ela é quem garante que você e somente você consiga fornecer uma atualização segura para seus usuários.</p>
<p>Como a KeyStore é gerada uma única vez, não vejo motivos para automatizar no processo do Gulp. A Keystore é o segundo passo do &#8220;<a href="https://ionicframework.com/docs/v1/guide/publishing.html">Publishing your app</a>&#8220;. Entre no diretório de sua aplicação e na mesma pasta de seu package.json, execute o comando abaixo informando os seus dados e criando uma senha que você vai usar depois na nossa tarefa do Gulp. Mantenha a mesma senha, tanto para o keystore quanto para o alias.</p>
<pre class="brush: plain; title: ; notranslate">
keytool -genkey -v -keystore chave-distribuicao.keystore -alias ID_DO_SEU_CONFIG_XML -keyalg RSA -keysize 2048 -validity 10000
</pre>
<p>Note que no comando acima tem a informação <em><strong>ID_DO_SEU_CONFIG_XML</strong></em> essa informação deve ser substituída pelo id que você colocou no seu config.xml, o padrão para os id do config.xml é <em><strong>br.com.seuappsite.app</strong></em>.</p>
<h1>Package.Json</h1>
<p><span style="display: inline !important; float: none; background-color: transparent; color: #333333; cursor: text; font-family: 'Source Sans Pro',Arial,sans-serif; font-size: 16px; font-style: normal; font-variant: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: left; text-decoration: none; text-indent: 0px; text-transform: none; -webkit-text-stroke-width: 0px; white-space: normal; word-spacing: 0px;">[wp_ad_camp_2]</span></p>
<p>Agora vamos editar nosso package.json, e vamos adicionar um novo valor dentro dos scripts. Crie uma nova chave com o nome &#8220;<strong>build:release</strong>&#8221; com o valor &#8220;<strong>gulp release</strong>&#8220;.</p>
<h1>Gulpfile</h1>
<p>Agora precisamos criar um arquivo chamado gulpfile.js no mesmo diretório do seu package.json ele é quem vai fazer todo o trabalho de executar o &#8220;ionic cordova build &#8211;prod &#8211;release&#8221;, e os outros passos para assinar e alinhar o seu aplicativo. E o resultado final vai ser o seu APK pronto para distribuição na pasta dist.</p>
<p>Conteúdo do Gulpfile.js:</p>
<pre class="brush: plain; title: ; notranslate">
const gulp = require('gulp'),
      fs = require('fs'),
      path = require('path'),
      runSequence = require('run-sequence'),
      shelljs = require('shelljs'),
      config = {
           pwd: &quot;SENHA_ESCOLHIDA_NA_CHAVE&quot;,
           alias: &quot;ID_DO_SEU_CONFIG_XML&quot;,
           keystore: &quot;chave-distribuicao.keystore&quot;
      };

gulp.task('release', function () {

    const apks = fs.readdirSync('./dist');
    for(apk of apks) {
        // verificando apks não assinados
        if(apk.indexOf('.apk') &gt; -1) {
            fs.unlinkSync(`./dist/${apk}`);
        }
    }

    if(config.pwd === 'keystore_password' || config.pwd === '') {
        console.error('Edite o gulpfile.js e informe a senha de sua keystore.');
        return shelljs.exit(1);
    }

    runSequence('compilar-release', 'assinar-apk', 'alinhar-apk', function () {

    });
});

/**
 * Compilo com a flag --prod e --release no ionic
 */
gulp.task('compilar-release', function () {
    const out = shelljs.exec('ionic cordova build android --release --prod --no-interactive', {silent:true}).stdout;
    const buildReturn = out.split('Built the following apk(s):');

    // verifico se o build deu certo
    if(buildReturn.length &gt; 1) {
        const apks = buildReturn&#x5B;1].replace(/\r/, '').replace(/\t/, '').split('\n'),
              realApks = &#x5B;];
        for(apk of apks) {
            // recupero os apks releases gerados
            if(apk.indexOf('release-unsigned.apk') &gt; -1) {
                realApks.push(apk);
            }
        }

        // verificando se a pasta dist existe.
        if(!fs.existsSync('./dist')) {
            fs.mkdirSync('./dist');
        }

        // movendo apks para a dist
        for(apk of realApks) {
            let splitter = &quot;/&quot;;
            if(apk.indexOf(&quot;\\&quot;) &gt; -1) {
                splitter = &quot;\\&quot;;
            }

            let fileName = apk.split(splitter);
            fileName = fileName&#x5B;fileName.length - 1];

            fs.copyFileSync(apk, './dist/' + fileName);
            fs.unlinkSync(apk);
        }
    } else {
        // erro no build
        shelljs.exit(1);
    }
});

/**
 * Assina o APK com release
 */
gulp.task('assinar-apk', function () {
    const apks = fs.readdirSync('./dist');
    for(apk of apks) {
        // verificando apks não assinados
        if(apk.indexOf('release-unsigned.apk') &gt; -1) {
            let signCommand = `jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore ${config.keystore} -storepass ${config.pwd} -keypass ${config.pwd} ./dist/${apk} ${config.alias}`;
            const signCommandResult = shelljs.exec(signCommand, {silent:true}).stdout;
            console.log(signCommandResult);
        }
    }
});

/**
 * Assina o APK com release
 */
gulp.task('alinhar-apk', function () {
    let bdtools = process.env.ANDROID_HOME + path.sep + 'build-tools' + path.sep + fs.readdirSync(process.env.ANDROID_HOME + path.sep + 'build-tools')&#x5B;0] + path.sep;
    console.log(bdtools);
    const apks = fs.readdirSync('./dist');
    for(apk of apks) {
        // verificando apks não assinados
        if(apk.indexOf('release-unsigned.apk') &gt; -1) {
            let alignCommand = `&quot;${bdtools}zipalign&quot; -v 4 ./dist/${apk} ./dist/${apk.replace('-release-unsigned.apk', '')}.apk`;
            const alignCommandResult = shelljs.exec(alignCommand, {silent:true}).stdout;
            fs.unlinkSync(`./dist/${apk}`);
            console.log(alignCommandResult);
        }
    }
});
</pre>
<h1>Testando</h1>
<p><span style="display: inline !important; float: none; background-color: transparent; color: #333333; cursor: text; font-family: 'Source Sans Pro',Arial,sans-serif; font-size: 16px; font-style: normal; font-variant: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: left; text-decoration: none; text-indent: 0px; text-transform: none; -webkit-text-stroke-width: 0px; white-space: normal; word-spacing: 0px;">[wp_ad_camp_1]</span></p>
<p>Agora para gerar e assinar seus apks basta você executar o comando abaixo:</p>
<pre class="brush: plain; title: ; notranslate">

npm run build:release

</pre>
<p>Obrigado pessoal, espero que o conteúdo seja útil para vocês.</p>
<p><strong>[27/11/2018] Edição:</strong> Adicionei na linha 32 do Gulpfile.js o parâmetro <strong>&#8211;no-interactive</strong> para corrigir o problema de travar a compilação pelo fato da CLI do ionic perguntar se você deseja fazer a atualização.</p>
<p>The post <a href="https://www.hiago.me/2018/08/18/gulp-ionic-automatizando-release-no-android/">Gulp + Ionic: Automatizando Release no Android</a> appeared first on <a href="https://www.hiago.me">Hiago Silva Souza</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.hiago.me/2018/08/18/gulp-ionic-automatizando-release-no-android/feed/</wfw:commentRss>
			<slash:comments>7</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">368</post-id>	</item>
		<item>
		<title>Depurar sua aplicação NestJS com o VSCode</title>
		<link>https://www.hiago.me/2018/06/05/depurar-sua-aplicacao-nestjs-com-o-vscode/</link>
					<comments>https://www.hiago.me/2018/06/05/depurar-sua-aplicacao-nestjs-com-o-vscode/#comments</comments>
		
		<dc:creator><![CDATA[Hiago Souza]]></dc:creator>
		<pubDate>Tue, 05 Jun 2018 23:51:53 +0000</pubDate>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[NodeJS]]></category>
		<category><![CDATA[TypeScript]]></category>
		<category><![CDATA[debug]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[nestjs]]></category>
		<category><![CDATA[type-script]]></category>
		<category><![CDATA[visual studio]]></category>
		<category><![CDATA[visual studio code]]></category>
		<category><![CDATA[vscode]]></category>
		<guid isPermaLink="false">https://www.hiago.me/?p=316</guid>

					<description><![CDATA[<p>No meu último post, apresentei a vocês o NestJS. Hoje vou mostrar para vocês como depurar sua aplicação NestJS com o VSCode. Configurando seu VSCode [wp_ad_camp_3] Primeiro abra seu projeto com o Visual Studio Code após isso vá até o menu de Debug (ctrl + shift + D). Segundo clique sobre a engrenagem ao lado &#8230;</p>
<p>The post <a href="https://www.hiago.me/2018/06/05/depurar-sua-aplicacao-nestjs-com-o-vscode/">Depurar sua aplicação NestJS com o VSCode</a> appeared first on <a href="https://www.hiago.me">Hiago Silva Souza</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>No meu <a href="https://www.hiago.me/2018/05/13/nestjs-uma-estrutura-nodejs-linda-e-trabalhada/" target="_blank" rel="noopener">último post</a>, apresentei a vocês o NestJS. Hoje vou mostrar para vocês como depurar sua aplicação NestJS com o VSCode.</p>
<h1>Configurando seu VSCode</h1>
<p>[wp_ad_camp_3]</p>
<ol>
<li>Primeiro abra seu projeto com o Visual Studio Code após isso vá até o menu de Debug (ctrl + shift + D).<img loading="lazy" decoding="async" class="alignnone size-medium wp-image-317" src="https://www.hiago.me/wp-content/uploads/2018/06/debug-vscode-300x238.png" alt="Imagem com o local do debug." width="300" height="238" srcset="https://www.hiago.me/wp-content/uploads/2018/06/debug-vscode-300x238.png 300w, https://www.hiago.me/wp-content/uploads/2018/06/debug-vscode.png 666w" sizes="(max-width: 300px) 100vw, 300px" /></li>
<li>Segundo clique sobre a engrenagem ao lado do combobox. <img loading="lazy" decoding="async" class="alignnone size-medium wp-image-318" src="https://www.hiago.me/wp-content/uploads/2018/06/debug-vscode-config-294x300.png" alt="Imagem demonstrando engrenagem para configuração do Debug" width="294" height="300" srcset="https://www.hiago.me/wp-content/uploads/2018/06/debug-vscode-config-294x300.png 294w, https://www.hiago.me/wp-content/uploads/2018/06/debug-vscode-config.png 556w" sizes="(max-width: 294px) 100vw, 294px" /></li>
<li>Terceiro clique sobre a opção NodeJS</li>
</ol>
<p>Após concluir o terceiro passo vai ser aberto um arquivo chamado <strong>launch.json (</strong>caso pergunte alguma outra informação selecione algum modelo do NodeJS) e substitua o conteúdo que tem nele pelo conteúdo abaixo:</p>
<pre class="brush: jscript; title: ; notranslate">
{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    &quot;version&quot;: &quot;0.2.0&quot;,
    &quot;configurations&quot;: &#x5B;
        {
            &quot;type&quot;: &quot;node&quot;,
            &quot;request&quot;: &quot;launch&quot;,
            &quot;name&quot;: &quot;Depurar Projeto&quot;,
            &quot;protocol&quot;: &quot;inspector&quot;,
            &quot;args&quot;: &#x5B;&quot;${workspaceRoot}\\src\\main.ts&quot;],
            &quot;cwd&quot;: &quot;${workspaceRoot}&quot;,
            &quot;runtimeArgs&quot;: &#x5B;
                &quot;-r&quot;,
                &quot;ts-node/register&quot;
            ],
            &quot;internalConsoleOptions&quot;: &quot;openOnSessionStart&quot;
        }
    ]
}
</pre>
<p>Agora é só salvar o conteúdo e seu VSCode já vai estar configurado para depurar aplicações NodeJS + TypeScript usando o Framework NestJS.</p>
<h1>Depurando a Aplicação</h1>
<p>[wp_ad_camp_2]</p>
<p>Agora você já pode colocar seus breakpoints em seu código (clicando no espaço antes do número da linha) pressionar a tecla F5 em seu teclado e ser feliz!</p>
<p>Observação: Caso não funcione a depuração, tente reiniciar o VSCode para ele ler as configuração de Debug feitas por você, comigo não foi necessário, mas pode ser que aconteça.</p>
<p><img loading="lazy" decoding="async" class="alignnone size-medium wp-image-328" src="https://www.hiago.me/wp-content/uploads/2018/06/debug-vscode-exemplo-300x200.png" alt="Imagem demonstando o resultado dos passos aqui executados." width="300" height="200" srcset="https://www.hiago.me/wp-content/uploads/2018/06/debug-vscode-exemplo-300x200.png 300w, https://www.hiago.me/wp-content/uploads/2018/06/debug-vscode-exemplo-768x513.png 768w, https://www.hiago.me/wp-content/uploads/2018/06/debug-vscode-exemplo.png 937w" sizes="(max-width: 300px) 100vw, 300px" /></p>
<h1>Conclusão</h1>
<p>[wp_ad_camp_1]</p>
<p>Com pequenos passos configuramos o ambiente para facilitar nossa vida no trabalho. Escrevi esse post, pois eu fiquei um bom tempo depurando as aplicações usando o <strong>chrome://inspect </strong>e o fato de ficar alternando entre as janelas, tanto para fazer alteração de código quanto para analisar uma informação me incomodava bastante.</p>
<p>&nbsp;</p>
<p>Obrigado e até mais 😉</p>
<p>&nbsp;</p>
<p>The post <a href="https://www.hiago.me/2018/06/05/depurar-sua-aplicacao-nestjs-com-o-vscode/">Depurar sua aplicação NestJS com o VSCode</a> appeared first on <a href="https://www.hiago.me">Hiago Silva Souza</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.hiago.me/2018/06/05/depurar-sua-aplicacao-nestjs-com-o-vscode/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">316</post-id>	</item>
		<item>
		<title>NestJS: Uma estrutura NodeJS linda e trabalhada</title>
		<link>https://www.hiago.me/2018/05/13/nestjs-uma-estrutura-nodejs-linda-e-trabalhada/</link>
					<comments>https://www.hiago.me/2018/05/13/nestjs-uma-estrutura-nodejs-linda-e-trabalhada/#comments</comments>
		
		<dc:creator><![CDATA[Hiago Souza]]></dc:creator>
		<pubDate>Sun, 13 May 2018 15:27:56 +0000</pubDate>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[NodeJS]]></category>
		<category><![CDATA[TypeScript]]></category>
		<category><![CDATA[arquitetura]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[nest]]></category>
		<category><![CDATA[nestjs]]></category>
		<category><![CDATA[nodejs]]></category>
		<guid isPermaLink="false">https://www.hiago.me/?p=297</guid>

					<description><![CDATA[<p>Antes de falar do NestJS vamos lembrar que nos últimos anos, graças ao Node.js, o JavaScript se tornou a “língua franca” da web para aplicativos front e backend, dando origem a projetos incríveis como Angular, React e Vue, que melhoram a produtividade do desenvolvedor e permitem a construção de aplicativos frontend testáveis e extensíveis. No &#8230;</p>
<p>The post <a href="https://www.hiago.me/2018/05/13/nestjs-uma-estrutura-nodejs-linda-e-trabalhada/">NestJS: Uma estrutura NodeJS linda e trabalhada</a> appeared first on <a href="https://www.hiago.me">Hiago Silva Souza</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Antes de falar do NestJS vamos lembrar que nos últimos anos, graças ao Node.js, o JavaScript se tornou a “língua franca” da web para aplicativos front e backend, dando origem a projetos incríveis como Angular, React e Vue, que melhoram a produtividade do desenvolvedor e permitem a construção de</span> aplicativos frontend testáveis e extensíveis. <span class="">No entanto, no lado do servidor, embora existam muitas bibliotecas, assistentes e ferramentas excelentes para o Node, nenhum deles resolve efetivamente o problema principal &#8211; a arquitetura.</p>
<p>O Nest visa fornecer uma arquitetura de aplicativo pronta para uso, que permite a criação sem esforço de aplicativos altamente testáveis, escalonáveis, fracamente acoplados e de fácil manutenção.</p>
<h1>O que é?</h1>
<p>[wp_ad_camp_3]</p>
<p>O NestJS é uma estrutura para criar aplicativos do lado do servidor <a href="https://nodejs.org" target="_blank" rel="noopener">Node.js </a>de forma eficiente e escalável. Ele usa JavaScript moderno, é construído com o <a href="https://www.typescriptlang.org/" target="_blank" rel="noopener">TypeScript</a> (porém preserva a compatibilidade com JavaScript puro) e combina elementos de OOP (Programação Orientada a Objetos), FP (Programação Funcional) e FRP (Programação Reativa Funcional).</p>
<p>Por trás de tudo, o NestJS faz uso do Express, permitindo o uso fácil dos inúmeros plugins de terceiros disponíveis.</p>
<h1>O Desenvolvimento</h1>
<p>Para começar a trabalhar com o NestJS é bem simples. Basta você clonar o repositório de um projeto em branco no Github com o modelo que deseja trabalhar (TypeScript ou JavaScript).</p>
<p>Lembrando que para trabalhar com o NestJS você precisa de possuir instalado em seu ambiente o NodeJS.</p>
<p><strong>Criando um novo projeto usando JavaScript puro com o GIT:</strong></p>
<pre class="brush: plain; title: ; notranslate">
$ git clone https://github.com/nestjs/javascript-starter.git meu-primeiro-projeto
$ cd meu-primeiro-projeto
$ npm install
$ npm run start
</pre>
<p><strong>Criando um novo projeto usando TypeScript com o GIT:</strong></p>
<pre class="brush: plain; title: ; notranslate">
$ git clone https://github.com/nestjs/typescript-starter.git meu-primeiro-projeto
$ cd meu-primeiro-projeto
$ npm install
$ npm run start
</pre>
<p><strong>Criando um projeto do zero usando NPM:</strong></p>
<pre class="brush: plain; title: ; notranslate">

$ npm i --save @nestjs/core @nestjs/common @nestjs/microservices @nestjs/websockets @nestjs/testing reflect-metadata rxjs

</pre>
<p>&nbsp;</p>
<h1>Estrutura</h1>
<p>[wp_ad_camp_2]</p>
<p>O NestJS conta com uma estrutura bem conhecida pelos desenvolvedores Java/.NET  ele tem implementado de forma bem simples recursos que são muito utilizados.</p>
<p>Segue abaixo a lista de recursos que o NestJS propõe em sua estrutura atual.</p>
<h2>Controllers</h2>
<p><span id="result_box" class="" lang="pt" tabindex="-1">A camada de Controllers é responsável por manipular solicitações recebidas e retornar uma resposta ao cliente, e todo a parte de &#8220;Rota&#8221; já é feito nessa mesma camada.</span></p>
<p><img loading="lazy" decoding="async" class="alignnone wp-image-300 size-full" src="https://www.hiago.me/wp-content/uploads/2018/05/Controllers_1.png" alt="Imagem mostrando os controllers do NestJS" width="970" height="420" srcset="https://www.hiago.me/wp-content/uploads/2018/05/Controllers_1.png 970w, https://www.hiago.me/wp-content/uploads/2018/05/Controllers_1-300x130.png 300w, https://www.hiago.me/wp-content/uploads/2018/05/Controllers_1-768x333.png 768w" sizes="(max-width: 970px) 100vw, 970px" /></p>
<h2>Providers</h2>
<p><span id="result_box" class="" lang="pt" tabindex="-1">Quase tudo pode ser considerado como um provedor &#8211; provider – service, repository, factory, helper e assim por diante. Todos eles podem injetar dependências através de construtor (Dependency Injection), ou seja, eles podem criar vários relacionamentos entre si. Mas, na verdade, um provedor nada mais é do que apenas uma classe simples anotada com um decorator @Injectable().</span><span id="result_box" class="" lang="pt" tabindex="-1"><span class=""><br />
</span></span></p>
<p><img loading="lazy" decoding="async" class="alignnone wp-image-301 size-full" src="https://www.hiago.me/wp-content/uploads/2018/05/Providers_1.png" alt="Imagem mostrando os providers do NestJS" width="970" height="518" srcset="https://www.hiago.me/wp-content/uploads/2018/05/Providers_1.png 970w, https://www.hiago.me/wp-content/uploads/2018/05/Providers_1-300x160.png 300w, https://www.hiago.me/wp-content/uploads/2018/05/Providers_1-768x410.png 768w" sizes="(max-width: 970px) 100vw, 970px" /></p>
<h2>Modules</h2>
<div id="gt-res-content">
<div id="gt-res-dir-ctr" class="trans-verified-button-small" dir="ltr"><span id="result_box" class="" lang="pt" tabindex="-1"><span class="">Um módulo é uma classe que faz uso de um decorator @Module().</span> <span class="">O decorator @Module() fornece metadados, que o Nest usa para organizar a estrutura da aplicação.</span></span></div>
<div dir="ltr"><img loading="lazy" decoding="async" class="alignnone wp-image-302 size-full" src="https://www.hiago.me/wp-content/uploads/2018/05/Modules_1.png" alt="Imagem mostrando os modules do NestJS" width="970" height="526" srcset="https://www.hiago.me/wp-content/uploads/2018/05/Modules_1.png 970w, https://www.hiago.me/wp-content/uploads/2018/05/Modules_1-300x163.png 300w, https://www.hiago.me/wp-content/uploads/2018/05/Modules_1-768x416.png 768w" sizes="(max-width: 970px) 100vw, 970px" /></div>
<h2 dir="ltr">Middlewares</h2>
<p><span id="result_box" class="" lang="pt" tabindex="-1">O middleware é uma função que é chamada antes do manipulador de rota. As funções de middleware têm acesso aos objetos de solicitação e resposta, e a próxima função de middleware no ciclo de solicitação-resposta do aplicativo. <span class="">A próxima função de middleware é geralmente denotada por uma variável denominada next.</span></span></p>
<p><img loading="lazy" decoding="async" class="alignnone wp-image-303 size-full" src="https://www.hiago.me/wp-content/uploads/2018/05/Middlewares_1.png" alt="Imagem mostrando os middlewares do NestJS" width="970" height="220" srcset="https://www.hiago.me/wp-content/uploads/2018/05/Middlewares_1.png 970w, https://www.hiago.me/wp-content/uploads/2018/05/Middlewares_1-300x68.png 300w, https://www.hiago.me/wp-content/uploads/2018/05/Middlewares_1-768x174.png 768w" sizes="(max-width: 970px) 100vw, 970px" /></p>
<h2>Exception filters</h2>
<p><span id="result_box" class="" lang="pt" tabindex="-1">A camada de exceções interna é responsável por manipular todas as exceções lançadas em todo o seu aplicativo. Quando uma exceção não tratada é detectada, o usuário final receberá uma resposta adequada.</span></p>
<p><img loading="lazy" decoding="async" class="alignnone wp-image-304 size-full" src="https://www.hiago.me/wp-content/uploads/2018/05/Filter_1.png" alt="Imagem mostrando os filters do NestJS" width="833" height="474" srcset="https://www.hiago.me/wp-content/uploads/2018/05/Filter_1.png 833w, https://www.hiago.me/wp-content/uploads/2018/05/Filter_1-300x171.png 300w, https://www.hiago.me/wp-content/uploads/2018/05/Filter_1-768x437.png 768w" sizes="(max-width: 833px) 100vw, 833px" /></p>
<h2>Pipes</h2>
<p><span id="result_box" class="" lang="pt" tabindex="-1">Um pipe é uma classe anotada com o decorator @Injectable(). O pipe deve implementar a interface PipeTransform.</span></p>
<p><img loading="lazy" decoding="async" class="alignnone wp-image-305 size-full" src="https://www.hiago.me/wp-content/uploads/2018/05/Pipe_1.png" alt="Imagem mostrando os pipes do NestJS" width="833" height="474" srcset="https://www.hiago.me/wp-content/uploads/2018/05/Pipe_1.png 833w, https://www.hiago.me/wp-content/uploads/2018/05/Pipe_1-300x171.png 300w, https://www.hiago.me/wp-content/uploads/2018/05/Pipe_1-768x437.png 768w" sizes="(max-width: 833px) 100vw, 833px" /></p>
<h2>Guards</h2>
<p><span id="result_box" class="" lang="pt" tabindex="-1"><span class="">Um guarda é uma classe anotada com o decorator @Injectable().</span> O guarda deve implementar a interface do CanActivate.</span></p>
<p><img loading="lazy" decoding="async" class="alignnone wp-image-306 size-full" src="https://www.hiago.me/wp-content/uploads/2018/05/Guards_1.png" alt="Imagem mostrando os guards do NestJS" width="906" height="269" srcset="https://www.hiago.me/wp-content/uploads/2018/05/Guards_1.png 906w, https://www.hiago.me/wp-content/uploads/2018/05/Guards_1-300x89.png 300w, https://www.hiago.me/wp-content/uploads/2018/05/Guards_1-768x228.png 768w" sizes="(max-width: 906px) 100vw, 906px" /></p>
<h2>Interceptors</h2>
<p><span id="result_box" class="" lang="pt" tabindex="-1"><span class="">Um interceptor é uma classe anotada com o decorator @Injectable().</span> <span class="">O interceptor deve implementar a interface NestInterceptor.</span></span></p>
<p><img loading="lazy" decoding="async" class="alignnone wp-image-307 size-full" src="https://www.hiago.me/wp-content/uploads/2018/05/Interceptors_1.png" alt="Imagem mostrando os interceptors do NestJS" width="1800" height="850" srcset="https://www.hiago.me/wp-content/uploads/2018/05/Interceptors_1.png 1800w, https://www.hiago.me/wp-content/uploads/2018/05/Interceptors_1-300x142.png 300w, https://www.hiago.me/wp-content/uploads/2018/05/Interceptors_1-768x363.png 768w, https://www.hiago.me/wp-content/uploads/2018/05/Interceptors_1-1024x484.png 1024w, https://www.hiago.me/wp-content/uploads/2018/05/Interceptors_1-520x245.png 520w, https://www.hiago.me/wp-content/uploads/2018/05/Interceptors_1-720x340.png 720w" sizes="(max-width: 1800px) 100vw, 1800px" /></p>
<h1>Conclusão</h1>
<p>[wp_ad_camp_1]</p>
<p>O NestJS é uma ótima alternativa de manter seu projeto organizado e escalável. Além de todos os seus recursos conforme apresentado acima ele também oferece suporte a diversos tipos de implementações não citadas como WebSockets, GraphQL e por ai vai.</p>
<p>Vamos lá, não vamos perder tempo! Entre agora na documentação oficial do Nest e deixe sua imaginação trabalhar.</p>
<p><a href="https://www.hiago.me/category/node-js/">+ posts sobre NodeJS</a></p>
</div>
<p>The post <a href="https://www.hiago.me/2018/05/13/nestjs-uma-estrutura-nodejs-linda-e-trabalhada/">NestJS: Uma estrutura NodeJS linda e trabalhada</a> appeared first on <a href="https://www.hiago.me">Hiago Silva Souza</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.hiago.me/2018/05/13/nestjs-uma-estrutura-nodejs-linda-e-trabalhada/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">297</post-id>	</item>
		<item>
		<title>Inspecionando sua página remotamente</title>
		<link>https://www.hiago.me/2017/06/01/inspecionando-sua-pagina-remotamente/</link>
					<comments>https://www.hiago.me/2017/06/01/inspecionando-sua-pagina-remotamente/#respond</comments>
		
		<dc:creator><![CDATA[Hiago Souza]]></dc:creator>
		<pubDate>Thu, 01 Jun 2017 15:12:28 +0000</pubDate>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[NodeJS]]></category>
		<category><![CDATA[debug]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[nodejs]]></category>
		<category><![CDATA[weinre]]></category>
		<guid isPermaLink="false">http://www.hiago.me/?p=186</guid>

					<description><![CDATA[<p>Olá! Seja bem vindo(a), a mais um post do meu blog. Você provavelmente, já precisou inspecionar sua página remotamente para fazer a análise de um problema de seu sistema web em um dispositivo móvel e já deve ter acontecido do problema não acontecer no seu navegador e persistir no dispositivo. Já pensou você inspecionando sua &#8230;</p>
<p>The post <a href="https://www.hiago.me/2017/06/01/inspecionando-sua-pagina-remotamente/">Inspecionando sua página remotamente</a> appeared first on <a href="https://www.hiago.me">Hiago Silva Souza</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Olá! Seja bem vindo(a), a mais um post do meu blog.</p>
<p>Você provavelmente, já precisou inspecionar sua página remotamente para fazer a análise de um problema de seu sistema web em um dispositivo móvel e já deve ter acontecido do problema não acontecer no seu navegador e persistir no dispositivo. Já pensou você inspecionando sua página remotamente? É isso que vou mostra para você no post de hoje <img src="https://s.w.org/images/core/emoji/15.0.3/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p>[wp_ad_camp_3]</p>
<p>Há algum tempo atrás uns amigos meus precisaram de resolver um caso assim, então eles vieram me perguntar se havia alguma ferramenta para fazer esse tipo de análise. Na época, eu indiquei para eles o uso do <strong>chrome://inspect </strong>e ele resolveu, porém tiveram que instalar drivers do android, habilitar depuração, aquela burocracia toda. Agora aconteceu o mesmo só que dessa vez é no Safari, e só no safari do iphone, como não tinha um MAC Book tive que ir a campo procurar alguma ferramenta para me ajudar, então encontrei o <strong>Weinre </strong>com essa ferramenta o modo de depurar tanto android quanto ios se tornou extremamente simples. E estou escrevendo esse post para mostrar a vocês como usar essa incrível ferramenta.</p>
<h1>Oque é Weinre?</h1>
<p>[wp_ad_camp_1]</p>
<p>Weinre é uma aplicação command-line escrita em NodeJS, ela cria um console virtual acessado via browser. Assim você pode continuar inspecionando sua página remotamente. Sua integração é muito simples, e seu uso é semelhante as ferramentas para desenvolvedores do firefox.</p>
<h1>Como usar?</h1>
<p>Primeiro é necessário ter instalado o <a href="https://nodejs.org/en/download/">NodeJS</a> com  o seu gerenciador de pacotes o NPM.</p>
<p>Após ter o NodeJS instalado você precisa abrir seu terminal e digitar os comandos abaixos (para windows, desconsiderar o sudo apenas execute o prompt de comando como administrador):</p>
<pre class="brush: bash; title: ; notranslate">
$ sudo npm install -g weinre
</pre>
<p>Após instalado, agora você tem o weinre disponível em sua command-line, agora é hora de iniciar ele. Para isso digite o comando abaixo em seu terminal:</p>
<pre class="brush: bash; title: ; notranslate">
weinre --boundHost=0.0.0.0
</pre>
<p>Após isso o weire vai ficar escultando na porta 8080, e a seguinte mensagem vai aparecer:</p>
<pre class="brush: bash; title: ; notranslate">
2017-06-01T14:03:39.322Z weinre: starting server at http://0.0.0.0:8080
</pre>
<p>[wp_ad_camp_2]</p>
<p>Agora é só abrir o seu browser no endereço http://localhost:8080/client/#meuprojeto, agora é só acessar uma página padrão do seu projeto e colocar o código abaixo em seu cabeçalho:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;script src=&quot;http://SEU_IP_LOCAL:8080/target/target-script-min.js#anonymous&quot;&gt;&lt;/script&gt;
</pre>
<p>E pronto é só acessar pelo seu dispositivo e depurar pelo seu computador!</p>
<p>Observação: no script que você vai colocar em seu projeto, lembre-se de colocar o endereço de IP do seu computador e também libere o weinre no firewall quando solicitado.</p>
<p>Obrigado, espero que tenha ajudado!</p>
<p>The post <a href="https://www.hiago.me/2017/06/01/inspecionando-sua-pagina-remotamente/">Inspecionando sua página remotamente</a> appeared first on <a href="https://www.hiago.me">Hiago Silva Souza</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.hiago.me/2017/06/01/inspecionando-sua-pagina-remotamente/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">186</post-id>	</item>
		<item>
		<title>Novidade: Arduíno + JavaScript = J5 </title>
		<link>https://www.hiago.me/2017/05/04/novidade-arduino-javascript-j5/</link>
					<comments>https://www.hiago.me/2017/05/04/novidade-arduino-javascript-j5/#comments</comments>
		
		<dc:creator><![CDATA[Hiago Souza]]></dc:creator>
		<pubDate>Fri, 05 May 2017 00:19:59 +0000</pubDate>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[NodeJS]]></category>
		<category><![CDATA[arduino]]></category>
		<category><![CDATA[automação]]></category>
		<category><![CDATA[j5]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[johnny-five]]></category>
		<category><![CDATA[nodejs]]></category>
		<guid isPermaLink="false">http://www.hiago.me/?p=156</guid>

					<description><![CDATA[<p>[wp_ad_camp_3] Olá, seja bem vindo a mais um post, Arduíno + Javascript = J5! Eu sou amante do javascript e acredito que o mesmo não só é o nosso presente como vai ter grande presença no futuro da tecnologia (opinião minha), e para aumentar ainda mais minha paixão pela linguagem aparece o J5. O que é o &#8230;</p>
<p>The post <a href="https://www.hiago.me/2017/05/04/novidade-arduino-javascript-j5/">Novidade: Arduíno + JavaScript = J5 &lt;3</a> appeared first on <a href="https://www.hiago.me">Hiago Silva Souza</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>[wp_ad_camp_3]</p>
<p>Olá, seja bem vindo a mais um post, Arduíno + Javascript = J5!</p>
<p>Eu sou amante do javascript e acredito que o mesmo não só é o nosso presente como vai ter grande presença no futuro da tecnologia (opinião minha), e para aumentar ainda mais minha paixão pela linguagem aparece o J5.</p>
<h2>O que é o J5 (Johnny Five)?</h2>
<p>[wp_ad_camp_1]</p>
<p>O J5 (Johnny Five) é uma biblioteca em NodeJS que possibilita a programação de projetos não só em Arduino como em diversas  placas eletrônicas fazendo uso da linguagem JavaScript.</p>
<h2>O que é o Arduíno?</h2>
<p>O Arduino é uma plataforma para prototipagem de hardware livre (isso mesmo, livre você não precisa pagar royalties ou direitos autorais para usa-lo em seus projetos) ele é projetado com um microcontrolador Atmel AVR que já possui suporte de I/O (Entrada e Saída) embutido. Sua linguagem de programação tem origem do C/C++.</p>
<h2>Arduíno + Javascript = J5!</h2>
<p>O motivo desse post é trazer uma novidade para você. Antes para começar a fazer o uso do Arduíno ou de outras plataformas, muitas vezes era necessário fazer o estudo de linguagens como C e C++.  A comunidade acabou chegando com o J5 (Johnny Five), para ingressar o javascript no mundo da eletrônica.</p>
<h2>Fazendo um Olá Mundo com J5 (Johnny Five)!</h2>
<p>[wp_ad_camp_2]</p>
<p>Acabei de fazer meu primeiro experimento e a sensação foi ótima pois não necessitei fazer uso de uma linha de C/C++.</p>
<p>Primeiro é necessário instalar o driver e o IDE do Arduíno que encontra-se disponível em (<a href="https://www.arduino.cc/en/Main/Software">https://www.arduino.cc</a>), após fazer isso plugue o USB de sua placa em seu computador e abra o IDE do Arduíno. Assim que o IDE do Arduíno estiver aberto vá até o menu: Arquivos &gt; Exemplos &gt; Firmdata &gt;  StandardFirmdataPlus (conforme imagem abaixo):</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-157 size-medium" src="http://www.hiago.me/wp-content/uploads/2017/05/arduino-firmdataplus-300x240.png" alt="Passo a passo para criar o Firmdata" width="300" height="240" srcset="https://www.hiago.me/wp-content/uploads/2017/05/arduino-firmdataplus-300x240.png 300w, https://www.hiago.me/wp-content/uploads/2017/05/arduino-firmdataplus.png 687w" sizes="(max-width: 300px) 100vw, 300px" /></p>
<p>Após isso o código do StandardFirmdataPlus vai aparecer em seu IDE. Depois basta clicar em Upload e fechar o seu IDE do Arduíno:</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-158 size-medium" src="http://www.hiago.me/wp-content/uploads/2017/05/arduino-upload-exemplo-246x300.png" alt="Botão UPLOAD no IDE do Arduíno" width="246" height="300" srcset="https://www.hiago.me/wp-content/uploads/2017/05/arduino-upload-exemplo-246x300.png 246w, https://www.hiago.me/wp-content/uploads/2017/05/arduino-upload-exemplo.png 486w" sizes="(max-width: 246px) 100vw, 246px" /></p>
<p>Agora vamos para melhor parte o <a href="https://www.hiago.me/category/javascript/">JavaScript </a>né =)!</p>
<p>Com o NodeJS instalado crie uma pasta no meu caso vou estar criando a pasta Arduino-JohnnyFive em C:\.</p>
<p>Com o prompt de comando/terminal, vamos navegar até a nossa pasta do projeto e instalar a dependência do JohnnyFive:</p>
<pre class="brush: bash; title: ; notranslate">
cd C:\Arduino-JohnnyFive
npm install johnny-five --save
</pre>
<p>Assim que acabar a instalação do J5 crie um arquivo chamado ola-mundo.js com o conteúdo abaixo:</p>
<pre class="brush: jscript; title: ; notranslate">
var five = require('johnny-five');
var placa = new five.Board();

placa.on(&quot;ready&quot;, function() {
        //Assim que a placa for disponível eu mando o pino 12 emitir/omitir energia a cada 500 mile segundos.. em outras palavras fizemos um pisca pisca..
	var led = new five.Led(12);
	led.blink(500);
});
</pre>
<p>Após finalizar o seu script basta executa-lo usando o nosso NodeJS. Para isso digite a linha abaixo dentro da pasta de seu projeto:</p>
<pre class="brush: bash; title: ; notranslate">
node ola-mundo.js
</pre>
<p>E pronto seu olá mundo com J5 está pronto! Após executar esse comando, o console do J5 vai ficar disponível para você fazer uso dele =)<br />
<img loading="lazy" decoding="async" class="aligncenter wp-image-163 size-medium" src="http://www.hiago.me/wp-content/uploads/2017/05/console-johnny-five-300x145.png" alt="Console do sistema operacional" width="300" height="145" srcset="https://www.hiago.me/wp-content/uploads/2017/05/console-johnny-five-300x145.png 300w, https://www.hiago.me/wp-content/uploads/2017/05/console-johnny-five.png 326w" sizes="(max-width: 300px) 100vw, 300px" /><br />
Então é isso, espero que tenha gostado do post!<br />
Você pode estar lendo sobre outros métodos do J5 em seu website oficial, ou em futuros posts no meu blog!<br />
Me siga no twitter e fique por dentro das novidades =)</p>
<p>Links:<br />
Johnny Five: <a href="http://johnny-five.io/">http://johnny-five.io/</a><br />
Arduíno: <a href="https://www.arduino.cc/">https://www.arduino.cc/</a><br />
NodeJS: <a href="https://nodejs.org/">https://nodejs.org/</a></p>
<p>The post <a href="https://www.hiago.me/2017/05/04/novidade-arduino-javascript-j5/">Novidade: Arduíno + JavaScript = J5 &lt;3</a> appeared first on <a href="https://www.hiago.me">Hiago Silva Souza</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.hiago.me/2017/05/04/novidade-arduino-javascript-j5/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">156</post-id>	</item>
	</channel>
</rss>
