[{"categories":[{"LinkTitle":"Tecnologia","RelPermalink":"/categories/tecnologia/"}],"content":"Aprendendo inglês com o LLL Acabei de testar novos experimentos que o Google acabou de lançar e que utilizam seu modelo de inteligência artificial Gemini, com objetivo de ajudar quem está aprendendo um novo idioma.\nSão 3 ferramentas que foram batizados com o nome de \u0026ldquo;Little language lessons\u0026rdquo;:\nTiny Lesson: nesta ferramenta você fornece situação o Google apresenta como resultado vocabulário referente ao assunto, algumas frases prontas para usar e dicas de gramática úteis para a situação em questão.\nLang Hang: nesta, o Google gera diálogos fictícios, mostrando a aplicação do idioma em situações mais informais, para que o aluno possa aprender a conversar de forma mais natural.\nWord Cam: você tira uma foto de um objeto ou lugar e o Google, fornece dicas sobre como conversar sobre aquele tema específico.\nEssas iniciativas acabaram de ser publicadas no Google Labs. Portanto, não dá pra esperar que funcionem perfeitamente.\nPercebi por exemplo, que o audio de algumas frases dá erro quando se clica para ouví-los.\nDe qualquer forma, a iniciativa é bem interessante e pode evoluir bastante como aconteceu com o NotebookLM, uma fantástica ferramenta criada para auxiliar nos estudos.\nNão é preciso baixar nada para usar o LLL. Basta acessar esse link .\n","permalink":"https://alansantosmg.netlify.app/post/2025-04-30-little-language-lessons/","tags":[{"LinkTitle":"Aprendizado","RelPermalink":"/tags/aprendizado/"},{"LinkTitle":"Google","RelPermalink":"/tags/google/"}],"title":"Little Language Lessons"},{"categories":[],"content":"Muita informação, pouca produção Muito tem sido falado sobre ferramentas e sistemas de produtividade.\nQuando abro o youtube, fico impressionado com a quantidade enorme influencers que na maioria das vezes, nunca trabalhou de verdade na vida, dando dicas sobre aplicativos ou ainda, verdadeiras aulas sobre gestão de produtividade.\nEntre tanta picaretagem, como identificar as melhores ferramentas e métodos para dar conta do tempo escasso e alto volume de informações que precisamos lidar no dia-a-dia do mundo real?\nEm busca do sistema perfeito Essa questão sobre fazer mais com menos, sempre me fascinou e se tornou um assunto sobre o qual pesquisei obsessivamente ao longo dos últimos 25 anos.\nDepois de experimentar de tudo, combinando em produção os mais diversos tipos de aplicativos e métodos, acabei desenvolvendo certos critérios de escolha de ferramentas, mais objetivos do que as ínumeras dicas de youtubers disponíveis na internet.\nSendo um dos temas dos quais mais gosto de \u0026ldquo;conversar\u0026rdquo;, vou deixar aqui, numa série de publicações, um pouco sobre minha jornada em busca do sistema de produtividade perfeito, mostrando porque adotei ou deixei utilizar a ferramenta/método X ou Y.\nEstou convencido que contar sobre experiência de uso, é muito mais útil do que ficar apresentando funcionalidades, como fazem ditos influenciadores, que ficam por aí parecendo papagaios, imitando uns aos outros.\nSe tem algo que nunca tive, certamente é o talento para imitação.\n","permalink":"https://alansantosmg.netlify.app/post/2025-04-29-sobre-anota%C3%A7%C3%B5es-e-produtividade/","tags":[{"LinkTitle":"Gestão","RelPermalink":"/tags/gest%C3%A3o/"}],"title":"Em busca do Santo Graal da produtividade pessoal"},{"categories":[{"LinkTitle":"Cinema","RelPermalink":"/categories/cinema/"}],"content":"Andor - Star Wars de verdade Começou a segunda temporada de Andor. Assisti aos 3 primeiros de 12 episódios. Há anos já não mais fã de Star Wars. Creio que franquia está bem desgastada por conta de diversos diretores que erraram a mão em suas produções, começando pelos 6 últimos filmes da trilogia original.\nAlém do mais, a Disney, no intuito de fazer entreterimento para \u0026ldquo;família\u0026rdquo;, acaba infantilizando demais seus filmes e séries. Para completar, eles embarcaram na onde Woke e ficam forçando a barra com temas sobre negros, asiáticos e lgbt+restante-do-alfabeto, o que é bem chato.\nMas Andor, que segue a linha do tempo do spin-offi Rouge One, é diferente.\nTrata-se de uma produção caprichada, com excelentes efeitos especiais. O elemento woke está lá, mas não tão descarado. O que importa aqui é que Andor é uma história para ADULTOS, o que pode até decepcionar alguns mais jovens e a grande legião de nerds infantilizados por produções da Marvel.\nTony Gilroy, conseguiu um contrato em que tem total liberdade criativa sobre a série e isso faz toda diferença.\nPor isso, a série tem um tom mais político e também mais sombrio. Enfim, não parece uma produção Disney. Está mais para Star Wars raiz mesmo.\nEstou ansioso pelos próximos episódios.\n","permalink":"https://alansantosmg.netlify.app/post/2025-04-27-andor-2%C2%AA-temporada/","tags":[{"LinkTitle":"Cinema","RelPermalink":"/tags/cinema/"},{"LinkTitle":"Opinião","RelPermalink":"/tags/opini%C3%A3o/"}],"title":"Andor 2ª Temporada"},{"categories":[{"LinkTitle":"Pessoal","RelPermalink":"/categories/pessoal/"}],"content":"Novo layout São 03:40am. Após 7 horas de trabalho, consegui subir uma nova versão do blog.\nAté ontem o layout usado vinha do Tema Hugo-vitae, que há mais de um ano, foi abandonado pelo autor. Aproveitei a retomada das postagens, para trocá-lo por um novo.\nDepois de pesquisar bastante, acabei optando pelo Tailwind.\nDeu trabalho configurar e principalmente migrar os posts antigos, pois o tema anterior me obrigava a deixar coisas fora do padrão do hugo CMS.\nFazer bem feito nunca é fácil. Mas o que importa é que fiquei super satisfeito com o resultado!\nPróxima mudança, agora só daqui uns 3 anos. :-)\n","permalink":"https://alansantosmg.netlify.app/post/2025-04-27-modernizando-o-blog/","tags":[{"LinkTitle":"Diário","RelPermalink":"/tags/di%C3%A1rio/"}],"title":"Repaginando"},{"categories":[{"LinkTitle":"Pessoal","RelPermalink":"/categories/pessoal/"}],"content":"Goiana, Mariana Fróes no cover dos Girassóis de Baco Exu do Blues. ","permalink":"https://alansantosmg.netlify.app/post/2025-04-26-girassois-de-vangogh/","tags":[{"LinkTitle":"Música","RelPermalink":"/tags/m%C3%BAsica/"}],"title":"Mariana e os girassóis de Van Gogh"},{"categories":[{"LinkTitle":"Pessoal","RelPermalink":"/categories/pessoal/"}],"content":"Para grandes empreitadas, grandes esforços Hoje foi dia de apresentar o case de um projeto para uma oferta de trabalho em BSB.\nForam 5 dias de trabalho intensivo (virando dias e noites) para criar um Plano de Projeto, em que somente a apresentação executiva, ficou com nada menos que 85 slides. Requisitos, DOD, riscos, mudanças, comunicação, EAP, métricas, montagem de equipe, gerenciamento de fornecedores, engajamento, arquitetura, metodologias, etc\u0026hellip;\nApesar de ser para uma oferta de trabalho, foi um dos melhores e mais completos planejamentos que já fiz. Mesmo que não ganhe o game, já saí no lucro, pois tive que ir bem além de templates e praticamente criei um framework que poderei usar em projetos de todo tipo.\nDetalhes e a questão da escala Nem tudo são rosas. Após a apresentação, recebi uma chuva de questionamentos brabos, porém muito pertinentes, apontando lacunas não óbvias,como se TODO planejamento do mundo, nunca fosse suficiente bastante.\nSandálias da humildade Responder às perguntas foi como participar de uma aula e um verdadeiro exercício de humildade. Naquela conversa longa, percebi que SEMPRE podemos fazer muito melhor e que existem profissionais que estão, não alguns, mas muitos níveis acima, principalmente em termos de experiência.\nÉ raro encontrar um Pika das Galáxias num país onde tem tanto gogó, mas garanto: mesmo aqui, eles existem!\nOs questionamentos serviram para me mostrar que existem certos problemas que exigem uma abordagem de trabalho e nível de detalhamento bem acima do que é exigido pelo mercado \u0026ldquo;normal\u0026rdquo;, por uma simples questão de escala!\nAlguns comentários do meu interlocutor me deram uma \u0026ldquo;breve noção\u0026rdquo; de escala:\nPara um pico de carga de 150 mil acessos, estamos falando de milhões de utilizadores acessando o sistema simultâneamente. Só existimos porque há projetos que ninguém no governo consegue executar. Então eles mandam para nós. Estamos falando de sistemas de criticidade altíssima. Não é sobre tecnologia. 95% do nosso trabalho é gestão de risco. Não existe no-go! Nesse tipo de cenário, não basta ser bom, ótimo ou mesmo excelente GP. É preciso saber rodar em modo \u0026ldquo;Liderando a F-1\u0026rdquo;, 100% do tempo.\nCuidado com o que se deseja Sob essa perspectiva, os questionamentos do Pika, não fazem apenas sentido, são também um sutil aviso de amigo: Tem certeza de onde você quer se meter?\nNão sei me farão seguir no game, e agora começo a ter mais dúvidas do que certezas:\nSerá que é algo que quero abraçar?\nAfinal, existe um preço a pagar para se tornar um Pika das galáxias.\nFica também uma pulga atrás da orelha: E o cacau? Será que é das galáxias também?\n","permalink":"https://alansantosmg.netlify.app/post/2025-04-25-gp-pica-das-galaxias/","tags":[{"LinkTitle":"Diário","RelPermalink":"/tags/di%C3%A1rio/"}],"title":"Gp Pica Das Galaxias"},{"categories":[{"LinkTitle":"Pessoal","RelPermalink":"/categories/pessoal/"}],"content":"Propaganda danosa Hoje vi um sujeito postando no Linkedin (a única rede social que tenho usado), que a migração do Windows para o Linux seria um tipo de batismo digital.\nNa concepção do autor da postagem, esse \u0026ldquo;batismo digital\u0026rdquo;, consistiria em se tornar um usuário mais preparado para o mundo.\nAlguém que saiba usar o terminal, entenda bem sobre as configurações e trade-offs de seu sistema. Alguém que usa Linux porque sabe o que está fazendo.\nJá pensei como ele, mas hoje tenho uma opinião diferente sobre a questão.\nO poder do Windows O verdadeiro sucesso do Windows e o que fez tombar concorrentes de peso como Xerox, e IBM, se deve ao fato dele, por design, ter sido \u0026ldquo;feito para as massas\u0026rdquo;, além de ter um ecossistema aberto.\nQualquer um, mesmo iletrados digitais, conseguem usá-lo, com mínimo esforço.\nIsso serviu como motivação para fabricantes de dispositivos e software, estimulando não só o usuário final, mas também a indústria.\nVocê liga e ele funciona. Você sabe o que esperar dele. Não precisa \u0026ldquo;entender muito\u0026rdquo; para instalar um programa, abrir um editor de textos ou usá-lo para qualquer atividade trivial.\nLinux para as massas Já existem distribuições Linux muito amigáveis para o usuário comum.\nPara quem está começando e quer usar algo diferente, sem precisar ter muita experiência, eu recomendo o Linux Mint.\nEle é super fácil de instalar e tem uma interface (Cinnamonn) bem semelhante ao Windows, o que reduz significativamente a curva de aprendizado. E melhor: funciona out-of-the-box. Você instala e sai usando, sem precisar virar técnico de informática.\nA questão da usabilidade e a oferta de softwares para plataforma é um problema já bem equacionando.\nO que falta é mudança de mindset. Aqueles que chegaram primeiro ao Linux (leia-se pessoas de TI), precisam entender que o software deve servir ao usuário e não o contrário, pois quem não trabalha com TI, tem outras preocupações que vão muito além do sistema operacional, que no final é só um commodity.\nNo dia que esse mindset virar, esse será o verdadeiro Dia do Linux e ele estará mais perto de atingir seu propósito maior: ser uma alternativa livre para as massas, fazendo frente às grandes corporações.\nO pequeno grande passo que ainda falta à comunidade de software livre, é mais comportamental do que tecnológico.\n","permalink":"https://alansantosmg.netlify.app/post/2025-04-24-linux-e-o-elitismo-digital/","tags":[{"LinkTitle":"Opinião","RelPermalink":"/tags/opini%C3%A3o/"}],"title":"Linux e o Elitismo Digital"},{"categories":[{"LinkTitle":"Pessoal","RelPermalink":"/categories/pessoal/"}],"content":"Era uma vez o Edge Depois de a Microsoft fez uma nova versão do seu navegador Microsft Edge usando o motor do Chrome, é o que tenho usado desde então.\nEle usa menos memória e renderiza fontes melhor que o Chrome. Sem contar que posso usar meu bloqueador de ADs.\nFirefox usável novamente Depois de voltar ao linux, estive monitorando o que está rodando no PC. Percebi que o Firefox está usando menos processos do que o Edge e consumindo menos memória.\nAlgo que me incomodava no FF e me fez abandoná-lo por anos, era o fato do seu motor de renderização, ficar usando excessivamente o processador, fazendo a ventoinha do meu notebook rodar como uma turbina de avião. Parece que deram um jeito nisso e ele agora está rodando muito suave!\nO que me irrita no o Edge é o fato da Microsoft ficar adicionando funcionalidades inúteis a ele[ bloatware]. Além disso, embora rode bem no linux e seja mais polido que o Chrome, ele brilha mesmo é no windows.\nUsar o FF é também uma forma de reforçar o ideal do software livre.\nEntão\u0026hellip; bem-vindo novamente, Firefox!\n","permalink":"https://alansantosmg.netlify.app/post/2025-04-24-uma-nova-chance-ao-firefox/","tags":[{"LinkTitle":"Web","RelPermalink":"/tags/web/"},{"LinkTitle":"Diário","RelPermalink":"/tags/di%C3%A1rio/"}],"title":"Uma Nova Chance ao Firefox"},{"categories":[{"LinkTitle":"Pessoal","RelPermalink":"/categories/pessoal/"}],"content":"Tela preta com pinguim da morte O dia já começou diferenciado.\nO PC deu crash 2 vezes em menos de 3 horas, jogando na tela a temida mensagem \u0026ldquo;Kernel Panic\u0026rdquo; com um \u0026ldquo;simpático\u0026rdquo; desenho de um pinguim em ASCII (nem achei graça!).\nComo assim, se o Linux tem a fama de ser bem mais estável que o Windows?\nO Linux não é à prova de idiotas Minha suspeita apontou para o R-Studio, uma aplicação pra desenvolver trabalhos estatísticos usando uma linguagem chamada R.\nO rstudio-desktop não faz mais parte do repostitório oficial do Linux Fedora, então resolvi por minha conta, baixar de um mantenedor \u0026ldquo;não oficial\u0026rdquo;.\nAo fazer isso, já havia achado, como diria o Dalto, \u0026ldquo;muito estranho\u0026rdquo;, o dnf baixar quase 10 gigas! de pacotes. Basicamente, veio o R inteiro, TODAS suas bibliotecas e ferramentas de compilação para C, Java, Perl, etc. Muita tranqueira.\nInstalado o Rstudio e ainda não satisfeito, cismei de mudar a renderização de gráficos dele. Ao tentar, mais e mais gigas de pacotes foram baixados e o sistema tentou fazer uma compilação pesada desse negócio. Não deu certo e acabei deixando para lá, mas horas depois começaram os crashes.\nImagino que ao instalar o R-Studio, devo ter quebrado algo. Até então, tudo estava rodando liso.\nSalvando o dia com o Timeshift Por sorte, três dias atrás, depois de instalar o Fedora 42, eu havia feito um snapshot das partições de sistema usando um aplicativo chamado Timeshift.\nNunca havia precisado usar o Timeshift. Confesso que tive receio, antes de clicar no botão \u0026ldquo;restaurar\u0026rdquo;.\nNão poderia ser melhor: Ele restaurou o snapshot, recompilou o Grub, deu reboot e me entregou o sistema novinho em folha, exatamente como eu havia deixado dias atrás.\nLições aprendidas Primeira lição: Dentro do possível, evitar pacotes de software que não sejam dos repositórios oficiais do mantenedor. Idiotice minha tentar instalar o RStudio na marra, sendo que eu nem iria usar por agora.\nSegunda lição: Sempre ter o \u0026ldquo;/home\u0026rdquo; numa partição separada do sistema. Poupa muitas dores de cabeça numa eventual reinstalação.\nTerceira lição: Sempre ter um snapshot atualizado das partições de sistema, pois se você quebrá-lo a restauração sempre vai ser o caminho mais fácil para ter menos cabelos brancos. Ultimamente, ando sem paciência pra ficar escovando bits.\n","permalink":"https://alansantosmg.netlify.app/post/2025-04-23-dia-de-voltar-o-backup/","tags":[{"LinkTitle":"Diário","RelPermalink":"/tags/di%C3%A1rio/"}],"title":"O dia que precisei voltar o backup"},{"categories":[{"LinkTitle":"Pessoal","RelPermalink":"/categories/pessoal/"}],"content":"Perfeccionista x Normal Vou mostrar aqui a diferença entre uma pessoa perfeccionista e uma pessoa normal, tranquila.\nImagine o seguinte contexto:\nSão 17 horas e você quer fazer um post curtinho para seu blog. Nada demais. Apenas umas 10 linhas de texto, sem imagem, sem firula, sem stress.\nPESSOA PERFECCIONISTA Começando Você gera o post com um comando, abre o arquivo pra poder pensar no que vai escrever. Você olha para a tela e percebe que o arquivo está em branco. Precisaria ter um cabeçalho frontmatter. Sem problemas, você pensa: - Posso pegar um cabeçalho de qualquer post antigo mas\u0026hellip; Por que não automatizar o comando pra já trazer um cabeçalho pré-preenchido?\n40 minutos depois Você mexeu em 2 arquivos diferentes: criou um script novo e também um template novinho com um modelo de cabeçalho. Quando você gera a postagem, ela já vem com o cabeçalho e ele possui o título preenchido a partir do nome do arquivo, data do dia, algumas tags e demais descritores.\nAgora você gera seu post novamente e magicamente ele já tem cabeçalho. Você escreve 2 linhas e manda dar build. Ixi! Apareceu um errinho. Vamos olhar? Você olha todo o log de build e deploy. Parece um erro bobo. Por isso mesmo, você vai corrigir HOJE.\n2 horas depois Você já mexeu em mais de 20 arquivos. Revisou todos os scripts de update e build. O erro era bobo sim. Só um arquivinho com caracter inválido deixado num diretório qualquer. Você exclui o dito cujo e\u0026hellip; \u0026ldquo;ABRACADABRA!\u0026rdquo; O buid e o deploy rodoram liso dessa vez. O post já subiu e, melhor de tudo, zero erros.\nMas pera aí\u0026hellip; Aqueles scripts de build que você checou estão horríveis né? Cheios de strings hard-coded que podiam se transformar em lindas variáveis. Assim, se um dia vc mudar de sistema operacional, mudar de computador, mudar de disco, você não vai precisar ficar tendo trabalho chato de acertar os scripts. Vamos arrumar isso agora mesmo, certo?\n4 horas depois Você refez todos os scripts de update e build. Refez também o script de backup. Criou aliases bem legais de no máximo 3 letras, só para o caso de você ter que fazer MUITAS postagens num mesmo dia (algo em torno de 1000?) e não ter que ficar digitando aqueles comandos enormes de até 9 caracteres. Deu trabalho, mas tudo vale a pena, quando a alma não é pequena.\nPensando novamente no cabeçalho, você chega à conclusão que ele tem \u0026ldquo;tags\u0026rdquo; e \u0026ldquo;categories\u0026rdquo;, entidades que no fundo são quase a mesma coisa. Daí você resolve que os categories vão se chamar \u0026ldquo;Tópicos\u0026rdquo; e serão tags mais gerais, enquanto as tags, continuarão se chamando tags mesmo, pois são mais específicas. Por que não aproveitar que já estamos com a mão na massa, para implementar essa pequena melhoria, rapidinho?\n3 horas depois Você foi no arquivo de configuração e leu ele todo, algo em torno de 300 linhas. Descobriu onde se dá o nome de categories para categoria. Trocou o nome para \u0026ldquo;Tópicos\u0026rdquo;, resolvido. Também foi em CADA UM dos 32 posts (ainda bem que o blog estava parado) e em cada cabeçalho, tirou as \u0026ldquo;categorias específicas\u0026rdquo;. De quebra, aproveitou pra atualizar a foto de perfil do blog. Ficou bacana, hein! Mas pera aí\u0026hellip; Essa foto de perfil não está exatamente no mesmo tom da paleta do blog. O azul está meio que esverdeado demais. Tranquilo, nós temos GIMP instalado e com ele podemos dar logo um jeito nisso! Coisa rápida.\n4 horas depois Você gerou pelo menos 5 versões diferentes da foto do perfil. Todas com menos verde atrapalhando o azul. Porém, algumas versões ficaram claras demais, outras escuras demais. Você passou 20 minutos só consertando as cores, reduzindo o ruído, e o restante do tempo tentando acertar a iluminação. Se a foto fica escura demais, perde detalhes quando o blog entra em modo dark. Se ela fica clara demais, as bordas parecem querer se misturar com o fundo quando o blog entra no modo light. Resultado: depois de \u0026ldquo;alguns testes\u0026rdquo;, a foto ficou linda e você decide que também vai usá-la no Instagram, no Whatsapp e no Linkedin.\n1 hora depois Você precisou ajustar o \u0026ldquo;tom\u0026rdquo; da foto em cada um desses aplicativos e acabou gerando mais 3 versões da foto. Nesse meio tempo, você olhou pra tela e viu todos aqueles scripts que você ajustou anteriormente, espalhados pelo diretório raiz do blog. Como está feio isso, né? Nééééé? Não dá pra deixar assim não!\n30 minutos depois Você criou a pasta \u0026ldquo;scripts\u0026rdquo;. No começo ela ia se chamar \u0026ldquo;bin\u0026rdquo; mas depois de pesquisar no github outros códigos fontes de blogs, você percebeu que a maioria chama a pasta \u0026ldquo;scripts\u0026rdquo;, de scripts mesmo. Você moveu todos os scripts pra dentro dela, abriu cada um deles e acertou o path. Puxa, que sorte! Eram só 7 arquivos. Depois disso, você testou cada um deles, só pra garantir que tudo está funcionando como manda o figurino.\nAgora sim! Você volta ao post, edita, escreve as linhas restantes de texto e manda dar build!\nParabéns! Trabalho finalizado, bora pro café da manhã.\nPESSOA NORMAL Começando Você gera o post com um comando e abre o arquivo gerado pra poder pensar no que vai escrever. Você olha para a tela e percebe que o arquivo está em branco. Sem problemas: você vai num post antigo, copia de lá o cabeçalho e a seguir, escreve algumas singelas linhas.\n10 minutos depois Você fecha o arquivo, roda o script de build. Confere a postagem. Post publicado. Fim!\n","permalink":"https://alansantosmg.netlify.app/post/2025-04-22-como-identificar-um-perfeccionista/","tags":[{"LinkTitle":"Diário","RelPermalink":"/tags/di%C3%A1rio/"}],"title":"Identificando um perfeccionista"},{"categories":[{"LinkTitle":"Pessoal","RelPermalink":"/categories/pessoal/"}],"content":"De volta à ativa Depois de anos sem atualizar, resolvi retomar esse blog. Motivos pra voltar não faltam:\nTenho pensado há algum tempo em ter algum tipo de diário. Pode ser terapêutico.\nEste blog tem um layout razoável. Bem minimalista. Gosto dele.\nTambém tem várias automações: build, deploy, backup, etc. Investi tempo nisso.\nEstou saturado de redes sociais.\nMantenho controle total sobre meus dados.\nAqui posso dizer o que eu quiser. Sem políticas de privacidade, sem termos de uso.\nSobre o dia de hoje O tema que usei para fazer o layout do blog, acabou sendo descontinuado pelo autor.\nEnquanto isso, a plataforma CMS HUGO continua evoluindo.\nQuando fui fazer esta postagem, simplesmente não compilou. Quando isso acontece, por questão de segurança, o blog não atualiza.\nPrecisei ajustar o tema e isso consumiu boa parte do meu dia entre estudos e ajustes no código.\nComo o criador do tema não dá mais manutenção, vou seguir consertando o que aparecer, enquanto não quebra de vez, assim como aquele carro usado, que vira xodó do dono.\nMudanças Algumas coisas vão mudar por aqui:\nDevo linkar minha base de conhecimento do github pra cá. Também vou dar uma polida nas categorias (agora se chama tópicos) e tags. Ainda pensando se continuo postando em PT-BR ou se passo a escrever em inglês. ","permalink":"https://alansantosmg.netlify.app/post/2025-04-22-retomando-em-2025/","tags":[{"LinkTitle":"Diário","RelPermalink":"/tags/di%C3%A1rio/"}],"title":"Retomando em 2025"},{"categories":[{"LinkTitle":"Tecnologia","RelPermalink":"/categories/tecnologia/"}],"content":"Voltando ao Go em 2023! 👨🏻‍💻 Olá pessoal!\nO post de hoje tem por finalidade marcar uma nova fase do blog.\nPara começar ele marca à atualização do tema para sua versão 3.0 e também da instalação do CMS Hugo que utilizo.\nMarca também meu retorno às postagens. A coisa estava meio abandonada por aqui, então é hora voltar aos trilhos.\nMarca também uma derrota e um recomeço. Depois de passar quase 1 ano tentando programar em C# e até em repensar o Phyton, descobri (espero, não tardiamente) que curto mesmo é a linguagem GO.\nDifícil explicar porquê, mas me adapto melhor ao jeito meio raw e meio weird do Go.\nObviamente estou bem mais maduro e também mais consciente de que meu nicho é mesmo o cloud e devops e para isso, Go não poderia ser a melhor escolha para o futuro. Portanto é também um recomeço!\nDaqui a alguns anos saberei se fui um bom futurólogo profissional ou se Go não vai vingar aqui na terra das bananas e se tornará apenas um hobby de nerd.\nEntão é isso! Feliz 2023 e vamo que vamo!\n","permalink":"https://alansantosmg.netlify.app/post/2022-12-27-back/","tags":[{"LinkTitle":"Go","RelPermalink":"/tags/go/"},{"LinkTitle":"Programação","RelPermalink":"/tags/programa%C3%A7%C3%A3o/"}],"title":"I'm back"},{"categories":[{"LinkTitle":"Tecnologia","RelPermalink":"/categories/tecnologia/"}],"content":"Conversão de tipos em constantes? 👨🏻‍💻 Olá pessoal!\nHoje vamos falar um pouco sobre \u0026ldquo;constantes\u0026rdquo;. Para começar veja abaixo o seguinte código:\npackage main import ( \u0026#34;fmt\u0026#34; ) func main() { const c = 3 fmt.Printf(\u0026#34;c: %v %T\\n\u0026#34;, c, c) } No exemplo acima, criamos uma função main e declaramos uma constante de nome c atribuindo à mesma o valor 3.\nConstantes não podem ser vazias, pois como o próprio nome diz, elas são imutáveis. Logo, se criassemos uma constante vazia e depois fossemos atribuir valor, ela não seria imutável por natureza.\nNo caso de Go, ao realizar a atribuição, o tipo da constante é inferido de acordo com o valor que foi atribuído à mesma.\nNo código acima foi atribuído o valor 3 então, pela inferência de tipos, c é uma constante do tipo inteiro.\nA prova disso pode ser obtida quando solicitamos através de um Printf o retorno do tipo, usando %T.\nfmt.Printf(\u0026quot;c: %v %T\\n\u0026quot;, c, c)\nVamos adicionar uma nova linha ao nosso código.Agora pense um pouco e responda:\nSendo c definido como constante do tipo int, a operação realizada no código abaixo é permitida?\npackage main import ( \u0026#34;fmt\u0026#34; ) func main() { const c = 3 fmt.Printf(\u0026#34;c: %v %T\\n\u0026#34;, c, c) fmt.Printf(\u0026#34;c: %v\u0026#34;, c + 3.333) } Surpreso com o resultado? Então vamos à próxima pergunta:\nQual é tipo de c após a operação?\nPara saber, vamos acrescentar um %T à nossa nova linha de código.\npackage main import ( \u0026#34;fmt\u0026#34; ) func main() { const c = 3 fmt.Printf(\u0026#34;c: %v %T\\n\u0026#34;, c, c) fmt.Printf(\u0026#34;c: %v %T\u0026#34;, c + 3.333,c) } Certamente você deve ter ficado ainda mais intrigado com o resultado, mas nosso experimento ainda não está completo.\nFinalmente, vamos acrescentar mais uma linha ao nosso código:fmt.Printf(\u0026quot;c: %v %T\\n\u0026quot;, c, c)\nO programa completo vai ficar assim:\npackage main import ( \u0026#34;fmt\u0026#34; ) func main() { const c = 3 fmt.Printf(\u0026#34;c: %v %T\\n\u0026#34;, c, c) fmt.Printf(\u0026#34;c: %v %T\u0026#34;, c + 3.333,c) fmt.Printf(\u0026#34;c: %v %T\\n\u0026#34;, c, c) } Deu nó na cabeça?\nVamos às explicações Em Go, ao declarar uma constante, ela infere seu tipo de acordo com o valor atribuído à mesma, todavia, essa constante pode em algumas operações se comportar como se fosse de outro tipo, principalmente quando não há perda ou truncagem de informação.\nNo nosso caso, c é um int, porém uma conversão para float é perfeitament possível sem perda de informação significativa.\nNesse caso, o compilador é inteligente o suficiente para entender isso e realiza a conversão de tipos em tempo de execução para a operação.\nOu seja, embora c seja um int, para uma operação de adição com um float o compilador realiza a conversão durante a execução sem gerar erro.\nMas é preciso lembrar que c é uma constante, logo imutável. Seu valor armazenado na memória continua sendo do tipo inteiro, como pudemos provar em nossa última linha de código.\nEspero que tenham gostado e até a próxima.\n","permalink":"https://alansantosmg.netlify.app/post/2022-12-27-constantes/","tags":[{"LinkTitle":"Go","RelPermalink":"/tags/go/"},{"LinkTitle":"Programação","RelPermalink":"/tags/programa%C3%A7%C3%A3o/"}],"title":"Um papo sobre constantes em Go"},{"categories":[{"LinkTitle":"Tecnologia","RelPermalink":"/categories/tecnologia/"}],"content":"Que tal aprender Go? 👨🏻‍💻 Olá pessoal!\nA dica de hoje é para você que quer aprender Go, a linguagem do Google. Eu não vou ficar aqui explicando que linguagem é essa e pra que serve, pois se você está lendo esse post, imagino que já saiba disso. Se não sabe, clique aqui .\nQuando iniciei meu aprendizado, busquei alguns cursos na web para acelerar o aprendizado.\nCursos de Go em inglês A maioria dos cursos que encontrei são em língua inglesa. Para mim, isso não é uma barreira mas pode ser para outras pessoas. Alguns dos mais legais são so do Todd Macleod. Ele possui uma didática muito bacana que pode ser conferida em: Learn how To Code Google\u0026rsquo;s Go (golang) Programming Language .\nCursos de Go em português Curso do Otávio Gallego Em português, encontrei na Udemy: Aprenda Golang do Zero do Otávio Gallego.\nTrata-se de um curso pago, divido em duas partes: a primeira referente ao aprendizado da linguagem em si e a segunda focada no desenvolvimento de uma aplicação web.\nO conteúdo é bom, mas carece em um aspecto fundamental: a primeira parte praticamente não possui exercícios.\nJá a segunda parte é super completa, pois o autor vai construindo uma aplicação web em GO, passo-a-passo, seguindo pelo front-end, backend e incluindo até mesmo a parte de conexão com database.\nCurso da Ellen Korbes Depois de continuar pesquisando, encontrei uma verdadeira pérola que é o curso Aprendago.com da Ellen Korbes.\nA Ellen começou a ensinar Go justamente para fixar o próprio aprendizado. Por conta de seu interesse na linguagem e participação ativa nas Gopher Conferences, acabou sendo contratada para trabalhar em uma empresa na Alemanha.\nO curso dela foi postado no Youtube e possui alguns diferenciais:\nDidática: As explicações da Ellen são extremamente claras. É impossível não entender. Método: Ela explica e a seguir demonstra na prática o que foi explicado. Exercícios: A cada capítulo há muitos exercícios para fixar o aprendizado. É totalmente em português. Além de ensinar a programar, mostra como utilizar a documentação oficial. É super caristmática e divertida. Possui github para postagem de códigos e exercícios. Estimula postagem das soluções e discussão pelos alunos. É totalmente free. Aceita contribuições voluntárias. (Se puder, contribua!) Aborda conceitos que não são abordados em outros cursos do gênero. Exemplo: Ok idiom. É o mais completo que encontrei: são 185 aulas ao todo! Está disponível na plataforma mais acessível: youtube. Dispensa uso de IDEs, instalações e configurações do computador para sua realização. O curso da Ellen foi elaborado por volta de 2017 e postado em 2020. Apesar disso, continua bastante atualizado.\nA Ellen agora está mais atarefada com suas atribuições, mas ainda continua contribuindo, criando live sessions com conteúdo mais avançado para aqueles que concluíram o curso.\nQuer programar em Go? Comece hoje: Se você está decidido a aprender Go, porque não reunir o melhor dos dois mundos? Minha recomendação é a seguinte:\nIniciar fazendo as 185 aulas do curso da Ellen Korbes. Aprendago.com . Fazer a segunda Parte do curso do Otávio Gallego. Aprenda Golang do Zero . Voltar ao canal da Ellen no Youtube e assistir as Lives gravadas. Ir para um curso intermediário mais voltado para arquitetura como Exploring The Go (golang) Programming Language ou web development w/ Google\u0026rsquo;s Go (golang) Programming Language , ambos do Todd McLeod. É isso aí pessoal! Até a próxima.\n","permalink":"https://alansantosmg.netlify.app/post/2021-04-21-cursogo/","tags":[{"LinkTitle":"Go","RelPermalink":"/tags/go/"},{"LinkTitle":"Programação","RelPermalink":"/tags/programa%C3%A7%C3%A3o/"}],"title":"Curso Aprenda Go"},{"categories":[{"LinkTitle":"Tecnologia","RelPermalink":"/categories/tecnologia/"}],"content":"👨🏻‍💻 Olá pessoal!\nPrecisamos conversar sobre Slices em Go!\nQuem começou a estudar Go deve ter noção de que nessa linguagem, os slices tem papel mais importante do que os arrays como entidade de armazenamento de dados.\nNa prática, o programador vai lidar o tempo todo com slices, enquanto os arrays são criados de forma subjacente pela linguagem.\nTrabalhar com slices é fácil. É algo bem parecido com o que fazemos em outras linguagens de programação, mas não se engane: existem diferenças importantes que se desconsideradas, podem trazer grandes dores de cabeça.\nHoje vou mostrar uma dessas diferenças que é uma verdadeira Pegadinha do Malandro para os mais desavisados.\nAcompanhe o raciocínio no código comentado abaixo:\npackage main import \u0026#34;fmt\u0026#34; func main() { // Criamos primeiro slice com dados primeiroSlice := []string{\u0026#34;a\u0026#34;, \u0026#34;b\u0026#34;, \u0026#34;c\u0026#34;, \u0026#34;d\u0026#34;, \u0026#34;e\u0026#34;} // Mostramos primeiro slice [a b c d e] fmt.Println(primeiroSlice) // Criamos segundo slice usando itens do primeiro slice: [a d e] segundoSlice := append(primeiroSlice[:1], primeiroSlice[3:]...) // Mostramos segundo slice [a d e] fmt.Println(segundoSlice) // Mostramos novamente primeiro slice [a d e d e] // Como mudou o primeiro slice se ele não foi alterado? fmt.Println(primeiroSlice) // Explicação - Pegadinha do malandro: // Ao criar o segundo slice Go refatia (refaz) // o primeiro array/slice subjacente. // Licão: Cuidado ao trabalhar com Slices. } Se você não acredita, basta rodar esse código em sua máquina.\nÉ isso aí! Agora que você já sabe, abre o olho:\nMuito cuidado ao usar slices.\nEste tipo de coisa não ensinam nos bootcamps da vida!\n","permalink":"https://alansantosmg.netlify.app/post/2021-04-20-fatiando-slices/","tags":[{"LinkTitle":"Go","RelPermalink":"/tags/go/"},{"LinkTitle":"Programação","RelPermalink":"/tags/programa%C3%A7%C3%A3o/"}],"title":"Refatiando Slices em Go"},{"categories":[{"LinkTitle":"Tecnologia","RelPermalink":"/categories/tecnologia/"}],"content":"👨🏻‍💻 Olá pessoal!\nEntre 2020 e 2021 testei uma série de distribuições Linux, tanto por motivos profissionais quanto pessoais. Hoje farei um pequeno resumo sobre a experiência.\nUbuntu 20.04 Esta foi a primeira distribuição testada em 2020. A príncipio, fiquei impressionado pelas melhorias na interface Gnome, que evoluiu muito em termos de responsividade, embora estivesse com um consumo de CPU alto (na casa de 10%) mesmo quando o S.O estava totalmente ocioso.\nUm problema em particular me fez sair desta distribuição:\nSem nenhuma razão aparente em determinados momentos do dia, o DNS resolver parava de funcionar, embora a conexão com a internet continuasse ok.\nPrecisei passar dias e dias pesquisando por uma solução e acabei descobrindo que tratava-se de um bug do Nsswitch, que afetava inclusive versões mais antigas da distribuição.\nOutro ponto negativo era o fato de apesar da melhora sensível da responsividade do Gnome, eu ainda não o achava suficientemente responsivo para algumas operações.\nUm problema irritante é o fato da rolagem de página com mouse ser excessivamente lenta nos navegadores web. Para resolver isso é preciso instalar o pacote Imwheel, colocá-lo para iniciar junto com a interface gráfica e ainda rodar um pequeno script que cria um arquivo de configuração na pasta home do usuário, definindo uma rolagem mais agressiva do mouse na paginação.\nOutro problema é o fato do editor Vim travar se o usuário executar a sequência Ctrl+S, erroneamente. Para corrigir isso é preciso adicionar um parâmetro no arquivo .bashrc .\nArch Linux Comecei a instalar mas confesso que deu preguiça. Se for para fazer as coisas na mão, acho que ainda prefiro o Slackware que foi a distribuição onde aprendi Linux e a qual considero a melhor existente.\nMx Linux Cheguei a baixar e experimentar a última versão disponível. Achei o sistema muito rápido, principalmente no boot. Cheguei a usar por uma semana, mas de repente o atualizador do sistema quebrou sem motivo aparente.\nUma coisa que todo mundo gosta porém me incomodou, é a existência das MX-Tools. São ferramentas de administração muito específicas. Acho que prefiro trabalhar com ferramentas padrão das distribuições baseadas no Debian. Não vejo valor naquilo que é específico demais, pois o conhecimento não é útil para usar em outro lugar.\nLinux Mint 19 - XFCE Quando fui instalar um sistema operacional mais leve para um notebook que iria deixar com minha filha para que ela pudesse assistir aulas virtuais, acabei optando pelo Linux Mint 19, justamente para tentar correr do bug do nsswitch do ubuntu.\nEmbora a base das distrbuições seja a mesma, o time do Mint faz um trabalho melhor no \u0026ldquo;polimento do sistema\u0026rdquo; que o próprio pessoal da Canonical.\nEsta distribuição ainda está rodando na máquina da minha filha e até agora não apresentou nenhum problema. É preciso ressaltar que ela usa somente o navegador, câmera e microfone para aulas no Zoom.\nNo Mint, tanto o bug do Mouse quanto do Vim prosseguem \u0026ldquo;herdados da base do Ubuntu\u0026rdquo;.\nDebian 9 O Debian, foi outra distribuição na qual construí meu aprendizado sobre Linux, anos atrás.\nInstalei o Debian em uma máquina virtual que seria utilizada em uma empresa como servidor para o software de helpdesk GLPI. Não me impressionou.\nO desempenho me pareceu ok, mas tive problemas na configuração do teclado para PT-BR. Fiz de tudo e não encontrei uma solução satisfatória. Como estava sem tempo, troquei pelo Ubuntu server 20.10.\nUbuntu Server 20.10 O instalador do Ubuntu Server é uma mão na roda. Conseguiu ler e pegar credenciais no Github, configurou o teclado perfeitamente sem problemas, e também as placas de rede, tipo de endereçamento, ip, networks, tudo de forma muito mais simples e inteligente que no Debian.\nResultado: Ao término da instalação o servidor já fica 100% operacional. Outro detalhe importante, o tamanho da máquina virtual ficou menor que o Debian.\nTive um pouco de dificuldade em assimilar o Netplan (nova forma de configurar endereçamento de rede), que precisei usar para algumas configurações de interface de rede ip. Porém depois de aprendido, achei fácil e até mais intuitivo.\nEsta máquina ainda está rodando perfeitamente na empresa com o GLPI instalado.\nPara servidores, O Ubuntu Server definitivamente é meu SO preferido.\nUbuntu Desktop 20.10 - Gnome Resolvi dar uma nova chance ao Ubuntu em sua última versão no meu notebook pessoal. Diziam que seria mais otimizado para máquinas modestas (meu processador é da geração 7).\nO O Ubuntu 20.10 desktop tem uma sequência de boot significativamente mais rápida que a versão anterior e o Gnome ficou aceitavelmente responsivo. Porém mesmo sem nada rodando, o indicador de CPU mostrava um consumo constante, oscilando entre 2% e 5%, sem nenhuma razão aparente.\nDefinitivamente o Gnome ainda não está suficientemente otimizado e penso que só faz mesmo sentido para máquinas high end.\nOs mesmos problemas das versões anteriores ainda estão presentes:\nbug do nsswitch que faz o DNS parar de resover bug da rolagem do mouse na paginação dos navegadores bug do travamento do Vim com Ctrl + S Como instalei em uma máquina nova (notebook HP), dois novos problemas surgiram:\nerro na instalação, que só consegui corrigir ao adicionar o parâmetro de inicialização do Linux pci=nomsi,noaer no GRUB. erro no initramfs que foi corrigido ao trocar um parametro de compactação no arquivo intramfs.conf Xubuntu 20.10 - XFCE Em face ao consumo chato de CPU do Gnome, resolvi mudar para o Xubuntu. O XFCE é feio que dói, mas o desempenho impressiona. Consumo quase zero de cpu quando está ocioso.\nOs mesmos problemas encontrados na versão com Gnome também estão presentes nessa distribuição.\nSinceramente, acho que a Canonical poderia ter feito um trabalho melhor, corrigindo definitivamente esses pequenos bugs bobos que acabam afastando usuários menos experientes.\nKubuntu 20.10 Depois de passar uns 2 meses usando o Xubuntu com alguns pequenos travamentos de aplicação ocasionais, mensagens de erro no XFCE, um log problemático aqui e ali, resolvi experimentar o Kubuntu.\nSobre o Kubuntu, a primeira a coisa a dizer é: O KDE plasma 5 é lindo! Tão responsivo quanto o XFCE e com um consumo de ram e cpu bem interessantes para uma interface tão avançada. Sim, o KDE não é para qualquer um.\nNo KDE é possível configurar praticamente todos os aspectos da interface. O gerenciador de arquivos Dolphin, já vem com terminal embutido. Basta teclar F4. Achei super prático.\nOs efeitos do KDE são de tirar o fôlego e mesmo o tema padrão já é bonito por natureza. Com 1 clique é possível fazer ele ficar como um MAC/OS, pois há temas que imitam praticametne todos os detalhes desse SO.\nOs bug das demais versões do Ubuntu, não existem no Kubuntu. Em compensação, outros problemas foram encontrados.\nO principal deles é um executável chamado baloo_file. Trata-se de um indexador que em determinados momentos fica fazendo o HD estalar ao fazer seu trabalho, além de consumir alguns ciclos de CPU.\nOutro problema que achei grave: não tem opção para configurar teclado ABNT2 na interface. Passei dias pesquisando por uma solução definitiva e não consegui encontrar.\nPara resolver, precisei criar um script que roda na inicialização da interface e que executa um comando setxkbd com os parâmetros para teclado ABNT2. Funciona, mas considero como um RTI (recurso técnico improvisado), ou seja: gambiarra.\nOdeio gambiarras, mesmo quando elas funcionam!\nEu só descobri que o teclado não estava funcionando corretamente quando precisei digitar um texto no Write.\nCheguei a refazer a instalação, achando que tinha esquecido algum passo, mas na segunda tentativa, descobri que o instalador não tem uma opção para testar o layout de teclado escolhido, como existe em outras versões do Ubuntu\nComo puderam cometer um erro crasso desses?\nFora isso, algo inusitado aconteceu: por algum motivo desconhecido, foi retirada do arquivo Group a associação de minha conta de usuário para rodar comandos como root usando o comando sudo. Achei super bizarro isso!\nConsegui resolver fazendo um \u0026ldquo;boot de reparo\u0026rdquo; através do Grub, mas isso me deixou com a pulga atrás da orelha: Como confiar num sistema desses?\nUm terceiro problema foi o fato do meu headphone bluetooth travar algumas vezes e ter comportamentos estranhos quando estava sendo utilizado. Descobri isso da pior maneira possível: ao fazer uma entrevista de emprego pelo Google Meeting. Fui salvo pelo meu celular, que felizmente estava carregado no momento.\nSem dúvida alguma o KDE é fantástico como interface gráfica. Tem muitas opções de configuração, sendo moderno e interessante. Dele, creio que o Windows copiou várias coisas (nem tudo a Microsoft conseguiu). Acho que só perde mesmo para interface do MAC.\nPena que ainda não achei estável o suficiente para uma máquina de produção.\nLinux Mint 20 - XFCE Depois de me estranhar com a falta de estabilidade do KDE, resolvi partir para a última versão disponível do Mint na interface XFCE.\nNo Mint 20 ainda existem alguns bugs conhecidos da base do Ubuntu:\nproblema da rolagem do mouse problema do initramfs problema do pci nos parâmetros do linux no Grub problema de travamento do wifi após a suspensão Para esses problemas eu já tinha soluções funcionais documentadas, então ok.\nDois novos bugs foram encontrados:\na lentidão da internet no wifi ao usar junto um fone de ouvido bluetooth hora do sistema com 3 horas de atraso, por causa do dualboot com Windows Uma das coisas legais do Mint é o seu fórum de suporte. Tem solução para quase tudo lá e a comunidade é muito amigável. Acho que esta sem dúvida é maior vantagem do Mint.\nRapidamente encontrei a solução para os dois novos bugs.\nNo Mint 20, o XFCE é bem mais polido que no Ubuntu. Não só ele, a própria distribuição em si me parece \u0026ldquo;menos bugada\u0026rdquo;. O erro do nsswitch por exemplo não existe. Não ocorrem erros durante a execução do XFCE. Os logs estão limpos! O consumo de CPU é menor do que no Xubuntu, além de variar menos quando se abre outros aplicativos como Chromium ou Vscode. O consumo de memória também me pareceu mais constante.\nA loja de aplicativos funciona mil vezes melhor do que a loja do Ubuntu. Ponto para Flatpack Store sobre a Snap Store que é tremendamente bugada no Ubuntu.\nNo Xubuntu, alguns aplicativos tinham comportamento estranho, como o Firefox que de uma hora para outra consumia uma quantidade absurda de RAM e ficava lento sem motivo algum, em páginas as quais eu estava acostumado navegar. O mesmo acontecia com o Chrome.\nPara o Virtualbox da Snap Store funcionar direito no Xubuntu, precisei fazer vários \u0026ldquo;cambalachos\u0026rdquo; na linha do comando. No Mint: instalar e usar.\nNo Mint, as aplicações simplesmente não travam e não ficam lentas se permanecem muito tempo abertas.\nIsso tudo me faz concluir que no Ubuntu na versão oficial com Gnome as coisas funcionam bem melhor que nas variantes Xubuntu e Kubuntu.\nSe o Gnome ainda não fosse \u0026ldquo;pesadão\u0026rdquo; demais para minha máquina, certamente seria a versão que estaria usando. Acho que o time do Gnome está no caminho certo não vai demorar muito para que tornem sua interface tão leve quanto é produtiva.\nAté lá, fico no Mint. O XFCE tem uma interface espartana e mais simples que o Mate e Cinnamon, mas entrega o que promete: é leve, funcional.\nJá o SO, é estável o suficiente para uso profissional. Nele posso abrir 20 abas no navegador sem dó, rodar o Vscode, máquinas virtuais, compilar programas em Go, ouvir música ou assitir ipTV, sem consumir totalmente os 8gb de ram e sem perder responsividade.\nFarei um post específico sobre os pequenos bugs encontrados no Ubuntu/Mint e as respectivas soluções que encontrei e estou utilizando.\nDistribuições baseadas em pacotes RPM Para 2021 estou querendo experimentar uma distibuição rpm like. Ainda não me decidi qual.\nTem o Fedora, mas acho que ele é muito \u0026ldquo;on the edge\u0026rdquo;, por ser palco de teste de tudo que vai entrar posteriormente no RedHat.\nTem o OpenSuse, que me parece interessante para estudo, mas fico desanimado pelos relatos de desempenho que não impressiona, apesar da estabilidade.\nO maior candidato era o CentOS. Porém, a mudança de fixed release para rolling release trouxeram incertezas quanto à distribuição, pois pode prejudicar justamente a estabilidade que era um ponto forte do CentOS. A RedHat está tentando matar a concorrência que ela mesma criou.\nPor por isso, aguardarei um pouco. Seja como for, em bare metal continua o Mint 20 XFCE, sólido como uma rocha.\nQue sigam os jogos em 2021.\n","permalink":"https://alansantosmg.netlify.app/post/2021-02-19-aventuras-linux/","tags":[{"LinkTitle":"Linux","RelPermalink":"/tags/linux/"}],"title":"Aventuras Linux 2020-2021"},{"categories":[{"LinkTitle":"Gestão","RelPermalink":"/categories/gest%C3%A3o/"}],"content":"👨🏻‍💻 Olá pessoal!\nHoje vamos falar um pouco sobre OKR.\nA príncipio, estas 3 letrinhas podem parecer intimidadoras como a maioria dos jargões da administração, porém, a verdade é que trata-se de algo bem simples, que qualquer mortal pode facilmente entender e implementar em sua organização.\nVamos começar pela pronúncia. A maneira certa de fazê-la é em inglês, então deve ser pronunciado assim: ô-Ki-ar e não ó-ká-érre.\nMas o que é OKR? OKR é uma ferramenta de gestão (sistema), que foi criada por Andy Grove, ex CEO da Intel, para criar alinhamento, engajamento e autonomia em equipes. As empresas utilizam OKR para definir metas (Objectives) e mensurar seu cumprimento através medição de resultados-chave (Key-results) obtidos.\nComo funciona? A empresa (ou melhor, equipes), em conjunto com a direção, elaboram uma meta macro que deve ser atingida num tempo x. As áreas de negócio elaboram suas metas que irão contribuir para a meta global na forma de resultados a serem atingidos.\nUm ponto importante a destacar é o princípio da autonomia, que deve ser preservada na utilização da ferramenta.\nTodo o processo de construção se dá a partir das equipes. Ele NÃO ocorre de forma top-down!\nA estrutura do OKR Objetivo O Objetivo (meta) possui caráter qualitativo e deve ser a resposta para a pergunta \u0026ldquo;Aonde quero chegar?\u0026rdquo;\nUm objetivo pode ser elaborado através da seguinte frase:\nEu quero_____________ mensurado por___________.\nResultados-chave Os resultados-chave (KR\u0026rsquo;s) possuem caráter quantitativo e devem ser a reposta para a pergunta \u0026ldquo;Como eu saberei que estou chegando lá?\u0026rdquo;\nEnquanto nos KPIs, mensuramos os desempenho das áreas (performance), com os KR\u0026rsquo;s, nós mensuramos o quanto as áreas de negócio ajudaram a organização a antigir um determinado objetivo (contribuição).\nOs KR\u0026rsquo;s precisam ser SMART (s) Específicos (m) Mensuráveis (a) Atingíveis (r) Realistas (t) Avaliados num período de tempo fixo. Avaliação dos resultados Os resultados devem ser avaliados ao final de períodos fixos de tempo (normalmente quartils).\nDe modo geral, o esperado deve ficar em torno de 70% do estimado. As metas devem ser altas para ajudar a alavancar a produtividade e motivar as equipes para sua conquista.\nSe o esperado ficar acima de 100%, a meta definida provavelmente foi subestimada e precisa ser revista para cima.\nSe o esperado ficar muito abaixo de 50%, a meta definida provavelmente foi superestimada e precisa ser revista para baixo.\nO período ideal para revisão de metas gira em torno de 3 meses (1 quartil - 4 revisões no ano).\nEsta questão do tempo de avaliação é importante, sendo um dos fortes motivos de adoção do OKR por parte de startups, pois diferentemente do \u0026ldquo;planejamento estratégico de longo prazo\u0026rdquo;, o OKR ajuda a empresa a corrigir sua rota num prazo mais curto, evitando a quebra (startups tem capital restrito) além de servir de alavanca para crescimento acelerado.\nAs metas podem ser revistas por exemplo, se houver alguma mudança no mercado, ou ainda por algum fator interno dentro da própria empresa, ou mesmo por motivação das equipes.\nPor isso, o ORK se encaixa mais em um modelo agile do que no modelo de planejamento estratégico tradicional (metas estáticas e de longo prazo), por ser terminantemente adaptativo.\nPasso-a-passo para implementação Determinar qual é o grande objetivo da organização para o ano.\nDividir os objetivos desdobrados em trimestres. Sendo para o primeiro trimestre, 3 objetivos que precisam ser atingidos primeiro.\nCriar de 3 a 5 resultados-chave no máximo, por área de negócio, para os objetivos do trimestre. O ideal é que cada área possa definir quais serão as suas contribuições (KR\u0026rsquo;s) para as metas, sendo também sua responsabilidade a mensuração das mesmas dentro do período especificado.\nA metodologia também pode ser aplicada da área para colaborador, ou seja, os KR\u0026rsquo;s da área podem se tornar metas da área que vão definir as contribuições individuais de cada colaborador para atingimento, envolvendo assim, todos os níveis da organização. Mensurar os KR semanalmente. Pode ser uma rápida conversa com os gestores das áreas. Uma técnica aplicável é usar o esquema de dayly meetings da metodologia Scrum, só que semanalmente.\nAo final de trimestre fazer uma reunião de apresentação de resultados, avaliação geral e refazer os passos dois e três.\nFinalizando O objetivo deste artigo era apresentar o OKR, uma ferramenta de gestão \u0026ldquo;agile\u0026rdquo; que tem conceitos simples, porém de utilização abrangente que requer envolvimento e engajamento das equipes dentro da organização, mas que pode trazer crescimento rápido no curto prazo, sendo por isso, muito utilizada por startups.\nEspero que tenham gostado e até a próxima.\n","permalink":"https://alansantosmg.netlify.app/post/2021-02-09-okr5minutes/","tags":[{"LinkTitle":"Metodologias","RelPermalink":"/tags/metodologias/"}],"title":"OKR em 15 minutos"},{"categories":[{"LinkTitle":"Pessoal","RelPermalink":"/categories/pessoal/"}],"content":"👨🏻‍💻 Olá pessoal!\nAcho difícil falar em começo de ano se não der pelo menos uma mexidinha no layout por aqui.\nEstava achando o visual do blog muito sizudo, tiozão demais pro meu gosto e por isso, resolvi fazer algumas \u0026ldquo;pequenas\u0026rdquo; mudanças.\nDepois de tanto mexer tentando melhorar o tema, cheguei à conclusão que o melhor mesmo era jogar tudo no lixo e buscar outro mais interessante.\nDepois de dias experimentando, acabei optando por um tema com visual bem MINIMALISTA, absolutamente CLEAN para combinar com meus valores e de quebra, proporcionar uma excelente legibilidade.\nEntão é isso. 2021 é tempo de renovação!\n","permalink":"https://alansantosmg.netlify.app/post/2021-02-06-renovando-blog/","tags":[{"LinkTitle":"Diário","RelPermalink":"/tags/di%C3%A1rio/"}],"title":"Novo layout do blog"},{"categories":[{"LinkTitle":"Livros","RelPermalink":"/categories/livros/"},{"LinkTitle":"Tecnologia","RelPermalink":"/categories/tecnologia/"}],"content":"The Go Workshop A dica de hoje é de ouro!\nO número de livros de programação para iniciantes e intermediários é grande. Em relação à linguagem de programação Go existem bons títulos, embora não sejam numerosos. Dos existentes, a maioria incorre no mesmo pecado de obras sobre outras linguagens: poucos exercícios.\nProgramação é como andar de bicicleta. Você só aprende de verdade praticando. A maior parte dos livros de programação se preocupa muito com a teoria e acaba oferecendo pouca prática, o que leva ao aumento da curva de aprendizado para quem almeja ir do nível iniciante para intermediário.\nEscrito por Delio D\u0026rsquo;Anna, Andrew Hayes, Sam Hennesy, Jeremy Leasor, Gobin SougrakPam e Dániel Szabó, Go Workshop, vai do básico ao avançado, com explicações claras, ilustradas por exemplos e indicações sobre o que é usado em produção no mundo real. E aqui vai a dica: possui muitos exercícios em suas mais de 800 páginas.\nO método de aprendizado proposto pelos autores é simples: Ler a explicação teórica objetiva e depois entender sua aplicação prática. Para isso os autores indicam que o leitor refaça cada exercício oferecido, linha a linha - e novamente: são muitos exercícios!\nAlém dos exercícios, cada capítulo vem com alguns desafios, a título de revisão. A príncípio os exercícios são simples e o estudo pode parecer meio maçante porém, à medida em que se avança, a complexidade vai aumentando, pois os seguintes acabam quase sempre levando em conta o que foi aprendido anteriormente, diferentemente de alguns livros em que cada capítulo encerra exercícios isolados sobre cada tema.\nNem tudo são flores. Na primeira edição, alguns exercícios trazem conteúdo que não foi ensinado no capítulo, demandando alguma pesquisa. Certamente, acabaram ficando fora de lugar, talvez por falta de tempo para uma segunda revisão, afinal lançar uma obra com 800 páginas com vários autores trabalhando juntos é uma empreitada complexa. Espero que esses detalhes menores sejam corrigidos na segunda edição.\nDe qualquer forma, a obra se destaca por oferecer uma oportunidade ao leitor de aprender a programar, programando.\nAo refazer cada linha dos exercícios, o leitor vai aprendendo intuitivamente a escrever aplicações, refazendo os passos e entendendo as etapas seguidas e as decisões que foram tomadas ao longo do desenvolvimento da atividade.\nProgramar requer prática: é preciso se acostumar a escrever código, experimentar, errar, se acostumar com a linguagem até se tornar produtivo. É um desafio que pode ser recompensador. Então, mão na massa.\n","permalink":"https://alansantosmg.netlify.app/post/2021-01-11-goworkshopbook/","tags":[{"LinkTitle":"Go","RelPermalink":"/tags/go/"},{"LinkTitle":"Cursos","RelPermalink":"/tags/cursos/"}],"title":"Dica de leitura - Go Workshop"},{"categories":[{"LinkTitle":"Tecnologia","RelPermalink":"/categories/tecnologia/"}],"content":"Orientação o objetos em Go Na linguagem Go é possível programar utilizando o paradigma de Orientação a objetos.\nTodavia, existem peculiaridades que tornam Go uma linguagem um pouco diferente de outras orientadas a objeto como o C Sharp e o Java.\nAlgumas diferenças Para começar, em Go não existem classes como no Java e C Sharp. Go também não faz uso de protótipos (prototypes) como no Javascript (antes da implementação classes no mesmo).\nTodavia, é possível criar objetos. Também é possível atribuir métodos aos objetos, de modo que possamos interagir com os mesmos.\nCriação e uso de objetos em Go Uma forma de criar objetos em Go é através do uso de Structs, mas isso será abordado em um próximo artigo.\nAntes disso, vamos entender melhor como funciona a orientação a objetos em GO de forma mais conceitual, criando variáveis que são objetos mais simples.\nUm exemplo de POO em Go Para facilitar o entendimento, utilizaremos como exemplo um programa de conversão de temperatura.\nNosso conversor de temperatura irá converter a temperatura de 300 graus na escala kelvin para as escalas celsius e fahrenheit.\nPara ilustrar de forma mais clara os conceitos que serão apresentados, nosso conversor de exemplo não fará a entrada do valor via console.\nIsso adicionaria mais complexidade, pois teríamos que tratar possíveis erros na entrada de dados pelo usuário.\nNosso objetivo aqui é mostrar como funciona orientação a objetos em GO.\nEntão vamos lá!\nConversor de temperatura - Parte 1 Definindo tipos de objeto Em Go, é possível que o programador defina seus próprios tipos de objeto.\nIsso é interessante pois melhora a legibilidade do programa e evita que erros bobos aconteçam, ao fazer com que um objeto somente aceite dados de um determinado tipo.\nEm Go, o tipo de objeto criado pelo programador deve herdar as propriedades de algum tipo primitivo, como int (inteiros), float64 (valor de ponto flutuante de 64 bits) string (cadeia literal de caracteres).\nOs tipos primitivos nada mais são do que formas \u0026ldquo;padrão\u0026rdquo; de se armazenar dados na memória de um computador para utilização.\nAo invés de utilizamos tipos primitivos, vamos criar alguns tipos de objeto para nosso conversor de temperatura:\n// PARTE 1 // tipos de objetos do tipo float64 type fahrenheit float64 type celsius float64 type kelvin float64 Na parte 1 de nosso programa, criamos 3 tipos de objetos: celsius, farhenheit e kelvin. Esses tipos de objeto, só podem armazenar valores do tipo float64.\nDiscussão: Aqui há uma questão interessante a ser observada. Vejamos o trecho de código abaixo. Vamos supor que tenhamos:\ntype kelvin float64 var x kelvin = 10.0 var y float64 = 10.0 Se comparamos, por exemplo: if x == y o resultado será verdadeiro ou falso?\nA resposta é: falso!\nIsso se dá porque x é uma variável do tipo kelvin e y é uma variável do tipo float64. Tratam-se de tipos diferentes embora ambas variáveis possuam características do tipo primitivo float64.\nFazendo uma analogia, banana é um tipo de fruta diferente do tipo de fruta maçã, embora ambas sejam tipos de frutas.\nConversor de temperatura - Parte 2 Vamos voltar ao nosso programa exemplo. Já criamos nossos \u0026ldquo;tipos\u0026rdquo; de temperaturas. Agora vamos criar métodos para interagir com objetos desses tipos.\nA idéia aqui é a seguinte: quando criarmos um objeto do tipo kelvin, teremos um método para interagir com ele. O mesmo vale para os outros tipos de objeto. A interação desejada será fazer o cálculo (conversão) de um \u0026ldquo;objeto\u0026rdquo; temperatura.\nVamos lá:\n// PARTE 2 // Criação de métodos para os tipos de objeto criados // Cria método celsius para interagir com objetos do tipo fahrenheit func (f fahrenheit) celsius() celsius { return celsius((f - 32) * 5 / 9) } // Cria método celsius para interagir com objetos do tipo kelvin func (k kelvin) celsius() celsius { return celsius(k - 273.15) } // Cria método fahrenheit para interagir com objetos do tipo celsius func (c celsius) fahrenheit() farenheit { return fahrenheit(c*9/5) + 32 } // Cria método celsius para interagir com objetos do tipo fahrenheit func (f fahrenheit) celsius() celsius { return celsius((f - 32) * 5 / 9) } // Cria método celsius para interagir com objetos do tipo kelvin func (k kelvin) celsius() celsius { return celsius(k - 273.15) } // Cria método fahrenheit para interagir com objetos do tipo celsius func (c celsius) fahrenheit() farenheit { return fahrenheit(c*9/5) + 32} Anatomia de um método: Em Go, um método é parecido com uma função. Essa função pode ter um ou vários parâmetros.\nMas o importante aqui é que o método aceita somente um determinado TIPO de receptor como parâmetro.\nSe for passada à função algum argumento que não seja do TIPO de receptor determinado, ocorrerá erro de compilação.\nPara ilustrar nossa discussão, vejamos o trecho de um código abaixo, onde criamos 2 tipos de objeto (celsius e fahrenheit) e a seguir, criamos um método fahrenheit que somente pode receber objetos do tipo celsius (receiver).\nEsse método retornará como resultado (no caso a conversão de temperatura), um valor do tipo fahrenheit.\ntype celsius float64 type fahrenheit float64 func (c celsius) fahrenheit() farenheit { return fahrenheit(c*9/5) + 32} Resumindo, criamos um método fahrenheit para objetos do tipo celsius.\nDiscussão: Aqui temos uma das principais diferenças entre a orientação a objetos em Go e outras linguagens:\nEm algumas linguagens nós temos classes (que são modelos de objetos) e dentro das classes nós temos os métodos.\nQuando criamos um objeto de uma determinada classe, aquele objeto já empacota o método para interagir com ele.\nEm Go, criamos um tipo de objeto e associamos a ele um método, que vai interagir com aquele tipo. Quando o objeto do tipo determinado é criado, há um método para interagir com ele.\nA grande diferença é: em outras linguagens, você declara o método dentro da classe que está criando.\nEm Go, o método é declarado fora da classe e se assemelha mais a uma declaração de função.\nConversor de temperatura - Parte 3 Vamos à próxima parte de nosso conversor de temperatura.\nO que fizemos até agora:\nJá declaramos tipos de objetos que queremos criar quando nosso programar for executado.\nTambém criamos métodos que irão interagir com os objetos baseados nos tipos de objeto que criamos.\nAgora vamos criar nossos objetos propriamente ditos e vamos interagir com eles através dos seus métodos durante a execução do programa:\n// PARTE 3 // ponto de ínicio para execução do programa. func main() { // Cria objeto (Variável) do tipo kelvin e atribui valor 300 var k kelvin = 300.0 // cria objetos (variáveis) e deixa Go inferir de que tipo // no momento da atribu c := k.celsius() f := fahrenheit(c) // imprime resultado com 2 casas decimais fmt.Printf(\u0026#34;%.2f kelvin = %.2f celsius = %.2f fahrenheit\u0026#34;, k, c, f) } Primeiro criamos um objeto de nome k (no caso nosso objeto é uma variável) do tipo kelvin. Esse objeto vai armazenar o valor 300.\nDepois criamos um objeto de nome c e atribuímos a ele o mesmo valor que guardamos em k, porém chamamos o método celsius, que nós criamos para objetos do tipo kelvin (lembrando que k é um objeto do tipo kelvin).\nLogo, Go irá inferir que c é do tipo celsius, pois já convertemos k para celsius, usando do método celsius.\nO mesmo raciocínio vale para o objeto f.\nPor fim, utilizamos a função printf do pacote fmt e realizamos a impressão do resultado, como argumentos os nossos 3 objetos criados: k, c, f.\nPara melhorar a legibilidade, ainda estamos mostrando os resultados com apenas 2 casas decimais.\nSe não fizéssemos isso, o resultado apresentado teria tantas casas decimais quanto são permitidas em váriáveis do tipo float64 para os valores armazenados.\nVamos ao programa completo:\n// início do programa definindo como pacote que será executado package main // importação do pacote fmt (format), para realizarmos impressão import \u0026#34;fmt\u0026#34; // Definição de 3 tipos de objetos do tipo float64 type fahrenheit float64 type celsius float64 type kelvin float64 // Definição de métodos p/ interagir com objetos dos tipos definidos // método celsius para objetos do tipo fahrenheit func (f fahrenheit) celsius() celsius { return celsius((f - 32) * 5 / 9) } // metodo celsius para objetos do tipo kelvin func (k kelvin) celsius() celsius { return celsius(k - 273.15) } // metodo fahrenheit para objetos do tipo celsius func (c celsius) fahrenheit() farenheit { return fahrenheit(c*9/5) + 32 } // inicio do programa / ponto de entrada func main() { // cria objeto (Variável) do tipo kelvin e atribui valor 300 var k kelvin = 300.0 // cria variáveis e deixa Go inferir o tipo de objeto durante a atribuição c := k.celsius() f := fahrenheit(c) // imprime resultado com 2 casas decimais fmt.Printf(\u0026#34;%.2f kelvin = %.2f celsius = %.2f fahrenheit\u0026#34;, k, c, f) } O mesmo programa, porém sem comentários:\npackage main import \u0026#34;fmt\u0026#34; type fahrenheit float64 type celsius float64 type kelvin float64 func (f fahrenheit) celsius() celsius { return celsius((f - 32) * 5 / 9) } func (k kelvin) celsius() celsius { return celsius(k - 273.15) } func (c celsius) fahrenheit() farenheit { return fahrenheit(c*9/5) + 32 } func main() { var k kelvin = 300.0 c := k.celsius() f := fahrenheit(c) fmt.Printf(\u0026#34;%.2f kelvin = %.2f celsius = %.2f fahrenheit\u0026#34;, k, c, f) } Finalizando Nesse artigo exemplificamos o básico sobre orientação a objetos em Go, mostrando como definir tipos de objetos e como criar métodos para interagir com objetos desses tipos.\nOs objetos criados aqui são váriaveis, mas poderiam ser qualquer outro tipo de estrutura de armazenamento de dados disponível em Go.\nEm um outro momento, apresentaremos a criação de objetos mais complexos como structs, que se assemelham mais ao uso prático de classes de outras linguagens, porém com maior flexibilidade.\nEspero que tenham gostado e até a próxima.\n","permalink":"https://alansantosmg.netlify.app/post/2020-04-11-oop1go/","tags":[{"LinkTitle":"Programação","RelPermalink":"/tags/programa%C3%A7%C3%A3o/"},{"LinkTitle":"Go","RelPermalink":"/tags/go/"}],"title":"Orientação a Objetos em Go! - Métodos"},{"categories":[{"LinkTitle":"Tecnologia","RelPermalink":"/categories/tecnologia/"}],"content":"Prosseguindo na customização do Vim através da parametrização do .vimrc, vamos falar um pouco sobre verificadores de sintaxe e formatadores de código. Para evitar que o artigo fique grande demais, decidi quebrá-lo em 2 partes.\nHoje, na parte VI da série, trataremos sobre definições acerca do tema proposto. Deixaremos para a parte VII, as questões relativas à instalação e configuração desses utilitários.\nVerificadores de sintaxe e formatadores de código O que são, onde moram, como vivem, o que comem.\nVerificadores de sintaxe - Linters Linter vem da palavra \u0026ldquo;lint\u0026rdquo; que significa \u0026ldquo;fiapo ou penugem\u0026rdquo;. O termo vem de um utilitário usado na programação em linguagem C, existente no UNIX.\nA função de um utilitário \u0026lsquo;Lint\u0026rsquo; é realizar uma análise estática do código com objetivo de apontar e produzir uma lista de erros, advertências (warnings) e pontos de melhoria. Você não vai querer produzir um tecido cheio de fiapos, não é mesmo?\nFormatadores de código Os formatadores de código são ferramentas que melhoram a legibilidade de um programa, aplicando regras de formatação em conformidade com as boas práticas de desenvolvimento para uma determinada linguagem.\nVamos supor por exemplo, que temos um código formatado da seguinte maneira:\nif (a==b){ printf(\u0026#34;x\u0026#34;);}` Ao rodar um formatador sobre o código, ele poderá melhorar a legibilidade:\nif (a == b) { printf(\u0026#34;x\u0026#34;); } No caso acima, o utilitário reformatou o código, colocando espaçamentos, identação, etc, melhorando sua legibilidade e organização.\nEstratégias de utilização O processo de escrita de código pode ser um tanto maçante e sujeito a erros por parte do programador.\nUtilitários de verificação de erros e formatadores de código são ferramentas indispensáveis para aumentar a produtividade e a qualidade no desenvolvimento, pois:\ntornam o código mais legível reduzindo custo de manutenção poupam tempo na procura de erros simples Quando um desenvolvedor vai utilizar um utilitário de verificação e formatação de código, ele pode fazê-lo a partir de 2 estratégias de trabalho distintas:\nSíncrona: O programador digita todo o código e então roda o utilitário de verificação ao salvar o arquivo.\nVantagens: O programador pode se concentrar no código sem preocupar-se em parar para consertar erros. É como se ele dividisse o trabalho em duas etapas: Primeiro codificar, segundo corrigir. O programador pode executar a verificação do código em lote, verificando por exemplo, vários arquivos de um mesmo diretório. Desvantagens: o utilitário não força a mudança do comportamento do programador. Logo, a evolução do programador para geração de códigos com melhor qualidade, acabará sendo mais lenta. essa estratégia precisa ser realizada de forma pragmática. Ou seja, o programador deve ter disciplina suficiente para NUNCA, JAMAIS, NUNQUINHA, esquecer de executar a etapa de verificação, após o término da codificação. Assíncrona: À medida em que o programador vai digitando, o utilitário vai verificando o código e alertando sobre os erros.\nVantagens: Ao terminar de codificar, o programador já terá um código com mais qualidade. Ao ser alertado por erros enquanto digita, o programador acaba se tornando melhor, pois vai tomando ciência dos erros que produz e assim vai ajustando seu comportamento. Podemos dizer que a estratégia assíncrona é um tanto quanto behavorista. O programador não precisará executar a verificação no final do trabalho. Ele até pode fazer isso, se quiser, mas a lista de erros a corrigir (retrabalho), será bem menor. Desvantagens: a produtividade do programador acaba sendo mais baixa, pois ele tenderá a parar para corrigir os erros à medida que os mesmos são indicados. Mesmo melhorando com o tempo, esta questão irá incidir. Somente o fato de um alerta aparecer enquanto o código é digitado, já pode ser suficiente para desviar parte da concentração. a parametrização dos utilitários para ficarem monitorando o código digitado é um pouco mais chata. Além disso, podem tornar o editor de códigos um pouco mais lento. Em alguns momentos o programador poderá perceber um \u0026ldquo;lag\u0026rdquo; durante a digitação, no momenot em que o utilitário corre sobre o código e detecta um erro. Boas práticas de CI/CD Bons programadores são antes de tudo, pragmáticos. Muitos optam por adotar tanto a estratégia de verificação assíncrona quanto a síncrona. Ou seja, eles deixam os utilitários de verificação trabalharem enquanto digita o código, mas não deixará de rodá-los novamente na hora de salvar o arquivo ou mesmo durante o processo de deploy.\nEm ambientes de produção aliás, é muito indicado que os processos de CI/CD (integração contínua e deploy contínuo) incluam as etapas de verificação de erros e formatação, impedindo o build e deploy com erros de sintaxe ou código mal formatado, aumentando a estabilidade de aplicações em produção.\nAnalisadores de Sintaxe e formatadores de código no Vim Existem vários plugins para formatar e verificar erros de código usando o editor Vim. É preciso cuidado ao instalar e utilizar esses plugins, pois os mesmos podem conflitar entre si, podendo acarretar o efeito inverso ao que se propõem.\nNo Vim, muitos programadores desistem de usar tais utilitários, justamente pela dificuldade em configurá-los para se obter o resultado esperado. No próximo artigo, falaremos sobre a instalação não conflitante de 3 plugins:\nALE - Plugin para monitoramento assíncrono de código ESLint - um utilitário de análise sintática de código Prettier - um utilitário de formatação de código.\nAté lá\u0026hellip;\n","permalink":"https://alansantosmg.netlify.app/post/2020-03-21-config-vim-6/","tags":[{"LinkTitle":"Programação","RelPermalink":"/tags/programa%C3%A7%C3%A3o/"},{"LinkTitle":"Javascript","RelPermalink":"/tags/javascript/"},{"LinkTitle":"Vim","RelPermalink":"/tags/vim/"}],"title":"Vim para dev Web - parte VI"},{"categories":[{"LinkTitle":"Tecnologia","RelPermalink":"/categories/tecnologia/"}],"content":"O longo caminho de volta Em 2019 iniciei minha empreitada para estabelecer meu espaço na web, independente das redes sociais. A opção de não trabalhar com plataformas de blog tradicionais, possibilitou experimentar tecnologias de ponta, como geradores de conteúdo estático (server less), CDN\u0026rsquo;s, CI/CD.\nMinha jornada compreendeu o seguinte caminho:\nComecei pelo Jekyll, um gerador de conteúdo estático em Ruby mais alinhado com Github. Optei por ele por ser o mais simples de configurar e gerar deploy na conta que eu já possuía no Github.\nCheguei a testar o Gatsby - gerador de conteudo estático em React, mas logo acabei desistindo, pois estou estudando Javascript puro. Achei melhor não aprender React pelo menos até consolidar meus conhecimentos em JS sem auxílio de frameworks.\nFui então para o Hugo - gerador de conteúdo estático em GO. Esse, me pareceu ser muito mais rápido do que os outros. Também gostei da estrutura do projeto. Fiz alguns testes, reconfigurando o blog inteiro nele, mas não cheguei a fazer um deploy. Eu ainda não tinha visto nada sobre a linguagem GO, então resolvi seguir para outra plataforma que fosse em Javascript.\nEncontrei o Hexo - Gerador de conteúdo estático em Javascript Vanilla. O projeto é bem interessante. Estudei alguns temas e no final do ano fiz deploy usando essa plataforma. Tive um trabalhão para traduzir o tema de chinês para português. Senti falta de materiais em inglês. O projeto é bem documentado, mas creio que vale muito dar uma olhada no que as pessoas vem produzindo na comunidade.\nVoltei para o Jekyll, que é feito em Ruby, mas pelo menos tem vasto material em inglês, é vastamente utilizado por usuários do github e tem a vantagem de ser simples mesmo de fazer o deploy. Esta era a plataforma que estava usando até dois dias atrás. Funciona que é uma beleza e os temas são fáceis de setar, customizar, mas tem algo que estava me incomodando muito: justamente o fato de ser em Ruby. Eu não vou estudar Ruby tão cedo, então para quem está aprendendo outras linguagens essa é uma restrição considerável.\nRetornei ao HUGO. Quando instalei da primeira vez, fiquei curioso e fui conhecer a linguagem. Agora já tem alguns meses que estou estudando firme o Golang e vejo nessa linguagem, boas perspectivas. A experiência adquirida nas outras plataformas, está me possibilitando também uma experiência melhor com o HUGO.\nNetlify - CDN com C/ Continuos Integration/Continuous Deploy.\nPassar por todas essas plataformas demandou quase um ano de estudo. Porém, todo o trabalho ajudou a entender sobre tecnologias server-less sob várias perspectivas.\nPor hora, ficarei no HUGO como plataforma principal por alguns motivos bem específicos à minha realidade:\nParticularmente acho que a organização física do projeto HUGO tem boa separação entre conteúdo, plataforma, temas e customizações de tema. Para mim, essa característica é importante pois facilita bastante a tarefa de customização do site e me permite experimentar mais, quebrando menos.\nVejo vantagem no fato do HUGO ser desenvolvido em GO, uma linguagem desenvolvida pelo Google e que ao meu ver ganhará boa popularidade nos próximos anos. Não por acaso, é a linguagem que estou adotando como primária para aprendizado, juntamente com o Javascript. Ao invés de instalar uma versão compilada, optei por baixar os fontes do Hugo e compilá-los diretamente na minha máquina. Assim posso estudar em detalhes de como vem sido de desenvolvido e quem sabe, futuramente até poder dar minha contribuição em código.\nPor enquanto, resolvi dar o deploy do blog já convertido para HUGO, no Gitbhub, mas dentro de alguns dias devo virar para o Netlify, já que a plataforma possui os processos de CI/CD, os quais também estudo, além de oferecer melhor performance na entrega de conteúdos.\nEntão Let\u0026rsquo;s \u0026ldquo;GO\u0026rdquo; 2020!\n","permalink":"https://alansantosmg.netlify.app/post/2020-03-11-hugoagain/","tags":[{"LinkTitle":"Programação","RelPermalink":"/tags/programa%C3%A7%C3%A3o/"},{"LinkTitle":"Go","RelPermalink":"/tags/go/"}],"title":"Retornando ao Hugo"},{"categories":[{"LinkTitle":"Tecnologia","RelPermalink":"/categories/tecnologia/"}],"content":"Aprendendo GO sem instalar um compilador A equipe do GO disponibiliza uma interface REPL na web para quem quiser escrever e testar seus códigos.\nObviamente não é um recurso para desenvolvimento de grandes projetos.\nTodavia, trata-se de uma excelente ferramenta de aprendizado que possibilita rodar, formatar e compartilhar pequenos trechos de código, sendo ideal para estudantes.\nOutra coisa legal é que ela está disponível para quem quiser usar em seu site (desde que utilize apenas uma instância), bastando solicitar à equipe autorização para instalar.\nPara quem quer brincar com o Go, basta acessar: The Go playground ","permalink":"https://alansantosmg.netlify.app/post/2020-02-26-goplayground/","tags":[{"LinkTitle":"Programação","RelPermalink":"/tags/programa%C3%A7%C3%A3o/"},{"LinkTitle":"Go","RelPermalink":"/tags/go/"}],"title":"Golang Playground"},{"categories":[{"LinkTitle":"Tecnologia","RelPermalink":"/categories/tecnologia/"}],"content":"Como prometido anteriormente, no artigo de hoje falaremos um pouco sobre uso de temas no Vim.\nTemas Os temas do Vim, assim outros Editores de código, compreende uma série de ajustes visando o uso de cores para a codificação digitada e também cores de fundo da aplicação, barras de numeração, barra de status, etc.\nO vim na versão 8 já vem com alguns temas padrões. Eles podem ser configurados de duas formas:\nvia linha de comando; via parametrização no arquivo .vimrc. Também é possível baixar e instalar novos temas, o que também pode ser feito de duas formas:\nmanualmente; através de um gerenciador de plugins; Neste artigo falaremos somente da primeira forma. A instalação de temas via gerenciadores de plugins será abordada no nosso próximo post onde introduziremos o uso de Plugins para extender as funcionalidades do Vim.\nAlterando o tema on the fly Para alterar o tema durante o uso do editor basta entrar no modo normal, teclando : e a seguir digitar colorscheme nomeDoTema. Vejamos um exemplo:\n: colorscheme torte Tema padrão Para definir um tema padrão é preciso acrescentar algumas linhas ao arquivo .vimrc conforme a seguir:\n\u0026#34; Utiliza cores se terminal suportar if (has(\u0026#34;termguicolors\u0026#34;)) set termguicolors endif \u0026#34; Seta tema padrão colorscheme torte \u0026#34; Alguns temas tem opção de fundo claro ou escuro \u0026#34; Utilize dark ou light se for o caso set background=dark Finalizando Para dar uma folga, o artigo de hoje foi mais curtinho, tranquilo. Nos próximos, começaremos a falar sobre o uso de plugins. Eles ajudam a extender as capacidades do Vim, transformando-o em um verdadeiro canivete suiço. Como estamos falando de desenvolvimento web, focaremos em alguns plugins voltados especificamente para melhorar esta atividade. Por enquanto é só. Até a próxima postagem!\n","permalink":"https://alansantosmg.netlify.app/post/2020-02-13-config-vim-5/","tags":[{"LinkTitle":"Programação","RelPermalink":"/tags/programa%C3%A7%C3%A3o/"},{"LinkTitle":"Vim","RelPermalink":"/tags/vim/"}],"title":"Vim para dev Web - Parte V"},{"categories":[{"LinkTitle":"Tecnologia","RelPermalink":"/categories/tecnologia/"}],"content":"image: images/feature3/xfce.png Quem usa computadores que possuem a tecla Windows e acaba se acostumando com as facilidades que ela oferece como atalho de teclado.\nAo migrar para o linux com XFCE, experimentei certo dia tentar minimizar todas as janelas usando a sequência de teclas Windows + d e não funcionou. Pequisei a respeito e descobri que a a sequência no XFCE é Control + alt + d. Mais chatinho de digitar, né?\nA boa notícia é que é possível mudar esse comportamento no XFCE. Para isso, usando o editor de sua preferência, vamos acertar isso. No caso eu uso o Editor vim, mas pode ser qualquer outro como o mousepad, gedit, VScode. Vamos lá?\n1. Abra um terminal e use seu editor: vim ~/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-keyboard-shortcuts.xml 2. Procure pela palavra: show_desktop_key. 3. Esta é a propriedade que deverá ser alterada: \u0026lt;property name=\u0026#34;\u0026amp;lt;Super\u0026amp;gt;Alt\u0026amp;gt;d\u0026#34; type=\u0026#34;string\u0026#34; value=\u0026#34;show_desktop_key\u0026#34;/\u0026gt; 4. Altere para: \u0026lt;property name=\u0026#34;\u0026amp;lt;Super\u0026amp;gt;d\u0026#34; type=\u0026#34;string\u0026#34; value=\u0026#34;show_desktop_key\u0026#34;/\u0026gt; Terminada a alteraçao, reinicie o computador, entre no XFCE, abra algumas janelas e experimente minimizá-las usando a sequência de teclas windows + D.\n","permalink":"https://alansantosmg.netlify.app/post/2020-02-07-atalhoshowdesktopxfce/","tags":[{"LinkTitle":"Linux","RelPermalink":"/tags/linux/"},{"LinkTitle":"Troubleshooting","RelPermalink":"/tags/troubleshooting/"},{"LinkTitle":"XFCE","RelPermalink":"/tags/xfce/"}],"title":"Atalho para minimizar todas janelas no XFCE"},{"categories":[{"LinkTitle":"Tecnologia","RelPermalink":"/categories/tecnologia/"}],"content":"Olá pessoal. No artigo de hoje, realizaremos mais algumas configurações no arquivo .vimrc que ajudarão a melhorar a experiência com o editor.\nMelhorando a usabilidade Evitando travamentos Uma das coisas mais chatas que ocorria quando eu comecei a usar o Vim, eram travamentos ocasionais do editor dito como \u0026ldquo;super estável e leve\u0026rdquo;. Ao investigar mais a fundo a questão, acabei descobrindo que o problema não estava no software e sim em quem está sentado na cadeira operando (risos).\nDe fato, o que ocorria era o seguinte: por uma questão de hábito quando trabalhava com outros editores, eu costumava dar um \u0026lt;Ctrl\u0026gt; \u0026lt;s\u0026gt; de tempos em tempos para garantir que meu trabalho fosse salvo. Essa atividade estava tão enraizada no subconsciente que eu nem percebia que estava fazendo isso também no Vim.\nAo realizar essa ação \u0026ldquo;automática\u0026rdquo;, o Vim parecia ficar travado, mas a verdade é que o \u0026lt;ctrl\u0026gt; \u0026lt;s\u0026gt; é um comando que desliga o fluxo de transmissão de dados do editor.\nSe o Vim travar repentinamente, experimente teclar \u0026lt;ctrl\u0026gt;\u0026lt;q\u0026gt; para fazê-lo voltar ao normal.\nQuem vem de outros editores certamente passará por essa situação em algum momento. Então para previnir sua ocorrência, basta adicionarmos um parâmetro ao nosso arquivo .bashrc que fica no diretório /home/nomeDoUsuário. Para fazer isso, abra um terminal e digite o seguinte comando:\necho \u0026#34;stty -ixon\u0026#34; \u0026gt;\u0026gt; ~/.bashrc O comando acima adiciona a linha contendo stty -ixon ao final do arquivo .bashrc. Outra forma de incluir seria abrir o arquivo no Vim e incluir a parametrização no final dele. Fique à vontade para fazer da forma que achar melhor.\nMais alterações no .vimrc Vamos adicionar mais alguns parâmetros interessantes ao nosso .vimrc.\nTchau tela de boas-vindas Começaremos tirando aquela tela inicial de boas-vindas. Assim o editor abrirá direto numa janela em branco. Parece bobagem, mas será 1 tecla a menos pressionada, toda vez que você iniciar o editor.\nset shortmess+=I Refresh de alteraçoes externas Muitas vezes, acabamos realizando alterações em arquivos que estão abertos no Vim usando outra aplicação. Para que o Vim perceba que o arquivo foi alterado externamente, precisamos incluir um parâmetro que fará o editor ler novamente o arquivo em que estamos trabalhando caso ele tenha sido modificado. Inclua no seu .vimrc:\nset autoread Melhorando o scroll Outro parâmetro interessante é fazer a rolagem da tela iniciar antes do cursor chegar na borda superior ou inferior da janela, tornando a navegação menos cansativa. Adicione ao seu .vimrc:\nset scrolloff=5 Novas janelas O Vim permite trabalhar com várias janelas dividas na tela, seja na horizontal, vertical ou ambos. Nos parâmetros abaixo, configuramos o editor para abrir janelas horizontais, sempre abaixo da janela atual. No caso de janelas verticais, também é interessante parametrizar para abrir sempre à direita da janela atual. Assim quem está usando, sempre saberá onde a nova janela será aberta. Vamos colocar esses 2 parâmetros em nosso .vimrc:\nset splitbelow set splitright Status sempre à mostra No .vimrc vamos incluir um parâmetro para sempre deixar à mostra a barra de status.\nset lastsatus=2 Mostrando comandos digitados Além de sempre mostrar a barra de status, também vamos parametrizar o Vim para sempre podermos ver os comandos digitados, incluindo em nosso .vimrc:\nset showcmd Escondendo buffer Outro parâmetro relacionado à barra de comandos, refere-se ao que o Vim faz quando fechamos um buffer (arquivo carregado na memória pelo Vim). Para não ter que ficar fechando e abrindo o mesmo arquivo, podemos habilitar o recurso de esconder o buffer da tela. Acrescente no seu .vimrc:\nset hidden Autocompletando comandos Podemos habilitar o autocompletar para comandos com a tecla TAB, igual ao funcionamento no shell bash:\nset wildmode=longest,list Linha de comando dupla Também podemos ter uma linha de comando um pouco maior abaixo da barra de status, acrescentando:\nset cmdheight=2 Alertas visuais Para o editor não ficar apitando na cabeça a cada erro, que tal adicionar um parâmetro que converte avisos sonoros em visuais? Inclua aí no .vimrc:\nset t_vb= Desligando o match de []{}() O parâmetro abaixo Desabilita o destaque de conjuntos de paranteses, aspas, etc. Alguns desenvolvedores gostam de manter isso ligado. Eu prefiro desabilitar pois confunde na hora da digitação. Para habilitar use 2 parâmetros: set showmatch e set matchtime = 2. Para desabilitar, use o que está abaixo: set noshowmatch Uma alternativa ao showmatch que pode melhorar a usabilidade é alterar a cor de destaquedo cursor quando em cima de conjuntos de parenteses, aspas, colchetes: hi MatchParen cterm=bold ctermbg=none ctermfg=red Destacando o cursor Outra parametrização controversa é mostrar a linha em que o cursor se localiza no momento em um tom mais claro. Use se gostar:\nset cursorline Evitando erros ao sair Na pressa, às vezes queremos teclar wq para sair do editor e teclamos por exemplo Wq, ocasionando erro. Para evitar esse tipo de coisa, vamos criar alguns aliases que facilitarão em muito a vida:\ncab W w cab Wq wq cab wQ wq cab WQ wq cab Q q Mudando a tecla LEADER No vim, a tecla LEADER normalmente é a / .Podemos alterá-la para ser a tecla de vírgula: :\nlet mapleader=\u0026#34;,\u0026#34; Limpeza do destaque de buscas A próxima parametrização, mapeia \u0026lt;espaço\u0026gt; para limpar o destaque da busca (quando vc busca termo errado). Se quiser limpar a busca digite \u0026lt;,\u0026gt; (vírgula) e a seguir \u0026lt;espaço\u0026gt; configurando o seguinte no seu .vimrc:\nnnoremap \u0026lt;leader\u0026gt;\u0026lt;space\u0026gt; : nohlsearch\u0026lt;CR\u0026gt; Seleção com setas (Windows like) Particularmente, considero a próxima parametrização altamente dispensável, visto que o vim possui um jeito muito melhor de fazer seleções com o teclado através do modo visual, teclando no modo normal v para selecionar na linha, V para selecionar linhas inteiras, ou ainda \u0026lt;ctrl\u0026gt; v, para selecionar blocos de texto, inclusive no sentido de colunas.\nPara quem está acostumado a fazer seleções usando as teclas + SETA, como no Windows, basta adicionar as linhas abaixo ao .vimrc.\nset selectmode=mouse,key set mousemodel=popup set keymodel=startsel,stopsel set selection=exclusive Edição no diretório corrente A configuração abaixo permite que ao editar um arquivo, o Vim mude o contexto para o diretório em que mesmo se encontra. Muito útil quando abrimos o arquivo no Vim a partir de outro diretório e lembramos que queremos alterar algum outro arquivo nesse mesmo diretório.\nset autochdir Finalizando Dessa vez fizemos mudanças substanciais no comportamento do Vim de modo a melhorar a usabilidade e evitar erros bobos que tomam muito tempo. No próximo artigo falaremos um pouco sobre temas/esquemas de cores. O uso de esquemas de cores, além de melhorar a legibilidade, tornam o editor mais atraente para uso.\nAté a próxima!\n","permalink":"https://alansantosmg.netlify.app/post/2020-02-03-config-vim-4/","tags":[{"LinkTitle":"Programação","RelPermalink":"/tags/programa%C3%A7%C3%A3o/"},{"LinkTitle":"Vim","RelPermalink":"/tags/vim/"}],"title":"Vim para dev Web - Parte IV"},{"categories":[{"LinkTitle":"Livros","RelPermalink":"/categories/livros/"}],"content":"O que já sabemos leva o mundo de 1 a n. Somente quando criamos algo novo, saímos de zero para 1. É muito mais difícil imaginar algo novo do que imaginar aprimoramentos sobre algo que já existe. O ato de criação é singular.\nIr de 1 a n significa a realização de progresso horizontal ou incremental: ou seja melhorar ou tornar mais eficiente, algo que já existe.Por outro lado, ir de zero significa a realização de progresso vertical ou intensivo que se traduz em inovação radical, criar algo completamente novo.\nÉ com base nessa idéia que se desenvolve o livro De Zero a Um - Peter Thiel.\nStartups e a estranha verdade sobre o cotidiano O livro nos faz refletir sobre nosso cotidiano que embora nos pareça moderno à primeira vista, é estranhamente ultrapassado e que a compreensão deste aspecto da realidade é justamente o coração das empresas startups.\nUma startup é uma empresa menor do que uma grande organização e maior do que uma pessoa só. Sua força é pensar. Uma startup de verdade, precisa questionar ideias conhecidas.\nMas qual seria exatamente o questionamento a fazer? Para o autor, esta questão pode ser expressa tanto em termos de visão pessoal quanto em termos de visão de negócios:\nSobre que verdade importante pouquíssimas pessoas concordam com você? Que empresa valiosa ninguém está construindo?\nO livro de zero a um não trará respostas a essas perguntas, mas mostrará os caminhos possíveis para a busca de respondê-las o que levará o leitor a repensar e questionar diversos conceitos sobre economia, mercado e criação de negócios.\nRevendo conceitos Durante a leitura, somos levados a refletir sobre diversas conceituações as quais costumamos aceitar sem pensar muito.\nPor exemplo, o autor considera que Capitalismo e concorrência são definições conflitantes pois o primeiro prega a concorrência sob as mesmas condições para todos, porém a concorrência perfeita não gera lucros e consequentemente mata o Capitalismo, já que sem lucro não há acumulação de capital.\nSegundo o autor, o Capitalismo na verdade é fruto do desequilíbrio provocado pela concorrência igualitária e que a busca pelo monopólio (e não a existencia deles) é que gera a competição e os conflitos. Ele ilustra esse conceito comparando duas visões de mundo distintas:\nPara Marx, as pessoas lutam porque são diferentes (luta de classes).\nPara Sheakspeare, as pessoas lutam quando se tornam semelhantes.\nNão à disrupção A diferença entre as visões de mundo de Sheakspeare e Marx, levam a outra ideia que faz \u0026ldquo;De Zero a Um\u0026rdquo;, a se destacar frente a outras obras sobre novos negócios e inovação: É preciso dizer não à disrupção!\nSe uma empresa é vista como concorrente ou oposta às existentes, ela não se tornará um monopólio. A inovação radical, pressupõe a não concorrência, visto que o que está sendo criado é totalmente diferente de algo que já existe.\nA receita do sucesso não existe Entender a questão da disrupção, ajuda a esclarecer ao longo de todo livro, uma dura verdade que muitos empreendedores ignoram: não existe receita para inovação e o que importa do futuro é que ele será na época em que o mundo parecerá diferente de hoje. Ele será diferente e estará ancorado no mundo atual.\nPara terminar esta resenha, nada melhor do que mais alguns questionamentos levantados por essa envolvente obra:\nAntes de abrir um negócio, pense\u0026hellip;\nQuais segredos a natureza não está lhe contando? Quais segredos as pessoas não estão lhe contando? O melhor lugar para procurar segredos é onde ninguém está procurando...\nNão deixe de ler: De Zero a Um - Peter Thiel\n","permalink":"https://alansantosmg.netlify.app/post/2020-01-30-dezeroaum/","tags":[{"LinkTitle":"Inovação","RelPermalink":"/tags/inova%C3%A7%C3%A3o/"},{"LinkTitle":"Resenhas","RelPermalink":"/tags/resenhas/"}],"title":"De zero a Um"},{"categories":[{"LinkTitle":"Tecnologia","RelPermalink":"/categories/tecnologia/"}],"content":"Olá! Aqui estamos com o terceiro artigo da série, \u0026ldquo;Configurando o Vim para desenvolvimento Web\u0026rdquo;. Vamos começar fazendo uma pequena revisão sobre o artigo anterio e depois prosseguiremos realizando mais configurações em nosso ambiente de desenvolvimento.\nRecapitulando a parte II Se você seguiu o post anterior, o arquivo .vimrc que você criou no seu diretório home, deverá estar assim:\nsource $VIMRUNTIME/defauts.vim set nocompatible set encoding=utf-8 set nobackup set nowritebackup set noswapfile set number set ruler syntax on set visualbell Configurações de texto Hoje, vamos realizar algumas configurações de apresentação e formatação de textos para desenvolvimento, como indentação, configuração de tabulação (tabs) e também parâmetros de busca, além de persistir os históricos de últimos comandos e últimas alterações. Mão na massa!\nParâmetros de busca Ignora maiúsculas e minúsculas nas buscas. Se começar uma busca em maiúsculo ele habilita o case. Destaca no texto, termos procurados na busca. Inicia busca a medida que caracteres são digitados. set ignorecase set smartcase set hlsearch set incsearch Regras de indentação de código Aplica indentação na linha atual, (por ex: dentro de uma função) ao teclar enter. Usa regras de indentação de acordo com a extensão do arquivo editado. Necessita da configuração autoident setada. Habilita indentação conforme o tipo de arquivo. Habilita tabulação inteligente conforme o tipo (extensão) do arquivo. Tranforma tabs em espaços. Configura tamanho da tabulacao padrão como 2 espaços. Garante que backspace consiga remover indentações, apagar fim e começo de linha. Número de espaços percorridos (2) ao teclar backspace (voltar tabulação). Por padrão, quando usando auto-indent usar 2 espaços (1 tabstop) usando shiftwidth e softtabstop. set autoindent set smartindent set filetype indent on set smarttab set expandtab set tabstop=2 set backspace=ident, eol, start set backspace=2 set shiftwidth=2 set softtabstop=2 Histórico de comandos e alterações Aumentando o tamanho dos históricos Além das configurações de texto, talvez seja importante aumentar o tamanho do histórico de últimas alterações e histórico de últimos comandos, além de manter esses dois históricos mesmo se o arquivo for salvo e/ou ou o Vim for fechado. Bacana, não acha? Vamos configurar:\nDesfazer até 1000 alterações Guarda histórico dos 1000 últimos comandos set undolevels =1000 set history=1000 Persistindo o histórico de comandos Para armazenar o histórico de comandos, precisamos criar um arquivo. O melhor é que ele seja criado fora do diretório onde o arquivo está sendo editado. O Vim cria um diretório oculto dentro do diretório home do usuário. É interessante deixar tudo junto, então dentro do diretório /home/nomeDoUsuário/.vim vamos criar um subdiretório chamado infodir. Para isso será preciso digitar o seguinte comando no terminal: mkdir ~/.vim/infodir Uma vez criado o diretório infodir, podemos parametrizar o .vimrc com a seguinte linha para guardar o histórico de comandos dentro do arquivo viminfo: set viminfo=\u0026#39;10,\\\u0026#34;30,:20,%,n~/.vim/infodir/viminfo Além disso também podemos parametrizar o Vim para iniciar com o cursor no mesmo lugar onde estava (através da informação armazenada no viminfo) quando o arquivo foi fechado (caso volte a editá-lo posteriormente): au BufReadPost * if line(\u0026#34;\u0026#39;\\\u0026#34;\u0026#34;)|execute(\u0026#34;normal `\\\u0026#34;\u0026#34;)|endif Persistindo o histórico de alteraçõs O vim pode manter arquivos com histórico de alterações. Como ele cria um arquivo de histórico de alterações para cada arquivo editado, o melhor é criar um subdiretório dentro de /home/user/.vim/. Você deve criar esse diretório usando o terminal: mkdir ~/.vim/undodir Dentro do diretório undodir serão criados os arquivos que guardarão as alterações dos arquivos editados. Mesmo se vc salvar e fechar o arquivo que está trabalhando, será possível posteriormente desfazer alterações se voltar a editá-lo. Como já temos nosso diretório undodir agora vamos parametrizar o .vimrc: set undodir=~/.vim/undodir set undofile Finalizando Bem, vamos ficar por aqui. No próximo artigo, iremos incluir algumas melhorias para tornar o editor ainda mais amigável e interessante para desenvolvimento e também uso geral.\nEspero que tenham gostado e até a próxima.\n","permalink":"https://alansantosmg.netlify.app/post/2020-01-28-config-vim-3/","tags":[{"LinkTitle":"Programação","RelPermalink":"/tags/programa%C3%A7%C3%A3o/"},{"LinkTitle":"Vim","RelPermalink":"/tags/vim/"}],"title":"Vim para dev Web - Parte III"},{"categories":[{"LinkTitle":"Tecnologia","RelPermalink":"/categories/tecnologia/"}],"content":" \u0026quot; O vim é meu editor de textos favoritos. Eu o tenho usado por anos\u0026hellip; mas eu não consigo descobrir como sair dele\u0026hellip;\u0026quot;\nVim a sério Se você está lendo este post, parto do pressuposto que você já deve ter o mínimo de familiaridade com o Vim. Por familiaridade entendo: saber entrar, saber editar texto e claro, saber SAIR, para não ser motivo de piadas infames. :-D\nSe ainda não aprendeu a se virar no Vim, sugiro fazer o Vim tutorial ou pelo menos dar uma olhada na minha lista com os principais comandos do Vim e exemplos de uso do editor.\nArquivo de configuração O Vim normalmente vem instalado na maioria das distribuições Linux e também pode ser instalado no Windows. Em todo caso, quando ele é iniciado, ao contrário de vários programas, é preciso criar um arquivo de configuração. O nome desse arquivo é .vimrc.\nOnde colocar o arquivo de configuração no Linux No linux os arquivos iniciados com . são arquivos que ficam escondidos e que só podem ser visualizados através de um ls -a. O .vimrc deve ser criado no diretório home do usuário, ou seja, dentro de /home/nomeDoUsuário. Para criá-lo, vá até o diretório citado e no terminal digite o comando touch .vimrc.\nOnde colocar o arquivo de configuração no Windows No Windows o melhor lugar para esse arquivo é em c:\\usuários\\nomeDoUsuário\\. Ele também pode se chamar _vimrc ou _gvimrc, se você estiver usando o Gvim (Vim para interface gráfica).Para criá-lo vá até o diretório e crie um novo arquivo usando o notepad.\nConfiguração inicial Para iniciar a configuração do Vim, precisamos incluir opções de parametrização dentro do .vimrc. Para isso abra o arquivo preferencialmente usando o próprio Vim, pois assim podemos carregar nossas configurações sempre que ele for modificado após salvá-lo, utilizando um comando do próprio editor.\nUm detalhe importante: dentro do .vimrc tudo que vem depois de \u0026quot; é considerado como comentário e não será processado quando o Vim for iniciado. Isso é ótimo para tornar o arquivo de configuração auto-documentado.\nVamos começar acrescentando algumas linhas para configuração inicial:\n\u0026#34;Carrega opçoes mais comuns do editor\u0026#34; source $VIMRUNTIME/defauts.vim \u0026#34;Força o vim a não ser compatível com opçoes do antigo editor\u0026#34; set nocompatible \u0026#34;Garante que os arquivos serão salvos no padrão de codificação universal\u0026#34; set encoding=utf-8 Desativando o backup Por padrão, o Vim faz backup dos arquivos que estão sendo editados e os salva de acordo com a seguinte regra de nomeação: ~nomedoarquivo. O que parece uma vantagem, torna-se um incômodo depois, principalmente em projetos grandes onde se usa o git para controlar versionamento do projeto e subir arquivos para produção. Se você editar 10 arquivos, terá 10 arquivos de backup a mais em seu projeto. Como num projeto de desenvolvimento já estamos usando o GIT para controlar o versionamento, o backup de arquivos do Vim passa a não fazer sentido. Por isso é melhor desativar essa opção acrescentando ao nosso .vimrc:\n\u0026#34;Configura o vim para não criar arquivos de backup\u0026#34; set nobackup set nowritebackup Desativando o arquivo de swap Nos tempos em que computadores tinham pouca memória, o Vim fazia uso do recurso de criação de arquivo de Swap para poder manter em disco parte de arquivos grandes que estavam sendo editados e que não caberiam totalmente na memória. Hoje em dia, com o barateamento dos chips de memória, essa opção também se tornou obsoleta. Então o melhor a fazer é desativá-la. Vamos acrescentar mais uma configuração ao .vimrc:\n\u0026#34;Desativa arquivo de swap\u0026#34; set noswapfile Configuração básica para desenvolvimento Para tornar a edição mais amigável, vamos acrescentar algumas funcionalidades básicas para quem usa editores para \u0026lsquo;coding\u0026rsquo;. São elas, numeração das linhas, numeração das colunas e syntax highlight. Por fim, vamos desabilitar o \u0026ldquo;beep\u0026rdquo; que soa quando digitamos algum comando incorreto.\n\u0026#34;Mostra coluna com numeração das linhas na lateral esquerda\u0026#34; set number \u0026#34;Mostra linha/coluna atual no lado direito da barra de status\u0026#34; set ruler \u0026#34;Habilita sintax highlight - depende da extensão do arquivo editado\u0026#34; syntax on \u0026#34;Troca o alarme sonoro de erro por alarme visual na barra de status\u0026#34; set visualbell Mouse Se você estiver usando inteface gráfica, é possível usar o mouse dentro da janela de terminal onde o vim ou Gvim está carregado. Para isso basta adicionarmos uma linha ao arquivo .vimrc. Se você quer ficar fera no Vim, recomendo não incluir essa opção. Para quem não dispensa o uso do mouse, aí está:\n\u0026#34;Torna o Vim compatível com maioria dos mouses do mercado (all).\u0026#34; set mouse=a Finalizando O artigo ficou grande, mas o objetivo aqui não é apenas listar os comandos e sim explicá-los para que cada um possa usá-los ou não conforme sua necessidade.\nNo próximo artigo, prosseguiremos personalizando o Vim para edição de texto, propriamente dita.\nEspero que tenham gostado do artigo. Deixem seus comentários lá no post do Linkedin. Assim, podem colaborar com os colegas.\nAté mais!\n","permalink":"https://alansantosmg.netlify.app/post/2020-01-22-config-vim-2/","tags":[{"LinkTitle":"Programação","RelPermalink":"/tags/programa%C3%A7%C3%A3o/"},{"LinkTitle":"Vim","RelPermalink":"/tags/vim/"}],"title":"Vim para dev Web - Parte II"},{"categories":[{"LinkTitle":"Tecnologia","RelPermalink":"/categories/tecnologia/"}],"content":"Olá, depois de passar 3 anos utilizando o Visual Studio Code da Microsoft, resolvi em 2020, aprender e mudar para o Editor Vim. Pode parecer que estou indo na contramão, pois grande parte dos desenvolvedores de Apps e Web tem adotado cada vez mais o VSCode em seus projetos, mas trata-se de uma mudança bem racional de paradigma. Vejamos os motivos:\nVim versus todos s outros Por que o Vim? Foco: Com o Vim não preciso ficar usando o mouse e isso ajuda a melhorar a concentração: manter as mãos no teclado evita mudança de contexto durante o trabalho. Velocidade: manter as mãos no teclado o tempo todo evitando parar para abrir menus, mover ou fechar janelas e selecionar texto, torna-se uma segunda vantagem pois aumenta consideravelmente a produtividade. Compatibilidade: O Vim já vem instalado por padrão em várias distribuições Linux. Portanto,já poupa o trabalho de instalação. O vim possui um arquivo único de configuração, o que torna fácil portar sua configuração entre máquinas. Uso remoto: Com o Vim, não é preciso de plugins para trabalhar remotamente. Basta abrir uma conexão SSH e pronto. Ele é levíssimo para se usar em conexões remotas lentas. Não há competidor. Baixo consumo de memória: os editores baseados em inteface gráfica, consomem muito mais memória do que o Vim e isso pode tornar algumas operações lentas, sobretudo com arquivos grandes ou na edição de múltiplos arquivos ao mesmo tempo. No Vim, posso abrir dezenas de arquivos ao mesmo tempo e ele continua super veloz. Uso de terminal: o que parece uma desvantagem é uma enorme vantagem. O Vim roda muito mais estável pois não depende de interface gráfica para rodar. Raramente irá travar, muito diferente de outros editores. Alta customização: Sistema de plugins robusto. O Vim possui ótimos gerenciadores de plugins e com um comando é possível adicionar funcionalidades importantes, principalmente para quem desenvolve, transformando-o em um verdadeiro canivete suiço. Edição visual em bloco: Com o Vim, é possível nativamente fazer a edição de blocos de texto em colunas, sem nenhuma dificuldade. Essa é uma das funcionalidades mais bacanas que o Vim faz melhor que outros editores. Gravação de macros: com o Vim é fácil gravar macros para executar atividades repetitivas. Gerenciamento de janelas: No Vim, você pode criar múltiplos workspaces, cada um com seu arranjo de janelas e ainda por cima salvar facilmente esses arranjos. Assim, com um comando, você pode restabelecer seus ambientes de trabalho de forma super rápida. Aventurando-se no Vim Hoje, já não tenho mais o VSCode instalado em minha máquina e uso apenas o Vim, seja para desenvolvimento, seja para outras atividades. Demorei alguns dias a me acostumar com o paradigma modal (ao usar você vai entender), mas depois que decorei os principais atalhos de teclado, percebo que minha produtividade só aumentou. Com o passar dos dias fui sentindo falta de algumas coisas e então parti para a instalação de plugins e customização do Editor, tornando-o uma ferramenta ainda melhor.\nNos próximos posts, contarei um pouco dessa experiência e entrarei em detalhes sobre como parametrizar o Vim para torná-lo uma ferramenta de desenvolvimento avançada para html, CSS e Javascript.\nA aventura está apenas começando. :-)\n","permalink":"https://alansantosmg.netlify.app/post/2020-01-21-config-vim-1/","tags":[{"LinkTitle":"Programação","RelPermalink":"/tags/programa%C3%A7%C3%A3o/"},{"LinkTitle":"Vim","RelPermalink":"/tags/vim/"}],"title":"Vim para dev Web - Parte I"},{"categories":[{"LinkTitle":"Tecnologia","RelPermalink":"/categories/tecnologia/"}],"content":"Resolvi começar o ano aprendendo algo novo. Nada melhor do que eliminar um antigo trauma: O medo do vim, o poderoso e temido editor do Linux!\nSó existe uma maneira de dominar o Vim: usando! Então, desinstalei o Vscode e passei a usar o vim efetivamente para todas as tarefas.\nNessa aventura, acabei criando uma lista para consulta rápida dos atalhos mais usados. Assim eu posso abrir o arquivo que estou editando em uma janela do vim e minha lista de atalhos numa janela lateral (vertical split), onde posso consultar rapidamente o comando que estou procurando, sem perder o foco no trabalho.\nSegue abaixo a lista de atalhos que uso efetivamente no vim. Se quiser, é só copiar e salvar em algum arquivo.txt para consulta, assim como faço.\nFeliz 2020!\n## Comandos vim ### Entrada e saida (modo normal) :new arquivo ## abre segundo arquivo split horizontal\u0026#39; :edit arquivo\t## abre outro arquivo :vnew arquivo ## abre novo arquivo split vertical :split arquivo ## abre novo arquivo :q\t## sair do vim :q! ## forca saida do vim :w\t## salva arquivo :x\t## salva e sai (se modificado) :w novonome\t## salva como novo nome :saveas novon\t## salva cmoo novo nome e muda p/ novo arquivo :wq\t## salva arquivo e sai :10,20 w! novo\t## salva da linha 10 a 20 em novo arquivo :enew!\t## não salva e abre novo :Vex\t## Abre file explorer na vertical :e .\t## abre file explorer na janela atual vim .\t## abre o vim com file explorer \u0026#39;0\t## solicitar reabertura do ultimo arquivo aberto \u0026#39;1\t## solicitar reabertura do penultimo arquivo aberto :bp\t## vai para arquivo anterior :bn\t## vai para proximo arquivo :wn\t## salva e vai para proximo arquivo :shell\t## abre shell (exit para voltar :!\t## run external comando :terminal\t## abre shell numa janela ### buffer de arquivos badd\t## adiciona arquivo ao buffer bn\t## next file of buffer bp\t## arquivo anterior ls\t## lista arquivos do buffer b1\t## carrega arquivo 1 do buffer bdelete\t## apaga arquivo do buffer split #2\t## carrega arquivo 2 do buffer em janela horizontal vplit #2 ## carrega arquivo 2 do bufffer em janela vertical ### janelas ctrl wn\t## abre nova janela sobrepondo atual (:new) ctrl wq\t## fecha janela atual (:quit) ctrl wc\t## fecha janela atual ctrl ws\t## Divide janela em duas (:split) ctrl wo\t## Faz janela atual ser unica (:only) ctrl w w ## alterna entre janelas ctrl wj\t## desce uma janela ctrl wk\t## sobe uma janela crtl wr\t## rotaciona janelas ctrl w+\t## aumenta espaço da janela ctrl w-\t## diminui espaço da janela :hide\t## esconde a janela sem fechar buffer :wall\t## salva todas janelas abertas :qall\t## sai de todas janelas :res +5\t## aumenta janela horizonal 5 :resize 60\t## janela horizontal 60 :vertical resize 80 :vertical resize +5 ### abas tabnew file\t## abre arquivo em nova aba tabnext\t## avanca proxima aba tabprevios\t## retorna aba anterior ### Ações (modo normal) d\t## deletar dd\t## deletar linha i\t## inserir I ## inserir no inicio da linha atua a ## inserir apos caracter atual A\t## inserir no final da lina atual o\t## insert na linha abaixo (nova linha) O\t## insert na linha acima (nova linha) p\t## colar abaixo P\t## colar acima y\t## copiar yy\t## copiar linha x\t## recortar x\t## apagar uma letra xx\t## recortar linha u\t## desfazer (undo) di\t## deletar dentro yi\t## copiar dentro v\t## visual / seleção /\t## buscar (find) n proxima ocorrencia // ## repete ultima busca %\t## busca fechamento de parenteses ou chave :s\t## substituir (replace) :50\t## vai para linha 50 50gg\t## vai para linha 50 A\t## iniciar insercao no fim da linha I\t## inciar insercao no inicio da linha J\t## Remove break line da linha atual c/ anterior ZZ\t## sai do arquivo e salva ### Movimentos (modo normal) e\t## fim da palavra atual b\t## incio palavra anterior w\t## inicio proxima palavra hjkl\t## esquerda baixo cima direita $ ## fim da linha 0\t## inicio da linha G\t## fim do arquivo nG\t## pular para linha n )\t## avançar uma frase }\t## avançar um parágrafo gg\t## vai pra linha 1 do arquivo H\t## vai para primeiro caracter da tela M ## poe cursor no meio da tela L\t## vai para ultima linha da tela *\t## salta proxima ocorrencia da palavra ctrl f\t## page foward ctrl b\t## page back zt\t## cursor no topo da pagina zm\t## cursor no fim da pagina ### alteracoes (modo normal) g,\t## avança lista de alteraçoes g; ## retrocede lista de alterações u\t## desfaz ultima mudança :changes\t## ver lista de alterações :h changes\t## lista de alterações detalhadas UU\t## desfaz mudanças da linha editada ctrl -r ## refaz mudanças desfeitas undo undo ### comandos modo insert ctrl y ## copia caracter caracter linha acima ctrl e ## copia caracter caracter linha abaixo ctrl w ctrl f\t## abre arquivo sob cursor na janela atual Shift insert\t## inserir texto da area de transferencia ### modo visual v ## seleção de caracteres V\t## selecão de linhas inteiras ^V\t## seleção de blocos ### Marcas ma\t## cria marca a em modo normal \u0026#39;a\t## move cursor até marca a d\u0026#39;a\t## delete ate a marca a y\u0026#39;a\t## copia ate a marca a ### Exemplos: d$\t## apaga até o final da linha d^\t## apaga até o inicio da linha dG\t## apagar até o final do arquivo dl\t## apagar uma letra D\t## apagar resto da linha d3j\t## deletar 3 linhas abaixo yw\t## copiar proxima palavra cursor no inicio yiW\t## copiar palavra (c/ caracteres especiais ) curso no meio 10j\t## avançar 10 linhas di}\t## apagar tudo dentro das chaves 2{\t## subir 2 paragrafos 5p ## colar selecao atual 5 vezes i\t## Editar onde o cursor apresentar \u0026#34;I can vim now\u0026#34; ayy\t## copia linha atual para registrador a ap\t## cola registrador a fx\t## vai ate proxima ocorrencia de x dfx\t## deleta ate proxima ocorrencia de x ctrl f\t## page foward ctrl b\t## page back gi\t## insert no ultimo ponto de edição gv\t## repete ultima selecao visual gf\t## abre arquivo sob o cursor :s:/foo/bar\t## substitui foo por bar na linha atual :1,10 s/foo/bar ## substitui foo por bar até a 10a linha :% s/foo/bar\t## substitui foo por bar no arquivo todo :1,$ s/foo/bar\t## substitui foo por bar no arquivo todo ### configuracoes set number\t## show line numbers set nonumber\t## ride line numbers set relativenumber ## set relative linenumber set norelativenumber ## unset relative linenumber ","permalink":"https://alansantosmg.netlify.app/post/2020-01-05-dominando-vim/","tags":[{"LinkTitle":"Programação","RelPermalink":"/tags/programa%C3%A7%C3%A3o/"},{"LinkTitle":"Linux","RelPermalink":"/tags/linux/"},{"LinkTitle":"Vim","RelPermalink":"/tags/vim/"}],"title":"Principais comandos do Editor Vim"},{"categories":[{"LinkTitle":"Tecnologia","RelPermalink":"/categories/tecnologia/"}],"content":"Desde a versão 18.04, a Canonical mudou a forma como as interfaces de rede são configuradas no Ubuntu Server. Não devemos mais editar o arquivo /etc/networks/interfaces, como tem sido feito há anos, da forma tradicional. Ele foi substituído pelo netplan.\nO netplan utiliza um arquivo de configuração .yaml que precisa ser escrito usando identações com espaços em branco (se usar tabulações, não é processado pelo netplan). Outra questão importante é que a indentação precisa ser consistente para o arquivo ser processado.\nEmbora muitos estejam acostumados ao método antigo, o novo nada tem de difícil ou misterioso. Faremos um exemplo.\nAbra um terminal e vá para o diretório /etc/netplan usando o comando cd /etc/netplan.\nAntes de efetuar a configuração, é preciso saber qual interface de rede iremos configurar. Para saber quais interfaces temos disponíveis, podemos usar o comando ip addr.\nUma vez dentro do diretório digite o comando ls para verificar a existência do arquivo 50-cloud-init.yaml. Se no mesmo diretório não existir o arquivo 01-netcfg.yaml, devemos criá-lo com o comando sudo touch 01-netcfg.yaml\nUma vez criado o arquivo, devemos editá-lo. sudo nano 01-netcfg.yaml.\nAntes de mostrar como o arquivo deve ser preenchido, algumas observações importantes:\nos parâmetros são configurados no estilo chave: valor; a configuração de rede e máscara ficam em uma linha só; como se trata de ip estático dhcp4 deve ser no; onde há mais de um parâmetro do uso de [] como delimitador é obrigatório; a identação dos parâmetros deve ser feita com espaços em branco e segue uma lógica. Ou seja: eu tenho uma rede e dentro da rede eu tenho um conjunto de interaces do tipo ethernet e dentro deste conjunto eu tenho uma interface de rede que tem suas configurações e nas configurações eu ainda tenho servidores DNS (nameservers) que tem seus endereços. Se formos configurar por exemplo uma interface de rede nomeada enp0s3 com endereço ip estático: 192.168.56.4, máscara de rede 255.255.255.0, gateway 192.168.56.1 e os servidores DNS do Google 8.8.8.8 e 8.8.4.4, o arquivo deve ficar como no exemplo abaixo:\nnetwork: version: 2 renderer: networkd ethernets: enp0s3: dhcp4: no addresses: [192.168.56.4/24] gateway4: 192.168.56.1 nameservers: addresses: [8.8.4.4,8.8.8.8] Após configurar o arquivo, utilizando seus parâmetros, salve-o e a seguir execute o comando sudo netplan apply, no terminal.\nSe o arquivo estiver bem formatado e com parâmetros corretos, ele irá reconfigurar sua interface de rede e tudo estará ok. Se algum parâmetro estiver incorreto ou houver inconsistência na identação, o netplan retornará uma mensagem de erro.\nErros comuns:\narquivo identado com tabulações ao invés de espaços em branco; esquecer os [] nos locais apropriados; usar parametros no singular como adress ao invés de adresses, ethernet no lugar de ethernets, e nameserver no lugar de nameservers. esquecer dos : entre chave e valor; não colocar a mascara no lugar a propriado. Para 255.255.255.0 deve ser 24. não digitar o nome correto da interface de rede no arquivo. Outra maneira de saber ser o netplan funcionou direitinho e se as configurações foram aplicadas é através do comando sudo netplan --debug apply.\nPara configurar mais de uma interface de rede, é possível através da criação de outros arquivos, como 02-netcfg.yaml e assim por diante.\nÉ isso. Espero que tenham gostado.\n","permalink":"https://alansantosmg.netlify.app/post/2019-10-7-ip-linux-ubuntu-server/","tags":[{"LinkTitle":"Linux","RelPermalink":"/tags/linux/"}],"title":"Configurando ip estático no Ubuntu Server"},{"categories":[{"LinkTitle":"Tecnologia","RelPermalink":"/categories/tecnologia/"}],"content":"Uma das coisas que torna o VSCode mais do que um simples editor, é o fato dele já vir com uma funcionalidade que permite fazer o debug de aplicações. Então, porque não usá-lo ao invés ficar debugando a aplicação dentro do Google Chrome?\nEsse post, foi escrito tendo em mente o desenvolvedor iniciante que muitas vezes não consegue configurar corretamente o ambiente por não ter exatamente a noção sobre o ponto de partida para realizar as configurações para esta tarefa e que acaba se frustrando, achando que o debugger do VScode não tem muita utilidade.\nEntão, vamos à obra, pois tudo é bem mais simples do que pode aparentar\u0026hellip;\nPara realizar nossa tarefa, precisaremos instalar 2 extensões no VScode. Na barra lateral esquerda do seu VScode, clique no botão extensões ou então use o atalho de teclado Ctrl + shift + x. e na barra de pesquisa do Marketplace busque e instale as extensões:\nlive server; Debugger for Chrome; Para facilitar a vida, normalmente crio um Workspace de dentro dele crio diversos projetos diferentes (desde que a configuração de ambiente seja semelhante). Assim, poupo algum tempo, ao invés ter que ficar alternando entre Workspaces para cada projeto.\nSe você pretende trabalhar dessa forma, então para que possamos testar o funcionamento do debugger, crie uma pasta dentro do seu workspace chamada projeto-teste.\nNessa pasta, crie 2 arquivos: Index.html e principal.js;\nO conteúdo deles será:\nindex.html:\n\u0026lt;!DOCTYPE html\u0026gt; \u0026lt;html\u0026gt; \u0026lt;head\u0026gt; \u0026lt;meta charset=\u0026#34;utf-8\u0026#34;\u0026gt; \u0026lt;/head\u0026gt; \u0026lt;body\u0026gt; \u0026lt;script src=\u0026#34;principal.js\u0026#34;\u0026gt;\u0026lt;/script\u0026gt; \u0026lt;/body\u0026gt; \u0026lt;/html\u0026gt; principal.js:\nvar teste = { meutexto: \u0026#34;teste\u0026#34;, chamateste: function(){ console.log(\u0026#34;Isso é um: \u0026#34; + this.meutexto) } }; teste.chamateste(); Obviamente o index.html não mostra nada na tela, justamente para vermos o que acontece por trás (mostrar mensagem) no console do debugger. O arquivo principal.js será responsável por criar um objeto, que possui um método para mostrar uma mensagem no console. Após a declaração do objeto, ele chama o método correspondente, que deverá \u0026ldquo;imprimir\u0026rdquo; a mensagem no console.\nApós ter instalado a extensão do Live server, será possível ver na barra inferior do VScode o ícone e a palavra \u0026ldquo;Go live\u0026rdquo;. Ao clicar neles, é carregado um servidor web em sua máquina local. Por default, esse servidor usa a porta 5500.\nPara saber se está funcionando corretamente,uma vez que você esteja na pasta projeto-teste, basta clicar no ícone, que ele carregará o live server, e buscará pelo arquivo index.html e o abrirá no navegador padrão, como se a pasta do projeto fosse o diretório raiz do servidor. Ao fazer isso, basta dar um f12 para abrir as ferramentas de desenvolvimento do chrome e verificar na guia console que a mensagem \u0026ldquo;Isso é um teste\u0026rdquo; apareceu (ou seja, a página index.html, chamou o script principal.js e o executou ao ser carregada).\nSabendo que o live server está funcionando ok. Agora vamos à configuração do Debugger for Chrome.\nCom a extensão instalada, clique no menu Debug e add configurations e escolha como enviroment o Chrome. Será aberto o arquivo de configuração. Pelo fato do projeto não estar hospedado na raiz do Workspace e sim numa pasta dentro deste, será necessário introduzir uma pequena modificação no arquivo.\nEste deve ser o original:\n{ // 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 \u0026#34;version\u0026#34;: \u0026#34;0.2.0\u0026#34;, \u0026#34;configurations\u0026#34;: [ { \u0026#34;type\u0026#34;: \u0026#34;chrome\u0026#34;, \u0026#34;request\u0026#34;: \u0026#34;launch\u0026#34;, \u0026#34;name\u0026#34;: \u0026#34;Launch Chrome against localhost\u0026#34;, \u0026#34;url\u0026#34;: \u0026#34;http://localhost:8080\u0026#34;, \u0026#34;webRoot\u0026#34;: \u0026#34;${workspaceFolder}\u0026#34; } ] } Lembra que a porta do live server é a 5500? Então, troque a 8080 por esta e acrescente uma linha, deixando o arquivo como abaixo:\n{ // 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 \u0026#34;version\u0026#34;: \u0026#34;0.2.0\u0026#34;, \u0026#34;configurations\u0026#34;: [ { \u0026#34;type\u0026#34;: \u0026#34;chrome\u0026#34;, \u0026#34;request\u0026#34;: \u0026#34;launch\u0026#34;, \u0026#34;name\u0026#34;: \u0026#34;Launch Chrome against localhost\u0026#34;, \u0026#34;url\u0026#34;: \u0026#34;http://localhost:5500\u0026#34;, \u0026#34;webRoot\u0026#34;: \u0026#34;${workspaceFolder}\u0026#34;, \u0026#34;file\u0026#34;: \u0026#34;${workspaceFolder}/index.html\u0026#34; } ] } Outras variações possíveis:\n{ // 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 \u0026#34;version\u0026#34;: \u0026#34;0.2.0\u0026#34;, \u0026#34;configurations\u0026#34;: [ { \u0026#34;type\u0026#34;: \u0026#34;chrome\u0026#34;, \u0026#34;request\u0026#34;: \u0026#34;launch\u0026#34;, \u0026#34;name\u0026#34;: \u0026#34;Launch Chrome against localhost\u0026#34;, \u0026#34;url\u0026#34;: \u0026#34;http://localhost:5500\u0026#34;, \u0026#34;webRoot\u0026#34;: \u0026#34;${workspaceFolder}/pasta-do-seu-projeto\u0026#34; } ] } Outra variação:\n{ // 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 \u0026#34;version\u0026#34;: \u0026#34;0.2.0\u0026#34;, \u0026#34;configurations\u0026#34;: [ { \u0026#34;type\u0026#34;: \u0026#34;chrome\u0026#34;, \u0026#34;request\u0026#34;: \u0026#34;launch\u0026#34;, \u0026#34;name\u0026#34;: \u0026#34;Launch Chrome against localhost\u0026#34;, \u0026#34;url\u0026#34;: \u0026#34;http://localhost:5500\u0026#34;, \u0026#34;webRoot\u0026#34;: \u0026#34;${workspaceFolder}\u0026#34;, \u0026#34;file\u0026#34;: \u0026#34;${workspaceFolder}/pasta-do-seu-projeto/index.html\u0026#34; } ] } Escolher uma destas configurações básicas e mandar salvar o arquivo de configuração, deve ser o suficiente para fazer o debugger do Chrome rodar via Vscode.\nPara saber se a configuração funcionou é simples. Após salvar o arquivo, execute o debugger, clicando em F5 quando estiver na pasta do projeto. Ao fazer o live server será iniciado na porta 5500. O debugger estará escutando essa porta (conforme configuramos) e na saída do terminal \u0026ldquo;debug console\u0026rdquo; deverá aparecer a mensagem gerada pela chamada do método que configuramos no objeto criado: \u0026ldquo;Isso é um teste\u0026rdquo;.\nA partir daí basta a começar a desenvolver e utilizar o Debugger. Sua utilização será assunto de outro post. Espero que os modelos de arquivo de configuração do Debugger for Chrome, sirvam como passo inicial sobre como proceder para o uso do debugger de scripts JS no Vscode.\nSe você gostou desse post, ou acha que precisa acrescentar, corrigir ou incluir algo, fique à vontade para deixar seus comentários. Contribuições são muito bem-vindas.\nAté a próxima.\n","permalink":"https://alansantosmg.netlify.app/post/2019-10-01-vscode-debugger-js/","tags":[{"LinkTitle":"Programação","RelPermalink":"/tags/programa%C3%A7%C3%A3o/"},{"LinkTitle":"Javascript","RelPermalink":"/tags/javascript/"},{"LinkTitle":"Vscode","RelPermalink":"/tags/vscode/"}],"title":"Debugando Javascript Apps com Vscode"},{"categories":[{"LinkTitle":"Livros","RelPermalink":"/categories/livros/"}],"content":"Hoje vamos falar do assunto mais importante quando falamos em liderança: COMUNICAÇÃO. De todas as habilidades certamente esta é a mais importante que um lider deve dominar. Como chegar ao outro em um mundo pautado pelos conflitos e pela aspereza geral nas relações?\nMarshall Rosenberg desenvolveu nos anos 60 uma técnica de mediação que consegue aproximar as partes envolvidas em um conflito, qualquer que seja, e faz vir à tona as reais motivações e descontentamentos dessas pessoas. Anos mais tarde ele publicou o livro Comunicação não violenta - Técnica para aperfeiçoar relacionamentos pessoais e profissionais , que já vendeu milhões de cópias pelo mundo.\nEm 1984, Marshall fundou uma ONG, dedicada à promover a CNv pelo mundo, mostrando que a técnica pode ser utilizada não apenas em conflitos armados, mas também naqueles derivados do relacionamento interpessoal e também das negociações profissionais.\nEm 2014, Satya Nadella, ao assumir a liderança da Microsoft, distribuiu cópias da obra entre seus principais executivos para transformar a empresa, vista como hostil, em um ambiente de empatia e solidariedade.\nA CNV é um processo 2 que consiste de 2 momentos:\nExpressar-se honestamente; Receber com empatia. Cada um desses dois momentos utiliza os 4 componentes (passos) da CNV que devem ser seguidos necessariamente nessa ordem:\nObservação: Observar as ações concretas do outro sem avaliar/julgar/comparar; Sentimento: Avaliar qual sentimento despertam em nós; Necessidade: Entender a qual necessidade interior o sentimento gerado se relaciona; Pedido: fazer um pedido para atender à necessidade interior observada. Por fim, o processo leva em conta 2 premissas essenciais para o sucesso da aplicação da CNV:\nEvitar a comunicação que bloqueia a compaixão:\nClassificar e julgar as pessoas estimula a violência. Comparar é uma forma de julgamento. Devemos assumir a responsabilidade:\n\u0026ldquo;O que os outros fazem pode ser o estímulo para nossos sentimentos, mas não a causa\u0026rdquo;. Penso que esse livro deveria ser leitura obrigatória em toda escola, para ajudar a fomentar uma transformação positiva nas relações humanas e criar uma base para um mundo no mínimo mais honesto e com mais compaixão.\nE você? Já leu o livro? O que pensa?\n","permalink":"https://alansantosmg.netlify.app/post/2019-09-26-comunicacao-nv/","tags":[{"LinkTitle":"Comunicação","RelPermalink":"/tags/comunica%C3%A7%C3%A3o/"},{"LinkTitle":"Resenhas","RelPermalink":"/tags/resenhas/"}],"title":"Comunicação não violenta"},{"categories":[{"LinkTitle":"Tecnologia","RelPermalink":"/categories/tecnologia/"}],"content":"Na última semana, concluí todas as lições de Javascript do Watch and Code , desenvolvido pelo engenheiro de software Gordon Zhu, ex-funcionário do Google, que resolveu montar seu próprio curso de programação.\nAo longo de 2019, tenho me aventurado no aprendizado de Javascript e nessa, já li alguns livros, assisti a videos no youtube e cheguei a fazer alguns cursos na Alura. Embora passado por vários conteúdos de excelência, nenhum deles se compara ao curtíssimo curso do Zhu.\nO Watch and Code curso em si é pequeno, cada video tem entre 5 a 10 minutos. Mas, não se deixe enganar. Zhu é um programador exímio e um incrível instrutor, capaz de mostrar de forma prática como construir uma aplicação começando do jeito certo e principalmente, mais rápido e com menor custo de manutenção. Com poucas semanas, aprendi muito mais do que em qualquer outra fonte.\nDurante o processo, além de aprender sobre a estruturas do Javascript, Zhu nos conduz pelo caminho de pensar como um programador, mostrando:\ncomo escrever requisitos de forma clara, sem rodeios. como usar a própria web como plataforma de desenvolvimento; como usar o debugger da forma correta; como ir testando a aplicação a cada feature desenvolvida; como dividir um problema em partes bem pequenas, gerenciáveis. como se desenvolve na prática a tal da arquitetura emergente. E o mais importante: compreendi um conceito central sobre o desenvolvimento de softwares:\nProgramar é manipular listas!\nMuitas vezes, nem nos damos conta, mas é isso mesmo: programas basicamente manipulam dados em listas. Eles inserem dados em listas, geram informações a partir de processamento (manipulação) dos dados de uma ou mais listas e guardam o resultado em listas! Quer ver só?\nUm gerenciador de tarefas é uma lista de tarefas; Um chat é uma lista de diálogos encadeados; Uma rede social, listas de amigos, listas de feeds; Um feed é uma lista de postagens; Um microblog é uma lista usuários, cada qual com uma ou mais listas de mensagens curtas; Um erp é um conjunto listas de nf\u0026rsquo;s, ordens de compra, dados contábeis; Um canal de streaming é uma ou várias listas de músicas e videos; Então, os príncipios são os mesmos, seja para criação de um app simples de lista de tarefas, seja para criação de uma aplicação sofisticada em qualquer área. As implicações sobre esse entendimento são enormes, pois trata-se de uma forma mais pragmática de se encarar o desenvolvimento.\nSe você quer aprender Javascript no estilo change-game não deixe de aproveitar. Faça o Watch and Code do Gordon Zhu. Você vai aprender sobre as principais estruturas do Javascript, e ainda vai se divertir bastante, vendo sua aplicação crescer, como um filho que vai amadurecendo pouco a pouco.\nRecomendo!\nhttps://watchandcode.com/p/practical-javascript ","permalink":"https://alansantosmg.netlify.app/post/2019-09-25-watchandcode/","tags":[{"LinkTitle":"Programação","RelPermalink":"/tags/programa%C3%A7%C3%A3o/"},{"LinkTitle":"Javascript","RelPermalink":"/tags/javascript/"},{"LinkTitle":"Cursos","RelPermalink":"/tags/cursos/"}],"title":"Excelente curso de Javascript Free!"},{"categories":[{"LinkTitle":"Tecnologia","RelPermalink":"/categories/tecnologia/"}],"content":"A liguagem de marcação Markdown foi criada para facilitar a publicação de textos na web em aplicativos como Slack, Github, e outros. Sua sintaxe permite vermos o documento num formato que é semelhante ao resultado final de publicação ainda em tempo de edição (texto puro). Ela também serve de conversor para html, sendo mais fácil de aprender e utilizar. Os posts deste blog por exemplo são escritos em Markdown.\nPara trabalhar com o Markdown no editor Visual Studio Code podemos instalar a extensão Markdown All in One, pois a mesma reúne diversas funcionalidades interessantes, existentes em outras extensões, entre elas:\nFornece atalhos para formatação rápida do documento em MD. Converte arquivos MD em HTML. Ajuda a criar sumário automaticamente para arquivos MD. Fornece preview do arquivo MD dentro do próprio VScode. Permite a criação automática de sumário. As funcionalidades da extensão estão presentes na barra de comando do VSCode e podem ser facilmente acessadas como no exemplo abaixo.\nCriação automática de sumário (Table of Contents) A criação automática de sumário (TOC) funciona da seguinte, maneira. Basta criar normalmente o documento, com suas seções (títulos e sub-titulos) seguindo a sintaxe Markdown. Após criar seu documento com extensão .MD no Vscode, basta fazer o seguinte:\nPosicione o cursor no local onde ficará o sumário. tecle Ctrl + Shift + P Digite na janela de comando: Markdown All In one: Create table of contents O sumário deverá aparecer no lugar onde foi posicionado o cursor. Se quiser que algum item seja omitido do sumário, colocar na frente dele: \u0026lt;!-- omit in toc --\u0026gt; Salve o arquivo. Para atualizar o sumário repetir o procedimento acima, porém usando o comando:Markdown All in one: update table of content\n","permalink":"https://alansantosmg.netlify.app/post/2019-09-25-mardown-toc/","tags":[{"LinkTitle":"Programação","RelPermalink":"/tags/programa%C3%A7%C3%A3o/"},{"LinkTitle":"Vscode","RelPermalink":"/tags/vscode/"},{"LinkTitle":"Markdown","RelPermalink":"/tags/markdown/"}],"title":"Markdown no Vscode"},{"categories":[{"LinkTitle":"Tecnologia","RelPermalink":"/categories/tecnologia/"}],"content":"Em algumas instalações o editor Visual Studio Code pode apresentar um comportamento estranho: você clica em um arquivo no explorer (lado esquerdo) e o mesmo é aberto em uma aba. Você clica em outro arquivo e ao invés de abrir em uma nova aba, ele abre o segundo arquivo na mesma aba do anterior.\nEsse comportamento pode ser modificado, alterando-se um parâmetro nas configurações do Vscode.\nNo Vscode, pressione as teclas ctrl + , ou clique na engrenagem na parte inferior da barra lateral esquerda para abrir as configurações do editor. A seguir, nos settings, escolha Workbench e editor management. Desmarque a opção Enable Preview. Pronto: Agora, ao clicar nos arquivos no explorer do VScode, cada um será aberto em uma aba separada.\nBônus:\nAproveite que já está no editor management e altere a opção Tab sizing de default para srink. Dessa forma, as abas tentarão ocupar o menor espaço posssível à medida em que forem sendo abertas, aproveitando melhor o espaço.\n","permalink":"https://alansantosmg.netlify.app/post/2019-09-25-vscode-abas-nao-abrem/","tags":[{"LinkTitle":"Programação","RelPermalink":"/tags/programa%C3%A7%C3%A3o/"},{"LinkTitle":"Vscode","RelPermalink":"/tags/vscode/"}],"title":"Vscode só abre uma aba"},{"categories":[{"LinkTitle":"Tecnologia","RelPermalink":"/categories/tecnologia/"}],"content":"O cache da loja de aplicativos do Ubuntu pode se corromper levando a duas situações: ou a loja não carrega ou a lista de aplicativos é baixada cada vez que o software é aberto (não faz cache). Para corrigir é preciso apagar o cache. Abra um terminal e digite os comandos abaixo:\nkillall gnome-software sudo rm -rf ~/.local/share/gnome-software Depois de executar o comando, certifique-se de que está conecetado na internet e abra novamente a loja para baixar a lista de apps e criar um novo cache.\n","permalink":"https://alansantosmg.netlify.app/post/2019-07-07-erro-loja-ubuntu/","tags":[{"LinkTitle":"Linux","RelPermalink":"/tags/linux/"},{"LinkTitle":"Troubleshooting","RelPermalink":"/tags/troubleshooting/"}],"title":"Erro na loja de Apps do Ubuntu"},{"categories":[{"LinkTitle":"Tecnologia","RelPermalink":"/categories/tecnologia/"}],"content":"O .gitignore é um arquivo oculto que deve ficar dentro da raiz do seu repositório git. Ele é usado para fazer o git ignorar determinados tipos de arquivo durante as operações de commit. Ele existe justamente para que seu branch de produção possa ficar limpo de arquivos desnecessários. É possível criar um gitignore para cada repo, porém essa operação pode ser automatizada via shell script. Crie um novo arquivo, com o nome de gitignore-create.sh, cole nele o código abaixo, salve e execute-o nos diretórios de seus repositórios git. O mais interessante é que esses comandos podem ser incluídos em um shell script mais completo, feito para fazer todo o setup de seu projeto.\ncd ./.git touch gitignore echo \u0026#34;*.log\u0026#34; \u0026gt;\u0026gt; gitignore echo \u0026#34;*_pycache_\u0026#34; \u0026gt;\u0026gt; gitignore echo \u0026#34;*.[oa]\u0026#34; \u0026gt;\u0026gt; gitignore echo \u0026#34;*~\u0026#34; \u0026gt;\u0026gt; gitignore echo \u0026#34;!lib.a\u0026#34; \u0026gt;\u0026gt; gitignore echo \u0026#34;*.pyc\u0026#34; \u0026gt;\u0026gt; gitignore echo \u0026#34;.vscode\u0026#34; \u0026gt;\u0026gt; gitignore echo \u0026#34;*.vscode\u0026#34; \u0026gt;\u0026gt; gitignore echo \u0026#34;settings.json\u0026#34; \u0026gt;\u0026gt; gitignore echo sleep 2 clear echo \u0026#34;Arquivo gitignore criado em ./.git\u0026#34; echo \u0026#34;Não monitorando (ignorando): \u0026#34; sleep 2 echo \u0026#34;---------------\u0026#34; cat gitignore echo \u0026#34;---------------\u0026#34; sleep 10 echo ","permalink":"https://alansantosmg.netlify.app/post/2019-07-03-gitignore-script/","tags":[{"LinkTitle":"Devops","RelPermalink":"/tags/devops/"},{"LinkTitle":"Git","RelPermalink":"/tags/git/"}],"title":"Script para criar arquivo gitignore"},{"categories":[{"LinkTitle":"Tecnologia","RelPermalink":"/categories/tecnologia/"}],"content":"Quer saber qual a versão atual do Kernel de sua máquina? Listar os ips das interfaces de rede? Muito bem, segue abaixo uma lista de atalhos úteis para quem usa ou administra um servidor/desktop Linux.\nComandos de terminal úteis Comando Função ss -a Listar portas abertas no server. uname -a Mostrar versão do kernel do sistema. uname - r Mostrar versão do kernel sistema. ip addr Listar interfaces de rede. Este post será atualizado de tempos em tempos com novos atalhos interessantes.\n","permalink":"https://alansantosmg.netlify.app/post/2019-04-03-atalhos-term-linux/","tags":[{"LinkTitle":"Linux","RelPermalink":"/tags/linux/"}],"title":"Comandos úteis no terminal do Linux"},{"categories":[{"LinkTitle":"Tecnologia","RelPermalink":"/categories/tecnologia/"}],"content":"Hoje uma usuária do Linkedin, postou uma dúvida sobre como esvaziar sua caixa de entrada de mensagens. O Linkedin permite apagar manualmente cada mensagem, mas o que fazer se o usuário possuir algo como 1.000 mensagens?\nPara minha surpresa, após consultar a ajuda do próprio Linkedin, constatei que não existe uma opção para zerar o inbox. Cheguei a responder à usuária, que não era possível executar tal operação, mas fiquei muito intrigado com o problema. Depois de algumas pesquisas e vários testes , encontrei uma solução funcional.\nVamos à receita:\nVocê deve estar utilizando o Google Chrome para executar a operação.\nUse Control-C para copiar o seguinte código para memória do computador:\n(function() { setInterval(() =\u0026gt; { let deleted = false; $(\u0026#39;artdeco-dropdown-item\u0026#39;).each((i, elem) =\u0026gt; { let txt = $(elem) .text() .trim(); if (txt === \u0026#39;Delete\u0026#39;) { deleted = true; $(elem).click(); } }); if (deleted) { setTimeout(() =\u0026gt; $(\u0026#39;.js-msg-delete\u0026#39;).click(), 500); } else { $(\u0026#39;.msg-conversation-card__list-action-icon\u0026#39;) .eq(1) .click(); } }, 1000); })(); ","permalink":"https://alansantosmg.netlify.app/post/2019-01-05-delete-linkedin-inbox/","tags":[{"LinkTitle":"Programação","RelPermalink":"/tags/programa%C3%A7%C3%A3o/"},{"LinkTitle":"Javascript","RelPermalink":"/tags/javascript/"}],"title":"Deletar mensagens no Linkedin em lote"},{"categories":[{"LinkTitle":"Tecnologia","RelPermalink":"/categories/tecnologia/"}],"content":"Olá, se você é como eu, chegado a bizarrices como administrar o Azure a partir do Linux e não de um servidor ou client Windows, este artigo é para você. O serviço de nuvem da Microsoft (Azure), pode ser comandado a partir de diversas interfaces: através do portal do Azure, disponível na web, através do de um console PowerShell, disponível em máquinas windows ainda através da Azure CLI (Client Line Interface) que pode ser instalada em máquinas Linux e Macs.\nNeste artigo, mostrarei como instalar a CLI do Azure em distribuições Linux que utilizam o gerenciador de pacotes APT (baseadas em Debian), como Ubuntu, Mint, entre outras.\nO procedimento abaixo foi testado no Debian 9 e deve funcionar em outras distros debian-like.\nA instalação não funcionou usando a documentação oficial da Microsoft, mas não se preocupe:\nLançando mão de um pequeno macete, tudo correrá como esperado!\nEntão, mãos à obra:\nPara começar, vamos incluir a localização do repositório do pacote da CLI do Azure, que está hospedada na Microsoft.\nAbra um Shell terminal, copie e cole as linhas abaixo:\nsudo apt-get install apt-transport-https lsb-release software-properties-common -y AZ_REPO=$(lsb_release -cs) echo \u0026#34;deb [arch=amd64] https://packages.microsoft.com/repos/azure-cli/ $AZ_REPO main\u0026#34; | \\ sudo tee /etc/apt/sources.list.d/azure-cli.list A seguir, vamos instalar a chave pública do repositório:\nsudo apt-key --keyring /etc/apt/trusted.gpg.d/Microsoft.gpg adv \\ --keyserver packages.microsoft.com \\ --recv-keys BC528686B50D79E339D3721CEB3E94ADBE1229CF Na documentação oficial, somos orientados a fazer um apt-get update. Porém, ao realizar o comando seguinte de instalação do pacote, é possível se deparar com a mensagem de pacote não encontrado.\nAqui vai o macete que irá lhe poupar tempo e neurônios: além de fazer um apt update também é preciso fazer um apt-upgrade, então o terceiro passo ficaria assim:\nsudo apt-get update \u0026amp;\u0026amp; apt-get upgrade\nAgora sim o apt conseguirá baixar e instalar o pacote da CLI do Azure. Para fazer isso, digite:\nsudo apt-get install azure-cli\nPara terminar, experimente invocar a CLI e veja que a saída do comando deverá ser uma lista de parâmetros a serem usados com a CLI. No shell bash do seu terminal, digite:\naz\nSaída do comando:\n","permalink":"https://alansantosmg.netlify.app/post/2019-01-02-cli-azure-linux/","tags":[{"LinkTitle":"Devops","RelPermalink":"/tags/devops/"},{"LinkTitle":"Linux","RelPermalink":"/tags/linux/"}],"title":"Instalando o Azure Cli no Linux"},{"categories":[{"LinkTitle":"Tecnologia","RelPermalink":"/categories/tecnologia/"}],"content":"Este artigo tem por objetivo mostrar que é possível criar um ambiente de desenvolvimento completo para Python sem a necessidade de instalar IDEs pesadas como Pycharm, Eclipse entre outras e sem abrir mão da \u0026ldquo;usabilidade\u0026rdquo; para o usuário final.\nCaso encontre algum erro neste artigo, gentileza encaminhar por email para alansantosmg@gmail.com para correção.\nPara quem é este artigo Este artigo é voltado para todos (programadores ou não) que pretendem utilizar a linguagem Python e desejam ter um ambiente de desenvolvimento completo, limpo, leve e amigável no qual se tem o controle completo sem depender de ferramentas tais como \u0026ldquo;Anaconda\u0026rdquo; que acabam impedindo o aprendizado ao criar uma camada de abstração sobre as atividades de configuração.\nSobre outros editores para desenvolvimento em Python Alguns puristas preferem desenvolver em Python utilizando o VI Editor, que possui muitas vantagens. Porém, para iniciantes ou para quem tem um pouco mais de pressa, o VI não é amigável e pode se tornar um empecilho, pois além de aprender a programar o iniciante ainda precisa aprender a utilizar e customizar o VI, levando muitas horas para ser produtivo.\nExistem editores interessantes que estão entre o espartano VI e as pesadas e complexas IDEs como Pycharm, Eclipse etc, que embora sejam completas de fábrica, também tem uma curva de aprendizado.\nComo meio termo existem editores como o Atom, Sublime Text e o VSCode.\nO Atom é editor de texto/código multiplataforma muito utilizado para desenvolvimento, principalmente para Web, mas alguns desenvolvedores consideram lento para iniciar e com alto consumo de memória se comparado a outros editores de sua categoria.\nJá o Sublime Text que também é multiplataforma, embora excelente em termos de instalação, usabilidade, flexibilidade, tem a desvantagem de ser pago para uso comercial. Obviamente é possível usar sem pagar, mas isso não seria interessante.\nSobre o VSCode Editor O VSCode que é um editor multiplataforma criado e mantido pela Microsoft. Ele possui licença free tanto para uso comercial quanto privado. Roda em Linux, MacOS e Windows e possui instaladores para as 3 plataformas.\nTrata-se de um projeto mais novo que o Atom e Sublime Text, contando com uma boa comunidade de utilizadores, um grande número de extensões e vem sendo adotado por muitos desenvolvedores Python e não Python.\nO VSCode vem com suporte nativo a GIT com detecção automática de repositórios, Outline, Code Snippets, terminal integrado, file Explorer, file Search e interface para debug e integração com ferramentas de teste.\nAlém de ser totalmente customizável, o VSCode possui opções para edição avançada de código, possibilitando edição em lote. Ele suporta sintax highlighting e identation para a maior parte das linguagens como Python, C#, JavaScript, Java, SQL, Objective C, etc e opção para encoding, além de possuir uma interface bastante amigável.\nPara saber mais sobre o VSCode: https://code.visualstudio.com/docs/supporting/faq Antes de começar Não saia baixando o VSCode antes de iniciar a leitura do artigo. Embora o VSCode já venha no Marketplace de algumas distribuições e no próprio site seja possível baixar um pacote .deb de sua distribuição, esta pode não ser a melhor opção de instalação.\nNos dias atuais, um programador pode trabalhar em diferentes máquinas durante o seu dia (no computador do trabalho, da faculdade, de casa, etc). Pode ser muito chato ter que configurar e manter sincronizado um ambiente de desenvolvimento em cada um desses locais.\nPor isso, este artigo foca na configuração de um ambiente portável, que possíbilite ao programador realizar o upload para o Github, google drive, OneDrive ou para um Pen-drive, ou seja, levar seu ambiente de desenvolvimento para onde ele quiser. No artigo veremos como isso é possível.\nCaso encontre algum erro neste artigo, gentileza encaminhar por email para alansantosmg@gmail.com para que o mesmo possa ser corrigido.\nRequisitos: Estar utilizando o Python 3.x, ter acesso à internet no Sistema onde será feita instalação.\nEstar utilizando distribuições baseadas no Debian tais como:\nLinux Mint Ubuntu Debian Instalação o Python 3 e seu gerenciador de pacotes Se o python 3 não estiver instalado:\nsudo apt-get install python3 sudo apt-get install python3-pip Todos os processos abaixo terão como base o diretório home do utilizador.\nInstalação de Ferramenta de controle de versão Caso utilize o GIT para controle de versão criar o diretório git dentro do diretório home. Caso não vá utilizar ignorar esse passo.\nsudo apt-get install git -y mkdir ~/git Ambientes virtuais (Virtual environments) Um ambiente virtual consiste em um diretório onde estão localizados o intepretador python, bibliotecas e arquivos necessários para rodar a aplicação.\nImagine que sua aplicação precisa utilizar bibliotecas que deverão ser baixadas localmente. E se você tiver 10 aplicações cada uma com conjunto de bibliotecas diferentes? Logo, a instalação global do python de sua máquina ficará cheia de bibliotecas.\nSe você não quiser mais ter a aplicação, terá que manualmente desinstalar as bibliotecas. Além do mais, se precisar realizar o deploy da aplicação em outro ambiente, precisará saber quais bibliotecas e qual versão do interpretador python copiar.\nPara resolver esse problema é possível criar ambientes virtuais.\nUm ambiente virtual nada mais é do que um diretório que contém um conjunto de bibliotecas que será usado por um conjunto de aplicações (ou por uma aplicação só). Ele fica separado do seu ambiente global.\nLogo, quando precisar realizar o deploy da aplicação, bastará levar junto esse ambiente e não tudo que está configurado em seu ambiente global.\nQuando for desenvolver uma aplicação, basta indicar em qual virtual environment está trabalhando (ou seja qual interpretador e bibliotecas aquela aplicação estará usando).\nFelizmente para Linux existem várias ferramentas que automatizam a criação de ambientes virtuais. Para Python3 a ferramenta padrão é o venv.\nInstalando ferramenta venvs: Para instalar o venv:\nsudo apt-get install python3-venv -y Uma dúvida que os iniciantes geralmente tem ao criar venvs:\nNa criação de um venv, este deve ficar dentro da mesma pasta da aplicação que está sendo desenvolvida?\nA resposta é NÃO!\nNão é interessante que um venv fique dentro da pasta da aplicação pelos seguintes motivos:\nSe ele estiver fora, várias aplicações podem usar um mesmo venv. Ou seja, você só criará um venv novo se ele tiver mesmo que ser diferente de algum existente. Se precisar testar fazer testes com ambientes diferentes basta ativar o venv a ser usado, sem necessidade de cópias. Definindo um local para armazenar os ambientes virtuais. Afim de evitar fazer alterações desnecessárias nos venvs, o melhor é criá-lo como uma pasta escondida dentro do diretório home. Para criar a pasta:\nmkdir ~/.venvs Criando um virtual environment. No exemplo o nome dele será venv_01 e será criado dentro da pasta .venvs\npython3 -m venv ~/.venvs/venv_01 Ativando o venv para instalar algumas ferramentas importantes no desenvolvimento: cd ~/.venvs/venv01/bin source ~/.venvs/venv01/bin/activate Após a ativação o prompt do shell irá mudar indicando que você está usando aquele ambiente python.\nInstalação de Ferramentas para desenvolvimento atualizas com VScode Editor. Para facilitar a vida do desenvolvedor, o Python dispõe de ferramentas de de verificação de código e de teste de aplicações. Elas já podem estar instaladas no diretório global, mas por questão de padronização e para facilitar a vida do programador, é melhor incluí-las no venv, assim caso esteja sendo utilizado o VSCode como editor, o mesmo reconhecerá automaticamente essas ferramentas quando estiver usando o venv. Dentro do diretório bin do ambiente ativado entre com os comandos:\npip3 install pylint pip3 install pytest pip3 install --upgrade pip setuptools wheel pip3 list Criando um arquivo requirements.txt O arquivo requirements.txt pode ser criado dentro do ambiente. Ele é útil caso precise refazer o ambiente em outro local. Ele é usado junto com o pip para baixar os pacotes de módulos (bibliotecas) que sua aplicação poderá estar utilizando.\nPara criar um requirements.txt inicial, dentro do diretório bin do ambiente ativado entre com o comando:\npip3 freeze \u0026gt; ~/.venvs/venv_01/bin/requirements.txt É interessante rodar esse comando depois que aplicação estiver finalizada ou sempre que forem adicionadas ou excluídas bibliotecas.\nInstalação do Editor VSCode (Visual Studio Code) Antes de iniciar a instalação um lembrete: ao contrário do Sublime, o Vscode é livre. Você não precisa pagar por uma licença para utilizá-lo. Ele funciona perfeitamente no Linux, pois foi desenvolvido com o framework Electron.\nEfetuar download Vscode versão stable para linux compactado em .tar.gz https://code.visualstudio.com/docs/?dv=linux64 Obs: Tem que ser esse formato, pois a instalação será da versão portável (aquela que o usuário pode levar para qualquer lugar). Não instale a versão .deb.\nDescompactar o arquivo baixado: tar -xzvf code* ou\ntar -xzvf code-stable-1539735949.tar.gz Obs: o nome do pacote pode variar dependendo da versão baixada.\nMovendo o VSCode para o diretório home Após descompactação, mova o diretório criado para localização que quiser.\nSupondo que o pacote foi baixado e descompatado no diretório ~/Downloads, para movê-lo para o seu diretório home, utilize o comando:\nmv ~/Donwloads/VSCode-linux-x64 ~/ ou\nmv /home/nomedomeuhome/Downloads/VSCode-linux-x64 /home/nomedomeuhome/VSCode-linux-x64 Configurando armazenamento das preferências do Editor Criar o diretório data dentro do diretório do vscode. Esse diretório será usado para guardar as preferencias setadas no Editor e extensões instaladas. Assim, o seu ambiente de trabalho poderá ser restaurado em qualquer máquina posteriormente. Se o Vscode houver sido movido para o home:\ncd ~/VSCode-linux-x64 mkdir data Isso permitirá que as preferências e extensões do Editor sejam salvas necesse diretório.\nCaso precise você pode mover o diretório do VSCode inteiro para um pendrive ou para a nuvem ou então apenas mover o diretório data para algum outro local e depois copiá-lo para dentro de um diretório descompactado do VSCode.\nAtualização de Versão do VSCode portável Se sair uma nova versão do VSCode a melhor forma de migrar é descompactar essa versão em um novo diretório e mover o subdiretório data para da pasta da nova versão do VSCode.\nConfigurando o VSCode para trabalhar com Python. Após ter criado o diretório Data, dentro da pasta do VSCode, vamos iniciar o editor. Para isso, dentro da pasta do Vscode execute:\n./code Clicar em Extensions na barra lateral esquerda. Buscar e instalar as extensões listadas abaixo. Git e docker somente para quem pretende utilizar no desenvolvimento. A Extensão Python é mandatória:\nPython Git Merger Git History vscode-icons docker Configurando VSCode para trabalhar com venv Após criar o diretório .venvs e criar ao menos um venv, abrir o vscode ir em Settings e na caixa de busca procurar por python.venvPath\nNa caixa de texto da variável usar o seguinte path:\n~./venvs Reiniciar o vscode.\nSelecionando um venv para utilizar Abra ou crie um arquivo.py no VSCode.\nNa barra de status do VScode, clicar sobre a palavra Python e escolha na caixa que se abrirá o venv que deseja utilizar. Por padrão, além do ambiente global do sistema operacional, serão listados todos os venvs abaixo de ~/.venvs, já que o path para busca automática foi setado no passo anterior.\nBasta escolher qual venv quer utilizar que o ambiente será ativado automaticamente com todas suas bibliotecas.\nComo no venv instalamos o pytest e pylint, o VSCode reconhecerá automaticamente essas ferramentas quando o ambiente estiver sendo utilizado. Não é preciso fazer ajustes no arquivo Settings.\nNote que o VSCode não ativa o venv nos terminais externos que não estão sob a sessão do VSCode. Ele só faz isso para os terminais internos.\nPara ativar o venv fora da sessão do vscode, caso seja necessário, basta usar o procedimento normal de ativação do venv dependendo do tipo de ferramenta de virtual environment que estiver utilizando.\nConfigurando VSCode para encontrar repositórios GIT locais: Executar os passos abaixo somente se o VSCode não encontrar automaticamente os repositórios GIT. Por padrão o VSCode consegue detectar o repositório Git apenas abrindo a pasta que contém os repositórios. Caso ele não consiga, faça o seguinte:\nIr em settings, user settings e na caixa de busca digitar git\nVerificar se a opção está setada para TRUE\nGit: Auto Repository Detection TRUE\nSetar o path de para o diretório onde os repositórios do github serão clonados. Exemplo:\nGit: Default Clone Repository ~/git\nSetar o path onde o VScode escaneará por repositórios git.\nEm Git:Scan Repositories clicar em Edit in settings.json Na tela seguinte copiar as duas linhas da esquerda para direita clicando no ícone de lapis. No lado direito substituir o [] por [\u0026quot;~/git\u0026quot;], ou pelos diretórios onde estão os repos. Exemplo de como deve ficar a linha do lado direito: \u0026quot;git.scanRepositories\u0026quot;: [\u0026quot;~/git]\u0026quot;\nSalvar o arquivo User Settings e reiniciar o VSCode.\nO que foi feito Pronto! Agora é é possível usar o VScode para desenvolver em Python com as seguintes funcionalidades:\nCode snippets Code highlight customizado para Python GIT: Criar e aternar branches, fazer commits, push and pull para github etc. Testar código com pytest (Detecção e execução automática de arquivos test ou test Usar o Debug Rodar aplicação usando terminal interno do VScode. Usar virtual environments com aplicação facilitando o deploy Possibilitar copiar o VScode e/ou suas preferencias para qualquer lugar. Referências: https://code.visualstudio.com/docs https://code.visualstudio.com/docs/python/python-tutorial https://code.visualstudio.com/docs/python/environments https://code.visualstudio.com/docs/python/debugging https://code.visualstudio.com/docs/python/linting https://code.visualstudio.com/docs/python/unit-testing https://git-scm.com/book/pt-br/v2 https://pythonacademy.com.br/blog/python-e-virtualenv-como-programar-em-ambientes-virtuais https://pythonhelp.wordpress.com/2012/10/17/virtualenv-ambientes-virtuais-para-desenvolvimento/ https://fedoramagazine.org/vscode-python-howto/ https://www.reddit.com/r/learnpython/comments/4hsudz/pyvenv_vs_virtualenv/ ","permalink":"https://alansantosmg.netlify.app/post/2018-11-09-env-python-linux/","tags":[{"LinkTitle":"Programação","RelPermalink":"/tags/programa%C3%A7%C3%A3o/"},{"LinkTitle":"Python","RelPermalink":"/tags/python/"}],"title":""},{"categories":[{"LinkTitle":"Tecnologia","RelPermalink":"/categories/tecnologia/"}],"content":"O Docker é uma tecnologia que permite a implementação de aplicações em ambientes separados (chamados de containers) da máquina original (host). Dessa forma o desenvolvedor consegue disponibilizar seu software dentro do container de maneira padronizada. Como o container funciona de forma separada do host, o desenvolvedor não tem que se preocupar com as configurações de ambiente.\nInstruções para instalação do Docker no Linux Mint 19 1. Remover versões anteriores do docker sudo apt-get remove docker docker-engine docker.io sudo apt-get update 2. Instalar os pré-requisitos para obtenção do docker sudo apt-get install apt-transport-https ca-certificates curl software-properties-common 3. Obter chave pública de acesso e adicionar o repositório oficial do docker curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - sudo apt-key fingerprint 0EBFCD88 sudo add-apt-repository \u0026quot;deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable\u0026quot; sudo apt-get update 4. Instalar o docker sudo apt-get install docker-ce 5. Testar se a instalação foi bem sucedida Baixar imagem de teste \u0026lsquo;hello-word\u0026rsquo; criar um container e executá-lo. docker run hello-world Depois verificar se o container existe docker ps -a ","permalink":"https://alansantosmg.netlify.app/post/2018-11-07-docker-linux/","tags":[{"LinkTitle":"Devops","RelPermalink":"/tags/devops/"},{"LinkTitle":"Linux","RelPermalink":"/tags/linux/"}],"title":"Instalando o Docker no Linux Mint"},{"categories":[{"LinkTitle":"Tecnologia","RelPermalink":"/categories/tecnologia/"}],"content":"O script abaixo tem por objetivo facilitar a instalação da versão mais atualizada do Docker com todas suas dependências, no Linux Mint.\n#!/bin/bash # This shell script installs docker on Linux Mint 19 - Tara. # You are free to share it. # Autor: Alan Santos. echo \u0026#39;Removing Docker previous version\u0026#39; sudo apt-get remove docker docker-engine docker.io -y sudo apt-get update -y sleep 3 echo \u0026#39;Installing pre-requisites\u0026#39; sudo apt-get install apt-transport-https ca-certificates curl software-properties-common sleep 3 echo \u0026#39;Registering Docker repo\u0026#39; curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - sudo apt-key fingerprint 0EBFCD88 -y sudo add-apt-repository \u0026#34;deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable\u0026#34; -y sudo apt-get update -y sleep 3 echo \u0026#39;Getting Docker\u0026#39; sudo apt-get install docker-ce -y sleep 3 echo \u0026#39;Testing docker\u0026#39; docker run hello-world ","permalink":"https://alansantosmg.netlify.app/post/2018-11-07-docker-linux-script/","tags":[{"LinkTitle":"Devops","RelPermalink":"/tags/devops/"},{"LinkTitle":"Linux","RelPermalink":"/tags/linux/"}],"title":"Script de instalação do Docker para Linux Mint"},{"categories":[{"LinkTitle":"Tecnologia","RelPermalink":"/categories/tecnologia/"}],"content":"Se você está pensando em se especializar em uma linguagem de programação nos próximos dois anos, considere o Python entre suas alternativas. Bons motivos não faltam.\nEm 2 anos IA (mesmo que por moda) vai ser a bola da vez e Python já está na vantagem. Hoje, Python já vem sendo amplamente utilizado para Data Science, Machine Learning e Deep Learning, disciplinas que são pilares em IA. A computação cognitiva avança em grandes empresas como Google, IBM, Amazon e Microsoft. Cada uma dessas empresas tem suas ferramentas e estratégias para se tornarem provedores de IA. O que há de comum entre elas: Python.\nMudanças no Java para melhor e para pior. A licença do Java mudou e a partir da v11 se quiser ter suporte da Oracle tem que pagar. Isso pode ser bom pois dá maior segurança aos grandes players que usam a tecnologia e ainda incentiva a Oracle a melhorar ainda mais o Java, mas a própria notícia em si já impacta o mercado de forma negativa, principalmente entre as pequenas e médias empresas. Obviamente é possível usar o Open JDK para novos projetos, mas e o legado? A preocupação aumentará até 2020, data fim do suporte da última versão free do JDK da Oracle.\nUm pouco mais sobre Java. No Exterior, em vários fóruns tenho visto comentários que as empresas estão trocando o Java por linguagens menos burocráticas em novos projetos. O ritmo das startups é mais rápido que o de grandes empresas. Nesse sentido o Python encaixa como uma luva: fácil de aprender, multiparadigma e ao mesmo tempo com campo de atuação aberto que vai de aplicações web à robótica. O legado de Java é enorme não vai desaparecer e nem deixar de ser uma das mais utilizadas tão cedo (pelo menos nos próximos 15 anos). Assim como já tentaram matar o papel, já tentaram decretar o fim do Java várias vezes. Pura bobagem. Porém, novos tempos significam novos nichos de mercado e principalmente novas oportunidades. Certamente, o ritmo do mercado exigirá (já exige e quem desenvolve em JavaScript sabe disso) linguagens capazes de trazer resultados mais rápidos. Pode ser muito mais vantajoso competir nesse \u0026ldquo;novo\u0026rdquo; mercado e Python pode cumprir bem esse papel com uma segunda vantagem: baixa competitividade profissional.\nAté 2016 eu nem via vagas de python\u0026hellip; Agora elas já começaram a aparecer e o mais interessante, em determinados casos elas demoram para ser preenchidas pois o mercado ainda não formou profissionais experientes o bastante para assumí-las. No exterior, em alguns sites de trabalho Freelance já tem mais oportunidades em Python do que em outras linguagens como o próprio Java, C#.\nA dica de especializar numa linguagem vale muito, pois martelo na mão de quem sabe usar tem muito mais utilidade do que ter uma caixa inteira de ferramentas e não saber usar nenhuma direito. (E pra saber usar bem uma ferramenta, qualquer que seja, leva tempo mesmo).\nPython já vem no Linux e me parece que o Windows (desculpem os fan-boys) está com os dias contados. Mais uma vez, até a MS sabe que está perdendo terreno e tem agora sua própria distribuição Linux. Eles sabem que SO é commodity e o que agrega valor são serviços. Isso só ajuda o Python.\nO Python vive um momento pelo qual o Java já passou: Nos idos de 98 a 2005 o Java era considerado lento. O que aconteceu? Lei de Moore. O poder de processamento aumentou, o custo Hw baixou. Então para maioria das aplicações, passou a importar pouco o fato do java rodar em jvm. Penso que o mesmo está passando o Python. A lei de Moore continua valendo e logo ninguém vai mais se importar com a velocidade de uma aplicação python para maior parte das coisas. E sendo uma linguagem menos burocrática, tende a acelerar sua adoção. Até a Microsoft (que é a MS) reconhece isso e você já pode programar em Python no Visual Studio ou usá-lo no Azure em soluções de Data Science e Machine Learning.\nPor todos esses motivos, Python parece ter um futuro mais promissor e pode ser uma boa linguagem para quem quer começar ou mudar de ou mudar o mercado.\nMas lembre-se, em matéria de tecnologia, o futuro é hoje!\n","permalink":"https://alansantosmg.netlify.app/post/2018-09-27-python-7motivos/","tags":[{"LinkTitle":"Programação","RelPermalink":"/tags/programa%C3%A7%C3%A3o/"},{"LinkTitle":"Python","RelPermalink":"/tags/python/"}],"title":"Programação em Python 2020/2022"},{"categories":[{"LinkTitle":"Tecnologia","RelPermalink":"/categories/tecnologia/"}],"content":"Para usar o GIT corretamente, uma das primeiras coisas que devemos fazer é configurar nosso nome de usuário e e-mail. Esses dados são importantes, pois eles é que aparecerão quando realizarmos um commit. Para fazer isso, abra um terminal em seu diretorio home no linux e digite os comandos:\ngit config --global user.name \u0026#34;YOUR NAME\u0026#34; git config --global user.email \u0026#34;YOUR EMAIL ADDRESS\u0026#34; Pronto. Agora é só começar a utilizar o GIT.\n","permalink":"https://alansantosmg.netlify.app/post/2018-09-03-user-git/","tags":[{"LinkTitle":"Programação","RelPermalink":"/tags/programa%C3%A7%C3%A3o/"},{"LinkTitle":"Git","RelPermalink":"/tags/git/"}],"title":"Configurar seu usuário para o GIT"},{"categories":[{"LinkTitle":"Tecnologia","RelPermalink":"/categories/tecnologia/"}],"content":"Quando instalamos alguma distribuição linux, normalmente o ambiente gráfico utilizado já trás consigo seu editor de textos oficial. Por exemplo, no Xbuntu (xfce) o editor é o mousepad, no Ubuntu e mint o editor normalmente é o Gedit e por aí vai. Quem é desenvolvedor costuma utilizar editores mais avançados do que aqueles que se assemelham ao bloco de notas e costumam vir por padrão. Para tornar seu editor de código preferido como padrão, basta seguir os passos abaixo. No caso, estamos fazendo com o editor Visual Studio Code, mas poderia ser o Sublime, Atom, etc.\nAbra um terminal e digite:xdg-mime default code.desktop text/plain\nOutra forma de fazer seria utilizar o Mime-Type editor de sua distribuição predileta. Porém via terminal é mais rápido.\n","permalink":"https://alansantosmg.netlify.app/post/2018-08-02-vscode-editor-padrao/","tags":[{"LinkTitle":"Programação","RelPermalink":"/tags/programa%C3%A7%C3%A3o/"},{"LinkTitle":"Vscode","RelPermalink":"/tags/vscode/"}],"title":"Vscode como editor padrão no Linux"},{"categories":[{"LinkTitle":"Tecnologia","RelPermalink":"/categories/tecnologia/"}],"content":"Se você usa o navegador Firefox também odeia ter que ficar clicando o tempo todo em \u0026ldquo;não\u0026rdquo; quando um site pede confirmações para ficar te notificando de atualizações, este artigo é para você. Com um pequeno truque é possível NUNCA MAIS ver o irritante pop-up.\nAbra o Firefox e digite about:config na barra de navegação. Na caixa search busque o termo: webnotif. Dê um duplo clique na chave: dom.webnotifications.enabled e altere o valor de true para false. Reinicie o Firefox. Gestão Tecnologia Devops Programação Dicas Cinema Livros\nPortifólio Currículo Sobre\n","permalink":"https://alansantosmg.netlify.app/post/2017-08-08-stop-firefox-notificacoes/","tags":[{"LinkTitle":"Linux","RelPermalink":"/tags/linux/"}],"title":"Bloquer notificações no Firefox"},{"categories":[{"LinkTitle":"Tecnologia","RelPermalink":"/categories/tecnologia/"}],"content":"Em instalações dualboot Windows 10/linux o horário do Windows fica incorreto. É possível corrigir pelo no Linux:\nVerifique se o relógio do Linux está usando UTC: timedatectl | grep local Se estiver, mude para local time: timedatectl set-local-rtc 1 Caso queria desfazer a mudança: timedatectl set-local-rtc 0 ","permalink":"https://alansantosmg.netlify.app/post/2017-03-02-acerto-relogio-win-dualboot/","tags":[{"LinkTitle":"Linux","RelPermalink":"/tags/linux/"},{"LinkTitle":"Troubleshooting","RelPermalink":"/tags/troubleshooting/"}],"title":"Acertar a hora no Windows/Linux dualboot"},{"categories":[{"LinkTitle":"Gestão","RelPermalink":"/categories/gest%C3%A3o/"}],"content":"Os dez mandamentos da preservação digital: Manterás uma política de preservação. Não dependerás de hardware específico. Não dependerás de software específico. Não confiarás em sistemas gerenciadores como única forma de acesso ao documento digital. Migrarás seus documentos de suporte e formato periodicamente. Replicarás os documentos em locais fisicamente separados. Não confiarás cegamente no suporte de armazenamento. Não deixarás de fazer backups e cópias de segurança. Não preservarás lixo digital. Garantirás a autenticidade dos documentos digitais. ","permalink":"https://alansantosmg.netlify.app/post/2016-08-08-mandamentos-da-preserva%C3%A7%C3%A3o-digital/","tags":[{"LinkTitle":"It-Governança","RelPermalink":"/tags/it-governan%C3%A7a/"}],"title":"Os dez mandamentos da preservação digital"},{"categories":[],"content":"","permalink":"https://alansantosmg.netlify.app/manifest.json","tags":[],"title":""},{"categories":[{"LinkTitle":"Portfolio","RelPermalink":"/categories/portfolio/"}],"content":"DevOps e infraestrutura envGoDev Desenvolva em GO sem precisar, alterar a configuração de seu computador. VirtualBox Machine, provisionada via Vagrant c/ ambiente totalmente configurado para desenvolvimento com Golang, incluindo Go SDK instalado, Editor Vim com plugins para Go e fish Shell + spacefish prompt. https://github.com/alansantosmg/envgodev Desenvolvimento (programação) Linguagem Go timelapse - package Pacote para métrica de tempo de execução de aplicações Go. https://github.com/alansantosmg/timelapse KenobyMindCracker - cli Mini Apps para ajudar na solução de alguns testes de matemática da Gupy. https://github.com/alansantosmg/KenobyMindCracker cliPromptGo - package Componente p/ geração de prompts de entrada de dados para CLI\u0026rsquo;s. https://github.com/alansantosmg/cliPromptGo Python btcInputs.py - component Componente p/validação de inputs via cli tipos string, int e float Bloqueio de sequências de escape. https://github.com/alansantosmg/btcInputs ","permalink":"https://alansantosmg.netlify.app/projects/projects/","tags":[{"LinkTitle":"Projetos","RelPermalink":"/tags/projetos/"}],"title":"Portfolio de projetos"},{"categories":[],"content":"Olá, meu nome é Alan.\nSou mineiro de BH.\nSou formado em Publicidade e Propaganda, Redes de computadores, tenho um mestrado em Sistemas de Informação e trabalho há mais de 25 anos na área de T.I.\nMinha lista de interesses é bastante diversa e envolve áreas como: Cinema, Música, Programação, Sistemas operacionais, Computação em nuvem, Governança de TI, Gestão de projetos, Física, Astronomia, Economia, Filosofia, Mitologia, História, Psicologia Comportamental, Ferramentas de Produtividade, Língua inglesa e Literatura estrangeira.\n","permalink":"https://alansantosmg.netlify.app/about/","tags":[],"title":"Sobre o autor"},{"categories":[],"content":"Hi, I\u0026rsquo;m Alan, Welcome to my website.\nI\u0026rsquo;m a brazilian IT pro and here, you will find useful discussions and comments about tech, cinema, music, management and another subjects of my interest.\nIf you want talk with me, please contact me by linkedin or e-mail.\nI hope you enjoy.\n","permalink":"https://alansantosmg.netlify.app/en/about/","tags":[],"title":"About"}]