{"id":38908,"date":"2019-10-31T22:26:41","date_gmt":"2019-10-31T19:26:41","guid":{"rendered":"https:\/\/prohoster.info\/blog\/budushhee-uzhe-zdes-ili-kodim-pryamo-v-brauzere\/"},"modified":"2019-10-31T22:26:41","modified_gmt":"2019-10-31T19:26:41","slug":"budushhee-uzhe-zdes-ili-kodim-pryamo-v-brauzere","status":"publish","type":"post","link":"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/budushhee-uzhe-zdes-ili-kodim-pryamo-v-brauzere","title":{"rendered":"O futuro j\u00e1 chegou ou estamos programando direto no navegador","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Vou contar sobre uma situa\u00e7\u00e3o curiosa que aconteceu comigo e sobre como se tornar um contribuinte em um projeto conhecido.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nN\u00e3o faz muito tempo que estive envolvido com uma ideia: carregar o Linux diretamente do UEFI... <br \/>\nA ideia n\u00e3o \u00e9 nova e h\u00e1 uma quantidade consider\u00e1vel de manuais sobre esse tema. Um deles pode ser consultado <noindex><a rel=\"nofollow\" href=\"https:\/\/help.ubuntu.ru\/wiki\/uefi#%D0%B7%D0%B0%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B0_%D1%8F%D0%B4%D1%80%D0%B0_linux_%D0%BD%D0%B5%D0%BF%D0%BE%D1%81%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D0%BE_%D0%B8%D0%B7_uefi\">aqui<\/a><\/noindex><\/p>\n<p>Na verdade, minhas antigas tentativas de resolver essa quest\u00e3o resultaram em um projeto bem estruturado <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/slytomcat\/UEFI-Boot\">uma solu\u00e7\u00e3o<\/a><\/noindex>. A solu\u00e7\u00e3o \u00e9 totalmente funcional e eu a utilizo em parte das minhas m\u00e1quinas dom\u00e9sticas. Um pouco mais detalhadamente, essa solu\u00e7\u00e3o est\u00e1 descrita <noindex><a rel=\"nofollow\" href=\"https:\/\/help.ubuntu.ru\/wiki\/uefiboot\">aqui<\/a><\/noindex>.<\/p>\n<p>A ess\u00eancia do UEFI-Boot \u00e9 que a ESP (Parti\u00e7\u00e3o de Sistema EFI) se combina com o diret\u00f3rio \/boot. Ou seja, todos os n\u00facleos e as imagens de inicializa\u00e7\u00e3o (initrd) s\u00e3o colocados na mesma parti\u00e7\u00e3o a partir da qual o UEFI pode executar arquivos execut\u00e1veis e, em particular, iniciar gerenciadores de inicializa\u00e7\u00e3o do sistema. Por\u00e9m, o pr\u00f3prio n\u00facleo do Linux j\u00e1 \u00e9 compilado com a op\u00e7\u00e3o UEFISTUB em muitas distribui\u00e7\u00f5es, o que permite que o pr\u00f3prio n\u00facleo inicie a partir do UEFI.<\/p>\n<p>H\u00e1 um inconveniente nessa solu\u00e7\u00e3o \u2014 a parti\u00e7\u00e3o ESP \u00e9 formatada em FAT32, onde n\u00e3o \u00e9 poss\u00edvel criar links duros (que o sistema cria regularmente ao atualizar o initrd). E n\u00e3o h\u00e1 nada de particularmente criminoso nisso, mas receber avisos do sistema durante a atualiza\u00e7\u00e3o dos componentes do n\u00facleo n\u00e3o \u00e9 muito agrad\u00e1vel...<\/p>\n<p>H\u00e1 outro caminho. <\/p>\n<p>O gerenciador de inicializa\u00e7\u00e3o UEFI (aquele onde \u00e9 necess\u00e1rio adicionar o carregador do sistema operacional) consegue, al\u00e9m de carregadores\/n\u00facleos Linux, carregar tamb\u00e9m drivers. Portanto, voc\u00ea pode carregar o driver do sistema de arquivos onde est\u00e1 seu \/boot e carregar o n\u00facleo diretamente a partir da\u00ed usando o UEFI. O driver, naturalmente, deve ser colocado na parti\u00e7\u00e3o ESP. Isso \u00e9 aproximadamente o que fazem gerenciadores como o GRUB. Mas a sacada \u00e9 que todas as fun\u00e7\u00f5es frequentemente usadas do GRUB j\u00e1 est\u00e3o no UEFI. Ou melhor, em seu gerenciador de inicializa\u00e7\u00e3o. E se quisermos ser mais detalhistas, o gerenciador de inicializa\u00e7\u00e3o UEFI tem at\u00e9 mais recursos em certas quest\u00f5es. <\/p>\n<p>Parece ser uma solu\u00e7\u00e3o bonita, mas h\u00e1 um \"MAS\" (ou melhor, havia, mas falarei sobre isso depois). O fato \u00e9 que o sistema de drivers UEFI \u00e9 relativamente simples. N\u00e3o existe um conceito de montagem de sistema de arquivos ou de vincula\u00e7\u00e3o de driver a um dispositivo espec\u00edfico. H\u00e1 uma chamada de sistema com um nome condicional Map (em ingl\u00eas) que pega cada driver em ordem e tenta vincul\u00e1-lo a todos os dispositivos que, de alguma forma, se encaixam. E se o driver conseguir se conectar ao dispositivo, ent\u00e3o \u00e9 criado um mapeamento \u2014 uma entrada de liga\u00e7\u00e3o. Assim, na confus\u00e3o com todos os outros, o novo driver deve ser inicializado. E tudo o que \u00e9 necess\u00e1rio \u2014 na entrada de inicializa\u00e7\u00e3o do driver, configurar um bit (LOAD_OPTION_FORCE_RECONNECT) como 1 e o UEFI far\u00e1 esse remapeamento global ap\u00f3s o carregamento.<\/p>\n<p>S\u00f3 que fazer isso n\u00e3o \u00e9 t\u00e3o simples. A ferramenta padr\u00e3o efibootmgr (com a qual se configura o gerenciador de inicializa\u00e7\u00e3o UEFI) n\u00e3o sabe (ou melhor, n\u00e3o sabia) como configurar esse bit. Era necess\u00e1rio configur\u00e1-lo manualmente atrav\u00e9s de um procedimento bastante complexo e perigoso. <\/p>\n<p>E mais uma vez, ao tentar fazer isso manualmente, n\u00e3o aguentei e criei <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/rhboot\/efibootmgr\/issues\/108\">uma issue no GitHub<\/a><\/noindex> pedindo aos desenvolvedores que adicionassem essa funcionalidade.<\/p>\n<p>Se passaram alguns dias, mas ningu\u00e9m prestou aten\u00e7\u00e3o ao meu pedido. E, por curiosidade, fui dar uma olhada no c\u00f3digo-fonte... forklei, e pensei em como adicionar esse recurso \"na unha\"... \"Na unha\" porque n\u00e3o utilizei nada espec\u00edfico e editei o c\u00f3digo-fonte direto no navegador.<\/p>\n<p>Eu conhe\u00e7o C (a linguagem de programa\u00e7\u00e3o) de maneira muito superficial, mas rascunhei uma solu\u00e7\u00e3o (principalmente copiando e colando)... e ent\u00e3o pensei \u2014 e mesmo que haja uma por\u00e7\u00e3o de erros (minhas tentativas anteriores de corrigir o c\u00f3digo C de outra pessoa s\u00f3 compilavam na d\u00e9cima tentativa) vou criar um Pull Request. E assim, <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/rhboot\/efibootmgr\/pull\/109\">fiz isso.<\/a><\/noindex>.<\/p>\n<p>E ao fazer isso, descobri que havia um Travis CI implementado para verificar os pull requests. E ele me informou todos os meus erros. Bem, se os erros s\u00e3o conhecidos \u2014 por que n\u00e3o corrigir: novamente direto no navegador, e na quarta tentativa o c\u00f3digo foi compilado (um feito para mim).<\/p>\n<p>E assim, sem sair do navegador, criei um Pull Request totalmente real para uma ferramenta que \u00e9 usada praticamente em todas as distribui\u00e7\u00f5es modernas do Linux.<\/p>\n<p>Fiquei surpreso ao perceber que, sem conhecer a l\u00edngua e sem configurar nada (s\u00e3o necess\u00e1rias v\u00e1rias bibliotecas para a compila\u00e7\u00e3o), e sem nunca ter executado o compilador, consegui \"programar\" uma funcionalidade \u00fatil e funcional diretamente no navegador.<\/p>\n<p>No entanto, meu pedido ficou sem resposta desde 19 de mar\u00e7o de 2019, e eu j\u00e1 havia come\u00e7ado a esquec\u00ea-lo. <\/p>\n<p>Mas ontem, esse pedido foi adicionado ao master. <\/p>\n<p>\nSobre o que trata minha hist\u00f3ria? Trata-se do fato de que, com as tecnologias atuais, j\u00e1 \u00e9 poss\u00edvel escrever c\u00f3digo real no navegador, sem precisar instalar ferramentas de desenvolvimento e depend\u00eancias localmente.<\/p>\n<p>Vale a pena mencionar que este \u00e9 meu segundo pull request em utilit\u00e1rios conhecidos (pelo menos em c\u00edrculos restritos). Da \u00faltima vez, meu pedido para corrigir a exibi\u00e7\u00e3o de alguns campos na interface web do SyncThing resultou em uma corre\u00e7\u00e3o de apenas uma linha em um ambiente que eu n\u00e3o conhecia.<\/p>\n<p class=\"for_users_only_msg\">Apenas usu\u00e1rios registrados podem participar da pesquisa. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/auth\/login\/\">Entre<\/a><\/noindex>, por favor.<\/p>\n<h2 class=\"default-block__polling-title\">Devo continuar escrevendo ou n\u00e3o?<\/h2>\n<ul class=\"content-list content-list_polling\">\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    sim<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    n\u00e3o \u00e9 recomendado<\/p>\n<\/li>\n<\/ul>\n<p>    Votaram 294 usu\u00e1rios. 138 usu\u00e1rios se abstiveram.<br \/>\n<br \/>Fonte: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/471266\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0420\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043e \u043a\u0443\u0440\u044c\u0435\u0437\u043d\u043e\u0439 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438, \u0441\u043b\u0443\u0447\u0438\u0432\u0448\u0435\u0439\u0441\u044f \u0441\u043e \u043c\u043d\u043e\u0439, \u0438 \u043e \u0442\u043e\u043c \u043a\u0430\u043a \u0441\u0442\u0430\u0442\u044c \u043a\u043e\u043d\u0440\u0438\u0431\u044c\u044e\u0442\u043e\u0440\u043e\u043c \u0432 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442. \u041d\u0435 \u0442\u0430\u043a \u0434\u0430\u0432\u043d\u043e \u0432\u043e\u0437\u0438\u043b\u0441\u044f \u044f \u0441 \u043e\u0434\u043d\u043e\u0439 \u0438\u0434\u0435\u0435\u0439: \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 Linux \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0438\u0437 UEFI\u2026 \u0418\u0434\u0435\u044f \u043d\u0435 \u043d\u043e\u0432\u0430 \u0438 \u0435\u0441\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043c\u0430\u043d\u0443\u0430\u043b\u043e\u0432 \u043d\u0430 \u044d\u0442\u0443 \u0442\u0435\u043c\u0443. \u041e\u0434\u0438\u043d \u0438\u0437 \u043d\u0438\u0445 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0442\u0443\u0442 \u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043c\u043e\u0438 \u0434\u0430\u0432\u043d\u0438\u0435 \u043f\u043e\u043f\u044b\u0442\u043a\u0438 \u0440\u0435\u0448\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u0432\u043e\u043f\u0440\u043e\u0441 \u0432\u044b\u043b\u0438\u043b\u0438\u0441\u044c \u0432\u043e [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-38908","post","type-post","status-publish","format-standard","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0420\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043e \u043a\u0443\u0440\u044c\u0435\u0437\u043d\u043e\u0439 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438, \u0441\u043b\u0443\u0447\u0438\u0432\u0448\u0435\u0439\u0441\u044f \u0441\u043e \u043c\u043d\u043e\u0439, \u0438 \u043e \u0442\u043e\u043c \u043a\u0430\u043a \u0441\u0442\u0430\u0442\u044c \u043a\u043e\u043d\u0440\u0438\u0431\u044c\u044e\u0442\u043e\u0440\u043e\u043c \u0432 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442. \u041d\u0435 \u0442\u0430\u043a \u0434\u0430\u0432\u043d\u043e \u0432\u043e\u0437\u0438\u043b\u0441\u044f \u044f \u0441 \u043e\u0434\u043d\u043e\u0439 \u0438\u0434\u0435\u0435\u0439: \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/budushhee-uzhe-zdes-ili-kodim-pryamo-v-brauzere\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"pt_PT\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0411\u0443\u0434\u0443\u0449\u0435\u0435 \u0443\u0436\u0435 \u0437\u0434\u0435\u0441\u044c \u0438\u043b\u0438 \u043a\u043e\u0434\u0438\u043c \u043f\u0440\u044f\u043c\u043e \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0420\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043e \u043a\u0443\u0440\u044c\u0435\u0437\u043d\u043e\u0439 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438, \u0441\u043b\u0443\u0447\u0438\u0432\u0448\u0435\u0439\u0441\u044f \u0441\u043e \u043c\u043d\u043e\u0439, \u0438 \u043e \u0442\u043e\u043c \u043a\u0430\u043a \u0441\u0442\u0430\u0442\u044c \u043a\u043e\u043d\u0440\u0438\u0431\u044c\u044e\u0442\u043e\u0440\u043e\u043c \u0432 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442. \u041d\u0435 \u0442\u0430\u043a \u0434\u0430\u0432\u043d\u043e \u0432\u043e\u0437\u0438\u043b\u0441\u044f \u044f \u0441 \u043e\u0434\u043d\u043e\u0439 \u0438\u0434\u0435\u0435\u0439: \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/budushhee-uzhe-zdes-ili-kodim-pryamo-v-brauzere\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:26:41+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:26:41+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47O futuro j\u00e1 chegou ou estamos codificando diretamente no navegador | ProHoster","description":"Vou contar uma situa\u00e7\u00e3o inusitada que aconteceu comigo e como me tornei contribuinte de um projeto conhecido. N\u00e3o faz muito tempo, eu trabalhava em uma ideia: upload.","canonical_url":"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/budushhee-uzhe-zdes-ili-kodim-pryamo-v-brauzere","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pt_PT","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0411\u0443\u0434\u0443\u0449\u0435\u0435 \u0443\u0436\u0435 \u0437\u0434\u0435\u0441\u044c \u0438\u043b\u0438 \u043a\u043e\u0434\u0438\u043c \u043f\u0440\u044f\u043c\u043e \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435 | ProHoster","og:description":"\u0420\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043e \u043a\u0443\u0440\u044c\u0435\u0437\u043d\u043e\u0439 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438, \u0441\u043b\u0443\u0447\u0438\u0432\u0448\u0435\u0439\u0441\u044f \u0441\u043e \u043c\u043d\u043e\u0439, \u0438 \u043e \u0442\u043e\u043c \u043a\u0430\u043a \u0441\u0442\u0430\u0442\u044c \u043a\u043e\u043d\u0440\u0438\u0431\u044c\u044e\u0442\u043e\u0440\u043e\u043c \u0432 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442. \u041d\u0435 \u0442\u0430\u043a \u0434\u0430\u0432\u043d\u043e \u0432\u043e\u0437\u0438\u043b\u0441\u044f \u044f \u0441 \u043e\u0434\u043d\u043e\u0439 \u0438\u0434\u0435\u0435\u0439: \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430.","og:url":"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/budushhee-uzhe-zdes-ili-kodim-pryamo-v-brauzere","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:26:41+00:00","article:modified_time":"2019-10-31T19:26:41+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"38908","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-23 23:55:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 01:00:27","updated":"2026-01-23 23:55:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts\/38908","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/comments?post=38908"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts\/38908\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media?parent=38908"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/categories?post=38908"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/tags?post=38908"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}