{"id":128512,"date":"2021-03-29T17:52:20","date_gmt":"2021-03-29T16:52:20","guid":{"rendered":"https:\/\/blog.jetbrains.com\/?post_type=blog&#038;p=128512"},"modified":"2021-03-29T17:52:20","modified_gmt":"2021-03-29T16:52:20","slug":"acesse-seu-ide-remotamente-com-o-projector","status":"publish","type":"blog","link":"https:\/\/blog.jetbrains.com\/pt-br\/blog\/2021\/03\/29\/acesse-seu-ide-remotamente-com-o-projector\/","title":{"rendered":"Acesse seu IDE remotamente com o Projector"},"content":{"rendered":"<p>Estamos anunciando o lan\u00e7amento inicial do Projector: uma ferramenta e framework para executar IDEs da JetBrains e aplicativos Swing remotamente na sua rede.<\/p>\n<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2021\/03\/Blog_1280x720.png\n\" alt=\"Logotipo do Projector\" \/><\/p>\n<p>Como voc\u00ea deve saber, o Swing \u00e9 um kit de ferramentas de widgets gr\u00e1ficos para Java. Os IDEs da JetBrains atuais usam o Swing para desenhar a UI. O mesmo \u00e9 v\u00e1lido para outros IDEs baseados em IntelliJ, como o Android Studio.<\/p>\n<p>Embora seja geralmente bom que os IDEs da JetBrains e os aplicativos Swing sejam aplicativos para \u00e1rea de trabalho, h\u00e1 uma s\u00e9rie de situa\u00e7\u00f5es excepcionais, como thin clients, que exigem uma abordagem especial. \u00c9 aqui que entra o Projector.<\/p>\n<p>O Projector \u00e9 uma tecnologia autohospedada que executa IDEs baseados em IntelliJ e aplicativos baseados em Swing no servidor, permitindo que voc\u00ea os acesse de qualquer lugar usando navegadores e aplicativos nativos.<\/p>\n<h1><strong>Casos de uso<\/strong><\/h1>\n<p>Existe uma ampla variedade de condi\u00e7\u00f5es especiais que podem exigir que voc\u00ea execute um IDE em um servidor. Alguns desses problemas s\u00e3o particularmente comuns em empresas grandes com enorme infraestrutura. Veja a seguir uma r\u00e1pida lista dos problemas que o Projector \u00e9 particularmente adequado para resolver:<\/p>\n<ul>\n<li>Executar c\u00f3digo <strong>pr\u00f3ximo ao tempo de execu\u00e7\u00e3o<\/strong> ou <strong>banco de dados<\/strong> para reduzir idas e voltas.<\/li>\n<li>Ambientes corporativos de <strong>alta seguran\u00e7a<\/strong>.<\/li>\n<li><strong>Projetos realmente grandes<\/strong>.<\/li>\n<li>A c\u00f3pia local do <strong>c\u00f3digo-fonte<\/strong> \u00e9 proibida.<\/li>\n<li><strong>Restri\u00e7\u00f5es de hardware<\/strong> do usu\u00e1rio.<\/li>\n<li><strong>Thin clients<\/strong>.<\/li>\n<li>A necessidade de executar o IDE em um ambiente GNU\/Linux em m\u00e1quinas Windows ou mesmo em <strong>sistemas operacionais n\u00e3o convencionais<\/strong>, como o ChromeOS.<\/li>\n<li><strong>A necessidade de desligar o computador<\/strong> enquanto o aplicativo continua a operar no servidor.<\/li>\n<li><strong>Depura\u00e7\u00e3o remota<\/strong> no lado do servidor (devtest, devprod).<\/li>\n<li>Imagens de <strong>VM ou do Docker<\/strong> com origens de depura\u00e7\u00e3o e um IDE pr\u00e9-configurado.<\/li>\n<li>Uma configura\u00e7\u00e3o que requer <strong>acesso remoto<\/strong>.<\/li>\n<\/ul>\n<p><em>Lembre-se de que o Projector n\u00e3o oferece suporte para desenvolvimento colaborativo. Se voc\u00ea precisar de uma ferramenta de colabora\u00e7\u00e3o, experimente o <a href=\"https:\/\/www.jetbrains.com\/help\/idea\/code-with-me.html\" target=\"_blank\" rel=\"noopener\">Code With Me<\/a>. Tamb\u00e9m estamos trabalhando em uma nova solu\u00e7\u00e3o de desenvolvimento remoto que combina a funcionalidade do Code With Me com o Projector. Isso ajudar\u00e1 a resolver ainda mais os problemas de lat\u00eancia da rede.<\/em><\/p>\n<h1><strong>Open source<\/strong><\/h1>\n<p>Cada aspecto do Projector \u00e9 publicado sob uma licen\u00e7a open source. Isso \u00e9 muito importante para empresas que desejam criar solu\u00e7\u00f5es personalizadas com base nessa tecnologia. Usamos as tr\u00eas licen\u00e7as mais populares:<\/p>\n<ul>\n<li>Cliente: MIT License (Expat)<\/li>\n<li>Servidor: GNU GPL v2.0 + Classpath Exception<\/li>\n<li>Dockerfiles: Apache License 2.0<\/li>\n<\/ul>\n<p>Tamb\u00e9m convidamos voc\u00ea a contribuir com novos recursos e corre\u00e7\u00f5es de bugs por meio de solicita\u00e7\u00f5es pull do GitHub. Voc\u00ea pode encontrar links do GitHub para projetos espec\u00edficos abaixo.<\/p>\n<h1><strong>Arquitetura<\/strong><\/h1>\n<p>O Projector \u00e9 um software cliente\/servidor. Voc\u00ea executa o IDE no servidor e, em seguida, pode se conectar a ele pela rede. A conex\u00e3o entre o cliente e o servidor \u00e9 extremamente r\u00e1pida e leve. <\/p>\n<p>Imagine-o como uma solu\u00e7\u00e3o de \u00e1rea de trabalho remota, como o VNC, com a diferen\u00e7a de que ele exibe apenas as janelas do IDE e \u00e9 adaptado especificamente para rendimento m\u00e1ximo em aplica\u00e7\u00f5es baseadas em Java.<\/p>\n<p>O Projector oferece v\u00e1rias op\u00e7\u00f5es para configurar um servidor ou cliente. <\/p>\n<h1><strong>Aplicativos cliente<\/strong><\/h1>\n<p>Voc\u00ea pode usar um navegador ou aplicativo nativo para se conectar ao IDE. O aplicativo nativo oferece melhor funcionalidade (por exemplo, atalhos de teclado), mas est\u00e1 dispon\u00edvel apenas para sistemas operacionais de desktop. Atualmente, usar um navegador \u00e9 a \u00fanica op\u00e7\u00e3o para dispositivos m\u00f3veis, mas, no futuro, planejamos criar clientes nativos para plataformas m\u00f3veis tamb\u00e9m.<\/p>\n<h2><strong>Cliente Web<\/strong><\/h2>\n<p>A experi\u00eancia do navegador \u00e9 muito semelhante ao uso de um site interativo. Por\u00e9m, existe uma op\u00e7\u00e3o para entrar no modo de tela cheia, que oferece uma experi\u00eancia mais semelhante \u00e0 de um desktop.<\/p>\n<p>Voc\u00ea pode controlar as propriedades do cliente Web alterando os par\u00e2metros de URL. Por exemplo, em dispositivos m\u00f3veis, voc\u00ea pode adicionar o par\u00e2metro <em>&quot;mobile&quot;<\/em> \u00e0 URL para ativar bot\u00f5es de sobreposi\u00e7\u00e3o, incluindo a capacidade de abrir um teclado virtual.<\/p>\n<p>O cliente Web \u00e9 implementado usando a API Canvas HTML5 e deve funcionar em todos os navegadores compat\u00edveis com essa API. Ele foi testado no Chrome\/Chromium, Firefox e Safari.<\/p>\n<p>Voc\u00ea n\u00e3o precisa instalar o cliente Web em qualquer lugar: ele j\u00e1 est\u00e1 inclu\u00eddo na parte do servidor Web do Projector. Tudo que voc\u00ea precisa fazer \u00e9 inserir a URL. O c\u00f3digo completo est\u00e1 dispon\u00edvel no <a href=\"https:\/\/github.com\/JetBrains\/projector-client\/tree\/master\/projector-client-web\" target=\"_blank\" rel=\"noopener\">GitHub<\/a>.<\/p>\n<h2><strong>Aplicativo nativo<\/strong><\/h2>\n<p>Voc\u00ea pode usar um aplicativo nativo para macOS, Windows e Linux. Os bin\u00e1rios est\u00e3o dispon\u00edveis <a href=\"https:\/\/github.com\/JetBrains\/projector-client\/releases\" target=\"_blank\" rel=\"noopener\">aqui<\/a>, e os fontes est\u00e3o publicadas no <a href=\"https:\/\/github.com\/JetBrains\/projector-client\/tree\/master\/projector-launcher\" target=\"_blank\" rel=\"noopener\">GitHub<\/a>.<\/p>\n<p>Al\u00e9m dos benef\u00edcios esperados, como integra\u00e7\u00e3o com Dock\/Barra de tarefas, esse aplicativo oferece suporte a atalhos de teclado, como Ctrl+ W\/Cmd+W, que geralmente n\u00e3o est\u00e3o dispon\u00edveis no cliente do navegador.<\/p>\n<h1><strong>Lado do servidor<\/strong><\/h1>\n<h2><strong>Script de instala\u00e7\u00e3o Python<\/strong><\/h2>\n<p>Nosso <a href=\"https:\/\/github.com\/JetBrains\/projector-installer\" target=\"_blank\" rel=\"noopener\">script de instala\u00e7\u00e3o<\/a> fornece flexibilidade para instalar componentes no lado do servidor. Esta \u00e9 uma distribui\u00e7\u00e3o aut\u00f4noma e atualmente est\u00e1 dispon\u00edvel apenas para hosts GNU\/Linux. Voc\u00ea pode escolher qual IDE deseja instalar, junto com sua vers\u00e3o, op\u00e7\u00f5es de seguran\u00e7a e muito mais.<\/p>\n<h2><strong>Imagens do Docker<\/strong><\/h2>\n<p>O Docker \u00e9 a maneira mais f\u00e1cil de executar o Projector em um ambiente de nuvem. Temos <a href=\"https:\/\/github.com\/JetBrains\/projector-docker\" target=\"_blank\" rel=\"noopener\">um script de exemplo<\/a> que permite gerar imagens do Docker que cont\u00eam IDEs da JetBrains e o Projector. Isso permite que voc\u00ea execute os IDEs em qualquer lugar em que o Docker esteja dispon\u00edvel. O IDE ser\u00e1 executado sem controle e isolado, e voc\u00ea n\u00e3o precisar\u00e1 instalar o X11 no servidor. A imagem \u00e9 independente.<\/p>\n<p>Em vez de usarmos o DockerHub, publicamos imagens pr\u00e9-constru\u00eddas usando nosso Docker Registry personalizado. Por exemplo, este snippet permite que voc\u00ea obtenha o IntelliJ IDEA Community Edition: <\/p>\n<p><code>docker pull registry.jetbrains.team\/p\/prj\/containers\/projector-idea-c<\/code><\/p>\n<h2><strong>Plug-in de IDE<\/strong><\/h2>\n<p>Por \u00faltimo, mas n\u00e3o menos importante, voc\u00ea pode instalar o <a href=\"https:\/\/plugins.jetbrains.com\/plugin\/16015-projector\" target=\"_blank\" rel=\"noopener\">plug-in<\/a> diretamente no seu IDE sem precisar implantar elementos no lado do servidor em um servidor separado. Com esse plug-in, seu dispositivo \u00e9 o servidor. Como sempre, voc\u00ea pode encontrar o c\u00f3digo-fonte no <a href=\"https:\/\/github.com\/JetBrains\/projector-server\/tree\/master\/projector-plugin\" target=\"_blank\" rel=\"noopener\">GitHub<\/a>.<\/p>\n<p>No entanto, o plug-in \u00e9 muito menos isolado, o que significa que voc\u00ea pode encontrar intera\u00e7\u00f5es com o sistema operacional. Por exemplo, n\u00e3o podemos renderizar o menu global no macOS.<\/p>\n<h1><strong>Fa\u00e7a voc\u00ea mesmo<\/strong><\/h1>\n<p>O Projector \u00e9 mais uma tecnologia do que uma solu\u00e7\u00e3o para o usu\u00e1rio final. Voc\u00ea pode us\u00e1-lo para personalizar sua pr\u00f3pria infraestrutura e atender \u00e0s necessidades dos seus neg\u00f3cios. Ansible? Com certeza. Kubernetes? Sem problemas. <\/p>\n<p>Voc\u00ea pode construir o que quiser, supondo que tenha conhecimento t\u00e9cnico suficiente. O c\u00f3digo \u00e9 open source, ent\u00e3o n\u00e3o h\u00e1 nada que impe\u00e7a voc\u00ea de mudar o que quiser, ou at\u00e9 mesmo de contribuir com ele! Voc\u00ea pode encontrar mais informa\u00e7\u00f5es, junto com o c\u00f3digo mais importante no lado do servidor, aqui no <a href=\"https:\/\/github.com\/JetBrains\/projector-server\" target=\"_blank\" rel=\"noopener\">GitHub<\/a>.<\/p>\n<p>O Projector ainda \u00e9 uma tecnologia muito jovem, mas acreditamos que ele tem potencial para se tornar uma das melhores solu\u00e7\u00f5es para acesso remoto a IDEs. Adorar\u00edamos ouvir seus coment\u00e1rios. Voc\u00ea pode entrar em contato conosco a qualquer momento no <a href=\"https:\/\/youtrack.jetbrains.com\/issues\/PRJ\" target=\"_blank\" rel=\"noopener\">YouTrack<\/a> e no <a href=\"https:\/\/twitter.com\/ProjectorJB\" target=\"_blank\" rel=\"noopener\">Twitter<\/a>.<\/p>\n<p>\u2014 A equipe do Projector<\/p>\n","protected":false},"author":1086,"featured_media":123882,"comment_status":"closed","ping_status":"closed","template":"","categories":[286,89,6505],"tags":[91,6504,1038],"cross-post-tag":[6284],"acf":[],"_links":{"self":[{"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/blog\/128512"}],"collection":[{"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/blog"}],"about":[{"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/types\/blog"}],"author":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/users\/1086"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/comments?post=128512"}],"version-history":[{"count":1,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/blog\/128512\/revisions"}],"predecessor-version":[{"id":128513,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/blog\/128512\/revisions\/128513"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/media\/123882"}],"wp:attachment":[{"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/media?parent=128512"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/categories?post=128512"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/tags?post=128512"},{"taxonomy":"cross-post-tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/cross-post-tag?post=128512"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}