Solutions Architect
Specifically for this section of this site, there is no commitment to translating this content into english, so that many (or all) articles may be in the author's native language (portuguese).
2023-06-20 15:27:14
Estou para refazer o site há muito tempo.
Depois de apurar os dados sobre as visitas diárias dos últimos 10 anos, concluí que ter um site dinâmico é o caminho para se entristecer. Mas por quê? Porque existem pessoas desocupadas que passam a vida a tentar burlar sistemas.
Embora tenha a impressão de que algumas pessoas favorecem-se com artigos e partilha de informações, manter um site seguro dá trabalho.
Este novo site é bem parecido com a versão anterior, entretanto, optei por migrar de Wordpress para Angular. Ainda tenho um imenso carinho pela plataforma e há casos que ainda o recomendaria para uma solução final, entretanto, o foco de meu site é partilhar conteúdo que pode ser útil para outras pessoas e para que possa 'controlar' a indexação pelos mecanismos de busca.
Com o Angular, tenho controlo o que é carregado dinamicamente e o que é, e deveria ser sempre, estático para manter a performance, legibilidade e carga do conteúdo. Ademais, o angular permite-me criar ferramentas adicionais para o site, sem que seja necessário usar códigos de terceiros, que sempre precisam ser analisados porque há colegas que insistem em que seus componentes o notifiquem de alguma forma.
Para esta nova versão optei por manter somente as publicações com taxas visualizações expressivas.
2015-07-13 14:17:03
Como ler matérias bloqueadas de sites? Alguns sites, como dos jornais, Folha e O Globo, bloqueiam o acesso aos artigos depois de um certo número de leituras. Mas e agora, será que não conseguirei ler a notícia? Pensando nisso, imaginamos uma forma de permitir a leitura deste conteúdo. Os websites respondem através do protocolo http, só que o navegador processa os sites. No processamento, o navegador armazena cookies e variáveis de sessão, e é isso que bloqueia o seu acesso. Então fizemos um pequeno teste no linux, que funcionou, e depois foi só arrumar a versão do software que nos permite esse feito. Nós usamos o famoso wget. WGET: https://eternallybored.org/misc/wget/ Basta escolher entre as plataformas 32bits ou 64bits e, extrair para a pasta C:\Windows\System32, assim qualquer janela do terminal, em qualquer pasta, consegue ser executado. Segue a sintaxe do comando e uma linha de comando de exemplo:
C:\> wget <URL> -O <ARQUIVO-DE-SAIDA>
C:\> wget http://www1.folha.uol.com.br/fsp/poder/225954-tse-cruza-dados-eleitorais-e-presidenciais-de-dilma.shtml -O .\tsecruzadilma.htmlFeito isso, é só abrir com o navegador o arquivo gerado, no caso "tsecruzadilma.html" e sua notícia estará disponível para leitura. Simples não?!
2015-08-27 12:22:36
As maneira mais comuns de desabilitar o Windows Defender no Windows 10 explicada na internet não funciona para todas as versões do Windows.
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows Defender] "DisableAntiSpyware"=dword:00000001 [HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows Defender\Real-Time Protection] "DisableBehaviorMonitoring"=dword:00000001 "DisableOnAccessProtection"=dword:00000001 "DisableScanOnRealtimeEnable"=dword:00000001Só que em um dos testes que eu fiz, os registros não foram importados e, neste caso, precisa fazer manualmente. Para realizar a alteração manualmente, acesse a ferramenta de manipulação do registro do Windows. Navegue pela hierarquia do registro através do caminho: [HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows Defender] Crie um valor DWORD (32 bits) com o nome de "DisableAntiSpyware". Clique duas vezes sobre o valor criado e atribua o valor 1 e clique em OK. Como a chave [Real-Time Protection] não deva existir, você deverá criar uma chave com este nome. Criada a chave, precisará criar os valores DWORD (32 bits) com os seguintes nomes: DisableBehaviorMonitoring, DisableOnAccessProtection e DisableScanOnRealtimeEnable, atribuindo o valor 1, tal qual fizemos com o primeiro valor. Reinicie o windows e sinta-se livre para usar (ou não) a proteção que você quiser. Quando você tentar acessar novamente o Windows Defender, verá a seguinte informação que indicará sucesso no seu processo:
2015-08-31 18:03:12
Recentemente publicamos o artigo de como desabilitar permanentemente o Windows Defender no Windows 10. Estamos publicando hoje um artigo de como desabilitar o Windows Update no Windows 10.
Como o Windows 10 saiu do forno há bem pouco tempo, muitas atualizações têm sido disponibilizadas. O maior problema dessas atualizações o tempo todo é que o sistema operacional devide que vai instalar e o máximo que você pode fazer é adiar a reinicialização, caso seja necessário. Só que na inicialização, o Windows pára para atualizar e para quem está em ambiente de produção, essa atualização pode atrapalhar o andamento do seu trabalho.
Como antes de iniciar nossa pesquisa, já publicaram um artigo bem escrito e detalhado, vamos somente compartilhar. Quaisquer dúvidas, não deixe de realizar comentários na publicação que teremos o maior prazer em auxiliá-lo.
http://fossbytes.com/how-to-disable-windows-10-forced-updates-5-different-methods/
2018-01-16 16:42:24
Decidi criar uma página para o site que contivesse notícias atualizadas de forma que eu pudesse as ler de uma só fonte e de qualquer lugar ou dispositivo que estiver usando.
O melhor protocolo para receber as notícias é claro que é o RSS, sem sombras de dúvidas, já que a maioria utilização este padrão. No passado, havíam projetos opensource que faziam este trabalho bem, como o projeto do SourceForge Gregarius, mas infelizmente foi descontinuado em 2013.
Estudei alguns frameworks e optei pela versão gratuita do plugin WP RSS Aggregator para fazer o trabalho mais complicado de obter organizadamente as notícias e cadastrá-las no wordpress. O WP RSS Aggregator me poupou todo o trabalho de fazer a leitura e de gerar atividades para o gestor de tarefas da plataforma. Só que ao iniciar a utilização percebi que são necessários plugins adicionais para poder ter mais controle da camada de apresentação. Recorri ao site deles para melhorar a apresentação usando as classes CSS, que ajudaram muito, mas ainda não tinha as informações que eu queria: IMAGEM e DESCRIÇÃO, para ampliar a auto-interpretação da notícia e, decisão, se farei ou não a leitura, in loco, clicando no link. Normalmente os add-ons oferecidos no site resolvem a grande maioria dos casos.
Foi aí que veio o insight de obter tais informações diretamente das publicações através do Protocolo OpenGraph, que tanto tem ajudado nas otimizações SEO. Para usar o OpenGraph, sem ter que re-inventar a roda, usei a classe php do projeto github OpenGraph do Scott MacVicar.
Criei uma rotina em javascript acessando actions do wordpress, em php, por ajax, de forma que pudesse manipular a informação depois da página toda completa, causando um efeito de lazy-loading para as imagens e para a descrição da notícia, enquanto já posso ir lendo.
Para usar o protocolo OpenGraph no worpress é preciso, primeiramente, declarar a classe do Scott no arquivo functions.php do tema ativo:
require_once('/caminho-completo/opengraph-master/OpenGraph.php');
Feito isso já pode ser criada a action no wordpress. Eu poderia (e deveria) ter feito uma action, mas por fins de depuração, separei as duas, como você pode ver abaixo.
A primeira action, obterImagemOpenGraph, obtém o link da imagem, a partir de uma URL:add_action('wp_ajax_obterImagemOpenGraph','obterImagemOpenGraph'); add_action('wp_ajax_nopriv_obterImagemOpenGraph','obterImagemOpenGraph'); function obterImagemOpenGraph(){ $urlParam = $_POST['URL']; $graph = OpenGraph::fetch($urlParam); $retorno = ''; foreach ($graph as $key => $value) { if ($key == 'image') { $retorno .= "$value"; } } echo $retorno; }
add_action('wp_ajax_obterDescricaoOpenGraph','obterDescricaoOpenGraph'); add_action('wp_ajax_nopriv_obterDescricaoOpenGraph','obterDescricaoOpenGraph'); function obterDescricaoOpenGraph(){ $urlParam = $_POST['URL']; $graph = OpenGraph::fetch($urlParam); $retorno = ''; foreach ($graph as $key => $value) { if ($key == 'description') { $retorno .= "$value"; } } echo $retorno; }
<?php $script = '<script>'; $script .= 'var ajaxurl = "' . admin_url('admin-ajax.php') . '";'; $script .= '</script>'; echo $script; ?> <script> window.onload = function() { var list = document.getElementsByClassName("rss-aggregator")[0]; Array.prototype.forEach.call(list.childNodes, function(el) { var texto = el.innerHTML; var urlNews = el.childNodes[0].href; var img = urlNews; jQuery.ajax({ url: ajaxurl, type: 'POST', data: { 'action': 'obterImagemOpenGraph', 'URL': urlNews }, success: function( data ){ jQuery.ajax({ url: ajaxurl, type: 'POST', data: { 'action': 'obterDescricaoOpenGraph', 'URL': urlNews }, success: function( data2 ){ var retorno = data2.substring(0,data2.length-1); el.innerHTML = "<div class='wprss-avm-img'><img class='img-responsive' src='"+ data +"'></div>" + "<div class='wprss-avm-text'>"+ retorno +"</div><br><span class='wprss-avm-leiamais'>Leia Mais: </span>" + texto; }, error: function (response){ console.log(response); } }); }, error: function (response){ console.log(response); } }); }); }; </script>
2015-12-03 18:07:36
#!/bin/bash ########################################## # Backup database MySQL enviando para o S3 # Criado por Andre Mesquita ########################################## #VARIAVEIS DATAHORA=`date +%Y%m%d-%H%M` FILESDIR='cd /sites/tmp' TAR=/bin/tar RM=/bin/rm IPBANCO="127.0.0.1" USERBANCO='seu usuario' SENHABANCO='sua senha' NOMEDOBANCO='nome do database' NOMEDOBUCKET='meusbackups' #Entrando no diretorio de backup $FILESDIR #Executa o backup do banco de dados echo 'Realizando o backup do banco de dados...' mysqldump --host=$IPBANCO --user=$USERBANCO --password=$SENHABANCO --databases $NOMEDOBANCO > ./backup_$NOMEDOBANCO.sql #Compactando o backup echo 'Compactando arquivos do site...' $TAR zcf $NOMEDOBANCO_database.bkp_$DATAHORA.tar.gz ./backup_$NOMEDOBANCO.sql echo 'Enviando para o respositorio de backups...' aws s3 cp ./$NOMEDOBANCO_database.bkp_$DATAHORA.tar.gz s3://$NOMEDOBUCKET/$NOMEDOBANCO_database.bkp_$DATAHORA.tar.gz echo 'Excluindo o script descompactado...' $RM $NOMEDOBANCO_database.bkp_$DATAHORA.tar.gz $RM backup_$NOMEDOBANCO.sql echo ' ' echo ' Operacao finalizada. ' echo ' 'Pronto! Espero que ajude. Precisando de algo customizado, consulte-nos! Grande abraço e até a próxima!
2016-02-01 20:30:04
O mundo tecnológico evoluiu muito em pouquíssimo tempo. As pessoas, hoje, ficam conectadas na internet o tempo todo. No início, era comum as pessoas disserem: "- Vou entrar na internet e já volto." - era a Era de conexões discadas. E o que fazer, agora, que meu filho tem celular, computador, videogame, tudo conectado em tempo real na internet? Como eu poderei controlar que tipo de conteúdo ele têm acesso? Como saber o que ele anda fazendo nos dispositivos que ele interage sozinho com a máquina?
Iniciei essa pesquisa há muito tempo. Já trabalho com TI e seria relativamente simples criar uma solução que resolvesse o meu problema, mudando minha infraestrutura de casa, mas e se o acesso não for feito de casa? Daria mais trabalho, mas mesmo assim, algo possível. Foi aí que comecei a pesquisar softwares para proteção da família.
Depois de muito analisar, fiquei na dúvida entre o Qustodio e o Norton Family. Iniciei o uso do Norton Family, mas o portal de acesso vivia fora do ar, cheguei a abrir um suporte que nunca foi respondido e, por isso, não cheguei a assinar. Assinei o Qustodio, que por cerca de cinquenta reais, permitia controlar 5 usuários. Para cada usuário eu poderia colocar computadores e celulares. Depois de um ano utilizando, eu posso afirmar que é um excelente software. Mas estamos na Era do Whatsapp, e pela Facebook, dona do Whatsapp, não divulgar as especificações para bloqueio, acabou por faltar alguma coisa. E decidi voltar a buscar uma solução melhor ou igual, com custo parecido ou menor.
Durante essa pesquisa, a Microsoft lançou o Windows 10 e a promessa de que haveria integração entre todos os dispositivos que rodassem a plataforma. Eu precisava que houvesse integração de computadores, celulares e xbox one. E, com isso, comecei a estudar o Microsoft Family.
O Microsoft Family é um produto que se propõe a segurança da família. Segurança de privacidade, de localização, de acesso de conteúdo. Infelizmente, você precisa passar um tempo para poder configurar tudo do jeito que você precisa. Então acessei:
https://account.microsoft.com/family/about
Quando você seleciona a criança, aparece a seguinte tela, exibindo a atividade recente. Note que você já terá um resumo da atividade .
Na seção Navegação na Web, você pode configurar os sites que sempre terão acesso e os sites que sempre serão bloqueados. Quando você cria a sua conta Microsoft (e quando você cria a conta dos seus filhos), há a questão de faixa etária, que você já configura. Essa faixa etária é usada no serviços do Microsoft Family e já fará o bloqueio de sites relacionando a faixa etária. Mas se algum site deve ser bloqueado ou liberado, por você, responsável, você poderá fazer nesta tela.
Na seção "Aplicativos, jogos e mídia", você pode alterar a faixa etária. Os jogos, por exemplo, quando você tenta colocar o jogo de faixa etária maior para rodar na conta da criança, aparece uma mensagem na tela indicando que há um bloqueio pelo pais. Nesta tela, você (pai) precisará autenticar a sua conta com a sua senha e escolher se a liberação é momentânea ou permanente.
A seção "Tempo de tela" permite que você regule os horários de utilização dos dispositivos. Seu filho precisa estudar e precisa brincar. E é aqui que você pode restringir que horas e que dias da semana ele pode acessar a internet, jogar, etc.
Na seção "Compras e gastos" você pode depositar a mesada dele e controlar sua utilização, além de ter o histórico do que foi gasto com o que, você pode se planejar.
Na seção "Localizar seu filho", caso o dispositivo que esteja cadastrado para ele tenha recurso de GPS, você poderá saber onde ele está.
Hoje, os videogames estão conectados na internet. Os videogames possuem acesso ao Netflix, ao GloboPlay, possui navegadores web. E você precisar estar atento lá também. Ao acessar a seção "Configurações de privacidade do Xbox", você será direcionado para a página do XBox onde poderá selecionar o nível de privacidade dentro do console.
Mas nem tudo são flores. Para que esta solução escolhida funcione, preciso que todos os dispositivos rodem sistemas operacionais windows 10. Não funciona para Android e nem em iOS. Escolhi migrar tudo para plataforma Microsoft. Mas foi uma escolha minha de centralizar tudo em uma só plataforma, a mais usada em todo mundo.
E, pra completar, hoje a Microsoft comunicou ao mundo que o OneDrive não terá mais plano gratuito a partir de hoje, ou seja, sempre que você se planeja para alguma coisa, vem alguém e puxa seu tapete.
Você usa alguma outra solução? Compartilhe conosco e quem sabe não saímos todos ganhando com uma solução completa.
2016-04-05 12:08:57
O artigo ia ser sobre a instalação do Skype For Business que não funcionava nem por um decreto presidencial (pufff!)
Meus problemas costumam ser bem incomuns em informática. Sabe aquele problema que só você e um seleto grupo de pessoas encontram? É bem assim. Cansei de falar na empresa que o Meu Skype for Business não funciona. Eles ficam olhando para mim no tipo: "- Como assim?" - é, no tipo, instalou e funcionou. - Sei bem como é, teria pensado o mesmo.
Mas eu sei bem onde tudo começou... o Victor já cantou essa pedra em 2013. "- Porque, diabos, você instalou o Office 64 bits se a Microsoft indica instalar a de 32 bits?" - Bom, instalei porque eu precisava mesmo saber porque seria tão ruim, senão não seria eu. Mas sabe aquele negócio de técnico que não aceita o tradicional "- Porque não.", e porque eu resolveria qualquer problema que eu tivesse.
Como não dispomos de tempo para se dedicar ao problema no dia-a-dia, e as poucas informações sobre o assunto me deixavam sempre na mesma situação, e eu tenho acesso aos aplicativos através de VPN/RDP, foi ficando. Mas quando procurava, eu procurava o porque, porque junto, por que separado, afinal só eu e um seleto grupo procurava por isso. Acho até que nos procurávamos. Instalei tudo o que você possa imaginar para tentar funcionar. Fiz ajustes de registro, arquivos que ninguém sabe que existe, tentei parâmetros no executável do skype comum, etc, aquelas coisas que só você que usa computador mesmo sem internet sabe o que estou dizendo. Mas eis que num belo dia, depois do expediente, lanço e vem uma resposta da Microsoft indexada no Google logo nas cabeças, praticamente um tropeço em uma nova informação.
IMPORTANT: If you have a subscription to the Office 365 Business plan or Office 365 Business Premium plan and upgrade Office 2013 to Office 2016, you may find that the Skype for Business client is removed, or you may receive an error message about newer versions of Office already installed. To work around this issue, install Skype for Business (standalone) or Skype for Business (64-bit).
Desses links, inicia uma aplicação assim:- Então ele quis dizer que ao tentar atualizar ele excluiu e agora me diz que tem a última versão instalada do que foi excluído? Fantástico! Chamo quem, o psicólogo?
e ela executa, executa, até que... fecha. Coisa de chinês. Assim mesmo, sem eu fazer nada ou aceitar qualquer termo. Mas e para onde foi o Skype? e o Office todo? Ainda não sei. E lá vamos nós para o Google para procurar mais informações.
Já sei. Vou instalar a versão anterior, o Microsoft Lync Basic 2003. São 330 megabytes que valem a pena. Posso não ter mais o Office, mas o Lync/Skype ou seja lá o nome que tem agora, vai funcionar para melhorar a comunicação entre equipes.
E depois do download recebi a mensagem abaixo e então lembrei daquilo que o Victor praguejou e não tive mais dúvida.Vou desinstalar tudo o que tiver de Office 64 bits e até esquecer de que um dia o conheci. Mas desinstala tudo, pacote de compatibilidade e tudo mais. Senão, não inicia a instalação. Acredite.
Enquanto instalava, até porque "alguns instantes" foi uns 40 minutos, fiquei lembrando de um amigo que usava o Windows XP 64 bits. Ele reclamava que nada rodava sob o ambiente, que tinha que ter as próprias versões. A questão de rodar híbrido (32 e 64 bits) em um mesmo ambiente 64 bits veio bem depois, já no Windows 7, que ainda previa o XP Mode para rodar os aplicativos de 32 bits que não rodavam sob Windows 7.
Mas sabe a verdade? Ele instalou não instalando. Não havia nada na pasta do aplicativo. E agora, o que fazer? Fuxica daqui, fuxica dali e eis que aparece uma opção de reparação que me deu duas opções, usar os arquivos locais ou usar a internet. Optei pelos arquivos locais.
Feito isso, os ícones não apareceram, mas tem uma grande diferença, agora no caminho do Office (C:\Program Files (x86)\Microsoft Office\root\Office16) estão os executáveis. Criei os atalhos e...
.. tudo OK.
2016-04-05 14:41:16
O Fortigate é um apliance muito bom, mas o windows sempre que pode dá uma forcinha para atrapalhar. Ontem, estava trabalhando normalmente conectado na VPN quando, do nada, a conexão caiu e não reconectava mais. Coloquei em modo de depuração para poder identificar onde estaria o problema e, por fim, acabei indo ao Google para clarear as ideias sobre o problema. É claro que a história contada é sempre muito maior do que vou relatar. Você sempre desinstala e instala inúmeras vezes, altera parâmetros daqui e dali, tal qual os relatos que existem nos fóruns.
Você pode fazer o download do FortiClient clicando AQUI.
A versão do cliente que eu estava usando era a 4.x.2300. Em todas as tentativas, o contador atingia 98% e cancelava, sem nenhuma mensagem de erro. A tela abaixo traduz a tentativa de conexão.
Foi então que acessei a página web do "discador" (é o host do seu fortigate, seguido da porta) e lá existia um link para fazer o download da versão 5.2.x. Na instalação, este automaticamente irá desinstalar o outro. Se não desinstalar, desinstale no painel de controle. A versão 5.2 é um pouco diferente para instalar. Primeiro você instala ele, reinicia o computador, se loga com seu usuário, ele instalará os drivers automaticamente, é só aguardar. Quando terminar, ele vai te avisar para reiniciar novamente e tecnicamente estaria pronto para utilizar. Só que no meu caso, como pode ser observado abaixo, a interface ficou bem mais bonita mas continuou parando em 98%.
Então não resta dúvidas, não é problema da versão. O que será? Pelo log indica que por algum motivo, não está sendo possível realizar a "discagem" e para verificar, precisava observar o detalhamento da Conexões de Rede do Windows. Observe que a conexão fortissl está indicando: "Indisponível - dispositivo ausente".VPN FortiSslvpn: 5380: Ras : connection to fortissl failed : 0:0: Debug VPN FortiSslvpn: 9132: [D]WSAConnect(1,0), r=-1, e=10035. Debug VPN FortiSslvpn: 576: Ras : dialing fortissl Debug VPN FortiSslvpn: 8640: rasfunc error: 0:633 VPN FortiSslvpn: 576: Ras : connection to fortissl failed : 0:0: Debug VPN FortiSslvpn: 576: RasGetConnectStatus result:6 count:0 Debug VPN FortiSslvpn: 8612: no active connection Debug VPN FortiSslvpn: 8612: bytes sent:0 bytes recvd:0 [tunnel] Debug VPN FortiSslvpn: 576: RAS thread terminated Debug VPN FortiSslvpn: 6980: ras_thread quit Debug VPN FortiSslvpn: 6980: waiting for tunnel thread ... Debug VPN FortiSslvpn: 6980: stopping tunnel thread Debug VPN FortiSslvpn: 6980: tunnel_close() called Debug VPN FortiSslvpn: 6980: sock_close() called:1268 Debug VPN FortiSslvpn: 6980: Monitor thread terminated Debug VPN FortiSslvpn: 6980: RestartDnschcheService() -> (tid=9064) Debug VPN FortiSslvpn: 9064: RestartDnscacheServiceProc() running ... Debug VPN FortiSslvpn: 9064: RestartDnscacheServiceProc()->QueryServiceStatus(3): ss=1 Debug VPN FortiSslvpn: 9064: RestartDnscacheServiceProc()->StartService() failed! (e=1058) Debug VPN FortiSslvpn: 9064: RestartDnscacheServiceProc() end. Debug ESNAC dwSilentReg false Debug ESNAC bFirstKA true Debug ESNAC Start searching for FGT Debug ESNAC Searching Default GW Debug ESNAC Timeout in select in SocketConnect Debug ESNAC Socket connect failed Debug ESNAC 192.168.0.1:8013, Secondary - 0 Debug ESNAC End searching for FGT Debug VPN FortiSslvpn: 4212: fortissl_getstatus(1986) called
Ao abrir as propriedades da conexão, notei que havia realmente um problema. A única interface que é utilizada pela conexão é uma que não existe, e que nunca existiu. E não é mérito da questão, neste momento, saber porque o Windows inventou isso.
Fiz a alteração que pareceu ser mais acertada, desmarcar a interface problemática e marcar a interface ISDN PPPoP, setando o número do telefone como 1.
Feita as alterações, hora de tentar novamente e...
... Sucesso!
Espero que te ajude a resolver mais rápido que eu resolvi, agora, se preferir que resolvamos para você, contacte-nos. Ah, e não esqueça de curtir e compartilhar a solução com seus colegas.
Até a próxima.
2016-07-13 18:30:00
Não é de hoje que vemos uma expansão comercial e um marketing sem limites. Mas como obter isso? Como sabe onde seu cliente está? Quais os hábitos dele? Ele compra de casa ou quando está em trânsito? Essas e outras perguntas são respondidas quando você passa a armazenar a informação dele desde sua chegada. A essa informação chamamos de Business Intelligence, ou inteligência de negócios.
Mas para não perder o foco do artigo vou simplificar um pouco. O cliente chega até você com um endereço IP, proveniente da internet. Se você armazenar ele, pode fazer joins com catálogos de IPs e ter mais informação ainda, sem nenhum artifício adicional, uma vez que o pacote HTTP já carrega esta informação. Com o tráfego do cliente capturado, você pode começar a gerar os seus próprios indicadores, até bem semelhantes a alguns que o Google Analytics já te oferece. Então fui atrás de como realizar a importação da informação que é distribuída.
Como base de partida usei o tutorial da Webstein WebSolutions. Só que o tutorial foi criado usando a versão antiga do GeoLite DB e precisou de algumas alterações.
Para diferenciar esta publicação, com a versão 2 do GeoLite DB, vou indicar uma forma mais automatizada de se fazer a atualização.
@ECHO OFF @ECHO Atualizando tabela de GeoIP... "C:\Program Files\Microsoft SQL Server\100\Tools\Binn\SQLCMD.EXE" -S 127.0.0.1 -i .\geoipupdate.sqlgeoipupdate.sql
use [your_database] GO IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'GeoIP') BEGIN DROP TABLE GeoIP END GO CREATE TABLE GeoIP ( network nvarchar(18), geoname_id bigint, registered_country_geoname_id bigint, represented_country_geoname_id bigint, is_anonymous_proxy bit, is_satellite_provider bit, postal_code nvarchar(10), latitude nvarchar(15), longitude nvarchar(15), accuracy_radius nvarchar(15) ) GO BULK INSERT GeoIP FROM 'C:/geoipupdate/GeoLite2-City-Blocks-IPv4.csv' WITH (FIRSTROW = 2, FIELDTERMINATOR=',', ROWTERMINATOR = '0x0a') GO IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'GeoLoc') BEGIN DROP TABLE GeoLoc END GO CREATE TABLE GeoLoc ( geoname_id bigint, locale_code nvarchar(15), continent_code nvarchar(15), continent_name nvarchar(255), country_iso_code nvarchar(255), country_name nvarchar(255), subdivision_1_iso_code nvarchar(255), subdivision_1_name nvarchar(255), subdivision_2_iso_code nvarchar(255), subdivision_2_name nvarchar(255), city_name nvarchar(255), metro_code nvarchar(15), time_zone nvarchar(255) ) GO BULK INSERT GeoLoc FROM 'C:/geoipupdate/GeoLite2-City-Locations-pt-BR.csv' WITH (FIRSTROW = 2, FIELDTERMINATOR=',', ROWTERMINATOR = '0x0a') GO
A saída de tela do batch deverá ficar algo como:
Atualizando tabela de GeoIP... Changed database context to '<your_database>'. (97590 rows affected)
Na execução podem ocorrer erros porque o arquivo não está normalizado, mas são mensagens posicionais de saída que indicam onde está o problema. Se você não leu o artigo do Webstein, ele indica fazer uma alteração de " (aspas) para vazio. O Notepad++ executa isso na velocidade de um tiro pelo replace (Ctrl+H).
É claro que não está completa a solução. Ainda falta colocar o "wget" antes da execução do arquivo para baixar a versão atualizada e o descompactador para uma solução mais inteligente, mas isso fica para a próxima edição. Se você fizer, não esqueça de compartilhar a sua saída que incrementamos a base de conhecimento aqui.
Por fim, um join simples para este modelo. Mas a melhor busca seria verificar a máscara da rede com o IP do cliente, mas essa fica como desafio para você. Neste importação fazemos somente a base de cidades. É preciso ainda alterar para receber a base de países, também disponível no site da MaxMind.
SELECT top 10 * FROM GeoIP geo (nolock) INNER JOIN GeoLoc loc (nolock) ON geo.geoname_id = loc.geoname_id WHERE loc.country_iso_code = 'BR'Um abraço
2016-09-16 08:27:47
Alguns aparelhos de TV Bravia e home theater Sony vêm com uma interface de rede wireless muito potente. Este dispositivo vem em caixa separada e segundo seu manual de instruções só é indicado para o uso pelo aparelho que foi designado. Mas é um dispositivo de rede wireless. Então porque não usar ele no computador?
Não foi uma pesquisa rápida, mas depois de muita consulta e testes, segue um breve tutorial para instalar ele no Windows 10.2017-01-06 20:00:37
Ouvi um relato de uma pessoa que foi sequestrada no Uber e gostaria de tecer uns comentários para que possam ajudar outras pessoas a não cometer o mesmo erro e andar com mais segurança.
Foi assim:
A moça com seu filho no colo pediu um Uber para ser transportada do local X para o local Y. O motorista estava demorando, então ela decidiu cancelar e solicitar outro carro. O motorista do carro 2 chegou e ele começou a pegar um trajeto para um destino Z. Depois de iniciada a viagem, quando a moça percebeu que estaria indo em itinerário diferente, este instaurou o assalto exibindo a arma. A assaltante pediu o celular da moça e procurou por aplicativos bancários. Com o aplicativo bancário foi se dirigindo às agências das instituições que têm aplicativos para ela efetuar vários saques.
Parei um tempo para analisar o problema e vi que não é exatamente problema do Uber. O sistema do Uber funciona e a falha de segurança que fez a moça entrar no carro não ocorreu no sistema Uber.
O que ocorreu?2017-01-30 12:00:23
Na última sexta-feira levei meu notebook para uma verificação no sistema de ventilação para diminuir o aquecimento com processamento excessivo, principalmente pelo processamento de vídeo. Aproveitei e solicitei ao técnico que migrasse meu HD para um SSD. Ledo engano! Quando fui pegar fiquei mais uma hora esperando que ele fizesse tentativas de recuperação. Ele chamou outros técnicos que condenaram o computador dizendo que só formatando. Técnico tem uma dificuldade em se comprometer com dados do cliente. Para eles, formatar é sempre a melhor solução.
Fui pra casa com note "morto". Fazer tentativas no HD do cliente sem entender qual foi o problema que o afetou pode ser pior que o problema inicial. Depois de muita pesquisa para primeiro entender o problema, consegui resolver.
Ao resolver clonar o HD, o técnico optou pelo famigerado Norton Ghost (pessoalmente seria minha última opção, mas...). Para fazer isso, o ghost desmonta os volumes para fazer cópia segura. Como iria demorar muito, pedi para ele cancelar a clonagem. Ao invés de cancelar o processo, com ESC ou outra tentativa, o técnico optou por desligar o computador. Foi aí que o problema foi gerado. Se ele tivesse cancelado o ghost normalmente, pela opções do software, o ghost teria deixado o volume pronto para uso. Ao desligar, o sistema tornou-se inoperante.
Falha em carregar o \windows\system32\winload.exeObserve que não há indicação de qual unidade (C:, D:, E:) no caminho do arquivo. Essa é a evidência! O Windows 10 usa uma partição inicial para dar o boot e depois se move para a partição onde está realmente o sistema operacional. O problema é que ele não conseguia atribuir letra para esta unidade e, consequentemente, o boot tornou-se impossível. A maioria das fontes na internet atribuem 4 comandos para esta recuperação em modo administrador:
bootrec /fixboot bootrec /scanos bootrec /fixmbr bootrec /rebuildbcdSe mesmo depois disso não funcionar, aí você vai precisar de um pouco mais de perícia para executar o utilitário BCDBoot Utility.
Este processo fará uma nova verificação dos sistemas operacionais instalados e remontará a lista para que funcione. Onde está "c:\windows" você deverá substituir pela unidade que o windows 10 está. No fim, o que esse comando faz é encontrar seu windows e remontar na unidade W uma lista de sistemas operacionais disponíveis, permitindo que seu computador inicie.
Reinicie o computador e aguarde até que tudo volte como estava.Para maiores detalhes, deixe seu comentário para que outras pessoas como você possam sanar dúvidas parecidas ou escreva diretamente ao Kevin Arrows no excelente artigo FIX: Steps to Fix Winload.EFI Error, que me ajudou muito no entendimento do problema e montagem da solução.
Ah, e se estiver procurando uma ótima opção para migrar seu HD para SSD, não deixe de visitar o Rene.E Laboratory e usar a ferramenta gratuita por 14 dias Renee Becca. A versão paga custa somente US$ 24,95. É simples, prático, intuitivo e barato para um recurso tão útil.
Grande abraço e até a próxima!
2017-05-18 10:38:03
Me preocupo muito com segurança da informação. Você não?! Muitos amigos costumam dizer: Como você nunca pega vírus se não usa anti-virus? Bom, a resposta é simples" - Eu preciso não ter o anti-vírus trabalhando comigo." Tá, mas e aí? Eu tenho cuidados (e backup). Alguma hora temos que aprender sobre segurança da informação. Isso, comigo, ocorreu em meados de 1999, quanto estava à um fim-de-semana da entrega de um sistema. Fui carregar um jogo em um disquete e fui contaminado pelo famigerado stoned e seu comparsa michelangelo que detonaram a trilha 0 e toda a FAT. Nesta época não havia softwares de recuperação e nem tínhamos tanto acesso à informação vinda dos EUA. Paguei caro a um profissional para recuperar o código-fonte para entregar ao cliente. Esse dia me fez entender o real significado da segurança da informação. Eu gostava muito dos aplicativos clientes de email. Por anos usei o Kauffman, que provavelmente nenhum leitor deve lembrar como alternativa ao Outlook Express ou Thunderbird. Mas precisamos nos adaptar. Trabalhei em um provedor de Internet em que o gerente de rede me dizia que o tráfego de emails era o maior de todos. Precisamos nos adaptar. Existem webmails fantásticos para gestão de correspondência eletrônica. Confie. Alguns já pré-classificam os suspeitos. Não traga para seu dispositivo o conteúdo que desconhece. Se você não vai instalar e nem tem pretenção de armazenar, para que correr riscos? Os webmails avançaram tanto que até permitem a visualização de conteúdo. Eu sou um dos felizardos clientes da Google que ganharam as primeiras contas do Google Apps de 100 usuários vitalícia. Disco Virtual. Conhece? Arquivos importantes devem ser armazenados na nuvem, se possível em até dois repositórios diferentes. Olha, não tem mais jeito. Os smartphones vão migrar para um óculos ou dispositivos ainda mais leves e práticos. Seus dados precisarão estar online e seguros. Outra resposta simples muito boa para a segurança da informação é:
2017-12-26 12:30:41
Certificados SSL gratuitos estão sendo gerados aos montes pela internet. A Let's Encrypt é um órgão autônomo, livre e realiza a gestão de certificados públicos seguros de confiança. O serviço é provido através do Internet Security Research Group.
Qual a diferença em si? É o prazo de validade e o órgão que garante que as informações trocadas são verdadeiras. Os certificados gratuitos não validam as instituições em si, apenas o sítio da internet. Os certificados gratuitos possuem validade de até 3 meses e, a cada ciclo, precisam ser renovados.
O programador alemão Felix Arntz resolveu facilitar a vida dos programadores e administradores criando um plugin, também gratuito, para ambientes wordpress, o WP Encrypt, que não só executa a geração do certificado SSL como efetua sua auto-renovação.
A regra de certificação é simples. Se o seu domínio existir tanto no www como no endereço desejado, a certificação ocorrerá sem problemas. Descrevi dois casos sobre a regra que me acompeteram durante as execuções em ambientes de tipos diferentes.
Por exemplo:Tendo a resposta correta através das duas etapas anteriores, clique no botão para registrar sua conta e, posteriormente, faça a geração através do último botão.
Ao final serão apresentados os caminhos reais do conjunto de arquivos necessários para o funcionamento da certificação. Use esta informação para preencher a informação de certificação. No servidor apache, por exemplo, a configuração do certificado Let's Encrypt, ficou assim:
Para finalizar a configuração do wordpress sob o ambiente seguro, indico também a utilização do plugin Really Simple SSL. Ele faz os updates necessários para o sistema rodar todo em SSL, multisite ou não, sem dor-de-cabeças.
Espero que ajude. Quaisquer dúvidas, estou à disposição. Grande abraço!2018-03-15 06:00:04
MoneyLog
Quando o tempo me permite, gosto de procurar ferramentas de software realmente simples de utilização e foi em um desses tempinhos que encontrei o MoneyLog. Um gerenciador financeiro pessoal simples, prático e fácil de usar.
Fui usuário do software Microsoft Money que não era o Quicken, mas funcionava muito bem, inclusive com as importações de arquivos ofx como retorno bancário para ajustar os lançamentos. Infelizmente os bancos no Brasil são uma vergonha em dar retorno para os clientes e cada um cria o seu padrão dentro de vários padrões que a Febraban estabelece. Então já viu, não é?! É aquela velha zona nacional que você já conhece em outros burocráticos serviços.
Mas depois do MS Money, passei a usar um software de um amigo (autor também do DiaADia, AllKeys, etc) que era bem completo para lançamentos financeiros, até corporativos, mas acabei optando pela velha planilha eletrônica com cálculos simples e apresentação de resultados.
Até que, hoje, encontrei o MoneyLog e instalei.O MoneyLog foi criado por Aurélio Vargas como código livre e está disponível para download no seu repositório github. Para efetuar o download, clique AQUI.
Ao terminar o download, descompacte em uma pasta qualquer.É bem provável que apareça uma interface vazia e para popular com dados de exemplo, sugiro que selecione em "Lançamentos", a opção "browser (localStorage)" e clique em editar. Com o notepad, por exemplo, localize o arquivo "\sample\data-pt.txt". Copie e cole o texto de exemplo no Moneylog e selecione Salvar para criar o banco de dados local. Feito isso, aparecerão os dados de exemplo para verificar o funcionamento.
2019-02-24 20:50:43
Algo muito comum na hora de gerar conceitos da camada de apresentação do seu site é procurar um template adequado para não reescrever tudo do zero. Achei interessante compartilhar o HTML5 UP! Possui temas interessantes e com ótima navegabilidade.
Ah, e não é só isso. Todo o conteúdo disponível por lá é com licença gratuita sob a Creative Commons, ou seja, (é uma forma de usar a legislação de proteção dos direitos autorais retirando barreiras quanto à utilização, difusão e modificação de uma obra criativa.
https://html5up.net
Espero que goste e seja útil no seu dia-a-dia.
2019-03-30 09:02:21
O Linkedin hoje é uma das ferramentas mais usadas para quem busca diferenciação na carreira e novos trabalhos. Como foi moldado no paradigma de rede social, os eventos são o gatilho para que você possa ser achado (ou esquecido).
Se você olhar a sua rede de contatos, hoje, verá que 40 a 50% são pessoas de empresas de recrutamento que incluem você para que possa receber (e repassar) os posts deles. Até o seu Like é visto por seus contatos e precisa ser usado com sabedoria e estratégia.
Depois de observar o funcionamento e mudar de estratégia várias vezes, estimei que a maioria dos recrutadores que fazem contato comigo, não estão na minha rede de contatos. Os que estão, só me usam como "marketing de rede", gratuito.
Para me certificar disso, excluí todos os 55% de contatos de empresas de recrutamento, no meu caso, e, de uma semana para a outra, meu perfil teve um aumento de 300% de visualização e comecei a receber contatos de pessoas que já estavam na minha lista antiga, provando que o algoritmo NOT IN que dispara o evento aos recrutadores é mais funcional quando eles "não te conhecem".
Faça o teste! É batata! (e comente seus resultados, pf, rs)
Abraço e boa sorte!
2019-05-25 09:14:49
Consulta de CEP é sempre uma questão comum no desenvolvimento de soluções porque a empresa pública que fornece este serviço, cobra pelo banco de dados, acessos e tudo mais relacionado à consulta de endereçamento.
Como é uma questão comum, fazendo pesquisas na internet acabei encontrando um site com um link para uma base de dados de CEP, otimizada, de 2018, toda em modo texto.
Ao abrir o arquivo, percebi que seria simples criar uma pequena solução para realizar a leitura dos dados para um motor que eu pudesse buscar dentro com maior facilidade e, a partir daí, se foi tomando forma de projeto.
Para importar, abri o arquivo realizando uma importação para arquivos de planilhas do Excel de forma com que os dados pudesse tomar forma de colunas e linhas, resultando na planilha XLS. Mas ainda não era o objetivo da final da organização dos dados então criei o aplicativo C# que faz a leitura da planilha e inclui os dados em um banco de dados SQLite.
Aproveitando que o Visual Studio já estava aberto, criei um micro-serviço rest api em c# para testar a funcionalidade completamente.
Projeto acabou!
Poxa.. rápido... :/
É, mas e se ele fosse feito em node?
E foi então, assim, que re-nasceu em node, com Docker, Jenkins, e até mesmo publicado no kubernete do Heroku.
Os dados desta base são de 2018. O projeto é gratuito e aberto para todos.
Incorporei um branch com o swagger para simplificar a implantação de quem quiser utilizar.
Compilado e aprovado pelo Mr. Jenkins.
Endpoint para testes publicado no Heroku.
https://api-cep-node.herokuapp.com/
Espero que ajude...
... e que muitos contêiners o executem ;)
2019-07-13 09:56:04
Conheci o novo navegador BRAVE.
Já ouviu falar?
Ao estudar composição de sites, observa-se que grande parte do tráfego que você acessa é utilizado para beneficiar agentes de propaganda e obtenção de tracking gerais de informação.
Navegar com o Brave é muito mais rápido porque ele impede que estes agentes sejam carregados, economizando naturalmente kilobytes que não te beneficiam em nada.
Segundo o site, as cargas de sites são de 3 a 8 vezes mais rápidas, dependendo do site. Fiz testes com grandes portais e o resultado foi impressionante.
Imagine assistir ao YouTube sem layer de propaganda piscando, ou acessar um site de notícias e só ler seu conteúdo, sem distração. Alguns portais nacionais, é claro, parecem as estradas do país, ficarão cheios de buracos.
Mas a proposta do Brave é ainda mais ousada. O Brave oferece ainda integração total com a hiper internet baseada em IPFS, numa rede peer-to-peer descentralizada de arquivos.
A Brave acredita ainda que você possa ganhar dinheiro navegando, assim como pode creditar aos sites, gerando riquezas em duplo sentido enquanto informações são trocadas em troca da propaganda que te é exibida e permite que você tenha uma carteira financeira (wallet) no programa Brave Rewards.
Confira o BRAVE em:
[contentcards url="https://brave.com/isa824"]
E depois não esquece de comentar...
2020-07-01 13:46:03
A instalação padrão do Wordpress requer que você tenha um banco de dados MySQL. Entretanto o desenvolvedor Kojima Toshiyasu criou um plugin (sqlite-integration) há alguns anos, que embora não estar mais disponível para download no sítio de bibliotecas do wordpress (Foi descontinuado em 29 de junho de 2019), permite alterar o motor de banco de dados para utilização de um banco local, o SQLite, que armazena um arquivo na estrutura do site onde seus dados são armazenados.
Para desenvolvedores que optam por criar um site sem complicação e sem custo adicional com banco de dados, esta é a opção.
Para desenvolvedores que desejam criar apenas sites estáticos, podem usar esta versão juntamente com o plugin WP2Static que realiza a geração do conteúdo do site.
Para que o sítio tenha uma boa performance, maior segurança e melhora na capacidade indexadora nos mecanismos de busca, indico um set de plugins que trazem retorno nas primeiras horas em ambiente produtivo:
Para validar que o set de plugins realmente trazem benefícios ao seu sítio, considere realizar testes antes e depois de os utilizar nos mecanismos de análise WebPageTest, GT Metrix e Semalt.
O WebPageTest avalia a velocidade de carga e capacidade de resposta. O GT Metrix indica melhorias de configurações no servidor web e otimização de imagens e recursos com otimização mais fina. O Semalt avalia um conjunto de informações SEO que podem melhorar o ajuste.
Criei uma estrutura pré-configurada e que, até a presente versão, 5.4.2, a qual atualizei depois de instalado, a estrutura funciona perfeitamente.
Funciona sob ambiente windows e linux, com IIS, Apache ou outro que suporte a linguagem PHP.
2020-07-02 18:20:04
Minha filha, ontem, queria assistir ao jogo do Flamengo no YouTube. Entretanto a FlaTV limitou a difusão apenas ao Brasil. Como a identificação do país ocorre pelo endereço de IP, era preciso que houvesse um túnel de rede.
O túnel de rede chama-se, tecnicamente, como proxy ou VPN (rede virtual privada). Na internet existem vários gratuitos. No windows 10 a configuração é super simples. Precisei testar uns 15 servidores até ter sucesso, mas ela assistiu.
Procurar um proxy é simples. O Google te retorna mais de 10 milhões de resultados de sítios que possuem pelo menos uns 20.
A configuração no windows 10 é totalmente descomplicada e fácil de ativar e desativar. Depois que usar, não esqueça de desligar por sua segurança.
Configurou, assistiu, mas e agora?
Agora a segunda questão: É seguro?
Não. Não há nada que impeça que seus dados não serão armazenados e que a informação seja usada contra você no futuro, afinal, se o pacote de dados que trafega do seu computador com os sítios passam por um intermediário, o que o intermediário faz, é uma incógnita.
Enquanto estudava para escrever esse artigo, tive o aconselhamento de usar softwares gratuitos para portáteis, como o Tunnel Bear e o VPN.lat.
Particularmente, quando falamos de portáteis, estamos a falar de um dispositivo que provavelmente possui as suas informações mais sensíveis, que acede sua conta de e-mail pessoal e até corporativa, que mantém fotos, anotações, seus contatos e até suas conversas.
Fiz um teste no telemóvel, essa semana, com a instalação de um aplicativo que captura pacotes de rede transmitidos (tPacketCapture), que funciona semelhante ao software tcpdump usado em plataformas windows e linux. Sem navegar nada, o pacote só cresce sozinho. Por 2 minutos, por exemplo, o arquivo de pacotes já possuía mais de 3 megabytes e, depois de analisá-lo com o Wireshark, descobri até que o aplicativo da Moovit se conecta com a internet sem que você o use. A última vez que utilizei-o foi em 2019.
Mas existe solução segura? Sim.
A melhor solução, e mais segura, seria você ter o seu próprio servidor de túnel (mas é papo para um outro artigo). Mas se precisar acessar de países diferentes, os túneis pagos por assinatura são as melhores opções no custo-benefício porque a qualidade de conexão e o é armazenado (ou não) é garantido pelo fornecedor.
A outra vantagem que as pessoas usam túneis é pela capacidade de realizar compras em outros países com moeda local.
2020-07-17 14:50:18
Esta é uma publicação complementar de uma antiga a respeito do webservice de consulta. Como o serviço foi re-publicado no heroku, depois de muitas modificações (sim, a publicação anterior está desatualizada), resolvi criar uma solução em Angular para o consumo do serviço e também para poder usar o projeto como fonte de estudo da linguagem.
Para o estudo do Angular tenho usado o antiga a respeito do webservice de consulta, assim como o canal Você Programador, no YouTube, de um grande amigo com quem trabalhei e tem, além de uma ótima didática, uma paciência de Jó para ajudar.
Para a interface usei os cards do bootstrap.
Projeto no GitHub:
https://github.com/avmesquita/angular-buscarcep
Imagem no Docker Hub:
https://hub.docker.com/repository/docker/avmesquita/angular-buscarcep
2020-07-22 13:40:23
Tendo em vista que a CTT de Portugal disponibiliza gratuitamente a base de distritos, concelhos, códigos postais e apartados, decidi realizar um projeto para estudo, com três fases:
Trata-se de um projeto de estudo e por isso optei por criar três camadas em três linguagens diferentes. No momento desta publicação o objeto de estudo que estou em foco é a linguagem da terceira fase, o Angular e, portanto, gostaria imensamente que a comunidade propusesse melhorias.
Defini que a base de dados deveria ser SQLite para que pudesse realizar a distribuição da base incluída na camada de serviço. Como trata-se de uma base de somente leitura, não há problema em incluí-la diretamente em um container, sem que fosse necessário incluir mais uma camada de servidor de banco de dados em separado, o que também pode ser feito.
Optei por criar uma solução em .net core para simplificar a carga, geração de lista de objetos e as inserções na base de dados. Com base na documentação da CTT para a leitura dos dados, desenhei as classes e lista de objetos necessários para realizar o processo de importação do arquivo CSV para memória e em seguida, a persistência da informação na base de dados.
De forma a simplificar a distribuição da consulta, optei por uma camada de serviço em NodeJs com uso da biblioteca Knex para consultar a base de dados gerada na Fase 1. Para diminuir a curva de trabalho, usei o código que já havia criado no projeto de consulta da base de correios do Brasil.
O Web App é a camada de interface para a consulta dos usuários que possui a lógica de consumo da camada de serviços e exibição dos dados. Optei realizar esta camada com a linguagem Angular.
Não deixe de propor melhorias para o projeto, que é totalmente gratuito e com código aberto, realizar melhorias e quando possível, fazer um fork do projeto no github e geração de solicitações de incorporação (pull request) para que outras pessoas possam, não somente aprender como também reutilizar.