<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Allan's Blog]]></title><description><![CDATA[Allan's Blog]]></description><link>https://blog.allansrc.com.br</link><generator>RSS for Node</generator><lastBuildDate>Wed, 15 Apr 2026 18:52:56 GMT</lastBuildDate><atom:link href="https://blog.allansrc.com.br/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Fundamentos de Programação com Dart | #1]]></title><description><![CDATA[Fala pessoal! Tudo bem com vocês? Espero que sim, por que hoje vamos dar início à um serie que bordaremos os Princípios e os Fundamentos da Programação, e tudo isso aplicando em código Dart.
E já sem perder tempo, vamos dar início começando pela Intr...]]></description><link>https://blog.allansrc.com.br/fundamentos-de-programacao-com-dart-1</link><guid isPermaLink="true">https://blog.allansrc.com.br/fundamentos-de-programacao-com-dart-1</guid><category><![CDATA[Flutter]]></category><category><![CDATA[fundamentals]]></category><category><![CDATA[Programming Blogs]]></category><dc:creator><![CDATA[Allan Ramos]]></dc:creator><pubDate>Wed, 20 Mar 2024 19:56:58 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1710964040434/4ef9ca81-be96-4825-a96a-ac7c9344bba4.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Fala pessoal! Tudo bem com vocês? Espero que sim, por que hoje vamos dar início à um serie que bordaremos os Princípios e os Fundamentos da Programação, e tudo isso aplicando em código Dart.</p>
<p>E já sem perder tempo, vamos dar início começando pela Introdução à Variáveis.</p>
<p>Como você bem sabe, a maioria, se não todos os apps, armazena informações que são usadas para mudar e atualizar conforme você usa a aplicação. Por exemplo, um simples Game armazena dados da sua pontuação, quantidade de pontos de vida e créditos que você possui conforme você vai jogando.</p>
<p>Dessa forma, os apps usam a memória do dispositivo para fazer esse armazenamento e as devidas alterações, seja ele um computador, smartphone ou console. Aprender como usar essa memória, é um ponto essencial para um programador.</p>
<p>A forma mais comum de aproveitar a memória de um computador, e aqui você entenda como qualquer dispositivo que rode um app, é através da criação de variáveis.</p>
<h1 id="heading-variaveis">Variáveis</h1>
<p>Variáveis são apenas espaços, ou containers, que servem para guardar um valor, uma vez que esse espaço é criado ele é armazenado na memória do computador e pode ser utilizado e atulizado diversas vezes no seu app.</p>
<p>Criar uma variável em Dart é bem simples, basta usar a plavra chave <code>var</code> (palavra-chave, já já falamos mais disso) seguida de um rótulo que você deseja usar, que servirá de nome e identificador dessa variável. Aqui você pode se sentir à vontade para escolher o nome dessa variável, mas é recomendado que seja dado um nome descritivo, assim ficará mais fácil a leitura do código. O proprio Dart também nos fornece algumas práticas para ajudar a nomear melhor nossas variáveis, como por exemplo:</p>
<ul>
<li><p>começar sempre com letras e em minúsculo;</p>
</li>
<li><p>sempre usar camelCase para nomes compostos;<br />  exemplos:<br />  <code>var minhaVariavel = 'variavel';</code><br />  <code>var minhaOutraVariavel = 2;</code></p>
</li>
<li><p>evitar nomes com separadores;</p>
<ul>
<li>exemplo: <code>var minha_variavel = 2;</code></li>
</ul>
</li>
<li><p>não usar as palavras-chave da linguagem;</p>
<ul>
<li>exemplo: <code>var var ='variável';</code></li>
</ul>
</li>
</ul>
<h3 id="heading-comecou">Começou!</h3>
<p>Agora voltando lá no exemplo do Game, vamos usar variáveis para armazenar o nossa pontuação, pontos de vida e os créditos no game.</p>
<p>Iniciando por nossa pontuação, então podemos "<strong>declarar</strong>" uma variável com o nome <code>score</code> e vamos "<strong>assinar/iniciar</strong>" um valor inicial 0 (Zero) que será atualizado conforme necessário. Feito isso, partimos para os ponto de vida, que aqui vou iniciar com o valor 100 (cem) representando 100% de vida. Lembrando sempre dos rótulos/nomes das variáveis pois vamos precisar deles para atualizar seus valores.</p>
<p>Nesse caso nomearei com as palavras em inglês, por preferir seguir um padrão, já que as palavras-chave da linguagem está semanticamente em inglês. Mas nada impede de fazer em português, caso prefira, pode seguir com os respectivos nomes <code>pontuacao</code> e <code>pontosDeVida</code></p>
<p><code>var score = 0;</code><br /><code>var healthPoints = 100;</code></p>
<p>Para atualizar os valores das variáveis basta reassinar a variável desejada com um novo valor, e dessa vez basta chamar a variável pelo nome e atrinuir um novo valor, sem a necessidade da keyword (palavra-chave) <code>var</code>.</p>
<p><code>score = 10;</code><br /><code>healthPoints = 95;</code></p>
<h3 id="heading-contextualizacao">Contextualização</h3>
<p>Acima vimos palavras como declarar, assinar e iniciar. Isso significa o seguinte. Ao declarar uma variável, estamos criando de fato um novo espaço na memória do computador, usando a estrutura de sintaxe:<br /><code>[paravra-chave] [rótulo/nome]</code><br /><code>var minhaVariavel;</code></p>
<p>Assinar ou iniciar é atribuir um valor para essa variável armazenar memoria. A diferença seria que geralmente usamos o termo "iniciar" para atribuir o valor à variável no momento da declaração:<br /><code>[palavra-chave] [rótulo/nome] [sinal de atribuição] [valor]</code><br /><code>var minhaVariavel = 'valor string';</code></p>
<p>Já assinar é qualquer momento que atribuimos um valor à variável, seja para iniciar um valor ou para atualizar. Por exemplo:<br /><em>Inicialização direta</em><br /><code>var minhaVariavel = 'valor string';</code><br /><em>atualização do valor (reassinar)</em><br /><code>minhaVariavel = 'Novo valor';</code>  </p>
<p><em>Declaração sem iniciar com valor</em><br /><code>var minhaOutraVariavel;</code><br /><em>inicializando com um valor</em><br /><code>minhaOutraVariavel = 'outro valor';</code><br />atualizando com um novo valor<br /><code>minhaOutraVariavel = 'novo outro valor';</code></p>
<p>Outro ponto importante para se notar é o 'sinal de atribuição' repesentado pelo sinal de igualdade ( = ). Contrário ao comum, ele não faz referencia de igualdade, como: <code>"pontosDeVida [é igual a] 100"</code> | <code>var pontosDeVida = 100;</code><br />No caso esse sinal faz referencia de atribuição, ou seja:<br /><code>"pontosDeVida [recebe o valor] 100"</code> | <code>var pontosDeVida = 100;</code></p>
<h3 id="heading-mao-na-massa">Mão na massa</h3>
<p>Agora vamos ver o Dart lidando com as variáveis. Nesse ponto temos duas opções: Primeiro seria realizar o setup do nosso ambiente de desenvolvimento em nossa máquina local, ou usar o DartPad, que é um playground Dart, ou seja, é um ambiente de desenvolvimento online.</p>
<p>Para esses primeiros contatos recomendo usar o dartpad mesmo, pois vai lhe economizar um tempo, mesmo que o dartpad tenha suas limitações, nesses primeiros exemplos não vamos usar tudo até chegar no limite dela. Não por enquanto.</p>
<p>Para usar o dartpad basta abrir o Browser e navegar para o endereço <a target="_blank" href="https://dartpad.dev">https://dartpad.dev</a> e você terá a seguinte interface:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1710961668607/6ae4f5c2-f651-4b9d-a146-7fc6e2b712e3.png" alt class="image--center mx-auto" /></p>
<p>Pode apagar tudo que está escrito na secção da esquerda, onde está o código, e colar o código abaixo, logo depois pode clicar no botão "Run" e esperar a execução do código:</p>
<pre><code class="lang-dart"><span class="hljs-keyword">void</span> main() {
    <span class="hljs-keyword">var</span> minhaVariavel;
    minhaVariavel = <span class="hljs-string">'Nova Variável'</span>;

    <span class="hljs-built_in">print</span>(minhaVariavel);
}
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1710963206440/191c2425-5c05-427d-b8ce-4089cbac0f5a.png" alt class="image--center mx-auto" /></p>
<p>Note que no lado direito, apareceu o texto que está assinado em nossa variável. Esse espaço é o debug console, e é ai que são apresentados os logs da execução do app. Como não temos nenhuma mensagem de erro, isso significa que tudo ocorreu bem!</p>
<p>Note ainda que há uma linha azul sublinhando o nome da variável. No canto inferior esquerdo, agora está um modal com um warning, no qual a mensagem traduzida indica que "uma variável não inicializada deve ter uma anotação de tipo".</p>
<p>Se agora invés de assinar o valor da variável na linha seguinte, e já iniciar o valor durante a declaração podemos notar que o warning desaparece:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1710963642339/72a3f8e5-9e3d-4357-8462-8e485632a6d6.png" alt class="image--center mx-auto" /></p>
<p>Isso é um dos pontos fortes do Dart, como ele fornece um compilador que tanto analisa o código, durante o tempo de execução do app, ele também faz a análise antes do tempo de execução (compilações JIT <em>Just in Time</em>, e AOT <em>Ahead of Time</em>) e faz com que os programadores consiga ver possíveis erros e otimisações de código enquanto está desenvolvendo, invés de precisar compilar e executar o app para poder detectar esses pontos.</p>
<h3 id="heading-proximos-passos">Próximos passos</h3>
<p>Antes de continuarmos para os próximos conseitos dos Fundamentos de programação, vou deixar algums challenges como prática do que foi visto nesse tópico.</p>
<p>No código existente, tente criar novas variáveis, como <code>score</code>, <code>life</code> e <code>gold</code>. Crie e inicialise com seus devidos valores.</p>
<p>Bônus: Tente fazer com que o programa mostre os valores das variáveis no debug console.</p>
<p>No Próximo tópico vamos explorar os tipos de variáveis e a estrutura de nosso app. Entender o papel do <code>main()</code>, <code>print()</code> etc</p>
]]></content:encoded></item><item><title><![CDATA[Vision Pro: Desbravando Novos Horizontes no Mundo dos Jogos]]></title><description><![CDATA[No cenário em constante evolução da tecnologia, a Apple mais uma vez capturou a atenção de entusiastas e críticos com o lançamento do seu headset Vision Pro. Embora o dispositivo tenha sido inicialmente promovido por suas capacidades de realidade aum...]]></description><link>https://blog.allansrc.com.br/vision-pro-desbravando-novos-horizontes-no-mundo-dos-jogos</link><guid isPermaLink="true">https://blog.allansrc.com.br/vision-pro-desbravando-novos-horizontes-no-mundo-dos-jogos</guid><category><![CDATA[AI]]></category><category><![CDATA[vision pro]]></category><category><![CDATA[Apple]]></category><dc:creator><![CDATA[Allan Ramos]]></dc:creator><pubDate>Mon, 05 Feb 2024 16:48:21 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1707200035152/9b274b6f-4892-42e5-bfd2-36596e2a3f31.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>No cenário em constante evolução da tecnologia, a Apple mais uma vez capturou a atenção de entusiastas e críticos com o lançamento do seu headset Vision Pro. Embora o dispositivo tenha sido inicialmente promovido por suas capacidades de realidade aumentada (AR) e realidade mista (MR), um evangelista e consultor de IA, <a target="_blank" href="https://twitter.com/altryne/status/1753649516341817805?ref_src=twsrc%5Etfw%7Ctwcamp%5Etweetembed%7Ctwterm%5E1753649516341817805%7Ctwgr%5Ef2f6eaad6b097bfef3bab58143e4213ec5a7b67e%7Ctwcon%5Es1_&amp;ref_url=https%3A%2F%2Fwww.tomshardware.com%2Fvirtual-reality%2Fgamer-hacks-palworld-onto-apple-vision-pro-plays-game-on-300-inch-virtual-screen-makes-115-inch-4k-projector-look-puny">Alex Volkov</a>, não perdeu tempo em destacar seu potencial ainda não explorado no universo dos jogos.</p>
<p>Volkov recentemente recorreu ao Twitter e outras mídia sociais para destacar o poder do Vision Pro no mundo dos jogos. Em sua demonstração, ele se imergiu perfeitamente no mundo do mais recente sucesso dos Games Palworld, utilizando os recursos avançados do dispositivo de $3,500, Steam Link e um controle Bluetooth.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://twitter.com/altryne/status/1753649516341817805?ref_src=twsrc%5Etfw%7Ctwcamp%5Etweetembed%7Ctwterm%5E1753649516341817805%7Ctwgr%5Ef2f6eaad6b097bfef3bab58143e4213ec5a7b67e%7Ctwcon%5Es1_&amp;ref_url=https%3A%2F%2Fwww.tomshardware.com%2Fvirtual-reality%2Fgamer-hacks-palworld-onto-apple-vision-pro-plays-game-on-300-inch-virtual-screen-makes-115-inch-4k-projector-look-puny">https://twitter.com/altryne/status/1753649516341817805?ref_src=twsrc%5Etfw%7Ctwcamp%5Etweetembed%7Ctwterm%5E1753649516341817805%7Ctwgr%5Ef2f6eaad6b097bfef3bab58143e4213ec5a7b67e%7Ctwcon%5Es1_&amp;ref_url=https%3A%2F%2Fwww.tomshardware.com%2Fvirtual-reality%2Fgamer-hacks-palworld-onto-apple-vision-pro-plays-game-on-300-inch-virtual-screen-makes-115-inch-4k-projector-look-puny</a></div>
<p> </p>
<p>A integração de elementos de AR e MR na experiência de jogo criou uma sinergia que ultrapassou as configurações convencionais de jogos. À medida que Volkov navegava pelas paisagens virtuais de Palworld, ficou evidente que a incursão da Apple na tecnologia de consumo não se limitava apenas a aprimorar a realidade, mas a remodelar a maneira como percebemos e interagimos com o entretenimento digital.</p>
<p>Em um vídeo subsequente, Volkov aproveitou a oportunidade para fazer uma comparação marcante entre o headset da maçã e um moderno projetor de jogos de 115 polegadas instalado em seu escritório. Os resultados foram surpreendentes, pois ele enfatizou a superioridade do headset sobre o projetor, tornando este último quase diminuto em comparação.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://twitter.com/altryne/status/1753656847674855793?ref_src=twsrc%5Etfw%7Ctwcamp%5Etweetembed%7Ctwterm%5E1753656847674855793%7Ctwgr%5Ef2f6eaad6b097bfef3bab58143e4213ec5a7b67e%7Ctwcon%5Es1_&amp;ref_url=https%3A%2F%2Fwww.tomshardware.com%2Fvirtual-reality%2Fgamer-hacks-palworld-onto-apple-vision-pro-plays-game-on-300-inch-virtual-screen-makes-115-inch-4k-projector-look-puny">https://twitter.com/altryne/status/1753656847674855793?ref_src=twsrc%5Etfw%7Ctwcamp%5Etweetembed%7Ctwterm%5E1753656847674855793%7Ctwgr%5Ef2f6eaad6b097bfef3bab58143e4213ec5a7b67e%7Ctwcon%5Es1_&amp;ref_url=https%3A%2F%2Fwww.tomshardware.com%2Fvirtual-reality%2Fgamer-hacks-palworld-onto-apple-vision-pro-plays-game-on-300-inch-virtual-screen-makes-115-inch-4k-projector-look-puny</a></div>
<p> </p>
<p>O que diferencia o Vision Pro no cenário dos jogos é a perfeita integração de tecnologia de última geração. A fusão de recursos de AR e MR não apenas aprimora as experiências visuais, mas também abre novas possibilidades para jogabilidade imersiva. A compatibilidade do dispositivo com Steam Link e controles Bluetooth destaca ainda mais o compromisso da Apple em fornecer uma plataforma de jogos versátil e fácil de usar.</p>
<p>O sucesso do Vision Pro no setor de jogos poderia potencialmente marcar uma mudança de paradigma na indústria, introduzindo uma nova era em que as tecnologias de AR e MR se fundem com os jogos tradicionais. À medida que entusiastas de jogos e aficionados por tecnologia exploram o potencial não explorado da mais recente oferta da Apple, o Vision Pro pode se destacar como um divisor de águas, redefinindo os limites do entretenimento interativo.</p>
<p>Enquanto alguns podem ter inicialmente subestimado o Vision Pro como sendo principalmente um dispositivo de AR/MR, a demonstração de Volkov serve como um testemunho convincente de sua versatilidade. A jogada estratégica da Apple ao posicionar o headset como uma maravilha tecnológica abrangente parece estar rendendo frutos, atendendo com sucesso a um público mais amplo, incluindo jogadores ávidos em busca de uma experiência revolucionária de jogo.</p>
<p>À medida que o Vision Pro continua a ganhar destaque em diversas comunidades de tecnologia, ele provoca discussões intrigantes sobre o futuro dos jogos e o papel que a realidade aumentada desempenhará na moldagem desse futuro. A incursão ousada da Apple no mundo dos jogos com o Vision Pro anuncia uma era em que a inovação não conhece limites, e as fronteiras entre a realidade e a virtualidade se tornam tênues na busca por experiências de jogo inigualáveis.</p>
<p>Referências:<br /><strong>Alex Volkov (Thursd/AI) -</strong> <a target="_blank" href="https://twitter.com/altryne?ref_src=twsrc%5Etfw%7Ctwcamp%5Etweetembed%7Ctwterm%5E1753649516341817805%7Ctwgr%5Ef2f6eaad6b097bfef3bab58143e4213ec5a7b67e%7Ctwcon%5Es1_&amp;ref_url=https%3A%2F%2Fwww.tomshardware.com%2Fvirtual-reality%2Fgamer-hacks-palworld-onto-apple-vision-pro-plays-game-on-300-inch-virtual-screen-makes-115-inch-4k-projector-look-puny"><strong>Twitter</strong></a><br /><strong>Mark Tyson -</strong> <a target="_blank" href="https://www.tomshardware.com/virtual-reality/gamer-hacks-palworld-onto-apple-vision-pro-plays-game-on-300-inch-virtual-screen-makes-115-inch-4k-projector-look-puny"><strong>Tom's Hardware</strong></a></p>
]]></content:encoded></item><item><title><![CDATA[Boosting up your terminal for development — Productivity]]></title><description><![CDATA[One tool which is always with you as a Software developer is The Terminal (or Console, as you prefer). So we can use some plugins/extensions to get it "smarter" and then improve your productivity.
First things
First things first. This article (to mak...]]></description><link>https://blog.allansrc.com.br/boosting-up-your-terminal-for-development-productivity</link><guid isPermaLink="true">https://blog.allansrc.com.br/boosting-up-your-terminal-for-development-productivity</guid><category><![CDATA[2Articles1Week]]></category><category><![CDATA[Programming Tips]]></category><category><![CDATA[terminal]]></category><category><![CDATA[Developer]]></category><category><![CDATA[macOS]]></category><category><![CDATA[Linux]]></category><dc:creator><![CDATA[Allan Ramos]]></dc:creator><pubDate>Mon, 22 Jan 2024 14:18:47 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1705933009321/4891c5b4-c2c7-4168-a6e5-fc0951fcc334.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>One tool which is always with you as a Software developer is The Terminal (or Console, as you prefer). So we can use some <em>plugins/extensions</em> to get it "smarter" and then improve your productivity.</p>
<h1 id="heading-first-things"><strong>First things</strong></h1>
<p>First things first. This article <em>(to make this one light)</em> it covers macOS and Linux Users, so for Windows Users I will write another one covering setup, customization and improvements.</p>
<h2 id="heading-what-will-i-get"><strong>What Will I get?</strong></h2>
<p>I choose some plugins that help me at work like: In line auto-complete command, common suggestions, Git Icons indicators and Project path indicators, Colorful semantics and so on.</p>
<p><img src="https://miro.medium.com/v2/resize:fit:700/1*qFxSLnj9dHiamwmapB42QQ.png" alt class="image--center mx-auto" /></p>
<h2 id="heading-the-tools"><strong>The Tools</strong></h2>
<p>To get these features on your terminal you don't need another Terminal app itself. You can get one without problem, like iTerm for macOS or DeepinConsole or something else, but it isn't a requirement.<br />All you'll need is:<br />- zsh: a shell (like bash) built-in on macOS Catalina and Later;<br />- ohmyzsh: to be able attach plugins, like zinit;<br />- zinit installer and its plugins to <em>do things;<br />-</em> themimg: theme and fonts for custom icons for Languages/frameworks etc;</p>
<h1 id="heading-lets-start"><strong>Let's Start</strong></h1>
<p>So, if you are on macOS Catalina or Later you have the zsh shell built in on your terminal. In another hand you must to install it and make it your default shell.</p>
<blockquote>
<p>on Linux<br /><code>brew install zsh</code> or<br /><code>sudo apt install zsh</code></p>
<p>Make it default:<br /><code>chsh -s $(which zsh)</code></p>
<p>on macOS<br /><code>brew install zsh</code></p>
<p>make it default: on newest macOS versions.<br /><code>chsh -s /usr/local/bin/zsh</code></p>
<p>on HighSierra and older:<br /><code>chsh -s /bin/zsh</code></p>
</blockquote>
<p>Doing this you should be able to run zsh on your machine. To check if works fine run <code>zsh --version</code> or <code>/bin/zsh --version</code></p>
<p><img src="https://miro.medium.com/v2/resize:fit:700/1*xcd_pAcbaZUF5N9chKZ0PQ.png" alt class="image--center mx-auto" /></p>
<p>Now we will install <a target="_blank" href="https://github.com/ohmyzsh/ohmyzsh"><strong>OhMyZsh</strong></a> you can install it using three methods, curl, wget and fetch:</p>
<blockquote>
<p>curl (recommended):</p>
</blockquote>
<pre><code class="lang-bash">sh -c <span class="hljs-string">"<span class="hljs-subst">$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)</span>"</span>
</code></pre>
<blockquote>
<p>wget:</p>
</blockquote>
<pre><code class="lang-bash">sh -c <span class="hljs-string">"<span class="hljs-subst">$(wget -O- https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)</span>"</span>
</code></pre>
<blockquote>
<p>fetch:</p>
</blockquote>
<pre><code class="lang-bash">sh -c <span class="hljs-string">"<span class="hljs-subst">$(fetch -o - https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)</span>"</span>
</code></pre>
<p><img src="https://miro.medium.com/v2/resize:fit:700/1*rPJ1OpelFyvY2i-PVBmB5Q.png" alt class="image--center mx-auto" /></p>
<p>Now let's download the theming and fonts/icons. To the theme you can choose anyone you like, I got Dracula <em>cos'</em> I do like it.<br />So check <a target="_blank" href="https://draculatheme.com/"><strong>Dracula's website</strong></a> and pick a theme for your terminal. There are some terminals on Compactibility List: Gnome, iTerm, <a target="_blank" href="https://github.com/ohmyzsh/ohmyzsh">Terminal.app</a>(that is my current on this example) etc. Next, follow the steps to download it and activate:</p>
<p><img src="https://miro.medium.com/v2/resize:fit:700/1*BRJUq7allr10tOY9HH59nA.png" alt class="image--center mx-auto" /></p>
<p><a target="_blank" href="https://github.com/ohmyzsh/ohmyzsh">https://draculatheme.com/</a></p>
<p>The fonts and icons we'll use <a target="_blank" href="https://github.com/tonsky/FiraCode/releases"><strong>FiraCode</strong></a> and <strong>Spaceship Theme.</strong> With FiraCode we can use a free monospaced font with programming ligatures. SpaceShip make some icons from git, languages version, Docker and path be displayed on terminal. So just follow the <a target="_blank" href="https://github.com/tonsky/FiraCode/releases"><strong>Github Release link</strong></a>, download and install the font format you prefer.<br />Then select FiraCode on your terminal profile, as the image bellow:<br /><strong><em>Terminal &gt; Preferences &gt; Profile &gt; Font</em></strong></p>
<p><img src="https://miro.medium.com/v2/resize:fit:700/1*2aK-vgDBxUKwM1UIrIsckw.png" alt class="image--center mx-auto" /></p>
<p>For Spaceship you just need a couple of command to download, link and set it on zsh profile file.</p>
<blockquote>
<p>Download Spaceship:</p>
</blockquote>
<pre><code class="lang-bash">git <span class="hljs-built_in">clone</span> https://github.com/denysdovhan/spaceship-prompt.git <span class="hljs-string">"<span class="hljs-variable">$ZSH_CUSTOM</span>/themes/spaceship-prompt"</span>
</code></pre>
<blockquote>
<p>Then link it:</p>
</blockquote>
<pre><code class="lang-bash">ln -s <span class="hljs-string">"<span class="hljs-variable">$ZSH_CUSTOM</span>/themes/spaceship-prompt/spaceship.zsh-theme"</span> <span class="hljs-string">"<span class="hljs-variable">$ZSH_CUSTOM</span>/themes/spaceship.zsh-theme"</span>
</code></pre>
<p>So now inside the file <strong>~/.zshrc</strong> replace the default theme on <strong>ZSH_THEME</strong> variable like this: <strong>ZSH_THEME=”spaceship”</strong> then restart the terminal.</p>
<p><img src="https://miro.medium.com/v2/resize:fit:700/1*4mdJ301MZN2opp_7v-j-qg.png" alt class="image--center mx-auto" /></p>
<p>Now we will set the spaceship settings. At the botton of <strong>~/.zshrc</strong> paste the following code:</p>
<blockquote>
<p><em>SPACESHIP_PROMPT_ORDER=(<br />user # Username section<br />dir # Current directory section<br />host # Hostname section<br />git # Git section (git_branch + git_status)<br />hg # Mercurial section (hg_branch + hg_status)<br />exec_time # Execution time<br />jobs # Background jobs indicator<br />exit_code # Exit code section<br />char # Prompt character<br />)</em></p>
<p>SPACESHIP_USER_SHOW=always<br />SPACESHIP_PROMPT_ADD_NEWLINE=false<br />SPACESHIP_CHAR_SYMBOL="$_❯"<br />SPACESHIP_CHAR_SUFFIX=" "</p>
</blockquote>
<p>these fields <strong>SPACESHIP_CHAR_SYMBOL</strong> and <strong>SPACESHIP_CHAR_SUFFIX</strong> You can use any String you want to customize the first and second line on input terminal. So Mine looks like that:</p>
<p><img src="https://miro.medium.com/v2/resize:fit:700/1*uYBXMGeGjsbFgcw573QDSQ.png" alt class="image--center mx-auto" /></p>
<h1 id="heading-final-touch"><strong>Final touch</strong></h1>
<p>Finally let’s adds the plugins and finish the boost. First install zinit installer:</p>
<pre><code class="lang-bash">bash -c <span class="hljs-string">"<span class="hljs-subst">$(curl --fail --show-error --silent --location https://raw.githubusercontent.com/zdharma-continuum/zinit/HEAD/scripts/install.sh)</span>"</span>
</code></pre>
<p>When it ends <strong>restart the terminal</strong> and if some installation is needed it will run by itself, so wait the end of instalation and go to next step.<br />Now open again the <strong>~/.zshrc</strong> file and adds the following code bellow the last line on the file:</p>
<blockquote>
<p><em>zinit light zdharma-continuum/fast-syntax-highlighting<br />zinit light zsh-users/zsh-autosuggestions<br />zinit light zsh-users/zsh-completions</em></p>
</blockquote>
<p>The file will looks like that:</p>
<p><img src="https://miro.medium.com/v2/resize:fit:700/1*FM9rqjFaqAIeaiyaoeCXxg.png" alt class="image--center mx-auto" /></p>
<h1 id="heading-conclusion"><strong>Conclusion</strong></h1>
<p>So! Now you have a terminal with thousands of add-ons for common tools like Yarn, Homebrew, Node etc (<em>you just need to press TAB to complete commands</em>); commands based on run history; syntax highlighting with missing command indicator and so on!</p>
<p>I hope you enjoy it and these tips save some seconds by day and hours by weeks or by year on your job (😁😅🤣).<br />seeya!</p>
]]></content:encoded></item><item><title><![CDATA[A Short introduction to Fuchsia — FuchsiaOS]]></title><description><![CDATA[Hey there.for those who missed it, Google is working on a brand new Operating System, FuchsiaOS.
As announced in 2016, FuchsiaOS isn't an Android's successor, leastways it’s not its intention. In the officials documentation, the Fuchsia team describe...]]></description><link>https://blog.allansrc.com.br/a-short-introduction-to-fuchsia-fuchsiaos</link><guid isPermaLink="true">https://blog.allansrc.com.br/a-short-introduction-to-fuchsia-fuchsiaos</guid><category><![CDATA[Programming Blogs]]></category><category><![CDATA[Flutter]]></category><category><![CDATA[Google]]></category><category><![CDATA[Rust]]></category><category><![CDATA[fuchsia]]></category><dc:creator><![CDATA[Allan Ramos]]></dc:creator><pubDate>Mon, 22 Jan 2024 14:06:37 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1705932229983/c882b877-4861-4f61-b615-2333215c913a.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hey there.<br />for those who missed it, Google is working on a brand new Operating System, FuchsiaOS.</p>
<p>As announced in 2016, FuchsiaOS isn't an Android's successor, leastways it’s not its intention. In the officials documentation, the Fuchsia team describes that it will not focus on an “User Experience”, but rather on multiple experiences.</p>
<p>This implies that more than Android can be, Fuchsia will be more responsive and multi-platform, “targeting” on several platforms such as: Smartphones, TVs, HomeCasts, Speeches, Desktops, Watches, and maybe any others.</p>
<p>Since the last article I wrote about the system two years ago, a lot of things have changed, but we’ll see all of that in this article and some other news.</p>
<h1 id="heading-modular"><strong>Modular</strong></h1>
<p>FuchsiaOS, by now just Fuchsia, was designed to be an entirely modular system, allowing its libraries and applications to be entirely removed, updated and added on it without the system get affected .</p>
<p>This, in addition to ensuring system integrity, allows it to be more secure, for example, security patch updates can be easily obtained with a simple package without compromising user data or others applications.</p>
<h1 id="heading-technologies-stack"><strong>Technologies / Stack (?)</strong></h1>
<p>The technologies used in the development of Fuchsia are, of course C and C++, Rust, GO, and Dart. Thus, developing for Fuchsia the developer will be able to choose the language used in the backend — as being a fully modular system Fuchsia has no problem with that.</p>
<p>Its native frontend applications are developed in Dart/Flutter, which will greatly facilitate the migration from the Android platform to Fuchsia, and still in market adoption, since Flutter is one of the most successful technologies of the last years!</p>
<p>An interesting point to check is that today it is totally viable to develop apps using Dart/Flutter and low-level languages — languages ​​that communicate directly with the operating system, such as C/C++ and Rust — through the use of the Dart:ffi library , and that I’ve been written an article about the integration of Rust with Flutter and I recommend reading it.</p>
<h1 id="heading-architecture"><strong>Architecture</strong></h1>
<p><img src="https://miro.medium.com/v2/resize:fit:700/1*ZDXiQTRB00740DrDrH1VGg.png" alt class="image--center mx-auto" /></p>
<p>Arquitetura do Fuchsia</p>
<p>Fuchsia was designed to be a secure, highly upgradable, modular, and performant system. We discussed this in the last article, but this time we have news, the system now has more architectural principles to guide its development and design.</p>
<p>The system is no longer an “Experiment”, as it was previously treated, but a production-level system. Like the new Google Nest Hub that already comes with a version of Fuchsia running natively.</p>
<h2 id="heading-secure"><strong>Secure</strong></h2>
<p>It means that all software running on Fuchsia, including applications and components of the system itself, follow the principle of least privilege (<a target="_blank" href="https://www.cisa.gov/uscert/bsi/articles/knowledge/principles/least-privilege#:~:text=The%20Principle%20of%20Least%20Privilege%20states%20that%20a%20subject%20should,control%20the%20assignment%20of%20rights.">principle of least privilege</a>), which in short, requires that in an abstraction layer of the operating system environment, each module — such as a process, a user, or an application — is able to access only the information and resources necessary for its execution.</p>
<h2 id="heading-updateble"><strong>Updateble</strong></h2>
<p>Upgradable implies that Fuchsia packages are designed to be updated independently or even Instant Delivery, or Enphemery, which means that packages are designed to be decoupled, and so come and go from the device as needed, and the system is always kept up to date.</p>
<h2 id="heading-modularinclusive"><strong>Modular/Inclusive</strong></h2>
<p>Modular means that the system is language independent. Since it is designed to be extensible and allow for the integration of software written in multiple languages ​​and runtimes, you can either develop using C, C++, Rust, Go, Python, or Dart/Flutter.</p>
<h1 id="heading-kernel"><strong>Kernel</strong></h1>
<p>The system core is Zircon, which is the kernel with a set of libraries which manage the startup and bootstrapping of the system. All system components outside the kernel are implemented, in what we call userspaces, and totally isolated from the critical layers of the system — reinforcing the principle of least privilege, as we already talked about here — , so even Device Drivers are isolated in userspaces.</p>
<p>Zircon brings the architecture and many of the concepts we know through Microkernels. This architecture makes it possible for Fuchsia to minimize the amount of trust code as much as possible, limiting Memory management, Scheduling, and IPC (Inter-process communication).</p>
<p><img src="https://miro.medium.com/v2/resize:fit:700/1*WINlcCS2P2_W8X7efnlFVw.png" alt class="image--center mx-auto" /></p>
<p>Comparação entre um kernel convencional e o Zircon Kernel</p>
<p>So we have a possible problem: if the entire core of the system is isolated from the userspaces, how can we develop apps that need information or even “talk” with the system?</p>
<p>So to our code perform interactions such as: Manual memory management, system tasks or processes, IPC, device I/O etc; we can use system calls. These processes that execute the system calls are executed by the vDSO (virtual Dynamic Shared Object — <a target="_blank" href="https://medium.com/@allansrc?source=post_page-----8a3b5de2dbe0--------------------------------">libzircon.so</a>) library which reads a generated kernel image, instead of directly reading the files in the kernel. While reading this image, the userspace code is given only the necessary privileges, — how these privileges are managed we can discuss in another article.</p>
<p>But why do I need to know this?</p>
<p>The short answer is: you don’t.</p>
<p>But <em>at all</em>, if you are a developer, the vast majority of apps that you might need to develop for Fuchsia, you will probably use Events, Streams, Channel, Socket, etc. And it’s all part of Inter-Process Communication (IPC), so if that’s <em>your case</em>, here’s where you should start study to develop for Fuchsia 😉.</p>
<blockquote>
<p><em>(Fuchsia dev Road map</em> <a target="_blank" href="http://github.com/allansrc/guide_to_fuchsia"><strong><em>soon</em></strong></a><em>)</em></p>
</blockquote>
<h1 id="heading-why-fuchsia-is-so-interesting"><strong>Why Fuchsia is so interesting</strong></h1>
<p>Remember that Fuchsia is not a Linux-based system. Absolutely unlike Android that runs on top of Linux Kernel, Fuchsia is completely independent, the entire system and kernel is developed by Google, and fully opensource (afaik), you can submit Pull Requests for the system or even work parallel to it, creating a new system for your pleasure or need. A good example of this is dahliaOS which is a Zircon/Linux (releases are on Linux based) developed based on Fuchsia for the desktop, (I gave a two cents on it 😅) I recommend seeing the <a target="_blank" href="https://www.youtube.com/watch?v=87GgOynERW0">Dio Linux video</a> (if you speak Portuguese) that talks a little about the system, it’s worth checking it out!</p>
<p>What I like the most interesting thing about the system is that its ecosystem is free. What I mean is, while the complete system is developed by Google, their main frontend development language, Dart, is too! This allows for greater support to developers and freedom of growth for both (System and Language). But also, it gives the freedom to develop with any language that the developer finds suitable.</p>
<blockquote>
<p>Fuchsia to fix, it’s not to kill</p>
</blockquote>
<p>Fuchsia is not the “Android killer” system. Many limitations that Android had, with Java or JVM, the linux kernel etc, we won’t have with Fuchsia. Another point is that Android’s niche is mobile devices, which initially is not Fuchsia’s focus, and actually there isn’t, until then, a focus, but “focals”: multiple screens, embedded devices, IOT, SmartHome etc.</p>
<h1 id="heading-testing-fuchsia"><strong>Testing Fuchsia</strong></h1>
<p>At the time of writing this article we already have simpler ways to run the system on our machine without having so much work, such as the <a target="_blank" href="https://github.com/dahliaOS/fimage">Fimage</a>.</p>
<p><img src="https://miro.medium.com/v2/resize:fit:700/1*v4NYKgVBHxf4DbiD7C4zbg.jpeg" alt class="image--center mx-auto" /></p>
<p>Fuchsia — Fimage Home Dashboard</p>
<p><img src="https://miro.medium.com/v2/resize:fit:700/1*W6vbTn5xvaNlff7t_6d9OQ.jpeg" alt class="image--center mx-auto" /></p>
<p>Fuchsia — Fimage navigator</p>
<p>Fimage is a lightweight KVM based emulator, AEMU (Android Emulator), Android emulator that comes with Android Studio, and FEMU (Fuchsia Emulator). Developed by the dahliaOS team to allow anyone to run and test Fuchsia on their machine, without the need to download over 200 Gigas of Source Code and spend hours building the system. So if you would like to test the system neat and not go to so much trouble, this is the best option so far. Instructions, documentation and download <a target="_blank" href="https://github.com/dahliaOS/fimage"><strong>here</strong></a>. If you want to have all the build experience and get your hands dirty, just follow the guide on the website <a target="_blank" href="https://medium.com/@allansrc?source=post_page-----8a3b5de2dbe0--------------------------------">fuchsia.dev</a>.</p>
<p>On the other hand, if you want to experience a complete operating system with a more refined UI with a shell and Desktop Environment completely built in Flutter and with a hint of Fuchsia, you can choose to try dahliaOS. The system has both a version with the linux kernel, which allows it to be installed on almost any hardware, <a target="_blank" href="https://docs.dahliaos.io/"><em>and a version with Zircon with very strict compatibility</em> (by now only on FIMAGE</a>)<em>.</em></p>
<p><img src="https://miro.medium.com/v2/resize:fit:700/1*LksO1TfrQVXaDpCaF08UMQ.png" alt class="image--center mx-auto" /></p>
<p>dahliaOS Arquitetura</p>
<p>All download options, instructions and where to find support are in the <a target="_blank" href="http://github.com/dahliaos">dahliaOS</a> Github. Bearing in mind that the system is under development and the team works in its free time on system development, therefore it is not recommended to use the system as a daily driver.</p>
<p><img src="https://miro.medium.com/v2/resize:fit:700/1*YCSzv5j_eWyFDsn7C68Yfw.png" alt class="image--center mx-auto" /></p>
<p>dahliaOS desktop</p>
<p><img src="https://miro.medium.com/v2/resize:fit:700/1*zFXADzm_ylVzBV4cNPDGvg.png" alt class="image--center mx-auto" /></p>
<p>dahliaOS — Apps menu</p>
<h1 id="heading-conclusion"><strong>Conclusion</strong></h1>
<p>If you are a developer and are interested in starting testing development on Fuchsia, there are still some issues. The standard Flutter SDK doesn’t support debugging for the Fuchsia host yet, so it’s necessary to use an SDK available in the Fuchsia Repository. As Fimage you can even debug, but it needs some adjustments, but there is no support by Fimage. Remembering that I’m already producing a guide for Fuchsia devs, like a system tears down, so just keep an eye out here 😉.</p>
<p>Fuchsia has been my bet since I met it in mid 2018. I believe it is a revolutionary system, not because it brings new things, as there are several Opensource systems that have similar characteristics and concepts for some time, but because it brings these concepts and for being in the hands of Google. For those who don’t remember Dart, it started as an experiment, got a web proposal and finally Flutter, and as Flutter grew, the language grew to accompany the development of the Framework.</p>
<p>But I’m not saying that Flutter will drag the development of Fuchsia, but that by having the entire stack of the system in hand, the possibilities are limited by Google itself. Think with me, the system targets multiple user experiences (several platforms), and Flutter is designed for Multiplatform, so we have both layers supported from the same house. (Not counting Google hardware: Nest Hubs, Google TVs, Google Home etc). Of course, everything has its good and bad side, and yes, having everything under your hands can bring several problems, which we can discuss further on the subject.</p>
<p>Well, I hope it was a good read, and I’m available to discuss the subject, opinions, suggestions, anyway. If you’re interested, feel free to follow us on Github and social media, both me and the Fuchsia and dahliaOS team, we have Discord and channels to exchange an idea. Thanks 😁!.</p>
<blockquote>
<p><em>GitHub; Instagram, Twitter, XDA:</em> <a target="_blank" href="http://github.com/allansrc"><strong><em>@allansrc</em></strong></a></p>
</blockquote>
]]></content:encoded></item><item><title><![CDATA[Customizando o terminal do Windows — Como deixar o Terminal Windows Bonito e performático]]></title><description><![CDATA[Uma das ferramentas que está sempre com você como desenvolvedor de software, é o Terminal (ou se preferir, Console). Portanto, podemos usar alguns módulos e extensões para fazer com que ele se torne mais inteligente e nos ajude ainda mais em produtiv...]]></description><link>https://blog.allansrc.com.br/customizando-o-terminal-do-windows-como-deixar-o-terminal-windows-bonito-e-performatico</link><guid isPermaLink="true">https://blog.allansrc.com.br/customizando-o-terminal-do-windows-como-deixar-o-terminal-windows-bonito-e-performatico</guid><category><![CDATA[Productivity]]></category><category><![CDATA[Programming Tips]]></category><category><![CDATA[terminal]]></category><category><![CDATA[Windows]]></category><dc:creator><![CDATA[Allan Ramos]]></dc:creator><pubDate>Mon, 22 Jan 2024 14:00:16 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1705932117699/31cfe2ee-cbb2-4e99-a6a6-74e05fdf1fe0.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Uma das ferramentas que está sempre com você como desenvolvedor de software, é o Terminal (ou se preferir, Console). Portanto, podemos usar alguns módulos e extensões para fazer com que ele se torne mais inteligente e nos ajude ainda mais em produtividade no dia-a-dia.</p>
<p><img src="https://miro.medium.com/v2/resize:fit:700/1*rRJjQ1rC8K7A8kVWt8LkEw.png" alt class="image--center mx-auto" /></p>
<h2 id="heading-first-things-first"><strong>First things First</strong></h2>
<p>Primeiramente o mais importante. Nesse post irei mostrar como configurar o básico do terminal e como deixar ele pronto para otimizar no dia-a-dia de dev. Mas se você quiser também dá aquele boost em sua máquina (ou instancia) Linux ou MacOS, aqui <a target="_blank" href="https://medium.com/@allansrc/boosting-up-your-terminal-for-development-productivity-9bc07404ef1e">neste outro artigo</a> mostro como fazer nessas plataformas :)</p>
<h3 id="heading-o-que-terei-no-final-desse-guia"><strong>O que terei no final desse “Guia”?</strong></h3>
<p>Eu escolhi alguns módulos que ajudam no trabalho, por exemplo:<br />- Preenchimento automático de comando em linha;<br />- Sugestões comuns/mais usados;<br />- Indicadores de Git, Path e Projeto;<br />- E destaque coloridos para ajuda na semântica do comando (Temas!).</p>
<p><img src="https://miro.medium.com/v2/resize:fit:700/1*Vw1ntD5Vcu-K19sKAlJwQQ.png" alt class="image--center mx-auto" /></p>
<h3 id="heading-ferramentas"><strong>Ferramentas</strong></h3>
<p>Para podermos ter esses módulos auxiliares, vamos precisar de está usando o <strong>OhMyPosh</strong> no app <strong>Windows terminal</strong>, que pode ser baixado na Microsoft Store, pelo gerenciador de pacote da microsoft <a target="_blank" href="https://learn.microsoft.com/pt-br/windows/package-manager/winget/"><strong>winget</strong></a>, ou <a target="_blank" href="https://scoop.sh/"><strong>scoop</strong></a><em>(que é o ‘homebrew’ para Windows)</em> e até diretamente pelo powershel (manual)<em>.</em></p>
<p>Caso o Windows Terminal já não esteja instalado na sua máquina, instale usando uma das opções que preferir, mas recomentdo usar o app da loja Microsoft: <a target="_blank" href="https://www.microsoft.com/store/productId/9N0DX20HK701?ocid=pdpshare"><strong>link</strong></a>. Em sequida instale o OhMyPosh usando uma das opções abaixo. Copie e cole o comando no seu terminal (Windows Terminal / PowerShell):<br />- <strong>winget</strong>::</p>
<pre><code class="lang-plaintext">winget install JanDeDobbeleer.OhMyPosh -s winget
</code></pre>
<p>- <strong>scoop:</strong></p>
<pre><code class="lang-plaintext">scoop install https://github.com/JanDeDobbeleer/oh-my=posh/releases/lastest/download/oh-my-posh.json
</code></pre>
<p>- <strong>manual:</strong></p>
<pre><code class="lang-plaintext">Set-ExecutionPolicy Bypass -Scope Process -Force; Invoke-Expression ((New-Object System.Net.WebClient).DownloadString('https://ohmyposh.dev/install.ps1'))
</code></pre>
<p>Feito isso, reinicie o terminal, e terá instalado o ohmyposh e o seu pacote de temas. Caso deseje ver o caminho que foi feito a instalação, execute o seguinte comando:</p>
<pre><code class="lang-plaintext">(Get-Command oh-my-posh).Source
</code></pre>
<h3 id="heading-temas-e-fontes"><strong>Temas e Fontes</strong></h3>
<p>O próximo passo agora, é fazer a instalação da Fonte. Assim poderemos ter os ícons de branching do Git, <em>font-ligatures</em> etc. Para esse Setup eu escolhi a Fonte <strong>FiraCode</strong> que venho usando há bastante tempo e nunca tive problemas, uso inclusive como fonte pricipal do VSCode.</p>
<p>Para instalar a fonte basta rodar o seguinte comando no terminal e selecionar a fonte desejada com as setas (⬆️/⬇️). Para esse exemplo recomendo descer até achar a fonte <strong>FiraCode Nerd Font</strong>:</p>
<pre><code class="lang-plaintext">oh-my-posh font install
</code></pre>
<p>Após a instalação, vá nas configurações do terminal. Por padrão o atalho <code>ctrl+,</code> abre as configurações, mas caso não funcione, basta clicar no ícone de contexto do terminal e navegar para as configurações e em seguida selecione a opção “Abrir o arquivo JSON” (Imagens abaixo):</p>
<p><img src="https://miro.medium.com/v2/resize:fit:700/1*klTRd6GLvibz6GH_XUe5SQ.png" alt class="image--center mx-auto" /></p>
<p><img src="https://miro.medium.com/v2/resize:fit:700/1*eIjUo9aubgDWvd8YpF-6gw.png" alt class="image--center mx-auto" /></p>
<p>Feito isso, no arquivo aberto, localize a key <strong>profile/defaults</strong> e deixe a key <strong>font</strong> com o valor como no exemlo abaixo. Caso não exista a key fonte, adicione-a.</p>
<pre><code class="lang-plaintext">{
    "profiles":
    {
        "defaults":
        {
            "font": 
            {
                "face": "FiraCode Nerd Font"
            }
        }
    }
}
</code></pre>
<p>Para adicionar suporte às fontes no terminal integrado do VSCode, você só precisa abrir o vscode, precisone F1 para abrir a command pallet e digitar <strong>“settings json”</strong> e selecionar a opção para abrir as configurações do vscode “Open User Settings (JSON)”. Localize e altere o campo <strong>terminal.integrated.fontFamily</strong> como na imagem abaixo, salve e reinicie o vscode, e tudo certo!</p>
<p><img src="https://miro.medium.com/v2/resize:fit:700/1*vs944sEjTA46Ofl_2_YPbQ.png" alt class="image--center mx-auto" /></p>
<p>Agora partimos para os temas. Edite seu script de profile do PowerShell. Você pode encontrar-lo na variável <strong>$PROFILE</strong> do PowerShell. Por exemplo, usando o VSCode:<br /><code>code $PROFILE</code><br />Caso o comando gere algum erro, ou o arquivo ainda não existir crie o arquivo e tente novamente.<br />Para criar o arquivo execute o seguinte comando:</p>
<pre><code class="lang-plaintext">New-Item -Path $PROFILE -Type File -Force
</code></pre>
<p>Ao conseguir abrir o arquivo, adicione o sequinte código e salve:</p>
<pre><code class="lang-plaintext">oh-my-posh init pwsh | Invoke-Expression
</code></pre>
<p>Depois de adicionado, recarregue seu PROFILE para que as alterações tenham efeito, ou reinicie o terminal. Agora você notará que o terminal já está diferente.</p>
<p><img src="https://miro.medium.com/v2/resize:fit:700/1*8rK_qHDBDx3wWETNSOCFXw.png" alt class="image--center mx-auto" /></p>
<p>terminal with ohmyposh prompt</p>
<h2 id="heading-toques-finais"><strong>Toques finais</strong></h2>
<p>Agora já temos o teminal com quase tudo pronto. Caso queira explorar a diversidade de temas basta rodar o comando <code>Get-PoshThemes</code> que será listado os temas e o comando para o selecionar como default.</p>
<p><img src="https://miro.medium.com/v2/resize:fit:700/1*Lm9V1srpYyO1xp35qrpjUA.png" alt class="image--center mx-auto" /></p>
<p>Por exemplo, no meu caso o comando exemplo foi:</p>
<pre><code class="lang-plaintext">oh-my-posh init pwsh --config 'C:\Users\allan\AppData\Local\Programs\oh-my-posh\themes\jandedobbeleer.omp.json' | Invoke-Expression
</code></pre>
<p>Caso eu queira mudar o tema para o “zash” basta eu substituir o path do arquivo final, por exemplo: de <code>..\themes\jandedobbeler.omp.json</code> por <code>.\themes\zash.omp.json</code></p>
<p>Para concluir, vamos abrir o arquivo $PROFILE novamente e colar o código abaixo, após isso, salve e reinicie o terminal:</p>
<pre><code class="lang-plaintext">Set-PSReadLineOption -PredictionSource History
Set-PSReadLineOption -HistorySearchCursorMovesToEnd
Set-PSReadLineKeyHandler -Key UpArrow -Function HistorySearchBackward
Set-PSReadLineKeyHandler -Key DownArrow -Function HistorySearchForward
</code></pre>
<p>Isso adicionará o <strong>Predictive IntelliSense</strong> que é implementado no mecanismo do PowerShell e apresentado por meio do módulo PSReadLine e fornece previsão baseada em histórico no <strong>InlineView</strong>.</p>
<p>Caso você esteja vendo algum erro no seu terminal ao abrir ou ao tentar execultar alguns dos comando desse guia parecido com o retorno abaixo, você precisará atualizar seu módulo PSReadline:</p>
<blockquote>
<p><strong><em>Get-PSReadLineKeyHandler : A parameter cannot be found that matches parameter name ‘Key’</em></strong></p>
</blockquote>
<p>Para atualizar basta seguir os passos de instalação/update da documentação oficial do PSReadLine disponível <a target="_blank" href="https://github.com/PowerShell/PSReadLine#install-from-powershellgallery-preferred">aqui</a>.</p>
<p>E <em>Voilà</em>! O terminal está pronto para uso e otimizado com complementos para ferramentas comuns como git, Node, comandos baseados no histórico de execução, realce de sintaxe com indicador de comando ausente e assim por diante!!</p>
<p><img src="https://miro.medium.com/v2/resize:fit:700/1*Vw1ntD5Vcu-K19sKAlJwQQ.png" alt /></p>
<p>Espero que você goste e que essas dicas economizem alguns segundos por dia e horas por semana ou por ano em seu trabalho.<br />Até mais, e Até!</p>
<p><a target="_blank" href="https://hashnode.com/n/2articles1week"><strong>#2Articles1Week</strong></a></p>
]]></content:encoded></item><item><title><![CDATA[Breve Apresentação ao Fuchsia — FuchsiaOS]]></title><description><![CDATA[Opa pessoal.Para quem ainda não sabe, o Google está em produção de um novo Sistema Operacional, o FuchsiaOS.
Anunciado em 2016, o FuchsiaOS não se trata de um sucessor do Android, pelo menos não é o seu intuito. Na própria documentação oficial, a equ...]]></description><link>https://blog.allansrc.com.br/breve-apresentacao-ao-fuchsia-fuchsiaos</link><guid isPermaLink="true">https://blog.allansrc.com.br/breve-apresentacao-ao-fuchsia-fuchsiaos</guid><category><![CDATA[Flutter]]></category><category><![CDATA[Google]]></category><category><![CDATA[Rust]]></category><category><![CDATA[Open Source]]></category><category><![CDATA[fuchsia]]></category><dc:creator><![CDATA[Allan Ramos]]></dc:creator><pubDate>Mon, 22 Jan 2024 13:51:28 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1705931293408/9cc6fe32-11ea-4959-aac0-999b1e2bb999.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Opa pessoal.<br />Para quem ainda não sabe, o Google está em produção de um novo Sistema Operacional, o FuchsiaOS.</p>
<p>Anunciado em 2016, o FuchsiaOS não se trata de um sucessor do Android, pelo menos não é o seu intuito. Na própria documentação oficial, a equipe do fuchsiaOS descreve que este não terá seu foco em uma “Experiência de Usuário”, mas sim em múltiplas experiências.</p>
<p>Isso implica que mais que o android já pode ser, o fuchsiaOS será mais responsivo e multiplataforma, “mirando” em diversas plataformas como: Smartphones, TVs, HomeCasts, Speeches, Desktops, Watches entre outros.</p>
<p>Desde o último artigo que escrevi sobre o sistema, há dois anos, muitas coisas mudaram, mas vamos ver tudo isso nesse artigo e mais algumas outras novidades.</p>
<h3 id="heading-sistema-modular"><strong>Sistema Modular</strong></h3>
<p>O FuchsiaOS, agora somente Fuchsia, foi projetado para ser um sistema inteiramente modular, permitindo que suas bibliotecas e aplicações possam ser inteiramente removidas, atualizadas e adicionadas sem que o sistema sofra com isso.</p>
<p>Isso além de garantir integridade do sistema, permite ainda que este seja mais seguro, por exemplo, atualização de <em>patches</em> de segurança podem ser facilmente obtidos com um simples pacote em uma “FuchsiaStore” sem comprometer dados do usuário ou outras aplicações.</p>
<h3 id="heading-tecnologias"><strong>Tecnologias</strong></h3>
<p>Das tecnologias usadas no desenvolvimento do Fuchsia estão, obviamente o C e C++, Rust, GO, e Dart. Ao desenvolver para o SO o desenvolvedor poderá escolher a linguagem usada no backend, já que por ser um sistema inteiramente modular o Fuchsia não terá nenhum problema com relação a isso.</p>
<p>Suas aplicações frontend nativas são desenvolvidas em Dart/Flutter, o que facilitará em muito a migração da plataforma Android para Fuchsia, e ainda sim em adoção de mercado, já que Flutter é uma das tecnologias mas bem sucedida dos últimos anos!</p>
<p>Um ponto interessante a se notar é que, hoje é totalmente viável desenvolver apps usando Dart/Flutter e linguagens low-level — <em>linguagens que se comunicam diretamente com o sistema operacional, como C/C++ e Rust</em> — através do uso da biblioteca Dart:ffi, e que inclusive já escrevi um artigo sobre <a target="_blank" href="http://github.com/allansrc/frustter">a integração de Rust com Flutter</a> e recomendo a leitura.</p>
<h3 id="heading-arquitetura"><strong>Arquitetura</strong></h3>
<p><img src="https://miro.medium.com/v2/resize:fit:700/1*ZDXiQTRB00740DrDrH1VGg.png" alt /></p>
<p>Arquitetura do Fuchsia</p>
<p>O Fuchsia foi projetado para ser um sistema seguro, altamente atualizável, modular e performático. Isso já discutimos no ultimo artigo, mas dessa vez temos novidades, o sistema agora conta com mais princípios arquiteturais para guiar seu desenvolvimento e design.</p>
<p>O sistema não se trata mais de um "Experimento", como era tratado anteriormente, e sim de um sistema à nível de produção. À exemplo dos novos <strong>Google Nest Hub</strong> que já vem com uma versão do Fuchsia rodando nativamente.</p>
<h3 id="heading-seguro"><strong>Seguro</strong></h3>
<p>Isso significa que todo software executado no Fuchsia incluindo aplicativos e componentes do próprio sistema, seguem o princípio de menor privilégio (<a target="_blank" href="https://www.cisa.gov/uscert/bsi/articles/knowledge/principles/least-privilege#:~:text=The%20Principle%20of%20Least%20Privilege%20states%20that%20a%20subject%20should,control%20the%20assignment%20of%20rights."><em>principle of least privilege</em></a>) ou privilégio mínimo, que de forma resumida, exige que em uma determinada camada de abstração de ambiente do sistema operacional, cada módulo — como um processo, um usuário, ou um aplicativo — seja capaz de acessar apenas as informações e recursos necessários para sua execução.</p>
<h3 id="heading-atualizavel"><strong>Atualizável</strong></h3>
<p>O altamente atualizável, implica que os pacotes Fuchsia são projetados para serem atualizados de forma independente ou até mesmo <em>Instant Delivery</em>, ou <em>EnPhemery</em>, o que significa que os pacotes são projetados para serem desacoplados, e assim ir e vir do dispositivo conforme necessário, e o sistema se mantém sempre atualizado.</p>
<h3 id="heading-modularinclusivo"><strong>Modular/Inclusivo</strong></h3>
<p>Modular quer dizer que o sistema é independente de linguagem. Uma vez que projetado para ser extensível e permitir a integração de software escrito em várias linguagens e <em>runtimes,</em> você pode tanto desenvolver usando C, C++, Rust, Go, Python, quanto Dart/Flutter.</p>
<h3 id="heading-fundamentos-do-kernel"><strong>Fundamentos do Kernel</strong></h3>
<p>O core do sistema é o Zircon, que é o kernel mais um conjunto de bibliotecas responsáveis por gerenciar o <em>startup</em> e <em>bootstrapping</em> do sistema. Todos os componentes do sistema fora do kernel são implementados, no que chamamos de <em>userspaces</em> e totalmente isolados das camadas críticas do sistema, reforçando o princípio de <em>least privilege,</em> como já falamos aqui. Assim até mesmo <em>Drivers</em> de dispositivos são isolados nas 'áreas do usuário'.</p>
<p>O Zircon trás a arquitetura e muitos dos conceitos que conhecemos através dos Microkernels, o que <strong>não</strong> faz com que o kernel seja sem funcionalidades completas e compatibilidade de hardware baixa. Muito pelo contrário, essa arquitetura de micro kernel possibilita ao Fuchsia minimize ao máximo a quantidade de código confiável, limitando à <strong><em>Memory management</em></strong>, <strong><em>Scheduling*</em></strong>, e<em> **</em>IPC<em>** </em>(Inter-process communication).*</p>
<p><img src="https://miro.medium.com/v2/resize:fit:700/1*WINlcCS2P2_W8X7efnlFVw.png" alt class="image--center mx-auto" /></p>
<p>Comparação entre um kernel convencional e o Zircon Kernel</p>
<p>Então temos um possível problema: se todo o <em>core</em> do sistema é isolado das <em>áreas de usuário (<strong><strong>userspaces</strong></strong>),</em> como podemos desenvolver apps que precisam de informações ou até "conversar" com o sistema?</p>
<p>Para que nosso código possa realizar interações como: Gerenciamento manual de memória, <em>tasks</em> ou processos do sistema, IPC, device I/O etc; podemos usar chamadas do sistema (<em>System calls</em>). Esses processos que executam as chamadas do sistema, são executados pela biblioteca vDSO (<em>virtual Dynamic Shared Object —</em> <a target="_blank" href="http://github.com/allansrc/frustter">libzircon.so</a>) que fazem a leitura de uma imagem gerada do kernel, invés de fazer a leitura direta dos arquivos no kernel. Durante a leitura dessa imagem, o código de <em>userspace</em> recebe apenas os privilégios necessários, — o como é gerenciado esses privilégios podemos discutir em um outro artigo.</p>
<p>Mas por que eu preciso saber disso?</p>
<p>A resposta mais curta é: você não precisa.</p>
<p>Mas vale lembrar que, se você é desenvolvedor, uma grande maioria de apps que você possa precisar desenvolver para o Fuchsia, provavelmente você irá usar <em>Events, Streams, Channel, Socket etc.</em> E tudo isso faz parte da <em>Inter-Process Communication (IPC),</em> então se esse é seu caso, aqui está onde você deve começar os estudos para desenvolver para Fuchsia 😉.</p>
<blockquote>
<p><em>(Guia Fuchsia para devs</em> <a target="_blank" href="http://github.com/allansrc/guide_to_fuchsia"><strong><em>em breve</em></strong></a><em>)</em></p>
</blockquote>
<h3 id="heading-o-porque-do-fuchsia-ser-tao-interessante"><strong>O porquê do Fuchsia ser tão interessante</strong></h3>
<p>Vale lembrar que o Fuchsia não se trata de um sistema baseado em Linux. Absolutamente ao contrário do Android que roda em cima da Kernel linux, o Fuchsia é totalmente independente, todo o sistema e kernel é desenvolvido pela Google, e totalmente opensource, você mesmo pode submeter Pull Requests para o sistema ou até trabalhar paralelo a ele, criando um novo sistema à seu bem prazer ou necessidade. Um bom exemplo disso é o <a target="_blank" href="http://github.com/dahliaos"><strong>dahliaOS</strong></a> que é uma distribuição Zircon/Linux desenvolvida baseada no Fuchsia para desktop, a qual inclusive faço parte do time! Recomendo ver o vídeo do <a target="_blank" href="https://www.youtube.com/watch?v=87GgOynERW0"><strong>Dio Linux</strong></a> que fala um pouco do sistema, vale a pena conferir!</p>
<p>E o que mais acho interessante no sistema é que o seu ecossistema é livre. O que quero dizer é, que ao mesmo tempo em que o sistema completo é desenvolvido pela Google, sua principal linguagem de desenvolvimento frontend, Dart, também é! Assim possibilita um maior suporte aos desenvolvedores e liberdade de crescimento de ambos (Sistema e linguagem). Mas também, dá a liberdade de desenvolver com qualquer linguagem que se ache adequado por parte do desenvolvedor.</p>
<blockquote>
<p><em>Fuchsia to fix, it's not to kill</em></p>
</blockquote>
<p>O Fuchsia não é o sistema "matador de Android". Muitas limitações que o Android teve, com o Java ou JVM, o kernel linux etc, não vamos ter com o Fuchsia. Outro ponto é que o nicho do Android é de dispositivos móveis, o qual inicialmente não é o foco do Fuchsia, e na verdade não há, até então, um foco, mais sim "focos": múltiplas telas, dispositivos embarcados, IOT, <em>SmartHome</em> etc.</p>
<h3 id="heading-testando-o-fuchsia"><strong>Testando o Fuchsia</strong></h3>
<p>No momento em que escrevo esse artigo já temos meios mais simples de rodar o sistema em nossa máquina sem ter tanto trabalho, como por exemplo o <a target="_blank" href="https://github.com/dahliaOS/fimage">Fimage</a>.</p>
<p><img src="https://miro.medium.com/v2/resize:fit:700/1*v4NYKgVBHxf4DbiD7C4zbg.jpeg" alt class="image--center mx-auto" /></p>
<p><img src="https://miro.medium.com/v2/resize:fit:700/1*W6vbTn5xvaNlff7t_6d9OQ.jpeg" alt class="image--center mx-auto" /></p>
<p>O Fimage é um emulador leve baseado no KVM, AEMU (<em>Android Emulator</em>), emulador Android que acompanha o Android Studio, e o FEMU (<em>Fuchsia Emulator</em>). Desenvolvido pelo time do dahliaOS para possibilitar que qualquer um possa rodar e testar o Fuchsia em sua máquina, sem a necessidade de baixar mais de 200 Gigas de Código fonte e gastar horas buildando o sistema. Então se você gostaria de testar o sistema puro e sem ter tanto trabalho para isso, essa é a melhor opção até o momento. Instruções, documentação e download <a target="_blank" href="https://github.com/dahliaOS/fimage"><strong>aqui</strong></a>. Caso queira ter toda experiencia de <em>build</em> e por as mãos na massa, é só seguir o guia no site <a target="_blank" href="http://github.com/allansrc/frustter">fuchsia.dev</a>.</p>
<p>Por outro lado, se você quer ter a experiencia de um sistema operacional completo com UI mais refinada com <em>shell</em> e <em>Desktop Environment</em> completamente construída em Flutter e com uma pitada de Fuchsia, você pode optar por testar o dahliaOS. O sistema tem tanto uma versão com o kernel linux, que possibilita ser instalado em praticamente qualquer hardware, tanto uma versão com o Zircon com compatibilidade bem restrita.</p>
<p><img src="https://miro.medium.com/v2/resize:fit:700/1*LksO1TfrQVXaDpCaF08UMQ.png" alt class="image--center mx-auto" /></p>
<p>Todas opções de download, instruções e onde encontrar suporte está no G<a target="_blank" href="http://github.com/dahliaos">itHub do dahliaOS</a>. Lembrando que o sistema está em desenvolvimento e o time trabalha em seu tempo livre no desenvolvimento do sistema, logo não é recomendado o uso do sistema como <em>daily driver</em>.</p>
<p><img src="https://miro.medium.com/v2/resize:fit:700/1*YCSzv5j_eWyFDsn7C68Yfw.png" alt class="image--center mx-auto" /></p>
<p><img src="https://miro.medium.com/v2/resize:fit:700/1*zFXADzm_ylVzBV4cNPDGvg.png" alt class="image--center mx-auto" /></p>
<h3 id="heading-consideracoes"><strong>Considerações</strong></h3>
<p>Se você é desenvolvedor e está interessado a começar a testar desenvolvimento no Fuchsia, ainda há alguns problemas. O SDK padrão do Flutter não suporta debug para o host do Fuchsia ainda, daí é necessário usar um SDK disponibilizado no Repositório Fuchsia. Como o Fimage até dá para debugar, mas necessita de alguns ajustes, mas não há suporte por parte do Fimage. Lembrando que já estou produzindo um guia para devs Fuchsia, como um <em>tears down</em> do sistema, então é só ficar de olho por aqui 😉.</p>
<p>O Fuchsia já minha aposta desde que o conheci em meados de 2018. Acredito ser um sistema revolucionário, não por trazer coisas novas, pois há varios sistemas Opensource que trazem características e conceitos semelhantes e há algum tempo, mas por trazer esses conceitos e por estar nas mãos da Google. Para quem não lembra o Dart começou como um experimento, ganhou uma proposta web e enfim o Flutter, e conforme o Flutter crescia, a linguagem crescia para acompanhar o desenvolvimento do Framework.</p>
<p>Mas não estou dizendo que o Flutter irá arrastar o desenvolvimento do Fuchsia, mas que por ter toda <em>stack</em> do sistema em mãos, as possibilidades são delimitadas pela própria Google. Pensa comigo, o sistema mira em <em>multiplas</em> experiencias de usuário (diversas plataformas), e o Flutter é desenhado para Multiplataforma, logo temos as duas camadas com suporte da mesma casa. (isso sem contar com os <em>hardwares</em> Google: Nest Hubs, Google TVs, Google Home etc). Claro que tudo tem seu lado bom e ruim, e sim, ter tudo de baixo de suas mãos pode trazer diversos problemas, que podemos discutir mais sobre o assunto.</p>
<p>Bom, espero que tenha sido uma boa leitura, e estou à disposição para discutir sobre o assunto, opniões, sugestões, enfim. Se te interessou, sinta-se à vontade de nos seguir no Github e nas redes sociais, tanto eu quanto o time Fuchsia e dahliaOS, temos Discord e canais para trocar uma ideia. Valeu 😁!</p>
<blockquote>
<p><em>Obs.: links para os repositórios, documentações, referências etc estão em destaque dispostos pelo artigo.</em></p>
<p><em>GitHub; Instagram, Twitter, XDA:</em> <a target="_blank" href="http://github.com/allansrc"><strong><em>@allansrc</em></strong></a></p>
</blockquote>
]]></content:encoded></item><item><title><![CDATA[IOS: Hackintosh e o “Trilema” do desenvolvedor multiplataforma]]></title><description><![CDATA[Ambiente de desenvolvimento (deploy) para plataformas Apple, é sem dúvida um dos arqui-inimigos do desenvolvedor multiplataforma: já que o principal e indispensável requisito para realizar deploy para Apples, é realizar os builds em máquinas Apple (o...]]></description><link>https://blog.allansrc.com.br/ios-hackintosh-e-o-trilema-do-desenvolvedor-multiplataforma</link><guid isPermaLink="true">https://blog.allansrc.com.br/ios-hackintosh-e-o-trilema-do-desenvolvedor-multiplataforma</guid><category><![CDATA[hacking]]></category><category><![CDATA[iOS]]></category><category><![CDATA[Developer]]></category><category><![CDATA[Cross Platform App Development. ]]></category><dc:creator><![CDATA[Allan Ramos]]></dc:creator><pubDate>Mon, 22 Jan 2024 13:46:13 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1705930636228/bcc6e7fe-fefe-4eda-965c-c18c7eefc6be.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Ambiente de desenvolvimento (<em>deploy</em>) para plataformas Apple, é sem dúvida um dos arqui-inimigos do desenvolvedor multiplataforma: já que o principal e indispensável requisito para realizar <em>deploy</em> para Apples, é realizar os <em>build</em>s em máquinas Apple (ou Mac OS propriamente dito).</p>
<p>Daí que vem o título para esse artigo:</p>
<h3 id="heading-devo-comprar-um-mac-usado-ou-novo-usar-cloud-maquina-virtual-ou-fazer-um-hackintosh"><em>Devo comprar um Mac usado ou novo¹, usar cloud², máquina virtual³ ou fazer um Hackintosh?</em></h3>
<p>Nesse artigo venho trazer a minha visão como usuário de Hackintosh há pelo menos 6 anos, e de desenvolvedor multiplataforma (Flutter), além de um pre guia para o build de <em>Hackintoshes</em> (Plataformas AMD e Intel) voltado especialmente para o público Dev. Para detalhes de build, bem especificado, trarei uma Parte 2 para esse Artigo, então não se preocupe, e vamos nos ater na discussão principal nessa Parte 1.</p>
<h1 id="heading-first-things-first"><strong>First things first</strong></h1>
<p>Primeiramente vamos falar sobre o que usar das “ferramentas” disponíveis para builds iOS, mas se o que lhe interessa é o guia para o Hackintosh, pode avançar para o tópico específico (Tópico 4).</p>
<h3 id="heading-1-comprar-um-mac"><strong>1. Comprar um Mac</strong></h3>
<p>Para começar, não há mistério, se no seu orçamento cabe comprar um Mac, seja ele um Mac Mini ou MacBook, comprar um Mac é o caminho mais fácil, <em>plugin-n-play</em> (ou <em>pay-n-play</em>).</p>
<p>Mas que Mac comprar, novo ou usado?</p>
<p><strong>1.1 Mac usado</strong></p>
<p>Se você pretende usar por alguns anos seu Mac, você deve comprar no mínimo um late 2016 — Lembrando que você deve ter o Mac OS atualizado na última versão lançada pela Apple para poder fazer seus builds, e um Mac relativamente antigo não vai suportar updates.</p>
<ul>
<li><p>A desvantagem de ter um Mac com até 4 anos é que para manter o sistema atualizado, possivelmente em algum momento será necessário recorrer à métodos não oficiais para isso.</p>
</li>
<li><p>A vantagem é que você poderá adquirir uma máquina Apple por um preço razoavelmente inferior ao novo (óbvio) e com alguns ajustes (gambiarras) conseguirá trabalhar com ele por mais alguns anos.</p>
</li>
</ul>
<p><strong>1.2 Mac novo</strong></p>
<ul>
<li>Das vantagens de um novo é que terá bastante tempo de suporte ao sistema, sem precisar se preocupar com procedimentos manuais e de terceiros por um bom tempo.</li>
</ul>
<p><strong>1.3 Mac Mini ou MacBook?</strong></p>
<p>Nesse caso não há muita diferença, vai depender do seu gosto e necessidade: se precisa de mobilidade, pega um MacBook, se não, o Mac mini também é uma boa opção.</p>
<p>Se esse não é o seu caso, alternativas como cloud e virtualização pode ser uma solução.</p>
<h3 id="heading-2-mac-cloud"><strong>2. Mac Cloud</strong></h3>
<p>Há várias plataformas que oferecem o serviço de build in cloud (iOS CI/CD). São exemplos de boas plataformas: CodeMagic, MacinCloud entre várias outras. Porém o uso dessas ferramentas custam alguns dólares (que vai acarretar em custo ao cliente, claro). MacinClound por exemplo tem um plano que custa 1$ por hora por um bom <em>setup,</em> que pode ser customizado como você preferir ou necessitar.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1705930804666/dec5d708-5c46-4ed0-80f0-e0ce0c5ef3e2.webp" alt class="image--center mx-auto" /></p>
<p>Codemagic apresenta um modelo de negócio um pouco diferente, no qual você pode usar seus serviços gratuitamente, com alguns limites, e é altamente recomendável para aprendizado. Os planos pagos também são muito bons e se torna uma ótima opção para você e seus clientes.</p>
<p>Dos pontos negativos, vale ressaltar que você estará usando uma VM remotamente, que vai impactar na fluidez e responsividade de uso do Sistema, mesmo nos melhores planos (ambos serviços) o <em>input lag</em> é bem alto, isso devido ao fato de se tratar de uma conexão remota etc., e pode aumentar dependendo da <em>velocidade</em> da sua internet.</p>
<h3 id="heading-3-maquina-virtual-local"><strong>3. Máquina Virtual Local</strong></h3>
<p>Uma solução um pouco “marginal” (que beira as margens dos termos de uso do Mac OS X), é usar Virtualização Local.</p>
<p>Você poderá optar por usar soluções como VBox ou VM Ware com imagens customizadas do Mac OS, ou outras baseadas no KVM e QEMU como SOUSUMI (bem populares em ambientes Linux), e até mesmo Docker!</p>
<p>Se você usa WSL a alternativa do Docker já é possível. Eu mesmo dei meus <em>10 cents</em> no projeto <a target="_blank" href="https://github.com/sickcodes/Docker-OSX">Docker-OSX</a>. Todo o procedimento para poder usar a solução tanto no Windows 10 quanto Windows 11 está documentado.</p>
<p>A desvantagem nesse ponto para todas opções dadas aqui, é que você deve ter no mínimo um hardware <em>mid-end</em> para poder obter um desempenho razoável: Memória suficiente para suprir a necessidade do SEU sistema e do Virtualizado, e alguns núcleos para o mesmo.</p>
<h3 id="heading-4-hackintosh"><strong>4. Hackintosh</strong></h3>
<p>Finalmente a solução mais “marginal”, beirando demasiadamente os termos de uso do Mac OS. Mas não se desespere, você pode checar o <a target="_blank" href="https://www.apple.com/legal/sla/">SLA</a>(<em>Software License Agreements</em>) da Apple para seus Sistemas Operacionais e decidir se segue essa solução — ou “só vai” — , mas desde que você tenha em mãos uma licença do <a target="_blank" href="https://www.apple.com/br/shop/product/D6106Z/A/os-x-lion">OS X Lion</a>, que vai custar cerca de 60 R$, poderá usar o Mac OS X como queira.</p>
<h3 id="heading-41-tracando-o-perfil-dev"><strong>4.1 Traçando o perfil Dev</strong></h3>
<p>Antes de seguirmos vamos definir qual tipo de usuário você é, para que assim esse guia seja o mais útil possível. Para isso vamos fazer algumas perguntas que dará qual caminho seguir no seu build Hackintosh.</p>
<p>Primeiramente, você está procurando montar um <em>setup</em> especialmente para Hackintosh[1], ou fazer na sua máquina atual e de preferencia sem precisar alterar/adicionar componentes[2] ?</p>
<p>Se sua resposta é a opção [2] basta pular para a seção <strong>4.1.2</strong>, caso contrário vamos para as próximas perguntas na seção <strong>4.1.1</strong>.</p>
<p><strong>4.1.1 Setup build</strong></p>
<p>Você já decidiu em qual plataforma irá construir seu Hackintosh (Intel / AMD)? Se sim, pule para a seção <strong>Intel</strong> na parte 2 desse artigo caso sua plataforma seja Intel, e <strong>AMD</strong> para plataforma AMD.</p>
<p>Escolha da plataforma:</p>
<p>[1]: Você precisa indispensavelmente da tecnologia HAXM?</p>
<p>Se sim, vai de Intel. Só pula para <strong>4.1.2</strong>, que o resto não importa mais para você! (😂😂😂) <em>detalhes em</em> <strong><em>4.1.1.1</em></strong></p>
<p>[2]: Você é o tipo de Dev que prefere <em>Setup Wizards</em> invés de CLIs ? Evita ao máximo precisar usar terminal ? Não liga para ter/manter o controle sobre sua máquina (incluindo desempenho e performance) ? e informações como CPU Cache, CAS-L não fazem diferença para você ?</p>
<p>Se vc respondeu “Sim” para pelo menos duas das perguntas acima [2], ambas as plataformas lhe fazem sentido. Mas se respondeu “Não” para pelo menos três delas, eu indicaria a plataforma AMD!</p>
<p><strong>4.1.1.1 Por que Intel?</strong></p>
<p>A tecnologia HAXM é exclusiva da Intel, então se algum software que você utiliza usa exclusivamente o HAXM para virtualização, então você está preso à Intel.</p>
<p>Um dos Softwares que usa exclusivamente o HAXM (no Mac OS pelo menos), é o <strong>Android Studio</strong>. Por ele não esperar por um processador AMD nos Macs obviamente não incluiu o suporte à outras tecnologias de virtualização no seu AVD — Android Virtual Device. Porém se você somente irá usar o Android Studio com HAXM, há outras formas de virtualizar Dispositivos Android sem usar o HAXM. Algumas delas é usar o KVM, QEMU ou até mesmo o AEMU (Android Emulator — Nativo do Android SDK). Outros emuladores também funcionam perfeitamente, como o caso do Genymotion e BluStacks.</p>
<p>Além do HAXM, alguns dos processadores Intel contam com GPU integrada (APU), o que conta muito no bolso no atual momento de elevados preços de GPUs dedicadas. Se por um lado é necessário ter uma GPU AMD para hackintoshes com gráficos dedicados, por outro os gráficos integrados AMD podem causar alguma dor de cabeça para poder funcionar devidamente (ou não funcionar).</p>
<p>Assim concluímos que: se você está montando um Hackintosh sem uma gpu dedicada, por exemplo, um laptop ou desktop com APU, e/ou depende do HAXM para trabalho, e se você não liga para manter o controle de desempenho e performance do seu hack, você deve seguir com Intel.</p>
<p><strong>4.1.1.2 Por que AMD?</strong></p>
<p>Por incrível que pareça e indo contrário ao que o <em>senso comum</em> dita, AMD é a plataforma mais fácil e rápida para fazer Hackintosh em Desktops.</p>
<p><em>É importante ressaltar dois pontos aqui. Primeiro que me refiro à facilidade de hackin em Desktops, pois em Laptops (Notebooks) com processadores AMD não é se quer recomendável TENTAR fazer. Segundo que levando em consideração o Tópico 4.1.1.1</em> <strong><em>APUs AMD</em></strong> <strong><em>não são suportadas*</em></strong>.*</p>
<p>AMD é a plataforma principal para o <a target="_blank" href="https://github.com/acidanthera/OpenCorePkg"><strong>OpenCore</strong></a>, que em minha visão é o melhor <em>Boot Loader</em> para Hackintosh (discutiremos sobre isso logo mais), e por esse motivo, recebe em primeira mão as atualizações de <em>Kext</em>s e <em>Patch</em>es e suporte para versões do MacOS. A fabricante por ser <em>OpenSource friendly,</em> muito de suas tecnologias estão disponíveis meio Open source, e isso facilita a vida dos devs no fornecimento de suporte. Outro motivo que facilita o hackin’ é o compartilhamento de microarquitetura entre as gerações dos AMDs, o que faz com que um patches criados para os zens 1 funcione perfeitamente para os zen 2 e zen 3 (Ryzens), e também tenham retro compatibilidade com as microarquiteturas Bulldozer’s (xxx-FX) e Jaguar’s (Athlons e Sempron’s).</p>
<p>Desde o lançamento dos processadores <strong><em>zen</em>s</strong> a escolha por esses processadores cresceram muito em relação aos de sua concorrente Intel, tanto no meio Gamer quanto no profissional. E é claro que isso devido à suas especificações e tecnologias envolvidas. E tudo isso pode ser usufruído também nos Hackin’:</p>
<blockquote>
<p><em>- Suporte à maiores stock clocks em memórias;<br />- Melhor multi-threading;<br />- Melhor desempenho em par com as GPUs;<br />- Suporte à personalização de desempenho energético da CPU (Cores e Threads);<br />- Melhor ambiente para entusiastas de hardwares/Softwwares;<br />- TDP mais baixo (Sim, AMDs são mais frios hoje em dia);<br />- so on;</em></p>
</blockquote>
<p>Concluindo, com AMD temos o suporte a mais versões do OS X e macOS nativamente, através do OpenCore, e sem procedimentos “dolorosos” que com o Clover e/ou Chameleon temos que implementar. A injeção de <em>Kexts</em> e load de patches, ACPI <em>Tables Mappers</em>, e <em>firmware</em> são “mergeados ” durante o boot, então o diagnostico de erros e problemas são mais evidentes e semânticos, e podem ser facilmente corrigidos. Por fim, você terá mais liberdade e controle para fazer o que bem entender com seus setup, e com exceção do <em>HAXM based softwares</em>, todos os softwares vão funcionar perfeitamente como funcionaria num hackintosh baseado em Intel.</p>
<blockquote>
<p><strong><em>Notas:*</em></strong><br />É importante que você estude e entenda como funciona um hackintosh, assim você poderá faze-lo sem muitas complicações, como também dá o suporte ao seu próprio build para futura atualizações do macOS. Caso contrário você só estará pegando Bootloaders de outras pessoas aleatórias e testando se roda, se rodou bem, se não “next one”.<br />No segundo caso, além de ser um PÉSSIMA prática, que envolve está rodando um software que inicia junto à sua UEFI/BIOS podendo injetar qualquer conteúdo no layer principal de sua máquina (inclusive malicioso), também envolve execução de drivers, extensões de kernel entre outros softwares, diretamente no sistema, que podem sim ter controle do seu ambiente e até mesmo do Apple Store Connect, já que você não faz ideia do que está rolando ali. É importante pensar no pior caso, afinal a depender de seus clientes, o comprometimento desse nível pode lhe gerar grandes dores de cabeça (e caso aconteça, você vai chorar para quem? A Apple? hehehe).<br />Então ao menos, aprenda o mínimo.*</p>
</blockquote>
<p><strong>4.1.2 Hackin on</strong></p>
<p>Primeiramente temos que preparar nosso <em>target:</em> selecionar o HD/SSD que vamos instalar o macOS, separar um pendrive de no mínimo 16GB, um sistema operacional rodando, MacOS, Windows 10, ou Linux, conexão cabeada (Caso você não tenha uma conexão ethernet, um outro guia vai lhe ajudar, linkarei aqui assim que termina-lo), e ter em mãos os nomes dos nossos componentes de hardware (Aida64 e o Google são seus melhores amigos agora). Você DEVE ter os seguintes componentes:</p>
<pre><code class="lang-plaintext">CPU nome e geração
GPUs
HDD/SSD, NVMe e quais configurações: AHCI/RAID/IDE
Modelo de seu Laptop/Desktop (chipset)
Ethernet chipset + WLAN/Bluetooth chipset
</code></pre>
<h2 id="heading-exemplos"><strong>Exemplos</strong></h2>
<pre><code class="lang-plaintext"># Exemplo Desktop 1:
Ryzen 5 3600
RX 580
SSD NVMe AHCI
B450m
Realtek GbE LAN chip (10/100/1000 Mbit) ou (Chipset Realtek 8111e)
sem Wifi/Bluetooth# Exemplo Desktop 2:
i5 10900k
RX 580
SSD M.2 Sata3 AHCI
B460G
Ethernet Intel I219-V (chipset in-same)
Intel® Wireless AC/AX (chipset Intel N 7265)# Exemplo Laptop (Notebook):
i5 1035G1
UHD Graphics 630 
NVIDIA GeForce MX110 (não usa: tem que desativar)
SSD Sata3 AHCI
s145 ideaPad — lenovo
WiFi 1x1 AC (chipset: AC 3165 )
ethernet não tem
</code></pre>
<p>Para conseguir os detalhes do seu hardware em Sistemas baseados no linux basta seguir os seguintes comandos no terminal:</p>
<pre><code class="lang-plaintext"># CPU Model
$ cat /proc/cpuinfo | grep -i “model name”
#GPU Model
$ lspci | grep -i — color “vga\|3d\|2d”
#Chipset Model
$ dmidecode -t baseboard
#Keyboard, Trackpad and Touchscreen Connection Type
$ dmesg | grep -i input
#Audio Codec
$ aplay -l
#Network Controller models
Basic info:
$ lspci | grep -i network
More in-depth info:
$ lshw -class network
#Drive Model
$ lshw -class disk -class storage
</code></pre>
<h3 id="heading-proximos-passos"><strong>Próximos passos</strong></h3>
<p>Para os próximos passos temos: baixar uma imagem oficial do macOS diretamente da Apple Store temos duas opções: baixar por um Mac, ou usar uma ferramenta de linha de Comando chamada <a target="_blank" href="https://github.com/corpnewt/gibMacOS">gibsMac</a>. Com ela conseguimos baixar qualquer versão do sistema e já configurar o OpenCore. E criar o Penboot.</p>
<p>Após fazer o download e criar o Penboot já com o Opencore, devemos criar nossa EFI, que será onde estará todos os patches e drivers necessários para o funcionamento do Hackintosh.<br />Tudo isso e os <em>Cosmetics Steps</em> <strong>será abordado na Parte 2 desse artigo</strong>, que será publicado no dia seguinte à publicação desse (Parte 1). Para nos familiarizarmos com os termos e conceitos, recomendo a leitura do nosso “glossário”, que contém os termos que usaremos e sua definições, disponível <a target="_blank" href="https://github.com/allansrc/hackintosh_guide/blob/main/terminologia.md">aqui</a>.</p>
<h3 id="heading-consideracoes"><strong>Considerações</strong></h3>
<p>A escolha da ferramenta que você usará vai depender exclusivamente de sua necessidade, contexto econômico — se pode investir em um Mac ou em Build Hackintosh, ou pagar um serviço cloud — , e também paciência.</p>
<p>Minhas considerações é que há duas soluções que são as melhores. Estas são: comprar um Mac e o Hackintosh. Considerando usabilidade, estabilidade e suporte. Outra que poderia está nessa lista seria a Virtualização (sousumi / Docker-osx), porém, nesse caso, exige um pouco mais de seu hardware, paciência e conhecimento em manipulação de containers Docker. O hackintosh não fica para trás no quesito “paciência”, mas por outro lado não exige um hardware tão poderoso para um uso aceitável, e por isso é o meu favorito.</p>
<p>Se você tem <em>Dead-lines</em> ou não tem muito tempo para trabalhar em um hackin’, você pode fazer a trilha gradual, partindo inicialmente em Virtualização, e ir construindo seu Hackintosh até que esteja funcional e “estável”. E desde que você saiba o que está fazendo, não haverá sérios problemas com suporte nos próximos 5 anos (no mínimo).</p>
]]></content:encoded></item><item><title><![CDATA[Produtividade e Bem-Estar]]></title><description><![CDATA[Uma mente equilibrada não apenas lida melhor com desafios, mas também contribui para um desempenho mais consistente e inovador.
Fala Pessoal, passando aqui para compartilhar com vocês uma reflexão que, tanto por experiencia própia, quanto por em base...]]></description><link>https://blog.allansrc.com.br/produtividade-e-bem-estar</link><guid isPermaLink="true">https://blog.allansrc.com.br/produtividade-e-bem-estar</guid><category><![CDATA[Productivity]]></category><category><![CDATA[Programming Tips]]></category><dc:creator><![CDATA[Allan Ramos]]></dc:creator><pubDate>Mon, 22 Jan 2024 12:53:23 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1705928459154/ac62a01e-83d5-478b-aa0d-5809888aea85.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3 id="heading-uma-mente-equilibrada-nao-apenas-lida-melhor-com-desafios-mas-tambem-contribui-para-um-desempenho-mais-consistente-e-inovador">Uma mente equilibrada não apenas lida melhor com desafios, mas também contribui para um desempenho mais consistente e inovador.</h3>
<p>Fala Pessoal, passando aqui para compartilhar com vocês uma reflexão que, tanto por experiencia própia, quanto por em base de meus ultimos estudos na área de Gestão de Times e Projetos, vejo ser uma questão importantíssima que é a saúde mental.</p>
<p>Sei que muito tem se falado, principalmente durante e após o período que enfrentamos nos ultimos anos, mas deixo aqui meus dois centavos de contribuíção a partir de minha perspectiva e de que tenho adotado em meu dia-a-dia como dev.</p>
<h3 id="heading-prioridade-despriorizada">Prioridade despriorizada</h3>
<p>O "ser dev" é muito louco: cheio de emoção, mas também repleto de desafios complexos. No emaranhado de código e reuniões, prazos apertados, <em>features</em> que precisam ser lançadas e "<em>bugs</em> tenebrosos", podem gerar pressões que, muitas vezes, passam despercebidas, e podendo levar a altos níveis de estresse, ansiedade e possivelmente ao esgotamento. Contudo, enquanto buscamos nos aprimorar e evoluir técnicamente na carreira, é fundamental que não negligenciarmos os cuidados com nossa saúde mental e bem estar.</p>
<h3 id="heading-um-bind-poderoso">Um ((bind)) poderoso</h3>
<p>Assim como consultamos especialistas para melhorar nosso código ou <em>softskills</em>, a orientação de um profissional de psicologia pode fortalecer nossa resiliência emocional. E da mesma forma que temos <em>frameworks,</em> IDEs, <em>workspaces</em> etc para gerenciar memória, escalabilidade e arquitetura afim de extrair performance do software que estamos desenvolvendo, psicologos fornecem um "workspace" onde podemos discutir desafios, gerenciar estresse e desenvolver estratégias para alcançar um equilíbrio saudável entre trabalho e vida pessoal.</p>
<p>Investir na saúde mental, assim como na saúde corporal <em>(mas isso falaremos em outro momento)</em>, além de "fazer bem", também pode ser encarada como uma estratégia inteligente para melhorar a produtividade. Uma mente equilibrada é mais capaz de enfrentar desafios mais complexos, ser mais eficaz e criar soluções criativas.</p>
<h3 id="heading-impacto-positivo">Impacto Positivo</h3>
<p>Da mesma forma com que enfrentamos os <em>bugs tenebroso</em> em nossos códigos, também encontramos obstáculos emocionais ao longo de nossa trajetória profissional. Muitas vezes como comportamentos novos, dentre outras coisas: dificuldade de concluir task que aparentemente era simples, falta de motivação em tasks que lhe animava ou simplesmente <em>go blank (e até mesmo aquela vontade de todo dia mandar o cliente lá para a casa do---).</em></p>
<p>Todos esses comportamentos citados eu passei, e entender a situação, o ambiente, e as possíveis causas me ajudou muito a conseguir a me organizar e me alinhar novamente "nos trilhos".</p>
<p>O suporte psicológico não é um sinal de fraqueza, mas sim uma ferramenta valiosa para lidar com a pressão invisível que muitas vezes carregamos.</p>
<p>Por fim, deixarei o lembrete que aqui <strong>é apenas uma sugestão geral e não substitui a orientação de profissionais</strong>. Caso esteja passando por desafios emocionais, procure ou peça indicação de um profissional.</p>
<p>Show então, E Até!</p>
<p><a target="_blank" href="https://hashnode.com/n/2articles1week"><strong>#2Articles1Week</strong></a></p>
]]></content:encoded></item></channel></rss>