[{"content":"Introdução: A \u0026ldquo;Mudança de Paradigma da Computação\u0026rdquo; Trazida pelos Computadores Quânticos Nos últimos anos, quase não passa um dia sem vermos a palavra \u0026ldquo;computador quântico\u0026rdquo; nas notícias e artigos de tecnologia. Histórias que parecem de filmes de ficção científica, como \u0026ldquo;terminar em poucos minutos cálculos que levariam milhares de anos nos supercomputadores atuais\u0026rdquo; e \u0026ldquo;todas as tecnologias de criptografia atuais podem ser quebradas\u0026rdquo;, são contadas como fatos. Desde grandes empresas de TI como Google, IBM e Microsoft, até universidades e startups do mundo todo, há uma forte competição pela aplicação prática desta tecnologia dos sonhos.\nNo entanto, se perguntarmos \u0026ldquo;Afinal de contas, o que é um computador quântico?\u0026rdquo;, poucas pessoas conseguirão responder com precisão. Muitos têm a vaga imagem de que é \u0026ldquo;uma caixa mágica que pode calcular todas as combinações simultaneamente\u0026rdquo;, mas, estritamente falando, isso não é correto.\nNeste artigo, explicaremos desde o básico, de forma completa e profissional, mas fácil de entender, como o computador quântico difere fundamentalmente do computador clássico (os PCs e smartphones que usamos normalmente) e como ele utiliza fenômenos misteriosos da mecânica quântica, como Superposição (Superposition), Emaranhamento Quântico (Entanglement) e Portas Quânticas (Quantum gates) para realizar cálculos. Quando você terminar de ler este artigo, deverá compreender claramente o verdadeiro potencial e os desafios atuais dos computadores quânticos.\nCapítulo 1: A Diferença Decisiva entre Computadores Clássicos e Quânticos Para entender o mecanismo de um computador quântico, primeiro precisamos revisar como operam os \u0026ldquo;computadores clássicos\u0026rdquo; que usamos atualmente.\nTabela Comparativa: Computador Clássico vs Computador Quântico Item Computador Clássico Computador Quântico Unidade Básica Bit (0 ou 1) Qubit (superposição de 0 e 1) Expressão de Estado Determinística Probabilística (não determinada até a observação) Método de Cálculo Processamento sequencial (requer núcleos físicos para paralelização) Paralelismo quântico (manipula exponencialmente estados de uma só vez) Melhores Aplicações Operações aritméticas, processamento de dados do dia a dia Fatoração de primos, cálculos de química quântica Tolerância a Erros Muito forte Muito fraca (requer temperaturas criogênicas ou correção de erros) O Mundo dos Computadores Clássicos: O Bit como \u0026ldquo;0\u0026rdquo; ou \u0026ldquo;1\u0026rdquo; Os computadores clássicos representam todas as informações em um de dois estados: \u0026ldquo;0\u0026rdquo; ou \u0026ldquo;1\u0026rdquo;. Isso é chamado de Bit . Fisicamente, é representado por se a voltagem de um transistor em um chip semicondutor é alta (1) ou baixa (0). As fotos em alta resolução do seu smartphone, o texto que você está lendo agora e os seus vídeos favoritos no YouTube são, em última análise, reduzidos a uma vasta série de \u0026ldquo;zeros e uns\u0026rdquo;. A computação nada mais é do que o processo de aplicação de portas lógicas básicas, como AND, OR e NOT, a essa sequência de 0 e 1. Este é um mundo muito confiável e determinístico. Se a entrada for a mesma, a saída será invariavelmente a mesma.\nO Mundo dos Computadores Quânticos: O Qubit que é \u0026ldquo;0\u0026rdquo; e também \u0026ldquo;1\u0026rdquo; Por outro lado, a unidade mínima de informação de um computador quântico é chamada de Qubit (Quantum bit). A principal característica de um Qubit não é apenas poder estar em um estado de \u0026ldquo;0\u0026rdquo; ou \u0026ldquo;1\u0026rdquo; como um bit clássico, mas também de poder estar em um estado onde \u0026ldquo;0 e 1 se misturam com uma certa probabilidade\u0026rdquo;. Isso é chamado de \u0026ldquo;Superposição\u0026rdquo; (Superposition).\nPor exemplo, se um bit clássico fosse uma moeda com a face voltada para \u0026ldquo;cara\u0026rdquo; ou \u0026ldquo;coroa\u0026rdquo;, o Qubit seria frequentemente comparado a uma \u0026ldquo;moeda que continua girando no ar\u0026rdquo;. A moeda girando não é cara nem coroa, mas ambos os estados estão sobrepostos. No instante em que a moeda cai no chão e para (o que é chamado de \u0026ldquo;observação\u0026rdquo; na mecânica quântica), determina-se pela primeira vez se é \u0026ldquo;cara\u0026rdquo; ou \u0026ldquo;coroa\u0026rdquo;.\nOs computadores quânticos incorporam essa propriedade de que \u0026ldquo;o estado não é determinado até ser observado\u0026rdquo;, típica do mundo microscópico (mecânica quântica), diretamente no processo de processamento da informação.\nCapítulo 2: As 3 Propriedades Quânticas que Mudam Radicalmente a Computação A fonte da incrível capacidade de cálculo dos computadores quânticos não é a alta frequência de clock ou os componentes miniaturizados. É o fato de usarem as próprias leis da física como recurso de cálculo. Os três fenômenos quânticos seguintes são fundamentais.\n1. Superposição (Superposition) e a Quantidade Exponencial de Informação Como mencionado anteriormente, o Qubit pode manter os estados 0 e 1 ao mesmo tempo. Se um único Qubit é a \u0026ldquo;superposição de 0 e 1\u0026rdquo;, o que acontece quando aumentamos o número de Qubits?\n1 Qubit: superposição de 2 estados (0, 1) 2 Qubits: superposição de 4 estados (00, 01, 10, 11) 3 Qubits: superposição de 8 estados N Qubits: superposição de $2^N$ padrões Com apenas 50 Qubits, é possível reter $2^{50}$ (cerca de 1 quatrilhão) de estados simultaneamente. E com apenas 300 Qubits, pode-se manter de uma só vez um número de padrões igual a $2^{300}$ (mais do que o número de átomos do universo inteiro!). Essa capacidade de retenção exponencial de informações é a base do potencial dos computadores quânticos. Com um computador clássico, seria fisicamente impossível armazenar em memória mais estados do que átomos existem no universo.\n2. Emaranhamento Quântico (Entanglement): A Assustadora Ação à Distância O emaranhamento quântico é um fenômeno tão estranho que Albert Einstein o chamou de \u0026ldquo;assustadora ação à distância\u0026rdquo; (Spooky action at a distance) e nunca o aceitou durante toda a sua vida.\nQuando vários Qubits entram em um estado de \u0026ldquo;emaranhamento quântico\u0026rdquo;, eles ficam tão fortemente interligados que, \u0026ldquo;se o estado de um for determinado, o estado do outro será instantaneamente determinado, não importa a distância que os separe\u0026rdquo; .\nPor exemplo, suponha que haja 2 Qubits emaranhados, A e B (cada um em um estado de superposição de 0 e 1). Se observarmos A e o resultado for \u0026ldquo;0\u0026rdquo;, o estado de B também se tornará determinado instantaneamente (por exemplo, sempre para \u0026ldquo;1\u0026rdquo;), superando a velocidade da luz, que é o limite de velocidade da transmissão de informações. Nos computadores quânticos, ao usar esse emaranhamento quântico, expressam-se correlações complexas entre vários Qubits e realiza-se um processamento de informações altamente paralelo. Sem o emaranhamento, a capacidade de cálculo dos computadores quânticos seria praticamente a mesma dos computadores clássicos.\n3. Interferência Quântica (Quantum Interference): A Magia que Revela a Resposta Você pode pensar: \u0026ldquo;Se é possível manter todos os padrões ao mesmo tempo, não poderia computá-los todos em paralelo e obter a resposta em um instante?\u0026rdquo;. Este é o mal-entendido mais comum sobre computadores quânticos. Mesmo que o cálculo seja executado no estado de superposição, a resposta só pode ser obtida por meio da \u0026ldquo;observação\u0026rdquo;. Contudo, no momento da observação, o estado se colapsará em um dos $2^N$ padrões de forma aleatória. Isso lhe dará apenas uma resposta aleatória.\nAqui entra a \u0026ldquo;Interferência Quântica\u0026rdquo; (Interference). Isso utiliza o princípio de que, quando ondas colidem, elas se amplificam onde as fases se alinham e se cancelam onde estão defasadas (essencialmente, o mesmo princípio de um fone de ouvido com cancelamento de ruído).\nExcelentes \u0026ldquo;algoritmos quânticos\u0026rdquo; manipulam habilidosamente os estados quânticos durante a computação de modo que \u0026ldquo;amplifiquem a amplitude de probabilidade dos estados (ondas) que conduzem à resposta correta\u0026rdquo; e \u0026ldquo;cancelem a amplitude de probabilidade dos estados que conduzem às respostas erradas\u0026rdquo; . Por fim, ao observar, eles manipulam as coisas para que a \u0026ldquo;resposta correta\u0026rdquo; apareça com probabilidade de quase 100%. Projetar bem esse processo de interferência é a verdadeira essência da programação quântica.\nCapítulo 3: Como Eles Calculam? \u0026ldquo;Portas Quânticas\u0026rdquo; e \u0026ldquo;Circuitos Quânticos\u0026rdquo; Assim como os computadores clássicos usam portas lógicas (AND, OR, NOT, etc.) para progredir nos cálculos, os computadores quânticos avançam operando Qubits através de \u0026ldquo;Portas Quânticas\u0026rdquo; (Quantum Gates). Uma combinação de várias portas quânticas é chamada de Circuito Quântico (Quantum Circuit).\nO estado de um Qubit é representado matematicamente como um ponto na superfície de uma esfera tridimensional chamada \u0026ldquo;Esfera de Bloch\u0026rdquo;. O polo norte é \u0026ldquo;0\u0026rdquo;, o polo sul é \u0026ldquo;1\u0026rdquo; e no equador está \u0026ldquo;um estado de superposição em que 0 e 1 estão igualmente sobrepostos\u0026rdquo;. As portas quânticas são simplesmente operações que giram esse estado (vetor) na superfície dessa esfera.\nAqui estão algumas das portas quânticas mais representativas:\n1. Porta Hadamard (Porta H) Não existente em computadores clássicos, esta é a porta mais fundamental exclusiva para computadores quânticos. Quando um Qubit totalmente no estado \u0026ldquo;0\u0026rdquo; passa pela porta H, ele cria um \u0026ldquo;estado de superposição perfeita\u0026rdquo; onde 0 e 1 são observados com probabilidade de exatamente a metade (um ponto no equador da Esfera de Bloch). Muitos algoritmos começam aplicando essa porta H a todos os Qubits como etapa de inicialização para computação quântica.\n2. Portas de Pauli (Portas X, Y, Z) Estas são portas que incluem operações equivalentes à porta NOT de um computador clássico (que inverte 0 para 1 e 1 para 0). Na Esfera de Bloch, equivalem a rotações de 180 graus em torno dos eixos X, Y e Z. A porta X, em particular, inverte o polo norte (0) para o polo sul (1), por isso tem exatamente o mesmo efeito da porta NOT clássica. A porta Z serve para inverter a \u0026ldquo;fase (algo parecido com o tempo da onda)\u0026rdquo; da superposição, o que é extremamente importante para induzir a interferência quântica.\n3. Porta CNOT (Porta NOT Controlada) É uma porta de suma importância para criar o emaranhamento quântico. Ela usa 2 Qubits (um bit de controle e um bit alvo). A operação é: \u0026ldquo;Se o bit de controle for 1, ele inverte (porta X) o estado do bit alvo. Se o bit de controle for 0, nada acontece\u0026rdquo;. À primeira vista parece uma ramificação de condição IF simples, mas o que aconteceria se o bit de controle estivesse em um \u0026ldquo;estado de superposição de 0 e 1\u0026rdquo;? O bit alvo tornar-se-ia \u0026ldquo;um estado sobreposto onde a inversão e a não-inversão coexistem\u0026rdquo;, e o destino dos 2 bits ficará perfeitamente associado. Impressionantemente, os dois Qubits ficam \u0026ldquo;emaranhados\u0026rdquo;.\nAo dispor e aplicar essas portas em sequência, da esquerda para a direita, como em uma partitura musical, algoritmos complexos podem ser executados.\nCapítulo 4: Quais são os Pontos Fortes e Fracos dos Computadores Quânticos? Aqui está um fato importante. Um computador quântico não é onipotente. Em tarefas corriqueiras como navegar na web, renderizar vídeos, executar macros no Excel ou usar aplicativos genéricos de smartphones, os computadores quânticos provavelmente nunca superarão os computadores clássicos. O processamento sequencial dessas tarefas é bem adequado aos computadores clássicos altamente otimizados e muito mais baratos e rápidos disponíveis atualmente.\nO verdadeiro valor de um computador quântico é demonstrado apenas para \u0026ldquo;problemas específicos em que as combinações de cálculo aumentam exponencialmente em um computador clássico, levando tanto tempo quanto a idade do universo\u0026rdquo; . Isso é chamado de \u0026ldquo;Supremacia Quântica\u0026rdquo; (Quantum Supremacy) ou \u0026ldquo;Vantagem Quântica\u0026rdquo; (Quantum Advantage).\nEspecialidades dos Computadores Quânticos (Aplicativos Matadores) 1. Fatoração de Primos e Decodificação de Criptografia (Algoritmo de Shor) Atualmente, métodos como a criptografia RSA, que protegem comunicações seguras pela Internet (como transações com cartões de crédito), baseiam-se na premissa de que \u0026ldquo;é virtualmente impossível (leva uma quantidade enorme de tempo) para um computador clássico fatorar números inteiros massivos em números primos\u0026rdquo;. No entanto, ao usar o \u0026ldquo;Algoritmo de Shor\u0026rdquo; inventado pelo matemático Peter Shor em 1994, os computadores quânticos podem inteligentemente usar a interferência para resolver esse problema a uma velocidade formidável (tempo polinomial). Em virtude disso, existe o risco do colapso futuro dos sistemas criptográficos vigentes, forçando governos e bancos centrais em todo o mundo a se apressarem na transição para a \u0026ldquo;Criptografia Pós-Quântica\u0026rdquo; (Post-Quantum Cryptography).\n2. Cálculo de Química Quântica, Desenvolvimento de Novos Materiais e Remédios O comportamento das moléculas e átomos na natureza segue fundamentalmente as regras da mecânica quântica. Ao tentar simular o comportamento de moléculas complexas num computador clássico, as combinações das interações de elétrons explodem de tal maneira que a simulação até mesmo de pequenas moléculas bate no limite de computação. Como afirmou o Prêmio Nobel de Física Richard Feynman: \u0026ldquo;Se quiser simular a natureza, tem de se valer da mecânica quântica\u0026rdquo;, o computador quântico mostra um poder nativo sem precedentes nas simulações físicas e químicas de materiais. Aguardam-se grandes saltos no desenvolvimento de novos remédios, descoberta de materiais supercondutores à temperatura ambiente, painéis solares mais eficientes e síntese de fertilizantes mais eficientes.\n3. Otimização Combinatória e Problemas de Busca (Algoritmo de Grover) Para problemas em que a solução ótima tem de ser encontrada num imenso número de alternativas (como roteamento para otimização da logística ou otimização do portfólio financeiro), os algoritmos quânticos também são valiosos. Ao utilizar o \u0026ldquo;Algoritmo de Grover\u0026rdquo; ao longo de uma procura de dados dispersos num banco de dados sem ordenação, a quantidade de passadas reduz-se à raiz quadrada das consultas necessárias no clássico. Como por exemplo, havendo um volume contendo 100 milhões de informações, a procura clássica requer cerca de 100 milhões de consultas, ao invés das escassas 10 mil no quântico.\nCapítulo 5: As Paredes do Hardware a Serem Ultrapassadas - \u0026ldquo;Decoerência\u0026rdquo; e \u0026ldquo;Correção de Erros Quânticos\u0026rdquo; Teoricamente, apesar do poder mágico que demonstram, existe ainda um íngreme e alto obstáculo do ponto de vista do funcionamento físico, barrando a realização prática das vias dos computadores quânticos. Seu principal inimigo reside na palavra \u0026ldquo;Ruído\u0026rdquo; .\nA \u0026ldquo;superposição\u0026rdquo; ou o \u0026ldquo;emaranhamento quântico\u0026rdquo; não se trata de nada a não ser dos frágeis e imprecisos instantes efêmeros de que constam. Se houver sequer a exposição da menor radiação à força calórica em volta ou as flutuações das ondas eletromagnéticas locais ou inclusive ao atrito a partir de algum raio cósmico distante, toda essa constituição quântica dissipa-se de chofre virando por final em somente o padrão dos bits tradicionais comuns. A tal fenômeno é chamado de \u0026ldquo;Decoerência\u0026rdquo; (Colapso quântico).\nA Disputa Feroz Pelas Vias de Realização Físicas Atualmente, no que diz respeito ao modo da conformação estrutural material dos qubits efêmeros, há uma plural e global busca das metodologias e intensas disputas em redor desse patamar em disputa por um destaque dominante.\nMétodo Supercondutor (Superconducting) : Adotado pelo Google, IBM, Amazon, etc. Utiliza um formato em malha de circuitos supercondutores resfriado usando sistemas frigóricos portentosos rentes a chegar nos termômetros da medição total aos zero absolutos (aproximado -273ºC). Representam o método da liderança atual, mais flexível a somar novos qubits, ainda que lhes careçam caros e grandiosos engenhos frigoríficos. Método Armadilha de Íons (Trapped Ion) : Adotado pela IonQ, Quantinuum, etc. Prisiona no meio do vácuo pequenos feixes iónicos formados através da contenção do plano eletromagnético, recebendo irradiações de um preciso controle num raio de luz a laser. A totalidade unida de qubits constitui o modo uniformizado ideal e conseguem conter longo prazo da durabilidade operacional (conforme designado em tempo de coerência extensos), tendo, porém, um grande desafio ao serem dotados no passo de velocidades bastante menores em defasagem relativamente aos modelos de tipo dos supercondutores. Método Fotônico (Photonic) : Especial alvo central pelo lado de entidades qual à PsiQuantum etc. Foco sob ação sobre luz em partículas como fotões. Estipulam como a suprema excelência de benefícios na premissa da não-requisição forçosa baseada do funcionamento total nos redutos gelados, operando grande parte do tempo nas margens da normal sala ambiente compatibilizando excelente integração e fusão junto do modo produtivo normal tecnológico comum via peças à silício além das transferências habituais na ligação de pontes às fibras da ótica óptica. Método Topológico (Topological) : Persistente projeto e estudos elaborados a longa década por meio da Microsoft. Tende aproveitar as condições baseadas ao ponto de vista de topologias (consoante com vertentes geométricas) proveniente por ínfimas e estranhas frações partículas ditas aniões, rumando no modelo robusto resistente radical à intercessão de um barulho (a diminuir drasticamente qualquer engano nos defeitos de erros dos bits) resultando de modo ambicioso por qubits insusceptíveis das vibrações da base das falhas ambiente. Defendem as teorias o assinalarem à condição o mais proeminente e invulnerável esquema mas também o pendor de dificuldades perante as construções tangíveis. O Rumo Perante O Fim Da Metas do \u0026ldquo;Computador Quântico Tolerante A Falhas\u0026rdquo; (FTQC) Nos moldes vigentes a rondarem na atual da computação usual de igual forma os desvios informáticos acham registo (qual erros devido da volta inversiva aos bits derivados por feixe radiação do céu cósmico), por ser impecavelmente regularizada da chamada aplicação do método aos \u0026ldquo;códigos pela verificação retificativa das falhas\u0026rdquo;, não lhes atestamos no usar normal um smartphone sequer algum aborrecimento de desvios. É essencial assim em favor na pretensão futura do processar amplo nível da base nos quânticos a exigência vital, do igualmente equivalente meio com, de nome da \u0026ldquo;Correção de Erros Quânticos\u0026rdquo; (Quantum Error Correction: QEC) sendo indispensavelmente imperativo no uso do funcionamento.\nExiste o abismo das contradições na exigência em virtude das imposições da quântica, por não permitir poder certificar (observar os elementos no seu seio) ao confirmar falhas pois as posições destroem a fragilidade dessa dita forma existencial e essencial. Fugindo ao defeito dilemático de ordem desse patamar, consolida-se e constitui por um formato base em arquitetar o juntar astuto nos modelos por abundantes e sensíveis dos tais \u0026ldquo;qubits físicos\u0026rdquo;, para estruturar num suporte sustentável com de apenas e somente um forte detetador verificativo base a partir no sistema a de se considerar, chamando então isto o código das superfície por tais arranjos formados em num único nome \u0026ldquo;qubit lógico\u0026rdquo;. Entretanto estima-se que no ato para construir apenas dum único qubit lógico em conta serão absorvidos na roda das necessidades do entorno de algo por valores das centenas à classe na fasquia da grandeza, ou nos cerca dos 1000 a das ordens dez milhares dos mesmos qubits de físico estatuto. Num hipotético modelo do operar milhares dos ditos de lógicas dimensões sob algoritmo do Shor no processamento vai haver imponente premente imperativos num sistema imensamente formidável em base colossal a congregar conjuntos nas centenas dos milhares podendo abranger das dezenas nos patamares dos milhões dos referidos bits quânticos materiais e componentes operativas reais.\nHoje chamam habitamos nestas eras, tempos da idade transição que em sigla, do título nos modelos das NISQ (Noisy Intermediate-Scale Quantum: computação em níveis médios na via de escalas intermédias associado da distúrbio interferência). Reflete a não presença ainda corretiva aos erros, a correr ao nível de algumas dúzias e de algumas escassas escalas centenas dos seus qubits a laborar. Almeja alcançar a finalíssima meta por parte nos experts projetando previsões que ao almejado com do título de poder absoluto pela robusta correta erradicação falibilidade num inteiro perfeitamente formatado \u0026ldquo;Computador Quântico Tolerante a Falhas\u0026rdquo; (Fault-Tolerant Quantum Computer: FTQC), o qual é aguardado nos careceres ainda no transpor destas na via da longa demora de pesquisa avançando à roda da ordem dos dez aos algumas décimos dos mais longo anos sobre em persistente empenho desenvolvimental e de laboratorial pesquisa.\nCapítulo 6: Historial Das Eras e Vista às Visões no Perspetivar dos Modelos Quânticos no Computador Nos encerramentos num fim rematar focado em perspetiva a visão onde nasceram as ideias rumo nestas sendas destas origens para onde as destinações dos percursos sobre modelos dos referidos equipamentos do aparelho quântico irão derivar pelo decorrer global no abrangente olhar analítico.\nNascimentos Desde A Géneses Sob Modelos Teóricos Ate Sobre Real Das Constatações Pelos Atributos E Da \u0026ldquo;Supremacia Quântica\u0026rdquo; Anos 1980 : O professor de Física Paul Benioff bem consoante pelo eminente Richard Feynman lançam sobre o tema sugerido da formulação de conceito baseado ao uso da essência nos princípios quântico na física ao uso nas vias para o meio pelo campo do computador e seus domínios. A ignição advém desta frase em máxima sob: \u0026ldquo;Simular a via das leis origens matriz em modelos naturais é mandatório usares sobre vias ao meio baseado nas regras pela dita mecânica quântica\u0026rdquo;. Ano 1994 : O matemático Peter Shor introduz do princípio algoritmos aos usos num modo quântico por efeito da fatoração em base aos seus número primos, o designado pelo algoritmo da sua matriz inventiva Shor. Um grande e imenso abanão da comoção mundial foi gerado motivado nas vastas das correntes monetárias colossais no impulsionar na porta da entrada virada à via na senda perante financiamentos de busca e investigação. Ano 1996 : O eminente Lov Grover descortinou à base, por sua matriz das investigações nas lógicas computacionais ao avanço formidável sob velocidade por otimização às matriz de buscas aos algoritmos num sistema não indexado de dados no banco através, sendo da designada forma conhecido pelo método Grover. Ano 2019 : O passo nos tempos por via de grandes enquadramentos de histórico rumo em marcos alcançados. Ao jeito, Google publica acerca nas usabilidades ao recurso por matriz das ordens estruturadas em matriz físicas nos sistemas à volta aos componentes numa das supercondutoras em redes via chips nas bases contendo do conjunto com 53 qubits processadores o célebre do seu modo chamado na alcunha de título em nome a via da processador à dita referência \u0026ldquo;Sycamore\u0026rdquo;, do fechar nas balizas das medições sob avaliações nos moldes e formas da ordem aos moldes clássico de padrão via computadores superiores na baliza sobre matriz geradora da vertente perante geração randómica avaliativa num número avalizado para a via na dimensão nas casas sobre valores correspondentes dez nas numerais grandeza na soma sob medida mil anos pela dimensão, no final sendo apenas por fechado completando cerca as exatas à fasquia a contar pouco num cômputo e espaço apenas 200 de limitados do escassos tempo em base aos segundo final. Na via do evento das ordens pioneiras chamando na divulgação dita publicamente com à escala no contexto pelo o nome por \u0026ldquo;Supremacia Quântica\u0026rdquo; (Quantum Supremacy) na via das proclamação declaradas na demonstração sendo imensamente badaladas perante vastíssima repercussões que na praça mediática por entre grandes temas. Desde 2023 : A IBM anuncia com o seu grandioso projeto sob vias do processador referenciado de título ao projeto pelo seu designativo ao batismo no seu termo \u0026ldquo;Condor\u0026rdquo; com a via transcendendo no exceder mil unidades dos qubits processamento na grandeza computacional. Concomitante reporta pelas diversas grandes faculdades superiores universidades sendo no destaque base, Harvard etc, sendo nas referidas relatórios na via sob verificação de triunfos sucesso nas gerações via manipulações dos denominados \u0026ldquo;qubits lógicos\u0026rdquo; a serem na referidas vias das fase precursora da incipiente primeira via aos patamares à correção das devidas técnicas sobre erros. Num Horizonte Orientado e Visado Para Na Via às Tecnologias Nas Suas Geracionais Fases Seguintes Modelos de tipologia no baseamento na formulação na via do âmbito na esfera computador aos meios modelo no mundo da formula quântico ao sistema nunca será na pura conceção vista nos limites ao mero figurado mero da restrita e estrita visualização de conceito de mero e rápido CPU que avança mais uns largos valores velocidade base de ciclos de pulso à futura referida geração matriz nas ordens do relógio base. Ele altera no modo em essências a pura redefinição sob bases nos parâmetros no modelo conceitual da raiz com que se designam no atuar cálculos pelo ditar total pelas ditas em regras, mecânica das naturezas do universo nas originais raízes formadas ao micromundo numa revolucional e plena viragem matriz paradigmática ao conhecimento na base campo referida da informacional em ciência pura.\nPelas vias do tempo do trajeto durante nas nossas vivas vida as vias da época da viabilidade num acesso aos formatos nos padrões normais aos equipamentos móveis habituais ao estilo dos que residem de molde à via e nas medidas dos espaços ao portáteis bolso de casaco, dificilmente a vir acontecerá à realidade. Na verdade perante e obstante o dito nas linhas acimas de uma via perante percurso certas da realidade que em dia próximo virá das grandiosas imponentes nos modelos às gigantes na referida à da vasta à extensa teias da arquiteturas virtuais em redes pela bases à cloud nas remotas instalações e imensos complexos gigantes à centros das dados modelo na fórmula quânticas, o surgimento fulcral virá destas nas inovações ao poder aos modelos.\nA portal abertura nas porta matriz das senda base aos portais de um de e no horizonte com vistas a todo o perante quântico e com de universos à matriz só o muito agora que, há curtos os e apenas se de curtos nos passos encontram sendo referida as fases nas desabrochar. Do e que não no perder ao de em constante vistas sem os do desviar via a fixação com os os nosso atenciosos dos os de olhar nas com perante os ao das vistas os desenvolvimentos futuros vias nas do próximos de eventos próximos, de ao referida das desenvolvimentos perante das perante na de das via com as perspetivas e com das futuros.\nEste artigo tem a finalidade de narrar, da forma mais descomplicada no conhecimento do universo profissional das finanças de capital das sociedades civis e às simples gentes sem conhecimento mas interessadas num foco instrutivo e didático, todas as diretrizes básicas da ciência computacional quântica. Note que não estão incluídas abordagens de minúcias matemáticas rigorosas.\n","date":"2026-09-05T22:10:00+09:00","image":"http://kenji.blog/p/quantum-computer-basics/quantum_basics_eyecatch_1788613712487_huf997c6e55368509d0617b56f68899854_1084950_120x120_fill_q75_box_smart1.jpg","permalink":"http://kenji.blog/pt/p/quantum-computer-basics/","title":"[Análise Completa] O que é um Computador Quântico? ~ Princípios Finais da Computação do Zero ~"},{"content":"Introdução: A \u0026ldquo;Ameaça\u0026rdquo; dos Computadores Quânticos à Criptografia Atualmente, muitas das comunicações que realizamos diariamente na internet —— desde pagamentos em serviços bancários online, navegação em sites (HTTPS), troca de mensagens em aplicativos, até transações de blockchain e criptomoedas —— são protegidas por uma tecnologia chamada \u0026ldquo;criptografia de chave pública\u0026rdquo;. Especificamente, algoritmos como a criptografia RSA e a criptografia de curva elíptica (ECC) são os pilares que sustentam a confiabilidade da nossa sociedade digital moderna.\nEsses métodos de criptografia baseiam sua segurança em problemas matemáticos complexos, como a \u0026ldquo;fatoração de números primos gigantes\u0026rdquo; e o \u0026ldquo;problema do logaritmo discreto\u0026rdquo;, que levariam um tempo astronômico para serem resolvidos por computadores clássicos atuais (incluindo supercomputadores). No entanto, com a concretização dos \u0026ldquo;computadores quânticos\u0026rdquo; , que têm feito progressos notáveis nos últimos anos, essa premissa será fundamentalmente derrubada.\nO \u0026ldquo;Algoritmo de Shor\u0026rdquo;, publicado por Peter Shor em 1994, provou matematicamente que, se usarmos um computador quântico com desempenho suficiente, poderemos resolver a fatoração de números primos e o problema do logaritmo discreto em um tempo extremamente curto. Isso significa que a comunicação criptografada que protege a internet hoje corre o risco de ser totalmente decodificada no futuro (um problema conhecido como Y2Q: Years to Quantum, ou Q-Day).\nAinda mais grave é a existência de um método de ataque chamado \u0026ldquo;Harvest Now, Decrypt Later\u0026rdquo; (Roube agora, decifre depois). Dados que precisam manter a confidencialidade por décadas, como informações confidenciais de estados, propriedade intelectual corporativa e informações biométricas pessoais, já podem ser alvo de roubo hoje, com a intenção de serem decodificados no futuro.\nPara responder a essa crise sem precedentes, criptógrafos e instituições de pesquisa em todo o mundo estão trabalhando juntos para desenvolver a criptografia de próxima geração que pode manter a segurança mesmo contra ataques de computadores quânticos, a Criptografia Pós-Quântica (PQC) . Neste artigo, explicaremos em detalhes desde os fundamentos da PQC até os mecanismos de seus principais algoritmos e as tendências mais recentes de padronização global lideradas pelo Instituto Nacional de Padrões e Tecnologia dos EUA (NIST).\nO que é a Criptografia Pós-Quântica (PQC)? A Criptografia Pós-Quântica (Post-Quantum Cryptography, PQC) é um termo genérico para algoritmos de criptografia projetados para operar em computadores clássicos existentes e, ao mesmo tempo, serem resistentes a ataques (como o algoritmo de Shor) de computadores quânticos de grande escala que surgirão no futuro.\nTecnologias frequentemente confundidas com ela são a \u0026ldquo;Criptografia Quântica (Quantum Cryptography)\u0026rdquo; e a \u0026ldquo;Distribuição Quântica de Chaves (QKD)\u0026rdquo;, mas estas são abordagens completamente diferentes. A criptografia quântica (QKD) é uma tecnologia baseada em hardware que utiliza as leis físicas da mecânica quântica (como a propriedade de que o estado muda ao ser observado) para tornar a espionagem nos canais de comunicação fisicamente impossível. Ela requer fibras ópticas dedicadas e equipamentos especiais, enfrentando desafios como custos de implementação e limitações de distância.\nPor outro lado, a PQC é uma tecnologia de criptografia baseada em software, fundamentada puramente em \u0026ldquo;matemática\u0026rdquo; . Portanto, ela pode ser incorporada à infraestrutura de internet existente, servidores, smartphones, navegadores, etc., como uma atualização de software, sendo altamente aplicável ao mundo real. Empresas de TI e governos de todo o mundo consideram urgente substituir (migrar) o RSA e o ECC atualmente em uso por esta PQC.\nAs 4 Principais Abordagens Matemáticas que Sustentam a PQC Vários algoritmos de PQC foram propostos, baseando-se em problemas matemáticos complexos (como problemas NP-difíceis) que não podem ser resolvidos de forma eficiente mesmo com um computador quântico. Aqui, apresentaremos as 4 principais categorias que dominam atualmente.\nPrincipais Abordagens da Criptografia Pós-Quântica (PQC) 1 2 3 4 5 6 7 8 9 10 11 12 graph LR PQC[Criptografia Pós-Quântica PQC] --\u0026gt; L[Criptografia baseada em reticulados Lattice-based] PQC --\u0026gt; H[Criptografia baseada em hash Hash-based] PQC --\u0026gt; M[Criptografia multivariada Multivariate] PQC --\u0026gt; C[Criptografia baseada em códigos Code-based] L --\u0026gt; L1(FIPS 203: ML-KEM) L --\u0026gt; L2(FIPS 204: ML-DSA) H --\u0026gt; H1(FIPS 205: SLH-DSA) style PQC fill:#f9f,stroke:#333,stroke-width:2px 1. Criptografia baseada em reticulados (Lattice-based Cryptography) Atualmente, esta \u0026ldquo;criptografia baseada em reticulados\u0026rdquo; é considerada a mais promissora e é a principal tendência no campo da PQC. A criptografia de reticulados baseia sua segurança em problemas relacionados a pontos dispostos regularmente (pontos de reticulado) em um espaço multidimensional. Problemas famosos incluem o \u0026ldquo;Problema do Vetor Mais Curto (SVP: Shortest Vector Problem)\u0026rdquo; e o \u0026ldquo;Problema de Aprendizado com Erros (LWE: Learning With Errors)\u0026rdquo;.\nVisão geral do mecanismo: Imagine que inumeráveis pontos estão dispostos em forma de grade (reticulado) dentro de um espaço de dimensão muito alta (centenas a milhares de dimensões). Encontrar um ponto de reticulado específico é fácil em 2 ou 3 dimensões, mas quando se trata de centenas de dimensões, ainda não foi descoberto nenhum algoritmo que o encontre de forma eficiente, seja em um computador clássico ou quântico. O problema LWE, em particular, utiliza a propriedade de que \u0026ldquo;se você adicionar propositalmente um pequeno \u0026lsquo;ruído (erro)\u0026rsquo; a um sistema de equações lineares, torna-se drasticamente mais difícil adivinhar as variáveis originais\u0026rdquo;.\nVantagens:\nAplicável tanto ao compartilhamento de chaves (KEM) quanto às assinaturas digitais. A velocidade de processamento é muito rápida (em alguns casos, mais rápida que RSA e ECC). O tamanho da chave e o tamanho do texto cifrado são relativamente pequenos, oferecendo um bom equilíbrio. Muitos dos algoritmos atualmente sendo padronizados pelo NIST (como ML-KEM e ML-DSA) adotam essa criptografia baseada em reticulados.\n2. Criptografia baseada em hash (Hash-based Cryptography) A criptografia baseada em hash é um algoritmo PQC especializado em assinaturas digitais. A base de sua segurança depende exclusivamente da resistência à colisão e da unidirecionalidade de \u0026ldquo;funções de hash criptográficas\u0026rdquo; seguras, como SHA-2 e SHA-3.\nVisão geral do mecanismo: Ela tem como ponto de partida um esquema de assinatura descartável de uso único (assinatura de uso único) chamado \u0026ldquo;Assinatura Lamport (Lamport Signature)\u0026rdquo;. Ao agrupar isso em um formato de dados em estrutura de árvore chamado \u0026ldquo;Árvore de Merkle (Merkle Tree)\u0026rdquo;, possibilita múltiplas assinaturas com um único par de chaves.\nVantagens:\nA base de segurança é extremamente robusta, com a forte prova de que \u0026ldquo;é segura desde que a função de hash seja segura\u0026rdquo;. Como a dependência de estruturas matemáticas é baixa, o risco de serem descobertos métodos inesperados de decodificação é menor. Desvantagens:\nNão pode ser usada para compartilhamento de chaves (KEM), servindo apenas para assinaturas digitais. O tamanho da assinatura tende a ser grande. Existem as modalidades \u0026ldquo;stateful\u0026rdquo; (com estado) e \u0026ldquo;stateless\u0026rdquo; (sem estado). A versão stateful (como XMSS) requer um gerenciamento rigoroso do número de vezes que a chave é usada, tornando a implementação mais difícil. O NIST padronizou o \u0026ldquo;SLH-DSA (anteriormente SPHINCS+)\u0026rdquo; como uma assinatura baseada em hash stateless.\n3. Criptografia multivariada (Multivariate Cryptography) A criptografia de polinômios multivariados baseia sua segurança na dificuldade de resolver um sistema de equações polinomiais quadráticas simultâneas com muitas variáveis (Problema MQ: Multivariate Quadratic problem). Sabe-se que este problema é NP-difícil.\nVisão geral do mecanismo: O remetente cria um texto cifrado (assinatura) substituindo o texto simples (ou valor de hash) em uma equação complexa com muitas variáveis fornecida como chave pública. O destinatário legítimo possui como chave privada uma \u0026ldquo;informação oculta (alçapão) que converte a estrutura da equação em uma forma fácil de resolver\u0026rdquo;, usando-a para realizar a decodificação (ou verificação de assinatura).\nVantagens:\nO tamanho da assinatura é muito pequeno. A velocidade de verificação da assinatura é extremamente alta. É adequado para dispositivos de IoT com recursos limitados. Desvantagens:\nO tamanho da chave pública é muito grande (pode chegar a dezenas ou centenas de kilobytes). No passado, algoritmos proeminentes (como Rainbow) foram quebrados por ataques clássicos, tornando mais difícil estabelecer a confiança na segurança em comparação com outros métodos. 4. Criptografia baseada em códigos (Code-based Cryptography) A criptografia baseada em códigos aplica a teoria dos \u0026ldquo;códigos de correção de erros\u0026rdquo;, usados para corrigir erros nos canais de comunicação, à criptografia. A \u0026ldquo;Criptografia McEliece\u0026rdquo;, proposta em 1978, é a mais famosa e uma das mais antigas entre as PQC.\nVisão geral do mecanismo: O remetente codifica o texto simples usando a chave pública do destinatário (a matriz geradora de um código de correção de erros que oculta uma estrutura específica), adiciona um erro intencional (ruído) e o envia. O destinatário usa a chave privada para remover o erro e extrair o texto simples. Um decodificador precisaria corrigir os erros a partir de um código aleatório sem conhecer sua estrutura; isso é chamado de \u0026ldquo;problema geral de decodificação de síndrome\u0026rdquo;, que é comprovadamente NP-difícil.\nVantagens:\nTendo sido exaustivamente estudada por mais de 40 anos e sem nenhum ataque eficaz encontrado até agora, a confiança na sua segurança é extremamente alta. Os processos de criptografia e descriptografia são rápidos. Desvantagens:\nO tamanho da chave pública é imenso (pode chegar a vários megabytes). Portanto, é difícil usá-la em ambientes com limitações de largura de banda de comunicação ou memória (como no handshake de TLS). Tendências Recentes na Padronização PQC pelo NIST O Instituto Nacional de Padrões e Tecnologia dos EUA (NIST) iniciou em 2016 uma chamada global para algoritmos de criptografia pós-quântica de próxima geração, realizando avaliações rigorosas e várias rodadas de análises ao longo de anos.\nEm 2024, o NIST finalmente anunciou os seguintes três algoritmos como Padrões Federais de Processamento de Informações (FIPS) oficiais. Isso concluiu a formação de uma base sólida para que organizações em todo o mundo comecem a implementá-los em ambientes de produção.\nPadrões FIPS Estabelecidos (2024) FIPS 203: ML-KEM (Nome anterior: CRYSTALS-Kyber)\nUso: Mecanismo de encapsulamento de chaves (KEM) / Criptografia e compartilhamento de chaves Tecnologia base: Criptografia baseada em reticulados (Module-LWE) Características: Oferece um excelente equilíbrio entre o tamanho da chave e a velocidade. Servirá como o compartilhamento de chaves PQC padrão para usos comuns da internet, como comunicação na Web (TLS) e aplicativos de mensagens seguros. FIPS 204: ML-DSA (Nome anterior: CRYSTALS-Dilithium)\nUso: Assinatura digital Tecnologia base: Criptografia baseada em reticulados (Module-LWE) Características: O principal padrão para assinaturas digitais. Permite processamento eficiente, tornando-se o novo padrão para todas as aplicações de assinatura eletrônica, como assinaturas de software e autenticação de documentos. FIPS 205: SLH-DSA (Nome anterior: SPHINCS+)\nUso: Assinatura digital Tecnologia base: Criptografia baseada em hash (stateless) Características: Desempenha um papel vital como um backup caso vulnerabilidades sejam descobertas na criptografia baseada em reticulados no futuro. Embora o tamanho da assinatura seja grande, é adequado para aplicações que exigem confiabilidade de longo prazo. Busca por Maior Diversidade Embora o NIST tenha concluído o processo inicial de padronização, ele continua buscando mais algoritmos. Especialmente porque os padrões estão muito inclinados para a \u0026ldquo;criptografia baseada em reticulados\u0026rdquo;, a garantia da diversidade de algoritmos (Crypto Diversity) é altamente valorizada. A avaliação da criptografia baseada em códigos e outros métodos está em andamento como padrão de backup para compartilhamento de chaves, e a base da PQC deve se tornar ainda mais robusta no futuro.\nCenários e Desafios da Transição para a PQC: A Importância da \u0026ldquo;Agilidade Criptográfica\u0026rdquo; Com o lançamento de padrões oficiais pelo NIST, agências governamentais, instituições financeiras e empresas de tecnologia em todo o mundo acelerarão a transição (migração) do RSA/ECC existente para a PQC. Diretrizes de agências como a NSA (Agência de Segurança Nacional dos EUA) também recomendam a conclusão antecipada dessa transição.\nAdoção da Abordagem Híbrida Como os algoritmos PQC são novos, eles não passaram pelo \u0026ldquo;teste do tempo\u0026rdquo; em comparação com a criptografia clássica. Considerando os riscos de bugs ocultos em implementações ou a descoberta de novos métodos de ataque, recomenda-se uma \u0026ldquo;abordagem híbrida\u0026rdquo; durante o período de transição. Isso envolve realizar a troca de chaves combinando criptografia existente e comprovada (por exemplo, ECDHE) com a nova PQC (por exemplo, ML-KEM). Atualmente, as principais implementações de teste dessa abordagem estão avançando rapidamente em navegadores e serviços em nuvem.\nAtingindo a Agilidade Criptográfica (Crypto-Agility) O que empresas e desenvolvedores de sistemas devem ter mais em mente daqui para frente é garantir a \u0026ldquo;Agilidade Criptográfica (Crypto-Agility)\u0026rdquo; . É essencial ter um projeto arquitetônico flexível que permita a substituição e atualização rápida dos algoritmos de criptografia sem paralisar o sistema, caso falhas sejam encontradas nos algoritmos no futuro ou surjam novos padrões.\nCriar um inventário criptográfico (CBOM: Cryptography Bill of Materials) que identifique com precisão \u0026ldquo;onde\u0026rdquo;, \u0026ldquo;qual criptografia\u0026rdquo; e \u0026ldquo;para qual propósito\u0026rdquo; está sendo usada dentro do sistema da empresa é um primeiro passo vital em direção à transição para PQC.\nConclusão: Preparando-se para o \u0026ldquo;Q-Day\u0026rdquo; Iminente A evolução dos computadores quânticos trará enormes benefícios à humanidade, mas ao mesmo tempo representa a maior ameaça à segurança criptográfica que é a base de nossa sociedade digital moderna. A Criptografia Pós-Quântica (PQC) não é mais um \u0026ldquo;tema de pesquisa para um futuro distante\u0026rdquo;. Com o marco da publicação dos padrões FIPS pelo NIST, a PQC entrou na fase de \u0026ldquo;implementação e transição\u0026rdquo; em larga escala.\nConsiderando a ameaça do \u0026ldquo;Harvest Now, Decrypt Later\u0026rdquo;, a transição para a PQC é a maior prioridade a ser tratada \u0026ldquo;agora mesmo\u0026rdquo; por todas as organizações que lidam com dados altamente confidenciais. Ao entender profundamente as tecnologias de criptografia de próxima geração e aumentar a agilidade criptográfica dos sistemas, poderemos superar com segurança a iminente era dos computadores quânticos.\n","date":"2026-09-05T22:09:22+09:00","image":"http://kenji.blog/p/post-quantum-cryptography/post_quantum_cryptography_1788613735417_hu9d405d830ed3e56e9e703ab601cf6c0a_1143219_120x120_fill_q75_box_smart1.jpg","permalink":"http://kenji.blog/pt/p/post-quantum-cryptography/","title":"【PQC】A Visão Geral da \"Criptografia Pós-Quântica\", a Criptografia da Próxima Geração na Era da Computação Quântica"},{"content":"Introdução: A Interseção entre Criptografia e Computadores Quânticos Na sociedade da internet moderna, a base para proteger o segredo das comunicações é a \u0026ldquo;criptografia de chave pública\u0026rdquo;. Um dos mais representativos é a \u0026ldquo;Criptografia RSA\u0026rdquo;, desenvolvida em 1977 por Ron Rivest, Adi Shamir e Leonard Adleman. Desde pagamentos de compras online que usamos diariamente, navegação em sites (HTTPS), até envio e recebimento de e-mails, a criptografia RSA funciona como o coração da infraestrutura da internet.\nNo entanto, com o surgimento dos \u0026ldquo;computadores quânticos\u0026rdquo;, foi apontado que essa segurança pode ser subvertida desde a base. Na mídia, às vezes vemos manchetes sensacionalistas como \u0026ldquo;Se um computador quântico for concluído, senhas e criptografias em todo o mundo serão decifradas em segundos\u0026rdquo;. Mas será que isso é verdade?\nNeste artigo, aprofundaremos como funcionam o GNFS (General Number Field Sieve), um método clássico de descriptografia, e a versão definitiva dos algoritmos de descriptografia usando computadores quânticos, o \u0026ldquo;Algoritmo de Shor (Shor\u0026rsquo;s Algorithm)\u0026rdquo;. Explicaremos de forma fácil conceitos avançados, como a transformação quântica de Fourier e a descoberta de períodos, e examinaremos em detalhes o estado atual do hardware quântico na era NISQ (Noisy Intermediate-Scale Quantum) e os obstáculos reais necessários para quebrar a RSA-2048.\nO Núcleo da Criptografia RSA: A Dificuldade da Fatoração em Números Primos A segurança da criptografia RSA depende de uma assimetria extremamente simples na matemática. Trata-se do fato de que \u0026ldquo;é fácil multiplicar dois números primos gigantes, mas é extremamente difícil encontrar (fatorar em números primos) os dois números primos originais a partir do resultado dessa multiplicação (número composto)\u0026rdquo;.\nPor exemplo, suponha que existam dois números primos, $ p = 61 $ e $ q = 53 $. Calcular esta multiplicação $ N = p \\times q = 3233 $ é instantâneo. No entanto, se receber apenas o número \u0026ldquo;3233\u0026rdquo; e tiver que resolver \u0026ldquo;de quais números primos essa é a multiplicação?\u0026rdquo;, a quantidade de cálculos explode à medida que o número se torna maior.\nNo RSA-2048, que é a norma atual, o comprimento da chave é de 2048 bits, ou seja, é usado um número composto gigante $ N $ que chega a cerca de 617 dígitos em decimal. Se esse $ N $ puder ser fatorado em números primos, a criptografia será essencialmente decifrada.\nO Desafio dos Computadores Clássicos: GNFS (General Number Field Sieve) Para resolver o problema da fatoração em números primos, matemáticos e criptógrafos desenvolveram vários algoritmos ao longo dos anos. Entre eles, o que atualmente é considerado o mais rápido em computadores clássicos é o GNFS: General Number Field Sieve.\nO GNFS é um método que expande e analisa os cálculos no anel de inteiros para um corpo algébrico (Number Field) mais abstrato, a fim de fatorar o número gigante $ N $. O fluxo geral é o seguinte.\nSeleção de Polinômio : Encontrar um polinômio $ f(x) $ com grau e coeficientes apropriados, que tenha $ N $ como raiz. Coleta de Dados (Peneiramento) : No corpo dos números racionais e no corpo algébrico, procuramos em grande quantidade por pares de números que podem ser decompostos em números primos pequenos (números suaves, Smooth numbers). Esse processo é chamado de \u0026ldquo;peneiramento\u0026rdquo; e é a parte que leva mais tempo. Geração e Redução de Matriz : Com base nas relações coletadas, uma enorme matriz esparsa (uma matriz em que a maioria dos componentes é zero) é gerada e resolvida usando métodos de álgebra linear (como o método de Block Lanczos). Cálculo da Raiz Quadrada : Finalmente, calcula-se a raiz quadrada no corpo algébrico para derivar os fatores (fatores primos) de $ N $. A complexidade computacional do GNFS é avaliada não assintoticamente como $ O(\\exp((\\sqrt[3]{\\frac{64}{9}} + o(1)) (\\log N)^{\\frac{1}{3}} (\\log \\log N)^{\\frac{2}{3}})) $. Isso é chamado de complexidade de tempo \u0026ldquo;Sub-exponencial\u0026rdquo; (Sub-exponential). Embora seja mais rápido que o tempo exponencial, é muito mais lento que o tempo polinomial (Polynomial time).\nDe fato, em 2020, uma equipe de pesquisa internacional obteve sucesso em fatorar a RSA-250 (829 bits, número composto de 250 dígitos) usando o GNFS. Esse cálculo consumiu um tempo computacional enorme, equivalente a cerca de 2700 CPU-core anos, reunindo recursos de computação de todo o mundo. No entanto, quando isso chega a 2048 bits, é mencionado que a quantidade de cálculo necessária explodiria para trilhões de vezes a idade do universo, tornando impossível descriptografar em um tempo realista com métodos clássicos, não importa quantos supercomputadores atuais funcionem em paralelo.\nO Trunfo do Computador Quântico: Algoritmo de Shor Aqui é onde entra o \u0026ldquo;Algoritmo de Shor\u0026rdquo;, publicado por Peter Shor em 1994. Esse algoritmo foi revolucionário por permitir que o problema de fatoração em números primos fosse resolvido no computador quântico em tempo polinomial ( $ O((\\log N)^3) $ ). A diferença entre tempo sub-exponencial e polinomial é decisiva e significa, na teoria, que a criptografia RSA será completamente destruída se um computador quântico for usado.\nFluxo Geral do Algoritmo de Shor 1 2 3 4 5 6 7 8 9 10 graph TD A[Inserir o número N que se deseja fatorar] --\u0026gt; B[Selecionar um número inteiro aleatório a] B --\u0026gt; C{Máximo divisor comum\u0026lt;br\u0026gt;entre a e N} C --\u0026gt;|Maior que 1| D[Por sorte, um fator primo foi encontrado!] C --\u0026gt;|1 Primos entre si| E[Vez do computador quântico] E --\u0026gt; F[Encontrar o período r da\u0026lt;br\u0026gt;função f_x = a^x mod N por Transformação Quântica de Fourier] F --\u0026gt; G{O período r é par e\u0026lt;br\u0026gt;a^r/2 ≢ -1 mod N} G --\u0026gt;|Sim| H[Calcular o máximo divisor comum gcd_a^r/2 ± 1, N] H --\u0026gt; I((Fatoração bem sucedida!)) G --\u0026gt;|Não| B O algoritmo de Shor não resolve o problema da fatoração em números primos diretamente, mas usa teoremas da teoria dos números para convertê-lo em outro problema chamado \u0026ldquo;Problema de Descoberta de Período\u0026rdquo; (Period Finding Problem) e, em seguida, resolve isso rapidamente aproveitando as características do computador quântico.\nPasso 1: Redução da Fatoração ao Problema de Descoberta de Período (Processamento Clássico) O primeiro passo do algoritmo é feito em um computador clássico. Para o número $ N $ que se deseja fatorar, escolhe-se um número inteiro aleatório $ a $ ( $ 1 \u003c a \u003c N $ ) que seja co-primo (com o máximo divisor comum igual a 1) com $ N $. Se por acaso o máximo divisor comum não for 1, o divisor comum encontrado nesse momento já é um fator de $ N $, e a fatoração está concluída, mas a probabilidade é extremamente baixa.\nEm seguida, considere a sequência das seguintes equações modulares: $ f(x) = a^x \\pmod N $\nSubstituindo $ x = 1, 2, 3, \\dots $ nesta função $ f(x) $, os valores parecem aleatórios, mas como são calculados em um limite finito, eles sempre voltarão ao valor original em algum ponto, repetindo a mesma sequência de números. Este ciclo de repetição é chamado de período $ r $. Ou seja, O problema de encontrar o menor número inteiro positivo $ r $ tal que $ a^r \\equiv 1 \\pmod N $, este é o \u0026ldquo;Problema de Descoberta de Período\u0026rdquo;.\nSe este período $ r $ for encontrado, e $ r $ for um número par, então $ a^r - 1 \\equiv 0 \\pmod N $, e usando a fórmula de fatoração, pode ser transformado em $ (a^{r/2} - 1)(a^{r/2} + 1) \\equiv 0 \\pmod N $. A partir daqui, ao calcular o máximo divisor comum entre $ N $ e $ a^{r/2} \\pm 1 $ usando o algoritmo de Euclides, um fator de $ N $ pode ser obtido com uma probabilidade extremamente alta.\nPara encontrar o período $ r $ em um computador clássico, no final, etapas exponenciais são necessárias e isso não pode ser acelerado. No entanto, com um computador quântico, este período $ r $ pode ser encontrado em um instante (tempo polinomial).\nPasso 2: Preparação e Superposição do Estado Quântico A partir daqui é a vez do computador quântico. Os computadores quânticos usam \u0026ldquo;qubits\u0026rdquo;, que podem ter o estado \u0026ldquo;0\u0026rdquo; e \u0026ldquo;1\u0026rdquo; simultaneamente. No algoritmo de Shor, são preparados dois registradores: o primeiro para armazenar a entrada e o segundo para os resultados do cálculo.\nPrimeiro, uma operação de porta quântica chamada porta de Hadamard (Hadamard gate) é aplicada a todos os qubits do primeiro registrador. Isso coloca o primeiro registrador em um estado de superposição uniforme de todos os valores concebíveis de $ x $ (de $ 0 $ a $ 2^n-1 $. $ n $ é um número de bits suficientemente grande).\nEm outras palavras, dentro do computador quântico, é criado um estado em que incontáveis valores de entrada como $ x=0, 1, 2, 3, \\dots $ existem em paralelo ao mesmo tempo.\nPasso 3: Exponenciação Modular Quântica (Quantum Modular Exponentiation) Em seguida, o estado de superposição do primeiro registrador é usado como entrada para calcular $ f(x) = a^x \\pmod N $, e o resultado é armazenado no segundo registrador. Como este cálculo é executado como uma transformação unitária no circuito quântico, o cálculo de $ f(x) $ para todos os $ x $ é feito de forma \u0026ldquo;paralela (paralelismo quântico)\u0026rdquo; enquanto a superposição é mantida.\nO espaço do sistema quântico inteiro neste ponto, torna-se uma enorme superposição de estados $ |x, a^x \\bmod N\\rangle $.\nNo entanto, se você simplesmente medir (observar) o segundo registrador aqui, um valor aleatório de $ a^x \\bmod N $ será probabilisticamente selecionado, e em conjunto com isso, o $ x $ do primeiro registrador também será determinado. Isso não é diferente de calcular uma vez em um computador clássico, e você não conseguirá encontrar o período $ r $.\nNas regras da mecânica quântica, você não pode observar o conteúdo de um estado de superposição diretamente. Então, como extrair a informação global chamada \u0026ldquo;período\u0026rdquo;?\nPasso 4: Transformada Quântica de Fourier (QFT: Quantum Fourier Transform) O verdadeiro valor do algoritmo de Shor, que supera esse obstáculo, é a aplicação da Transformada Quântica de Fourier (QFT) ao primeiro registrador.\nAntes de medir, analisamos a natureza da onda da função $ f(x) $. Vamos supor que o segundo registrador foi observado. Suponha que um valor $ y $ foi obtido. Então, o estado do primeiro registrador encolhe para \u0026ldquo;a superposição de todos os $ x $ tais que $ a^x \\pmod N = y $\u0026rdquo;. O valor deste $ x $ estará em um estado discreto com intervalos do período $ r $ (uma espécie de distribuição de amplitude de probabilidade em forma de pente), como $ x_0, x_0 + r, x_0 + 2r, x_0 + 3r, \\dots $.\nAplicamos a Transformada Quântica de Fourier (QFT) a este estado. Assim como a Transformada Discreta de Fourier clássica converte sinais no domínio do tempo para o domínio da frequência, a QFT faz com que as amplitudes de probabilidade do estado quântico interfiram.\nQuando a QFT é aplicada, devido ao efeito de interferência quântica, as probabilidades de respostas incorretas que não ressoam com o período $ r $ (fases não alinhadas) se cancelam mutuamente chegando perto de zero (interferência destrutiva), e apenas as probabilidades da resposta correta contendo a informação do período $ r $ são amplificadas (interferência construtiva).\nPasso 5: Medição e Fração Contínua (Pós-processamento Clássico) Após aplicar a QFT, se você medir o primeiro registrador, com uma probabilidade muito alta, um número inteiro $ c $ próximo à forma $ c \\approx \\frac{j \\cdot 2^n}{r} $ será obtido ( $ j $ é um inteiro desconhecido, e $ 2^n $ é o tamanho do registrador).\nTrazendo o resultado desta medição $ c $ de volta para um computador clássico, criamos uma fração $ \\frac{c}{2^n} \\approx \\frac{j}{r} $. Em seguida, usando o método matemático da \u0026ldquo;Expansão de Fração Contínua\u0026rdquo; (Continued fraction expansion) para calcular valores aproximados, podemos descobrir o período $ r $, que é o denominador.\nUma vez conhecido o $ r $, o resto é calcular os fatores de $ N $ usando a fórmula do Passo 1, e a criptografia RSA é completamente quebrada.\nA Força e os Desafios do Computador Quântico Atual (NISQ) Embora teoricamente o algoritmo de Shor seja perfeito, se perguntado \u0026ldquo;A criptografia RSA será quebrada amanhã?\u0026rdquo;, a resposta é claramente \u0026ldquo;Não\u0026rdquo;. O motivo está nas limitações da tecnologia de hardware dos computadores quânticos atuais.\nA Era NISQ (Noisy Intermediate-Scale Quantum) A era em que nos encontramos atualmente é chamada de \u0026ldquo;NISQ\u0026rdquo;. Dispositivos NISQ possuem dezenas a centenas de qubits físicos, mas são extremamente vulneráveis ao ruído.\nOs qubits são facilmente afetados pelo ambiente externo, como calor e ondas eletromagnéticas, e ocorrem frequentemente \u0026ldquo;decoerência\u0026rdquo; (perda de emaranhamento quântico), onde o estado quântico se quebra, e \u0026ldquo;erros de porta\u0026rdquo; durante as operações. Quando se tenta executar um circuito quântico muito profundo (com um número enorme de passos operacionais) como o algoritmo de Shor, os erros se acumulam durante o cálculo e a saída final torna-se puro ruído sem significado.\nQubit Físico e Qubit Lógico O que é essencial para resolver este problema de erros é a \u0026ldquo;Correção de Erros Quânticos\u0026rdquo; (Quantum Error Correction). Embora códigos de correção de erros também sejam usados em computadores clássicos, devido ao \u0026ldquo;teorema da não-clonagem\u0026rdquo;, que proíbe a cópia de estados quânticos, a correção de erros quânticos é extremamente complexa.\nNa correção de erros quânticos, utilizando tecnologias como \u0026ldquo;Código de Superfície\u0026rdquo; (Surface Code), muitos \u0026ldquo;qubits físicos\u0026rdquo; ruidosos são combinados para criar um \u0026ldquo;qubit lógico\u0026rdquo; ideal e livre de erros.\nAssumindo a taxa de erro atual, estima-se que cerca de 1.000 a 10.000 qubits físicos seriam necessários para criar um único qubit lógico. Isso é chamado de \u0026ldquo;overhead da correção de erros\u0026rdquo;.\nQue Recursos são Necessários para Quebrar a RSA-2048? Então, para realmente descriptografar a RSA-2048, quantos recursos seriam necessários para rodar o algoritmo de Shor?\nEm uma estimativa inovadora de recursos em um artigo de 2021 de Craig Gidney (Google) e Martin Ekerå, foi afirmado que se um algoritmo de Shor otimizado fosse usado, e correção de erros com código de superfície fosse realizada, os seguintes recursos seriam necessários:\nNúmero de qubits lógicos : Aproximadamente 4.096 Número de qubits físicos : Aproximadamente 20 milhões (assumindo uma taxa de erro de $10^{-3}$) Tempo de cálculo : Aproximadamente 8 horas (milhões a bilhões de operações físicas de porta necessárias) Em contraste com isso, qual é o nível que o hardware quântico atual alcançou? O processador quântico supercondutor \u0026ldquo;Condor\u0026rdquo;, anunciado pela IBM no final de 2023, possui 1.121 qubits. Além disso, pesquisas inovadoras sobre a geração de qubits lógicos têm aparecido (como a geração de 48 qubits lógicos usando computadores quânticos de átomos neutros pela Universidade de Harvard, QuEra, etc.), mas ainda não chegamos no estágio de conseguir executar \u0026ldquo;cálculos perfeitos e sem ruído\u0026rdquo; continuamente por longos períodos.\nPassar de alguns milhares de qubits físicos para 20 milhões de qubits físicos práticos (que estão interconectados, operam de forma estável em temperaturas ultrabaixas e podem processar sinais de controle em velocidades ultrarrápidas) apresenta uma enorme barreira na engenharia (problemas de fiação, limites da capacidade de refrigeração e inchaço da eletrônica de controle). Muitos especialistas preveem que levará pelo menos 10 a 30 anos, ou mais, até que um \u0026ldquo;Computador Quântico Tolerante a Falhas\u0026rdquo; (FTQC - Fault-Tolerant Quantum Computer), capaz de quebrar a RSA-2048, se torne uma realidade.\nA Ameaça Silenciosa de \u0026ldquo;Store Now, Decrypt Later\u0026rdquo; e o Amanhecer da PQC Concluir que \u0026ldquo;estamos seguros porque ainda levará mais de 10 anos\u0026rdquo; é precipitado. Atualmente, existem dados que devem ser mantidos em segredo por décadas no futuro, como segredos de estado, dados médicos e projetos de infraestrutura de longo prazo.\nA preocupação aqui é o método de ataque chamado \u0026ldquo;Store Now, Decrypt Later\u0026rdquo; (Armazene Agora, Descriptografe Depois). Nações ou organizações mal-intencionadas interceptam todos os dados de comunicação atualmente criptografados usando RSA ou ECC (Criptografia de Curva Elíptica) e os guardam no armazenamento. E então, no momento em que um poderoso computador quântico for concluído em 10 ou 20 anos, eles usarão o algoritmo de Shor para descriptografar todos os dados do passado e expor os segredos.\nPara combater essa ameaça de tempo, liderado pelo NIST (Instituto Nacional de Padrões e Tecnologia dos EUA), o processo de padronização da \u0026ldquo;Criptografia Pós-Quântica\u0026rdquo; (PQC: Post-Quantum Cryptography) tem sido acelerado em ritmo acelerado.\nA PQC é um novo algoritmo de criptografia baseado em problemas matemáticos que são difíceis de descriptografar mesmo usando um computador quântico (ou seja, o algoritmo de Shor não pode ser aplicado). Como principais abordagens, temos:\nCriptografia baseada em reticulados (Lattice-based cryptography) : Baseado em problemas como LWE (Learning with Errors). O método dominante na padronização do NIST (Kyber, Dilithium, etc.). Criptografia baseada em códigos (Code-based cryptography) : Depende da dificuldade do problema de decodificação de códigos corretores de erro. Criptografia polinomial multivariável (Multivariate cryptography) : Depende da dificuldade de resolver equações quadráticas simultâneas multivariáveis. Assinaturas baseadas em hash (Hash-based signatures) : Assinaturas digitais que dependem exclusivamente da segurança das funções de hash. Testes de implementação e implementações híbridas da PQC já foram iniciados nos principais softwares e plataformas, como o Google Chrome e o iMessage da Apple.\nConclusão Os computadores quânticos estão passando de histórias de ficção científica para desafios reais de engenharia. O algoritmo de Shor é uma grande conquista intelectual da humanidade que mescla a matemática e a mecânica quântica, mas, ao mesmo tempo, guarda um \u0026ldquo;poder destrutivo\u0026rdquo; para sacudir as bases da nossa sociedade digital.\nIsso não significa que a criptografia RSA se tornará inutilizável a partir de amanhã. No entanto, considerando a evolução da tecnologia quântica e o risco do \u0026ldquo;Store Now, Decrypt Later\u0026rdquo;, a grande migração que ficará na história da criptografia - a transição para a PQC - já começou. Agora estamos testemunhando a linha de frente de uma mudança de paradigma na segurança da informação.\n","date":"2026-09-05T22:09:21+09:00","image":"http://kenji.blog/p/shors-algorithm-and-rsa-breaking/quantum_breaking_rsa_1788613722990_huf997c6e55368509d0617b56f68899854_1017504_120x120_fill_q75_box_smart1.jpg","permalink":"http://kenji.blog/pt/p/shors-algorithm-and-rsa-breaking/","title":"Computadores Quânticos Realmente Destruirão a Criptografia RSA? ~O Algoritmo de Shor e o Estado Atual~"},{"content":"【Análise Completa】Entendendo e Implementando o Mais Forte Algoritmo de Quebra de Criptografia \u0026ldquo;GNFS\u0026rdquo; em C++ A criptografia RSA, que sustenta a internet moderna, baseia-se na crença matemática de que \u0026ldquo;é virtualmente impossível para os computadores atuais fatorar números compostos gigantescos\u0026rdquo;.\nNo entanto, a humanidade nunca desistiu. Atualmente, existe o mais forte e avançado algoritmo da humanidade para a fatoração de grandes números primos em computadores clássicos (não quânticos). É o \u0026ldquo;General Number Field Sieve (GNFS - Crivo Geral do Corpo de Números)\u0026rdquo;.\nNeste artigo, publicaremos o código de implementação completo que modela estritamente a lógica de computação mais avançada do GNFS em C++ (usando os inteiros de multiprecisão boost::multiprecision da biblioteca Boost), e explicaremos minuciosamente as profundezas da \u0026ldquo;teoria algébrica dos números\u0026rdquo; por trás dele.\nPor favor, aproveite os mistérios da matemática e a força bruta da ciência da computação que os domina, juntamente com o código-fonte.\n1. Framework de Lógica GNFS Avançado (Código Fonte Completo) Primeiro, apresentaremos o quadro geral da implementação C++ do GNFS que explicaremos desta vez. Embora o GNFS real (como o CADO-NFS) seja um enorme sistema distribuído que abrange centenas de milhares de linhas, este código extrai e modela as \u0026ldquo;5 pipelines (fases) essenciais\u0026rdquo; que compõem o GNFS no design de classes, na configuração mínima, sem perder seu significado matemático.\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 #include \u0026lt;iostream\u0026gt; #include \u0026lt;vector\u0026gt; #include \u0026lt;cmath\u0026gt; #include \u0026lt;map\u0026gt; #include \u0026lt;set\u0026gt; #include \u0026lt;chrono\u0026gt; #include \u0026lt;boost/multiprecision/cpp_int.hpp\u0026gt; // Usando inteiros de multiprecisão do Boost.Multiprecision using namespace boost::multiprecision; // ============================================================================ // [SOTA GNFS] Framework Lógico Avançado do General Number Field Sieve (Crivo Geral do Corpo de Números) // // Este código modela estritamente os 5 pipelines avançados do GNFS usados // no CADO-NFS etc., como o design de classes C++ (Boost). // ============================================================================ struct Relation { int64_t a; int64_t b; std::vector\u0026lt;uint32_t\u0026gt; rational_primes; std::vector\u0026lt;uint32_t\u0026gt; algebraic_primes; }; // ============================================================================ // Fase 1: Polynomial Selection (Seleção Polinomial - Algoritmo de KleinJung) // ============================================================================ class PolynomialSelector { public: int degree; std::vector\u0026lt;cpp_int\u0026gt; f; // Polinômio do lado algébrico f(x) std::vector\u0026lt;cpp_int\u0026gt; g; // Polinômio do lado racional g(x) = x - m cpp_int m; PolynomialSelector(int d) : degree(d) {} // Geração do polinômio inicial baseado na expansão base-m (Na realidade, usa a redução de base reticulada LLL, que é mais avançada) void select(const cpp_int\u0026amp; N) { std::cout \u0026lt;\u0026lt; \u0026#34;[Fase 1] Seleção Polinomial (Grau \u0026#34; \u0026lt;\u0026lt; degree \u0026lt;\u0026lt; \u0026#34;) iniciando...\u0026#34; \u0026lt;\u0026lt; std::endl; // Expansão base-m simples (grau d) // m = N^(1/d) cpp_int N_copy = N; m = 1; // Aproximação simples de m (Aproximação sem usar as funções do Boost) cpp_int low = 1, high = N; while (low \u0026lt;= high) { cpp_int mid = low + (high - low) / 2; cpp_int p = 1; for(int i=0; i\u0026lt;degree; ++i) p *= mid; if (p \u0026lt;= N) { m = mid; low = mid + 1; } else { high = mid - 1; } } f.resize(degree + 1); cpp_int temp = N; for (int i = 0; i \u0026lt;= degree; ++i) { f[i] = temp % m; temp /= m; } g = {-m, 1}; // g(x) = x - m std::cout \u0026lt;\u0026lt; \u0026#34; -\u0026gt; m = \u0026#34; \u0026lt;\u0026lt; m \u0026lt;\u0026lt; std::endl; std::cout \u0026lt;\u0026lt; \u0026#34; -\u0026gt; f(x) = \u0026#34;; for(int i = degree; i \u0026gt;= 0; --i) { std::cout \u0026lt;\u0026lt; f[i] \u0026lt;\u0026lt; \u0026#34;x^\u0026#34; \u0026lt;\u0026lt; i \u0026lt;\u0026lt; (i \u0026gt; 0 ? \u0026#34; + \u0026#34; : \u0026#34;\u0026#34;); } std::cout \u0026lt;\u0026lt; \u0026#34;\\n[Fase 1] Concluída.\u0026#34; \u0026lt;\u0026lt; std::endl; } }; // ============================================================================ // Fase 2: Lattice Sieving (Crivo de Reticulado) // ============================================================================ // Nos últimos anos, em vez de Line Sieve (Crivo de Linha), o Special-q Lattice Sieving (Crivo de Reticulado q Especial) // de Franke-Kleinjung e outros é o padrão de fato. class LatticeSieve { uint32_t rational_bound; uint32_t algebraic_bound; std::vector\u0026lt;uint32_t\u0026gt; rational_fb; std::vector\u0026lt;uint32_t\u0026gt; algebraic_fb; public: LatticeSieve(uint32_t rb, uint32_t ab) : rational_bound(rb), algebraic_bound(ab) {} void generate_factor_bases() { std::cout \u0026lt;\u0026lt; \u0026#34;[Fase 2] Gerando Bases de Fator (Limite Racional: \u0026#34; \u0026lt;\u0026lt; rational_bound \u0026lt;\u0026lt; \u0026#34;, Limite Algébrico: \u0026#34; \u0026lt;\u0026lt; algebraic_bound \u0026lt;\u0026lt; \u0026#34;)\u0026#34; \u0026lt;\u0026lt; std::endl; // (Omitido) Na realidade, ele gera números primos e restringe usando o símbolo de Legendre etc. } std::vector\u0026lt;Relation\u0026gt; sieve(const PolynomialSelector\u0026amp; poly) { std::cout \u0026lt;\u0026lt; \u0026#34;[Fase 2] Special-q Lattice Sieving ativo...\u0026#34; \u0026lt;\u0026lt; std::endl; std::vector\u0026lt;Relation\u0026gt; relations; // Implementação simulada: O crivo de reticulado real varre centenas de GB de espaço de memória em unidades de bloco. // Mapeia o par (a, b) para a grade para cada primo especial q (a = i*q + j*...) e // executa um sieve (crivo) que maximiza a eficiência do cache ao limite. // Adicionando uma relação simulada para fins de demonstração Relation r; r.a = 17; r.b = 3; r.rational_primes = {2, 5}; r.algebraic_primes = {3, 7}; relations.push_back(r); std::cout \u0026lt;\u0026lt; \u0026#34;[Fase 2] Encontradas \u0026#34; \u0026lt;\u0026lt; relations.size() \u0026lt;\u0026lt; \u0026#34; relações.\u0026#34; \u0026lt;\u0026lt; std::endl; return relations; } }; // ============================================================================ // Fase 3: Filtering (Expurgo de Singularidades e Fusão de Cliques) // ============================================================================ class Filter { public: void reduce_matrix(std::vector\u0026lt;Relation\u0026gt;\u0026amp; relations) { std::cout \u0026lt;\u0026lt; \u0026#34;[Fase 3] Filtrando Relações...\u0026#34; \u0026lt;\u0026lt; std::endl; // 1. Singleton removal (Remoção de relações com números primos que aparecem apenas uma vez) // 2. Clique merging (Fusão de relações para tornar uma matriz esparsa em uma matriz densa) // Na verdade, comprime matrizes de centenas de milhões de linhas em alguns milhões usando algoritmos como Union-Find. std::cout \u0026lt;\u0026lt; \u0026#34;[Fase 3] Tamanho da matriz reduzido idealmente.\u0026#34; \u0026lt;\u0026lt; std::endl; } }; // ============================================================================ // Fase 4: Linear Algebra over GF(2) (Método Block Wiedemann) // ============================================================================ class LinearAlgebraGF2 { public: // Em ambientes de supercomputadores recentes, o Método Block Wiedemann (Implementação de Coppersmith) // é usado como a tecnologia mais avançada porque é mais adequado para computação distribuída // do que o Método Block Lanczos. std::vector\u0026lt;std::vector\u0026lt;int\u0026gt;\u0026gt; solve_nullspace(const std::vector\u0026lt;Relation\u0026gt;\u0026amp; relations) { std::cout \u0026lt;\u0026lt; \u0026#34;[Fase 4] Algoritmo de Block Wiedemann sobre GF(2) iniciando...\u0026#34; \u0026lt;\u0026lt; std::endl; // Repete a operação de produto da matriz esparsa e vetor, // e encontra vários vetores de solução (kernel) em que M * x = 0 mod 2. std::vector\u0026lt;std::vector\u0026lt;int\u0026gt;\u0026gt; dependencies; // Lista de dependências // Dados simulados dependencies.push_back({0}); std::cout \u0026lt;\u0026lt; \u0026#34;[Fase 4] Encontradas \u0026#34; \u0026lt;\u0026lt; dependencies.size() \u0026lt;\u0026lt; \u0026#34; dependências lineares (quadrados perfeitos).\u0026#34; \u0026lt;\u0026lt; std::endl; return dependencies; } }; // ============================================================================ // Fase 5: Algebraic Square Root (Raiz Quadrada Algébrica) // ============================================================================ class AlgebraicSquareRoot { public: void compute_and_factor(const std::vector\u0026lt;Relation\u0026gt;\u0026amp; relations, const std::vector\u0026lt;int\u0026gt;\u0026amp; dep, const cpp_int\u0026amp; N) { std::cout \u0026lt;\u0026lt; \u0026#34;[Fase 5] Computação da Raiz Quadrada Algébrica...\u0026#34; \u0026lt;\u0026lt; std::endl; // 1. Cálculo da raiz quadrada V no lado racional (Operação de inteiro simples) cpp_int V = 1; // V = sqrt( prod(a - bm) ) mod N // 2. Cálculo da raiz quadrada gamma no lado algébrico (Método de Montgomery, etc.) // Obtém o elemento gamma do enorme corpo algébrico O_K e o mapeia para o mundo real com o homomorfismo phi // Y = phi(gamma) mod N cpp_int Y = 1; // Pressupõe que sequências de Caracteres Quadráticos (Quadratic Characters) // foram adicionadas nas Fases 2 e 4 para evitar a obstrução (Obstruction) do grupo de classes de ideais e o grupo de unidades. std::cout \u0026lt;\u0026lt; \u0026#34; -\u0026gt; Mapa de homomorfismo phi aplicado.\u0026#34; \u0026lt;\u0026lt; std::endl; std::cout \u0026lt;\u0026lt; \u0026#34;[Fase 5] Calculando GCD(V - Y, N)...\u0026#34; \u0026lt;\u0026lt; std::endl; cpp_int factor = gcd(V - Y, N); // GCD(X-Y, N) if (factor \u0026gt; 1 \u0026amp;\u0026amp; factor \u0026lt; N) { std::cout \u0026lt;\u0026lt; \u0026#34;\\n================================================================\u0026#34; \u0026lt;\u0026lt; std::endl; std::cout \u0026lt;\u0026lt; \u0026#34;[SUCESSO] Fator não trivial encontrado: \u0026#34; \u0026lt;\u0026lt; factor \u0026lt;\u0026lt; std::endl; std::cout \u0026lt;\u0026lt; \u0026#34; Outro fator: \u0026#34; \u0026lt;\u0026lt; N / factor \u0026lt;\u0026lt; std::endl; std::cout \u0026lt;\u0026lt; \u0026#34;================================================================\u0026#34; \u0026lt;\u0026lt; std::endl; } else { std::cout \u0026lt;\u0026lt; \u0026#34;[FALHA] Solução trivial. Tentando próxima dependência...\u0026#34; \u0026lt;\u0026lt; std::endl; } } }; // ============================================================================ // Main Execution Pipeline (Pipeline de Execução Principal) // ============================================================================ int main() { std::cout \u0026lt;\u0026lt; \u0026#34;================================================================\u0026#34; \u0026lt;\u0026lt; std::endl; std::cout \u0026lt;\u0026lt; \u0026#34; [SOTA GNFS] Motor do General Number Field Sieve (Boost C++) \u0026#34; \u0026lt;\u0026lt; std::endl; std::cout \u0026lt;\u0026lt; \u0026#34;================================================================\u0026#34; \u0026lt;\u0026lt; std::endl; // O grande número composto N que queremos fatorar, como RSA-270 cpp_int N(\u0026#34;233108530344407544527637656910680524145619812480305449042948611968495918245135782867888369318577116418213919268572658314913060672626911354027609793166341626693946596196427744273886601876896313468704059066746903123910748277606548649151920812699309766587514735456594993207\u0026#34;); // Grau do polinômio (Normalmente, de 5º a 6º grau é selecionado para números com mais de 130 dígitos) int degree = 6; // Inicializando pipelines PolynomialSelector poly_select(degree); LatticeSieve sieve(10000000, 20000000); // Na realidade, os limites são dezenas de milhões a centenas de milhões Filter filter; LinearAlgebraGF2 linalg; AlgebraicSquareRoot sqrt_step; auto start_time = std::chrono::high_resolution_clock::now(); // 1. Seleção Polinomial poly_select.select(N); // 2. Processamento do Sieve (Crivo) sieve.generate_factor_bases(); std::vector\u0026lt;Relation\u0026gt; relations = sieve.sieve(poly_select); // 3. Filtragem (Compressão de Matriz) filter.reduce_matrix(relations); // 4. Álgebra Linear (Busca de espaço nulo (Nullspace) em GF(2)) std::vector\u0026lt;std::vector\u0026lt;int\u0026gt;\u0026gt; dependencies = linalg.solve_nullspace(relations); // 5. Cálculo da Raiz Quadrada Algébrica e GCD for (const auto\u0026amp; dep : dependencies) { sqrt_step.compute_and_factor(relations, dep, N); } auto end_time = std::chrono::high_resolution_clock::now(); std::chrono::duration\u0026lt;double\u0026gt; elapsed = end_time - start_time; std::cout \u0026lt;\u0026lt; \u0026#34;\\n[Sistema] Pipeline GNFS Avançado concluído em \u0026#34; \u0026lt;\u0026lt; elapsed.count() \u0026lt;\u0026lt; \u0026#34; segundos.\u0026#34; \u0026lt;\u0026lt; std::endl; return 0; } Então, como este código quebra os muros da criptografia? Explicaremos detalhadamente a matemática avançada e os algoritmos precisos para cada uma das 5 fases.\n2. Objetivo Final do GNFS: $X^2 \\equiv Y^2 \\pmod N$ O objetivo da maioria dos algoritmos modernos de fatoração de grandes números, não apenas o GNFS, é encontrar um par não trivial $(X, Y)$ que satisfaça a seguinte congruência:\n$$X^2 \\equiv Y^2 \\pmod N$$ Esta fórmula significa que \u0026ldquo;o resto de $X^2$ e $Y^2$ quando divididos por $N$ é o mesmo\u0026rdquo;. Se reescrevermos isso, obtemos: $X^2 - Y^2 \\equiv 0 \\pmod N$ Em outras palavras, $(X-Y)(X+Y)$ é um múltiplo de $N$.\nSe $X \\not\\equiv \\pm Y \\pmod N$ (uma solução não trivial), então haverá um \u0026ldquo;divisor comum maior que 1 e menor que $N$\u0026rdquo; entre $(X-Y)$ e $N$. Aqui, usando o algoritmo de Euclides para calcular $\\gcd(X-Y, N)$ , os fatores primos de $N$ podem ser encontrados muito facilmente.\nNo entanto, encontrar esses $X$ e $Y$ é como procurar uma agulha em um palheiro. Portanto, o GNFS tem uma abordagem genial: criar dois mundos - \u0026ldquo;o mundo dos inteiros reais\u0026rdquo; e \u0026ldquo;o mundo dos corpos algébricos dos polinômios\u0026rdquo; - e distribuir a computação.\n3. Fase 1: Seleção Polinomial (Polynomial Selection) 1 2 3 4 5 6 7 8 9 10 11 12 class PolynomialSelector { // ... void select(const cpp_int\u0026amp; N) { // Cálculo de m = N^(1/d) e expansão base-m // ... for (int i = 0; i \u0026lt;= degree; ++i) { f[i] = temp % m; temp /= m; } g = {-m, 1}; // g(x) = x - m } }; O primeiro passo do GNFS é criar os \u0026ldquo;polinômios mágicos\u0026rdquo; para fazer a ponte entre os dois mundos. Para um número muito grande $N$, escolhemos um número inteiro $m$. Normalmente o escolhemos de modo que $m \\approx N^{1/d}$ (no código, assumimos um polinômio de grau $d=6$).\nEm seguida, o $N$ é expandido na base $m$, e esses coeficientes são usados para construir um polinômio $f(x)$. $$N = c_d m^d + c_{d-1} m^{d-1} + \\dots + c_1 m + c_0$$ $$f(x) = c_d x^d + c_{d-1} x^{d-1} + \\dots + c_1 x + c_0$$ Este polinômio $f(x)$ tem uma propriedade muito importante: \u0026ldquo;Se substituirmos $x$ por $m$, o resultado será exatamente $N$ ($f(m) = N$)\u0026rdquo; . Em outras palavras, $f(m) \\equiv 0 \\pmod N$. O polinômio do lado racional é definido como $g(x) = x - m$.\nCom isso, \u0026ldquo;o mundo do corpo algébrico $\\mathbb{Z}[\\alpha]$\u0026rdquo; governado pela raiz $\\alpha$ de $f(x)=0$, e \u0026ldquo;o mundo dos números racionais (inteiros) $\\mathbb{Z}$\u0026rdquo; estão fortemente ligados pelo \u0026ldquo;mapa de homomorfismo de anel\u0026rdquo; $x \\to m$.\nNo CADO-NFS mais avançado, usa-se o algoritmo de KleinJung ou o algoritmo de redução de base de reticulado LLL para passar meses procurando o \u0026ldquo;polinômio mais conveniente $f(x)$\u0026rdquo; cujos coeficientes não são extremamente grandes e em que os números primos são mais propensos a aparecer (lisos) nas etapas subsequentes.\n4. Fase 2: Crivo de Reticulado $q$ Especial (Special-q Lattice Sieving) 1 2 3 4 5 6 7 8 9 class LatticeSieve { // ... std::vector\u0026lt;Relation\u0026gt; sieve(const PolynomialSelector\u0026amp; poly) { // ... // Mapeia os pares (a, b) para reticulados baseados em cada número primo especial q // e executa o sieve (crivo) de forma muito eficiente usando a memória cache. // ... } }; Com os dois mundos prontos, o próximo passo é procurar \u0026ldquo;números lisos\u0026rdquo; (números compostos apenas por números primos pequenos) em ambos os mundos. Geramos inúmeros pares de inteiros $(a, b)$ e calculamos os dois valores a seguir:\nValor racional: $a - bm$ Norma algébrica: $b^d f(a/b)$ O objetivo do GNFS é coletar de dezenas a centenas de milhões desses \u0026ldquo;pares (Relação) em que os valores dos lados racional e algébrico podem ser completamente decompostos em fatores primos pequenos\u0026rdquo; .\nNo GNFS inicial, era usado o \u0026ldquo;Line Sieve\u0026rdquo; (Crivo de Linha), no qual $(a, b)$ são alinhados em um plano $xy$ e sequencialmente divididos por números primos da borda. Mas esse método apresentava a fraqueza de ser muito lento por acessar memórias espalhadas causando muitos erros de cache.\nPor isso, na vanguarda, utiliza-se a técnica \u0026ldquo;Crivo de Reticulado $q$ Especial (Special-q Lattice Sieve)\u0026rdquo;. Isso fixa um número primo consideravelmente grande $q$ e visa calcular apenas \u0026ldquo;os pares $(a, b)$ nos quais o valor algébrico é sempre divisível por $q$\u0026rdquo;. Os $(a, b)$ que satisfazem essa condição formam uma \u0026ldquo;Lattice\u0026rdquo; (Reticulado) no plano. Então, a largura do salto dos endereços de memória a calcular torna-se constante, o que se adapta perfeitamente aos caches L1/L2 da CPU. Graças a essa introdução do Crivo de Reticulado, a velocidade de computação do GNFS aumentou drasticamente.\n5. Fase 3: Filtragem (Filtering) 1 2 3 4 5 6 7 class Filter { public: void reduce_matrix(std::vector\u0026lt;Relation\u0026gt;\u0026amp; relations) { // 1. Singleton removal (Remoção de relações com números primos que aparecem apenas uma vez) // 2. Clique merging (Fusão de relações para tornar uma matriz esparsa em uma matriz densa) } }; Na Fase 2, as relações coletadas ao longo de meses por computadores em todo o mundo somam centenas de milhões. No entanto, se inserirmos isso como está no próximo passo de \u0026ldquo;resolução do sistema de equações\u0026rdquo; (cálculo de matriz), a memória dos supercomputadores falhará.\nPortanto, ocorre um processo de supercompressão de matriz chamado Filtering (Filtragem) .\nSingleton removal (Expurgo de singularidades): Suponha que um número primo enorme $p$ apareça \u0026ldquo;apenas uma vez\u0026rdquo; entre as centenas de milhões de relações. Nosso objetivo é \u0026ldquo;tornar o expoente de todos os números primos um número par (múltiplo de 2)\u0026rdquo;; os números primos que aparecem apenas uma vez nunca podem ser tornados pares. Portanto, a relação que inclui aquele número primo é imediatamente removida (expurgada) como \u0026ldquo;lixo sem utilidade\u0026rdquo;. Quando isso acontece em cadeia, os dados que antes eram de centenas de milhões de linhas são sistematicamente reduzidos.\nClique merging (Fusão de cliques): Ao cruzar e somar relações que compartilham um número primo em comum, diminuímos o número de linhas e, simultaneamente, transformamos a matriz esparsa (cheia de zeros) numa matriz mais densa (método semelhante à busca de cliques na teoria dos grafos).\nCom essas otimizações, a gigantesca matriz esparsa é comprimida a um tamanho possível de calcular.\n6. Fase 4: Álgebra Linear em GF(2) (Método Block Wiedemann) 1 2 3 4 5 6 7 class LinearAlgebraGF2 { public: std::vector\u0026lt;std::vector\u0026lt;int\u0026gt;\u0026gt; solve_nullspace(const std::vector\u0026lt;Relation\u0026gt;\u0026amp; relations) { // Repete a operação de produto da matriz esparsa e vetor, // e encontra vários vetores de solução (kernel) em que M * x = 0 mod 2. } }; Finalmente, a essência do quebra-cabeça. Multiplicamos as relações recolhidas buscando as \u0026ldquo;combinações que tornam o expoente de todos os fatores primos par\u0026rdquo; .\nEm termos matemáticos, isso equivale a encontrar um vetor de solução $x$ (espaço nulo / kernel) onde, utilizando uma matriz gigante $M$ com elementos sendo o expoente de cada número primo no \u0026ldquo;par ou ímpar (ou seja, 0 ou 1)\u0026rdquo; e um vetor $x$ que diz quais relações usar, temos: $M \\cdot x \\equiv 0 \\pmod 2$\nÉ necessário resolver equações simultâneas de uma matriz de milhões de linhas por milhões de colunas. O uso tradicional do método de eliminação de Gauss levaria $O(N^3)$ em tempo de cálculo e não acabaria antes do fim do universo.\nPor esse motivo, as implementações de ponta utilizam o \u0026ldquo;Método de Block Wiedemann\u0026rdquo;. Esse método aproveita que a matriz $M$ é \u0026ldquo;extremamente esparsa (quase totalmente zeros)\u0026rdquo; para obter a solução multiplicando iterativamente matrizes por vetores. É um tipo de método do subespaço de Krylov. Diferente do antigo Block Lanczos, o método Block Wiedemann pode particionar totalmente o processo computacional entre vários clusters, tornando seu uso extremamente valioso em clusters modernos e em sistemas paralelos de computação distribuída (cloud e supercomputadores).\n7. Fase 5: Raiz Quadrada Algébrica (Algebraic Square Root) e o Colapso Criptográfico 1 2 3 4 5 6 7 8 9 10 11 12 13 class AlgebraicSquareRoot { public: void compute_and_factor(...) { // 1. Cálculo da raiz quadrada V no lado racional cpp_int V = 1; // 2. Cálculo da raiz quadrada gamma no lado algébrico cpp_int Y = 1; // ... cpp_int factor = gcd(V - Y, N); // GCD(X-Y, N) } }; Pelo cálculo matricial na Fase 4, adquirimos o \u0026ldquo;conjunto de relações $S$ cujos expoentes de todos os fatores primos formam um expoente par quando multiplicados juntos\u0026rdquo;. Isto possibilita construir o \u0026ldquo;quadrado perfeito\u0026rdquo; em ambos os mundos: o lado racional e o lado algébrico.\nNo lado racional, o cálculo é uma simples multiplicação de números inteiros, por isso é simples calcular sua raiz quadrada $V$. $$V^2 = \\prod_{S} (a - bm)$$ Porém, o real pesadelo encontra-se no \u0026ldquo;lado algébrico\u0026rdquo;. No mundo do corpo algébrico $\\mathbb{Z}[\\alpha]$, dado que a unicidade da fatoração em primos não é mantida, realizávamos cálculos usando ideais. A garantia dada pelo cálculo matricial era \u0026ldquo;apenas que seria o quadrado de um ideal, e não garantia que seria o quadrado de um elemento ($\\gamma^2$)\u0026rdquo;.\nDeste modo, surge uma imensa barreira provinda da teoria algébrica dos números, as chamadas \u0026ldquo;Obstrução do grupo de classes de ideais\u0026rdquo; e a \u0026ldquo;Obstrução do grupo das unidades\u0026rdquo;. No GNFS, usamos a mágica do \u0026ldquo;Caracter Quadrático (Quadratic Characters)\u0026rdquo; para quebrar essa parede. Inserimos sorrateiramente várias colunas de símbolos residuais quadráticos (símbolos de Legendre) na matriz da Fase 4 para uma dezena de números ideais primos, de forma que a chance de as obstruções sumirem aumente brutalmente, e que assim, garantam finalmente \u0026ldquo;o autêntico quadrado de um elemento $\\gamma^2$\u0026rdquo;.\nEm seguida, calcula-se o $\\gamma$ (raiz quadrada algébrica) usando algoritmos complexos, como o método de Montgomery.\nPor último, fazemos a raiz algébrica $\\gamma$ sofrer um \u0026ldquo;warp\u0026rdquo; para o mundo verdadeiro usando o mapa de homomorfismo de anéis $\\phi$ (substituindo $x$ por $m$) para encontrar $Y$. Quando colocamos o $V$ do lado racional para ser o $X$, a equação absoluta cobiçada está finalmente perfeita.\n$$X^2 \\equiv Y^2 \\pmod N$$\nO restante é somente resolver o $\\gcd(X-Y, N)$. Em milissegundos o processo acaba e exibe o fator não trivial impresso na tela. Nesse instante, a criptografia impenetrável RSA é inteiramente derrubada.\nConclusão O GNFS não é só uma técnica de programação. Trata-se de forçar as \u0026ldquo;profundezas da matemática pura\u0026rdquo; como álgebra abstrata, teoria dos anéis e os grupos de classe ideal através do poder colossal da \u0026ldquo;engenharia extrema\u0026rdquo;, como arquitetura de computadores distribuída em supercomputadores, além de otimizações de cache; um pilar glorioso da mente humana.\nPor trás de transações por cartão de crédito ou simples chats do dia-a-dia, encontra-se esta astronômica barreira defensiva construída através do poderio e batalha da matemática.\nEspero que compreendam que, na retaguarda dos fortes algoritmos criptográficos, existe um \u0026ldquo;romance dos computadores com a matemática\u0026rdquo; oculto neste simples framework em C++.\n","date":"2026-09-05T13:04:59+09:00","image":"http://kenji.blog/p/gnfs-cpp-implementation/gnfs_cpp_blog_eyecatch_1788580949217_hu57b4110ce75cf76414fb819be22bae03_985705_120x120_fill_q75_box_smart1.jpg","permalink":"http://kenji.blog/pt/p/gnfs-cpp-implementation/","title":"【Análise Completa】Entendendo e Implementando o Mais Forte Algoritmo de Quebra de Criptografia 'GNFS' em C++"},{"content":"A Verdadeira Estrutura Matemática do Crivo Geral dos Corpos de Números (GNFS) O objetivo final do GNFS é encontrar $X, Y$ tais que $X^2 \\equiv Y^2 \\pmod N$. Para alcançar isso, os matemáticos construíram uma ponte entre o \u0026ldquo;mundo dos inteiros reais\u0026rdquo; e o \u0026ldquo;mundo dos corpos algébricos\u0026rdquo; . Essa ponte é exatamente o \u0026ldquo;homomorfismo\u0026rdquo;.\nFase 1: Conectando os mundos com \u0026ldquo;Homomorfismo\u0026rdquo; 1. Seleção do polinômio e definição das raízes Para um número composto gigante $N$, escolhemos um inteiro $m$ e um polinômio $f(x)$ tais que $f(m) \\equiv 0 \\pmod N$. (Exemplo: Expandimos $N$ na base $m$ e criamos $f(x)$ a partir de seus coeficientes. Neste momento, assumimos que $f(x)$ é irredutível sobre o corpo dos números racionais $\\mathbb{Q}$ (não pode ser mais fatorado)).\nEm seguida, definimos uma das \u0026ldquo;raízes complexas\u0026rdquo; da equação $f(x) = 0$ como $\\alpha$. Naturalmente, $f(\\alpha) = 0$. $\\alpha$ não é um número inteiro, mas um número complexo envolvendo raízes e números imaginários (um número algébrico).\n2. Construção de Anéis (Rings) e Homomorfismo Aqui, preparamos dois \u0026ldquo;anéis\u0026rdquo; matemáticos (mundos onde adição e multiplicação são definidas).\nMundo A: $\\mathbb{Z}[\\alpha]$ (O anel dos inteiros algébricos contendo $\\alpha$) Um mundo de números expressos na forma $a + b\\alpha + c\\alpha^2 + \\dots$. Mundo B: $\\mathbb{Z}/N\\mathbb{Z}$ (O anel dos restos módulo $N$) Um mundo de congruências composto apenas por inteiros de $0$ a $N-1$. Aqui, definimos um mapeamento $\\phi$ do Mundo A para o Mundo B da seguinte forma. $$\\phi : \\mathbb{Z}[\\alpha] \\to \\mathbb{Z}/N\\mathbb{Z}$$ $$\\phi(\\alpha) = m \\pmod N$$\nEste mapeamento $\\phi$ é uma operação mágica que substitui exatamente a variável $\\alpha$ do Mundo A pelo inteiro $m$ do Mundo B. Este $\\phi$ possui uma propriedade extremamente poderosa chamada \u0026ldquo;Homomorfismo de Anéis (Ring Homomorphism)\u0026rdquo; . Homomorfismo é a propriedade de \u0026ldquo;teleportar para outro mundo sem destruir a estrutura da adição e multiplicação\u0026rdquo; . Em outras palavras, as seguintes equações são válidas:\n$\\phi(X \\times Y) = \\phi(X) \\times \\phi(Y)$ $\\phi(X^2) = \\phi(X)^2$ O que isso significa? Se pudermos criar o \u0026ldquo;quadrado ($\\gamma^2$)\u0026rdquo; de algum elemento complexo $\\gamma$ no \u0026ldquo;Mundo A (o mundo de $\\alpha$)\u0026rdquo;, e teleportá-lo para o \u0026ldquo;Mundo B (mundo dos restos)\u0026rdquo; usando $\\phi$, a forma quadrada $\\phi(\\gamma)^2$ é perfeitamente preservada .\nFase 2: O Colapso da Fatoração em Números Primos e o Nascimento dos \u0026ldquo;Ideais\u0026rdquo; No Mundo A ($\\mathbb{Z}[\\alpha]$), queremos reunir muitos elementos adequados $(a - b\\alpha)$ e multiplicá-los para criar um \u0026ldquo;quadrado perfeito (elemento quadrado)\u0026rdquo;. Normalmente, faríamos a \u0026ldquo;fatoração em números primos\u0026rdquo; de cada $(a - b\\alpha)$ coletado e os combinaríamos de forma que os expoentes dos primos fossem todos pares (resolvendo com matrizes) para formar um quadrado.\nNo entanto, aqui, a parede desesperadora da álgebra se ergue. Em mundos de corpos algébricos como $\\mathbb{Z}[\\alpha]$, a \u0026ldquo;unicidade da fatoração em números primos (qualquer número pode ser expresso de forma única como o produto de primos)\u0026rdquo; ensinada no ensino médio colapsa .\n(Exemplo: Em um certo mundo de corpo algébrico, $6 = 2 \\times 3$, mas ao mesmo tempo $6 = (1+\\sqrt{-5}) \\times (1-\\sqrt{-5})$, e não sabemos mais quais são os verdadeiros primos)\nSe a fatoração não for única, o quebra-cabeça de \u0026ldquo;contar o número de primos para torná-los pares\u0026rdquo; (o método do crivo) é, em princípio, impossível de executar.\nA Salvação de Kummer e Dedekind: \u0026ldquo;Ideais\u0026rdquo; O que salvou esse colapso foi o conceito de \u0026ldquo;Ideal (Ideal: número ideal)\u0026rdquo; criado pelos matemáticos do século 19. Pensando não no elemento em si, mas no \u0026ldquo;conjunto de múltiplos (ideal)\u0026rdquo; gerado por esse elemento, a fatoração em números primos tornou-se possível novamente.\nNo anel de inteiros de um corpo algébrico $\\mathcal{O}_K$ (um anel mais completo contendo $\\mathbb{Z}[\\alpha]$), é provado que mesmo que um elemento não possa ser fatorado unicamente, \u0026ldquo;um ideal sempre pode ser fatorado unicamente como o produto de \u0026lsquo;Ideais Primos ($\\mathfrak{p}$)\u0026rsquo;\u0026rdquo; .\nPortanto, no GNFS, em vez de fatorar o próprio elemento $(a - b\\alpha)$, fatoramos o ideal principal $\\langle a - b\\alpha \\rangle$ gerado por ele em ideais primos .\nFase 3: A Norma (Norm) e os Dois Crivos (Sieves) Então, como sabemos em quais ideais primos o ideal $\\langle a - b\\alpha \\rangle$ é decomposto? Aqui usamos uma função chamada \u0026ldquo;Norma (Norm)\u0026rdquo; . A Norma é uma função que converte elementos complexos de corpos algébricos em \u0026ldquo;inteiros reais normais $\\mathbb{Z}$\u0026rdquo;.\nA norma do elemento $(a - b\\alpha)$ é encontrada por um cálculo polinomial simples $b^d f(a/b)$ ($d$ é o grau de $f(x)$).\nPor um teorema algébrico, sabemos que \u0026ldquo;se a norma de um certo ideal puder ser completamente fatorada em pequenos números primos (for suave), então o ideal original também pode ser completamente fatorado em pequenos ideais primos\u0026rdquo; .\nEntão, para um grande número de pares de inteiros $(a, b)$, o GNFS calcula os dois seguintes simultaneamente e coleta apenas os pares em que ambos se tornam \u0026ldquo;números suaves\u0026rdquo;:\nCrivo Racional (Rational Sieve) : $a - bm$ (o valor no mundo real) Crivo Algébrico (Algebraic Sieve) : $b^d f(a/b)$ (a norma no mundo dos corpos algébricos) Coletando dezenas de milhões de pares $(a, b)$ em que ambos são suaves, resolvemos os dados de fatoração de ideais primos (quantos ideais primos estão incluídos) como uma matriz gigante (álgebra linear sobre GF(2)) para encontrar um conjunto $S$ de pares tal que \u0026ldquo;quando multiplicados, os expoentes de todos os ideais primos se tornem pares\u0026rdquo;.\nFase 4: Os Dois \u0026ldquo;Obstáculos\u0026rdquo; e o Grupo de Classes de Ideais A partir do cálculo da matriz, descobrimos que multiplicar todos os ideais de $(a - b\\alpha)$ pertencentes ao conjunto $S$ resulta no quadrado de um certo ideal $I$. $$\\prod_{S} \\langle a - b\\alpha \\rangle = I^2$$ No entanto, ainda não acabou. A barreira matemática mais profunda e difícil do GNFS está aqui.\nO que queremos no final não é o \u0026ldquo;quadrado de um ideal\u0026rdquo;, mas o \u0026ldquo;quadrado de um elemento ($\\gamma^2$)\u0026rdquo; para substituir no mapeamento $\\phi$. Só porque se tornou o quadrado de um ideal, não significa necessariamente que o elemento em si é um quadrado. Existem dois fortes obstáculos matemáticos (Obstructions) aqui.\nObstáculo ①: A Barreira do Grupo de Classes de Ideais (Ideal Class Group) O ideal $I$ nem sempre é um \u0026ldquo;ideal gerado por um único elemento (ideal principal)\u0026rdquo;. É impossível extrair um elemento específico $\\gamma$ de um ideal que não é principal.\nAqui entra o conceito de \u0026ldquo;Grupo de Classes de Ideais (Class Group, $Cl_K$)\u0026rdquo; . O grupo de classes de ideais é um grupo que mede \u0026ldquo;quantos ideais existem no mundo daquele corpo algébrico que não são principais (o quanto a unicidade da fatoração se quebra)\u0026rdquo;. Mesmo que $\\prod \\langle a - b\\alpha \\rangle$ se torne $I^2$, se $I$ não for o elemento de identidade (ideal principal) no grupo de classes de ideais, ele não pode ser trazido de volta ao quadrado de um elemento.\nObstáculo ②: A Barreira do Grupo de Unidades (Unit Group) Suponhamos que, por sorte, $I$ fosse o ideal principal $\\langle \\gamma \\rangle$. Então, teríamos $\\prod \\langle a - b\\alpha \\rangle = \\langle \\gamma^2 \\rangle$. Você pode pensar, \u0026ldquo;Ótimo, o elemento também é um quadrado!\u0026rdquo;, mas isso é um grande erro.\nIdeais (conjuntos de múltiplos) sendo iguais não significa que os elementos sejam perfeitamente iguais. Sempre haverá um desvio por uma \u0026ldquo;Unidade (Unit: um número cujo inverso também é um inteiro. Por exemplo, 1 ou -1)\u0026rdquo; . Em outras palavras, a verdadeira equação dos elementos se torna assim: $$\\prod_{S} (a - b\\alpha) = u \\cdot \\gamma^2$$ ($u$ é um elemento do grupo de unidades $U_K$)\nA menos que esta unidade $u$ em si seja o quadrado de algo, o lado esquerdo nunca pode se tornar um \u0026ldquo;quadrado perfeito de um elemento\u0026rdquo;.\nFase 5: A Magia de Adleman \u0026ldquo;Caracteres Quadráticos\u0026rdquo; (Quadratic Characters) O obstáculo do grupo de classes de ideais e o obstáculo do grupo de unidades. Como superar esses dois? Aqui entra o brilhante método dos \u0026ldquo;Caracteres Quadráticos (Quadratic Characters)\u0026rdquo; , introduzido pelo criptógrafo Leonard Adleman (o \u0026ldquo;A\u0026rdquo; do RSA) e outros.\nPara determinar \u0026ldquo;se um certo elemento é um quadrado perfeito no corpo algébrico\u0026rdquo;, usamos a versão de corpos algébricos do Símbolo de Legendre (resíduo quadratique). Naquela matriz gigante anterior (o quebra-cabeça para tornar pares as contagens de ideais primos), nós furtivamente adicionamos algumas dezenas de condições extras (colunas) dizendo \u0026ldquo;os caracteres quadráticos para certos ideais primos especiais $\\mathfrak{q}$ também devem ser todos $1$ (par)\u0026rdquo; .\nQuando encontramos um conjunto $S$ que satisfaz até mesmo essas condições adicionais através de cálculos de matrizes, teoremas profundos da teoria algébrica dos números garantem que \u0026ldquo;tanto o obstáculo do grupo de classes de ideais quanto o obstáculo do grupo de unidades desaparecerão naturalmente com uma probabilidade esmagadora\u0026rdquo; .\nCom isso, finalmente obtemos a verdadeira equação. $$\\prod_{S} (a - b\\alpha) = \\gamma^2$$ Fase Final: A Fusão dos Mundos e o Colapso Criptográfico Finalmente, todas as peças do quebra-cabeça estão no lugar.\n[Elementos no Mundo dos Corpos Algébricos (Mundo A)] $\\gamma^2 = \\prod (a - b\\alpha)$ (Nós usamos um algoritmo de raiz quadrada para encontrar $\\gamma$)\n[Elementos no Mundo Real (Mundo dos Números Racionais)] $V^2 = \\prod (a - bm)$ (Como esta é uma simples multiplicação de inteiros, $V$ é encontrado normalmente)\nAgora é hora daquela ponte mágica que construímos no início, o homomorfismo $\\phi$ . Nós teleportamos o elemento $\\gamma$ do Mundo A para o Mundo B (o mundo dos restos de $N$) usando $\\phi$ (o mapeamento onde substituímos $\\alpha$ por $m$). $$Y = \\phi(\\gamma) \\pmod N$$ Por outro lado, levamos o $V$ construído no mundo real diretamente para o mundo dos restos e o chamamos de $X$. $$X = V \\pmod N$$ Devido à propriedade \u0026ldquo;preservadora de estrutura\u0026rdquo; do homomorfismo, a relação quadrada que se manteve no Mundo A é perfeitamente preservada no Mundo B (o mundo módulo $N$). Além disso, como os pares originais $(a, b)$ foram feitos em correspondência nas formas $a - b\\alpha$ e $a - bm$, estes $X$ e $Y$ colidem no mundo módulo $N$ e produzem a seguinte equação absoluta.\n$$X^2 \\equiv Y^2 \\pmod N$$\nTudo o que resta é rezar para que esses $X$ e $Y$ não sejam soluções triviais ($X \\equiv \\pm Y$) e calcular $\\gcd(X - Y, N)$ .\nSe for uma solução não trivial, o algoritmo euclidiano avança em 0.001 segundos, e os números primos secretos $p$ e $q$, que são o coração da criptografia RSA, são impressos na tela de saída.\nEste é o quadro completo do \u0026ldquo;Crivo Geral dos Corpos de Números (GNFS)\u0026rdquo; , a essência da matemática moderna.\n","date":"2026-09-05T02:26:13+09:00","image":"http://kenji.blog/p/%E4%B8%80%E8%88%AC%E6%95%B0%E4%BD%93%E7%AF%A9%E6%B3%95gnfs%E3%81%AE%E7%9C%9F%E3%81%AE%E6%95%B0%E5%AD%A6%E7%9A%84%E6%A7%8B%E9%80%A0/rsa_encryption_break_1788542156523_hu57b4110ce75cf76414fb819be22bae03_1010164_120x120_fill_q75_box_smart1.jpg","permalink":"http://kenji.blog/pt/p/%E4%B8%80%E8%88%AC%E6%95%B0%E4%BD%93%E7%AF%A9%E6%B3%95gnfs%E3%81%AE%E7%9C%9F%E3%81%AE%E6%95%B0%E5%AD%A6%E7%9A%84%E6%A7%8B%E9%80%A0/","title":"A Verdadeira Estrutura Matemática do Crivo Geral dos Corpos de Números (GNFS)"},{"content":"O que é o \u0026ldquo;General Number Field Sieve (GNFS)\u0026rdquo;, a matemática mais poderosa da humanidade que quebra a criptografia da internet? A internet que usamos todos os dias. Mensagens no LINE, YouTube, compras na Amazon etc., todas as comunicações são protegidas por \u0026ldquo;criptografia\u0026rdquo;. Atualmente, a criptografia mais utilizada em todo o mundo é a \u0026ldquo;Criptografia RSA\u0026rdquo;.\nO núcleo da defesa da Criptografia RSA é muito simples. Ele utiliza a propriedade matemática de que ** \u0026ldquo;a fatoração em números primos de números gigantescos não pode ser resolvida nem mesmo por computadores\u0026rdquo; ** . Por exemplo, para \u0026ldquo;15\u0026rdquo;, sabemos imediatamente que é \u0026ldquo;3 × 5\u0026rdquo;, mas no instante em que isso se torna um \u0026ldquo;número de 270 dígitos\u0026rdquo;, levaria centenas de milhões de anos para ser resolvido, mesmo se conectássemos todos os supercomputadores do mundo.\nNo entanto, os matemáticos não ficaram em silêncio. Para quebrar essa criptografia impenetrável, a humanidade criou um algoritmo (procedimento de cálculo) quase mágico chamado ** \u0026ldquo;General Number Field Sieve (GNFS)\u0026rdquo; ** .\nNeste artigo, sem usar nenhum jargão técnico e apenas com o conhecimento da ** matemática do ensino fundamental (fatoração em primos, expressões algébricas, máximo divisor comum) ** , explicaremos passo a passo como esse \u0026ldquo;algoritmo mais forte da humanidade\u0026rdquo; quebra a criptografia!\nCapítulo 1: O objetivo da decodificação é uma \u0026ldquo;fórmula da 8ª série\u0026rdquo; O maior golpe especial para enfrentar a gigantesca fatoração em números primos. É essa fórmula aprendida na 8ª série:\n** $X^2 - Y^2 = (X + Y)(X - Y)$ **\nVocê pode pensar: \u0026ldquo;Sério que uma fórmula tão básica pode quebrar a criptografia?\u0026rdquo;. No entanto, esta é a chave mestra que revela tudo.\nO maior objetivo para quebrar a criptografia é, para um número gigante $N$, encontrar ** \u0026ldquo;números ($X$ e $Y$) onde o resto da divisão de $X^2$ e $Y^2$ por $N$ seja o mesmo\u0026rdquo; ** .\nPor que \u0026ldquo;ter o mesmo resto\u0026rdquo; quebra a criptografia? Suponha que dois números, $X^2$ e $Y^2$, tenham \u0026ldquo;o mesmo resto quando divididos por $N$\u0026rdquo;. Ter o mesmo resto significa que existe uma regra onde ** a subtração \u0026ldquo;$X^2 - Y^2$\u0026rdquo; será sempre perfeitamente divisível por $N$ (será um múltiplo de $N$) ** .\nAqui, vamos supor que o número gigante $N$ usado na criptografia seja composto pela multiplicação de dois números primos secretos ($p$ e $q$) ($N = p \\times q$).\nFatorando $X^2 - Y^2$, obtemos ** $(X - Y)(X + Y)$ ** . O fato de isso ser um múltiplo de $N$ significa que, em algum lugar dessa multiplicação, os primos secretos $p$ e $q$ estão escondidos.\nAqui, um milagre acontece. Há uma probabilidade matemática de ** 50% (metade) ** de que os dois primos $p$ e $q$ se separem em salas diferentes: ** \u0026ldquo;$p$ vai para a sala de $(X - Y)$\u0026rdquo; e \u0026ldquo;$q$ vai para a sala de $(X + Y)$\u0026rdquo; ** .\nCom apenas o primo $p$ tendo entrado na sala de $(X - Y)$, vamos calcular o ** \u0026ldquo;máximo divisor comum (a maior peça em comum)\u0026rdquo; ** de $(X - Y)$ e $N$.\nConteúdo de $(X - Y)$ = $p \\times$ algum número Conteúdo de $N$ = $p \\times q$ A única peça comum é ** \u0026ldquo;$p$\u0026rdquo; ** ! Ou seja, no instante em que o máximo divisor comum é calculado, o número primo oculto $p$ é revelado e a criptografia é completamente decodificada. (*O máximo divisor comum pode ser calculado instantaneamente em um smartphone usando o \u0026ldquo;Algoritmo de Euclides\u0026rdquo;).\n** 【Pequena Coluna: Por que o quadrado? Cubo ou o dobro não servem?】 **\nCom \u0026ldquo;$2X - 2Y$\u0026rdquo;, torna-se $2(X - Y)$ e há apenas uma sala, então você não pode separar os primos. Com \u0026ldquo;$X^3 - Y^3$\u0026rdquo;, os tamanhos das salas ficam desequilibrados e o cálculo torna-se desnecessariamente pesado. Para separar os primos em dois, o \u0026ldquo;quadrado\u0026rdquo; que se divide perfeitamente em duas salas tem o melhor custo-benefício.\nCapítulo 2: Como encontrar X e Y? \u0026ldquo;Quebra-cabeça de coleta de cartas de números primos\u0026rdquo; O objetivo é claro. No entanto, mesmo se procurarmos cegamente por \u0026ldquo;$X^2$ e $Y^2$ que têm o mesmo resto\u0026rdquo;, o fim do universo chegaria antes de encontrá-los. Então, os matemáticos criaram um método genial chamado ** \u0026ldquo;quebra-cabeça de coleta de cartas de números primos\u0026rdquo; ** .\nStep 1: Coletar apenas ouro em pó (números suaves) com uma peneira Primeiro, prepare um número apropriado $Z$, eleve-o ao quadrado e calcule o resto $W$ ao dividi-lo por $N$. (O mundo dos restos de $Z^2 = W$)\nFatore o resto obtido $W$ em números primos. Aqui, apenas quando aparecer ** \u0026ldquo;um $W$ composto apenas de pequenos primos como 2, 3, 5, 7, etc.\u0026rdquo; ** , guarde essa equação como um \u0026ldquo;cartão premiado\u0026rdquo; e jogue-a fora se houver primos grandes misturados. É como jogar fora as pedras grandes com uma peneira num rio para coletar apenas o pó de ouro.\nStep 2: O quebra-cabeça para tornar tudo \u0026ldquo;par\u0026rdquo; Por exemplo, suponha que as 3 seguintes cartas de pó de ouro foram coletadas.\nCarta A: $Z_1^2 = 2^3 \\times 3^1$ Carta B: $Z_2^2 = 2^1 \\times 5^1$ Carta C: $Z_3^2 = 3^1 \\times 5^1$ Vamos multiplicar todos eles. O lado direito se torna $(2^3 \\times 3^1) \\times (2^1 \\times 5^1) \\times (3^1 \\times 5^1)$, E ao organizá-los juntos, obtemos ** \u0026ldquo;$2^4 \\times 3^2 \\times 5^2$\u0026rdquo; ** .\nSurpreendentemente, a quantidade de números primos tornou-se \u0026ldquo;4, 2, 2\u0026rdquo;, ** todos sendo um número par ** ! O fato de todos serem pares significa que se você reduzir a quantidade total pela metade, será \u0026ldquo;o quadrado de algo\u0026rdquo;. Ou seja, $(2^2 \\times 3^1 \\times 5^1)^2 = (60)^2$.\nO lado esquerdo é $(Z_1 \\times Z_2 \\times Z_3)^2$, então finalmente chegamos a: ** $X = (Z_1 \\times Z_2 \\times Z_3)$ ** ** $Y = 60$ ** O tão esperado par \u0026ldquo;$X^2 = Y^2$\u0026rdquo; está completo!\nPara computadores, o quebra-cabeça de calcular se a quantidade de números primos é \u0026ldquo;par ou ímpar (0 ou 1)\u0026rdquo; é algo em que eles são muito bons, então, com este método, é possível encontrar $X$ e $Y$ em alta velocidade.\nCapítulo 3: A Parede do Desespero se ergue Agora qualquer criptografia pode ser quebrada! \u0026hellip;ou assim pensávamos, mas um grande problema ocorreu. Se o número da criptografia $N$ tiver até cerca de \u0026ldquo;100 dígitos\u0026rdquo;, este método (chamado Sieve Quadrático) pode resolvê-lo, mas quando $N$ se torna \u0026ldquo;200 ou 300 dígitos\u0026rdquo;, o $W$ que surge no meio do cálculo torna-se demasiado grande.\nQuando os números ficam demasiado grandes, \u0026ldquo;números compostos apenas por pequenos números primos (pó de ouro)\u0026rdquo; deixam de aparecer. Torna-se mais difícil do que procurar lentes de contacto no deserto, e as cartas necessárias para resolver o quebra-cabeça não se acumulam de forma alguma.\nAqui, a arma final da humanidade, o ** \u0026ldquo;General Number Field Sieve (GNFS)\u0026rdquo; ** , finalmente entra em cena.\nCapítulo 4: A ideia mais forte da humanidade de criar \u0026ldquo;Dois Mundos\u0026rdquo; A ideia genial do GNFS é: ** \u0026ldquo;Os números tornam-se gigantescos porque calculamos apenas no mundo real. Então, vamos criar um \u0026lsquo;mundo dos bastidores\u0026rsquo; usando polinómios (fórmulas com letras) para dividir o peso do cálculo em dois.\u0026rdquo; **\nA magia das fórmulas com letras O GNFS converte o número gigante $N$ em uma fórmula com letras, utilizando um número base $m$. Por exemplo, se $N=100$, com $m=4$, então $100 = 4^3 + 2(4^2) + 4$. Transformamos isso numa fórmula (o mundo dos bastidores) usando a letra $x$: ** $f(x) = x^3 + 2x^2 + x$ ** .\nO mais interessante dessa fórmula é que ela possui a propriedade de que ** \u0026ldquo;se substituirmos $x$ por $m$ (4 no exemplo acima), sempre podemos voltar ao número real $N$\u0026rdquo; ** .\nProcurando pó de ouro em 2 mundos simultaneamente O GNFS cria muitos pares de números inteiros aleatórios $(a, b)$ e realiza os seguintes dois cálculos em simultâneo:\n** Mundo Real ** : $a - b \\times m$ ** Mundo das Letras ** : O valor de $a - b \\times x$ calculado pelas regras dos polinómios Ao dividir o problema em dois mundos, o tamanho dos números tratados diminui (fica mais leve) drasticamente. É como dividir uma pedra gigante em dois para transformá-la em pedras mais fáceis de manusear.\nEntão, utilizamos uma peneira para separar e recolher apenas os pares milagrosos $(a, b)$ onde ** \u0026ldquo;tanto no mundo real quanto no mundo das letras, ambos são \u0026lsquo;compostos apenas de pequenos primos (pó de ouro)\u0026rsquo;\u0026rdquo; ** . Esta é a origem do nome \u0026ldquo;Crivo do Corpo de Números\u0026rdquo;.\nO momento em que a criptografia é finalmente quebrada Quando dezenas de milhões de \u0026ldquo;cartões de pó de ouro\u0026rdquo; são recolhidos de ambos os mundos, o supercomputador utiliza cálculos gigantescos de matrizes para encontrar \u0026ldquo;uma combinação em que o número de primos seja todo par\u0026rdquo;, tal como fizemos no Capítulo 2.\nAssim que a combinação for encontrada:\nDeixe o número ao quadrado no mundo real ser ** $X^2$ ** Deixe a fórmula quadrada criada no mundo das letras ser ** $Y(x)^2$ ** Por fim, substitua $x$ na fórmula de letras $Y(x)$ por $m$, saltando de volta para o mundo real e unindo-os. Então, como que por magia matemática, a condição onde ** \u0026ldquo;os restos de $X^2$ e $Y^2$ são iguais\u0026rdquo; ** é estritamente alcançada!\nO resto, como no Capítulo 1, é apenas calcular o máximo divisor comum entre $X - Y$ e $N$, e a impenetrável criptografia RSA desmoronará, revelando os primos secretos.\nConclusão: A matemática não acaba Você pode estar a pensar: \u0026ldquo;Fantástico, com o GNFS qualquer criptografia pode ser quebrada!\u0026rdquo;. No entanto, a criptografia RSA também não se deu por vencida. O que é utilizado na internet atual é um número gigantesco e monstruoso chamado \u0026ldquo;RSA-2048 (cerca de 617 dígitos)\u0026rdquo;.\nPor mais que o GNFS seja o algoritmo mais poderoso da humanidade, diz-se que para resolver até mesmo 270 dígitos (RSA-270), levaria milhares ou dezenas de milhares de anos, mesmo conectando computadores do mundo inteiro. Por agora, os nossos dados bancários e do LINE estão seguros.\nMas e se aparecesse uma ** \u0026ldquo;magia capaz de encontrar instantaneamente $X$ e $Y$ para qualquer número gigante\u0026rdquo; ** ? Na verdade, a coisa mais próxima disso é o ** \u0026ldquo;Computador Quântico (Algoritmo de Shor)\u0026rdquo; ** , que está atualmente em desenvolvimento. Utilizando a natureza ondulatória da mecânica quântica, foi provado matematicamente que é possível ignorar o aborrecido quebra-cabeças da recolha de cartas e chegar à resposta de uma só vez.\nA interminável batalha de inteligência entre os que criam a criptografia (defesa) e os que criam algoritmos para a quebrar (ataque). Saber que a \u0026ldquo;fatoração em números primos\u0026rdquo; e as \u0026ldquo;fórmulas com letras\u0026rdquo; ensinadas na escola secundária são, na verdade, as armas na linha da frente da segurança global não faz com que as aulas de matemática pareçam um pouco mais interessantes?\nQuem descobrirá o algoritmo mais forte do futuro poderá ser você, que está a ler este artigo!\n(※Este artigo é uma adaptação conceptual do encanto matemático da quebra de códigos para estudantes. O GNFS real é rigorosamente calculado utilizando matemática universitária avançada, tal como os grupos da classe de ideais dos corpos numéricos algébricos e homomorfismos)\n","date":"2026-09-05T02:09:08+09:00","image":"http://kenji.blog/p/%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%8D%E3%83%83%E3%83%88%E3%81%AE%E6%9A%97%E5%8F%B7%E3%82%92%E7%A0%B4%E3%82%8B%E4%BA%BA%E9%A1%9E%E6%9C%80%E5%BC%B7%E3%81%AE%E6%95%B0%E5%AD%A6%E4%B8%80%E8%88%AC%E6%95%B0%E4%BD%93%E7%AF%A9%E6%B3%95gnfs%E3%81%A8%E3%81%AF/gnfs_two_worlds_1788542142485_huf997c6e55368509d0617b56f68899854_1135822_120x120_fill_q75_box_smart1.jpg","permalink":"http://kenji.blog/pt/p/%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%8D%E3%83%83%E3%83%88%E3%81%AE%E6%9A%97%E5%8F%B7%E3%82%92%E7%A0%B4%E3%82%8B%E4%BA%BA%E9%A1%9E%E6%9C%80%E5%BC%B7%E3%81%AE%E6%95%B0%E5%AD%A6%E4%B8%80%E8%88%AC%E6%95%B0%E4%BD%93%E7%AF%A9%E6%B3%95gnfs%E3%81%A8%E3%81%AF/","title":"O que é o \"General Number Field Sieve (GNFS)\", a matemática mais poderosa da humanidade que quebra a criptografia da internet?"},{"content":"Os prós e contras dos movimentos antivacina ―― Como a \u0026ldquo;ansiedade bem-intencionada\u0026rdquo; matou o futuro de 5000 pessoas e as lições epidemiológicas que devemos aprender A \u0026ldquo;Ilusão de Causalidade\u0026rdquo; Evidenciada pela Pandemia de COVID-19 A partir de 2021, a vacinação contra o novo coronavírus avançou rapidamente no Japão. Foi um projeto de saúde pública raro na história da humanidade, onde quase 80% da população foi vacinada em um curto período. Nesse processo, testemunhamos inúmeros \u0026ldquo;gritos de socorro\u0026rdquo; através das redes sociais e da mídia. \u0026ldquo;Um familiar faleceu poucos dias após tomar a vacina\u0026rdquo;, \u0026ldquo;Estou com problemas de saúde inexplicáveis após a vacinação\u0026rdquo; ――. Esses apelos são sérios, e para os envolvidos, o sofrimento é inegável e verdadeiro.\nNo entanto, existe aqui uma \u0026ldquo;armadilha\u0026rdquo; fria, porém extremamente importante, na epidemiologia. Considerando o tamanho da população do Japão, quer as pessoas se vacinem ou não, cerca de 3.000 a 4.000 pessoas morrem todos os dias por alguma causa (doença, acidente, velhice). Se a maioria da população se vacinar de uma vez, do ponto de vista probabilístico, um certo número de pessoas inevitavelmente \u0026ldquo;morrerá no dia seguinte à vacinação (por causas não relacionadas à vacina)\u0026rdquo;. Isso é chamado em termos técnicos de ** \u0026ldquo;Coincidência\u0026rdquo; ** .\nOs humanos possuem um viés cognitivo conhecido como \u0026ldquo;Falácia do post hoc ergo propter hoc\u0026rdquo; (depois disso, logo, causado por isso). Se \u0026ldquo;B (morte) ocorreu após A (vacinação)\u0026rdquo;, nós o conectamos intuitivamente, pensando que \u0026ldquo;A é a causa de B\u0026rdquo;. Na pandemia, esse viés cognitivo foi amplificado pelas redes sociais, criando um grupo que fixou a imagem de \u0026ldquo;vacina = perigo\u0026rdquo; antes mesmo de esperar pela verificação científica.\nMuitos especialistas em saúde pública observaram esse cenário com uma sensação de déjà vu. Isso porque o Japão, apenas alguns anos antes, foi o único país desenvolvido a abandonar voluntariamente um meio de prevenir uma doença evitável devido a essa \u0026ldquo;ansiedade sem base científica\u0026rdquo;. Esse é o problema da ** \u0026ldquo;Vacina contra o câncer do colo do útero (Vacina contra o HPV)\u0026rdquo; ** .\nO Que Aconteceu no Japão em 2013 Vamos voltar um pouco no tempo. O câncer do colo do útero é uma doença que afeta cerca de 11.000 mulheres anualmente e mata cerca de 2.900. É frequentemente chamado de \u0026ldquo;assassino de mães\u0026rdquo; (Mother Killer) porque atinge principalmente a geração dos 20 aos 40 anos, que está no auge da criação dos filhos e do trabalho. A causa é a infecção pelo papilomavírus humano (HPV), um vírus tão comum que estima-se que 80% das mulheres com experiência sexual serão infectadas pelo menos uma vez na vida. A vacina contra o HPV, que previne essa infecção viral, foi introduzida no mundo todo como uma \u0026ldquo;vacina revolucionária que pode prevenir o câncer\u0026rdquo; e, no Japão, tornou-se parte da vacinação de rotina (fortemente recomendada pelo governo e disponível gratuitamente) em abril de 2013.\nNo entanto, a situação tomou um rumo sombrio logo em seguida. Algumas meninas que receberam a vacina relataram sintomas como dor generalizada, distúrbios motores e problemas de memória, e a mídia reportou isso amplamente todos os dias como \u0026ldquo;suspeita de reações adversas à vacina\u0026rdquo;. As imagens de meninas tendo convulsões tiveram um impacto profundo nos espectadores, e a opinião pública rapidamente se voltou para a \u0026ldquo;teoria de que a vacina é perigosa\u0026rdquo;.\nEm resposta a isso, o Ministério da Saúde, Trabalho e Bem-Estar decidiu em junho de 2013, apenas dois meses após o início da vacinação de rotina, \u0026ldquo;suspender a recomendação ativa\u0026rdquo;. Isso não foi uma \u0026ldquo;proibição\u0026rdquo; ou \u0026ldquo;cancelamento\u0026rdquo;, mas uma decisão política extremamente ambígua de \u0026ldquo;manter a estrutura de vacinação de rotina, mas parar de enviar notificações individuais do governo\u0026rdquo;. No entanto, isso foi transmitido ao público como uma mensagem de que \u0026ldquo;o governo reconheceu o perigo e a parou\u0026rdquo;. Como resultado, a taxa de vacinação, que ultrapassava os 70%, despencou rapidamente para menos de 1%.\nA partir daqui, começam os ** \u0026ldquo;8 anos perdidos (Lacuna da vacina)\u0026rdquo; ** no Japão.\nA \u0026ldquo;Verdade\u0026rdquo; Revelada pelo Estudo de Nagoya Os sintomas relatados pela mídia foram realmente causados pela vacina? Houve uma pesquisa em larga escala que tentou responder cientificamente a essa pergunta. É conhecida como o ** \u0026ldquo;Estudo de Nagoya\u0026rdquo; ** .\nA cidade de Nagoya conduziu uma pesquisa de questionário em larga escala em 2015 envolvendo cerca de 70.000 mulheres jovens. Isso incluiu tanto as que \u0026ldquo;foram vacinadas\u0026rdquo; quanto as que \u0026ldquo;não foram vacinadas\u0026rdquo;, perguntando a cada uma sobre a presença ou ausência de sintomas em 24 itens, como \u0026ldquo;menstruação irregular\u0026rdquo;, \u0026ldquo;dores nas articulações\u0026rdquo; e \u0026ldquo;diminuição da concentração\u0026rdquo;. Se a vacina fosse a causa, esses sintomas deveriam aparecer de forma claramente mais frequente no grupo das \u0026ldquo;vacinadas\u0026rdquo;.\nOs resultados foram chocantes. ** Não foi encontrada diferença significativa na taxa de incidência de sintomas entre o \u0026ldquo;grupo vacinado\u0026rdquo; e o \u0026ldquo;grupo não vacinado\u0026rdquo;. **\nO que isso significa? As meninas na puberdade, independentemente da vacinação, estão em um período propenso a problemas de saúde, como disfunção autonômica e dor crônica, devido a alterações no equilíbrio hormonal e a circunstâncias específicas da fase de crescimento. Em outras palavras, na mesma proporção de \u0026ldquo;meninas que desenvolveram sintomas após a vacinação\u0026rdquo; relatadas pela mídia, havia \u0026ldquo;meninas que desenvolveram os mesmos sintomas sem terem sido vacinadas\u0026rdquo;. No entanto, os problemas de saúde das meninas não vacinadas foram tratados como \u0026ldquo;problemas da puberdade\u0026rdquo;, enquanto apenas os problemas das meninas vacinadas foram destacados como \u0026ldquo;danos da vacina\u0026rdquo;. Os dados mostraram que era altamente provável que essa fosse a verdadeira natureza do fenômeno que causou tanto alvoroço como um \u0026ldquo;desastre médico\u0026rdquo;.\nAlém disso, o envolvimento do \u0026ldquo;Efeito Nocebo\u0026rdquo; também foi apontado. É o oposto do \u0026ldquo;Efeito Placebo\u0026rdquo;: um fenômeno onde a dor e os problemas de saúde ocorrem de fato devido à ansiedade e ao medo ao ingerir algo acreditando que \u0026ldquo;isso faz mal ao corpo\u0026rdquo;. Não se pode negar a possibilidade de que as reportagens negativas diárias tenham afetado as mentes e corpos sensíveis das meninas.\nO \u0026ldquo;Pecado da Omissão\u0026rdquo; Visto em Números \u0026ldquo;Parar a recomendação por precaução\u0026rdquo;. Essa decisão, à primeira vista, parece uma \u0026ldquo;escolha cuidadosa e segura\u0026rdquo;. O pensamento é de que é melhor prevenir do que remediar, então, em caso de dúvida, pare. No entanto, na saúde pública, \u0026ldquo;não fazer nada (omissão)\u0026rdquo; às vezes causa danos muito maiores do que o \u0026ldquo;risco de fazer algo\u0026rdquo;.\nA equipe de pesquisa da Universidade de Osaka publicou uma estimativa cruel do impacto causado por essa suspensão da recomendação. Devido à queda drástica na taxa de vacinação entre 2013 e 2019, haverá no futuro um ** aumento de cerca de 25.000 casos de câncer do colo do útero que poderiam ter sido evitados e um aumento de cerca de 5.000 a 5.700 mortes ** .\nMais de 5.000 mortes. Esse é um número comparável a um desastre natural de grande escala. Como resultado da tentativa de evitar o risco cientificamente incerto da \u0026ldquo;ansiedade sobre as reações adversas\u0026rdquo;, acabamos sobrecarregando as futuras mulheres com o risco certo e grave de \u0026ldquo;morte por câncer\u0026rdquo;.\nSe olharmos para o mundo, a diferença é óbvia. Na Austrália, com a disseminação da vacinação para ambos os sexos, prevê-se que o câncer do colo do útero seja \u0026ldquo;erradicado (tornado um câncer raro)\u0026rdquo; por volta de 2028. No Reino Unido, há relatos de que a incidência de câncer do colo do útero entre a geração vacinada caiu para quase zero. Enquanto o mundo avança em direção a um futuro de \u0026ldquo;superação do câncer\u0026rdquo;, apenas o Japão foi deixado para trás em um passado onde \u0026ldquo;o câncer continua a aumentar\u0026rdquo;. Em 2015, o Comitê Consultivo Global sobre Segurança de Vacinas da OMS (Organização Mundial da Saúde) criticou nominalmente a situação no Japão: \u0026ldquo;Decisões políticas não baseadas em evidências científicas estão causando danos reais (mortes por câncer)\u0026rdquo;.\nA \u0026ldquo;Hesitação Vacinal\u0026rdquo; em Cadeia Além-mar A tragédia da vacina contra o HPV ocorrida no Japão não é de forma alguma uma \u0026ldquo;circunstância especial apenas do Japão\u0026rdquo;. Quando a \u0026ldquo;ansiedade intuitiva\u0026rdquo; e a \u0026ldquo;ideologia\u0026rdquo; são priorizadas em relação à ciência, as doenças infecciosas podem mostrar suas presas a qualquer hora e em qualquer lugar, como demonstram os casos atualmente relatados em todo o mundo.\nUm exemplo notável disso é o ** surto de sarampo ** nos Estados Unidos.\nO sarampo é um vírus altamente contagioso, mas é uma doença quase completamente evitável com a vacina. Nos Estados Unidos, a \u0026ldquo;eliminação\u0026rdquo; já foi declarada em 2000 graças a um programa de vacinação minucioso. Ou seja, foi considerado que o vírus endêmico havia desaparecido do país. No entanto, nos últimos anos, o sarampo começou a se espalhar novamente.\nSegundo a reportagem da BBC (2024), as autoridades de saúde americanas apontam que a \u0026ldquo;Hesitação Vacinal\u0026rdquo; (Vaccine Hesitancy), que permanece enraizada em algumas comunidades, está se tornando um terreno fértil para a propagação da infecção. Em regiões onde a ideologia antivacina baseada em motivos religiosos, em grupos autodenominados \u0026ldquo;naturais\u0026rdquo; ou em informações falsas permeou, as taxas de vacinação caíram. Com a introdução do vírus vindo do exterior nessas áreas, estão ocorrendo infecções explosivas entre pessoas sem imunidade.\nO sarampo não é uma doença que termina apenas com febre e erupções cutâneas. Ele causa complicações graves, como pneumonia e encefalite, e pode levar à morte mesmo em países desenvolvidos. Uma doença que a humanidade outrora \u0026ldquo;contaminou\u0026rdquo; reunindo sua sabedoria, está mais uma vez ameaçando as vidas das crianças, aproveitando-se da brecha da \u0026ldquo;dúvida\u0026rdquo; das pessoas. O caso dos Estados Unidos nos adverte o seguinte: \u0026ldquo;A barreira de uma alta taxa de vacinação entrará em colapso em um instante se a confiança das pessoas vacilar\u0026rdquo;.\nA Derrota da Mídia, dos Especialistas e a Nossa Por que essas situações se repetem? Existe a assimetria de informação peculiar à sociedade moderna e nossos vieses cognitivos.\nNa questão da vacina contra o HPV no Japão, a mídia relatou de forma sensacionalista a \u0026ldquo;suspeita de reações adversas à vacina\u0026rdquo;. A composição de \u0026ldquo;vítimas lamentáveis\u0026rdquo; contra \u0026ldquo;estado/empresas farmacêuticas frias\u0026rdquo; foi extremamente poderosa como narrativa e abalou fortemente as emoções dos espectadores. Por outro lado, as explicações científicas dos especialistas, como \u0026ldquo;não há diferença estatística significativa\u0026rdquo; ou \u0026ldquo;os benefícios superam os riscos\u0026rdquo;, soavam secas e frias, sendo muito impotentes diante da torrente de emoções.\nNo mundo da ciência, quando há uma teoria aceita apoiada por 99% dos cientistas e 1% de discordância, elas não são tratadas como \u0026ldquo;opiniões iguais\u0026rdquo;. No entanto, a mídia, colocando muita ênfase na \u0026ldquo;imparcialidade\u0026rdquo;, ou para atrair a atenção, relatou os dados que salvam a vida de dezenas de milhares de pessoas e o apelo emocional de uma única vítima lado a lado como sendo \u0026ldquo;iguais\u0026rdquo;. Os políticos também, temendo a reação pública, priorizaram ler \u0026ldquo;a atmosfera do momento\u0026rdquo; em vez de seguir bases científicas. Como resultado, a recomendação ativa da vacina contra o HPV no Japão foi suspensa por cerca de 9 anos, gerando danos de muitos cânceres que poderiam ter sido evitados durante esse período.\nA História se Repete ―― Pela Inteligência de Resistir ao \u0026ldquo;Clima\u0026rdquo; Em 2022, a recomendação ativa da vacina contra o HPV foi finalmente retomada no Japão. No entanto, o tempo e as vidas perdidas não voltarão. E agora, assim como o sarampo está voltando nos Estados Unidos, se baixarmos a guarda, a história se repetirá inúmeras vezes.\nNão podemos rejeitar completamente os movimentos antivacina e a própria preocupação com os cuidados médicos. Ser cauteloso sobre o que se coloca em seu próprio corpo é um instinto humano de defesa, e desastres médicos reais já ocorreram no passado. Monitorar e questionar a autoridade é importante numa democracia.\nNo entanto, a série de eventos com a vacina contra a COVID-19, a vacina contra o HPV e o surto de sarampo nos Estados Unidos apresenta um fato sombrio: a ** \u0026ldquo;ansiedade bem-intencionada que ignora a ciência\u0026rdquo; pode tirar mais vidas do que o próprio vírus ** .\n\u0026ldquo;Pode ser perigoso, então vamos esperar para ver.\u0026rdquo; Ao tomarmos essa decisão, será que incluímos no cálculo a \u0026ldquo;probabilidade de morrer da doença enquanto estamos esperando para ver\u0026rdquo;? \u0026ldquo;O natural é o melhor.\u0026rdquo; Ao dizermos isso, não estaríamos esquecendo a história de que \u0026ldquo;são justamente os vírus encontrados na natureza que têm tirado vidas da forma mais impiedosa\u0026rdquo;?\nNo futuro, novas doenças infecciosas surgirão e novas vacinas serão desenvolvidas. Nesse momento, seremos novamente enganados pelo fenômeno da \u0026ldquo;coincidência\u0026rdquo; e nos deixaremos levar pela instigação emocional? Ou seremos capazes de analisar calmamente os dados e pesar os riscos e benefícios?\nDiz-se que a história se repete. No entanto, a única coisa que pode impedir isso é a nossa razão. Ao observar dados estatisticamente corretos, nós ** devemos ter a inteligência para escolher os \u0026ldquo;fatos\u0026rdquo; em vez da \u0026ldquo;atmosfera\u0026rdquo;. Essa é a nossa responsabilidade como pessoas que vivem na era moderna. **\nReferências e Fontes de Dados ** Ministério da Saúde, Trabalho e Bem-Estar ** : \u0026ldquo;Infecção pelo papilomavírus humano ~ Câncer do colo do útero e vacina contra o HPV ~\u0026rdquo; ** Centro Nacional do Câncer ** : Dados estatísticos do Serviço de Informação sobre o Câncer \u0026ldquo;Câncer do Colo do Útero\u0026rdquo; ** BBC News (Japonês) ** : \u0026ldquo;CDC dos EUA apela por vacinação devido ao surto de sarampo; aumento de infecções em todo o mundo\u0026rdquo; (2024) e artigos originais relacionados ** Equipe de pesquisa da Universidade de Osaka (Yagi A, et al. Lancet Public Health. 2020) ** : Pesquisa estimando o excesso de morbidade e mortalidade devido à suspensão da recomendação ativa da vacinação de rotina contra o HPV ** Nagoya Study (Suzuki S, et al. Papillomavirus Res. 2018) ** ","date":"2026-01-24T15:41:23+09:00","image":"http://kenji.blog/p/%E5%8F%8D%E3%83%AF%E3%82%AF%E3%83%81%E3%83%B3%E3%81%AE%E5%8A%9F%E7%BD%AA/img_hu25fb505b5ce09f8b6e475386b0bbff8f_1013820_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/%E5%8F%8D%E3%83%AF%E3%82%AF%E3%83%81%E3%83%B3%E3%81%AE%E5%8A%9F%E7%BD%AA/","title":"Os prós e contras dos movimentos antivacina"},{"content":"A Ilusão e a Realidade do \u0026ldquo;Japão em Primeiro Lugar\u0026rdquo;: A Defesa Chamada \u0026ldquo;Coexistência\u0026rdquo; Enfrentada pelo Japão em 2026 Introdução: Por que essa expressão toca o coração agora? Ano de 2026. Estamos atualmente em um ponto de virada histórico sem precedentes. O prolongado aumento dos preços, a estagnação dos salários reais e o evidente declínio da taxa de natalidade e envelhecimento da população. Toda vez que as etiquetas de preço das mercadorias nas prateleiras dos supermercados são reescritas, a ansiedade em relação ao futuro lança uma sombra sobre nossos corações.\nNeste sentimento de estagnação, há uma expressão que vem ganhando apoio rapidamente. É o \u0026ldquo;Japão em Primeiro Lugar\u0026rdquo; .\nO desejo de que \u0026ldquo;primeiro enriqueçam a vida dos próprios cidadãos\u0026rdquo; e \u0026ldquo;protejam a cultura e a segurança pública do Japão como prioridade máxima\u0026rdquo; é um anseio extremamente natural e urgente, como um cidadão soberano e como um ser humano que vive neste país. No entanto, entre o \u0026ldquo;ideal\u0026rdquo; que essa expressão promove e a \u0026ldquo;realidade\u0026rdquo; mostrada pelos dados estatísticos, existe uma enorme discrepância que devemos encarar de frente.\nNeste artigo, deixaremos de lado argumentos emocionais e rotulagens, e nos aproximaremos da verdadeira natureza deste problema com base em dados objetivos, transições cronológicas e fatos que estão ocorrendo em cada cenário da nossa sociedade.\nCapítulo 1: A Cronologia e o Contexto Social do \u0026ldquo;Japão em Primeiro Lugar\u0026rdquo; Essa expressão não surgiu de repente. Ela tem sido fomentada por um complexo entrelaçamento de tendências globais e circunstâncias peculiares do Japão.\n1. 2016 - 2017: A Importação e a Consolidação da Expressão Em 2016, o \u0026ldquo;América em Primeiro Lugar\u0026rdquo; promovido por Donald Trump chocou o mundo. No Japão, em 2017, o partido \u0026ldquo;Tomin First no Kai\u0026rdquo; liderado pela governadora Yuriko Koike chamou atenção. Neste momento, o aspecto retórico de esclarecer as prioridades das políticas era forte, e a nuance xenofóbica ainda era limitada.\n2. 2023 - 2024: A Visualização da Ansiedade O atraso na recuperação econômica pós-pandemia e a inflação acompanhada pela rápida desvalorização do iene atingiram diretamente as famílias em geral. Ao mesmo tempo, insatisfações baseadas em informações fragmentadas, como \u0026ldquo;o apoio aos estrangeiros é generoso demais\u0026rdquo; e \u0026ldquo;o dinheiro dos impostos dos japoneses está fluindo para os estrangeiros\u0026rdquo;, começaram a explodir nas redes sociais.\n3. 2025 - 2026: A Fusão de Forças Políticas e Redes Sociais Nas eleições nacionais de 2025, forças que adotaram o \u0026ldquo;Japão em Primeiro Lugar\u0026rdquo; como seu slogan oficial garantiram um certo número de assentos. Os algoritmos das redes sociais reagiram à ansiedade das pessoas, exibindo postagens extremas com prioridade, acelerando o \u0026ldquo;fenômeno da câmara de eco\u0026rdquo; onde apenas determinados valores são reforçados.\nNas últimas pesquisas de opinião conduzidas por vários jornais (final de 2025), a situação atual onde a opinião pública está perfeitamente dividida ao meio veio à tona, com 42% a favor ou um pouco a favor e 38% contra ou um pouco contra em relação a este slogan.\nCapítulo 2: A Verdade sobre a Economia e a Seguridade Social — Uma Presença que \u0026ldquo;Rouba\u0026rdquo; ou um Pilar que \u0026ldquo;Sustenta\u0026rdquo;? Um dos pilares lógicos que sustentam o \u0026ldquo;Japão em Primeiro Lugar\u0026rdquo; é a imagem de que \u0026ldquo;os recursos dos japoneses estão sendo roubados pelos estrangeiros\u0026rdquo;. No entanto, os dados primários de órgãos governamentais mostram uma realidade exatamente oposta a essa intuição.\n1. Força de Trabalho: O \u0026ldquo;Sangue Indispensável\u0026rdquo; que Mantém a Economia Japonesa De acordo com o \u0026ldquo;Status de Emprego de Estrangeiros (final de outubro de 2024)\u0026rdquo; do Ministério da Saúde, Trabalho e Bem-Estar, o número de trabalhadores estrangeiros era de 2.048.675 pessoas . Na estimativa atual de 2026, esse número já ultrapassou 2,3 milhões de pessoas.\nSetor Industrial Proporção e Taxa de Aumento de Trabalhadores Estrangeiros Realidade e Papel Construção Civil Aumento de cerca de 22,7% em relação ao ano anterior Indispensável para a manutenção de infraestruturas e reparo de pontes e estradas envelhecidas. Saúde e Bem-Estar Aumento de cerca de 28,1% em relação ao ano anterior Atuam na linha de frente dos cuidados a idosos, sustentando os idosos japoneses. Indústria Manufatureira Representa cerca de 26% do total A espinha dorsal que sustenta as indústrias de exportação do Japão. Atualmente, eles não estão ocupando vagas que os japoneses querem mas não conseguem, eles estão preenchendo o \u0026ldquo;vazio deixado pelos japoneses que não podem mais ser garantidos\u0026rdquo; . Se os excluirmos em nome do \u0026ldquo;Japão em Primeiro Lugar\u0026rdquo;, nosso sistema de cuidados a idosos entrará em colapso imediatamente, e os preços de moradia e alimentos saltarão de algumas porcentagens para várias vezes mais caros.\n2. Seguridade Social: Os Boatos e a Realidade sobre a Assistência Social O discurso mais difundido nas redes sociais é que \u0026ldquo;os estrangeiros estão recebendo assistência social de forma prioritária\u0026rdquo;. No entanto, verificando as estatísticas do Ministério da Saúde, Trabalho e Bem-Estar, a proporção de famílias que recebem assistência onde o chefe da família é estrangeiro é de cerca de 2,8% a 2,9% . Nos últimos 10 anos, esse número permaneceu quase inalterado.\nPelo contrário, observando a composição etária dos residentes estrangeiros, a maioria deles está na geração ativa de 20 a 40 anos . Eles pagam o seguro de saúde e a pensão, assumindo o papel de \u0026ldquo;provedores\u0026rdquo; que sustentam as pensões e as despesas médicas recebidas pelos \u0026ldquo;japoneses idosos\u0026rdquo; . São eles, e mais ninguém, que estão preenchendo o vazio da geração ativa deixado pelos japoneses e prolongando a vida do sistema de seguridade social do Japão.\nCapítulo 3: A Segurança Pública e o Viés das Redes Sociais — Desconstrução Lógica dos \u0026ldquo;Crimes de Estrangeiros\u0026rdquo; A ansiedade em relação à segurança pública é o que mais estimula o sentimento de \u0026ldquo;Japão em Primeiro Lugar\u0026rdquo;. No entanto, ao decifrar detalhadamente as estatísticas da Agência Nacional de Polícia e o \u0026ldquo;Livro Branco do Crime\u0026rdquo; do Ministério da Justiça, podemos entender como a imagem dos \u0026ldquo;estrangeiros cruéis\u0026rdquo; na internet é criada por distorções cognitivas.\n1. Comparação Calma entre \u0026ldquo;Número Total\u0026rdquo; e \u0026ldquo;Taxa de Criminalidade\u0026rdquo; De acordo com as estatísticas publicadas em 2024, do total de pessoas presas, a proporção de estrangeiros é de cerca de 5,5% . Os cerca de 95% restantes são crimes cometidos por japoneses.\nAo comparar o número de pessoas presas por 100.000 habitantes (taxa de criminalidade), a essência se torna ainda mais visível.\nCategoria Número de Presos por 100.000 habitantes (Estimativa) Japoneses (Todas as idades) Cerca de 142,7 pessoas Estrangeiros Residentes (Residentes permanentes e de longo prazo) Cerca de 120,0 pessoas É um fato estatístico que a taxa de criminalidade dos estrangeiros que vivem no Japão a médio e longo prazo é inferior à média de todos os japoneses .\n2. A Mágica do Viés por \u0026ldquo;Geração\u0026rdquo; Por que a imagem de que \u0026ldquo;estrangeiros são assustadores\u0026rdquo; prevalece? O maior fator é a diferença na \u0026ldquo;composição etária\u0026rdquo; em criminologia.\nJaponeses: Cerca de 30% são idosos, com uma taxa de criminalidade extremamente baixa. Como esse grupo reduz o \u0026ldquo;denominador\u0026rdquo;, os números de todo o Japão parecem baixos. Estrangeiros: Como vieram ao Japão como força de trabalho, mais de 80% pertencem à \u0026ldquo;faixa etária jovem a adulta\u0026rdquo;, onde ocorrem mais crimes estatisticamente . Se compararmos a taxa de criminalidade de japoneses e estrangeiros sob a mesma condição de estar \u0026ldquo;na faixa dos 20 anos\u0026rdquo;, não veremos diferença significativa entre os dois. Em outras palavras, não é que \u0026ldquo;a segurança pública piorou porque o número de estrangeiros aumentou\u0026rdquo;, mas sim que \u0026ldquo;a faixa etária com maior probabilidade de cometer crimes (os jovens) está presente no Japão na forma de estrangeiros\u0026rdquo; .\n3. O \u0026ldquo;Viés de Confirmação\u0026rdquo; Criado pelas Redes Sociais Os algoritmos das redes sociais usam nossa \u0026ldquo;ansiedade\u0026rdquo; como combustível. Quando ocorre um crime cometido por um estrangeiro, ele é vinculado ao seu \u0026ldquo;atributo (nacionalidade)\u0026rdquo; e é amplamente divulgado. Assim, em nossos cérebros, apenas a memória de que \u0026ldquo;outro estrangeiro causou um incidente\u0026rdquo; é reforçada.\nIsso é chamado de \u0026ldquo;viés de confirmação\u0026rdquo; . Os crimes cometidos por japoneses, que representam 95% do total, são ignorados como parte do \u0026ldquo;cotidiano\u0026rdquo;, e os 5% dos crimes cometidos por estrangeiros são substituídos pela imagem de \u0026ldquo;todos os estrangeiros\u0026rdquo;.\nCapítulo 4: A Herança Cultural — \u0026ldquo;Destruidores\u0026rdquo; ou \u0026ldquo;Salvadores\u0026rdquo;? A preocupação de que \u0026ldquo;as tradições e a cultura do Japão serão destruídas\u0026rdquo; também difere da realidade no local.\n1. Os \u0026ldquo;Últimos Herdeiros\u0026rdquo; do Artesanato Tradicional O número de trabalhadores envolvidos na fabricação de artesanato tradicional no Japão despencou drasticamente, de cerca de 300.000 na década de 1970 para cerca de 50.000 atualmente. Quem está salvando essa cultura à beira da extinção são os estrangeiros que vieram ao Japão com profundo respeito pela cultura japonesa.\nCervejarias de saquê e ferreiros de espadas: Estrangeiros tornam-se aprendizes em oficinas onde os japoneses quase desistiram de herdar, e ao trazerem sensibilidades novas e capacidade de divulgação para o exterior, estão revitalizando culturas à beira de fechar as portas para que se tornem \u0026ldquo;indústrias sustentáveis\u0026rdquo;. 2. A Manutenção de Comunidades Locais Nos governos locais regionais que se tornaram \u0026ldquo;cidades com possibilidade de extinção\u0026rdquo; devido ao desaparecimento dos jovens, estagiários técnicos e estrangeiros com habilidades específicas estão assumindo as rédeas dos festivais locais e apoiando a base da agricultura. Quem está cultivando as terras agrícolas abandonadas após a saída dos japoneses e protegendo eventos com centenas de anos de história? Se olharmos para essa realidade, entenderemos que eles não são os \u0026ldquo;destruidores\u0026rdquo; da cultura, mas sim a \u0026ldquo;última linha de defesa\u0026rdquo; .\nCapítulo 5: Preocupações no Ambiente Educacional e a Cadeia do \u0026ldquo;Bullying\u0026rdquo; Os efeitos colaterais de trazer o termo \u0026ldquo;Japão em Primeiro Lugar\u0026rdquo; para o ambiente educacional são graves.\nDicotomia que separa \u0026ldquo;interno e externo\u0026rdquo;: Se as crianças internalizarem o falso complexo de superioridade de que \u0026ldquo;os japoneses são uma classe privilegiada que deve ser priorizada\u0026rdquo;, isso facilmente as levará ao bullying e à exclusão daqueles que são \u0026ldquo;diferentes de nós\u0026rdquo;. Hierarquização baseada nas raízes: Crianças que têm nacionalidade japonesa, mas aparência e nomes diferentes, são atacadas por \u0026ldquo;não serem japonesas\u0026rdquo;. Isso é o colapso da educação e um ato de ferir aqueles que liderarão o Japão no futuro. Os especialistas na área educacional temem o risco de que a exclusividade que a palavra \u0026ldquo;Primeiro Lugar\u0026rdquo; carrega possa enfraquecer as habilidades de convivência multicultural das crianças e, como resultado, isolar o Japão do resto do mundo.\nCapítulo 6: A Tendência Global e a Onda do Populismo Este fenômeno não é exclusivo do Japão. Nos países ocidentais também tem havido uma tendência contínua onde as camadas da população que não puderam se beneficiar da globalização se voltam para o populismo que defende o \u0026ldquo;nacionalismo\u0026rdquo;.\nNo entanto, o que difere o Japão decisivamente do Ocidente é o fato de que \u0026ldquo;a população está encolhendo no ritmo mais rápido do mundo\u0026rdquo; . Embora outros países possam ter a opção de \u0026ldquo;restringir\u0026rdquo;, no Japão já existe uma infinidade de infraestruturas sociais que não podem ser mantidas sem \u0026ldquo;cooperação\u0026rdquo;. Insistir em um \u0026ldquo;Primeiro Lugar\u0026rdquo; emocional significa um \u0026ldquo;suicídio lento\u0026rdquo; lógico.\nConclusão: O que é o Verdadeiro \u0026ldquo;Japão em Primeiro Lugar\u0026rdquo;? O desejo contido na expressão \u0026ldquo;Japão em Primeiro Lugar\u0026rdquo;, de \u0026ldquo;querer que a vida dos cidadãos seja considerada primeiro\u0026rdquo;, é em si o dever mais básico que um governo de uma nação deve ter.\nNo entanto, o meio de realizar esse desejo não deve ser a \u0026ldquo;exclusão do próximo\u0026rdquo;. Como os dados objetivos mostram, a conveniência da nossa vida atual, a segurança pública, a cultura tradicional e até mesmo o sistema de seguridade social já estão em uma fase de \u0026ldquo;dependência e coexistência\u0026rdquo; que não pode ser sustentada sem a presença de estrangeiros.\nO verdadeiro \u0026ldquo;Japão em Primeiro Lugar\u0026rdquo; não seria colocar em prática, com calma, os seguintes 3 pontos?\nDiscussão baseada em fatos: Não se deixar levar por boatos e informações exageradas, e compreender a realidade com base nas estatísticas primárias de órgãos do governo. Estabelecimento de regras justas: Fazer os estrangeiros cumprirem as regras do Japão e, por outro lado, a sociedade japonesa deve tratá-los como parceiros justos. Atualização interna: Mudar a percepção de que aceitar estrangeiros não é \u0026ldquo;perder o Japão\u0026rdquo;, mas sim, com a ajuda deles, \u0026ldquo;reconstruir e manter o Japão\u0026rdquo;. Em 2026, estamos diante de uma grande encruzilhada. Continuaremos a gritar palavras de divisão e estrangular a nós mesmos? Ou vamos encarar a realidade de frente e dar o primeiro passo rumo a um \u0026ldquo;Japão sustentável\u0026rdquo; onde pessoas diversas se apoiam mutuamente?\nA resposta está na \u0026ldquo;inteligência\u0026rdquo; e na \u0026ldquo;coragem\u0026rdquo; no coração de cada indivíduo.\n","date":"2026-01-23T13:43:41+09:00","image":"http://kenji.blog/p/%E6%97%A5%E6%9C%AC%E4%BA%BA%E3%83%95%E3%82%A1%E3%83%BC%E3%82%B9%E3%83%88%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6%E6%80%9D%E3%81%86%E3%81%93%E3%81%A8/img_hua12d272c50d3b08d888fe1df256a5051_1332597_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/%E6%97%A5%E6%9C%AC%E4%BA%BA%E3%83%95%E3%82%A1%E3%83%BC%E3%82%B9%E3%83%88%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6%E6%80%9D%E3%81%86%E3%81%93%E3%81%A8/","title":"A Ilusão e a Realidade do 'Japão em Primeiro Lugar': A Defesa Chamada 'Coexistência' Enfrentada pelo Japão em 2026"},{"content":"[Aviso] Serei cobrado quando o teste gratuito do Gemini terminar? Resumo de como cancelar Quando você tenta experimentar o serviço de IA do Google \u0026ldquo;Gemini\u0026rdquo;, primeiro é oferecido um teste gratuito de 1 mês . Muitas pessoas podem pensar \u0026ldquo;Se é gratuito, vou tentar por enquanto\u0026rdquo; e se registrar, mas há um ponto de atenção aqui.\nO que acontece quando o teste gratuito termina? Quando o período de teste termina, uma cobrança de 2.900 ienes por mês é feita automaticamente. Isso está vinculado a uma assinatura chamada \u0026ldquo;Assinatura do Google One\u0026rdquo; e, se você não fizer nada em particular, o sistema fará a transição para faturamento contínuo.\nSe você cancelar, não será cobrado, mas\u0026hellip; Claro, se você cancelar durante o período de teste, nenhuma taxa será gerada. A página de explicação oficial também mostra \u0026ldquo;Como cancelar a assinatura do Google One\u0026rdquo;.\n👉 Cancelar a assinatura do Google One (oficial)\nNo entanto, quando você realmente acessa, você se depara com a situação de \u0026ldquo;Por algum motivo, não consigo cancelar\u0026hellip;\u0026rdquo;. Fiquei confuso pensando: \u0026ldquo;Ué, por onde devo cancelar?\u0026rdquo;.\nO método de cancelamento correto está aqui! Após várias pesquisas, a página da qual eu consegui realmente cancelar foi a seguinte.\n👉 Conta do Google – Excluir serviços\nA partir daqui, se você selecionar \u0026ldquo;Google One\u0026rdquo; e excluí-lo, o cancelamento será concluído.\nResumo O teste gratuito do Gemini dura 1 mês Após o término, uma taxa de 2.900 ienes por mês será cobrada automaticamente O cancelamento pode não ser possível pela página de explicação oficial Você pode realmente cancelar pela página \u0026ldquo;Excluir serviços\u0026rdquo; Se você pensar \u0026ldquo;Tudo bem porque é um teste gratuito\u0026rdquo;, você pode ser cobrado sem perceber, então tome cuidado!\n👉 Se você está lendo este artigo, talvez esteja tendo problemas agora, pensando: \u0026ldquo;De onde eu cancelo?\u0026rdquo;. De qualquer forma, verifique através do link acima.\n","date":"2025-09-27T10:02:59+09:00","image":"http://kenji.blog/p/google-one-gemini%E3%81%8C%E8%A7%A3%E7%B4%84%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84%E6%99%82%E3%81%AE%E5%AF%BE%E5%87%A6%E6%96%B9%E6%B3%95/img_hue118597de1df33c0e1a19ecde6d4d33f_1730014_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/google-one-gemini%E3%81%8C%E8%A7%A3%E7%B4%84%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84%E6%99%82%E3%81%AE%E5%AF%BE%E5%87%A6%E6%96%B9%E6%B3%95/","title":"Como resolver quando você não consegue cancelar o Google One (Gemini)"},{"content":"🎬 Roteiro para Transmissão no YouTube (Desenvolvimento de App de Cartões de Ano Novo - Parte 1) Início da Transmissão (Primeiros 2 a 3 minutos) Saudação Rápida \u0026ldquo;Olá. A partir de hoje, começarei uma transmissão onde construirei de forma constante um aplicativo de criação de cartões de Ano Novo em C++.\u0026rdquo; \u0026ldquo;Não sei quantas transmissões levarão até a conclusão, mas avançaremos pouco a pouco como uma série.\u0026rdquo; \u0026ldquo;Basicamente, trabalharei em silêncio, então espero que possam assistir como música de fundo para o trabalho de vocês.\u0026rdquo;\nVisão Geral do App Almejado \u0026ldquo;Neste app, gostaria de possibilitar o design do verso dos cartões de Ano Novo.\u0026rdquo; \u0026ldquo;Planejo incluir a inserção de fotos, arranjo de fontes, e edição de imagens ou geração de ilustrações usando IA, e, por fim, fazer o upload na Microsoft Store.\u0026rdquo;\nObjetivos do Trabalho de Hoje \u0026ldquo;Na primeira sessão de hoje, prepararemos o ambiente e criaremos a base.\u0026rdquo; \u0026ldquo;Especificamente, gostaria de prosseguir com:\nCriação do repositório GIT Criação da janela principal Exibição do diálogo de informações da versão Criação do menu e implementação do comando de saída Processamento de inicialização/liberação do Direct2D e exibição de HelloWorld \u0026quot;\nSobre a Publicação do Código-Fonte \u0026ldquo;O código-fonte está publicado no GitHub. Se estiverem interessados, por favor, deem uma olhada.\u0026rdquo; → https://github.com/kenjinote/NengaCardApp/\nParte do Trabalho (Silêncio) Criação do repositório no GitHub → Commit inicial\nCriação do modelo da janela principal\nCriação do diálogo de versão, menu e implementação do comando de saída\nProcessamento de inicialização e liberação do Direct2D → Confirmação de exibição do HelloWorld\nFazer push no GitHub conforme apropriado\n※ Basicamente em silêncio, adicionando breves explicações apenas quando necessário\nAntes do Fim da Transmissão (Últimos 1 a 2 minutos) Resumo do Progresso de Hoje \u0026ldquo;Hoje, criamos o repositório GIT e implementamos a janela, botão de saída e diálogo de versão.\u0026rdquo; \u0026ldquo;Conseguimos chegar até a exibição de HelloWorld no Direct2D.\u0026rdquo;\nConexão para a Próxima Vez \u0026ldquo;A partir da próxima vez, espero organizar a parte da UI e avançar para a objetificação de strings, etc.\u0026rdquo;\nOrientar Novamente o Link do GitHub → https://github.com/kenjinote/NengaCardApp/\nEncerramento \u0026ldquo;Obrigado por assistir. Continuarei de forma constante da próxima vez, então conto com vocês.\u0026rdquo;\n","date":"2025-08-31T20:24:49+09:00","image":"http://kenji.blog/p/%E5%B9%B4%E8%B3%80%E7%8A%B6%E4%BD%9C%E6%88%90%E3%82%A2%E3%83%97%E3%83%AA%E9%96%8B%E7%99%BA%E9%85%8D%E4%BF%A1-vol.1/img_hu403d76b87feb7669f72c38243c5cb621_1021075_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/%E5%B9%B4%E8%B3%80%E7%8A%B6%E4%BD%9C%E6%88%90%E3%82%A2%E3%83%97%E3%83%AA%E9%96%8B%E7%99%BA%E9%85%8D%E4%BF%A1-vol.1/","title":"Transmissão de Desenvolvimento de App de Cartões de Ano Novo VOL.1 (Roteiro)"},{"content":"Tornar possível instalar o msix com um certificado autoassinado Ao distribuir aplicativos no Windows, usar um pacote MSIX é conveniente porque unifica os mecanismos de instalação e atualização. No entanto, o MSIX tem a restrição de que \u0026ldquo;um certificado assinado é sempre necessário\u0026rdquo;. Quando você deseja distribuir para teste um aplicativo desenvolvido por uma empresa ou indivíduo, pode haver situações em que \u0026ldquo;comprar um certificado de assinatura de código comercial é um exagero\u0026rdquo;.\nÉ aí que um certificado autoassinado (Self-Signed Certificate) é útil. Neste artigo, resumiremos as etapas para adicionar um certificado autoassinado ao MSIX e permitir que ele seja instalado em um ambiente local.\n1. Criar um certificado autoassinado Primeiro, inicie o PowerShell no modo de administrador e execute o seguinte comando.\n1 2 // Criar certificado autoassinado New-SelfSignedCertificate -Type CodeSigningCert -Subject \u0026#34;CN=035A9AAC-915B-4CE1-AE39-1A101BED42F5\u0026#34; -CertStoreLocation Cert:\\CurrentUser\\My -NotAfter (Get-Date).AddYears(10) -KeyUsage DigitalSignature -FriendlyName \u0026#34;kenjinote\u0026#34; O que é criado aqui é um certificado para \u0026ldquo;assinatura de código\u0026rdquo;.\nDar a ele um nome fácil de entender com -FriendlyName facilita a localização posterior. Você pode ajustar a data de expiração com -NotAfter. Desta vez, está definido para 10 anos. 2. Exportar o arquivo PFX Exporte o certificado criado no formato PFX para que possa ser usado com signtool.\n1 2 3 4 // Criar pfx $cert = Get-ChildItem Cert:\\CurrentUser\\My | Where-Object { $_.FriendlyName -eq \u0026#34;kenjinote\u0026#34; } $password = ConvertTo-SecureString -String \u0026#34;password\u0026#34; -Force -AsPlainText Export-PfxCertificate -Cert $cert -FilePath \u0026#34;D:\\pfx\\cert.pfx\u0026#34; -Password $password A senha definida neste momento (no exemplo, password) será necessária para a operação de assinatura posterior.\n3. Instalar o certificado autoassinado em Autoridades de Certificação Raiz Confiáveis O certificado criado não é confiável para o Windows como está. Para instá-lo, você precisa importá-lo de certmgr.msc para [Autoridades de Certificação Raiz Confiáveis] -\u0026gt; [Certificados] .\nSe você importar o certificado exportado ( .cer ou .pfx ), ele será tratado como um certificado confiável no PC de destino. Isso evita que o aviso de \u0026ldquo;certificado não confiável\u0026rdquo; apareça mesmo se você assinar o MSIX.\n4. Assinar o instalador (MSIX) Finalmente, use o certificado PFX criado para assinar o MSIX. O signtool está incluído no Visual Studio e no Windows SDK.\n1 2 // Assinar o instalador signtool sign /fd SHA256 /f \u0026#34;D:\\pfx\\cert.pfx\u0026#34; /p \u0026#34;password\u0026#34; \u0026#34;C:\\installer\\installer.msix\u0026#34; /fd SHA256 especifica o algoritmo de assinatura. Especifique o arquivo PFX com /f e passe a senha com /p. Finalmente, especifique o caminho para o arquivo MSIX. Se o caminho para signtool não estiver definido, especifique o caminho completo. No meu ambiente, ele estava localizado no seguinte local. 1 \u0026#34;C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages\\microsoft.windows.sdk.buildtools\\10.0.26100.1742\\bin\\10.0.26100.0\\x64\\signtool.exe\u0026#34; Isso conclui a assinatura e completa um MSIX que pode ser instalado no PC de destino.\nResumo Crie um certificado autoassinado com New-SelfSignedCertificate Exporte o PFX com Export-PfxCertificate Instale o certificado nas Autoridades de Certificação Raiz Confiáveis Assine o MSIX com signtool Ao seguir este fluxo, você pode verificar a operação e distribuir para teste no ambiente local sem comprar um certificado comercial. Claro, um certificado emitido por uma autoridade de certificação é essencial para distribuição comercial real, mas esse método é muito conveniente nos estágios de desenvolvimento e verificação.\n👉 Desta vez, usamos installer.msix como exemplo, mas você pode aplicar o mesmo procedimento ao seu próprio aplicativo.\n","date":"2025-08-30T04:18:04+09:00","image":"http://kenji.blog/p/msix%E3%81%AB%E8%87%AA%E5%B7%B1%E8%A8%BC%E6%98%8E%E6%9B%B8%E3%82%92%E3%81%A4%E3%81%91%E3%81%A6%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%A7%E3%81%8D%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E3%81%99%E3%82%8B/img_hu193aeacbbfca091956fdf9aac7d139a2_495432_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/msix%E3%81%AB%E8%87%AA%E5%B7%B1%E8%A8%BC%E6%98%8E%E6%9B%B8%E3%82%92%E3%81%A4%E3%81%91%E3%81%A6%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%A7%E3%81%8D%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E3%81%99%E3%82%8B/","title":"Tornar possível instalar o msix com um certificado autoassinado"},{"content":"Uma ferramenta para \u0026ldquo;Pessoas que não sabem escrever código, mas têm lógica\u0026rdquo;. O motivo pelo qual criei o LogicPad Olá, sou kenji. Sou o criador da ferramenta low-code \u0026quot; LogicPad \u0026ldquo;. Desta vez, não é uma introdução ao produto, mas gostaria de escrever sobre os bastidores do desenvolvimento, \u0026ldquo;Por que decidi criar isso?\u0026rdquo;, e meus próprios pensamentos a partir de uma perspectiva um pouco pessoal.\nHonestamente, isso não foi apenas um desenvolvimento de ferramenta. Meu passado, as frustrações no trabalho, meu conjunto de habilidades e o desejo ardente de \u0026ldquo;um dia criar meu próprio produto\u0026rdquo; — O LogicPad nasceu do resultado da sobreposição de tudo isso.\nEm outras palavras, este é o \u0026ldquo;projeto culminante da minha vida\u0026rdquo; para mim. Escreverei esse pano de fundo da forma mais honesta e apaixonada possível.\nEu queria um produto que eu pudesse dizer francamente e com orgulho: \u0026ldquo;Fui eu que fiz\u0026rdquo; Sendo sincero, essa foi minha primeira motivação.\nSempre gostei de escrever código, tanto no trabalho quanto como hobby. Também estive envolvido em vários desenvolvimentos. Mas, um dia, de repente percebi. \u0026ldquo;Não tenho nenhum produto que lancei no mundo sob o meu nome, sob a minha responsabilidade.\u0026rdquo;\nClaro, há valor no que criamos em equipe, e havia muito trabalho do qual me orgulhar. Mas em algum lugar havia uma sensação de vazio, \u0026ldquo;Vou terminar minha carreira sob o nome de outra pessoa assim?\u0026rdquo;.\nApenas uma vez seria suficiente. Quero deixar algo que eu possa dizer com orgulho: \u0026ldquo;Fui eu que fiz\u0026rdquo;. Com isso em mente, comecei a elaborar o conceito do LogicPad. Isso foi há cerca de 6 anos (por volta de 2019). (A ideia original em si foi por volta de 2015, quando conheci o Blueprint, a linguagem de programação visual da Unreal Engine.)\nNão consigo colocar as mãos porque não sei escrever código. Isso não é um desperdício? Havia muitas pessoas excelentes no meu local de trabalho.\nEles podem construir a lógica. Dominam as funções do Excel e conseguem ver a essência do problema. Mas — no estágio de \u0026ldquo;escrever código\u0026rdquo;, suas mãos param.\n\u0026ldquo;Eu faço essa tarefa toda vez olhando o manual de procedimentos, mas não tem como automatizar?\u0026rdquo; \u0026ldquo;Sim, é possível. Mas\u0026hellip; para isso você tem que escrever código\u0026hellip;\u0026rdquo;\nTivemos conversas como essa muitas vezes.\nToda vez eu pensava: \u0026ldquo;É um grande desperdício parar na parede do código quando você entende a lógica.\u0026rdquo;\nA opção de um editor low-code Na verdade, no meu trabalho anterior, eu estava desenvolvendo um CAD 2D operado por GUI. Com CAD, você usa o mouse para montar formas, certo? Em outras palavras, é um mundo de \u0026ldquo;construir a lógica através da operação\u0026rdquo; .\nPensei: \u0026ldquo;Isso é super compatível com low-code\u0026rdquo;.\nVoltando ainda mais no tempo, desde a época de estudante, sempre escrevi código e produzi em massa pequenos programas assim que tive uma ideia, como processamento de imagem, processamento numérico, ferramentas do Windows e ferramentas de postagem automática em SNS. Acho que existem mais de 600. Eles ainda estão no meu GitHub hoje.\nNaquela época, eu não pensava no significado. Apenas \u0026ldquo;Eu faço porque quero fazer\u0026rdquo;. Era só isso.\nMas agora, enquanto construo o LogicPad\u0026hellip;\nSenti que os pontos estavam finalmente conectados por uma linha.\nFácil de usar, mas poderoso. A dificuldade do equilíbrio O que sempre pensei ao avançar no desenvolvimento foi \u0026ldquo;Torná-lo uma ferramenta que seja intuitiva de usar, e ainda assim forte e capaz.\u0026rdquo;\nSe você adicionar funções, o que você pode fazer aumenta. Mas torna-se mais difícil de usar. Se você simplificar, qualquer um pode tocar. Mas então haverá pessoas que se sentirão insatisfeitas.\nPara não nos dizerem: \u0026ldquo;Ferramentas low-code são brinquedos, não são?\u0026rdquo;. Mas também não quero que digam: \u0026ldquo;No final, não adianta se você não escrever código\u0026rdquo;.\nEu estava sempre lutando na linha tênue entre intuição e expressividade.\nEu reconstruí a interface do usuário muitas e muitas vezes, a descartei muitas e muitas vezes, E quando finalmente me aproximei de uma forma em que pensei \u0026ldquo;Isso vai funcionar\u0026rdquo;, fiquei muito feliz.\nFui salvo pelas palavras da minha primeira \u0026ldquo;usuária\u0026rdquo; A primeira vez que entreguei o LogicPad foi para uma ex-colega. Ela não é boa em TI e tem medo de código. Mas é boa em lógica.\nDepois de explicar um pouco e deixá-la tocar\u0026hellip; Não consigo esquecer as palavras que ela disse alguns minutos depois.\n\u0026ldquo;Com isso, até eu acho que consigo fazer!\u0026rdquo;\nNesse momento, quase chorei. Isso era o que eu queria dar a ela.\nNão uma ferramenta que funciona, mas a sensação de \u0026ldquo;Eu mesma consegui construir!\u0026rdquo; . Tive certeza de que esse era o verdadeiro valor do LogicPad.\nQuando o número de pessoas que podem construir aumenta, a sociedade se torna muito mais interessante Eu acho que a \u0026ldquo;democratização da tecnologia\u0026rdquo; é realmente importante.\nA tecnologia tem o poder de mudar o mundo. Mas as pessoas que podem lidar com isso são limitadas.\nE se você pudesse construir um aplicativo apenas \u0026ldquo;entendendo a lógica\u0026rdquo;?\nMais pessoas poderão estar no \u0026ldquo;lado da criação\u0026rdquo;. E acho que o que nascerá a partir daí superará a nossa imaginação atual.\nSe o LogicPad pudesse se tornar essa porta de entrada. Eu quero que seja uma ferramenta que transforme \u0026ldquo;quero construir\u0026rdquo; em \u0026ldquo;posso construir\u0026rdquo;.\nEsse é o meu desejo.\nConclusão O LogicPad ainda está na versão beta e não está concluído. Ainda há montanhas de coisas a melhorar e coisas que quero fazer.\nMas, estou colocando todos os \u0026ldquo;pontos\u0026rdquo; da minha vida nesta ferramenta. Agora posso dizer com orgulho:\n\u0026ldquo;Este é o produto que eu criei.\u0026rdquo;\n👇 Bônus: O que você pode fazer com o LogicPad Construir processos com arrastar e soltar Ramificações condicionais e variáveis também podem ser tratadas na GUI Vários nós de integração de IA estão disponíveis Expansão para usuários avançados também é possível através da inserção de scripts Funções matemáticas e processamento de dados de alta precisão (como cálculos numéricos com precisão de dígitos infinitos) Uma riqueza de teclas de atalho para usuários avançados Suporta idiomas em mais de 90 países O que quero fazer a partir de agora Gerar lógica a partir de linguagem natural em colaboração com IA Um mecanismo que permite aos usuários criar nós personalizados Construir uma plataforma onde nós criados e lógicas possam ser compartilhados ✍️ Pós-escrito Muito obrigado por ler até aqui. Isso não foi apenas um desenvolvimento de ferramenta, mas um desafio em que coloquei minha própria experiência, paixão e fragmentos da minha vida.\n\u0026ldquo;Não consigo escrever código, mas tenho lógica.\u0026rdquo; Um futuro onde essas pessoas possam \u0026ldquo;construir\u0026rdquo; com o seu próprio poder. Eu gostaria de continuar almejando isso através do LogicPad.\nFicaria muito feliz se você pensasse mesmo que um pouco \u0026ldquo;Quero usar isso\u0026rdquo;. Se você se interessou, experimente o LogicPad.\nE se você tiver quaisquer pensamentos ou coisas que notou depois de usá-lo, por menor que seja, não importa. Sua voz será um grande poder para dar o próximo passo deste produto.\nObrigado pelo seu apoio contínuo.\n","date":"2025-07-30T23:51:35+09:00","image":"http://kenji.blog/p/logicpad-%E9%96%8B%E7%99%BA%E7%A7%98%E8%A9%B1/img_hu2f3df13f20424b87da3515770faf1b1c_1676910_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/logicpad-%E9%96%8B%E7%99%BA%E7%A7%98%E8%A9%B1/","title":"A História Secreta do Desenvolvimento do LogicPad"},{"content":"\u0026ldquo;Como remover em lote metadados (informações pessoais) do Excel, Word, etc. usando o PowerShell\u0026rdquo; Arquivos do Office como o Excel salvam automaticamente \u0026ldquo;metadados (informações pessoais)\u0026rdquo;, como o criador, a última pessoa a modificar e o nome da empresa. Há muitos casos em que você deseja remover essas informações, como ao compartilhar um arquivo fora da empresa.\nNeste artigo, explicaremos em detalhes como remover os metadados do Excel usando o PowerShell, focando em ** processamento em lote em uma pasta ** e ** aplicação a outros arquivos do Office, como Word e PowerPoint ** .\n1. Remover os metadados de um único arquivo do Excel Este é o script mais básico para remover informações pessoais de um único arquivo do Excel. Ele chama o objeto COM do Excel, define a propriedade RemovePersonalInformation como $true e salva sobrescrevendo o arquivo.\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 # Iniciar o aplicativo Excel de forma oculta $excel = New-Object -ComObject Excel.Application $excel.Visible = $false $excel.DisplayAlerts = $false # Abrir o arquivo (*especifique o caminho absoluto) $filePath = \u0026#34;C:\\Path\\To\\Your\\File.xlsx\u0026#34; $wb = $excel.Workbooks.Open($filePath) # Ativar a configuração para remover metadados (informações pessoais) $wb.RemovePersonalInformation = $true # Salvar e fechar $wb.Save() $wb.Close($false) # Sair do Excel e liberar memória $excel.Quit() [System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel) | Out-Null ** Atenção: ** Certifique-se de especificar o ** caminho absoluto (caminho completo) ** para o caminho passado para Workbooks.Open(). Um caminho relativo pode resultar em erro.\n2. Processar todos os arquivos do Excel em uma pasta em lote Na prática, muitas vezes você deseja \u0026ldquo;excluir todos os metadados de dezenas de arquivos do Excel em uma pasta específica de uma vez\u0026rdquo;. Isso pode ser feito usando um loop em combinação com Get-ChildItem.\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 $targetFolder = \u0026#34;C:\\Path\\To\\Your\\Folder\u0026#34; # Obter todos os arquivos .xlsx e .xls na pasta $excelFiles = Get-ChildItem -Path $targetFolder -Include \u0026#34;*.xlsx\u0026#34;, \u0026#34;*.xls\u0026#34; -Recurse if ($excelFiles.Count -eq 0) { Write-Host \u0026#34;Nenhum arquivo do Excel encontrado.\u0026#34; exit } $excel = New-Object -ComObject Excel.Application $excel.Visible = $false $excel.DisplayAlerts = $false foreach ($file in $excelFiles) { Write-Host \u0026#34;Removendo metadados de $($file.Name)...\u0026#34; # Abrir o arquivo $wb = $excel.Workbooks.Open($file.FullName) # Remover metadados e salvar $wb.RemovePersonalInformation = $true $wb.Save() $wb.Close($false) } $excel.Quit() [System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel) | Out-Null Write-Host \u0026#34;Todo o processamento foi concluído!\u0026#34; 3. Remover metadados de outros arquivos do Office (Word / PowerPoint) Os metadados podem ser removidos com exatamente a mesma lógica não apenas no Excel, mas também no Word e no PowerPoint. Apenas o nome do objeto COM a ser chamado é diferente, e é comum que a propriedade RemovePersonalInformation seja fornecida.\nPara o Word 1 2 3 4 5 6 7 8 9 10 11 $word = New-Object -ComObject Word.Application $word.Visible = $false $word.DisplayAlerts = 0 $doc = $word.Documents.Open(\u0026#34;C:\\Path\\To\\Your\\File.docx\u0026#34;) $doc.RemovePersonalInformation = $true $doc.Save() $doc.Close() $word.Quit() [System.Runtime.Interopservices.Marshal]::ReleaseComObject($word) | Out-Null Para o PowerPoint Para o PowerPoint, a configuração da propriedade RemovePersonalInformation é semelhante, mas o comportamento da inicialização oculta é ligeiramente diferente.\n1 2 3 4 5 6 7 8 9 10 $ppt = New-Object -ComObject PowerPoint.Application # Abrir especificando o modo oculto (msoFalse) etc. com os 2º a 4º argumentos $presentation = $ppt.Presentations.Open(\u0026#34;C:\\Path\\To\\Your\\File.pptx\u0026#34;, $false, $false, $false) $presentation.RemovePersonalInformation = $true $presentation.Save() $presentation.Close() $ppt.Quit() [System.Runtime.Interopservices.Marshal]::ReleaseComObject($ppt) | Out-Null Conclusão Ao utilizar o PowerShell e objetos COM, você pode automatizar completamente a remoção de metadados de arquivos do Office. É muito útil ter um script de processamento em lote em mãos antes da entrega, a fim de evitar o vazamento não intencional de informações confidenciais ou nomes pessoais.\n","date":"2025-07-30T02:42:40+09:00","image":"http://kenji.blog/p/powershell-%E3%81%A7-excel-%E3%81%AE%E3%83%A1%E3%82%BF%E3%83%87%E3%83%BC%E3%82%BF%E5%80%8B%E4%BA%BA%E6%83%85%E5%A0%B1%E3%82%92%E5%89%8A%E9%99%A4%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/powershell_metadata_eyecatch_1788588033601_hud95a00206aa1dcf32de9cdc0ccb17972_952041_120x120_fill_q75_box_smart1.jpg","permalink":"http://kenji.blog/pt/p/como-remover-metadados-informa%C3%A7%C3%B5es-pessoais-do-excel-com-o-powershell/","title":"Como remover em lote metadados (informações pessoais) do Excel, Word, etc. usando o PowerShell"},{"content":"Explicação Fácil da Conjectura de Kepler! A melhor forma de empacotar melancias Olá, eu sou o kenji!\nHoje gostaria de tentar explicar, da forma mais simples possível, uma teoria matemática com um nome que soa um pouco complicado: a \u0026ldquo;Conjectura de Kepler\u0026rdquo;.\nÀ primeira vista, pode parecer um assunto para nerds, mas também é um problema bem próximo da nossa realidade: \u0026ldquo;Como podemos empacotar melancias em uma caixa da forma mais eficiente?\u0026rdquo;. Isso também tem a ver com as geladeiras das lojas de conveniência e como as cargas são empilhadas.\nE, no mundo da matemática, há uma história super romântica por trás disso: que isso não pôde ser provado por mais de 400 anos .\nVamos lá!\nQuem foi Kepler, afinal? Primeiro, quem é o \u0026ldquo;Kepler\u0026rdquo; da \u0026ldquo;Conjectura de Kepler\u0026rdquo;?\nTrata-se do nome de um astrônomo e matemático alemão chamado Johannes Kepler .\nEsse cara era incrível. Por exemplo, foi ele quem descobriu que a órbita dos planetas é elíptica. Hoje isso é um conhecimento comum, mas na época (por volta de 1600), era uma era em que até o heliocentrismo mal era acreditado.\nGalileu = gênio da observação Kepler = o gênio que explicou o universo com fórmulas matemáticas Newton = o super gênio que resumiu essa teoria em leis da física Com esse posicionamento, Kepler era um pioneiro em \u0026ldquo;explicar o universo com fórmulas matemáticas\u0026rdquo;.\nE, a certa altura, ele disse o seguinte:\nO que é a Conjectura de Kepler? Resumidamente, a \u0026ldquo;Conjectura de Kepler\u0026rdquo; é o seguinte.\nAo empacotar esferas do mesmo tamanho (melancias ou laranjas) em uma caixa, qual é a disposição que permite o empacotamento mais denso?\nEsse é o problema.\nE o que Kepler conjecturou nos anos 1600 foi:\nNão seria mais eficiente empilhá-las como triângulos, igual quando empilham laranjas nas quitandas?\nNa linguagem matemática, isso é chamado de \u0026ldquo;problema do empacotamento mais denso\u0026rdquo; (Sphere Packing), que busca a maneira de empacotar esferas o mais densamente possível no espaço.\nKepler conjecturou que o arranjo chamado \u0026ldquo;estrutura cúbica de faces centradas (FCC)\u0026rdquo; (como empilhar melancias em um padrão triangular) seria o mais eficiente.\nTodo mundo pensava: \u0026ldquo;Ah, faz sentido\u0026hellip;\u0026rdquo;, mas provar matematicamente que \u0026ldquo;isso é absolutamente o melhor!\u0026rdquo; foi extremamente difícil.\n400 anos para provar!?! Então, quando isso foi realmente provado\u0026hellip;?\nSurpreendentemente, entre 1998 e 2005 . Ou seja, ninguém conseguiu provar isso por quase 400 anos . Muito louco.\nAlém disso, quem provou foi um matemático americano chamado Thomas Hales .\nEle percebeu que seria impossível fazer isso apenas com cálculos manuais, então usou computadores para provar . No entanto, ocorreu o problema de a prova ser tão complexa que os humanos não podiam verificá-la adequadamente!\nAssim, surgiu um grande debate no mundo matemático: \u0026ldquo;Podemos realmente confiar em uma prova feita por computadores?\u0026rdquo;.\nPor fim, a prova (formalmente chamada de \u0026ldquo;prova formal\u0026rdquo;) que dizia \u0026ldquo;Verificamos rigorosamente, incluindo o uso de computadores!\u0026rdquo; foi concluída em 2014 .\nOu seja, levou mais de 400 anos para provar que a intuição de Kepler estava correta . Um verdadeiro romance.\nMuito usada na vida real Você pode pensar que \u0026ldquo;como arranjar esferas\u0026rdquo; é assunto só para nerds de matemática, mas, na verdade, é super prático.\nPara empilhar bebidas de forma eficiente em geladeiras de lojas de conveniência Ao empilhar latas em paletes de transporte Também é aplicada em comunicações (compressão de sinais digitais, etc.) Usada no design de impressoras 3D e estruturas cristalinas Enfim, na verdade, é uma teoria bastante usada nos bastidores da nossa vida.\nConclusão: a intuição humana é incrível Então, para resumir:\nConjectura de Kepler = O problema de como empacotar esferas da maneira mais densa Sr. Kepler = Matemático e astrônomo que descobriu as órbitas planetárias Foi conjecturada nos anos 1600! Mas só foi provada nos anos 2000! Muito aplicada na vida real! E o mais interessante é que: \u0026ldquo;A forma de empilhar que os quitandeiros faziam por intuição era matematicamente a mais forte\u0026rdquo; .\nEm outras palavras, a intuição humana é incrível . E o fato de que pode levar 400 anos para provar isso é uma história realmente romântica, não acha?\nSe você se interessou, não deixe de pesquisar por \u0026ldquo;Thomas Hales\u0026rdquo;, \u0026ldquo;prova formal\u0026rdquo; e \u0026ldquo;Sphere Packing\u0026rdquo;. Se aprofundar nisso é muito divertido.\nAté mais!\n[PR]\n今すぐ購入 ","date":"2025-07-21T22:53:03+09:00","image":"http://kenji.blog/p/%E3%82%B1%E3%83%97%E3%83%A9%E3%83%BC%E4%BA%88%E6%83%B3%E3%82%92%E3%82%8F%E3%81%8B%E3%82%8A%E3%82%84%E3%81%99%E3%81%8F%E8%A7%A3%E8%AA%AC/img_huc7f0a2c79b029796989bdbbe22e755bc_619919_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/explicacao-facil-da-conjectura-de-kepler/","title":"Explicação Fácil da Conjectura de Kepler"},{"content":"A Barreira do Desenvolvimento de IA ~ Cheguei à 8ª estação, mas a partir daí foi um inferno ~\nOlá, aqui é o kenji.\nUltimamente, tenho ouvido muito as pessoas dizerem: \u0026ldquo;Pedi à IA e consegui criar um aplicativo!\u0026rdquo; Ultrapassamos a era do no-code e low-code, e entramos na fase do \u0026ldquo;vibe coding\u0026rdquo; (escrever código na intuição).\nPor exemplo, se você disser \u0026ldquo;crie um aplicativo que possa editar imagens e postar nas redes sociais\u0026rdquo;, a IA irá gerar o código e até a interface de usuário. Incrível, não precisamos mais de humanos, certo? Você poderia pensar assim.\nMas, na verdade, isso é como pousar na 8ª estação do Monte Fuji de chinelos .\nParece \u0026ldquo;Fácil\u0026rdquo; até a 8ª Estação O desenvolvimento com IA é realmente fácil no começo. File I/O? Simplesmente funciona. Rede? Bem, conecta. Banco de dados? JSON está bom. UI? O ChatGPT gerou código React para mim. Pagamento? A API do Stripe pode ser resolvida com copiar e colar.\nAqui, você tem a ilusão de que \u0026ldquo;Eu já sou um engenheiro, não sou?\u0026rdquo;. Mas o verdadeiro inferno começa a partir daqui.\nPor Que Você Fica Preso? A razão é simples: \u0026ldquo;A IA cria algo que parece concluído, mas os ajustes finais são deixados inteiramente para os humanos.\u0026rdquo;\nDados desaparecem devido a File I/O A normalização do banco de dados é fraca e as buscas são lentas A UI não é intuitiva Falha ao testar a carga, causando travamento por picos de tráfego Rejeitado na revisão da Apple/Google Problemas com requisitos legais, quase causando um desastre Em outras palavras, a IA é boa em criar \u0026ldquo;protótipos que parecem produtos acabados\u0026rdquo; , mas transformá-lo em um \u0026ldquo;produto que funciona no mundo real\u0026rdquo; ainda é, hoje, trabalho humano .\nMas Há um Paradoxo Aqui, percebemos um paradoxo .\nE se a IA puder fazer absolutamente tudo no futuro? Em outras palavras, e se \u0026ldquo;segurança, cobrança e design forem perfeitamente tratados pela IA\u0026rdquo;?\nNesse momento, a própria necessidade de humanos criarem aplicativos pode desaparecer .\nPorque se os usuários disserem diretamente à IA \u0026ldquo;eu quero fazer isso\u0026rdquo;, as tarefas serão executadas instantaneamente sem a necessidade de um aplicativo.\n🌀 Por Exemplo No passado, \u0026ldquo;abríamos um aplicativo de calculadora para calcular\u0026rdquo;, mas hoje em dia, só dizemos \u0026ldquo;Ei Siri, quanto é 12 x 32?\u0026rdquo; e acabou.\nDa mesma forma, se você disser \u0026ldquo;Ei IA, edite e compartilhe esta foto\u0026rdquo;, a tarefa pode ser concluída sem passar pela interface ou API do aplicativo.\nEm suma, quando o objetivo de \u0026ldquo;criar aplicativos com IA\u0026rdquo; for alcançado, poderemos chegar a um mundo onde os próprios aplicativos sejam desnecessários .\nAfinal, O Que Podemos Fazer Agora? Então, o que devemos fazer?\nPor enquanto, \u0026ldquo;da 8ª estação para cima\u0026rdquo; ainda é domínio humano, então vamos aprimorar isso. Concentre-se no entendimento essencial do usuário e no design de serviço. Pense sobre \u0026ldquo;o que tem valor\u0026rdquo; em vez de \u0026ldquo;o que pode ser criado\u0026rdquo;. Em vez disso, explore maneiras de fornecer valor \u0026ldquo;sem estar restrito ao formato de um aplicativo\u0026rdquo;. A IA é uma ferramenta, um elevador e, às vezes, um concorrente. Mas, \u0026ldquo;o que criar\u0026rdquo; e \u0026ldquo;por que criar\u0026rdquo; continuam sendo questões para nós, humanos .\nResumo: A barreira do desenvolvimento de IA não é tecnológica, mas um paradoxo estrutural.\nUma era em que qualquer um pode ir à 8ª estação do Monte Fuji. Mas o verdadeiro desafio começa a partir daí.\nE quando chegarmos ao topo, um futuro onde nos perguntaremos \u0026ldquo;Precisávamos mesmo escalar a montanha?\u0026rdquo; pode estar nos esperando.\n","date":"2025-07-20T21:52:42+09:00","image":"http://kenji.blog/p/ai%E9%96%8B%E7%99%BA%E3%81%AE%E5%A3%81/img_1_hu929f602c53dcc1c0d00e8a53b025b29e_1978511_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/barreira-do-desenvolvimento-de-ia/","title":"A Barreira do Desenvolvimento de IA"},{"content":"🎯 Como chamar Microsoft.Windows.AI a partir de C++ [Com código de exemplo] A partir do Windows 10, o Windows inclui nativamente um ** runtime capaz de executar modelos de IA no formato ONNX **. Esse é o ** Windows ML (Windows.AI.MachineLearning) **.\nNeste artigo, explicarei de forma prática como chamar Microsoft.Windows.AI.MachineLearning a partir de ** C++ (baseado em aplicativo Win32) **, com ** código de exemplo **.\n✅ Preparação ◾ Requisitos do Ambiente Windows 10 (1809+) ou Windows 11 Visual Studio 2019 ou posterior (A versão Community é suficiente) Suporte a C++/WinRT (Microsoft.Windows.CppWinRT) Windows SDK 10.0.17763.0 ou superior ✅ Configuração do Projeto Crie um projeto no Visual Studio com a seguinte configuração:\nTipo: Aplicativo de Área de Trabalho do Windows em C++ (Projeto Vazio)\nSubsistema: Windows (WinMain)\nAdicione o seguinte pacote via NuGet:\n1 Microsoft.Windows.CppWinRT ✅ Código de Exemplo Abaixo está um exemplo de configuração mínima que usa WinMain para combinar a API Win32 e Windows.AI.MachineLearning.\n※ O modelo ONNX utilizado será chamado model.onnx e deve ser colocado na mesma pasta que o arquivo executável.\nmain.cpp 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 #include \u0026lt;windows.h\u0026gt; #include \u0026lt;winrt/Windows.AI.MachineLearning.h\u0026gt; #include \u0026lt;winrt/Windows.Storage.h\u0026gt; #pragma comment(lib, \u0026#34;windowsapp\u0026#34;) // Para linkagem WinRT using namespace winrt; using namespace Windows::AI::MachineLearning; using namespace Windows::Storage; int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int nCmdShow) { // Inicialização WinRT (MTA ou STA são válidos) winrt::init_apartment(); try { // Carregar o arquivo do modelo auto modelFile = StorageFile::GetFileFromPathAsync(L\u0026#34;model.onnx\u0026#34;).get(); LearningModel model = LearningModel::LoadFromStorageFileAsync(modelFile).get(); // Criar uma sessão LearningModelSession session(model); LearningModelBinding binding(session); // Entrada e saída do modelo (aqui temporariamente entrada vazia) // Na prática, é necessário fazer bind com TensorFloat, etc. // Executar inferência auto result = session.EvaluateAsync(binding, L\u0026#34;\u0026#34;).get(); MessageBox(nullptr, L\u0026#34;Inferência concluída\u0026#34;, L\u0026#34;Windows ML (C++)\u0026#34;, MB_OK); } catch (winrt::hresult_error const\u0026amp; ex) { MessageBox(nullptr, ex.message().c_str(), L\u0026#34;Erro\u0026#34;, MB_ICONERROR); } return 0; } ✅ Complemento: Como especificar Tensors de Entrada/Saída Dependendo do modelo, ** a criação e o bind de Tensors ** são necessários antes da inferência.\nExemplo:\n1 2 3 4 5 6 7 8 // Converter um array float unidimensional para Tensor std::vector\u0026lt;float\u0026gt; inputData = {0.5f, 0.3f, 0.2f}; std::vector\u0026lt;int64_t\u0026gt; shape = {1, 3}; // Formato: [1, 3] auto tensor = TensorFloat::CreateFromArray(shape, inputData); // Bind de entrada (deve corresponder ao nome de entrada do modelo) binding.Bind(L\u0026#34;input_0\u0026#34;, tensor); A saída pode ser obtida de forma semelhante com result.Outputs().Lookup(L\u0026quot;output_0\u0026quot;).\n✅ Pontos de Atenção na Depuração Se o arquivo do modelo não existir na pasta de execução, ocorrerá uma FileNotFoundException. Se os nomes de entrada/saída não corresponderem, resultará em um erro invalid_argument. As especificações exatas de E/S do modelo podem ser verificadas com ferramentas como o Netron. ✅ Resumo Item Descrição API Usada Windows.AI.MachineLearning (WinRT) Linguagem C++ (baseado em Win32) Método Recomendado Através de cabeçalhos C++/WinRT Vantagens Modelos ONNX rodam nativamente, suporte a GPU disponível Atenção Cuidado com os nomes de entrada do modelo e formato do Tensor ✅ Alternativa: Para quem não quer usar WinRT Usando o ONNX Runtime da Microsoft, ** você pode lidar com modelos ONNX a partir de C++ de forma totalmente sem WinRT **. É multiplataforma, permitindo código comum entre Windows e Linux. 📌 Conclusão O Windows ML (Microsoft.Windows.AI) é um motor de inferência de IA poderoso que pode ser perfeitamente utilizado também a partir de C++. Se você precisa de inferência nativa no Windows, não deixe de experimentar.\nPara aqueles que desejam exemplos concretos de criação de modelos ONNX e binding de Tensor, explicaremos isso em artigos subsequentes!\n","date":"2025-07-19T10:03:51+09:00","image":"http://kenji.blog/p/c-%E3%81%8B%E3%82%89microsoft.windows.ai%E3%82%92%E5%91%BC%E3%81%B3%E5%87%BA%E3%81%99%E6%96%B9%E6%B3%95/img_hub9c7b00735e02a7f33c50dd8006e2228_376811_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/como-chamar-microsoft-windows-ai-a-partir-de-cpp/","title":"Como chamar Microsoft.Windows.AI a partir de C++"},{"content":"✅ Configuração do TinyLLaMA × C++ (usando llama.cpp) 🔧 Passo 1: Preparar o llama.cpp 1-1. Ambiente necessário (Mínimo) OS: Windows / Linux / macOS Ambiente de desenvolvimento: g++ / clang / MSVC Git / CMake 1-2. Obter e compilar llama.cpp 1 2 3 4 5 6 git clone https://github.com/ggerganov/llama.cpp cd llama.cpp mkdir build cd build cmake .. cmake --build . --config Release No Windows, é mais fácil usar Visual Studio Developer Command Prompt com cmake --build . --config Release.\n📦 Passo 2: Baixar e converter o modelo TinyLLaMA 2-1. Obter o modelo original do HuggingFace Exemplo: TinyLLaMA-1.1B\n1 2 3 4 5 6 7 # Instalar transformers para download, se necessário pip install transformers huggingface_hub python3 -m transformers.models.llama.convert_llama_weights_to_hf \\ --input_dir ./TinyLlama-1.1B-Chat \\ --model_size 1B \\ --output_dir ./hf_model Este é o passo para converter para o formato Hugging Face.\n2-2. Converter para formato GGUF (para llama.cpp) 1 2 cd llama.cpp python3 convert.py ./hf_model --outfile tinyllama.gguf 2-3. Quantização do modelo (redução de tamanho) 1 ./quantize ./tinyllama.gguf ./tinyllama-q4.gguf q4_0 q4_0 é a quantização em 4 bits. O tamanho do modelo será reduzido para cerca de ** 350MB ** .\n🧪 Passo 3: Chamar o modelo a partir do C++ (Exemplo de código) 3-1. Código C++ simples (Inferência) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 #include \u0026#34;llama.h\u0026#34; #include \u0026lt;iostream\u0026gt; int main() { llama_model_params model_params = llama_model_default_params(); llama_context_params ctx_params = llama_context_default_params(); llama_model *model = llama_load_model_from_file(\u0026#34;tinyllama-q4.gguf\u0026#34;, model_params); llama_context *ctx = llama_new_context_with_model(model, ctx_params); std::string prompt = \u0026#34;O utilizador diz que quer carregar dados do Excel, filtrá-los e guardá-los. Qual é a configuração dos nós?\u0026#34;; llama_batch batch = llama_batch_init(512, 0, 1); llama_token BOS = llama_token_bos(model); batch.token[0] = BOS; // Tokenização std::vector\u0026lt;llama_token\u0026gt; tokens(prompt.size() + 8); int n = llama_tokenize(model, prompt.c_str(), tokens.data(), tokens.size(), true); tokens.resize(n); for (size_t i = 0; i \u0026lt; tokens.size(); ++i) { batch.token[i + 1] = tokens[i]; } batch.n_tokens = tokens.size() + 1; llama_decode(ctx, batch); // Obter resultado da inferência for (int i = 0; i \u0026lt; 50; ++i) { llama_token next = llama_sample_token(ctx, nullptr); std::cout \u0026lt;\u0026lt; llama_token_to_str(model, next); llama_batch next_batch = llama_batch_init(1, 0, 1); next_batch.token[0] = next; next_batch.n_tokens = 1; llama_decode(ctx, next_batch); } llama_free(ctx); llama_free_model(model); return 0; } 🧱 Passo 4: Como compilar (Exemplo) 1 g++ -I./llama.cpp main.cpp ./llama.cpp/build/libllama.a -o tiny_infer -pthread -std=c++11 libllama.a será criado no diretório build/ após a compilação.\n✅ Exemplo de estrutura dos artefactos (Organização) 1 2 3 4 5 6 my_app/ ├── tinyllama-q4.gguf # Modelo quantizado (~350MB) ├── main.cpp # Código C++ acima ├── llama.cpp/ # Diretório do llama.cpp └── build/ └── libllama.a # Biblioteca compilada 🧠 Notas adicionais para aplicação em casos de uso Ter código em C++ para verificar e selecionar o modelo de nós com base na saída Exemplo: Se contém \u0026ldquo;Excel\u0026rdquo;, \u0026ldquo;filtro\u0026rdquo;, \u0026ldquo;guardar\u0026rdquo; → gera os grupos de nós correspondentes Esta parte pode ter uma estrutura simples, como instruções if + carregamento de modelo JSON 📌 Resumo Item Descrição Modelo recomendado TinyLLaMA-1.1B-Chat v1.0 (GGUF + Quantização) Tamanho ~350 a 450MB (Quantização 4bit) Integração C++ Possível através de llama.cpp, quase sem dependências externas Capacidade de processamento Suficiente para compreensão básica de intenções e geração de frases (Texto natural → Estrutura) Extensibilidade Pode tornar-se uma IA de geração de nós quando combinado com preenchimento de slots e chamadas de modelos ","date":"2025-07-19T09:40:53+09:00","image":"http://kenji.blog/p/tinyllama-%E3%82%92-c-%E3%81%8B%E3%82%89%E5%91%BC%E3%81%B3%E5%87%BA%E3%81%9B%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E3%81%99%E3%82%8B%E6%89%8B%E9%A0%86llama.cpp%E4%BD%BF%E7%94%A8/img_huf78e5769214ace33fee09d1baa98793b_1915663_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/passos-para-chamar-o-tinyllama-a-partir-de-c-usando-llama.cpp/","title":"Passos para chamar o TinyLLaMA a partir de C++ (usando llama.cpp)"},{"content":"✅ Método de postagem usando token de acesso (Slack Web API) O \u0026ldquo;OAuth Token\u0026rdquo; (como xoxb-\u0026hellip;) do Slack é uma chave para postar usando a Web API do Slack. Neste caso, diferentemente do Webhook, você faz um POST no Slack API Endpoint com um cabeçalho Authorization: Bearer.\n🔑 Pré-requisitos necessários É necessário incluir chat:write no escopo OAuth do aplicativo Slack:\nProcedimento de configuração Acesse https://api.slack.com/apps Crie um aplicativo ou selecione um aplicativo existente Em \u0026ldquo;OAuth \u0026amp; Permissions\u0026rdquo; \u0026gt; Scopes → Adicione chat:write Vá em \u0026ldquo;Install to Workspace\u0026rdquo; ou \u0026ldquo;Reinstall\u0026rdquo; e obtenha o Access Token (ex: xoxb-xxxxxxxxxx) 💻 Código C++ (Postando para a Slack API com WinHTTP) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 #include \u0026lt;windows.h\u0026gt; #include \u0026lt;winhttp.h\u0026gt; #include \u0026lt;iostream\u0026gt; #pragma comment(lib, \u0026#34;winhttp.lib\u0026#34;) bool PostSlackMessage(const std::wstring\u0026amp; accessToken, const std::string\u0026amp; channel, const std::string\u0026amp; text) { const wchar_t* host = L\u0026#34;slack.com\u0026#34;; const wchar_t* path = L\u0026#34;/api/chat.postMessage\u0026#34;; HINTERNET hSession = WinHttpOpen(L\u0026#34;SlackPoster/1.0\u0026#34;, WINHTTP_ACCESS_TYPE_DEFAULT_PROXY, WINHTTP_NO_PROXY_NAME, WINHTTP_NO_PROXY_BYPASS, 0); if (!hSession) return false; HINTERNET hConnect = WinHttpConnect(hSession, host, INTERNET_DEFAULT_HTTPS_PORT, 0); if (!hConnect) return false; HINTERNET hRequest = WinHttpOpenRequest(hConnect, L\u0026#34;POST\u0026#34;, path, NULL, WINHTTP_NO_REFERER, WINHTTP_DEFAULT_ACCEPT_TYPES, WINHTTP_FLAG_SECURE); // Cabeçalhos Authorization e Content-Type std::wstring headers = L\u0026#34;Content-Type: application/json\\r\\n\u0026#34;; headers += L\u0026#34;Authorization: Bearer \u0026#34; + accessToken + L\u0026#34;\\r\\n\u0026#34;; // Corpo JSON std::string body = R\u0026#34;({\u0026#34;channel\u0026#34;:\u0026#34;)\u0026#34; + channel + R\u0026#34;(\u0026#34;,\u0026#34;text\u0026#34;:\u0026#34;)\u0026#34; + text + R\u0026#34;(\u0026#34;})\u0026#34;; BOOL result = WinHttpSendRequest(hRequest, headers.c_str(), (DWORD)-1, (LPVOID)body.c_str(), body.length(), body.length(), 0); if (!result || !WinHttpReceiveResponse(hRequest, NULL)) { std::cerr \u0026lt;\u0026lt; \u0026#34;Erro de envio\\n\u0026#34;; return false; } // Verificação do código de status DWORD statusCode = 0; DWORD size = sizeof(statusCode); WinHttpQueryHeaders(hRequest, WINHTTP_QUERY_STATUS_CODE | WINHTTP_QUERY_FLAG_NUMBER, WINHTTP_HEADER_NAME_BY_INDEX, \u0026amp;statusCode, \u0026amp;size, WINHTTP_NO_HEADER_INDEX); WinHttpCloseHandle(hRequest); WinHttpCloseHandle(hConnect); WinHttpCloseHandle(hSession); return (statusCode == 200); } int main() { std::wstring token = L\u0026#34;xoxb-seu_token_de_acesso\u0026#34;; // Token de acesso std::string channel = \u0026#34;ID_DO_CANAL_ou_#general\u0026#34;; // Ex: \u0026#34;#general\u0026#34; ou \u0026#34;C0123456789\u0026#34; std::string message = \u0026#34;Testando postagem no Slack usando C++!\u0026#34;; if (PostSlackMessage(token, channel, message)) { std::cout \u0026lt;\u0026lt; \u0026#34;Postagem bem-sucedida!\\n\u0026#34;; } else { std::cerr \u0026lt;\u0026lt; \u0026#34;Falha na postagem.\\n\u0026#34;; } return 0; } 📌 Como obter o ID do canal Apenas o nome do canal (ex: #general) pode causar um erro. A maneira confiável é usar o ID encontrado no URL da página do canal do Slack.\n1 2 https://app.slack.com/client/Txxxxx/C0123456789 ↑Esta parte é o ID do canal ✅ Sobre os tipos de tokens (Suplemento) Formato do Token Uso Exemplo xoxb-... Bot Token (Recomendado) Postar, editar, excluir xoxp-... User Token (Não recomendado) Operações não relacionadas a bot Refresh Token Para atualização de token a longo prazo Normalmente não utilizado 📝 Resumo Para postar no Slack usando C++, o método da Slack Web API + Bearer Token é confiável Use o endpoint chat.postMessage com HTTPS POST O token deve ser enviado no cabeçalho Bearer A especificação de ID para o canal é confiável ","date":"2025-07-16T23:36:27+09:00","image":"http://kenji.blog/p/slack-app--oauth2-%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6-slack-%E3%81%AB%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E3%82%92%E6%8A%95%E7%A8%BF%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_huc0fc953b24035d17918192b772178b43_75467_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/slack-app--oauth2-%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6-slack-%E3%81%AB%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E3%82%92%E6%8A%95%E7%A8%BF%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/","title":"Como postar uma mensagem no Slack usando Slack App + OAuth2"},{"content":"Como Postar Mensagens no Slack com C++ (Win32 API + WinHTTP) [Suporte a Webhook] Quero postar mensagens no Slack a partir do C++. É muito comum em Node.js ou Python, mas os casos em que isso é feito com \u0026ldquo;C++ × Win32 API × WinHTTP\u0026rdquo; são raros, não é mesmo?\nNeste artigo, explicarei passo a passo como enviar uma mensagem do C++ para o Slack usando a URL do Webhook de uma maneira fácil de entender.\n✅ Visão Geral Para postar no Slack, siga as etapas abaixo.\nObtenha a URL do Webhook (chave da API) do Slack Envie uma requisição POST usando WinHTTP Construa o corpo da mensagem no formato JSON Verifique o resultado e pronto! 🔑 Passo 1: Como Obter a URL do Webhook do Slack No Slack, você pode postar facilmente mensagens de serviços externos usando o recurso Incoming Webhooks.\nPassos para Obtenção Acesse https://api.slack.com/apps Clique em Create New App Escolha From scratch, defina o nome do aplicativo e selecione o workspace de destino No menu à esquerda, escolha \u0026ldquo;Incoming Webhooks\u0026rdquo; e ative Clique em \u0026ldquo;Add New Webhook to Workspace\u0026rdquo; e selecione um canal Copie a URL gerada (Exemplo: https://hooks.slack.com/services/xxx/yyy/zzz) Essa URL funcionará como uma chave de API.\n💻 Passo 2: Enviar Mensagem para o Slack com Código C++ Tecnologias Utilizadas Win32 API WinHTTP (Biblioteca Padrão) Mensagem no formato JSON Código de Exemplo (Postagem no Slack) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 #include \u0026lt;windows.h\u0026gt; #include \u0026lt;winhttp.h\u0026gt; #include \u0026lt;iostream\u0026gt; #pragma comment(lib, \u0026#34;winhttp.lib\u0026#34;) bool PostToSlack(const std::wstring\u0026amp; webhookUrl, const std::string\u0026amp; messageJson) { // Decomposição da URL URL_COMPONENTS urlComp{}; wchar_t hostName[256]; wchar_t urlPath[1024]; urlComp.dwStructSize = sizeof(urlComp); urlComp.lpszHostName = hostName; urlComp.dwHostNameLength = _countof(hostName); urlComp.lpszUrlPath = urlPath; urlComp.dwUrlPathLength = _countof(urlPath); if (!WinHttpCrackUrl(webhookUrl.c_str(), 0, 0, \u0026amp;urlComp)) { std::wcerr \u0026lt;\u0026lt; L\u0026#34;Falha ao decompor a URL\\n\u0026#34;; return false; } // Conexão e Sessão HTTP HINTERNET hSession = WinHttpOpen(L\u0026#34;SlackPoster/1.0\u0026#34;, WINHTTP_ACCESS_TYPE_DEFAULT_PROXY, WINHTTP_NO_PROXY_NAME, WINHTTP_NO_PROXY_BYPASS, 0); HINTERNET hConnect = WinHttpConnect(hSession, hostName, urlComp.nPort, 0); HINTERNET hRequest = WinHttpOpenRequest(hConnect, L\u0026#34;POST\u0026#34;, urlPath, NULL, WINHTTP_NO_REFERER, WINHTTP_DEFAULT_ACCEPT_TYPES, WINHTTP_FLAG_SECURE); std::wstring headers = L\u0026#34;Content-Type: application/json\\r\\n\u0026#34;; BOOL result = WinHttpSendRequest(hRequest, headers.c_str(), -1, (LPVOID)messageJson.c_str(), messageJson.length(), messageJson.length(), 0); if (!result) { std::cerr \u0026lt;\u0026lt; \u0026#34;Falha na requisição de envio\\n\u0026#34;; return false; } WinHttpReceiveResponse(hRequest, NULL); DWORD statusCode = 0; DWORD size = sizeof(statusCode); WinHttpQueryHeaders(hRequest, WINHTTP_QUERY_STATUS_CODE | WINHTTP_QUERY_FLAG_NUMBER, WINHTTP_HEADER_NAME_BY_INDEX, \u0026amp;statusCode, \u0026amp;size, WINHTTP_NO_HEADER_INDEX); // Liberação de recursos WinHttpCloseHandle(hRequest); WinHttpCloseHandle(hConnect); WinHttpCloseHandle(hSession); return (statusCode == 200); } int main() { std::wstring webhookUrl = L\u0026#34;https://hooks.slack.com/services/xxx/yyy/zzz\u0026#34;; // Substitua pelo seu Webhook std::string message = R\u0026#34;({ \u0026#34;text\u0026#34;: \u0026#34;Hello from C++ :rocket:\u0026#34;, \u0026#34;username\u0026#34;: \u0026#34;C++ Bot\u0026#34;, \u0026#34;icon_emoji\u0026#34;: \u0026#34;:robot_face:\u0026#34; })\u0026#34;; if (PostToSlack(webhookUrl, message)) { std::cout \u0026lt;\u0026lt; \u0026#34;Postagem realizada com sucesso!\\n\u0026#34;; } else { std::cerr \u0026lt;\u0026lt; \u0026#34;Falha na postagem.\\n\u0026#34;; } return 0; } 🧪 Personalização da Mensagem JSON No Webhook do Slack, você pode incluir os seguintes parâmetros:\n1 2 3 4 5 6 { \u0026#34;text\u0026#34;: \u0026#34;Conteúdo da notificação\u0026#34;, \u0026#34;username\u0026#34;: \u0026#34;Nome do Bot\u0026#34;, \u0026#34;icon_emoji\u0026#34;: \u0026#34;:rocket:\u0026#34;, \u0026#34;channel\u0026#34;: \u0026#34;#nome-do-canal-desejado\u0026#34; } 📌 Notas Adicionais Certifique-se de especificar \u0026quot;application/json\u0026quot; para o Content-Type Passe a URL do Webhook como wstring diretamente (sem necessidade de codificação de URL) Como é comunicação HTTPS, não se esqueça de usar WINHTTP_FLAG_SECURE 🎉 Bônus: Exemplo de Confirmação de Postagem no Slack Ele será exibido no Slack assim:\n1 2 [C++ Bot] Hello from C++ :rocket: ✍️ Resumo Item Conteúdo Método de postagem Webhook (Incoming Webhooks) Biblioteca de comunicação WinHTTP Formato de dados JSON Parâmetros disponíveis text, username, icon_emoji, channel, etc. Se você pensou \u0026ldquo;\u0026hellip;Integração do Slack em C++?\u0026rdquo;, agora você pode incorporar um bot de notificações a partir de hoje!\n🚀 Próxima Vez? Se estiver interessado, na próxima vez:\nAnexo de arquivos UI com botões Operações flexíveis de API com Slack App + OAuth2 Podemos apresentar uma integração ainda mais avançada com o Slack!\n","date":"2025-07-16T19:42:56+09:00","image":"http://kenji.blog/p/c-win32-api--winhttp%E3%81%A7slack%E3%81%AB%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E3%82%92%E6%8A%95%E7%A8%BF%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95webhook%E5%AF%BE%E5%BF%9C/img_huc0fc953b24035d17918192b772178b43_75467_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/como-postar-mensagens-no-slack-com-cpp-win32-api-winhttp-webhook/","title":"Como Postar Mensagens no Slack com C++ (Win32 API + WinHTTP) [Suporte a Webhook]"},{"content":"Market-in e Product-out Olá, aqui é o kenji.\nÀs vezes em livros de negócios ou propostas de projetos,\n\u0026ldquo;Nossa estratégia é market-in\u0026rdquo; \u0026ldquo;Este é do tipo product-out\u0026rdquo;\nVejo coisas assim sendo ditas, mas\u0026hellip;\nEspera, Market-in? Product-out? Qual é o melhor???\nVocê não se pergunta isso?\nEntão, desta vez, tentarei explicar esse tal de \u0026ldquo;market-in\u0026rdquo; e \u0026ldquo;product-out\u0026rdquo; de forma simples, com uma visão um pouco crítica.\nResumindo\u0026hellip; Market-in : Ouvir a voz do mercado (market) e criar produtos que atendam a ela. Product-out : Criar o que nós achamos bom (product) e lançar para o mundo. É só isso. Simples.\nPor exemplo, em uma loja de ramen\u0026hellip; Uma loja de ramen market-in diria: \u0026ldquo;O ramen estilo Iekei está em alta ultimamente. Certo, vamos caprichar na gordura e no alho!\u0026rdquo;\nUma loja de ramen product-out diria: \u0026ldquo;Esse meu ramen de leite de soja, manjericão e sal é incrível, então coma!\u0026rdquo;\nQual é a resposta certa? Ambas estão certas. O market-in tem uma \u0026ldquo;alta probabilidade de venda\u0026rdquo; porque se aproxima das necessidades do cliente, mas é difícil gerar ideias revolucionárias ou rupturas.\nO product-out é sobre \u0026ldquo;dar forma à justiça em que acreditamos\u0026rdquo;, por isso é ousado e atraente, mas se errar, não ressoa com ninguém.\nO iPhone parece ser product-out Na época em que as pessoas diziam \u0026ldquo;Não precisamos de smartphones\u0026rdquo;, a Apple lançou o iPhone.\nIsso é totalmente product-out um exemplo de sucesso.\nSe tivessem ouvido a voz dos usuários, teria acabado com \u0026ldquo;Um celular sem teclado? Impossível.\u0026rdquo;\nMas product-out pode facilmente virar \u0026ldquo;satisfação pessoal\u0026rdquo; Às vezes, algumas empresas ou pessoas dizem: \u0026ldquo;Nós somos do tipo product-out\u0026rdquo;, mas\u0026hellip;\nEspera, isso não é apenas ignorar o usuário?\nÀs vezes eu penso assim.\n\u0026ldquo;Criamos porque queríamos criar. Mas não vendeu.\u0026rdquo; Isso não é product-out, é \u0026ldquo;egoísmo-out\u0026rdquo;.\nMarket-in também tem suas armadilhas Por outro lado, o market-in também não é onipotente.\nSe você disser: \u0026ldquo;Vamos fazer tudo o que os usuários pedem!\u0026rdquo;, o núcleo do produto se perde e acaba não atraindo ninguém.\nVocê continua adicionando recursos e, de repente, é uma ferramenta caótica. É esse tipo de coisa.\nOs realmente incríveis são \u0026ldquo;os que fazem ambos\u0026rdquo; Produtos incríveis apresentam de forma brilhante \u0026ldquo;o que os usuários realmente queriam, mas não conseguiam expressar em palavras\u0026rdquo;.\nOu seja, \u0026ldquo;obter empatia de forma market-in com uma mentalidade de product-out\u0026rdquo;.\nParece fácil dizer, mas é extremamente difícil. Mas, se conseguir, de repente se torna um \u0026ldquo;produto divino\u0026rdquo;.\nConclusão: Mais do que palavras, a reação do usuário é tudo Market-in ou product-out. Qual é o certo é uma pergunta sem muito sentido.\n\u0026ldquo;Chegou realmente ao coração do usuário?\u0026rdquo; é tudo o que importa, eu acho.\n\u0026ldquo;Com qual tipo de estratégia estamos trabalhando\u0026rdquo; Eu acho que está tudo bem desde que você possa escrever isso nos materiais de marketing depois.\nEntão, essa foi a história do market-in e product-out!\nAcho que o mais saudável é não se deixar levar por palavras difíceis e pensar \u0026ldquo;No final, como podemos deixar as pessoas felizes?\u0026rdquo;.\nAté mais~.\n","date":"2025-07-15T20:18:22+09:00","image":"http://kenji.blog/p/%E3%83%9E%E3%83%BC%E3%82%B1%E3%83%83%E3%83%88%E3%82%A4%E3%83%B3%E3%81%A8%E3%83%97%E3%83%AD%E3%83%80%E3%82%AF%E3%83%88%E3%82%A2%E3%82%A6%E3%83%88/img_hu9af708a897f548be4a7980daec441f8f_1946278_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/market-in-and-product-out/","title":"Market-in e Product-out"},{"content":"\u0026ldquo;É verdade que qualquer número termina em 1?\u0026rdquo; ── Brincando com a Conjectura de Collatz Olá! Aqui é o kenji.\nDe repente, se você ouvir \u0026ldquo;uma regra em que qualquer número finalmente se torna 1\u0026rdquo;, não parece um pouco estranho?\nPor exemplo, 19, 87 ou até 1000000. Se você manipular os números de acordo com uma regra simples, por algum motivo, no final converge para \u0026ldquo;1\u0026rdquo;.\nEssa história de sonho é a ** Conjectura de Collatz (Collatz Conjecture) **.\nAfinal, o que é a Conjectura de Collatz? Primeiro, vou apresentar as regras.\nInício: Escolha qualquer ** número inteiro positivo **.\nOperação:\nSe for par → reduza pela metade (n → n / 2) Se for ímpar → multiplique por 3 e adicione 1 (n → 3n + 1) Repetindo isso várias vezes, é uma conjectura de que ** qualquer número finalmente chegará a 1 **.\nPor exemplo, começando com 6:\n1 6 → 3 → 10 → 5 → 16 → 8 → 4 → 2 → 1 Tornou-se \u0026ldquo;1\u0026rdquo; direitinho. Bem-vindo de volta!\nVamos fazer isso com código: Collatz em Python Bem, nessas horas, é mais rápido testar com código! Vamos imprimir a \u0026ldquo;Sequência de Collatz\u0026rdquo; em Python.\n1 2 3 4 5 6 7 8 9 10 11 12 def collatz(n): steps = [n] while n != 1: if n % 2 == 0: n = n // 2 else: n = 3 * n + 1 steps.append(n) return steps # Exemplo: começar com 19 print(collatz(19)) Ao executar:\n1 [19, 58, 29, 88, 44, 22, 11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1] Chega a 1 brilhantemente. Embora faça muitos desvios, no final chega ao objetivo!\nA propósito, se você começar com 29, também chegará a 1 da mesma forma.\n1 print(collatz(29)) Ao executar:\n1 2 3 4 5 6 7 8 [27, 82, 41, 124, 62, 31, 94, 47, 142, 71, 214, 107, 322, 161, 484, 242, 121, 364, 182, 91, 274, 137, 412, 206, 103, 310, 155, 466, 233, 700, 350, 175, 526, 263, 790, 395, 1186, 593, 1780, 890, 445, 1336, 668, 334, 167, 502, 251, 754, 377, 1132, 566, 283, 850, 425, 1276, 638, 319, 958, 479, 1438, 719, 2158, 1079, 3238, 1619, 4858, 2429, 7288, 3644, 1822, 911, 2734, 1367, 4102, 2051, 6154, 3077, 9232, 4616, 2308, 1154, 577, 1732, 866, 433, 1300, 650, 325, 976, 488, 244, 122, 61, 184, 92, 46, 23, 70, 35, 106, 53, 160, 80, 40, 20, 10, 5, 16, 8, 4, 2, 1] Uau, leva 111 passos!\nE também, há cenas em que infla para mais de 9000 no caminho. É um padrão em que você faz um desvio insano antes de chegar ao fim.\nE então, o que é tão incrível sobre isso? O que é incrível sobre essa conjectura é,\n** Embora não tenha sido provado, parece que qualquer número que você tentar se tornará 1 **\nÉ isso.\nEh? Então, e 1 trilhão, ou 10 quatrilhões\u0026hellip;?\nPara quem pensou assim, muito perspicaz. Na verdade, usando computadores, foi confirmado até cerca de \u0026ldquo;2 elevado a 68\u0026rdquo;, e ** todos chegaram a 1 **. Inacreditável\u0026hellip;\nMas, ** não foi provado teoricamente que \u0026ldquo;todos serão assim\u0026rdquo; **. Este é o chamado \u0026ldquo;problema não resolvido\u0026rdquo; no mundo da matemática.\nQuem é o Sr. Collatz? Então, lendo até aqui, você provavelmente está pensando \u0026ldquo;Afinal, quem é Collatz?\u0026rdquo;. Vou apresentá-lo adequadamente!\nNome: ** Lothar Collatz (Lothar Collatz) ** Nacionalidade: Alemanha Ano de nascimento: 1910 a 1990 Título: Matemático (ativo nos campos da análise funcional e teoria dos números) Ele propôs essa conjectura em 1937, e desde então, por mais de 80 anos, ** ninguém foi capaz de prová-la ou refutá-la **.\nA propósito, este problema é tão simples, mas tão profundo que até o Paul Erdős (matemático super famoso) disse algo assim.\n\u0026ldquo;A matemática ainda é imatura para lidar com Collatz\u0026rdquo;\nEm outras palavras, a teoria de que a matemática da humanidade ainda não alcançou este mistério\u0026hellip;\n\u0026ldquo;Fórmulas matemáticas difíceis\u0026rdquo; não são necessárias A coisa boa sobre a Conjectura de Collatz é que ** qualquer um pode jogar **.\nVocê pode fazer isso com papel e caneta. Se você escrever o código em Python, pode testá-lo automaticamente. E mesmo assim, ** os matemáticos de ponta estão levando isso a sério **.\nDe alguma forma, não é emocionante?\nBônus: Código para testar tudo de uma vez Também postarei um código para testar vários números ao mesmo tempo.\n1 2 3 for n in range(1, 21): steps = collatz(n) print(f\u0026#34;{n}: {steps} (Passos: {len(steps)-1})\u0026#34;) Isso nos dará as Sequências de Collatz de \u0026ldquo;1 a 20\u0026rdquo; de uma só vez.\nConclusão: Este mundo é, afinal, misterioso Então, essa é a Conjectura de Collatz.\nEmbora seja super simples Ninguém pode provar Um grande problema no mundo da matemática Era uma existência como uma massa de mistérios.\nAté mesmo iniciantes em programação podem tentar, então por favor, brinque com isso!\nLinks recomendados (para os interessados) Wikipedia: Conjectura de Collatz Artigo de Terence Tao (Inglês) Também é divertido criar uma versão visualizada em Python! (Farei uma se houver demanda) Se você quiser saber mais sobre esse tipo de material de \u0026ldquo;Matemática misteriosa x Programação\u0026rdquo;, fique à vontade para solicitar e dizer \u0026ldquo;Me ensine mais\u0026rdquo;. Eventualmente, apresentarei várias coisas, como a Hipótese de Riemann e números primos!\n📮Fim!\n","date":"2025-07-15T18:03:03+09:00","image":"http://kenji.blog/p/%E3%82%B3%E3%83%A9%E3%83%83%E3%83%84%E4%BA%88%E6%83%B3/img_hu1a59efae05835f74694145ebf674f295_4369684_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/%E3%82%B3%E3%83%A9%E3%83%83%E3%83%84%E4%BA%88%E6%83%B3/","title":"コラッツ予想"},{"content":"Como postar mensagens no Microsoft Teams a partir de C++ (WinHTTP + Graph API) Quer postar automaticamente no chat do Microsoft Teams?\nÉ aí que a Microsoft Graph API entra em ação.\nNeste artigo, apresentarei passo a passo um exemplo de código em C++ usando WinHTTP e as etapas necessárias de autenticação da API.\n🔧 Preparações necessárias (Configuração de autenticação da Microsoft Graph API) 1. Registrar o aplicativo no portal do Azure Primeiro, para usar a Microsoft Graph API, você precisa registrar um aplicativo no Azure.\nAcesse o Azure Portal \u0026ldquo;Microsoft Entra ID\u0026rdquo; \u0026gt; \u0026quot;+ Adicionar\u0026quot; \u0026gt; \u0026ldquo;Registro de aplicativo\u0026rdquo; \u0026gt; \u0026ldquo;Novo registro\u0026rdquo; Insira qualquer nome para o aplicativo e clique em \u0026ldquo;Registrar\u0026rdquo; 2. Adicionar permissões da API Vá para o menu esquerdo \u0026ldquo;Permissões de API\u0026rdquo; Em \u0026ldquo;Microsoft Graph\u0026rdquo; \u0026gt; \u0026ldquo;Adicionar uma permissão\u0026rdquo;, pesquise pelos seguintes escopos e clique em \u0026ldquo;Atualizar permissões\u0026rdquo; Chat.ReadWrite User.Read ※ Se você deseja postar em um canal, ChannelMessage.Send também é necessário\n3. Anote o ID do cliente e o ID do locatário (tenant) Mantenha as seguintes 2 informações que aparecem na aba \u0026ldquo;Visão geral\u0026rdquo;:\nID do aplicativo (cliente) ID do diretório (locatário) 4. Criar o segredo do cliente Vá para a aba \u0026ldquo;Certificados e segredos\u0026rdquo; \u0026ldquo;Novo segredo do cliente\u0026rdquo; \u0026gt; Defina uma data de expiração e clique em \u0026ldquo;Adicionar\u0026rdquo; Anote imediatamente o valor (segredo) exibido na tela 🔐 Obtendo o token de acesso (OAuth2) Para obtê-lo, usaremos o fluxo client_credentials.\nExecute o comando abaixo com curl para obter o token de acesso.\n1 2 3 4 5 6 7 curl -X POST ^ https://login.microsoftonline.com/{ID_DO_LOCATARIO}/oauth2/v2.0/token ^ -H \u0026#34;Content-Type: application/x-www-form-urlencoded\u0026#34; ^ -d \u0026#34;client_id={ID_DO_CLIENTE}\u0026#34; ^ -d \u0026#34;scope=https%3A%2F%2Fgraph.microsoft.com%2F.default\u0026#34; ^ -d \u0026#34;client_secret={SEGREDO_DO_CLIENTE}\u0026#34; ^ -d \u0026#34;grant_type=client_credentials\u0026#34; Exemplo de resposta 1 2 3 4 5 6 { \u0026#34;token_type\u0026#34;:\u0026#34;Bearer\u0026#34;, \u0026#34;expires_in\u0026#34;:3599, \u0026#34;ext_expires_in\u0026#34;:3599, \u0026#34;access_token\u0026#34;: \u0026#34;eyJ0eXAiOiJKV1QiLCJub... (omitido)\u0026#34; } Usaremos este access_token para chamar a Microsoft Graph API.\n💬 Exemplo em C++ para postar no chat do Teams Aqui está um exemplo em C++ para postar no chat usando WinHTTP.\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 #include \u0026lt;windows.h\u0026gt; #include \u0026lt;winhttp.h\u0026gt; #include \u0026lt;iostream\u0026gt; #include \u0026lt;string\u0026gt; #pragma comment(lib, \u0026#34;winhttp.lib\u0026#34;) void PostToTeamsChat(const std::wstring\u0026amp; accessToken, const std::wstring\u0026amp; chatId, const std::wstring\u0026amp; message) { HINTERNET hSession = WinHttpOpen(L\u0026#34;TeamsPoster/1.0\u0026#34;, WINHTTP_ACCESS_TYPE_DEFAULT_PROXY, WINHTTP_NO_PROXY_NAME, WINHTTP_NO_PROXY_BYPASS, 0); HINTERNET hConnect = WinHttpConnect(hSession, L\u0026#34;graph.microsoft.com\u0026#34;, INTERNET_DEFAULT_HTTPS_PORT, 0); std::wstring endpoint = L\u0026#34;/v1.0/chats/\u0026#34; + chatId + L\u0026#34;/messages\u0026#34;; HINTERNET hRequest = WinHttpOpenRequest(hConnect, L\u0026#34;POST\u0026#34;, endpoint.c_str(), NULL, WINHTTP_NO_REFERER, WINHTTP_DEFAULT_ACCEPT_TYPES, WINHTTP_FLAG_SECURE); std::wstring jsonBody = L\u0026#34;{\\\u0026#34;body\\\u0026#34;: {\\\u0026#34;content\\\u0026#34;: \\\u0026#34;\u0026#34; + message + L\u0026#34;\\\u0026#34;}}\u0026#34;; std::wstring headers = L\u0026#34;Authorization: Bearer \u0026#34; + accessToken + L\u0026#34;\\r\\nContent-Type: application/json\\r\\n\u0026#34;; BOOL bResult = WinHttpSendRequest(hRequest, headers.c_str(), (DWORD)-1L, (LPVOID)jsonBody.c_str(), (DWORD)(jsonBody.length() * sizeof(wchar_t)), (DWORD)(jsonBody.length() * sizeof(wchar_t)), 0); if (bResult) WinHttpReceiveResponse(hRequest, NULL); DWORD dwSize = 0; WinHttpQueryDataAvailable(hRequest, \u0026amp;dwSize); if (dwSize \u0026gt; 0) { std::wstring response(dwSize / sizeof(wchar_t), 0); DWORD dwDownloaded = 0; WinHttpReadData(hRequest, \u0026amp;response[0], dwSize, \u0026amp;dwDownloaded); std::wcout \u0026lt;\u0026lt; L\u0026#34;Response: \u0026#34; \u0026lt;\u0026lt; response \u0026lt;\u0026lt; std::endl; } WinHttpCloseHandle(hRequest); WinHttpCloseHandle(hConnect); WinHttpCloseHandle(hSession); } int main() { std::wstring access; std::wstring chatId = L\u0026#34;19:\u0026#34;; std::wstring message = L\u0026#34;Hello from C++!\u0026#34;; std::wcout \u0026lt;\u0026lt; L\u0026#34;Enter your access token: \u0026#34;; std::getline(std::wcin, access); std::wcout \u0026lt;\u0026lt; L\u0026#34;Enter chat ID: \u0026#34;; std::getline(std::wcin, chatId); PostToTeamsChat(access, chatId, message); return 0; } 🔍 Como obter o ID do chat O ID do chat pode ser verificado em GET /v1.0/me/chats.\n1 2 3 4 curl -X GET ^ https://graph.microsoft.com/v1.0/me/chats ^ -H \u0026#34;Authorization: Bearer {access_token}\u0026#34; ^ -H \u0026#34;Content-Type: application/json\u0026#34; Exemplo de resposta 1 2 3 4 5 6 7 8 9 { \u0026#34;value\u0026#34;: [ { \u0026#34;id\u0026#34;: \u0026#34;19:abc123xyz@thread.v2\u0026#34;, \u0026#34;topic\u0026#34;: null, \u0026#34;chatType\u0026#34;: \u0026#34;oneOnOne\u0026#34; } ] } 📌 Pontos de atenção Este exemplo é uma implementação mínima. Em produção: Tratamento de expiração de token Verificação de certificado HTTPS Aprimoramento do tratamento de erros Para postar em um canal, use teams/{team-id}/channels/{channel-id}/messages. Enviar arquivos anexos requer processamento multipart ou a API do Graph Drive. Resumo 📎 Resumo Funcionalidade Visão Geral Graph API API oficial para interagir com o Teams Registro do aplicativo Procedimentos de autenticação necessários no Azure Token de acesso Obtido via OAuth2, usado para solicitações Implementação em C++ Chama a Graph API usando WinHTTP 🚀 Próximos passos Como exemplos mais avançados, também é possível:\nPostagem no canal da equipe (/teams/{team-id}/channels/...) Postagem com arquivos anexos Alternância entre conta de bot ou conta de usuário Implementação completa em C++ incluindo obtenção do token Se você tiver alguma dúvida, sinta-se à vontade para comentar!\n","date":"2025-07-14T23:40:15+09:00","image":"http://kenji.blog/p/c-%E3%81%8B%E3%82%89-microsoft-teams-%E3%81%AB%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E3%82%92%E6%8A%95%E7%A8%BF%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95winhttp--graph-api/img_hu9dbe154e21530b21fd6a41dcbc040106_90767_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/como-postar-mensagens-no-microsoft-teams-a-partir-de-cpp-winhttp-graph-api/","title":"Como postar mensagens no Microsoft Teams a partir de C++ (WinHTTP + Graph API)"},{"content":"Organizamos informações sobre a marca de \u0026ldquo;obrigatório\u0026rdquo; na interface do usuário (formulários) no exterior, juntamente com materiais de diretrizes de UI.\n📌 Principais Marcas de Obrigatório e Melhores Práticas Uso do Asterisco (*)\nGeralmente o mais difundido, adiciona-se \u0026ldquo;*\u0026rdquo; aos campos obrigatórios. No entanto, uma explicação como \u0026quot; * é um campo obrigatório\u0026quot; no início do formulário é obrigatória (Nielsen Norman Group, California State University, Northridge). Também existem exemplos que usam cor para dar ênfase (como texto em vermelho). Especificar \u0026ldquo;Required\u0026rdquo; ou \u0026ldquo;(required)\u0026rdquo; no rótulo\nAo incluir a palavra \u0026ldquo;Required\u0026rdquo; no rótulo, pode-se indicá-lo claramente para leitores de tela, melhorando a acessibilidade (Deque). Uso combinado de atributos ARIA e do atributo required do HTML5\nAlém da exibição visual, usando aria-required=\u0026quot;true\u0026quot; e \u0026lt;input required\u0026gt;, o campo também é comunicado como obrigatório de forma programática (Deque). Especificar campos opcionais usando \u0026ldquo;(optional)\u0026rdquo;\nHá também a abordagem de especificar os campos opcionais como \u0026ldquo;(optional)\u0026rdquo; em vez dos campos obrigatórios, o que é eficaz quando ambos estão misturados. No entanto, a Nielsen-Norman aponta que \u0026ldquo;é mais fácil de avaliar se os campos obrigatórios também forem especificados de forma clara\u0026rdquo; (TPGi). ✅ Resumo de Materiais de Diretrizes de UI Fonte Conteúdo NN/g: Marking Required Fields in Forms A combinação de um asterisco com um texto explicativo é recomendada; exibir apenas os opcionais é considerado pouco amigável (Nielsen Norman Group). Deque (Anatomy of Accessible Forms) ・A palavra \u0026ldquo;Required\u0026rdquo; ou uma imagem é usada em combinação dentro do rótulo.\n・Afirma claramente que a indicação apenas com cores é insuficiente. W3C Techniques (H90) Há exemplos de inclusão de um asterisco ou \u0026ldquo;(required)\u0026rdquo; no rótulo e definição do seu significado no início do formulário. TPGi (Doing what\u0026rsquo;s required) Considerando a acessibilidade, a combinação de asterisco + atributos ARIA + inserção de texto no rótulo é avaliada como a melhor. Guia de UX de Formulários Contensis Organizado de forma concisa: uma marcação consistente (* ou (optional)) é importante. ✅ Abordagens Recomendadas para Implementação Adicionar um texto explicativo no início do formulário :\nFields marked with * are required. (Ou \u0026ldquo;All fields are required\u0026rdquo; para todos de uma vez, ou \u0026ldquo;unless marked optional\u0026rdquo; se houver campos opcionais)\nAtribuição de Rótulo :\nEscrito como First Name * ou Email (required). Atributos ARIA e Atributos HTML5 :\n1 2 \u0026lt;label for=\u0026#34;email\u0026#34;\u0026gt;Email \u0026lt;abbr title=\u0026#34;required\u0026#34;\u0026gt;*\u0026lt;/abbr\u0026gt;\u0026lt;/label\u0026gt; \u0026lt;input id=\u0026#34;email\u0026#34; required aria-required=\u0026#34;true\u0026#34;\u0026gt; Não confie apenas na cor : Suporte tanto visual quanto programaticamente.\n🔗 Links de Referência (Materiais de Diretrizes de UI) NN/g: Marking Required Fields in Forms (California State University, Northridge, Nielsen Norman Group, Deque) Deque: Anatomy of Accessible Forms (Deque) W3C Techniques: H90 Indicating required form controls (W3C) TPGi: Indicating mandatory fields accessibly (TPGi) Contensis: UX Forms Guidelines (Contensis) Se necessário, também posso fornecer exemplos específicos de código HTML/CSS, ou templates de design de componentes de UI para Sketch e Figma. Sinta-se à vontade para perguntar!\n","date":"2025-07-14T13:47:51+09:00","image":"http://kenji.blog/p/%E5%85%A5%E5%8A%9B%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0%E3%81%AE%E5%BF%85%E9%A0%88%E3%83%9E%E3%83%BC%E3%82%AF%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/img_hu551d2409ec5a7ae3c7367fc3f969286e_18058_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/%E5%85%A5%E5%8A%9B%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0%E3%81%AE%E5%BF%85%E9%A0%88%E3%83%9E%E3%83%BC%E3%82%AF%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/","title":"Sobre a Marca de Obrigatório em Formulários de Entrada"},{"content":"[Para iniciantes] Como instalar o Gemini CLI no Windows O \u0026ldquo;Gemini CLI\u0026rdquo; permite que você use a IA generativa do Google, \u0026ldquo;Gemini\u0026rdquo;, a partir da linha de comando. Neste artigo, explicaremos as etapas para instalar o Gemini CLI em um ambiente Windows da forma mais simples possível.\n1. Preparação: Instalar o Node.js e npm Primeiro, como o Gemini CLI é executado em um ambiente chamado \u0026ldquo;Node.js\u0026rdquo;, você precisa instalar o seguinte:\nNode.js npm (Ferramenta de gerenciamento de pacotes incluída no Node.js) npx (Ferramenta de execução de comandos incluída no npm) Faça o download da versão do Node.js para Windows no site oficial abaixo (a versão LTS é recomendada):\n👉 Site Oficial do Node.js\nApós a conclusão da instalação, verifique se foi instalado corretamente com os seguintes comandos:\n1 2 node -v npm -v 2. Inicie o PowerShell Para usar o Gemini CLI no Windows, geralmente é usado o PowerShell. Digite \u0026ldquo;PowerShell\u0026rdquo; no menu Iniciar para abri-lo.\n3. Instale o Gemini CLI Copie e cole o seguinte comando no PowerShell para executá-lo:\n1 npx @google/gemini-cli Este comando executa temporariamente o pacote Gemini CLI publicado pelo Google. Você pode ser solicitado a realizar a configuração inicial e o login, se necessário.\nObservação: pode levar alguns minutos na primeira vez. Se ocorrer um erro, verifique novamente o Node.js e o seu ambiente de rede. 4. Instalação completa! O que fazer a seguir O Gemini CLI agora está instalado no seu Windows. A partir de agora, você poderá usar o Gemini na linha de comando para várias operações, como geração de texto e preenchimento de código.\nSe você quiser verificar a documentação oficial ou a ajuda, também pode usar comandos como este:\n1 npx @google/gemini-cli --help Resumo Vamos revisar as etapas para instalar o Gemini CLI no Windows:\nInstalar o Node.js e o npm Iniciar o PowerShell Executar npx @google/gemini-cli E você está pronto! Se quiser usar a IA generativa localmente, experimente estas etapas como referência.\n","date":"2025-07-13T23:49:56+09:00","image":"http://kenji.blog/p/gemini-cli-%E3%82%92-windows-%E7%92%B0%E5%A2%83%E3%81%AB%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_hu68d4fe037447f15938887bf6c4d85b87_249642_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/como-instalar-o-gemini-cli-no-windows/","title":"Como instalar o Gemini CLI no Windows"},{"content":"Fui premiado com o Microsoft MVP (2025-2026) novamente! Olá, eu sou o kenji.\nTenho um anúncio a fazer. Fui premiado com o Microsoft MVP (Most Valuable Professional) novamente este ano. Esta é a minha 9ª vez recebendo o prêmio.\nMuito obrigado a todos que sempre me apoiam.\nO que é o Microsoft MVP? Quando você ouve \u0026ldquo;MVP\u0026rdquo;, muitos podem pensar no jogador mais valioso dos esportes, mas o MVP aqui é um título concedido àqueles que contribuíram para a comunidade técnica da Microsoft .\nEspecificamente,\nDisseminação de informações em blogs de tecnologia e redes sociais Publicação de código de exemplo no GitHub Palestras em grupos de estudo e conferências Respostas em sites de P\u0026amp;R Intercâmbio técnico e colaboração com desenvolvedores estrangeiros Participação e postagem em comunidades onde engenheiros se conectam É um sistema que avalia atividades como \u0026ldquo;compartilhar o próprio conhecimento e experiência para o benefício de alguém\u0026rdquo;.\nExistem vencedores em todo o mundo, mas o número de pessoas selecionadas a cada ano é limitado, e receber o prêmio novamente não é fácil. É por isso que é uma verdadeira honra ser reconhecido dessa maneira.\nO que foquei neste último ano Este ano, concentrei-me em transmitir informações com foco na \u0026ldquo;clareza\u0026rdquo; e \u0026ldquo;acessibilidade\u0026rdquo; da tecnologia.\nPublicação de código de exemplo prático no GitHub Palestras em grupos de estudo e conferências (nacionais e internacionais) Disseminação regular de informações através de blogs de tecnologia e redes sociais Atividades contínuas de resposta em sites de P\u0026amp;R Compartilhamento de conhecimento em sites de comunidades de engenheiros Interação e verificação conjunta com engenheiros estrangeiros Em particular, a publicação de código no GitHub deixou uma forte impressão em mim porque recebi comentários como \u0026ldquo;Eu estava lutando com a mesma coisa, isso me salvou!\u0026rdquo;, e pude sentir que meus esforços estão ajudando o desenvolvimento de outras pessoas.\nAlém disso, ao palestrar em eventos, às vezes recebi feedback de que \u0026ldquo;era fácil de entender, mesmo para iniciantes\u0026rdquo;, o que me deu uma boa oportunidade para pensar sobre \u0026ldquo;o que é uma explicação técnica que as pessoas entendem?\u0026rdquo;.\nOlhando para o próximo ano A evolução da tecnologia é muito rápida e é difícil apenas acompanhá-la. Mesmo assim, acredito que há um grande valor em fornecer conhecimento real como \u0026ldquo;informação primária\u0026rdquo; , como as experiências práticas que tive e os pontos em que tropecei ao tentar coisas sozinho.\nNo próximo ano, gostaria de tentar publicar \u0026ldquo;conteúdo técnico visualmente compreensível\u0026rdquo; que incorpore vídeos e diagramas . Espero aumentar meus resultados para que eu possa ajudar a resolver o sentimento de \u0026ldquo;estou preso!\u0026rdquo; de alguém, mesmo que seja apenas um pouco.\nFinalmente O título de MVP é apenas um ponto de passagem.\nA partir de agora, sem exagerar, no meu próprio ritmo. Mas de uma forma que seja adequadamente útil para alguém.\n\u0026ldquo;Fiquei salvo pesquisando sobre isso\u0026rdquo; \u0026ldquo;Esta amostra funcionou!\u0026rdquo; \u0026ldquo;Esta história foi fácil de entender\u0026rdquo;\nGostaria de continuar sendo o tipo de engenheiro a quem dizem essas coisas.\nMuito obrigado pelo seu apoio contínuo.\nGitHub: https://github.com/kenjinote Blog de tecnologia: https://hack.jp X: https://twitter.com/kenjinote ","date":"2025-07-13T22:01:15+09:00","image":"http://kenji.blog/p/microsoft-mvp2025-2026%E3%82%92%E5%86%8D%E5%8F%97%E8%B3%9E%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F/img_hu79b11b7d0311d1cf72d88f77ae4d2c9a_139280_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/fui-premiado-com-o-microsoft-mvp-2025-2026-novamente/","title":"Fui premiado com o Microsoft MVP (2025-2026) novamente"},{"content":"O Fascínio e os Desafios de Desenvolver com Win32API + C++ Para aqueles que desejam dominar o desenvolvimento de aplicativos do Windows, Win32API + C++ ainda é uma opção poderosa. Esta combinação, que permite a interação mais próxima possível com o sistema operacional, oferece velocidade e flexibilidade.\nPor outro lado, requer determinação para ser dominada, pois difere significativamente dos estilos de desenvolvimento modernos.\nNesta página, explicaremos de forma clara as vantagens e desvantagens a partir da perspectiva de um desenvolvedor ativo de aplicativos do Windows .\nVantagens Execução Nativa Ultrarrápida Como o C++ e a Win32API operam na camada mais próxima do sistema operacional, há muito pouca sobrecarga desnecessária. O uso de CPU e memória é extremamente eficiente, ostentando uma velocidade de execução esmagadora .\nAlta Flexibilidade e Liberdade Você pode controlar finamente por conta própria todos os comportamentos do aplicativo, como controle de janelas, processamento assíncrono, integração COM e gerenciamento de processos. Também é possível construir ferramentas especializadas e seus próprios frameworks originais.\nFácil de Distribuir sem Necessidade de Runtime Como não são necessários runtimes externos como .NET ou Java, ele pode ser distribuído como um único arquivo executável . É menos propenso a problemas durante a redistribuição e é fácil de executar sem um instalador.\nPode Criar Aplicativos Leves Como requer apenas a configuração mínima necessária, sua característica é ter uma pegada de memória muito pequena . Ele funciona confortavelmente mesmo em PCs de baixas especificações ou ambientes de máquinas virtuais.\nControle Avançado em Nível de SO Possível Você também pode obter controles que são difíceis com linguagens e bibliotecas normais , como ganchos globais de mouse e teclado, ajuste fino de estilos de janelas e operações do menu do sistema.\nDesvantagens Baixa Eficiência de Desenvolvimento Até a construção da GUI deve ser feita inteiramente em código, e às vezes dezenas de linhas de código são necessárias apenas para criar um único botão . Modificar o design também é complicado, e a produtividade é menor em comparação ao desenvolvimento usando frameworks de UI.\nFácil de Reduzir a Manutenibilidade Existem muitos códigos com estruturas especiais , como loops de mensagens e procedimentos de janelas, dificultando a legibilidade e a reutilização. Também tem aspectos inadequados para desenvolvimento em equipe e manutenção a longo prazo.\nDifícil de Suportar UI Moderna É difícil suportar a UX exigida nos últimos anos , como suporte a alto DPI, interfaces de toque, acessibilidade e modo escuro. Você precisa lidar com cada um manualmente, o que exige muito esforço.\nNão Suporta Multiplataforma Como é uma API completamente exclusiva do Windows, não pode ser portada para macOS ou Linux . Se você planeja implantação em várias plataformas, precisará selecionar outras tecnologias.\nCusto de Aprendizado Extremamente Alto Você deve entender conceitos e mecanismos raramente usados hoje , como manipuladores, GDI, COM e OLE. Muitos documentos são antigos, exigindo tempo e paciência para aprender.\nUsos Adequados Ferramentas leves , como iniciadores de arquivos e suportes de teclas de atalho Utilitários do sistema , como manipulação da área de transferência e controle de IME Aplicativos baseados em controle nativo , como ganchos globais e captura de janelas Ferramentas de suporte de driver intimamente ligadas ao hardware Usos Inadequados Aplicativos voltados para o consumidor em geral onde UI / UX modernos são importantes Desenvolvimento de protótipos e MVP construídos com velocidade em mente Projetos de grande escala baseados em operação de longo prazo e desenvolvimento em equipe Produtos multiplataforma que precisam suportar vários sistemas operacionais Resumo da Avaliação Ponto de Vista Avaliação Velocidade de Execução ◎ Muito Rápido Eficiência de Memória ◎ Excelente Velocidade de Desenvolvimento × Lenta Manutenibilidade × Baixa Suporte Multiplateforma × Não Suportado Suporte UI Moderna × Fraco Liberdade de Controle do SO ◎ Esmagadoramente Alta Conclusão Win32API + C++ é uma ferramenta para desenvolvedores que \u0026ldquo;desejam lidar com tudo no sistema operacional por conta própria\u0026rdquo;. Embora seu poder seja imenso, o aprendizado e a operação exigem uma quantidade correspondente de determinação.\nSe vale a pena \u0026ldquo;escolher ousadamente\u0026rdquo; depende da natureza do aplicativo que você pretende.\nMergulhar no mundo de #include \u0026lt;windows.h\u0026gt; sem depender de frameworks de GUI ou linguagens modernas ―― Essa escolha ainda é significativa hoje.\n","date":"2025-07-12T12:30:35+09:00","image":"http://kenji.blog/p/win32api-c-%E3%81%A7%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E3%82%92%E4%BD%9C%E3%82%8B%E3%83%A1%E3%83%AA%E3%83%83%E3%83%88%E3%81%A8%E3%83%87%E3%83%A1%E3%83%AA%E3%83%83%E3%83%88/img_1_huda4a374969e448ba98e0798d75e2e435_4729_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/win32api-c-%E3%81%A7%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E3%82%92%E4%BD%9C%E3%82%8B%E3%83%A1%E3%83%AA%E3%83%83%E3%83%88%E3%81%A8%E3%83%87%E3%83%A1%E3%83%AA%E3%83%83%E3%83%88/","title":"Vantagens e Desvantagens de Criar Programas com Win32API + C++"},{"content":"Se você for usar libcurl (com suporte a OpenSSL) no Visual Studio, a instalação do vcpkg é fácil e recomendada Quando se quer lidar com comunicação HTTP em C++, libcurl é frequentemente usado. Mas a compilação e o ajuste de dependências são surpreendentemente difíceis, não é mesmo?\nO que é útil em momentos como esse é a ferramenta de gerenciamento de bibliotecas C++ da Microsoft, ** \u0026ldquo;vcpkg\u0026rdquo; ** . Desta vez, introduziremos as etapas desde a introdução de libcurl (compatível com OpenSSL) usando cpkg até torná-lo fácil de usar no Visual Studio.\nInstalação do vcpkg (apenas para quem ainda não instalou) Primeiro, vamos instalar o cpkg. Execute as etapas a seguir no PowerShell.\npowershell git clone https://github.com/microsoft/vcpkg cd vcpkg .\bootstrap-vcpkg.bat ※Se você ainda não tem o Git instalado, instale-o a partir do Site oficial do Git.\nInstalação de libcurl (compatível com OpenSSL) Em seguida, use vcpkg para instalar o libcurl. Para especificar a versão de 64 bits compatível com OpenSSL, execute o comando a seguir.\npowershell vcpkg install curl[ssl] --triplet x64-windows Ao executar este comando, as dependências necessárias (como OpenSSL) também são configuradas automaticamente.\nConfiguração de integração com o Visual Studio Para facilitar o uso de bibliotecas instaladas com vcpkg a partir do seu projeto do Visual Studio, defina as configurações de integração com o comando a seguir.\npowershell vcpkg integrate install Depois de configurado, #include \u0026lt;curl/curl.h\u0026gt; ficará automaticamente disponível nos seus projetos do Visual Studio e você não precisará mais definir caminhos de bibliotecas ou configurações de vinculador manualmente.\nConclusão Com isso, a preparação para instalar libcurl (compatível com OpenSSL) no Visual Studio está concluída.\nAo usar vcpkg, você pode gerenciar dependências difíceis de uma só vez Instale facilmente libcurl com cpkg install curl[ssl] \u0026ndash;triplet x64-windows A integração automática com o Visual Studio é possível com cpkg integrate install Agora, basta incluir o cabeçalho no seu projeto e usar a API libcurl para iniciar o desenvolvimento. Aproveite o útil vcpkg e aumente rapidamente a eficiência do seu desenvolvimento.\n","date":"2025-07-07T21:46:08+09:00","image":"http://kenji.blog/p/vcpkg-%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6-visual-studio-%E3%81%AB-curl-%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB/img_hub03488d3cca2b78b7b08dd6d749f5d1e_294355_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/vcpkg-%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6-visual-studio-%E3%81%AB-curl-%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB/","title":"【Para Iniciantes】Guia para Instalar libcurl (com suporte a OpenSSL) no Visual Studio usando vcpkg"},{"content":"A \u0026ldquo;segurança mental\u0026rdquo; necessária para não se deixar levar por teorias da conspiração Ao navegar na internet, às vezes nos deparamos com histórias do tipo \u0026ldquo;teoria da conspiração\u0026rdquo;.\n\u0026ldquo;Será que há alguém manipulando este evento nos bastidores?\u0026rdquo; \u0026ldquo;Será que a verdadeira verdade está sendo ocultada?\u0026rdquo; Muitos já devem ter visto discursos como esses se espalharem de forma plausível.\nPara evitar ser sugado demais por essas informações, não basta apenas \u0026ldquo;conhecimento\u0026rdquo; ou \u0026ldquo;capacidade de raciocínio\u0026rdquo;, é muito importante ajustar a forma de ser da mente , ou seja, a \u0026ldquo;segurança mental\u0026rdquo;.\nAbaixo, apresentamos 6 formas de pensar eficazes para isso.\nNão conecte imediatamente a ansiedade a uma \u0026ldquo;resposta\u0026rdquo; Uma grande característica das teorias da conspiração é que elas apresentam uma \u0026ldquo;resposta\u0026rdquo; clara e fácil de entender para ansiedades e dúvidas.\nPor exemplo, a perguntas como:\n\u0026ldquo;Por que incidentes como este acontecem?\u0026rdquo; \u0026ldquo;Quem está se beneficiando?\u0026rdquo; Quando é apresentado um roteiro como \u0026ldquo;Na verdade, fulano está manipulando nos bastidores\u0026rdquo;, é fácil acabar se convencendo.\nMas é exatamente quando sentimos ansiedade que é importante manter as coisas em suspenso sem chegar imediatamente a uma conclusão .\nA \u0026ldquo;capacidade de permanecer sem saber\u0026rdquo; é também um sinal de maturidade intelectual.\nAmplie intencionalmente suas fontes de informação Muitos dos que mergulham em teorias da conspiração tendem a ver intensamente apenas \u0026ldquo;informações com ideias semelhantes\u0026rdquo;.\nIsso é chamado de \u0026ldquo;viés de confirmação\u0026rdquo;, uma tendência psicológica de focar apenas em informações que reforçam as crenças que já possuímos.\nEspecialmente os algoritmos de redes sociais e sites de vídeo continuam recomendando postagens que parecem se adequar ao seu gosto, o que pode estreitar naturalmente o seu campo de visão.\nConscientemente, tentar:\nConsumir mídia de perspectivas diferentes Ver notícias internacionais ou fontes acadêmicas Ouvir opiniões diferentes das suas Tentar a diversificação das fontes de informação leva a evitar riscos.\nNão pense \u0026ldquo;Eu não serei enganado\u0026rdquo; Pessoas lógicas ou com muito conhecimento muitas vezes são, na verdade, fáceis de serem atraídas para teorias da conspiração.\nIsso porque acreditar que \u0026ldquo;Eu posso perceber a verdade que os outros não percebem\u0026rdquo; se torna um fator que obscurece o julgamento.\nPor mais cuidado que se tenha, os seres humanos cometem erros. Por isso, a atitude mais racional é partir do princípio de que você também pode ser enganado .\n\u0026ldquo;Duvidar, mas não tirar conclusões precipitadas\u0026rdquo; torna-se seu poder de defesa.\nOlhe para a estrutura, sem ser puxado pela história As teorias da conspiração sempre vêm acompanhadas de uma \u0026ldquo;história dramática\u0026rdquo;.\nDicotomias simples como:\nA estrutura de conflito entre o bem e o mal Governantes e governados Eu desperto vs Os outros que sofreram lavagem cerebral Mesmo que sejam atraentes como histórias, nem sempre refletem corretamente a realidade.\nMuitos fatores se entrelaçam nos eventos reais e nos movimentos sociais, como relações causais complexas, contextos históricos e estruturas institucionais.\nÉ importante não se deixar levar muito pelas emoções da história e ter a perspectiva de entender estruturalmente \u0026ldquo;Por que isso está acontecendo?\u0026rdquo;.\nNão deixe a solidão sem atenção Muitas vezes, por trás de uma forte atração por teorias da conspiração, esconde-se o \u0026ldquo;isolamento\u0026rdquo; e a \u0026ldquo;falta de um lugar ao qual pertencer\u0026rdquo;.\nQuando as pessoas se sentem solitárias, elas facilmente se tornam profundamente dependentes de grupos e pessoas que as compreendem. As comunidades de teorias da conspiração às vezes cumprem a função desse \u0026ldquo;lugar\u0026rdquo;.\nPor isso mesmo, o esforço para não ficar sozinho também se conecta à segurança mental.\nPor exemplo, ações como:\nConversar regularmente com as pessoas Participar de comunidades onde se compartilham hobbies ou interesses Ter conexões offline, não apenas online Levam à estabilidade mental.\nFoque no diálogo, em vez de na negação Mesmo que alguém próximo esteja inclinado a teorias da conspiração, negar de forma categórica pode ter o efeito oposto.\nQuando as pessoas têm suas crenças negadas, a tendência psicológica de tentar protegê-las torna-se mais forte (isso é chamado de \u0026ldquo;cognição defensiva\u0026rdquo;).\nEm vez disso:\nPergunte gentilmente: \u0026ldquo;Por que você pensou isso?\u0026rdquo; Mostre sua própria perspectiva de forma calma: \u0026ldquo;Também pode haver essa forma de pensar.\u0026rdquo; Ao adotar uma abordagem baseada no diálogo , surge a possibilidade de a perspectiva da outra pessoa se ampliar naturalmente.\nConclusão: O que você pode fazer para manter distância das teorias da conspiração Ter a capacidade de suspender as coisas sem conectar imediatamente a ansiedade a uma resposta Diversificar as fontes de informação e perceber os vieses Reconhecer que seu próprio julgamento não é absoluto Olhar para as coisas pela estrutura e relações causais, não pela história Evitar a solidão e manter conexões Enfrentar as teorias da conspiração de outras pessoas com diálogo em vez de negação Diz-se que ser atraído por teorias da conspiração é mais influenciado pelo estado psicológico e pelo ambiente do que pela quantidade de conhecimento.\nPor isso mesmo, sem assumir que \u0026ldquo;Estou bem\u0026rdquo;, os esforços para aumentar a segurança mental um pouco de cada vez no cotidiano certamente serão um grande apoio para viver de forma flexível na sociedade da informação do futuro.\n","date":"2025-05-26T22:23:34+09:00","image":"http://kenji.blog/p/%E9%99%B0%E8%AC%80%E8%AB%96%E3%81%AB%E3%81%AF%E3%81%BE%E3%82%89%E3%81%AA%E3%81%84%E3%81%9F%E3%82%81%E3%81%AB%E4%BD%95%E3%81%8C%E5%BF%85%E8%A6%81%E3%81%8B/img_hu51c98705e3e626ac0eb85c430c7c7e5c_195663_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/%E9%99%B0%E8%AC%80%E8%AB%96%E3%81%AB%E3%81%AF%E3%81%BE%E3%82%89%E3%81%AA%E3%81%84%E3%81%9F%E3%82%81%E3%81%AB%E4%BD%95%E3%81%8C%E5%BF%85%E8%A6%81%E3%81%8B/","title":"O que é necessário para não cair em teorias da conspiração"},{"content":"História do Desenvolvimento Low-Code / No-Code (Anos 1980 - Presente) O desenvolvimento low-code / no-code é uma abordagem que permite criar aplicativos, sites e bancos de dados sem a necessidade de conhecimento especializado em programação. Essa ideia começou na década de 1980 e, com a popularização dos PCs, a evolução da internet e a expansão das tecnologias em nuvem, evoluiu para uma variedade de plataformas. Neste artigo, apresentaremos ferramentas e serviços representativos de cada década, destacando suas características e preços.\nAnos 1980: Os Primórdios HyperCard (Apple, 1987) Ferramenta de criação de aplicativos para Macintosh. A tela era configurada em formato de cartão, e a interface gráfica (GUI) era criada arrastando e soltando elementos. Um controle de comportamento simples também era possível usando sua própria linguagem de script, \u0026ldquo;HyperTalk\u0026rdquo;. Era preferido para fins de prototipagem. O preço no lançamento era de 49,95 dólares e, mais tarde, foi fornecido gratuitamente aos novos compradores de Mac. A última versão foi em 1998 e não é compatível com Mac OS X ou superior.\nFileMaker (Claris/Apple, 1985) Software de banco de dados gráfico. Além de exibir dados em formato de tabela, é uma ferramenta de banco de dados relacional com edição de layout flexível e recursos de script. Atualmente é oferecido como \u0026ldquo;Claris FileMaker Pro\u0026rdquo;, e a versão de licença completa custa 594 dólares (a partir de 2024).\nAnos 1990: A Ascensão dos Aplicativos GUI e Desenvolvimento de Negócios Visual Basic (Microsoft, 1991) Um IDE dedicado ao desenvolvimento de aplicativos Windows. Ao arrastar e soltar componentes da GUI, como botões e rótulos, era possível construir facilmente aplicativos orientados a eventos. Com o VB6.0 em 1998 como a última versão, o foco mudou para a era .NET.\nMicrosoft Access (1992) Ferramenta de desenvolvimento de banco de dados para Windows. Permitia o design de bancos de dados relacionais e a criação de formulários via GUI, sendo amplamente utilizado para o desenvolvimento de aplicativos de negócios em geral. Atualmente oferecido como parte do Microsoft 365.\nPowerBuilder (PowerSoft/Sybase, 1991) Ferramenta de desenvolvimento 4GL para aplicativos de negócios. Suportava arquitetura cliente/servidor e tinha pontos fortes na integração de bancos de dados. Atualmente continua sendo fornecido sob a marca SAP.\nDreamweaver (Macromedia, 1997) Uma ferramenta WYSIWYG que permitia a criação visual de páginas da web. Possibilitava alternar entre edição HTML e visualização de design, e também suportava ASP e PHP. Atualmente é fornecido pela Adobe e está disponível por assinatura (cerca de 34,49 dólares por mês).\nFlash (Macromedia, 1996) Originalmente desenvolvido como FutureSplash Animator, uma ferramenta de criação de animação vetorial. Mais tarde, foi utilizado para a criação de conteúdo interativo para a web, mas o suporte terminou em 2020 devido a preocupações de segurança.\nGameMaker (1999) Ferramenta de criação de jogos 2D para iniciantes. A colocação de objetos e o controle de eventos podem ser feitos arrastando e soltando. Posteriormente também suportou scripts (GML), e atualmente vários planos são oferecidos para uso comercial.\nAnos 2000: Base na Web e Expansão do Código Aberto WordPress (2003) CMS de código aberto usando PHP e MySQL. Permite construir blogs e sites corporativos usando temas e plugins sem conhecimento de programação. É distribuído gratuitamente e é um dos CMS mais utilizados no mundo.\nWix (2006) Um serviço no-code que permite a construção de sites no navegador. Você pode escolher um modelo e editar arrastando e soltando. Além do plano gratuito, planos pagos permitem o uso de domínios personalizados e recursos de e-commerce.\nOutSystems (2001) Plataforma low-code para empresas. Como permite o rápido desenvolvimento de sistemas de negócios, sua adoção está progredindo em grandes empresas e agências governamentais. Suporta tanto nuvem quanto infraestrutura local (on-premises).\nScratch (MIT, 2007) Ferramenta de aprendizado de programação desenvolvida para crianças. Ao combinar blocos coloridos, jogos e animações podem ser criados, e é amplamente utilizado em ambientes educacionais. Fornecido gratuitamente.\nAirtable (2013) Um serviço em nuvem que combina planilhas e bancos de dados. A aparência é semelhante ao Excel, mas permite relações, exibição Kanban e integração de API. É amplamente utilizado por indivíduos a corporações.\nAnos 2010 - 2020: A Era da Nuvem e Automação Nos últimos anos, as ferramentas low-code / no-code baseadas em nuvem evoluíram rapidamente.\nPower Platform (Microsoft) Uma plataforma integrada de desenvolvimento e automação de aplicativos de negócios que inclui \u0026ldquo;Power Apps\u0026rdquo;, \u0026ldquo;Power Automate\u0026rdquo;, etc. Os processos de negócios corporativos podem ser construídos visualmente arrastando e soltando.\nSalesforce Lightning Platform A base de desenvolvimento de aplicativos fornecida pela Salesforce, um CRM. Aplicativos de negócios podem ser criados via GUI e a integração com outros serviços da Salesforce é fácil.\nZapier / IFTTT Ferramentas de automação que permitem construir conexões entre vários serviços em nuvem sem codificação. Por exemplo, fluxos de trabalho como \u0026ldquo;Notificar o Slack quando algo for inserido no Google Forms\u0026rdquo; podem ser facilmente implementados.\nNotion (Anos 2010) Um espaço de trabalho completo que integra gerenciamento de documentos, gerenciamento de tarefas, Wiki, etc. Também possui uma função de banco de dados personalizada, útil para a melhoria de negócios sem código.\nConstruct 3 / GameSalad Ferramentas para criar jogos arrastando e soltando. O Construct 3 é compatível com HTML5 e também funciona em um navegador, sendo popular em ambientes educacionais e entre desenvolvedores indie.\nFontes de Informação e Complementos Este artigo foi estruturado com base nos sites oficiais de cada produto, Wikipedia e materiais/artigos confiáveis (Apple, Microsoft, Adobe, etc.). As informações de preços referem-se à época ou às informações oficiais mais recentes possíveis (listadas principalmente em dólares americanos). Muitas das ferramentas desde os anos 2000 são baseadas em assinaturas, e as taxas variam dependendo do plano.\n","date":"2025-04-26T16:46:11+09:00","image":"http://kenji.blog/p/%E3%83%AD%E3%83%BC%E3%82%B3%E3%83%BC%E3%83%89%E3%81%8A%E3%82%88%E3%81%B3%E3%83%8E%E3%83%BC%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AE%E6%AD%B4%E5%8F%B2/img_hu615c889fe1afb242f7436bdb2a6d534f_388471_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/historia-do-low-code-e-no-code/","title":"História do No-Code em Ambientes Locais"},{"content":"Afinal, o que é FizzBuzz? Olá!\nHoje eu gostaria de escrever sobre \u0026ldquo;FizzBuzz\u0026rdquo;.\nTanto para aqueles que pensam \u0026ldquo;Ah, eu conheço isso!\u0026rdquo;, quanto para aqueles que dizem \u0026ldquo;Já ouvi falar, mas não entendo muito bem\u0026rdquo;, por favor, fiquem comigo um pouquinho. Pode ser lido em poucos minutos, e talvez você pense \u0026ldquo;Faz sentido\u0026rdquo;.\nÉ verdade que \u0026ldquo;se você não consegue escrever FizzBuzz, você é um fracasso como programador\u0026rdquo;? O FizzBuzz, em resumo, é assim.\n1 2 3 4 5 6 7 8 9 for i in range(1, 101): if i % 15 == 0: print(\u0026#34;FizzBuzz\u0026#34;) elif i % 3 == 0: print(\u0026#34;Fizz\u0026#34;) elif i % 5 == 0: print(\u0026#34;Buzz\u0026#34;) else: print(i) Sim, este é o famoso \u0026ldquo;Problema FizzBuzz\u0026rdquo;.\nVocê analisa os números de 1 a 100 em ordem,\nse for um múltiplo de 3, exibe \u0026ldquo;Fizz\u0026rdquo;, se for um múltiplo de 5, exibe \u0026ldquo;Buzz\u0026rdquo;,\nse for um múltiplo de ambos, exibe \u0026ldquo;FizzBuzz\u0026rdquo; - é algo muito simples.\nE, no entanto, por algum motivo, costuma ser tratado como \u0026ldquo;o teste mínimo para um programador\u0026rdquo;. Aparece em entrevistas, e nas redes sociais você vê comentários do tipo \u0026ldquo;Alguém que não consegue nem escrever FizzBuzz\u0026hellip;\u0026rdquo;.\nMas, espere um minuto.\nPodemos realmente dizer que \u0026ldquo;não conseguir escrever FizzBuzz = não conseguir programar\u0026rdquo;?\nNão é sobre poder ou não, mas se você tem o \u0026ldquo;estado\u0026rdquo; para poder É verdade que o FizzBuzz exige compreensão da sintaxe e pensamento lógico básico. Portanto, faz sentido que seja usado para \u0026ldquo;verificar os fundamentos\u0026rdquo;.\nMas, veja bem.\nSe o ambiente for diferente, os resultados serão diferentes.\nPor exemplo,\nQuando você está nervoso na frente de um entrevistador que acabou de conhecer Quando você recebe um quadro branco de repente e não tem um editor à mão Quando você não consegue se lembrar imediatamente de \u0026ldquo;Ei, o que é modulo?\u0026rdquo; \u0026hellip;Isso não acontece? Somos humanos. Eu acho que acontece.\nPortanto, em vez de \u0026ldquo;conseguir escrever FizzBuzz\u0026rdquo;, acho que \u0026ldquo;conseguir se colocar em um estado em que consiga escrever FizzBuzz\u0026rdquo; é, na verdade, muito mais importante.\nA armadilha do conselho comum de \u0026ldquo;Basta treinar e ficará tudo bem\u0026rdquo; Quando se trata desse assunto, o conselho \u0026ldquo;Então pratique todos os dias!\u0026rdquo; tende a surgir.\nÉ verdade que a prática repetida fará com que você o escreva com fluência, e isso em si é bom. Mas se partirmos da premissa de que \u0026ldquo;se você não conseguir escrever FizzBuzz, você é um fracasso\u0026rdquo;, isso pode se transformar em mero medo.\nEm outras palavras, tende a criar uma estrutura onde você sente \u0026ldquo;Eu cometi um erro = sou inútil\u0026rdquo;.\nPor exemplo, quando você acorda tarde, você não tende a pensar \u0026ldquo;Eu sou preguiçoso\u0026hellip;\u0026rdquo;? Mas pode ser apenas que seu corpo estivesse cansado naquele momento.\nO FizzBuzz é a mesma coisa.\nDito isto, o FizzBuzz ainda é uma boa pergunta Dito isto, o FizzBuzz não é ruim.\nEm vez disso, acho que é uma pergunta muito bem elaborada. As regras são simples e é fácil de expandir. Por exemplo, se você mudá-lo assim, seu pensamento se aprofundará.\n1 2 3 4 5 6 7 for i in range(1, 101): output = \u0026#34;\u0026#34; if i % 3 == 0: output += \u0026#34;Fizz\u0026#34; if i % 5 == 0: output += \u0026#34;Buzz\u0026#34; print(output or i) Este é um exemplo de \u0026ldquo;Você pode escrever isso mesmo sem usar if-elif-else\u0026rdquo;. É meio inteligente, não é?\nEm outras palavras, o FizzBuzz não trata apenas de \u0026ldquo;se você conseguiu fazer\u0026rdquo;, mas também serve como ponto de partida para ver \u0026ldquo;como você o escreve\u0026rdquo; e \u0026ldquo;o quanto você entende\u0026rdquo;.\nPor tanto Acho que não devemos atribuir muito significado excessivo a se você consegue ou não fazer o FizzBuzz.\nMesmo que você não tenha conseguido escrever, pode ser apenas que \u0026ldquo;você não estava se sentindo bem agora\u0026rdquo;, e muitas vezes você conseguirá se pensar com cuidado mais tarde.\nNão se apresse, vamos avançar devagar.\nO código é escrito por humanos. Porque somos humanos, às vezes esquecemos coisas e ficamos nervosos. Aceitando isso, acho que basta se pudermos avançar pouco a pouco.\nEntão, vamos escrever o código de maneira descontraída hoje.\n","date":"2025-04-18T00:58:11+09:00","image":"http://kenji.blog/p/fizzbuzz/img_hu0b23239076c3049a7d4382dec6ccfba6_85967_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/fizzbuzz/","title":"FizzBuzz"},{"content":"Torre de Hanói Olá!\nHoje, gostaria de explicar sobre a \u0026ldquo;Torre de Hanói\u0026rdquo;, usando um programa de exemplo em Python.\nO que é a Torre de Hanói? A Torre de Hanói é um quebra-cabeça que usa 3 hastes e vários discos. Os discos têm tamanhos diferentes e, no início, estão empilhados em uma haste em ordem decrescente de tamanho. As regras são as seguintes:\nApenas um disco pode ser movido por vez. Não é possível colocar um disco maior em cima de um disco menor. Este quebra-cabeça é considerado um excelente material de ensino para aprender o pensamento recursivo. A recursividade é um método de resolver um problema dividindo-o em problemas menores do mesmo tipo. Na Torre de Hanói, para mover n discos, repete-se a operação de mover n-1 discos.\nVamos resolver a Torre de Hanói com Python Abaixo está um código de exemplo para resolver a Torre de Hanói em Python.\n1 2 3 4 5 6 7 8 9 10 def hanoi(n, source, target, auxiliary): if n == 1: print(f\u0026#34;Move disk 1 from {source} to {target}\u0026#34;) return hanoi(n - 1, source, auxiliary, target) print(f\u0026#34;Move disk {n} from {source} to {target}\u0026#34;) hanoi(n - 1, auxiliary, target, source) # Exemplo: Mover 3 discos de A para C hanoi(3, \u0026#39;A\u0026#39;, \u0026#39;C\u0026#39;, \u0026#39;B\u0026#39;) Neste código, a função hanoi é chamada recursivamente e os passos para mover os discos são exibidos. Por exemplo, no caso de 3 discos, a seguinte saída é obtida:\n1 2 3 4 5 6 7 Move disk 1 from A to C Move disk 2 from A to B Move disk 1 from C to B Move disk 3 from A to C Move disk 1 from B to A Move disk 2 from B to C Move disk 1 from A to C Desta forma, ao usar uma abordagem recursiva, problemas complexos podem ser resolvidos de forma simples.\nQuanto tempo leva para mover 64 discos? O número de movimentos na Torre de Hanói requer no mínimo 2^n - 1 vezes. Ou seja, para mover 64 discos, são necessários 2^64 - 1 movimentos, o que dá aproximadamente 1,84×10^19 movimentos. Mesmo que você pudesse mover um por segundo, levaria cerca de 584 bilhões de anos. Isso é cerca de 42 vezes a idade do universo (aproximadamente 13,7 bilhões de anos).\nDesta forma, conforme o número de discos aumenta, o número necessário de movimentos aumenta exponencialmente. Portanto, mover 64 discos na prática não é realista.\nResumo A Torre de Hanói é um quebra-cabeça perfeito para aprender o pensamento recursivo. Com Python, você pode facilmente implementar a sua solução. No entanto, é preciso ter cuidado, pois à medida que o número de discos aumenta, o número de movimentos necessários aumenta drasticamente.\nAo entender a abordagem recursiva e tentar escrever código de fato, você pode melhorar suas habilidades de programação. Por favor, experimente enfrentar o desafio da Torre de Hanói.\n","date":"2025-04-17T22:23:14+09:00","image":"http://kenji.blog/p/%E3%83%8F%E3%83%8E%E3%82%A4%E3%81%AE%E5%A1%94/img_hub916bf71b02b2ffc8b3c247adaa061ec_2314383_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/torre-de-hanoi/","title":"Torre de Hanói"},{"content":"Número de Linhas de Código-Fonte Olá!\nHoje eu gostaria de falar sobre um tema um pouco diferente.\nO assunto é: \u0026ldquo;O quanto o número de linhas de código-fonte aumentou em comparação com o passado?\u0026rdquo;\nPor exemplo, o software do Ônibus Espacial consistia em cerca de 420.000 linhas de código. Esse código foi desenvolvido sob um processo muito rigoroso para atender aos altos padrões de qualidade da NASA. Por outro lado, em projetos de software modernos em grande escala, não é incomum que o número de linhas de código ultrapasse dezenas de milhões. Por exemplo, diz-se que a base de código do Google chega a cerca de 2 bilhões de linhas.\nComo podemos ver, a escala do software tem crescido com o tempo.\nMas, espere um minuto.\nUm aumento no número de linhas de código não é necessariamente uma coisa ruim. É natural que o código aumente para adicionar novos recursos e atender às necessidades do usuário. No entanto, à medida que o código aumenta, o risco de bugs também aumenta. De fato, algumas pesquisas mostram que projetos de código aberto tendem a ter um aumento na taxa de bugs quando ultrapassam 1 milhão de linhas.\nMesmo assim, nem todos os projetos estão aumentando seu código da mesma maneira.\nPor exemplo, o kernel do Linux tinha cerca de 200.000 linhas na versão 1.0 em 1994, mas cresceu para cerca de 20 milhões de linhas na versão 4.2 em 2015. Esse aumento se deve à necessidade de suportar evoluções de hardware e a adição de novos recursos.\nPortanto, o número de linhas de código-fonte varia muito dependendo do tamanho e propósito do projeto, e do contexto da época.\nO aumento nas linhas de código por si só não é um problema, mas requer gerenciamento adequado para manter a qualidade e a capacidade de manutenção. É importante entender os riscos associados ao aumento de código e tomar as medidas apropriadas.\nPor fim, acho importante não ficar muito focado apenas nas linhas de código, mas sim enfatizar o propósito e a qualidade do projeto.\nBem, vejo vocês na próxima vez!\n","date":"2025-04-17T10:33:02+09:00","image":"http://kenji.blog/p/%E3%82%BD%E3%83%BC%E3%82%B9%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AE%E8%A1%8C%E6%95%B0/img_1_hu5eec8f3e01b611d6fcced12ecef63fb0_956545_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/numero-de-linhas-de-codigo-fonte/","title":"Número de Linhas de Código-Fonte"},{"content":"\u0026ldquo;Princípio de Kerckhoffs\u0026rdquo; Olá!\nHoje eu gostaria de falar sobre algo um pouco interessante e, na verdade, extremamente importante chamado \u0026ldquo;Princípio de Kerckhoffs\u0026rdquo;.\nAh, espere, espere.\nAlguns de vocês podem pensar: \u0026ldquo;Nunca ouvi falar do \u0026lsquo;Princípio de Kerckhoffs\u0026rsquo; e tem muitos termos técnicos\u0026hellip;\u0026rdquo;. Não se preocupe. Este artigo é exatamente o que eu quero que pessoas como você leiam.\nO que significa \u0026ldquo;criptografia segura\u0026rdquo;? Por exemplo, digamos que alguém diga: \u0026ldquo;Este cofre só pode ser aberto por alguém que saiba a maneira secreta de abri-lo\u0026rdquo;.\nÀ primeira vista, isso parece muito seguro, não é?\nMas, se você pensar bem, não é um pouco preocupante?\nComo, \u0026ldquo;Se o segredo for revelado, é o fim?\u0026rdquo;.\nNa verdade, foi isso que desencadeou o surgimento do Princípio de Kerckhoffs.\nO que é o \u0026ldquo;Princípio de Kerckhoffs\u0026rdquo; afinal? Explicando de forma bem simples, é a ideia de que\n\u0026ldquo;A criptografia deve ser segura mesmo se o seu funcionamento for descoberto\u0026rdquo; .\nEm outras palavras, \u0026ldquo;A segurança deve depender apenas da \u0026lsquo;chave secreta\u0026rsquo;, e o método de criptografia em si pode ser público!\u0026rdquo;.\nPor outro lado, \u0026ldquo;Um estado em que o algoritmo (mecanismo) de criptografia é mantido em segredo é considerado de baixa confiabilidade\u0026rdquo;.\n\u0026ldquo;Se o mecanismo for secreto, é seguro\u0026rdquo; pode ser um pouco perigoso Essa é uma maneira comum de pensar:\n\u0026ldquo;Não mostrei o interior deste aplicativo a ninguém, então a segurança está ok\u0026rdquo;\nEu entendo o sentimento.\nMas isso é o mesmo que dizer: \u0026ldquo;Ninguém está olhando, então nenhum ponto fraco será encontrado, certo?\u0026rdquo;.\nNa realidade, o próprio fato de que \u0026ldquo;ninguém está olhando\u0026rdquo; pode se tornar um risco.\nMas por que esse princípio é importante? Porque, se alguém colocar as mãos no mecanismo e puder decifrá-lo facilmente, essa criptografia está acabada.\nPara usar uma analogia, é como se a fechadura de uma porta tivesse um mecanismo muito complexo, mas na verdade pudesse ser aberta com uma chave reserva feita em uma loja de artigos de um dólar.\nO importante não é \u0026ldquo;A chave é secreta, então está tudo bem\u0026rdquo;, mas \u0026ldquo;Mesmo se você mostrar todo o mecanismo, ele não pode ser aberto sem a chave certa\u0026rdquo;.\nA sensação de \u0026ldquo;Mas isso não é um pouco assustador?\u0026rdquo; O que muitas pessoas sentem aqui é a ansiedade de\n\u0026ldquo;Não é meio assustador expor todo o mecanismo?\u0026rdquo;\nEu entendo.\nPorque você pensa: \u0026ldquo;Se eu mostrar o interior inteiro, não será imitado ou usado para o mal?\u0026rdquo;.\nMas esse é exatamente o cerne do Princípio de Kerckhoffs.\nA \u0026ldquo;força que não entra em colapso mesmo quando o interior é mostrado\u0026rdquo; é a verdadeira segurança.\nDito isso, requer um pouco de coragem no começo Colocando-se no lugar do desenvolvedor, parece que \u0026ldquo;publicar o mecanismo = revelar suas fraquezas\u0026rdquo;, então é claro que é de dar frio na barriga.\nMas pense sobre isso.\nAlgo que você pode mostrar adequadamente e dizer: \u0026ldquo;Qualquer um pode verificar\u0026rdquo;, acabará sendo mais confiável.\nIsso é semelhante às relações humanas.\nVocê pode se sentir mais seguro com \u0026ldquo;uma pessoa que se dá bem com você depois de mostrar o seu verdadeiro eu\u0026rdquo;.\nConclusão O Princípio de Kerckhoffs pode soar um pouco teórico, mas sua essência é muito simples.\nÉ apenas uma questão de \u0026ldquo;Vamos criar um sistema que não quebre, não importa para quem você o mostre\u0026rdquo; .\nUm design adequado em vez de segredos superficiais.\nCódigo do qual você não se envergonha de mostrar, em vez de código que você não quer que ninguém veja.\nTalvez esse tipo de \u0026ldquo;força\u0026rdquo; seja cada vez mais necessário na próxima era.\nMuito obrigado por ler!\nA segurança é um assunto um pouco difícil, mas há partes que se conectam a \u0026ldquo;relacionamentos com pessoas\u0026rdquo; e \u0026ldquo;paz de espírito cotidiana\u0026rdquo;.\nSe você aprender um pouco de cada vez sem se sentir sobrecarregado, tenho certeza de que coisas boas acontecerão.\n","date":"2025-04-16T23:53:08+09:00","image":"http://kenji.blog/p/%E3%82%B1%E3%83%AB%E3%82%AF%E3%83%9B%E3%83%95%E3%82%B9%E3%81%AE%E5%8E%9F%E7%90%86/img_2_hu71b6c82ab9eb0ac0abd797e00918df90_2573611_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/principio-de-kerckhoffs/","title":"Princípio de Kerckhoffs"},{"content":"🎯 Passos para Executar o PowerShell a partir de C++ via DLL C++/CLI (Visual Studio 2022 / C++) ✅ Visão Geral da Arquitetura 🔹 ① DLL Wrapper CLI (C++/CLI) Fornece a funcionalidade para executar scripts do PowerShell.\n🔹 ② Chamador Nativo C++ Chama a DLL CLI para executar o script do PowerShell.\n🔧 Passo 1: Criando o Projeto DLL Wrapper CLI 1. Criar o Projeto [Criar um novo projeto] → [C++] → Biblioteca de Classes CLR (.NET Framework) Nome: PowerShellWrapper 💡 Se este modelo não for exibido, instale a carga de trabalho \u0026ldquo;Desenvolvimento para desktop com .NET\u0026rdquo;.\n2. Adicionar o Pacote NuGet Clique com o botão direito no projeto → [Gerenciar Pacotes NuGet] Pesquise e instale System.Management.Automation\n(Versão 5.x ou 7.x) 3. Implementação do Código CLI PowerShellWrapper.h 1 2 3 4 5 6 7 8 9 10 #pragma once using namespace System; namespace PowerShellWrapper { public ref class PowerShellExecutor { public: String^ Execute(String^ script); }; } PowerShellWrapper.cpp 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 #include \u0026#34;PowerShellWrapper.h\u0026#34; using namespace System; using namespace System::Management::Automation; using namespace System::Collections::ObjectModel; String^ PowerShellWrapper::PowerShellExecutor::Execute(String^ script) { PowerShell^ ps = PowerShell::Create(); ps-\u0026gt;AddScript(script); Collection\u0026lt;PSObject^\u0026gt;^ results = ps-\u0026gt;Invoke(); System::Text::StringBuilder^ sb = gcnew System::Text::StringBuilder(); for each (PSObject^ result in results) { sb-\u0026gt;AppendLine(result-\u0026gt;ToString()); } return sb-\u0026gt;ToString(); } 🔧 Passo 2: Chamando a partir do C++ Nativo 1. Criar o Projeto de Aplicativo de Console C++ Nome: NativeApp 2. Adicionar Referência Clique com o botão direito no projeto → [Adicionar] → [Referência] → Projetos → Adicione PowerShellWrapper [Propriedades] → [C/C++] → [Suporte a Common Language Runtime] → Mude para /clr 3. Código de Execução (main.cpp) 1 2 3 4 5 6 7 8 9 10 11 12 13 #using \u0026lt;System.dll\u0026gt; #using \u0026#34;..\\\\PowerShellWrapper\\\\Debug\\\\PowerShellWrapper.dll\u0026#34; using namespace System; using namespace PowerShellWrapper; int main() { PowerShellExecutor^ executor = gcnew PowerShellExecutor(); String^ result = executor-\u0026gt;Execute(\u0026#34;Get-Process | Select-Object -First 1\u0026#34;); Console::WriteLine(result); return 0; } 💡 Informações Adicionais (IDL / TLB / Registro COM) Esta configuração faz referência direta à DLL .NET em vez de usar COM, portanto, IDL, TLB ou registro COM não são necessários . ✅ Estrutura Final 1 2 3 4 5 Solution ├── PowerShellWrapper (C++/CLI DLL) │ └── PowerShellExecutor ├── NativeApp (C++ EXE) └── main.cpp → Chamada de DLL ","date":"2025-04-16T01:58:03+09:00","image":"http://kenji.blog/p/c-%E3%81%8B%E3%82%89-powershell-%E3%82%92-c-cli-dll-%E7%B5%8C%E7%94%B1%E3%81%A7%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B%E6%89%8B%E9%A0%86/img_hu7575b218a6ea53bc902a4f89abde2058_17844_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/c-%E3%81%8B%E3%82%89-powershell-%E3%82%92-c-cli-dll-%E7%B5%8C%E7%94%B1%E3%81%A7%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B%E6%89%8B%E9%A0%86/","title":"Passos para Executar o PowerShell a partir de C++ via DLL C++/CLI"},{"content":"【Windows】Como verificar o status da licença (OK com 1 comando) Você já se perguntou se a sua licença do Windows está autenticada corretamente?\nPara esses momentos, uma forma conveniente é o método de verificar as informações da licença com um único comando . Você pode verificar facilmente o status atual da sua licença simplesmente executando os passos abaixo.\nComando para verificar o status da licença Você pode exibir as informações da sua licença usando uma ferramenta de script embutida no Windows. O comando a ser usado está aqui:\n1 slmgr /dli Quando você executa este comando, algumas informações sobre a sua licença serão exibidas em uma janela.\nComo executar Abra o \u0026ldquo;Menu Iniciar\u0026rdquo;, digite \u0026ldquo;cmd\u0026rdquo;, clique com o botão direito em Prompt de Comando → \u0026ldquo;Executar como administrador\u0026rdquo; .\nDigite o seguinte no Prompt de Comando e pressione Enter:\n1 slmgr /dli Após esperar alguns segundos, informações da licença como as seguintes serão exibidas.\nPrincipais informações exibidas Parte da chave do produto Tipo de licença (Varejo, OEM, etc.) Status da licença (Ativa, expirada, não autenticada, etc.) E se você quiser saber informações mais detalhadas? Também existem comandos como os seguintes:\nslmgr /dlv : Exibe informações mais detalhadas da licença slmgr /xpr : Exibe a data de expiração da licença (se é permanente, etc.) Resumo O status da licença do Windows pode ser facilmente verificado com um único comando.\nVerificação simples : slmgr /dli Verificação detalhada : slmgr /dlv Verificação da data de expiração : slmgr /xpr Se houver um problema com a sua licença, pode haver restrições em atualizações e certos recursos, por isso é seguro verificá-la periodicamente.\n","date":"2025-04-14T00:41:45+09:00","image":"http://kenji.blog/p/windows-%E3%81%AE%E3%83%A9%E3%82%A4%E3%82%BB%E3%83%B3%E3%82%B9%E3%81%AE%E7%8A%B6%E6%85%8B%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%99%E3%82%8B%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89/img_1_hudcf97514836ad006a409bb9b34fbe340_111425_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/windows-%E3%81%AE%E3%83%A9%E3%82%A4%E3%82%BB%E3%83%B3%E3%82%B9%E3%81%AE%E7%8A%B6%E6%85%8B%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%99%E3%82%8B%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89/","title":"Comando para verificar o status da licença do Windows"},{"content":"Parâmetros de conversão do ffmpeg otimizados para iOS Apresentamos o comando ffmpeg para converter vídeos para que possam ser reproduzidos sem problemas em dispositivos iOS (iPhone e iPad).\n1 2 3 4 5 6 ffmpeg -i input.mp4 \\ -c:v libx264 -profile:v high -level 4.1 \\ -vf \u0026#34;scale=1920:-2\u0026#34; -r 30 \\ -crf 20 -preset slow \\ -c:a aac -b:a 128k -ar 48000 \\ -movflags +faststart output.mp4 Significado de cada opção (breve explicação) Opção Descrição -i input.mp4 Arquivo de entrada (vídeo a ser convertido) -c:v libx264 Codificar vídeo com H.264 (compatível com iOS) -profile:v high -level 4.1 Perfil e nível amplamente compatíveis com iOS -vf \u0026quot;scale=1920:-2\u0026quot; Redimensionar para 1920px de largura, a altura é ajustada automaticamente mantendo a proporção -r 30 Converter a taxa de quadros para 30fps -crf 20 Qualidade de vídeo (números menores significam maior qualidade, recomendado 18–23) -preset slow Equilíbrio entre velocidade de codificação e taxa de compressão (slow significa alta compressão e alta qualidade) -c:a aac O áudio é codificado no formato AAC -b:a 128k Definir taxa de bits de áudio para 128kbps -ar 48000 Definir taxa de amostragem de áudio para 48kHz (recomendado para iOS) -movflags +faststart Coloca um índice no início do vídeo para acelerar a reprodução por streaming na Web e no iOS Espera-se que os vídeos convertidos com essas configurações tenham alta compatibilidade e reprodução suave em dispositivos da Apple, como iPhone e iPad.\nSe necessário, você pode ajustar o tamanho do arquivo e a qualidade da imagem alterando a resolução e a taxa de bits. Se precisar de alta qualidade de imagem, tente definir o -crf para cerca de 18; se quiser reduzir o tamanho do arquivo, defina-o para 22–25.\n","date":"2025-03-02T04:16:07+09:00","image":"http://kenji.blog/p/ios-%E5%90%91%E3%81%91%E3%81%AE-ffmpeg-%E3%83%91%E3%83%A9%E3%83%A1%E3%83%BC%E3%82%BF/img_hu6ca6c354dba8425c4a9e54b9842ad89b_30790_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/ios-%E5%90%91%E3%81%91%E3%81%AE-ffmpeg-%E3%83%91%E3%83%A9%E3%83%A1%E3%83%BC%E3%82%BF/","title":"Parâmetros do ffmpeg para iOS"},{"content":"Procedimento de Restauração para Dispositivos Android (Google Pixel) Se o seu dispositivo Google Pixel sofrer problemas graves de sistema, como \u0026ldquo;reinicializações contínuas (bootloop)\u0026rdquo;, \u0026ldquo;travamento na tela do logotipo\u0026rdquo; ou \u0026ldquo;funcionamento extremamente instável\u0026rdquo;, você pode reparar (restaurar) o software do dispositivo de forma segura pelo navegador, usando a ferramenta oficial \u0026ldquo;Pixel Update and Software Repair\u0026rdquo; fornecida pelo Google.\nNeste artigo, explicaremos detalhadamente os procedimentos específicos e os pontos de atenção.\n1. Acessando a Ferramenta de Restauração Primeiro, acesse a página oficial da ferramenta de reparo pelo navegador do seu PC (Windows ou Mac) (recomenda-se Google Chrome ou Microsoft Edge):\n🔗 Site Oficial Pixel Update and Software Repair\n※ Atenção ※ Quando você executa o processo de restauração, os dados no dispositivo (fotos, aplicativos, contatos, etc.) podem ser totalmente apagados (inicializados) . Se o dispositivo estiver operável, certifique-se de fazer um backup no Google Drive ou semelhante com antecedência.\n2. Preparação Prévia para a Restauração Para garantir que o processo ocorra sem problemas, prepare o seguinte:\nCarga da Bateria Se a energia acabar no meio do processo, o dispositivo corre o risco de virar um peso de papel (quebrar completamente). Carregue pelo menos 50% ou, idealmente, o máximo possível. Uso do Cabo USB Original Para garantir uma transferência de dados estável, é altamente recomendável usar o cabo USB-C original que veio com o dispositivo. Instalação de Drivers (se necessário) Se estiver usando um PC com Windows, o dispositivo pode não ser reconhecido corretamente. Nesse caso, instale os Drivers USB do Google. 3. Passos Específicos de Restauração Quando estiver pronto, siga as instruções na tela para prosseguir com a restauração.\nPasso 1: Seleção da Operadora e Conexão do Dispositivo Ao abrir o site, a tela de seleção de operadora (empresa de telefonia móvel) aparecerá primeiro. Se for desbloqueado ou sem operadora, selecione \u0026ldquo;Outro (Other)\u0026rdquo;, etc. Em seguida, conecte o PC e o dispositivo Pixel usando um cabo USB.\nPasso 2: Colocar o Dispositivo no \u0026ldquo;Modo de Resgate (Modo Fastboot)\u0026rdquo; Siga as instruções na tela. Com o dispositivo desligado, pressione e segure o botão de energia e o botão de diminuir volume ao mesmo tempo para iniciar o modo Fastboot (uma tela preta com o robô Android deitado).\nPasso 3: Reconhecimento do Dispositivo no PC Ao clicar no botão \u0026ldquo;Conectar dispositivo\u0026rdquo; no navegador, um pop-up abrirá mostrando o dispositivo Pixel conectado na lista. Selecione o dispositivo de destino e permita a conexão.\nPasso 4: Download e Instalação do Software Assim que o dispositivo for reconhecido, a versão ideal do Android OS (firmware) será selecionada automaticamente. Ao clicar em \u0026ldquo;Instalar\u0026rdquo;, o software será baixado para o PC e a gravação (flash) no dispositivo começará.\n⚠️ Aviso: Durante esse processo, nunca desconecte o cabo USB ou desligue o PC.\nPasso 5: Conclusão e Configuração Inicial Quando a barra de progresso chegar a 100% e a mensagem \u0026ldquo;Concluído\u0026rdquo; aparecer, a restauração foi bem-sucedida. O dispositivo será reiniciado automaticamente e a tela de configuração inicial (a tela \u0026ldquo;Olá\u0026rdquo;), igual à de quando você o comprou, será exibida.\nResumo A ferramenta de reparo oficial do Google Pixel é uma excelente ferramenta que permite gravar firmwares de forma segura apenas clicando no navegador, sem precisar executar comandos especiais (adb ou fastboot) diretamente.\nAntes de levar seu dispositivo a uma loja por mau funcionamento, tentar este procedimento pode resolver o problema facilmente. Esperamos que este guia seja útil!\n","date":"2025-02-28T01:20:41+09:00","image":"http://kenji.blog/p/androidgoogle-pixel%E7%AB%AF%E6%9C%AB%E3%81%AE%E5%BE%A9%E5%85%83%E6%89%8B%E9%A0%86/pixel_restore_eyecatch_1788588727945_hu9d405d830ed3e56e9e703ab601cf6c0a_776052_120x120_fill_q75_box_smart1.jpg","permalink":"http://kenji.blog/pt/p/androidgoogle-pixel%E7%AB%AF%E6%9C%AB%E3%81%AE%E5%BE%A9%E5%85%83%E6%89%8B%E9%A0%86/","title":"Procedimento de Restauração de Software (Inicialização/Reparo) para Dispositivos Android (Google Pixel)"},{"content":"Enviar Gmail com curl 1. Obter uma senha de aplicativo https://myaccount.google.com/apppasswords Clique no link acima e insira o nome do aplicativo. Salve a senha gerada.\n2. Enviar email com o comando curl Execute o seguinte comando.\nNo exemplo abaixo, o conteúdo do email está escrito em mail.txt.\n1 2 3 4 5 6 From: from@gmail.com To: to@gmail.com Subject: Email de teste Content-Type: text/plain; charset=\u0026#34;UTF-8\u0026#34; Este é um email de teste. Crie o arquivo acima e execute o seguinte comando.\n1 curl --url \u0026#34;smtps://smtp.gmail.com:465\u0026#34; --ssl-reqd --mail-from \u0026#34;from@gmail.com\u0026#34; --mail-rcpt \u0026#34;to@gmail.com\u0026#34; --user \u0026#34;from@gmail.com:xxxxxxxxxxxxxxxx\u0026#34; --upload-file mail.txt ※ Substitua xxxxxxxxxxxxxxxx pela sua senha de aplicativo.\n","date":"2025-02-27T02:13:31+09:00","image":"http://kenji.blog/p/gmail%E3%82%92curl%E3%81%8B%E3%82%89%E9%80%81%E3%82%8B/img_hua1028a8ea194106f3853f4bdf4e1e991_75790_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/enviar-gmail-com-curl/","title":"Enviar Gmail com curl"},{"content":"Apresentação de códigos de exemplo usando a biblioteca padrão.\nBaixar e exibir uma imagem 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 import urllib.request import tempfile import os import webbrowser import time url = \u0026#34;https://www.aomori-ringo.or.jp/kids/wp-content/uploads/2021/11/apple.png\u0026#34; try: with urllib.request.urlopen(url) as response: img_data = response.read() # Salvar em um arquivo temporário e exibir with tempfile.NamedTemporaryFile(delete=False, suffix=\u0026#34;.png\u0026#34;) as tmp: tmp.write(img_data) print(f\u0026#34;file://{tmp.name}\u0026#34;) webbrowser.open(f\u0026#34;file://{tmp.name}\u0026#34;) time.sleep(3) except Exception as e: print(f\u0026#34;Ocorreu um erro: {e}\u0026#34;) finally: if \u0026#39;tmp\u0026#39; in locals(): os.unlink(tmp.name) # Excluir arquivo temporário ","date":"2025-02-24T18:21:14+09:00","image":"http://kenji.blog/p/python%E3%82%B3%E3%83%BC%E3%83%89%E7%89%87/img_hu6807d8c9816a78d77990562cff91e319_70806_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/python%E3%82%B3%E3%83%BC%E3%83%89%E7%89%87/","title":"Trechos de código Python"},{"content":"Chamar a API do ChatGPT pelo curl Presume-se que a chamada seja feita a partir do prompt de comando do Windows.\n1 2 curl https://api.openai.com/v1/chat/completions -H \u0026#34;Content-Type: application/json\u0026#34; -H \u0026#34;Authorization: Bearer sk-proj-XXXXXXXXXXXXXXXXXXXX\u0026#34; -d \u0026#34;{\u0026#34;\u0026#34;model\u0026#34;\u0026#34;: \u0026#34;\u0026#34;gpt-3.5-turbo\u0026#34;\u0026#34;,\u0026#34;\u0026#34;messages\u0026#34;\u0026#34;: [{\u0026#34;\u0026#34;role\u0026#34;\u0026#34;: \u0026#34;\u0026#34;system\u0026#34;\u0026#34;, \u0026#34;\u0026#34;content\u0026#34;\u0026#34;: \u0026#34;\u0026#34;Responda em dialeto Kansai.\u0026#34;\u0026#34;}, {\u0026#34;\u0026#34;role\u0026#34;\u0026#34;: \u0026#34;\u0026#34;user\u0026#34;\u0026#34;, \u0026#34;\u0026#34;content\u0026#34;\u0026#34;: \u0026#34;\u0026#34;Insira a mensagem que deseja enviar aqui\u0026#34;\u0026#34;}]}\u0026#34; ","date":"2025-02-01T17:15:34+09:00","image":"http://kenji.blog/p/chatgpt-api%E3%82%92curl%E3%81%8B%E3%82%89%E5%91%BC%E3%81%B3%E5%87%BA%E3%81%99/img_huc9cfad0a382aa812189dd7635d7709f2_1078030_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/chatgpt-api%E3%82%92curl%E3%81%8B%E3%82%89%E5%91%BC%E3%81%B3%E5%87%BA%E3%81%99/","title":"Chamar a API do ChatGPT pelo curl"},{"content":"Resumo de Ações com Altos Dividendos Mitsubishi UFJ Financial Group (8306) Sumitomo Mitsui Financial Group (8316) Mitsubishi Corporation (8058) Itochu Corporation (8001) NTT (9432) KDDI (9433) Okinawa Cellular Telephone (9436) Tokio Marine Holdings (8766) Toyota Motor (7203) Yamaha Motor (7272) Asahi Group Holdings (2502) Kirin Holdings (2503) JT (2914) Bridgestone (5108) Daiwa House Industry (1925) Sekisui House (1928) Kyocera (6971) Shin-Etsu Chemical (4063) Nitto Denko (6988) Orix (8591) Mitsubishi HC Capital (8593) Hulic (3003) ","date":"2024-12-22T00:56:14+09:00","image":"http://kenji.blog/p/%E9%AB%98%E9%85%8D%E5%BD%93%E6%A0%AA%E3%81%BE%E3%81%A8%E3%82%81/img_huf2943e4fc5463d0d6e36ddd1be1ac839_1663544_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/%E9%AB%98%E9%85%8D%E5%BD%93%E6%A0%AA%E3%81%BE%E3%81%A8%E3%82%81/","title":"Resumo de Ações com Altos Dividendos"},{"content":"Objetivos de Longo Prazo 1 ano depois Iniciar o negócio Criar um site e lançar software (gratuito) 2 anos depois Faturamento anual de 10 milhões de ienes Publicar um livro Lançar software (pago) 3 anos depois Faturamento anual de 100 milhões de ienes 5 anos depois Faturamento anual de 1 bilhão de ienes 10 anos depois Faturamento anual de 10 bilhões de ienes Objetivos de Curto Prazo Após 1 mês Criar um plano de negócios Após 3 meses Arrecadar fundos para iniciar o negócio (cerca de 5 milhões de ienes) Após 6 meses Iniciar o negócio Após 1 ano Colocar o negócio nos trilhos Tarefas Recentes Esclarecimento de Objetivos e Visão\nObjetivo: Por que criar o software? Exemplo: Resolver um problema, fornecer novo valor, focar em um nicho de mercado específico, etc. Visão: Que tipo de futuro deseja alcançar com o software? Exemplo: Eficiência nos negócios, maior conforto no dia a dia, melhoria da qualidade educacional, etc. Pesquisa de Mercado e Análise de Necessidades\nPúblico-alvo: Quem usará o software? Especifique faixa etária, profissão, interesses, etc. Análise da concorrência: Existem concorrentes no mesmo campo? Analise seus pontos fortes e fracos. Identificação de necessidades: Entenda os problemas e solicitações não resolvidos do público-alvo. Design e Recursos do Software\nRecursos básicos: Liste os recursos essenciais. Exemplo: autenticação de usuário, armazenamento de dados, funções de análise, etc. Pontos de diferenciação: Esclareça o que o torna único em relação aos produtos de outras empresas. Exemplo: UI simples, uso de IA, alto grau de personalização. Especificações técnicas: Linguagem de programação a ser usada, framework, banco de dados, etc. Plano de Desenvolvimento e Alocação de Recursos\nCronograma de desenvolvimento: Defina um cronograma para cada etapa do projeto. Exemplo: desenvolvimento de protótipo, testes, lançamento oficial. Composição da equipe: Talentos e habilidades necessárias (programador, designer, profissional de marketing, etc.). Orçamento: Estime os custos de desenvolvimento, custos de marketing e custos operacionais. Marketing e Modelo de Receita\nMétodos de promoção: Utilize redes sociais, sites, anúncios, etc., para aumentar o reconhecimento. Estratégia de monetização: Considere opções como versão gratuita + paga, assinatura mensal, receita de publicidade, etc. Estratégia de aquisição de usuários: Ofereça testes gratuitos, incentive o boca a boca, crie uma comunidade de usuários, etc. Operação e Escalabilidade\nOperação pós-lançamento: Coleta de feedback dos usuários, correção de bugs, adição de novos recursos. Estratégia de crescimento: Planeje como aumentar o número de usuários, expandir para outros países e desenvolver novos recursos. Gestão de riscos: Prepare contramedidas para problemas legais e técnicos. ","date":"2024-12-08T03:32:34+09:00","image":"http://kenji.blog/p/%E7%9B%AE%E6%A8%99/img_huc6a3627da74a1082cbdd433fea41830c_4007614_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/objetivos/","title":"Objetivos"},{"content":"Recentemente, fiquei interessado em produtos de couro e tenho comprado vários itens. Nisso, meu interesse pela manutenção de produtos de couro também cresceu, e preparei alguns itens relacionados para apresentar a vocês.\nProdutos de Manutenção de Couro Comprados Recentemente M.MOWBRAY DELICATE CREAM Preço: cerca de 1.320 ienes\nEste creme fornece nutrição, hidratação e efeito de flexibilidade. Não dá brilho, mas é adequado para couro que precisa de muita hidratação e umidade. Não tem um cheiro ruim, mas tem um leve odor. Por ser incolor, acredito que tenha alta versatilidade. Como é um creme mais fluido, pode ser bom usar um pouco mais em comparação com outros cremes.\nCollonil 1909 Supreme Creme de Luxe Preço: cerca de 1.777 ienes\nUm creme famoso, padrão e versátil que dificilmente causa manchas. É um creme que restaura a cor do couro e o deixa hidratado. Dá um pouco de brilho. Sendo branco, também parece oferecer efeito repelente à água.\nM.MOWBRAY SHOE CREAM (Preto) Preço: cerca de 1.000 ienes\nCreme para sapatos. Contém cera, óleo e solventes orgânicos. Restaura a cor do couro e dá brilho. Como é preto, aplica-se em couro preto. Eu o utilizo em sapatos de terno.\nM.MOWBRAY STAIN REMOVER Preço: cerca de 700 ienes\nFoi algo que veio junto quando comprei uma escova. Limpador à base de água para sapatos. Remove sujeira do couro. Ao umedecer bem um pano e esfregar suavemente no couro, a sujeira é removida.\n","date":"2024-10-30T00:31:46+09:00","image":"http://kenji.blog/p/%E9%9D%A9%E8%A3%BD%E5%93%81%E3%81%AE%E3%83%A1%E3%83%B3%E3%83%86%E3%83%8A%E3%83%B3%E3%82%B9/img_hu3ddba03af9cef883a82321d0a762e708_211817_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/manutencao-de-produtos-de-couro/","title":"Manutenção de Produtos de Couro"},{"content":"Olá! Hoje a história é sobre \u0026ldquo;A Navalha de Hanlon\u0026rdquo; Hoje gostaria de escrever sobre uma maneira de pensar com um nome um pouco incomum chamada \u0026ldquo;A Navalha de Hanlon\u0026rdquo;. Só de ouvir o nome, você pode pensar: \u0026ldquo;Parece assustador\u0026hellip;?\u0026rdquo;, mas, na verdade, é uma ideia que nos dá uma perspectiva muito familiar e gentil.\nVocê já pensou: \u0026ldquo;Acho que aquela pessoa não gosta de mim\u0026hellip;\u0026rdquo;? Por exemplo, você já passou por isso?\nDemora para responder Fizemos contato visual, mas não fui cumprimentado Fui ignorado quando pedi algo Nessas horas, ficamos ansiosos pensando: \u0026ldquo;Será que eles me odeiam?\u0026rdquo;. Isso acontece muito comigo também. E acabo ficando triste à toa.\nO que é a Navalha de Hanlon? É aí que entra \u0026ldquo;A Navalha de Hanlon\u0026rdquo;.\nO termo originalmente em inglês é \u0026ldquo;Hanlon\u0026rsquo;s Razor\u0026rdquo;. O significado, de forma geral, é este:\n\u0026ldquo;Nunca atribua à malícia o que pode ser adequadamente explicado pela estupidez.\u0026rdquo;\n\u0026hellip;É um jeito meio duro de dizer, não acha? Dizendo de uma forma um pouco mais suave:\n\u0026ldquo;Mesmo que pareça que a outra pessoa está sendo malvada, pode ser apenas um descuido ou desatenção.\u0026rdquo;\nÉ essa a ideia.\nQuem inventou isso? Quem é Robert J. Hanlon? Diz-se que esse termo apareceu pela primeira vez no livro \u0026ldquo;Murphy\u0026rsquo;s Law Book Two\u0026rdquo;, publicado em 1980.\nA ideia foi enviada por um dos autores, Robert J. Hanlon , e foi usada exatamente como ele enviou, ganhando o nome de \u0026ldquo;A Navalha de Hanlon\u0026rdquo;.\nA propósito, essa \u0026ldquo;Navalha\u0026rdquo; (Razor) é usada no sentido de uma ferramenta filosófica para \u0026ldquo;cortar o desnecessário e pensar de forma simples\u0026rdquo;, e é uma expressão usada para organizar pensamentos, ao lado da Navalha de Ockham e outras.\nPensar que \u0026ldquo;houve má intenção\u0026rdquo; nos deixa exaustos Por exemplo, quando um e-mail é ignorado no trabalho.\nSe você pensar: \u0026ldquo;Por que não me respondem? Será que me odeiam?\u0026rdquo;, você vai ficando cada vez mais negativo.\nMas, pensando bem:\nA pessoa simplesmente não viu Escreveu a resposta, mas esqueceu de enviar A notificação no celular ficou perdida no meio de outras Razões como essas são surpreendentemente comuns. E nós mesmos também cometemos esses erros.\nO estranho caso de sermos tolerantes com nossos erros, mas severos com os dos outros Por exemplo, quando esquecemos de responder a mensagem de um amigo.\nNós respondemos com um tom sem qualquer malícia: \u0026ldquo;Ah, desculpe! Não vi a notificação~\u0026rdquo;.\nMas quando a outra pessoa faz o mesmo com a gente, pensamos: \u0026ldquo;Fui ignorado\u0026rdquo;.\nIsso é muito comum. As pessoas costumam ser muito compreensivas com suas próprias circunstâncias, mas têm dificuldade em ver as dos outros.\nAcreditar que \u0026ldquo;há má intenção\u0026rdquo; é, na verdade, uma perda Quando alguém faz algo, se você presumir que \u0026ldquo;houve má intenção\u0026rdquo;, você transforma essa pessoa em uma inimiga em sua mente.\nMas, na verdade, ela pode ser apenas desajeitada ou estar sobrecarregada com outras coisas.\nClaro, há pessoas que são realmente rudes, e é natural se sentir magoado se for tratado mal.\nMas, não presumir que \u0026ldquo;certamente é malícia\u0026rdquo; torna o seu próprio coração um pouco mais leve.\nDito isso, não significa que devemos tolerar tudo O que não quero que você entenda mal aqui é: não estou dizendo que \u0026ldquo;é tudo você se preocupando demais\u0026rdquo;.\nQuando fazem algo ruim com você, não há problema em pensar: \u0026ldquo;Isso foi horrível\u0026rdquo;.\nNo entanto, em vez de presumir que \u0026ldquo;aquela pessoa tem uma personalidade ruim\u0026rdquo; ou \u0026ldquo;ela tentou me machucar de propósito\u0026rdquo;,\na proposta é ter um pouco de flexibilidade e pensar: \u0026ldquo;Talvez ela tivesse seus motivos\u0026rdquo;.\nEntão: Ver as coisas com um pouco mais de gentileza pode mudar o seu mundo Acredito que a Navalha de Hanlon seja menos sobre \u0026ldquo;ser gentil com os outros\u0026rdquo; e mais sobre \u0026ldquo;uma maneira de proteger o seu próprio coração\u0026rdquo;.\nQuando você sente malícia nas ações das pessoas, seus próprios sentimentos ficam tensos.\nMas, se você conseguir pensar: \u0026ldquo;Talvez tenha sido apenas um erro ou eles estavam sem tempo\u0026rdquo;, você se sentirá um pouco melhor.\nÉ uma forma de pensar que você pode usar para o seu próprio bem.\nPor fim: Por favor, compartilhe sua experiência também Muito obrigado por ler até aqui.\nSe você tiver alguma história de \u0026ldquo;já me senti incomodado em momentos assim\u0026rdquo;, por favor, me conte.\nApenas colocar sua experiência em palavras já pode trazer um pouco de alívio, não é mesmo?\nAté a próxima!\n","date":"2024-09-24T18:14:34+09:00","image":"http://kenji.blog/p/%E3%83%8F%E3%83%B3%E3%83%AD%E3%83%B3%E3%81%AE%E5%89%83%E5%88%80/img_hu0c32762ee7cb281fb24d789425dae55e_82924_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/a-navalha-de-hanlon/","title":"A Navalha de Hanlon"},{"content":"Conhecimentos Básicos de Computador Esta página explica o que é um computador.\nDefinição de Computador Um computador é uma máquina que possui os seguintes 5 dispositivos:\nDispositivo de entrada Dispositivo de saída Dispositivo de armazenamento Dispositivo de controle Dispositivo lógico e aritmético Resumidamente, um computador é uma máquina que realiza um processamento específico para uma dada entrada e produz o resultado. Ele pode armazenar dados inseridos como entrada, realizar operações aritméticas e produzir saídas. O controle tem o papel de controlar os 4 dispositivos mencionados acima.\nO que é necessário para operar um computador Para operar um computador, são necessários programas (software) além dos dispositivos (hardware).\nOs programas instruem o computador sobre o tipo de processamento a ser realizado. Eles são escritos num formato que o computador possa compreender.\nUm exemplo de programa é mostrado abaixo: Um programa que calcula a soma de 1 até um número inteiro fornecido.\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 #include \u0026lt;iostream\u0026gt; using namespace std; int main() { // Alocação de memória necessária int n, sum = 0; // Saída cout \u0026lt;\u0026lt; \u0026#34;Digite um número inteiro: \u0026#34;; // Entrada cin \u0026gt;\u0026gt; n; // Operação for (int i = 1; i \u0026lt;= n; i++) { // Operação sum += i; } // Saída cout \u0026lt;\u0026lt; \u0026#34;A soma de 1 até \u0026#34; \u0026lt;\u0026lt; n \u0026lt;\u0026lt; \u0026#34; é \u0026#34; \u0026lt;\u0026lt; sum \u0026lt;\u0026lt; \u0026#34;.\u0026#34; \u0026lt;\u0026lt; endl; // Fim return 0; } O programa é convertido em código de máquina por um compilador e transformado num formato que o computador possa executar.\n","date":"2024-09-19T01:10:20+09:00","image":"http://kenji.blog/p/%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E3%81%AE%E5%9F%BA%E6%9C%AC%E7%9F%A5%E8%AD%98/img_hubc9c51905d797e9d57f0ff169cf73b36_367819_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E3%81%AE%E5%9F%BA%E6%9C%AC%E7%9F%A5%E8%AD%98/","title":"Conhecimentos Básicos de Computador"},{"content":"Aplicativos iOS Recomendados X Instagram facebook youtube TikTok Microsoft Edge Firefox Google Chrome ChatGPT LINE Microsoft Teams Notion Goodnotes 6 TeamViewer DropBox GitHub Amazon PayPay WolframAlpha Mercari ","date":"2024-09-18T23:31:20+09:00","image":"http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81ios%E3%82%A2%E3%83%97%E3%83%AA/img_huad2df38b51218b64bee99f031553dd91_79847_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/aplicativos-ios-recomendados/","title":"Aplicativos iOS Recomendados"},{"content":"O casal de idosos, o burro e o nosso problema de \u0026ldquo;quem escutar\u0026rdquo; Olá!\nHoje quero falar sobre algo que me fez pensar depois de ouvir a \u0026ldquo;História do Casal de Idosos e do Burro\u0026rdquo;.\nTenho certeza de que muitos de vocês já ouviram falar. É uma daquelas fábulas famosas.\nO que é a \u0026ldquo;História do Casal de Idosos e do Burro\u0026rdquo;? Era uma vez um casal de idosos e um burro.\nNo começo, o homem mais velho estava montado no burro e sua esposa estava andando. Então, alguém que passava disse:\n\u0026ldquo;Que homem, fazendo sua velha esposa andar enquanto só ele monta!\u0026rdquo;\nAo ouvir isso, o casal decidiu que a esposa deveria montar no burro. Então, outra pessoa disse:\n\u0026ldquo;É um absurdo que a mulher monte no burro e faça o homem andar!\u0026rdquo;\nEntão, eles decidiram que ambos deveriam montar no burro. E ouviram:\n\u0026ldquo;Pobre burro, é muito pesado com duas pessoas!\u0026rdquo;\nSe for assim, os dois desceram do burro e começaram a andar. Mas aí\u0026hellip;\n\u0026ldquo;Por que ninguém está montando, se vocês têm um burro?\u0026rdquo;\nNo final, o casal ficou perdido, sem saber o que fazer.\n\u0026ldquo;Escutar a opinião de todos\u0026rdquo; é um argumento válido, mas\u0026hellip; Essa história muitas vezes é interpretada como uma lição: \u0026ldquo;Se você se importar demais com o que os outros pensam, não haverá fim.\u0026rdquo;\nMas a realidade não é tão simples assim.\nHá muitas pessoas que dizem: \u0026ldquo;Não se importe com o que os outros pensam!\u0026rdquo;\nNo entanto, ignorar tudo é um pouco difícil. Por exemplo, ao postar algo nas redes sociais. Ao pensar no que falar na festa da empresa. Você, invariavelmente, se importa com a reação de alguém.\nIsso porque as \u0026ldquo;opiniões dos outros\u0026rdquo; muitas vezes dizem respeito à nossa segurança e avaliação.\nAinda assim, ser influenciado demais torna a vida difícil Acho que, no começo, esse casal só estava pensando \u0026ldquo;o que devemos fazer?\u0026rdquo;.\nMas não importa até onde fossem, alguém iria reclamar.\nE então começaram a girar em círculos pensando: \u0026ldquo;Então vamos tentar assim\u0026rdquo;, \u0026ldquo;Talvez isso seja melhor?\u0026rdquo;, e antes que percebessem, perderam de vista o que realmente queriam fazer.\nIsso é algo que também acontece muito em nosso dia a dia.\nAs expectativas do chefe, as palavras dos pais, a quantidade de \u0026ldquo;curtidas\u0026rdquo; nas redes sociais. Ao se ajustar a essas coisas, você não sente que às vezes perde a noção do que realmente quer fazer?\nO importante é escolher \u0026ldquo;quem escutar\u0026rdquo; Então, o que devemos fazer? Não há uma resposta certa.\nPorém, \u0026ldquo;seguir a opinião de todos\u0026rdquo; é realisticamente impossível.\nÉ por isso que acredito que é importante escolher por si mesmo \u0026ldquo;quem escutar\u0026rdquo;.\nPor exemplo, \u0026ldquo;ouvir apenas os conselhos das pessoas que você respeita\u0026rdquo; ou \u0026ldquo;usar como critério o que o seu \u0026rsquo;eu\u0026rsquo; do passado entenderia\u0026rdquo;.\nSe você tiver apenas um critério no qual possa pensar: \u0026ldquo;Eu quero acreditar nisso\u0026rdquo;, o ruído do mundo diminuirá um pouco.\nE assim, quando você se sentir um pouco cansado Talvez seja bom se lembrar da história do \u0026ldquo;Casal de Idosos e do Burro\u0026rdquo;.\nÉ fácil acabar se importando com os olhares dos outros.\nMas se você tentar agradar a todos, acabará descendo do burro também.\nÀs vezes, pensar: \u0026ldquo;Talvez seja bom priorizar os meus próprios sentimentos\u0026rdquo; pode aliviar um pouco o coração.\n","date":"2024-09-18T00:56:59+09:00","image":"http://kenji.blog/p/%E8%80%81%E5%A4%AB%E5%A9%A6%E3%81%A8%E3%83%AD%E3%83%90%E3%81%AE%E8%A9%B1/img_hu4e12b653e0413f37819b2904ce683e39_500631_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/a-historia-do-casal-de-idosos-e-do-burro/","title":"A História do Casal de Idosos e do Burro"},{"content":"Por que era quase impossível criar o LED azul Introdução a um documentário em inglês. Muito interessante. Há uma forte impressão de que o japonês que resolveu esse problema extremamente difícil não foi muito valorizado no Japão no início.\n","date":"2024-09-15T00:43:52+09:00","image":"http://kenji.blog/p/%E3%81%AA%E3%81%9C%E9%9D%92%E8%89%B2led%E3%82%92%E4%BD%9C%E3%82%8B%E3%81%93%E3%81%A8%E3%81%8C%E3%81%BB%E3%81%BC%E4%B8%8D%E5%8F%AF%E8%83%BD%E3%81%A0%E3%81%A3%E3%81%9F%E3%81%AE%E3%81%8B/img_hu003acf083dbe465265af012766f30af7_1201686_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/%E3%81%AA%E3%81%9C%E9%9D%92%E8%89%B2led%E3%82%92%E4%BD%9C%E3%82%8B%E3%81%93%E3%81%A8%E3%81%8C%E3%81%BB%E3%81%BC%E4%B8%8D%E5%8F%AF%E8%83%BD%E3%81%A0%E3%81%A3%E3%81%9F%E3%81%AE%E3%81%8B/","title":"Por que era quase impossível criar o LED azul"},{"content":"Iniciando o desenvolvimento Qt no VSCode: Como instalar o Qt Extension Pack Olá, aqui é o Kenji. Desta vez, apresentarei \u0026ldquo;como configurar o ambiente de desenvolvimento Qt no Visual Studio Code (doravante VSCode)\u0026rdquo;.\nRecentemente, além do Qt Creator oficial, há um número crescente de pessoas que desejam desenvolver aplicativos Qt usando o VSCode, que é leve e altamente extensível. Para essas pessoas, recomendo o \u0026ldquo;Qt Extension Pack\u0026rdquo; . Basta instalar este pacote de extensões e você terá as principais extensões relacionadas ao Qt de uma só vez.\nPúblico-alvo Aqueles que desejam iniciar o desenvolvimento de aplicativos GUI usando Qt Aqueles que desejam desenvolver no VSCode em vez do Qt Creator Aqueles que têm preguiça de procurar extensões uma por uma Pré-requisitos O VSCode deve estar instalado (Você pode baixá-lo gratuitamente no site oficial) A própria biblioteca Qt deve estar instalada (Site oficial do Qt) O que é o Qt Extension Pack? O Qt Extension Pack é um pacote de extensões para o VSCode. Ao instalá-lo, os seguintes recursos são adicionados automaticamente:\nSuporte para arquivos .ui (Qt Designer) Destaque de sintaxe para arquivos .pro e .qrc Conclusão de código C++, compilação e suporte a depuração para Qt Qt Resource Browser (referência de recursos) Instruções de Instalação 1. Abra o VSCode Primeiro, inicie o VSCode.\n2. Abra a visualização de Extensões Clique na barra de atividades no lado esquerdo (ícone de blocos quadrados) para exibir as \u0026ldquo;Extensões\u0026rdquo;.\nOu você pode pressionar o atalho Ctrl + Shift + X.\n3. Pesquise por \u0026ldquo;Qt Extension Pack\u0026rdquo; Digite a seguinte palavra-chave na barra de pesquisa:\n1 Qt Extension Pack 4. Clique no botão de Instalação Quando o pacote de destino for exibido, clique no botão \u0026ldquo;Instalar\u0026rdquo;. Isso instalará várias extensões de uma só vez, como as seguintes:\nQt Language Support QML Support Qt Designer Integration CMake Tools (essencial para desenvolvimento Qt compatível com CMake) Configuração adicional do projeto (Exemplo CMake + Qt) Se você usar o Qt baseado no CMake, recomendamos combiná-lo com as seguintes extensões:\nCMake Tools CMake Language Support Além disso, se você incluir a seguinte descrição em CMakeLists.txt, a integração com o Qt será tranquila:\n1 2 find_package(Qt6 REQUIRED COMPONENTS Widgets) target_link_libraries(MyApp PRIVATE Qt6::Widgets) Bônus: Como abro os arquivos .ui? Os arquivos .ui podem ser editados no Qt Designer. No VSCode, você poderá clicar com o botão direito do mouse no arquivo .ui → selecionar Open with Qt Designer (o Qt Designer deve estar incluído na variável de ambiente PATH).\nResumo Passo Conteúdo 1 Iniciar o VSCode 2 Abrir o painel de extensões 3 Pesquisar por \u0026ldquo;Qt Extension Pack\u0026rdquo; 4 Clicar no botão de Instalação Construir um ambiente Qt no VSCode tornou-se muito mais fácil do que antes. Ele tem recursos suficientes como uma alternativa ao Qt Creator e é recomendado para quem quer trabalhar com leveza.\nColeção de links recomendados Site oficial do Qt Qt Extension Pack - Visual Studio Marketplace Site oficial do VSCode Extensão CMake Tools Por fim No futuro, planejo prosseguir com o desenvolvimento utilizando ferramentas de UI do Qt e QML neste ambiente. Na próxima vez, explicarei como compilar e executar um aplicativo Hello World em Qt a partir do VSCode .\nAté logo!\n","date":"2024-09-13T00:53:53+09:00","image":"http://kenji.blog/p/visual-studio-code-%E3%81%AB-qt-extension-pack-%E3%82%92%E5%85%A5%E3%82%8C%E3%81%A6%E3%81%BF%E3%81%9F/img_1_hu3662f535d644da02b1919ea56b7b16c2_319254_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/visual-studio-code-%E3%81%AB-qt-extension-pack-%E3%82%92%E5%85%A5%E3%82%8C%E3%81%A6%E3%81%BF%E3%81%9F/","title":"Tentando instalar o Qt Extension Pack no Visual Studio Code"},{"content":"Como verificar se o seu iPhone está com bloqueio de SIM Tela Inicial \u0026gt; Ajustes \u0026gt; Geral \u0026gt; Sobre \u0026gt; Bloqueio de Operadora\nVerifique se é exibido \u0026ldquo;Sem Restrições de SIM\u0026rdquo; ou se há algum bloqueio.\n","date":"2024-09-12T00:32:11+09:00","image":"http://kenji.blog/p/iphone%E3%81%ABsim%E3%83%AD%E3%83%83%E3%82%AF%E3%81%8C%E3%81%8B%E3%81%8B%E3%81%A3%E3%81%A6%E3%81%84%E3%82%8B%E3%81%8B%E7%A2%BA%E8%AA%8D%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_huadfe7e53f677430d2790fc209a2a5361_107562_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/iphone%E3%81%ABsim%E3%83%AD%E3%83%83%E3%82%AF%E3%81%8C%E3%81%8B%E3%81%8B%E3%81%A3%E3%81%A6%E3%81%84%E3%82%8B%E3%81%8B%E7%A2%BA%E8%AA%8D%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/","title":"Como verificar se o seu iPhone está com bloqueio de SIM"},{"content":"Visão Geral 1 A classe P é a classe de problemas que podem ser decididos em tempo polinomial por uma máquina de Turing determinística, e a classe NP é a classe de problemas em que, dada uma evidência (chamada Testemunha) de que a resposta é Sim, a validade da Testemunha pode ser julgada (isso é chamado de verificação) em tempo polinomial. Como os problemas decidíveis em tempo polinomial podem ser verificados em tempo polinomial, é claro que P⊆NP, mas não está claro se P é um subconjunto próprio de NP. Ainda não há prova, mas muitos pesquisadores acreditam que P≠NP. E a conjectura de que esta classe P e a classe NP não são iguais é chamada de \u0026#34;Conjectura P≠NP\u0026#34;. Site de referência : https://daigakudenki.com/np-hard/\n","date":"2024-09-11T02:22:39+09:00","permalink":"http://kenji.blog/pt/p/pnp%E4%BA%88%E6%83%B3/","title":"Conjectura P≠NP"},{"content":"Fui premiado novamente como Microsoft MVP (2024-2025) Olá, eu sou o kenji. É com grande satisfação que anuncio que fui novamente premiado como Microsoft MVP (Most Valuable Professional) este ano. Esta é a minha 8ª vez recebendo o prêmio.\nAproveitando a oportunidade, gostaria de escrever um pouco sobre o que é o MVP.\nO que é o Microsoft MVP? Mesmo sendo chamado de MVP, não estamos falando do melhor jogador nos esportes (embora às vezes me perguntem isso\u0026hellip;). O Microsoft MVP (Most Valuable Professional) é um título concedido àqueles que ativamente compartilham seus conhecimentos e experiências sobre as tecnologias da Microsoft com a comunidade.\nEscrever blogs técnicos, responder perguntas em sites de Q\u0026amp;A, publicar códigos de exemplo ou fazer apresentações em eventos. \u0026ldquo;Compartilhar o que você sabe de uma forma que seja útil para os outros\u0026rdquo; ―― atividades constantes como essa são avaliadas.\nExistem premiados em todo o mundo, mas o número é limitado a cada ano, e ser premiado novamente não é fácil. Dadas essas circunstâncias, sou muito grato por ter sido reconhecido novamente.\nMotivo do Prêmio Este prêmio é uma renovação na categoria \u0026ldquo;Developer Technologies\u0026rdquo;. No último ano, estive envolvido em atividades como:\nEscrever artigos no blog sobre tecnologias relacionadas à Microsoft Responder perguntas em sites técnicos de Q\u0026amp;A Publicar códigos de exemplo no GitHub Palestrar em grupos de estudo e eventos de tecnologia Nenhuma delas é uma atividade extraordinária, mas sempre tentei compartilhar \u0026ldquo;o que eu tentei e funcionou\u0026rdquo; e \u0026ldquo;onde eu tropecei, mas consegui resolver\u0026rdquo; de uma forma que seja ao menos um pouco útil.\nEstou honestamente feliz que isso tenha tomado forma dessa maneira.\nOlhando para o Futuro O mundo da tecnologia avança tão rápido que só de tentar acompanhar já é difícil. Mas, por causa disso, acredito que compartilhar \u0026ldquo;informações reais\u0026rdquo; — como foi usar na prática e o que foi difícil de entender — tem um grande significado.\nPretendo continuar no meu próprio ritmo, sem me esforçar demais. Ficarei feliz se puder continuar fornecendo informações que façam alguém pensar, \u0026ldquo;Ah, isso ajudou\u0026rdquo;.\nMuito obrigado pelo seu apoio contínuo.\n","date":"2024-09-03T21:25:20+09:00","image":"http://kenji.blog/p/microsoft-mvp2024-2025%E3%82%92%E5%86%8D%E5%8F%97%E8%B3%9E%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F/img_hu90bf51ced9d60993f005bc037644a192_1013423_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/fui-premiado-novamente-como-microsoft-mvp-2024-2025/","title":"Fui premiado novamente como Microsoft MVP (2024-2025)"},{"content":"O que é o yt-dlp O yt-dlp é uma ferramenta de linha de comando para baixar vídeos do YouTube. Além de baixar vídeos, você também pode baixá-los como arquivos de música no formato mp3.\nDownload e Instalação Baixe o yt-dlp.exe mais recente da página de lançamentos do yt-dlp. Coloque o yt-dlp.exe em qualquer pasta. Adicione o caminho da pasta do yt-dlp.exe à variável de ambiente Path. Como Usar Execute o yt-dlp.exe no prompt de comando e especifique a URL do vídeo do YouTube.\n1 yt-dlp.exe \u0026#34;https://www.youtube.com/watch?v=VIDEO_ID\u0026#34; ※ O argumento pode ser apenas a parte do VIDEO_ID.\nPara baixar como um arquivo de música mp3, execute o seguinte comando:\n1 yt-dlp.exe --extract-audio --audio-format mp3 --embed-thumbnail --add-metadata \u0026#34;https://www.youtube.com/watch?v=VIDEO_ID\u0026#34; Com isso, o vídeo será baixado no diretório atual de onde o comando foi executado.\nIsso é tudo.\n","date":"2024-09-03T14:09:26+09:00","image":"http://kenji.blog/p/yt-dlp.exe-%E3%81%AB%E3%82%88%E3%82%8B-youtube-%E5%8B%95%E7%94%BB%E3%81%AE%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%89%E6%96%B9%E6%B3%95/img_1_hu05024a06b03b28eb7dbfa3d8c8b493fd_22080_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/yt-dlp.exe-%E3%81%AB%E3%82%88%E3%82%8B-youtube-%E5%8B%95%E7%94%BB%E3%81%AE%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%89%E6%96%B9%E6%B3%95/","title":"Como baixar vídeos do YouTube com yt-dlp.exe"},{"content":" Futebol Gandula @gg211204 『O dia em que o gandula virou herói』 O gandula que salvou o time neste dia foi convidado para o clube depois e jantou com os jogadores. #トッテナム #スパーズ #モウリーニョ #ボールボーイ ♬ original sound - じょり Starbucks ","date":"2024-08-25T16:24:35+09:00","image":"http://kenji.blog/p/%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E5%8B%95%E7%94%BB%E3%83%AA%E3%83%B3%E3%82%AF/img_hu6a40cd72b9cd9a636c4c642d7bc2c778_3354885_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/links-de-videos-curtos/","title":"Links de vídeos curtos"},{"content":"Olá!\nHoje, gostaria de falar sobre as citações de Einstein.\nO mundo não valoriza suas boas ações? 1 2 3 4 5 6 O mundo nunca avaliará o milhão de coisas boas que você faz. Mas eles vão criticar a única coisa errada que você faz... Mas não desanime. \u0026#34;Eleve-se sempre acima de todo riso e crítica. Permaneça forte.\u0026#34; - Albert Einstein Estas são palavras que se dizem ter sido proferidas por Einstein. Elas apontam de forma contundente para a dureza da sociedade que sentimos todos os dias e o viés nas avaliações das pessoas.\nAinda assim, continue a se levantar \u0026ldquo;Eleve-se sempre acima de todo riso e crítica. Permaneça forte.\u0026rdquo;\nEssas palavras a seguir podem ser consideradas a resposta de Einstein à dura realidade mencionada acima. Elas nos ensinam a importância de não ceder à crítica ou ao ridículo e de continuar avançando com fé em nós mesmos.\nAplicando os ensinamentos de Einstein à vida diária Esta citação está profundamente relacionada às nossas vidas diárias. Por exemplo, pode haver momentos em que seus esforços no trabalho não são reconhecidos e apenas erros triviais se destacam. Além disso, suas declarações nas redes sociais podem ser tiradas de contexto e criticadas.\nNesses momentos, tente lembrar as palavras de Einstein. É importante manter suas próprias crenças em vez de ficar feliz ou triste com as avaliações de outras pessoas.\nConclusão Esta citação de Einstein nos ensina a importância de \u0026ldquo;viver acreditando em si mesmo sem ser influenciado pelas avaliações dos outros\u0026rdquo;. Tenhamos a coragem de seguir o caminho em que acreditamos, sem sucumbir à crítica ou ao ridículo.\nFinalmente, as palavras de Einstein mais uma vez.\n\u0026ldquo;Eleve-se sempre acima de todo riso e crítica. Permaneça forte.\u0026rdquo;\nEspero que essas palavras ressoem em seu coração e o inspirem a dar um passo positivo à frente.\n","date":"2024-08-24T18:38:47+09:00","image":"http://kenji.blog/p/%E3%82%A2%E3%82%A4%E3%83%B3%E3%82%B7%E3%83%A5%E3%82%BF%E3%82%A4%E3%83%B3%E3%81%AE%E5%90%8D%E8%A8%80/Solvay_conference_1927_hu5334df7b0e2e62905cb44adbbbde85ad_2671814_120x120_fill_q75_box_smart1.jpg","permalink":"http://kenji.blog/pt/p/citacoes-de-einstein/","title":"Citações de Einstein"},{"content":"Abaixo está um código C simples que gera números primos dentro de um intervalo especificado. Neste exemplo, enumeramos números primos de 1 a n.\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 #include \u0026lt;stdio.h\u0026gt; #include \u0026lt;stdbool.h\u0026gt; bool isPrime(int num) { if (num \u0026lt;= 1) return false; if (num \u0026lt;= 3) return true; if (num % 2 == 0 || num % 3 == 0) return false; for (int i = 5; i * i \u0026lt;= num; i += 6) { if (num % i == 0 || num % (i + 2) == 0) return false; } return true; } void printPrimes(int n) { printf(\u0026#34;2 \u0026#34;); for (int i = 3; i \u0026lt;= n; i += 2) { if (isPrime(i)) { printf(\u0026#34;%d \u0026#34;, i); } } printf(\u0026#34;\\n\u0026#34;); } int main() { int n; printf(\u0026#34;Digite o valor máximo do intervalo para gerar números primos: \u0026#34;); scanf(\u0026#34;%d\u0026#34;, \u0026amp;n); printf(\u0026#34;Os números primos de 1 a %d são:\\n\u0026#34;, n); printPrimes(n); return 0; } Este código funciona da seguinte forma:\nFunção isPrime: Determina se um determinado número é primo. Por uma questão de eficiência, primeiro verifica-se se é divisível por 2 e 3 e, em seguida, prossegue verificando em múltiplos de 6. Função printPrimes: Gera números primos dentro de um intervalo especificado. O 2 é impresso primeiro e, em seguida, apenas os números ímpares são verificados. Função main: Solicita que o usuário insira o valor máximo do intervalo e imprime os números primos dentro desse intervalo. Se você compilar e executar este código, os números primos dentro do intervalo especificado serão exibidos.\n","date":"2024-08-24T09:38:10+09:00","image":"http://kenji.blog/p/%E7%B4%A0%E6%95%B0%E3%82%92%E7%94%9F%E6%88%90%E3%81%99%E3%82%8Bc%E8%A8%80%E8%AA%9E%E3%82%B3%E3%83%BC%E3%83%89/img_hu31b8bd853d4750e84615619ef286e5d3_22034_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/codigo-c-para-gerar-numeros-primos/","title":"Código C para gerar números primos"},{"content":"\nAkiko Yosano ** \u0026ldquo;Não dês a tua vida\u0026rdquo; **\n―― Chorando por meu irmão mais novo no exército de cerco a Port Arthur\nAh, meu irmão, eu choro por ti,\nNão dês a tua vida,\nSendo tu o mais novo\nO amor de nossos pais por ti foi maior,\nAcaso nossos pais te fizeram empunhar uma lâmina\nE te ensinaram a matar pessoas?\nAcaso te criaram até aos vinte e quatro anos\nPara que matasses e morresses?\nSendo tu o herdeiro do nome de nossos pais\nComo mestre orgulhoso da antiga casa\nDos mercadores da cidade de Sakai,\nNão dês a tua vida,\nMesmo que a fortaleza de Port Arthur caia,\nOu não caia, que importa?\nTu não deves saber,\nMas isso não existe nas leis da casa de um mercador.\nNão dês a tua vida,\nO Imperador não vai ele mesmo\nPara a batalha,\nFazer com que as pessoas derramem o sangue umas das outras,\nMorram no caminho das bestas,\nE que morrer seja a glória de um homem,\nSendo o Seu Grande Coração profundo,\nComo poderia Ele pensar tal coisa?\nAh, meu irmão, na batalha\nNão dês a tua vida,\nA nossa mãe que perdeu\nO nosso pai no outono passado,\nNo meio do seu luto, dolorosamente\nTeve o seu filho convocado, guarda a casa,\nE mesmo nesta era de paz que nos dizem,\nOs cabelos brancos da mãe só aumentaram.\nChorando prostrada à sombra da cortina\nA jovem e frágil nova esposa,\nTu a esqueces? Tu pensas nela?\nPensa no coração da jovem\nQue se separou antes mesmo de dez meses juntos,\nPara além de ti, o único neste mundo,\nAh, em quem mais pode ela confiar?\nNão dês a tua vida.\n","date":"2024-07-25T13:16:47+09:00","permalink":"http://kenji.blog/pt/p/nao-des-a-tua-vida/","title":"Não dês a tua vida"},{"content":"\n🔹 Resumo do Perfil Yosano Akiko (1878–1942) foi uma poeta, escritora e pensadora japonesa ativa do período Meiji ao início do período Showa. Ela é especialmente conhecida por seus apaixonados e singulares poemas tanka, e é uma figura que abriu novos horizontes para a independência das mulheres e para a expressão do amor na literatura japonesa moderna.\nNome verdadeiro : Yosano (nome de solteira: Ho) Shō\nLocal de nascimento : Sakai (cidade de Sakai, prefeitura de Osaka)\nMarido : Yosano Tekkan (poeta)\nPeríodo de atividade principal : Final do período Meiji até o início do período Showa\nCaracterísticas :\nNotável por seus tankas que expressavam francamente os sentimentos românticos das mulheres Possuía ideais feministas, promovendo a educação e a independência das mulheres Demonstrou uma postura pacifista, criticando a Guerra Russo-Japonesa Membro central da revista literária \u0026ldquo;Myōjō\u0026rdquo; 🔹 Principais Obras, Sinopses e Características 1. \u0026ldquo;Midaregami\u0026rdquo; (1901) Visão geral : Sua primeira coleção de poemas. Publicada quando tinha pouco mais de 20 anos, causou grande impacto no mundo literário japonês. Características : Expressou os sentimentos amorosos e desejos físicos de forma franca a partir da perspectiva feminina. Poema famoso : Yawa hada no atsuki chishio ni fure mo mide sabishikarazu ya michi o toku kimi\n→ Tornou-se um tema muito discutido por expressar visões de amor, consideradas ousadas para a ética da época, nas palavras da própria mulher.\n2. \u0026ldquo;Kimi Shinitamō Koto Nakare\u0026rdquo; (1904) Formato : Poesia (poesia de estilo livre, não tanka) Conteúdo : Poema antiguerra dirigido a seu irmão mais novo que havia ido para a Guerra Russo-Japonesa. Trecho : Kimi shinitamō koto nakare sue ni umareshi kimi nareba hahaue namida shigeku shite kimi no tamoto o shiboritsutsu\u0026hellip;\u0026hellip;\nSignificado : Inovador por apelar contra a guerra do ponto de vista de uma mulher temendo a morte de seu irmão, em uma época em que a tendência de glorificar a guerra era forte. 🔹 Influência e Avaliação Realizou atividades socialmente avançadas, como a libertação das mulheres, o pacifismo e a promoção da educação. Em seus últimos anos, dedicou-se à educação feminina e esteve envolvida na fundação de uma universidade para mulheres (como o Bunka Gakuin). Uma das mais importantes mulheres intelectuais e figuras literárias no Japão antes da guerra. 🔹 Resumo Item Conteúdo Nome Yosano Akiko Áreas de atividade Tanka, poesia, crítica, educação Principais obras \u0026ldquo;Midaregami\u0026rdquo;, \u0026ldquo;Kimi Shinitamō Koto Nakare\u0026rdquo; Características Liberdade no amor, independência feminina, expressão de pacifismo Influência moderna Literatura feminista, inovação no tanka moderno, pioneira da poesia antiguerra ","date":"2024-07-25T13:08:36+09:00","permalink":"http://kenji.blog/pt/p/sobre-yosano-akiko/","title":"Sobre Yosano Akiko"},{"content":"Introdução ao Mathematica Resolver equações 1 Solve[x^2 - 3 x + 2 == 0, x] Saída\n1 {{x -\u0026gt; 1}, {x -\u0026gt; 2}} Encontrar raízes de equações no intervalo de inteiros 1 Solve[x^2 - 3 x + 2 == 0 \u0026amp;\u0026amp; 0 \u0026lt;= x \u0026lt;= 2, x, Integers] Saída\n1 {{x -\u0026gt; 1}, {x -\u0026gt; 2}} Resolver sistema de equações 1 Solve[{x + y == 3, x - y == 1}, {x, y}] Saída\n1 {{x -\u0026gt; 2, y -\u0026gt; 1}} Resolver desigualdades 1 Reduce[x^2 - 3 x + 2 \u0026gt; 0, x] Saída\n1 x \u0026lt; 1 || x \u0026gt; 2 Derivar 1 D[x^2, x] Saída\n1 2 x Integrar 1 Integrate[x^2, x] Saída\n1 x^3/3 Encontrar limites 1 Limit[1/x, x -\u0026gt; 0] Saída\n1 Infinity Encontrar séries 1 Sum[1/n^2, {n, 1, Infinity}] Saída\n1 π^2/6 Criar matriz 1 m = {{1, 2}, {3, 4}} Encontrar produto de matrizes 1 m . m Saída\n1 {{7, 10}, {15, 22}} Encontrar matriz inversa 1 Inverse[m] Saída\n1 {{-2, 1}, {1.5, -0.5}} Encontrar autovalores e autovetores 1 Eigensystem[m] Saída\n1 {{5, 0}, {{1, 1}, {1, -1}}} Encontrar produto escalar de vetores 1 {1, 2} . {3, 4} Saída\n1 11 Encontrar produto vetorial 1 Cross[{1, 2, 3}, {4, 5, 6}] Saída\n1 {-3, 6, -3} Encontrar magnitude de um vetor 1 Norm[{1, 2, 3}] Saída\n1 √14 Encontrar o ângulo de vetores 1 ArcCos[{1, 2} . {3, 4}/(Norm[{1, 2}] Norm[{3, 4}])] Saída\n1 ArcCos[11/(√5 √25)] Encontrar projeção de vetor 1 {1, 2} . {3, 4}/Norm[{3, 4}] {3, 4}/Norm[{3, 4}] Saída\n1 {11/5, 22/5} Encontrar rotação de vetor 1 RotationMatrix[π/2].{1, 0} Saída\n1 {0, 1} Encontrar translação de vetor 1 TranslationTransform[{1, 2}][{3, 4}] Saída\n1 {4, 6} Encontrar escala de vetor 1 ScalingTransform[{2, 3}][{1, 1}] Saída\n1 {2, 3} Encontrar reflexão de vetor 1 ReflectionTransform[{1, 1}][{1, 1}] Saída\n1 {0, 0} Gerar números aleatórios 1 RandomReal[] Saída\n1 0.123456 Gerar números aleatórios (inteiros) 1 RandomInteger[] Saída\n1 123456 Gerar números aleatórios (com intervalo) 1 RandomReal[{1, 10}] Saída\n1 5.6789 Gerar números aleatórios (inteiros, com intervalo) 1 RandomInteger[{1, 10}] Saída\n1 5 Gerar números aleatórios (com distribuição) 1 RandomVariate[NormalDistribution[0, 1]] Saída\n1 0.123456 Gerar números aleatórios (distribuição, quantidade) 1 RandomVariate[NormalDistribution[0, 1], 10] Saída\n1 {0.123456, 0.234567, ..., 0.987654} Gerar números aleatórios (distribuição, quantidade, semente) 1 2 SeedRandom[12345] RandomVariate[NormalDistribution[0, 1], 10] Saída\n1 {0.123456, 0.234567, ..., 0.987654} Aplicar função aos elementos do array 1 2 3 Map[Sqrt, {1, 4, 9}] Sqrt /@ {1, 4, 9} Map[#^(1/2)\u0026amp;, {1, 4, 9}] Saída\n1 {1, 2, 3} Definir função com expressões lambda 1 2 f = Function[x, x^2] f[3] Saída\n1 9 Compor funções 1 2 3 4 f = Function[x, x^2] g = Function[x, x + 1] h = Function[x, f[g[x]]] h[3] Saída\n1 16 Referenciar o resultado do cálculo anterior 1 % + 1 Saída\n1 17 Funções puras 1 (#+3)\u0026amp;[5] Saída\n1 8 Extrair arrays 1 2 Select[{1, 2, 3, 4, 5}, EvenQ] Select[{1, 2, 3, 4, 5}, Mod[#,2]==0\u0026amp;] Saída\n1 {2, 4} ","date":"2024-07-25T01:36:19+09:00","image":"http://kenji.blog/p/mathematica%E5%85%A5%E9%96%80/img_hucba782cf2f6047b30fd8084b4d887659_22760_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/mathematica%E5%85%A5%E9%96%80/","title":"Introdução ao Mathematica"},{"content":"O que é o Hugo O Hugo é um dos geradores de sites estáticos. Você pode criar um site convertendo arquivos Markdown em HTML. O Hugo é escrito na linguagem Go e roda muito rápido.\nEste blog também é criado com o Hugo.\nInstalação da CLI do Hugo Para instalar a CLI do Hugo, execute o comando abaixo.\n※ Exemplo para o caso do macOS. Para outros sistemas operacionais, consulte a documentação oficial.\n1 brew install hugo Você pode instalar usando o Homebrew.\nLista de Comandos Hugo O Hugo oferece vários comandos. Abaixo estão resumidos os comandos usados com mais frequência.\nCriar um novo site 1 hugo new site \u0026lt;nome-do-site\u0026gt; Comando para criar um novo site. Em \u0026lt;nome-do-site\u0026gt;, especifique o nome do site.\nCriar um novo artigo 1 hugo new \u0026lt;nome-do-artigo\u0026gt;.md Comando para criar um novo artigo. Em \u0026lt;nome-do-artigo\u0026gt;, especifique o nome do artigo.\nIniciar o servidor 1 hugo server Comando para iniciar o servidor local. Pode ser acessado em http://localhost:1313.\nFazer o build 1 hugo Comando para compilar o site. Arquivos HTML serão gerados no diretório public.\nFazer o deploy 1 hugo deploy Comando para fazer o deploy do site. As configurações do destino de deploy são feitas no arquivo config.toml.\nExibir a lista de artigos 1 hugo list all Comando para exibir a lista de artigos.\nVerificar configurações 1 hugo config Comando para verificar as configurações.\nExibir ajuda 1 hugo help Comando para exibir a ajuda.\nExibir versão 1 hugo version Comando para exibir a versão.\nEssa é a lista de comandos do Hugo. Como existem muitos outros comandos disponíveis, consulte a documentação oficial.\nReferência Documentação Oficial do Hugo ","date":"2024-05-31T01:36:00+09:00","image":"http://kenji.blog/p/hugo%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E4%B8%80%E8%A6%A7/img_hu415dc7e70376ac350673d0366f70ca4b_19909_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/hugo%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E4%B8%80%E8%A6%A7/","title":"Lista de Comandos Hugo"},{"content":"Lista de Extensões Recomendadas para Visual Studio Code Categoria Nome Fornecedor Descrição Gestão de Máquinas Virtuais e Contentores Remote Devlopment Microsoft Suporta desenvolvimento remoto ao conectar a contentores virtuais/WSL via SSH Gestão de Máquinas Virtuais e Contentores Docker Microsoft Suporta a gestão de contentores Docker Gestão de Código GitHub Pull Requests GitHub Gere os Pull Requests do GitHub no VSCode Gestão de Código GitHub Copilot GitHub Suporta a conclusão de código por IA Gestão de Código Git Graph mhutchie Exibe graficamente os ramos e commits do Git Gestão de Código Git History Don Jayamanne Exibe o histórico do Git Navegador e Desenvolvimento Web Debugger for Firefox Firefox DevTools Utiliza o depurador do Firefox no VSCode Navegador e Desenvolvimento Web Microsoft Edge Tool For VScode Microsoft Utiliza as ferramentas de desenvolvedor do Edge no VSCode Navegador e Desenvolvimento Web Vue Language Features(Volar) Vue Suporta as funcionalidades de linguagem do Vue Navegador e Desenvolvimento Web JavaScript (ES6) code snippets charalampos karypidis Fornece snippets de JavaScript Navegador e Desenvolvimento Web Tailwind CSS IntelliSense Tailwind Labs Fornece snippets de Tailwind CSS Desenvolvimento na Cloud AWS Toolkit Amazon Web Services Suporta o desenvolvimento na AWS Desenvolvimento na Cloud Azure Tools Microsoft Suporta o desenvolvimento no Azure Desenvolvimento na Cloud Google Cloud Tools Google Cloud Suporta o desenvolvimento no Google Cloud Base de Dados MySQL Jun Han Suporta o desenvolvimento em MySQL Base de Dados SQL Server(mssql) Microsoft Suporta o desenvolvimento em SQL Server Base de Dados PostgreSQL Chris Kolkman Suporta o desenvolvimento em PostgreSQL Sistemas Embutidos PlatformIO PlatformIO Suporta o desenvolvimento no PlatformIO Sistemas Embutidos Arduino Microsoft Suporta o desenvolvimento em Arduino Sistemas Embutidos WorkBench Particle Suporta desenvolvimento para IoT, incluindo o ambiente de desenvolvimento fornecido pela Particle, firmware, bibliotecas e integração cloud C/C++ C/C++ Extension Pack Microsoft Suporta o desenvolvimento em C/C++ C/C++ C/C++ Runner franneck94 Executa código C/C++ (suporta compiladores gcc, msvc e cuda nvcc) C/C++ Cortex-Debug marus25 Suporta a depuração de microcontroladores Cortex-A/R/M Python Python Extension Pack Microsoft Suporta o desenvolvimento em Python Python jupyter Microsoft Suporta o desenvolvimento em Jupyter Notebook Utilitários e Extensões de UI Makrdown All in One Yu Zhang Suporta a escrita em Markdown Utilitários e Extensões de UI Hex Editor Microsoft Edita ficheiros binários Utilitários e Extensões de UI vscode-pdf tomoki1207 Exibe ficheiros PDF Utilitários e Extensões de UI Rainbow CSV mechatroner Exibe ficheiros CSV de forma colorida Utilitários e Extensões de UI Draw.io Integration Henning Dieterichs Utiliza o Draw.io no VSCode Utilitários e Extensões de UI Japanese Language Pack for Visual Studio Code Microsoft Pacote de idioma Japonês Utilitários e Extensões de UI Live Share Microsoft Suporta colaboração em tempo real ","date":"2024-05-29T17:20:19+09:00","image":"http://kenji.blog/p/visual-studio-code%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E6%8B%A1%E5%BC%B5%E6%A9%9F%E8%83%BD/img_hu9f3ce3d75e92e9f1ca11d3e7a3c7b710_108332_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/visual-studio-code%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E6%8B%A1%E5%BC%B5%E6%A9%9F%E8%83%BD/","title":"Extensões Recomendadas para Visual Studio Code"},{"content":"O que é o mermaid.js mermaid.js é uma biblioteca JavaScript que permite exibir graficamente diagramas complexos, como fluxogramas, diagramas e gráficos de Gantt, escrevendo uma sintaxe original baseada em texto (sintaxe Mermaid). Também é adotado em vários serviços como GitHub, Qiita e Notion. Desta vez, vamos tentar usar o mermaid.js no hugo.\nHabilitando o mermaid.js no hugo Os passos são os seguintes:\nAdicione o seguinte em layouts/partials/extend_footer.html. 1 2 3 4 5 6 7 8 9 10 11 12 13 {{ if or .Params.mermaid .Site.Params.mermaid }} \u0026lt;script src=\u0026#34;https://cdn.jsdelivr.net/npm/mermaid@10.3.0/dist/mermaid.min.js\u0026#34;\u0026gt;\u0026lt;/script\u0026gt; {{- $loadmermaid := resources.Get \u0026#34;js/load-mermaid.js\u0026#34; }} \u0026lt;script src=\u0026#34;{{ $loadmermaid.RelPermalink }}\u0026#34;\u0026gt;\u0026lt;/script\u0026gt; \u0026lt;script\u0026gt; window.initMermaid(); if (isDarkTheme()) { setPrefTheme(\u0026#39;dark\u0026#39;); } else { setPrefTheme(\u0026#39;light\u0026#39;); } \u0026lt;/script\u0026gt; {{ end }} ※ O mermaid.min.js é carregado apenas quando mermaid: true está definido na declaração if. Esta biblioteca tem cerca de 3MB e é surpreendentemente grande.\nCrie assets/js/load-mermaid.js. Este processo é usado para inicializar e redesenhar dinamicamente quando o tema é alterado. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 (function(window){ \u0026#39;use strict\u0026#39; const elementCode = \u0026#39;.mermaid\u0026#39; const loadMermaid = function(theme) { window.mermaid.initialize({theme}) window.mermaid.init({theme}, document.querySelectorAll(elementCode)) } const saveOriginalData = function(){ return new Promise((resolve, reject) =\u0026gt; { try { var els = document.querySelectorAll(elementCode), count = els.length; els.forEach(element =\u0026gt; { element.setAttribute(\u0026#39;data-original-code\u0026#39;, element.innerHTML) count-- if(count == 0){ resolve() } }); } catch (error) { reject(error) } }) } const resetProcessed = function(){ return new Promise((resolve, reject) =\u0026gt; { try { var els = document.querySelectorAll(elementCode), count = els.length; els.forEach(element =\u0026gt; { if(element.getAttribute(\u0026#39;data-original-code\u0026#39;) != null){ element.removeAttribute(\u0026#39;data-processed\u0026#39;) element.innerHTML = element.getAttribute(\u0026#39;data-original-code\u0026#39;) } count-- if(count == 0){ resolve() } }); } catch (error) { reject(error) } }) } const init = ()=\u0026gt;{ saveOriginalData() .catch( console.error ) document.body.addEventListener(\u0026#39;dark-theme-set\u0026#39;, ()=\u0026gt;{ resetProcessed() .then(loadMermaid(\u0026#39;dark\u0026#39;)) .catch(console.error) }) document.body.addEventListener(\u0026#39;light-theme-set\u0026#39;, ()=\u0026gt;{ resetProcessed() .then(loadMermaid(\u0026#39;default\u0026#39;)) .catch(console.error) }) } window.initMermaid = init })(window); O código base para isso foi referenciado a partir do seguinte:\nReinitialize with new theme #1945 Modifique o processo ao alterar temas no header.html 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 function switchTheme(theme) { switch (theme) { case \u0026#39;light\u0026#39;: {{ if or .Params.mermaid .Site.Params.mermaid }} document.body.dispatchEvent(new CustomEvent(\u0026#39;light-theme-set\u0026#39;)); {{ end }} document.body.classList.remove(\u0026#39;dark\u0026#39;); break; case \u0026#39;dark\u0026#39;: {{ if or .Params.mermaid .Site.Params.mermaid }} document.body.dispatchEvent(new CustomEvent(\u0026#39;dark-theme-set\u0026#39;)); {{ end }} document.body.classList.add(\u0026#39;dark\u0026#39;); break; // auto default: if (window.matchMedia(\u0026#39;(prefers-color-scheme: dark)\u0026#39;).matches) { {{ if or .Params.mermaid .Site.Params.mermaid }} document.body.dispatchEvent(new CustomEvent(\u0026#39;dark-theme-set\u0026#39;)); {{ end }} document.body.classList.add(\u0026#39;dark\u0026#39;); } } } Crie layouts/shortcodes/mermaid.html 1 2 3 \u0026lt;div class=\u0026#34;mermaid\u0026#34; align=\u0026#34;{{ if .Get \u0026#34;align\u0026#34; }}{{ .Get \u0026#34;align\u0026#34; }}{{ else }}center{{ end }}\u0026#34;\u0026gt; {{ safeHTML .Inner }} \u0026lt;/div\u0026gt; Com os passos acima, a preparação para usar o mermaid.js está completa.\nTentando o mermaid.js Adicione o seguinte à definição do artigo 1 marmaid: true Adicione o seguinte ao corpo do artigo Fluxograma\n1 2 3 4 5 6 {{\u0026lt;mermaid align=\u0026#34;center\u0026#34;\u0026gt;}} graph TD A[Início] --\u0026gt;|Condição 1| B(Condição 2) B --\u0026gt; C{Condição 3} C --\u0026gt;|Condição 4| D[Fim] {{\u0026lt;/mermaid\u0026gt;}} Resultado da saída\ngraph TD A[Início] --\u003e|Condição 1| B(Condição 2) B --\u003e C{Condição 3} C --\u003e|Condição 4| D[Fim] Gráfico de Gantt\n1 2 3 4 5 6 7 8 9 10 11 12 {{\u0026lt;mermaid align=\u0026#34;center\u0026#34;\u0026gt;}} gantt section Project Definição de Requisitos :done, a, 2024-05-25, 5d Design Básico :done, b, after a, 5d Design Detalhado :done, c, after b, 5d Fabricação :active, d, after c, 10d Teste Unitário :crit, e, after d, 5d Teste de Integração : f, after e, 5d Teste de Sistema : g, after f, 5d Lançamento :milestone, h, after g, 1d {{\u0026lt;/mermaid\u0026gt;}} Resultado da saída\ngantt section Project Definição de Requisitos :done, a, 2024-05-25, 5d Design Básico :done, b, after a, 5d Design Detalhado :done, c, after b, 5d Fabricação :active, d, after c, 10d Teste Unitário :crit, e, after d, 5d Teste de Integração : f, after e, 5d Teste de Sistema : g, after f, 5d Lançamento :milestone, h, after g, 1d Diagrama de Sequência\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 {{\u0026lt;mermaid align=\u0026#34;center\u0026#34;\u0026gt;}} sequenceDiagram participant user participant view participant controller participant model participant database user-\u0026gt;\u0026gt;view: Inserir ID/PW view-\u0026gt;\u0026gt;controller: Solicitação de autenticação controller-\u0026gt;\u0026gt;model: Solicitação de autenticação model-\u0026gt;\u0026gt;database: Solicitação de autenticação database--\u0026gt;\u0026gt;model: Retornar resultado da autenticação model--\u0026gt;\u0026gt;controller: Retornar resultado da autenticação controller--\u0026gt;\u0026gt;view: Retornar resultado da autenticação view--\u0026gt;\u0026gt;user: Exibir resultado da autenticação {{\u0026lt;/mermaid\u0026gt;}} Resultado da saída\nsequenceDiagram participant user participant view participant controller participant model participant database user-\u003e\u003eview: Inserir ID/PW view-\u003e\u003econtroller: consulta ajax controller-\u003e\u003emodel: Solicitação de autenticação model-\u003e\u003edatabase: Emissão de SQL database--\u003e\u003emodel: Retornar resultado SQL model--\u003e\u003econtroller: Retornar resultado da solicitação controller--\u003e\u003eview: Retornar resultado da consulta ajax view--\u003e\u003euser: Exibir resultado da autenticação Isso é tudo.\nReferências Site oficial do mermaid.js Site de demonstração onde você pode visualizar a sintaxe Mermaid ","date":"2024-05-25T02:18:09+09:00","image":"http://kenji.blog/p/mermaid.js%E3%82%92%E8%A9%A6%E3%81%97%E3%81%A6%E3%81%BF%E3%82%8B/img_2_huc7c099ec3ef9a6ce3efa5818e1489313_12585_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/mermaid.js%E3%82%92%E8%A9%A6%E3%81%97%E3%81%A6%E3%81%BF%E3%82%8B/","title":"Experimentando o mermaid.js"},{"content":"Como desfazer um git reset Após realizar um git commit, se você executar acidentalmente um git reset, veja como desfazer o git reset (como restaurar o estado do git commit).\nVerifique o ID do commit antes do reset com git reflog Volte para o estado antes do reset com git reset --hard HEAD@{número} Isso é tudo sobre como desfazer um git reset.\n","date":"2024-05-15T23:32:43+09:00","image":"http://kenji.blog/p/git-reset%E3%82%92%E5%8F%96%E3%82%8A%E6%B6%88%E3%81%99%E6%96%B9%E6%B3%95/img_hu1637c23702d7aac8be6c2641e62ebc1a_73066_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/como-desfazer-git-reset/","title":"Como desfazer um git reset"},{"content":"Abertura do código-fonte do MS-DOS 4.0 A Microsoft lançou o código fonte do MS-DOS 4.0, lançado há quase 40 anos. É escrito quase inteiramente em código de montagem 8086.\nRepositório no GitHub https://github.com/microsoft/MS-DOS\nSite de Referência Open Sourcing MS-DOS 4.0 ","date":"2024-05-05T16:44:28+09:00","image":"http://kenji.blog/p/ms-dos-4.0-%E3%81%AE%E3%82%AA%E3%83%BC%E3%83%97%E3%83%B3%E3%82%BD%E3%83%BC%E3%82%B9%E5%8C%96/img_hu44e977c98e405f06fee0746ba6885217_23034_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/ms-dos-4.0-%E3%81%AE%E3%82%AA%E3%83%BC%E3%83%97%E3%83%B3%E3%82%BD%E3%83%BC%E3%82%B9%E5%8C%96/","title":"Abertura do código-fonte do MS-DOS 4.0"},{"content":" Código Legível Princípios de Programação O Programador Pragmático Tecnologias que Suportam a Web Como Construir Aplicações Web Seguras Por Que as Redes se Conectam Guia Completo de SQL por Especialistas Guia Prático do Docker Guia Completo do Kubernetes Code Complete 2ª Edição Clean Code: Habilidades de Software Ágil Clean Architecture: Estrutura e Design de Software Tecnologias para Conhecer Antes de se Tornar um Programador de Jogos Being Geek Por Que Criar com Orientação a Objetos? ","date":"2024-05-05T16:03:33+09:00","image":"http://kenji.blog/p/%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E5%88%9D%E5%AD%A6%E8%80%85%E3%81%AB%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AE%E6%9B%B8%E7%B1%8D/img_huefc28c3d74f521b3206dda9fd272911e_636136_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/livros-recomendados-para-engenheiros-iniciantes/","title":"Livros recomendados para engenheiros iniciantes"},{"content":"Criei um Template de Calendário no Excel (Versão com Feriados)! Criei um template no Excel onde, ao inserir o ano e o mês, os feriados desse mês são exibidos no calendário.\nFaça o download e use à vontade. Calendário.xlsx\n","date":"2024-05-01T00:15:57+09:00","image":"http://kenji.blog/p/excel%E3%81%AE%E3%82%AB%E3%83%AC%E3%83%B3%E3%83%80%E3%83%BC%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E4%BC%91%E6%97%A5%E5%AF%BE%E5%BF%9C%E7%89%88/img_hu8d7d9eeba53cb2329139f98aded52558_13893_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/excel%E3%81%AE%E3%82%AB%E3%83%AC%E3%83%B3%E3%83%80%E3%83%BC%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E4%BC%91%E6%97%A5%E5%AF%BE%E5%BF%9C%E7%89%88/","title":"Template de Calendário Excel (Versão com Suporte a Feriados)"},{"content":"※ Este é o procedimento de configuração para o Windows 11.\nAbra o Painel de Controle Selecione Opções de Energia Clique em \u0026ldquo;Escolher a função dos botões de energia\u0026rdquo; Clique em \u0026ldquo;Alterar configurações não disponíveis no momento\u0026rdquo; Desmarque \u0026ldquo;Ligar inicialização rápida (recomendado)\u0026rdquo; Clique em \u0026ldquo;Salvar alterações\u0026rdquo; Referência \\[Windows 10\\] Como desativar a inicialização rápida.\n","date":"2024-04-29T19:42:20+09:00","image":"http://kenji.blog/p/%E3%83%9E%E3%83%AB%E3%83%81%E3%83%A2%E3%83%8B%E3%82%BF%E3%81%A7%E6%AF%8E%E5%9B%9E%E8%B5%B7%E5%8B%95%E6%99%82%E3%81%ABdpi%E3%81%AE%E8%A8%AD%E5%AE%9A%E3%81%8C%E3%83%AA%E3%82%BB%E3%83%83%E3%83%88%E3%81%95%E3%82%8C%E3%81%A6%E3%81%97%E3%81%BE%E3%81%86%E3%81%A8%E3%81%8D%E3%81%AE%E5%AF%BE%E5%87%A6%E6%B3%95/img_huc496c8f1febcd28bf66466cd5e2648a0_37147_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/como-corrigir-configuracoes-dpi-redefinidas-inicializacao-varios-monitores/","title":"Como corrigir as configurações de DPI sendo redefinidas na inicialização com vários monitores"},{"content":"Obter apenas a versão mais recente do repositório git Você pode obter apenas a versão mais recente do repositório com o comando a seguir. Isso é útil quando você deseja obter o repositório rapidamente para economizar espaço em disco.\n1 git clone --depth 1 \u0026lt;URL do repositório\u0026gt; ","date":"2024-04-27T02:54:12+09:00","image":"http://kenji.blog/p/git%E3%83%AA%E3%83%9D%E3%82%B8%E3%83%88%E3%83%AA%E3%81%AE%E6%9C%80%E6%96%B0%E3%81%A0%E3%81%91%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8B/img_hu2ecde82e40aa31a994850b70302683b4_5304_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/obter-apenas-a-versao-mais-recente-do-repositorio-git/","title":"Obter apenas a versão mais recente do repositório git"},{"content":"O que fazer quando o seguinte erro é exibido no GitHub Copilot A partir de 19/04/2024, o GitHub Copilot parou de funcionar. A mensagem de erro é a seguinte:\n1 2 [ERROR] [ghostText] [2024-04-21T04:06:46.900Z] Error on ghost text request: (FetchError) unable to verify the first certificate [ERROR] [certificates] [2024-04-21T04:06:46.901Z] Your current Copilot license doesn\u0026#39;t support proxy connections with custom certificates. Please visit https://gh.io/copilot-network-errors to learn more. Original cause: {\u0026#34;type\u0026#34;:\u0026#34;system\u0026#34;,\u0026#34;_name\u0026#34;:\u0026#34;FetchError\u0026#34;,\u0026#34;code\u0026#34;:\u0026#34;UNABLE_TO_VERIFY_LEAF_SIGNATURE\u0026#34;} Solução Parece ser um bug do ESET. Nas configurações avançadas do ESET, desative a opção \u0026ldquo;Ativar SSL/TLS\u0026rdquo;. Referência Parece que o mesmo erro está ocorrendo no AWS CDK.\nAWS CDK bootstrap certificate warning-error ","date":"2024-04-21T18:47:26+09:00","image":"http://kenji.blog/p/%E8%A8%BC%E6%98%8E%E6%9B%B8%E3%82%A8%E3%83%A9%E3%83%BC%E3%81%A7github-copilot%E3%81%8C%E4%BD%BF%E3%81%88%E3%81%AA%E3%81%8F%E3%81%AA%E3%81%A3%E3%81%9F%E5%A0%B4%E5%90%88%E3%81%AE%E5%AF%BE%E5%87%A6%E6%96%B9%E6%B3%95/img_hue52485515660c172702881501d13c34d_319675_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/como-resolver-erro-certificado-github-copilot/","title":"Como resolver o erro de certificado quando o GitHub Copilot para de funcionar"},{"content":"\nIntrodução ao vim Download e Instalação https://www.vim.org/download.php\nNo site acima, baixe e instale o módulo apropriado para o seu sistema operacional.\nPara Windows, escolher gvim_X.X.X_x64_signed.exe é uma boa opção.\nComo Iniciar No Windows, é necessário registrar a pasta onde vim.exe está localizado na variável de ambiente Path.\nComo iniciar:\n1 vim Para iniciar especificando um nome de arquivo:\n1 vim filename.txt Como Sair Para sair, digite : (dois pontos), depois q e pressione Enter.\n1 :q Se o arquivo foi modificado, será exibido Nenhuma gravação desde a última alteração (adicione ! para forçar). Você pode forçar a saída descartando as alterações.\n1 :q! Para salvar e sair do arquivo:\n1 :wq O seguinte também tem o mesmo significado:\n1 :x Você também pode sair pressionando Shift e apertando z duas vezes. (O mesmo que :wq)\nModos O vim possui um Modo de Comando e um Modo de Inserção. Ao iniciar o vim, ele está no Modo de Comando. Pressionar a tecla i muda para o Modo de Inserção.\nNo Modo de Inserção, como o nome sugere, você pode digitar texto. Para voltar do Modo de Inserção para o Modo de Comando, pressione a tecla ESC.\nA alternância entre esses modos é uma característica fundamental do vim.\nMovimentação do Cursor e Rolagem Resumo da movimentação do cursor e rolagem no Modo de Comando.\nTecla Descrição h (ou Ctrl+H, BackSpace, ←) Mover para a esquerda j (ou Ctrl+J / N, ↓) Mover para baixo k (ou Ctrl+P, ↑) Mover para cima l (ou Space, →) Mover para a direita + (ou Enter) Mover para o início da próxima linha - Mover para o início da linha anterior Ctrl+B (ou PageUp) Rolar para cima (página) Ctrl+F (ou PageDown) Rolar para baixo (página) Ctrl+U Rolar para cima (meia página) Ctrl+D Rolar para baixo (meia página) Ctrl+Y Rolar para cima (uma linha) Ctrl+E Rolar para baixo (uma linha) z Enter Rolar linha do cursor para o topo z . Rolar linha do cursor para o centro z - Rolar linha do cursor para a base 0 (ou |) Mover o cursor para o início da linha $ Mover o cursor para o fim da linha ^ (ou _) Mover o cursor para o primeiro caractere não em branco da linha G (ou :$) Mover o cursor para a última linha :número_da_linha Enter Mover para a linha especificada Ao digitar um número antes das teclas de movimento acima, você pode mover várias vezes por essa quantidade. (Por exemplo, digitar 3j moverá 3 linhas para baixo a partir da posição atual do cursor.)\nOutros Comandos Tecla Descrição Ctrl+L Redesenhar a tela Ctrl+G Mostrar número de linhas e a posição do cursor ","date":"2024-04-19T22:06:34+09:00","image":"http://kenji.blog/p/vim%E5%85%A5%E9%96%80/img_hu70487bce4333a61ad5b3ba8ed7939499_17904_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/vim%E5%85%A5%E9%96%80/","title":"Introdução ao vim"},{"content":"Sobre a necessidade de chamar DestroyIcon É necessário chamar DestroyIcon nos seguintes casos:\nCreateIconFromResourceEx (se chamado sem a flag LR_SHARED) CreateIconIndirect CopyIcon Quando criado pelas funções acima.\nLoadIcon LoadImage (se usar a flag LR_SHARED) CopyImage (se usar a flag LR_COPYRETURNORG e o parâmetro hImage for um ícone compartilhado) CreateIconFromResource CreateIconFromResourceEx (se usar a flag LR_SHARED) Ícones criados e carregados nos casos acima não devem chamar DestroyIcon.\nReferência Função DestroyIcon (winuser.h) ","date":"2024-04-19T01:55:17+09:00","permalink":"http://kenji.blog/pt/p/loadicon-nao-precisa-chamar-destroyicon/","title":"LoadIcon não precisa chamar DestroyIcon"},{"content":"Vídeos de Palestras sobre IA Generativa \u0026ldquo;IA Generativa\u0026rdquo; (1) Masayuki Nakao, Professor da Universidade de Tóquio 2023.9.8 \u0026ldquo;IA Generativa\u0026rdquo; (2) Kuniyoshi Sakai, Professor da Universidade de Tóquio 2023.10.11 \u0026ldquo;IA Generativa\u0026rdquo; (3) Yutaka Matsuo, Professor da Universidade de Tóquio 2024.3.15 ","date":"2024-04-16T02:13:56+09:00","image":"http://kenji.blog/p/%E7%94%9F%E6%88%90ai%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/img_hu1a8581c4b72be646476cf90db2209d32_686551_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/sobre-a-ia-generativa/","title":"Sobre a IA Generativa"},{"content":"Gerar código QR com curl Aviso: Os métodos apresentados retornam um código QR gerado no lado do servidor, portanto, pode haver registro de logs. Tenha cuidado ao converter informações confidenciais, como informações pessoais, em um código QR.\nMétodo 1 Este é um método para gerar um código QR no prompt de comando. O qrenco.de retorna a resposta em formato de texto.\n1 curl qrenco.de/kenji.blog Resultado da saída 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 █████████████████████████████ █████████████████████████████ ████ ▄▄▄▄▄ █ ▄ ▄ █ ▄▄▄▄▄ ████ ████ █ █ █ ▀▀▀██ █ █ ████ ████ █▄▄▄█ █▀▀█▀▄█ █▄▄▄█ ████ ████▄▄▄▄▄▄▄█▄▀ ▀ █▄▄▄▄▄▄▄████ ████▄ █▀▄ ▄▀█▄▀ ▀██▄▀ ▄████ ████▀▀▀█ ▄▄ ▄█▄█▀█▀▄██ ▀████ ████▄▄▄██▄▄█ █▀█ ▄██▀▀█ █████ ████ ▄▄▄▄▄ █▀█ ▀ ▄▀▄▄▄ ▀████ ████ █ █ █▄▄ ▄▀▄▀▄ ██ ▀████ ████ █▄▄▄█ █▀▀█ ▀▄▄▄ ▄▄██████ ████▄▄▄▄▄▄▄█▄▄███▄▄█▄███▄████ █████████████████████████████ █████████████████████████████ Referência qrenco.de Método 2 O api.qrserver.com retorna uma imagem.\n1 curl -o qr.png \u0026#34;https://api.qrserver.com/v1/create-qr-code/?size=150x150\u0026amp;data=HelloWorld\u0026#34; Resultado da saída Referência QR Code Generator ","date":"2024-04-16T00:42:27+09:00","image":"http://kenji.blog/p/curl%E3%81%A7qr%E3%82%B3%E3%83%BC%E3%83%89%E7%94%9F%E6%88%90/img_hub03976e78daddb607d3d46f69887db4b_11127_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/curl%E3%81%A7qr%E3%82%B3%E3%83%BC%E3%83%89%E7%94%9F%E6%88%90/","title":"Gerar código QR com curl"},{"content":"Lista de Atalhos Tecla de Atalho Descrição Ctrl + B Negrito Ctrl + I Itálico Ctrl + U Sublinhado Ctrl + E Alinhar ao centro Ctrl + L Alinhar à esquerda Ctrl + R Alinhar à direita Ctrl + ] Aumentar o tamanho da fonte Ctrl + [ Diminuir o tamanho da fonte Ctrl + C Copiar Ctrl + V Colar Ctrl + X Recortar Ctrl + Z Desfazer Ctrl + Y Refazer a ação desfeita Ctrl + A Selecionar tudo Shift + Teclas de Seta Selecionar um intervalo Ctrl + F Pesquisar texto Ctrl + H Substituir texto Ctrl + P Exibir visualização de impressão Ctrl + S Salvar o documento F12 Salvar como Ctrl + Home Mover para o início do documento Ctrl + End Mover para o final do documento Referência Atalhos de teclado do Word ","date":"2024-04-07T14:18:51+09:00","image":"http://kenji.blog/p/microsoft-word%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E4%B8%80%E8%A6%A7/img_hu52c1b9e3b4195e8df02b1851180b33b3_10388_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/microsoft-word%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E4%B8%80%E8%A6%A7/","title":"Lista de Atalhos do Microsoft Word"},{"content":"Apresentamos o \u0026ldquo;Tab Auto Refresh\u0026rdquo;, uma extensão do navegador Edge que atualiza automaticamente as páginas web.\nInstalação do Tab Auto Refresh Tab Auto Refresh\nAcesse o site acima e clique em Instalar.\nClique em Adicionar extensão.\nComo usar Após a instalação, um ícone será adicionado no canto superior direito do Edge.\nAbra a página web que deseja atualizar automaticamente e clique no ícone para iniciar a atualização automática.\nA área destacada em verde é o intervalo de atualização automática. Selecione o momento em que deseja que a atualização automática ocorra.\nPara parar a atualização automática, clique no ícone e depois clique em Stop reloading this tab.\n","date":"2024-04-06T15:36:54+09:00","image":"http://kenji.blog/p/web%E3%83%9A%E3%83%BC%E3%82%B8%E3%81%AE%E8%87%AA%E5%8B%95%E6%9B%B4%E6%96%B0%E3%83%96%E3%83%A9%E3%82%A6%E3%82%B6%E6%8B%A1%E5%BC%B5edge%E3%82%A2%E3%83%89%E3%82%AA%E3%83%B3/img_hu57eb7510f8ab42d5a8107b2d3db76a45_3448_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/web%E3%83%9A%E3%83%BC%E3%82%B8%E3%81%AE%E8%87%AA%E5%8B%95%E6%9B%B4%E6%96%B0%E3%83%96%E3%83%A9%E3%82%A6%E3%82%B6%E6%8B%A1%E5%BC%B5edge%E3%82%A2%E3%83%89%E3%82%AA%E3%83%B3/","title":"Extensão de atualização automática de páginas web (Add-on Edge)"},{"content":"Lista de Atalhos do Visual Studio Fiz uma lista dos atalhos do Visual Studio que uso com frequência pessoalmente. Ao memorizar os atalhos de teclado do Visual Studio, você pode trabalhar no desenvolvimento de forma mais eficiente. Por favor, tente usá-los.\n※Verificado no Visual Studio 2022.\nTecla de atalho Descrição F1 Exibir ajuda da palavra selecionada F2 Ir para o marcador Ctrl + F2 Adicionar um marcador Ctrl + Shift + F2 Remover todos os marcadores F5 Compilar e executar (com depuração) Ctrl + F5 Compilar e executar (sem depuração) F7 Compilar F9 Adicionar ponto de interrupção na linha atual Ctrl + F9 Desativar ponto de interrupção na linha atual Shift + Ctrl + F9 Remover todos os pontos de interrupção F10 Passar por cima (Step over) F11 Entrar (Step in) F12 Ir para definição Ctrl + D Duplicar a linha atual Ctrl + X Cortar a linha (quando não houver seleção) Ctrl + Shift + ] Selecionar até o par correspondente do parêntese/chave na posição do cursor Alt + Setas para cima/baixo Mover a linha atual para cima ou para baixo Alt + Shift + Setas Multi-cursor/seleção em bloco Ctrl + Tab Alternar exibição do código-fonte/janela Ctrl + Shift + V Exibir histórico da área de transferência Ctrl + K e depois Ctrl + C Comentar a linha atual Ctrl + K e depois Ctrl + U Descomentar a linha atual Ctrl + G Ir para a linha especificada Ctrl + F Pesquisar Ctrl + Shift + F Pesquisa global Ctrl + H Substituir Ctrl + Shift + F Substituição global Ctrl + Tab Alternar exibição do código-fonte/janela Ctrl + Space Autocompletar palavras Ctrl + Alt + L Abrir a janela do Gerenciador de Soluções Ctrl + Shift + E Abrir a janela de Exibição de Recursos Ctrl + 0 e depois Ctrl + G Abrir a janela de Commit do Git Referência Atalhos de teclado padrão no Visual Studio ","date":"2024-04-06T11:27:37+09:00","image":"http://kenji.blog/p/visual-studio-%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E4%B8%80%E8%A6%A7/img_hue1a55f22c15dca7427db7cd2dfd89735_223690_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/lista-de-atalhos-do-visual-studio/","title":"Lista de Atalhos do Visual Studio"},{"content":"Aqui mostramos como adicionar o grep do Hidemaru Editor ao menu de contexto (clique com o botão direito) do Explorer no Windows 10/11.\nAviso: O procedimento a seguir altera o registro. Faça por sua própria conta e risco.\nProcedimento Abra o link abaixo e salve em qualquer pasta. 秀丸レジストリ登録.reg\nDê um duplo clique no arquivo 秀丸レジストリ登録.reg para adicioná-lo ao registro. Referência 秀丸grepをフォルダの右クリックメニューから行う ","date":"2024-04-03T00:00:46+09:00","image":"http://kenji.blog/p/%E3%82%A8%E3%82%AF%E3%82%B9%E3%83%97%E3%83%AD%E3%83%BC%E3%83%A9%E3%83%BC%E3%81%AE%E5%8F%B3%E3%82%AF%E3%83%AA%E3%83%83%E3%82%AF%E3%83%A1%E3%83%8B%E3%83%A5%E3%83%BC%E3%81%AB%E7%A7%80%E4%B8%B8%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BFgrep%E3%82%92%E8%BF%BD%E5%8A%A0%E3%81%99%E3%82%8B/img_hu1bfa3588f39c8e6af312f48159d52b67_932_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/adicionar-hidemaru-editor-grep-ao-menu-de-contexto-do-explorer/","title":"Adicionar o Hidemaru Editor grep ao menu de contexto do Explorer"},{"content":"Você conhece o Paradoxo do Aniversário? Vou contar uma história um pouco intrigante. Para a \u0026ldquo;probabilidade de haver pessoas com o mesmo aniversário\u0026rdquo; ser alta, quantas pessoas você acha que precisam se reunir?\nPor exemplo, um ano tem 365 dias, então quando dizem que \u0026ldquo;se 23 pessoas se reunirem, a probabilidade de alguém compartilhar o aniversário é superior a 50%\u0026rdquo;\u0026hellip; de alguma forma, parece ir contra a intuição.\nMas isso realmente é mais de 50%.\nPor que isso acontece? Esse fenômeno é chamado de \u0026ldquo;Paradoxo do Aniversário\u0026rdquo;. O nome diz \u0026ldquo;paradoxo\u0026rdquo; (contra-senso), mas há uma razão matemática sólida.\nQuando o número de pessoas é \u0026ldquo;n\u0026rdquo;, a probabilidade de ninguém compartilhar o aniversário é calculada pela seguinte fórmula:\n1 P(ninguém compartilha) = 365/365 × 364/365 × 363/365 × ... × (365 - n + 1)/365 Subtraindo isso de 1, obtemos a \u0026ldquo;probabilidade de compartilhar com alguém\u0026rdquo;.\nObservando os resultados\u0026hellip; Número de Pessoas Probabilidade de haver pessoas com o mesmo aniversário 10 pessoas Cerca de 11.7% 20 pessoas Cerca de 41.1% 23 pessoas Cerca de 50.7% (Preste atenção aqui!) 30 pessoas Cerca de 70.6% 70 pessoas Incríveis 99.9%! Em outras palavras, com apenas 23 pessoas , há mais de 50% de chance de alguém compartilhar o aniversário. Isso se aplica facilmente a uma sala de aula ou a uma reunião de trabalho.\nResumo: A diferença entre a intuição e a matemática é fascinante O \u0026ldquo;Paradoxo do Aniversário\u0026rdquo; é um exemplo interessante de como nossa intuição e a probabilidade matemática real divergem. Saber sobre coisas assim pode animar pequenas conversas e quizzes!\nLinks de Referência Paradoxo do Aniversário (Wikipedia) ","date":"2024-04-02T01:20:50+09:00","image":"http://kenji.blog/p/%E3%83%90%E3%83%BC%E3%82%B9%E3%83%87%E3%82%A4%E3%83%91%E3%83%A9%E3%83%89%E3%83%83%E3%82%AF%E3%82%B9%E3%81%A8%E3%81%AF/img_huf1a218b90023063d558c5c810438e753_117620_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/%E3%83%90%E3%83%BC%E3%82%B9%E3%83%87%E3%82%A4%E3%83%91%E3%83%A9%E3%83%89%E3%83%83%E3%82%AF%E3%82%B9%E3%81%A8%E3%81%AF/","title":"O que é o Paradoxo do Aniversário?"},{"content":"O que é a Ferramenta de Captura A Ferramenta de Captura (Snipping Tool) é uma ferramenta de captura de tela integrada ao Windows. Você pode usá-la para recortar e salvar uma parte da tela, capturar a tela inteira ou gravar a tela.\nComo iniciar a Ferramenta de Captura Existem principalmente 3 maneiras de iniciá-la:\nPressione a tecla Win, digite Snipping Tool e pressione a tecla Enter. Pressione as teclas Win + Shift + S. Pressione as teclas Win + R, digite snippingtool e pressione a tecla Enter. Como usar a Ferramenta de Captura As etapas para salvar uma imagem capturada são as seguintes: Selecione o ícone de Câmera. Clique no botão Novo. Selecione a área que deseja capturar. Clique no botão Salvar como. Insira o local de salvamento e o nome do arquivo, e salve. As etapas para gravar e salvar um vídeo capturado são as seguintes: Selecione o ícone de Vídeo. Clique no botão Novo. Selecione a área que deseja capturar. Clique no botão Iniciar. Grave a tela. Clique no botão Parar. Clique no botão Salvar como. Insira o local de salvamento e o nome do arquivo, e salve. Referência Usar a Ferramenta de Captura para capturar capturas de tela ","date":"2024-04-01T23:19:45+09:00","image":"http://kenji.blog/p/snipping-tool%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9/img_hu405fe4bbcac8bf4b2046262eb8f35d4a_18613_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/como-usar-a-ferramenta-de-captura/","title":"Como usar a Ferramenta de Captura"},{"content":"Aqui está como criar um atalho para bloquear o computador.\nÉ conveniente porque você pode bloquear seu computador apenas clicando duas vezes no atalho criado em sua área de trabalho.\nComo criar 1. Clique com o botão direito na área de trabalho, selecione Novo \u0026gt; Atalho 2. A tela de criação de atalho aparecerá, digite rundll32.exe user32.dll,LockWorkStation e clique em Avançar 3. Digite o nome do atalho Bloquear Computador e clique em Concluir 4. Altere o ícone do atalho criado Clique com o botão direito no atalho criado e selecione Propriedades\nClique em Alterar Ícone\nSelecione o ícone do cadeado amarelo e clique em OK, então clique em OK novamente para fechar as propriedades\nÉ isso.\nClicar duas vezes no atalho criado bloqueará o computador.\nVocê também pode pressionar Tecla Win + L para bloquear o computador da mesma forma.\n※ Nota: Nenhuma caixa de diálogo de confirmação será exibida ao bloquear o computador.\n","date":"2024-04-01T01:37:49+09:00","image":"http://kenji.blog/p/%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E3%83%BC%E3%82%92%E3%83%AD%E3%83%83%E3%82%AF%E3%81%99%E3%82%8B%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_hud14aa91db8f19c318807d0f2f72ee0fc_128434_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/como-criar-um-atalho-para-bloquear-o-computador/","title":"Como criar um atalho para bloquear o computador"},{"content":"O que é o Problema de Monty Hall? O Problema de Monty Hall é um dos jogos apresentados no programa de televisão americano \u0026ldquo;Let\u0026rsquo;s Make a Deal\u0026rdquo;, e consiste no seguinte problema:\nPré-requisitos: Atrás de uma das 3 portas há um prêmio, e as outras 2 estão vazias (prêmios de consolação).\nO participante escolhe uma das 3 portas. O apresentador abre uma das 2 portas não escolhidas pelo participante, revelando que ela está vazia. Ao participante é perguntado se ele deseja trocar a porta escolhida. O problema é determinar se é melhor para o participante trocar de porta ou não.\nSolução A solução para o Problema de Monty Hall é a seguinte:\nSe o participante não trocar a porta escolhida inicialmente:\nProbabilidade de ganhar: 1/3 Probabilidade de perder: 2/3 Após o apresentador abrir uma porta vazia:\nSe não trocar, a probabilidade de ganhar: 1/3 (permanece a mesma probabilidade do passo 1) Se trocar, a probabilidade de ganhar: 2/3 (a probabilidade de qualquer outra porta do passo 1) Portanto, a probabilidade de ganhar é maior se o participante trocar de porta.\nReferência Wikipedia Monty Hall problem ","date":"2024-03-31T23:41:51+09:00","image":"http://kenji.blog/p/%E3%83%A2%E3%83%B3%E3%83%86%E3%82%A3%E3%83%9B%E3%83%BC%E3%83%AB%E5%95%8F%E9%A1%8C/img_1_hu20d98afb87b485a440eb6d6beaf3ac5e_189614_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/%E3%83%A2%E3%83%B3%E3%83%86%E3%82%A3%E3%83%9B%E3%83%BC%E3%83%AB%E5%95%8F%E9%A1%8C/","title":"O Problema de Monty Hall"},{"content":"Baixar o micro https://github.com/zyedidia/micro/releases\nAbra o link acima, clique em Show all XX assets (onde X é um número) e baixe o micro-X.X.XX-win64.zip (onde X é um número). Extraia o arquivo zip e coloque todos os arquivos em uma pasta de sua escolha.\nConfigurar as variáveis de ambiente Para usar o micro.exe pelo Prompt de Comando, você precisa configurar as variáveis de ambiente.\nPressione a tecla Win + tecla R, digite sysdm.cpl e pressione Enter. Clique em Configurações avançadas do sistema nas Propriedades do Sistema. Clique em Variáveis de Ambiente. Selecione Path em Variáveis do sistema e clique em Editar. Clique em Novo e adicione o caminho para a pasta que contém o micro.exe. Clique em OK para fechar todas as caixas de diálogo. Reinicie o Prompt de Comando e digite nano para verificar se ele pode ser executado. Como usar o micro Ao digitar micro no Prompt de Comando e executá-lo, a seguinte tela será exibida. As principais operações e teclas de atalho são as seguintes:\nTecla de atalho Operação Ctrl+Q Fechar arquivo Ctrl+S Salvar arquivo Ctrl+O Abrir arquivo Ctrl+A Selecionar tudo Ctrl+X Cortar seleção Ctrl+C Copiar seleção Ctrl+V Colar Ctrl+Z Desfazer Ctrl+Y Refazer Ctrl+E Executar comando do editor Referência micro ","date":"2024-03-31T21:50:39+09:00","image":"http://kenji.blog/p/%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BFmicro%E3%82%92windows%E3%81%AB%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_hu5c724e25c36dcf3781d5276f98286fd4_13721_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/como-instalar-o-editor-de-texto-micro-no-windows/","title":"Como instalar o editor de texto micro no Windows"},{"content":"Baixar o nano.exe https://sourceforge.net/projects/nano-for-windows/\nAbra o link acima, clique em Download e baixe o GNU-Nano_Win32(static).zip. Extraia o arquivo zip e coloque o nano.exe em qualquer pasta.\nA entrada de texto em japonês não é suportada (em 31/03/2024). Configurar variáveis de ambiente Para usar o nano.exe no Prompt de Comando, você precisa configurar as variáveis de ambiente.\nPressione a tecla Win + tecla R, digite sysdm.cpl e pressione Enter. Clique em Propriedades do Sistema na janela de Propriedades do Sistema. Clique em Variáveis de Ambiente. Selecione Path em Variáveis de sistema e clique em Editar. Clique em Novo e adicione o caminho do nano.exe. Clique em OK para fechar todas as caixas de diálogo. Reinicie o Prompt de Comando, digite nano e verifique se ele é executado. Como usar o nano Ao digitar nano e executar, a seguinte tela será exibida:\nAs descrições dos atalhos são exibidas na parte inferior da tela.\nO significado dos símbolos é o seguinte:\n^ representa a tecla Ctrl. M- representa a tecla Alt. Para salvar e fechar, pressione Ctrl + S e depois Ctrl + X.\nReferência GNU nano ","date":"2024-03-31T18:09:32+09:00","image":"http://kenji.blog/p/cli%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BFnano%E3%82%92windows%E3%81%AB%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_1_hud0bad6678c124835195c96dbf5908709_45668_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/cli%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BFnano%E3%82%92windows%E3%81%AB%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/","title":"Como instalar o editor de texto CLI nano no Windows"},{"content":"Como resolver o erro \u0026lsquo;Temporary failure resolving\u0026hellip;\u0026rsquo; no wsl 1 2 3 4 kenji@MyComputer:~$ sudo apt update [sudo] password for kenji: Err:1 http://archive.ubuntu.com/ubuntu focal InRelease Temporary failure resolving \u0026#39;archive.ubuntu.com\u0026#39; Quando o erro acima é exibido no wsl, as configurações do servidor DNS podem estar incorretas. No meu ambiente, foi resolvido com os seguintes passos.\nInicie o wsl. Execute sudo nano /etc/resolv.conf. Altere a linha nameserver da seguinte forma: 1 nameserver 8.8.8.8 Salve com Ctrl + S e saia com Ctrl + X. Execute sudo apt update. Se o erro não for exibido, está resolvido. Se não for resolvido com os passos acima Parece que há casos em que não é resolvido com os passos acima. Consulte o artigo a seguir.\nComo resolver \u0026lsquo;Temporary failure resolving\u0026hellip;\u0026rsquo; durante o apt update no WSL ","date":"2024-03-31T16:57:33+09:00","image":"http://kenji.blog/p/wsl-%E3%81%A7temporary-failure-resolving%E3%81%A8%E8%A1%A8%E7%A4%BA%E3%81%95%E3%82%8C%E3%82%8B%E5%A0%B4%E5%90%88%E3%81%AE%E5%AF%BE%E5%87%A6%E6%96%B9%E6%B3%95/img_hu6b9065bcca76a2739d7c532080d71efa_118604_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/wsl-%E3%81%A7temporary-failure-resolving%E3%81%A8%E8%A1%A8%E7%A4%BA%E3%81%95%E3%82%8C%E3%82%8B%E5%A0%B4%E5%90%88%E3%81%AE%E5%AF%BE%E5%87%A6%E6%96%B9%E6%B3%95/","title":"Como resolver o erro 'Temporary failure resolving...' no wsl"},{"content":"Como fechar usando o botão direito na barra de tarefas Este método funciona no Windows 10. Parece que o menu não aparece no Windows 11. Se você segurar as teclas Shift e Ctrl e clicar com o botão direito na barra de tarefas, Sair do Explorer aparecerá no menu.\nComo fechar usando o Gerenciador de Tarefas Pressione as teclas Ctrl + Shift + Esc para abrir o Gerenciador de Tarefas. Selecione Detalhes. Selecione explorer.exe, pressione a tecla Delete, e quando perguntado Deseja finalizar o explorer.exe?, selecione Finalizar processo. Como fechar usando o Prompt de Comando Pressione as teclas Win + R, digite cmd e pressione Enter. Digite taskkill /f /im explorer.exe e pressione Enter. Como iniciar o Explorer a partir do Gerenciador de Tarefas Pressione as teclas Ctrl + Shift + Esc para abrir o Gerenciador de Tarefas. No menu Arquivo, selecione Executar nova tarefa. Digite explorer.exe e pressione Enter. ","date":"2024-03-30T15:40:24+09:00","image":"http://kenji.blog/p/%E3%82%A8%E3%82%AF%E3%82%B9%E3%83%97%E3%83%AD%E3%83%BC%E3%83%A9%E3%83%BC%E3%81%AE%E7%B5%82%E4%BA%86%E5%86%8D%E8%B5%B7%E5%8B%95%E6%96%B9%E6%B3%95/img_2_hue735828bd961ff4973e3abea5e21f198_20142_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/%E3%82%A8%E3%82%AF%E3%82%B9%E3%83%97%E3%83%AD%E3%83%BC%E3%83%A9%E3%83%BC%E3%81%AE%E7%B5%82%E4%BA%86%E5%86%8D%E8%B5%B7%E5%8B%95%E6%96%B9%E6%B3%95/","title":"Como fechar e reiniciar o Explorador de Arquivos"},{"content":"Como restaurar o menu de contexto clássico no Windows 11 Aqui está como restaurar o menu de contexto clássico (menu do botão direito) no Windows 11.\nAbra o Editor do Registro. Pressione Tecla Win + R, digite regedit e pressione Enter. Navegue até HKEY_CURRENT_USER\\Software\\Classes\\CLSID\\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}. Se esta chave não existir, crie-a.\nNavegue até HKEY_CURRENT_USER\\Software\\Classes\\CLSID\\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\\InprocServer32. Se esta chave não existir, crie-a.\nVerifique se (Padrão) em InprocServer32 não possui valor.\nReinicie o computador. Confirme se o menu de contexto retornou à versão clássica. ","date":"2024-03-30T13:13:36+09:00","image":"http://kenji.blog/p/windows-11%E3%81%AE%E5%8F%B3%E3%82%AF%E3%83%AA%E3%83%83%E3%82%AF%E3%83%A1%E3%83%8B%E3%83%A5%E3%83%BC%E3%82%92%E5%BE%93%E6%9D%A5%E7%89%88%E3%81%AB%E6%88%BB%E3%81%99%E6%96%B9%E6%B3%95/img_hub131b7dada89fffcdae45f20639b1ab3_50623_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/como-restaurar-o-menu-de-contexto-classico-no-windows-11/","title":"Como restaurar o menu de contexto clássico no Windows 11"},{"content":"JetBrains Mono É uma fonte de programação de código aberto fornecida pela JetBrains.\nDownload: https://www.jetbrains.com/ja-jp/lp/mono/\nHackGen Hakugen (HackGen) é uma fonte de programação que combina a fonte inglesa para programação Hack com a fonte GenJyuu Gothic, que é um derivado da Source Han Sans.\nDownload: https://github.com/yuru7/HackGen/releases\nRicty Diminished Ricty Diminished é uma fonte irmã da Ricty, criada combinando Inconsolata e Circle M+ 1m com o script de geração da Ricty, em vez de Inconsolata e Migu 1M. Como não inclui glifos da fonte IPA Gothic, ela possui menos glifos de kanji disponíveis, mas em compensação pode ser distribuída sob a SIL Open Font License.\nDownload: https://rictyfonts.github.io/diminished\nCica Caracteres alfanuméricos e símbolos usam Hack + DejaVu Sans Mono. Para outros caracteres, é uma fonte de programação que usa Rounded Mgen+.\nDownload: https://github.com/miiton/Cica/releases\nReferência:\nHack DejaVu Sans Mono Rounded Mgen+ Migu É uma fonte composta de M+ e IPA.\nDownload: https://itouhiro.github.io/mixfont-mplus-ipa/migu/\nOsaka É uma fonte que permite usar a fonte padrão do Mac OS, Osaka, no Windows.\nDownload: http://ifs.nog.cc/osakattf.hp.infoseek.co.jp/\nPlemolJP É uma fonte de programação que combina a fonte japonesa de código aberto IBM Plex Sans JP lançada pela IBM com a IBM Plex Mono da série Plex também da IBM.\nDownload: https://github.com/yuru7/PlemolJP/releases\n","date":"2024-03-30T02:21:31+09:00","image":"http://kenji.blog/p/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%81%A7%E4%BD%BF%E3%81%88%E3%82%8B%E3%83%95%E3%82%A9%E3%83%B3%E3%83%88%E9%9B%86/img_hu5455a1c7ae52190ddcafb3051b00c15b_52757_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/colecao-de-fontes-para-programacao/","title":"Coleção de Fontes para Programação"},{"content":"Aqui está como iniciar o Hidemaru Editor com o comando \u0026lsquo;hide\u0026rsquo;. Nota: Este método foi testado no Windows 10/11.\nAbra o Editor do Registro. Navegue até HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths. Crie uma chave chamada hide.exe em App Paths. A parte antes de .exe no nome desta chave se torna o nome do comando. Defina o valor (Padrão) da chave hide.exe para o caminho do arquivo executável do Hidemaru Editor. No meu ambiente, era \u0026quot;C:\\Program Files (x86)\\Hidemaru\\Hidemaru.exe\u0026quot;. Crie um valor de String chamado Path na chave hide.exe. Defina os dados do Path para o caminho da pasta contendo o arquivo executável do Hidemaru Editor. No meu ambiente, era \u0026quot;C:\\Program Files (x86)\\Hidemaru\u0026quot;. Agora, na caixa de diálogo Executar (pressione a tecla Win + R), você pode iniciar o Hidemaru Editor digitando o comando hide. Além disso, no Prompt de Comando, você pode iniciá-lo com o comando start hide. 1 2 3 4 5 Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\hide.exe] @=\u0026#34;\\\u0026#34;C:\\\\Program Files (x86)\\\\Hidemaru\\\\Hidemaru.exe\\\u0026#34;\u0026#34; \u0026#34;Path\u0026#34;=\u0026#34;\\\u0026#34;C:\\\\Program Files (x86)\\\\Hidemaru\\\\\\\u0026#34;\u0026#34; Se você salvar o conteúdo acima em um arquivo .reg e executá-lo, as configurações serão adicionadas ao registro.\n","date":"2024-03-29T23:45:37+09:00","image":"http://kenji.blog/p/%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89hide%E3%81%A7%E7%A7%80%E4%B8%B8%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BF%E3%82%92%E7%AB%8B%E3%81%A1%E4%B8%8A%E3%81%92%E3%82%8B%E6%96%B9%E6%B3%95/img_2_hu43898a3aaad9ace099d9a060bc7203e5_68153_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/como-iniciar-o-hidemaru-editor-com-o-comando-hide/","title":"Como iniciar o Hidemaru Editor com o comando 'hide'"},{"content":"Problemas Não Resolvidos da Matemática Explicarei sobre os problemas não resolvidos da matemática. Embora os problemas em si sejam simples, ainda há muitos que não foram provados.\nExistem infinitos números perfeitos? Um número perfeito é um número natural cuja soma de seus divisores positivos, excluindo ele mesmo, é igual a ele mesmo. Por exemplo,\nOs divisores de 6 são 1, 2, 3 e, como 1+2+3=6, é um número perfeito. Os divisores de 28 são 1, 2, 4, 7, 14 e, como 1+2+4+7+14=28, é um número perfeito. Atualmente, apenas 51 foram descobertos, e espera-se que existam infinitos, mas isso ainda não foi provado.\nConjectura de Goldbach A conjectura de Goldbach é a conjectura de que todo número par maior que 2 pode ser expresso como a soma de dois números primos. (Aqui, um número primo é um número natural que não tem outros divisores além de 1 e ele mesmo.)\nPor exemplo,\n4=2+2 6=3+3 8=3+5 10=3+7=5+5 O problema em si é muito simples, mas ainda não foi provado.\nHipótese de Riemann A hipótese de Riemann é a conjectura de que os zeros da função zeta de Riemann estão restritos a números pares negativos e números complexos com parte real igual a 1/2.\nA função zeta de Riemann é, quando $s$ é um número complexo e $n$ é um número natural,\n$$\\zeta(s):=\\sum _{n=1}^{\\infty }{\\frac {1}{n^{s}}}=1+{\\frac {1}{2^{s}}}+{\\frac {1}{3^{s}}}+{\\frac {1}{4^{s}}}+\\cdots$$ a função $\\zeta$ definida por.\n","date":"2024-03-02T22:57:36+09:00","image":"http://kenji.blog/p/%E6%95%B0%E5%AD%A6%E3%81%AE%E6%9C%AA%E8%A7%A3%E6%B1%BA%E5%95%8F%E9%A1%8C/img_hub174c33a50b5d9de07ec5dc9c7de1bd4_731181_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/problemas-nao-resolvidos-da-matematica/","title":"Problemas Não Resolvidos da Matemática"},{"content":"Tentei coletar várias caixas de diálogo de informações de versão Windows 11 Em primeiro lugar, aqui estão as informações da versão do Windows 11 que estou usando agora. IntelliJ IDEA (Community Edition) Este é o ambiente no qual estou escrevendo este blog. Visual Studio Code Este também é um editor que uso frequentemente. É surpreendentemente simples. Visual Studio Este é o ambiente de desenvolvimento que eu uso para C++. LINE (Windows) Esta é a versão do LINE para Windows. Paint.NET Este é um software de edição de imagens. sakura editor Este é um editor de texto. Google Chrome Este é o Google Chrome. Desde a introdução do Edge, não o uso muito. Firefox Este é o Firefox. Ultimamente, não o uso muito. Microsoft Edge Este é o Microsoft Edge. Ultimamente, costumo usar mais este. OBS Studio Este é o OBS Studio. Ultimamente, não o uso muito. TradingView Este é o TradingView. Ultimamente, tenho o usado para ver o gráfico do par dólar-iene. Spy++ Este é o Spy++. É uma ferramenta incluída no Windows SDK. dependency walker Este é o dependency walker. É uma ferramenta incluída no Windows SDK. resource hacker Este é o resource hacker. É uma ferramenta para editar e extrair recursos de arquivos executáveis. Microsoft Excel Este é o Microsoft Excel. bandicam Este é o Bandicam. É uma ferramenta de captura de vídeo. winmerge Este é o WinMerge. É uma ferramenta para verificar diferenças entre arquivos. iTunes Este é o iTunes. Ultimamente, não o uso muito. Hidemaru Editor Este é o Hidemaru Editor. É um editor de texto. Adobe Photoshop CS6 Este é o Adobe Photoshop CS6. Adobe Illustrator CS6 Este é o Adobe Illustrator CS6. ESET NOD32 Este é o ESET NOD32. NotePad++ Este é o NotePad++. É um editor de texto. MIFES Este é o MIFES. Ultimamente, não o uso muito. ","date":"2024-03-02T21:32:11+09:00","image":"http://kenji.blog/p/%E3%81%84%E3%82%8D%E3%82%93%E3%81%AA%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E6%83%85%E5%A0%B1%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0%E9%9B%86%E3%82%81%E3%81%A6%E3%81%BF%E3%81%9F/img_hub829fc9858068bdd622cbafca10cd245_20954_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/%E3%81%84%E3%82%8D%E3%82%93%E3%81%AA%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E6%83%85%E5%A0%B1%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0%E9%9B%86%E3%82%81%E3%81%A6%E3%81%BF%E3%81%9F/","title":"Tentei coletar várias caixas de diálogo de informações de versão"},{"content":"Ferramenta de gravação de tela em GIF animado Fiz uma ferramenta para gravar a tela e transformar em um GIF animado. Com esta ferramenta, você pode gravar operações na tela e compartilhá-las em ferramentas de comunicação como o Microsoft Teams.\nComo usar Inicie a ferramenta Especifique a área a ser gravada. Se não for especificada, a tela inteira será gravada. Pressione o botão de gravar Pressione o botão de parar gravação O GIF animado será gerado no mesmo local do arquivo executável Download Download\nAbra o link acima, clique no link GIFScreenRecorder.exe para baixar o arquivo executável.\nCódigo-fonte GitHub\n","date":"2024-02-08T01:23:01+09:00","image":"http://kenji.blog/p/gif%E3%82%A2%E3%83%8B%E3%83%A1%E7%94%BB%E9%9D%A2%E9%8C%B2%E7%94%BB%E3%83%84%E3%83%BC%E3%83%AB/img_hua1d1e581d2290ce1c516887dff1e6eb0_11957_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/ferramenta-de-grava%C3%A7%C3%A3o-de-tela-em-gif-animado/","title":"Ferramenta de gravação de tela em GIF animado"},{"content":"Resumo do Estudo para o Exame PMP Este é um resumo do estudo para o exame PMP.\nVisão Geral PMP é uma certificação em gerenciamento de projetos. É uma certificação baseada no guia PMBOK (atualmente na 7ª edição). O exame PMP dura 230 minutos com 180 questões, mas como 5 questões são perguntas de teste (dummy), você passa se acertar 106 ou mais das 175 questões restantes. As respostas são de múltipla escolha e a maioria tem 4 opções, mas algumas têm 5 opções ou múltipla seleção.\nLiderança Servidora (Servant Leadership) Um estilo de liderança que apoia de baixo para cima, em vez de dar ordens de cima para baixo.\n10 Princípios (Características) da Liderança Servidora Escuta Empatia Cura Conscientização Persuasão Conceituação Previsão Mordomia Compromisso com o crescimento das pessoas Construção de comunidade 4 Valores do Manifesto Ágil Estamos descobrindo maneiras melhores de desenvolver software fazendo-o e ajudando outros a fazê-lo. Através deste trabalho, passamos a valorizar:\nIndivíduos e interações mais que processos e ferramentas, Software em funcionamento mais que documentação abrangente, Colaboração com o cliente mais que negociação de contratos, Responder a mudanças mais que seguir um plano, Ou seja, mesmo havendo valor nos itens à direita, nós valorizamos mais os itens à esquerda.\nManifesto Ágil\nÁgil: 12 Princípios por trás do Manifesto Ágil Nossa maior prioridade é satisfazer o cliente através da entrega contínua e adiantada de software com valor. Aceitar mudanças de requisitos, mesmo no fim do desenvolvimento. Processos ágeis se adequam a mudanças, para que o cliente possa tirar vantagens competitivas. Entregar software em funcionamento com frequência, na escala de semanas até meses, com preferência aos períodos mais curtos. Pessoas de negócios e desenvolvedores devem trabalhar em conjunto e diariamente, durante todo o curso do projeto. Construir projetos em torno de indivíduos motivados. Dando-lhes o ambiente e o suporte necessário e confiando neles para fazer o trabalho. O método mais eficiente e eficaz de transmitir informações para e entre uma equipe de desenvolvimento é através de conversa face a face. Software em funcionamento é a medida primária de progresso. Os processos ágeis promovem o desenvolvimento sustentável. Os patrocinadores, desenvolvedores e usuários devem ser capazes de manter um ritmo constante indefinidamente. Contínua atenção à excelência técnica e bom design aumenta a agilidade. Simplicidade (a arte de maximizar a quantidade de trabalho não realizado) é essencial. As melhores arquiteturas, requisitos e designs emergem de equipes auto-organizáveis. Em intervalos regulares, a equipe reflete sobre como se tornar mais eficaz e então refina e ajusta seu comportamento de acordo. Princípios por trás do Manifesto Ágil\nTerminologia Épico (Visão geral) História de Usuário (Unidade registrada no backlog do produto, unidade para priorização) Tarefa (Item de trabalho técnico, alvo para estimativa de tempo) Backlog do Produto / Item do Backlog do Produto Product Owner (Dono do Produto) Stakeholder (Parte Interessada) Guia Prático Ágil (Livro) Desenvolvimento Lean Kanban Cadeia de Valor (Value Chain) AC (Custo Real - Actual Cost) EV (Valor Agregado - Earned Value) PV (Valor Planejado - Planned Value) EVA (Análise de Valor Agregado - Earned Value Analysis) SPI (Índice de Desempenho de Prazos = EV / PV) CPI (Índice de Desempenho de Custos = EV / AC) EVM (Gerenciamento de Valor Agregado - Earned Value Management)? BAC (Orçamento no Término - Budget at Completion) ETC (Estimativa para Terminar - Estimate to Complete) EAC (Estimativa no Término - Estimate at Completion) Estrutura Funcional Estrutura Matricial Estrutura Projetizada Liderança Servidora (Servant Leadership) Modelo de Tuckman (Formação, Tormenta, Normalização, Desempenho, Dissolução) Termo de Abertura da Equipe (Team Charter) Planning Poker (Sequência de Fibonacci) Retrospectiva (Atividade de reflexão) Equipe Virtual Termo de Abertura do Projeto (Project Charter) Conflito (6 métodos de resolução: Confrontar/Resolver o Problema, Colaborar, Compromisso, Suavizar/Acomodar, Forçar, Retirar/Evitar) Mapeamento do Fluxo de Valor (Value Stream Mapping) Mentoria Coaching Treinamento Teoria X e Y de Douglas McGregor Análise SWOT: Strengths (Forças), Weaknesses (Fraquezas), Opportunities (Oportunidades), Threats (Ameaças) Modelo SECI (Socialização, Externalização, Combinação, Internalização) PDCA, PDSA PESTLE (Político, Econômico, Social, Tecnológico, Legal, Ambiental) VUCA (Volatilidade, Incerteza, Complexidade, Ambiguidade) Método de Monte Carlo Análise de Árvore de Decisão Valor Monetário Esperado (VME / EMV) Net Promoter Score (NPS) Análise de Custo-Benefício Revisão da Sprint (Sprint Review) Gerenciamento de Lançamento (Release Management) SOW (Declaração de Trabalho - Statement of Work) \u0026ldquo;Documento que inclui a descrição detalhada do escopo, objetivos, entregas, prazos, recursos etc. do projeto\u0026rdquo; P-SOW (Declaração de Trabalho de Aquisição - Procurement SOW) RFI (Request For Information - Solicitação de Informações) RFP (Request For Proposal - Solicitação de Proposta) Contrato de Preço Fixo (FP - Fixed Price) Contrato de Tempo e Material (T\u0026amp;M - Time and Material) Contrato de Custos Reembolsáveis (CR - Cost Reimbursable) Preço Fixo com Remuneração de Incentivo (FPIF) Aumento do Escopo (Scope Creep) Modelo Kano Método de Distribuição de Financiamento Método de 100 Pontos Método MoSCoW (Must, Should, Could, Would) Matriz de Rastreabilidade Dicionário da EAP (WBS Dictionary) Velocidade (Número de story points alcançados em cada iteração) Gráfico de Velocidade (Velocity Chart) Matriz de Engajamento das Partes Interessadas (Desinformado, Resistente, Neutro, Apoiador, Liderança) Revisão de Fase (Phase Gate) Radiador de Informações (Information Radiator) Gráfico Burndown (Burndown Chart) Gráfico Burnup (Burnup Chart) Diagrama de Fluxo Cumulativo (Cumulative Flow Diagram) QCD (Qualidade, Custo, Entrega - Quality, Cost, Delivery) Modelo Espiral Corrente Crítica (Critical Chain) Funcionalidade (Feature) Iteração / Sprint Iterativo Incremental Incremento (Entrega adicional de valor) Resiliência Mordomia (Stewardship) Comportamento honesto e confiável, e ações (tomadas de decisão) responsáveis Escalonamento (Escalation) KPT (Keep, Problem, Try) Matriz RACI (Responsible, Accountable, Consulted, Informed) PMO (Escritório de Gerenciamento de Projetos): Suporte, Controle, Diretivo Cadência (Cadence) Adaptação (Tailoring) Níveis Neurológicos (Ambiente, Comportamento, Capacidades, Crenças/Valores, Identidade) Business Case (Documento que descreve os objetivos, benefícios, riscos e retorno do investimento de um projeto) Análise de Tendências (Realizada usando um gráfico de execução e técnicas matemáticas para prever resultados futuros com base no desempenho histórico) Plano de Gerenciamento da Qualidade (Define a estratégia e a abordagem para a qualidade dos entregáveis do projeto) Processo de Governança Product Owner (Visão do produto, priorização do backlog do produto, lançamento do produto) Project Owner / Patrocinador do Projeto (Contratante do projeto) Gerente de Projeto (Gerencia todo o projeto) Líder de Projeto (Dirige o trabalho no campo) Membro do Projeto (Promove o projeto) Abordagem Híbrida Produto Mínimo Viável (MVP) Revisão da Iteração Workshop Plano de Gerenciamento de Benefícios do Projeto (Benefícios alvo do projeto, meios estratégicos para alcançá-los e cronograma para realizá-los) Indicadores-Chave de Desempenho (KPI) On-site (No local, no campo) Estimativa Análoga Estimativa de Três Pontos Estimativa Paramétrica Revisão do Projeto Abordagem Big Bang DSDM (Método de Desenvolvimento de Sistemas Dinâmicos) Lei de Brooks Abordagem Big Bang (Implementar tudo simultaneamente de uma vez) Registro de Riscos (Documento usado como ferramenta de gerenciamento de riscos para identificar potenciais contratempos no projeto) Registro de Riscos Teoria SL (Liderança Situacional - 4 comportamentos adaptados à situação da outra pessoa) Competência Comprometimento Referências Guia do Scrum (Ken Schwaber \u0026amp; Jeff Sutherland) Página do PMI ECO (versão japonesa) Guia Prático Ágil Código de Ética e Conduta Profissional do PMI Material de Estudo Visando passar de primeira no \u0026ldquo;Exame de Certificação PMP®\u0026rdquo;! Curso estratégico para preparação eficiente para o exame (2021) Compatível com Ágil ","date":"2024-02-04T18:41:31+09:00","image":"http://kenji.blog/p/pmp%E5%8B%89%E5%BC%B7/img_hu67a0961bf8e284d45690ac9cdb09e5b3_16702_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/pmp%E5%8B%89%E5%BC%B7/","title":"Estudo PMP"},{"content":"Visão Geral Notas sobre desastres naturais que ocorreram no Japão.\n1 de janeiro de 2024 - Terremoto na Península de Noto ","date":"2024-01-07T00:50:09+09:00","image":"http://kenji.blog/p/%E6%97%A5%E6%9C%AC%E3%81%AE%E7%81%BD%E5%AE%B3/img_hue649e8d0b3bd837ea85e155e108b15fd_273208_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/%E6%97%A5%E6%9C%AC%E3%81%AE%E7%81%BD%E5%AE%B3/","title":"Desastres no Japão"},{"content":"As Sete Ervas Oenanthe javanica (Seri) Bolsa-de-pastor (Nazuna) Gnaphalium affine (Gogyo) Morugem (Hakobera) Lapsana (Hotokenoza) Nabo (Suzuna) Rabanete (Suzushiro) ","date":"2024-01-06T22:22:00+09:00","image":"http://kenji.blog/p/%E4%B8%83%E8%8D%89%E7%B2%A5%E3%81%AE%E3%83%AC%E3%82%B7%E3%83%94/img_hu3e148c57f6499065259203ce3bd1c8c5_295252_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/receita-de-mingau-das-sete-ervas/","title":"Receita de Mingau das Sete Ervas"},{"content":"Música Japonesa Recomendada チューリップ - 青春の影 イルカ - なごり雪 河島英五 - 酒と泪と男と女 Orangestar - Surges 竹内まりや - Plastic Love RADWIMPS - 前前前世 BEGIN - 島人ぬ宝 ザ・ブルーハーツ - 情熱の薔薇 荒井由実 - ルージュの伝言 Begin - 海の声 荒井由実 - ひこうき雲 Love is Over - 欧陽菲菲 クラムボン - 波よせて RADWIMPS - スパークル かりゆし58 - アンマー かりゆし58 - オワリはじまり テレサ・テン - 時の流れに身をまかせ 宇多田ヒカル『One Last Kiss』 不可思議/wonderboy - Pellicule (Official Music Video) Kamen Rider Black RX - Opening Song たしかなこと / 小田和正 - Covered by パクユナ 【Japanese healing song】Hana／Kosuke Atari（covered by Leah） 「真夜中のドア〜stay with me」/ 松原みき Official Lyric Video Midnight Pretenders Anri - Last Summer Whisper 1985 - The Blue Hearts BUMP OF CHICKEN - supernova チューリップ　心の旅　1972 小さな恋のうた ASKA - はじまりはいつも雨 (Official Music Video) キリンジ - エイリアンズ あの日の空よ - 南こうせつ ","date":"2024-01-06T04:11:01+09:00","image":"http://kenji.blog/p/%E5%A5%BD%E3%81%8D%E3%81%AA%E9%82%A6%E6%A5%BD/img_hub840e0bd8da1fd2845b1fe157b13d9d8_1067024_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/musica-japonesa-favorita/","title":"Música Japonesa Favorita"},{"content":"Músicas Ocidentais Recomendadas Keane - Somewhere Only We Know Ben E. King - Stand By Me The Beatles - Hey Jude The Mamas \u0026amp; The Papas - California Dreamin' Ed Sheeran - Shape of You Mark Ronson ft. Bruno Mars – Uptown Funk Sugar - Maroon 5 Bette Midler - The Rose Green Day - Basket Case Coldplay - Viva La VidaViva La Vida Maroon 5 - Memories (Lyrics) Dido - Thank You (Official Video) Bob Dylan - Blowin\u0026rsquo;The Wind(Soprando no Vento) Coldplay - Yellow Eric Clapton - Tears In Heaven B. J. Thomas - Raindrops Keep Fallin\u0026rsquo; on My Head (Stereo / Lyrics) Take Me Home, Country Roads Simon \u0026amp; Garfunkel - Mrs. Robinson (Audio) Taylor Swift - Love Story (Live on Letterman) Wiz Khalifa - See You Again ft. Charlie Puth [Official Video] Furious 7 Soundtrack The Top (Extended Mix) Something Just Like This Feelings Yesterday Once More Carpenters - Top Of The World I Need To Be In Love [Com tradução em japonês] Carpenters Bob Marley \u0026amp; The Wailers \u0026ldquo;Three Little Birds\u0026rdquo; Alan Walker - All Falls Down (feat. Noah Cyrus with Digital Farm Animals) Alan Walker - Darkside (feat. Au/Ra and Tomine Harket) Alan Walker - Alone Alan Walker - Sing Me To Sleep Alan Walker - Faded killing me softly with his song a-ha - Take On Me (Official Video) ","date":"2024-01-05T00:14:22+09:00","image":"http://kenji.blog/p/%E5%A5%BD%E3%81%8D%E3%81%AA%E6%B4%8B%E6%A5%BD/img_hued679cc884753e5576b95c5f8e6f029a_283063_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/%E5%A5%BD%E3%81%8D%E3%81%AA%E6%B4%8B%E6%A5%BD/","title":"Músicas Ocidentais Favoritas"},{"content":"Instalar PowerToys no Prompt de Comando Abaixo está como instalar o PowerToys usando o Prompt de Comando.\n1 winget install Microsoft.PowerToys --source winget Desinstalar PowerToys no Prompt de Comando 1 winget uninstall --name PowerToys ","date":"2023-09-30T21:23:00+09:00","image":"http://kenji.blog/p/powertoys%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB/img_hud87e455d0958ca41a83ffdf977dac7c2_37972_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/powertoys%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB/","title":"Instalar PowerToys no Prompt de Comando"},{"content":"Vamos mostrar respeito Vamos respeitar as pessoas que podem fazer coisas que não conseguimos.\nNa sociedade, há surpreendentemente muitas pessoas que classificam trabalhos e posições, e não conseguem demonstrar respeito.\nVamos mostrar respeito àqueles que realizam trabalhos que não somos capazes de fazer, não importa qual seja o trabalho.\nQuero manter isso em mente.\n","date":"2023-08-01T23:42:31+09:00","image":"http://kenji.blog/p/%E8%87%AA%E5%88%86%E3%81%AB%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84%E3%81%93%E3%81%A8%E3%81%8C%E3%81%A7%E3%81%8D%E3%82%8B%E4%BA%BA%E3%81%AB%E6%95%AC%E6%84%8F%E3%82%92%E6%89%95%E3%81%8A%E3%81%86/img_hu0ec845f1b3d93c1f1262f8f9c2fb19a8_357395_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/vamos-respeitar-aqueles-que-podem-fazer-o-que-nos-nao-podemos/","title":"Vamos respeitar aqueles que podem fazer o que nós não podemos"},{"content":"Splatoon 2 Provavelmente, o jogo que joguei por mais tempo na minha vida é o Splatoon 2. Quase não joguei o modo história, mas o matchmaking online 4 contra 4 é muito bem feito, permitindo jogar contra pessoas do mesmo nível que eu, o que traz uma diversão que nunca cansa. Além disso, é muito divertido ler os padrões de movimento de aliados e inimigos para pensar em estratégias para vencer.\nArmas As armas que mais uso, em ordem, são: \u0026ldquo;Foil Squeezer\u0026rdquo;, \u0026ldquo;Splattershot Jr.\u0026rdquo;, \u0026ldquo;Splat Roller\u0026rdquo; e \u0026ldquo;Foil Flingza Roller\u0026rdquo;. O \u0026ldquo;Splattershot Jr.\u0026rdquo; é uma arma para iniciantes, e eu usava muito no começo.\nOs pontos de pintura para cada um são os seguintes:\nArma Pontos de Pintura Foil Flingza Roller 6,636,594p Splat Roller 6,200,629p Splattershot Jr. 4,211,759p Foil Squeezer 744,678p Splattershot 301,238p Sobre o Nível Sinto que estou indo e voltando entre A+ e S+, e faz um tempo que não consigo alcançar o topo do rank S+, mas estou mais jogando pela diversão das partidas do que para subir de rank. (Se subir muito, os oponentes ficam mais fortes e as partidas ficam mais tensas, o que tira um pouco da diversão)\nTempo de Jogo Meu tempo de jogo já ultrapassou as 2500 horas.\nObjetivos Futuros Meu objetivo é manter meu nível no jogo e continuar me divertindo, mas também gostaria de chegar ao limite máximo (cap) de dinheiro e equipamentos. Desde o lançamento do Splatoon 3, o tempo de matchmaking aumentou e, às vezes, é difícil encontrar partidas, então espero continuar jogando torcendo para que a quantidade de jogadores não diminua mais.\n","date":"2023-08-01T00:26:30+09:00","image":"http://kenji.blog/p/%E3%82%B9%E3%83%97%E3%83%A9%E3%83%88%E3%82%A5%E3%83%BC%E3%83%B32/img_hu177387d05aedc7553df9576fd3706d02_192717_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/splatoon-2/","title":"Splatoon 2"},{"content":"Sobre o Prêmio Microsoft MVP (2023-2024) Tenho o prazer de anunciar que recebi o prêmio Microsoft MVP (2023-2024). Este é o meu 7º ano consecutivo recebendo este prêmio desde 2017.\nA categoria premiada é Developer Technologies .\nRelembrando minhas atividades anteriores, estive envolvido nas seguintes áreas:\nPublicação de código no GitHub Compartilhamento de informações técnicas no blog e em redes sociais (como o Twitter) Contribuições no fórum MSDN Feedback sobre produtos da Microsoft Continuarei me esforçando para escrever artigos melhores e compartilhar informações no futuro.\nAgradeço pelo seu apoio contínuo.\n","date":"2023-07-31T19:15:14+09:00","image":"http://kenji.blog/p/microsoft-mvp%E5%8F%97%E8%B3%9E%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A62023-2024/img_hua5cba2ce9936d80b2181232333db0622_19957_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/sobre-o-pr%C3%AAmio-microsoft-mvp-2023-2024/","title":"Sobre o Prêmio Microsoft MVP (2023-2024)"},{"content":"Três Problemas Clássicos da Grécia Antiga Dado um círculo, construir um quadrado com a mesma área (Quadratura do círculo) Dado um ângulo arbitrário, dividi-lo em três partes iguais (Trissecção do ângulo) Dado um cubo, construir um cubo com o dobro do volume (Duplicação do cubo) Espiral de Arquimedes Em um plano, uma semirreta OB gira em torno de um ponto fixo O com velocidade uniforme. Se a posição inicial for OA, e simultaneamente um ponto P partir de O e se mover ao longo de OB com velocidade constante, a curva traçada pelo ponto P é a Espiral de Arquimedes.\nTeorema de Pappus Cicloide Concoide de Nicomedes Cissoide de Diocles Método das tangentes de Fermat Método das normais de Descartes Cronologia Ano Evento c. 3400 a.C. Sumérios usam fichas de argila para contabilidade c. 3000 a.C. Matemática hieroglífica surge no Egito c. 2800 a.C. Civilização do Vale do Indo usa pesos e medidas decimais c. 2700 a.C. Egípcios usam cordas e trios pitagóricos para verificar ângulos c. 2500 a.C. Invenção do ábaco para cálculos c. 2500 a.C. Referência História da Matemática ","date":"2023-07-22T15:25:10+09:00","image":"http://kenji.blog/p/%E6%95%B0%E5%AD%A6%E3%81%AE%E6%AD%B4%E5%8F%B2/img_hu67324d5a4a949c1841dc5158adcb7086_428375_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/historia-da-matematica/","title":"História da Matemática"},{"content":"Sobre o Trackball Elecom Deft Pro M-DPT1MRBK Faz cerca de uma semana que comprei o trackball \u0026ldquo;Deft Pro M-DPT1MRBK\u0026rdquo; da Elecom, então farei uma análise das minhas impressões de uso.\nPrincipais características\nPossui um grande número de botões: 8 Conexão de três maneiras: com fio, receptor sem fio e Bluetooth Tamanho grande da bola (diâmetro médio de 44 mm) Preço de compra na Amazon: ￥7.012 (em 2 de maio de 2021) Pontos Positivos Como não há necessidade de mover o pulso em comparação com um mouse, a tensão no pulso é reduzida. Como o número de botões é grande, você pode atribuir várias funções a eles. Atualmente, estão atribuídas como acima. Você também pode alterar a atribuição dos botões para cada aplicativo. É necessário instalar um software dedicado para atribuir botões. Como a bola é grande, é relativamente fácil fazer movimentos finos para um trackball. Pontos Negativos A sujeira se acumula ao redor do trackball, então é necessário remover a bola e limpá-la regularmente (cerca de uma vez a cada poucos dias). Demora um pouco para se acostumar porque a sensação de operação é diferente de um mouse: move-se o cursor com o dedo indicador ou médio, e opera-se a roda do mouse com o polegar. Embora eu tenha escrito acima que é fácil fazer movimentos finos, ainda é difícil mover o cursor pixel por pixel com um trackball. Não é possível operar a roda de rolagem enquanto pressiona o botão esquerdo (por exemplo, se você quiser aumentar/diminuir o zoom enquanto seleciona uma área no Paint). No geral, embora eu ache que é um trackball caro, ele é bastante fácil de operar em geral e sinto que meu trabalho se tornou mais produtivo. Espero que isso seja útil para quem está considerando comprar.\n","date":"2023-05-02T23:28:33+09:00","image":"http://kenji.blog/p/%E3%83%88%E3%83%A9%E3%83%83%E3%82%AF%E3%83%9C%E3%83%BC%E3%83%ABdeft-prom-dpt1mrbk%E3%81%AE%E3%81%99%E3%81%99%E3%82%81/img_hue224b6b6b3d7da0ebda5f0b37d429b68_231359_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/recomendacao-do-trackball-deft-pro-m-dpt1mrbk/","title":"Recomendação do Trackball Deft Pro (M-DPT1MRBK)"},{"content":"O que é wxWidgets wxWidgets é uma biblioteca GUI C++ que funciona em plataformas como Windows, Mac, Linux, Android, iOS, etc.\nInstalação do wxWidgets Abra https://www.wxwidgets.org/downloads/ e baixe o Windows Installer. Execute wxMSW-3.2.2.1-Setup.exe para instalar. Abra \u0026ldquo;C:\\wxWidgets-3.2.2.1\\build\\msw\\wx_vc17.sln\u0026rdquo; a partir da pasta instalada. Após abrir wx_vc17.sln, selecione Build \u0026gt; Batch Build. Pressione o botão Select All e, em seguida, o botão Rebuild. Após a conclusão da compilação, feche o Visual Studio temporariamente. Criação do projeto de exemplo Abra o Visual Studio. Selecione File \u0026gt; New \u0026gt; Project. Selecione Windows Desktop Application (as guias são C++, Windows, Desktop). Insira wxWidgetsSample em Project name. Clique em Create. Clique com o botão direito em wxWidgetsSample e selecione Properties. Em Configuration Properties \u0026gt; C/C++ \u0026gt; Additional Include Directories, adicione C:\\wxWidgets-3.2.2.1\\include e C:\\wxWidgets-3.2.2.1\\include\\msvc. Em Configuration Properties \u0026gt; Linker \u0026gt; Additional Library Directories, adicione C:\\wxWidgets-3.2.2.1\\lib\\vc_x64_lib. Abra wxWidgetsSample.cpp e substitua pelo código abaixo. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 #pragma comment(linker,\u0026#34;\\\u0026#34;/manifestdependency:type=\u0026#39;win32\u0026#39; name=\u0026#39;Microsoft.Windows.Common-Controls\u0026#39; version=\u0026#39;6.0.0.0\u0026#39; processorArchitecture=\u0026#39;*\u0026#39; publicKeyToken=\u0026#39;6595b64144ccf1df\u0026#39; language=\u0026#39;*\u0026#39;\\\u0026#34;\u0026#34;) #include \u0026lt;wx/wxprec.h\u0026gt; #ifndef WX_PRECOMP #include \u0026lt;wx/wx.h\u0026gt; #endif class MyApp : public wxApp { public: virtual bool OnInit(); }; class MyFrame : public wxFrame { public: MyFrame(); private: void OnHello(wxCommandEvent\u0026amp; event); void OnExit(wxCommandEvent\u0026amp; event); void OnAbout(wxCommandEvent\u0026amp; event); }; enum { ID_Hello = 1 }; wxIMPLEMENT_APP(MyApp); bool MyApp::OnInit() { MyFrame* frame = new MyFrame(); frame-\u0026gt;Show(true); return true; } MyFrame::MyFrame() : wxFrame(NULL, wxID_ANY, \u0026#34;Hello World\u0026#34;) { wxMenu* menuFile = new wxMenu; menuFile-\u0026gt;Append(ID_Hello, \u0026#34;\u0026amp;Hello...\\tCtrl-H\u0026#34;, \u0026#34;Help string shown in status bar for this menu item\u0026#34;); menuFile-\u0026gt;AppendSeparator(); menuFile-\u0026gt;Append(wxID_EXIT); wxMenu* menuHelp = new wxMenu; menuHelp-\u0026gt;Append(wxID_ABOUT); wxMenuBar* menuBar = new wxMenuBar; menuBar-\u0026gt;Append(menuFile, \u0026#34;\u0026amp;File\u0026#34;); menuBar-\u0026gt;Append(menuHelp, \u0026#34;\u0026amp;Help\u0026#34;); SetMenuBar(menuBar); wxButton* button1 = new wxButton(this, ID_Hello, _(\u0026#34;Hello\u0026#34;), wxPoint(20, 20), wxSize(100, 32)); Connect(ID_Hello, wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(MyFrame::OnHello)); wxButton* button2 = new wxButton(this, wxID_ABOUT, _(\u0026#34;About\u0026#34;), wxPoint(20, 60), wxSize(100, 32)); Connect(wxID_ABOUT, wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(MyFrame::OnAbout)); wxButton* button3 = new wxButton(this, wxID_EXIT, _(\u0026#34;Exit\u0026#34;), wxPoint(20, 100), wxSize(100, 32)); Connect(wxID_EXIT, wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(MyFrame::OnExit)); CreateStatusBar(); SetStatusText(\u0026#34;Welcome to wxWidgets!\u0026#34;); Bind(wxEVT_MENU, \u0026amp;MyFrame::OnHello, this, ID_Hello); Bind(wxEVT_MENU, \u0026amp;MyFrame::OnAbout, this, wxID_ABOUT); Bind(wxEVT_MENU, \u0026amp;MyFrame::OnExit, this, wxID_EXIT); } void MyFrame::OnExit(wxCommandEvent\u0026amp; event) { Close(true); } void MyFrame::OnAbout(wxCommandEvent\u0026amp; event) { wxMessageBox(\u0026#34;This is a wxWidgets\u0026#39; Hello world sample\u0026#34;, \u0026#34;About Hello World\u0026#34;, wxOK | wxICON_INFORMATION); } void MyFrame::OnHello(wxCommandEvent\u0026amp; event) { wxLogMessage(\u0026#34;Hello world from wxWidgets!\u0026#34;); } Ao compilar e executar, uma janela como a abaixo será aberta. Referências O projeto de exemplo está disponível abaixo. wxWidgetsSample\nSite oficial Jogos usando C++ e wxWidgets É isso.\n","date":"2023-04-18T00:18:22+09:00","image":"http://kenji.blog/p/wxwidgets-%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%9F%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB/img_hud707912b3d08e9053ad61da0782a9b23_168133_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/wxwidgets-%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%9F%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB/","title":"Exemplo usando wxWidgets"},{"content":"Filmes para assistir (marcar quando assistir) Maquia: Quando a Flor Prometida Floresce A Fórmula Preferida do Professor Summer Wars Estrelas Além do Tempo Gênio Indomável Uma Mente Brilhante A Teoria de Tudo O Homem Que Viu o Infinito Hawking (Benedict Cumberbatch) Tenchi Meisatsu Pi Quebrando a Banca A Teoria do Amor A Prova 3 Idiotas Buffalo \u0026lsquo;66 Laranja Mecânica Cortina de Fogo Asakusa Kid Top Gun Matrix Resurrections Eu Sou a Lenda O Código Da Vinci A Rede Social STEINS;GATE Planetes Gravidade Violet Evergarden Psycho-Pass Demon Slayer Princesa Mononoke Winny Ponto Zero Zootopia Your Name O Tempo com Você De Volta para o Futuro (1, 2, 3) Shin Godzilla Shin Ultraman Shin Kamen Rider Suzume THE FIRST SLAM DUNK ","date":"2023-04-17T00:34:13+09:00","image":"http://kenji.blog/p/%E6%98%A0%E7%94%BBtodo%E3%83%AA%E3%82%B9%E3%83%88/image_hu831a556e644f698f06f7bab476f01bf6_248271_120x120_fill_q75_box_smart1.jpg","permalink":"http://kenji.blog/pt/p/%E6%98%A0%E7%94%BBtodo%E3%83%AA%E3%82%B9%E3%83%88/","title":"Lista de Filmes TODO"},{"content":"Template de página da Web legal\nhtml5up https://html5up.net/ Eu pensei que gostaria de usá-lo, então aqui está uma nota.\n","date":"2023-04-17T00:26:55+09:00","image":"http://kenji.blog/p/%E3%81%8B%E3%81%A3%E3%81%93%E3%81%84%E3%81%84-web-%E3%83%9A%E3%83%BC%E3%82%B8%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88html5up/img_huc021190a6647c74fdf17f0c26cf7f09d_324732_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/%E3%81%8B%E3%81%A3%E3%81%93%E3%81%84%E3%81%84-web-%E3%83%9A%E3%83%BC%E3%82%B8%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88html5up/","title":"Template de página da Web legal (html5up)"},{"content":"Pré-requisitos Padrão ISO C++ 20 (/std:c++20) Código 1 2 3 4 #include \u0026lt;chrono\u0026gt; #include \u0026lt;format\u0026gt; std::string datetime = std::format(\u0026#34;{:%FT%TZ}\u0026#34;, system_clock::now()); É assim que você imprime a hora atual no formato ISO 8601 em C++.\nReferências std::format ","date":"2023-04-15T19:35:27+09:00","image":"http://kenji.blog/p/c-%E3%81%A7%E7%8F%BE%E5%9C%A8%E6%99%82%E5%88%BB%E3%82%92iso8601%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%83%E3%83%88%E3%81%A7%E5%87%BA%E5%8A%9B%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_hu7d543f2117b8a102814b6a542ff27896_11509_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/c-%E3%81%A7%E7%8F%BE%E5%9C%A8%E6%99%82%E5%88%BB%E3%82%92iso8601%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%83%E3%83%88%E3%81%A7%E5%87%BA%E5%8A%9B%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/","title":"Como imprimir a hora atual no formato ISO 8601 em C++"},{"content":"Aqui mostramos como criar um atalho para desligar o Windows.\nÉ conveniente, pois você pode desligar o computador simplesmente clicando duas vezes no atalho criado, caso ele esteja na área de trabalho, por exemplo.\nComo criar 1. Clique com o botão direito na área de trabalho e selecione Novo \u0026gt; Atalho 2. A tela de criação de atalho será exibida. Digite shutdown.exe -s -f -t 0 e clique em Avançar 3. Digite o nome do atalho, por exemplo, Desligar, e clique em Concluir 4. Altere o ícone do atalho criado Clique com o botão direito no atalho criado e selecione Propriedades\nClique em Alterar Ícone\nSelecione o ícone quadrado vermelho e clique em OK. Em seguida, clique em OK novamente para fechar as propriedades.\nIsso é tudo.\nO Windows será desligado quando você clicar duas vezes no atalho criado.\n※ Nota: Nenhuma caixa de diálogo de confirmação de desligamento será exibida.\n","date":"2023-04-11T17:03:32+09:00","image":"http://kenji.blog/p/windows-%E3%82%92%E3%82%B7%E3%83%A3%E3%83%83%E3%83%88%E3%83%80%E3%82%A6%E3%83%B3%E3%81%99%E3%82%8B%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_hu9b7c59b017f6e7ad15ccc41a6e668b14_6147_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/como-criar-um-atalho-para-desligar-o-windows/","title":"Como criar um atalho para desligar o Windows"},{"content":"Vou apresentar como aplicar mosaico em partes específicas de uma imagem usando o paint.net.\nAo fazer upload de imagens na internet, pode haver casos em que você queira aplicar mosaico a partes específicas da imagem. Com o paint.net, você pode processar as imagens rapidamente.\nProcedimento 1. Abra a imagem na qual deseja aplicar o mosaico no paint.net 2. Use a ferramenta de seleção para selecionar a área que deseja aplicar o mosaico (é possível selecionar várias áreas) 3. Selecione Menu \u0026gt; Efeitos \u0026gt; Distorcer \u0026gt; Mosaico Defina a aspereza do mosaico pelo tamanho da célula. Quanto maior o número, maior a ocultação. [Reduzir] Selecione Multisampling Bilinear [Ampliar] Selecione Nearest Neighbor Feche a caixa de diálogo com OK.\n4. A imagem será processada com mosaico, em seguida, salve a imagem. É isso.\n","date":"2023-04-11T16:33:10+09:00","image":"http://kenji.blog/p/paint.net%E3%81%A7%E7%94%BB%E5%83%8F%E3%81%AE%E7%89%B9%E5%AE%9A%E5%80%8B%E6%89%80%E3%81%AB%E3%83%A2%E3%82%B6%E3%82%A4%E3%82%AF%E3%82%92%E3%81%8B%E3%81%91%E3%82%8B%E6%96%B9%E6%B3%95/img_huffa96a6cc9046fae85e7535d0c0f77f3_7385_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/paint.net%E3%81%A7%E7%94%BB%E5%83%8F%E3%81%AE%E7%89%B9%E5%AE%9A%E5%80%8B%E6%89%80%E3%81%AB%E3%83%A2%E3%82%B6%E3%82%A4%E3%82%AF%E3%82%92%E3%81%8B%E3%81%91%E3%82%8B%E6%96%B9%E6%B3%95/","title":"Como aplicar mosaico em áreas específicas de uma imagem usando paint.net"},{"content":"Vou mostrar como adicionar uma borda a uma imagem usando o paint.net.\nProcedimento 1. Abra a imagem à qual deseja adicionar uma borda no paint.net 2. Defina a cor secundária (esta será a cor da borda) Se a paleta de cores não estiver visível, pressione a tecla F8 no teclado.\nPara definir como preto, clique em .\n3. Selecione Menu \u0026gt; Imagem \u0026gt; Alterar o tamanho da tela Aumente a largura e a altura em 2 pixels cada. Aumentar em 2 pixels resultará em uma borda de 1 pixel. Se quiser uma borda de 5 pixels, aumente a largura e a altura em 10 pixels cada.\nSelecione \u0026ldquo;Centro\u0026rdquo; para a âncora e clique em OK.\n4. Uma borda será adicionada à imagem, então salve a imagem. É isso.\n","date":"2023-04-11T14:31:59+09:00","image":"http://kenji.blog/p/paint.net%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E7%94%BB%E5%83%8F%E3%81%AB%E6%9E%A0%E7%B7%9A%E3%82%92%E3%81%A4%E3%81%91%E3%82%8B%E6%96%B9%E6%B3%95/img_3_hu0a2e55b3f220b3e7559f248d1c86ab19_112900_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/como-adicionar-uma-borda-a-uma-imagem-usando-paint-net/","title":"Como adicionar uma borda a uma imagem usando paint.net"},{"content":"Introdução Usando um serviço chamado Ranklet, você pode facilmente obter o ranking de páginas populares do Google Analytics e colocá-lo em seu site.\nNeste artigo, apresentamos como adicioná-lo a um blog HUGO.\nExemplo de funcionamento Preparação Ter o Google Analytics configurado em seu site Passos Acesse o Ranklet Clique em Sign in with Google e faça login com sua conta do Google (ela deve estar vinculada à sua conta do Google Analytics) Clique em Permitir (許可)\nConfigure as informações básicas Configurei como mostrado acima.\nEm Google Analytics ビュー (Visualização do Google Analytics), selecione a visualização da qual deseja obter o ranking. Configure a substituição de texto Configurei como mostrado acima. Esta configuração serve para remover | kenji.blog do título da página.\nConfigure o template HTML (os números do ranking foram ocultados) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 \u0026lt;div class=\u0026#34;ranklet ranklet-reset\u0026#34;\u0026gt; \u0026lt;table class=\u0026#34;ranklet-table\u0026#34;\u0026gt; \u0026lt;tbody class=\u0026#34;ranklet-pages\u0026#34;\u0026gt; {{#context.pages}} \u0026lt;tr class=\u0026#34;ranklet-page\u0026#34;\u0026gt; \u0026lt;td class=\u0026#34;ranklet-image\u0026#34;\u0026gt; {{#image}} \u0026lt;a href=\u0026#34;{{url}}\u0026#34; class=\u0026#34;ranklet-link\u0026#34;\u0026gt; \u0026lt;img class=\u0026#34;ranklet-img\u0026#34; src=\u0026#34;{{image}}\u0026#34; /\u0026gt; \u0026lt;/a\u0026gt; {{/image}} \u0026lt;/td\u0026gt; \u0026lt;td class=\u0026#34;ranklet-meta\u0026#34;\u0026gt; \u0026lt;div class=\u0026#34;ranklet-title\u0026#34;\u0026gt; \u0026lt;a href=\u0026#34;{{url}}\u0026#34; class=\u0026#34;ranklet-link\u0026#34;\u0026gt; {{title}} \u0026lt;/a\u0026gt; \u0026lt;/div\u0026gt; {{#description}} \u0026lt;div class=\u0026#34;ranklet-description\u0026#34;\u0026gt; \u0026lt;a href=\u0026#34;{{url}}\u0026#34; class=\u0026#34;ranklet-link\u0026#34;\u0026gt; {{description}} \u0026lt;/a\u0026gt; \u0026lt;/div\u0026gt; {{/description}} \u0026lt;/td\u0026gt; \u0026lt;/tr\u0026gt; {{/context.pages}} \u0026lt;/tbody\u0026gt; \u0026lt;/table\u0026gt; \u0026lt;/div\u0026gt; CSS (o tamanho da fonte foi alterado e o texto da descrição foi configurado para ser exibido em até 3 linhas) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 #ranklet-{{context.id}} { .ranklet-reset { // リセット table, tr, td, div, span { margin: 0; padding: 0; border: 0; font-size: 100%; font: inherit; vertical-align: baseline; line-height: 1; box-sizing: border-box; } } .ranklet-table { border-collapse: separate; border-spacing: 8px 24px; width: 100%; word-break: break-all; td { vertical-align: middle; } .ranklet-rank { text-align: center; font-size: 120%; } .ranklet-image { text-align: center; img { max-width: 128px; max-height: 128px; } } .ranklet-meta { .ranklet-title { font-size: 20px; line-height: 125%; } .ranklet-description { font-size: 16px; margin-top: 8px; line-height: 125%; display: -webkit-box; overflow: hidden; -webkit-box-orient: vertical; -webkit-line-clamp: 3; /* 行数 */ } } } } JavaScript sem alterações Copie o HTML da seção de publicação no site Copie o HTML exibido\nCole no template do HUGO Crie layouts/partials/ranklet.html e cole o HTML copiado 1 \u0026lt;div id=\u0026#34;ranklet-11958\u0026#34;\u0026gt;\u0026lt;/div\u0026gt;\u0026lt;script src=\u0026#34;//widget.ranklet.com/v1/ranklet/s3/widgets/11958/widget.js\u0026#34;\u0026gt;\u0026lt;/script\u0026gt; Cole o código abaixo na linha antes de \u0026lt;/footer\u0026gt; em layouts/_default/single.html 1 {{- partial \u0026#34;ranklet.html\u0026#34; . }} É isso. Agora o ranking será exibido na parte inferior da página, como mostrado abaixo.\n","date":"2023-04-10T20:26:57+09:00","image":"http://kenji.blog/p/google%E3%82%A2%E3%83%8A%E3%83%AA%E3%83%86%E3%82%A3%E3%82%AF%E3%82%B9%E3%81%8B%E3%82%89%E4%BA%BA%E6%B0%97%E3%83%9A%E3%83%BC%E3%82%B8%E3%83%A9%E3%83%B3%E3%82%AD%E3%83%B3%E3%82%B0%E3%82%92%E5%8F%96%E5%BE%97%E3%81%97%E3%81%A6%E9%85%8D%E7%BD%AE%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_hue19aa55fc0e6d690cd31b7a50b796054_6753_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/google%E3%82%A2%E3%83%8A%E3%83%AA%E3%83%86%E3%82%A3%E3%82%AF%E3%82%B9%E3%81%8B%E3%82%89%E4%BA%BA%E6%B0%97%E3%83%9A%E3%83%BC%E3%82%B8%E3%83%A9%E3%83%B3%E3%82%AD%E3%83%B3%E3%82%B0%E3%82%92%E5%8F%96%E5%BE%97%E3%81%97%E3%81%A6%E9%85%8D%E7%BD%AE%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/","title":"Como obter e colocar o ranking de páginas populares do Google Analytics"},{"content":"Python Google Colaboratory Google Colaboratory é um ambiente de execução de código Python online.\nO uso de GPU também é possível. Usando os notebooks do Colab, você pode escrever código executável e rich text (incluindo imagens, HTML, LaTeX, etc.) em um único documento. É baseado no Jupyter Notebook.\nRust Rust Playground JavaScript Javascript Playground Java paiza.IO Online Java compiler Haskell Haskell Playground Swift Online Swift Playground C++ C++ 14 Outros AWS Cloud9 Um ambiente de desenvolvimento integrado (IDE) online fornecido pela Amazon AWS. Ferramentas para mais de 40 linguagens de programação como Node.js, JavaScript, Python, PHP, Ruby, Go, C++, etc. já vêm empacotadas.\nVisual Studio Code for the Web Um ambiente de desenvolvimento online fornecido pela Microsoft. No entanto, linguagens que requerem compilação não podem ser executadas ou depuradas.\npaiza.IO Um ambiente de execução online que suporta 24 linguagens principais como C, C++, Java, Ruby, Python, PHP, Perl, etc.\nCodePen Um ambiente de execução online para HTML, CSS e JavaScript.\ncodeanywhere Um IDE online. Permite compartilhamento de código e chat.\n","date":"2023-04-09T14:01:00+09:00","image":"http://kenji.blog/p/%E3%82%AA%E3%83%B3%E3%83%A9%E3%82%A4%E3%83%B3%E3%81%AE%E3%82%B3%E3%83%BC%E3%83%89%E5%AE%9F%E8%A1%8C%E7%92%B0%E5%A2%83%E3%81%BE%E3%81%A8%E3%82%81/img_hu1a682c657d060df2f584d6c279d355c7_129199_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/%E3%82%AA%E3%83%B3%E3%83%A9%E3%82%A4%E3%83%B3%E3%81%AE%E3%82%B3%E3%83%BC%E3%83%89%E5%AE%9F%E8%A1%8C%E7%92%B0%E5%A2%83%E3%81%BE%E3%81%A8%E3%82%81/","title":"[Por Linguagem] Resumo de Ambientes de Execução de Código Online"},{"content":"O que é o Crivo de Eratóstenes? O Crivo de Eratóstenes é um algoritmo para encontrar todos os números primos até um determinado limite. O algoritmo é simples e pode ser implementado através das seguintes etapas:\nCrie um array booleano com N elementos e inicialize todos os elementos como verdadeiros (true). Defina os elementos nas posições 0 e 1 do array como falsos (pois 0 e 1 não são números primos). Se o 2º elemento do array for verdadeiro, imprima 2 como número primo. Defina todos os múltiplos de 2 a partir de $2^2$ como falsos (*). Se o 3º elemento do array for verdadeiro, imprima 3 como número primo. Defina todos os múltiplos de 3 a partir de $3^2$ como falsos. Repita o mesmo processo para o 4º, 5º, \u0026hellip;, e N-ésimo elementos. O motivo de começar a definir como falsos os múltiplos a partir do quadrado (ex: $2^2$) é que os números menores que o quadrado já foram processados (já foram marcados ou listados). Implementação em Rust 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 fn main() { let n = 1000; let mut is_prime = vec![true; n+1]; is_prime[0] = false; is_prime[1] = false; for i in 2..=n { if is_prime[i] { println!(\u0026#34;{}\u0026#34;, i); let mut j = i * i; while j \u0026lt;= n { is_prime[j] = false; j += i; } } } } Versão levemente otimizada Podemos otimizar um pouco a implementação considerando os seguintes pontos:\nInicializar o array com falso (false) em vez de verdadeiro (true) (isso é mais rápido). Uma vez que múltiplos de 2 não são números primos, pule o processo de definir múltiplos de 2 como falso. Não é necessário iterar até n; listar os números primos até a raiz quadrada de n é suficiente para encontrar todos os primos menores ou iguais a n. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 fn main() { let n = 1000; let mut is_prime = vec![false; n+1]; is_prime[2] = true; for i in (3..=n).step_by(2) { is_prime[i] = true; } for i in 3..=((n as f64).sqrt() as usize) { if is_prime[i] { let mut j = i * i; while j \u0026lt;= n { is_prime[j] = false; j += i * 2; } } } for i in (2..=n).filter(|\u0026amp;x| is_prime[x]) { println!(\u0026#34;{}\u0026#34;, i); } } Referência Crivo de Eratóstenes (Wikipedia) ","date":"2023-04-09T12:54:24+09:00","image":"http://kenji.blog/p/%E3%82%A8%E3%83%A9%E3%83%88%E3%82%B9%E3%83%86%E3%83%8D%E3%82%B9%E3%81%AE%E7%AF%A9%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A61000%E4%BB%A5%E4%B8%8B%E3%81%AE%E7%B4%A0%E6%95%B0%E3%82%92%E5%88%97%E6%8C%99%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_hud779f88eb17786b23927bc052940ab95_400805_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/como-listar-n%C3%BAmeros-primos-menores-que-1000-usando-o-crivo-de-erat%C3%B3stenes/","title":"Como listar números primos menores que 1000 usando o Crivo de Eratóstenes"},{"content":"Instalação pelo Terminal Abra o Terminal Execute sudo gem install cocoapods → Por alguma razão, a seguinte mensagem de erro apareceu e a instalação falhou. Saída 1 2 3 ERROR: Error installing cocoapods: The last version of activesupport (\u0026gt;= 5.0, \u0026lt; 8) to support your Ruby \u0026amp; RubyGems was 6.1.7.3. Try installing it with `gem install activesupport -v 6.1.7.3` and then running the current command again activesupport requires Ruby version \u0026gt;= 2.7.0. The current ruby version is 2.6.10.210. Então, pesquisei a mensagem de erro na web (veja \u0026ldquo;Referências\u0026rdquo; abaixo) e executei o seguinte comando: 1 /bin/bash -c \u0026#34;$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)\u0026#34; Saída 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 ==\u0026gt; Checking for `sudo` access (which may request your password)... ==\u0026gt; This script will install: /usr/local/bin/brew /usr/local/share/doc/homebrew /usr/local/share/man/man1/brew.1 /usr/local/share/zsh/site-functions/_brew /usr/local/etc/bash_completion.d/brew /usr/local/Homebrew ==\u0026gt; The following new directories will be created: /usr/local/bin /usr/local/etc /usr/local/include /usr/local/lib /usr/local/sbin /usr/local/share /usr/local/var /usr/local/opt /usr/local/share/zsh /usr/local/share/zsh/site-functions /usr/local/var/homebrew /usr/local/var/homebrew/linked /usr/local/Cellar /usr/local/Caskroom /usr/local/Frameworks ==\u0026gt; The Xcode Command Line Tools will be installed. Press RETURN/ENTER to continue or any other key to abort: ==\u0026gt; /usr/bin/sudo /bin/mkdir -p /usr/local/bin /usr/local/etc /usr/local/include /usr/local/lib /usr/local/sbin /usr/local/share /usr/local/var /usr/local/opt /usr/local/share/zsh /usr/local/share/zsh/site-functions /usr/local/var/homebrew /usr/local/var/homebrew/linked /usr/local/Cellar /usr/local/Caskroom /usr/local/Frameworks ==\u0026gt; /usr/bin/sudo /bin/chmod ug=rwx /usr/local/bin /usr/local/etc /usr/local/include /usr/local/lib /usr/local/sbin /usr/local/share /usr/local/var /usr/local/opt /usr/local/share/zsh /usr/local/share/zsh/site-functions /usr/local/var/homebrew /usr/local/var/homebrew/linked /usr/local/Cellar /usr/local/Caskroom /usr/local/Frameworks ==\u0026gt; /usr/bin/sudo /bin/chmod go-w /usr/local/share/zsh /usr/local/share/zsh/site-functions ==\u0026gt; /usr/bin/sudo /usr/sbin/chown kenji /usr/local/bin /usr/local/etc /usr/local/include /usr/local/lib /usr/local/sbin /usr/local/share /usr/local/var /usr/local/opt /usr/local/share/zsh /usr/local/share/zsh/site-functions /usr/local/var/homebrew /usr/local/var/homebrew/linked /usr/local/Cellar /usr/local/Caskroom /usr/local/Frameworks ==\u0026gt; /usr/bin/sudo /usr/bin/chgrp admin /usr/local/bin /usr/local/etc /usr/local/include /usr/local/lib /usr/local/sbin /usr/local/share /usr/local/var /usr/local/opt /usr/local/share/zsh /usr/local/share/zsh/site-functions /usr/local/var/homebrew /usr/local/var/homebrew/linked /usr/local/Cellar /usr/local/Caskroom /usr/local/Frameworks ==\u0026gt; /usr/bin/sudo /bin/mkdir -p /usr/local/Homebrew ==\u0026gt; /usr/bin/sudo /usr/sbin/chown -R kenji:admin /usr/local/Homebrew ==\u0026gt; /usr/bin/sudo /bin/mkdir -p /Users/kenji/Library/Caches/Homebrew ==\u0026gt; /usr/bin/sudo /bin/chmod g+rwx /Users/kenji/Library/Caches/Homebrew ==\u0026gt; /usr/bin/sudo /usr/sbin/chown -R kenji /Users/kenji/Library/Caches/Homebrew ==\u0026gt; Searching online for the Command Line Tools ==\u0026gt; /usr/bin/sudo /usr/bin/touch /tmp/.com.apple.dt.CommandLineTools.installondemand.in-progress ==\u0026gt; Installing Command Line Tools for Xcode-14.3 ==\u0026gt; /usr/bin/sudo /usr/sbin/softwareupdate -i Command\\ Line\\ Tools\\ for\\ Xcode-14.3 Software Update Tool Finding available software Downloading Command Line Tools for Xcode Downloaded Command Line Tools for Xcode Installing Command Line Tools for Xcode Done with Command Line Tools for Xcode Done. ==\u0026gt; /usr/bin/sudo /usr/bin/xcode-select --switch /Library/Developer/CommandLineTools ==\u0026gt; /usr/bin/sudo /bin/rm -f /tmp/.com.apple.dt.CommandLineTools.installondemand.in-progress ==\u0026gt; Downloading and installing Homebrew... remote: Enumerating objects: 236191, done. remote: Counting objects: 100% (504/504), done. remote: Compressing objects: 100% (327/327), done. remote: Total 236191 (delta 176), reused 468 (delta 158), pack-reused 235687 Receiving objects: 100% (236191/236191), 68.37 MiB | 15.51 MiB/s, done. Resolving deltas: 100% (173058/173058), done. From https://github.com/Homebrew/brew * [new branch] master -\u0026gt; origin/master * [new branch] test-runners -\u0026gt; origin/test-runners * [new tag] 0.1 -\u0026gt; 0.1 * [new tag] 0.2 -\u0026gt; 0.2 * [new tag] 0.3 -\u0026gt; 0.3 * [new tag] 0.4 -\u0026gt; 0.4 * [new tag] 0.5 -\u0026gt; 0.5 * [new tag] 0.6 -\u0026gt; 0.6 * [new tag] 0.7 -\u0026gt; 0.7 * [new tag] 0.7.1 -\u0026gt; 0.7.1 * [new tag] 0.8 -\u0026gt; 0.8 * [new tag] 0.8.1 -\u0026gt; 0.8.1 * [new tag] 0.9 -\u0026gt; 0.9 * [new tag] 0.9.1 -\u0026gt; 0.9.1 * [new tag] 0.9.2 -\u0026gt; 0.9.2 * [new tag] 0.9.3 -\u0026gt; 0.9.3 * [new tag] 0.9.4 -\u0026gt; 0.9.4 * [new tag] 0.9.5 -\u0026gt; 0.9.5 * [new tag] 0.9.8 -\u0026gt; 0.9.8 * [new tag] 0.9.9 -\u0026gt; 0.9.9 * [new tag] 1.0.0 -\u0026gt; 1.0.0 * [new tag] 1.0.1 -\u0026gt; 1.0.1 * [new tag] 1.0.2 -\u0026gt; 1.0.2 * [new tag] 1.0.3 -\u0026gt; 1.0.3 * [new tag] 1.0.4 -\u0026gt; 1.0.4 * [new tag] 1.0.5 -\u0026gt; 1.0.5 * [new tag] 1.0.6 -\u0026gt; 1.0.6 * [new tag] 1.0.7 -\u0026gt; 1.0.7 * [new tag] 1.0.8 -\u0026gt; 1.0.8 * [new tag] 1.0.9 -\u0026gt; 1.0.9 * [new tag] 1.1.0 -\u0026gt; 1.1.0 * [new tag] 1.1.1 -\u0026gt; 1.1.1 * [new tag] 1.1.10 -\u0026gt; 1.1.10 * [new tag] 1.1.11 -\u0026gt; 1.1.11 * [new tag] 1.1.12 -\u0026gt; 1.1.12 * [new tag] 1.1.13 -\u0026gt; 1.1.13 * [new tag] 1.1.2 -\u0026gt; 1.1.2 * [new tag] 1.1.3 -\u0026gt; 1.1.3 * [new tag] 1.1.4 -\u0026gt; 1.1.4 * [new tag] 1.1.5 -\u0026gt; 1.1.5 * [new tag] 1.1.6 -\u0026gt; 1.1.6 * [new tag] 1.1.7 -\u0026gt; 1.1.7 * [new tag] 1.1.8 -\u0026gt; 1.1.8 * [new tag] 1.1.9 -\u0026gt; 1.1.9 * [new tag] 1.2.0 -\u0026gt; 1.2.0 * [new tag] 1.2.1 -\u0026gt; 1.2.1 * [new tag] 1.2.2 -\u0026gt; 1.2.2 * [new tag] 1.2.3 -\u0026gt; 1.2.3 * [new tag] 1.2.4 -\u0026gt; 1.2.4 * [new tag] 1.2.5 -\u0026gt; 1.2.5 * [new tag] 1.2.6 -\u0026gt; 1.2.6 * [new tag] 1.3.0 -\u0026gt; 1.3.0 * [new tag] 1.3.1 -\u0026gt; 1.3.1 * [new tag] 1.3.2 -\u0026gt; 1.3.2 * [new tag] 1.3.3 -\u0026gt; 1.3.3 * [new tag] 1.3.4 -\u0026gt; 1.3.4 * [new tag] 1.3.5 -\u0026gt; 1.3.5 * [new tag] 1.3.6 -\u0026gt; 1.3.6 * [new tag] 1.3.7 -\u0026gt; 1.3.7 * [new tag] 1.3.8 -\u0026gt; 1.3.8 * [new tag] 1.3.9 -\u0026gt; 1.3.9 * [new tag] 1.4.0 -\u0026gt; 1.4.0 * [new tag] 1.4.1 -\u0026gt; 1.4.1 * [new tag] 1.4.2 -\u0026gt; 1.4.2 * [new tag] 1.4.3 -\u0026gt; 1.4.3 * [new tag] 1.5.0 -\u0026gt; 1.5.0 * [new tag] 1.5.1 -\u0026gt; 1.5.1 * [new tag] 1.5.10 -\u0026gt; 1.5.10 * [new tag] 1.5.11 -\u0026gt; 1.5.11 * [new tag] 1.5.12 -\u0026gt; 1.5.12 * [new tag] 1.5.13 -\u0026gt; 1.5.13 * [new tag] 1.5.14 -\u0026gt; 1.5.14 * [new tag] 1.5.2 -\u0026gt; 1.5.2 * [new tag] 1.5.3 -\u0026gt; 1.5.3 * [new tag] 1.5.4 -\u0026gt; 1.5.4 * [new tag] 1.5.5 -\u0026gt; 1.5.5 * [new tag] 1.5.6 -\u0026gt; 1.5.6 * [new tag] 1.5.7 -\u0026gt; 1.5.7 * [new tag] 1.5.8 -\u0026gt; 1.5.8 * [new tag] 1.5.9 -\u0026gt; 1.5.9 * [new tag] 1.6.0 -\u0026gt; 1.6.0 * [new tag] 1.6.1 -\u0026gt; 1.6.1 * [new tag] 1.6.10 -\u0026gt; 1.6.10 * [new tag] 1.6.11 -\u0026gt; 1.6.11 * [new tag] 1.6.12 -\u0026gt; 1.6.12 * [new tag] 1.6.13 -\u0026gt; 1.6.13 * [new tag] 1.6.14 -\u0026gt; 1.6.14 * [new tag] 1.6.15 -\u0026gt; 1.6.15 * [new tag] 1.6.16 -\u0026gt; 1.6.16 * [new tag] 1.6.17 -\u0026gt; 1.6.17 * [new tag] 1.6.2 -\u0026gt; 1.6.2 * [new tag] 1.6.3 -\u0026gt; 1.6.3 * [new tag] 1.6.4 -\u0026gt; 1.6.4 * [new tag] 1.6.5 -\u0026gt; 1.6.5 * [new tag] 1.6.6 -\u0026gt; 1.6.6 * [new tag] 1.6.7 -\u0026gt; 1.6.7 * [new tag] 1.6.8 -\u0026gt; 1.6.8 * [new tag] 1.6.9 -\u0026gt; 1.6.9 * [new tag] 1.7.0 -\u0026gt; 1.7.0 * [new tag] 1.7.1 -\u0026gt; 1.7.1 * [new tag] 1.7.2 -\u0026gt; 1.7.2 * [new tag] 1.7.3 -\u0026gt; 1.7.3 * [new tag] 1.7.4 -\u0026gt; 1.7.4 * [new tag] 1.7.5 -\u0026gt; 1.7.5 * [new tag] 1.7.6 -\u0026gt; 1.7.6 * [new tag] 1.7.7 -\u0026gt; 1.7.7 * [new tag] 1.8.0 -\u0026gt; 1.8.0 * [new tag] 1.8.1 -\u0026gt; 1.8.1 * [new tag] 1.8.2 -\u0026gt; 1.8.2 * [new tag] 1.8.3 -\u0026gt; 1.8.3 * [new tag] 1.8.4 -\u0026gt; 1.8.4 * [new tag] 1.8.5 -\u0026gt; 1.8.5 * [new tag] 1.8.6 -\u0026gt; 1.8.6 * [new tag] 1.9.0 -\u0026gt; 1.9.0 * [new tag] 1.9.1 -\u0026gt; 1.9.1 * [new tag] 1.9.2 -\u0026gt; 1.9.2 * [new tag] 1.9.3 -\u0026gt; 1.9.3 * [new tag] 2.0.0 -\u0026gt; 2.0.0 * [new tag] 2.0.1 -\u0026gt; 2.0.1 * [new tag] 2.0.2 -\u0026gt; 2.0.2 * [new tag] 2.0.3 -\u0026gt; 2.0.3 * [new tag] 2.0.4 -\u0026gt; 2.0.4 * [new tag] 2.0.5 -\u0026gt; 2.0.5 * [new tag] 2.0.6 -\u0026gt; 2.0.6 * [new tag] 2.1.0 -\u0026gt; 2.1.0 * [new tag] 2.1.1 -\u0026gt; 2.1.1 * [new tag] 2.1.10 -\u0026gt; 2.1.10 * [new tag] 2.1.11 -\u0026gt; 2.1.11 * [new tag] 2.1.12 -\u0026gt; 2.1.12 * [new tag] 2.1.13 -\u0026gt; 2.1.13 * [new tag] 2.1.14 -\u0026gt; 2.1.14 * [new tag] 2.1.15 -\u0026gt; 2.1.15 * [new tag] 2.1.16 -\u0026gt; 2.1.16 * [new tag] 2.1.2 -\u0026gt; 2.1.2 * [new tag] 2.1.3 -\u0026gt; 2.1.3 * [new tag] 2.1.4 -\u0026gt; 2.1.4 * [new tag] 2.1.5 -\u0026gt; 2.1.5 * [new tag] 2.1.6 -\u0026gt; 2.1.6 * [new tag] 2.1.7 -\u0026gt; 2.1.7 * [new tag] 2.1.8 -\u0026gt; 2.1.8 * [new tag] 2.1.9 -\u0026gt; 2.1.9 * [new tag] 2.2.0 -\u0026gt; 2.2.0 * [new tag] 2.2.1 -\u0026gt; 2.2.1 * [new tag] 2.2.10 -\u0026gt; 2.2.10 * [new tag] 2.2.11 -\u0026gt; 2.2.11 * [new tag] 2.2.12 -\u0026gt; 2.2.12 * [new tag] 2.2.13 -\u0026gt; 2.2.13 * [new tag] 2.2.14 -\u0026gt; 2.2.14 * [new tag] 2.2.15 -\u0026gt; 2.2.15 * [new tag] 2.2.16 -\u0026gt; 2.2.16 * [new tag] 2.2.17 -\u0026gt; 2.2.17 * [new tag] 2.2.2 -\u0026gt; 2.2.2 * [new tag] 2.2.3 -\u0026gt; 2.2.3 * [new tag] 2.2.4 -\u0026gt; 2.2.4 * [new tag] 2.2.5 -\u0026gt; 2.2.5 * [new tag] 2.2.6 -\u0026gt; 2.2.6 * [new tag] 2.2.7 -\u0026gt; 2.2.7 * [new tag] 2.2.8 -\u0026gt; 2.2.8 * [new tag] 2.2.9 -\u0026gt; 2.2.9 * [new tag] 2.3.0 -\u0026gt; 2.3.0 * [new tag] 2.4.0 -\u0026gt; 2.4.0 * [new tag] 2.4.1 -\u0026gt; 2.4.1 * [new tag] 2.4.10 -\u0026gt; 2.4.10 * [new tag] 2.4.11 -\u0026gt; 2.4.11 * [new tag] 2.4.12 -\u0026gt; 2.4.12 * [new tag] 2.4.13 -\u0026gt; 2.4.13 * [new tag] 2.4.14 -\u0026gt; 2.4.14 * [new tag] 2.4.15 -\u0026gt; 2.4.15 * [new tag] 2.4.16 -\u0026gt; 2.4.16 * [new tag] 2.4.2 -\u0026gt; 2.4.2 * [new tag] 2.4.3 -\u0026gt; 2.4.3 * [new tag] 2.4.4 -\u0026gt; 2.4.4 * [new tag] 2.4.5 -\u0026gt; 2.4.5 * [new tag] 2.4.6 -\u0026gt; 2.4.6 * [new tag] 2.4.7 -\u0026gt; 2.4.7 * [new tag] 2.4.8 -\u0026gt; 2.4.8 * [new tag] 2.4.9 -\u0026gt; 2.4.9 * [new tag] 2.5.0 -\u0026gt; 2.5.0 * [new tag] 2.5.1 -\u0026gt; 2.5.1 * [new tag] 2.5.10 -\u0026gt; 2.5.10 * [new tag] 2.5.11 -\u0026gt; 2.5.11 * [new tag] 2.5.12 -\u0026gt; 2.5.12 * [new tag] 2.5.2 -\u0026gt; 2.5.2 * [new tag] 2.5.3 -\u0026gt; 2.5.3 * [new tag] 2.5.4 -\u0026gt; 2.5.4 * [new tag] 2.5.5 -\u0026gt; 2.5.5 * [new tag] 2.5.6 -\u0026gt; 2.5.6 * [new tag] 2.5.7 -\u0026gt; 2.5.7 * [new tag] 2.5.8 -\u0026gt; 2.5.8 * [new tag] 2.5.9 -\u0026gt; 2.5.9 * [new tag] 2.6.0 -\u0026gt; 2.6.0 * [new tag] 2.6.1 -\u0026gt; 2.6.1 * [new tag] 2.6.2 -\u0026gt; 2.6.2 * [new tag] 2.7.0 -\u0026gt; 2.7.0 * [new tag] 2.7.1 -\u0026gt; 2.7.1 * [new tag] 2.7.2 -\u0026gt; 2.7.2 * [new tag] 2.7.3 -\u0026gt; 2.7.3 * [new tag] 2.7.4 -\u0026gt; 2.7.4 * [new tag] 2.7.5 -\u0026gt; 2.7.5 * [new tag] 2.7.6 -\u0026gt; 2.7.6 * [new tag] 2.7.7 -\u0026gt; 2.7.7 * [new tag] 3.0.0 -\u0026gt; 3.0.0 * [new tag] 3.0.1 -\u0026gt; 3.0.1 * [new tag] 3.0.10 -\u0026gt; 3.0.10 * [new tag] 3.0.11 -\u0026gt; 3.0.11 * [new tag] 3.0.2 -\u0026gt; 3.0.2 * [new tag] 3.0.3 -\u0026gt; 3.0.3 * [new tag] 3.0.4 -\u0026gt; 3.0.4 * [new tag] 3.0.5 -\u0026gt; 3.0.5 * [new tag] 3.0.6 -\u0026gt; 3.0.6 * [new tag] 3.0.7 -\u0026gt; 3.0.7 * [new tag] 3.0.8 -\u0026gt; 3.0.8 * [new tag] 3.0.9 -\u0026gt; 3.0.9 * [new tag] 3.1.0 -\u0026gt; 3.1.0 * [new tag] 3.1.1 -\u0026gt; 3.1.1 * [new tag] 3.1.10 -\u0026gt; 3.1.10 * [new tag] 3.1.11 -\u0026gt; 3.1.11 * [new tag] 3.1.12 -\u0026gt; 3.1.12 * [new tag] 3.1.2 -\u0026gt; 3.1.2 * [new tag] 3.1.3 -\u0026gt; 3.1.3 * [new tag] 3.1.4 -\u0026gt; 3.1.4 * [new tag] 3.1.5 -\u0026gt; 3.1.5 * [new tag] 3.1.6 -\u0026gt; 3.1.6 * [new tag] 3.1.7 -\u0026gt; 3.1.7 * [new tag] 3.1.8 -\u0026gt; 3.1.8 * [new tag] 3.1.9 -\u0026gt; 3.1.9 * [new tag] 3.2.0 -\u0026gt; 3.2.0 * [new tag] 3.2.1 -\u0026gt; 3.2.1 * [new tag] 3.2.10 -\u0026gt; 3.2.10 * [new tag] 3.2.11 -\u0026gt; 3.2.11 * [new tag] 3.2.12 -\u0026gt; 3.2.12 * [new tag] 3.2.13 -\u0026gt; 3.2.13 * [new tag] 3.2.14 -\u0026gt; 3.2.14 * [new tag] 3.2.15 -\u0026gt; 3.2.15 * [new tag] 3.2.16 -\u0026gt; 3.2.16 * [new tag] 3.2.17 -\u0026gt; 3.2.17 * [new tag] 3.2.2 -\u0026gt; 3.2.2 * [new tag] 3.2.3 -\u0026gt; 3.2.3 * [new tag] 3.2.4 -\u0026gt; 3.2.4 * [new tag] 3.2.5 -\u0026gt; 3.2.5 * [new tag] 3.2.6 -\u0026gt; 3.2.6 * [new tag] 3.2.7 -\u0026gt; 3.2.7 * [new tag] 3.2.8 -\u0026gt; 3.2.8 * [new tag] 3.2.9 -\u0026gt; 3.2.9 * [new tag] 3.3.0 -\u0026gt; 3.3.0 * [new tag] 3.3.1 -\u0026gt; 3.3.1 * [new tag] 3.3.10 -\u0026gt; 3.3.10 * [new tag] 3.3.11 -\u0026gt; 3.3.11 * [new tag] 3.3.12 -\u0026gt; 3.3.12 * [new tag] 3.3.13 -\u0026gt; 3.3.13 * [new tag] 3.3.14 -\u0026gt; 3.3.14 * [new tag] 3.3.15 -\u0026gt; 3.3.15 * [new tag] 3.3.16 -\u0026gt; 3.3.16 * [new tag] 3.3.2 -\u0026gt; 3.3.2 * [new tag] 3.3.3 -\u0026gt; 3.3.3 * [new tag] 3.3.4 -\u0026gt; 3.3.4 * [new tag] 3.3.5 -\u0026gt; 3.3.5 * [new tag] 3.3.6 -\u0026gt; 3.3.6 * [new tag] 3.3.7 -\u0026gt; 3.3.7 * [new tag] 3.3.8 -\u0026gt; 3.3.8 * [new tag] 3.3.9 -\u0026gt; 3.3.9 * [new tag] 3.4.0 -\u0026gt; 3.4.0 * [new tag] 3.4.1 -\u0026gt; 3.4.1 * [new tag] 3.4.10 -\u0026gt; 3.4.10 * [new tag] 3.4.11 -\u0026gt; 3.4.11 * [new tag] 3.4.2 -\u0026gt; 3.4.2 * [new tag] 3.4.3 -\u0026gt; 3.4.3 * [new tag] 3.4.4 -\u0026gt; 3.4.4 * [new tag] 3.4.5 -\u0026gt; 3.4.5 * [new tag] 3.4.6 -\u0026gt; 3.4.6 * [new tag] 3.4.7 -\u0026gt; 3.4.7 * [new tag] 3.4.8 -\u0026gt; 3.4.8 * [new tag] 3.4.9 -\u0026gt; 3.4.9 * [new tag] 3.5.0 -\u0026gt; 3.5.0 * [new tag] 3.5.1 -\u0026gt; 3.5.1 * [new tag] 3.5.10 -\u0026gt; 3.5.10 * [new tag] 3.5.2 -\u0026gt; 3.5.2 * [new tag] 3.5.3 -\u0026gt; 3.5.3 * [new tag] 3.5.4 -\u0026gt; 3.5.4 * [new tag] 3.5.5 -\u0026gt; 3.5.5 * [new tag] 3.5.6 -\u0026gt; 3.5.6 * [new tag] 3.5.7 -\u0026gt; 3.5.7 * [new tag] 3.5.8 -\u0026gt; 3.5.8 * [new tag] 3.5.9 -\u0026gt; 3.5.9 * [new tag] 3.6.0 -\u0026gt; 3.6.0 * [new tag] 3.6.1 -\u0026gt; 3.6.1 * [new tag] 3.6.10 -\u0026gt; 3.6.10 * [new tag] 3.6.11 -\u0026gt; 3.6.11 * [new tag] 3.6.12 -\u0026gt; 3.6.12 * [new tag] 3.6.13 -\u0026gt; 3.6.13 * [new tag] 3.6.14 -\u0026gt; 3.6.14 * [new tag] 3.6.15 -\u0026gt; 3.6.15 * [new tag] 3.6.16 -\u0026gt; 3.6.16 * [new tag] 3.6.17 -\u0026gt; 3.6.17 * [new tag] 3.6.18 -\u0026gt; 3.6.18 * [new tag] 3.6.19 -\u0026gt; 3.6.19 * [new tag] 3.6.2 -\u0026gt; 3.6.2 * [new tag] 3.6.20 -\u0026gt; 3.6.20 * [new tag] 3.6.21 -\u0026gt; 3.6.21 * [new tag] 3.6.3 -\u0026gt; 3.6.3 * [new tag] 3.6.4 -\u0026gt; 3.6.4 * [new tag] 3.6.5 -\u0026gt; 3.6.5 * [new tag] 3.6.6 -\u0026gt; 3.6.6 * [new tag] 3.6.7 -\u0026gt; 3.6.7 * [new tag] 3.6.8 -\u0026gt; 3.6.8 * [new tag] 3.6.9 -\u0026gt; 3.6.9 * [new tag] 4.0.0 -\u0026gt; 4.0.0 * [new tag] 4.0.1 -\u0026gt; 4.0.1 * [new tag] 4.0.10 -\u0026gt; 4.0.10 * [new tag] 4.0.11 -\u0026gt; 4.0.11 * [new tag] 4.0.2 -\u0026gt; 4.0.2 * [new tag] 4.0.3 -\u0026gt; 4.0.3 * [new tag] 4.0.4 -\u0026gt; 4.0.4 * [new tag] 4.0.5 -\u0026gt; 4.0.5 * [new tag] 4.0.6 -\u0026gt; 4.0.6 * [new tag] 4.0.7 -\u0026gt; 4.0.7 * [new tag] 4.0.8 -\u0026gt; 4.0.8 * [new tag] 4.0.9 -\u0026gt; 4.0.9 HEAD is now at c51687009 Merge pull request #15168 from reitermarkus/api-ruby-source-path ==\u0026gt; Installation successful! ==\u0026gt; Homebrew has enabled anonymous aggregate formulae and cask analytics. Read the analytics documentation (and how to opt-out) here: https://docs.brew.sh/Analytics No analytics data has been sent yet (nor will any be during this install run). ==\u0026gt; Homebrew is run entirely by unpaid volunteers. Please consider donating: https://github.com/Homebrew/brew#donations ==\u0026gt; Next steps: - Run these two commands in your terminal to add Homebrew to your PATH: (echo; echo \u0026#39;eval \u0026#34;$(/usr/local/bin/brew shellenv)\u0026#34;\u0026#39;) \u0026gt;\u0026gt; /Users/kenji/.zprofile eval \u0026#34;$(/usr/local/bin/brew shellenv)\u0026#34; - Run brew help to get started - Further documentation: https://docs.brew.sh Execute brew install cocoapods Saída 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 Warning: Treating cocoapods as a formula. For the cask, use homebrew/cask/cocoapods ==\u0026gt; Fetching dependencies for cocoapods: libyaml, ca-certificates, openssl@1.1, readline and ruby ==\u0026gt; Fetching libyaml ==\u0026gt; Downloading https://ghcr.io/v2/homebrew/core/libyaml/manifests/0.2.5 ######################################################################## 100.0% ==\u0026gt; Downloading https://ghcr.io/v2/homebrew/core/libyaml/blobs/sha256:b49e62f014 ==\u0026gt; Downloading from https://pkg-containers.githubusercontent.com/ghcr1/blobs/sh ######################################################################## 100.0% ==\u0026gt; Fetching ca-certificates ==\u0026gt; Downloading https://ghcr.io/v2/homebrew/core/ca-certificates/manifests/2023- ######################################################################## 100.0% ==\u0026gt; Downloading https://ghcr.io/v2/homebrew/core/ca-certificates/blobs/sha256:11 ==\u0026gt; Downloading from https://pkg-containers.githubusercontent.com/ghcr1/blobs/sh ######################################################################## 100.0% ==\u0026gt; Fetching openssl@1.1 ==\u0026gt; Downloading https://ghcr.io/v2/homebrew/core/openssl/1.1/manifests/1.1.1t ######################################################################## 100.0% ==\u0026gt; Downloading https://ghcr.io/v2/homebrew/core/openssl/1.1/blobs/sha256:97676d ==\u0026gt; Downloading from https://pkg-containers.githubusercontent.com/ghcr1/blobs/sh ######################################################################## 100.0% ==\u0026gt; Fetching readline ==\u0026gt; Downloading https://ghcr.io/v2/homebrew/core/readline/manifests/8.2.1 ######################################################################## 100.0% ==\u0026gt; Downloading https://ghcr.io/v2/homebrew/core/readline/blobs/sha256:abe9d3f3e ==\u0026gt; Downloading from https://pkg-containers.githubusercontent.com/ghcr1/blobs/sh ######################################################################## 100.0% ==\u0026gt; Fetching ruby ==\u0026gt; Downloading https://ghcr.io/v2/homebrew/core/ruby/manifests/3.2.2 ######################################################################## 100.0% ==\u0026gt; Downloading https://ghcr.io/v2/homebrew/core/ruby/blobs/sha256:a4ac080688e87 ==\u0026gt; Downloading from https://pkg-containers.githubusercontent.com/ghcr1/blobs/sh ######################################################################## 100.0% ==\u0026gt; Fetching cocoapods ==\u0026gt; Downloading https://ghcr.io/v2/homebrew/core/cocoapods/manifests/1.12.0 ######################################################################## 100.0% ==\u0026gt; Downloading https://ghcr.io/v2/homebrew/core/cocoapods/blobs/sha256:11226288 ==\u0026gt; Downloading from https://pkg-containers.githubusercontent.com/ghcr1/blobs/sh ######################################################################## 100.0% ==\u0026gt; Installing dependencies for cocoapods: libyaml, ca-certificates, openssl@1.1, readline and ruby ==\u0026gt; Installing cocoapods dependency: libyaml ==\u0026gt; Pouring libyaml--0.2.5.ventura.bottle.tar.gz 🍺 /usr/local/Cellar/libyaml/0.2.5: 10 files, 330KB ==\u0026gt; Installing cocoapods dependency: ca-certificates ==\u0026gt; Pouring ca-certificates--2023-01-10.all.bottle.tar.gz ==\u0026gt; Regenerating CA certificate bundle from keychain, this may take a while... 🍺 /usr/local/Cellar/ca-certificates/2023-01-10: 3 files, 216.9KB ==\u0026gt; Installing cocoapods dependency: openssl@1.1 ==\u0026gt; Pouring openssl@1.1--1.1.1t.ventura.bottle.tar.gz 🍺 /usr/local/Cellar/openssl@1.1/1.1.1t: 8,101 files, 18.5MB ==\u0026gt; Installing cocoapods dependency: readline ==\u0026gt; Pouring readline--8.2.1.ventura.bottle.tar.gz 🍺 /usr/local/Cellar/readline/8.2.1: 50 files, 1.7MB ==\u0026gt; Installing cocoapods dependency: ruby ==\u0026gt; Pouring ruby--3.2.2.ventura.bottle.tar.gz 🍺 /usr/local/Cellar/ruby/3.2.2: 16,605 files, 46.3MB ==\u0026gt; Installing cocoapods ==\u0026gt; Pouring cocoapods--1.12.0.ventura.bottle.tar.gz 🍺 /usr/local/Cellar/cocoapods/1.12.0: 13,436 files, 27.8MB ==\u0026gt; Running `brew cleanup cocoapods`... Disable this behaviour by setting HOMEBREW_NO_INSTALL_CLEANUP. Hide these hints with HOMEBREW_NO_ENV_HINTS (see `man brew`). Execute pod --version Saída 1 1.12.0 Parece que foi instalado com sucesso.\nReferências Installing \u0026ldquo;CocoaPods\u0026rdquo; ","date":"2023-04-09T03:25:54+09:00","image":"http://kenji.blog/p/mac%E3%81%ABcocoapods%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_1_hu5a3007afd3f7cdc4b526573a36fbeca4_11833_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/mac%E3%81%ABcocoapods%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/","title":"Como instalar o CocoaPods no mac"},{"content":"Como obter o número de registros criados por dia usando SOQL do Salesforce Abra o Developer Console. Abra a aba Query Editor. Cole e execute o seguinte SOQL. 1 select day_only(createdDate), count(createdDate) from account group by day_only(createdDate) order by count(createdDate) desc limit 10 Altere account para qualquer nome de objeto que você deseja obter e execute.\nReferência Is there a way to group by the date portion of a datetime field in SOQL? ","date":"2023-04-09T02:50:30+09:00","image":"http://kenji.blog/p/salesforce%E3%81%AEsoql%E3%82%92%E5%88%A9%E7%94%A8%E3%81%97%E3%81%A6%E6%97%A5%E5%88%A5%E3%81%AE%E3%83%AC%E3%82%B3%E3%83%BC%E3%83%89%E4%BD%9C%E6%88%90%E6%95%B0%E3%82%92%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_hub769e11b0a209a1986a31ec50fb9e2d1_10470_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/como-obter-o-n%C3%BAmero-de-registros-criados-por-dia-usando-soql-do-salesforce/","title":"Como obter o número de registros criados por dia usando SOQL do Salesforce"},{"content":"\nO que você precisa Conta do Google Passos Acesse https://colab.research.google.com/ Selecione \u0026ldquo;Arquivo\u0026rdquo; -\u0026gt; \u0026ldquo;Novo notebook\u0026rdquo; Cole e execute o código abaixo 1 2 3 4 5 6 7 import matplotlib.pyplot as plt import numpy as np x = np.linspace(0, 2*np.pi, 500) plt.plot(x, np.sin(x), label=\u0026#34;sin curve\u0026#34;) plt.plot(x, np.cos(x), label=\u0026#34;cos curve\u0026#34;) plt.legend() # Mostrar legenda plt.show() Resultado da execução Referências matplotlib.pyplot — Matplotlib 3.5.3 documentation ","date":"2023-04-09T01:02:19+09:00","image":"http://kenji.blog/p/pythonmatplotlib.pyplot%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%82%B0%E3%83%A9%E3%83%95%E3%82%92%E6%8F%8F%E7%94%BB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_hucdb24ab588d845f9f7a56ef99be2c709_27745_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/como-desenhar-gr%C3%A1ficos-usando-python-matplotlib.pyplot/","title":"Como desenhar gráficos usando Python (matplotlib.pyplot)"},{"content":"O que você precisa Twitter API Twitter API SECRET Twitter ACCESS TOKEN Twitter ACCESS TOKEN SECRET Conta do Google Consulte o site de referência para saber como obter a API do Twitter.\nPassos para twittar usando a API Acesse https://colab.research.google.com/ Selecione \u0026ldquo;Arquivo\u0026rdquo; -\u0026gt; \u0026ldquo;Novo notebook\u0026rdquo; Cole e execute o código abaixo (use seus próprios valores reais obtidos) 1 2 3 4 API_KEY = \u0026#39;9Smu2f2RoLqbVQHQq6n79Z2JW\u0026#39; API_SECRET = \u0026#39;uGVRIkLL2l8sRyPv2Lr4mXxXppnQF1isMoRnvktcXCtFgAK2R8\u0026#39; ACCESS_TOKEN = \u0026#39;0367292979164670705-7hSErDoQbO6fkFtnn5UY0vqpvecy0O\u0026#39; ACCESS_TOKEN_SECRET = \u0026#39;pUv81U9GVzZirz5g4AxZPHAJ4GpSXnBo8GUcZ1egtjw9q\u0026#39; Cole e execute o código abaixo 1 import tweepy Cole e execute o código abaixo (API v1.1) 1 2 3 4 auth = tweepy.OAuthHandler(API_KEY, API_SECRET) auth.set_access_token(ACCESS_TOKEN, ACCESS_TOKEN_SECRET) api = tweepy.API(auth) api.update_status(\u0026#34;hello\u0026#34;) → Um tweet dizendo hello será postado.\nCole e execute o código abaixo (API v2.0) 1 2 client = tweepy.Client(consumer_key=API_KEY, consumer_secret=API_SECRET, access_token=ACCESS_TOKEN, access_token_secret=ACCESS_TOKEN_SECRET) client.create_tweet(text=\u0026#39;hello v2\u0026#39;) → Um tweet dizendo hello v2 será postado.\nÉ isso.\nReferência 【A partir de abril de 2021】Explicação detalhada da solicitação de uso da API do Twitter com frases de exemplo de uso e capturas de tela 【Sem necessidade de configurações complicadas!】O Google Colaboratory é recomendado como um ambiente de teste para a API do Twitter 【Código-fonte também compartilhado】 【Tweepy】Twitter API v2: Tweets, respostas, tweets com enquetes, tweets com mídia (v1.1) [Python] ","date":"2023-04-08T18:48:32+09:00","image":"http://kenji.blog/p/twitter-api%E3%81%A8google-colaboratory%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6tweet%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_hu92a10d7ea1c17ea4dcc0d2e0b77b6296_75327_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/como-twittar-usando-a-api-do-twitter-e-o-google-colaboratory/","title":"Como twittar usando a API do Twitter e o Google Colaboratory"},{"content":"O que é o OpenSSL? É uma biblioteca de código aberto que fornece o processamento necessário para realizar comunicação criptografada.\nPara usá-lo a partir de um programa, como o código-fonte em C é publicado, você precisa compilá-lo para criar uma biblioteca.\nAbaixo, apresentamos o procedimento de compilação.\nPreparação do ambiente de compilação Perl\nBaixe o strawberry-perl-5.32.1.1-64bit.msi de https://strawberryperl.com/. A versão mais recente deve servir.\nNASM\nBaixe o 2.16.01/nasm-2.16.01-win64.zip em Download no site https://www.nasm.us/. A versão não-RC mais recente deve servir. Após a instalação, você precisa registrar a pasta onde o NASM está instalado na variável de ambiente PATH.\nVisual Studio 2022 ou Build Tools for Visual Studio 2022\nInstale o Visual Studio 2022 Community ou o Build Tools for Visual Studio 2022 a partir de https://visualstudio.microsoft.com/ja/downloads/.\nProcedimento de compilação do OpenSSL no Windows Baixe o openssl-3.1.0.tar.gz de https://www.openssl.org/source/ e extraia-o. Se não conseguir extrair, execute tar -xzf openssl-3.1.0.tar.gz no prompt de comando. Inicie o prompt de comando com privilégios de administrador. Abra a pasta extraída. Execute o seguinte comando. *Altere a parte Community para corresponder à versão instalada do Visual Studio. 1 \u0026#34;C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\VC\\Auxiliary\\Build\\vcvarsall.bat\u0026#34; x64 Execute o seguinte comando: 1 perl Configure VC-WIN64A Execute o seguinte comando (leva bastante tempo): 1 nmake Execute o seguinte comando (leva bastante tempo): 1 nmake test Execute o seguinte comando: 1 nmake install Se for bem-sucedido, o OpenSSL será instalado em C:\\Program Files\\OpenSSL.\nIsso é tudo.\nReferências https://ja.wikipedia.org/wiki/OpenSSL\n","date":"2023-04-07T21:06:32+09:00","image":"http://kenji.blog/p/windows-%E3%81%A7-openssl-%E3%82%92%E3%83%93%E3%83%AB%E3%83%89%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_hu856dff3329e4daff79f775d47e5cc35b_35659_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/windows-%E3%81%A7-openssl-%E3%82%92%E3%83%93%E3%83%AB%E3%83%89%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/","title":"Como compilar o OpenSSL no Windows"},{"content":"O que é i18n? i18n é a abreviação de Internationalization, que significa internacionalização. Como Internationalization é longo, é abreviado como i18n porque há 18 letras entre o primeiro i e o último n.\nÉ frequentemente usado no contexto da internacionalização de software.\nOs principais itens a serem considerados na internacionalização incluem o seguinte: 1\nConjunto de caracteres (código de caractere padrão, etc.) Direção do texto (da esquerda para a direita, da direita para a esquerda, de cima para baixo em direção à esquerda, etc.) Idioma / Texto Fontes Formatos Números (caractere de ponto decimal, caractere de separador de milhares, número de dígitos a agrupar, etc.) Data e hora (formato da data, diferenças nos calendários usados, como Islâmico / Gregoriano / Judaico / Japonês, etc.) Diferenças de fuso horário em informações de data e hora Informações sobre moeda Internacionalização e localização - Wikipedia\u0026#160;\u0026#x21a9;\u0026#xfe0e;\n","date":"2023-04-07T00:42:02+09:00","image":"http://kenji.blog/p/i18n%E3%81%A8%E3%81%AF/img_hu5547e5059a9dab53fb09979c54309752_11855_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/i18n%E3%81%A8%E3%81%AF/","title":"O que é i18n?"},{"content":"Como criar apresentações com HTML reveal.js é uma ferramenta de criação de apresentações usando HTML e Markdown, que possui as seguintes funções:\nVárias funções de apresentação, como fórmulas matemáticas, animações e operações de deslizar Temas e layouts personalizáveis Funções de navegação suportadas por vários dispositivos, como mouse, teclado e touchpad Funções avançadas, como reprodução automática de slides e vídeos incorporados Pode ser exportado no formato PDF Com esses recursos, os usuários podem criar facilmente apresentações interativas e atraentes.\nInstalação e uso do reveal.js A maneira mais fácil de usá-lo é baixar e extrair o ZIP inteiro da página a seguir.\nAbra https://revealjs.com/installation e baixe o master.zip no link Abra o arquivo index.html na pasta extraída em um navegador Reescreva o index.html para criar sua própria apresentação ※ Como o código HTML de demonstração está escrito em demo.html, você pode usá-lo como referência.\nComo utilizar As apresentações que você criar podem ser publicadas como páginas da web ou exportadas como PDFs. Além disso, como a fonte da apresentação é texto, é fácil gerenciá-la com um sistema de controle de versão.\nTambém parece ser possível criar materiais de apresentação no formato Markdown.\nReferências Vamos usar reveal.js para materiais de apresentação no futuro Lista de exemplos de sintaxe Markdown ","date":"2023-04-06T23:23:46+09:00","image":"http://kenji.blog/p/html%E3%81%A7%E3%83%97%E3%83%AC%E3%82%BC%E3%83%B3%E8%B3%87%E6%96%99%E3%82%92%E4%BD%9C%E3%82%8B%E6%96%B9%E6%B3%95reveal.js/img_hu4de64f3f6be8c50037c2a4c6c2d48287_30871_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/html%E3%81%A7%E3%83%97%E3%83%AC%E3%82%BC%E3%83%B3%E8%B3%87%E6%96%99%E3%82%92%E4%BD%9C%E3%82%8B%E6%96%B9%E6%B3%95reveal.js/","title":"Como criar apresentações com HTML (reveal.js)"},{"content":"O que é o Stable diffusion O Stable diffusion é uma IA desenvolvida por uma equipe de pesquisa da Universidade de Munique, na Alemanha, que gera imagens a partir de informações de texto fornecidas. Ao treinar com várias imagens, ele pode gerar uma variedade de imagens, desde fotografias até ilustrações.\nDesta vez, apresentarei como gerar imagens de ilustração usando os dados pré-treinados do Stable diffusion.\nO que você vai precisar Conta do Google Apenas isso\nProcedimento de geração Abra https://colab.research.google.com Selecione Arquivo no canto superior esquerdo e depois Novo notebook Selecione Editar e depois Configurações do notebook Altere o Acelerador de hardware para GPU Cole o código abaixo e execute 1 !pip install diffusers==0.8.0 transformers Cole o código abaixo e execute 1 from diffusers import StableDiffusionPipeline Cole o código abaixo e execute 1 2 pipe = StableDiffusionPipeline.from_pretrained(\u0026#34;gsdf/Counterfeit-V2.5\u0026#34;) pipe.to(\u0026#34;cuda\u0026#34;) Cole o código abaixo e execute 1 2 3 4 5 prompt = \u0026#34;((masterpiece,best quality)),1girl, solo, animal ears, rabbit, barefoot, knees up, dress, sitting, rabbit ears, short sleeves, looking at viewer, grass, short hair, smile, white hair, puffy sleeves, outdoors, puffy short sleeves, bangs, on ground, full body, animal, white dress, sunlight, brown eyes, dappled sunlight, day, depth of field\u0026#34; n_prompt = \u0026#34;EasyNegative, extra fingers,fewer fingers\u0026#34; image = pipe(prompt, negative_prompt = n_prompt).images[0] image O Prompt usado aqui é baseado no Prompt de https://huggingface.co/gsdf/Counterfeit-V2.5.\nResultados gerados (alguns) Referências https://huggingface.co/gsdf/Counterfeit-V2.5 Criei um programa de geração de imagens usando Inteligência Artificial (IA) em 15 minutos 【Programação ao vivo】 ","date":"2023-04-06T00:43:19+09:00","image":"http://kenji.blog/p/aistablediffusion%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%82%A4%E3%83%A9%E3%82%B9%E3%83%88%E7%94%BB%E5%83%8F%E7%94%9F%E6%88%90%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_hu25483e02f36587a64f3cf042db15c245_550570_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/aistablediffusion%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%82%A4%E3%83%A9%E3%82%B9%E3%83%88%E7%94%BB%E5%83%8F%E7%94%9F%E6%88%90%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/","title":"Como gerar imagens de ilustração usando IA (Stable Diffusion)"},{"content":"O que é um arquivo executável (exe) Um arquivo que pode ser executado no Windows. Basicamente, ele é escrito em um formato chamado formato PE. Ele contém o código de linguagem de máquina para execução e recursos como ícones e imagens.\nExistem várias ferramentas para analisar arquivos executáveis, e nós as apresentaremos desta vez.\n7-Zip Como os arquivos EXE tendem a ser grandes, eles podem ser criados por compactação de arquivo. Nesse caso, ao usar o 7-Zip, um software de compactação e descompactação de arquivos, você pode extrair o arquivo executável e examinar seu conteúdo. Também existe uma ferramenta chamada WinRAR que pode ser extraída da mesma maneira.\nResource Hacker Você pode extrair recursos (ícones, bitmaps, caixas de diálogo, strings, etc.) em um arquivo EXE. Ele também funciona como um editor hexadecimal, portanto, você pode editar e reescrever o conteúdo do arquivo EXE.\nPE Explorer Você pode analisar arquivos PE (EXE, DLL, OCX, SYS, drivers) para Windows. O PE Explorer oferece vários recursos de análise, como visualização da estrutura do arquivo, visualização do cabeçalho do arquivo, visualização das entradas do diretório e visualização das funções e símbolos exportados.\nDependency Walker Você pode descobrir de quais arquivos DLL o arquivo EXE depende e verificar se eles foram carregados corretamente. Você também pode rastrear chamadas de função de arquivos DLL.\nGhidra É uma poderosa ferramenta de engenharia reversa desenvolvida pela NSA (Agência de Segurança Nacional dos EUA) e lançada gratuitamente como código aberto. É muito popular porque não só desmonta arquivos EXE (os converte para linguagem assembly), mas também tem uma função de descompilação para um formato próximo à linguagem C.\nIDA Free / IDA Pro É um desmontador e descompilador de alto desempenho que se tornou o padrão global da indústria em análise de malware e engenharia reversa. A versão Pro é muito cara, mas se for para uso pessoal ou não comercial, você pode usar a versão de função limitada \u0026ldquo;IDA Free\u0026rdquo; gratuitamente.\nx64dbg (x32dbg) É um depurador de código aberto para Windows. Ele é especializado em \u0026ldquo;análise dinâmica\u0026rdquo;, onde o conteúdo e o estado da memória são analisados passo a passo enquanto o arquivo executável é executado, e é frequentemente usado para decifrar crackmes (programas de desafio para análise) e investigar o comportamento de malware.\nILSpy / dotPeek Se o arquivo EXE alvo for criado em uma linguagem .NET como C#, usando essas ferramentas, você pode descompilar o arquivo para um estado quase idêntico ao código-fonte original e ver o que está dentro.\nEssas ferramentas são úteis para descobrir o que está dentro de um arquivo EXE, mas você precisa ter cuidado. Editar o arquivo ou usá-lo para fins maliciosos pode causar problemas de direitos autorais ou de segurança, portanto, certifique-se de entender isso completamente antes de usá-las.\n","date":"2023-04-05T23:31:06+09:00","image":"http://kenji.blog/p/%E5%AE%9F%E8%A1%8C%E3%83%95%E3%82%A1%E3%82%A4%E3%83%ABexe%E3%81%AE%E4%B8%AD%E8%BA%AB%E3%82%92%E8%A7%A3%E6%9E%90%E3%81%99%E3%82%8B%E3%83%84%E3%83%BC%E3%83%AB/img_1_hu9e069acaa7fdaa872d319a8c6d6e1444_1819799_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/ferramentas-para-analisar-o-conteudo-de-arquivos-executaveis-exe/","title":"Ferramentas para analisar o conteúdo de arquivos executáveis (exe)"},{"content":"Introdução Aqui mostrarei como alternar aplicativos no Mac de forma semelhante ao Windows (Alt+Tab).\nComo é difícil conseguir isso alterando as configurações padrão, este método envolve a instalação de um aplicativo.\nImagem de demonstração Método de configuração (macOS Ventura) Abra https://alt-tab-macos.netlify.app Clique em Download the latest release Abra o aplicativo baixado Siga as instruções para instalá-lo Agora, você poderá alternar entre aplicativos usando Alt+Tab, assim como no Windows.\nIsso é tudo\n","date":"2023-04-05T02:20:12+09:00","image":"http://kenji.blog/p/mac%E3%81%A7windows%E3%83%A9%E3%82%A4%E3%82%AFalt-tab%E3%81%AB%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E5%88%87%E3%82%8A%E6%9B%BF%E3%81%88%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_hu9e86c898d72728906fc707b47dff25e0_55585_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/mac%E3%81%A7windows%E3%83%A9%E3%82%A4%E3%82%AFalt-tab%E3%81%AB%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E5%88%87%E3%82%8A%E6%9B%BF%E3%81%88%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/","title":"Como alternar aplicativos no Mac como no Windows (Alt+Tab)"},{"content":"Introdução Ao alternar entre o Windows e o mac, as teclas frequentemente usadas para copiar, colar e desfazer por atalho de teclado são diferentes, por isso vou mostrar como combiná-las.\nMétodo de configuração (macOS Ventura) Abra as Configurações do Sistema Selecione Teclado Selecione Atalhos de Teclado Selecione Teclas Modificadoras Atribua a tecla Control(^) para \u0026ldquo;⌘ Command\u0026rdquo; Atribua a tecla Command(⌘) para \u0026ldquo;^ Control\u0026rdquo; Clique em Concluído Fim\n","date":"2023-04-05T00:49:02+09:00","image":"http://kenji.blog/p/mac%E3%81%A7%E3%82%B3%E3%83%94%E3%83%BC%E3%83%9A%E3%83%BC%E3%82%B9%E3%83%88%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E3%82%AD%E3%83%BC%E3%82%92windows%E3%81%A8%E5%90%88%E3%82%8F%E3%81%9B%E3%82%8B%E6%96%B9%E6%B3%95/img_hu81c2d0d61c05f6ce24b15f479442c3bc_211588_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/mac%E3%81%A7%E3%82%B3%E3%83%94%E3%83%BC%E3%83%9A%E3%83%BC%E3%82%B9%E3%83%88%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E3%82%AD%E3%83%BC%E3%82%92windows%E3%81%A8%E5%90%88%E3%82%8F%E3%81%9B%E3%82%8B%E6%96%B9%E6%B3%95/","title":"Como combinar a tecla de atalho de copiar e colar no mac com o Windows"},{"content":"Introdução Eu uso um teclado US e no Windows eu alterno a entrada de japonês com Alt + `. Eu queria alternar com a mesma tecla no mac, e pesquisando descobri que é possível alterar isso nas configurações.\nMétodo de configuração (macOS Ventura) Abra as Preferências do Sistema Selecione Teclado Selecione Atalhos de Teclado Selecione Fontes de Entrada Clique duas vezes no atalho à direita de \u0026ldquo;Selecionar a fonte seguinte no menu de entrada\u0026rdquo; Pressione Alt + ` Clique em Concluído Com isso, você pode alternar entre inglês ⇔ japonês com Alt + `. No entanto, por padrão, o Katakana é incluído na alternância, então removi o Katakana da fonte de entrada seguindo os passos abaixo.\nAbra as Preferências do Sistema Selecione Teclado Clique em Editar à direita de Japonês - Romaji nas Fontes de Entrada Clique em Japonês - Romaji Desmarque a opção Katakana no Modo de Entrada Clique em Concluído Fim\n","date":"2023-04-04T23:02:12+09:00","image":"http://kenji.blog/p/mac%E3%81%A7%E6%97%A5%E6%9C%AC%E8%AA%9E%E8%8B%B1%E8%AA%9E%E5%85%A5%E5%8A%9B%E5%88%87%E3%82%8A%E6%9B%BF%E3%81%88%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E3%82%AD%E3%83%BC%E3%82%92%E5%A4%89%E6%9B%B4%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_hu79c9b62a36c4ad9394525ea6ed769587_198703_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/mac%E3%81%A7%E6%97%A5%E6%9C%AC%E8%AA%9E%E8%8B%B1%E8%AA%9E%E5%85%A5%E5%8A%9B%E5%88%87%E3%82%8A%E6%9B%BF%E3%81%88%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E3%82%AD%E3%83%BC%E3%82%92%E5%A4%89%E6%9B%B4%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/","title":"Como alterar o atalho de teclado para alternar a entrada entre japonês e inglês no mac"},{"content":"Como encontrar a localização de um arquivo executável no PATH do Windows Quando você executa um comando especificando um arquivo executável, há momentos em que deseja saber onde esse arquivo executável está localizado. Nesses casos, você pode descobrir a localização do arquivo executável com o seguinte comando.\n1 where \u0026lt;nome_do_arquivo_executável\u0026gt; Por exemplo, se você quiser saber a localização do Paint (mspaint.exe), faça o seguinte:\n1 where mspaint.exe Referências How do I find the location of an executable in Windows? ","date":"2023-04-03T00:02:55+09:00","image":"http://kenji.blog/p/windows-%E3%81%A7%E3%83%91%E3%82%B9%E3%81%AE%E9%80%9A%E3%81%A3%E3%81%9F%E5%AE%9F%E8%A1%8C%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E5%A0%B4%E6%89%80%E3%82%92%E8%A6%8B%E3%81%A4%E3%81%91%E3%82%8B%E6%96%B9%E6%B3%95/img_hub74cf0d67f87eb185fadea6cd8747be8_5455_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/windows-%E3%81%A7%E3%83%91%E3%82%B9%E3%81%AE%E9%80%9A%E3%81%A3%E3%81%9F%E5%AE%9F%E8%A1%8C%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E5%A0%B4%E6%89%80%E3%82%92%E8%A6%8B%E3%81%A4%E3%81%91%E3%82%8B%E6%96%B9%E6%B3%95/","title":"Como encontrar a localização de um arquivo executável no PATH do Windows"},{"content":"Comprei um mac mini (2018) Comprei um mac mini (2018) usado no Mercari. As especificações são as seguintes.\nCPU: Intel Core i7 de 6 núcleos e 3,2 GHz Memória: 32 GB Armazenamento: SSD de 1 TB O preço foi de ￥ 77.000\nMotivo da compra Uso um mac mini com especificações quase idênticas no trabalho para desenvolver aplicativos móveis, mas também queria configurar um ambiente de desenvolvimento em casa (especialmente para executar o xcode). Tenho um macbook pro, mas como o comprei há 9 anos, é muito lento e quase não o uso. Queria desenvolver pessoalmente aplicativos para iOS. Instalando o xcode e o inteliJ IDEA imediatamente A versão do xcode é a Versão 14.3 (14E222b) A versão do inteliJ IDEA é a 2023.1 Vamos começar a desenvolver!\n","date":"2023-04-02T18:05:30+09:00","image":"http://kenji.blog/p/mac-mini2018%E3%82%92%E8%B3%BC%E5%85%A5/img_huc5df0470d74ce7a0046f11abaa7c5815_30469_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/mac-mini2018%E3%82%92%E8%B3%BC%E5%85%A5/","title":"Comprei um mac mini (2018)"},{"content":"Sobre o \u0026ldquo;Unsplash\u0026rdquo; https://unsplash.com/ja/\nO site de material fotográfico \u0026ldquo;Unsplash\u0026rdquo; pode ser resumido da seguinte forma:\nTodas as imagens podem ser usadas gratuitamente Uso comercial permitido Modificação de imagem permitida Nenhuma permissão é necessária Não requer atribuição de crédito É muito fácil de usar ao escrever artigos para blogs, então não deixe de experimentar.\n※ Para obter informações sobre a licença, consulte a \u0026ldquo;Nota de rodapé\u0026rdquo; abaixo. 1\nTambém usaremos este site.\nLicença do Unsplash\u0026#160;\u0026#x21a9;\u0026#xfe0e;\n","date":"2023-04-02T14:44:17+09:00","image":"http://kenji.blog/p/%E3%83%96%E3%83%AD%E3%82%B0%E3%81%A7%E4%BD%BF%E3%81%88%E3%82%8B%E5%86%99%E7%9C%9F%E7%B4%A0%E6%9D%90%E3%82%B5%E3%82%A4%E3%83%88unsplash%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/img_1_hu43cbd10eab78d2e7468dbb36abe8d794_828454_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/sobre-o-site-de-material-fotografico-para-blogs-unsplash/","title":"Sobre o site de material fotográfico para blogs \"Unsplash\""},{"content":"Obtenha a amostra do egui Você pode executar a amostra do egui com o seguinte comando.\n1 2 3 git clone https://github.com/emilk/eframe_template/ egui_test cd egui_test cargo run Carregue uma fonte compatível com japonês Para exibir texto em japonês, você deve carregar uma fonte que suporte o idioma japonês.\nNo arquivo src/app.rs, adicione as seguintes linhas dentro do método pub fn new.\n1 2 3 4 5 6 7 8 9 10 11 12 // Carregar a fonte compatível com japonês let mut fonts = egui::FontDefinitions::default(); fonts.font_data.insert( \u0026#34;Meiryo\u0026#34;.to_owned(), egui::FontData::from_static(include_bytes!(\u0026#34;C:/Windows/Fonts/Meiryo.ttc\u0026#34;)), ); fonts .families .entry(egui::FontFamily::Proportional) .or_default() .insert(0, \u0026#34;Meiryo\u0026#34;.to_owned()); cc.egui_ctx.set_fonts(fonts); Agora você pode exibir japonês. ","date":"2023-04-01T03:17:52+09:00","image":"http://kenji.blog/p/egui%E3%81%A7%E6%97%A5%E6%9C%AC%E8%AA%9E%E3%82%92%E8%A1%A8%E7%A4%BA%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_hu6798dc327f7454fc6cd8b8de1315ab03_5786_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/como-exibir-japones-no-egui/","title":"Como exibir japonês no egui"},{"content":"O que é KaTeX KaTeX é uma biblioteca javascript para exibir fórmulas no estilo LaTeX em HTML.\nEspecificamente, você pode exibir fórmulas como a abaixo.\n$$f(x) = x^2 + x + 41$$ Parece haver outras bibliotecas de exibição de fórmulas no estilo LaTeX, mas o KaTeX tem a reputação de ser simples e rápido.\nComo introduzir no hugo Crie um novo layouts/partials/math.html na hierarquia de pastas do hugo. O conteúdo deve ser o seguinte.\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 \u0026lt;link rel=\u0026#34;stylesheet\u0026#34; href=\u0026#34;https://cdn.jsdelivr.net/npm/katex@0.16.4/dist/katex.min.css\u0026#34; integrity=\u0026#34;sha384-vKruj+a13U8yHIkAyGgK1J3ArTLzrFGBbBc0tDp4ad/EyewESeXE/Iv67Aj8gKZ0\u0026#34; crossorigin=\u0026#34;anonymous\u0026#34;\u0026gt; \u0026lt;script defer src=\u0026#34;https://cdn.jsdelivr.net/npm/katex@0.16.4/dist/katex.min.js\u0026#34; integrity=\u0026#34;sha384-PwRUT/YqbnEjkZO0zZxNqcxACrXe+j766U2amXcgMg5457rve2Y7I6ZJSm2A0mS4\u0026#34; crossorigin=\u0026#34;anonymous\u0026#34;\u0026gt;\u0026lt;/script\u0026gt; \u0026lt;script defer src=\u0026#34;https://cdn.jsdelivr.net/npm/katex@0.16.4/dist/contrib/auto-render.min.js\u0026#34; integrity=\u0026#34;sha384-+VBxd3r6XgURycqtZ117nYw44OOcIax56Z4dCRWbxyPt0Koah1uHoK0o4+/RRE05\u0026#34; crossorigin=\u0026#34;anonymous\u0026#34;\u0026gt;\u0026lt;/script\u0026gt; \u0026lt;script\u0026gt; document.addEventListener(\u0026#34;DOMContentLoaded\u0026#34;, function() { renderMathInElement( document.body, { delimiters: [ {left: \u0026#34;$$\u0026#34;, right: \u0026#34;$$\u0026#34;, display: true}, {left: \u0026#34;\\\\[\u0026#34;, right: \u0026#34;\\\\]\u0026#34;, display: true}, {left: \u0026#34;$\u0026#34;, right: \u0026#34;$\u0026#34;, display: false}, {left: \u0026#34;\\\\(\u0026#34;, right: \u0026#34;\\\\)\u0026#34;, display: false} ] }); }); \u0026lt;/script\u0026gt; Em seguida, adicione o código abaixo ao arquivo existente layouts/partials/extend_head.html. 1 2 3 {{ if or .Params.math .Site.Params.math }} {{ partial \u0026#34;math.html\u0026#34; . }} {{ end }} Agora você está pronto para usar o KaTeX. Você pode habilitar o KaTeX adicionando math: true ao front matter da página.\nTudo o que resta é escrever a fórmula no estilo LaTeX no corpo do artigo da página. 1 $$ e^{i \\pi} = -1 $$ Ao escrever como acima, será exibido como abaixo.\n$$ e^{i \\pi} = -1 $$ Referência Math Typesetting | PaperModX KaTex Auto-render Extension Introdução ao KaTeX | The Strange Storage ","date":"2023-03-31T23:11:26+09:00","image":"http://kenji.blog/p/hugo%E3%81%A7katexlatex%E9%A2%A8%E6%95%B0%E5%BC%8F%E8%A1%A8%E7%A4%BA%E3%82%92%E6%9C%89%E5%8A%B9%E3%81%AB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_hu4b1d83d24aac47c2cd375cc93b995e98_26739_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/como-habilitar-katex-no-hugo/","title":"Como habilitar KaTeX (exibição de fórmulas no estilo LaTeX) no hugo"},{"content":"Como Fazer Amigos e Influenciar Pessoas https://amzn.to/3YTv0Dr\nA Coragem de Não Agradar https://amzn.to/3n3SVCQ\nLIFE SHIFT A Estratégia de Vida para a Era dos 100 Anos https://amzn.to/3TtKUDf\nOs 7 Hábitos das Pessoas Altamente Eficazes https://amzn.to/3TqfjSO\n","date":"2023-03-19T18:13:14+09:00","image":"http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AE%E3%83%93%E3%82%B8%E3%83%8D%E3%82%B9%E6%9B%B8/img_huc9a897f0643b20664d8e252d3dd67b22_2836610_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/livros-de-negocios-recomendados/","title":"Livros de Negócios Recomendados"},{"content":"Extensões Recomendadas do Chrome Aqui estão as extensões do Chrome que uso atualmente. Apesar de serem para o Chrome, também podem ser usadas no Microsoft Edge.\n1. simpleGestures É uma extensão que permite usar gestos do mouse. Você pode operar o navegador sem usar o teclado ou mirar nos botões da barra de ferramentas.\nPor exemplo, você pode voltar deslizando o mouse para a esquerda enquanto segura o botão direito, ou avançar deslizando para a direita enquanto segura o botão direito.\nComo também é de código aberto, é altamente confiável.\nsimpleGestures github 2. uBlock Origin Uma extensão para bloquear anúncios. Por ser de código aberto, é altamente confiável. Além disso, usa pouca CPU e memória, funcionando de forma rápida e confortável.\nuBlock Origin github 3. Tradutor DeepL Uma extensão do Chrome que permite traduzir a página usando o mundialmente famoso serviço de tradução DeepL. Quando você seleciona o texto que deseja traduzir no navegador, o ícone do DeepL aparece e, ao clicar, ele é traduzido automaticamente.\nDeepL Translator 4. ChatGPT Sidebar Uma extensão para usar o ChatGPT em uma barra lateral. Você pode exibir a barra lateral com Ctrl+P e fazer perguntas à IA imediatamente. Se houver texto selecionado na página, ele será copiado diretamente para a pergunta, então você pode perguntar imediatamente com Ctrl+Enter.\nChatGPT Sidebar 5. Salesforce DevTools Uma extensão que adiciona recursos úteis para o desenvolvimento no Salesforce. Acredito que não seja necessária para quem não usa o Salesforce.\nSalesforce DevTools ","date":"2023-03-19T02:54:30+09:00","image":"http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AE-chorme-%E6%8B%A1%E5%BC%B5/img_4_hue5f33cff57d8628a1113ed27818b8d04_20776_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AE-chorme-%E6%8B%A1%E5%BC%B5/","title":"Extensões Recomendadas do Chrome"},{"content":"Como atualizar o rustc Basta executar a seguinte linha de comando.\n1 rustup update Referência de saída 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 rustup update info: syncing channel updates for \u0026#39;stable-x86_64-pc-windows-msvc\u0026#39; warning: Signature verification failed for \u0026#39;https://static.rust-lang.org/dist/channel-rust-stable.toml\u0026#39; info: latest update on 2023-03-09, rust version 1.68.0 (2c8cc3432 2023-03-06) info: downloading component \u0026#39;rust-src\u0026#39; info: downloading component \u0026#39;cargo\u0026#39; info: downloading component \u0026#39;clippy\u0026#39; info: downloading component \u0026#39;rust-docs\u0026#39; info: downloading component \u0026#39;rust-std\u0026#39; info: downloading component \u0026#39;rustc\u0026#39; 63.9 MiB / 63.9 MiB (100 %) 37.5 MiB/s in 1s ETA: 0s info: downloading component \u0026#39;rustfmt\u0026#39; info: removing previous version of component \u0026#39;rust-src\u0026#39; info: removing previous version of component \u0026#39;cargo\u0026#39; info: removing previous version of component \u0026#39;clippy\u0026#39; info: removing previous version of component \u0026#39;rust-docs\u0026#39; info: removing previous version of component \u0026#39;rust-std\u0026#39; info: removing previous version of component \u0026#39;rustc\u0026#39; info: removing previous version of component \u0026#39;rustfmt\u0026#39; info: installing component \u0026#39;rust-src\u0026#39; info: installing component \u0026#39;cargo\u0026#39; info: installing component \u0026#39;clippy\u0026#39; info: installing component \u0026#39;rust-docs\u0026#39; 19.4 MiB / 19.4 MiB (100 %) 2.4 MiB/s in 6s ETA: 0s info: installing component \u0026#39;rust-std\u0026#39; 27.6 MiB / 27.6 MiB (100 %) 12.7 MiB/s in 2s ETA: 0s info: installing component \u0026#39;rustc\u0026#39; 63.9 MiB / 63.9 MiB (100 %) 13.8 MiB/s in 4s ETA: 0s info: installing component \u0026#39;rustfmt\u0026#39; info: checking for self-updates info: downloading self-update stable-x86_64-pc-windows-msvc updated - rustc 1.68.0 (2c8cc3432 2023-03-06) (from rustc 1.64.0 (a55dd71d5 2022-09-19)) info: cleaning up downloads \u0026amp; tmp directories ","date":"2023-03-18T10:27:02+09:00","image":"http://kenji.blog/p/rustc%E3%82%92%E3%82%A2%E3%83%83%E3%83%97%E3%83%87%E3%83%BC%E3%83%88%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_hu2f4438039b9bb5f2180f9e10d772e3b3_30692_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/rustc%E3%82%92%E3%82%A2%E3%83%83%E3%83%97%E3%83%87%E3%83%BC%E3%83%88%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/","title":"Como atualizar o rustc"},{"content":"O que é o egui É uma biblioteca GUI que pode ser usada no Rust.\nExperimentando o egui Você pode executar o exemplo do egui com os seguintes comandos.\n1 2 3 git clone https://github.com/emilk/eframe_template/ egui_test cd egui_test cargo run Depois, você pode experimentar várias coisas enquanto brinca com o código de exemplo.\nReferência GitHub oficial\n","date":"2023-03-18T10:27:02+09:00","image":"http://kenji.blog/p/egui%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%BF%E3%82%8B/demo_hu16f50e8d6a05810ce904e73f9e33bab1_152754_120x120_fill_box_smart1_1.gif","permalink":"http://kenji.blog/pt/p/egui%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%BF%E3%82%8B/","title":"Experimentando o egui"},{"content":"Como eliminar o ruído no YAMAHA AG03 Ao ouvir o áudio do PC através do monitor do AG03, notava-se um ruído de estática periodicamente (cerca de 1 a 3 minutos). Ao pesquisar, descobri que o seguinte método pode resolver problemas de ruído no AG03.\nhttps://jp.yamaha.com/support/updates/yamaha_steinberg_usb_driver_for_win.html\nDepois de baixar e instalar o Yamaha Steinberg USB Driver a partir do site acima, o ruído desapareceu.\n今すぐ購入 Referências https://web.archive.org/web/20201003230738/http://yamaha.custhelp.com/app/answers/detail/a_id/7202\n","date":"2023-03-18T01:17:10+09:00","image":"http://kenji.blog/p/ag03%E3%83%8E%E3%82%A4%E3%82%BA%E8%A7%A3%E6%B6%88%E6%96%B9%E6%B3%95/img_hu7b60ee71c94898202eca721f7c6778b5_180745_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/ag03%E3%83%8E%E3%82%A4%E3%82%BA%E8%A7%A3%E6%B6%88%E6%96%B9%E6%B3%95/","title":"Como eliminar o ruído no AG03"},{"content":"Equipamentos de PC Recomendados e Desejados por um Engenheiro Ativo Teclado Sem dúvida, os teclados com chave capacitiva sem contato são altamente recomendados, pois são muito duráveis. Eu tenho um RealForce há mais de 10 anos e ainda o uso no meu dia a dia. O tipo que estou usando é o layout em inglês, silencioso.\nNo entanto, recentemente, o teclado Logitech MX Keys também chamou a minha atenção.\nTrackball Para dispositivos apontadores, os trackballs são recomendados em vez de mouses, pois ajudam a reduzir a fadiga.\nO que eu uso é o Logitech MX Ergo. Este é um dispositivo caro, custando mais de 10 mil ienes, mas acredito que vale mais do que esse valor.\nTambém estou interessado no DEFT PRO(M-DPT1MRXBK), que é operado com o dedo indicador e médio com uma bola maior. Monitor Qualquer monitor serve, mas monitores 4K de alta resolução são recomendados.\nAtualmente uso um monitor 4K da DELL.\nAgora, eu gostaria de ter um monitor widescreen como o monitor da EIZO ou o monitor da DELL.\n","date":"2023-02-28T00:51:49+09:00","image":"http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AEpc%E5%91%A8%E8%BE%BA%E6%A9%9F%E5%99%A8/img_hu9c34821fcae33240cf8bba1055606dc6_434960_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AEpc%E5%91%A8%E8%BE%BA%E6%A9%9F%E5%99%A8/","title":"Equipamentos de PC Recomendados"},{"content":"Serviço para usar web fonts pagas fontplus.jp https://fontplus.jp/\nPor 1.100 ienes por mês, todas as fontes podem ser usadas e há suporte para uso em vários sites.\n","date":"2023-02-07T20:59:01+09:00","image":"http://kenji.blog/p/fontplus.jp/img_hu81cfc4bed02bb5cdb36d3ac7fae3e538_91722_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/fontplus.jp/","title":"Sobre fontplus.jp"},{"content":"Por padrão, o HUGO não permite o uso de tags HTML em artigos, mas você pode ativá-lo adicionando a seguinte descrição ao config.toml.\n1 2 [markup.goldmark.renderer] unsafe = true Referência: Configure Markup\n","date":"2023-01-17T19:20:32+09:00","image":"http://kenji.blog/p/hugo%E3%81%A7html%E3%82%BF%E3%82%B0%E3%82%92%E4%BD%BF%E3%81%86/img_hu415dc7e70376ac350673d0366f70ca4b_19909_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/usando-tags-html-no-hugo/","title":"Usando tags HTML no HUGO"},{"content":"Procurando por Patrocinadores no GitHub Ficaria muito feliz se você pudesse se tornar um patrocinador no GitHub através do botão abaixo.\nSerá utilizado para o desenvolvimento de ferramentas, etc.\nQuero me esforçar até conseguir obter um certificado de assinatura de código!\n","date":"2023-01-17T18:13:56+09:00","image":"http://kenji.blog/p/github%E3%82%B9%E3%83%9D%E3%83%B3%E3%82%B5%E3%83%BC%E5%8B%9F%E9%9B%86/img_hueb38a852fa4aae54f384564ce61ae26b_130999_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/procurando-por-patrocinadores-no-github/","title":"Procurando por Patrocinadores no GitHub"},{"content":"O que é um botão Um botão é um dos controles de GUI e pode ser implementado usando a API padrão do Windows. Ao clicar em uma área da tela (pressionar e soltar o botão esquerdo do mouse), você pode executar um processo especificado no programa.\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 // Criando um botão CreateWindow( TEXT(\u0026#34;BUTTON\u0026#34;), TEXT(\u0026#34;Close\u0026#34;), WS_CHILD|WS_VISIBLE, 10,10,128,30, hWnd, (HMENU)ID_BUTTON1, ((LPCREATESTRUCT)lParam)-\u0026gt;hInstance, 0); ... // Uma mensagem WM_COMMAND é enviada pelo SO para a janela quando clicado. case WM_COMMAND: switch(LOWORD(wParam)) { case ID_BUTTON1: SendMessage(hWnd,WM_CLOSE,0,0); break; } break; O código de amostra está postado abaixo. button\n","date":"2023-01-14T20:24:00+09:00","image":"http://kenji.blog/p/%E3%83%9C%E3%82%BF%E3%83%B3%E3%81%A4%E3%81%84%E3%81%A6/img_hu07b471bb746fa184ff8eeb6f561670e7_8164_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/%E3%83%9C%E3%82%BF%E3%83%B3%E3%81%A4%E3%81%84%E3%81%A6/","title":"Sobre o Botão"},{"content":"Comprei um Laptop ThinkPad (Usado) A maior parte do meu trabalho em laptops é feita acessando outros terminais através de conexão de área de trabalho remota, então não preciso de um PC de alta especificação. Um ChromeBook teria sido bom, mas como não havia designs bons ou altas resoluções, comprei um ThinkPad.\nAs especificações estão abaixo e o preço foi em torno de 55.000 ienes usando vários pontos.\nThinkPad T470s CPU: Intel Core i7 7600U RAM: 24GB SSD: 512GB OS: Windows 10 Pro 64bit Tela: 14,0 polegadas wide (painel antirreflexo) Resolução: LCD WQHD 2560×1440 Peso: Aprox. 1,32 kg Notas: Teclado em inglês Como é usado, pensei que pudesse haver sinais de uso ou arranhões, mas não há nenhum problema, o que é ótimo. A bateria está funcionando sem problemas até agora.\nInsatisfações atuais Faltam as teclas Pause e App. Eu usava a tecla Pause como atalho para abrir as configurações do sistema. Além disso, eu usava a tecla App para abrir o menu pop-up, por isso é inconveniente não tê-la. As teclas PageUp e PageDown estão bem próximas das teclas de seta do teclado, então costumo pressioná-las por engano. Isso pode ser uma questão de costume. Outros PCs que considerei, mas não comprei ASUS Chromebook Flip C436FA (C436FA-ENG) Laptop HP HP15s-fq Referências: ThinkPad T470s\n","date":"2023-01-13T19:07:00+09:00","image":"http://kenji.blog/p/thinkpad%E4%B8%AD%E5%8F%A4%E3%82%92%E8%B2%B7%E3%81%A3%E3%81%9F/img_hu1990736b7e8b9be3011f0d8e6938401f_246116_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/thinkpad%E4%B8%AD%E5%8F%A4%E3%82%92%E8%B2%B7%E3%81%A3%E3%81%9F/","title":"Comprei um ThinkPad (Usado)"},{"content":"Conexão Remota Fácil com TeamViewer Com o TeamViewer, a conexão de área de trabalho remota pode ser feita facilmente.\nInicie o TeamViewer no destino e na origem remotas, e insira o ID e a senha do destino na origem para realizar a conexão remota.\nPara conectar remotamente usando a linha de comando, faça o seguinte:\n1 %ProgramFiles%\\TeamViewer\\TeamViewer.exe -i \u0026lt;ID\u0026gt; -P \u0026lt;Password\u0026gt; Em \u0026lt;ID\u0026gt;, insira o ID de destino e em \u0026lt;Password\u0026gt;, a senha de destino.\nSe você criar um arquivo de atalho com o comando acima, é conveniente pois você pode omitir a entrada do ID e da senha.\nSite de referência: Command line parameters\n","date":"2023-01-13T01:45:00+09:00","image":"http://kenji.blog/p/teamviewer%E3%81%A7%E7%B0%A1%E5%8D%98%E3%83%AA%E3%83%A2%E3%83%BC%E3%83%88%E6%8E%A5%E7%B6%9A/img_hu6a85c6015d61f1656b290295e2fefc2b_15316_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/conex%C3%A3o-remota-f%C3%A1cil-com-teamviewer/","title":"Conexão Remota Fácil com TeamViewer"},{"content":" Os tolos aprendem com a experiência, os sábios aprendem com a história. (Otto von Bismarck)\nDê um peixe a um homem e você o alimentará por um dia; ensine-o a pescar e você o alimentará por toda a vida. (Laozi)\nContinue faminto, continue tolo. (Steve Jobs)\nFeito é melhor que perfeito. (Mark Zuckerberg)\nMantenha a simplicidade. (James Gosling)\nNão tenho tempo para me preocupar com quem não gosta de mim. Estou muito ocupado amando as pessoas que me amam. (Snoopy)\nA maior felicidade para um ser humano é encontrar um trabalho onde possa aproveitar ao máximo suas habilidades. (Karl Marx)\nSe um pouco de conhecimento é perigoso, onde está o homem que tem tanto a ponto de estar fora de perigo? (Thomas Huxley, 1877)\n\u0026lsquo;Ao contrário\u0026rsquo;, continuou Tweedledee, \u0026lsquo;se fosse assim, poderia ser; e se fosse, seria; mas como não é, não é. Isso é lógica.\u0026rsquo; (Lewis Carroll, Através do Espelho, 1872)\nNão é exagero chamar Claude Shannon de o pai da era da informação, e suas conquistas acadêmicas estão entre as maiores do século XX. (Crítica da Sociedade Americana de Matemática)\nAqueles que conhecem o estado atual da teoria da Álgebra Simbólica sabem que a validade dos processos de análise não depende da interpretação dos símbolos empregados, mas exclusivamente das leis de sua combinação. (George Boole, no início de \u0026ldquo;A Análise Matemática da Lógica\u0026rdquo;, 1847)\n","date":"2022-10-15T17:00:43+09:00","image":"http://kenji.blog/p/%E5%90%8D%E8%A8%80%E9%9B%86/img_hu460fc51ec02f7186f7ea8b0f77e830d9_47559_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/%E5%90%8D%E8%A8%80%E9%9B%86/","title":"Coleção de Citações"},{"content":"Editor de Grafos Apresentando uma página web onde você pode criar grafos simples.\nhttps://csacademy.com/app/graph_editor/\nVocê pode criar grafos inserindo valores numéricos. Além disso, parece que você também pode mover os elementos com o mouse.\nVocê também pode criar um grafo direcionado clicando em Directed.\nVocê pode salvar os grafos que criou como uma imagem usando Download as PNG.\n","date":"2022-10-13T23:31:11+09:00","image":"http://kenji.blog/p/%E3%82%B0%E3%83%A9%E3%83%95%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BF/img_hu784f47a1f9126188b11445cd2c37bf68_13497_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/%E3%82%B0%E3%83%A9%E3%83%95%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BF/","title":"Editor de Grafos"},{"content":"Resolvendo o Problema do Caixeiro Viajante com Mathematica Problema 電車でこんな広告を見かけました😁📸 pic.twitter.com/iXEgvtXrpL\n\u0026mdash; 早稲田大学 早水桃子研究室 (@hayamizu_lab) October 11, 2022 Solução 1 d=SparseArray[{{1,2}-\u0026gt;10,{2,1}-\u0026gt;10,{1,5}-\u0026gt;15,{5,1}-\u0026gt;15,{1,4}-\u0026gt;12,{4,1}-\u0026gt;12,{1,3}-\u0026gt;20,{3,1}-\u0026gt;20,{2,5}-\u0026gt;10,{5,2}-\u0026gt;10,{3,4}-\u0026gt;10,{4,3}-\u0026gt;10,{3,8}-\u0026gt;30,{8,3}-\u0026gt;30,{3,7}-\u0026gt;20,{7,3}-\u0026gt;20,{3,6}-\u0026gt;25,{6,3}-\u0026gt;25,{4,5}-\u0026gt;15,{5,4}-\u0026gt;15,{4,8}-\u0026gt;20,{8,4}-\u0026gt;20,{5,9}-\u0026gt;18,{9,5}-\u0026gt;18,{5,8}-\u0026gt;15,{8,5}-\u0026gt;15,{6,7}-\u0026gt;5,{7,6}-\u0026gt;5,{7,8}-\u0026gt;35,{8,7}-\u0026gt;35,{8,9}-\u0026gt;12,{9,8}-\u0026gt;12},{9,9},Infinity]; Crie uma matriz usando a função SparseArray. Cada elemento representa a distância entre as cidades em sua respectiva linha e coluna. Por exemplo, o primeiro elemento {1,2}-\u0026gt;10 significa que a distância entre 1 e 2 é 10. O penúltimo elemento {9,9} indica o tamanho da matriz, e o último elemento Infinity significa que o comprimento do caminho entre cidades não especificadas é infinito, ou seja, não há caminho.\n1 {len,tour}=FindShortestTour[{1,2,3,4,5,6,7,8,9},DistanceFunction-\u0026gt;(d[[#1,#2]]\u0026amp;)] Com a função FindShortestTour, você pode resolver facilmente o problema do caixeiro viajante. {1,2,3,4,5,6,7,8,9} representa os números das cidades. DistanceFunction-\u0026gt;(d[[#1,#2]]\u0026amp;) passa a matriz d que representa a distância entre as cidades.\nSaída 1 {137, {1, 2, 5, 9, 8, 7, 6, 3, 4}} A saída mostra a distância mais curta e a rota correspondente. A distância mais curta é 137, e a rota é 1→2→5→9→8→7→6→3→4→1. Convertendo para ordem alfabética ABC, torna-se A, B, E, I, H, G, F, C, D.\n","date":"2022-10-12T19:05:58+09:00","image":"http://kenji.blog/p/mathematica%E3%81%A7%E5%B7%A1%E5%9B%9E%E3%82%BB%E3%83%BC%E3%83%AB%E3%82%B9%E3%83%9E%E3%83%B3%E5%95%8F%E9%A1%8C%E3%82%92%E8%A7%A3%E3%81%8F/img_hucba782cf2f6047b30fd8084b4d887659_22760_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/resolvendo-o-problema-do-caixeiro-viajante-com-mathematica/","title":"Resolvendo o Problema do Caixeiro Viajante com Mathematica"},{"content":"Para marcar todas as caixas de seleção em uma página da web, abra o DevTools com F12, cole o seguinte código no console e execute-o.\n1 2 3 4 5 6 let boxes = document.querySelectorAll(\u0026#39;input[type=\u0026#34;checkbox\u0026#34;]\u0026#39;); for (let i = 0; i \u0026lt; boxes.length; i++) { if (!boxes[i].disabled) { boxes[i].checked = true; } } Ou,\nCrie um novo favorito e cole o seguinte código no endereço de registro (a parte onde você normalmente digita https://\u0026hellip;). Exiba a página da web que deseja marcar e clique no favorito criado; todas as caixas de seleção serão marcadas.\n1 javascript:(function(){let boxes=document.querySelectorAll(\u0026#39;input[type=\u0026#34;checkbox\u0026#34;]\u0026#39;);for(let i=0;i\u0026lt;boxes.length;i++){if(!boxes[i].disabled){boxes[i].checked=true;}}})(); Para desmarcar todas, altere a parte boxes[i].checked = true; do script acima para boxes[i].checked = false;.\n","date":"2022-10-05T20:07:06+09:00","image":"http://kenji.blog/p/web%E3%83%9A%E3%83%BC%E3%82%B8%E5%86%85%E3%81%AE%E3%81%99%E3%81%B9%E3%81%A6%E3%81%AE%E3%83%81%E3%82%A7%E3%83%83%E3%82%AF%E3%83%9C%E3%83%83%E3%82%AF%E3%82%B9%E3%82%92%E5%85%A8%E3%83%81%E3%82%A7%E3%83%83%E3%82%AF%E3%81%99%E3%82%8B/img_hu556225b69f77e68d5b8659c3dfad5080_9228_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/marcar-todas-as-caixas-de-sele%C3%A7%C3%A3o-em-uma-p%C3%A1gina-da-web/","title":"Marcar todas as caixas de seleção em uma página da web"},{"content":"Teorema de Wilson Quando $p$ é um número primo, $(p−1)!≡−1 \\pmod p$ é válido.\nFórmula de Euler $e^{iπ}+1=0$\nÚltimo Teorema de Fermat Para qualquer inteiro $n≥3$, não existem inteiros positivos $x,y,z$ que satisfaçam $x^n+y^n=z^n$.\nProblema de Basileia $1/1^2+1/2^2+1/3^2+1/4^2+...=π^2/6$\nPolinômio de geração de primos de Euler $n^2+n+41$ resulta sempre em um número primo quando $n$ é um inteiro entre $0$ e $39$.\n","date":"2022-10-05T13:24:50+09:00","image":"http://kenji.blog/p/%E5%A5%BD%E3%81%8D%E3%81%AA%E6%95%B0%E5%BC%8F/img_huc293f175856c5702bca3e96906ea6e7d_155123_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/%E5%A5%BD%E3%81%8D%E3%81%AA%E6%95%B0%E5%BC%8F/","title":"Fórmulas Matemáticas Favoritas"},{"content":"Pré-requisitos Ter o Windows 11 instalado\nProcedimento Instale o Instalador de Aplicativo da Microsoft Store https://www.microsoft.com/store/productId/9NBLGGH4NNS1 Instale o aplicativo usando o Prompt de Comando 1 winget install Google.Chrome Principais aplicativos que podem ser instalados Google Chrome (Comando winget install Google.Chrome) Microsoft Edge (Comando winget install Microsoft.Edge) Microsoft Teams (Comando winget install Microsoft.Teams) Microsoft Office (Comando winget install Microsoft.Office) Visual Studio Code (Comando winget install vscode) Slack (Comando winget install SlackTechnologies.Slack) Discord (Comando winget install Discord.Discord) Docker Desktop (Comando winget install Docker.DockerDesktop) Git (Comando winget install Git) 7zip (Comando winget install 7zip) VLC (Comando winget install VideoLAN.VLC) Referência Usar a ferramenta winget para instalar e gerenciar aplicativos\nNota lateral Pensei que também poderia instalar o Paint.Net, mas não consegui.\nhttps://forums.getpaint.net/topic/118574-please-add-paintnet-to-the-available-packages-for-windows-package-manager-winget/\n","date":"2022-10-05T12:15:20+09:00","image":"http://kenji.blog/p/winget-%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%A7%E3%82%A2%E3%83%97%E3%83%AA%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B/img_hu0f8970b897eb9ee188b975a06c549111_1216_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/winget-%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%A7%E3%82%A2%E3%83%97%E3%83%AA%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B/","title":"Instalar aplicativos via linha de comando usando o WinGet"},{"content":"Características do Rust Uma linguagem de programação de código aberto relativamente nova desenvolvida pela Mozilla Linguagem rápida, sem coleta de lixo (garbage collection), especializada em programação de sistemas Garante a segurança de memória com mecanismos únicos de propriedade (ownership) e empréstimo (borrowing) como especificações da linguagem Funciona em multiplataformas Possui o excelente gerenciador de pacotes Cargo como padrão ","date":"2022-10-03T22:47:20+09:00","image":"http://kenji.blog/p/rust%E3%81%AE%E7%89%B9%E5%BE%B4/img_hu184f8481eb552ab7d9cefed2227c58f9_39839_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/rust%E3%81%AE%E7%89%B9%E5%BE%B4/","title":"Características do Rust"},{"content":"Para definir variáveis dinamicamente no Github Actions, você pode fazer isso anexando a $env:GITHUB_ENV conforme abaixo.\n【No caso do Windows】\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 name: Rust on: push: branches: [ \u0026#34;master\u0026#34; ] pull_request: branches: [ \u0026#34;master\u0026#34; ] env: CARGO_TERM_COLOR: always jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Get Environment run: | echo \u0026#39;VERSION=1.0.0\u0026#39; \u0026gt;\u0026gt; $GITHUB_ENV echo \u0026#39;NAME=1.0.0\u0026#39; \u0026gt;\u0026gt; $GITHUB_ENV - name: Display Environment run: | echo $env:VERSION echo $env:NAME - name: Create Release id: create_release uses: actions/create-release@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: tag_name: ${{ env.VERSION }} release_name: ${{ env.VERSION }} draft: false prerelease: false - name: Upload Release Asset id: upload-release-asset uses: actions/upload-release-asset@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ steps.create_release.outputs.upload_url }} # This pulls from the CREATE RELEASE step above, referencing it\u0026#39;s ID to get its outputs object, which include a `upload_url`. See this blog post for more info: https://jasonet.co/posts/new-features-of-github-actions/#passing-data-to-future-steps asset_path: ./target/release/${{ env.NAME }}.exe asset_name: ${{ env.NAME }}.exe asset_content_type: application/octet-stream 【No caso do Linux】\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 name: Rust on: push: branches: [ \u0026#34;main\u0026#34; ] pull_request: branches: [ \u0026#34;main\u0026#34; ] env: CARGO_TERM_COLOR: always jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Get Environment run: | echo \u0026#39;VERSION=1.0.0\u0026#39; \u0026gt;\u0026gt; $GITHUB_ENV echo \u0026#39;NAME=hello\u0026#39; \u0026gt;\u0026gt; $GITHUB_ENV - name: Display Environment run: | echo ${{ env.VERSION }} echo ${{ env.NAME }} ","date":"2022-10-02T02:33:35+09:00","image":"http://kenji.blog/p/github-actions%E3%81%A7%E5%8B%95%E7%9A%84%E3%81%AB%E5%A4%89%E6%95%B0%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%99%E3%82%8B/img_1_hua65fb3c79313ad0762e062df80261603_10981_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/github-actions%E3%81%A7%E5%8B%95%E7%9A%84%E3%81%AB%E5%A4%89%E6%95%B0%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%99%E3%82%8B/","title":"Definir variáveis dinamicamente no Github Actions"},{"content":"Excluir uma tag local Verifique as tags locais existentes com git tag. Exclua a tag com git tag -d v0.1.0. (Especifique a tag que você deseja excluir no lugar de v0.1.0) Excluir uma tag remota Verifique as tags remotas existentes com git ls-remote --tags. Exclua a tag remota existente com git push origin --delete v0.1.0. (Especifique a tag que você deseja excluir no lugar de v0.1.0) Referência gitでtagをリモートとローカルで削除する方法！\n","date":"2022-10-02T02:18:04+09:00","image":"http://kenji.blog/p/git%E3%81%A7%E3%82%BF%E3%82%B0%E3%82%92%E6%B6%88%E3%81%99/img_hu2ecde82e40aa31a994850b70302683b4_5304_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/git%E3%81%A7%E3%82%BF%E3%82%B0%E3%82%92%E6%B6%88%E3%81%99/","title":"Excluir tags no git"},{"content":"Exibir uma janela simples em Rust\n1 2 3 4 5 6 7 8 9 10 [package] name = \u0026#34;win\u0026#34; version = \u0026#34;0.1.0\u0026#34; edition = \u0026#34;2021\u0026#34; # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies.winapi] version = \u0026#34;0.3\u0026#34; features = [\u0026#34;winuser\u0026#34;] O código-fonte está abaixo\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 #![windows_subsystem = \u0026#34;windows\u0026#34;] use winapi::{ um::{ winuser::{RegisterClassW, WNDCLASSW, CS_HREDRAW, CS_VREDRAW, LoadIconW, IDI_APPLICATION, LoadCursorW, IDC_ARROW, CreateWindowExW, ShowWindow, SW_NORMAL, UpdateWindow, GetMessageW, TranslateMessage, DispatchMessageW, MSG, WM_DESTROY, PostQuitMessage, DefWindowProcW, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT}, wingdi::{GetStockObject, WHITE_BRUSH}, }, shared::{ windef::{HWND, HBRUSH}, minwindef::{UINT, WPARAM, LPARAM, LRESULT}, }, }; use std::ptr; use std::mem; fn main() { unsafe { let class_name = encode(\u0026#34;my_window_class_name\u0026#34;); if !register_wndclass(\u0026amp;class_name) { return; } let hwnd = create_window(\u0026amp;class_name); if hwnd.is_null() { return; } ShowWindow(hwnd, SW_NORMAL); UpdateWindow(hwnd); let mut msg = mem::uninitialized::\u0026lt;MSG\u0026gt;(); loop { if GetMessageW(\u0026amp;mut msg, ptr::null_mut(), 0, 0) == 0 { return; } TranslateMessage(\u0026amp;mut msg); DispatchMessageW(\u0026amp;mut msg); } } } fn encode(source: \u0026amp;str) -\u0026gt; Vec\u0026lt;u16\u0026gt; { source.encode_utf16().chain(Some(0)).collect() } unsafe fn register_wndclass(class_name: \u0026amp;[u16]) -\u0026gt; bool { let mut winc = mem::zeroed::\u0026lt;WNDCLASSW\u0026gt;(); winc.style = CS_HREDRAW | CS_VREDRAW; winc.lpfnWndProc = Some(win_proc); winc.hIcon = LoadIconW(ptr::null_mut(), IDI_APPLICATION); winc.hCursor = LoadCursorW(ptr::null_mut(), IDC_ARROW); winc.hbrBackground = GetStockObject(WHITE_BRUSH as i32) as HBRUSH; winc.lpszClassName = class_name.as_ptr(); RegisterClassW(\u0026amp;winc) \u0026gt; 0 } unsafe fn create_window(class_name: \u0026amp;[u16]) -\u0026gt; HWND { CreateWindowExW( 0, class_name.as_ptr(), encode(\u0026#34;Hello, World!\u0026#34;).as_ptr(), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, ptr::null_mut(), ptr::null_mut(), ptr::null_mut(), ptr::null_mut(), ) } unsafe extern \u0026#34;system\u0026#34; fn win_proc(hwnd: HWND, msg: UINT, w_param: WPARAM, l_param: LPARAM) -\u0026gt; LRESULT { match msg { WM_DESTROY =\u0026gt; PostQuitMessage(0), _ =\u0026gt; return DefWindowProcW(hwnd, msg, w_param, l_param), }; 0 } Referências Programação Windows em Rust - CreateWindow\n","date":"2022-10-01T19:08:58+09:00","image":"http://kenji.blog/p/rust%E3%81%A7%E3%82%B7%E3%83%B3%E3%83%97%E3%83%AB%E3%81%AA%E3%82%A6%E3%82%A3%E3%83%B3%E3%83%89%E3%82%A6%E3%82%92%E8%A1%A8%E7%A4%BA%E3%81%99%E3%82%8B/images/rust_logo_huefc2d075e966b0edc0b7186c50038553_22411_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/rust%E3%81%A7%E3%82%B7%E3%83%B3%E3%83%97%E3%83%AB%E3%81%AA%E3%82%A6%E3%82%A3%E3%83%B3%E3%83%89%E3%82%A6%E3%82%92%E8%A1%A8%E7%A4%BA%E3%81%99%E3%82%8B/","title":"Exibir uma janela simples em Rust"},{"content":"Para escrever um teste em Rust, adicione o atributo #[test] uma linha acima da definição da função de teste.\n1 2 3 4 5 6 7 8 fn plus(a:i32,b:i32)-\u0026gt;i32 { a+b } #[test] fn plus_test() { assert_eq!(plus(1, 1), 2); } O código de teste pode ser executado com cargo test. Quando o teste for bem-sucedido, ele exibirá ok. Se falhar, exibirá FAILED.\nCaso de sucesso\n1 2 3 4 5 6 7 8 9 C:\\Users\\admin\\Desktop\\test1\u0026gt;cargo test Compiling test1 v0.1.0 (C:\\Users\\admin\\Desktop\\test1) Finished test [unoptimized + debuginfo] target(s) in 0.35s Running unittests src\\main.rs (target\\debug\\deps\\test1-be5d3118bc52cb3a.exe) running 1 test test plus_test ... ok test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s Caso de falha\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 C:\\Users\\admin\\Desktop\\test1\u0026gt;cargo test Compiling test1 v0.1.0 (C:\\Users\\admin\\Desktop\\test1) Finished test [unoptimized + debuginfo] target(s) in 0.33s Running unittests src\\main.rs (target\\debug\\deps\\test1-be5d3118bc52cb3a.exe) running 1 test test plus_test ... FAILED failures: ---- plus_test stdout ---- thread \u0026#39;plus_test\u0026#39; panicked at \u0026#39;assertion failed: `(left == right)` left: `2`, right: `3`\u0026#39;, src\\main.rs:7:5 note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace failures: plus_test test result: FAILED. 0 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s error: test failed, to rerun pass \u0026#39;--bin test1\u0026#39; ","date":"2022-10-01T02:00:59+09:00","image":"http://kenji.blog/p/rust%E3%81%A7%E3%83%86%E3%82%B9%E3%83%88%E3%82%92%E6%9B%B8%E3%81%8F/images/rust_logo_huefc2d075e966b0edc0b7186c50038553_22411_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/rust%E3%81%A7%E3%83%86%E3%82%B9%E3%83%88%E3%82%92%E6%9B%B8%E3%81%8F/","title":"Escrevendo testes em Rust"},{"content":"Você pode exibir um MessageBox em Rust seguindo os passos abaixo.\nInstale o Rust. Consulte Como começar com Rust Execute cargo new --bin MessageBox no prompt de comando. Vá para o diretório MessageBox. Abra Cargo.toml e modifique-o conforme abaixo. 1 2 3 4 5 6 7 8 9 10 [package] name = \u0026#34;hello_world\u0026#34; version = \u0026#34;0.1.0\u0026#34; edition = \u0026#34;2021\u0026#34; # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] winapi = \u0026#34;0.2.7\u0026#34; user32-sys = \u0026#34;0.2.0\u0026#34; Abra src\\main.rs e modifique-o conforme abaixo. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 extern crate user32; extern crate winapi; use std::ffi::CString; use user32::MessageBoxA; use winapi::winuser::{MB_OK, MB_ICONINFORMATION}; fn main() { let lp_text = CString::new(\u0026#34;Hello, world!\u0026#34;).unwrap(); let lp_caption = CString::new(\u0026#34;MessageBox Example\u0026#34;).unwrap(); unsafe { MessageBoxA( std::ptr::null_mut(), lp_text.as_ptr(), lp_caption.as_ptr(), MB_OK | MB_ICONINFORMATION ); } } Execute cargo run no prompt de comando. Se você deseja fazer uma compilação de release, execute cargo build --release.\nReferência Hello World MesssageBox example in Rust\n","date":"2022-09-30T23:54:31+09:00","image":"http://kenji.blog/p/rust%E3%81%A7messagebox%E3%82%92%E8%A1%A8%E7%A4%BA%E3%81%99%E3%82%8B/images/rust_logo_huefc2d075e966b0edc0b7186c50038553_22411_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/exibir-um-messagebox-em-rust/","title":"Exibir um MessageBox em Rust"},{"content":"O que significa entender? Olá!\nHoje, gostaria de falar sobre o tema \u0026ldquo;O que significa entender?\u0026rdquo;.\nO \u0026ldquo;entender\u0026rdquo; é, na verdade, ambíguo? Há momentos em nossa vida diária em que sentimos: \u0026ldquo;Entendi!\u0026rdquo;. Mas, se pensarmos bem, será que esse \u0026ldquo;entender\u0026rdquo; é realmente uma compreensão completa?\nPor exemplo, dirigir um carro. Se você pisa no acelerador, ele avança; se pisa no freio, ele para. Isso pode ser chamado de \u0026ldquo;entender\u0026rdquo;. No entanto, acho que há poucas pessoas que podem explicar detalhadamente o que está acontecendo dentro do motor.\nA compreensão completa é necessária? Na verdade, mesmo que não entendamos tudo completamente, isso muitas vezes não interfere na vida cotidiana. Você pode fazer chamadas telefônicas e enviar mensagens sem conhecer a estrutura interna de um smartphone.\nAinda assim, não devemos menosprezar o ato de \u0026ldquo;entender\u0026rdquo;. Se nossa compreensão se aprofundar, novas descobertas e percepções podem surgir.\nHá muitas coisas que não entendemos Existem muitas coisas no mundo que ainda não foram elucidadas. Por exemplo, os mecanismos das emoções e da consciência humanas, a origem do universo, entre outros. Esses são campos que ainda não são completamente \u0026ldquo;entendidos\u0026rdquo;, mesmo com o avanço da ciência.\nMesmo no mundo da matemática, existem problemas não resolvidos que são simples, como a \u0026ldquo;Conjectura de Goldbach\u0026rdquo;.\nO valor de \u0026ldquo;entender\u0026rdquo; Quando \u0026ldquo;entendemos\u0026rdquo; mais coisas, podemos explicá-las com confiança e nos comunicar de maneira eficaz com os outros. Também há a vantagem de que ter conhecimento torna mais difícil ser enganado por informações incorretas.\nUma atitude humilde é importante Reconhecer o que \u0026ldquo;não entendemos\u0026rdquo; leva à humildade. E é devido a esse reconhecimento que surge o desejo de continuar aprendendo.\nPortanto, embora \u0026ldquo;entender\u0026rdquo; seja importante, é difícil compreender tudo completamente. Acho que o importante é conhecer os limites do nosso próprio entendimento e manter a atitude de continuar aprendendo.\n","date":"2022-09-24T02:38:18+09:00","image":"http://kenji.blog/p/%E3%82%8F%E3%81%8B%E3%82%8B%E3%81%A3%E3%81%A6%E3%81%AA%E3%82%93%E3%81%A0%E3%82%8D%E3%81%86/img_hu70cb8dd6d786a678b22436c932461bee_164867_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/o-que-significa-entender/","title":"O que significa entender?"},{"content":"Pensei sobre por que gosto de matemática e computadores Igualdade para todos Sempre retorna a mesma saída para a mesma entrada, independentemente da pessoa, posição ou local.\nRegras claras As regras são claramente definidas e não há absurdos ou injustiças.\nAs respostas e teorias derivadas são eternamente corretas Não há necessidade de se preocupar se uma resposta calculada será reescrita mais tarde.\nDificuldade moderada Sempre há problemas não resolvidos, e você pode se desafiar a resolvê-los a qualquer momento.\n","date":"2022-09-23T01:56:52+09:00","image":"http://kenji.blog/p/%E3%81%AA%E3%81%9C%E6%95%B0%E5%AD%A6%E3%82%84%E8%A8%88%E7%AE%97%E6%A9%9F%E3%81%8C%E5%A5%BD%E3%81%8D%E3%81%AA%E3%82%93%E3%81%A0%E3%82%8D%E3%81%86/img_hue4a786c476ad4bcc54a52cdbffbd292f_6616634_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/%E3%81%AA%E3%81%9C%E6%95%B0%E5%AD%A6%E3%82%84%E8%A8%88%E7%AE%97%E6%A9%9F%E3%81%8C%E5%A5%BD%E3%81%8D%E3%81%AA%E3%82%93%E3%81%A0%E3%82%8D%E3%81%86/","title":"Por que gosto de matemática e computadores"},{"content":"O que uma comunidade precisa Senti que as diretrizes da comunidade do Scratch são muito refinadas e excelentes. As seguintes coisas estavam escritas:\nTrate a todos com respeito.\nMantenha a segurança: Não revele informações pessoais ou de contato.\nFaça comentários úteis.\nEntenda a cultura do remix.\nSeja honesto.\nTorne o site um lugar agradável.\nAcredito que essas perspectivas se aplicam a qualquer comunidade.\nhttps://ja.scratch-wiki.info/wiki/%E3%82%B3%E3%83%9F%E3%83%A5%E3%83%8B%E3%83%86%E3%82%A3%E3%83%BC%E3%82%AC%E3%82%A4%E3%83%89%E3%83%A9%E3%82%A4%E3%83%B3\n","date":"2022-09-23T01:37:43+09:00","image":"http://kenji.blog/p/%E3%82%B3%E3%83%9F%E3%83%A5%E3%83%8B%E3%83%86%E3%82%A3%E3%81%AB%E5%BF%85%E8%A6%81%E3%81%AA%E3%81%93%E3%81%A8/img_hueeaef9e10f0c1990dbbf990f6784494a_314802_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/o-que-uma-comunidade-precisa/","title":"O que uma comunidade precisa"},{"content":"Fermat (P. de Fermat, 1601-1665) Um matemático francês que representou o século XVII. Estabeleceu os fundamentos da geometria analítica, teoria das probabilidades e cálculo diferencial. É também o fundador da teoria dos números.\nDiofanto (Diophantus, cerca de 207-291) Matemático grego. Famoso pela introdução de notação simbólica e pesquisa de soluções racionais. Seu livro \u0026ldquo;Aritmética\u0026rdquo; é sua obra-prima. O campo que busca soluções racionais para equações é chamado de análise diofantina.\nEuler (L. Euler, 1707-1783) O rei da matemática nascido na Suíça. Ele obteve conquistas em todas as áreas da matemática. Mais de 700 artigos e 45 livros foram deixados.\nLegendre (A. M. Legendre, 1752-1833) Matemático francês. Deixou inúmeras contribuições em teoria dos números, integrais elípticas e problemas de gravitação. A palavra \u0026ldquo;Teoria dos Números\u0026rdquo; (\u0026ldquo;Théorie des Nombres\u0026rdquo;) deriva de sua obra principal com este nome.\nKummer (E. E. Kummer, 1810-1893) Matemático alemão. Ele aplicou a teoria dos números dos corpos ciclotômicos ao Último Teorema de Fermat e obteve grandes resultados.\nDescartes (R. Descartes, 1596-1650) O filósofo francês original. Obras representativas incluem \u0026ldquo;Discurso do Método\u0026rdquo;, \u0026ldquo;Geometria\u0026rdquo; e \u0026ldquo;O Mundo\u0026rdquo;.\nPascal (B. Pascal, 1623-1662) Filósofo francês conhecido por seus estudos sobre probabilidade e fluidos. Mais tarde, ele se juntou aos jansenistas e se envolveu em atividades religiosas. Os \u0026ldquo;Pensamentos\u0026rdquo; (\u0026ldquo;Pensées\u0026rdquo;) é uma obra dessa época.\nBachet (C. G. Bachet, 1581-1638) Um nobre francês que pesquisava quebra-cabeças numéricos como hobby. Ele publicou uma tradução latina da \u0026ldquo;Aritmética\u0026rdquo; de Diofanto, incluindo suas próprias anotações de pesquisa.\nWallis (J. Wallis, 1616-1703) Matemático inglês. Em sua principal obra \u0026ldquo;Aritmética dos Infinitos\u0026rdquo;, ele deu uma forma matemática ao conceito de limite e contribuiu para a fundação do cálculo.\nBrouncker (W. Brouncker, 1620-1684) Nobre irlandês. O primeiro presidente da Royal Society (Academia Britânica de Ciências). Um entusiasta da matemática que interagia com Wallis e outros.\nLagrange (J. L. Lagrange, 1736-1813) Matemático francês nascido na Itália. Sucedeu Euler como diretor de matemática na Academia de Berlim. Teve grandes conquistas em teoria dos números, mecânica analítica, etc.\nSiegel (C. L. Siegel, 1896-1981) Teórico dos números alemão. Fez inúmeras contribuições à teoria analítica dos números.\nFibonacci (L. Fibonacci, cerca de 1175-1250) Matemático italiano. Em sua obra \u0026ldquo;Livro do Ábaco\u0026rdquo;, ele usou os numerais indo-arábicos e trabalhou para popularizá-los. Também discutiu números congruentes em \u0026ldquo;O Livro dos Quadrados\u0026rdquo;.\nBaker (A. Baker, 1939-) Teórico dos números britânico. Por sua contribuição à teoria dos números transcendentes, recebeu a Medalha Fields junto com Heisuke Hironaka.\nPoincaré (J. Poincaré, 1854-1912) O matemático francês chamado de o último matemático universal. Deixou obras notáveis não apenas em funções automórficas, geometria não-euclidiana, equações diferenciais, mecânica celeste e eletrodinâmica, mas também em críticas científicas.\nMordell (L. J. Mordell, 1888-1972) Matemático americano. Seus pais eram imigrantes da Lituânia. Tem muitos artigos sobre a teoria das equações diofantinas, mas o Teorema de Mordell sobre curvas elípticas é particularmente famoso. Weil estendeu isso para o caso de curvas algébricas gerais, e a geometria algébrica aritmética passou por um desenvolvimento explosivo a partir daí.\nWeil (A. Weil, 1906-) Matemático francês de origem judaica. Quando jovem, interessou-se pelo problema de Fermat e, com o objetivo de aplicá-lo à teoria dos números, revisou fundamentalmente a geometria algébrica e forneceu-lhe fundamentos rigorosos. Também é conhecido por seus escritos sobre a história da matemática.\nMersenne (M. Mersenne, 1588-1648) Padre francês da ordem dos Mínimos. Ele mediou a correspondência entre matemáticos de várias regiões. O número que leva seu nome, o número de Mersenne, foi na verdade concebido por Fermat.\nRoberval (G. P. de Roberval, 1602-1675) Matemático francês. Na época, ele era quase a única pessoa que havia obtido o cargo de professor como matemático, e é conhecido por sua pesquisa sobre a cicloide.\nAbel (N. H. Abel, 1802-1829) Matemático norueguês. Obteve excelentes conquistas na insolubilidade de equações gerais do 5º grau, teoria das funções elípticas, teoria das integrais abelianas, mas morreu jovem.\nJacobi (K. G. Jacob, 1804-1851) Matemático alemão de origem judaica. Deixou grandes conquistas na teoria das funções elípticas, funções teta, equações diferenciais, cálculo das variações, etc. Apresentou o trabalho de Abel ao mundo. Conhecido também por rejeitar o pragmatismo, afirmando que o propósito da ciência é \u0026ldquo;a honra do espírito humano\u0026rdquo;.\nGauss (C. F. Gauss, 1777-1855) O rei da matemática nascido na Alemanha. Conhecido por suas pesquisas em teoria dos números, geometria não euclidiana, geodésia, séries hipergeométricas, teoria das superfícies e magnetismo terrestre. Era um perfeccionista, e diz-se que não publicava seus resultados a menos que fossem de uma perfeição tão alta que nenhum andaime pudesse ser visto. Sua principal obra é \u0026ldquo;Disquisitiones Arithmeticae\u0026rdquo;.\nLamé (G. Lamé, 1795-1870) Matemático francês. Contribuiu para a mecânica elástica, teoria da condução de calor e outras áreas.\nLiouville (J. Liouville, 1809-1882) Matemático francês. Contribuiu para equações diferenciais, teoria dos números transcendentes e análise complexa.\nCauchy (A. L. Cauchy, 1789-1857) Matemático francês. Muito produtivo, com inúmeras conquistas em física teórica e matemática. Na França, diz-se que é tão respeitado quanto Gauss.\nGalois (E. Galois, 1811-1832) Matemático francês. Ele esclareceu o teorema de Abel de que equações de grau 5 ou superior geralmente não podem ser resolvidas algebricamente introduzindo o conceito de grupo. Ele morreu jovem em um duelo, mas agora se sabe que foi desencadeado por um problema trivial com uma mulher.\nHensel (K. Hensel, 1861-1941) Matemático alemão. Aluno de Kronecker. Ele introduziu o sistema p-ádico (análise p-ádica) na teoria dos números, aplicando métodos da teoria das funções.\nHasse (H. Hesse, 1898-1979) Matemático alemão. Aluno de Hensel, contribuiu para os fundamentos da análise p-ádica e suas aplicações. Consolidação da teoria dos corpos de classes, estudo das funções L de curvas elípticas, etc.\nKronecker (L. Kronecker, 1823-1891) Matemático alemão de origem judaica. Contribuiu para a teoria das funções elípticas, teoria dos números, etc. Ele também é conhecido por defender a fundamentação aritmética da matemática, mas sua personalidade fortemente subjetiva deu-lhe uma imagem negativa durante a vida por suas críticas irracionais ao seu colega da Universidade de Berlim, Weierstrass, e por impedir o emprego de Cantor.\nHilbert (D. Hilbert, 1862-1943) Matemático alemão. Deixou marcas gigantescas em todas as áreas da matemática, incluindo teoria dos invariantes, teoria algébrica dos números e fundamentos da matemática. Os 23 problemas que ele propôs no Congresso Internacional de Matemáticos em Paris (1900) tiveram grande influência no desenvolvimento da matemática.\nRiemann (B. Riemann, 1826-1866) Matemático alemão. Obteve grandes resultados que tocam as raízes da matemática, como o conceito de superfície de Riemann na teoria das funções complexas e a geometria de Riemann.\nFaltings (G. Faltings, 1954-) Matemático alemão. Ele resolveu a conjectura de Mordell em 1983.\nWiles (A. Wiles, 1953-) Matemático nascido no Reino Unido. Fez grandes contribuições em pesquisas como a conjectura principal de Iwasawa e a conjectura de Birch e Swinnerton-Dyer, sendo o líder nesta área.\nReferências O Último Teorema de Fermat foi resolvido! Da prova de Euler à de Wiles. Kodansha.\n","date":"2022-09-22T23:06:37+09:00","image":"http://kenji.blog/p/%E6%95%B0%E5%AD%A6%E3%81%AE%E5%81%89%E4%BA%BA%E3%81%9F%E3%81%A1/img_hu9ac53943fe4f64bfe30a56c18c498d11_667839_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/os-grandes-genios-da-matematica/","title":"Os Grandes Gênios da Matemática"},{"content":"Enumeração de Títulos de Janelas Aqui está como enumerar os títulos das janelas abertas atualmente usando o PowerShell.\n1 Get-Process|where{$_.mainWindowTItle}|Select-Object MainWindowTitle Exemplo de saída\n1 2 3 4 5 6 7 8 9 MainWindowTitle --------------- Windows PowerShell Internet Explorer Sem título - Paint Sem título - Bloco de Notas Gerenciador de Tarefas Experiência de Entrada do Windows Documento - WordPad ","date":"2022-09-20T17:03:15+09:00","image":"http://kenji.blog/p/%E3%82%A6%E3%82%A3%E3%83%B3%E3%83%89%E3%82%A6%E3%82%BF%E3%82%A4%E3%83%88%E3%83%AB%E3%81%AE%E5%88%97%E6%8C%99/img_huc312ccf5dbdb1b6edae5dc06174466bf_18265_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/enumera%C3%A7%C3%A3o-de-t%C3%ADtulos-de-janelas/","title":"Enumeração de Títulos de Janelas"},{"content":"Exclusão Rápida em Lote de Pastas Grandes Ao excluir pastas grandes com o Explorer, a velocidade é lenta porque o conteúdo da pasta é verificado primeiro antes da execução da exclusão. Ao excluir com comandos como abaixo, a verificação e a exclusão são executadas ao mesmo tempo, permitindo a exclusão rápida de pastas grandes.\nNo Prompt de Comando, navegue até a hierarquia da pasta de destino. Execute DEL /F /Q /S NomeDaPasta \u0026gt; NUL. Execute RMDIR /Q /S NomeDaPasta. ","date":"2022-09-20T16:04:02+09:00","image":"http://kenji.blog/p/%E5%A4%A7%E3%81%8D%E3%81%AA%E3%83%95%E3%82%A9%E3%83%AB%E3%83%80%E3%83%BC%E3%82%92%E9%AB%98%E9%80%9F%E4%B8%80%E6%8B%AC%E5%89%8A%E9%99%A4/img_hu0a77dc7478cd7b69f58fbada7141acfe_6495_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/%E5%A4%A7%E3%81%8D%E3%81%AA%E3%83%95%E3%82%A9%E3%83%AB%E3%83%80%E3%83%BC%E3%82%92%E9%AB%98%E9%80%9F%E4%B8%80%E6%8B%AC%E5%89%8A%E9%99%A4/","title":"Exclusão Rápida em Lote de Pastas Grandes"},{"content":"Comando para Excluir Todo o Chatter do Salesforce Este é um comando para excluir todas as postagens e anexos no Salesforce Chatter. Abra o Developer Console, selecione \u0026ldquo;Open Execute Anonymous Window\u0026rdquo; no menu Debug, cole o seguinte código e execute-o. Pessoalmente, uso isso quando a capacidade de armazenamento da organização está acabando.\n1 2 3 4 5 6 delete [select id from FeedItem]; delete [select id from FeedAttachment]; delete [select id from ContentDocument]; // Esvaziar a lixeira database.emptyRecycleBin([select id from ContentDocument where IsDeleted = true ALL ROWS]); ","date":"2022-09-19T21:59:14+09:00","image":"http://kenji.blog/p/salesforce%E3%83%81%E3%83%A3%E3%83%83%E3%82%BF%E3%83%BC%E5%85%A8%E6%B6%88%E3%81%97%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89/img_1_hu1e12ce6e6e64d4f046faca027a6e75ab_14487_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/salesforce%E3%83%81%E3%83%A3%E3%83%83%E3%82%BF%E3%83%BC%E5%85%A8%E6%B6%88%E3%81%97%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89/","title":"Comando para Excluir Todo o Chatter do Salesforce"},{"content":"Esta é uma coleção de pequenas dicas e atalhos úteis para o uso diário do Windows. Espero que seja útil para iniciantes. Embora seja focado no Windows 11, a maioria também deve funcionar no Windows 10.\nFechar janela Alt + F4 com a janela ativa Ctrl + W com a janela ativa. Fecha a aba ou janela (apenas em aplicativos suportados) Dê um duplo clique no ícone à esquerda da barra de título da janela Clique no × na barra de título da janela Mostrar a área de trabalho Win + D. Pressione duas vezes para restaurar o estado original da janela. Muito útil quando você quer mostrar a área de trabalho por um instante. Win + M. Minimiza todos os aplicativos. Pressionar duas vezes não restaura. Digitação por voz Win + H. Inicia a digitação por voz. Para sair, pressione Esc ou Win + H novamente. Mostrar o menu de contexto clássico no Explorer Pressione Shift + F10 ou a tecla de aplicativo. A tecla de aplicativo é a que fica no canto inferior direito do teclado. Capturar uma área da tela Você pode capturar uma área selecionada com Win + Shift + S. Você pode capturar a tela inteira com Win + Print Screen ou apenas Print Screen. (Se você adicionar o Win, a imagem capturada será salva em C:\\Users\\NomeDoUsuario\\Pictures\\Screenshots.) Você pode capturar a janela atual com Alt + Print Screen. Iniciar aplicativos fixados na barra de tarefas Você pode iniciar os aplicativos fixados na barra de tarefas com Win + Tecla numérica. Por exemplo, pressionar Win + 1 iniciará o primeiro aplicativo da esquerda na barra de tarefas. Win + T move o foco para os ícones da barra de tarefas. Pressionar Win + T várias vezes, ou usar ← ou →, moverá a seleção, e pressionar Enter iniciará o aplicativo selecionado. Ampliar/Reduzir Win + + inicia a Lupa do Windows. Você pode ampliar/reduzir a tela usando Win + + ou -. Você pode ampliar/reduzir no Bloco de Notas ou navegadores com Ctrl + + ou - (apenas em aplicativos suportados). Bloquear o Windows Win + L Ctrl + Alt + Del → Espaço ou Enter Desligar o Windows Com a área de trabalho visível (usando Win + M ou Win + D) ou a barra de tarefas ativa (Win + T ou Win + B), pressione Alt + F4. Uma caixa de diálogo como a mostrada abaixo aparecerá; certifique-se de que \u0026ldquo;Desligar\u0026rdquo; esteja selecionado e pressione Enter. Também pode ser feito com Win + R → Alt + F4 → Alt + F4. Você pode desligar usando Win + X → U → U. No Prompt de Comando ou em \u0026ldquo;Executar\u0026rdquo; (Win + R), digite shutdown /s /t 0 para desligar. Adicionar /f forçará o desligamento. Reiniciar o Windows Com a área de trabalho visível (usando Win + M ou Win + D) ou a barra de tarefas ativa (Win + T ou Win + B), pressione Alt + F4. Uma caixa de diálogo aparecerá; pressione ↓ uma vez para selecionar \u0026ldquo;Reiniciar\u0026rdquo; e pressione Enter. Também pode ser feito com Win + R → Alt + F4 → Alt + F4. Você pode reiniciar usando Win + X → U → R. Você pode reiniciar com shutdown /r /t 0. Adicionar /f forçará a reinicialização. Suspender (Dormir) o Windows Com a área de trabalho visível (usando Win + M ou Win + D) ou a barra de tarefas ativa (Win + T ou Win + B), pressione Alt + F4. Uma caixa de diálogo aparecerá; pressione ↑ uma vez para selecionar \u0026ldquo;Suspender\u0026rdquo; e pressione Enter. Também pode ser feito com Win + R → Alt + F4 → Alt + F4. Em Win + R ou no Prompt de Comando, digite rundll32.exe powrprof.dll,SetSuspendState para hibernar. Sair do Windows (Logoff) Com a área de trabalho visível (usando Win + M ou Win + D) ou a barra de tarefas ativa (Win + T ou Win + B), pressione Alt + F4. Uma caixa de diálogo aparecerá; pressione ↑ duas vezes para selecionar \u0026ldquo;Sair\u0026rdquo; e pressione Enter. Também pode ser feito com Win + R → Alt + F4 → Alt + F4. Win + X → U → I Ctrl + Alt + Del → 2 vezes Tab ou 2 vezes ↓ → Enter ou Espaço Você pode sair (fazer logoff) digitando logoff. Mover janelas com o teclado Win + ←: Mover para a esquerda Win + →: Mover para a direita Win + ↑: Mover para cima/Maximizar Win + ↓: Mover para baixo/Minimizar Win + Shift + ← ou →: Mover entre múltiplos monitores Win + Alt + ← ou → ou ↑ ou ↓: Mover a janela sem maximizar ou minimizar Com a janela não minimizada, pressione Alt + Espaço seguido de M, e então use as teclas de seta para mover.\n※ Como a janela segue o cursor do mouse, você pode resgatá-la mesmo se ela estiver fora da tela visível. Encerrar processos com o Gerenciador de Tarefas Você pode abrir o Gerenciador de Tarefas com Ctrl + Shift + Esc. Alterne entre as abas usando Ctrl + Tab. Na aba Detalhes, após pressionar Tab, você pode buscar o processo digitando letras iniciais no teclado. Com o nome do processo selecionado, pressione a tecla Delete seguida de Enter para encerrá-lo. Encerrar processos por nome via comando Você pode encerrar um processo usando taskkill /f /im NomeDoProcesso. Por exemplo, taskkill /f /im explorer.exe encerrará o Explorer. Iniciar várias instâncias do mesmo programa a partir da barra de tarefas Segure Shift e clique com o botão esquerdo do mouse em um ícone na barra de tarefas para abrir outra instância do mesmo programa (apenas para aplicativos que suportam múltiplas instâncias). Executar programas como Administrador Segure Ctrl + Shift ao clicar em um programa para executá-lo com privilégios de Administrador. Abrir o Explorador de Arquivos (Explorer) Pressione Win + E para abrir o Explorador de Arquivos. Pressione Win + R para abrir \u0026ldquo;Executar\u0026rdquo;, digite explorer e pressione Enter. Pressione Ctrl + Shift + N para criar uma nova pasta. Abrir o Prompt de Comando no local atual no Explorer No Windows 11, você pode abrir o Prompt de Comando selecionando \u0026ldquo;Abrir no Terminal\u0026rdquo; no menu do botão direito. Alternativamente, digite cmd na barra de endereços do Explorer e pressione Enter para abrir o Prompt de Comando. Mostrar histórico da área de clipboard (área de transferência) Win + V mostra o histórico da área de transferência. Você pode selecionar textos ou imagens copiados anteriormente para copiá-los novamente. Executar (Arquivo) Win + R abre a caixa de diálogo \u0026ldquo;Executar\u0026rdquo;. Abaixo estão alguns comandos que podem ser usados em \u0026ldquo;Executar\u0026rdquo; ou no Prompt de Comando.\nAbrir o Edge Digite msedge e pressione Enter Abrir o Internet Explorer 11 (IE11) Digite powershell.exe -Command \u0026quot;(New-Object -ComObject InternetExplorer.Application).Visible = $true\u0026quot; e pressione Enter Abrir o Terminal Digite wt e pressione Enter Abrir o Painel de Controle Digite control e pressione Enter Também pode ser aberto com explorer.exe shell:::{26EE0668-A00A-44D7-9371-BEB064C98683}. Iniciar o Bloco de Notas Digite notepad e pressione Enter Iniciar a Calculadora Digite calc e pressione Enter Iniciar o Paint Digite mspaint e pressione Enter Iniciar o PowerShell Digite powershell e pressione Enter Iniciar o Visual Studio Code Digite code e pressione Enter Iniciar o Excel Digite excel e pressione Enter\n※ Apenas se o Excel estiver instalado. Abrir o Word Digite winword e pressione Enter\n※ Apenas se o Word estiver instalado. Abrir o PowerPoint Digite powerpnt e pressione Enter\n※ Apenas se o PowerPoint estiver instalado. Abrir a Configuração do Sistema Digite msconfig e pressione Enter Abrir as Propriedades do Sistema Digite sysdm.cpl e pressione Enter Abrir informações sobre o Windows Digite winver e pressione Enter Abrir o Teclado Virtual Digite osk e pressione Enter Abrir o WordPad Digite wordpad ou write e pressione Enter Abrir o Editor do Registro Digite regedit e pressione Enter Abrir Programas e Recursos Digite explorer.exe shell:::{7b81be6a-ce2b-4676-a29e-eb907a5126c5} e pressione Enter Abrir Propriedades do Teclado Digite explorer.exe shell:::{725BE8F7-668E-4C7B-8F90-46BDB0936430} e pressione Enter Abrir Propriedades do Mouse Digite explorer.exe shell:::{6C8EEC18-8D75-41B2-A177-8831D59D2D50} e pressione Enter Abrir Configurações de Som Digite explorer.exe shell:::{F2DDFC82-8F12-4CDD-B7DC-D4FE1425AA4D} e pressione Enter Abrir Contas de Usuário Digite explorer.exe shell:::{60632754-c523-4b62-b45c-4172da012619} e pressione Enter Copiar o texto de caixas de mensagem padrão Você pode copiar o texto de uma caixa de mensagem padrão com Ctrl + C. Se você copiar a caixa de mensagem acima, o seguinte será copiado para a área de transferência: 1 2 3 4 5 6 7 [Window Title] WordPad [Main Instruction] Deseja salvar as alterações em Documento? [Salvar (S)] [Não Salvar (N)] [Cancelar] Armazenar a saída do Prompt de Comando na área de transferência Adicionar | clip (pipe+clip) ao final de um comando, como echo \u0026quot;hello\u0026quot; | clip, copia a saída padrão para a área de transferência.\nSaída de texto da hierarquia de pastas No Prompt de Comando, você pode gerar a hierarquia de pastas em formato de árvore usando o comando tree.\nExemplo de saída:\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 C:. ├─.idea │ └─libraries ├─binaryeditorbz ├─blog │ ├─archetypes │ ├─content │ ├─data │ ├─layouts │ ├─static │ └─themes │ └─PaperMod │ ├─.git │ │ ├─branches │ │ ├─hooks │ │ ├─info │ │ ├─logs │ │ │ └─refs │ │ │ ├─heads │ │ │ └─remotes │ │ │ └─origin │ │ ├─objects │ │ │ ├─info │ │ │ └─pack │ │ └─refs │ │ ├─heads │ │ ├─remotes │ │ │ └─origin │ │ └─tags │ ├─.github │ │ ├─ISSUE_TEMPLATE │ │ └─workflows │ ├─assets │ │ ├─css │ │ │ ├─common │ │ │ ├─core │ │ │ ├─extended │ │ │ ├─hljs │ │ │ └─includes │ │ └─js │ ├─i18n │ ├─images │ └─layouts │ ├─partials │ │ └─templates │ ├─shortcodes │ └─_default │ └─_markup (omitido) Referências Atalhos de teclado no Windows ","date":"2022-09-18T23:49:29+09:00","image":"http://kenji.blog/p/windows-%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E5%B0%8F%E6%8A%80%E9%9B%86/img_hu13a9ab529476901cdea6aea124c07798_315814_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/windows-%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E5%B0%8F%E6%8A%80%E9%9B%86/","title":"Atalhos e Dicas do Windows"},{"content":"Apresentarei o software de edição de imagens paint.net, que costumo usar no meu trabalho de desenvolvimento.\nPontos úteis que o Paint padrão do Windows não faz Pode lidar com transparência e opacidade Pode fazer seleção automática de formas de área complexas Pode lidar com camadas Pode ajustar correção de nível, brilho, contraste, etc. Pode aplicar vários efeitos (desfoque, distorção, ruído, etc.) Outras características Gratuito para usar Operação relativamente leve Intuitivo de usar e não tem muitas peculiaridades Japonês (suporte multilíngue) É um software altamente funcional, mas fácil de usar. Eu mesmo ainda não domino todos os recursos.\nInstale aqui https://www.getpaint.net/download.html\nSe você escolher a versão gratuita, clique na parte circulada em vermelho abaixo no link.\nParece que se você instalar pela Microsoft Store, será pago, mas em troca receberá atualizações automáticas. Mesmo com a versão gratuita, você será notificado sobre as atualizações mais recentes, para que possa atualizar sem problemas.\n","date":"2022-09-14T19:33:31+09:00","image":"http://kenji.blog/p/paint.net%E3%81%AE%E9%AD%85%E5%8A%9B/img_hu407db422a0531b2d8a8b6fa0ee25fc6c_64699_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/paint.net%E3%81%AE%E9%AD%85%E5%8A%9B/","title":"O encanto do paint.net"},{"content":"Para configurar um domínio personalizado em um repositório Github, você precisa alterar as configurações de DNS do seu domínio. Aqui, explicaremos assumindo que você gerencia seu domínio com Onamae.com. Você pode fazer configurações semelhantes reescrevendo os registros A com outros registradores.\nAlterar as configurações de DNS no Onamae.com Para alterar as configurações de DNS do seu domínio, faça login na tela de gerenciamento do Onamae.com. Após o login, vá para a tela de gerenciamento de domínio. Quando estiver na tela de gerenciamento de domínio, altere as configurações de DNS. Para alterar as configurações de DNS, configure da seguinte forma:\nAcesse https://www.onamae.com/ e clique em \u0026ldquo;Login Onamae.com Navi\u0026rdquo; Insira sua \u0026ldquo;ID Onamae (ID de membro)\u0026rdquo; e \u0026ldquo;Senha\u0026rdquo; e clique no botão de login Clique em \u0026ldquo;Configurações do servidor de nomes\u0026rdquo; Clique em \u0026ldquo;Configurações de DNS do domínio\u0026rdquo; Selecione o domínio que deseja configurar e clique em \u0026ldquo;Avançar\u0026rdquo; Clique em \u0026ldquo;Configurar\u0026rdquo; à direita de \u0026ldquo;Usar configuração de registro DNS\u0026rdquo; Selecione A para TYPE, insira 3600 para TTL e \u0026ldquo;185.199.108.153\u0026rdquo; para VALUE e clique em \u0026ldquo;Adicionar\u0026rdquo; Semelhante a 7., adicione também para \u0026ldquo;185.199.109.153\u0026rdquo;, \u0026ldquo;185.199.110.153\u0026rdquo; e \u0026ldquo;185.199.111.153\u0026rdquo; Certifique-se de que a caixa de seleção está marcada em \u0026ldquo;Confirmação de alteração do servidor de nomes para configuração de registro DNS\u0026rdquo; e clique em \u0026ldquo;Ir para a tela de configuração\u0026rdquo; Se for exibida uma tela dizendo \u0026ldquo;Para evitar alterações não intencionais nas configurações de DNS\u0026rdquo;, clique em \u0026ldquo;Não configurar\u0026rdquo; (selecione conforme necessário) Verifique os detalhes da configuração e clique em \u0026ldquo;Configurar\u0026rdquo; Isso conclui as configurações de DNS. Pode levar até cerca de 72 horas para que a reflexão seja concluída. Se não for refletido após 72 horas, tente entrar em contato com o suporte do Onamae.com. Para verificar se as configurações estão refletidas no seu ambiente local, tente executar o seguinte comando. Substitua a parte example.com pelo domínio que você deseja verificar.\nPara Linux, Mac 1 dig example.com +noall +answer -t A Se o resultado for o seguinte, a configuração foi refletida.\n1 2 3 4 example.com. 0 IN A 185.199.108.153 example.com. 0 IN A 185.199.109.153 example.com. 0 IN A 185.199.110.153 example.com. 0 IN A 185.199.111.153 Para Windows 1 nslookup -q=a example.com 8.8.8.8 Se o resultado for o seguinte, a configuração foi refletida.\n1 2 3 4 5 6 7 8 9 Servidor: dns.google Address: 8.8.8.8 Resposta não autoritativa: Nome: example.com Addresses: 185.199.108.153 185.199.109.153 185.199.110.153 185.199.111.153 Configurar um domínio personalizado em um repositório Github Abra a página do repositório e clique em Settings Clique em Pages Se você estiver publicando o código-fonte do repositório como está, selecione \u0026ldquo;Deploy from a branch\u0026rdquo; em Source. Se você estiver compilando o código-fonte, como HUGO, selecione \u0026ldquo;GitHub Actions\u0026rdquo;. Selecione a branch a publicar em Branch e clique em Save Insira o domínio que você obteve em Custom domain e clique em Save. Se necessário, marque a caixa \u0026ldquo;Enforce HTTPS\u0026rdquo; para ativar o suporte HTTPS [PR] ","date":"2022-09-13T01:16:40+09:00","image":"http://kenji.blog/p/github%E3%83%AA%E3%83%9D%E3%82%B8%E3%83%88%E3%83%AA%E3%81%AB%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%A0%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/images/octocat_hu8f3e107f91a1c645c9aa316280652835_20372_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/como-configurar-um-dom%C3%ADnio-personalizado-em-um-reposit%C3%B3rio-github/","title":"Como configurar um domínio personalizado em um repositório Github"},{"content":"O comando dotnet.exe é útil para se ter à mão, pois permite até mesmo construir programas simples.\nInstalação do .NET SDK O dotnet.exe está incluído no .NET SDK, portanto, primeiro instalamos o .NET SDK. Inicie o cmd.exe com privilégios de administrador e execute o seguinte comando.\n1 winget install Microsoft.DotNet.SDK.6 Gerar .gitignore O comando para gerar o .gitignore com o dotnet.exe é o seguinte.\n1 dotnet new gitignore O .gitignore gerado é o seguinte.\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 ## Ignore Visual Studio temporary files, build results, and ## files generated by popular Visual Studio add-ons. ## ## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore # User-specific files *.rsuser *.suo *.user *.userosscache *.sln.docstates # User-specific files (MonoDevelop/Xamarin Studio) *.userprefs # Mono auto generated files mono_crash.* # Build results [Dd]ebug/ [Dd]ebugPublic/ [Rr]elease/ [Rr]eleases/ x64/ x86/ [Ww][Ii][Nn]32/ [Aa][Rr][Mm]/ [Aa][Rr][Mm]64/ bld/ [Bb]in/ [Oo]bj/ [Ll]og/ [Ll]ogs/ # Visual Studio 2015/2017 cache/options directory .vs/ # Uncomment if you have tasks that create the project\u0026#39;s static files in wwwroot #wwwroot/ # Visual Studio 2017 auto generated files Generated\\ Files/ # MSTest test Results [Tt]est[Rr]esult*/ [Bb]uild[Ll]og.* # NUnit *.VisualState.xml TestResult.xml nunit-*.xml # Build Results of an ATL Project [Dd]ebugPS/ [Rr]eleasePS/ dlldata.c # Benchmark Results BenchmarkDotNet.Artifacts/ # .NET project.lock.json project.fragment.lock.json artifacts/ # Tye .tye/ # ASP.NET Scaffolding ScaffoldingReadMe.txt # StyleCop StyleCopReport.xml # Files built by Visual Studio *_i.c *_p.c *_h.h *.ilk *.meta *.obj *.iobj *.pch *.pdb *.ipdb *.pgc *.pgd *.rsp *.sbr *.tlb *.tli *.tlh *.tmp *.tmp_proj *_wpftmp.csproj *.log *.vspscc *.vssscc .builds *.pidb *.svclog *.scc # Chutzpah Test files _Chutzpah* # Visual C++ cache files ipch/ *.aps *.ncb *.opendb *.opensdf *.sdf *.cachefile *.VC.db *.VC.VC.opendb # Visual Studio profiler *.psess *.vsp *.vspx *.sap # Visual Studio Trace Files *.e2e # TFS 2012 Local Workspace $tf/ # Guidance Automation Toolkit *.gpState # ReSharper is a .NET coding add-in _ReSharper*/ *.[Rr]e[Ss]harper *.DotSettings.user # TeamCity is a build add-in _TeamCity* # DotCover is a Code Coverage Tool *.dotCover # AxoCover is a Code Coverage Tool .axoCover/* !.axoCover/settings.json # Coverlet is a free, cross platform Code Coverage Tool coverage*.json coverage*.xml coverage*.info # Visual Studio code coverage results *.coverage *.coveragexml # NCrunch _NCrunch_* .*crunch*.local.xml nCrunchTemp_* # MightyMoose *.mm.* AutoTest.Net/ # Web workbench (sass) .sass-cache/ # Installshield output folder [Ee]xpress/ # DocProject is a documentation generator add-in DocProject/buildhelp/ DocProject/Help/*.HxT DocProject/Help/*.HxC DocProject/Help/*.hhc DocProject/Help/*.hhk DocProject/Help/*.hhp DocProject/Help/Html2 DocProject/Help/html # Click-Once directory publish/ # Publish Web Output *.[Pp]ublish.xml *.azurePubxml # Note: Comment the next line if you want to checkin your web deploy settings, # but database connection strings (with potential passwords) will be unencrypted *.pubxml *.publishproj # Microsoft Azure Web App publish settings. Comment the next line if you want to # checkin your Azure Web App publish settings, but sensitive information contained # in these scripts will be unencrypted PublishScripts/ # NuGet Packages *.nupkg # NuGet Symbol Packages *.snupkg # The packages folder can be ignored because of Package Restore **/[Pp]ackages/* # except build/, which is used as an MSBuild target. !**/[Pp]ackages/build/ # Uncomment if necessary however generally it will be regenerated when needed #!**/[Pp]ackages/repositories.config # NuGet v3\u0026#39;s project.json files produces more ignorable files *.nuget.props *.nuget.targets # Microsoft Azure Build Output csx/ *.build.csdef # Microsoft Azure Emulator ecf/ rcf/ # Windows Store app package directories and files AppPackages/ BundleArtifacts/ Package.StoreAssociation.xml _pkginfo.txt *.appx *.appxbundle *.appxupload # Visual Studio cache files # files ending in .cache can be ignored *.[Cc]ache # but keep track of directories ending in .cache !?*.[Cc]ache/ # Others ClientBin/ ~$* *~ *.dbmdl *.dbproj.schemaview *.jfm *.pfx *.publishsettings orleans.codegen.cs # Including strong name files can present a security risk # (https://github.com/github/gitignore/pull/2483#issue-259490424) #*.snk # Since there are multiple workflows, uncomment next line to ignore bower_components # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) #bower_components/ # RIA/Silverlight projects Generated_Code/ # Backup \u0026amp; report files from converting an old project file # to a newer Visual Studio version. Backup files are not needed, # because we have git ;-) _UpgradeReport_Files/ Backup*/ UpgradeLog*.XML UpgradeLog*.htm ServiceFabricBackup/ *.rptproj.bak # SQL Server files *.mdf *.ldf *.ndf # Business Intelligence projects *.rdl.data *.bim.layout *.bim_*.settings *.rptproj.rsuser *- [Bb]ackup.rdl *- [Bb]ackup ([0-9]).rdl *- [Bb]ackup ([0-9][0-9]).rdl # Microsoft Fakes FakesAssemblies/ # GhostDoc plugin setting file *.GhostDoc.xml # Node.js Tools for Visual Studio .ntvs_analysis.dat node_modules/ # Visual Studio 6 build log *.plg # Visual Studio 6 workspace options file *.opt # Visual Studio 6 auto-generated workspace file (contains which files were open etc.) *.vbw # Visual Studio LightSwitch build output **/*.HTMLClient/GeneratedArtifacts **/*.DesktopClient/GeneratedArtifacts **/*.DesktopClient/ModelManifest.xml **/*.Server/GeneratedArtifacts **/*.Server/ModelManifest.xml _Pvt_Extensions # Paket dependency manager .paket/paket.exe paket-files/ # FAKE - F# Make .fake/ # CodeRush personal settings .cr/personal # Python Tools for Visual Studio (PTVS) __pycache__/ *.pyc # Cake - Uncomment if you are using it # tools/** # !tools/packages.config # Tabs Studio *.tss # Telerik\u0026#39;s JustMock configuration file *.jmconfig # BizTalk build output *.btp.cs *.btm.cs *.odx.cs *.xsd.cs # OpenCover UI analysis results OpenCover/ # Azure Stream Analytics local run output ASALocalRun/ # MSBuild Binary and Structured Log *.binlog # NVidia Nsight GPU debugger configuration file *.nvuser # MFractors (Xamarin productivity tool) working folder .mfractor/ # Local History for Visual Studio .localhistory/ # BeatPulse healthcheck temp database healthchecksdb # Backup folder for Package Reference Convert tool in Visual Studio 2017 MigrationBackup/ # Ionide (cross platform F# VS Code tools) working folder .ionide/ # Fody - auto-generated XML schema FodyWeavers.xsd ## ## Visual studio for Mac ## # globs Makefile.in *.userprefs *.usertasks config.make config.status aclocal.m4 install-sh autom4te.cache/ *.tar.gz tarballs/ test-results/ # Mac bundle stuff *.dmg *.app # content below from: https://github.com/github/gitignore/blob/master/Global/macOS.gitignore # General .DS_Store .AppleDouble .LSOverride # Icon must end with two \\r Icon # Thumbnails ._* # Files that might appear in the root of a volume .DocumentRevisions-V100 .fseventsd .Spotlight-V100 .TemporaryItems .Trashes .VolumeIcon.icns .com.apple.timemachine.donotpresent # Directories potentially created on remote AFP share .AppleDB .AppleDesktop Network Trash Folder Temporary Items .apdisk # content below from: https://github.com/github/gitignore/blob/master/Global/Windows.gitignore # Windows thumbnail cache files Thumbs.db ehthumbs.db ehthumbs_vista.db # Dump file *.stackdump # Folder config file [Dd]esktop.ini # Recycle Bin used on file shares $RECYCLE.BIN/ # Windows Installer files *.cab *.msi *.msix *.msm *.msp # Windows shortcuts *.lnk # JetBrains Rider .idea/ *.sln.iml ## ## Visual Studio Code ## .vscode/* !.vscode/settings.json !.vscode/tasks.json !.vscode/launch.json !.vscode/extensions.json Existem muitos arquivos para o Visual Studio, mas também inclui itens que geralmente não precisam ser gerenciados no git, como o .DS_Store do Mac.\nSites de Referência Instalar o .NET no Windows ","date":"2022-09-13T00:25:12+09:00","image":"http://kenji.blog/p/dotnet%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%A7.gitignore%E3%82%92%E7%94%9F%E6%88%90%E3%81%99%E3%82%8B/img_1_huc51d4f51d02497db3544f94dd1182dc1_19208_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/dotnet%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%A7.gitignore%E3%82%92%E7%94%9F%E6%88%90%E3%81%99%E3%82%8B/","title":"Gerar .gitignore com o comando dotnet"},{"content":"Quando me lembrei dos meus jogos favoritos, a lista acabou sendo só de clássicos consagrados. Como muitos são antigos, se você ainda não jogou, por favor, experimente.\nGame Boy O Game Boy original é um console portátil lançado pela Nintendo em 1989. Posteriormente, foram lançados sucessores como o Game Boy Color e o Game Boy Advance.\n① Sa・Ga 2: Hihou Densetsu Um jogo de RPG lançado pela Square (agora Square Enix) em 1990. É uma história onde você coleta relíquias escondidas em várias fases. Foi o primeiro jogo de RPG que eu joguei.\n② Kirby\u0026rsquo;s Dream Land Um jogo de ação lançado pela Nintendo em 1992. Desenvolvido pela HAL Laboratory. Um jogo onde você avança sugando inimigos e flutuando no ar sugando ar. A música e os efeitos sonoros são muito bem feitos, tornando-o um jogo rítmico.\n③ Pokémon Red e Green Um jogo de RPG lançado pela Nintendo em 1996. Desenvolvido por Nintendo EAD, Game Freak e Creatures. Depois disso, foi transformado em anime e ganhou popularidade explosiva, mas eu só joguei esta primeira geração.\nSuper Famicom Um console de videogame doméstico lançado pela Nintendo em 1990. Conhecido no exterior como SNES (Super Nintendo Entertainment System).\n④ Super Mario Kart Um jogo para Super Famicom lançado pela Nintendo em 1992. Um jogo de corrida onde você compete pela posição enquanto atrapalha os oponentes jogando cascos e bananas. Lembro-me de jogar junto com a família e amigos.\n⑤ Dragon Quest V: Hand of the Heavenly Bride Um jogo de RPG lançado pela Enix em 1992. É um jogo que também tem elementos de escolher uma parceira de casamento e fazer dos monstros derrotados seus aliados. Joguei muito até conseguir recrutar vários Metal Slimes (Hagure Metal).\n⑥ Final Fantasy V Um jogo de RPG lançado pela Square em 1992. Tem um elemento de repetição onde você escolhe trabalhos (jobs) e domina habilidades. Assim como em Dragon Quest, lembro-me de subir de nível sem parar nas cavernas.\n⑦ Torneko\u0026rsquo;s Great Adventure: Mystery Dungeon Um jogo roguelike lançado pela Chunsoft em 1993. O predecessor da série Mystery Dungeon. Sua característica é que o formato da masmorra muda aleatoriamente toda vez. O slogan é \u0026ldquo;O RPG que você pode jogar 1000 vezes\u0026rdquo;.\n⑧ Mystery Dungeon 2: Shiren the Wanderer Um jogo roguelike lançado pela Chunsoft em 1995. Uma sequência de \u0026ldquo;Torneko\u0026rsquo;s Great Adventure\u0026rdquo; da série Mystery Dungeon. Existem lojas dentro da masmorra onde você pode comprar itens. (Se você sair da loja sem comprar, o lojista correrá atrás de você.)\n⑨ EarthBound (MOTHER 2) O segundo jogo da série MOTHER, lançado pela Nintendo em 1994. Desenvolvido por Ape e HAL Laboratory. Mais tarde, em 2006, MOTHER 3 foi lançado. É uma obra produzida por Shigesato Itoi, e está repleta de uma visão de mundo única e palavras filosóficas.\n⑩ The Legend of Zelda: A Link to the Past Um jogo de ação e aventura lançado pela Nintendo em 1991. Um jogo onde você avança coletando vários itens e resolvendo pequenos quebra-cabeças. Várias sequências foram lançadas depois. (Referência)\nNintendo Switch Um console de videogame doméstico lançado pela Nintendo em 2017.\n⑪ Splatoon 2 Um jogo de tiro e ação lançado pela Nintendo em 2017. Um jogo onde você usa tinta para garantir território ou derrotar oponentes para vencer. Em 2022, a sequência Splatoon 3 foi lançada.\n","date":"2022-09-12T19:28:50+09:00","image":"http://kenji.blog/p/%E5%A5%BD%E3%81%8D%E3%81%AA%E3%82%B2%E3%83%BC%E3%83%A011%E9%81%B8/img_12_hu03b5dadc912359ffea73dab76258d285_471079_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/11-jogos-favoritos/","title":"11 Jogos Favoritos"},{"content":"O comando para evitar a geração automática do .DS_Store no macOS é o seguinte. Por favor, execute-o no terminal.\n1 defaults write com.apple.desktopservices DSDontWriteNetworkStores true Após executar o comando, reinicie o Finder.\n1 killall Finder Para restaurar a configuração original, execute o seguinte comando.\n1 defaults delete com.apple.desktopservices DSDontWriteNetworkStores false Assim como acima, se você alterar a configuração, reinicie o Finder.\n1 killall Finder ","date":"2022-09-12T16:03:42+09:00","image":"http://kenji.blog/p/macos%E3%81%A7.ds_store%E3%82%92%E8%87%AA%E5%8B%95%E7%94%9F%E6%88%90%E3%81%97%E3%81%AA%E3%81%84%E3%82%88%E3%81%86%E3%81%AB%E3%81%99%E3%82%8B%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89/img_hu4b5bbd3b572a7a7eb2cc4ecf633430af_78743_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/comando-para-evitar-a-geracao-automatica-de-ds-store-no-macos/","title":"Comando para evitar a geração automática de .DS_Store no macOS"},{"content":"Mova o diretório atual para a pasta de destino e execute o seguinte comando para excluir em lote os arquivos .DS_Store, incluindo aqueles em subpastas.\n1 Get-ChildItem . -include \u0026#39;.DS_Store\u0026#39; -Recurse -Force | Remove-Item -Force ","date":"2022-09-12T10:11:42+09:00","image":"http://kenji.blog/p/powershell%E3%81%A7.ds_store%E3%82%92%E4%B8%80%E6%8B%AC%E5%89%8A%E9%99%A4%E3%81%99%E3%82%8B/img_hu95c0724bd9a903eadf46c7f648acb682_8907_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/excluir-.ds_store-em-lote-com-powershell/","title":"Excluir .DS_Store em lote com PowerShell"},{"content":"Shortcodes úteis no HUGO YouTube {{\u0026lt;youtube 123456abc\u0026gt;}}\nTwitter {{\u0026lt;twitter 123456abc\u0026gt;}}\nInstagram {{\u0026lt;instagram 123456abc\u0026gt;}}\nFlickr {{\u0026lt;flickr 123456abc\u0026gt;}}\nVimeo {{\u0026lt;vimeo 123456abc\u0026gt;}}\nOutros Shortcodes\nNota adicional Para exibir {{\u0026lt; foo \u0026gt;}} no site, você precisa escrever {{\u0026lt;/* foo */\u0026gt;}}.\n","date":"2022-09-11T22:59:52+09:00","image":"http://kenji.blog/p/hugo%E3%81%A7%E4%BD%BF%E3%81%88%E3%82%8B%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%B3%E3%83%BC%E3%83%89/img_hu415dc7e70376ac350673d0366f70ca4b_19909_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/hugo%E3%81%A7%E4%BD%BF%E3%81%88%E3%82%8B%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%B3%E3%83%BC%E3%83%89/","title":"Shortcodes úteis no HUGO"},{"content":"O layout padrão posiciona a imagem no centro com 100% de largura, mas como às vezes parecia um pouco grande, tentei fazer a imagem contornar abaixo do título, e mudei a largura para cerca de 150px.\nAs alterações nos arquivos são as seguintes.\nblank.css Para alterar as margens, tamanho da imagem e linhas de exibição do texto, adicionamos a seguinte descrição em blank.css.\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 .entry-content { -webkit-line-clamp: 4; } .entry-footer { text-align: right; } .entry-cover { margin-bottom: initial; text-align: center; } .entry-cover img { border-radius: 4px; display: inline; max-width: 100%; } .post-meta { display: block; text-align: right; } post-entry.css Como não pude remover a definição no blank.css, excluí 1 linha no seguinte local em post-entry.css.\n1 2 3 4 5 6 .entry-cover img { border-radius: var(--radius); pointer-events: none; /* width: 100%; */ ← Remover esta linha height: auto; } list.html Para alterar o layout da imagem, modifiquei o seguinte local em list.html.\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 \u0026lt;article class=\u0026#34;{{ $class }}\u0026#34;\u0026gt; \u0026lt;!-- {{- $isHidden := (site.Params.cover.hidden | default site.Params.cover.hiddenInList) }} --\u0026gt;\u0026lt;!-- Movido para baixo --\u0026gt; \u0026lt;!-- {{- partial \u0026#34;cover.html\u0026#34; (dict \u0026#34;cxt\u0026#34; . \u0026#34;IsHome\u0026#34; true \u0026#34;isHidden\u0026#34; $isHidden) }} --\u0026gt;\u0026lt;!-- Movido para baixo --\u0026gt; \u0026lt;header class=\u0026#34;entry-header\u0026#34;\u0026gt; \u0026lt;h2\u0026gt; {{- .Title }} {{- if .Draft }}\u0026lt;sup\u0026gt;\u0026lt;span class=\u0026#34;entry-isdraft\u0026#34;\u0026gt;\u0026amp;nbsp;\u0026amp;nbsp;[draft]\u0026lt;/span\u0026gt;\u0026lt;/sup\u0026gt;{{- end }} \u0026lt;/h2\u0026gt; \u0026lt;/header\u0026gt; \u0026lt;div style=\u0026#34;display:flex;\u0026#34;\u0026gt;\u0026lt;!-- Adicionado --\u0026gt; \u0026lt;div style=\u0026#34;max-width:150px;margin:11px 15px 0px 0px;\u0026#34;\u0026gt;\u0026lt;!-- Adicionado --\u0026gt; {{- $isHidden := (site.Params.cover.hidden | default site.Params.cover.hiddenInList) }}\u0026lt;!-- Movido de cima --\u0026gt; {{- partial \u0026#34;cover.html\u0026#34; (dict \u0026#34;cxt\u0026#34; . \u0026#34;IsHome\u0026#34; true \u0026#34;isHidden\u0026#34; $isHidden) }}\u0026lt;!-- Movido de cima --\u0026gt; \u0026lt;/div\u0026gt;\u0026lt;!-- Adicionado --\u0026gt; \u0026lt;div style=\u0026#34;width:100%;\u0026#34;\u0026gt;\u0026lt;!-- Adicionado --\u0026gt; {{- if (ne (.Param \u0026#34;hideSummary\u0026#34;) true) }} \u0026lt;div class=\u0026#34;entry-content\u0026#34;\u0026gt; \u0026lt;p\u0026gt;{{ .Summary | plainify | htmlUnescape }}{{ if .Truncated }}...{{ end }}\u0026lt;/p\u0026gt; \u0026lt;/div\u0026gt; {{- end }} {{- if not (.Param \u0026#34;hideMeta\u0026#34;) }} \u0026lt;footer class=\u0026#34;entry-footer\u0026#34;\u0026gt; {{- partial \u0026#34;post_meta.html\u0026#34; . -}} \u0026lt;/footer\u0026gt; {{- end }} \u0026lt;a class=\u0026#34;entry-link\u0026#34; aria-label=\u0026#34;post link to {{ .Title | plainify }}\u0026#34; href=\u0026#34;{{ .Permalink }}\u0026#34;\u0026gt;\u0026lt;/a\u0026gt; \u0026lt;/div\u0026gt;\u0026lt;!-- Adicionado --\u0026gt; \u0026lt;/div\u0026gt;\u0026lt;!-- Adicionado --\u0026gt; \u0026lt;/article\u0026gt; Parece que não são poucos os pedidos semelhantes.\nhttps://github.com/adityatelange/hugo-PaperMod/discussions/159#discussioncomment-247844\nSeria bom se os desenvolvedores originais também pudessem suportar isso.\n","date":"2022-09-11T18:50:40+09:00","image":"http://kenji.blog/p/papermod%E3%81%AE%E7%94%BB%E5%83%8F%E3%81%AE%E9%85%8D%E7%BD%AE%E5%A4%89%E6%9B%B4/images/img_hu42e770ebe6b22298fe9d1751d1191316_24734_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/alterar-o-layout-da-imagem-no-papermod/","title":"Alterar o Layout da Imagem no PaperMod"},{"content":"Introdução O tema PaperMod suporta Twitter Cards. No entanto, as configurações do Twitter Card devem ser descritas no config.toml ou nas informações de cabeçalho de *.md de cada artigo. Se você configurar em cada artigo e no config.toml, as informações de cabeçalho de cada artigo terão prioridade.\nComo Configurar config.toml No config.toml, adicione um item chamado images em [params]. Em images, descreva o caminho da imagem para exibir no Twitter Card. Se você colocar a imagem na pasta static, especificar apenas o nome do arquivo é o suficiente.\n1 2 [params] images = [\u0026#34;twitter_card.jpg\u0026#34;] Estrutura de Pastas\n1 2 3 4 5 6 7 8 9 10 root │ config.toml (Escreva aqui) ├─content │ └─posts │ └─Pasta do artigo │ │ index.md (Escreva aqui) │ └─images │ cover.png (Coloque aqui) └─static twitter_card.jpg (Coloque aqui) Informações de Cabeçalho de Cada Artigo Nas informações de cabeçalho de cada artigo, adicione um item chamado image sob cover. Se você definir relative como true, poderá especificar com um caminho relativo a partir do *.md do artigo.\n1 2 3 cover: image: \u0026#34;images/cover.jpg\u0026#34; relative: true Se você não quiser exibir na parte superior do artigo Se você não deseja exibir a imagem de capa na parte superior do artigo, adicione um item chamado hidden sob cover e defina-o como true.\n1 2 3 4 cover: image: \u0026#34;images/cover.jpg\u0026#34; relative: true hidden: true Sobre o Tamanho da Imagem Na especificação atual do PaperMod, parece que o tamanho do Twitter Card suporta apenas summary_large_image. O tamanho adequado (resolução) de summary_large_image tem várias teorias, mas cerca de 800 x 418 (proporção de imagem 1.91:1) parece bom.\nSite de referência 1 Site de referência 2\nRecomendamos redimensionar o tamanho da imagem antes de postar, se possível.\nComo Verificar as Configurações Para verificar as configurações do Twitter Card, use o Twitter Card Validator. No entanto, como a pré-visualização não foi exibida corretamente no meu ambiente, se a pré-visualização não aparecer, recomendo que você verifique uma vez antes de postar usando uma conta privada ou similar.\n","date":"2022-09-10T18:41:22+09:00","image":"http://kenji.blog/p/papermod%E3%81%A7twitter-card%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/images/img_hu5e280b2f775d1811bb256626ef7709c6_973665_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/papermod%E3%81%A7twitter-card%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/","title":"Como Configurar o Twitter Card com o PaperMod"},{"content":"Introdução O GitHub Copilot é uma ferramenta de autocompletar código baseada em IA desenvolvida pelo GitHub. Você pode usar o GitHub Copilot no IntelliJ IDEA instalando o plugin GitHub Copilot no ambiente de desenvolvimento IntelliJ IDEA. É necessária uma conta do GitHub para a ativação.\nComo instalar Selecione Settings (Configurações) no menu File (Arquivo) do IntelliJ IDEA Selecione Plugins e procure por \u0026ldquo;GitHub Copilot\u0026rdquo; na busca Instale a partir do botão de instalação Pressione o botão Restart IDE para reiniciar o IntelliJ IDEA A instalação estará completa quando o IntelliJ IDEA for reiniciado. Ativação Clique no ícone no canto inferior direito Clique em Login to Github Clique no botão Copy and Open O navegador será aberto. Se você não estiver logado no GitHub, faça o login, cole o código com Ctrl+V e clique no botão Continue Clique no botão Authorize GitHub Copilot Plugin Se a tela acima for exibida, a ativação está completa. Como usar Quando você digita alguns caracteres no editor do IntelliJ IDEA, o GitHub Copilot começa a propor continuações para o seu código. Aproveite o poderoso recurso de autocompletar da IA!\n","date":"2022-09-10T09:44:55+09:00","image":"http://kenji.blog/p/intellij-idea%E3%81%A7github-copilot%E3%82%92%E4%BD%BF%E3%81%86/images/img_hu78c7d99017ff4692861292fedffeefef_291492_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/usando-github-copilot-no-intellij-idea/","title":"Usando o GitHub Copilot no IntelliJ IDEA"},{"content":"Introdução Go é uma linguagem de programação relativamente nova lançada pelo Google em 2009. O compilador, ferramentas e bibliotecas do Go são de código aberto. Além disso, Go é uma linguagem estaticamente tipada como C e Java, mas não usa ponteiros da mesma forma que a linguagem C.\nMétodo de instalação Instalar o Go\nInstaladores para cada plataforma estão publicados no site acima.\nSiga as telas para prosseguir com a instalação. Instalação concluída. É simples, não é?\nPrimeiro programa Salve o seguinte programa como hello.go.\n1 2 3 4 5 6 7 package main import \u0026#34;fmt\u0026#34; func main() { fmt.Printf(\u0026#34;Hello World\\n\u0026#34;) } Ao executar go run hello.go no prompt de comando ou terminal, será exibido Hello, world!.\nAo compilar, executar go build hello.go irá gerar hello.exe. Executar hello.exe exibirá Hello, world!.\nVocê também pode executar código na página da Web https://go.dev/play/\nDocumentação Japonesa http://go.shibu.jp/\nAs explicações necessárias para aprender Go estão reunidas no link acima (versão traduzida em japonês). A tecnologia relacionada ao Go é tão aberta e rica que quase não há necessidade de comprar textos em papel.\nEntão, aproveite sua vida com Go!\n","date":"2022-09-10T00:48:17+09:00","image":"http://kenji.blog/p/go%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/images/cover_hu90f0e026fa77d6f7268f9adc11e245d4_5801_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/como-instalar-o-go/","title":"Como instalar o Go"},{"content":"O que é a Dialética de Hegel Hegel captou o significado positivo da contradição na qual a razão cai, e argumentou que todas as coisas finitas em geral geram seus opostos movidas pela contradição inerente a si mesmas, e através dessa mediação, ambas são superadas para um estágio superior. Ele fez disso o princípio de todo movimento no mundo real. (Do Kotobank)\nMinha interpretação é que nenhuma ideologia ou ideia no mundo real está simplesmente correta de forma unilateral; elas sempre contêm contradições internamente, e é compreendendo ou incorporando essas estruturas opostas que nosso reconhecimento se desenvolve para um nível superior.\nAcredito que isso se aplica não apenas à forma como as pessoas pensam, mas também a todos os fenômenos no mundo natural.\nPara toda matéria, se há uma ação, há uma reação; se um objeto se move, há atrito; a atração gravitacional afeta não apenas o sol e a terra, mas todas as substâncias que interagem umas com as outras. O fluxo dos rios e do vento não flui apenas em uma direção, mas sofre a ação de várias forças, mudando a cada momento.\nEm termos técnicos, os programas de computador também sempre contêm bugs internamente, e ao removê-los, eles se tornam programas de nível superior. Acho seguro dizer que um programa sem bugs é um programa desinteressante que parou de se desenvolver. Ele inevitavelmente se tornará obsoleto.\nO ambiente ao nosso redor está mudando constantemente com os tempos. Em vez de ignorar ou justificar de forma estranha as autocontradições, ou fixar nosso modo de pensar, devemos rever constantemente a forma como pensamos e percebemos as coisas, e mudar nossos pensamentos de forma flexível.\n","date":"2022-09-09T23:13:19+09:00","image":"http://kenji.blog/p/%E3%83%98%E3%83%BC%E3%82%B2%E3%83%AB%E3%81%AE%E5%BC%81%E8%A8%BC%E6%B3%95/images/img_huf44f6813611a65fb4bf58b8763a4133a_83624_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/a-dialetica-de-hegel/","title":"A Dialética de Hegel"},{"content":"Fui ao Kamukura (Ramen) pela primeira vez em anos.\nRamen de Kimchi e Cebolinha\nEstava delicioso. É um sabor que às vezes dá vontade de comer.\n","date":"2022-09-09T21:45:19+09:00","image":"http://kenji.blog/p/%E4%BD%95%E5%B9%B4%E3%81%8B%E3%81%B6%E3%82%8A%E3%81%AE%E7%A5%9E%E5%BA%A7%E3%81%8B%E3%82%80%E3%81%8F%E3%82%89%E3%83%A9%E3%83%BC%E3%83%A1%E3%83%B3/images/img2_hu5b1c55ddd3b998ef9e1e7da203dc1109_434676_120x120_fill_q75_box_smart1.jpg","permalink":"http://kenji.blog/pt/p/%E4%BD%95%E5%B9%B4%E3%81%8B%E3%81%B6%E3%82%8A%E3%81%AE%E7%A5%9E%E5%BA%A7%E3%81%8B%E3%82%80%E3%81%8F%E3%82%89%E3%83%A9%E3%83%BC%E3%83%A1%E3%83%B3/","title":"Kamukura (Ramen) pela primeira vez em anos"},{"content":"Escrevi um programa para enumerar números primos em Rust.\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 fn main() { let max = 1000; let mut primes = vec![2]; let mut n = 3; loop { let mut is_prime = true; for p in \u0026amp;primes { if n % p == 0 { is_prime = false; break; } } if is_prime { primes.push(n); } n += 2; if n \u0026gt; max { break; } } for p in \u0026amp;primes { println!(\u0026#34;{}\u0026#34;, p); } } ","date":"2022-09-09T07:08:49+09:00","image":"http://kenji.blog/p/rust%E3%81%A7%E7%B4%A0%E6%95%B0%E3%82%92%E5%88%97%E6%8C%99%E3%81%99%E3%82%8B/images/img_hu5b7e04bd1dc0eefb45fd25ac4219842a_9797_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/enumerando-n%C3%BAmeros-primos-em-rust/","title":"Enumerando Números Primos em Rust"},{"content":"Playlist de Jazz Calmo ","date":"2022-09-08T17:40:26+09:00","image":"http://kenji.blog/p/%E8%90%BD%E3%81%A1%E7%9D%80%E3%81%84%E3%81%9F%E3%82%B8%E3%83%A3%E3%82%BA/images/img_huddf559c95c5d412c9cd6a131d9beecb1_1507891_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/jazz-calmo/","title":"Jazz Calmo"},{"content":"Up-tempo\nElectro Swing Collection Electro Swing Mix 2019 Vol.3 lofi hip hop radio(Live) LoFi Jazz Esta é a motivação para estudar muito todos os dias | 5 hour lofi hip hop / study / work / chill beats ","date":"2022-09-08T08:39:03+09:00","image":"http://kenji.blog/p/%E3%82%AB%E3%83%95%E3%82%A7%E9%9F%B3%E6%A5%BD/images/img_huc541091b3f264af05ecf07abbd33454f_519675_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/musica-de-cafe/","title":"Música de Café"},{"content":"Não tem problema se o seu esforço não for reconhecido 45年の人生で手に入れた。ぐずぐずした時、いつも背中を押してくれる言葉たち。 pic.twitter.com/EQgmujOSpg\n\u0026mdash; いれぶん (@eleven_s_s) September 6, 2022 Os valores são muito mais diversos Yusuke Narita \u0026ldquo;Das infelicidades que os seres humanos carregam\u0026rdquo;\nAs suas ações refletem exatamente quem você é Os pensamentos de Hayao Miyazaki ","date":"2022-09-08T02:22:52+09:00","image":"http://kenji.blog/p/%E3%83%A2%E3%83%81%E3%83%99%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%92%E4%B8%8A%E3%81%92%E3%81%A6%E3%81%8F%E3%82%8C%E3%82%8B%E5%8B%95%E7%94%BB/images/img_hu390d0c8e5d67e265b0c5aa8749ccc95d_193793_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/%E3%83%A2%E3%83%81%E3%83%99%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%92%E4%B8%8A%E3%81%92%E3%81%A6%E3%81%8F%E3%82%8C%E3%82%8B%E5%8B%95%E7%94%BB/","title":"Vídeos que aumentam a sua motivação"},{"content":"Vou escrever as especificações do meu PC principal.\nNome do item Valor Processador Intel Core i7-8700K CPU @ 3.70GHz 3.70 GHz Memória 32.0 GB Tipo de sistema Sistema operacional de 64 bits, processador baseado em x64 SO Windows 11 Enterprise (Versão 21H2, Build 22000.856) Fabricante Mouse Computer Co., Ltd. ","date":"2022-09-08T01:55:00+09:00","image":"http://kenji.blog/p/%E4%BB%8A%E3%81%AE%E3%83%A1%E3%82%A4%E3%83%B3pc%E3%82%B9%E3%83%9A%E3%83%83%E3%82%AF/images/img_hu731502385ac0a573daf05287c34d796a_240757_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/especificacoes-do-meu-pc-principal-atual/","title":"Especificações do meu PC principal atual"},{"content":"Google Material Symbols and Icons https://fonts.google.com/icons GitHub Octicons https://primer.style/octicons/ Sargam Icons https://sargamicons.com/ Milhares de ícones gratuitos https://icon-icons.com/ flaticon https://www.flaticon.com/ ICONFINDER https://www.iconfinder.com/ iconfont https://www.iconfont.cn/ open-iconic https://github.com/iconic/open-iconic ","date":"2022-09-07T16:46:56+09:00","image":"http://kenji.blog/p/%E3%82%B7%E3%83%B3%E3%83%97%E3%83%AB%E3%81%AA%E3%82%A2%E3%82%A4%E3%82%B3%E3%83%B3%E9%9B%86%E3%82%B5%E3%82%A4%E3%83%88/img_2_hu3b0847646c9f4aefba079615d2db35cd_21041_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/sites-de-colecao-de-icones-simples/","title":"Sites de coleção de ícones simples"},{"content":"Alterei o esquema de cores do tema PaperMod. Consultei o seguinte link para o método de alteração.\nhttps://github.com/adityatelange/hugo-PaperMod/discussions/645\nO caminho do CSS é o seguinte.\nthemes/PaperMod/assets/css/extended/blank.css\n1 2 3 4 5 6 7 8 9 10 11 12 13 :root { --entry: #fbf7ef; --primary: rgba(113, 103, 91, 1.00); --secondary: rgba(113, 103, 91, 0.95); --tertiary: rgba(113, 103, 91, 0.50); --content: rgba(113, 103, 91, 0.85); --hljs-bg: #34231B; --code-bg: #ebe4d7; --border: #fdfaf5; --theme: #fbf7ef; } .dark { } Nenhuma alteração para o modo escuro por enquanto.\n","date":"2022-09-07T15:30:21+09:00","image":"http://kenji.blog/p/papermod%E3%81%AE%E9%85%8D%E8%89%B2%E5%A4%89%E6%9B%B4/img_hu74d0722ae4db8273d5e32f97bb10689d_10515_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/papermod%E3%81%AE%E9%85%8D%E8%89%B2%E5%A4%89%E6%9B%B4/","title":"Alterando o esquema de cores do PaperMod"},{"content":"Quando a mãe ficou doente e estava de cama, Ao preparar o jantar ou o banho, perguntei à minha filha (2 anos): \u0026ldquo;Devemos pedir à mãe para fazer isso?\u0026rdquo;, Ela respondeu: \u0026ldquo;Não, ela está dormindo!\u0026rdquo; e pensei que, à sua maneira, ela estava sendo atenciosa.\nFiquei feliz em ver que ela está se tornando alguém que se importa com os outros.\n","date":"2022-09-07T04:40:52+09:00","image":"http://kenji.blog/p/%E5%AD%90%E4%BE%9B%E3%81%AE%E3%81%9D%E3%82%93%E3%81%9F%E3%81%8F/images/img_hud61af1a628f352ef1641794e80547155_144893_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/consideracao-de-uma-crianca/","title":"Consideração de uma Criança"},{"content":"Encontrar negócios que estão se tornando populares Pergunte a pessoas de dentro do Hot Pepper e a contadores sobre negócios que estão em alta Não entre em negócios que já estão saturados e têm concorrentes fortes Só entre em negócios onde você tem certeza de que pode atrair clientes (não entre em negócios onde os concorrentes existentes usam métodos especiais (inimitáveis) de atração de clientes) Imitar minuciosamente Pesquise a lógica de negócios antes de entrar Copie minuciosamente Melhore com base nisso Sistematizar Manualize tudo para que qualquer pessoa possa fazer sem esforço Pense em ideias para aumentar as vendas (aumento de clientes, valor por cliente) e reduzir custos (custos de pessoal, publicidade) e sistematize Filosofia da gestão A filosofia do gestor é \u0026ldquo;maximizar os lucros da empresa\u0026rdquo; e nada mais, nada menos Fazer contribuição social ou ser querido pelos funcionários não é uma boa filosofia para o gestor (pense que essas coisas virão naturalmente mais tarde) ","date":"2022-09-07T02:36:11+09:00","image":"http://kenji.blog/p/%E7%B5%8C%E5%96%B6%E8%80%85%E3%83%A1%E3%83%A2/images/img_hu8e43d40b92b6a98e30d3360e9f3ab85a_162130_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/notas-de-gestao/","title":"Notas de Gestão"},{"content":"Vou organizar o que eu acho estranho e o que penso sobre a sociedade japonesa.\nSobre as bolsas de estudo Quando se fala em bolsas de estudo no Japão, a maioria delas tem juros e devem ser devolvidas (empréstimos estudantis). Além disso, as mensalidades universitárias têm aumentado constantemente desde 1950, e a taxa de recebimento de bolsas também está em tendência de aumento.\nPor outro lado, parece que o valor médio total emprestado recentemente chega a 3,24 milhões de ienes.\nEntre os usuários de bolsas da Organização de Serviços Estudantis do Japão, o valor médio total emprestado é de 3.243.000 ienes. Referência\nSe alguém se formar na universidade aos 22 anos com uma dívida de até 3 milhões de ienes, naturalmente a idade de casamento será atrasada, e será mais difícil ter filhos, o que eu acredito ser uma das causas do problema do declínio da taxa de natalidade no Japão.\nA disseminação da responsabilidade pessoal Isso pode ser mais uma percepção, mas acho que há uma atitude social fria de \u0026ldquo;o que é dos outros é dos outros\u0026rdquo;. Com uma recessão durando décadas, pode ser inevitável que haja essa tendência, mas mesmo com o problema das bolsas de estudo mencionado acima, ele não é tratado como um problema de toda a sociedade, e sinto que as vozes dos jovens, que têm menos votos, ou das minorias são ignoradas nas eleições. Embora, a longo prazo, seja um problema muito importante para o Japão como um todo.\nEm vez de ir em direção a uma competição excessiva, a atitude de ajudar todos juntos se houver pessoas, gerações ou grupos em dificuldades é algo que eu acho muito importante para um país. (No entanto, sinto um desconforto quando o governo insiste em \u0026ldquo;autoajuda e ajuda mútua\u0026rdquo;. Quero que eles tomem a iniciativa de ajudar os vulneráveis.)\n(Este artigo será atualizado periodicamente.)\nCaracterísticas dos japoneses sob a perspectiva da IA Sim, aqui estão as características dos japoneses.\n【Pontos positivos】\nOs japoneses têm uma cultura de ser educados e de prestar atenção ao respeito e tratamento aos outros. A pontualidade é rigorosa, e manter o horário é muito respeitado. Há uma forte mentalidade coletivista, e o trabalho em equipe e a cooperação são valorizados. A limpeza é importante, e há uma tendência de ser diligente com a etiqueta em locais públicos e a limpeza. Os presentes e lembranças são valorizados, e a cultura do agradecimento é amplamente difundida. 【Pontos negativos】\nÀs vezes, eles têm dificuldade em afirmar opiniões pessoais e tendem a evitar conflitos de opinião. É uma cultura de trabalho muito rigorosa, onde horas extras e morte por excesso de trabalho (karoshi) às vezes são vistas como problemas. Ainda existem problemas de discriminação e exclusão contra estrangeiros, e a harmonia com a comunidade internacional às vezes é questionada. Há uma tendência ao autoritarismo, e muitas vezes se aponta que aceitam as opiniões de chefes ou pessoas mais velhas incondicionalmente. Às vezes, são criticados por serem uma sociedade fechada com tendência a ter dificuldade em aceitar culturas ou valores externos. ","date":"2022-09-06T02:24:11+09:00","image":"http://kenji.blog/p/%E6%97%A5%E6%9C%AC%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6%E6%80%9D%E3%81%86%E3%81%93%E3%81%A8/images/img_hu105ea1ef9d38a7cb8901ff6c857b887e_168534_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/o-que-eu-penso-sobre-o-japao/","title":"O que eu penso sobre o Japão"},{"content":"Introdução Rust é uma linguagem de programação relativamente nova que permite escrever módulos rápidos e eficientes em memória com uma sintaxe moderna. É compatível com várias plataformas e também é usada no mundo do WebAssembly e em sistemas embarcados. De forma notável, foi adotada pelo Firefox, DropBox e Cloudflare.\nTambém está atraindo atenção como uma alternativa ao C++.\nComo instalar Instalar o Rust\nO site acima fornece instruções de instalação para cada plataforma.\nPrimeiro programa Salve o seguinte programa como main.rs.\n1 2 3 fn main() { println!(\u0026#34;Hello, world!\u0026#34;); } Ao executar rustc main.rs no prompt de comando ou terminal, ele será compilado. Executar ./main (ou main.exe no Windows) exibirá Hello, world!.\nDocumentação em Japonês The Rust Programming Language Edição Japonesa\nAs explicações necessárias para aprender Rust estão compiladas no link acima (versão traduzida para o japonês). É tão abrangente que você não precisa comprar um livro sobre Rust.\nSe você quiser experimentar na Web Se você quiser experimentá-lo na Web sem instalar o compilador, pode usar The Rust Playground. Após inserir o código e clicar no botão \u0026ldquo;Run\u0026rdquo;, ele será compilado e executado na Web.\n","date":"2022-09-06T00:12:36+09:00","image":"http://kenji.blog/p/rust%E3%81%AE%E3%81%AF%E3%81%98%E3%82%81%E3%81%8B%E3%81%9F/images/rust_logo_huefc2d075e966b0edc0b7186c50038553_22411_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/como-come%C3%A7ar-com-rust/","title":"Como começar com Rust"},{"content":"Mudei o ambiente de internet da minha casa da Flet\u0026rsquo;s Hikari para a J:COM Com a indicação de um conhecido, mudei a linha de internet da minha casa da Flet\u0026rsquo;s Hikari para a J:COM. Os motivos foram:\nA mensalidade ficou mais barata. 3.619 ienes → 2.180 ienes A velocidade da internet aumentou de 100MBps para 320MBps Esses dois pontos.\nImpressões após o uso Faz cerca de uma semana desde a mudança e, até agora, não houve quase nenhum problema. Abaixo listo alguns pontos que me chamaram a atenção.\nAo mudar de fato, notei que a velocidade de download certamente ficou mais rápida, passando de 60MBps para quase 320MBps. No entanto, a velocidade de upload, que era de cerca de 40MBps na época da Flet\u0026rsquo;s Hikari, caiu para cerca de 10MBps. Isso parece ser uma especificação do lado da J:COM. Como não faço transmissões ou upload de uma grande quantidade de dados no momento, vou observar como fica.\nAlém disso, recentemente tanto eu quanto minha família estamos trabalhando principalmente em home office, e hoje, pela primeira vez, a internet caiu por alguns minutos a dezenas de minutos. Voltou automaticamente, mas pode não ser um bom sinal. Ainda não faz nem uma semana desde a mudança\u0026hellip;\nComo curiosidade, a J:COM restringe a comunicação P2P, então parece que a velocidade de aplicativos P2P não é boa. Quem usa P2P deve ter cuidado.\nSobre o serviço No momento do contrato, se você se inscrever na Netflix ou no Disney+, ganha um cartão QUO no valor de 40.000 ienes, que compensa a taxa de contrato de cada serviço e deixa a mensalidade um pouco mais barata na média, então contratei o serviço ao mesmo tempo que fechei o contrato. A Netflix tem contrato de 1 ano e o Disney+ de meio ano, e parece que é necessário realizar os procedimentos de cancelamento por conta própria.\nComo ainda faz pouco tempo desde a mudança, se surgirem mais impressões ou opiniões de uso, pretendo atualizar o artigo novamente. Até mais,\n06/09 A internet ficou difícil de conectar 06/09/2022 por volta das 13:13 cerca de 3 a 5 minutos 06/09/2022 por volta das 13:30 cerca de 3 a 5 minutos Depois disso mais algumas vezes\u0026hellip; Parece que o problema é no DNS, então configurei o servidor DNS consultando aqui. Vamos ver o que acontece agora\u0026hellip; Como a situação de não conseguir conectar persistiu mesmo com a configuração do DNS, entrei em contato com o suporte e eles disseram que estavam fazendo uma manutenção de emergência\u0026hellip; Logo após o contato o estado da conexão melhorou, então acho que eles tomaram alguma providência.\n","date":"2022-09-05T22:48:51+09:00","image":"http://kenji.blog/p/%E3%83%8D%E3%83%83%E3%83%88%E7%92%B0%E5%A2%83%E3%82%92%E3%83%95%E3%83%AC%E3%83%83%E3%83%84%E5%85%89jcom%E3%81%AB%E5%A4%89%E3%81%88%E3%81%9F/jcom_hub0ec31ac66f5927be8b28fe767bbeebb_3349_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/%E3%83%8D%E3%83%83%E3%83%88%E7%92%B0%E5%A2%83%E3%82%92%E3%83%95%E3%83%AC%E3%83%83%E3%83%84%E5%85%89jcom%E3%81%AB%E5%A4%89%E3%81%88%E3%81%9F/","title":"Mudei o ambiente de internet da Flet's Hikari para a J:COM"},{"content":"Instalação do HUGO Download Download do HUGO\nA partir do site acima, baixe e extraia o módulo do Windows que corresponde ao seu ambiente. No meu caso, baixei \u0026ldquo;hugo_0.102.3_Windows-64bit.zip\u0026rdquo;.\nExtração Extraia o arquivo zip baixado e copie o hugo.exe dentro dele para uma pasta que você criar, por exemplo, C:\\bin.\nRegistrar nas Variáveis de Ambiente Registre nas variáveis de ambiente para poder executar o hugo.exe de qualquer lugar. As operações abaixo são para o Windows 11, mas você deve conseguir registrar com um procedimento semelhante:\nPressione Win+Pause para abrir as informações da versão Clique em Configurações avançadas do sistema Clique em Variáveis de Ambiente Selecione Path e clique em Editar Clique em Novo, digite \u0026ldquo;C:\\bin\u0026rdquo; em uma nova linha e clique em OK para fechar a caixa de diálogo Visualizar o blog No prompt de comando, navegue até a pasta do blog HUGO e execute o comando abaixo.\nhugo server -D\nO resultado da execução está abaixo. (-D é uma opção para exibir artigos em rascunho.)\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 C:\\Users\\win11\\IdeaProjects\\kenji.blog\u0026gt;hugo server -D Start building sites … hugo v0.102.3-b76146b129d7caa52417f8e914fc5b9271bf56fc windows/amd64 BuildDate=2022-09-01T10:16:19Z VendorInfo=gohugoio | JA -------------------+----- Pages | 39 Paginator pages | 0 Non-page files | 7 Static files | 0 Processed images | 0 Aliases | 13 Sitemaps | 1 Cleaned | 0 Built in 161 ms Watching for changes in C:\\Users\\win11\\IdeaProjects\\kenji.blog\\{archetypes,content,themes} Watching for config changes in C:\\Users\\win11\\IdeaProjects\\kenji.blog\\config.toml Environment: \u0026#34;development\u0026#34; Serving pages from memory Running in Fast Render Mode. For full rebuilds on change: hugo server --disableFastRender Web Server is available at http://localhost:1313/ (bind address 127.0.0.1) Press Ctrl+C to stop Como o endereço é exibido durante a execução (no exemplo acima, http://localhost:1313/), copie o endereço no seu navegador. A visualização é atualizada automaticamente toda vez que o arquivo é salvo. Para terminar a visualização, digite Ctrl+C no prompt de comando.\n","date":"2022-09-05T12:28:01+09:00","image":"http://kenji.blog/p/hugo%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E3%81%A7%E7%92%B0%E5%A2%83%E3%81%A7%E8%A1%A8%E7%A4%BA%E3%83%97%E3%83%AC%E3%83%93%E3%83%A5%E3%83%BC/img_hu415dc7e70376ac350673d0366f70ca4b_19909_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/hugovisualiza%C3%A7%C3%A3o-no-ambiente-local/","title":"【HUGO】Visualização no ambiente local"},{"content":"Aqui estão as minhas 3 principais recomendações de filmes com matemáticos como protagonistas.\nUma Mente Brilhante Um filme que retrata a vida de um gênio matemático americano da vida real. O final tem uma reviravolta surpreendente. Russell Crowe faz um excelente trabalho no papel principal.\nEnigma Um filme de 2001 baseado no romance \u0026ldquo;Enigma\u0026rdquo; de Robert Harris. da Wikipédia\nA história da decifração da máquina de criptografia Enigma criada pela Alemanha.\nO Jogo da Imitação Esta também é uma história de decifração de códigos lidando com a Enigma. Eu amo a atmosfera daquela época.\nO Homem Que Viu o Infinito Uma obra que retrata a interação entre o matemático da Universidade de Cambridge, Hardy, e o matemático indiano Ramanujan. Você pode sentir a beleza da matemática.\nA Teoria de Tudo Um filme que retrata a vida do Dr. Hawking.\nParticle Fever ","date":"2022-09-05T10:41:00+09:00","image":"http://kenji.blog/p/%E6%95%B0%E5%AD%A6%E8%80%85%E3%81%8C%E7%99%BB%E5%A0%B4%E3%81%99%E3%82%8B%E6%98%A0%E7%94%BB/images/img_hua361131ea597bbd428e36b721aabc571_406520_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/%E6%95%B0%E5%AD%A6%E8%80%85%E3%81%8C%E7%99%BB%E5%A0%B4%E3%81%99%E3%82%8B%E6%98%A0%E7%94%BB/","title":"Filmes com Matemáticos"},{"content":"Mesa das crianças O tempo em que as crianças estão dormindo é o tempo em que posso me dedicar ao trabalho. Depois que a soneca acabar, vamos brincar no parque. Se eu tivesse um adaptador Lightning para HDMI para o iPad, poderia trabalhar na mesa da direita~\n","date":"2022-09-04T14:29:09+09:00","image":"http://kenji.blog/p/%E4%BB%8A%E6%97%A5%E3%81%AE%E4%BD%9C%E6%A5%AD%E7%92%B0%E5%A2%83/images/today_workplase_hu1fa3ba50725fc9c80ae774069d99ec20_2258565_120x120_fill_q75_box_smart1.jpg","permalink":"http://kenji.blog/pt/p/ambiente-de-trabalho-de-hoje/","title":"Ambiente de trabalho de hoje"},{"content":"Introdução Ao escrever este blog, uso o IntelliJ IDEA. É conveniente porque tem boa compatibilidade com o Git e exibe uma pré-visualização de Markdown. Toda vez que escrevo um blog, tenho que escrever date no cabeçalho do arquivo md. Parece que não há atalho para inserir a data, então criei um comando para inserir a data referenciando o site abaixo. Espero que seja útil.\nIs there a shortcut for inserting date/time in IntelliJ IDEA?\nProcedimento de configuração Abra \u0026ldquo;File\u0026rdquo; \u0026gt; \u0026ldquo;Settings\u0026hellip;\u0026rdquo; no menu\nCom \u0026ldquo;Editor\u0026rdquo; \u0026gt; \u0026ldquo;Live Template\u0026rdquo; \u0026gt; \u0026ldquo;HTML/XML\u0026rdquo; selecionado, clique em \u0026ldquo;+\u0026rdquo; Selecione Live Template Insira \u0026ldquo;date\u0026rdquo; em Abbreviation Insira \u0026ldquo;Inserir data e hora\u0026rdquo; em Description Insira \u0026ldquo;$date$\u0026rdquo; em Template Text Clique no botão Edit Variables\nInsira \u0026ldquo;date\u0026rdquo; em Name Insira date(\u0026quot;yyyy-MM-dd'T'HH:mm:ss'+09:00'\u0026quot;) em Expression Feche a caixa de diálogo com OK Pressione Define ou Change e marque \u0026ldquo;Everywhere\u0026rdquo; Feche a caixa de diálogo com OK Digite \u0026ldquo;date\u0026rdquo; no editor de código e pressione Enter. Quando a data \u0026ldquo;2022-09-04T05:59:04+09:00\u0026rdquo; for inserida, a configuração estará concluída! Isso é tudo\nConclusão Se eu encontrar pequenos truques para o IntelliJ IDEA, gostaria de publicá-los novamente!\n","date":"2022-09-04T05:59:04+09:00","image":"http://kenji.blog/p/intellij-idea%E3%81%A7%E6%97%A5%E4%BB%98%E3%82%92%E8%B2%BC%E3%82%8A%E4%BB%98%E3%81%91%E3%82%8B%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%82%92%E8%BF%BD%E5%8A%A0%E3%81%99%E3%82%8B/images/IntelliJ_logo_hu4c2377fba6118d83603ae0bd715d16f4_24441_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/intellij-idea%E3%81%A7%E6%97%A5%E4%BB%98%E3%82%92%E8%B2%BC%E3%82%8A%E4%BB%98%E3%81%91%E3%82%8B%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%82%92%E8%BF%BD%E5%8A%A0%E3%81%99%E3%82%8B/","title":"Adicionar comando para inserir data no IntelliJ IDEA"},{"content":"Comecei um blog Algo como fogos de artifício, o código está aqui\nOlá. Por algum motivo, decidi começar um blog.\nNão há um propósito grandioso como \u0026ldquo;Quero publicar isso!\u0026rdquo;, mas achei que seria bom ter um lugar para escrever coisas sobre tecnologia, sobre o dia a dia e o que me vier à cabeça.\nPretendo fazer isso como um bloco de notas, sem me esforçar muito.\nEstou fazendo com um tal de Hugo Estou fazendo este blog com um gerador de sites estáticos chamado \u0026ldquo;Hugo\u0026rdquo;. Encontrei um tema legal, então decidi adotá-lo no impulso. (É segredo que demorei cerca de 2 horas para escolher o tema)\nPretendo fazer anotações de forma casual sobre código e ferramentas que me interessam.\nA história da manhã no Komeda A propósito, esta manhã acordei um pouco mais cedo e fui ao Komeda Coffee. Saí às 8h30 e caminhei enquanto respirava o ar da manhã.\nPedi o combo matinal A com um mini Shiro-Noir e café com leite. Acho que custou cerca de 800 ienes? (não me lembro)\nCafé da manhã é muito bom. Sinto que o dia corre melhor quando tenho um tempinho para relaxar antes do trabalho.\nBem, a partir de agora vou escrever de forma descontraída. Pretendo misturar histórias de tecnologia e do dia a dia.\nConto com vocês!\n","date":"2022-09-02T07:23:00+09:00","image":"http://kenji.blog/p/%E3%83%96%E3%83%AD%E3%82%B0%E3%81%AF%E3%81%98%E3%82%81%E3%81%A6%E3%81%BF%E3%81%BE%E3%81%97%E3%81%9F/images/komeda_hue1f0373fafb96162f461ac594cb3e53e_603414_120x120_fill_q75_box_smart1.jpeg","permalink":"http://kenji.blog/pt/p/comecei-um-blog/","title":"Comecei um blog"},{"content":"Salesforce DevTools Você pode pesquisar campos personalizados ou exportar campos de objetos personalizados em massa.\nTambém é útil poder criar SOQL na hora.\nSalesforce DevTools\nSalesforce advanced Code searcher Útil ao pesquisar código do Salesforce.\nSalesforce advanced Code searcher\n","date":"2022-05-02T10:39:36+09:00","image":"http://kenji.blog/p/salesforce%E3%81%8A%E3%81%99%E3%81%99%E3%82%81chrome%E6%8B%A1%E5%BC%B5/img_huc75a5c8c4d45e738551ca5afb26f380b_13227_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/pt/p/salesforce%E3%81%8A%E3%81%99%E3%81%99%E3%82%81chrome%E6%8B%A1%E5%BC%B5/","title":"Extensões do Chrome recomendadas para Salesforce"},{"content":"A segurança da informação na sociedade da internet moderna é protegida por sistemas de criptografia de chave pública, como a criptografia RSA. A base para a segurança da criptografia RSA depende do fato de que \u0026ldquo;a fatoração de números compostos gigantescos é computacionalmente extremamente difícil\u0026rdquo; .\nNeste artigo, desvendaremos o mecanismo matemático do \u0026ldquo;Crivo do Corpo de Números Generalizado\u0026rdquo; (General Number Field Sieve, GNFS), que é o algoritmo de fatoração mais poderoso em computadores clássicos, e aprofundaremos minuciosamente, usando fórmulas matemáticas e diagramas conceituais, a mudança de paradigma de por que ele é completamente superado pelo \u0026ldquo;Algoritmo de Shor\u0026rdquo; , descoberto por Peter Shor.\n1. A abordagem da fatoração na computação clássica: Evolução do método de fatoração de Fermat O problema da fatoração de inteiros é o problema de encontrar os números primos $p, q$ tais que $N = p \\times q$ , para um dado número composto $N$ .\nA ideia básica se resume a encontrar valores não triviais $x, y$ que satisfaçam a seguinte congruência.\n$$ x^2 \\equiv y^2 \\pmod N $$ Rearranjando isto, temos:\n$$ x^2 - y^2 \\equiv 0 \\pmod N $$ $$ (x - y)(x + y) \\equiv 0 \\pmod N $$ Aqui, se $x \\not\\equiv \\pm y \\pmod N$ , podemos calcular o $\\gcd(x-y, N)$ ou $\\gcd(x+y, N)$ para obter um fator não trivial de $N$ . Este fato forma a base dos algoritmos de fatoração modernos, como o GNFS.\n2. O algoritmo clássico mais forte: O abismo do \u0026ldquo;Crivo do Corpo de Números Generalizado\u0026rdquo; (GNFS) O GNFS é o algoritmo de fatoração mais rápido conhecido hoje para computadores clássicos. Sua complexidade de tempo requer um tempo subexponencial (Sub-exponential).\nComplexidade de tempo do GNFS Quando o número de dígitos de $N$ é $b = \\log_2 N$ , a complexidade de tempo do GNFS é expressa da seguinte forma:\n$$ O\\left( \\exp \\left( \\left(\\frac{64}{9} b\\right)^{1/3} (\\log b)^{2/3} \\right) \\right) $$ Como pode ser visto nesta fórmula, a complexidade não é tempo polinomial, mas sim um \u0026ldquo;tempo subexponencial\u0026rdquo; que é ligeiramente mais lento que uma função exponencial. Ainda assim, à medida que o número de dígitos aumenta, o tempo de computação cresce astronomicamente.\nMecanismo matemático do GNFS O GNFS consiste principalmente em 4 etapas.\nSeleção de Polinômios (Polynomial Selection) Crivagem (Sieving) Redução de Matriz (Matrix Reduction) Cálculo da Raiz Quadrada (Square Root) 2.1. Seleção de Polinômios e Corpo Algébrico Primeiro, escolhemos polinômios irredutíveis $f(x)$ e $g(x)$ com coeficientes inteiros. Eles são configurados para ter uma raiz comum $m$ módulo $N$ . Ou seja,\n$$ f(m) \\equiv 0 \\pmod N $$ $$ g(m) \\equiv 0 \\pmod N $$ Geralmente, $g(x)$ é escolhido como um polinômio de primeiro grau $g(x) = x - m$ . Se a raiz de $f(x)$ for $\\alpha$ , construímos um \u0026ldquo;corpo de números\u0026rdquo; (Number Field) chamado $\\mathbb{Q}(\\alpha)$ . As operações no anel de $\\mathbb{Q}(\\alpha)$ e as operações no anel comum de inteiros $\\mathbb{Z}$ são comparadas através do homomorfismo $\\phi: \\alpha \\mapsto m$ .\n2.2. Crivagem (Sieving) Em seguida, procuramos por uma grande quantidade de pares de inteiros coprimos $(a, b)$ . O objetivo é encontrar pares em que os dois valores a seguir sejam \u0026ldquo;B-smooth\u0026rdquo; (compostos apenas por fatores primos relativamente pequenos).\n$a - bm$ (valor sobre o anel de inteiros) $b^d f(a/b)$ (correspondente à norma $N(a - b\\alpha)$ sobre o corpo algébrico) Aqui é usado um método de busca rápido chamado \u0026ldquo;crivo\u0026rdquo; (Sieve). Isso extrai eficientemente pares $(a, b)$ que satisfazem as condições de um enorme número de candidatos.\n2.3. Redução de Matriz (Linear Algebra over GF(2)) A partir dos pares coletados $(a, b)$ , construímos vetores de expoentes e encontramos o espaço nulo à esquerda de uma enorme matriz esparsa sobre $\\mathbb{F}_2$ (um corpo cujos elementos são apenas 0 e 1).\nEncontramos o vetor $v$ como uma solução tal que as relações $ \\prod (a_i - b_i m) $ e $ \\prod (a_i - b_i \\alpha) $ se tornem quadrados perfeitos. Isto não é nada mais do que resolver o seguinte sistema de equações lineares:\n$$ M \\mathbf{x} \\equiv \\mathbf{0} \\pmod 2 $$ Aqui, algoritmos avançados de cálculo numérico, como o Algoritmo de Block Lanczos ou o Algoritmo de Block Wiedemann, são utilizados.\n2.4. Cálculo da Raiz Quadrada Por fim, extraímos a raiz quadrada tanto no corpo algébrico quanto no anel de inteiros para derivar a relação $x^2 \\equiv y^2 \\pmod N$ . Em seguida, calculamos $\\gcd(x-y, N)$ para obter os fatores.\n3. Um avanço revolucionário pela computação quântica: \u0026ldquo;Algoritmo de Shor\u0026rdquo; Enquanto o GNFS requer tempo subexponencial, o \u0026ldquo;Algoritmo de Shor\u0026rdquo; , publicado por Peter Shor em 1994, pode resolver esse problema em \u0026ldquo;tempo polinomial\u0026rdquo; usando um computador quântico.\nComplexidade do Algoritmo de Shor Assumindo que o número de qubits seja $O(\\log N)$ , a complexidade de tempo é a seguinte:\n$$ O((\\log N)^3) $$ Isso significa que não há explosão exponencial em relação ao número de bits. É um resultado surpreendente: mesmo para números compostos gigantescos onde o tempo para a \u0026ldquo;computação clássica\u0026rdquo; excederia a idade do universo, a \u0026ldquo;computação quântica\u0026rdquo; pode descriptografá-los em questão de horas ou dias.\nVisão geral do Algoritmo de Shor: Redução ao problema da descoberta de período O Algoritmo de Shor reduz inteligentemente o problema de fatoração em primos a um \u0026ldquo;problema de descoberta de período\u0026rdquo; .\nEscolha um inteiro aleatório $a$ que seja coprimo com $N$ ( $1 \u003c a \u003c N$ ). Defina a função $f(x) = a^x \\bmod N$ . Encontre o período $r$ de $f(x)$ , ou seja, o menor inteiro positivo $r$ tal que $a^r \\equiv 1 \\pmod N$ . Se $r$ for par, verifique se $a^{r/2} \\not\\equiv -1 \\pmod N$ , calcule $\\gcd(a^{r/2} \\pm 1, N)$ e obtenha o fator primo. Esta \u0026ldquo;descoberta do período $r$ \u0026ldquo; na etapa 3 é o gargalo que leva tempo exponencial em computadores clássicos, mas os computadores quânticos resolvem isso instantaneamente usando a \u0026ldquo;sobreposição quântica\u0026rdquo; e a \u0026ldquo;Transformada de Fourier Quântica\u0026rdquo; (QFT).\n4. Transformada de Fourier Quântica (QFT) e Extração de Período Vejamos mais de perto as fórmulas matemáticas sobre a manipulação de estados quânticos, que é o núcleo do Algoritmo de Shor.\n4.1. Geração de Sobreposição Quântica Primeiro, preparamos dois registradores quânticos. O Registrador 1 mantém o estado de sobreposição das entradas $x$ , e o Registrador 2 mantém os resultados calculados da função $f(x)$ . Aplicamos a Transformada de Hadamard (Hadamard Transform) ao estado inicial $|0\\rangle |0\\rangle$ para criar uma sobreposição de todos os possíveis $x$ .\n$$ |\\psi_1\\rangle = \\frac{1}{\\sqrt{Q}} \\sum_{x=0}^{Q-1} |x\\rangle |0\\rangle $$ (onde $Q$ é uma potência de 2 satisfazendo $N^2 \\le Q \u003c 2N^2$ )\nEm seguida, usamos o oráculo quântico $U_f$ para calcular $f(x) = a^x \\bmod N$ e armazená-lo no Registrador 2.\n$$ |\\psi_2\\rangle = U_f |\\psi_1\\rangle = \\frac{1}{\\sqrt{Q}} \\sum_{x=0}^{Q-1} |x\\rangle |a^x \\bmod N\\rangle $$ Suponhamos agora que medimos o Registrador 2 (embora na realidade a estrutura matemática seja a mesma mesmo sem medição). Se observarmos um determinado valor $y = a^{x_0} \\bmod N$ , o estado do Registrador 1 colapsa para uma sobreposição de todos os $x$ onde $f(x) = y$ . Se o período for $r$ , esses $x$ serão $x_0, x_0 + r, x_0 + 2r, \\dots$\n$$ |\\psi_3\\rangle = \\frac{1}{\\sqrt{M}} \\sum_{k=0}^{M-1} |x_0 + kr\\rangle $$ (onde $M \\approx Q/r$ é o número de termos)\nEste estado contém inerentemente a informação sobre o período $r$ , mas medir isso diretamente apenas nos dá um $x_0 + kr$ aleatório, não revelando $r$ . É aqui que entra a QFT.\n4.2. Aplicação da Transformada de Fourier Quântica (Quantum Fourier Transform) A QFT é uma operação que aplica uma transformada discreta de Fourier às amplitudes do estado quântico. A ação da QFT no estado $|x\\rangle$ é definida como segue:\n$$ \\text{QFT} |x\\rangle = \\frac{1}{\\sqrt{Q}} \\sum_{y=0}^{Q-1} e^{2\\pi i \\frac{xy}{Q}} |y\\rangle $$ A aplicação disto a $|\\psi_3\\rangle$ induz interferência de fase (interferência quântica).\n$$ |\\psi_4\\rangle = \\text{QFT} |\\psi_3\\rangle = \\frac{1}{\\sqrt{MQ}} \\sum_{y=0}^{Q-1} \\sum_{k=0}^{M-1} e^{2\\pi i \\frac{(x_0 + kr)y}{Q}} |y\\rangle $$ Ao expandir o somatório desta equação, surge a parte:\n$$ \\sum_{k=0}^{M-1} e^{2\\pi i \\frac{kry}{Q}} $$ Esta soma da série geométrica reforça-se mutuamente (Interferência Construtiva) apenas quando $ry/Q$ é próximo a um número inteiro e se cancela em outros momentos (Interferência Destrutiva).\nPortanto, o estado $|y\\rangle$ medido com alta probabilidade será um número inteiro $y$ que satisfaz a condição:\n$$ \\frac{y}{Q} \\approx \\frac{c}{r} $$ (onde $c$ é algum inteiro).\n4.3. Identificação do Período por Expansão em Frações Contínuas Após obter $y$ pela medição, utilizamos um computador clássico para realizar a \u0026ldquo;expansão em frações contínuas\u0026rdquo; (Continued Fraction Expansion) de $y/Q$ . Isso nos permite calcular a fração aproximada $c/r$ de $y/Q$ e extrair de forma altamente eficiente os candidatos ao período $r$ a partir do denominador.\n5. Comparação de Modelos Conceituais e Mudança de Paradigma Para entender intuitivamente a diferença entre o GNFS e o Algoritmo de Shor, mostramos um diagrama conceitual usando a notação Mermaid.\nDiagrama conceitual do Algoritmo de Shor via circuito quântico 1 2 3 4 5 6 7 8 9 10 11 12 13 graph TD A[Estado inicial: 0...0] --\u0026gt; B[Sobreposição de todos os estados por Transformada de Hadamard] B --\u0026gt; C[Exponenciação modular a^x mod N] C --\u0026gt;|Emaranhamento quântico| D[Colapso para um estado com periodicidade] D --\u0026gt; E[Transformada de Fourier Quântica QFT] E --\u0026gt;|Amplificação de probabilidade por interferência| F[Medição: obter y] F --\u0026gt; G[Processamento clássico: expansão em frações contínuas] G --\u0026gt; H[Descoberta do período r] H --\u0026gt; I[Cálculo dos fatores primos de N] style A fill:#f9f,stroke:#333,stroke-width:2px style E fill:#bbf,stroke:#333,stroke-width:2px style I fill:#bfb,stroke:#333,stroke-width:2px A essência da mudança de paradigma O GNFS adota uma abordagem que consiste em \u0026ldquo;buscar relações dentro de um espaço matemático (corpo algébrico)\u0026rdquo; . No entanto, como o espaço de busca se expande exponencialmente em relação ao número de dígitos, com as capacidades computacionais clássicas (incluindo paralelização), a decodificação se torna quase impossível quando o tamanho da chave excede os 2048 bits.\nPor outro lado, o Algoritmo de Shor utiliza a \u0026ldquo;natureza de onda devido à interferência quântica\u0026rdquo; . Ele avalia simultaneamente todos os caminhos computacionais na sobreposição de estados e usa a QFT para cancelar respostas desnecessárias (interferência destrutiva) enquanto amplifica apenas a amplitude de probabilidade do período correto (interferência construtiva). Com isso, ao invés de buscar no espaço, atinge uma abordagem de dimensão completamente diferente onde \u0026ldquo;surge a própria resposta correta\u0026rdquo; .\n6. Conclusão Neste artigo, aprofundamo-nos nos contextos matemáticos e nas estruturas de algoritmos, comparando o \u0026ldquo;GNFS\u0026rdquo; , o pico absoluto do limite clássico, com o \u0026ldquo;Algoritmo de Shor\u0026rdquo; , que demonstra o poder da computação quântica.\nEnquanto o GNFS usa técnicas matemáticas sofisticadas, como a escolha de polinômios e cálculos matemáticos com grandes matrizes, para reduzir o tempo computacional a um tempo subexponencial, o Algoritmo de Shor combina os princípios fundamentais da mecânica quântica, sobreposição e interferência, com ferramentas matemáticas (QFT) para produzir um avanço instantâneo ao tempo polinomial.\nNo momento, não existe nenhum computador quântico tolerante a falhas (FTQC) capaz de executar o Algoritmo de Shor em escala prática (milhares de qubits). No entanto, a própria existência dessa mudança de paradigma matemático e teórico é a principal razão pela qual há atualmente uma rápida e urgente transição para a Criptografia Pós-Quântica (PQC: Post-Quantum Cryptography) no mundo todo.\n","date":"0001-01-01T00:00:00Z","image":"http://kenji.blog/p/gnfs-to-shors-algorithm-math-deepdive/quantum_vs_gnfs_eyecatch_1788616101508_hud95a00206aa1dcf32de9cdc0ccb17972_1096815_120x120_fill_q75_box_smart1.jpg","permalink":"http://kenji.blog/pt/p/gnfs-to-shors-algorithm-math-deepdive/","title":"【Compreensão Completa com Fórmulas】Por que o 'GNFS', o mais forte algoritmo clássico, é derrotado pelos algoritmos quânticos? A mudança de paradigma da fatoração"}]