<?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>Forem: Morganna</title>
    <description>The latest articles on Forem by Morganna (@morgannadev).</description>
    <link>https://forem.com/morgannadev</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%2F320326%2Fe73842b2-1464-476e-a68e-33ad1f455d73.JPG</url>
      <title>Forem: Morganna</title>
      <link>https://forem.com/morgannadev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/morgannadev"/>
    <language>en</language>
    <item>
      <title>Como ajudar as pessoas a contribuirem com seu projeto Open Source</title>
      <dc:creator>Morganna</dc:creator>
      <pubDate>Wed, 29 Oct 2025 18:16:25 +0000</pubDate>
      <link>https://forem.com/morgannadev/como-ajudar-as-pessoas-a-contribuirem-com-seu-projeto-open-source-4cjm</link>
      <guid>https://forem.com/morgannadev/como-ajudar-as-pessoas-a-contribuirem-com-seu-projeto-open-source-4cjm</guid>
      <description>&lt;p&gt;&lt;em&gt;Essa é uma submissão para o &lt;a href="https://dev.to/challenges/hacktoberfest"&gt;Desafio de escrita do Hacktoberfest 2025&lt;/a&gt;: Reflexões sobre Open Source.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Tenha um &lt;code&gt;README.md&lt;/code&gt; legal
&lt;/h2&gt;

&lt;p&gt;Esse arquivo é basicamente a vitrine do seu projeto. Então faz sentido que você dedique um tempo nele, deixando-o completo, contando com descrição do projeto, como executá-lo (caso seja código), versionamento, como usá-lo etc.&lt;/p&gt;

&lt;h2&gt;
  
  
  Crie o &lt;code&gt;CONTRIBUTING.md&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Esse será um dos arquivos principais. É nele que você vai adicionar as orientações de como as pessoas podem contribuir com o seu projeto. E quanto mais completo, melhor será. Você pode incluir que a pessoa precisa, por exemplo, fazer um fork do projeto, criar uma branch para contribuição, colocar as regras de como nomear a branch, os commits, as pull requests, adicionar exemplos de contribuição, entre outras coisas que ajudam a padronizar e deixar o projeto mais organizado e recebendo contribuições relevantes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Adicione issues
&lt;/h2&gt;

&lt;p&gt;Se você já tem uma ideia de quais funcionalidades ou correções poderiam ser feitas no projeto, essa é uma boa forma de documentá-las. A comunidade pode escolher entre as issues disponíveis para desenvolvê-las. E, claro, as pessoas também podem criar novas issues para discussão da relevância da contribuição que a pessoa quer fazer. Assim, antes da pessoa ter todo o trabalho de fazer a alteração, vocês chegam num acordo se aquela alteração faz sentido ou não.&lt;/p&gt;

&lt;h2&gt;
  
  
  Disponibilize o &lt;code&gt;CODE_OF_CONDUCT.md&lt;/code&gt; do projeto
&lt;/h2&gt;

&lt;p&gt;Pode ser legal ter um arquivo com o código de conduta, assim as pessoas sabem como contribuir da melhor forma para aquele projeto, entendendo quais são as regras. Basicamente, adicionando as orientações de se manter o respeito nas contribuições e nas discussões dessas contribuições, entre outras.&lt;/p&gt;

&lt;p&gt;E você, tem mais dicas de como deixar o projeto o mais amigável possível para as pessoas saberem como contribuir com ele? Deixe nos comentários a sua contribuição!&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hacktoberfest</category>
      <category>opensource</category>
      <category>braziliandevs</category>
    </item>
    <item>
      <title>Educação, Developer Relations e Inteligência Artificial</title>
      <dc:creator>Morganna</dc:creator>
      <pubDate>Thu, 22 May 2025 11:54:04 +0000</pubDate>
      <link>https://forem.com/morgannadev/educacao-developer-relations-e-inteligencia-artificial-1hi</link>
      <guid>https://forem.com/morgannadev/educacao-developer-relations-e-inteligencia-artificial-1hi</guid>
      <description>&lt;p&gt;Eu acredito muito no poder da educação. Principalmente em situações como a que estamos vivenciando agora, com a explosão de novidades sobre Inteligência Artificial e os medos que surgem com tudo o que tem sido falado por aí.&lt;/p&gt;

&lt;p&gt;Na minha opinião, as ferramentas de IA são muito poderosas para serem colocadas na mão das pessoas sem quaisquer orientações. O uso equivocado, as crenças ao redor disso, o fato de acreditar ou não nas informações geradas sem o senso crítico de quando há alienação e quando há, de fato, respostas válidas, o medo de perder o emprego por conta dessa tecnologia e muitos outros fatores, podem ser muito complicados sem educação.&lt;/p&gt;

&lt;p&gt;A área de Developer Relations pode ser uma forte aliada nesse processo de educação nas empresas. Como Developer Advocate de uma plataforma de IA, vejo o impacto do meu trabalho acontecendo diariamente, levando o conhecimento de forma leve e prática, mostrando como as coisas funcionam de uma maneira mais profunda, dando na mão das pessoas de diversas áreas, e não apenas tecnologia, ferramentas que serão um apoio para seus desafios, tirando o peso do que as assusta e incluindo a leveza de resolver seus problemas diários.&lt;/p&gt;

&lt;p&gt;Investir na área de Developer Relations pode ser fundamental por diversos motivos. E educação é uma das chaves que pode abrir várias portas de soluções dentro das empresas. Quem investe em educação, investe no capital intelectual. E quem investe no capital intelectual, investe em inovação.&lt;/p&gt;

</description>
      <category>devrel</category>
      <category>ai</category>
      <category>braziliandevs</category>
    </item>
    <item>
      <title>Como maximizar o uso da Inteligência Artificial com a engenharia de prompt</title>
      <dc:creator>Morganna</dc:creator>
      <pubDate>Fri, 16 May 2025 19:00:45 +0000</pubDate>
      <link>https://forem.com/feministech/como-maximizar-o-uso-da-inteligencia-artificial-com-a-engenharia-de-prompt-30od</link>
      <guid>https://forem.com/feministech/como-maximizar-o-uso-da-inteligencia-artificial-com-a-engenharia-de-prompt-30od</guid>
      <description>&lt;p&gt;A inteligência artificial tem se tornado uma aliada valiosa em diversas áreas dentro das empresas. Um dos fatores que pode determinar a eficácia dessa tecnologia é a qualidade dos prompts utilizados para interagir com ela. Neste artigo, discutiremos a importância de construir prompts bem elaborados e forneceremos dicas práticas para garantir que você obtenha as melhores respostas das LLMs.&lt;/p&gt;

&lt;h2&gt;
  
  
  O que é Engenharia de Prompt
&lt;/h2&gt;

&lt;p&gt;A engenharia de prompt surgiu como uma nova habilidade e ela é tão recente que ainda estamos aprendendo como usá-la. Essa habilidade nos permite criar inputs otimizados para os modelos de linguagem da inteligência artificial nos retornarem respostas que sejam relevantes. É importante ressaltar que a qualidade do prompt pode influenciar significativamente a acurácia da resposta recebida.&lt;/p&gt;

&lt;h2&gt;
  
  
  Como estruturar um prompt
&lt;/h2&gt;

&lt;p&gt;Considere as seguintes etapas para criar seu prompt:&lt;br&gt;
&lt;strong&gt;1. Ações&lt;/strong&gt;&lt;br&gt;
Comece o prompt com verbos de ações, como “escreva", “analise”, “crie”, entre outros. Deve ser uma pergunta ou solicitação bem definida, tomando o cuidado de evitar ambiguidades.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Dê contexto&lt;/strong&gt;&lt;br&gt;
Esse é um dos pontos mais importantes. Isso inclui informações sobre a situação atual, objetivos, informações sobre o projeto que está trabalhando ou quaisquer limitações que você possa ter para a sua solicitação.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Formatação&lt;/strong&gt;&lt;br&gt;
Forneça orientações sobre como você deseja que a resposta seja formatada. Você espera uma lista? Um e-mail? Um código? Um texto em formato markdown? Esse processo pode facilitar muito o entendimento do retorno da IA.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Exemplificação&lt;/strong&gt;&lt;br&gt;
Dependendo do tipo de solicitação que você está fazendo, pode fazer sentido dar exemplo para IA sobre o que está pedindo. Se está pedindo um e-mail, você pode dar outro e-mail como exemplo do que se espera de resultado. Se está desenvolvendo um código, você pode apontar os arquivos que já estão com o código pronto e que representam o que você espera como retorno.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Persona&lt;/strong&gt;&lt;br&gt;
Outro ponto que pode melhorar o seu prompt seria dizer qual é a persona. Se você está desenvolvendo um código, você pode dizer que a persona da IA é uma pessoa desenvolvedora. Se você está criando histórias a partir de um épico, você pode dizer que a persona da IA é uma pessoa product manager e assim por diante.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6. Entonação&lt;/strong&gt;&lt;br&gt;
Dependendo da sua solicitação, pode fazer sentido pedir uma entonação específica no seu prompt. Essa entonação pode ser, por exemplo: ou tom de voz casual, ou um tom de voz mais formal, ou entusiasmo, entre outros.&lt;/p&gt;

&lt;h2&gt;
  
  
  Vamos continuar construindo prompts
&lt;/h2&gt;

&lt;p&gt;A criação de prompts eficazes é uma habilidade importante que pode maximizar o potencial da IA. Ao focar em clareza, contexto e especificidade, qualquer pessoa, independente da função ou área, pode aprimorar suas interações com a IA e, assim, alcançar melhores resultados. Invista tempo na elaboração de seus prompts e observe como isso pode transformar suas experiências com a tecnologia.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>promptengineering</category>
      <category>braziliandevs</category>
    </item>
    <item>
      <title>Trilha de estudos para ser uma pessoa desenvolvedora Python RPA</title>
      <dc:creator>Morganna</dc:creator>
      <pubDate>Fri, 29 Mar 2024 21:23:00 +0000</pubDate>
      <link>https://forem.com/botcitydev/trilha-de-estudos-para-ser-uma-pessoa-desenvolvedora-python-rpa-3o85</link>
      <guid>https://forem.com/botcitydev/trilha-de-estudos-para-ser-uma-pessoa-desenvolvedora-python-rpa-3o85</guid>
      <description>&lt;p&gt;Python tem ganhado cada vez mais força no mundo da automação RPA e é importante, como profissionais, estudarmos também essa tecnologia para atender as demandas da melhor maneira possível.&lt;/p&gt;

&lt;p&gt;Mas quais são os passos para aprender Python RPA?&lt;/p&gt;

&lt;p&gt;Que tal seguir essas dicas de uma trilha para o seu desenvolvimento e ainda ter certificados para compartilhar suas novas skills técnicas?&lt;/p&gt;

&lt;h3&gt;
  
  
  🤖 Comece pela linguagem de programação Python
&lt;/h3&gt;

&lt;p&gt;Este curso totalmente prático vai te guiar de forma clara e objetiva através das principais funcionalidades do Python.&lt;/p&gt;

&lt;p&gt;Link: &lt;a href="https://developers.botcity.dev/academy/devpro_python" rel="noopener noreferrer"&gt;Python Basics - Introdução e Mão na Massa&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Para mais conteúdos para você aprender Python, siga as dicas do artigo "&lt;a href="https://dev.to/feministech/como-iniciar-meus-estudos-em-python-2aii"&gt;Como iniciar meus estudos em Python&lt;/a&gt;".&lt;/p&gt;

&lt;h3&gt;
  
  
  🤖 Desenvolva sua primeira automação Python
&lt;/h3&gt;

&lt;p&gt;Este curso ministrado durante a Python Brasil de 2022 vai te ensinar a criar automações com visão computacional para qualquer sistema.&lt;/p&gt;

&lt;p&gt;Link: &lt;a href="https://developers.botcity.dev/academy/pybr2022" rel="noopener noreferrer"&gt;Criando automações com visão computacional&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  🤖 Segurança com Python RPA
&lt;/h3&gt;

&lt;p&gt;Este curso vai te guiar de forma clara e objetiva através dos principais conceitos de segurança da informação e como aplicar esses conceitos em projetos Python com um foco especial em projetos de RPA.&lt;/p&gt;

&lt;p&gt;Link: &lt;a href="https://developers.botcity.dev/academy/seguranca_rpa_python" rel="noopener noreferrer"&gt;Segurança com Python RPA&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  🤖 Aprenda como fazer orquestração da sua automação Python
&lt;/h3&gt;

&lt;p&gt;Aprenda na prática de forma clara e objetiva as principais funcionalidades do orquestrador. Veja os benefícios e vantagens de usar cada recurso nos seus processos de automação.&lt;/p&gt;

&lt;p&gt;Link: &lt;a href="https://developers.botcity.dev/academy/orchestration" rel="noopener noreferrer"&gt;Orquestração de Python RPA&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  🤖 Desenvolva uma automação com um importante sistema do mercado
&lt;/h3&gt;

&lt;p&gt;Explore a automação SAP com Python e BotCity neste curso prático. Aprenda técnicas essenciais para agilizar os processos SAP de forma eficiente e eficaz.&lt;/p&gt;

&lt;p&gt;Link: &lt;a href="https://developers.botcity.dev/academy/sap_automation_pt" rel="noopener noreferrer"&gt;Automação de SAP com Python&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  🤖 Pratique bastante e compartilhe sua evolução e seus aprendizados com a comunidade
&lt;/h3&gt;

&lt;p&gt;Conheça o repositório de bots da comunidade, para aprender com o desenvolvimento de outras pessoas e compartilhar os seus projetos open source.&lt;/p&gt;

&lt;p&gt;Link: &lt;a href="https://repository.botcity.dev/" rel="noopener noreferrer"&gt;Repositório de bots da comunidade&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;O que achou dessas dicas? Bora começar esses estudos e sermos profissionais cada vez melhores!&lt;/p&gt;

&lt;p&gt;E se tiver mais dicas, deixe nos comentários para complementar o conteúdo!&lt;/p&gt;

</description>
      <category>braziliandevs</category>
      <category>rpa</category>
      <category>beginners</category>
      <category>automation</category>
    </item>
    <item>
      <title>O papel da pessoa desenvolvedora muito além do código</title>
      <dc:creator>Morganna</dc:creator>
      <pubDate>Fri, 29 Mar 2024 18:25:59 +0000</pubDate>
      <link>https://forem.com/botcitydev/o-papel-da-pessoa-desenvolvedora-muito-alem-do-codigo-149h</link>
      <guid>https://forem.com/botcitydev/o-papel-da-pessoa-desenvolvedora-muito-alem-do-codigo-149h</guid>
      <description>&lt;p&gt;Estava acompanhando uma postagem no LinkedIn sobre como os times e as empresas precisam entender a importância do gerenciamento de projetos de automação. Você pode acompanhar a &lt;a href="https://www.linkedin.com/feed/update/urn:li:activity:7179064607423029248/" rel="noopener noreferrer"&gt;postagem neste link&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Entendo que é crucial que essa discussão ocorra entre as pessoas dos times de negócio e gestão. Mas essa preocupação deveria ser também considerada para pessoas desenvolvedoras e também outros papéis de pessoas tecnologistas.&lt;/p&gt;

&lt;p&gt;Quando nos tornamos pessoas desenvolvedoras (independente do tipo de projeto que vamos desenvolver), colocamos na cabeça que &lt;em&gt;somos pessoas que fazemos apenas código&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Mas na verdade, &lt;em&gt;somos pessoas resolvedoras de problemas&lt;/em&gt;. Precisamos lembrar de exercitar esse papel, levando para os times que trabalhamos soluções que fazem mais sentido de acordo com os requisitos e projetos que temos que atender.&lt;/p&gt;

&lt;p&gt;Além disso, resolver problemas não significa que vamos apenas desenvolver um código e acabou. Devemos encontrar soluções no mercado que nos ajudem, afinal de contas, nosso objetivo também é levar valor aos projetos que atuamos. Por isso é tão importante quando fazemos POCs (Proof of Concept, ou Prova de Conceito em português) das ferramentas que pesquisamos.&lt;/p&gt;

&lt;p&gt;É nesse momento que testamos, avaliamos as funcionalidades e tentamos considerar quais serão os ganhos com aquela ferramenta. E isso vai muito além do que queremos. Por isso temos que entender o que as demais áreas precisam e o que de fato terá valor em nossa automação.&lt;/p&gt;

&lt;p&gt;Um projeto de automação também é um projeto de software. E tal como um projeto de software, precisa de gerenciamento. Não basta entregar um executável para as pessoas usuárias. O que elas querem, no final do dia, é ter uma forma de orquestrar o que será executado.&lt;/p&gt;

&lt;p&gt;Repare nas perguntas que as pessoas usuárias fazem:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Como eu sei se deu certo?&lt;/li&gt;
&lt;li&gt;Como faço para agendar a execução?&lt;/li&gt;
&lt;li&gt;E se der erro?&lt;/li&gt;
&lt;li&gt;E se não executar?&lt;/li&gt;
&lt;li&gt;Como eu levo uma comunicação eficaz para o time sobre o que está acontecendo com as automações?&lt;/li&gt;
&lt;li&gt;Mas eu tenho uma planilha enorme de dados para consumir, e se falhar no meio do caminho?&lt;/li&gt;
&lt;li&gt;Quem pode acessar as informações?&lt;/li&gt;
&lt;li&gt;Onde eu coloco as senhas para autenticação nos sistemas?&lt;/li&gt;
&lt;li&gt;Eu posso executar mais de uma automação por vez?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Entre tantas outras. E unir código com uma solução que te permita proporcionar todo esse gerenciamento é de extrema importância, principalmente porque a operação de automações pode ser facilmente escalada. E como vamos gerenciar isso?&lt;/p&gt;

&lt;p&gt;Aproveitando a discussão, quero compartilhar com vocês uma trilha de estudos que pode te ajudar a entender melhor como seguir essas práticas e o nosso papel: &lt;a href="https://dev.to/botcitydev/trilha-de-estudos-para-ser-uma-pessoa-desenvolvedora-python-rpa-3o85"&gt;trilha de estudos para Python RPA&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;E o que você acha isso? Compartilhe suas experiências com a comunidade nos comentários e vamos trocar uma ideia.&lt;/p&gt;

</description>
      <category>braziliandevs</category>
      <category>discuss</category>
      <category>rpa</category>
    </item>
    <item>
      <title>As mulheres que mudaram o rumo da tecnologia</title>
      <dc:creator>Morganna</dc:creator>
      <pubDate>Sun, 24 Mar 2024 14:45:38 +0000</pubDate>
      <link>https://forem.com/feministech/as-mulheres-que-mudaram-o-rumo-da-tecnologia-4b6d</link>
      <guid>https://forem.com/feministech/as-mulheres-que-mudaram-o-rumo-da-tecnologia-4b6d</guid>
      <description>&lt;p&gt;Quando eu comecei a fazer lives sobre tecnologia pelo &lt;a href="https://www.twitch.tv/team/livecodergirls" rel="noopener noreferrer"&gt;time da Feministech na Twitch&lt;/a&gt;, eu pensei em falar sobre mulheres na tecnologia. O objetivo era falar de uma mulher a cada live. E como eu queria ter o registro disso de alguma forma, para que ninguém perdesse a história da mulher que falamos, caso a pessoa tivesse perdido a live, criei um projeto dentro do GitHub.&lt;/p&gt;

&lt;p&gt;Isso foi bem importante para mim, a cada live que eu pensava em fazer, pesquisava sobre mulheres na tecnologia e acabava descobrindo histórias incríveis e que ninguém conta abertamente. E lá ia eu, ficar encantada com cada uma dessas histórias e já estava achando pouco falar sobre apenas uma mulher na tecnologia por live.&lt;/p&gt;

&lt;p&gt;O projeto foi crescendo e tomando forma. Claro que já tive um milhão de ideias para ele, assim como já recebi também diversas sugestões. Já pensei até em transformar em um livro. (Quem sabe um dia, né?).&lt;/p&gt;

&lt;p&gt;E quero aproveitar o &lt;a href="https://dev.to/t/wecoded"&gt;#wecoded&lt;/a&gt; para mostrar também para mais pessoas sobre esse projeto. Ainda são pouquíssimas mulheres nele. Tem mulheres que já se foram, mulheres que ainda estão transformando a área de tecnologia com seus estudos, pesquisas e trabalho.&lt;/p&gt;

&lt;p&gt;E além disso, quero aproveitar para falar mais uma coisa:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Você, que está aí em algum lugar, estudando sobre tecnologia, enfrentando diversos preconceitos, tentando lidar com mil coisas ao mesmo tempo: casa, trabalho, estudos, ou buscando sua primeira oportunidade, saúde, família, ou tendo que cuidar de tudo isso sozinha, entre tantas outras coisas... &lt;strong&gt;Eu quero dizer que você também está transformando o mundo da tecnologia.&lt;/strong&gt; Seja você uma mulher que está pensando em dar seus primeiros passos na área, uma mulher que já está atuando como tecnologista, uma mulher com anos e anos de experiência, uma mulher em transição de carreira, não importa. A cada passo que você dá, é um passo que damos todas juntas para mudar o mundo. &lt;strong&gt;E você está transformando a área de tecnologia.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Vou pegar emprestada algumas palavras aqui do Emicida: "faz essa por nós, te vejo no pódio", onde estaremos juntas, combinado?&lt;/p&gt;

&lt;p&gt;Se você quiser se inspirar em outras mulheres diversas ou quiser compartilhar a história de mulheres na tecnologia, aqui está o projeto. Espero que goste!&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/morgannadev" rel="noopener noreferrer"&gt;
        morgannadev
      &lt;/a&gt; / &lt;a href="https://github.com/morgannadev/mulherestecnologia" rel="noopener noreferrer"&gt;
        mulherestecnologia
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      A ideia deste repositório é compartilhar sobre mulheres na tecnologia, mostrando que há muitas delas que transformaram e ainda transformam a área.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Mulheres no mundo da tecnologia 💻&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/189d76037fb747d94e083af4d6788a8457709c537530a282397f5afff01464b0/68747470733a2f2f692e696d6775722e636f6d2f33535a70764a6e2e706e67"&gt;&lt;img src="https://camo.githubusercontent.com/189d76037fb747d94e083af4d6788a8457709c537530a282397f5afff01464b0/68747470733a2f2f692e696d6775722e636f6d2f33535a70764a6e2e706e67" alt="Imagem com diversos desenhos de mulheres diversas e diferentes."&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Olá, mundo
Eu sou a Morganna, sou desenvolvedora backend, developer relations e tech writer e estou fazendo lives na &lt;a href="https://www.twitch.tv/morgannadev" rel="nofollow noopener noreferrer"&gt;twitch&lt;/a&gt; sobre programação e outras coisas. Faço parte da equipe &lt;a href="https://www.twitch.tv/team/livecodergirls" rel="nofollow noopener noreferrer"&gt;Feministech&lt;/a&gt;
Em cada uma das nossas lives, iremos conhecer uma mulher do mundo da tecnologia. E, também, vamos registrar um resumo de suas histórias aqui.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;[0] Ada Lovelace&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;Nascida como Augusta Ada Byron King. Viveu entre 1815 e 1852. Foi a primeira pessoa (e não apenas a primeira mulher) a desenvolver um algoritmo que poderia ser implementado em um computador. Foi matemática, primeira pessoa programadora, poetisa, cientista da computação, inventora, tradutora, escritora e engenheira. Também é reconhecida pela comunidade de pessoas da área de qualidade como a primeira pessoa a identificar bugs em um algoritmo.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;[1] Grace Hopper&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;Grace Murray Hopper, viveu entre 1906 e 1992. Foi a criadora da linguagem de programação de…&lt;/p&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/morgannadev/mulherestecnologia" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Inclusive, nesse mesmo repositório, tem um arquivo com iniciativas e comunidades para mulheres no mundo todo. Conheça e compartilhe!&lt;/p&gt;

</description>
      <category>wecoded</category>
      <category>womenintech</category>
      <category>braziliandevs</category>
    </item>
    <item>
      <title>Dicas sobre desenvolvimento de automação com visão computacional</title>
      <dc:creator>Morganna</dc:creator>
      <pubDate>Sun, 17 Mar 2024 19:50:16 +0000</pubDate>
      <link>https://forem.com/botcitydev/dicas-sobre-desenvolvimento-de-automacao-com-visao-computacional-1132</link>
      <guid>https://forem.com/botcitydev/dicas-sobre-desenvolvimento-de-automacao-com-visao-computacional-1132</guid>
      <description>&lt;p&gt;Existem diversos casos de uso em que o desenvolvimento das automações RPA podem ter um melhor resultado utilizando o apoio da linguagem de programação Python e a tecnologia &lt;a href="https://blog.botcity.dev/pt-br/2023/11/28/visao-computacional/" rel="noopener noreferrer"&gt;visão computacional&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  O que é visão computacional
&lt;/h2&gt;

&lt;p&gt;A visão computacional é uma tecnologia que utiliza-se da Inteligência Artificial, Aprendizado de Máquina (ou Machine Learning) e reconhecimento óptico de caracteres (também conhecido como OCR) para desenvolver sistemas que possam interpretar e classificar imagens.&lt;/p&gt;

&lt;p&gt;Por trás dessa tecnologia, existem algoritmos capazes de entender padrões apenas visualizando imagens e vídeos. E isso pode ser um grande poder para nos ajudar a automatizar tarefas e processos que precisam acessar sistemas que nem sempre nos permitem acessar o backend da aplicação desktop ou ainda a DOM (Document Object Model de uma página HTML) de uma página Web e temos que partir para a visão computacional.&lt;/p&gt;

&lt;h2&gt;
  
  
  Como usar a visão computacional para desenvolver automações
&lt;/h2&gt;

&lt;p&gt;Vou deixar aqui como sugestão, um conteúdo bem interessante em formato de curso rápido com o passo a passo de como desenvolver a sua automação com visão computacional: &lt;a href="https://developers.botcity.dev/academy/pybr2022/" rel="noopener noreferrer"&gt;Criando automações com visão computacional&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;E como dica extra, vou deixar aqui também disponível acesso para a &lt;a href="https://documentation.botcity.dev/pt/studio/vscode/" rel="noopener noreferrer"&gt;documentação&lt;/a&gt; de maneira gratuita de uma extensão que está em pré-release que você pode utilizar no Visual Studio Code para desenvolver suas automações com o apoio dessa tecnologia, visão computacional.&lt;/p&gt;

&lt;h2&gt;
  
  
  Dicas sobre como resolver problemas ao desenvolver com visão computacional
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Elemento não encontrado
&lt;/h3&gt;

&lt;p&gt;Algo que pode ajudar na investigação de elementos não encontrados pela visão computacional, é utilizar o seguinte comando logo após chamar a função find() e antes de executar operações como o click():&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;bot&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;save_screenshot&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;debug_find.png&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Isso pode te ajudar a analisar como estava a tela e talvez te dar um direcionamento de qual é o motivo do elemento não estar sendo encontrado.&lt;/p&gt;

&lt;h3&gt;
  
  
  Resolução da tela
&lt;/h3&gt;

&lt;p&gt;Outra questão muito importante dentro do desenvolvimento com visão computacional é a resolução da tela. Caso esteja desenvolvendo uma automação que utiliza máquina virtual &lt;a href="https://blog.botcity.dev/pt-br/2024/03/01/como-construir-uma-automacao-desktop-em-python-para-acessar-vms-por-conexao-rdp/" rel="noopener noreferrer"&gt;acessando via RDP&lt;/a&gt;, você pode seguir algumas dicas do artigo linkado.&lt;/p&gt;

&lt;h3&gt;
  
  
  Sugestões para avaliar problemas
&lt;/h3&gt;

&lt;p&gt;Você pode analisar os pontos a seguir para descobrir o que pode estar acontecendo nas falhas do seu robô:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Talvez o período configurado no parâmetro &lt;code&gt;waiting_time&lt;/code&gt; da função &lt;code&gt;find()&lt;/code&gt; esteja muito curto e isso pode acontecer caso ainda não tenha dado tempo de carregar a tela, então você poderia ajustar esse item;&lt;/li&gt;
&lt;li&gt;Talvez o sistema sendo automatizado possua algum bloqueio contra captura de telas (esse tipo de problema pode ser bastante comum em telas que envolvam Bancos, por exemplo);&lt;/li&gt;
&lt;li&gt;Talvez algum outro elemento esteja na frente do elemento buscado, então a sugestão de tirar um print da tela citada acima, pode ajudar a entender se isso está acontecendo;&lt;/li&gt;
&lt;li&gt;Pode ser que o recorte foi feito com outra resolução que não a do sistema atual. Lembre-se de tentar desenvolver num ambiente igual ou ao menos o mais parecido possível, principalmente ao que se refere às configurações de resolução;&lt;/li&gt;
&lt;li&gt;Verifique se você está fazendo os recortes necessários em um ambiente com tema dark, por exemplo, porque isso pode fazer diferença se em outro momento, o ambiente estiver com o tema light;&lt;/li&gt;
&lt;li&gt;E outra dica seria verificar a acurácia do algoritmo de visão computacional. Na função &lt;code&gt;find()&lt;/code&gt;, ajuste, se necessário, o parâmetro &lt;code&gt;matching&lt;/code&gt;. Ele costuma estar com o valor máximo 0.97. Esse valor poderia ser ajustado a, no mínimo, 0.90. Isso pode ajudar nas questões levantadas neste tópico. Mas cuidado para não diminuir muito mais que isso, a ponto do algoritmo perder a sua eficiência para encontrar o elemento que precisa ser identificado.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Já fez alguma automação com visão computacional?
&lt;/h2&gt;

&lt;p&gt;Compartilhe suas experiências com essa forma de desenvolvimento e, caso tenha passado por algum problema ou erro, compartilhe também como solucionou ocorrido. Sempre bom aprender com experiências diferentes.&lt;/p&gt;

&lt;p&gt;E não deixe de participar da &lt;a href="https://documentation.botcity.dev/pt/community/" rel="noopener noreferrer"&gt;comunidade&lt;/a&gt; para mais trocas e conteúdos.&lt;/p&gt;

</description>
      <category>rpa</category>
      <category>braziliandevs</category>
      <category>automation</category>
      <category>visaocomputacional</category>
    </item>
    <item>
      <title>Como identificar problemas de ambiente ao tentar instalar BotCity Studio SDK</title>
      <dc:creator>Morganna</dc:creator>
      <pubDate>Tue, 12 Mar 2024 17:14:57 +0000</pubDate>
      <link>https://forem.com/botcitydev/como-identificar-problemas-de-ambiente-ao-tentar-instalar-botcity-studio-sdk-17k8</link>
      <guid>https://forem.com/botcitydev/como-identificar-problemas-de-ambiente-ao-tentar-instalar-botcity-studio-sdk-17k8</guid>
      <description>&lt;p&gt;Para utilizar qualquer tecnologia e/ou linguagem de programação, você deve preparar o ambiente para que seu código funcione adequadamente conforme você o desenvolve. E as orientações sobre como fazer isso, normalmente constam nas primeiras etapas da documentação dessa tecnologia.&lt;/p&gt;

&lt;p&gt;No caso do desenvolvimento de automações RPA com as ferramentas da BotCity também funciona dessa maneira. As orientações estão na &lt;a href="https://documentation.botcity.dev/getting-started/prerequisites/" rel="noopener noreferrer"&gt;documentação com os pré-requisitos&lt;/a&gt;. Mas dependendo do computador que estamos utilizando, pode ser que tenhamos algumas dificuldades para instalar algo.&lt;/p&gt;

&lt;p&gt;Isso pode acontecer por alguns motivos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;algumas tecnologias podem ter pré-requisitos para funcionar;&lt;/li&gt;
&lt;li&gt;alguns computadores podem ter bloqueios para instalar algo, caso você não seja a pessoa administradora da máquina.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Essas questões ressaltam quando estamos lidando com computadores que são da empresa na qual trabalhamos que, por segurança, adiciona bloqueios nesses equipamentos.&lt;/p&gt;

&lt;p&gt;Caso você esteja tentando preparar o ambiente para desenvolvimento de suas automações utilizando as ferramentas da BotCity e enfrente alguma dificuldade, é importante que você conheça também a &lt;a href="https://documentation.botcity.dev/getting-started/botcity-studio-sdk/#diagnostic-tool" rel="noopener noreferrer"&gt;ferramenta Diagnostic&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Essa ferramenta acompanha o mesmo pacote que você realiza o &lt;a href="https://documentation.botcity.dev/getting-started/botcity-studio-sdk/#download" rel="noopener noreferrer"&gt;download do Wizard para instalação do BotCity Studio SDK&lt;/a&gt;. Seu objetivo é validar se o ambiente atende os pré-requisitos para que você utilize esse SDK sem problemas e se é possível a instalação das ferramentas em seu computador, além de confirmar se será possível estabelecer uma conexão de sucesso com o BotCity Orquestrador.&lt;/p&gt;

&lt;h2&gt;
  
  
  Como executar o diagnóstico
&lt;/h2&gt;

&lt;p&gt;Ao fazer o dowload do BotCity Studio SDK, você terá uma pasta compactada chamada Wizard. Ao descompactá-la, um dos arquivos disponíveis será o &lt;code&gt;diagnostic.jar&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;⚠️ Para executar o Diagnostic no Linux ou no MacOS, é necessário ter o Java instalado. Se você for executar no ambiente Windows, pode executar sem essa preocupação.&lt;/p&gt;

&lt;p&gt;A janela do Diagnostic se abrirá e você deverá adicionar o seu login da conta criada para utilizar o SDK e o Orquestrador. No campo "Email" preencha o seu e-mail cadastrado e no campo "Password" adicione a sua senha. Após isso clique no botão localizado do lado direito da janela, chamado “Run”.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8e37cvcqao2o23jfwr3u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8e37cvcqao2o23jfwr3u.png" alt="Print da tela do Diagnostic ao ser aberto" width="800" height="459"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Caso você não preencha e-mail e senha, o Diagnostic não fará os testes de login com o Orquestrador, deixando essa informação como resultado do teste: "E-mail ou senha não informados. Essa etapa foi pulada".&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftbw1df9bvf4qzsyadnhc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftbw1df9bvf4qzsyadnhc.png" alt="Print do Diagnostic após execução sem o e-mail e sem a senha, com destaque na linha do teste " width="800" height="458"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Após clicar em "Run", o Diagnostic começará os testes do ambiente. Se terminar com tudo funcionando corretamente, uma janela de confirmação aparecerá em cima informando que o diagnóstico finalizou e que o sistema está pronto para o desenvolvimento.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy9riab307rudvtl4pag1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy9riab307rudvtl4pag1.png" alt="Print do Diagnostic após execução, quando mostra uma nova janela de confirmação de que os testes terminaram e que o sistema está pronto para desenvolvimento." width="800" height="457"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Status dos resultados do diagnóstico
&lt;/h2&gt;

&lt;p&gt;Pode ser que você perceba três diferentes status após a execução. São eles:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;PASS:&lt;/strong&gt; significa que o teste passou;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;FAIL:&lt;/strong&gt; significa que o teste falhou e será necessário averiguar o problema;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SKIP:&lt;/strong&gt; significa que o teste anterior com o SSL (certificado) habilitado, funcionou, então o Diagnostic não precisou executar um novo teste com o SSL desabilitado.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Caso receba o resultado FAIL em algum teste de conexão, possivelmente há algum bloqueio no ambiente que você está utilizando. E, neste caso, é necessário solicitar ao time responsável da empresa onde você trabalha, as liberações descritas na &lt;a href="https://documentation.botcity.dev/pt/getting-started/prerequisites/#problemas-com-bloqueios-do-ambiente" rel="noopener noreferrer"&gt;documentação de problemas com bloqueios de ambiente&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Como exportar o resultado dos testes
&lt;/h2&gt;

&lt;p&gt;Se for necessário, você pode exportar o resultado dos testes em formato .csv. Para fazer isso, clique no botão "Export" localizado na parte debaixo da janela, do lado direito. Feito isso, uma nova janela se abrirá para você ter acesso ao arquivo.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frt6utiwbht1xk57245cz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frt6utiwbht1xk57245cz.png" alt="Print do Diagnostic com a janela em cima para acesso ao arquivo csv criado a partir dos testes executados." width="800" height="454"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Ficou alguma dúvida?
&lt;/h2&gt;

&lt;p&gt;Você pode acessar o nosso &lt;a href="https://documentation.botcity.dev/pt/faq/" rel="noopener noreferrer"&gt;FAQ&lt;/a&gt; para dúvidas frequentes, ou ainda entrar em contato com a comunidade global no &lt;a href="https://join.slack.com/t/communitybotcitydev/shared_invite/zt-1yvjzlce9-esRSoWfAIXPse4L21bzjAQ" rel="noopener noreferrer"&gt;Slack&lt;/a&gt;. Caso prefira, também temos o &lt;a href="https://community.botcity.dev/" rel="noopener noreferrer"&gt;fórum&lt;/a&gt; disponível para dúvidas.&lt;/p&gt;

</description>
      <category>braziliandevs</category>
      <category>botcity</category>
      <category>automation</category>
      <category>rpa</category>
    </item>
    <item>
      <title>Para quem é a sua homenagem para mulheres na tecnologia?</title>
      <dc:creator>Morganna</dc:creator>
      <pubDate>Fri, 08 Mar 2024 18:21:57 +0000</pubDate>
      <link>https://forem.com/feministech/para-quem-e-a-sua-homenagem-para-mulheres-na-tecnologia-1aoo</link>
      <guid>https://forem.com/feministech/para-quem-e-a-sua-homenagem-para-mulheres-na-tecnologia-1aoo</guid>
      <description>&lt;p&gt;Vamos refletir um pouco sobre essa questão. Quando você pensa em mulher na tecnologia, o que vem a sua mente? E essa pergunta é importante para todes.&lt;/p&gt;

&lt;p&gt;O seu pensamento de diversidade está incluindo quais mulheres? As brancas? As negras? As indígenas? As pardas? As amarelas? As mulheres dos mais diversos tipos de corpos?&lt;/p&gt;

&lt;p&gt;Você só considera as mulheres cis? E as mulheres trans? Você lembra das mulheres com deficiência? Tem considerado as mulheres mais velhas e não apenas as mais jovens? E as mulheres que são mães? Ou que querem ser mães? Ou que não querem ser?&lt;/p&gt;

&lt;p&gt;E aquelas que querem começar uma nova carreira na área, que tipo de suporte e oportunidade elas tem recebido da sociedade, das comunidades e do mercado?&lt;/p&gt;

&lt;p&gt;Já parou para pensar se a sua homenagem ao dia das mulheres e às mulheres da tecnologia inclui aquelas que são do norte ou nordeste do país? Ou de quaisquer outras regiões do Brasil e do mundo?&lt;/p&gt;

&lt;p&gt;Você homenageia também, com as suas palavras e emoções, as mulheres que creem em religiões diferentes das suas? Culturas e verdades diferentes das suas? Você se lembra de todas as raças? Todas as cores? Todas as histórias e experiências diferentes das suas?&lt;/p&gt;

&lt;p&gt;E as mulheres LGBTQIAP+? Também fazem parte de toda a compaixão que você demonstra todo dia 8 de março ou elas estão apenas nas suas piadas sexistas com aquele seu grupinho racista, machista e misógino?&lt;/p&gt;

&lt;p&gt;Quando foi que você se lembrou, de verdade, das mulheres de baixa renda? As que sofrem com a miséria das mais diversas formas? As que sofrem constantes violências? E as mulheres que você chama de loucas só porque elas lutam para conquistarem algo que já deveria ser delas?&lt;/p&gt;

&lt;p&gt;Muitas pessoas por aí perguntam o que fazer para solucionar "o problema da falta de diversidade nas empresas" e em tantos outros lugares na sociedade. Como mudar a diversidade se raramente conseguimos encontrar lugares nos quais realmente nos sentimos pertencentes? Como mudar a diversidade se nem mesmo a nossa vida é respeitada? Como mudar a diversidade se não fazemos o exercício de perceber quem está ao nosso lado?&lt;/p&gt;

&lt;p&gt;Ainda temos raízes muito profundas para quebrar. E apenas um "feliz dia da mulher" não alimenta a diversidade. Apenas uma "vaga para mulheres na empresa" não é uma oportunidade saudável. Precisamos ir muito além como sociedade para que deixemos de ser vistas como nos veem hoje: ou somos um nada, ou somos alguém para servir de token para o seu falso papo de diversidade, ou somos alvo de todo tipo de violência.&lt;/p&gt;

&lt;p&gt;Como já disse, ainda temos raízes muito profundas para quebrar. &lt;strong&gt;Que continuemos sendo todas loucas o suficiente para quebrarmos cada uma dessas raízes.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>wecoded</category>
      <category>braziliandevs</category>
      <category>diversity</category>
      <category>community</category>
    </item>
    <item>
      <title>Como identificar se a automação está executando localmente ou no BotCity Orquestrador?</title>
      <dc:creator>Morganna</dc:creator>
      <pubDate>Wed, 06 Mar 2024 20:31:41 +0000</pubDate>
      <link>https://forem.com/botcitydev/como-identificar-se-a-automacao-esta-executando-localmente-ou-no-botcity-orquestrador-3kh8</link>
      <guid>https://forem.com/botcitydev/como-identificar-se-a-automacao-esta-executando-localmente-ou-no-botcity-orquestrador-3kh8</guid>
      <description>&lt;h2&gt;
  
  
  A dúvida surgiu
&lt;/h2&gt;

&lt;p&gt;Enquanto estávamos em nossa &lt;a href="https://www.youtube.com/live/VCOYDfLRhoY?si=ZA1kITat9XfnnAJm" rel="noopener noreferrer"&gt;live coding&lt;/a&gt; desenvolvendo uma automação com Python e fazendo integração com e-mail e Google Sheets, surgiu uma dúvida:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Como identificar se a automação está executando localmente ou no BotCity Orquestrador?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Essa dúvida surgiu por causa da seguinte situação: quando estamos executando nossa automação localmente, ou seja, em nosso computador ou máquina virtual, e queremos conectá-la com o &lt;a href="https://developers.botcity.dev/" rel="noopener noreferrer"&gt;BotCity Orquestrador&lt;/a&gt;, precisamos utilizar o BotCity Maestro SDK para fazer login na plataforma. Mas quando fazemos deploy no Orquestrador, esse trecho de código para o login não precisa existir.&lt;/p&gt;

&lt;h2&gt;
  
  
  Exemplo prático
&lt;/h2&gt;

&lt;p&gt;Criei um robô seguindo a &lt;a href="https://documentation.botcity.dev/pt/tutorials/python-automations/web/" rel="noopener noreferrer"&gt;documentação do framework web&lt;/a&gt; para exemplo. Abaixo temos o código principal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Import for the Web Bot
&lt;/span&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;botcity.web&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;WebBot&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Browser&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;By&lt;/span&gt;

&lt;span class="c1"&gt;# Import for integration with BotCity Maestro SDK
&lt;/span&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;botcity.maestro&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;

&lt;span class="c1"&gt;# Disable errors if we are not connected to Maestro
&lt;/span&gt;&lt;span class="n"&gt;BotMaestroSDK&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RAISE_NOT_CONNECTED&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;


&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="c1"&gt;# Runner passes the server url, the id of the task being executed,
&lt;/span&gt;    &lt;span class="c1"&gt;# the access token and the parameters that this task receives (when applicable).
&lt;/span&gt;    &lt;span class="n"&gt;maestro&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;BotMaestroSDK&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;from_sys_args&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="c1"&gt;## Fetch the BotExecution with details from the task, including parameters
&lt;/span&gt;    &lt;span class="n"&gt;execution&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;maestro&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_execution&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Task ID is: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;execution&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;task_id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Task Parameters are: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;execution&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;parameters&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;bot&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;WebBot&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="c1"&gt;# Configure whether or not to run on headless mode
&lt;/span&gt;    &lt;span class="n"&gt;bot&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;headless&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;

    &lt;span class="c1"&gt;# Uncomment to change the default Browser to Firefox
&lt;/span&gt;    &lt;span class="c1"&gt;# bot.browser = Browser.FIREFOX
&lt;/span&gt;
    &lt;span class="c1"&gt;# Uncomment to set the WebDriver path
&lt;/span&gt;    &lt;span class="c1"&gt;# bot.driver_path = "&amp;lt;path to your WebDriver binary&amp;gt;"
&lt;/span&gt;
    &lt;span class="c1"&gt;# Opens the BotCity website.
&lt;/span&gt;    &lt;span class="n"&gt;bot&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;browse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://www.botcity.dev&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# Implement here your logic...
&lt;/span&gt;    &lt;span class="bp"&gt;...&lt;/span&gt;

    &lt;span class="c1"&gt;# Wait 3 seconds before closing
&lt;/span&gt;    &lt;span class="n"&gt;bot&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;wait&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# Finish and clean up the Web Browser
&lt;/span&gt;    &lt;span class="c1"&gt;# You MUST invoke the stop_browser to avoid
&lt;/span&gt;    &lt;span class="c1"&gt;# leaving instances of the webdriver open
&lt;/span&gt;    &lt;span class="n"&gt;bot&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stop_browser&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="c1"&gt;# Uncomment to mark this task as finished on BotMaestro
&lt;/span&gt;    &lt;span class="c1"&gt;# maestro.finish_task(
&lt;/span&gt;    &lt;span class="c1"&gt;#     task_id=execution.task_id,
&lt;/span&gt;    &lt;span class="c1"&gt;#     status=AutomationTaskFinishStatus.SUCCESS,
&lt;/span&gt;    &lt;span class="c1"&gt;#     message="Task Finished OK."
&lt;/span&gt;    &lt;span class="c1"&gt;# )
&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;not_found&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;label&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Element not found: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;label&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;


&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;__main__&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E assim fica o código do &lt;code&gt;requirements.txt&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;botcity-framework-web&amp;gt;=0.8.0,&amp;lt;1.0
botcity-maestro-sdk&amp;gt;=0.3.3,&amp;lt;1.0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O que eu fiz para poder executar esse código, foi descomentar a linha:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;bot&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;browser&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Browser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;FIREFOX&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E adicionar o &lt;a href="https://github.com/mozilla/geckodriver/releases" rel="noopener noreferrer"&gt;geckodriver&lt;/a&gt; na configuração do WebDriver, deixando-o na pasta &lt;code&gt;resources&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;bot&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;driver_path&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;r&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;resources\geckodriver.exe&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Esse bot é apenas um exemplo e o que ele faz ao ser executado é abrir o navegador Firefox (poderia ter sido o Chrome, Edge, entre outros) com o site da &lt;a href="https://www.botcity.dev/" rel="noopener noreferrer"&gt;BotCity&lt;/a&gt; e, depois de três segundos, fecha o navegador.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conexão com BotCity Orquestrador
&lt;/h2&gt;

&lt;p&gt;Se você precisar se conectar com a plataforma para orquestração, você precisará adicionar o seguinte código para fazer &lt;a href="https://documentation.botcity.dev/pt/maestro/maestro-sdk/setup/#estabelecendo-uma-conexao-com-o-maestro" rel="noopener noreferrer"&gt;login no BotCity Orquestrador&lt;/a&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;maestro&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;login&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;server&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;MAESTRO_SERVER&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
    &lt;span class="n"&gt;login&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;MAESTRO_LOGIN&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
    &lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;MAESTRO_KEY&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Por serem dados sensíveis, uma saída para ocultar os dados é utilizando &lt;code&gt;dotenv&lt;/code&gt; do Python e o OS. Para isso, basta importar da seguinte forma:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;dotenv&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;load_dotenv&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;

&lt;span class="bp"&gt;...&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="nf"&gt;load_dotenv&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="bp"&gt;...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E no arquivo &lt;code&gt;requirements.txt&lt;/code&gt; precisa adicionar a biblioteca dotenv:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;botcity-framework-web&amp;gt;=0.8.0,&amp;lt;1.0
botcity-maestro-sdk&amp;gt;=0.3.3,&amp;lt;1.0

python-dotenv
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Além disso também é necessário termos um arquivo chamado &lt;code&gt;.env&lt;/code&gt;, pois é de lá que o código buscará as informações. E esse arquivo ficará da seguinte forma:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;MAESTRO_SERVER = "coloque o server aqui"
MAESTRO_LOGIN = "coloque o login aqui"
MAESTRO_KEY = "coloque a key aqui"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Essas informações ficam disponíveis em &lt;a href="https://documentation.botcity.dev/pt/maestro/features/dev-environment/" rel="noopener noreferrer"&gt;Dev. Environment&lt;/a&gt;, no BotCity Orquestrador.&lt;/p&gt;

&lt;p&gt;OBS: É importante lembrar de não disponibilizar o &lt;code&gt;.env&lt;/code&gt; ao versionar em plataformas como o GitHub, Gitlab, entre outras. Para facilitar, adicione &lt;code&gt;.env&lt;/code&gt; ao arquivo &lt;code&gt;.gitignore&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Qual a diferença entre o ambiente local e o orquestrador
&lt;/h2&gt;

&lt;p&gt;Quando executamos nossa automação dentro do Orquestrador, uma tarefa é criada, atrelada a automação que fizemos o deploy, então por ele nós temos o ID da tarefa (ou task_id). Já no ambiente local, não temos essa informação.&lt;/p&gt;

&lt;h2&gt;
  
  
  Como validar em qual ambiente está sendo executado
&lt;/h2&gt;

&lt;p&gt;Então podemos, por exemplo, fazer a seguinte validação: se task_id for igual a 0, estamos executando localmente e precisamos fazer o processo de login com o Orquestrador. Caso contrário, o task_id existe e, então, não precisamos fazer o login.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="bp"&gt;...&lt;/span&gt;
    &lt;span class="n"&gt;maestro&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;BotMaestroSDK&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;from_sys_args&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="c1"&gt;## Fetch the BotExecution with details from the task, including parameters
&lt;/span&gt;    &lt;span class="n"&gt;execution&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;maestro&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_execution&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="nf"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;execution&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;task_id&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Running locally so we need to login to BotCity Orchestrator.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;maestro&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;login&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;server&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getenv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;MAESTRO_SERVER&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; 
            &lt;span class="n"&gt;login&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getenv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;MAESTRO_LOGIN&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; 
            &lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getenv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;MAESTRO_KEY&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Running with BotCity Orchestrator.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="bp"&gt;...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Execução local
&lt;/h2&gt;

&lt;p&gt;Ao testar a execução do robô localmente, percebemos que retorna a mensagem correta no terminal:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8tf95sjajig9fygf2vvl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8tf95sjajig9fygf2vvl.png" alt="print do terminal do Visual Studio Code com foco na mensagem " width="800" height="110"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Execução no Orquestrador
&lt;/h2&gt;

&lt;p&gt;Ao testar a execução do robô no Orquestrador, percebemos que retorna a mensagem correta no terminal:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqjbaic64yhy0pkix4sj7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqjbaic64yhy0pkix4sj7.png" alt="print do log do Runner com foco na mensagem " width="800" height="493"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Código completo
&lt;/h2&gt;

&lt;p&gt;Caso queira validar como ficou o código principal completo, segue abaixo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Import for the Web Bot
&lt;/span&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;botcity.web&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;WebBot&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Browser&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;By&lt;/span&gt;

&lt;span class="c1"&gt;# Import for integration with BotCity Maestro SDK
&lt;/span&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;botcity.maestro&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;

&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;dotenv&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;load_dotenv&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;

&lt;span class="c1"&gt;# Disable errors if we are not connected to Maestro
&lt;/span&gt;&lt;span class="n"&gt;BotMaestroSDK&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RAISE_NOT_CONNECTED&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;


&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="nf"&gt;load_dotenv&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="c1"&gt;# Runner passes the server url, the id of the task being executed,
&lt;/span&gt;    &lt;span class="c1"&gt;# the access token and the parameters that this task receives (when applicable).
&lt;/span&gt;    &lt;span class="n"&gt;maestro&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;BotMaestroSDK&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;from_sys_args&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="c1"&gt;## Fetch the BotExecution with details from the task, including parameters
&lt;/span&gt;    &lt;span class="n"&gt;execution&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;maestro&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_execution&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="nf"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;execution&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;task_id&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Running locally so we need to login to BotCity Orchestrator.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;maestro&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;login&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;server&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getenv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;MAESTRO_SERVER&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; 
            &lt;span class="n"&gt;login&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getenv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;MAESTRO_LOGIN&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; 
            &lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getenv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;MAESTRO_KEY&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Running with BotCity Orchestrator.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;bot&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;WebBot&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="c1"&gt;# Configure whether or not to run on headless mode
&lt;/span&gt;    &lt;span class="n"&gt;bot&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;headless&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;

    &lt;span class="c1"&gt;# Uncomment to change the default Browser to Firefox
&lt;/span&gt;    &lt;span class="n"&gt;bot&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;browser&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Browser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;FIREFOX&lt;/span&gt;

    &lt;span class="c1"&gt;# Uncomment to set the WebDriver path
&lt;/span&gt;    &lt;span class="n"&gt;bot&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;driver_path&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;r&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;resources\geckodriver.exe&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

    &lt;span class="c1"&gt;# Opens the BotCity website.
&lt;/span&gt;    &lt;span class="n"&gt;bot&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;browse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://www.botcity.dev&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# Implement here your logic...
&lt;/span&gt;    &lt;span class="bp"&gt;...&lt;/span&gt;

    &lt;span class="c1"&gt;# Wait 3 seconds before closing
&lt;/span&gt;    &lt;span class="n"&gt;bot&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;wait&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# Finish and clean up the Web Browser
&lt;/span&gt;    &lt;span class="c1"&gt;# You MUST invoke the stop_browser to avoid
&lt;/span&gt;    &lt;span class="c1"&gt;# leaving instances of the webdriver open
&lt;/span&gt;    &lt;span class="n"&gt;bot&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stop_browser&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="c1"&gt;# Uncomment to mark this task as finished on BotMaestro
&lt;/span&gt;    &lt;span class="n"&gt;maestro&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;finish_task&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;task_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;execution&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;task_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;AutomationTaskFinishStatus&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;SUCCESS&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Task Finished OK.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;


&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;not_found&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;label&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Element not found: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;label&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;


&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;__main__&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  O que achou?
&lt;/h2&gt;

&lt;p&gt;Espero que tenha curtido a dica e possa adaptá-la de acordo com a necessidade da sua execução. Qualquer dúvida, basta entrar em contato pela nossa &lt;a href="https://documentation.botcity.dev/pt/community/" rel="noopener noreferrer"&gt;comunidade&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>rpa</category>
      <category>automation</category>
      <category>python</category>
      <category>braziliandevs</category>
    </item>
    <item>
      <title>The Zen of Python - um olhar sobre a filosofia do Python</title>
      <dc:creator>Morganna</dc:creator>
      <pubDate>Sat, 03 Feb 2024 15:12:12 +0000</pubDate>
      <link>https://forem.com/feministech/the-zen-of-python-um-olhar-sobre-a-filosofia-do-python-16ai</link>
      <guid>https://forem.com/feministech/the-zen-of-python-um-olhar-sobre-a-filosofia-do-python-16ai</guid>
      <description>&lt;p&gt;Cada linguagem de programação pode ter suas próprias regras e até mesmo uma filosofia para manter as boas práticas e a sua identidade. E a linguagem Python também tem a sua. Em inglês é chamada de "&lt;em&gt;The Zen of Python&lt;/em&gt;" e você pode conhecê-la pesquisando por aí na internet ou ainda executando um comando diretamente no seu código.&lt;/p&gt;

&lt;h2&gt;
  
  
  Executando o comando para ver os princípios
&lt;/h2&gt;

&lt;p&gt;Para poder descobrir quais são os princípios da filosofia do Python, você pode executar eu seu código o seguinte comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;this&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ao executar este comando, em seu terminal vai aparecer o seguinte texto:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;The Zen of Python, by Tim Peters

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Entendendo a tradução de "&lt;em&gt;The Zen of Python&lt;/em&gt;"
&lt;/h2&gt;

&lt;p&gt;Em português, os tópicos da filosofia da linguagem de programação Python seria:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Bonito é melhor que feio.
Explícito é melhor que implícito.
Simples é melhor que complexo.
Complexo é melhor que complicado.
Plano é melhor que aglomerado.
Esparso é melhor que denso.
Legibilidade faz diferença.
Casos especiais não são especiais o bastante para quebrar as regras.
Embora a praticidade vença a pureza.
Erros nunca devem passar silenciosamente.
A menos que sejam explicitamente silenciados.
Diante da ambiguidade, recuse a tentação de adivinhar.
Deve haver um -- e preferencialmente só um -- modo óbvio para fazer algo.
Embora esse modo possa não ser óbvio à primeira vista a menos que você seja holandês.
Agora é melhor que nunca.
Embora nunca frequentemente seja melhor que *exatamente* agora.
Se a implementação é difícil de explicar, é uma má ideia.
Se a implementação é fácil de explicar, pode ser uma boa ideia.
Namespaces são uma grande ideia -- vamos fazer mais dessas!
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Quem é Tim Peters
&lt;/h2&gt;

&lt;p&gt;Quem criou a linguagem de programação Python foi &lt;strong&gt;Guido van Rossum&lt;/strong&gt;, então talvez pareça estranho ter um  outro nome ali na apresentação desse easter egg que é &lt;em&gt;The Zen of Python&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Tim Peters é um desenvolvedor de software conhecido por suas contribuições à linguagem Python - já recebeu o prêmio PSF Distinguished Service Award pela Python Software Foundation - e por ter criado um algoritmo chamado Timsort.&lt;/p&gt;

&lt;p&gt;Quando Tim disponibilizou esses 19 princípios, ele tinha a ideia de que o próprio Guido criaria o 20º item da filosofia, que na verdade nunca foi feita.&lt;/p&gt;

&lt;h2&gt;
  
  
  O que significam os 19 itens em "&lt;em&gt;The Zen of Python&lt;/em&gt;"
&lt;/h2&gt;

&lt;p&gt;Conforme a gente lê esses princípios, pode parecer um pouco confuso ou até contraditório, mas conforme vamos evoluindo em nossos aprendizados de Python, talvez alguns itens fiquem mais claros.&lt;/p&gt;

&lt;p&gt;No site da wiki da comunidade Python Brasil tem um link para uma tentativa de &lt;a href="https://wiki.python.org.br/TheZenOfPythonExplained" rel="noopener noreferrer"&gt;explicação de &lt;em&gt;The Zen of Python&lt;/em&gt;&lt;/a&gt;, resultado de um e-mail, porque conforme a própria comunidade afirma, talvez qualquer explicação seja um pouco incompleta sobre todos os 19 itens.&lt;/p&gt;

&lt;p&gt;Quero compartilhar aqui um pouco do que penso sobre esses itens - e na minha visão, parece que tudo está relacionado a legibilidade - e gostaria de saber a sua opinião nos comentários!&lt;/p&gt;

&lt;p&gt;Reforço que trarei uma interpretação minha. Não estou dizendo que é o certo ou errado. A ideia é termos a discussão sobre a filosofia de maneira saudável.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Bonito é melhor que feio.
&lt;/h3&gt;

&lt;p&gt;Acredito que este item esteja muito relacionado a legibilidade e facilidade de se entender a linguagem Python, ainda que um código bonito possa ser algo relativo.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Explícito é melhor que implícito.
&lt;/h3&gt;

&lt;p&gt;Entendo que esse item poderia ser parte de todas as linguagens. E, novamente, interpreto que esteja muito relacionado a legibilidade do Python. Por exemplo, ao invés de misturar diversos itens de cálculo ou outras operações, por que não separar em funções com nomes explícitos e fazer o código ser mais fácil de ser lido?&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Simples é melhor que complexo.
&lt;/h3&gt;

&lt;p&gt;Sempre tem formas complexas de se escrever um código. E conforme a gente evolui na linguagem, a gente vai aprendendo essas formas. Mas nem sempre elas serão legíveis para quem vai ler o código pela primeira vez. Ou ainda reler o código depois de um tempo sem mexer nele.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Complexo é melhor que complicado.
&lt;/h3&gt;

&lt;p&gt;Mesmo ponto que eu trouxe no item 3. Pode ser legal aprender formas complexas de se escrever um código e resolver 5 linhas em apenas 1. Mas e como vai ser possível entender aquele código depois?&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Plano é melhor que aglomerado.
&lt;/h3&gt;

&lt;p&gt;Esse aqui eu não tinha entendido muito bem, mas ao pesquisar sobre ele, vi que a maioria das pessoas relacionou este item a organização do código. O que faz bastante sentido. Ao invés de colocar tudo de uma vez dentro de uma única função ou dentro de um único arquivo, talvez seja mais interessante organizar melhor as estruturas (quem sabe até mesmo semanticamente).&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Esparso é melhor que denso.
&lt;/h3&gt;

&lt;p&gt;Confesso que também não tinha entendido muito este aqui. Mas ao pesquisar, entendi que tem relação à densidade e quantidade de código que pode ser colocado em uma determinada função, por exemplo. Talvez seja melhor quebrar em mais linhas para deixar mais legível. (Legibilidade de novo, tá vendo?).&lt;/p&gt;

&lt;h3&gt;
  
  
  7. Legibilidade faz diferença.
&lt;/h3&gt;

&lt;p&gt;E falando em legibilidade, no meu ponto de vista esse é o centro de todos os itens levantados nessa filosofia. Até mesmo porque, o Python também é bastante conhecido pela facilidade de leitura de código, justamente pela forma como é escrito. E isso faz diferença para todes, não só para quem está começando, mas mesmo para você que talvez já tenha bastante experiência e precisará revisitar códigos legados para manutenção. Nada pior do que olhar para um código e não entender &lt;em&gt;bulhufas&lt;/em&gt; do que ele quer dizer, né?&lt;/p&gt;

&lt;h3&gt;
  
  
  8. Casos especiais não são especiais o bastante para quebrar as regras.
&lt;/h3&gt;

&lt;p&gt;Às vezes dá uma certa vontade de fazer de qualquer jeito um determinado caso em nosso código só para evitar trabalho de ter que seguir boas práticas ou regras de um determinado projeto em que estamos envolvides. Isso pode ser uma grande armadilha, talvez em algumas situações, valha mais a pena seguir as regras.&lt;/p&gt;

&lt;h3&gt;
  
  
  9. Embora a praticidade vença a pureza.
&lt;/h3&gt;

&lt;p&gt;Continuidade do item 8, né? E é engraçado que tenha a palavra "pureza" nele.&lt;/p&gt;

&lt;h3&gt;
  
  
  10. Erros nunca devem passar silenciosamente.
&lt;/h3&gt;

&lt;p&gt;Olha, uma excelente boa prática é termos as exceções mapeadas em nossos códigos e com mensagens apropriadas para elas. Erros vão acontecer e é importante nesses momentos entender o que, de fato, está acontecendo. Isso ajuda a gente que está desenvolvendo e também quem vai usar o sistema no final.&lt;/p&gt;

&lt;h3&gt;
  
  
  11. A menos que sejam explicitamente silenciados.
&lt;/h3&gt;

&lt;p&gt;Mas aí a gente tem que saber que está assumindo um risco. Tudo bem que alguns riscos são aceitáveis. Então acho que é mais entender como gerenciar isso da melhor forma, de acordo com a criticidade do sistema.&lt;/p&gt;

&lt;h3&gt;
  
  
  12. Diante da ambiguidade, recuse a tentação de adivinhar.
&lt;/h3&gt;

&lt;p&gt;A gente tem uma mania muito louca de querer adivinhar as coisas ao invés de olhar diretamente o que está acontecendo, às vezes. Então pare, olhe os erros com calma. Pratique a arte de debugar seu código quando necessário. Melhor ir direto na fonte.&lt;/p&gt;

&lt;h3&gt;
  
  
  13. Deve haver um -- e preferencialmente só um -- modo óbvio para fazer algo.
&lt;/h3&gt;

&lt;p&gt;Complicada essa parte aqui da filosofia. Acho que ele quis dizer que deveria ter uma forma de fazer isso e, parece que também foi uma provocação as outras linguagens de programação pelo que vi em outras pesquisas. Mas existem mesmo tantas formas de resolver um mesmo problema que não sei se esse item deveria mesmo fazer parte de &lt;em&gt;The Zen of Python&lt;/em&gt;. De qualquer forma, acho que entendo. Querem tanto que a legibilidade e a simplicidade do Python seja óbvia, que na visão de quem criou essa filosofia o mais simples é sempre o melhor.&lt;/p&gt;

&lt;h3&gt;
  
  
  14. Embora esse modo possa não ser óbvio à primeira vista a menos que você seja holandês.
&lt;/h3&gt;

&lt;p&gt;Aqui eu não sei se era também pra ser algum tipo de provocação, mas confesso que prefiro deixar este item de lado.&lt;/p&gt;

&lt;h3&gt;
  
  
  15. Agora é melhor que nunca.
&lt;/h3&gt;

&lt;p&gt;Talvez pareça um tanto quanto contraditório, mas eu interpreto que este item queira mostrar pra gente que devemos resolver um código logo e na hora ao invés de ficar complicando. Fazer algo mais prático para resolver o problema. A parte do contraditório talvez seja porque pareça que estamos falando "faz de qualquer jeito e depois marca lá a melhoria como débito técnico". Mas, de novo, a galera defende tanto a simplicidade e legibilidade do Python que talvez tenha sido mais nesse ponto que estavam tocando e não na "entrega de qualquer jeito".&lt;/p&gt;

&lt;h3&gt;
  
  
  16. Embora nunca frequentemente seja melhor que &lt;em&gt;exatamente&lt;/em&gt; agora.
&lt;/h3&gt;

&lt;p&gt;Entendo mais como um complemento do item 15. Porque aí sim reforça toda a ideia de fazer o código da melhor forma possível: simples, legível, funções claras e objetivas etc.&lt;/p&gt;

&lt;h3&gt;
  
  
  17. Se a implementação é difícil de explicar, é uma má ideia.
&lt;/h3&gt;

&lt;p&gt;Acho que este item é bem claro. E continua dando mais força a ideia de que é melhor pensar com calma e talvez escrever o código de outras formas ao invés de resolver tudo numa linha única e que ninguém vai entender depois. É só um exemplo, mas acho que você entendeu.&lt;/p&gt;

&lt;h3&gt;
  
  
  18. Se a implementação é fácil de explicar, pode ser uma boa ideia.
&lt;/h3&gt;

&lt;p&gt;E é legal como este ponto foi colocado como "pode ser uma boa ideia" e não uma afirmação concreta e sem dúvidas como "é uma boa ideia". Até porque simplicidade também pode ser algo relativo, certo? Nem sempre o simples é igual para todes. E se for um trabalho em time talvez seja interessante ter essa discussão para definir a melhor forma de desenvolver uma solução.&lt;/p&gt;

&lt;h3&gt;
  
  
  19. Namespaces são uma grande ideia -- vamos fazer mais dessas!
&lt;/h3&gt;

&lt;p&gt;Organização e semântica pode fazer toda a diferença, principalmente para separar contextos em seu projeto. Então acredito que seja isso que esteja sendo enfatizado aqui.&lt;/p&gt;

&lt;h2&gt;
  
  
  Devo seguir todos os 19 itens de &lt;em&gt;The Zen of Code&lt;/em&gt;?
&lt;/h2&gt;

&lt;p&gt;Depende. (Sênior o suficiente essa resposta?). A gente vive estudando boas práticas em diversos aspectos de projetos de software, mas muitas vezes ao chegar no mercado de trabalho, tudo isso é ignorado.&lt;/p&gt;

&lt;p&gt;Isso significa que devo ignorar as boas práticas? Não. Mas é só uma reflexão de que, às vezes, a entrega precisa ser feita para ontem. E a realidade do dia-a-dia de uma pessoa desenvolvedora pode ser bastante relativa.&lt;/p&gt;

&lt;p&gt;Existem projetos que você, talvez, terá a oportunidade de proporcionar legibilidade e qualidade ao seu código. E isso poderá fazer toda a diferença na sua vida profissional. Mas é importante alinharmos aqui as expectativas de que nem sempre será assim. Infelizmente. Mas isso é discussão para um outro artigo ou um papo no bar com a comunidade.&lt;/p&gt;




&lt;p&gt;O que achou? Curtiu? Deixe suas impressões também nos comentários e bora discutir mais sobre esse assunto!&lt;/p&gt;

&lt;p&gt;Nos encontramos nos comentários e, quem sabe, nos próximos artigos. Até lá!&lt;/p&gt;

</description>
      <category>braziliandevs</category>
      <category>programming</category>
      <category>python</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Como se tornar uma pessoa desenvolvedora em 2024?</title>
      <dc:creator>Morganna</dc:creator>
      <pubDate>Mon, 01 Jan 2024 17:23:56 +0000</pubDate>
      <link>https://forem.com/feministech/como-se-tornar-uma-pessoa-desenvolvedora-em-2024-2lk0</link>
      <guid>https://forem.com/feministech/como-se-tornar-uma-pessoa-desenvolvedora-em-2024-2lk0</guid>
      <description>&lt;p&gt;Vamos começar dizendo que a receita de bolo com sabor de sucesso, cobertura de certezas e recheio de dinheiro infinito não existe, beleza? O que existe são diversos caminhos que diferentes pessoas podem percorrer e ainda assim alcançar o desejo de ser uma pessoa desenvolvedora.&lt;br&gt;
E o que existe também é muito esforço, estudo, prática e dedicação para alcançar esse objetivo. Mas quero deixar claro que não tenho interesse em te desanimar com essa introdução. Na verdade, tudo o que eu quero é que você saiba onde está colocando os pés. Esses mares não são calmos e é bastante importante você ter ciência disso, concorda?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffh2wf00yy582rf0rlxrr.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffh2wf00yy582rf0rlxrr.gif" alt="Gif de um desenho animado mostrando um bule colocando líquido numa xícara e aos poucos aparece a frase " width="500" height="281"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  É possível ser uma pessoa desenvolvedora apesar das dificuldades
&lt;/h2&gt;

&lt;p&gt;Eu sei que a dose de realidade assusta um pouco, mas eu também quero deixar muito claro que é bastante possível ser uma pessoa desenvolvedora. Existem formas de alcançar o objetivo e vamos falar sobre algumas delas por aqui.&lt;br&gt;
De qualquer forma, não se esqueça de que essa é uma área que vai te exigir estudar muito, se dedicar, praticar o que está estudando e não achar que vai aprender por osmose ou apenas assistindo vídeos e/ou lendo artigos e livros. Sem mão na massa, você não vai conseguir dar os próximos passos de cada etapa para evoluir.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo8tyqan8o9ltnysnbdpf.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo8tyqan8o9ltnysnbdpf.gif" alt="Gif que mostra um homem falando e movimentando as mãos com o texto na frente " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Não acredite em milagres
&lt;/h2&gt;

&lt;p&gt;O que eu quero dizer com isso: não acredite em cursos que dizem que num passe de mágica, você aprenderá a programar em um mês. Ou dois. Ou três. Estudar programação leva tempo. Entender como as coisas funcionam leva tempo. E o seu tempo pode ser bem diferente de outras pessoas. Então não se compare.&lt;br&gt;
E não perca seu tempo com cursos que prometem o tal do milagre. "&lt;em&gt;Mas, Morganna, fulane aprendeu em um mês...&lt;/em&gt;". Será que aprendeu mesmo? E mesmo que tenha aprendido. Ótimo para fulane. Não se culpe se você levar mais tempo que isso para aprender. &lt;strong&gt;Cada pessoa tem um processo de aprendizado e isso não é uma coisa ruim.&lt;/strong&gt; É melhor você se dedicar em aprender do seu jeito que se iludir com contos inalcançáveis e experiências diferentes das tuas.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy6pe1uygd4feotyguvsr.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy6pe1uygd4feotyguvsr.gif" alt="Gif de desenhos de pessoas diferentes, uma cena de cada vez, mostrando uma pessoa estudando com livros e computador." width="500" height="281"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  O que estudar
&lt;/h2&gt;

&lt;p&gt;Nem todas as pessoas podem ter o privilégio de estudar em uma faculdade ou universidade, onde provavelmente poderia encontrar um roteiro de estudos melhor definido e com acompanhamento de pessoas professoras para dar o apoio necessário quando dúvidas e dificuldades surgirem.&lt;br&gt;
Mas alguns tópicos para os primeiros passos podem ser bastante importantes. E aqui, além do que muitas pessoas trazem sobre estudar "lógica de programação", também quero trazer mais alguns pontos.&lt;/p&gt;

&lt;h3&gt;
  
  
  Busque uma rede de apoio e/ou comunidade
&lt;/h3&gt;

&lt;p&gt;Vai ser importante ter ao seu redor pessoas que vão te apoiar, ajudar nas dificuldades, até mesmo alguém para tirar dúvidas e desabafar. &lt;strong&gt;Então, se puder, junte-se a uma comunidade que você se sinta bem e pertencente aquele espaço.&lt;/strong&gt; Vai fazer toda a diferença, pode acreditar.&lt;/p&gt;

&lt;h3&gt;
  
  
  Lógica de programação e algoritmos
&lt;/h3&gt;

&lt;p&gt;Se você já pesquisou antes sobre o que estudar para se tornar uma pessoa desenvolvedora ou se já conversou com alguém sobre este assunto, é possível que tenham aparecido indicações de estudar isso, antes mesmo de escolher qual linguagem de programação você vai usar.&lt;br&gt;
Aqui eu gostaria de te convidar para acompanhar um outro artigo meu chamado "&lt;a href="https://dev.to/feministech/por-qual-linguagem-de-programacao-devo-comecar-40fj"&gt;Por qual linguagem de programação devo começar?&lt;/a&gt;". Lá, eu trago um pouco dessa discussão e sobre os estudos de lógica.&lt;br&gt;
Aproveita também para ler os comentários de outras pessoas compartilhando suas opiniões e experiências. Tenho certeza de que vai ser bem útil pra ti.&lt;/p&gt;

&lt;h3&gt;
  
  
  Arquitetura de computadores
&lt;/h3&gt;

&lt;p&gt;Talvez isso aqui seja uma novidade para você. E espero que o nome não te assuste. Porque, de verdade, não indicaria que você estudasse tão a fundo a ponto de chegar em componentes específicos de uma placa mãe. Mas alguns tópicos fazem bastante sentido que você estude. E com isso quero dizer:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;como funciona um computador?&lt;/li&gt;
&lt;li&gt;o que é um sistema operacional e como funciona?&lt;/li&gt;
&lt;li&gt;o que são bits e bytes?&lt;/li&gt;
&lt;li&gt;o que é hardware e quais são as peças essenciais para um computador funcionar?&lt;/li&gt;
&lt;li&gt;para que serve a placa mãe, processador, memória e outros componentes?&lt;/li&gt;
&lt;li&gt;o que são operações lógicas e como funciona a "tabela verdade"?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Entendo que são itens importantes e que farão toda a diferença no momento em que você estiver estudando programação. Talvez não pareça no começo. Mas conforme você evoluir nos estudos, vai entender o que estou falando. Até mesmo porque seu código deverá funcionar em um computador, então é importante entender como esse tal funciona.&lt;/p&gt;

&lt;h3&gt;
  
  
  Testes (mesmo que seja de mesa)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;No meu ponto de vista, isso deveria ser um hábito.&lt;/strong&gt; Tudo o que você for fazer e estudar, se puder praticar e testar, vai ser de imensa importância, tanto para que você possa entender o que está acontecendo e por que determinadas coisas estão acontecendo, quanto para validar se está no caminho certo ou não.&lt;br&gt;
Mesmo que você esteja na parte de lógica e algoritmos, você pode fazer testes. &lt;br&gt;
Te aconselho fortemente a pesquisar sobre testes de mesa para seus primeiros passos no caminho para ser uma pessoa desenvolvedora. E lá na frente, quando já estiver programando, procure também entender sobre quais tipos de teste você pode aplicar no seu código. Afinal, por que abrir mão da qualidade do que você está construindo?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdpola9wugaoc43rh9xsc.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdpola9wugaoc43rh9xsc.gif" alt="Gif da animação do homem aranha, com um homem aranha mais velho pensando e um homem aranha criança imitando o mais velho" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  O que mais acrescentar nessa lista?
&lt;/h3&gt;

&lt;p&gt;Bom, aí depende (tava demorando para esse termo aparecer nesse artigo, né?). Mas com os primeiros passos, você também vai notando outras coisas importantes para estudar. Por exemplo, supondo que você se interesse por desenvolvimento Web, então você vai precisar estudar sobre como funciona um navegador, como funciona uma estrutura &lt;strong&gt;cliente x servidor&lt;/strong&gt;, o que é uma requisição HTTP, entre outros.&lt;br&gt;
Caso você se interesse por desenvolvimento de aplicativos, pode ser importante entender também sobre &lt;strong&gt;cliente x servidor&lt;/strong&gt;, como funciona um celular, entre outros pontos importantes.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F238o6y6p1xae3chh1bxe.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F238o6y6p1xae3chh1bxe.gif" alt="Gif com uma mulher segurando o óculos e um caderno falando a frase que está escrita no gif: bora estudar." width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Mas isso não é muita coisa?
&lt;/h3&gt;

&lt;p&gt;Sim. É bastante coisa. &lt;strong&gt;Mas não se preocupe em querer saber tudo agora.&lt;/strong&gt; Vá aos poucos. &lt;strong&gt;Entenda e estude a base.&lt;/strong&gt; Lembre-se de sempre praticar. Busque ajuda sempre que necessário na sua rede de apoio e/ou comunidade. &lt;strong&gt;E descanse.&lt;/strong&gt; Descansar vai ser bastante importante. Às vezes é tudo o que você precisa quando pensa em desistir: descansar.&lt;/p&gt;




&lt;p&gt;Você já é uma pessoa desenvolvedora? Quais outras dicas você deixaria para quem também quer se tornar uma? &lt;strong&gt;Lembre-se de que privilégios e oportunidades são diferentes para todes.&lt;/strong&gt; Respeitando isso, deixe suas experiências.&lt;/p&gt;

&lt;p&gt;Se você ainda não é uma pessoa desenvolvedora, espero que eu tenha te ajudado pelo menos a dar o primeiro passo. Eu sei que não parece fácil, mas também sei que você pode conseguir. Programar é como fazer magia e vão ter momentos que a explicação não vai fazer sentido algum. Mas deixe essa magia tomar conta de ti e dedique-se. &lt;strong&gt;Que 2024 seja o seu ano.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flpps6fh3zc3grty32vcb.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flpps6fh3zc3grty32vcb.gif" alt="Gif do seriado The Office com dois homens comemorando na sala do escritório" width="298" height="168"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>programming</category>
      <category>braziliandevs</category>
      <category>developers</category>
    </item>
  </channel>
</rss>
