<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Diana Arnos</title>
    <description>The latest articles on DEV Community by Diana Arnos (@dianaarnos).</description>
    <link>https://dev.to/dianaarnos</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F133615%2Fa80ce244-bb6e-41d8-8d8d-75c1943bff0f.JPG</url>
      <title>DEV Community: Diana Arnos</title>
      <link>https://dev.to/dianaarnos</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/dianaarnos"/>
    <language>en</language>
    <item>
      <title>Aplicações gráficas no WSL2</title>
      <dc:creator>Diana Arnos</dc:creator>
      <pubDate>Mon, 01 Jun 2020 14:38:02 +0000</pubDate>
      <link>https://dev.to/dianaarnos/aplicacoes-graficas-no-wsl2-13i5</link>
      <guid>https://dev.to/dianaarnos/aplicacoes-graficas-no-wsl2-13i5</guid>
      <description>&lt;p&gt;&lt;em&gt;Artigo publicado originalmente em &lt;a href="https://www.dianaarnos.com/" rel="noopener noreferrer"&gt;dianaarnos.com&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Antes de começar, vale lembrar que as features mais recentes estão disponíveis apenas para quem está no Fast Ring do Windows Insider Program.&lt;br&gt;
No momento de publicação desse artigo, eu estou na build 19619.1000 e usando o Ubuntu 20.04 como distro.&lt;/p&gt;

&lt;p&gt;Para conseguir rodar aplicações gráficas do Linux no seu Windows 10 você precisa fazer forwarding do X11 de forma que seu W10 possa receber os sinais e executar as instruções gráficas.&lt;/p&gt;
&lt;h4&gt;
  
  
  Mas o que é X11?
&lt;/h4&gt;

&lt;p&gt;De maneira simplista e rasa, vou dizer que é um protocolo de comunicação que permite que aplicações possam criar objetos como janelas e usar primitivas básicas de desenho.&lt;br&gt;
Simplificando ainda mais, podemos assumir que X11 é o responsável pelo ambiente gráfico do Linux (na maioria das distros, mas nem todas usam).&lt;br&gt;
Essa não é a explicação mais correta, mas é o suficiente pra entender o que vamos fazer aqui.&lt;/p&gt;

&lt;p&gt;Resumidamente: você vai iniciar uma aplicação gráfica no Linux. A partir daí, as instruções gráficas dessa execução precisam ser encaminhadas para o Windows 10, de forma que possam ser interpretadas e executadas. Isso é feito por servidor X11 instalado no Windows, que então reproduz a janela da aplicação na sua área de trabalho.&lt;/p&gt;

&lt;p&gt;Agora, ao passo-a-passo simples:&lt;/p&gt;
&lt;h3&gt;
  
  
  1. SSH
&lt;/h3&gt;

&lt;p&gt;Garanta que a distro tenha um servidor ssh instalado (o openssh-server é "mais que bom") e edite o arquivo de configuração &lt;code&gt;/etc/ssh/sshd_config&lt;/code&gt; para que contenha essas linhas:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Port 222
X11Forwarding &lt;span class="nb"&gt;yes
&lt;/span&gt;X11DisplayOffset 10
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dessa forma você garante que a distro possa enviar os dados do X11 via ssh, permitindo que um servidor X11 rodando no seu host Windows receba esses dados.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Display
&lt;/h3&gt;

&lt;p&gt;Faça export da variável de ambiente &lt;code&gt;DISPLAY&lt;/code&gt; do Linux, adicionando a seguinte linha ao arquivo &lt;code&gt;.bashrc&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;export DISPLAY=&amp;lt;IP do host Windows&amp;gt;:0.0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fd33wubrfki0l68.cloudfront.net%2Fbe591201110fc28ba38f11470cadb914fcf3397d%2Fd7045%2Fimages%2Fposts%2Faplicacoes_graficas_wsl2%2Fdisplay.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fd33wubrfki0l68.cloudfront.net%2Fbe591201110fc28ba38f11470cadb914fcf3397d%2Fd7045%2Fimages%2Fposts%2Faplicacoes_graficas_wsl2%2Fdisplay.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Em poucas e porcas palavras, essa linha diz para a distro enviar os dados gráficos para o IP especificado.&lt;/p&gt;

&lt;p&gt;Mas qual IP usar?&lt;/p&gt;

&lt;p&gt;Você consegue visualizar os IPs necessários digitando &lt;code&gt;ipconfig&lt;/code&gt; no &lt;em&gt;Windows PowerShell&lt;/em&gt;.&lt;br&gt;&lt;br&gt;
Se você estiver usando internet via cabo, você vai usar o IPv4 exibido em &lt;em&gt;Adaptador Ethernet vEthernet (WSL)&lt;/em&gt;.&lt;br&gt;&lt;br&gt;
Se você estivar usando internet via wi-fi, é o IPv4 do &lt;em&gt;Adaptador de Rede sem Fio Wi-Fi&lt;/em&gt;.&lt;br&gt;&lt;br&gt;
Algo assim:  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fd33wubrfki0l68.cloudfront.net%2F290909bd5040b101b0766d5ec5412dd8e55000b9%2F12c17%2Fimages%2Fposts%2Faplicacoes_graficas_wsl2%2Fip.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fd33wubrfki0l68.cloudfront.net%2F290909bd5040b101b0766d5ec5412dd8e55000b9%2F12c17%2Fimages%2Fposts%2Faplicacoes_graficas_wsl2%2Fip.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  3. Instale um servidor X11 no Windows e execute-o
&lt;/h3&gt;

&lt;p&gt;Eu uso o &lt;strong&gt;Xming&lt;/strong&gt;, mas existem outros compatíveis com Windows 10. Escolha seu preferido :)&lt;/p&gt;

&lt;p&gt;Ao executar o servidor, configure para usar o display de número 0 (aquele que foi exportado no seu .bashrc da distro) e marque a opção &lt;em&gt;"No access control"&lt;/em&gt;. Assim você não precisa se preocupar com configurações de firewall ou coisas do gênero (você está rodando tudo local mesmo ¯\_(ツ)_/¯ ).&lt;/p&gt;

&lt;p&gt;Seguem prints de como faço isso no Xming:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fd33wubrfki0l68.cloudfront.net%2Feb0f02f085e6c25e435cfc4e812715169e864601%2F13bd5%2Fimages%2Fposts%2Faplicacoes_graficas_wsl2%2Fxming1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fd33wubrfki0l68.cloudfront.net%2Feb0f02f085e6c25e435cfc4e812715169e864601%2F13bd5%2Fimages%2Fposts%2Faplicacoes_graficas_wsl2%2Fxming1.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fd33wubrfki0l68.cloudfront.net%2Fb5249d7d1cb3437ea53711ad936d952883aa854f%2F86d8c%2Fimages%2Fposts%2Faplicacoes_graficas_wsl2%2Fxming2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fd33wubrfki0l68.cloudfront.net%2Fb5249d7d1cb3437ea53711ad936d952883aa854f%2F86d8c%2Fimages%2Fposts%2Faplicacoes_graficas_wsl2%2Fxming2.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fd33wubrfki0l68.cloudfront.net%2Fc9ee6c667ca25a4d8926ebb22d2ee61ef503140a%2Feb815%2Fimages%2Fposts%2Faplicacoes_graficas_wsl2%2Fxming3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fd33wubrfki0l68.cloudfront.net%2Fc9ee6c667ca25a4d8926ebb22d2ee61ef503140a%2Feb815%2Fimages%2Fposts%2Faplicacoes_graficas_wsl2%2Fxming3.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Depois de concluir, o servidor vai ficar ativo e disponível lá na barra de tarefas:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fd33wubrfki0l68.cloudfront.net%2Fd63b17ad0edbeaf5f9f28d7d080836d983f2c3b4%2F63b1a%2Fimages%2Fposts%2Faplicacoes_graficas_wsl2%2Fxming4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fd33wubrfki0l68.cloudfront.net%2Fd63b17ad0edbeaf5f9f28d7d080836d983f2c3b4%2F63b1a%2Fimages%2Fposts%2Faplicacoes_graficas_wsl2%2Fxming4.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  4. E agora é só executar uma aplicação gráfica no Linux:
&lt;/h4&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/zArM8gBsJsA"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Se achou útil, compartilhe 🙂&lt;br&gt;&lt;br&gt;
Se tiver alguma dúvida, deixa nos comentários ou me manda mensagem nas redes sociais. Ficarei feliz em ajudar :D&lt;/p&gt;

</description>
      <category>windows</category>
      <category>wsl2</category>
      <category>x11</category>
    </item>
    <item>
      <title>O que mudou no PHP7</title>
      <dc:creator>Diana Arnos</dc:creator>
      <pubDate>Mon, 24 Feb 2020 21:27:25 +0000</pubDate>
      <link>https://dev.to/dianaarnos/o-que-mudou-no-php7-126d</link>
      <guid>https://dev.to/dianaarnos/o-que-mudou-no-php7-126d</guid>
      <description>&lt;p&gt;&lt;em&gt;(publicado originalmente em &lt;a href="https://www.dianaarnos.com/blog/2020/02/24/o-que-mudou-no-php7/"&gt;dianaarnos.com&lt;/a&gt;)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Como muita gente ainda me pergunta o porquê dessa grande diferença entre o PHP 5 e o 7, resolvi escrever um curto e simples artigo sobre isso (afinal, tem gente que sabe muito mais do que eu e poderia explicar muito melhor).&lt;/p&gt;

&lt;p&gt;Apesar de ter saído quase 5 anos atrás (3 de Dezembro de 2015), parece que só agora parte das pessoas começou a perceber o que aconteceu com o PHP7, que chegou fazendo barulho não só na comunidade PHP, mas também chamou a atenção de uma galera que tinha desistido de acompanhar a linguagem desde a versão 4. Afinal, a partir da versão 7 houve um&lt;br&gt;
aumento de quase 40% de performance em geral (em alguns casos, o processamento acaba sendo até 2x mais rápido).&lt;br&gt;
Aliás, vale dizer que MUITAS das críticas que o PHP ainda recebe são relacionadas à versão 4 ou início da 5, de coisas que já foram resolvidas há tempos.&lt;/p&gt;

&lt;p&gt;Falando sobre performance: a linguagem recebeu VÁRIAS otimizações internas, baixo-nível mesmo, que deixaram o processamento muito mais rápido e efetivo.&lt;br&gt;
Eu vou listar aqui alguns dos tópicos mas, se você quiser saber um pouquinho mais e conseguir entender bem inglês, vou deixar uns links de referência no final do artigo 🙂&lt;/p&gt;

&lt;p&gt;Basicamente, o pessoal que trabalha no código-fonte do PHP buscou melhorar a performance otimizando a forma como a linguagem utiliza a memória, trabalhando nos seguintes pontos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reduzir o número de alocações (alocar e desalocar dados em memória é um processo custoso)&lt;/li&gt;
&lt;li&gt;Reduzir o uso da memória em geral (o acesso à memória RAM é pesado em termos de latência. O ideal seria usar as memórias cache do processador o máximo possível)&lt;/li&gt;
&lt;li&gt;Reduzir a quantidade de ponteiros utilizados (você tem um ponteiro que aponta para um lugar que tem um ponteiro que aponta para onde você tem que ir para conseguir o dado que você precisa)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Esse trabalho todo resultou numa melhor estruturação e utilização dos zvals. Explicando de maneira bem porcaria, um zval seria a estrutura em C que representa um dado sendo utilizado no PHP. Quando você cria uma variável, um objeto ou lida com um valor qualquer, esse dado é transformado em um "zval". É esse zval que é efetivamente manipulado lá no baixo nível. &lt;/p&gt;

&lt;p&gt;Os arrays (que no PHP são, na verdade, hash tables) tiveram suas estruturas (do zval) simplificadas, dispensando o uso da lista duplamente ligada que era necessária nas versões anteriores, além de não utilizar mais ponteiros para ligar um dado ao próximo contido no array. &lt;/p&gt;

&lt;p&gt;A estruturação de um objeto em zval também foi simplificada, não exigindo mais 2 processos (e ponteiros) intermediários.&lt;/p&gt;

&lt;p&gt;Em geral, quase todas as estruturas do PHP tiveram uma diminuição tanto quantidade de alocações em memória necessárias quanto no tamanho em bytes da estrutura em si.&lt;/p&gt;

&lt;p&gt;Além disso, o próprio processo de compilação da linguagem foi modificado, adicionando um passo extra entre a tokenização e a compilação: o parsing passou a ser feito separadamente. Isso abriu espaço para implementação de muitas funcionalidades que antes não eram possíveis por conta do processo "simplista" entre a fase de tokenização e compilação.&lt;/p&gt;

&lt;p&gt;Sobre as novas funcionalidades, bom... não vou falar delas aqui porque já existem muitos bons artigos em português sobre, como esse post da Caelum aqui: &lt;a href="https://blog.caelum.com.br/novidades-do-php-7/"&gt;https://blog.caelum.com.br/novidades-do-php-7/&lt;/a&gt; ou essa ótima palestra do Duodraco &lt;a href="https://www.youtube.com/watch?v=r260ueWFq2M&amp;amp;list=PLnYXGcDMOP_FarvCEYFKKOC5KoIjw8gIU"&gt;https://www.youtube.com/watch?v=r260ueWFq2M&amp;amp;list=PLnYXGcDMOP_FarvCEYFKKOC5KoIjw8gIU&lt;/a&gt; (valeu, Marcel, pela dica) :)&lt;/p&gt;

&lt;p&gt;Espero que esse texto tenha ajudado a esclarecer um pouco das dúvidas em relação a esse aumento bruto de performance.&lt;br&gt;
Qualquer coisa, me manda um salve lá no twitter ou instagram: &lt;a class="mentioned-user" href="https://dev.to/dianaarnos"&gt;@dianaarnos&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Referências:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Uma ótima palestra do Nikita Popov sobre as mudanças internas feitas no PHP7: 
&lt;a href="https://www.youtube.com/watch?v=zekEqhaPmag"&gt;https://www.youtube.com/watch?v=zekEqhaPmag&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Sobre zvals: &lt;a href="http://www.phpinternalsbook.com/php5/zvals/basic_structure.html"&gt;http://www.phpinternalsbook.com/php5/zvals/basic_structure.html&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>php</category>
      <category>programação</category>
    </item>
  </channel>
</rss>
