[{"content":"Introduction: The \u0026ldquo;Paradigm Shift in Computing\u0026rdquo; Brought by Quantum Computers In recent years, not a day goes by without seeing the term \u0026ldquo;quantum computer\u0026rdquo; in the news or technical articles. Sci-fi-like stories are often told, such as \u0026ldquo;calculations that would take current supercomputers thousands of years can be finished in minutes\u0026rdquo; or \u0026ldquo;all current cryptographic technologies might be broken.\u0026rdquo; Giant IT companies like Google, IBM, and Microsoft, as well as universities and startups worldwide, are fiercely competing to commercialize this dream technology.\nHowever, if asked, \u0026ldquo;What exactly is a quantum computer?\u0026rdquo;, few people could answer accurately. Many have a vague image of a \u0026ldquo;magic box that can calculate all combinations simultaneously,\u0026rdquo; but strictly speaking, that is incorrect.\nIn this article, we will thoroughly explain from the basics how quantum computers fundamentally differ from classical computers (the PCs and smartphones we usually use), and how they utilize mysterious phenomena of quantum mechanics such as \u0026ldquo;Superposition,\u0026rdquo; \u0026ldquo;Entanglement,\u0026rdquo; and \u0026ldquo;Quantum gates\u0026rdquo; for calculations, in a professional yet easy-to-understand manner. By the time you finish reading this article, you should clearly understand the essential greatness of quantum computers and their current challenges.\nChapter 1: The Crucial Difference Between Classical and Quantum Computers To understand how a quantum computer works, we first need to review how the \u0026ldquo;classical computers\u0026rdquo; we currently use operate.\nComparison Table: Classical Computers vs Quantum Computers Item Classical Computer Quantum Computer Basic Unit Bit (0 or 1) Qubit (superposition of 0 and 1) State Representation Deterministic Probabilistic (undetermined until observed) Calculation Method Sequential processing (requires physical cores for parallelization) Quantum parallelism (manipulates exponential states simultaneously) Excels at Arithmetic operations, everyday data processing Prime factorization, quantum chemistry calculations Error Tolerance Very strong Very weak (requires cryogenic environments and error correction) The World of Classical Computers: The \u0026ldquo;Bit\u0026rdquo; of 0 or 1 Classical computers represent all information in a state of either \u0026ldquo;0\u0026rdquo; or \u0026ldquo;1\u0026rdquo;. This is called a Bit. Physically, it is represented by whether the voltage of a transistor on a semiconductor chip is high (1) or low (0). The high-quality photos on your smartphone, the text you are reading now, and your favorite YouTube videos are all ultimately reduced to a massive sequence of 0s and 1s. Computation is nothing more than the process of applying operations to this sequence of 0s and 1s by combining basic logic circuits such as AND, OR, and NOT. This is a very reliable and deterministic world. If the input is the same, you will always get the same output.\nThe World of Quantum Computers: The \u0026ldquo;Qubit\u0026rdquo; That is Both 0 and 1 On the other hand, the smallest unit of information in a quantum computer is called a Qubit (Quantum bit). The biggest feature of a qubit is that, unlike a classical bit which is strictly either \u0026ldquo;0\u0026rdquo; or \u0026ldquo;1\u0026rdquo;, it can take on a state where \u0026ldquo;0 and 1 are mixed with specific probabilities.\u0026rdquo; This is called \u0026ldquo;Superposition\u0026rdquo;.\nFor example, if a classical bit is a coin placed with either \u0026ldquo;heads\u0026rdquo; or \u0026ldquo;tails\u0026rdquo; facing up, a qubit is often compared to a \u0026ldquo;coin constantly spinning in the air.\u0026rdquo; A spinning coin cannot be said to be heads or tails; both states are superimposed. And the moment the coin falls to the floor and stops moving (in quantum mechanics, this is called \u0026ldquo;observation\u0026rdquo;), it is determined as either \u0026ldquo;heads\u0026rdquo; or \u0026ldquo;tails\u0026rdquo; for the first time.\nQuantum computers incorporate this very property unique to the microscopic world (quantum mechanics)—where \u0026ldquo;the state is not determined until observed\u0026rdquo;—directly into the information processing process.\nChapter 2: Three Quantum Mechanical Properties That Fundamentally Change Computing The source of the astonishing computing power of quantum computers is not simply a high clock frequency or small components. It lies in utilizing the laws of physics themselves as computational resources. The following three quantum mechanical phenomena are the keys.\n1. Superposition and Exponential Information Capacity As mentioned earlier, a qubit can simultaneously hold the states of both 0 and 1. One qubit is a \u0026ldquo;superposition of 0 and 1,\u0026rdquo; but what happens when you increase the number of qubits?\n1 Qubit: Superposition of 2 states (0, 1) 2 Qubits: Superposition of 4 states (00, 01, 10, 11) 3 Qubits: Superposition of 8 states N Qubits: Superposition of $2^N$ patterns With just 50 qubits, you can simultaneously hold $2^{50}$ (about 1.1 quadrillion) states. And with just 300 qubits, you can hold $2^{300}$ patterns at once—a number greater than all the atoms in the universe! This exponential information holding capacity is the foundation of a quantum computer\u0026rsquo;s potential. It is physically impossible for a classical computer to store more states in memory than there are atoms in the universe.\n2. Entanglement: Spooky Action at a Distance Quantum entanglement is such a counter-intuitive and mysterious phenomenon that Albert Einstein called it \u0026ldquo;Spooky action at a distance\u0026rdquo; and refused to accept it throughout his life.\nWhen multiple qubits enter a state of \u0026ldquo;quantum entanglement,\u0026rdquo; they become strongly linked to each other, forming a shared destiny: \u0026ldquo;when the state of one is determined, the state of the other is instantly determined, no matter how far apart they are.\u0026rdquo;\nFor example, suppose we have two entangled qubits A and B (each in a superposition of 0 and 1). If we observe A and find it to be \u0026ldquo;0,\u0026rdquo; the state of B is instantly determined (for example, to definitely be \u0026ldquo;1\u0026rdquo;), exceeding the speed of light, which is the limit of information transmission. In quantum computers, this entanglement is used to represent complex correlations between multiple qubits and perform massively parallel information processing. Without entanglement, the computing power of quantum computers would not be much different from that of classical computers.\n3. Quantum Interference: The Magic That Brings Out the Right Answer You might think, \u0026ldquo;If it can hold all patterns simultaneously, couldn\u0026rsquo;t it calculate them all at once in parallel and output the answer instantly?\u0026rdquo; This is the most common misconception about quantum computers. Even if you calculate in a superposition state, you must \u0026ldquo;observe\u0026rdquo; to finally know the answer. However, the moment you observe, the state randomly collapses into one of the $2^N$ patterns. This would just give you a random answer.\nHere is where \u0026ldquo;Quantum Interference\u0026rdquo; comes in. When waves collide, they strengthen each other where their wavelengths match, and cancel each other out where they are out of sync (the principle is essentially the same as noise-canceling headphones).\nAn excellent \u0026ldquo;quantum algorithm\u0026rdquo; masterfully manipulates quantum states during the computation process so that \u0026ldquo;the probability amplitudes of states (waves) leading to the correct answer amplify each other\u0026rdquo; and \u0026ldquo;the probability amplitudes of states leading to incorrect answers cancel each other out.\u0026rdquo; It is designed so that when ultimately observed, the \u0026ldquo;correct answer\u0026rdquo; pops out with a probability as close to 100% as possible. Designing this interference process well is the very essence of quantum programming.\nChapter 3: How Do They Compute? \u0026ldquo;Quantum Gates\u0026rdquo; and \u0026ldquo;Quantum Circuits\u0026rdquo; Just as classical computers use logic gates (AND, OR, NOT, etc.) to perform calculations, quantum computers apply operations called \u0026ldquo;Quantum Gates\u0026rdquo; to qubits to advance calculations. A combination of multiple quantum gates is called a ** Quantum Circuit**.\nThe state of a qubit is mathematically represented as a point on the surface of a 3-dimensional sphere called a \u0026ldquo;Bloch sphere.\u0026rdquo; The North Pole is \u0026ldquo;0\u0026rdquo;, the South Pole is \u0026ldquo;1\u0026rdquo;, and the equator represents a state where \u0026ldquo;0 and 1 are equally superimposed.\u0026rdquo; A quantum gate is nothing more than an operation that rotates the state (vector) on the surface of this sphere.\nLet\u0026rsquo;s introduce some representative quantum gates.\n1. Hadamard Gate (H Gate) This is the most fundamental gate unique to quantum computers, not found in classical computers. When a qubit exactly in the \u0026ldquo;0\u0026rdquo; state passes through an H gate, it creates a \u0026ldquo;perfect superposition state\u0026rdquo; (a point on the equator of the Bloch sphere) where 0 and 1 are observed with exactly 50% probability each. As an initialization step for quantum computation, many algorithms begin by applying this H gate to all qubits.\n2. Pauli Gates (X, Y, Z Gates) These gates correspond to the NOT gate (flipping 0 to 1, and 1 to 0) of classical computers. On the Bloch sphere, they correspond to 180-degree rotations around the X, Y, and Z axes. The X gate, in particular, flips the North Pole (0) to the South Pole (1), working exactly the same as a classical NOT gate. The Z gate has the role of flipping the \u0026ldquo;phase\u0026rdquo; (like the timing of a wave) of a superposition, which is extremely important for causing quantum interference.\n3. CNOT Gate (Controlled NOT Gate) This is a hyper-important gate for creating quantum entanglement. It uses two qubits (a control bit and a target bit). It operates as follows: \u0026ldquo;If the control bit is 1, flip the state of the target bit (apply an X gate). If the control bit is 0, do nothing.\u0026rdquo; At first glance, it looks like a simple IF conditional branch, but what happens if the control bit is in a \u0026ldquo;superposition state of 0 and 1\u0026rdquo;? The target bit becomes a \u0026ldquo;superposition of flipped and unflipped states,\u0026rdquo; and the destinies of the two bits become completely linked. The two qubits beautifully become \u0026ldquo;entangled.\u0026rdquo;\nBy placing and applying these gates in sequence from left to right like a musical score, complex algorithms are executed.\nChapter 4: What Are Quantum Computers Good At, and What Are They Bad At? Here is an important fact: quantum computers are not omnipotent gods. For everyday tasks like web browsing, video rendering, Excel macro processing, or running general smartphone apps, quantum computers will probably never surpass classical computers. Classical computers, which are already highly optimized and boast overwhelming speed and low cost, are better suited for these sequential processes.\nQuantum computers truly shine only when applied to \u0026ldquo;specific problems where the combinations of calculations explode exponentially for classical computers, taking time comparable to the age of the universe.\u0026rdquo; This is called \u0026ldquo;Quantum Supremacy\u0026rdquo; or \u0026ldquo;Quantum Advantage.\u0026rdquo;\nWhat Quantum Computers Excel At (Killer Applications) 1. Prime Factorization and Cryptanalysis (Shor\u0026rsquo;s Algorithm) Currently, secure communications on the Internet (such as credit card payments and sending personal information) are protected by \u0026ldquo;RSA encryption,\u0026rdquo; which is based on the premise that \u0026ldquo;prime factorization of huge numbers is practically impossible (takes an enormous amount of time) for classical computers.\u0026rdquo; However, by using \u0026ldquo;Shor\u0026rsquo;s Algorithm\u0026rdquo; discovered by mathematician Peter Shor in 1994, a quantum computer can skillfully use interference to solve this at a dramatic speed (polynomial time). Because of this, there is a risk that the current cryptographic systems will collapse in the future, and central banks and government agencies worldwide are rushing to transition to \u0026ldquo;Post-Quantum Cryptography.\u0026rdquo;\n2. Quantum Chemistry Calculations, New Materials, and Drug Discovery The behavior of molecules and atoms in the natural world originally follows the laws of quantum mechanics. When trying to simulate the behavior of complex molecules on a classical computer, the combinations of electron interactions explode, hitting the computational limits even for relatively small molecules. As Nobel laureate Richard Feynman said, \u0026ldquo;Nature isn\u0026rsquo;t classical, dammit, and if you want to make a simulation of nature, you\u0026rsquo;d better make it quantum mechanical,\u0026rdquo; quantum computers exert overwhelming native power in material simulations. Breakthroughs that solve humanity\u0026rsquo;s challenges are expected, such as the design of revolutionary new drugs, the discovery of room-temperature superconductors, the development of highly efficient solar cells and battery materials, and the synthesis of energy-efficient fertilizers.\n3. Combinatorial Optimization Problems and Search (Grover\u0026rsquo;s Algorithm) Quantum algorithms also demonstrate power for problems that involve finding the optimal choice from an enormous number of options (logistics route optimization, financial portfolio optimization, etc.). By using \u0026ldquo;Grover\u0026rsquo;s Algorithm,\u0026rdquo; the target data can be found from an unsorted database in the square root of the time it would take a classical computer. For example, if there are 100 million pieces of data, a search that takes a maximum of 100 million tries classically can be completed in just about 10,000 tries.\nChapter 5: The Hardware Walls In the Way: \u0026ldquo;Decoherence\u0026rdquo; and \u0026ldquo;Quantum Error Correction\u0026rdquo; Although theoretically magically powerful, the path to practical application of quantum computers is blocked by extremely high and steep physical walls. The biggest enemy is \u0026ldquo;Noise\u0026rdquo;.\nThe \u0026ldquo;superposition\u0026rdquo; and \u0026ldquo;quantum entanglement\u0026rdquo; of qubits are extremely delicate and fragile states. Even the slightest ambient heat, electromagnetic fluctuation, or cosmic rays can instantly cause that magical state to collapse, turning it into just a classical bit. This phenomenon is called \u0026ldquo;Decoherence\u0026rdquo;.\nThe Fierce Competition of Physical Implementation Methods Currently, there is a battle for supremacy worldwide regarding how to physically create these delicate qubits.\nSuperconducting Method: Adopted by Google, IBM, Amazon, etc. It uses loop-shaped superconducting circuits and controls the quantum state by cooling it to a cryogenic temperature close to absolute zero (about -273°C) using massive refrigerators. It is currently the most advanced method and the easiest to scale up the number of qubits, but the cooling equipment is huge and expensive. Trapped Ion Method: Adopted by IonQ, Quantinuum, etc. It traps ions (atoms) in a vacuum using electromagnetic fields and controls them by shining precise lasers. Its strength is that all qubits are uniform and can maintain their state for a long time (long coherence time), but the operation speed is slower compared to superconducting. Photonic Method: Focused on by PsiQuantum, etc. It uses particles of light (photons). It has the great advantage of not requiring a cryogenic environment and mostly operating at room temperature, while being highly compatible with existing silicon chip manufacturing and fiber-optic communication technologies. Topological Method: Researched for a long time by Microsoft. It is an ambitious approach trying to create qubits fundamentally robust against environmental noise (resistant to errors) by utilizing the topological properties of special particles called anyons. It is theoretically the strongest, but the physical realization hurdle is considered the highest. The Path to the Ultimate Goal: \u0026ldquo;Fault-Tolerant Quantum Computer (FTQC)\u0026rdquo; Calculation errors (like bit flips from cosmic rays) also exist in today\u0026rsquo;s classical computers, but they are perfectly corrected by \u0026ldquo;error-correcting codes,\u0026rdquo; so we can use our smartphones without ever noticing an error. To perform practical large-scale calculations on a quantum computer, similar \u0026ldquo;Quantum Error Correction (QEC)\u0026rdquo; is essential.\nHowever, because quantum states have the property of \u0026ldquo;breaking when observed,\u0026rdquo; there is a fatal dilemma: you cannot directly look inside (observe) to check for errors. To avoid this, theories have been established (like surface codes) that skillfully combine many unstable \u0026ldquo;physical qubits\u0026rdquo; to build one stable \u0026ldquo;logical qubit\u0026rdquo; that can detect and correct errors. However, it is said that 1,000 to 10,000 physical qubits are needed to create just one logical qubit. Executing Shor\u0026rsquo;s algorithm using thousands of logical qubits would require a massive system with millions to tens of millions of physical qubits overall.\nWe are currently in what is called the era of NISQ (Noisy Intermediate-Scale Quantum) devices. These are transitional machines operating with tens to hundreds of qubits without error correction. Experts predict that it will take a long-term research and development period of 10 to several decades to realize the ultimate goal, a fully error-correctable \u0026ldquo;Fault-Tolerant Quantum Computer (FTQC)\u0026rdquo;.\nChapter 6: History and Future Prospects of Quantum Computers Finally, let\u0026rsquo;s take a bird\u0026rsquo;s-eye view of how quantum computers were born and where they are heading.\nFrom the Birth of the Theory to the Demonstration of \u0026ldquo;Quantum Supremacy\u0026rdquo; 1980s: Physicists Paul Benioff and Richard Feynman proposed the concept of a computer using the principles of quantum mechanics. The phrase \u0026ldquo;If you want to make a simulation of nature, you\u0026rsquo;d better make it quantum mechanical\u0026rdquo; was the starting point. 1994: Peter Shor published a quantum algorithm for prime factorization (Shor\u0026rsquo;s algorithm). It shocked the world and triggered a massive influx of research funding. 1996: Lov Grover published Grover\u0026rsquo;s algorithm to speed up data search. **2019 **: A historical milestone. Google announced that using its 53-qubit superconducting processor \u0026ldquo;Sycamore,\u0026rdquo; it completed a random number generation verification calculation in about 200 seconds that would have taken a classical supercomputer 10,000 years (so they claimed). This caused a sensation as the world\u0026rsquo;s first declaration of demonstrating \u0026ldquo;Quantum Supremacy\u0026rdquo; (although IBM and others later improved the classical supercomputer algorithm and argued it could be calculated in a few days, leading to heated debates). From 2023 onwards: IBM announced the processor \u0026ldquo;Condor\u0026rdquo; with over 1,000 qubits. Furthermore, early demonstrations of error correction technology are being reported one after another, such as Harvard University\u0026rsquo;s success in creating and manipulating \u0026ldquo;logical qubits.\u0026rdquo; Towards the Technology of the Next Generation A quantum computer is not merely a \u0026ldquo;next-generation CPU with a faster clock speed.\u0026rdquo; It is a true paradigm shift in computer science, fundamentally rewriting the concept of computation itself with the rules of quantum mechanics that govern the microscopic world.\nWe will probably not have a \u0026ldquo;personal quantum smartphone\u0026rdquo; that fits in our pockets during our lifetime (and there is no need for one). However, the future is steadily approaching where powerful quantum data centers behind cloud networks like AWS and Azure might one day suddenly discover a cure for an incurable disease, or calculate dream clean energy materials to solve global warming (for example, catalysts to synthesize ammonia from atmospheric nitrogen at room temperature).\nWe are currently in a dawn comparable to the 1940s ENIAC, which ran on punch cards while the heat from its massive vacuum tubes made the whole room hot. However, top-level researchers and engineers worldwide are pooling their wisdom, and technical breakthroughs are reported daily. We, who can witness the evolution of this new \u0026ldquo;dawn of computing\u0026rdquo; in real time, can be said to live in a historically very exciting era.\nThe door to the quantum world has just been opened. Keep an eye on future developments.\nThis article aims to explain the basic concepts of quantum computing in an easy-to-understand manner for business professionals and the general public interested in technology. Please note that some rigorous mathematical and physical definitions (such as bra-ket notation and details of complex probability amplitudes) have been partially simplified.\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/en/p/quantum-computer-basics/","title":"[Complete Guide] What is a Quantum Computer? ~The Ultimate Computing Principle from Scratch~"},{"content":"Introduction: The \u0026ldquo;Threat\u0026rdquo; Quantum Computers Pose to Cryptography Currently, many of the communications we conduct daily on the internet—such as online banking payments, website browsing (HTTPS), messaging app exchanges, and blockchain/crypto asset transactions—are protected by a technology called \u0026ldquo;Public Key Cryptography\u0026rdquo;. Specifically, algorithms like RSA and Elliptic Curve Cryptography (ECC) form the foundation supporting the reliability of our modern digital society.\nThese cryptographic methods rely on mathematical hard problems, such as \u0026ldquo;prime factorization of large numbers\u0026rdquo; and the \u0026ldquo;discrete logarithm problem,\u0026rdquo; which would take astronomical amounts of time for current classical computers (including supercomputers) to solve. However, when \u0026ldquo;quantum computers,\u0026rdquo; which have been making remarkable progress in recent years, become practically viable, this premise will be fundamentally overturned.\nShor\u0026rsquo;s Algorithm, introduced by Peter Shor in 1994, mathematically proved that a sufficiently powerful quantum computer could solve prime factorization and discrete logarithm problems in an extremely short time. This means there is a risk that all cryptographic communications currently protecting the internet will eventually be decrypted (an issue known as Y2Q: Years to Quantum, or Q-Day).\nEven more serious is the existence of the \u0026ldquo;Harvest Now, Decrypt Later\u0026rdquo; attack method (stealing and storing data now to decrypt it in the future when cryptography can be broken). Data that needs to remain confidential for decades, such as state secrets, corporate intellectual property, and personal biometric information, may already be the target of theft with the premise of future decryption.\nTo respond to this unprecedented crisis, cryptographers and research institutions around the world are working together to develop Post-Quantum Cryptography (PQC), a next-generation cryptographic technology designed to maintain security against attacks by quantum computers. This article will explain the basics of PQC, the mechanisms of its major algorithms, and the latest trends in global standardization driven by the National Institute of Standards and Technology (NIST).\nWhat is Post-Quantum Cryptography (PQC)? Post-Quantum Cryptography (PQC) is a general term for cryptographic algorithms designed to run on existing classical computers while also being resistant to attacks by large-scale quantum computers expected in the future (such as Shor\u0026rsquo;s algorithm).\nIt is often confused with \u0026ldquo;Quantum Cryptography\u0026rdquo; or \u0026ldquo;Quantum Key Distribution (QKD),\u0026rdquo; but these take entirely different approaches. Quantum Cryptography (QKD) is a hardware-based technology that uses the physical laws of quantum mechanics (such as the property that observing a quantum state changes it) to make eavesdropping on communication paths physically impossible. It requires dedicated optical fibers and specialized equipment, posing challenges related to deployment costs and distance limitations.\nOn the other hand, PQC is strictly a software-based cryptographic technology based on \u0026ldquo;mathematics.\u0026rdquo; Therefore, it can be integrated into existing internet infrastructure, servers, smartphones, and browsers as software updates, making it highly applicable to the real world. IT companies and government agencies around the world consider replacing (migrating) the currently used RSA and ECC with PQC as an urgent priority.\nThe 4 Major Mathematical Approaches Supporting PQC Various PQC algorithms have been proposed based on mathematical hard problems (such as NP-hard problems) that cannot be solved efficiently even with a quantum computer. Here, we introduce the four main categories currently in the mainstream.\nMajor Approaches to Post-Quantum Cryptography (PQC) 1 2 3 4 5 6 7 8 9 10 11 12 graph LR PQC[Post-Quantum Cryptography PQC] --\u0026gt; L[Lattice-based Cryptography] PQC --\u0026gt; H[Hash-based Cryptography] PQC --\u0026gt; M[Multivariate Cryptography] PQC --\u0026gt; C[Code-based Cryptography] 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. Lattice-based Cryptography Currently, \u0026ldquo;Lattice-based Cryptography\u0026rdquo; is considered the most promising and mainstream approach in the field of PQC. It bases its security on problems related to points (lattice points) regularly arranged in a multidimensional space. Famous problems include the \u0026ldquo;Shortest Vector Problem (SVP)\u0026rdquo; and the \u0026ldquo;Learning With Errors (LWE) problem.\u0026rdquo;\nMechanism Overview: Imagine countless points arranged in a grid within a very high-dimensional (hundreds to thousands of dimensions) space. Finding a specific lattice point is easy in 2 or 3 dimensions, but in hundreds of dimensions, no efficient algorithm has been found for either classical or quantum computers. The LWE problem, in particular, exploits the property that \u0026ldquo;if small \u0026rsquo;noise (errors)\u0026rsquo; is intentionally added to a system of linear equations, deducing the original variables becomes drastically harder.\u0026rdquo;\nPros:\nApplicable to both Key Encapsulation Mechanisms (KEM) and digital signatures. Extremely fast processing speeds (sometimes faster than RSA and ECC). Well-balanced with relatively small key and ciphertext sizes. Many of the algorithms currently being standardized by NIST (such as ML-KEM and ML-DSA) adopt this lattice-based cryptography.\n2. Hash-based Cryptography Hash-based cryptography is a PQC algorithm specialized for digital signatures. Its security relies entirely on the collision resistance and one-wayness of secure \u0026ldquo;cryptographic hash functions\u0026rdquo; like SHA-2 and SHA-3.\nMechanism Overview: It starts with a one-time signature scheme called \u0026ldquo;Lamport Signature.\u0026rdquo; By bundling this in a tree-structured data format called a \u0026ldquo;Merkle Tree,\u0026rdquo; it allows for multiple signatures using a single key pair.\nPros:\nThe foundation of its security is extremely solid, carrying a strong proof that it is \u0026ldquo;secure as long as the hash function is secure.\u0026rdquo; Due to its low reliance on mathematical structures, the risk of unexpected decryption methods being discovered is low. Cons:\nCannot be used for Key Encapsulation (KEM); only applicable to digital signatures. Tends to have larger signature sizes. There are \u0026ldquo;stateful\u0026rdquo; and \u0026ldquo;stateless\u0026rdquo; variants. The stateful ones (like XMSS) require strict management of the number of key uses, making implementation difficult. NIST has standardized \u0026ldquo;SLH-DSA (formerly SPHINCS+)\u0026rdquo; as a stateless hash-based signature.\n3. Multivariate Cryptography Multivariate cryptography bases its security on the difficulty of solving systems of multivariate quadratic polynomial equations (the Multivariate Quadratic problem, or MQ problem). This problem is known to be NP-hard.\nMechanism Overview: The sender creates a ciphertext (or signature) by substituting plaintext (or hash values) into complex equations with numerous variables provided as the public key. The legitimate receiver holds \u0026ldquo;hidden information (a trapdoor) that transforms the structure of the equations into an easily solvable form\u0026rdquo; as a private key, and uses this for decryption (or signature verification).\nPros:\nSignature sizes are very small. Signature verification speeds are extremely fast. Suitable for IoT devices with limited resources. Cons:\nPublic key sizes are very large (ranging from tens to hundreds of kilobytes). There have been cases where prominent algorithms (like Rainbow) were broken by classical attacks in the past, making it somewhat more challenging to establish trust in its security compared to other methods. 4. Code-based Cryptography Code-based cryptography applies the theory of \u0026ldquo;error-correcting codes,\u0026rdquo; which are used to correct errors over communication channels, to cryptography. The \u0026ldquo;McEliece Cryptosystem,\u0026rdquo; proposed in 1978, is the most famous and one of the oldest in PQC.\nMechanism Overview: The sender encodes the plaintext using the receiver\u0026rsquo;s public key (a generator matrix of an error-correcting code with a hidden structure) and intentionally adds errors (noise) before sending. The receiver removes the errors using their private key to retrieve the plaintext. An attacker must correct the errors from a seemingly random code without knowing its structure, a problem known as general \u0026ldquo;syndrome decoding,\u0026rdquo; which has been proven to be NP-hard.\nPros:\nHas been thoroughly studied for over 40 years without any effective attacks being found, so confidence in its security is extremely high. Fast encryption and decryption processing. Cons:\nPublic key sizes are massive (sometimes reaching several megabytes). Therefore, it is difficult to use in environments with limited communication bandwidth or memory (such as TLS handshakes). Latest Trends in NIST\u0026rsquo;s PQC Standardization The US National Institute of Standards and Technology (NIST) began soliciting next-generation post-quantum cryptography algorithms globally in 2016, and has undergone several years of rigorous evaluation rounds.\nIn 2024, NIST finally published the following three algorithms as official Federal Information Processing Standards (FIPS). This has laid a solid foundation for organizations worldwide to begin implementing them in production environments.\nEstablished FIPS Standards (2024) FIPS 203: ML-KEM (Formerly: CRYSTALS-Kyber)\nUse Case: Key Encapsulation Mechanism (KEM) / Encryption \u0026amp; Key Exchange Underlying Tech: Lattice-based Cryptography (Module-LWE) Features: It offers an excellent balance of key size and speed, serving as the default PQC key exchange for general internet use, such as web communications (TLS) and secure messaging apps. FIPS 204: ML-DSA (Formerly: CRYSTALS-Dilithium)\nUse Case: Digital Signatures Underlying Tech: Lattice-based Cryptography (Module-LWE) Features: The primary standard for digital signatures. It allows for efficient processing and will become the new standard for all electronic signature applications, including software signing and document authentication. FIPS 205: SLH-DSA (Formerly: SPHINCS+)\nUse Case: Digital Signatures Underlying Tech: Hash-based Cryptography (Stateless) Features: Plays a crucial role by serving as a backup in case vulnerabilities are ever found in lattice-based cryptography. Although the signature size is larger, it is suitable for applications requiring long-term reliability. The Pursuit of Further Diversity While NIST has completed the initial standardization process, it continues to explore further algorithms. In particular, because the standards lean heavily toward \u0026ldquo;lattice-based cryptography,\u0026rdquo; ensuring Crypto Diversity is seen as critical. The evaluation of code-based cryptography and others is ongoing as backup standards for key exchange, aiming to make the foundation of PQC even more robust in the future.\nPQC Migration Scenarios and Challenges: The Importance of \u0026ldquo;Crypto-Agility\u0026rdquo; With the release of official standards from NIST, government agencies, financial institutions, and tech companies around the world will begin transitioning (migrating) from existing RSA/ECC to PQC in earnest. Guidelines from organizations like the NSA (National Security Agency) also recommend early completion of this migration.\nAdopting a Hybrid Approach Because PQC algorithms are new, they have not withstood the \u0026ldquo;test of time\u0026rdquo; compared to classical cryptography. Considering the risks of hidden bugs in implementations or the discovery of new attack methods, a \u0026ldquo;Hybrid Approach\u0026rdquo; is recommended during this transitional period. This method involves performing key exchanges by combining proven existing cryptography (e.g., ECDHE) with the new PQC (e.g., ML-KEM). Trial introductions of this approach are rapidly advancing in major browsers and cloud services.\nAchieving Crypto-Agility What companies and system developers must focus on most moving forward is ensuring \u0026ldquo;Crypto-Agility.\u0026rdquo; When flaws are found in algorithms or new standards emerge, it is essential to have a flexible architectural design that allows cryptographic algorithms to be swapped or updated quickly without stopping the system.\nCreating a Cryptography Bill of Materials (CBOM) to accurately grasp \u0026ldquo;where,\u0026rdquo; \u0026ldquo;what cryptography,\u0026rdquo; and \u0026ldquo;for what purpose\u0026rdquo; it is being used within a company\u0026rsquo;s systems is a critical first step toward PQC migration.\nConclusion: Preparing for the Coming \u0026ldquo;Q-Day\u0026rdquo; The evolution of quantum computers will bring tremendous benefits to humanity, while simultaneously posing the greatest threat to the cryptographic security that forms the foundation of our modern digital society. Post-Quantum Cryptography (PQC) is no longer a \u0026ldquo;research topic of the distant future.\u0026rdquo; Following the milestone of NIST\u0026rsquo;s publication of the FIPS standards, PQC has fully entered the phase of \u0026ldquo;implementation and migration.\u0026rdquo;\nGiven the threat of \u0026ldquo;Harvest Now, Decrypt Later,\u0026rdquo; transitioning to PQC is an immediate, top-priority task for all organizations handling highly sensitive data. By deeply understanding next-generation cryptographic technologies and enhancing your system\u0026rsquo;s crypto-agility, we can safely navigate the approaching quantum computer era.\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/en/p/post-quantum-cryptography/","title":"[PQC] The Complete Guide to Post-Quantum Cryptography in the Quantum Computer Era"},{"content":"Introduction: The Intersection of Cryptography and Quantum Computers In modern Internet society, \u0026ldquo;public-key cryptography\u0026rdquo; is the foundation for protecting the secrecy of communications. A representative example of this is \u0026ldquo;RSA encryption,\u0026rdquo; developed in 1977 by Ron Rivest, Adi Shamir, and Leonard Adleman. From online shopping payments we use every day to website browsing (HTTPS) and email transmission/reception, RSA encryption functions as the heart of the Internet infrastructure.\nHowever, it has been pointed out that the advent of \u0026ldquo;quantum computers\u0026rdquo; could fundamentally overturn this security. Media outlets sometimes run sensational headlines like, \u0026ldquo;Once quantum computers are completed, passwords and codes worldwide will be decrypted in seconds.\u0026rdquo; But is this really true?\nIn this article, we delve deeply into the mechanisms of GNFS (General Number Field Sieve), a classical cryptanalysis method, and \u0026ldquo;Shor\u0026rsquo;s Algorithm,\u0026rdquo; the definitive cryptanalysis algorithm using a quantum computer. We will explain advanced concepts like Quantum Fourier Transform and period finding in an easy-to-understand manner, and examine in detail the current state of quantum hardware in the NISQ (Noisy Intermediate-Scale Quantum) era and the hurdles required to actually break RSA-2048.\nThe Core of RSA Encryption: The Difficulty of Prime Factorization The security of RSA encryption relies on a very simple asymmetry in mathematics. It is based on the fact that \u0026ldquo;it is easy to multiply two enormous prime numbers together, but it is extremely difficult to find the original two prime numbers (prime factorization) from the result of that multiplication (a composite number).\u0026rdquo;\nFor example, suppose we have two prime numbers, $ p = 61 $ and $ q = 53 $. Calculating this multiplication $ N = p \\times q = 3233 $ is instantaneous. However, if given only the number \u0026ldquo;3233\u0026rdquo; and asked, \u0026ldquo;Which prime numbers were multiplied to get this?\u0026rdquo;, the computational complexity explodes as the numbers get larger.\nIn the currently mainstream RSA-2048, a massive composite number $ N $ with a key length of 2048 bits—about 617 decimal digits—is used. If this $ N $ can be factored into primes, the encryption is as good as broken.\nThe Challenge by Classical Computers: GNFS (General Number Field Sieve) To solve the prime factorization problem, mathematicians and cryptographers have developed various algorithms over the years. Among them, the fastest currently on classical computers is the General Number Field Sieve (GNFS).\nGNFS is a method that extends computations in the ring of integers to more abstract algebraic number fields (Number Fields) to analyze and factorize a huge number $ N $. The rough flow is as follows:\nPolynomial Selection: Find a polynomial $ f(x) $ with appropriate degrees and coefficients that has $ N $ as a root. Data Collection (Sieving): Over the field of rational numbers and algebraic number fields, search for a massive amount of pairs of numbers that can be factored into small prime numbers (Smooth numbers). This process is called \u0026ldquo;sieving\u0026rdquo; and is the most time-consuming part. Matrix Generation and Reduction: Based on the collected relations, generate a huge sparse matrix (a matrix where most components are 0) and find a solution using linear algebraic methods (such as the Block Lanczos algorithm). Square Root Calculation: Finally, calculate the square root over the algebraic number field and derive the factors (prime factors) of $ N $. The computational complexity of GNFS is non-asymptotically evaluated as $ O(\\exp((\\sqrt[3]{\\frac{64}{9}} + o(1)) (\\log N)^{\\frac{1}{3}} (\\log \\log N)^{\\frac{2}{3}})) $. This is called \u0026ldquo;sub-exponential\u0026rdquo; time complexity. While faster than exponential time, it is still far slower than polynomial time.\nIn fact, in 2020, an international research team succeeded in the prime factorization of RSA-250 (an 829-bit, 250-digit composite number) using GNFS. This calculation gathered computing resources from around the world and spent an enormous amount of computing time, roughly 2,700 CPU core years. However, when it comes to 2048 bits, the required computational complexity is said to swell to trillions of times the lifespan of the universe, making it impossible to decrypt within a realistic time frame using classical methods, no matter how many supercomputers are run in parallel.\nThe Trump Card of Quantum Computers: Shor\u0026rsquo;s Algorithm Enter \u0026ldquo;Shor\u0026rsquo;s Algorithm,\u0026rdquo; announced by Peter Shor in 1994. This algorithm was groundbreaking because it could solve the prime factorization problem on a quantum computer in polynomial time ( $ O((\\log N)^3) $ ). The difference between sub-exponential time and polynomial time is decisive; in theory, the use of quantum computers means the complete destruction of RSA encryption.\nThe Overall Flow of Shor\u0026rsquo;s Algorithm 1 2 3 4 5 6 7 8 9 10 graph TD A[Input number N to be factored] --\u0026gt; B[Select a random integer a] B --\u0026gt; C{Greatest Common Divisor\u0026lt;br\u0026gt;of a and N} C --\u0026gt;|Greater than 1| D[Luckily discovered a prime factor!] C --\u0026gt;|1 Mutually prime| E[Quantum computer takes the stage] E --\u0026gt; F[Find the period r of the function\u0026lt;br\u0026gt;f_x = a^x mod N\u0026lt;br\u0026gt;using Quantum Fourier Transform] F --\u0026gt; G{Is period r even and\u0026lt;br\u0026gt;a^r/2 ≢ -1 mod N?} G --\u0026gt;|Yes| H[Calculate greatest common divisor gcd_a^r/2 ± 1, N] H --\u0026gt; I((Prime factorization successful!)) G --\u0026gt;|No| B Shor\u0026rsquo;s algorithm does not solve the prime factorization problem directly, but rather uses theorems from number theory to transform it into another problem called the \u0026ldquo;Period Finding Problem,\u0026rdquo; and solves that rapidly by leveraging the characteristics of a quantum computer.\nStep 1: Reduction from Prime Factorization to the Period Finding Problem (Classical Processing) The first step of the algorithm is performed on a classical computer. For the number $ N $ you want to factorize, pick a random integer $ a $ ( $ 1 \u003c a \u003c N $ ) that is coprime to $ N $ (their greatest common divisor is 1). If by chance the greatest common divisor is not 1, the common divisor found at that point is a prime factor of $ N $, and decryption is complete, but the probability of this is extremely low.\nNext, consider the following sequence of modulo equations: $ f(x) = a^x \\pmod N $\nIf we substitute $ x = 1, 2, 3, \\dots $ into this function $ f(x) $, the values may seem random, but because we are calculating within a finite range, it will always return to the original value somewhere and repeat the same sequence of numbers. The period of this repetition is called $ r $. In other words, the problem of finding the smallest positive integer $ r $ such that $ a^r \\equiv 1 \\pmod N $, this is the \u0026ldquo;Period Finding Problem\u0026rdquo;.\nIf this period $ r $ is found, and $ r $ is an even number, then $ a^r - 1 \\equiv 0 \\pmod N $, and using the factorization formula, it can be transformed into: $ (a^{r/2} - 1)(a^{r/2} + 1) \\equiv 0 \\pmod N $ From here, by using the Euclidean algorithm to calculate the greatest common divisor of $ N $ and $ a^{r/2} \\pm 1 $, a prime factor of $ N $ can be obtained with extremely high probability.\nFinding the period $ r $ on a classical computer ultimately requires an exponential number of steps and cannot be sped up. However, a quantum computer can find this period $ r $ in an instant (in polynomial time).\nStep 2: Preparation and Superposition of Quantum States This is where the quantum computer comes into play. Quantum computers use \u0026ldquo;Qubits\u0026rdquo;, which can simultaneously hold the states of \u0026ldquo;0\u0026rdquo; and \u0026ldquo;1\u0026rdquo;. In Shor\u0026rsquo;s algorithm, two registers are prepared: a register to store inputs (the first register) and a register to store calculation results (the second register).\nFirst, a quantum gate operation called a Hadamard gate is applied to all qubits in the first register. As a result, the first register becomes an equal superposition state of all conceivable values of $ x $ (from $ 0 $ to $ 2^n-1 $, where $ n $ is a sufficiently large number of bits).\nIn other words, inside the quantum computer, a state is created where countless input values $ x=0, 1, 2, 3, \\dots $ exist simultaneously in parallel.\nStep 3: Quantum Modular Exponentiation Next, taking the superposition state of the first register as input, calculate $ f(x) = a^x \\pmod N $ and store the result in the second register. Because this calculation is executed as a unitary transformation on a quantum circuit, the calculation of $ f(x) $ for all $ x $ is performed \u0026ldquo;simultaneously and in parallel (quantum parallelism)\u0026rdquo; while maintaining the superposition.\nThe space of the entire quantum system at this point is an enormous superposition of states: $ |x, a^x \\bmod N\\rangle $\nHowever, if we simply measure (observe) the second register here, a single random value of $ a^x \\bmod N $ will be probabilistically selected, and the $ x $ of the first register will be fixed to one value in conjunction with it. This is exactly the same as calculating it once on a classical computer, and the period $ r $ cannot be found.\nUnder the rules of quantum mechanics, you cannot directly peek into the contents of a superposition state. So how do we extract the global information of the overall \u0026ldquo;period\u0026rdquo;?\nStep 4: Quantum Fourier Transform (QFT) The true brilliance of Shor\u0026rsquo;s algorithm that breaks through this wall is the application of the Quantum Fourier Transform (QFT) to the first register.\nBefore making a measurement, we analyze the wave properties of the function $ f(x) $. Suppose we observed the second register. Suppose a value $ y $ was obtained. Then, the state of the first register collapses to a \u0026ldquo;superposition of all $ x $ such that $ a^x \\pmod N = y $\u0026rdquo;. These values of $ x $ will be in a state that is discretely arranged at intervals of period $ r $, such as $ x_0, x_0 + r, x_0 + 2r, x_0 + 3r, \\dots $ (a kind of comb-like probability amplitude distribution).\nWe apply the Quantum Fourier Transform (QFT) to this state. Just as the classical discrete Fourier transform converts a time-domain signal into the frequency domain, QFT causes interference in the probability amplitudes of the quantum state.\nWhen QFT is applied, due to quantum interference effects, the probabilities of incorrect answers that do not resonate with the period $ r $ (where phases do not align) cancel each other out and approach zero (destructive interference), and only the probability of the correct answer that carries the information of the period $ r $ is amplified (constructive interference).\nStep 5: Measurement and Continued Fraction Expansion (Classical Post-Processing) When the first register is measured after applying QFT, an integer $ c $ close to the form $ c \\approx \\frac{j \\cdot 2^n}{r} $ is obtained with very high probability (where $ j $ is an unknown integer and $ 2^n $ is the size of the register).\nBy returning this measurement result $ c $ to a classical computer and creating a fraction $ \\frac{c}{2^n} \\approx \\frac{j}{r} $, and then calculating an approximate value using a mathematical method called \u0026ldquo;Continued fraction expansion\u0026rdquo;, the denominator, the period $ r $, can be successfully brought to light.\nOnce $ r $ is known, the prime factors of $ N $ can be calculated using the formula from Step 1, and the RSA encryption is completely broken.\nThe Capability and Challenges of Current Quantum Computers (NISQ) While Shor\u0026rsquo;s algorithm is theoretically perfect, if asked, \u0026ldquo;Will RSA encryption be broken tomorrow?\u0026rdquo;, the answer is a definitive \u0026ldquo;No.\u0026rdquo; The reason lies in the limitations of current quantum computer hardware technology.\nThe NISQ (Noisy Intermediate-Scale Quantum) Era We currently exist in an era known as \u0026ldquo;NISQ\u0026rdquo;. NISQ devices have tens to hundreds of physical qubits, but they are extremely vulnerable to noise.\nQubits are susceptible to external environmental influences such as heat and electromagnetic waves, and \u0026ldquo;decoherence\u0026rdquo; (loss of quantum entanglement) where the quantum state breaks down, and \u0026ldquo;gate errors\u0026rdquo; during gate operations occur frequently. If one tries to execute a very deep quantum circuit (with an enormous number of calculation steps) like Shor\u0026rsquo;s algorithm, errors accumulate during the calculation, and the final output becomes completely meaningless noise.\nPhysical Qubits and Logical Qubits What is indispensable for solving this error problem is \u0026ldquo;Quantum Error Correction\u0026rdquo;. While error correction codes are also used in classical computers, quantum error correction is extremely complex due to the \u0026ldquo;no-cloning theorem\u0026rdquo; which forbids the duplication of quantum states.\nIn quantum error correction, an ideal, error-free \u0026ldquo;logical qubit\u0026rdquo; is created by combining a large number of noisy \u0026ldquo;physical qubits\u0026rdquo; using techniques such as the \u0026ldquo;Surface Code\u0026rdquo;.\nAssuming current error rates, it is estimated that approximately 1,000 to 10,000 physical qubits will be required to create one logical qubit. This is called \u0026ldquo;error correction overhead\u0026rdquo;.\nWhat Resources Are Needed to Break RSA-2048? So, how many resources are actually needed to run Shor\u0026rsquo;s algorithm to decrypt RSA-2048?\nAccording to a groundbreaking resource estimation in a 2021 paper by Craig Gidney (Google) and Martin Ekerå, if an optimized Shor\u0026rsquo;s algorithm is used and error correction by surface codes is performed, the following resources will be required:\nNumber of logical qubits: Approx. 4,096 **Number of physical qubits : ** Approx. 20 million (Assuming an error rate of about $10^{-3}$) Computation time: Approx. 8 hours (Millions to billions of physical gate operations required) In contrast, what is the current state of quantum hardware? The superconducting quantum processor \u0026ldquo;Condor\u0026rdquo; announced by IBM at the end of 2023 has 1,121 qubits. In addition, groundbreaking research on the generation of logical qubits (such as the generation of 48 logical qubits using a neutral atom quantum computer by Harvard University and QuEra, etc.) has appeared, but we are not yet at the stage where we can continuously execute \u0026ldquo;perfect, noise-free calculations\u0026rdquo; for a long time.\nScaling up from a few thousand physical qubits to 20 million practical physical qubits (and a system that is interconnected, operates stably at cryogenic temperatures, and can process control signals at ultra-high speeds) presents a tremendous engineering wall (wiring problems, limits of cooling capacity, bloating of control electronics). Many experts predict that it will take at least 10 to 30 years, or even longer, to realize a \u0026ldquo;Fault-Tolerant Quantum Computer (FTQC)\u0026rdquo; capable of breaking RSA-2048.\nThe Creeping Threat of \u0026ldquo;Store Now, Decrypt Later\u0026rdquo; and the Dawn of PQC It is premature to think, \u0026ldquo;We are safe since it will still take more than 10 years.\u0026rdquo; Currently, there is data that must remain secret for decades to come, such as national classified information, medical data, and long-term infrastructure designs.\nWhat is feared here is the threat of an attack method known as \u0026ldquo;Store Now, Decrypt Later\u0026rdquo;. Malicious nations or organizations intercept all communication data currently encrypted with RSA or ECC (Elliptic Curve Cryptography) and store it in storage. Then, 10 or 20 years later, the moment a powerful quantum computer is completed, they use Shor\u0026rsquo;s algorithm to decrypt all past data and expose secrets.\nTo counter this time lag threat, the standardization process for \u0026ldquo;Post-Quantum Cryptography (PQC)\u0026rdquo; has been rapidly advancing, primarily led by NIST (National Institute of Standards and Technology).\nPQC is a new cryptographic algorithm based on mathematical problems that are difficult to solve even with a quantum computer (i.e., Shor\u0026rsquo;s algorithm cannot be applied). The main approaches include the following:\nLattice-based cryptography: Based on problems such as LWE (Learning with Errors). The mainstream in NIST standardization (Kyber, Dilithium, etc.). Code-based cryptography: Relies on the difficulty of the decoding problem of error-correcting codes. Multivariate cryptography: Relies on the difficulty of solving systems of multivariate quadratic equations. Hash-based signatures: Digital signatures that rely solely on the security of hash functions. Major software and platforms such as Google Chrome and Apple\u0026rsquo;s iMessage have already started introduction testing and hybrid implementation of PQC.\nConclusion Quantum computers are transitioning from a pipe dream in the world of science fiction to a real engineering challenge. Shor\u0026rsquo;s algorithm is a great intellectual achievement of humanity that merges mathematics and quantum mechanics, but at the same time, it harbors a \u0026ldquo;destructive power\u0026rdquo; that shakes the foundations of our digital society.\nRSA encryption will not suddenly become unusable tomorrow. However, considering the evolution of quantum technology and the risk of \u0026ldquo;Store Now, Decrypt Later,\u0026rdquo; a large-scale migration that will remain in cryptographic history—the transition to PQC—has already begun. We are now witnessing the front lines of a paradigm shift in information security.\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/en/p/shors-algorithm-and-rsa-breaking/","title":"Will Quantum Computers Really Break RSA Encryption? ~Shor's Algorithm and the Current State of the Art~"},{"content":"[Complete Anatomy] Understanding the Strongest Cryptanalysis Algorithm \u0026ldquo;GNFS\u0026rdquo; by Implementing it in C++ The \u0026ldquo;RSA cryptography\u0026rdquo; fundamentally supports the modern Internet. Its robustness relies on the mathematical belief that \u0026ldquo;factoring huge composite numbers is practically impossible with current computers.\u0026rdquo;\nHowever, humanity has never given up. Currently, for classical computers (regular computers, not quantum computers), there exists the **strongest and most advanced algorithm of humanity ** for performing giant prime factorizations. That is the \u0026ldquo;General Number Field Sieve (GNFS)\u0026rdquo;.\nIn this article, we will strictly model the state-of-the-art computational logic of GNFS in C++ (using the multiple-precision integer boost::multiprecision from the Boost library), publish the entire implementation code, and thoroughly explain the depths of \u0026ldquo;algebraic number theory\u0026rdquo; behind it.\nPlease enjoy the mystery of mathematics and the brute force of computer science that wrestles it down, along with the source code.\n1. GNFS State-of-the-Art Logic Framework (Full Source Code) First, here is the full picture of the C++ implementation of GNFS that we will explain this time. The actual number field sieve (such as CADO-NFS) is an ultra-massive distributed system spanning hundreds of thousands of lines, but this code extracts the \u0026ldquo;5 essential pipelines (phases)\u0026rdquo; that make up GNFS, designs them as classes, and models them in a minimal configuration without losing their mathematical meaning.\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 #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; // Using Boost.Multiprecision for multiple-precision integers using namespace boost::multiprecision; // ============================================================================ // [SOTA GNFS] General Number Field Sieve State-of-the-Art Logic Framework // // This code strictly models the 5 pipelines of state-of-the-art GNFS used in // CADO-NFS etc., as a class design in 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; }; // ============================================================================ // Phase 1: Polynomial Selection (KleinJung\u0026#39;s algorithm) // ============================================================================ class PolynomialSelector { public: int degree; std::vector\u0026lt;cpp_int\u0026gt; f; // Algebraic side polynomial f(x) std::vector\u0026lt;cpp_int\u0026gt; g; // Rational side polynomial g(x) = x - m cpp_int m; PolynomialSelector(int d) : degree(d) {} // Initial polynomial generation based on base-m expansion (actually uses more advanced lattice basis reduction LLL) void select(const cpp_int\u0026amp; N) { std::cout \u0026lt;\u0026lt; \u0026#34;[Phase 1] Polynomial Selection (Degree \u0026#34; \u0026lt;\u0026lt; degree \u0026lt;\u0026lt; \u0026#34;) starting...\u0026#34; \u0026lt;\u0026lt; std::endl; // Simple base-m expansion (degree d) // m = N^(1/d) cpp_int N_copy = N; m = 1; // Simple approximation of m (approximation without using Boost functions) 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[Phase 1] Complete.\u0026#34; \u0026lt;\u0026lt; std::endl; } }; // ============================================================================ // Phase 2: Lattice Sieving // ============================================================================ // In recent GNFS, instead of Line Sieve, Special-q Lattice Sieving by // Franke-Kleinjung et al. is the de facto standard. 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;[Phase 2] Generating Factor Bases (Rational Bound: \u0026#34; \u0026lt;\u0026lt; rational_bound \u0026lt;\u0026lt; \u0026#34;, Algebraic Bound: \u0026#34; \u0026lt;\u0026lt; algebraic_bound \u0026lt;\u0026lt; \u0026#34;)\u0026#34; \u0026lt;\u0026lt; std::endl; // (Omitted) In reality, it generates primes and filters them using Legendre symbols, etc. } std::vector\u0026lt;Relation\u0026gt; sieve(const PolynomialSelector\u0026amp; poly) { std::cout \u0026lt;\u0026lt; \u0026#34;[Phase 2] Special-q Lattice Sieving active...\u0026#34; \u0026lt;\u0026lt; std::endl; std::vector\u0026lt;Relation\u0026gt; relations; // Mock implementation: Actual lattice sieving scans hundreds of GB of memory space block by block. // It maps (a, b) pairs to lattices for each special prime q (a = i*q + j*...), // and executes a sieve that maximizes cache efficiency. // Add one dummy relation for demo 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;[Phase 2] Found \u0026#34; \u0026lt;\u0026lt; relations.size() \u0026lt;\u0026lt; \u0026#34; relations.\u0026#34; \u0026lt;\u0026lt; std::endl; return relations; } }; // ============================================================================ // Phase 3: Filtering (Singleton removal and clique merging) // ============================================================================ class Filter { public: void reduce_matrix(std::vector\u0026lt;Relation\u0026gt;\u0026amp; relations) { std::cout \u0026lt;\u0026lt; \u0026#34;[Phase 3] Filtering Relations...\u0026#34; \u0026lt;\u0026lt; std::endl; // 1. Singleton removal (removing relations with primes that appear only once) // 2. Clique merging (merging relations to make a sparse matrix denser) // In reality, it compresses a matrix of hundreds of millions of rows down to several million using algorithms like Union-Find. std::cout \u0026lt;\u0026lt; \u0026#34;[Phase 3] Matrix size reduced optimally.\u0026#34; \u0026lt;\u0026lt; std::endl; } }; // ============================================================================ // Phase 4: Linear Algebra over GF(2) (Block Wiedemann method) // ============================================================================ class LinearAlgebraGF2 { public: // In modern supercomputing environments, the Block Wiedemann method (Coppersmith implementation), // which is more suitable for distributed computing than the Block Lanczos method, is used as the state-of-the-art. 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;[Phase 4] Block Wiedemann algorithm over GF(2) starting...\u0026#34; \u0026lt;\u0026lt; std::endl; // Iterates matrix-vector multiplication of a sparse matrix, // and finds multiple solution vectors (kernels) where M * x = 0 mod 2. std::vector\u0026lt;std::vector\u0026lt;int\u0026gt;\u0026gt; dependencies; // List of dependencies // Dummy data dependencies.push_back({0}); std::cout \u0026lt;\u0026lt; \u0026#34;[Phase 4] Found \u0026#34; \u0026lt;\u0026lt; dependencies.size() \u0026lt;\u0026lt; \u0026#34; linear dependencies (perfect squares).\u0026#34; \u0026lt;\u0026lt; std::endl; return dependencies; } }; // ============================================================================ // Phase 5: Algebraic Square Root // ============================================================================ 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;[Phase 5] Algebraic Square Root computation...\u0026#34; \u0026lt;\u0026lt; std::endl; // 1. Compute the rational side square root V (simple integer arithmetic) cpp_int V = 1; // V = sqrt( prod(a - bm) ) mod N // 2. Compute the algebraic side square root gamma (Montgomery\u0026#39;s method, etc.) // Find an element gamma in the huge algebraic field O_K, and map it to the real world using the homomorphism map phi // Y = phi(gamma) mod N cpp_int Y = 1; // Assuming that sequences of Quadratic Characters were added in Phases 2 and 4 // to bypass the obstruction of the ideal class group and the unit group. std::cout \u0026lt;\u0026lt; \u0026#34; -\u0026gt; Homomorphism map phi applied.\u0026#34; \u0026lt;\u0026lt; std::endl; std::cout \u0026lt;\u0026lt; \u0026#34;[Phase 5] Calculating 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;[SUCCESS] Non-trivial factor found: \u0026#34; \u0026lt;\u0026lt; factor \u0026lt;\u0026lt; std::endl; std::cout \u0026lt;\u0026lt; \u0026#34; Other factor: \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;[FAILURE] Trivial solution. Trying next dependency...\u0026#34; \u0026lt;\u0026lt; std::endl; } } }; // ============================================================================ // Main Execution Pipeline // ============================================================================ int main() { std::cout \u0026lt;\u0026lt; \u0026#34;================================================================\u0026#34; \u0026lt;\u0026lt; std::endl; std::cout \u0026lt;\u0026lt; \u0026#34; [SOTA GNFS] General Number Field Sieve Engine (Boost C++) \u0026#34; \u0026lt;\u0026lt; std::endl; std::cout \u0026lt;\u0026lt; \u0026#34;================================================================\u0026#34; \u0026lt;\u0026lt; std::endl; // Huge composite number N to factor, such as RSA-270 cpp_int N(\u0026#34;233108530344407544527637656910680524145619812480305449042948611968495918245135782867888369318577116418213919268572658314913060672626911354027609793166341626693946596196427744273886601876896313468704059066746903123910748277606548649151920812699309766587514735456594993207\u0026#34;); // Degree of the polynomial (normally select degree 5-6 for numbers over 130 digits) int degree = 6; // Initialize pipeline PolynomialSelector poly_select(degree); LatticeSieve sieve(10000000, 20000000); // Actual bounds are tens of millions to hundreds of millions Filter filter; LinearAlgebraGF2 linalg; AlgebraicSquareRoot sqrt_step; auto start_time = std::chrono::high_resolution_clock::now(); // 1. Polynomial selection poly_select.select(N); // 2. Sieving process sieve.generate_factor_bases(); std::vector\u0026lt;Relation\u0026gt; relations = sieve.sieve(poly_select); // 3. Filtering (matrix compression) filter.reduce_matrix(relations); // 4. Linear algebra (nullspace search over GF(2)) std::vector\u0026lt;std::vector\u0026lt;int\u0026gt;\u0026gt; dependencies = linalg.solve_nullspace(relations); // 5. Algebraic square root computation and 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[System] SOTA GNFS Pipeline completed in \u0026#34; \u0026lt;\u0026lt; elapsed.count() \u0026lt;\u0026lt; \u0026#34; seconds.\u0026#34; \u0026lt;\u0026lt; std::endl; return 0; } Now, how does this code destroy the cryptographic wall? I will break down and explain the meticulous algorithm and advanced mathematics phase by phase.\n2. The Final Goal of GNFS: $X^2 \\equiv Y^2 \\pmod N$ The goal that not only GNFS but most modern large integer factorization algorithms aim for is to find a non-trivial pair $(X, Y)$ that satisfies the following congruence:\n$$X^2 \\equiv Y^2 \\pmod N$$ This equation means that \u0026ldquo;the remainders of $X^2$ and $Y^2$ divided by $N$ are equal\u0026rdquo;. If we transform this: $X^2 - Y^2 \\equiv 0 \\pmod N$ In other words, $(X-Y)(X+Y)$ becomes a multiple of $N$.\nIf $X \\not\\equiv \\pm Y \\pmod N$ (a non-trivial solution), then between $(X-Y)$ and $N$, there exists a \u0026ldquo;common divisor greater than 1 and less than $N$\u0026rdquo;. Here, if we compute $\\gcd(X-Y, N)$ using the Euclidean algorithm, the prime factors of $N$ can be easily found.\nHowever, finding these $X$ and $Y$ is like looking for a needle in a desert. Thus, GNFS takes the genius approach of creating two worlds, the \u0026ldquo;real integer world\u0026rdquo; and the \u0026ldquo;algebraic field of polynomials world\u0026rdquo;, and distributing the computation.\n3. Phase 1: Polynomial Selection 1 2 3 4 5 6 7 8 9 10 11 12 class PolynomialSelector { // ... void select(const cpp_int\u0026amp; N) { // Calculation of m = N^(1/d) and base-m expansion // ... for (int i = 0; i \u0026lt;= degree; ++i) { f[i] = temp % m; temp /= m; } g = {-m, 1}; // g(x) = x - m } }; The first step of GNFS is to create a \u0026ldquo;magic polynomial\u0026rdquo; to bridge the two worlds. For a huge number $N$, we choose an integer $m$. Usually, it is chosen such that $m \\approx N^{1/d}$ (in the code, a polynomial of degree $d=6$ is assumed).\nThen, $N$ is expanded in base $m$, and its coefficients are used to construct the polynomial $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$$ This polynomial $f(x)$ has the extremely important property that \u0026ldquo;substituting $m$ for the variable $x$ evaluates exactly to $N$ ($f(m) = N$)\u0026rdquo;. In other words, $f(m) \\equiv 0 \\pmod N$. The rational side polynomial is defined as $g(x) = x - m$.\nThis strongly connects the \u0026ldquo;algebraic field world $\\mathbb{Z}[\\alpha]$\u0026rdquo; ruled by the root $\\alpha$ of $f(x)=0$, and the normal \u0026ldquo;rational (integer) world $\\mathbb{Z}$\u0026rdquo;, via a \u0026ldquo;ring homomorphism\u0026rdquo; of $x \\to m$.\nIn state-of-the-art systems like CADO-NFS, it takes months to search for the \u0026ldquo;most convenient polynomial $f(x)$\u0026rdquo; using KleinJung\u0026rsquo;s algorithm and the LLL lattice basis reduction algorithm, so that the coefficients of the polynomial do not become excessively large, and primes are likely to appear (become smooth) in the subsequent steps.\n4. Phase 2: 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) { // ... // Maps (a, b) pairs to lattices for each special prime q, // and executes a sieve that maximizes cache efficiency. // ... } }; Once the two worlds are prepared, the next step is to search for \u0026ldquo;smooth numbers (numbers composed entirely of small prime factors)\u0026rdquo; in both worlds. An infinite number of integer pairs $(a, b)$ are generated, and the following two values are calculated:\nRational side value: $a - bm$ Algebraic side norm: $b^d f(a/b)$ The goal of GNFS is to collect tens of millions to hundreds of millions of these \u0026ldquo;pairs (Relations) where both the rational side and algebraic side values can be completely factored into only small prime factors\u0026rdquo;.\nIn the early GNFS, a \u0026ldquo;Line Sieve\u0026rdquo; was used, lining up $(a, b)$ on the $xy$ plane and sequentially dividing them by primes from the edges. However, this caused frequent cache misses due to accessing various parts of memory, and its weakness was being extremely slow.\nTherefore, the current state-of-the-art code uses the \u0026ldquo;Special-q Lattice Sieve\u0026rdquo; method. By fixing a moderately large prime $q$, we restrict the calculation targets to only \u0026ldquo;pairs of $(a, b)$ where the algebraic side value is always divisible by $q$\u0026rdquo;. Since $(a, b)$ satisfying this condition form a \u0026ldquo;lattice\u0026rdquo; on the plane, the jump width of calculated addresses becomes constant, fitting perfectly into the CPU\u0026rsquo;s L1/L2 cache. With the introduction of this lattice sieving, the calculation speed of GNFS improved dramatically.\n5. Phase 3: Filtering 1 2 3 4 5 6 7 class Filter { public: void reduce_matrix(std::vector\u0026lt;Relation\u0026gt;\u0026amp; relations) { // 1. Singleton removal (removing relations with primes that appear only once) // 2. Clique merging (merging relations to make a sparse matrix denser) } }; Hundreds of millions of relations collected over months by computers around the world in Phase 2. However, if this is thrown as-is into the next \u0026ldquo;step of solving simultaneous equations (matrix calculation)\u0026rdquo;, the supercomputer\u0026rsquo;s memory will blow up.\nThus, an ultra-compression process of the matrix called Filtering is performed.\nSingleton removal Suppose a huge prime $p$ appeared \u0026ldquo;only once\u0026rdquo; in hundreds of millions of relations. Since our goal is to \u0026ldquo;make the exponents of all primes even (multiples of 2)\u0026rdquo;, a prime that appears only once can never be made even. Therefore, relations containing that prime are immediately removed (purged) as \u0026ldquo;useless garbage\u0026rdquo;. As this happens in a chain reaction, the data that had hundreds of millions of rows is rapidly reduced.\nClique merging Furthermore, by multiplying (adding) relations that share specific primes together, it reduces the number of rows while compressing the sparse (empty) matrix into a denser state (using a method similar to clique search in graph theory).\nWith this optimization, the massive sparse matrix is dramatically compressed to a computable size.\n6. Phase 4: Linear Algebra over GF(2) (Block Wiedemann Method) 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) { // Iterates matrix-vector multiplication of a sparse matrix, // and finds multiple solution vectors (kernels) where M * x = 0 mod 2. } }; Finally, the core of the puzzle. We multiply the collected relations to find the \u0026ldquo;combination where the exponents of all prime factors become even\u0026rdquo;.\nMathematically, this means using a huge matrix $M$ whose elements are the \u0026ldquo;even/odd (i.e., 0 or 1)\u0026rdquo; of the exponent of each prime, and a vector $x$ representing which relations to use, and finding the solution vector $x$ (nullspace/kernel) such that: $M \\cdot x \\equiv 0 \\pmod 2$\nWe must solve a system of simultaneous equations for a matrix of an enormous size, millions of rows by millions of columns. With standard Gaussian elimination, the computational complexity would be $O(N^3)$, and the calculation wouldn\u0026rsquo;t finish until the end of the universe.\nThus, the \u0026ldquo;Block Wiedemann method\u0026rdquo; is adopted in state-of-the-art implementations. This is a type of Krylov subspace method that leverages the fact that the matrix $M$ is \u0026ldquo;extremely sparse (mostly 0s)\u0026rdquo; to derive a solution by iteratively performing matrix-vector multiplications. Unlike the older Block Lanczos method, the Block Wiedemann method can completely divide the computational process across multiple clusters, making it overwhelmingly powerful for parallel computing in modern distributed cloud computing and supercomputers.\n7. Phase 5: Algebraic Square Root and Cryptographic Collapse 1 2 3 4 5 6 7 8 9 10 11 12 13 class AlgebraicSquareRoot { public: void compute_and_factor(...) { // 1. Compute the rational side square root V cpp_int V = 1; // 2. Compute the algebraic side square root gamma cpp_int Y = 1; // ... cpp_int factor = gcd(V - Y, N); // GCD(X-Y, N) } }; Through the matrix calculation in Phase 4, we obtained a \u0026ldquo;set of relations $S$ whose product yields even powers for all prime factors\u0026rdquo;. With this, we can construct a \u0026ldquo;square\u0026rdquo; in both the rational side and the algebraic side worlds.\nFor the rational side, it\u0026rsquo;s just integer multiplication, so computing the square root $V$ is easy. $$V^2 = \\prod_{S} (a - bm)$$ However, the real hell lies on the \u0026ldquo;algebraic side\u0026rdquo;. In the algebraic field world $\\mathbb{Z}[\\alpha]$, since the uniqueness of prime factorization does not hold, calculations have been performed using ideals. What was guaranteed by the matrix calculation is only that it becomes a \u0026ldquo;square of an ideal\u0026rdquo;, and it is not guaranteed that it becomes a \u0026ldquo;square of an element ($\\gamma^2$)\u0026rdquo;.\nHere stands a formidable wall in algebraic number theory: the \u0026ldquo;obstruction of the ideal class group\u0026rdquo; and the \u0026ldquo;obstruction of the unit group\u0026rdquo;. In GNFS, we use the magic of \u0026ldquo;Quadratic Characters\u0026rdquo; to break through this wall. Columns of quadratic residues (Legendre symbols) for several tens of special prime ideals are secretly added in advance to the matrix in Phase 4. As a result, the found set $S$ ignores the obstructions with an overwhelming probability and successfully forms the \u0026ldquo;true square of an element $\\gamma^2$\u0026rdquo;.\nThe work of finding $\\gamma$ (algebraic square root) is computed using highly complex algorithms such as Montgomery\u0026rsquo;s method.\nAnd finally, we warp the algebraic side square root $\\gamma$ into the real world (by substituting $m$ for $x$) via the ring homomorphism $\\phi$, yielding $Y$. If we simply set the rational side $V$ as $X$, the absolute equation we have been pursuing is finally complete.\n$$X^2 \\equiv Y^2 \\pmod N$$\nAll that is left is to compute $\\gcd(X-Y, N)$. Running through the 0.001-second process, the moment a non-trivial factor is printed on the screen, the proudly impregnable RSA cryptography completely collapses.\nConclusion GNFS is not just a programming technique. It is a crystal of human intellect that has wrestled down the \u0026ldquo;depths of pure mathematics\u0026rdquo; like abstract algebra, ring theory, and ideal class groups using \u0026ldquo;extreme engineering\u0026rdquo; like supercomputer distributed architectures and cache optimizations.\nThe chat messages and credit card information we casually transmit are protected upon such astronomical mathematical defense and offense.\nThrough this C++ framework, I hope you have felt the \u0026ldquo;romance of mathematics and computers\u0026rdquo; behind state-of-the-art cryptanalysis algorithms.\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/en/p/gnfs-cpp-implementation/","title":"[Complete Anatomy] Understanding the Strongest Cryptanalysis Algorithm \"GNFS\" by Implementing it in C++"},{"content":"The True Mathematical Structure of the General Number Field Sieve (GNFS) The ultimate goal of GNFS is to find $X^2 \\equiv Y^2 \\pmod N$. To achieve this, mathematicians built a bridge between the \u0026ldquo;world of real integers\u0026rdquo; and the \u0026ldquo;world of algebraic number fields\u0026rdquo;. That bridge is the \u0026ldquo;homomorphism\u0026rdquo;.\nStage 1: The \u0026ldquo;Homomorphism\u0026rdquo; Connecting Worlds 1. Polynomial Selection and Root Definition For a massive composite number $N$, select an integer $m$ and a polynomial $f(x)$ such that $f(m) \\equiv 0 \\pmod N$. (Example: Expand $N$ in base $m$ and create $f(x)$ from its coefficients. Here, assume $f(x)$ is irreducible (cannot be factored further) over the field of rational numbers $\\mathbb{Q}$).\nNext, let one of the \u0026ldquo;complex roots\u0026rdquo; of the equation $f(x) = 0$ be $\\alpha$. Naturally, $f(\\alpha) = 0$. $\\alpha$ is not an integer but a complex number (an algebraic number) that may involve square roots or imaginary numbers.\n2. Construction of Rings and Homomorphisms Now, prepare two mathematical \u0026ldquo;rings\u0026rdquo; (worlds where addition and multiplication are defined).\nWorld A: $\\mathbb{Z}[\\alpha]$ (Ring of algebraic integers containing $\\alpha$) A world of numbers represented in the form $a + b\\alpha + c\\alpha^2 + \\dots$. World B: $\\mathbb{Z}/N\\mathbb{Z}$ (Ring of residues modulo $N$) A modulo arithmetic world consisting only of integers from $0$ to $N-1$. Here, we define a mapping $\\phi$ from World A to World B as follows: $$\\phi : \\mathbb{Z}[\\alpha] \\to \\mathbb{Z}/N\\mathbb{Z}$$ $$\\phi(\\alpha) = m \\pmod N$$\nThis mapping $\\phi$ is a magical operation that completely replaces the variable $\\alpha$ in World A with the integer $m$ in World B. This $\\phi$ possesses an extremely powerful property known as a \u0026ldquo;Ring Homomorphism\u0026rdquo;. A homomorphism is the property of \u0026ldquo;warping to another world without breaking the structure of addition and multiplication\u0026rdquo;. In other words, the following equations hold:\n$\\phi(X \\times Y) = \\phi(X) \\times \\phi(Y)$ $\\phi(X^2) = \\phi(X)^2$ What does this mean? If we can create a \u0026ldquo;square ($\\gamma^2$)\u0026rdquo; of some complex element $\\gamma$ in \u0026ldquo;World A (the world of $\\alpha$)\u0026rdquo;, warping it to \u0026ldquo;World B (the modulo world)\u0026rdquo; via $\\phi$ will ** perfectly preserve the square form $\\phi(\\gamma)^2$**.\nStage 2: The Collapse of Prime Factorization and the Birth of the \u0026ldquo;Ideal\u0026rdquo; We want to collect many appropriate elements $(a - b\\alpha)$ in World A ($\\mathbb{Z}[\\alpha]$) and multiply them together to create a \u0026ldquo;perfect square (square element)\u0026rdquo;. Normally, we could simply \u0026ldquo;prime factorize\u0026rdquo; each collected $(a - b\\alpha)$ and combine them (solving via matrices) so that all prime exponents become even, thus creating a square.\nHowever, here a devastating wall of algebra stands in our way. In algebraic number fields like $\\mathbb{Z}[\\alpha]$, the \u0026ldquo;uniqueness of prime factorization (any number can be uniquely expressed as a product of primes in exactly one way)\u0026rdquo;, which we learn in middle school, collapses.\n(Example: In a certain algebraic number field, $6 = 2 \\times 3$, but at the same time $6 = (1+\\sqrt{-5}) \\times (1-\\sqrt{-5})$, making it impossible to know which are the true primes.)\nIf prime factorization is not uniquely determined, the puzzle (sieve method) of \u0026ldquo;counting the number of primes to make them even\u0026rdquo; becomes fundamentally impossible to execute.\nThe Salvation by Kummer and Dedekind: The \u0026ldquo;Ideal\u0026rdquo; What saved us from this collapse was the concept of the \u0026ldquo;Ideal (ideal number)\u0026rdquo; created by 19th-century mathematicians. By considering not the elements themselves but the \u0026ldquo;set of multiples (ideals)\u0026rdquo; generated by those elements, they made prime factorization possible again.\nIn the ring of integers of an algebraic number field $\\mathcal{O}_K$ (a more complete ring containing $\\mathbb{Z}[\\alpha]$), even if elements cannot be uniquely prime-factorized, it is proven that \u0026ldquo;an ideal can always be uniquely prime-factorized into a product of \u0026lsquo;prime ideals ($\\mathfrak{p}$)\u0026rsquo; in exactly one way\u0026rdquo;.\nTherefore, in GNFS, instead of factorizing the element $(a - b\\alpha)$ itself, we perform prime ideal factorization on the principal ideal $\\langle a - b\\alpha \\rangle$ that it generates.\nStage 3: Norms and the Two Sieves So, how do we know which prime ideals the ideal $\\langle a - b\\alpha \\rangle$ factors into? Here, we use a function called the \u0026ldquo;Norm\u0026rdquo;. The norm is a function that converts complex elements of an algebraic number field into \u0026ldquo;ordinary real integers $\\mathbb{Z}$\u0026rdquo;.\nThe norm of the element $(a - b\\alpha)$ can be calculated by a simple polynomial calculation $b^d f(a/b)$ (where $d$ is the degree of $f(x)$).\nDue to algebraic theorems, it is known that \u0026ldquo;if the norm of a certain ideal can be completely factored into small primes (is smooth), then the original ideal can also be completely factored into small prime ideals.\u0026rdquo;\nThus, GNFS simultaneously calculates the following two values for a massive number of integer pairs $(a, b)$ and collects only the pairs where both values are \u0026ldquo;smooth numbers\u0026rdquo;.\nRational Sieve: $a - bm$ (Values in the real world) Algebraic Sieve: $b^d f(a/b)$ (Norm in the algebraic number field world) By collecting tens of millions of pairs $(a, b)$ where both are smooth, and solving the prime factorization data of ideals (how many prime ideals are included) as a giant matrix (linear algebra over GF(2)), we find a set $S$ of pairs such that \u0026ldquo;when multiplied together, the exponents of all prime ideals become even\u0026rdquo;.\nStage 4: The Two Confronting \u0026ldquo;Obstructions\u0026rdquo; and the Ideal Class Group Through matrix calculations, we found that multiplying all the ideals of $(a - b\\alpha)$ belonging to set $S$ results in the square of a certain ideal $I$. $$\\prod_{S} \\langle a - b\\alpha \\rangle = I^2$$ However, it doesn\u0026rsquo;t end here. The deepest and most difficult mathematical wall in GNFS lies here.\nWhat we ultimately want is not the \u0026ldquo;square of an ideal\u0026rdquo;, but the \u0026ldquo;square of an element ($\\gamma^2$)\u0026rdquo; to plug into the mapping $\\phi$. Just because the ideal is squared doesn\u0026rsquo;t necessarily mean the element itself is squared. There exist two formidable mathematical obstructions here.\nObstruction 1: The Wall of the Ideal Class Group The ideal $I$ is not always an \u0026ldquo;ideal generated by a single element (principal ideal)\u0026rdquo;. It is impossible to extract a concrete element $\\gamma$ from an ideal that is not principal.\nHere, the concept of the \u0026ldquo;Ideal Class Group ($Cl_K$)\u0026rdquo; comes into play. The ideal class group is a group that measures \u0026ldquo;how many non-principal ideals exist in that algebraic number field (how much the uniqueness of prime factorization is broken)\u0026rdquo;. Even if $\\prod \\langle a - b\\alpha \\rangle$ becomes $I^2$, if $I$ is not the identity element (principal ideal) in the ideal class group, it cannot be pulled back to the square of an element.\nObstruction 2: The Wall of the Unit Group Suppose we get lucky and $I$ is a principal ideal $\\langle \\gamma \\rangle$. Then, $\\prod \\langle a - b\\alpha \\rangle = \\langle \\gamma^2 \\rangle$. You might think, \u0026ldquo;Great, the element is squared too!\u0026rdquo;, but that is a huge mistake.\nThe fact that ideals (sets of multiples) are equal does not mean the elements are completely equal. A deviation by a \u0026ldquo;Unit (a number whose reciprocal is also an integer, like 1 or -1)\u0026rdquo; inevitably occurs. In other words, the actual equality of the elements is as follows: $$\\prod_{S} (a - b\\alpha) = u \\cdot \\gamma^2$$ ($u$ is an element of the unit group $U_K$)\nUnless this unit $u$ itself is the square of something (a square element), the left side can absolutely never become a \u0026ldquo;perfect square of an element\u0026rdquo;.\nStage 5: Adleman\u0026rsquo;s Magic \u0026ldquo;Quadratic Characters\u0026rdquo; The obstruction of the ideal class group and the obstruction of the unit group. How do we overcome these two? Here, a genius method called \u0026ldquo;Quadratic Characters\u0026rdquo;, introduced by cryptographer Leonard Adleman (the \u0026ldquo;A\u0026rdquo; in RSA) and others, makes its appearance.\nTo determine \u0026ldquo;whether a certain element is a perfect square in the algebraic number field\u0026rdquo;, we use an algebraic number field version of the Legendre symbol (quadratic residue). To the giant matrix from earlier (the puzzle to make the count of prime ideals even), we secretly append dozens of additional conditions (columns) stating that \u0026ldquo;the quadratic characters for some special prime ideals $\\mathfrak{q}$ also all become $1$ (even)\u0026rdquo;.\nWhen we find a set $S$ that satisfies even these additional conditions through matrix calculations, deep theorems of algebraic number theory guarantee that \u0026ldquo;both the obstruction of the ideal class group and the obstruction of the unit group will naturally vanish with overwhelming probability.\u0026rdquo;\nWith this, we finally obtain the true equation. $$\\prod_{S} (a - b\\alpha) = \\gamma^2$$ Final Stage: The Convergence of Worlds and the Fall of Encryption Finally, all the pieces of the puzzle are in place.\n[Element in the Algebraic Number Field World (World A)] $\\gamma^2 = \\prod (a - b\\alpha)$ (We find $\\gamma$ from this using a square root algorithm)\n[Element in the Real World (World of Rational Numbers)] $V^2 = \\prod (a - bm)$ (Since this is just ordinary integer multiplication, the square root $V$ can be found normally)\nNow, it\u0026rsquo;s time for the magical bridge we built at the very beginning, the homomorphism $\\phi$, to take the stage. We warp the element $\\gamma$ from World A to World B (the world modulo $N$) using $\\phi$ (the mapping that substitutes $m$ for $\\alpha$). $$Y = \\phi(\\gamma) \\pmod N$$ Meanwhile, we take the $V$ created in the real world directly to the modulo world and call it $X$. $$X = V \\pmod N$$ Due to the homomorphism\u0026rsquo;s property of \u0026ldquo;preserving structure\u0026rdquo;, the square relationship that held in World A is perfectly preserved in World B (the world modulo $N$) as well. Furthermore, because the original pairs $(a, b)$ were correspondingly created in the forms $a - b\\alpha$ and $a - bm$, these $X$ and $Y$ collide in the world modulo $N$ to produce the following absolute equation:\n$$X^2 \\equiv Y^2 \\pmod N$$\nAll that is left is to pray that these $X$ and $Y$ are not trivial solutions ($X \\equiv \\pm Y$) and calculate: $\\gcd(X - Y, N)$\nIf it is a non-trivial solution, the Euclidean algorithm will race through in 0.001 seconds, and the secret primes $p$ and $q$, which are the heart of RSA encryption, will be printed on the output screen.\nThis is the complete form of the \u0026ldquo;General Number Field Sieve (GNFS)\u0026rdquo;, gathering the essence of modern mathematics.\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/en/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":"The True Mathematical Structure of the General Number Field Sieve (GNFS)"},{"content":"What is the \u0026ldquo;General Number Field Sieve (GNFS)\u0026rdquo;, Humanity\u0026rsquo;s Strongest Math that Breaks Internet Cryptography? The internet we use every day. LINE messages, YouTube, Amazon shopping—all communications are protected by \u0026ldquo;cryptography.\u0026rdquo; Currently, the most widely used cryptography in the world is \u0026ldquo;RSA cryptography.\u0026rdquo;\nThe cornerstone of RSA cryptography\u0026rsquo;s defense is very simple. It utilizes the mathematical property that \u0026ldquo;factoring a gigantic number into primes cannot be solved even by computers.\u0026rdquo; For example, for \u0026ldquo;15\u0026rdquo;, we immediately know it\u0026rsquo;s \u0026ldquo;3 × 5\u0026rdquo;, but the moment this becomes a \u0026ldquo;270-digit number\u0026rdquo;, even if we bundle all the supercomputers in the world, it would take hundreds of millions of years to solve.\nHowever, mathematicians do not stay silent either. To break this ironclad cryptography, humanity created a magical algorithm (calculation procedure) called the \u0026ldquo;General Number Field Sieve (GNFS)\u0026rdquo;.\nIn this article, without using any specialized jargon, and only with knowledge of junior high school math (prime factorization, algebraic expressions, greatest common divisor), we will completely explain the mechanism step-by-step by which this \u0026ldquo;humanity\u0026rsquo;s strongest algorithm\u0026rdquo; breaks cryptography!\nChapter 1: The Goal of Decryption is a \u0026ldquo;Junior High School Formula\u0026rdquo; The ultimate special move to confront gigantic prime factorizations. It\u0026rsquo;s this formula learned in junior high school.\n$X^2 - Y^2 = (X + Y)(X - Y)$\nYou might think, \u0026ldquo;Eh, can such a basic formula break cryptography?\u0026rdquo; However, this is the master key that unlocks everything.\nThe ultimate goal for breaking the cryptography is to find, for a gigantic number $N$, \u0026ldquo;Numbers ($X$ and $Y$) where the remainder of $X^2$ and $Y^2$ divided by $N$ are the same.\u0026rdquo;\nWhy does \u0026ldquo;same remainder\u0026rdquo; solve the cryptography? Suppose two numbers, $X^2$ and $Y^2$, have the \u0026ldquo;same remainder when divided by $N$.\u0026rdquo; Having the same remainder means there is a rule that the subtracted \u0026ldquo;$X^2 - Y^2$\u0026rdquo; will always be perfectly divisible by $N$ (it becomes a multiple of $N$).\nHere, let\u0026rsquo;s say the gigantic number $N$ used for cryptography is made of the multiplication of two secret prime numbers ($p$ and $q$) ($N = p \\times q$).\nFactoring $X^2 - Y^2$ results in $(X - Y)(X + Y)$. The fact that this is a multiple of $N$ means that somewhere in this multiplication, the secret primes $p$ and $q$ are hidden.\nHere a miracle occurs. There is mathematically a 50% (1/2) probability that the two prime numbers $p$ and $q$ will naturally separate into different rooms, with \u0026quot;$p$ going to the $(X - Y)$ room\u0026quot; and \u0026quot;$q$ going to the $(X + Y)$ room\u0026quot;.\nWith only the prime number $p$ in the $(X - Y)$ room, let\u0026rsquo;s calculate the \u0026ldquo;Greatest Common Divisor (the largest common part)\u0026rdquo; of $(X - Y)$ and $N$.\nContents of $(X - Y)$ = $p \\times$ some number Contents of $N$ = $p \\times q$ The only common part is \u0026quot;$p$\u0026quot;! In other words, the moment you calculate the greatest common divisor, the hidden prime number $p$ pops out, and the cryptography is completely decrypted. (*The greatest common divisor can be calculated instantly even on a smartphone using the \u0026ldquo;Euclidean Algorithm\u0026rdquo;.)\n[A Little Column: Why squared? Why not cubed or doubled?]\nIf it\u0026rsquo;s \u0026ldquo;$2X - 2Y$\u0026rdquo;, it becomes $2(X - Y)$, and since there\u0026rsquo;s only one room, you can\u0026rsquo;t separate the primes. If it\u0026rsquo;s \u0026ldquo;$X^3 - Y^3$\u0026rdquo;, the size of the rooms becomes unbalanced, making the calculations unnecessarily heavy. To separate the primes into two, \u0026ldquo;squaring\u0026rdquo;, which beautifully divides into two rooms, is the most cost-effective.\nChapter 2: How to Find X and Y? The \u0026ldquo;Prime Card Collection Puzzle\u0026rdquo; The goal is clear. However, if you blindly search for \u0026ldquo;$X^2$ and $Y^2$ that yield the same remainder\u0026rdquo;, you won\u0026rsquo;t find it until the end of the universe. Therefore, mathematicians came up with a genius method called the \u0026ldquo;Prime Card Collection Puzzle\u0026rdquo;.\nStep 1: Collect Only Gold Dust (Smooth Numbers) with a Sieve First, prepare an appropriate number $Z$, square it, and calculate the remainder $W$ when divided by $N$. (The world of remainders where $Z^2 = W$)\nFactorize the resulting remainder $W$. Here, only when a \u0026quot;$W$ made only of small prime numbers like 2, 3, 5, 7\u0026quot; appears, you keep that equation as a \u0026ldquo;winning card\u0026rdquo;, and throw it away if large primes are mixed in. It\u0026rsquo;s a task like discarding large stones with a sieve in a river and collecting only gold dust.\nStep 2: The Puzzle of Making Everything an \u0026ldquo;Even Number\u0026rdquo; For example, suppose the following three gold dust cards were collected.\nCard A: $Z_1^2 = 2^3 \\times 3^1$ Card B: $Z_2^2 = 2^1 \\times 5^1$ Card C: $Z_3^2 = 3^1 \\times 5^1$ Let\u0026rsquo;s multiply all these together. The right side becomes $(2^3 \\times 3^1) \\times (2^1 \\times 5^1) \\times (3^1 \\times 5^1)$, and when summarized and organized, it becomes \u0026quot;$2^4 \\times 3^2 \\times 5^2$\u0026quot;.\nAmazingly, the number of prime numbers became \u0026ldquo;4, 2, 2\u0026rdquo;, which are all even numbers! Having all even numbers means that if you halve the count of everything, it becomes the \u0026ldquo;square of something.\u0026rdquo; In other words, $(2^2 \\times 3^1 \\times 5^1)^2 = (60)^2$.\nThe left side is $(Z_1 \\times Z_2 \\times Z_3)^2$, so with this, finally, $X = (Z_1 \\times Z_2 \\times Z_3)$ $Y = 60$ The long-awaited \u0026ldquo;$X^2 = Y^2$\u0026rdquo; pair is completed!\nFor computers, the puzzle of calculating whether the number of primes is \u0026ldquo;even or odd (0 or 1)\u0026rdquo; is something they are very good at, so with this method, they can find $X$ and $Y$ at high speed.\nChapter 3: The Wall of Despair That Stands in the Way Now any cryptography can be broken!\u0026hellip; Or so we thought, but a big problem arises. If the cryptography number $N$ is up to about \u0026ldquo;100 digits\u0026rdquo;, it can be solved with this method (called the Quadratic Sieve), but when $N$ becomes \u0026ldquo;200 digits or 300 digits\u0026rdquo;, the $W$ that appears during the calculation becomes too huge.\nWhen the numbers get too huge, \u0026ldquo;numbers made only of small prime numbers (gold dust)\u0026rdquo; completely stop appearing. It becomes harder than searching for a contact lens in a desert, and you can\u0026rsquo;t collect the cards to solve the puzzle at all.\nHere finally, humanity\u0026rsquo;s ultimate weapon, the \u0026ldquo;General Number Field Sieve (GNFS)\u0026rdquo;, makes its appearance.\nChapter 4: Humanity\u0026rsquo;s Strongest Idea, Creating \u0026ldquo;Two Worlds\u0026rdquo; The genius idea of GNFS is: \u0026ldquo;Calculating only in the real world makes the numbers huge. So, let\u0026rsquo;s create a \u0026lsquo;hidden world\u0026rsquo; using polynomials (algebraic expressions) and split the weight of the calculation into two.\u0026rdquo;\nThe Magic of Algebraic Expressions GNFS converts the gigantic number $N$ into an algebraic expression using a base number $m$. For example, if $N=100$, let $m=4$, so $100 = 4^3 + 2(4^2) + 4$. This is turned into the expression (the hidden world) $f(x) = x^3 + 2x^2 + x$ using the letter $x$.\nThe interesting thing about this expression is that it has the property: \u0026ldquo;If you substitute $m$ (4 in the example above) for the letter $x$, you can always warp back to the real number $N$.\u0026rdquo;\nSearching for Gold Dust in Two Worlds Simultaneously GNFS creates many pairs of random integers $(a, b)$ and performs the following two calculations simultaneously.\nReal World: $a - b \\times m$ World of Algebraic Expressions: The value calculated by the rules of algebraic expressions for $a - b \\times x$ By splitting the problem into two worlds, the size of the numbers handled becomes dramatically smaller (lighter). It\u0026rsquo;s the image of splitting a huge rock into two to make them easy-to-handle stones.\nThen, you sift and collect only the miracle pairs $(a, b)$ where \u0026ldquo;Both in the real world and in the world of algebraic expressions, they are \u0026lsquo;made only of small prime numbers (gold dust)\u0026rsquo;\u0026rdquo;. This is the origin of the name \u0026ldquo;Number Field Sieve.\u0026rdquo;\nThe Moment the Cryptography is Finally Broken Once tens of millions of \u0026ldquo;gold dust cards\u0026rdquo; are collected from both worlds, using the giant matrix calculations of supercomputers, you find the \u0026ldquo;combination where the number of prime numbers all become even\u0026rdquo;, just as we did in Chapter 2.\nOnce the combination is found,\nLet the squared number made in the real world be $X^2$ Let the squared expression made in the world of algebraic expressions be $Y(x)^2$ Finally, substitute $m$ into $x$ of $Y(x)$ in the world of algebraic expressions to warp to the real world and merge them. Then, just like mathematical magic, a state where \u0026ldquo;the remainders of $X^2$ and $Y^2$ are the same\u0026rdquo; is strictly completed!\nAfter that, just like in Chapter 1, if you calculate the greatest common divisor of $X - Y$ and $N$, the impregnable RSA cryptography collapses with a crash, and the secret primes reveal themselves.\nConclusion: Mathematics Never Ends You might have thought, \u0026ldquo;Alright, with GNFS, any cryptography can be broken!\u0026rdquo; However, RSA cryptography is not giving up either. What is currently used on the internet is a monstrously huge number called \u0026ldquo;RSA-2048 (about 617 digits)\u0026rdquo;.\nEven though GNFS is humanity\u0026rsquo;s strongest algorithm, it is said that even to solve 270 digits (RSA-270), it would take thousands or tens of thousands of years even if all the computers in the world were connected. For now, our LINE and bank data are safe.\nBut what if a \u0026ldquo;magic that instantly finds $X$ and $Y$ for any gigantic number\u0026rdquo; appears? Actually, the closest thing to that is the \u0026ldquo;Quantum Computer (Shor\u0026rsquo;s Algorithm)\u0026rdquo; currently under development. It has been mathematically proven that by using the wave properties of quantum mechanics, one can ignore the tedious card collecting puzzle and draw the answer in one shot.\nThe endless battle of wits between the people who make cryptography (defense) and the people who make algorithms to break it (attack). When you learn that the \u0026ldquo;prime factorization\u0026rdquo; and \u0026ldquo;algebraic expressions\u0026rdquo; learned in junior high school are actually weapons fiercely fighting on the front lines of global security, doesn\u0026rsquo;t math class seem just a little bit more interesting?\nThe person to discover the strongest algorithm of the future might just be you reading this article!\n(Note: This article conceptualizes the mathematical charm of cryptography decryption for junior high school students. Actual GNFS is strictly calculated using advanced university mathematics such as ideal class groups of algebraic number fields and homomorphisms.)\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/en/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":"What is the \"General Number Field Sieve (GNFS)\", Humanity's Strongest Math that Breaks Internet Cryptography?"},{"content":"The Pros and Cons of Anti-Vaccination - The Futures of 5,000 People Killed by \u0026ldquo;Good-Intentioned Anxiety\u0026rdquo; and the Epidemiological Lessons We Must Learn The \u0026ldquo;Illusion of Causality\u0026rdquo; Highlighted by the COVID-19 Pandemic Since 2021, the vaccination against the novel coronavirus has progressed rapidly in Japan. It was a public health project rare in human history, with nearly 80% of the public getting vaccinated in a short period. During this process, we witnessed countless \u0026ldquo;screams\u0026rdquo; through social media and the media. \u0026ldquo;My family member passed away a few days after getting the vaccine,\u0026rdquo; \u0026ldquo;I\u0026rsquo;ve been experiencing unexplained poor health since the vaccination\u0026rdquo; — these complaints are earnest, and for those involved, their suffering is an undeniable truth.\nHowever, here exists a cold but extremely important \u0026ldquo;trap\u0026rdquo; in epidemiology. Considering the population size of Japan, whether people get vaccinated or not, about 3,000 to 4,000 people die every day from various causes (illness, accidents, old age). If the vast majority of the public gets vaccinated all at once, probabilistically, a certain number of people will inevitably \u0026ldquo;die the day after vaccination (from causes unrelated to the vaccine).\u0026rdquo; In technical terms, this is called \u0026ldquo;Coincidence\u0026rdquo;.\nHumans are equipped with a cognitive bias called the \u0026ldquo;Post hoc ergo propter hoc\u0026rdquo; (after this, therefore because of this) fallacy. If \u0026ldquo;B (death) occurs after A (vaccination),\u0026rdquo; we intuitively connect that \u0026ldquo;A is the cause of B.\u0026rdquo; During the COVID-19 pandemic, this cognitive bias was amplified and spread by the social media amplifier, creating a demographic that established the image of \u0026ldquo;vaccine = dangerous\u0026rdquo; without waiting for scientific verification.\nMany public health experts watched this spectacle with a sense of déjà vu. This is because Japan is the only developed country that, just a few years ago, voluntarily relinquished the means to prevent a preventable disease due to this \u0026ldquo;anxiety without science.\u0026rdquo; That is the issue of the \u0026ldquo;Cervical Cancer Vaccine (HPV Vaccine)\u0026rdquo;.\nWhat Happened in Japan in 2013? Let\u0026rsquo;s turn the clock back a little. Cervical cancer is a disease that affects about 11,000 women and kills about 2,900 people a year. It is also called the \u0026ldquo;Mother Killer\u0026rdquo; because it strikes women in their 20s to 40s, the prime time for child-rearing and work. The cause is infection with the human papillomavirus (HPV), a common virus that 80% of women who have had sexual intercourse will be infected with at least once in their lives. The HPV vaccine, which prevents this viral infection, was introduced worldwide as an \u0026ldquo;epoch-making vaccine that can prevent cancer,\u0026rdquo; and in Japan, it became a routine vaccination (strongly recommended by the state and available free of charge) in April 2013.\nHowever, the situation immediately took a dark turn. Symptoms such as general body pain, movement disorders, and memory impairment were reported by some of the vaccinated girls, and the media widely reported this daily as \u0026ldquo;suspected adverse reactions to the vaccine.\u0026rdquo; Images of girls having convulsions had a strong impact on viewers, and public opinion quickly tilted toward the \u0026ldquo;vaccine danger theory.\u0026rdquo;\nIn response, the Ministry of Health, Labour and Welfare decided in June 2013, just two months after the start of routine vaccinations, to \u0026ldquo;withhold proactive recommendation.\u0026rdquo; This was neither a \u0026ldquo;prohibition\u0026rdquo; nor a \u0026ldquo;cancellation,\u0026rdquo; but a highly ambiguous political decision to \u0026ldquo;keep the framework of routine vaccination but stop sending individual notification letters from the government.\u0026rdquo; However, this was conveyed to the public as a message that \u0026ldquo;the government admitted it was dangerous and stopped it.\u0026rdquo; As a result, the vaccination rate, which had exceeded 70%, plummeted to less than 1% in an instant.\nThis marks the beginning of the \u0026ldquo;Lost 8 Years (Vaccine Gap)\u0026rdquo; in Japan.\nThe \u0026ldquo;Truth\u0026rdquo; Exposed by the Nagoya Study Were the symptoms reported by the media really caused by the vaccine? There is a large-scale study that attempted to answer this question scientifically. It is commonly known as the \u0026ldquo;Nagoya Study\u0026rdquo;.\nIn 2015, the city of Nagoya conducted a large-scale questionnaire survey of about 70,000 young women. This included both those who had \u0026ldquo;received the vaccine\u0026rdquo; and those who \u0026ldquo;had not,\u0026rdquo; and asked them about the presence or absence of 24 symptoms, such as \u0026ldquo;irregular menstruation,\u0026rdquo; \u0026ldquo;joint pain,\u0026rdquo; and \u0026ldquo;decreased concentration.\u0026rdquo; If the vaccine were the cause, these symptoms should have clearly appeared more in the \u0026ldquo;vaccinated\u0026rdquo; group.\nThe results were shocking. There was no significant difference in the incidence of symptoms between the \u0026ldquo;vaccinated group\u0026rdquo; and the \u0026ldquo;unvaccinated group.\u0026rdquo;\nWhat does this mean? Adolescent girls are at a time when they are prone to physical ailments such as orthostatic dysregulation and chronic pain due to hormonal balance changes and circumstances unique to their growth period, regardless of whether they have been vaccinated or not. In other words, there were \u0026ldquo;girls who had not been vaccinated but had the same symptoms\u0026rdquo; at the same rate as the \u0026ldquo;girls who developed symptoms after getting the vaccine\u0026rdquo; reported by the media. However, the poor health of the unvaccinated girls was treated as \u0026ldquo;adolescent ailments,\u0026rdquo; while only the poor health of the vaccinated girls was highlighted as \u0026ldquo;vaccine damage.\u0026rdquo; The data showed that it is highly likely that this is the true identity of the phenomenon that caused a fuss as a \u0026ldquo;drug-induced disaster.\u0026rdquo;\nFurthermore, the involvement of the \u0026ldquo;Nocebo effect\u0026rdquo; has also been pointed out. The opposite of the \u0026ldquo;Placebo effect,\u0026rdquo; it is a phenomenon in which pain and poor health actually occur due to anxiety and fear when ingested with the belief that \u0026ldquo;this is bad for the body.\u0026rdquo; It cannot be denied that the daily negative reports may have affected the delicate minds and bodies of the girls.\nThe \u0026ldquo;Sin of Omission\u0026rdquo; Seen in Numbers \u0026ldquo;Stopping recommendation just in case.\u0026rdquo; At first glance, this decision seems like a \u0026ldquo;cautious and safe choice.\u0026rdquo; After all, it\u0026rsquo;s too late once something happens, so when in doubt, stop. However, in public health, \u0026ldquo;doing nothing (omission)\u0026rdquo; sometimes causes damage that far exceeds the risk of \u0026ldquo;doing something.\u0026rdquo;\nA research team at Osaka University published a cruel estimate regarding the impact of this withheld recommendation. They predict that the sharp drop in vaccination rates between 2013 and 2019 will result in an increase of approximately 25,000 future cases of cervical cancer that could have been prevented, and an increase in deaths of approximately 5,000 to 5,700.\nOver 5,000 deaths. This is a number comparable to a large-scale natural disaster. As a result of trying to avoid a risk whose causal relationship was scientifically uncertain, \u0026ldquo;anxiety about adverse reactions,\u0026rdquo; we burdened the women of the future with a certain and grave risk: \u0026ldquo;death from cancer.\u0026rdquo;\nIf we look around the world, the difference is obvious. In Australia, due to the spread of vaccination among men and women, cervical cancer is predicted to be \u0026ldquo;eradicated (become a rare cancer)\u0026rdquo; by around 2028. In the UK, there are reports that the incidence of cervical cancer in the vaccinated generation has dropped to almost zero. While the world moves towards a future that \u0026ldquo;overcomes cancer,\u0026rdquo; Japan alone has been left behind in a past where \u0026ldquo;cancer continues to increase.\u0026rdquo; In 2015, the World Health Organization (WHO) Global Advisory Committee on Vaccine Safety singled out the situation in Japan for criticism, stating that \u0026ldquo;policy decisions not based on scientific evidence are causing real harm (death from cancer).\u0026rdquo;\nThe Chaining of \u0026ldquo;Vaccine Hesitancy\u0026rdquo; Across the Ocean The tragedy of the HPV vaccine that occurred in Japan is by no means a \u0026ldquo;special circumstance unique to Japan.\u0026rdquo; Even now, there are reports from around the world showing that when \u0026ldquo;intuitive anxiety\u0026rdquo; and \u0026ldquo;ideology\u0026rdquo; are prioritized over science, infectious diseases will bare their fangs anytime, anywhere.\nA prominent example of this is the outbreak of \u0026ldquo;measles\u0026rdquo; in the United States.\nMeasles is a highly contagious virus, but it is a disease that can be almost completely prevented by vaccination. In the United States, it was once declared \u0026ldquo;eliminated\u0026rdquo; in 2000 through a thorough vaccination program. In other words, the endemic virus was considered to be gone from the country. However, in recent years, measles has begun to spread again.\nAccording to a BBC report (2024), US health authorities point out that the deeply rooted \u0026ldquo;Vaccine Hesitancy\u0026rdquo; in some communities is a hotbed for the spread of the infection. Vaccination rates are declining in areas where some groups claim to be \u0026ldquo;naturalists\u0026rdquo; for religious reasons, or where anti-vaccine ideology based on misinformation has permeated. When the virus is brought in from overseas, it causes explosive infections among those without immunity.\nMeasles is not just a disease that ends with a fever and rash. It causes serious complications such as pneumonia and encephalitis, and can be fatal even in developed countries. A disease that humanity once pooled its wisdom to \u0026ldquo;contain\u0026rdquo; is exploiting the vulnerability of people\u0026rsquo;s \u0026ldquo;doubts\u0026rdquo; to threaten the lives of children once again. The case of the United States warns us: \u0026ldquo;The breakwater of a high vaccination rate collapses in an instant if people\u0026rsquo;s trust is shaken.\u0026rdquo;\nThe Defeat of Media, Experts, and Ourselves Why do these situations keep repeating? Behind it lies the information asymmetry peculiar to modern society and our cognitive biases.\nIn the HPV vaccine issue in Japan, the media sensationalized \u0026ldquo;suspected adverse reactions to the vaccine.\u0026rdquo; The composition of \u0026ldquo;pitiful victims\u0026rdquo; versus \u0026ldquo;coldhearted government/pharmaceutical companies\u0026rdquo; was very powerful as a narrative and strongly shook the emotions of viewers. On the other hand, the scientific explanations of experts, such as \u0026ldquo;there is no statistically significant difference\u0026rdquo; or \u0026ldquo;the benefits outweigh the risks,\u0026rdquo; sounded dry and cold, and were completely powerless in the face of the torrent of emotions.\nIn the world of science, if there is an established theory supported by 99% of scientists and a dissenting opinion from 1%, they are not treated as \u0026ldquo;equivalent opinions.\u0026rdquo; However, the media, perhaps placing too much emphasis on \u0026ldquo;fairness\u0026rdquo; or seeking to attract attention, reported the data that would save tens of thousands of lives and the emotional appeal of a single victim\u0026rsquo;s damage as \u0026ldquo;equals\u0026rdquo; side-by-side. Politicians, too, fearing public backlash, prioritized reading the \u0026ldquo;mood of the room\u0026rdquo; over scientific evidence. As a result, proactive recommendation of the HPV vaccine was suspended in Japan for about nine years, producing many cancer victims who could have been prevented during that time.\nHistory Repeats Itself - The Intelligence to Resist the \u0026ldquo;Atmosphere\u0026rdquo; In 2022, proactive recommendation of the HPV vaccine was finally resumed in Japan. However, the lost time and lives cannot be returned. And now, just as measles is rebounding in the United States, history will repeat itself over and over if we let our guard down.\nIt is impossible to completely deny the anti-vaccine movement or having concerns about medical care. Being cautious about what you put into your body is a human defense instinct, and drug-induced disasters have actually occurred in the past. Monitoring and doubting power is important in a democracy.\nHowever, what the series of events—the COVID-19 vaccine, the HPV vaccine, and the measles outbreak in the US—confronts us with is the grim fact that \u0026ldquo;well-intentioned anxiety that ignores science\u0026rdquo; can claim more lives than the virus itself.\n\u0026ldquo;It might be dangerous, so let\u0026rsquo;s wait and see.\u0026rdquo; When we make that decision, have we factored in the \u0026ldquo;probability of dying from the disease while waiting and seeing\u0026rdquo;? \u0026ldquo;Natural things are best.\u0026rdquo; When we say that, haven\u0026rsquo;t we forgotten the history that \u0026ldquo;it is the viruses found in nature that have taken lives most mercilessly\u0026rdquo;?\nNew infectious diseases will continue to appear, and new vaccines will be developed. When that happens, will we again be confused by the phenomenon of \u0026ldquo;coincidence\u0026rdquo; and swayed by emotional instigation? Or will we be able to calmly decipher the data and weigh the risks against the benefits?\nIt is said that history repeats itself. However, the only thing that can stop it is our reason. We must look at statistically correct data and possess the intelligence to choose \u0026ldquo;facts\u0026rdquo; over the \u0026ldquo;atmosphere.\u0026rdquo; That is our responsibility living in the modern age.\nReferences / Data Sources Ministry of Health, Labour and Welfare: \u0026ldquo;Human Papillomavirus Infection ~ Cervical Cancer and the HPV Vaccine ~\u0026rdquo; National Cancer Center: Cancer Information Service \u0026ldquo;Cervical Cancer\u0026rdquo; Statistical Data BBC News (Japanese): \u0026ldquo;US CDC Calls for Vaccination Amid Measles Outbreak; Global Infections on the Rise\u0026rdquo; (2024) and related original articles Osaka University Research Team (Yagi A, et al. Lancet Public Health. 2020): Research on estimating excess morbidity and mortality due to the suspension of proactive recommendation for routine HPV vaccination 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/en/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":"The Pros and Cons of Anti-Vaccination"},{"content":"The Illusion and Reality of \u0026ldquo;Japanese First\u0026rdquo;: The Defense Mechanism Called \u0026ldquo;Coexistence\u0026rdquo; Facing Japan in 2026 Introduction: Why Does This Phrase Resonate Now? We now stand at an unprecedented turning point of an era. Prolonged inflation, sluggish real wage growth, and visibly advancing declining birthrates and aging population. Every time the price tags of products on supermarket shelves are rewritten, anxiety about the future casts a shadow over our hearts. In the midst of this sense of stagnation, a phrase is rapidly gaining support. It is \u0026ldquo;Japanese First\u0026rdquo; (Nihonjin First).\nThe desire to \u0026ldquo;first enrich the lives of our own citizens\u0026rdquo; and \u0026ldquo;protect Japanese culture and public safety as a top priority\u0026rdquo; is an extremely natural and compelling urge as a sovereign individual, and as a human being living in this country. However, between the \u0026ldquo;ideal\u0026rdquo; championed by this phrase and the \u0026ldquo;reality\u0026rdquo; shown by statistical data, there exists a large gap that we must face squarely.\nIn this article, putting aside emotional arguments and labeling, we will close in on the true nature of this issue based on objective data, historical transitions, and facts occurring in various parts of society.\nChapter 1: The Timeline and Social Background of \u0026ldquo;Japanese First\u0026rdquo; This phrase did not suddenly appear. It has been cultivated through a complex interplay of global trends and circumstances unique to Japan.\n1. 2016-2017: Import and Establishment of the Phrase In 2016, Donald Trump\u0026rsquo;s \u0026ldquo;America First\u0026rdquo; sent shockwaves around the world. Domestically in 2017, the \u0026ldquo;Tomin First no Kai\u0026rdquo; (Tokyoites First) led by Tokyo Governor Yuriko Koike attracted attention. At this point, it was largely a rhetorical device to clarify policy priorities, and exclusionary nuances were still limited.\n2. 2023-2024: Visualization of Anxiety The delayed economic recovery after the pandemic and inflation accompanying the rapid depreciation of the yen hit ordinary households directly. Around the same time, dissatisfaction based on fragmented information, such as \u0026ldquo;Support for foreigners is too generous\u0026rdquo; and \u0026ldquo;Japanese taxpayers\u0026rsquo; money is flowing to foreigners,\u0026rdquo; began to erupt on social media.\n3. 2025-2026: Fusion of Political Forces and Social Media In the 2025 national elections, forces officially using \u0026ldquo;Japanese First\u0026rdquo; as a slogan secured a certain number of seats. Social media algorithms, reacting to people\u0026rsquo;s anxieties, preferentially displayed extreme posts, accelerating the \u0026ldquo;echo chamber phenomenon\u0026rdquo; where only specific values are reinforced.\nThe latest public opinion poll conducted by various newspaper companies (late 2025) highlighted the reality that public opinion is split right down the middle regarding this slogan: 42% \u0026ldquo;Agree / somewhat agree\u0026rdquo; and 38% \u0026ldquo;Disagree / somewhat disagree\u0026rdquo;.\nChapter 2: The Truth of the Economy and Social Security — \u0026ldquo;Usurpers\u0026rdquo; or \u0026ldquo;Supporting Pillars\u0026rdquo;? One of the pillars of the logic supporting \u0026ldquo;Japanese First\u0026rdquo; is the image that \u0026ldquo;Japanese resources are being usurped by foreigners.\u0026rdquo; However, primary data from government agencies shows a reality exactly opposite to this intuition.\n1. Labor Force: The \u0026ldquo;Indispensable Blood\u0026rdquo; Maintaining the Japanese Economy According to the Ministry of Health, Labour and Welfare\u0026rsquo;s \u0026ldquo;Foreigner Employment Situation (as of the end of October 2024)\u0026rdquo;, the number of foreign workers was **2,048,675 . Current estimates in 2026 show it has already surpassed ** 2.3 million.\nIndustrial Sector Ratio/Increase Rate of Foreign Workers Reality and Role Construction Approx. 22.7% increase YoY Indispensable for infrastructure maintenance and repair of aging bridges and roads. Medical/Welfare Approx. 28.1% increase YoY Serving on the front lines of caregiving, supporting elderly Japanese. Manufacturing Accounts for approx. 26% of the total The backbone supporting the front lines of Japan\u0026rsquo;s export industry. Currently, they are filling the \u0026ldquo;void that Japanese can no longer secure,\u0026rdquo; rather than jobs that Japanese people want to do but cannot. If we exclude them in the name of \u0026ldquo;Japanese First,\u0026rdquo; our caregiving system would immediately collapse, and housing and food prices would jump further from several tens of percent to multiple times.\n2. Social Security: Rumors and Realities Surrounding Public Assistance The most widely spread narrative on social media is that \u0026ldquo;foreigners are receiving public assistance preferentially.\u0026rdquo; However, looking at the Ministry of Health, Labour and Welfare\u0026rsquo;s statistics, the proportion of households with foreign heads among all recipient households is about 2.8-2.9%. Over the past 10-plus years, this figure has remained almost flat.\nConversely, looking at the age composition of foreign residents, the majority are in the working generations in their 20s to 40s. They pay welfare pensions and health insurance premiums, playing the role of \u0026ldquo;providers\u0026rdquo; who support the pensions and medical expenses received by \u0026ldquo;elderly Japanese.\u0026rdquo; It is none other than them who are prolonging the life of Japan\u0026rsquo;s social security system by filling the void in the working generation left after the Japanese have departed.\nChapter 3: Public Safety and Social Media Bias — Logical Dismantling of \u0026ldquo;Foreign Crime\u0026rdquo; Anxiety about public safety most strongly stimulates the emotions of \u0026ldquo;Japanese First.\u0026rdquo; However, a detailed reading of the National Police Agency\u0026rsquo;s statistics and the Ministry of Justice\u0026rsquo;s \u0026ldquo;White Paper on Crime\u0026rdquo; reveals how much the image of the \u0026ldquo;vicious foreigner\u0026rdquo; on the internet is created by cognitive distortion.\n1. A Calm Comparison of \u0026ldquo;Total Numbers\u0026rdquo; and \u0026ldquo;Crime Rates\u0026rdquo; According to statistics published in 2024, foreigners account for about 5.5% of all arrested persons. The remaining roughly 95% are crimes committed by Japanese.\nComparing the number of arrested persons per 100,000 population (crime rate) reveals the essence even further.\nCategory Arrested Persons per 100,000 Population (Estimate) Japanese (All Ages) Approx. 142.7 people Foreign Residents (Settled/Residents) ** Approx. 120.0 people** It is a statistical fact that the crime rate of foreigners residing in Japan in the medium to long term is lower than the overall average for Japanese.\n2. The Magic of Bias Due to \u0026ldquo;Generation\u0026rdquo; Why does the image that \u0026ldquo;foreigners are scary\u0026rdquo; take precedence? The biggest factor is the difference in \u0026ldquo;age composition\u0026rdquo; in criminology.\nJapanese: About 30% are elderly people with extremely low crime rates. Because this demographic pushes down the \u0026ldquo;denominator,\u0026rdquo; the overall figure for Japan appears low. Foreigners: Because they come to Japan as a labor force, over 80% are in the \u0026ldquo;young to middle-aged group,\u0026rdquo; where crimes are statistically more likely to occur. If we compare the crime rates of Japanese and foreigners under the same condition of \u0026ldquo;those in their 20s,\u0026rdquo; no significant difference is seen between the two. In other words, it is not that \u0026ldquo;public safety has deteriorated because the number of foreigners has increased,\u0026rdquo; but merely that \u0026ldquo;the age group prone to committing crimes (the youth) exists in Japan in the form of foreigners.\u0026rdquo;\n3. The \u0026ldquo;Confirmation Bias\u0026rdquo; Created by Social Media Social media algorithms use our \u0026ldquo;anxiety\u0026rdquo; as fuel. When one foreign crime occurs, it is intensely spread in association with the \u0026ldquo;attribute (nationality).\u0026rdquo; Then, only the memory that \u0026ldquo;a foreigner caused an incident again\u0026rdquo; is reinforced in our brains.\nThis is called \u0026ldquo;confirmation bias.\u0026rdquo; Crimes by Japanese, which account for 95% of the total, are overlooked as \u0026ldquo;everyday life,\u0026rdquo; and the 5% of foreign crimes are swapped for the image of \u0026ldquo;all foreigners.\u0026rdquo;\nChapter 4: Inheritance of Culture — \u0026ldquo;Destroyers\u0026rdquo; or \u0026ldquo;Saviors\u0026rdquo;? The concern that \u0026ldquo;Japanese traditions and culture will be destroyed\u0026rdquo; also differs from the reality on the ground.\n1. The \u0026ldquo;Last Inheritors\u0026rdquo; of Traditional Crafts The number of workers manufacturing Japanese traditional crafts has plummeted from about 300,000 in the 1970s to about 50,000 today. Those saving this crisis of extinction are foreigners who came to Japan with deep respect for Japanese culture.\nSake Breweries and Sword Smiths: Foreigners have become apprentices in workshops where Japanese people have almost given up on inheritance. By incorporating an ability to broadcast overseas and new sensibilities, they are revitalizing cultures on the verge of closure into \u0026ldquo;sustainable industries.\u0026rdquo; 2. Maintenance of Local Communities In local municipalities that have become \u0026ldquo;cities at risk of disappearance\u0026rdquo; due to the disappearance of young people, technical interns and specified skilled foreign workers have become the bearers of local festivals and support the foundation of agriculture. Who is tilling the abandoned farmland left behind by departing Japanese and protecting events that have continued for hundreds of years? If we look at that reality, we understand that they are not the \u0026ldquo;destroyers\u0026rdquo; of culture, but the \u0026ldquo;last line of defense.\u0026rdquo;\nChapter 5: Concerns in the Educational Field and the Chain of \u0026ldquo;Bullying\u0026rdquo; The side effects of bringing the phrase \u0026ldquo;Japanese First\u0026rdquo; into the educational field are serious.\nThe Binary Opposition Dividing \u0026ldquo;Inside and Outside\u0026rdquo;: If children internalize the mistaken elitism that \u0026ldquo;Japanese are a privileged class that should be prioritized,\u0026rdquo; it easily leads to bullying that excludes \u0026ldquo;those who are different from us.\u0026rdquo; Ranking by Roots: Children who have Japanese nationality but look different or have different names are attacked as \u0026ldquo;not Japanese.\u0026rdquo; This is the collapse of education and an act of harming the very human resources who will carry the future of Japan. Experts in the field of education fear the risk that the exclusivity carried by the word \u0026ldquo;First\u0026rdquo; will diminish children\u0026rsquo;s ability for multicultural coexistence, resulting in Japan isolating itself from the world.\nChapter 6: Global Trends and the Wave of Populism This phenomenon is not unique to Japan. Even in Western countries, a phenomenon continues where demographics who could not receive the benefits of globalization drift towards populism championing \u0026ldquo;My Country First.\u0026rdquo;\nHowever, where Japan differs decisively from the West is that \u0026ldquo;its population is decreasing at the fastest speed in the world.\u0026rdquo; While other countries may have the option of \u0026ldquo;restriction,\u0026rdquo; in Japan there already exist countless social infrastructures that cannot be maintained without \u0026ldquo;cooperation.\u0026rdquo; Continuing to adhere to an emotional \u0026ldquo;First\u0026rdquo; means a logical \u0026ldquo;slow suicide.\u0026rdquo;\nIn Conclusion: What is True \u0026ldquo;Japanese First\u0026rdquo;? The desire embedded in the phrase \u0026ldquo;Japanese First\u0026rdquo; — the desire to \u0026ldquo;put the lives of the citizens first\u0026rdquo; — is in itself the most basic responsibility that a country\u0026rsquo;s government should have.\nHowever, the means to fulfill that desire must not be the \u0026ldquo;exclusion of our neighbors.\u0026rdquo; Because, as objective data shows, the convenience of life, public safety, traditional culture, and the social security system itself that we currently enjoy are already in a phase of \u0026ldquo;dependence and coexistence\u0026rdquo; that cannot be established without the presence of foreigners.\nIs not the true \u0026ldquo;Japanese First\u0026rdquo; to calmly put the following three points into practice?\nDiscussions Based on Facts: Do not be swayed by rumors or exaggerated information, but grasp reality based on primary statistics from government agencies. Establishment of Fair Rules: Require foreigners to comply with Japanese rules, while Japanese society treats them as fair partners. Internal Update: Do not view the acceptance of foreigners as \u0026ldquo;losing Japan,\u0026rdquo; but a paradigm shift recognizing that it is to \u0026ldquo;rebuild and maintain Japan\u0026rdquo; with their help. In 2026, we stand at a major crossroads. Will we continue to shout words of division and strangle ourselves? Or will we face reality and take a step towards a \u0026ldquo;sustainable Japan\u0026rdquo; where diverse people support each other?\nThe answer lies within the \u0026ldquo;intelligence\u0026rdquo; and \u0026ldquo;courage\u0026rdquo; in the heart of each individual.\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/en/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":"The Illusion and Reality of \"Japanese First\": The Defense Mechanism Called \"Coexistence\" Facing Japan in 2026"},{"content":"[Warning] Will you be charged after the Gemini free trial ends? A guide on how to cancel When you try out Google\u0026rsquo;s AI service \u0026ldquo;Gemini\u0026rdquo;, a 1-month free trial is offered at first. Many people probably register thinking, \u0026ldquo;If it\u0026rsquo;s free, I\u0026rsquo;ll just give it a try for now\u0026rdquo;, but there is something you need to be aware of here.\nWhat happens when the free trial ends? When the trial period ends, you will automatically be charged 2,900 yen per month. This is tied to a subscription called \u0026ldquo;Google One Membership\u0026rdquo;, and if you don\u0026rsquo;t do anything in particular, it\u0026rsquo;s set up to transition to a recurring charge.\nYou won\u0026rsquo;t be charged if you cancel, but\u0026hellip; Of course, if you cancel during the trial, you will not be charged. The official explanation page also explains \u0026ldquo;How to cancel your Google One membership\u0026rdquo;.\n👉 Cancel your Google One membership (Official)\nHowever, when I actually accessed it, I found myself in a situation where \u0026ldquo;for some reason, I can\u0026rsquo;t cancel.\u0026rdquo; I was confused, wondering \u0026ldquo;Wait, where do I stop it from?\u0026rdquo;\nHere is the correct way to cancel! After looking into it, the page where I was actually able to cancel was the following:\n👉 Google Account – Delete a service\nIf you select \u0026ldquo;Google One\u0026rdquo; from here and delete it, the cancellation is complete.\nSummary The Gemini free trial is 1 month After it ends, you are automatically charged 2,900 yen per month You may not be able to cancel from the official explanation page The place you can actually cancel is the \u0026ldquo;Delete a service\u0026rdquo; page If you think \u0026ldquo;It\u0026rsquo;s fine because it\u0026rsquo;s a free trial\u0026rdquo;, you might get charged without realizing it, so please be careful!\n👉 If you are reading this article, you might be struggling right now wondering \u0026ldquo;Where do I cancel from?\u0026rdquo;. Just check it out from the link above for now.\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/en/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":"What to do when you cannot cancel Google One (Gemini)"},{"content":"🎬 YouTube Stream Script (New Year\u0026rsquo;s Card Creation App Development - Part 1) Start of the Stream (Opening 2-3 minutes) Brief Greeting \u0026ldquo;Hello. Starting today, I\u0026rsquo;ll be streaming the step-by-step development of a New Year\u0026rsquo;s card creation app in C++.\u0026rdquo; \u0026ldquo;I don\u0026rsquo;t know how many streams it will take to complete, but I\u0026rsquo;ll proceed little by little as a series.\u0026rdquo; \u0026ldquo;I\u0026rsquo;ll basically be working in silence, so I hope you can watch it as background music for your own work.\u0026rdquo;\nOverview of the Target App \u0026ldquo;In this app, I\u0026rsquo;d like to make it possible to design the back side of a New Year\u0026rsquo;s card.\u0026rdquo; \u0026ldquo;I plan to incorporate photo insertion, font arrangement, image processing and illustration generation using AI, and ultimately upload it to the Microsoft Store.\u0026rdquo;\nToday\u0026rsquo;s Work Goals \u0026ldquo;Today, in the first session, we will set up the environment and build the foundation.\u0026rdquo; \u0026ldquo;Specifically, I would like to proceed with:\nCreating a GIT repository Creating the main window Displaying the version information dialog Creating menus and implementing the exit command Direct2D initialization/release processing and displaying HelloWorld\u0026rdquo; Regarding the Source Code Release \u0026ldquo;The source code is published on GitHub. If you are interested, please take a look.\u0026rdquo; → https://github.com/kenjinote/NengaCardApp/\nWorking Part (Silent) Create GitHub repository → Initial commit\nCreate the skeleton of the main window\nCreate version dialog, menus, and implement the exit command\nDirect2D initialization and release processing → Confirm HelloWorld display\nPush to GitHub as appropriate\nBasically silent, add short explanations only when necessary Before Ending the Stream (Last 1-2 minutes) Summary of Today\u0026rsquo;s Progress \u0026ldquo;Today, we created the GIT repository and implemented the window, exit button, and version dialog.\u0026rdquo; \u0026ldquo;We were able to get to the point of displaying HelloWorld with Direct2D.\u0026rdquo;\nConnection to Next Time \u0026ldquo;From next time, I\u0026rsquo;d like to proceed with organizing the UI part and objectifying strings.\u0026rdquo;\nGuiding to GitHub Link Again → https://github.com/kenjinote/NengaCardApp/\nClosing \u0026ldquo;Thank you for watching. I will continue to work steadily next time, so thank you for your support.\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/en/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":"New Year's Card Creation App Development Stream VOL.1 (Script)"},{"content":"Installing an MSIX with a Self-Signed Certificate When distributing apps on Windows, using MSIX packages is convenient because it unifies the installation and update mechanisms. However, MSIX has a restriction that it requires a \u0026ldquo;must be signed\u0026rdquo; certificate. There may be situations where you want to test-distribute an app developed for a company or individually, but \u0026ldquo;purchasing a commercial code signing certificate is too much.\u0026rdquo;\nThis is where a Self-Signed Certificate comes in handy. In this article, we will summarize the steps to attach a self-signed certificate to an MSIX and make it installable in a local environment.\n1. Create a Self-Signed Certificate First, launch PowerShell in administrator mode and run the following command.\n1 2 // Create a self-signed certificate 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; This creates a certificate for \u0026ldquo;code signing\u0026rdquo;.\nGiving it a descriptive name with -FriendlyName makes it easier to find later. You can adjust the expiration date with -NotAfter. Here it\u0026rsquo;s set to 10 years. 2. Export the PFX File Export the created certificate in PFX format so it can be used with signtool.\n1 2 3 4 // Create 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 The password set here (e.g., password) will be required later for signing operations.\n3. Install the Self-Signed Certificate to Trusted Root Certification Authorities The created certificate won\u0026rsquo;t be trusted by Windows as is. To install it, you need to import it into [Trusted Root Certification Authorities] -\u0026gt; [Certificates] from certmgr.msc.\nIf you import the exported certificate (.cer or .pfx), it will be treated as a trusted certificate on the target PC. This prevents the \u0026ldquo;untrusted certificate\u0026rdquo; warning when signing an MSIX.\n4. Sign the Installer (MSIX) Finally, use the created PFX certificate to sign the MSIX. signtool is included with Visual Studio and the Windows SDK.\n1 2 // Sign the installer 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 specifies the signature algorithm. /f specifies the PFX file, and /p passes the password. Finally, specify the path to the MSIX file. If signtool is not in your path, specify the full path. In my environment, it was in the following location: 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; This completes the signing, and the installable MSIX for the target PC is ready.\nSummary Create a self-signed certificate with New-SelfSignedCertificate Export the PFX with Export-PfxCertificate Install the certificate in Trusted Root Certification Authorities Sign the MSIX with signtool By following this flow, you can test operations and distribute locally without buying a commercial certificate. Of course, a certificate issued by a Certificate Authority is essential for actual commercial distribution, but this method is very convenient during the development and verification stages.\n👉 In this example, we used installer.msix, but the same procedure applies to your own custom apps.\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/en/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":"Installing an MSIX with a Self-Signed Certificate"},{"content":"Tools for those who \u0026ldquo;have logic but can\u0026rsquo;t write code.\u0026rdquo; Why I created LogicPad Hello, I\u0026rsquo;m kenji. I\u0026rsquo;m the creator of the low-code tool \u0026ldquo;LogicPad\u0026rdquo;. This time, rather than introducing the product, I\u0026rsquo;d like to write about the behind-the-scenes of the development—\u0026ldquo;Why did I decide to make this?\u0026quot;—and my own thoughts from a slightly personal perspective.\nTo be honest, this was not just another tool development. My past, frustrations at the workplace, skill set, and the smoldering desire to \u0026ldquo;create my own product someday\u0026rdquo;— LogicPad was born as a result of all these things overlapping.\nIn other words, this is my \u0026ldquo;life\u0026rsquo;s culmination project.\u0026rdquo; I\u0026rsquo;ll write about this background as honestly and passionately as possible.\nI wanted a product I could proudly say, \u0026ldquo;I made this.\u0026rdquo; To be frank, this was my very first motivation.\nSince a long time ago, I loved writing code for both work and hobbies. I\u0026rsquo;ve been involved in various developments. But one day, I suddenly realized. \u0026ldquo;I have no product released into the world under my own name, with my own responsibility.\u0026rdquo;\nOf course, there is value in what you make as a team, and there was plenty of work I could be proud of. But somewhere in my mind, there was a sense of emptiness, wondering, \u0026ldquo;Am I going to finish my career under someone else\u0026rsquo;s name like this?\u0026rdquo;\nJust once is enough. I want to leave something behind that I can proudly say, \u0026ldquo;I made this.\u0026rdquo; With that thought, I started conceptualizing LogicPad. This was about 6 years ago (around 2019). (The original idea itself came about 10 years ago in 2015 when I learned about Blueprint, the visual programming language of Unreal Engine.)\nIt\u0026rsquo;s a waste to hold back just because you can\u0026rsquo;t write code, isn\u0026rsquo;t it? There were many excellent people at my workplace.\nThey could build logic. They mastered Excel functions freely and could see through to the essence of a problem. But—when it came to the stage of \u0026ldquo;writing code,\u0026rdquo; their hands would stop.\n\u0026ldquo;I\u0026rsquo;m doing this task while looking at a manual every time, but couldn\u0026rsquo;t it be automated?\u0026rdquo; \u0026ldquo;Yeah, it can. But\u0026hellip; you\u0026rsquo;d have to write code for that\u0026hellip;\u0026rdquo;\nConversations like that happened countless times.\nEvery time, I thought: \u0026ldquo;It\u0026rsquo;s such a waste that people who understand the logic get stopped by the wall of code.\u0026rdquo;\nThe Choice of a Low-Code Editor Actually, in my previous job, I was developing a 2D CAD operated by GUI. With CAD, you assemble shapes using a mouse, right? In other words, it\u0026rsquo;s a world where you \u0026ldquo;build logic through operations.\u0026rdquo;\nI thought, \u0026ldquo;This is incredibly compatible with low-code.\u0026rdquo;\nGoing back even further, since my student days, I was mass-producing small programs—image processing, numerical processing, Windows tools, automatic SNS posting tools, etc.—by writing code as soon as I thought of them. I think there are over 600 of them. They are still on GitHub today.\nBack then, I didn\u0026rsquo;t think about the meaning. I just \u0026ldquo;made things because I wanted to make them.\u0026rdquo; That was it.\nBut now, while making LogicPad\u0026hellip;\nI felt like the dots were finally connected into a line.\nEasy to Use, Yet Powerful. The Difficulty of Balance While proceeding with development, what I constantly thought about was \u0026ldquo;Making a tool that is intuitively usable and genuinely powerful.\u0026rdquo;\nIf you add features, you can do more. But it becomes harder to use. If you make it simple, anyone can touch it. But then some people will find it lacking.\nSo that people won\u0026rsquo;t say, \u0026ldquo;Low-code tools are just toys, right?\u0026rdquo; But also so they won\u0026rsquo;t say, \u0026ldquo;You have to write code in the end anyway.\u0026rdquo;\nI fought continuously on that fine line between intuition and expressiveness.\nI rebuilt the UI many times, threw it away many times, and when I finally got closer to a form where I thought, \u0026ldquo;This can work,\u0026rdquo; I was truly happy.\nSaved by the Very First \u0026ldquo;User\u0026rsquo;s\u0026rdquo; Words The first person I handed LogicPad to was a former colleague. They weren\u0026rsquo;t good at IT, and code was scary. But they were good at logic.\nAfter I explained a bit and had them try it out\u0026hellip; the single phrase they said a few minutes later, I still can\u0026rsquo;t forget.\n\u0026ldquo;With this, I think even I could do it!\u0026rdquo;\nI almost cried. This was exactly what I wanted to give them.\nNot just a working tool, but the feeling of \u0026ldquo;I made it myself!\u0026rdquo;. I was convinced that this is the true value of LogicPad.\nWhen More People Can Create, Society Becomes More Interesting I genuinely believe that the \u0026ldquo;democratization of technology\u0026rdquo; is crucial.\nTechnology has the power to change the world. But the people who can handle it are limited.\nWhat if you could build apps just by \u0026ldquo;understanding the logic\u0026rdquo;?\nMore people will be able to join the \u0026ldquo;creating side.\u0026rdquo; And I believe that what gets born from there will exceed our current imagination.\nIf LogicPad could become that gateway. I want it to be a tool that turns \u0026ldquo;I want to try making it\u0026rdquo; into \u0026ldquo;I can make it.\u0026rdquo;\nThat is my wish.\nIn Conclusion LogicPad is still in beta and not finished yet. There are a mountain of improvements and things I want to do.\nBut I\u0026rsquo;ve poured all the \u0026ldquo;dots\u0026rdquo; of my life into this tool. Now, I can say with pride:\n\u0026ldquo;This is a product that I made.\u0026rdquo;\n👇 Bonus: What You Can Do with LogicPad Build processes with drag-and-drop Handle conditional branching and variables in the GUI Features diverse AI integration nodes Expandable for advanced users by inserting scripts High-precision mathematical functions and data processing (such as infinite-precision numerical calculations) Rich shortcut keys for advanced users Supports over 90 languages What I Want to Do Moving Forward Generate logic from natural language in collaboration with AI A system where users can create custom nodes Build a platform to share created nodes and logic ✍️ Afterword Thank you so much for reading this far. This wasn\u0026rsquo;t just a tool development; it was a challenge into which I poured my own experiences, passion, and fragments of my life.\n\u0026ldquo;I can\u0026rsquo;t write code, but I have logic.\u0026rdquo; A future where such people become able to \u0026ldquo;create\u0026rdquo; with their own power. I want to continue aiming for that through LogicPad.\nIf this made you feel even a little bit like \u0026ldquo;I want to try using it,\u0026rdquo; that alone makes me very happy. If you\u0026rsquo;re interested, please definitely try out LogicPad.\nAnd if you have any thoughts or things you noticed after using it, no matter how small, please let me know. Your voice will be a great power in creating the next step for this product.\nThank you for your continued support.\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/en/p/logicpad-%E9%96%8B%E7%99%BA%E7%A7%98%E8%A9%B1/","title":"The Untold Story of LogicPad Development"},{"content":"How to Batch Delete Metadata (Personal Information) from Excel, Word, etc. using PowerShell Office files like Excel automatically save \u0026ldquo;metadata (personal information)\u0026rdquo; such as the author, last modifier, and company name. There are many cases where you want to delete this information, such as when sharing files outside the company.\nIn this article, we will explain in detail how to delete Excel metadata using PowerShell, focusing on batch processing within a folder ** and ** applying it to other Office files like Word and PowerPoint.\n1. Delete metadata of a single Excel file This is the most basic script to delete personal information of a single Excel file. It calls the Excel COM object, sets the RemovePersonalInformation property to $true, and overwrites the file.\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 # Start the Excel application hidden $excel = New-Object -ComObject Excel.Application $excel.Visible = $false $excel.DisplayAlerts = $false # Open the file (* specify absolute path) $filePath = \u0026#34;C:\\Path\\To\\Your\\File.xlsx\u0026#34; $wb = $excel.Workbooks.Open($filePath) # Enable the setting to remove metadata (personal information) $wb.RemovePersonalInformation = $true # Overwrite, save, and close $wb.Save() $wb.Close($false) # Quit Excel and release memory $excel.Quit() [System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel) | Out-Null Note: Be sure to specify an ** absolute path (full path)** for the path passed to Workbooks.Open(). Using a relative path may cause an error.\n2. Batch process all Excel files in a folder In practice, there are many cases where you want to \u0026ldquo;delete the metadata of dozens of Excel files in a specific folder all at once.\u0026rdquo; This can be achieved by combining Get-ChildItem with a loop process.\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; # Get all .xlsx and .xls files in the folder $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;No Excel files found.\u0026#34; exit } $excel = New-Object -ComObject Excel.Application $excel.Visible = $false $excel.DisplayAlerts = $false foreach ($file in $excelFiles) { Write-Host \u0026#34;Deleting metadata for $($file.Name)...\u0026#34; # Open the file $wb = $excel.Workbooks.Open($file.FullName) # Delete metadata and overwrite save $wb.RemovePersonalInformation = $true $wb.Save() $wb.Close($false) } $excel.Quit() [System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel) | Out-Null Write-Host \u0026#34;All processing completed!\u0026#34; 3. Delete metadata of other Office files (Word / PowerPoint) You can delete metadata not only in Excel but also in Word and PowerPoint using exactly the same logic. Only the name of the COM object called is different, and the fact that the RemovePersonalInformation property is available is common.\nFor 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 For PowerPoint For PowerPoint, the setting of the RemovePersonalInformation property is the same, but the behavior of hidden startup is slightly different.\n1 2 3 4 5 6 7 8 9 10 $ppt = New-Object -ComObject PowerPoint.Application # Open by specifying hidden mode (msoFalse) etc. in the 2nd to 4th arguments $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 Conclusion By utilizing PowerShell and COM objects, you can fully automate the deletion of Office file metadata. It is very useful to have a folder batch processing script on hand before delivery to prevent confidential information or personal names from accidentally leaking out.\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/en/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/","title":"How to Batch Delete Metadata (Personal Information) from Excel, Word, etc. using PowerShell"},{"content":"A Simple Explanation of Kepler\u0026rsquo;s Conjecture! The Best Way to Pack Watermelons Tightly Hello, this is kenji!\nToday, I\u0026rsquo;d like to explain a mathematical concept with a somewhat difficult-sounding name, \u0026ldquo;Kepler\u0026rsquo;s Conjecture,\u0026rdquo; as simply as possible.\nAt first glance, it seems like a very niche topic, but it\u0026rsquo;s actually a quite familiar problem: \u0026ldquo;How can we pack watermelons as tightly as possible in a box?\u0026rdquo; It relates to convenience store refrigerators and how cargo is loaded.\nAnd in the world of mathematics, it\u0026rsquo;s a super romantic story because it could not be proven for over 400 years.\nLet\u0026rsquo;s get started!\nWho is Kepler anyway? First of all, who is the \u0026ldquo;Kepler\u0026rdquo; in \u0026ldquo;Kepler\u0026rsquo;s Conjecture\u0026rdquo;?\nThis is the name of a German astronomer and mathematician, Johannes Kepler.\nHe was a truly amazing person. For example, he\u0026rsquo;s the one who discovered that planetary orbits are elliptical. It\u0026rsquo;s common knowledge now, but back then (around 1600), even the heliocentric theory wasn\u0026rsquo;t widely believed.\nGalileo = The genius of observation Kepler = The genius who explained the universe with mathematical formulas Newton = The super genius who compiled those theories into physical laws In that kind of positioning, Kepler was a pioneer of \u0026ldquo;explaining the universe with mathematical formulas.\u0026rdquo;\nAnd then, one day, he brought this up.\nWhat is Kepler\u0026rsquo;s Conjecture? Put simply, \u0026ldquo;Kepler\u0026rsquo;s Conjecture\u0026rdquo; is about this:\nWhen packing spheres of the same size (like watermelons or oranges) into a box, which arrangement packs them the tightest?\nThat\u0026rsquo;s the problem.\nAnd what Kepler conjectured in the 1600s was:\nIsn\u0026rsquo;t it most efficient to stack them in a triangle-like shape, just like how oranges are displayed at a greengrocer?\nThat was it.\nTo say this more mathematically, it\u0026rsquo;s called the \u0026ldquo;Sphere Packing Problem,\u0026rdquo; which is the problem of finding the densest way to pack spheres into space.\nKepler conjectured that an arrangement called \u0026ldquo;Face-Centered Cubic (FCC)\u0026rdquo; structure (like stacking watermelons in a triangle) is the most efficient.\nAnd, while everyone thought, \u0026ldquo;That certainly seems right,\u0026rdquo; it was incredibly difficult to mathematically prove that \u0026ldquo;This is absolutely the best!\u0026rdquo;\n400 Years Until It Was Proven!?! So, when was it actually proven?\nSurprisingly, around 1998 to 2005. In other words, no one could prove it for nearly 400 years. That\u0026rsquo;s crazy.\nMoreover, it was proven by an American mathematician named Thomas Hales.\nHe decided it was impossible to do by hand calculations alone, and proved it using computers. However, the proof was so complex that a problem arose: humans couldn\u0026rsquo;t properly check it!\nThis sparked a huge debate in the mathematical world: \u0026ldquo;So, can we really trust a proof done by a computer?\u0026rdquo;\nIn the end, the proof that said, \u0026ldquo;We have rigorously verified it, including the computer part!\u0026rdquo; (formally known as a \u0026ldquo;formal proof\u0026rdquo;) was completed in 2014.\nIn other words, it took over 400 years to prove that Kepler\u0026rsquo;s intuition was right. What a romantic story.\nIt\u0026rsquo;s Used a Lot in Real Life Too You might think that \u0026ldquo;how to arrange spheres\u0026rdquo; is just a topic for math nerds, but it\u0026rsquo;s actually super practical.\nEfficiently packing drinks in a convenience store refrigerator Loading canned goods onto transport pallets Applied to communications (like digital signal compression) Used in 3D printers and the design of crystal structures And so on, it\u0026rsquo;s a theory that\u0026rsquo;s actually heavily used behind the scenes in our daily lives.\nSummary: Human Intuition is Amazing So, let\u0026rsquo;s summarize.\nKepler\u0026rsquo;s Conjecture = The problem of how to pack spheres as tightly as possible Mr. Kepler = The mathematician and astronomer who discovered planetary orbits Conjectured in the 1600s! But proven in the 2000s! It\u0026rsquo;s highly applied in real life! And the most interesting part is that \u0026ldquo;the way greengrocers intuitively stacked things was mathematically the strongest.\u0026rdquo;\nIn short, human intuition is amazing. And the fact that it can take 400 years to prove it is such a romantic story.\nIf you\u0026rsquo;re interested, please try searching for things like \u0026ldquo;Thomas Hales\u0026rdquo;, \u0026ldquo;Formal Proof\u0026rdquo;, and \u0026ldquo;Sphere Packing\u0026rdquo;. It\u0026rsquo;s incredibly fascinating when you dig deeper into it.\nSee you!\n[PR]\nBuy Now ","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/en/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/","title":"A Simple Explanation of Kepler's Conjecture"},{"content":"The Wall of AI Development 〜Made it to the 8th station, but from there it was hell〜\nHello, I\u0026rsquo;m kenji.\nRecently, I\u0026rsquo;ve been hearing a ton of people saying, \u0026ldquo;I asked AI and it made an app for me!\u0026rdquo; We\u0026rsquo;ve moved past the era of no-code and low-code, and are entering a phase of \u0026ldquo;vibe coding\u0026rdquo; (writing code by feel).\nFor example, if you say, \u0026ldquo;Make an app that processes images and posts them to SNS,\u0026rdquo; AI will spit out the code and even the UI. It\u0026rsquo;s amazing, you\u0026rsquo;d think we don\u0026rsquo;t need humans anymore, right?\nBut you know, that\u0026rsquo;s like landing at the 8th station of Mount Fuji in sandals.\nGetting to the 8th station looks \u0026ldquo;easy\u0026rdquo; Development with AI is really easy at first. File I/O? It runs for now. Network? Well, it connects. Database? JSON is fine. UI? ChatGPT spit out React code. Billing? Just copy-paste the Stripe API.\nHere, you get the illusion of \u0026ldquo;Am I an engineer now?\u0026rdquo;. But the real hell begins from here.\nWhy you get stuck The reason is simple: \u0026ldquo;AI makes it look like it\u0026rsquo;s done, but leaves the final adjustments entirely to humans.\u0026rdquo;\nData gets lost in File I/O DB normalization is weak so searches are slow UI is not intuitive Crashes from access concentration because no load testing was done Rejected by Apple/Google review (Almost) causes an uproar by violating legal requirements In other words, **AI is good at creating a prototype that looks like a finished product , but ** finishing it into a product that actually works in the real world is still a human\u0026rsquo;s job today.\nBut there\u0026rsquo;s a paradox Here you notice one paradox.\nWhat if AI becomes able to truly do everything in the future? In other words, what if \u0026ldquo;AI can perfectly handle security, billing, and design all by itself\u0026rdquo;?\nAt that time, the need for humanity to create apps itself might disappear.\nBecause if a user directly tells the AI, \u0026ldquo;I want to do this kind of thing,\u0026rdquo; the task will be executed immediately without an app.\n🌀For example In the past, we \u0026ldquo;launched a calculator app to calculate\u0026rdquo;, but now it\u0026rsquo;s done just by saying, \u0026ldquo;Hey Siri, what\u0026rsquo;s 12 x 32?\u0026rdquo;.\nIn the same way, if you say \u0026ldquo;AI, process this photo and share it\u0026rdquo;, the process might be completed without going through any app UI or API.\nIn other words, when the goal of \u0026ldquo;making apps with AI\u0026rdquo; is realized, a world where apps themselves are unnecessary might arrive.\nIn the end, what we can do now So, what should we do?\nRight now, \u0026ldquo;above the 8th station\u0026rdquo; is still the human domain, so polish that Focus on essential user understanding and service design Think about \u0026ldquo;what\u0026rsquo;s valuable\u0026rdquo; rather than \u0026ldquo;what can be made\u0026rdquo; Rather, explore ways of providing value that are \u0026ldquo;not bound by the format of an app\u0026rdquo; AI is a tool, a lift, and sometimes a competitor. But, \u0026ldquo;what to make\u0026rdquo; and \u0026ldquo;why to make it\u0026rdquo; remain questions for us humans.\nConclusion: The wall of AI development is not a paradox of technology, but of structure\nAn era where anyone can get to the 8th station of Mount Fuji. But the real thing starts from there.\nAnd by the time we reach the summit, a future might be waiting where we ask ourselves, \u0026ldquo;Did we even need to climb the mountain?\u0026rdquo;.\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/en/p/ai%E9%96%8B%E7%99%BA%E3%81%AE%E5%A3%81/","title":"The Wall of AI Development"},{"content":"🎯 How to call Microsoft.Windows.AI from C++ [With Sample Code] Since Windows 10, Windows has been equipped with a built-in **runtime capable of executing ONNX format AI models . This is ** Windows ML (Windows.AI.MachineLearning).\nIn this article, we will specifically explain how to call Microsoft.Windows.AI.MachineLearning from C++ (Win32 app based), along with ** sample code**.\n✅ Preparation ◾ System Requirements Windows 10 (1809+) or Windows 11 Visual Studio 2019 or later (Community edition is fine) C++/WinRT Support (Microsoft.Windows.CppWinRT) Windows SDK 10.0.17763.0 or higher ✅ Project Configuration Create a project in Visual Studio with the following configuration:\nType: C++ Windows Desktop Application (Empty Project)\nSubsystem: Windows (WinMain)\nAdd the following package via NuGet:\n1 Microsoft.Windows.CppWinRT ✅ Sample Code Below is a minimal sample combining the Win32 API and Windows.AI.MachineLearning using WinMain.\nNote: Assume the ONNX model to be used is model.onnx, and place it in the same folder as the executable file. main.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;) // For WinRT linking using namespace winrt; using namespace Windows::AI::MachineLearning; using namespace Windows::Storage; int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int nCmdShow) { // Initialize WinRT (Either MTA or STA is fine) winrt::init_apartment(); try { // Load the model file auto modelFile = StorageFile::GetFileFromPathAsync(L\u0026#34;model.onnx\u0026#34;).get(); LearningModel model = LearningModel::LoadFromStorageFileAsync(modelFile).get(); // Create a session LearningModelSession session(model); LearningModelBinding binding(session); // Model input/output (Here, a temporary empty input) // In practice, binding with TensorFloat etc. is required // Execute inference auto result = session.EvaluateAsync(binding, L\u0026#34;\u0026#34;).get(); MessageBox(nullptr, L\u0026#34;Inference completed\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;Error\u0026#34;, MB_ICONERROR); } return 0; } ✅ Supplement: How to Specify Input/Output Tensors Depending on the model, it is necessary to create and bind Tensors before inference.\nExample:\n1 2 3 4 5 6 7 8 // Convert a 1D float array to a Tensor std::vector\u0026lt;float\u0026gt; inputData = {0.5f, 0.3f, 0.2f}; std::vector\u0026lt;int64_t\u0026gt; shape = {1, 3}; // Shape: [1, 3] auto tensor = TensorFloat::CreateFromArray(shape, inputData); // Input binding (Match the model\u0026#39;s input name) binding.Bind(L\u0026#34;input_0\u0026#34;, tensor); Outputs can be obtained similarly using result.Outputs().Lookup(L\u0026quot;output_0\u0026quot;).\n✅ Debugging Tips A FileNotFoundException will be thrown if the model file is not in the execution folder. An invalid_argument error will occur if the input/output names do not match. The exact I/O specifications of the model can be confirmed with tools like Netron. ✅ Summary Item Details API Used Windows.AI.MachineLearning (WinRT) Language C++ (Win32 based) Recommended Method Via C++/WinRT headers Advantages ONNX models run natively, GPU support available Caution Pay attention to model input names and Tensor shapes ✅ Alternatives: For those who do not want to use WinRT By using Microsoft\u0026rsquo;s ONNX Runtime, you can handle ONNX models from C++ entirely without WinRT. It supports cross-platform, allowing common code for Windows/Linux. 📌 Conclusion Windows ML (Microsoft.Windows.AI) is a powerful AI inference engine that can be robustly used even from C++. If you need native inference on Windows, please give it a try.\nFor those who want specific examples of creating ONNX models and Tensor binding, we plan to explain them in a follow-up article!\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/en/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/","title":"How to call Microsoft.Windows.AI from C++"},{"content":"✅ TinyLLaMA × C++ Setup Steps (using llama.cpp) 🔧 Step 1: Prepare llama.cpp 1-1. Required Environment (Minimum) OS: Windows / Linux / macOS Development Environment: g++ / clang / MSVC Git / CMake 1-2. Get and Build 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 On Windows, it is easier to use cmake --build . --config Release in the Visual Studio Developer Command Prompt.\n📦 Step 2: Download and Convert the TinyLLaMA Model 2-1. Get the Original Model from HuggingFace Example: TinyLLaMA-1.1B\n1 2 3 4 5 6 7 # Download using transformers if necessary 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 This is a step to convert into Hugging Face format.\n2-2. Convert to GGUF format (for llama.cpp) 1 2 cd llama.cpp python3 convert.py ./hf_model --outfile tinyllama.gguf 2-3. Model Quantization (Size Reduction) 1 ./quantize ./tinyllama.gguf ./tinyllama-q4.gguf q4_0 q4_0 is 4-bit quantization. The model size will be reduced to around 350MB.\n🧪 Step 3: Call the Model from C++ (Code Example) 3-1. Simple C++ Code (Inference) 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;The user says they want to read Excel data, filter it, and save it. What is the node configuration?\u0026#34;; llama_batch batch = llama_batch_init(512, 0, 1); llama_token BOS = llama_token_bos(model); batch.token[0] = BOS; // Tokenize 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); // Get Inference Result 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; } 🧱 Step 4: Compilation Method (Example) 1 g++ -I./llama.cpp main.cpp ./llama.cpp/build/libllama.a -o tiny_infer -pthread -std=c++11 libllama.a will be created in the build/ directory after building.\n✅ Example Structure of Output (Organized) 1 2 3 4 5 6 my_app/ ├── tinyllama-q4.gguf # Quantized model (~350MB) ├── main.cpp # C++ code above ├── llama.cpp/ # llama.cpp core └── build/ └── libllama.a # Compiled library 🧠 Additional Notes for Applying to Use Cases Include code in C++ to match and select node templates based on the output Example: If \u0026ldquo;Excel\u0026rdquo;, \u0026ldquo;filter\u0026rdquo;, and \u0026ldquo;save\u0026rdquo; are included -\u0026gt; Generate corresponding nodes A simple structure like if statements + JSON template loading is fine for this part 📌 Summary Item Content Recommended Model TinyLLaMA-1.1B-Chat v1.0 (GGUF + Quantization) Size ~350-450MB (4-bit quantization) C++ Integration Possible using llama.cpp, almost no external dependencies Processing Capability Sufficient for basic intent understanding and output generation (Natural Language -\u0026gt; Structure) Scalability Can be made into a node generation AI by combining slot filling and template calling ","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/en/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/","title":"Steps to call TinyLLaMA from C++ (using llama.cpp)"},{"content":"✅ Posting Method Using an Access Token (Slack Web API) Slack\u0026rsquo;s \u0026ldquo;OAuth Token (such as xoxb-\u0026hellip;)\u0026rdquo; is a key used to post using Slack\u0026rsquo;s Web API. In this case, unlike Webhooks, you POST to the Slack API Endpoint with an Authorization: Bearer header.\n🔑 Required Prerequisites You need to include chat:write in the OAuth Scopes of your Slack app:\nSetup Steps Go to https://api.slack.com/apps Create an app or select an existing one Under \u0026ldquo;OAuth \u0026amp; Permissions\u0026rdquo; \u0026gt; Scopes → Add chat:write \u0026ldquo;Install to Workspace\u0026rdquo; or \u0026ldquo;Reinstall\u0026rdquo; to get the Access Token (e.g., xoxb-xxxxxxxxxx) 💻 C++ Code (Posting to Slack API using 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); // Authorization header and 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;; // JSON body 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;Send error\\n\u0026#34;; return false; } // Check status code 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-your-access-token\u0026#34;; // Access Token std::string channel = \u0026#34;channel-ID-or-#general\u0026#34;; // Example: \u0026#34;#general\u0026#34; or \u0026#34;C0123456789\u0026#34; std::string message = \u0026#34;I tried posting to Slack from C++!\u0026#34;; if (PostSlackMessage(token, channel, message)) { std::cout \u0026lt;\u0026lt; \u0026#34;Post successful!\\n\u0026#34;; } else { std::cerr \u0026lt;\u0026lt; \u0026#34;Post failed.\\n\u0026#34;; } return 0; } 📌 How to Get the Channel ID Using just the channel name (e.g., #general) may sometimes result in an error. A more reliable method is to use the ID found in the URL of the Slack channel page.\n1 2 https://app.slack.com/client/Txxxxx/C0123456789 ↑ This part is the Channel ID ✅ About Token Types (Supplementary) Token Format Purpose Example Use Case xoxb-... Bot Token (Recommended) Post, edit, delete xoxp-... User Token (Not Recommended) Non-bot operations Refresh Token Long-term token renewal Usually not used 📝 Summary To post to Slack from C++, the Slack Web API + Bearer Token method is reliable. Use the chat.postMessage endpoint with HTTPS POST. The token must be sent in the Bearer header. Specifying the channel by ID is recommended. ","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/en/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":"How to post a message to Slack using Slack App + OAuth2"},{"content":"How to Post Messages to Slack using C++ (Win32 API + WinHTTP) [Webhook Supported] I want to post messages to Slack from C++. It\u0026rsquo;s common in Node.js or Python, but doing it with \u0026ldquo;C++ × Win32 API × WinHTTP\u0026rdquo; is quite rare, isn\u0026rsquo;t it?\nIn this article, I will explain how to send messages from C++ to Slack using a Webhook URL, step-by-step and in an easy-to-understand manner.\n✅ Overall Flow To post to Slack, follow these steps:\nObtain a Slack Webhook URL (API key) Send a POST request using WinHTTP Assemble the message body in JSON format Check the result and you\u0026rsquo;re done! 🔑 Step 1: How to Obtain a Slack Webhook URL Slack allows you to easily post messages from external services using a feature called Incoming Webhooks.\nSteps to Obtain Access https://api.slack.com/apps Click Create New App Choose From scratch, then select the app name and the workspace to post to Select \u0026ldquo;Incoming Webhooks\u0026rdquo; from the left menu and enable it Click \u0026ldquo;Add New Webhook to Workspace\u0026rdquo; and select a channel Copy the generated URL (e.g., https://hooks.slack.com/services/xxx/yyy/zzz) This URL functions like an API key.\n💻 Step 2: Send a Message to Slack with C++ Code Technologies Used Win32 API WinHTTP (Standard Library) JSON formatted messages Sample Code (Posting to 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) { // Parse 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;Failed to parse URL\\n\u0026#34;; return false; } // Connect and start HTTP session 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;Send request failed\\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); // Release resources 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;; // Replace with your Webhook URL 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;Posted successfully!\\n\u0026#34;; } else { std::cerr \u0026lt;\u0026lt; \u0026#34;Failed to post.\\n\u0026#34;; } return 0; } 🧪 Customizing JSON Messages With Slack Webhooks, you can include parameters like the following:\n1 2 3 4 5 6 { \u0026#34;text\u0026#34;: \u0026#34;Notification content\u0026#34;, \u0026#34;username\u0026#34;: \u0026#34;Bot name\u0026#34;, \u0026#34;icon_emoji\u0026#34;: \u0026#34;:rocket:\u0026#34;, \u0026#34;channel\u0026#34;: \u0026#34;#desired_channel_name\u0026#34; } 📌 Supplementary Notes Content-Type must be specified as \u0026quot;application/json\u0026quot; Pass the Webhook URL as a wstring without any changes (URL encoding is unnecessary) Since it\u0026rsquo;s HTTPS communication, don\u0026rsquo;t forget WINHTTP_FLAG_SECURE 🎉 Bonus: Example of Post Confirmation in Slack It will be displayed in Slack like this:\n1 2 [C++ Bot] Hello from C++ :rocket: ✍️ Summary Item Details Posting Method Webhook (Incoming Webhooks) Communication Library WinHTTP Data Format JSON Usable Parameters text, username, icon_emoji, channel, etc. Even if you thought \u0026ldquo;Integrating C++ with Slack? No way\u0026hellip;\u0026rdquo;, you can start embedding a notification bot today!\n🚀 Teaser for Next Time? If you\u0026rsquo;re interested, next time:\nFile attachments UI with buttons Flexible API operations with Slack App + OAuth2 I can introduce you to more advanced Slack integrations like these!\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/en/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/","title":"How to Post Messages to Slack using C++ (Win32 API + WinHTTP) [Webhook Supported]"},{"content":"Market-In vs. Product-Out Hello, this is kenji.\nSometimes in business books or proposals,\n\u0026ldquo;We use a market-in strategy.\u0026rdquo; \u0026ldquo;This is a product-out approach, isn\u0026rsquo;t it?\u0026rdquo;\nYou see people saying things like this, but\u0026hellip;\nWait, market-in? Product-out? Which one is better???\nDon\u0026rsquo;t you ever feel that way?\nSo this time, I want to break down these terms \u0026ldquo;market-in\u0026rdquo; and \u0026ldquo;product-out\u0026rdquo; as simply as possible, with a slightly critical eye.\nSimply put\u0026hellip; Market-in: Listening to the voice of the market and creating products that match it. Product-out: Creating what you think is good (the product) and putting it out into the world. That\u0026rsquo;s it. Simple.\nFor example, with a ramen shop\u0026hellip; A market-in ramen shop would be like, \u0026ldquo;Iekei ramen is popular lately. Alright, let\u0026rsquo;s go with plenty of fat and garlic!\u0026rdquo;\nA product-out ramen shop would be like, \u0026ldquo;This soy milk basil salt ramen I made is seriously the best, so eat it.\u0026rdquo;\nWhich one is the correct answer\u0026hellip; Both are. With market-in, you cater to customer needs, so \u0026ldquo;the probability of it selling is high,\u0026rdquo; but it\u0026rsquo;s hard to produce breakthrough ideas or innovations.\nWith product-out, you \u0026ldquo;give shape to the justice you believe in,\u0026rdquo; so it\u0026rsquo;s edgy and attractive, but if you miss the mark, it won\u0026rsquo;t resonate with anyone.\nThe iPhone is quite product-out Apple released the iPhone in an era when people were saying \u0026ldquo;I don\u0026rsquo;t need a smartphone.\u0026rdquo;\nThis is completely a successful example of product-out.\nIf they had just listened to users, they would have been told \u0026ldquo;A phone without a keyboard? Impossible,\u0026rdquo; and that would have been the end of it.\nBut product-out can easily become \u0026ldquo;self-satisfaction\u0026rdquo; Sometimes there are companies or people who say, \u0026ldquo;We are a product-out type,\u0026rdquo; but\nWait, isn\u0026rsquo;t that just ignoring the user?\nI sometimes think that.\n\u0026ldquo;I made it because I wanted to. But it didn\u0026rsquo;t sell.\u0026rdquo; That\u0026rsquo;s not product-out, that\u0026rsquo;s \u0026ldquo;self-indulgent-out.\u0026rdquo;\nMarket-in has pitfalls too On the other hand, market-in is not omnipotent either.\nIf you say, \u0026ldquo;I\u0026rsquo;ll do everything because the users want it!\u0026rdquo;, the core of the product gets blurred, and in the end, it might not resonate with anyone.\nIt\u0026rsquo;s like when you keep adding features, and before you know it, it\u0026rsquo;s become a chaotic tool.\nThe ones who are truly amazing are \u0026ldquo;those doing both\u0026rdquo; Amazing products perfectly present \u0026ldquo;something users truly wanted but couldn\u0026rsquo;t put into words.\u0026rdquo;\nIn other words, it means \u0026ldquo;getting market-in style empathy with a product-out mindset.\u0026rdquo;\nIt\u0026rsquo;s easy to say, but incredibly difficult to do. However, if you can pull this off, it instantly becomes a \u0026ldquo;god-tier product.\u0026rdquo;\nConclusion: User reaction is everything, not words Market-in or product-out. Which is right is a pretty meaningless question.\n\u0026ldquo;Is it properly reaching the users\u0026rsquo; hearts?\u0026rdquo; That\u0026rsquo;s everything, I think.\nI feel like saying \u0026ldquo;we\u0026rsquo;re doing this kind of strategy\u0026rdquo; is fine as long as you can write it in marketing materials later.\nSo, that was a talk about market-in and product-out!\nWithout being confused by weird loanwords, thinking about \u0026ldquo;In the end, what will make people happy?\u0026rdquo; is the healthiest approach, I think.\nSee you around~.\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/en/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/","title":"Market-In and Product-Out"},{"content":"Is it true that \u0026ldquo;any number eventually becomes 1\u0026rdquo;? ── Playing with the Collatz Conjecture Hello! I\u0026rsquo;m kenji.\nSuddenly, but if you hear \u0026ldquo;a rule where any number eventually becomes 1\u0026rdquo;, isn\u0026rsquo;t it a bit mysterious?\nFor example, 19, or 87, or even 1000000. If you tweak the numbers according to appropriate rules, for some reason it converges to \u0026ldquo;1\u0026rdquo; at the end.\nSuch a dream-like story is the Collatz Conjecture.\nWhat is the Collatz Conjecture anyway? First, let me introduce the rules.\nStart: Choose any positive integer\nOperation:\nIf it is even → Halve it (n → n / 2) If it is odd → Triple it and add 1 (n → 3n + 1) If you repeat this forever, the conjecture says that any number will eventually reach 1.\nFor example, starting from 6:\n1 6 → 3 → 10 → 5 → 16 → 8 → 4 → 2 → 1 It properly became \u0026ldquo;1\u0026rdquo;. Welcome back!\nLet\u0026rsquo;s do it in code: Collatz in Python Now, in times like this, it\u0026rsquo;s faster to try it in code! Let\u0026rsquo;s output the \u0026ldquo;Collatz sequence\u0026rdquo; in 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 # Example: Starting from 19 print(collatz(19)) When you execute it:\n1 [19, 58, 29, 88, 44, 22, 11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1] It splendidly reaches 1. Even though it takes quite a detour, it firmly reaches the goal at the end!\nBy the way, even if you start from 29, it reaches 1 in the same way.\n1 print(collatz(29)) When you execute it:\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] Surprisingly, it takes 111 steps!\nMoreover, there are scenes where it balloons to over 9000 along the way. It\u0026rsquo;s a pattern that takes a huge detour before reaching the goal.\nSo, what\u0026rsquo;s amazing about it in the end? What\u0026rsquo;s amazing about this conjecture is,\nEven though it hasn\u0026rsquo;t been proven, it seems to become 1 no matter what number you use\nThat\u0026rsquo;s the point.\nEh? Then, what about 1 trillion, or 10 quadrillion\u0026hellip;?\nIf you thought that, you are sharp. Actually, it has been verified up to about \u0026ldquo;2 to the 68th power\u0026rdquo; using computers, and all have reached 1. Unbelievable\u0026hellip;\nBut, it hasn\u0026rsquo;t been theoretically proven that \u0026ldquo;it always happens\u0026rdquo;. This is what they call an \u0026ldquo;unsolved problem\u0026rdquo; in the world of mathematics.\nWho is Mr. Collatz? So, reading this far, you might wonder \u0026ldquo;who is Collatz anyway?\u0026rdquo;. Let me introduce him properly!\nName: Lothar Collatz Nationality: Germany Year of birth: 1910 - 1990 Title: Mathematician (Active in the fields of functional analysis and number theory) He proposed this conjecture in 1937, and since then, for over 80 years, no one has been able to prove or disprove it.\nBy the way, this problem is so simple yet so deep that even Paul Erdős (a super famous mathematician) is said to have said this:\n\u0026ldquo;Mathematics may not be ready for such problems.\u0026rdquo;\nIn other words, the theory that human mathematics hasn\u0026rsquo;t caught up with this mystery yet\u0026hellip;\nNo \u0026ldquo;complex math formulas\u0026rdquo; are necessary The good thing about the Collatz Conjecture is that anyone can play with it.\nYou can do it if you have paper and pen. If you write code in Python, you can test it automatically. And yet, cutting-edge mathematicians are seriously challenging it.\nDoesn\u0026rsquo;t it make you excited?\nBonus: Code to test it all at once I\u0026rsquo;ll also include code to test various numbers all at once.\n1 2 3 for n in range(1, 21): steps = collatz(n) print(f\u0026#34;{n}: {steps} (Steps: {len(steps)-1})\u0026#34;) This outputs the Collatz sequences from \u0026ldquo;1 to 20\u0026rdquo; all at once.\nConclusion: This world is indeed mysterious So, that\u0026rsquo;s the Collatz Conjecture.\nEven though it\u0026rsquo;s super simple No one can prove it It\u0026rsquo;s a huge problem in the math community It\u0026rsquo;s an existence like a cluster of mysteries.\nEven programming beginners can try it, so please definitely play with it~!\nRecommended Links (For interested people) Wikipedia: Collatz conjecture Terence Tao Paper (English) It\u0026rsquo;s also fun to try making a visualizer in Python! (I\u0026rsquo;ll make one if there\u0026rsquo;s a request) If you want to know more about this kind of \u0026ldquo;mysterious math x programming\u0026rdquo; topics, please feel free to request \u0026ldquo;tell me more\u0026rdquo;. Eventually, I\u0026rsquo;ll introduce various things like the Riemann hypothesis and prime numbers!\n📮 The End!\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/en/p/%E3%82%B3%E3%83%A9%E3%83%83%E3%83%84%E4%BA%88%E6%83%B3/","title":"Collatz Conjecture"},{"content":"How to Post Messages to Microsoft Teams from C++ (WinHTTP + Graph API) I want to automatically post to a Microsoft Teams chat \u0026ndash;\nMicrosoft Graph API is exactly what you can use in such cases.\nIn this article, I will introduce a C++ code example using WinHTTP ** and the ** necessary API authentication steps step by step.\n🔧 Necessary Preparations (Microsoft Graph API Authentication Settings) 1. Register App in Azure Portal First, to use the Microsoft Graph API, you need to register an app in Azure.\nAccess the Azure Portal \u0026ldquo;Microsoft Entra ID \u0026rdquo; \u0026gt; \u0026ldquo;+ Add \u0026rdquo; \u0026gt; \u0026ldquo; App registrations \u0026rdquo; \u0026gt; \u0026ldquo; New registration\u0026rdquo; Enter any app name and click \u0026ldquo;Register\u0026rdquo; 2. Add API Permissions Go to the \u0026ldquo;API permissions\u0026rdquo; left menu Under \u0026ldquo;Microsoft Graph \u0026rdquo; \u0026gt; \u0026ldquo; Add a permission \u0026rdquo;, search for the following scopes and click \u0026ldquo; Update permissions\u0026rdquo; Chat.ReadWrite User.Read If you want to post to a channel, ChannelMessage.Send is also required 3. Note Client ID and Tenant ID Make a note of the following two items displayed on the \u0026ldquo;Overview\u0026rdquo; tab:\nApplication (client) ID Directory (tenant) ID 4. Create Client Secret Go to the \u0026ldquo;Certificates \u0026amp; secrets\u0026rdquo; tab \u0026ldquo;New client secret\u0026rdquo; \u0026gt; set the expiration date, and click \u0026ldquo;Add\u0026rdquo; Be sure to note ** the displayed value (secret) ** on the spot 🔐 Obtaining an Access Token (OAuth2) Use the client_credentials flow to obtain it.\nRun the following command with curl to obtain an access token.\n1 2 3 4 5 6 7 curl -X POST ^ https://login.microsoftonline.com/{tenant_id}/oauth2/v2.0/token ^ -H \u0026#34;Content-Type: application/x-www-form-urlencoded\u0026#34; ^ -d \u0026#34;client_id={client_id}\u0026#34; ^ -d \u0026#34;scope=https%3A%2F%2Fgraph.microsoft.com%2F.default\u0026#34; ^ -d \u0026#34;client_secret={client_secret}\u0026#34; ^ -d \u0026#34;grant_type=client_credentials\u0026#34; Example Response 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... (omitted)\u0026#34; } Call the Microsoft Graph API using this access_token.\n💬 C++ Sample for Posting to Teams Chat Here is a C++ example of posting to a chat using 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; } 🔍 How to Get Chat ID You can check the Chat ID with 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; Example Response 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; } ] } 📌 Points to Note This sample is a minimal implementation. In actual operation: Token expiration handling HTTPS certificate validation Enhanced error handling For channel posting, use teams/{team-id}/channels/{channel-id}/messages. Sending attachments requires multipart processing or the Graph Drive API. Summary 📎 Summary Feature Overview Graph API Official API to interact with Teams App Registration Required authentication procedures on Azure Access Token Obtained via OAuth2, used for requests C++ Implementation Call Graph API using WinHTTP 🚀 Next Steps As more advanced samples, the following are also possible:\nTeam channel posting (/teams/{team-id}/channels/...) Posting with attachments Switching between bot accounts and user accounts Full C++ implementation including token acquisition If you have any requests, please feel free to comment!\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/en/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/","title":"How to Post Messages to Microsoft Teams from C++ (WinHTTP + Graph API)"},{"content":"I have summarized information about the \u0026ldquo;required\u0026rdquo; mark in overseas screen UI (forms), along with UI guideline materials.\n📌 Main Required Marks and Best Practices Using an Asterisk (*)\nThis is generally the most widespread method, adding \u0026ldquo;*\u0026rdquo; to required fields. However, an explanation such as \u0026ldquo;* indicates a required field\u0026rdquo; at the beginning of the form is essential (Nielsen Norman Group, California State University, Northridge). There are also examples that use color for emphasis (such as red text). Clearly Stating \u0026ldquo;Required\u0026rdquo; or \u0026ldquo;(required)\u0026rdquo; in the Label\nBy explicitly adding \u0026ldquo;Required\u0026rdquo; in text within the label, it can be clearly communicated to screen readers, improving accessibility (Deque). Using ARIA Attributes or HTML5 required Attribute in Conjunction\nIn addition to visual indication, using aria-required=\u0026quot;true\u0026quot; or \u0026lt;input required\u0026gt; allows you to programmatically communicate that a field is required (Deque). Clearly Stating Optional Fields Using \u0026ldquo;(optional)\u0026rdquo;\nThere is also a method of explicitly indicating optional fields as \u0026ldquo;(optional)\u0026rdquo; instead of required fields, which is effective when both are mixed. However, Nielsen-Norman points out that \u0026ldquo;it is easier to judge if required fields are also explicitly indicated\u0026rdquo; (TPGi). ✅ Summary of UI Guideline Materials Source Content NN/g: Marking Required Fields in Forms A combination of an asterisk + explanatory text is recommended, and showing only optional fields is evaluated as unfriendly (Nielsen Norman Group). Deque (Anatomy of Accessible Forms) - Use the string \u0026ldquo;Required\u0026rdquo; or an image within the label.\n- Explicitly states that suggesting by color alone is insufficient. W3C Techniques (H90) There are examples of including an asterisk or \u0026ldquo;(required)\u0026rdquo; in the label and defining the meaning at the beginning of the form. TPGi (Doing what\u0026rsquo;s required) Considering accessibility, evaluated that an asterisk + ARIA attribute + inserting label text is optimal. Contensis UX Forms Guidelines Briefly summarizes that consistent marking (* or (optional)) is important. ✅ Recommended Implementation Approach Add an explanatory text at the beginning of the form:\nFields marked with * are required. (Or collectively \u0026ldquo;All fields are required\u0026rdquo;, and if there are optional fields, \u0026ldquo;unless marked optional\u0026rdquo;)\nApplying Labels:\nWrite it like First Name * or Email (required). ARIA Attributes / HTML5 Attributes:\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; Do not rely on color alone: Support both visual and programmatic indications.\n🔗 Reference Links (UI Guideline Materials) 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) If necessary, I can also provide specific HTML/CSS code examples, UI component design templates for Sketch/Figma, etc. Please feel free to consult with me!\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/en/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":"About Required Marks in Input Forms"},{"content":"[For Beginners] How to Install Gemini CLI on Windows \u0026ldquo;Gemini CLI\u0026rdquo; allows you to use Google\u0026rsquo;s generative AI \u0026ldquo;Gemini\u0026rdquo; from the command line. In this article, we will explain the steps to install Gemini CLI in a Windows environment as easily as possible.\n1. Preparation: Install Node.js and npm First, since Gemini CLI runs on an environment called \u0026ldquo;Node.js\u0026rdquo;, you need to have the following installed:\nNode.js npm (Package management tool included with Node.js) npx (Command execution tool included with npm) Please download the Windows version of Node.js from the official website below (the LTS version is recommended):\n👉 Node.js Official Website\nOnce the installation is complete, let\u0026rsquo;s verify if it was installed correctly with the following commands.\n1 2 node -v npm -v 2. Launch PowerShell To use Gemini CLI on Windows, it is common to operate it using PowerShell. Type \u0026ldquo;PowerShell\u0026rdquo; in the Start menu to launch it.\n3. Install Gemini CLI Copy and paste the following command into PowerShell and execute it:\n1 npx @google/gemini-cli This command temporarily executes the Gemini CLI package published by Google. You may be prompted for initial setup or login if necessary.\nNote: It may take a few minutes the first time. If you encounter an error, please double-check your Node.js or network environment. 4. Installation Complete! What to do next Now, Gemini CLI has been installed on Windows. From now on, you will be able to perform various operations using Gemini from the command line, such as text generation and code completion.\nIf you want to check the official documentation or help, you can also utilize commands like the following.\n1 npx @google/gemini-cli --help Conclusion Let\u0026rsquo;s review the steps to introduce Gemini CLI to Windows.\nInstall Node.js and npm Launch PowerShell Execute npx @google/gemini-cli Now you\u0026rsquo;re all set! If you want to use generative AI locally, please give it a try using these steps as a reference.\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/en/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/","title":"How to Install Gemini CLI on Windows Environment"},{"content":"I\u0026rsquo;ve been awarded Microsoft MVP (2025-2026) again! Hello, I\u0026rsquo;m kenji.\nI have an announcement. I was awarded the Microsoft MVP (Most Valuable Professional) again this year. This is my ** 9th time** receiving the award.\nThank you so much to everyone who always supports me.\nWhat is Microsoft MVP? When you hear \u0026ldquo;MVP\u0026rdquo;, many of you might think of the most valuable player in sports, but the MVP here is a title given to those who contribute to Microsoft\u0026rsquo;s technical community.\nSpecifically,\nSharing information on tech blogs and social media Publishing sample code on GitHub Speaking at study sessions and conferences Answering questions on Q\u0026amp;A sites Technical exchange and collaboration with developers overseas Participating and posting in communities where engineers connect with each other It\u0026rsquo;s a system that evaluates activities like \u0026ldquo;sharing one\u0026rsquo;s own knowledge and experiences for others\u0026rdquo;.\nThere are awardees all over the world, but the number of people selected each year is limited, and being awarded again is by no means easy. That\u0026rsquo;s why it is a real honor to be recognized in this way.\nWhat I focused on this past year This year, I put effort into sharing information with an awareness of making technology \u0026ldquo;easy to understand\u0026rdquo; and \u0026ldquo;accessible\u0026rdquo;.\nPublishing practical sample code on GitHub Speaking at study sessions and conferences (both domestic and international) Regular information sharing through tech blogs and social media Continuous answering activities on Q\u0026amp;A sites Knowledge sharing on engineer community sites Communication and joint verification with engineers overseas Among them, publishing code on GitHub was particularly memorable because I sometimes received feedback like, \u0026ldquo;I was struggling with the exact same thing, so this helped!\u0026rdquo; which made me realize that my efforts are helping others with their development.\nAlso, I received feedback during my event presentations that it was \u0026ldquo;easy to understand even for beginners\u0026rdquo;, which served as a good opportunity to think about \u0026ldquo;what makes an effective technical explanation?\u0026rdquo;.\nLooking towards next year The evolution of technology is incredibly fast, and just keeping up with it is tough. Even so, I believe there is great value in delivering real knowledge as \u0026ldquo;primary information\u0026rdquo;, such as the actual experiences I gained from trying things out and the points where I stumbled.\nNext year, I want to take on the challenge of publishing \u0026ldquo;visually easy-to-understand technical content\u0026rdquo; incorporating videos and diagrams. I hope to increase the kind of output that can even slightly resolve someone\u0026rsquo;s \u0026ldquo;I\u0026rsquo;m stuck!\u0026rdquo; moments.\nFinally The title of MVP is ultimately just one milestone.\nI will continue at my own pace, without overdoing it. But while making sure to be of help to someone.\n\u0026ldquo;This saved me when I was looking it up\u0026rdquo; \u0026ldquo;This sample worked!\u0026rdquo; \u0026ldquo;This talk was easy to understand\u0026rdquo;\nI want to continue being the kind of engineer that people say these things about.\nThank you very much for your continued support.\nGitHub: https://github.com/kenjinote Tech Blog: 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/en/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/","title":"I have been awarded Microsoft MVP (2025-2026) again"},{"content":"The Appeal and Challenges of Developing with Win32API + C++ For those who want to master Windows application development, Win32API + C++ remains a powerful option today. This combination, which allows for interacting with the OS at the closest distance, combines high speed and flexibility.\nOn the other hand, since it is vastly different from modern development styles, learning it requires dedication.\nOn this page, from the perspective of an active Windows app developer, we explain its advantages and disadvantages in an easy-to-understand manner.\nAdvantages Ultra-Fast Native Execution Because C++ and Win32API operate at the layer closest to the OS, there is almost no unnecessary overhead. It boasts overwhelming execution speed and highly efficient use of CPU and memory.\nHigh Flexibility and Freedom You can minutely control all aspects of an application yourself, such as window control, asynchronous processing, COM integration, and process management. It\u0026rsquo;s also possible to build purpose-built tools and your own custom frameworks.\nEasy to Distribute Without Runtimes Since external runtimes like .NET or Java are unnecessary, it can be distributed as a single executable file. Troubles during redistribution are less likely to occur, and it\u0026rsquo;s appealing that it can easily run without an installer.\nCapable of Creating Lightweight Apps Because it requires only a bare-minimum configuration, a major feature is its extremely small memory footprint. It runs comfortably even on low-spec PCs or in virtual machine environments.\nAdvanced OS-Level Control is Possible Global hooks for mouse and keyboard, fine-tuning of window styles, manipulation of system menus, and other forms of control that are difficult with standard languages and libraries can be realized.\nDisadvantages Low Development Efficiency GUI construction must also be done entirely in code, and creating a single button can sometimes require dozens of lines of code. Modifications during design changes are also cumbersome, making productivity lower compared to developing with UI frameworks.\nMaintainability Tends to Decrease The code often has a specialized structure, such as message loops and window procedures, leading to issues with readability and reusability. It also has aspects that make it unsuitable for team development and long-term maintenance.\nDifficult to Support Modern UI Supporting UX expected in recent years, such as high DPI support, touch interfaces, accessibility, and dark mode, is difficult. Each must be handled manually one by one, which requires a lot of effort.\nNo Cross-Platform Support Because it is a completely Windows-exclusive API, it cannot be ported to macOS or Linux. If you are planning multi-platform deployment, you will need to select other technologies.\nExtremely High Learning Cost You must understand concepts and mechanisms that are rarely used today, such as handles, GDI, COM, and OLE. Much of the documentation is old, requiring time and perseverance to learn.\nSuitable Uses Lightweight tools such as file launchers and hotkey assistants System utilities like clipboard manipulation and IME control Native control applications like global hooks and window captures Driver auxiliary tools that work closely with hardware Unsuitable Uses General consumer apps where modern UI/UX is important Prototyping and MVP development built with a priority on speed Large-scale projects intended for long-term operation and team development Cross-platform products that need to support multiple OSs Evaluation Summary Aspect Evaluation Execution Speed ◎ Very Fast Memory Efficiency ◎ Excellent Development Speed × Slow Maintainability × Low Cross-Platform Support × Not Supported Modern UI Support × Weak Freedom of OS Control ◎ Overwhelmingly High Conclusion Win32API + C++ is a tool suited for developers who want to \u0026ldquo;handle everything in the OS themselves.\u0026rdquo; While its power is immense, learning and operating it requires a corresponding level of dedication.\nWhether it\u0026rsquo;s worth \u0026ldquo;daring to choose\u0026rdquo; it depends entirely on the nature of the app you are aiming for.\nDiving into the world of #include \u0026lt;windows.h\u0026gt; without relying on GUI frameworks or modern languages―― That choice still remains meaningful today.\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/en/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":"Advantages and Disadvantages of Creating Programs with Win32API + C++"},{"content":"For using libcurl (with OpenSSL support) in Visual Studio, vcpkg is easy and recommended When you want to handle HTTP communication in C++, libcurl is often used. However, adjusting builds and dependencies can be unexpectedly troublesome, right?\nIn such cases, the Microsoft-made C++ library management tool \u0026ldquo;vcpkg\u0026rdquo; is very useful. This time, we will introduce the steps from introducing libcurl (with OpenSSL support) using vcpkg to making it smooth to use in Visual Studio.\nInstalling vcpkg (Only for those who haven\u0026rsquo;t installed it yet) First, let\u0026rsquo;s install vcpkg. Please run the following steps in PowerShell.\n1 2 3 git clone https://github.com/microsoft/vcpkg cd vcpkg .\\bootstrap-vcpkg.bat If Git is not installed yet, please install it from the Git official website. Installing libcurl (with OpenSSL support) Next, we will use vcpkg to install libcurl. To specify the 64bit version with OpenSSL support, run the following command.\n1 vcpkg install curl[ssl] --triplet x64-windows When this command is run, necessary dependencies (such as OpenSSL) are also set up automatically.\nIntegration settings with Visual Studio To easily use the library introduced by vcpkg from a Visual Studio project, configure the integration setting with the following command.\n1 vcpkg integrate install By doing this setting, #include \u0026lt;curl/curl.h\u0026gt; can be automatically used in Visual Studio projects, eliminating the need to manually set up library paths and linker settings.\nConclusion With this, the preparation to introduce libcurl (with OpenSSL support) into Visual Studio is complete.\nWith vcpkg, troublesome dependencies can be managed all at once. Easily introduce libcurl with vcpkg install curl[ssl] --triplet x64-windows Automatic integration with Visual Studio is possible with vcpkg integrate install After this, just include the header in your project and start developing using the libcurl API. Please utilize the convenient vcpkg and dramatically increase your development efficiency.\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/en/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":"[For Beginners] Steps to Install libcurl (with OpenSSL support) in Visual Studio using vcpkg"},{"content":"\u0026ldquo;Mental Security\u0026rdquo; Needed to Avoid Being Drawn into Conspiracy Theories When browsing the internet, you may sometimes come across \u0026ldquo;conspiracy theory\u0026rdquo;-like stories.\n\u0026ldquo;Isn\u0026rsquo;t there someone operating behind the scenes of this event?\u0026rdquo; \u0026ldquo;Could the real truth be hidden?\u0026rdquo; Many of you have probably seen such narratives spread in a plausible manner.\nTo avoid being drawn too deeply into such information, it is very important to develop not only \u0026ldquo;knowledge\u0026rdquo; and \u0026ldquo;thinking skills\u0026rdquo; but also your state of mind—in other words, your \u0026ldquo;mental security.\u0026rdquo;\nHere are six effective ways of thinking for this purpose.\nDo Not Immediately Connect Anxiety with an \u0026ldquo;Answer\u0026rdquo; A major characteristic of conspiracy theories is that they present a clear and simple \u0026ldquo;answer\u0026rdquo; to anxieties and questions.\nFor example, to questions like:\n\u0026ldquo;Why did such an incident happen?\u0026rdquo; \u0026ldquo;Who is benefiting from this?\u0026rdquo; When a plot like \u0026ldquo;Actually, XX is manipulating things behind the scenes\u0026rdquo; is shown, it is easy to inadvertently be convinced.\nHowever, especially when you feel anxious, it is important to reserve judgment and not jump to conclusions right away.\nThe \u0026ldquo;ability to remain in a state of not knowing\u0026rdquo; is a sign of intellectual maturity.\nIntentionally Broaden Your Information Sources Many people who fall deep into conspiracy theories tend to intensively view only \u0026ldquo;information with similar perspectives.\u0026rdquo;\nThis is called \u0026ldquo;confirmation bias,\u0026rdquo; a psychological bias where one is exposed only to information that reinforces one\u0026rsquo;s existing beliefs.\nIn particular, the algorithms of social media and video sites constantly push posts that seem to match your preferences, which can naturally narrow your perspective.\nConsciously aiming for a diversification of information sources can help avoid this risk, such as:\nAccessing media with different viewpoints Viewing overseas news and academic sources Listening to opinions that differ from your own Do Not Think \u0026ldquo;I Won\u0026rsquo;t Be Fooled\u0026rdquo; People who are knowledgeable or logical can actually be more susceptible to being drawn into conspiracy theories.\nIf you assume, \u0026ldquo;I can notice the truth that others don\u0026rsquo;t,\u0026rdquo; that becomes a factor that clouds your judgment.\nNo matter how careful you are, humans make mistakes. That is exactly why acting on the premise that you too might be fooled can be considered a more rational attitude.\n\u0026ldquo;Doubting, yet not jumping to conclusions\u0026rdquo; becomes your defense.\nLook at the Structure, Without Being Pulled by the Story Conspiracy theories always come with a \u0026ldquo;dramatic narrative.\u0026rdquo;\nThe conflict between good and evil Rulers and the ruled The awakened self vs. the brainwashed others Such simple dichotomies may be attractive as a story, but they do not necessarily reflect reality correctly.\nReal-world events and social movements involve a tangle of many elements, such as complex causal relationships, historical backgrounds, and institutional structures.\nIt is important to have a perspective that understands structurally \u0026ldquo;why things are the way they are,\u0026rdquo; without getting too emotionally pulled into the story.\nDo Not Leave Loneliness Unaddressed Behind the strong attraction to conspiracy theories, there may be hidden \u0026ldquo;isolation\u0026rdquo; or a \u0026ldquo;lack of a place to belong.\u0026rdquo;\nWhen people feel lonely, they become deeply dependent on individuals or groups that understand them. Conspiracy theory communities can sometimes function as that \u0026ldquo;place to belong.\u0026rdquo;\nTherefore, making efforts not to become lonely also contributes to your mental security.\nFor example, actions such as:\nHaving regular conversations with people Joining communities where you can share hobbies and interests Having connections offline, not just online can lead to mental stability.\nFocus on Dialogue Rather Than Denial Even if someone close to you leans toward conspiracy theories, denying them outright can backfire.\nWhen their beliefs are denied, people tend to psychologically protect them (known as \u0026ldquo;defensive cognition\u0026rdquo;).\nInstead, taking a dialogue-based approach can create the possibility of naturally broadening the other person\u0026rsquo;s perspective:\nAsking carefully, \u0026ldquo;What made you think that?\u0026rdquo; Gently offering your own perspective, such as \u0026ldquo;There might be this way of thinking too.\u0026rdquo; Conclusion: What You Can Do to Keep Your Distance from Conspiracy Theories Have the ability to suspend judgment and not immediately connect anxiety with answers Diversify information sources and be aware of biases Recognize that your own judgment is not absolute Look at things through structures and causal relationships, not stories Avoid loneliness and maintain connections Face others\u0026rsquo; conspiracy theories with dialogue rather than denial It is said that whether one is attracted to conspiracy theories is influenced more by psychological states and environmental factors than by the amount of knowledge.\nTherefore, without assuming \u0026ldquo;I am fine,\u0026rdquo; making a gradual effort in your daily life to enhance your mental security will surely become a great support for living flexibly in the future information society.\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/en/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":"What it Takes to Avoid Falling for Conspiracy Theories"},{"content":"History of Low-Code / No-Code Development (1980s - Present) Low-code / no-code development is a development method that allows you to create applications, websites, and databases without specialized programming knowledge. This concept began in the 1980s and has developed into various platforms along with the spread of PCs, the evolution of the Internet, and the expansion of cloud technology. In this article, we will introduce representative tools and services by decade, along with their features and prices.\n1980s: The Early Days HyperCard (Apple, 1987) An app creation tool for Macintosh. It composed screens in a card format and allowed GUI creation via drag-and-drop. Simple behavior control was also possible with its unique scripting language, \u0026ldquo;HyperTalk.\u0026rdquo; It was favored for prototyping purposes. The price at launch was $49.95, and it was later provided free of charge to new Mac purchasers. The final version was released in 1998, with no support for Mac OS X or later.\nFileMaker (Claris/Apple, 1985) Graphical database software. In addition to tabular data display, it is a relational DB tool equipped with free layout editing and scripting functions. It is currently provided as \u0026ldquo;Claris FileMaker Pro,\u0026rdquo; with a full license version priced at $594 (as of 2024).\n1990s: The Rise of GUI Apps and Business Systems Development Visual Basic (Microsoft, 1991) An IDE specialized for Windows app development. By dragging and dropping GUI components like buttons and labels, event-driven apps could be easily built. With VB6.0 in 1998 being the last, it transitioned to the .NET era.\nMicrosoft Access (1992) A database development tool for Windows. It enabled relational DB design and form creation via GUI, and was widely used for general business app development. It is currently provided as part of Microsoft 365.\nPowerBuilder (PowerSoft/Sybase, 1991) A 4GL development tool for business applications. It supported client/server architecture and had strengths in database integration. It is currently still being provided under the SAP umbrella.\nDreamweaver (Macromedia, 1997) A WYSIWYG tool that allowed visual web page creation. It enabled switching between HTML editing and design views, and also supported ASP and PHP. It is currently provided by Adobe and available via subscription (about $34.49 per month).\nFlash (Macromedia, 1996) Originally developed as FutureSplash Animator, a vector animation production tool. It was later utilized for creating interactive content for the Web, but support ended in 2020 due to security concerns.\nGameMaker (1999) A 2D game creation tool for beginners. Object placement and event control are possible via drag-and-drop. It later supported scripting (GML) as well, and currently multiple plans are offered for commercial use.\n2000s: The Spread of Web-Based and Open Source WordPress (2003) An open-source CMS using PHP and MySQL. It allows the construction of blogs and corporate sites using themes and plugins without programming knowledge. Distributed for free, it is one of the most widely used CMSs in the world.\nWix (2006) A no-code service that allows you to build websites on a browser. You can choose a template and edit it via drag-and-drop. In addition to the free plan, custom domains and e-commerce features are available in paid plans.\nOutSystems (2001) A low-code platform for enterprises. Because it allows rapid development of business systems, its adoption by large corporations and government agencies is progressing. It supports both cloud and on-premises environments.\nScratch (MIT, 2007) A programming learning tool developed for children. By combining colored blocks, you can create games and animations, and it is widely used in educational settings. Provided free of charge.\nAirtable (2013) A cloud-based service combining spreadsheets and databases. It looks similar to Excel but enables relations, Kanban views, API integration, and more. It is widely used by everyone from individuals to corporations.\n2010s-2020s: The Era of Cloud and Automation In recent years, cloud-based low-code / no-code tools have evolved rapidly.\nPower Platform (Microsoft) An integrated business app development and automation platform including \u0026ldquo;Power Apps\u0026rdquo; and \u0026ldquo;Power Automate.\u0026rdquo; It allows you to visually construct corporate business processes via drag-and-drop.\nSalesforce Lightning Platform An app development platform provided by the CRM Salesforce. Business apps can be created via GUI, and integration with other Salesforce services is easy.\nZapier / IFTTT Automation tools that allow integration between multiple cloud services without coding. For example, workflows like \u0026ldquo;Notify Slack when Google Forms is submitted\u0026rdquo; can be easily realized.\nNotion (2010s) An all-in-one workspace integrating document management, task management, Wiki, etc. It also has a custom database feature, which is useful for business improvement without coding.\nConstruct 3 / GameSalad Tools that allow you to make games via drag-and-drop. Construct 3 is HTML5 compatible and works on browsers as well, making it popular in educational settings and among indie developers.\nInformation Sources and Supplementary Details This article is composed based on the official websites of each product, Wikipedia, and highly reliable materials and articles (Apple, Microsoft, Adobe, etc.). Price information refers to official information from the time or the latest available, as much as possible (prices listed are mainly in US dollars). Many of the tools since the 2000s are subscription-based, and fees vary by plan.\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/en/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/","title":"History of No-Code in Local Environments"},{"content":"What exactly is FizzBuzz, anyway? Hello!\nToday, I\u0026rsquo;d like to write about \u0026ldquo;FizzBuzz\u0026rdquo;.\nWhether you\u0026rsquo;re thinking, \u0026ldquo;Ah, I know that one!\u0026rdquo; or \u0026ldquo;I\u0026rsquo;ve heard of it, but don\u0026rsquo;t really get it,\u0026rdquo; please stick with me for a bit. It takes just a few minutes to read, and you might just have an \u0026ldquo;aha\u0026rdquo; moment.\nIs it true that \u0026ldquo;you\u0026rsquo;re disqualified as a programmer if you can\u0026rsquo;t write FizzBuzz\u0026rdquo;? Roughly speaking, FizzBuzz looks like this.\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) Yes, this is the famous \u0026ldquo;FizzBuzz problem.\u0026rdquo;\nYou go through the numbers from 1 to 100 in order,\nif it\u0026rsquo;s a multiple of 3, print \u0026ldquo;Fizz\u0026rdquo;, if it\u0026rsquo;s a multiple of 5, print \u0026ldquo;Buzz\u0026rdquo;,\nand if it\u0026rsquo;s a multiple of both, print \u0026ldquo;FizzBuzz.\u0026rdquo; It\u0026rsquo;s extremely simple.\nAnd yet, for some reason, it\u0026rsquo;s often treated like a \u0026ldquo;minimum test for programmers.\u0026rdquo; It comes up in interviews, and on social media you\u0026rsquo;ll occasionally see people flexing with comments like, \u0026ldquo;If you can\u0026rsquo;t even write FizzBuzz\u0026hellip;\u0026rdquo;\nBut wait a minute.\nCan we really definitively say, \u0026ldquo;Couldn\u0026rsquo;t write FizzBuzz = can\u0026rsquo;t program\u0026rdquo;?\nIt\u0026rsquo;s not about whether you can do it, but whether you\u0026rsquo;re in a \u0026ldquo;state\u0026rdquo; to do it It\u0026rsquo;s true that FizzBuzz requires an understanding of syntax and basic logical thinking. So it makes sense that it\u0026rsquo;s used to \u0026ldquo;check the basics.\u0026rdquo;\nBut, hear me out.\nIf the environment is different, the results will be different.\nFor example,\nWhen you\u0026rsquo;re nervous in front of an interviewer you\u0026rsquo;ve just met When you\u0026rsquo;re suddenly handed a whiteboard and don\u0026rsquo;t have an editor at hand When you suddenly draw a blank and think, \u0026ldquo;Wait, what\u0026rsquo;s modulo again?\u0026rdquo; \u0026hellip;Doesn\u0026rsquo;t that happen? We\u0026rsquo;re human, after all. I think it does.\nTherefore, rather than \u0026ldquo;whether you can write FizzBuzz,\u0026rdquo; I think what\u0026rsquo;s actually more important is \u0026ldquo;whether you can get yourself into a state where you can write FizzBuzz.\u0026rdquo;\nThe pitfall of the common advice to \u0026ldquo;just train and you\u0026rsquo;ll be fine\u0026rdquo; When this topic comes up, the advice \u0026ldquo;so practice every day!\u0026rdquo; tends to appear.\nIt\u0026rsquo;s true that repeated practice will enable you to write it smoothly, and that in itself is a good thing. But if you stand on the premise that \u0026ldquo;you\u0026rsquo;re disqualified if you can\u0026rsquo;t write FizzBuzz,\u0026rdquo; it can turn into pure fear.\nIn other words, it tends to create a structure where you feel, \u0026ldquo;I made a mistake = I\u0026rsquo;m useless.\u0026rdquo;\nFor example, on days when you oversleep, don\u0026rsquo;t you tend to think, \u0026ldquo;I\u0026rsquo;m lazy\u0026hellip;\u0026rdquo;? But it might just be that your body was accidentally tired.\nThe same goes for FizzBuzz.\nThat being said, FizzBuzz is still a good question That being said, there\u0026rsquo;s nothing wrong with FizzBuzz.\nRather, I think it\u0026rsquo;s a very well-made question. The rules are simple, and it\u0026rsquo;s easy to expand. For example, if you change it like this, it deepens your thinking even more.\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) This is an example showing that \u0026ldquo;you don\u0026rsquo;t have to use if-elif-else to write it.\u0026rdquo; It\u0026rsquo;s a bit smart, isn\u0026rsquo;t it?\nIn other words, FizzBuzz doesn\u0026rsquo;t just show \u0026ldquo;whether you could do it,\u0026rdquo; but also serves as an entry point to see \u0026ldquo;how you write it\u0026rdquo; and \u0026ldquo;how deeply you understand it.\u0026rdquo;\nIn conclusion I don\u0026rsquo;t think you need to attach excessive meaning to whether you can do FizzBuzz or not.\nEven if you couldn\u0026rsquo;t write it, it might simply mean \u0026ldquo;you were just a little off your game,\u0026rdquo; and often you can do it if you think about it carefully later.\nLet\u0026rsquo;s not rush and proceed slowly.\nCode is written by humans. Because we\u0026rsquo;re human, there are times when we forget things or get nervous. I think it\u0026rsquo;s enough if we can accept that and move forward little by little.\nWell then, let\u0026rsquo;s take it easy and write some code today too.\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/en/p/fizzbuzz/","title":"FizzBuzz"},{"content":"Tower of Hanoi Hello!\nToday, I would like to explain the \u0026ldquo;Tower of Hanoi\u0026rdquo; along with a Python sample program.\nWhat is the Tower of Hanoi? The Tower of Hanoi is a puzzle using three rods and multiple disks. The disks vary in size and are initially stacked on one rod in decreasing order of size. The rules are as follows:\nOnly one disk can be moved at a time. A larger disk cannot be placed on top of a smaller disk. This puzzle is considered an excellent teaching material for learning recursive thinking. Recursion is a method of solving a problem by breaking it down into smaller problems of the same type. In the Tower of Hanoi, to move n disks, the operation of moving n-1 disks is repeated.\nLet\u0026rsquo;s Solve the Tower of Hanoi in Python Below is a sample code to solve the Tower of Hanoi in 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) # Example: Move 3 disks from A to C hanoi(3, \u0026#39;A\u0026#39;, \u0026#39;C\u0026#39;, \u0026#39;B\u0026#39;) In this code, the hanoi function is called recursively, and the steps to move the disks are printed. For example, in the case of 3 disks, you will get the following output:\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 In this way, by using a recursive approach, even complex problems can be solved simply.\nHow Long Does It Take to Move 64 Disks? The minimum number of moves for the Tower of Hanoi is 2^n - 1. This means that to move 64 disks, it requires 2^64 - 1 moves, or approximately 1.84 × 10^19 moves. Even if you could make one move per second, it would take about 584.9 billion years. This is roughly 42 times the age of the universe (about 13.7 billion years).\nThus, as the number of disks increases, the required number of moves increases exponentially. Therefore, it is not realistic to actually move 64 disks.\nConclusion The Tower of Hanoi is a perfect puzzle for learning recursive thinking. Using Python, you can easily implement its solution. However, care must be taken as the required number of moves increases sharply as the number of disks increases.\nBy understanding the recursive approach and actually writing the code, you can improve your programming skills. By all means, give the Tower of Hanoi a try.\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/en/p/%E3%83%8F%E3%83%8E%E3%82%A4%E3%81%AE%E5%A1%94/","title":"Tower of Hanoi"},{"content":"Number of Lines of Source Code Hello!\nToday, I would like to talk about a slightly unusual theme.\nIt\u0026rsquo;s about \u0026ldquo;How much has the number of lines of source code increased compared to the past?\u0026rdquo;\nFor example, the space shuttle\u0026rsquo;s software consisted of about 420,000 lines of code. This code was developed with very strict processes to meet NASA\u0026rsquo;s high quality standards. On the other hand, in modern large-scale software projects, it is not uncommon for the number of lines of code to exceed tens of millions. For instance, Google\u0026rsquo;s codebase is said to reach about 2 billion lines.\nIn this way, the scale of software has grown along with the times.\nBut, wait a minute.\nAn increase in the number of lines of code is not necessarily a bad thing. In order to add new features or meet user needs, it is natural for code to increase. However, as the code increases, the risk of bugs also rises. In fact, a study shows that when open source projects exceed 1 million lines, the incidence of bugs tends to increase.\nThat being said, not all projects are increasing code in the same way.\nFor example, the Linux kernel had about 200,000 lines in version 1.0 in 1994, but increased to about 20 million lines in version 4.2 in 2015. This increase is to accommodate the evolution of hardware and the addition of new features.\nSo, the number of lines of source code varies greatly depending on the scale and purpose of the project, as well as the historical context.\nThe increase in lines of code itself is not a problem, but appropriate management is necessary to maintain quality and maintainability. It is important to understand the risks associated with the increase in code and take appropriate measures.\nFinally, I think it\u0026rsquo;s important not to get too caught up in the number of lines of code, but to focus on the purpose and quality of the project.\nWell then, see you next time!\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/en/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/","title":"Number of Lines of Source Code"},{"content":"Kerckhoffs\u0026rsquo;s Principle Hello!\nToday, I’d like to talk about something a bit interesting and actually incredibly important called \u0026ldquo;Kerckhoffs\u0026rsquo;s Principle\u0026rdquo;.\nAh, wait, wait. Some of you might be thinking, \u0026ldquo;I\u0026rsquo;ve never heard of \u0026lsquo;Kerckhoffs\u0026rsquo;s Principle,\u0026rsquo; and there are already too many katakana words\u0026hellip;\u0026rdquo; Don\u0026rsquo;t worry. This article is exactly for you.\nWhat does \u0026ldquo;Secure Cryptography\u0026rdquo; mean? For example, imagine someone telling you, \u0026ldquo;This safe can only be opened by someone who knows the secret way to open it.\u0026rdquo;\nAt first glance, that sounds very secure, right? But if you think about it closely, isn\u0026rsquo;t it a bit unsettling?\nLike, \u0026ldquo;If that secret leaks, isn\u0026rsquo;t it all over?\u0026rdquo;\nActually, this is exactly why Kerckhoffs\u0026rsquo;s Principle comes into play.\nWhat exactly is \u0026ldquo;Kerckhoffs\u0026rsquo;s Principle\u0026rdquo;? To put it very simply, it\u0026rsquo;s the idea that:\n\u0026ldquo;A cryptographic system should be secure even if its inner workings become public knowledge.\u0026rdquo;\nIn other words, \u0026ldquo;Security should rely solely on the \u0026lsquo;secret key\u0026rsquo;, and it\u0026rsquo;s perfectly fine for the encryption method itself to be public!\u0026rdquo;\nConversely, \u0026ldquo;A system that only relies on keeping the cryptographic algorithm (mechanism) a secret is considered to have low reliability.\u0026rdquo;\n\u0026ldquo;It\u0026rsquo;s safe because the mechanism is a secret\u0026rdquo; might be a bit dangerous A common line of thought goes like this:\n\u0026ldquo;Nobody has seen the inside of this app, so the security is fine.\u0026rdquo;\nI understand the sentiment. But that\u0026rsquo;s basically the same as saying, \u0026ldquo;Nobody is looking, so nobody will find any flaws, so it must be fine.\u0026rdquo;\nIn reality, the very fact that \u0026ldquo;nobody is looking\u0026rdquo; can become a risk in itself.\nBut why is this principle so important? The reason is, if someone manages to get their hands on the mechanism and can easily decrypt it, that encryption is compromised.\nTo use an analogy, it\u0026rsquo;s like a door lock built with a super complex mechanism, but which can actually be opened with a spare key made at a dollar store.\nIt\u0026rsquo;s not \u0026ldquo;It\u0026rsquo;s safe because the key is secret\u0026rdquo;, but rather \u0026ldquo;Even if you show the entire mechanism, it can\u0026rsquo;t be opened without the proper key\u0026rdquo; that is important.\nThe feeling of \u0026ldquo;But isn\u0026rsquo;t that kinda scary?\u0026rdquo; This is where many people feel:\n\u0026ldquo;Isn\u0026rsquo;t it kind of scary to expose the whole mechanism?\u0026rdquo;\nI get it. You can\u0026rsquo;t help but think, \u0026ldquo;If I show everything inside, won\u0026rsquo;t it be copied or misused?\u0026rdquo;\nBut that is exactly the core of Kerckhoffs\u0026rsquo;s Principle. The true security is the \u0026ldquo;strength that doesn\u0026rsquo;t collapse even if you show the inside\u0026rdquo;.\nThat being said, it takes a little courage at first Putting yourself in the shoes of a developer, \u0026ldquo;Making the mechanism public = exposing weaknesses\u0026rdquo;, so of course, it\u0026rsquo;s nerve-wracking.\nBut think about it.\nSomething that says \u0026ldquo;Anyone is welcome to verify it\u0026rdquo; while properly showing the mechanism will ultimately be trusted more.\nIt\u0026rsquo;s a lot like human relationships, isn\u0026rsquo;t it?\n\u0026ldquo;Someone who gets along with you after you\u0026rsquo;ve shown your true self\u0026rdquo; is, after all, the most comforting.\nSo Kerckhoffs\u0026rsquo;s Principle might sound a bit theoretical, but its essence is very simple.\nIt\u0026rsquo;s just about: \u0026ldquo;Let\u0026rsquo;s build a mechanism that won\u0026rsquo;t break no matter who sees it.\u0026rdquo;\nProper design over superficial secrets. Code you aren\u0026rsquo;t ashamed to show, rather than code you want to hide from everyone.\nPerhaps this kind of \u0026ldquo;strength\u0026rdquo; is what will be increasingly sought after in the coming era.\nThank you for reading!\nSecurity topics can be a bit difficult, but there are parts that connect to \u0026ldquo;human relationships\u0026rdquo; and a \u0026ldquo;sense of everyday security.\u0026rdquo; Without feeling pressured, learning about it little by little will surely bring something good.\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/en/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/","title":"Kerckhoffs's Principle"},{"content":"🎯 Steps to Execute PowerShell from C++ via C++/CLI DLL (Visual Studio 2022 / C++) ✅ Overall Structure 🔹 ① CLI Wrapper DLL (C++/CLI) Provides functionality to execute PowerShell scripts.\n🔹 ② Native C++ Caller Calls the CLI DLL to execute PowerShell scripts.\n🔧 Step 1: Create CLI Wrapper DLL Project 1. Create Project [Create a new project] → [C++] → CLR Class Library (.NET Framework) Name: PowerShellWrapper 💡 If this template is not displayed, install the \u0026ldquo;.NET desktop development\u0026rdquo; workload.\n2. Add NuGet Package Right-click the project → [Manage NuGet Packages] Search and install System.Management.Automation\n(Version 5.x or 7.x) 3. Implement CLI Side Code 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(); } 🔧 Step 2: Call from Native C++ 1. Create C++ Console App Project Name: NativeApp 2. Add Reference Right-click the project → [Add] → [Reference] → [Projects] → Add PowerShellWrapper [Configuration Properties] → [C/C++] → [Common Language Runtime Support] → Change to /clr 3. Execution Code (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; } 💡 Note (IDL / TLB / COM Registration) Since this configuration references the .NET DLL directly instead of using COM, IDL, TLB, and COM registration are not required. ✅ Final Structure 1 2 3 4 5 Solution ├── PowerShellWrapper (C++/CLI DLL) │ └── PowerShellExecutor ├── NativeApp (C++ EXE) └── main.cpp → Call 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/en/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":"Steps to Execute PowerShell from C++ via C++/CLI DLL"},{"content":"[Windows] How to check license status (just one command) Have you ever wondered if your Windows license is correctly activated?\nA very convenient method is to check your license information with a single command. By following the steps below, you can easily check your current license status.\nCommand to check license status You can display license information using a script tool built into Windows. Here is the command to use:\n1 slmgr /dli When you run this command, partial license information will be displayed in a window.\nHow to run Type \u0026ldquo;cmd\u0026rdquo; in the Start Menu, right-click on Command Prompt, and select \u0026ldquo;Run as administrator\u0026rdquo;.\nEnter the following into the command prompt and press the Enter key:\n1 slmgr /dli After waiting a few seconds, license information like the following will be displayed.\nMain information displayed Part of the product key License type (Retail, OEM, etc.) License status (Licensed, expired, not activated, etc.) Want to know more detailed information? There are also commands like the following:\nslmgr /dlv: Display more detailed license information slmgr /xpr: Display the license expiration date (e.g., whether it is permanent) Summary You can easily check the Windows license status with a single command.\nSimple check: slmgr /dli Detailed check: slmgr /dlv Expiration date check: slmgr /xpr If there is a problem with your license, updates or some functions may be restricted, so it is safe to check regularly.\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/en/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":"Command to check Windows license status"},{"content":"ffmpeg Conversion Parameters Optimized for iOS Here is an ffmpeg command to convert videos so they can be played smoothly on iOS devices (iPhone and 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 Meaning of Each Option (Brief Explanation) Option Description -i input.mp4 Input file (source video to be converted) -c:v libx264 Encode video with H.264 (iOS compatible) -profile:v high -level 4.1 Widely compatible profile and level for iOS -vf \u0026quot;scale=1920:-2\u0026quot; Resize width to 1920px, auto-adjust height maintaining aspect ratio -r 30 Convert to 30fps frame rate -crf 20 Video quality (lower value means higher quality, recommended 18-23) -preset slow Balance between encode speed and compression ratio (slow means high compression/high quality) -c:a aac Encode audio in AAC format -b:a 128k Set audio bitrate to 128kbps -ar 48000 Set audio sampling rate to 48kHz (recommended for iOS) -movflags +faststart Places the index at the beginning of the video, speeding up streaming playback on Web and iOS Videos converted with these settings can be expected to have high compatibility and smooth playback on Apple devices such as iPhones and iPads.\nYou can adjust file size and image quality by changing the resolution and bitrate as needed. Try setting -crf to around 18 if you need high quality, or 22-25 if you want to reduce the file size.\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/en/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":"ffmpeg Parameters for iOS"},{"content":"Android (Google Pixel) Device Restoration Procedure If your Google Pixel device experiences severe system issues such as \u0026ldquo;repeatedly restarting (boot loop),\u0026rdquo; \u0026ldquo;stuck on the logo screen,\u0026rdquo; or \u0026ldquo;extremely unstable operation,\u0026rdquo; you can safely repair (restore) the device\u0026rsquo;s software via a browser using the official \u0026ldquo;Pixel Update and Software Repair\u0026rdquo; tool provided by Google.\nThis article details the specific steps and precautions for this process.\n1. Access the Restoration Tool First, from a browser (Google Chrome or Microsoft Edge recommended) on your PC (Windows or Mac), access the official repair tool page below.\n🔗 Pixel Update and Software Repair Official Site\n※ Note ※ Executing the restoration process may completely erase (initialize) the data on your device (photos, apps, contacts, etc.). If the device is still operable, be sure to back up your data to Google Drive or elsewhere beforehand.\n2. Preparations for Restoration To ensure the process goes smoothly, make the following preparations:\nCharge the Battery If the power turns off midway, the device could be bricked (completely broken). Charge it to at least 50%, or preferably fully charged. Prepare a Genuine USB Cable To ensure stable data transfer, it is strongly recommended to use the genuine USB-C cable included with the device. Install Drivers (If Necessary) When using a Windows PC, the device may not be recognized correctly. In that case, please install the Google USB Driver. 3. Specific Restoration Steps Once preparations are complete, follow the on-screen instructions to proceed with the restoration.\nStep 1: Select Carrier and Connect the Device When you open the site, a screen to select your telecommunications carrier will appear. If you have a SIM-free version or are not tied to a carrier, select \u0026ldquo;Other\u0026rdquo;. Then, connect your PC and Pixel device using a USB cable.\nStep 2: Put the Device into \u0026ldquo;Rescue Mode (Fastboot Mode)\u0026rdquo; Following the on-screen instructions, from a powered-off state, press and hold the \u0026ldquo;Power button\u0026rdquo; and \u0026ldquo;Volume Down button\u0026rdquo; simultaneously to launch Fastboot mode (a screen with an Android mascot lying down on a black background).\nStep 3: Recognize the Device on the PC Click the \u0026ldquo;Connect your phone\u0026rdquo; button on the browser, and a pop-up will open listing the connected Pixel devices. Select the target device and allow the connection.\nStep 4: Download and Install Software Once the device is recognized, the optimal version of the Android OS (firmware) will automatically be selected. When you click \u0026ldquo;Install\u0026rdquo;, the software will be downloaded to your PC, and it will begin writing (flashing) to the device.\n⚠️ Warning: During this process, ** absolutely do not unplug the USB cable or turn off the PC.**\nStep 5: Completion and Initial Setup The restoration is successful when the progress bar reaches 100% and a completion message is displayed. The device will automatically restart and display the same initial setup screen (\u0026ldquo;Hello\u0026rdquo; screen) as when it was purchased.\nSummary The official Google Pixel repair tool is an extremely excellent tool that allows you to safely reflash the firmware with just a few clicks in the browser, without needing to directly run special commands (like adb or fastboot).\nBefore taking a malfunctioning device to a repair shop, trying this procedure once might easily solve the problem. Please use this as a reference.\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/en/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":"Android (Google Pixel) Device Software Restoration (Initialization and Repair) Procedure"},{"content":"Send Gmail from curl 1. Get an App Password https://myaccount.google.com/apppasswords Click the link above and enter an app name. Save the generated password.\n2. Send an email with the curl command Run the following command.\nIn the example below, the email content is written in mail.txt.\n1 2 3 4 5 6 From: from@gmail.com To: to@gmail.com Subject: Test Email Content-Type: text/plain; charset=\u0026#34;UTF-8\u0026#34; This is a test email. Create the above file and run the following command.\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 Replace xxxxxxxxxxxxxxxx with your app password. ","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/en/p/gmail%E3%82%92curl%E3%81%8B%E3%82%89%E9%80%81%E3%82%8B/","title":"Send Gmail from curl"},{"content":"Introduction of sample code using standard libraries.\nDownload and display an image 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() # Save to a temporary file and display 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;An error occurred: {e}\u0026#34;) finally: if \u0026#39;tmp\u0026#39; in locals(): os.unlink(tmp.name) # Delete temporary file ","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/en/p/python%E3%82%B3%E3%83%BC%E3%83%89%E7%89%87/","title":"Python Code Snippets"},{"content":"Call ChatGPT API from curl This assumes calling from the Windows Command Prompt.\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;Please answer in Kansai dialect.\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;Insert the message you want to send here\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/en/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":"Call ChatGPT API from curl"},{"content":"High Dividend Yield Stocks Summary 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/en/p/%E9%AB%98%E9%85%8D%E5%BD%93%E6%A0%AA%E3%81%BE%E3%81%A8%E3%82%81/","title":"High Dividend Yield Stocks Summary"},{"content":"Long-term Goals 1 year from now Start a business Create a website and release software (free) 2 years from now Annual sales of 10 million yen Publish a book Release software (paid) 3 years from now Annual sales of 100 million yen 5 years from now Annual sales of 1 billion yen 10 years from now Annual sales of 10 billion yen Short-term Goals 1 month from now Create a business plan 3 months from now Raise about 5 million yen in funding to start the business 6 months from now Start the business 1 year from now Get the business on track Immediate Tasks Clarification of Goals and Vision\nPurpose: Why create the software? Example: Solve a problem, provide new value, target a specific niche market, etc. Vision: What kind of future do you want to realize through the software? Example: Improve business efficiency, make daily life more comfortable, improve the quality of education, etc. Market Research and Needs Analysis\nTarget User: Who will use the software? Specify age group, occupation, interests, etc. Competitor Analysis: Are there competitors in the same field? Analyze their strengths and weaknesses. Identifying Needs: Understand the unresolved problems and demands of the target users. Software Design and Features\nBasic Features: List essential features. Example: User authentication, data storage, analysis functions, etc. Differentiation Points: Clarify unique points compared to other companies\u0026rsquo; products. Example: Simple UI, utilization of AI, high customizability. Technical Specifications: Programming languages, frameworks, databases to be used, etc. Development Plan and Resource Allocation\nDevelopment Schedule: Set a timeline for each stage of the project. Example: Prototype development, testing, official release. Team Composition: Required personnel and skill sets (programmers, designers, marketing staff, etc.). Budget: Estimate development costs, marketing costs, and operating costs. Marketing and Revenue Model\nPromotion Methods: Utilize SNS, websites, advertisements, etc. to improve awareness. Monetization Strategy: Consider options such as a free version + paid version, monthly subscription, advertising revenue, etc. User Acquisition Strategy: Providing free trials, promoting word of mouth, forming user communities, etc. Operations and Scaling\nPost-release Operations: Collecting feedback from users, fixing bugs, adding features. Growth Strategy: Plan how to increase the number of users, expand to other countries, and develop new features. Risk Management: Prepare countermeasures for legal issues and technical troubles. ","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/en/p/%E7%9B%AE%E6%A8%99/","title":"Goals"},{"content":"Recently, I have become interested in leather products and have been purchasing various items. Along with this, I\u0026rsquo;ve developed an interest in the maintenance of leather products and have gathered some related items, which I would like to introduce.\nRecently Purchased Leather Product Maintenance Items M.MOWBRAY DELICATE CREAM Price: Around 1,320 yen\nThis cream provides nourishment, moisture, and flexibility. It doesn\u0026rsquo;t add gloss, but it is suitable for leather that requires a lot of moisture and hydration. It doesn\u0026rsquo;t have an unpleasant smell, but it does have a slight scent. Since it\u0026rsquo;s colorless, I think it\u0026rsquo;s highly versatile. Because it\u0026rsquo;s a light and smooth cream, it might be good to use a bit more of it compared to other creams.\nCollonil 1909 Supreme Creme de Luxe Price: Around 1,777 yen\nThis is a famous, standard, and all-purpose cream that is less likely to cause stains. It is a moisturizing cream that restores the color of the leather. It gives a slight gloss. It is white and seems to also offer water-repellent effects.\nM.MOWBRAY SHOE CREAM (Black) Price: Around 1,000 yen\nA cream for shoes. It contains wax, oils, and organic solvents. It restores the color of the leather and adds gloss. Since it\u0026rsquo;s black, apply it to black leather. I use it for my suit shoes.\nM.MOWBRAY STAIN REMOVER Price: Around 700 yen\nThis came with a brush I bought. A water-based cleaner for shoes. It removes dirt from leather. Soak a cloth generously with it and gently rub the leather to remove the dirt.\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/en/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/","title":"Leather Product Maintenance"},{"content":"Hello! Today\u0026rsquo;s story is about \u0026ldquo;Hanlon\u0026rsquo;s Razor\u0026rdquo; Today, I\u0026rsquo;d like to write about a concept with a slightly unusual name: \u0026ldquo;Hanlon\u0026rsquo;s Razor.\u0026rdquo; When you hear the name, you might think, \u0026ldquo;Sounds kind of scary\u0026hellip;?\u0026rdquo; but it\u0026rsquo;s actually an idea that\u0026rsquo;s very relatable and gives us a gentle perspective.\nHave you ever thought, \u0026ldquo;That person might hate me\u0026hellip;\u0026rdquo;? For example, have you ever experienced something like this?\nSlow replies on LINE Made eye contact but wasn\u0026rsquo;t greeted Ignored when you asked for a favor At times like that, you get anxious and think, \u0026ldquo;Could they dislike me?\u0026rdquo; I often feel that way too. And I get depressed all on my own.\nWhat is Hanlon\u0026rsquo;s Razor? That\u0026rsquo;s where \u0026ldquo;Hanlon\u0026rsquo;s Razor\u0026rdquo; comes in.\nThis phrase is originally \u0026ldquo;Hanlon\u0026rsquo;s Razor\u0026rdquo; in English. The meaning is roughly like this:\n\u0026ldquo;Never attribute to malice that which is adequately explained by stupidity.\u0026rdquo;\n\u0026hellip;The wording is a bit harsh, isn\u0026rsquo;t it? To put it a little more softly:\n\u0026ldquo;Even if someone seems to be acting mean, it might just be carelessness or inattention.\u0026rdquo;\nIt\u0026rsquo;s a way of thinking like this.\nWho said it first? Who is Robert J. Hanlon? This phrase is said to have first appeared in a book published in 1980 called \u0026ldquo;Murphy\u0026rsquo;s Law Book Two.\u0026rdquo;\nThe idea submitted by Robert J. Hanlon, one of the contributors, was used exactly as is, which is how it got the name \u0026ldquo;Hanlon\u0026rsquo;s Razor.\u0026rdquo;\nBy the way, the \u0026ldquo;Razor\u0026rdquo; part means like a philosophical tool to \u0026ldquo;shave off the unnecessary and think simply,\u0026rdquo; and alongside Ockham\u0026rsquo;s Razor, it\u0026rsquo;s a phrase used to organize one\u0026rsquo;s thoughts.\nIt gets exhausting when you assume \u0026ldquo;They meant harm\u0026rdquo; For example, when your email is ignored at work.\nIf you think, \u0026ldquo;Why won\u0026rsquo;t they reply? Do they hate me?\u0026rdquo;, you just get more and more negative.\nBut if you really think about it,\nThey just happened to overlook it They wrote a reply but didn\u0026rsquo;t send it Their smartphone notifications got buried Reasons like these are surprisingly common. And we often mess up ourselves.\nThe weird thing about being forgiving of your own mistakes but strict with others For example, when you forget to reply to a friend\u0026rsquo;s LINE.\nYou might reply with a totally innocent vibe like, \u0026ldquo;Ah, sorry! I missed the notification~\u0026rdquo;.\nBut when someone does the same thing to you, you think, \u0026ldquo;I was ignored.\u0026rdquo;\nThis happens a lot. People are very understanding of their own circumstances, but it\u0026rsquo;s hard to see other people\u0026rsquo;s circumstances.\nAssuming \u0026ldquo;malice\u0026rdquo; is actually a loss When someone does something to you, if you assume \u0026ldquo;they meant harm,\u0026rdquo; you make an enemy out of that person in your heart.\nBut they might just be clumsy, or maybe they\u0026rsquo;re just overwhelmed with other things.\nOf course, there are truly rude people, and it\u0026rsquo;s natural to be hurt when treated poorly.\nBut your heart will feel a little lighter if you don\u0026rsquo;t jump to the conclusion that \u0026ldquo;it must be malicious.\u0026rdquo;\nThat being said, I\u0026rsquo;m not saying you should just put up with everything Please don\u0026rsquo;t misunderstand here; I don\u0026rsquo;t mean to say \u0026ldquo;You\u0026rsquo;re just worrying too much about everything.\u0026rdquo;\nWhen something unpleasant is done to you, it\u0026rsquo;s okay to think, \u0026ldquo;That was terrible.\u0026rdquo;\nHowever, rather than deciding \u0026ldquo;That person has a bad personality\u0026rdquo; or \u0026ldquo;They tried to hurt me on purpose,\u0026rdquo;\nI\u0026rsquo;m suggesting that it might be nice to have the leeway to think, \u0026ldquo;Maybe they had their own reasons.\u0026rdquo;\nSo: Looking at things a little more gently might change your world I think Hanlon\u0026rsquo;s Razor is less about \u0026ldquo;Let\u0026rsquo;s be kind to people\u0026rdquo; and more about a \u0026ldquo;Way to protect your own heart.\u0026rdquo;\nWhen you sense malice in people\u0026rsquo;s actions, your own feelings get strained too.\nBut if you can think, \u0026ldquo;Maybe it was just a mistake, or they just didn\u0026rsquo;t have the capacity,\u0026rdquo; you feel a little more at ease.\nIt\u0026rsquo;s a way of thinking you can use for yourself in that way.\nFinally: Please tell me about your experiences too Thank you for reading.\nIf you have any stories where you felt \u0026ldquo;I felt frustrated at a time like this~\u0026rdquo;, please let me know.\nSometimes just putting your own experiences into words can make your heart feel a little clearer.\nSee you again!\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/en/p/%E3%83%8F%E3%83%B3%E3%83%AD%E3%83%B3%E3%81%AE%E5%89%83%E5%88%80/","title":"Hanlon's Razor"},{"content":"Basic Knowledge of Computers This page explains what a computer is.\nDefinition of a Computer A computer is a machine that has the following five units:\nInput unit Output unit Storage unit Control unit Arithmetic logic unit Roughly speaking, a computer is a machine that performs a specific process on a certain input and outputs the result. It can store, calculate, and output the input data. Control has the role of controlling the aforementioned four units.\nWhat is needed to operate a computer To operate a computer, programs (software) are needed in addition to the devices (hardware).\nPrograms instruct the computer on what kind of processing to perform. Programs are written in a format that the computer can understand.\nAn example of a program is as follows. A program that calculates the sum from 1 to an input integer:\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() { // Secure necessary storage area int n, sum = 0; // Output cout \u0026lt;\u0026lt; \u0026#34;Please enter an integer: \u0026#34;; // Input cin \u0026gt;\u0026gt; n; // Calculation for (int i = 1; i \u0026lt;= n; i++) { // Calculation sum += i; } // Output cout \u0026lt;\u0026lt; \u0026#34;The sum from 1 to \u0026#34; \u0026lt;\u0026lt; n \u0026lt;\u0026lt; \u0026#34; is \u0026#34; \u0026lt;\u0026lt; sum \u0026lt;\u0026lt; \u0026#34;.\u0026#34; \u0026lt;\u0026lt; endl; // Exit return 0; } The program is converted into machine code by a compiler, transforming it into a format that the computer can execute.\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/en/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":"Basic Knowledge of Computers"},{"content":"Recommended iOS Apps 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/en/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81ios%E3%82%A2%E3%83%97%E3%83%AA/","title":"Recommended iOS Apps"},{"content":"The Old Couple, the Donkey, and Our Problem of \u0026ldquo;Whose Voice to Listen To\u0026rdquo; Hello!\nToday, I wanted to write about something I thought about from \u0026ldquo;The Story of the Old Couple and the Donkey.\u0026rdquo;\nI\u0026rsquo;m sure many of you have heard of it. It\u0026rsquo;s that famous fable.\nWhat is \u0026ldquo;The Story of the Old Couple and the Donkey\u0026rdquo;? Once upon a time, there was an old couple and a donkey.\nAt first, the old man rode the donkey, and the old woman walked. Then, a passerby said,\n\u0026ldquo;What a man, letting his old wife walk while he rides!\u0026rdquo;\nHearing this, the old couple decided that the old woman would ride the donkey instead. Then, another person said,\n\u0026ldquo;It\u0026rsquo;s outrageous for a woman to ride the donkey and make the man walk!\u0026rdquo;\nWell then, they decided they would both ride the donkey. Then again, someone said,\n\u0026ldquo;Poor donkey, it\u0026rsquo;s too heavy carrying two people!\u0026rdquo;\nIf that\u0026rsquo;s the case, they both got off the donkey and started walking. Then this time\u0026hellip;\n\u0026ldquo;Why is no one riding the donkey when you have one?\u0026rdquo;\nUltimately, the old couple was at a loss.\n\u0026ldquo;Listen to everyone\u0026rsquo;s opinion\u0026rdquo; is certainly a valid argument. But\u0026hellip; This story is often taken as a moral lesson like, \u0026ldquo;Oh, there\u0026rsquo;s no end to it if you keep worrying about what others think.\u0026rdquo;\nBut reality isn\u0026rsquo;t that simple, is it?\nThere are often people who say, \u0026ldquo;Don\u0026rsquo;t care about what others think!\u0026rdquo;\nBut it\u0026rsquo;s a bit difficult to ignore everything completely. For example, when posting something on social media. When thinking about what to say at a company drinking party. You inevitably care about someone\u0026rsquo;s reaction.\nBecause \u0026ldquo;other people\u0026rsquo;s opinions\u0026rdquo; sometimes affect our safety and evaluation.\nThat being said, being swayed too much becomes painful The old couple in this story probably just wondered \u0026ldquo;What should we do?\u0026rdquo; at first.\nBut no matter what, \u0026ldquo;someone\u0026rdquo; will complain.\nAnd as you start going in circles saying, \u0026ldquo;Then let\u0026rsquo;s do this next,\u0026rdquo; \u0026ldquo;Maybe it\u0026rsquo;s this?\u0026rdquo;, you lose sight of what you want to do.\nThis is a common occurrence in our daily lives as well.\nThe expectations of bosses, the words of parents, the number of \u0026ldquo;likes\u0026rdquo; on social media. Have you ever lost track of what you really want to do while adapting to them?\nIt\u0026rsquo;s important to choose \u0026ldquo;whose voice to listen to\u0026rdquo; So, what should we do? There is no correct answer.\nHowever, \u0026ldquo;following everyone\u0026rsquo;s opinion\u0026rdquo; is realistically impossible.\nThat\u0026rsquo;s why I think it\u0026rsquo;s important to choose \u0026ldquo;whose voice to listen to\u0026rdquo; for yourself.\nFor example, \u0026ldquo;Listen only to the advice of people you respect\u0026rdquo; or \u0026ldquo;Use whether your past self would agree as a standard.\u0026rdquo;\nHaving even just one standard that you \u0026ldquo;want to believe in\u0026rdquo; will reduce the noise of the world a little bit.\nSo, when you are a little tired It might be good to remember the story of \u0026ldquo;The Old Couple and the Donkey.\u0026rdquo;\nWe tend to worry about what others think, don\u0026rsquo;t we?\nBut if you try to respond to everything, you\u0026rsquo;ll end up getting off the donkey too.\nSometimes, if you can think, \u0026ldquo;Maybe it\u0026rsquo;s okay to prioritize my own feelings.\u0026rdquo; Your heart might feel just a little bit lighter.\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/en/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/","title":"The Story of the Old Couple and the Donkey"},{"content":"Why Making the Blue LED Was Almost Impossible An introduction to an English documentary program. It is very interesting. I have a strong impression that the Japanese who solved such a highly difficult problem were not well-appreciated within Japan at first.\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/en/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":"Why Making the Blue LED Was Almost Impossible"},{"content":"Getting Started with Qt Development in VSCode: How to Install the Qt Extension Pack Hello, Kenji here. This time, I\u0026rsquo;ll introduce \u0026ldquo;how to set up a Qt development environment in Visual Studio Code (hereafter VSCode)\u0026rdquo;.\nRecently, there has been an increasing demand for developing Qt applications using the lightweight and highly extensible VSCode, in addition to the official Qt Creator. For those people, I recommend the \u0026ldquo;Qt Extension Pack\u0026rdquo;. Simply by installing this extension pack, you can get the main Qt-related extensions all at once.\nTarget Audience Those who want to start GUI application development using Qt Those who want to develop in VSCode instead of Qt Creator Those who find it troublesome to search for extensions one by one Prerequisites VSCode must be installed (You can download it for free from the official website) The main Qt library must be installed (Qt Official Website) What is the Qt Extension Pack? The Qt Extension Pack is an extension pack for VSCode. By installing it, the following features are automatically added:\nSupport for .ui files (Qt Designer) Syntax highlighting for .pro and .qrc files C++ code completion, building, and debugging assistance for Qt Qt Resource Browser Installation Steps 1. Open VSCode First, launch VSCode.\n2. Open the Extensions View Click the Activity Bar (square block icon) on the left side to show \u0026ldquo;Extensions\u0026rdquo;.\nAlternatively, you can press the shortcut Ctrl + Shift + X.\n3. Search for \u0026ldquo;Qt Extension Pack\u0026rdquo; Enter the following keyword in the search bar:\n1 Qt Extension Pack 4. Click the Install Button When the target pack is displayed, click the \u0026ldquo;Install\u0026rdquo; button. This will install multiple extensions at once, such as the following:\nQt Language Support QML Support Qt Designer Integration CMake Tools (Essential for CMake-based Qt development) Supplementary Project Settings (CMake + Qt Example) If you use Qt with CMake, the combination with the following extensions is recommended:\nCMake Tools CMake Language Support Also, if you put the following description in your CMakeLists.txt, integration with Qt will be smooth:\n1 2 find_package(Qt6 REQUIRED COMPONENTS Widgets) target_link_libraries(MyApp PRIVATE Qt6::Widgets) Bonus: How to open .ui files? .ui files can be edited in Qt Designer. In VSCode, you can right-click a .ui file → select Open with Qt Designer (requires Qt Designer to be included in the PATH environment variable).\nSummary Step Content 1 Launch VSCode 2 Open the Extensions Panel 3 Search for \u0026ldquo;Qt Extension Pack\u0026rdquo; 4 Click the Install button Setting up a Qt environment in VSCode is now much easier than before. It has sufficient features as a substitute for Qt Creator, and is recommended for those who want to work nimbly.\nRecommended Links Qt Official Website Qt Extension Pack - Visual Studio Marketplace VSCode Official Website CMake Tools Extension Finally From now on, I plan to proceed with development utilizing Qt UI tools and QML in this environment. Next time, I plan to explain how to build \u0026amp; run a Qt Hello World app from VSCode.\nSee you next time!\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/en/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":"Trying Out the Qt Extension Pack in Visual Studio Code"},{"content":"How to Check if Your iPhone is SIM Locked Home Screen \u0026gt; Settings \u0026gt; General \u0026gt; About \u0026gt; Carrier Lock\nCheck whether it says No SIM restrictions or SIM locked.\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/en/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":"How to Check if Your iPhone is SIM Locked"},{"content":"Overview 1 Class P is the class of problems that are decidable in polynomial time by a deterministic Turing machine. Class NP is the class of problems for which the correctness of a witness (evidence that the answer is Yes) can be verified in polynomial time when given the witness. Since problems decidable in polynomial time are also verifiable in polynomial time, it is obvious that P ⊆ NP. However, it is not clear whether P is a proper subset of NP. Although there is no proof yet, many researchers believe that P ≠ NP. This conjecture that class P and class NP are not equal is known as the \u0026#34;P ≠ NP conjecture\u0026#34;. Reference site : https://daigakudenki.com/np-hard/\n","date":"2024-09-11T02:22:39+09:00","permalink":"http://kenji.blog/en/p/pnp%E4%BA%88%E6%83%B3/","title":"P≠NP Conjecture"},{"content":"Awarded Microsoft MVP (2024-2025) Again Hello, this is kenji. I\u0026rsquo;m pleased to announce that I have been awarded the Microsoft MVP (Most Valuable Professional) again this year. This is my 8th time receiving the award.\nSince I have the opportunity, I\u0026rsquo;d like to write a little bit about what the MVP is.\nWhat is Microsoft MVP? Even though it says MVP, it is not about the most valuable player in sports (I get asked this occasionally\u0026hellip;). Microsoft MVP (Most Valuable Professional) is an award given to individuals who actively share and disseminate their knowledge and experience regarding Microsoft technologies to the community.\nWriting technical blogs, answering questions on Q\u0026amp;A sites, publishing sample codes, or speaking at events. \u0026ldquo;Sharing what you know in a way that helps someone else\u0026rdquo; \u0026ndash; such steady activities are evaluated.\nThere are awardees all over the world, but the number is limited every year, and it is not easy to be re-awarded. Under such circumstances, I am truly grateful to have been recognized again.\nReasons for the Award This time, I was re-awarded in the \u0026ldquo;Developer Technologies\u0026rdquo; category. Over the past year, I have been doing activities like this:\nWriting blog posts about Microsoft-related technologies Posting answers on technical Q\u0026amp;A sites Publishing sample codes on GitHub Speaking at study groups and technical events, etc. None of these are extraordinary, but I have been conscious of disseminating information by turning \u0026ldquo;things I tried that worked\u0026rdquo; or \u0026ldquo;things I stumbled on but managed to solve\u0026rdquo; into a form that is even slightly useful.\nI am genuinely happy that it has taken shape in this way.\nLooking Ahead The world of technology moves incredibly fast, and just keeping up with it is tough. But precisely because of that, I feel there is meaning in sharing \u0026ldquo;raw information\u0026rdquo; like what it was actually like to use it and what was hard to understand.\nI hope to continue doing this at my own pace without straining myself. I would be happy if I could deliver information that makes someone think, \u0026ldquo;Oh, that helped,\u0026rdquo; in some form or another.\nI look forward to your continued support.\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/en/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/","title":"Awarded Microsoft MVP (2024-2025) Again"},{"content":"What is yt-dlp? yt-dlp is a command-line tool for downloading YouTube videos. Not only can you download videos, but you can also download them as music files in mp3 format.\nDownload and Install Download the latest yt-dlp.exe from the yt-dlp releases page. Place yt-dlp.exe in a folder of your choice. Add the folder path of yt-dlp.exe to the Path environment variable. Usage Run yt-dlp.exe in the command prompt and specify the URL of the YouTube video.\n1 yt-dlp.exe \u0026#34;https://www.youtube.com/watch?v=VIDEO_ID\u0026#34; Passing just the VIDEO_ID part as an argument is also OK. If you want to download it as an mp3 music file, run the following command.\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; The video will be downloaded to the current directory where you executed the command.\nThat\u0026rsquo;s it.\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/en/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":"How to download YouTube videos with yt-dlp.exe"},{"content":" Soccer Ball Boy @gg211204 『ボールボーイがヒーローになった日』 この日チームを救ったボールボーイは後日クラブに招待され、選手達食事を共にした。 #トッテナム #スパーズ #モウリーニョ #ボールボーイ ♬ 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/en/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/","title":"Short Video Links"},{"content":"Hello!\nToday, I would like to talk about a quote by Albert Einstein.\nThe World Doesn\u0026rsquo;t Appreciate Your Good Deeds? ` The world will never appreciate the million good things you do. But it will criticize the one wrong thing you do\u0026hellip; But do not be discouraged. \u0026ldquo;Always rise above all laughter and criticism. Stay strong.\u0026rdquo;\nAlbert Einstein ` This is a quote attributed to Einstein. It sharply points out the harshness of society and the bias in people\u0026rsquo;s evaluations that we feel every day.\nStill, Keep Rising \u0026ldquo;Always rise above all laughter and criticism. Stay strong.\u0026rdquo;\nThis following sentence can be said to be Einstein\u0026rsquo;s answer to the harsh reality mentioned above. It teaches us the importance of not yielding to criticism or ridicule, and continuing to move forward believing in ourselves.\nApplying Einstein\u0026rsquo;s Teachings in Daily Life This quote is deeply related to our daily lives. For example, there are times when your efforts at work go unrecognized, and only trivial mistakes stand out. Also, your statements on social media might be taken out of context and criticized.\nAt such times, try to remember this quote by Einstein. It is important to hold on to your own beliefs rather than being swayed by the evaluations of others.\nSummary This quote by Einstein teaches us the importance of \u0026ldquo;living believing in yourself without being swayed by the evaluations of others\u0026rdquo;. Let\u0026rsquo;s have the courage to pursue the path we believe in, without yielding to criticism or ridicule.\nFinally, Einstein\u0026rsquo;s words once again.\n\u0026ldquo;Always rise above all laughter and criticism. Stay strong.\u0026rdquo;\nI hope this quote resonates with your heart and becomes a catalyst for you to take a positive step forward.\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/en/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/","title":"Einstein's Quote"},{"content":"Here is a simple C language code that generates prime numbers within a specified range. In this example, it enumerates prime numbers from 1 to 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;Please enter the maximum value of the range to generate prime numbers: \u0026#34;); scanf(\u0026#34;%d\u0026#34;, \u0026amp;n); printf(\u0026#34;The prime numbers from 1 to %d are as follows:\\n\u0026#34;, n); printPrimes(n); return 0; } This code works as follows:\nisPrime function: Determines whether a given number is a prime number. For efficiency, it first checks if it is divisible by 2 or 3, and then proceeds to check using steps of 6. printPrimes function: Outputs the prime numbers within the specified range. It outputs 2 first, and then checks only odd numbers. main function: Prompts the user to input the maximum value of the range and outputs the prime numbers within that range. When you compile and run this code, it will display the prime numbers within the specified range.\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/en/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/","title":"C Language Code to Generate Prime Numbers"},{"content":"\nAkiko Yosano \u0026ldquo;Thou Shalt Not Die\u0026rdquo;\n―― Grieving for my younger brother in the besieging army at Port Arthur\nAh, my brother, I weep for you,\nThou shalt not die,\nBeing the youngest born,\nYou received the most of our parents\u0026rsquo; love.\nDid they place a blade in your hand\nAnd teach you to kill?\nDid they raise you to twenty-four\nJust to tell you to kill and die?\nAs the master of an old and proud\nMerchant house in the town of Sakai,\nSince you are the one to inherit our parents\u0026rsquo; name,\nThou shalt not die.\nWhether the fortress of Port Arthur falls,\nOr whether it does not, what does it matter?\nYou surely know, such things\nAre not the way of a merchant\u0026rsquo;s house.\nThou shalt not die.\nThe Emperor himself\nDoes not go out to battle.\nTo shed one another\u0026rsquo;s blood,\nTo die the death of beasts,\nAnd call such death human glory,\nWith his great and deep heart,\nHow could the Emperor possibly desire this?\nAh, my brother, in battle\nThou shalt not die.\nOur mother, who lost our father\nLast autumn,\nIn the midst of her sorrow, pitifully\nHaving her son summoned, she guards our home.\nEven in this great reign heard to be peaceful,\nOur mother\u0026rsquo;s white hairs have grown.\nWeeping behind the shop curtains\nIs your fragile, young bride,\nHave you forgotten her, do you think of her?\nParted before being together for even ten months,\nThink of the young girl\u0026rsquo;s heart.\nIn this world, with only you,\nAh, whom else is she to rely upon?\nThou shalt not die.\n","date":"2024-07-25T13:16:47+09:00","permalink":"http://kenji.blog/en/p/%E5%90%9B%E6%AD%BB%E3%81%AB%E3%81%9F%E3%81%BE%E3%81%B5%E3%81%93%E3%81%A8%E3%81%AA%E3%81%8B%E3%82%8C/","title":"Thou Shalt Not Die"},{"content":"\n🔹 Person Overview Akiko Yosano (1878-1942) was a Japanese poet, author, and thinker who was active from the Meiji through the early Showa periods. She is especially known for her passionate and unique tanka poems, and is a figure who opened new horizons for female independence and expressions of romance in modern Japanese literature.\nReal Name: Sho Yosano (maiden name: Otori)\nBirthplace: Sakai (Sakai City, Osaka Prefecture)\nHusband: Tekkan Yosano (tanka poet, poet)\nMain Active Period: Late Meiji to Early Showa periods\nCharacteristics:\nGarnered attention for tanka poems that frankly expressed a woman\u0026rsquo;s romantic feelings Held feminist ideals and promoted female education and independence Also demonstrated a pacifist stance criticizing the Russo-Japanese War Core member of the literary magazine \u0026ldquo;Myojo\u0026rdquo; 🔹 Representative Works, Synopses, and Characteristics 1. \u0026ldquo;Midaregami\u0026rdquo; (Tangled Hair) (1901) Overview: Her debut poetry collection. Published in her early 20s, it delivered a major shock to the Japanese literary world. Characteristics: Frankly expressed romantic feelings and physical desire from a female perspective. Famous Poem: Without even touching the hot blood of my soft skin aren\u0026rsquo;t you lonely, you who preach the Way?\n→ It became a topic of discussion for expressing a view of romance considered bold under the moral values of the time, in a woman\u0026rsquo;s own words.\n2. \u0026ldquo;Kimi Shinitamou koto nakare\u0026rdquo; (Thou Shalt Not Die) (1904) Format: Poem (free verse, not tanka) Content: An anti-war poem addressed to her younger brother deployed in the Russo-Japanese War. Excerpt: Thou shalt not die, As you were born last, Our mother wept bitterly While wringing your sleeves\u0026hellip;\nSignificance: Groundbreaking in that it appealed for anti-war sentiments from the perspective of a woman mourning her brother\u0026rsquo;s potential death, amidst a strong trend of glorifying war at the time. 🔹 Influence and Evaluation Conducted socially advanced activities such as women\u0026rsquo;s liberation, pacifism, and the popularization of education. Devoted her later years to women\u0026rsquo;s education and was involved in the establishment of women\u0026rsquo;s universities (e.g., Bunka Gakuin). One of the most important female intellectuals and literary figures in pre-war Japan. 🔹 Summary Item Content Name Akiko Yosano Fields of Activity Tanka, poetry, criticism, education Major Works \u0026ldquo;Midaregami\u0026rdquo;, \u0026ldquo;Kimi Shinitamou koto nakare\u0026rdquo; Characteristics Expression of romantic freedom, female independence, pacifism Influence on Modern Times Pioneer of feminist literature, innovation in modern tanka, anti-war poetry ","date":"2024-07-25T13:08:36+09:00","permalink":"http://kenji.blog/en/p/%E4%B8%8E%E8%AC%9D%E9%87%8E%E6%99%B6%E5%AD%90%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/","title":"About Akiko Yosano"},{"content":"Introduction to Mathematica Solve an equation 1 Solve[x^2 - 3 x + 2 == 0, x] Output\n1 {{x -\u0026gt; 1}, {x -\u0026gt; 2}} Solve an equation within integers 1 Solve[x^2 - 3 x + 2 == 0 \u0026amp;\u0026amp; 0 \u0026lt;= x \u0026lt;= 2, x, Integers] Output\n1 {{x -\u0026gt; 1}, {x -\u0026gt; 2}} Solve simultaneous equations 1 Solve[{x + y == 3, x - y == 1}, {x, y}] Output\n1 {{x -\u0026gt; 2, y -\u0026gt; 1}} Solve an inequality 1 Reduce[x^2 - 3 x + 2 \u0026gt; 0, x] Output\n1 x \u0026lt; 1 || x \u0026gt; 2 Differentiate 1 D[x^2, x] Output\n1 2 x Integrate 1 Integrate[x^2, x] Output\n1 x^3/3 Find a limit 1 Limit[1/x, x -\u0026gt; 0] Output\n1 Infinity Find a series 1 Sum[1/n^2, {n, 1, Infinity}] Output\n1 π^2/6 Create a matrix 1 m = {{1, 2}, {3, 4}} Find the product of matrices 1 m . m Output\n1 {{7, 10}, {15, 22}} Find the inverse matrix 1 Inverse[m] Output\n1 {{-2, 1}, {1.5, -0.5}} Find eigenvalues and eigenvectors 1 Eigensystem[m] Output\n1 {{5, 0}, {{1, 1}, {1, -1}}} Find the inner product of vectors 1 {1, 2} . {3, 4} Output\n1 11 Find the cross product of vectors 1 Cross[{1, 2, 3}, {4, 5, 6}] Output\n1 {-3, 6, -3} Find the magnitude of a vector 1 Norm[{1, 2, 3}] Output\n1 √14 Find the angle between vectors 1 ArcCos[{1, 2} . {3, 4}/(Norm[{1, 2}] Norm[{3, 4}])] Output\n1 ArcCos[11/(√5 √25)] Find the projection of a vector 1 {1, 2} . {3, 4}/Norm[{3, 4}] {3, 4}/Norm[{3, 4}] Output\n1 {11/5, 22/5} Find the rotation of a vector 1 RotationMatrix[π/2].{1, 0} Output\n1 {0, 1} Find the translation of a vector 1 TranslationTransform[{1, 2}][{3, 4}] Output\n1 {4, 6} Find the scaling of a vector 1 ScalingTransform[{2, 3}][{1, 1}] Output\n1 {2, 3} Find the reflection of a vector 1 ReflectionTransform[{1, 1}][{1, 1}] Output\n1 {0, 0} Generate random numbers 1 RandomReal[] Output\n1 0.123456 Generate random numbers (integers) 1 RandomInteger[] Output\n1 123456 Generate random numbers (range specified) 1 RandomReal[{1, 10}] Output\n1 5.6789 Generate random numbers (integers, range specified) 1 RandomInteger[{1, 10}] Output\n1 5 Generate random numbers (distribution specified) 1 RandomVariate[NormalDistribution[0, 1]] Output\n1 0.123456 Generate random numbers (distribution specified, number specified) 1 RandomVariate[NormalDistribution[0, 1], 10] Output\n1 {0.123456, 0.234567, ..., 0.987654} Generate random numbers (distribution specified, number specified, seed specified) 1 2 SeedRandom[12345] RandomVariate[NormalDistribution[0, 1], 10] Output\n1 {0.123456, 0.234567, ..., 0.987654} Apply a function to array elements 1 2 3 Map[Sqrt, {1, 4, 9}] Sqrt /@ {1, 4, 9} Map[#^(1/2)\u0026amp;, {1, 4, 9}] Output\n1 {1, 2, 3} Define a function using lambda expressions 1 2 f = Function[x, x^2] f[3] Output\n1 9 Compose functions 1 2 3 4 f = Function[x, x^2] g = Function[x, x + 1] h = Function[x, f[g[x]]] h[3] Output\n1 16 Reference the previous calculation result 1 % + 1 Output\n1 17 Pure functions 1 (#+3)\u0026amp;[5] Output\n1 8 Extract from an array 1 2 Select[{1, 2, 3, 4, 5}, EvenQ] Select[{1, 2, 3, 4, 5}, Mod[#,2]==0\u0026amp;] Output\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/en/p/mathematica%E5%85%A5%E9%96%80/","title":"Introduction to Mathematica"},{"content":"What is Hugo? Hugo is a static site generator. It can convert Markdown files into HTML and create websites. Hugo is written in the Go language and runs very fast.\nThis blog is also created with Hugo.\nInstalling the Hugo CLI To install the Hugo CLI, run the following command.\nExample for macOS. For other operating systems, please refer to the official documentation. 1 brew install hugo You can install it using Homebrew.\nHugo Command List Hugo provides various commands. Below is a summary of commonly used commands.\nCreate a new site 1 hugo new site \u0026lt;site-name\u0026gt; Command to create a new site. Specify the name of the site in \u0026lt;site-name\u0026gt;.\nCreate a new post 1 hugo new \u0026lt;post-name\u0026gt;.md Command to create a new post. Specify the name of the post in \u0026lt;post-name\u0026gt;.\nStart the server 1 hugo server Command to start a local server. You can access it at http://localhost:1313.\nBuild the site 1 hugo Command to build the site. HTML files will be generated in the public directory.\nDeploy the site 1 hugo deploy Command to deploy the site. Deployment settings are configured in the config.toml file.\nList all posts 1 hugo list all Command to display a list of all posts.\nCheck configuration 1 hugo config Command to check the configuration.\nDisplay help 1 hugo help Command to display help information.\nDisplay version 1 hugo version Command to display the version.\nThat concludes the Hugo command list. There are many other commands available, so please refer to the official documentation for more details.\nReferences Hugo Official Documentation ","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/en/p/hugo%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E4%B8%80%E8%A6%A7/","title":"Hugo Command List"},{"content":"Visual Studio Code Recommended Extensions List Category Name Publisher Description Virtual / Container Management Remote Development Microsoft Supports remote development by connecting to virtual containers / WSL via SSH Virtual / Container Management Docker Microsoft Supports management of Docker containers Code Management GitHub Pull Requests GitHub Manage GitHub Pull Requests within VSCode Code Management GitHub Copilot GitHub Supports AI-based code completion Code Management Git Graph mhutchie Graphically displays Git branches and commits Code Management Git History Don Jayamanne Displays Git history Browser / Web Development Debugger for Firefox Firefox DevTools Use Firefox\u0026rsquo;s debugger within VSCode Browser / Web Development Microsoft Edge Tools for VS Code Microsoft Use Edge\u0026rsquo;s developer tools within VSCode Browser / Web Development Vue Language Features (Volar) Vue Supports Vue language features Browser / Web Development JavaScript (ES6) code snippets charalampos karypidis Provides JavaScript snippets Browser / Web Development Tailwind CSS IntelliSense Tailwind Labs Provides Tailwind CSS snippets Cloud Development AWS Toolkit Amazon Web Services Supports AWS development Cloud Development Azure Tools Microsoft Supports Azure development Cloud Development Google Cloud Tools Google Cloud Supports Google Cloud development Database MySQL Jun Han Supports MySQL development Database SQL Server (mssql) Microsoft Supports SQL Server development Database PostgreSQL Chris Kolkman Supports PostgreSQL development Embedded PlatformIO PlatformIO Supports PlatformIO development Embedded Arduino Microsoft Supports Arduino development Embedded WorkBench Particle Particle\u0026rsquo;s development environment, supporting IoT development including firmware, libraries, and cloud integration C/C++ C/C++ Extension Pack Microsoft Supports C/C++ development C/C++ C/C++ Runner franneck94 Runs C/C++ code (supports gcc, msvc, cuda nvcc compilers) C/C++ Cortex-Debug marus25 Supports debugging of Cortex-A/R/M microcontrollers Python Python Extension Pack Microsoft Supports Python development Python Jupyter Microsoft Supports Jupyter Notebook development Utility / UI Extension Markdown All in One Yu Zhang Supports Markdown writing Utility / UI Extension Hex Editor Microsoft Edits binary files Utility / UI Extension vscode-pdf tomoki1207 Displays PDF files Utility / UI Extension Rainbow CSV mechatroner Displays CSV files colorfully Utility / UI Extension Draw.io Integration Henning Dieterichs Use Draw.io within VSCode Utility / UI Extension Japanese Language Pack for Visual Studio Code Microsoft Japanese localization pack Utility / UI Extension Live Share Microsoft Supports real-time collaborative work ","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/en/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":"Recommended Visual Studio Code Extensions"},{"content":"What is mermaid.js? mermaid.js is a JavaScript library that allows you to graphically display complex charts and diagrams, such as flowcharts, diagrams, and Gantt charts, using its own text-based syntax (Mermaid syntax). It is also adopted by various services like GitHub, Qiita, and Notion. This time, we will make mermaid.js usable in hugo.\nMaking mermaid.js usable in hugo The procedure is as follows:\nAdd the following to 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 }} mermaid.min.js is loaded only when mermaid: true is set via the if statement. This library is about 3MB and unexpectedly large. Create assets/js/load-mermaid.js. This process is used for initialization and to redraw when the theme is dynamically switched. 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); The base code was referenced from below:\nReinitialize with new theme #1945 Modify the theme switching process in 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;); } } } Create 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; The preparation to use mermaid.js is now complete.\nTrying out mermaid.js Add the following to the article\u0026rsquo;s front matter 1 mermaid: true Add the following to the article body Flowchart\n1 2 3 4 5 6 {{\u0026lt;mermaid align=\u0026#34;center\u0026#34;\u0026gt;}} graph TD A[Start] --\u0026gt;|Condition 1| B(Condition 2) B --\u0026gt; C{Condition 3} C --\u0026gt;|Condition 4| D[End] {{\u0026lt;/mermaid\u0026gt;}} Output Result\ngraph TD A[Start] --\u003e|Condition 1| B(Condition 2) B --\u003e C{Condition 3} C --\u003e|Condition 4| D[End] Gantt Chart\n1 2 3 4 5 6 7 8 9 10 11 12 {{\u0026lt;mermaid align=\u0026#34;center\u0026#34;\u0026gt;}} gantt section Project Requirement Definition :done, a, 2024-05-25, 5d Basic Design :done, b, after a, 5d Detailed Design :done, c, after b, 5d Manufacturing :active, d, after c, 10d Unit Testing :crit, e, after d, 5d Integration Testing : f, after e, 5d System Testing : g, after f, 5d Release :milestone, h, after g, 1d {{\u0026lt;/mermaid\u0026gt;}} Output Result\ngantt section Project Requirement Definition :done, a, 2024-05-25, 5d Basic Design :done, b, after a, 5d Detailed Design :done, c, after b, 5d Manufacturing :active, d, after c, 10d Unit Testing :crit, e, after d, 5d Integration Testing : f, after e, 5d System Testing : g, after f, 5d Release :milestone, h, after g, 1d Sequence Diagram\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: ID/PW Input view-\u0026gt;\u0026gt;controller: Authentication Request controller-\u0026gt;\u0026gt;model: Authentication Request model-\u0026gt;\u0026gt;database: Authentication Request database--\u0026gt;\u0026gt;model: Return Authentication Result model--\u0026gt;\u0026gt;controller: Return Authentication Result controller--\u0026gt;\u0026gt;view: Return Authentication Result view--\u0026gt;\u0026gt;user: Display Authentication Result {{\u0026lt;/mermaid\u0026gt;}} Output Result\nsequenceDiagram participant user participant view participant controller participant model participant database user-\u003e\u003eview: ID/PW Input view-\u003e\u003econtroller: ajax query controller-\u003e\u003emodel: Authentication Request model-\u003e\u003edatabase: Issue SQL database--\u003e\u003emodel: Return SQL Result model--\u003e\u003econtroller: Return Authentication Request Result controller--\u003e\u003eview: Return ajax query result view--\u003e\u003euser: Display Authentication Result That is all.\nReferences mermaid.js Official Site Demo site to preview mermaid syntax ","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/en/p/mermaid.js%E3%82%92%E8%A9%A6%E3%81%97%E3%81%A6%E3%81%BF%E3%82%8B/","title":"Trying out mermaid.js"},{"content":"How to undo git reset If you accidentally run git reset after making a git commit, here is how to undo the git reset (restore the state at the time of the git commit).\nCheck the commit ID before the reset with git reflog Revert to the state before the reset with git reset --hard HEAD@{number} That\u0026rsquo;s how to undo a 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/en/p/git-reset%E3%82%92%E5%8F%96%E3%82%8A%E6%B6%88%E3%81%99%E6%96%B9%E6%B3%95/","title":"How to undo git reset"},{"content":"Open Sourcing of MS-DOS 4.0 Microsoft has released the source code for MS-DOS 4.0, which was released approximately 40 years ago. It is written almost entirely in 8086 assembly code.\nGitHub Repository https://github.com/microsoft/MS-DOS\nReference Sites 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/en/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":"Open Sourcing of MS-DOS 4.0"},{"content":" The Art of Readable Code Principle of Programming The Pragmatic Programmer Technologies Supporting the Web How to Build Secure Web Applications How Networks Work Thorough SQL Guide Learned from Masters Docker Practical Guide Kubernetes Complete Guide Code Complete 2nd Edition Clean Code: A Handbook of Agile Software Craftsmanship Clean Architecture: A Craftsman\u0026rsquo;s Guide to Software Structure and Design Technologies to Learn Before Becoming a Game Programmer Being Geek Why Object-Oriented Programming? ","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/en/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/","title":"Recommended Books for Beginner Engineers"},{"content":"I created an Excel calendar template (with holiday support)! I made an Excel template that automatically displays the holidays for a given month when you enter the year and month.\nPlease download and use it. Calendar.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/en/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":"Excel Calendar Template (with Holiday Support)"},{"content":"This is the configuration procedure for Windows 11.\nOpen Control Panel Select Power Options Click \u0026ldquo;Choose what the power buttons do\u0026rdquo; Click \u0026ldquo;Change settings that are currently unavailable\u0026rdquo; Uncheck \u0026ldquo;Turn on fast startup (recommended)\u0026rdquo; Click \u0026ldquo;Save changes\u0026rdquo; Reference [Windows 10] Please tell me how to disable fast startup.\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/en/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/","title":"How to fix DPI settings resetting on every startup with multi-monitors"},{"content":"Get only the latest of a git repository You can get only the latest of a repository with the following command. It is useful when you want to quickly fetch a repository to save disk space.\n1 git clone --depth 1 \u0026lt;repository URL\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/en/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/","title":"Get only the latest of a git repository"},{"content":"How to fix the following error in GitHub Copilot GitHub Copilot stopped working around April 19, 2024. The error message is as follows:\n[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't support proxy connections with custom certificates. Please visit https://gh.io/copilot-network-errors to learn more. Original cause: {\u0026quot;type\u0026quot;:\u0026quot;system\u0026quot;,\u0026quot;_name\u0026quot;:\u0026quot;FetchError\u0026quot;,\u0026quot;code\u0026quot;:\u0026quot;UNABLE_TO_VERIFY_LEAF_SIGNATURE\u0026quot;}\nSolution This seems to be a bug in ESET. Turn off \u0026ldquo;Enable SSL/TLS\u0026rdquo; in ESET\u0026rsquo;s Advanced setup. References The same error seems to occur with AWS CDK as well.\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/en/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/","title":"How to fix GitHub Copilot becoming unusable due to a certificate error"},{"content":"\nIntroduction to Vim Download and Installation https://www.vim.org/download.php\nFrom the site above, download and install the appropriate module for your OS.\nFor Windows, it is recommended to choose gvim_X.X.X_x64_signed.exe.\nHow to Start For Windows, you need to register the folder containing vim.exe to the Path environment variable.\nHow to start:\n1 vim When specifying a file name to start:\n1 vim filename.txt How to Exit To exit, type : (colon), then q, and press Enter.\n1 :q If you have modified the file, a message saying No write since last change (add ! to override) will be displayed. You can discard the changes and force quit.\n1 :q! To save the file and exit:\n1 :wq The following has the same meaning:\n1 :x You can also exit by pressing z twice while holding down Shift (same as :wq).\nModes Vim has a Command mode and an Insert mode. When you start Vim, it is in Command mode. Pressing the i key switches to Insert mode.\nIn Insert mode, you can literally type text. To return from Insert mode to Command mode, press the ESC key.\nThis switching of input modes is a distinct characteristic of Vim.\nCursor Movement and Scrolling Here is a summary of cursor movement and scrolling in Command mode.\nKey Description h (or Ctrl+H, BackSpace, ←) Move left j (or Ctrl+J, Ctrl+N, ↓) Move down k (or Ctrl+P, ↑) Move up l (or Space, →) Move right + (or Enter) Move to the beginning of the next line - Move to the beginning of the previous line Ctrl+B (or PageUp) Scroll up Ctrl+F (or PageDown) Scroll down Ctrl+U Scroll half a screen up Ctrl+D Scroll half a screen down Ctrl+Y Scroll one line up Ctrl+E Scroll one line down z Enter Scroll cursor line to top of screen z . Scroll cursor line to middle of screen z - Scroll cursor line to bottom of screen 0 (or |) Move cursor to the beginning of the line $ Move cursor to the end of the line ^ (or _) Move cursor to the first non-blank character of the line G (or :$) Move cursor to the last line :Line Number Enter Move to specified line If you type a Number followed by any of the above movement keys, it will move that many times. (For example, typing 3j will move the cursor down 3 lines from the current position.)\nOther Commands Key Description Ctrl+L Redraw the screen Ctrl+G Show file status, number of lines, cursor position, etc. ","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/en/p/vim%E5%85%A5%E9%96%80/","title":"Introduction to Vim"},{"content":"About the Need to Call DestroyIcon You need to call DestroyIcon in the following cases:\nCreateIconFromResourceEx (when called without the LR_SHARED flag) CreateIconIndirect CopyIcon When created with the above functions.\nLoadIcon LoadImage (when using the LR_SHARED flag) CopyImage (when using the LR_COPYRETURNORG flag and the hImage parameter is a shared icon) CreateIconFromResource CreateIconFromResourceEx (when using the LR_SHARED flag) You must not call DestroyIcon for icons created and loaded in the above cases.\nReferences DestroyIcon function (winuser.h) ","date":"2024-04-19T01:55:17+09:00","permalink":"http://kenji.blog/en/p/loadicon%E3%81%AFdestroyicon%E3%82%92%E5%91%BC%E3%81%B3%E5%87%BA%E3%81%99%E5%BF%85%E8%A6%81%E3%81%AF%E3%81%AA%E3%81%84/","title":"LoadIcon Does Not Need to Call DestroyIcon"},{"content":"Lecture Videos on Generative AI \u0026ldquo;Generative AI\u0026rdquo; (1) Masayuki Nakao, Professor at the University of Tokyo - 2023.9.8 \u0026ldquo;Generative AI\u0026rdquo; (2) Kuniyoshi Sakai, Professor at the University of Tokyo - 2023.10.11 \u0026ldquo;Generative AI\u0026rdquo; (3) Yutaka Matsuo, Professor at the University of Tokyo - 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/en/p/%E7%94%9F%E6%88%90ai%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/","title":"About Generative AI"},{"content":"Generate QR code with curl Note: The method introduced below generates the QR code on the server side and returns it, so logs might be kept. Please be careful when converting confidential information such as personal information into a QR code.\nMethod 1 This is a method to generate a QR code in the command prompt. qrenco.de returns a text-based response.\n1 curl qrenco.de/kenji.blog Output result 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 █████████████████████████████ █████████████████████████████ ████ ▄▄▄▄▄ █ ▄ ▄ █ ▄▄▄▄▄ ████ ████ █ █ █ ▀▀▀██ █ █ ████ ████ █▄▄▄█ █▀▀█▀▄█ █▄▄▄█ ████ ████▄▄▄▄▄▄▄█▄▀ ▀ █▄▄▄▄▄▄▄████ ████▄ █▀▄ ▄▀█▄▀ ▀██▄▀ ▄████ ████▀▀▀█ ▄▄ ▄█▄█▀█▀▄██ ▀████ ████▄▄▄██▄▄█ █▀█ ▄██▀▀█ █████ ████ ▄▄▄▄▄ █▀█ ▀ ▄▀▄▄▄ ▀████ ████ █ █ █▄▄ ▄▀▄▀▄ ██ ▀████ ████ █▄▄▄█ █▀▀█ ▀▄▄▄ ▄▄██████ ████▄▄▄▄▄▄▄█▄▄███▄▄█▄███▄████ █████████████████████████████ █████████████████████████████ Reference qrenco.de Method 2 api.qrserver.com returns an image.\n1 curl -o qr.png \u0026#34;https://api.qrserver.com/v1/create-qr-code/?size=150x150\u0026amp;data=HelloWorld\u0026#34; Output result Reference 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/en/p/curl%E3%81%A7qr%E3%82%B3%E3%83%BC%E3%83%89%E7%94%9F%E6%88%90/","title":"Generate QR code with curl"},{"content":"Shortcuts List Shortcut Key Description Ctrl + B Make bold Ctrl + I Make italic Ctrl + U Underline Ctrl + E Center align Ctrl + L Left align Ctrl + R Right align Ctrl + ] Increase font size Ctrl + [ Decrease font size Ctrl + C Copy Ctrl + V Paste Ctrl + X Cut Ctrl + Z Undo Ctrl + Y Redo Ctrl + A Select all Shift + Arrow keys Select text Ctrl + F Find text Ctrl + H Replace text Ctrl + P Print preview Ctrl + S Save document F12 Save as Ctrl + Home Move to start of document Ctrl + End Move to end of document Reference Keyboard shortcuts in 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/en/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":"Microsoft Word Shortcuts List"},{"content":"I would like to introduce \u0026ldquo;Tab Auto Refresh\u0026rdquo;, an Edge browser extension that automatically refreshes web pages.\nInstalling Tab Auto Refresh Tab Auto Refresh\nAccess the site above and click Install.\nClick Add extension.\nHow to Use Once the installation is complete, an icon will be added to the top right of Edge.\nOpen the web page you want to auto-refresh and click the icon to start auto-refreshing.\nThe part in the green frame is the auto-refresh interval. Please select the timing to auto-refresh.\nTo stop auto-refreshing, click the icon and then click 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/en/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":"Auto-refresh Web Page Browser Extension (Edge Add-on)"},{"content":"Visual Studio Shortcut List I made a list of Visual Studio shortcuts that I personally use often. By memorizing keyboard operations for Visual Studio shortcuts, you can perform development work efficiently. Please make use of them.\nConfirmed in Visual Studio 2022. Shortcut Key Description F1 Show help for the selected word F2 Jump to bookmark Ctrl + F2 Register bookmark Ctrl + Shif + F2 Delete all bookmarks F5 Build and run (Debug run) Ctrl + F5 Build and run (Run without debugging) F7 Build F9 Toggle breakpoint on the cursor line Ctrl + F9 Disable breakpoint on the cursor line Shift + Ctrl + F9 Delete all breakpoints F10 Step over F11 Step into F12 Go to definition Ctrl + D Duplicate cursor line Ctrl + X Cut the line (if there is no selection) Ctrl + Shift + ] Select up to the matching brace of the cursor part Alt + Up/Down Arrow Keys Move cursor line up or down Alt + Shift + Arrow Keys Multi-cursor / Box selection Ctrl + Tab Switch source code / window display Ctrl + Shift + V Show clipboard history Ctrl + K, Ctrl + C Comment out the cursor line Ctrl + K, Ctrl + U Uncomment the cursor line Ctrl + G Go to line Ctrl + F Find Ctrl + Shift + F Find in files (Global search) Ctrl + H Replace Ctrl + Shift + F Replace in files (Global replace) Ctrl + Tab Switch source code / window display Ctrl + Space Word completion Ctrl + Alt + L Open Solution Explorer window Ctrl + Shift + E Open Resource View window Ctrl + 0, Ctrl + G Open Git Commit window References Keyboard shortcuts in 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/en/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/","title":"Visual Studio Shortcut List"},{"content":"Here is how to add Hidemaru Editor\u0026rsquo;s grep to the right-click menu of Explorer in Windows 10/11.\n※ The following steps involve modifying the registry, so please proceed at your own risk.\nSteps Open the link below and save it to a folder of your choice. 秀丸レジストリ登録.reg\nDouble-click the 秀丸レジストリ登録.reg file to add it to the registry. References Run Hidemaru grep from the folder\u0026rsquo;s right-click menu ","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/en/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/","title":"Add Hidemaru Editor Grep to Explorer Right-Click Menu"},{"content":"Do you know the Birthday Paradox? Let me tell you a slightly mysterious story. How many people do you think need to gather for the \u0026ldquo;probability of people having the same birthday\u0026rdquo; to become high?\nFor example, a year has 365 days, so when you\u0026rsquo;re told \u0026ldquo;if 23 people gather, the probability of someone sharing a birthday is over 50%\u0026rdquo;\u0026hellip; it feels somewhat counterintuitive, right?\nBut this is actually over 50%.\nWhy does this happen? This phenomenon is called the \u0026ldquo;Birthday Paradox\u0026rdquo;. Its name contains \u0026ldquo;paradox\u0026rdquo;, but there is a proper mathematical reason for it.\nWhen the number of people is \u0026ldquo;n\u0026rdquo;, the probability that no one shares a birthday can be calculated with the following formula:\n1 P(No one shares) = 365/365 × 364/365 × 363/365 × ... × (365 - n + 1)/365 By subtracting that from 1, you get the \u0026ldquo;probability of sharing a birthday with someone\u0026rdquo;.\nLooking at the results\u0026hellip; Number of People Probability of people having the same birthday 10 people Approx. 11.7% 20 people Approx. 41.1% 23 people Approx. 50.7% (Focus here!) 30 people Approx. 70.6% 70 people A whopping approx. 99.9%! In other words, with just 23 people, there is a more than half chance that someone will share a birthday. It seems like this could apply quite often in a school class or a workplace meeting, right?\nConclusion: The gap between intuition and mathematics is interesting The \u0026ldquo;Birthday Paradox\u0026rdquo; is an interesting example where our intuition and actual mathematical probabilities diverge. Knowing this kind of story might make for lively small talk or a fun quiz!\nReference Links Birthday problem (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/en/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":"What is the Birthday Paradox?"},{"content":"What is Snipping Tool? Snipping Tool is a screenshot tool built into Windows as a standard feature. You can cut and save a portion of the screen, capture the entire screen, or record the screen.\nHow to Launch Snipping Tool You can mainly launch it in the following 3 ways.\nPress the Win key, type Snipping Tool, and press the Enter key. Press Win + Shift + S. Press Win + R, type snippingtool, and press the Enter key. How to Use Snipping Tool The steps to save a captured image are as follows: Select the Camera icon. Click the New button. Select the area you want to capture. Click the Save as button. Enter the destination and file name to save. The steps to save a captured video are as follows: Select the Video icon. Click the New button. Select the area you want to capture. Click the Start button. Record the screen. Click the Stop button. Click the Save as button. Enter the destination and file name to save. Reference Use Snipping Tool to capture screenshots ","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/en/p/snipping-tool%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9/","title":"How to Use Snipping Tool"},{"content":"Here is how to create a shortcut to lock your computer.\nIt is convenient because you can lock your computer by simply double-clicking the shortcut created on your desktop.\nHow to Create 1. Right-click on the desktop and select New \u0026gt; Shortcut 2. The Create Shortcut screen will appear. Enter rundll32.exe user32.dll,LockWorkStation and click Next 3. Enter the shortcut name Lock Computer and click Finish 4. Change the icon of the created shortcut Right-click the created shortcut and select Properties\nClick Change Icon\nSelect the yellow padlock icon and click OK. Click OK again to close the properties.\nThat\u0026rsquo;s it.\nDouble-clicking the created shortcut will lock your computer.\nYou can also lock your computer by pressing the Win key + L key.\n*Note: No confirmation dialog will be displayed when locking the computer.\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/en/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/","title":"How to Create a Shortcut to Lock Your Computer"},{"content":"What is the Monty Hall problem? The Monty Hall problem is a brain teaser, in the form of a probability puzzle, loosely based on the American television game show \u0026ldquo;Let\u0026rsquo;s Make a Deal\u0026rdquo; and named after its original host, Monty Hall. The problem is as follows:\nPremise: One of the three doors has a prize behind it, and the other two have a dud (goat).\nThe participant chooses one of the three doors. The host opens one of the other two doors that the participant did not choose, revealing a dud. The participant is asked whether they want to change their chosen door. The problem is to consider whether the participant should change the door or not.\nSolution The solution to the Monty Hall problem is as follows:\nIf the participant does not change the initially chosen door\nProbability of winning: 1/3 Probability of losing: 2/3 After the host opens the dud door\nIf not changed, probability of winning: 1/3 (Does not change from the winning probability in step 1.) If changed, probability of winning: 2/3 (The probability of the remaining options.) Therefore, the participant has a higher probability of winning by changing the door.\nReference 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/en/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":"Monty Hall problem"},{"content":"Download micro https://github.com/zyedidia/micro/releases\nOpen the link above, click Show all XX assets (where X is a number), and download micro-X.X.XX-win64.zip (where X is a number). Unzip the zip file and place the files in a folder of your choice.\nSet Environment Variables To use micro.exe from the command prompt, you need to set the environment variables.\nPress Win key + R key, type sysdm.cpl, and press Enter. Click System Properties in System Properties. Click Environment Variables. Select Path under System variables and click Edit. Click New and add the path of the folder containing micro.exe. Click OK to close all dialogs. Restart the command prompt and type nano to check if it can be executed. How to use micro When you type micro in the command prompt and execute it, the following screen is displayed. The main operations and shortcut keys are as follows.\nShortcut Key Operation Ctrl+Q Close file Ctrl+S Save file Ctrl+O Open file Ctrl+A Select all Ctrl+X Cut selection Ctrl+C Copy selection Ctrl+V Paste Ctrl+Z Undo Ctrl+Y Redo Ctrl+E Execute editor command Reference 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/en/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/","title":"How to install the text editor micro on Windows"},{"content":"Download nano.exe https://sourceforge.net/projects/nano-for-windows/\nOpen the link above, click Download, and download GNU-Nano_Win32(static).zip. Extract the zip file and place nano.exe in an arbitrary folder.\nNote: Japanese input is not supported. (As of 2024/03/31) Set Environment Variables In order to use nano.exe from the command prompt, you need to set the environment variables.\nPress Win key + R key, type sysdm.cpl, and press Enter key. In System Properties, click on the Advanced tab. Click on Environment Variables. Select Path under System variables and click Edit. Click New and add the path to nano.exe. Click OK to close all dialogs. Restart the command prompt, type nano, and check if it can be executed. How to use nano When you type nano and execute it, a screen like the following will be displayed.\nShortcut descriptions are displayed at the bottom of the screen.\nThe meanings of the symbols are as follows:\n^ represents the Ctrl key. M- represents the Alt key. To save and close, press Ctrl + S and then Ctrl + X.\nReference 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/en/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":"How to install CLI text editor nano on Windows"},{"content":"How to Fix \u0026ldquo;Temporary failure resolving\u0026hellip;\u0026rdquo; Error in 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; When the above error appears in WSL, the DNS server settings might be incorrect. In my environment, I solved it with the following steps.\nStart WSL. Run sudo nano /etc/resolv.conf. Change the nameserver line as follows: 1 nameserver 8.8.8.8 Save with Ctrl + S and exit with Ctrl + X. Run sudo apt update. If the error doesn\u0026rsquo;t appear, it\u0026rsquo;s solved. If the above steps do not solve the issue It seems there are cases where the above steps don\u0026rsquo;t resolve the issue. Please refer to the following article:\nHow to resolve \u0026lsquo;Temporary failure resolving ~\u0026rsquo; during apt update in 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/en/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":"How to Fix \"Temporary failure resolving...\" Error in WSL"},{"content":"How to exit from the taskbar right-click menu This method is for Windows 10. It seems the menu is not displayed in Windows 11. If you hold down the Shift and Ctrl keys and right-click on the taskbar, Exit Explorer will appear in the menu.\nHow to exit from Task Manager Press Ctrl + Shift + Esc to launch Task Manager. Select Details. Select explorer.exe, press the Delete key, and when asked Do you want to end explorer.exe?, select End process. How to exit from Command Prompt Press Win + R, type cmd, and press Enter. Type taskkill /f /im explorer.exe and press Enter. How to start Explorer from Task Manager Press Ctrl + Shift + Esc to launch Task Manager. Select Run new task from the File menu. Type explorer.exe and press 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/en/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":"How to exit and restart Explorer"},{"content":"How to Restore the Classic Right-Click Menu in Windows 11 Here is how to restore the classic right-click menu in Windows 11.\nOpen the Registry Editor. Press the Win key + R key, type regedit, and press the Enter key. Navigate to HKEY_CURRENT_USER\\Software\\Classes\\CLSID\\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}. Create this key if it does not exist.\nNavigate to HKEY_CURRENT_USER\\Software\\Classes\\CLSID\\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\\InprocServer32. Create this key if it does not exist.\nCheck that the (Default) value in InprocServer32 is empty.\nRestart your computer. Confirm that the right-click menu has returned to the classic version. ","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/en/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/","title":"How to Restore the Classic Right-Click Menu in Windows 11"},{"content":"JetBrains Mono An open-source programming font provided by JetBrains.\nDownload: https://www.jetbrains.com/ja-jp/lp/mono/\nHackGen HackGen is a programming font that combines the English programming font Hack with Genjyuu Gothic, a derivative of Source Han Sans.\nDownload: https://github.com/yuru7/HackGen/releases\nRicty Diminished Ricty Diminished is a sister font to Ricty. Instead of Inconsolata and Migu 1M, it is synthesized using Inconsolata and Circle M+ 1m with the Ricty generation script. Since it does not include IPA Gothic glyphs, the number of available kanji glyphs is limited, but in exchange, it can be distributed under the SIL Open Font License.\nDownload: https://rictyfonts.github.io/diminished\nCica It uses Hack + DejaVu Sans Mono for alphanumeric characters and symbols. For other characters, it uses Rounded Mgen+. It is a programming font designed for coding.\nDownload: https://github.com/miiton/Cica/releases\nReferences:\nHack DejaVu Sans Mono Rounded Mgen+ Migu A synthesized font of M+ and IPA.\nDownload: https://itouhiro.github.io/mixfont-mplus-ipa/migu/\nOsaka A font that allows you to use Osaka, a standard Mac OS font, on Windows.\nDownload: http://ifs.nog.cc/osakattf.hp.infoseek.co.jp/\nPlemolJP A programming font that combines IBM\u0026rsquo;s open-source Japanese font IBM Plex Sans JP with IBM Plex Mono, also from IBM\u0026rsquo;s Plex series.\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/en/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/","title":"Collection of Fonts Useful for Programming"},{"content":"Here is how to launch Hidemaru Editor with the \u0026ldquo;hide\u0026rdquo; command. Note: This method has been verified to work on Windows 10/11.\nOpen the Registry Editor. Navigate to HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths. Create a key named hide.exe under App Paths. The part before .exe in this key name will be the command name. Set the (Default) value of the hide.exe key to the executable file path of Hidemaru Editor. In my environment, it was \u0026quot;C:\\Program Files (x86)\\Hidemaru\\Hidemaru.exe\u0026quot;. Create a String value named Path in the hide.exe key. Set the data of Path to the folder path where the Hidemaru Editor executable file is located. In my environment, it was \u0026quot;C:\\Program Files (x86)\\Hidemaru\u0026quot;. Now you can launch Hidemaru Editor with the hide command in the Run dialog, which can be opened with Win + R. Also, in the Command Prompt, you can launch it with the start hide command. 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; If you save the above content in a .reg file and execute it, the settings will be added to the registry.\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/en/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/","title":"How to Launch Hidemaru Editor with the \"hide\" Command"},{"content":"Unsolved Problems in Mathematics This is an explanation of unsolved problems in mathematics. Although the problems themselves are simple, there are still many that have not been proven.\nAre there infinitely many perfect numbers? A perfect number is a positive integer that is equal to the sum of its positive divisors, excluding the number itself. For example,\n6 has divisors 1, 2, and 3, and 1+2+3=6, so it is a perfect number. 28 has divisors 1, 2, 4, 7, and 14, and 1+2+4+7+14=28, so it is a perfect number. Currently, only 51 perfect numbers have been discovered. It is conjectured that there are infinitely many, but this has not yet been proven.\nGoldbach\u0026rsquo;s Conjecture Goldbach\u0026rsquo;s conjecture states that every even integer greater than 2 can be expressed as the sum of two primes. (Here, a prime number is a natural number that has no positive divisors other than 1 and itself.)\nFor example,\n4=2+2 6=3+3 8=3+5 10=3+7=5+5 The problem itself is very simple, but it remains unproven.\nRiemann Hypothesis The Riemann hypothesis is the conjecture that the zeros of the Riemann zeta function are restricted to negative even integers and complex numbers with real part 1 / 2.\nThe Riemann zeta function is the function $\\zeta$ defined by:\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$$ where $s$ is a complex number and $n$ is a natural number.\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/en/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/","title":"Unsolved Problems in Mathematics"},{"content":"I Collected Various Version Information Dialogs Windows 11 First, here is the version information for Windows 11 that I am currently using. IntelliJ IDEA (Community Edition) This is the environment where I write this blog. Visual Studio Code This is another editor I often use. It\u0026rsquo;s surprisingly simple. Visual Studio This is the development environment I use for C++. LINE(Windows) This is the Windows version of LINE. Paint.NET This is an image editing software. Sakura Editor This is a text editor. Google Chrome This is Google Chrome. I haven\u0026rsquo;t used it much since Edge came out. Firefox This is Firefox. I haven\u0026rsquo;t used it much recently. Microsoft Edge This is Microsoft Edge. I use this one quite often recently. OBS Studio This is OBS Studio. I haven\u0026rsquo;t used it much recently. TradingView This is TradingView. Recently, I\u0026rsquo;ve been using it to look at the USD/JPY charts. Spy++ This is Spy++. It\u0026rsquo;s a tool included in the Windows SDK. Dependency Walker This is Dependency Walker. It\u0026rsquo;s a tool included in the Windows SDK. Resource Hacker This is Resource Hacker. It\u0026rsquo;s a tool to edit and extract resources from executable files. Microsoft Excel This is Microsoft Excel. Bandicam This is Bandicam. It\u0026rsquo;s a video capture tool. WinMerge This is WinMerge. It\u0026rsquo;s a tool for viewing file differences. iTunes This is iTunes. I haven\u0026rsquo;t used it much recently. Hidemaru Editor This is Hidemaru Editor. It\u0026rsquo;s a text editor. Adobe Photoshop CS6 This is Adobe Photoshop CS6. Adobe Illustrator CS6 This is Adobe Illustrator CS6. ESET NOD32 This is ESET NOD32. Notepad++ This is Notepad++. It\u0026rsquo;s a text editor. MIFES This is MIFES. I haven\u0026rsquo;t used it much recently. ","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/en/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":"I Collected Various Version Information Dialogs"},{"content":"GIF Animation Screen Recording Tool I created a tool to record the screen and convert it into a GIF animation. With this tool, you can record screen operations and share them via communication tools like Microsoft Teams.\nHow to Use Launch the tool. Specify the recording area. If not specified, the entire screen will be recorded. Press the record button. Press the stop recording button. The GIF animation will be output to the same location as the executable file. Download Download\nOpen the link above and click the GIFScreenRecorder.exe link to download the executable file.\nSource Code 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/en/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/","title":"GIF Animation Screen Recording Tool"},{"content":"PMP Exam Study Summary A summary of my studies for the PMP exam.\nOverview PMP is a project management certification. It is based on a guidebook called PMBOK (latest 7th edition). The PMP exam is 230 minutes long and consists of 180 questions, but 5 of them are dummy questions, so you pass if you answer 106 or more of the 175 questions correctly. The answers are multiple-choice, mostly with 4 options, but some have 5 options or are multiple-select.\nServant Leadership A leadership style that supports from the bottom rather than commanding from the top.\n10 Principles (Characteristics) of Servant Leadership Listening Empathy Healing Awareness Persuasion Conceptualization Foresight Stewardship Commitment to the Growth of People Building Community Agile Manifesto 4 Values We are uncovering better ways of developing software by doing it and helping others do it. Through this work we have come to value:\nIndividuals and interactions over processes and tools Working software over comprehensive documentation Customer collaboration over contract negotiation Responding to change over following a plan That is, while there is value in the items on the left, we value the items on the right more.\nAgile Manifesto\n12 Principles Behind the Agile Manifesto Our highest priority is to satisfy the customer through early and continuous delivery of valuable software. Welcome changing requirements, even late in development. Agile processes harness change for the customer\u0026rsquo;s competitive advantage. Deliver working software frequently, from a couple of weeks to a couple of months, with a preference to the shorter timescale. Business people and developers must work together daily throughout the project. Build projects around motivated individuals. Give them the environment and support they need, and trust them to get the job done. The most efficient and effective method of conveying information to and within a development team is face-to-face conversation. Working software is the primary measure of progress. Agile processes promote sustainable development. The sponsors, developers, and users should be able to maintain a constant pace indefinitely. Continuous attention to technical excellence and good design enhances agility. Simplicity\u0026ndash;the art of maximizing the amount of work not done\u0026ndash;is essential. The best architectures, requirements, and designs emerge from self-organizing teams. At regular intervals, the team reflects on how to become more effective, then tunes and adjusts its behavior accordingly. Principles behind the Agile Manifesto\nTerminology Epic (Outline) User Story (Unit to be registered in the product backlog, unit for prioritization) Task (Technical work item, target for time estimation) Product Backlog / Product Backlog Item Product Owner Stakeholder Agile Practice Guide (Book) Lean Development Kanban Value Chain AC (Actual Cost) EV (Earned Value) PV (Planned Value) EVA (Earned Value Analysis) SPI (Schedule Performance Index = EV / PV) CPI (Cost Performance Index = EV / AC) EVM (Earned Value Management) BAC (Budget at Completion) ETC (Estimate To Complete) EAC (Estimate At Completion) Functional Organization Matrix Organization Projectized Organization Servant Leadership Tuckman\u0026rsquo;s Model (Forming, Storming, Norming, Performing, Adjourning) Team Charter Planning Poker (Fibonacci sequence) Retrospective (Looking back activity) Virtual Team Project Charter Conflict (6 Coping methods: Confronting/Problem Solving, Collaborating, Compromising, Smoothing/Accommodating, Forcing, Withdrawing/Avoiding) Value Stream Mapping Mentoring Coaching Training Douglas McGregor\u0026rsquo;s Theory X and Theory Y SWOT Analysis: Strength, Weakness, Opportunity, Threat SECI Model (Socialization, Externalization, Combination, Internalization) PDCA, PDSA PESTLE (Political, Economic, Social, Technological, Legal, Environmental) VUCA (Volatility, Uncertainty, Complexity, Ambiguity) Monte Carlo Method Decision Tree Analysis Expected Monetary Value (EMV) Net Promoter Score Cost-Benefit Analysis Sprint Review Release Management SOW (Statement of Work) \u0026ldquo;Document containing a detailed description of the project scope, objectives, deliverables, duration, resources, etc.\u0026rdquo; P-SOW (Procurement Statement of Work) RFI (Request For Information) RFP (Request For Proposal) Fixed Price Contract (FP: Fixed Price) Time and Material Contract (T\u0026amp;M: Time and Material) Cost Reimbursable Contract (CR: Cost Reimbursable) Fixed Price Incentive Fee (FPIF) Scope Creep Kano Analysis Funding Limit Reconciliation 100 Points Method MoSCoW Method (Must, Should, Could, Would) Traceability Matrix WBS Dictionary Velocity (Number of story points achieved in each iteration) Velocity Chart Engagement Assessment Matrix (Unaware, Resistant, Neutral, Supportive, Leading) Phase Gate Information Radiator Burndown Chart Burnup Chart Cumulative Flow Diagram QCD (Quality, Cost, Delivery) Spiral Model Critical Chain Feature Iteration / Sprint Iterative Incremental Increment (Deliverable of an increment) Resilience / Resiliency Stewardship: Sincere, trustworthy behavior and responsible actions (decision making) Escalation KPT (Keep, Problem, Try) RACI (Responsible, Accountable, Consulted, Informed) PMO (Project Management Office): Supportive, Controlling, Directive Cadence Tailoring Neurological Levels (Environment, Behavior, Capabilities, Beliefs/Values, Identity) Business Case (Document outlining project objectives, benefits, risks, ROI, etc.) Trend Analysis (Executed using run charts, mathematical techniques to predict future outcomes based on results) Quality Management Plan (Defines the strategy and approach for project deliverables\u0026rsquo; quality) Governance Process Product Owner (Product vision, product backlog prioritization, product release) Project Owner (Project sponsor/client) Project Manager (Manages the overall project) Project Leader (Directs on site) Project Member (Drives the project) Hybrid Approach Minimum Viable Product (MVP) Iteration Review Workshop Project Benefits Management Plan (Target benefits of project objectives, strategic means to realize them, and timeframes) Key Performance Indicator (KPI) On-site (In the field, locally) Analogous Estimating Three-Point Estimating Parametric Estimating Project Review Big Bang Approach DSDM (Dynamic Systems Development Method) Brooks\u0026rsquo;s Law Big Bang Approach (Introducing everything all at once) Risk Register (Document used as a risk management tool to identify potential setbacks in a project) Risk Register Situational Leadership Theory (SL Theory) (4 behaviors matched to the other party\u0026rsquo;s situation) Competence Commitment References Scrum Guide (Ken Schwaber \u0026amp; Jeff Sutherland) PMI ECO (Japanese Version) Page Agile Practice Guide PMI Code of Ethics and Professional Conduct Study Materials Aim for First Try Pass in \u0026ldquo;PMP® Certification Exam\u0026rdquo;! Strategy Course for Efficient Exam Preparation (2021) Agile Supported ","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/en/p/pmp%E5%8B%89%E5%BC%B7/","title":"PMP Study"},{"content":"Overview Notes on natural disasters that occurred in Japan.\nJanuary 1, 2024 Noto Peninsula Earthquake ","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/en/p/%E6%97%A5%E6%9C%AC%E3%81%AE%E7%81%BD%E5%AE%B3/","title":"Disasters in Japan"},{"content":"Seven Herbs (Nanakusa) Seri (Water dropwort) Nazuna (Shepherd\u0026rsquo;s purse) Gogyo (Cudweed) Hakobera (Chickweed) Hotokenoza (Nipplewort) Suzuna (Turnip) Suzushiro (Radish) ","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/en/p/%E4%B8%83%E8%8D%89%E7%B2%A5%E3%81%AE%E3%83%AC%E3%82%B7%E3%83%94/","title":"Nanakusa-gayu Recipe"},{"content":"Recommended Japanese Music Tulip - Seishun no Kage Iruka - Nagoriyuki Eigo Kawashima - Sake to Namida to Otoko to Onna Orangestar - Surges Mariya Takeuchi - Plastic Love RADWIMPS - Zenzenzense BEGIN - Shimanchu nu Takara The Blue Hearts - Jounetsu no Bara Yumi Arai - Rouge no Dengon Begin - Umi no Koe Yumi Arai - Hikouki Gumo Love is Over - Ouyang Feifei Clammbon - Nami Yosete RADWIMPS - Sparkle Kariyushi58 - Anmer Kariyushi58 - Owari Hajimari Teresa Teng - Toki no Nagare ni Mi wo Makase Hikaru Utada \u0026ldquo;One Last Kiss\u0026rdquo; Fukashigi/wonderboy - Pellicule (Official Music Video) Kamen Rider Black RX - Opening Song Tashika na Koto / Kazumasa Oda - Covered by Pak Yuna 【Japanese healing song】Hana／Kosuke Atari（covered by Leah） \u0026ldquo;Mayonaka no Door ~stay with me\u0026rdquo; / Miki Matsubara Official Lyric Video Midnight Pretenders Anri - Last Summer Whisper 1985 - The Blue Hearts BUMP OF CHICKEN - supernova Tulip - Kokoro no Tabi 1972 Chiisana Koi no Uta ASKA - Hajimari wa Itsumo Ame (Official Music Video) Kirinji - Aliens Ano Hi no Sora yo - Kosetsu Minami ","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/en/p/%E5%A5%BD%E3%81%8D%E3%81%AA%E9%82%A6%E6%A5%BD/","title":"Favorite Japanese Music"},{"content":"Recommended Western Music 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 Vida Maroon 5 - Memories (Lyrics) Dido - Thank You (Official Video) Bob Dylan - Blowin\u0026rsquo; in the Wind 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 - 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/en/p/%E5%A5%BD%E3%81%8D%E3%81%AA%E6%B4%8B%E6%A5%BD/","title":"Favorite Western Music"},{"content":"Install PowerToys via Command Prompt Here is how to install PowerToys via Command Prompt.\n1 winget install Microsoft.PowerToys --source winget Uninstall PowerToys via Command Prompt 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/en/p/powertoys%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB/","title":"Install PowerToys via Command Prompt"},{"content":"Let\u0026rsquo;s show respect Let us respect people who can do things that we cannot.\nIn society, there are surprisingly many people who rank jobs or positions and are unable to show respect to others.\nLet\u0026rsquo;s pay respect to anyone who accomplishes a job we cannot, regardless of what that job may be.\nThis is something I want to keep in mind.\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/en/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/","title":"Let us respect people who can do things we cannot"},{"content":"Splatoon 2 Splatoon 2 is probably the game I\u0026rsquo;ve played the longest in my life. I\u0026rsquo;ve barely played the story mode, but the 4v4 online matchmaking is very well done. Being able to play against people around my skill level gives it a captivating appeal that never gets old. Also, it is fun to read the movement patterns of both opponents and teammates and think of strategies to win.\nWeapons The weapons I use most often, in order, are the \u0026ldquo;Foil Squeezer\u0026rdquo;, \u0026ldquo;Splattershot Jr.\u0026rdquo;, \u0026ldquo;Splat Roller\u0026rdquo;, and \u0026ldquo;Foil Flingza Roller\u0026rdquo;. The \u0026ldquo;Splattershot Jr.\u0026rdquo; is a beginner-friendly weapon, and I used it a lot in the early stages.\nThe turf inked points for each are as follows:\nWeapon Turf Inked Flingza Roller 6,636,594p Splat Roller 6,200,629p Splattershot Jr. 4,211,759p Foil Squeezer 744,678p Splattershot 301,238p Regarding Level I\u0026rsquo;ve been going back and forth between A+ and S+, and I\u0026rsquo;ve been stuck unable to climb to the upper tiers of S+ for a while now. However, rather than trying to climb to the top, I feel like I\u0026rsquo;m playing just to enjoy the matches. (If I get too high up, the opponents get stronger and the tension rises, making it less enjoyable.)\nPlay Time My playtime has exceeded 2,500 hours.\nFuture Goals My goal is to maintain my game level and have fun playing, but I would like to max out my money and gear. Since Splatoon 3 came out, matchmaking has been taking longer and sometimes fails entirely, so I want to keep playing while hoping the player base doesn\u0026rsquo;t decrease any further.\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/en/p/%E3%82%B9%E3%83%97%E3%83%A9%E3%83%88%E3%82%A5%E3%83%BC%E3%83%B32/","title":"Splatoon 2"},{"content":"About Receiving the Microsoft MVP Award (2023-2024) I have received the Microsoft MVP (2023-2024) award. This is the 7th consecutive year I have received this award since 2017.\nThe category I was awarded in is Developer Technologies.\nLooking back at my past activities, I have been doing the following:\nPublishing code on GitHub Disseminating technical information on my blog and SNS (Twitter, etc.) Posting on the MSDN Forums Providing feedback on Microsoft products I hope to continue writing better articles and sharing information.\nThank you very much.\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/en/p/microsoft-mvp%E5%8F%97%E8%B3%9E%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A62023-2024/","title":"About Receiving the Microsoft MVP Award (2023-2024)"},{"content":"The Three Classic Problems of Ancient Greek Mathematics Given a circle, construct a square with the same area (Squaring the circle) Given an arbitrary angle, trisect it (Angle trisection) Given a cube, construct a cube with twice the volume (Doubling the cube) Archimedean Spiral On a plane, let a ray OB rotate around a fixed point O at a uniform speed. Assuming the initial position is OA, when point P starts from O simultaneously as the ray begins moving from OA, and moves along OB at a constant speed, the curve drawn by point P is an Archimedean spiral.\nPappus\u0026rsquo;s Theorem Cycloid Conchoid of Nicomedes Cissoid of Diocles Fermat\u0026rsquo;s tangent method Descartes\u0026rsquo; normal method Timeline Year Event c. 3400 BC Sumerians perform calculations using clay tokens c. 3000 BC Hieroglyphic mathematics appears in Egypt c. 2800 BC Weights and measures based on the decimal system are used in the Indus Valley Civilization c. 2700 BC Egyptians use ropes and Pythagorean triples to verify angles c. 2500 BC The abacus, a calculating tool, is discovered c. 2500 BC Reference History of Mathematics ","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/en/p/%E6%95%B0%E5%AD%A6%E3%81%AE%E6%AD%B4%E5%8F%B2/","title":"History of Mathematics"},{"content":"About the Elecom Trackball Deft Pro M-DPT1MRBK It has been about a week since I purchased the Elecom trackball \u0026ldquo;Deft Pro M-DPT1MRBK\u0026rdquo;, so I will review my experience using it.\nMain Features\nHigh number of buttons (8 buttons) Can be connected in 3 ways: wired, wireless receiver, and Bluetooth Large ball size (medium size, 44mm diameter) Purchase price on Amazon: ￥7,012 (as of May 2, 2021) Pros Unlike a mouse, you don\u0026rsquo;t need to move your wrist, which reduces wrist strain. With many buttons, you can assign various functions to them. I currently have them assigned as shown above. You can also change button assignments per application. Dedicated software installation is required for button assignment. Since the buttons are large, it is relatively easy to make precise movements for a trackball. Cons Dust accumulates around the trackball, so the ball needs to be removed and cleaned regularly (about once every few days). It takes time to get used to the different feel compared to a mouse, as you use your index and middle fingers to move the cursor and your thumb to operate the mouse wheel. Although I mentioned above that fine movements are easy, it is still difficult to move the cursor pixel by pixel with a trackball. You cannot operate the wheel while pressing the left button (e.g., when you want to zoom in or out while selecting an area in Paint). Overall, I think it is on the expensive side for a trackball, but generally it is quite easy to operate and has improved my work efficiency. I hope this will be helpful for those considering purchasing it.\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/en/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/","title":"Recommendation for the Deft Pro (M-DPT1MRBK) Trackball"},{"content":"What is wxWidgets wxWidgets is a C++ GUI library that works on platforms such as Windows, Mac, Linux, Android, and iOS.\nInstalling wxWidgets Open https://www.wxwidgets.org/downloads/ and download the Windows Installer. Run wxMSW-3.2.2.1-Setup.exe to install. Open \u0026ldquo;C:\\wxWidgets-3.2.2.1\\build\\msw\\wx_vc17.sln\u0026rdquo; from the installed folder. After opening wx_vc17.sln, select Build \u0026gt; Batch Build. Click the Select All button, and then click the Rebuild button. Once the build is finished, temporarily close Visual Studio. Creating a Sample Project Open Visual Studio. Select File \u0026gt; New \u0026gt; Project. Select Windows Desktop Application (tabs are C++, Windows, Desktop). Enter wxWidgetsSample for the Project Name. Click Create. Right-click wxWidgetsSample and select Properties. Under Configuration Properties \u0026gt; C/C++ \u0026gt; Additional Include Directories, add C:\\wxWidgets-3.2.2.1\\include and C:\\wxWidgets-3.2.2.1\\include\\msvc. Under Configuration Properties \u0026gt; Linker \u0026gt; Additional Library Directories, add C:\\wxWidgets-3.2.2.1\\lib\\vc_x64_lib. Open wxWidgetsSample.cpp and replace it with the code below. 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;); } If you build and run it, a window like the one below will open. References The sample project is provided below. wxWidgetsSample\nOfficial Site Game using C++ and wxWidgets That\u0026rsquo;s all.\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/en/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":"Sample using wxWidgets"},{"content":"Movies to watch (check off as I watch them) Maquia: When the Promised Flower Blooms The Professor\u0026rsquo;s Beloved Equation Summer Wars Hidden Figures Good Will Hunting A Beautiful Mind The Theory of Everything The Man Who Knew Infinity Hawking (Benedict Cumberbatch) Tenchi: The Samurai Astronomer Pi 21 I.Q. Proof 3 Idiots Buffalo \u0026lsquo;66 A Clockwork Orange Backdraft Asakusa Kid Top Gun The Matrix Resurrections I Am Legend The Da Vinci Code The Social Network Steins;Gate Planetes Gravity Violet Evergarden Psycho-Pass Demon Slayer Princess Mononoke Winny Zero Focus Zootopia Your Name. Weathering with You Back to the Future (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/en/p/%E6%98%A0%E7%94%BBtodo%E3%83%AA%E3%82%B9%E3%83%88/","title":"Movie TODO List"},{"content":"Cool Web Page Templates\nhtml5up https://html5up.net/ I wanted to try using this, so this is a memo.\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/en/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":"Cool Web Page Templates (html5up)"},{"content":"Prerequisites ISO C++ 20 Standard (/std:c++20) Code 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()); That\u0026rsquo;s how to output the current time in ISO8601 format in C++.\nReferences 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/en/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":"How to output the current time in ISO8601 format in C++"},{"content":"Here is how to create a shortcut to shut down Windows.\nIt is convenient because you can shut down by double-clicking the created shortcut placed on your desktop or elsewhere.\nHow to create 1. Right-click on the desktop, and select New \u0026gt; Shortcut 2. The shortcut creation screen will appear, enter shutdown.exe -s -f -t 0 and click Next 3. Enter the shortcut name Shutdown and click Finish 4. Change the icon of the created shortcut Right-click the created shortcut and select Properties\nClick Change Icon...\nSelect the red square icon and click OK, then click OK again to close the properties window.\nThat\u0026rsquo;s it.\nDouble-clicking the created shortcut will shut down Windows.\n*Note: No shutdown confirmation dialog will be displayed.\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/en/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/","title":"How to create a shortcut to shutdown Windows"},{"content":"Here is how to apply a mosaic to specific parts of an image using paint.net.\nWhen uploading an image to the internet, there may be times when you want to blur or pixelate a specific area. With paint.net, you can quickly edit your images.\nSteps 1. Open the image you want to pixelate in paint.net 2. Use the selection tool to select the area you want to pixelate (multiple selections are possible) 3. Select Menu \u0026gt; Effects \u0026gt; Distort \u0026gt; Pixelate Adjust the coarseness of the mosaic effect with the Cell Size. A larger value provides higher concealment. [Downsampling] Select Multi-sampled bilinear [Upsampling] Select Nearest neighbor Click OK to close the dialog.\n4. The mosaic effect will be applied to the image, so you can now save it. That\u0026rsquo;s it.\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/en/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":"How to apply a mosaic to specific areas of an image in paint.net"},{"content":"Here is how to add a border to an image using paint.net.\nSteps 1. Open the image you want to add a border to in paint.net 2. Set the secondary color (this will be the color of the border) If the color palette is not displayed, press the F8 key on your keyboard.\nIf you want to set it to black, click on .\n3. Select Menu \u0026gt; Image \u0026gt; Canvas Size\u0026hellip; Increase the width and height by 2 pixels each. Increasing them by 2 pixels will create a 1-pixel border. If you want a 5-pixel border, increase the width and height by 10 pixels each.\nSelect \u0026ldquo;Middle\u0026rdquo; for the anchor, and click OK.\n4. The border will be added to the image, so save the image. That\u0026rsquo;s it.\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/en/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/","title":"How to add a border to an image using paint.net"},{"content":"Introduction By using a service called Ranklet, you can easily get and place popular page rankings from Google Analytics.\nIn this article, I will show you how to place it on a HUGO blog.\nDemo Preparation Google Analytics must be set up on your site. Steps Access Ranklet. Click Sign in with Google and log in with your Google account (it must be linked to your Google Analytics account). Click Allow.\nSet up basic information. I configured it as above.\nIn Google Analytics View, select the view from which you want to get the ranking. Set up text replacement. I configured it as above. This is set to remove | kenji.blog from the page title.\nSet up the template. HTML (Hid the ranking numbers) 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 (Changed font size and set the description to be displayed in 3 lines) 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 { // 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; /* Number of lines */ } } } } JavaScript remains unchanged. Copy the HTML from \u0026ldquo;Publish on site\u0026rdquo;. Copy the displayed HTML.\nPaste it into the HUGO template. Create layouts/partials/ranklet.html and paste the copied HTML. 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; Paste the following code on the line before \u0026lt;/footer\u0026gt; in layouts/_default/single.html. 1 {{- partial \u0026#34;ranklet.html\u0026#34; . }} That\u0026rsquo;s it. Now the ranking will be displayed as shown at the bottom of this page.\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/en/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":"How to Get and Place Popular Page Rankings from Google Analytics"},{"content":"Python Google Colaboratory Google Colaboratory is an online execution environment for Python.\nGPU usage is possible. With Colab notebooks, you can combine executable code and rich text (images, HTML, LaTeX, etc.) in a single document. It is based on Jupyter Notebook.\nRust Rust Playground JavaScript Javascript Playground Java paiza.IO Online Java compiler Haskell Haskell Playground Swift Online Swift Playground C++ C++ 14 Others AWS Cloud9 An online integrated development environment provided by Amazon AWS. Tools for over 40 programming languages such as Node.js, JavaScript, Python, PHP, Ruby, Go, and C++ are pre-packaged.\nVisual Studio Code for the Web An online development environment provided by Microsoft. However, languages that require compilation cannot be executed or debugged.\npaiza.IO An online execution environment supporting 24 major languages such as C, C++, Java, Ruby, Python, PHP, Perl, etc.\nCodePen An online execution environment for HTML, CSS, and JavaScript.\ncodeanywhere An online IDE. Allows code sharing and chatting.\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/en/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":"[By Language] Summary of Online Code Execution Environments"},{"content":"What is the Sieve of Eratosthenes? The Sieve of Eratosthenes is an algorithm for finding all prime numbers up to any given limit. The algorithm is simple and can be implemented with the following steps:\nCreate an array of boolean values with N elements, and initialize all elements to true. Set the 0th and 1st elements of the array to false (because 0 and 1 are not prime numbers). If the 2nd element of the array is true, output 2 as a prime number. Set all multiples of 2 from $2^2$ onwards in the array to false.* If the 3rd element of the array is true, output 3 as a prime number. Set all multiples of 3 from $3^2$ onwards in the array to false. Repeat the same process for the 4th, 5th, \u0026hellip;, Nth elements. *The reason for targeting elements from the square of the number onwards to become false is because the numbers smaller than the square have already been processed (enumeration is complete).\nImplementation in 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; } } } } Slightly Faster Version Considering the following points, we implement a slightly faster version:\nInstead of initializing the array with true, initialize it with false (this is faster). Since multiples of 2 are not prime numbers, omit the process of setting the elements of multiples of 2 to false. There is no need to loop up to n; by enumerating primes up to the square root of n, you can enumerate primes up to 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); } } References Sieve of Eratosthenes ","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/en/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/","title":"How to Enumerate Prime Numbers Up to 1000 Using the Sieve of Eratosthenes"},{"content":"Install using terminal Open the terminal Run sudo gem install cocoapods → For some reason, an error message like the following appeared and the installation failed. Output 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. So I searched the web for the error message (see \u0026ldquo;Reference\u0026rdquo; below) and executed the following command: 1 /bin/bash -c \u0026#34;$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)\u0026#34; Output 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 Run brew install cocoapods Output 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`). Run pod --version Output 1 1.12.0 It seems to have been installed successfully for now.\nReference 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/en/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":"How to install CocoaPods on Mac"},{"content":"How to Get the Daily Record Creation Count Using SOQL in Salesforce Open the Developer Console. Open the Query Editor tab. Paste and execute the following SOQL query. 1 select day_only(createdDate), count(createdDate) from account group by day_only(createdDate) order by count(createdDate) desc limit 10 Change account to the name of any object you want to query before executing.\nReference 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/en/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/","title":"How to Get the Daily Record Creation Count Using SOQL in Salesforce"},{"content":"\nRequirements Google Account Steps Access https://colab.research.google.com/ Select \u0026ldquo;File\u0026rdquo; -\u0026gt; \u0026ldquo;New notebook\u0026rdquo; Paste and run the following code 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() # Show legend plt.show() Execution Result References 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/en/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/","title":"How to draw graphs using Python (matplotlib.pyplot)"},{"content":"Requirements Twitter API Twitter API SECRET Twitter ACCESS TOKEN Twitter ACCESS TOKEN SECRET Google Account For instructions on how to obtain the Twitter API, please refer to the reference sites.\nSteps to Tweet using API Access https://colab.research.google.com/ Select \u0026ldquo;File\u0026rdquo; -\u0026gt; \u0026ldquo;New notebook\u0026rdquo; Paste and run the following code (use your own obtained values) 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; Paste and run the following code 1 import tweepy Paste and run the following code (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;) → A tweet saying hello will be posted\nPaste and run the following code (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;) → A tweet saying hello v2 will be posted\nThat\u0026rsquo;s all\nReferences [As of April 2021] Thorough Explanation of Twitter API Application Process with Example Use Cases and Screenshots [No Troublesome Setup Needed!] Google Colaboratory is Recommended for Trying Out Twitter API [Source Code is also Shared] [Tweepy] Twitter API v2: Tweet, Reply, Poll, Media (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/en/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/","title":"How to Tweet Using Twitter API and Google Colaboratory"},{"content":"What is OpenSSL? It is an open-source library that provides the processing necessary for encrypted communication.\nTo use it from a program, since the C language source code is public, you need to build it and create a library.\nBelow, we will introduce the build procedure.\nPreparing the build environment Perl\nDownload strawberry-perl-5.32.1.1-64bit.msi from https://strawberryperl.com/. The latest version should be fine.\nNASM\nDownload 2.16.01/nasm-2.16.01-win64.zip from Download at https://www.nasm.us/. The latest non-rc version should be fine. After installation, you need to add the folder where NASM was installed to the environment variable PATH.\nVisual Studio 2022 ** or ** Build Tools for Visual Studio 2022\nInstall Visual Studio 2022 Community or Build Tools for Visual Studio 2022 from https://visualstudio.microsoft.com/ja/downloads/.\nOpenSSL build procedure on Windows Download and extract openssl-3.1.0.tar.gz from https://www.openssl.org/source/. If you cannot extract it, execute tar -xzf openssl-3.1.0.tar.gz in the command prompt. Launch the command prompt with administrator privileges. Open the extracted folder. Execute the following command *Change the Community part according to the version of Visual Studio you installed 1 \u0026#34;C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\VC\\Auxiliary\\Build\\vcvarsall.bat\u0026#34; x64 Execute the following command 1 perl Configure VC-WIN64A Execute the following command (takes a considerable amount of time) 1 nmake Execute the following command (takes a considerable amount of time) 1 nmake test Execute the following command 1 nmake install If successful, OpenSSL will be installed in C:\\Program Files\\OpenSSL.\nThat is all.\nReference 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/en/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":"How to build OpenSSL on Windows"},{"content":"What is i18n? i18n is an abbreviation for Internationalization. Since Internationalization is long, it is abbreviated as i18n because there are 18 letters between the first i and the last n.\nIt is often used in the context of internationalizing software.\nThe main target items in internationalization include the following: 1\nCharacter sets (standard character codes, etc.) Text direction (left to right, right to left, top to bottom towards the left, etc.) Text / Wording Fonts Formatting Numbers (decimal point characters, thousands separator characters, number of digits to group by, etc.) Date and time (how to format year, month, and day; differences in calendars used such as Islamic/Gregorian/Hebrew/Japanese calendars, etc.) Time difference in date and time information Currency information Internationalization and localization - 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/en/p/i18n%E3%81%A8%E3%81%AF/","title":"What is i18n?"},{"content":"How to make a presentation with HTML reveal.js is a presentation creation tool using HTML and Markdown, with the following features:\nA variety of presentation features such as mathematical formulas, animations, and swipe operations Customizable themes and layouts Navigation features compatible with multiple devices such as mice, keyboards, and touchpads Advanced features such as automatic slide playback and video embedding Can be exported in PDF format With these features, users can easily create interactive and engaging presentations.\nHow to install and use reveal.js The easiest way to use it is to download the entire ZIP from the following page and extract it.\nOpen https://revealjs.com/installation and download master.zip from the link Open index.html in the extracted folder in a browser Rewrite index.html to create your own presentation You can use demo.html as a reference since it contains HTML code for a demo. Use Cases The presentations you create can be published as web pages as is, or exported as PDFs. Also, since the source of the presentation is text, it is easy to manage it with a version control system.\nIt seems you can also create presentations in Markdown format.\nReferences Let\u0026rsquo;s use reveal.js for future presentations List of Markdown Notation Samples ","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/en/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":"How to make a presentation with HTML (reveal.js)"},{"content":"What is Stable Diffusion? Stable diffusion is an AI developed by a research team at the University of Munich in Germany that generates images from inputted text information. By training on various images, it is possible to generate a wide variety of images, from photorealistic ones to illustrations.\nThis time, I will introduce how to generate illustration images using the pre-trained data of Stable diffusion.\nWhat you need Google Account That\u0026rsquo;s all.\nGeneration steps Open https://colab.research.google.com Select File on the top left and choose New notebook Select Edit and choose Notebook settings Change the Hardware accelerator to GPU Paste and execute the following code 1 !pip install diffusers==0.8.0 transformers Paste and execute the following code 1 from diffusers import StableDiffusionPipeline Paste and execute the following code 1 2 pipe = StableDiffusionPipeline.from_pretrained(\u0026#34;gsdf/Counterfeit-V2.5\u0026#34;) pipe.to(\u0026#34;cuda\u0026#34;) Paste and execute the following code 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 The Prompt used here is based on the Prompt at https://huggingface.co/gsdf/Counterfeit-V2.5.\nGeneration results (some) References https://huggingface.co/gsdf/Counterfeit-V2.5 Tried making an image generation program using Artificial Intelligence (AI) in 15 minutes [Live Programming] ","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/en/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":"How to generate illustration images using AI (Stable Diffusion)"},{"content":"What is an Executable File (exe) A file that can be executed on Windows. Basically, it is written in a format called PE format. It contains machine code to execute, as well as resources such as icons and images.\nSince there are several tools to analyze executable files, I will introduce them here.\n7-Zip EXE files are sometimes compressed because their size tends to be large otherwise. In this case, by using the file compression and decompression software 7-Zip, you can extract the executable file and examine its contents. WinRAR is another tool that can extract them similarly.\nResource Hacker It allows you to extract resources (icons, bitmaps, dialog boxes, strings, etc.) inside an EXE file. Additionally, since it functions as a binary editor, you can edit and rewrite the contents of an EXE file.\nPE Explorer It can analyze PE files (EXE, DLL, OCX, SYS, drivers) for Windows. PE Explorer provides various analysis features, such as displaying the file structure, file headers, directory entries, and exported functions and symbols.\nDependency Walker You can investigate the DLL files that an EXE file depends on and verify whether they are loaded correctly. You can also trace the function calls of DLL files.\nGhidra This is a powerful reverse engineering tool developed by the NSA (National Security Agency) and released for free as open source. It is highly popular because it not only disassembles EXE files (converts them to assembly language) but also has decompilation capabilities to convert them into a form close to C language.\nIDA Free / IDA Pro These are high-performance disassemblers and decompilers that have become a global industry standard in malware analysis and reverse engineering. The Pro version is very expensive, but you can use the functionally restricted version \u0026ldquo;IDA Free\u0026rdquo; for free for personal or non-commercial purposes.\nx64dbg (x32dbg) An open source debugger for Windows. It specializes in \u0026ldquo;dynamic analysis,\u0026rdquo; which involves analyzing the internal state and memory step-by-step while running the executable file. It is commonly used for solving crackmes (challenge programs for analysis) and investigating malware behavior.\nILSpy / dotPeek If the target EXE file is created in a .NET language such as C#, using these tools allows you to decompile (reverse compile) it into almost the exact same state as the original source code, completely exposing its contents.\nThese tools are useful for examining the contents of EXE files, but caution is required. Modifying files or using them for unauthorized purposes can cause copyright and security issues, so please ensure you fully understand this before using them.\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/en/p/tools-to-analyze-executable-files/","title":"Tools to Analyze the Contents of Executable Files (exe)"},{"content":"Introduction I will introduce how to switch applications on a Mac in a Windows-like manner (using Alt+Tab).\nSince this is difficult to achieve by changing standard settings, this method involves installing an application.\nIn action How to setup (macOS Ventura) Open https://alt-tab-macos.netlify.app Click Download the latest release Open the downloaded application Follow the instructions to install Now, you can switch applications using Alt+Tab just like on Windows.\nThat\u0026rsquo;s all.\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/en/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":"How to switch applications like Windows (Alt+Tab) on a Mac"},{"content":"Introduction When switching between Windows and Mac, the frequently used keyboard shortcuts like copy, paste, and undo are different. This post introduces a method to match them.\nSetup Method (macOS Ventura) Open System Settings Select Keyboard Select Keyboard Shortcuts Select Modifier Keys Assign the Control(^) key to \u0026ldquo;⌘ Command\u0026rdquo; Assign the Command(⌘) key to \u0026ldquo;^ Control\u0026rdquo; Click Done That\u0026rsquo;s all.\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/en/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":"How to Match Mac Copy and Paste Shortcut Keys with Windows"},{"content":"Introduction I use a US keyboard, and on Windows, I switch Japanese input with Alt + `. I wanted to use the same key to switch on Mac, and when I looked it up, I found that it can be changed in the settings.\nHow to configure (macOS Ventura) Open System Settings Select Keyboard Select Keyboard Shortcuts Select Input Sources Double-click the shortcut notation on the right side of \u0026ldquo;Select next source in Input menu\u0026rdquo; Press Alt + ` Click Done Now you can switch between English and Japanese with Alt + `. However, by default, Katakana is included in the input switching cycle, so I removed Katakana from the input sources using the steps below.\nOpen System Settings Select Keyboard Click Edit on the right side of Japanese - Romaji in Text Input Click Japanese - Romaji Uncheck Katakana in the Input mode Click Done That\u0026rsquo;s all.\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/en/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":"How to change the shortcut key for switching between Japanese and English input on Mac"},{"content":"How to find the location of an executable in Windows Sometimes when you execute a command by specifying an executable file, you want to know where that executable file is located. In such cases, you can find the location of the executable file using the following command.\n1 where \u0026lt;executable_file_name\u0026gt; For example, if you want to know the location of Paint (mspaint.exe), you can do it as follows.\n1 where mspaint.exe References 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/en/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":"How to find the location of an executable in Windows"},{"content":"Purchased a mac mini (2018) I bought an older used mac mini (2018) on Mercari. The specs are below.\nCPU: 3.2GHz 6-Core Intel Core i7 Memory: 32GB Storage: 1TB SSD The price was 77,000 JPY\nReason for purchase I use a mac mini with almost the same specs at work for smartphone app development, but I wanted to set up a development environment at home as well (especially for running Xcode). I have a macbook pro, but it\u0026rsquo;s 9 years old and runs very slowly, so I hardly use it. I wanted to develop iOS apps personally. Immediately installed Xcode and IntelliJ IDEA The Xcode version is 14.3 (14E222b) The IntelliJ IDEA version is 2023.1 Let\u0026rsquo;s get to developing!\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/en/p/mac-mini2018%E3%82%92%E8%B3%BC%E5%85%A5/","title":"Purchased a mac mini (2018)"},{"content":"About \u0026ldquo;Unsplash\u0026rdquo; https://unsplash.com/\nTo summarize, the stock photo site \u0026ldquo;Unsplash\u0026rdquo; has the following features:\nAll images can be used for free Commercial use is allowed Image modification is allowed No permission required No attribution required It is very easy to use when writing articles for a blog, so please give it a try.\nFor information about the license, please refer to the footnote below.1 I will also be utilizing it on this site.\nUnsplash License\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/en/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/","title":"About the Stock Photo Site \"Unsplash\" for Blogs"},{"content":"Get the egui sample You can run the egui sample using the following commands:\n1 2 3 git clone https://github.com/emilk/eframe_template/ egui_test cd egui_test cargo run Load a Japanese-compatible font To display Japanese, you need to load a Japanese-compatible font.\nAdd the following lines inside the pub fn new method in src/app.rs.\n1 2 3 4 5 6 7 8 9 10 11 12 // Load a Japanese-compatible font 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); Now you can display Japanese. ","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/en/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/","title":"How to Display Japanese in egui"},{"content":"What is KaTeX KaTeX is a JavaScript library for displaying LaTeX-style mathematical formulas in HTML.\nSpecifically, it can display formulas like the following:\n$$f(x) = x^2 + x + 41$$ There seem to be other LaTeX-style math rendering libraries, but KaTeX is known for being simple and fast.\nHow to introduce it to Hugo Create a new layouts/partials/math.html in your Hugo folder hierarchy. Make the contents as follows:\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; Next, add the following code to the existing file layouts/partials/extend_head.html. 1 2 3 {{ if or .Params.math .Site.Params.math }} {{ partial \u0026#34;math.html\u0026#34; . }} {{ end }} Now you are ready to use KaTeX. You can enable KaTeX by adding math: true to the front matter of a page.\nAll you have to do is write formulas in LaTeX style in the body of the page article. 1 $$ e^{i \\pi} = -1 $$ If you describe it as above, it will be displayed as follows:\n$$ e^{i \\pi} = -1 $$ References Math Typesetting | PaperModX KaTex Auto-render Extension Introduction to 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/en/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/","title":"How to enable KaTeX (LaTeX-style math formulas) in Hugo"},{"content":"How to Win Friends and Influence People https://amzn.to/3YTv0Dr\nThe Courage to Be Disliked https://amzn.to/3n3SVCQ\nThe 100-Year Life: Living and Working in an Age of Longevity https://amzn.to/3TtKUDf\nThe 7 Habits of Highly Effective People 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/en/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/","title":"Recommended Business Books"},{"content":"Recommended Chrome Extensions I would like to introduce the Chrome extensions I am currently using. Although they are for Chrome, they can also be used in Microsoft Edge.\n1. simpleGestures An extension that enables the use of mouse gestures. It allows you to control the browser without using the keyboard or aiming for toolbar buttons.\nFor example, sliding the mouse to the left while holding down the right mouse button goes back, and sliding the mouse to the right while holding down the right mouse button goes forward.\nThis is also highly reliable because it is open source.\nsimpleGestures github 2. uBlock Origin An extension that blocks advertisements. Highly reliable because it is open source. It also operates comfortably with low CPU and memory usage.\nuBlock Origin github 3. DeepL Translation A Chrome extension that allows you to translate pages using the world-famous translation service DeepL. When you select the text you want to translate on the browser, the DeepL icon appears, and clicking it automatically translates the text.\nDeepL Translator 4. ChatGPT Sidebar An extension that allows you to use ChatGPT in a sidebar. You can display the sidebar with Ctrl+P and immediately ask the AI questions. If there is a selected text string in the page, it will be copied directly into the question text, so you can ask a question immediately with Ctrl+Enter.\nChatGPT Sidebar 5. Salesforce DevTools An extension that adds useful features for Salesforce development. I think this is unnecessary for those who do not use 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/en/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AE-chorme-%E6%8B%A1%E5%BC%B5/","title":"Recommended Chrome Extensions"},{"content":"How to update rustc Just execute the following single line command.\n1 rustup update Output Reference 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/en/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":"How to update rustc"},{"content":"What is egui It is a GUI library that can be used with Rust.\nTrying out egui You can run the egui sample with the following commands.\n1 2 3 git clone https://github.com/emilk/eframe_template/ egui_test cd egui_test cargo run After that, you can try various things while tinkering with the sample code.\nReference Official github\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/en/p/egui%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%BF%E3%82%8B/","title":"Trying out egui"},{"content":"How to Eliminate Noise on YAMAHA AG03 While listening to PC audio through the AG03 monitor, I experienced a crackling noise periodically (about once every 1 to 3 minutes). Upon investigating, I found the following solution for noise issues on the AG03.\nhttps://jp.yamaha.com/support/updates/yamaha_steinberg_usb_driver_for_win.html\nDownloading and installing the Yamaha Steinberg USB Driver from the site above resolved the noise.\n今すぐ購入 References 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/en/p/ag03%E3%83%8E%E3%82%A4%E3%82%BA%E8%A7%A3%E6%B6%88%E6%96%B9%E6%B3%95/","title":"How to Eliminate Noise on YAMAHA AG03"},{"content":"Recommended \u0026amp; Desired PC Peripherals for an Active Engineer Keyboard When it comes to keyboards, I highly recommend those with a durable capacitive non-contact (electrostatic) switch. I have owned a RealForce for over 10 years, and it is still working perfectly today. The model I use is the English layout, silent version.\nHowever, recently I\u0026rsquo;ve also been interested in the Logitech MX Keys keyboard.\nTrackball For pointing devices, I recommend a trackball over a mouse, as it reduces fatigue.\nI currently use the Logitech MX Ergo. This is an expensive device costing over 10,000 yen, but I think it is well worth the price.\nI am also interested in the DEFT PRO (M-DPT1MRXBK), which has a large ball and is operated with the index and middle fingers. Display Any display will do, but I recommend a high-resolution 4K display.\nCurrently, I use a DELL 4K display.\nRight now, I would love to have a wide display like an EIZO display or a DELL display.\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/en/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":"Recommended PC Peripherals"},{"content":"fontplus.jp, a service for using paid web fonts https://fontplus.jp/\nFor 1,100 yen per month, you can use all fonts, and it supports usage across multiple websites.\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/en/p/fontplus.jp/","title":"About fontplus.jp"},{"content":"By default, HUGO does not allow the use of HTML tags in articles, but you can enable them by adding the following to your config.toml.\n1 2 [markup.goldmark.renderer] unsafe = true Reference: 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/en/p/hugo%E3%81%A7html%E3%82%BF%E3%82%B0%E3%82%92%E4%BD%BF%E3%81%86/","title":"Using HTML Tags in HUGO"},{"content":"Looking for GitHub Sponsors I would be happy if you could become a GitHub sponsor via the button below.\nThe funds will be used for tool development and related activities.\nI will do my best until I can afford to attach a code signing certificate!\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/en/p/github%E3%82%B9%E3%83%9D%E3%83%B3%E3%82%B5%E3%83%BC%E5%8B%9F%E9%9B%86/","title":"Looking for GitHub Sponsors"},{"content":"What is a Button A button is one of the GUI controls and can be implemented with the standard Windows API. When the area on the screen is clicked (mouse left button down, mouse left button up), the processing specified in the program can be executed.\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 // Creating a button 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); ... // A WM_COMMAND message is sent from the OS to the window when clicked. case WM_COMMAND: switch(LOWORD(wParam)) { case ID_BUTTON1: SendMessage(hWnd,WM_CLOSE,0,0); break; } break; Sample code is available below. 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/en/p/%E3%83%9C%E3%82%BF%E3%83%B3%E3%81%A4%E3%81%84%E3%81%A6/","title":"About Buttons"},{"content":"Bought a Used ThinkPad Laptop Since my work on a laptop mostly involves connecting to other machines via remote desktop, I didn\u0026rsquo;t need a high-spec PC and a Chromebook would have been fine. However, because I couldn\u0026rsquo;t find one with a good design and high resolution, I bought a ThinkPad.\nThe specs are below, and using various points, the price came out to around 55,000 yen.\nThinkPad T470s CPU: Intel Core i7 7600U RAM: 24GB SSD: 512GB OS: Windows 10 Pro 64bit Screen: 14.0-inch wide (non-glare panel) Resolution: WQHD LCD 2560×1440 Weight: Approx. 1.32kg Notes: English keyboard Since it\u0026rsquo;s used, I thought it might have signs of wear or scratches, but there were no problems at all, which is great. The battery is also working fine so far.\nComplaints that come to mind so far There are no Pause and App keys. I used the Pause key as a shortcut to open system settings. Also, I used the App key to open pop-up menus, so it\u0026rsquo;s inconvenient without it. The PageUp and PageDown keys are right next to the arrow keys on the keyboard, so I often press them by mistake. This might just take some getting used to. Other PCs I considered but didn\u0026rsquo;t buy ASUS Chromebook Flip C436FA (C436FA-ENG) HP Laptop HP15s-fq Reference: 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/en/p/thinkpad%E4%B8%AD%E5%8F%A4%E3%82%92%E8%B2%B7%E3%81%A3%E3%81%9F/","title":"Bought a Used ThinkPad"},{"content":"Easy Remote Connection with TeamViewer You can easily establish a remote desktop connection using TeamViewer.\nStart TeamViewer on both the remote and local computers, and enter the remote computer\u0026rsquo;s ID and password on the local computer to connect remotely.\nTo connect remotely via the command line, do the following:\n1 %ProgramFiles%\\TeamViewer\\TeamViewer.exe -i \u0026lt;ID\u0026gt; -P \u0026lt;Password\u0026gt; Enter the remote computer\u0026rsquo;s ID in \u0026lt;ID\u0026gt; and the remote computer\u0026rsquo;s password in \u0026lt;Password\u0026gt;.\nCreating a shortcut file with the above command is convenient because it allows you to skip entering the ID and password.\nReference site: 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/en/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/","title":"Easy Remote Connection with TeamViewer"},{"content":" Fools learn from experience, wise men learn from history. (Otto von Bismarck)\nGive a man a fish and you feed him for a day; teach a man to fish and you feed him for a lifetime. (Laozi)\nStay hungry, stay foolish. (Steve Jobs)\nDone is better than perfect. (Mark Zuckerberg)\nKeep it simple. (James Gosling)\nI don\u0026rsquo;t have time to worry about who doesn\u0026rsquo;t like me. I\u0026rsquo;m too busy loving the people who love me. (Snoopy)\nThe greatest happiness for a human being is to find a job in which one can make the most of oneself. (Karl Marx)\nIf a little knowledge is dangerous, where is the man who has so much as to be out of danger? (Thomas Huxley, 1877)\n\u0026ldquo;Contrariwise,\u0026rdquo; continued Tweedledee, \u0026ldquo;if it was so, it might be; and if it were so, it would be; but as it isn\u0026rsquo;t, it ain\u0026rsquo;t. That\u0026rsquo;s logic.\u0026rdquo; (Lewis Carroll, Through the Looking-Glass, 1872)\nIt is no exaggeration to say that Claude Shannon is the father of the information age, and that his academic achievements are among the greatest of the 20th century. (Commentary by the American Mathematical Society)\nThey who are acquainted with the present state of the theory of Symbolical Algebra, are aware, that the validity of the processes of analysis does not depend upon the interpretation of the symbols which are employed, but solely upon the laws of their combination. (George Boole, at the beginning of his book The Mathematical Analysis of Logic, 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/en/p/%E5%90%8D%E8%A8%80%E9%9B%86/","title":"Quotes Collection"},{"content":"Graph Editor This is an introduction to a web page where you can easily create simple graphs.\nhttps://csacademy.com/app/graph_editor/\nYou can create graphs by entering numerical values. You can also move elements around using the mouse.\nBy clicking Directed, you can create directed graphs as well.\nYou can save the graphs you create as images using 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/en/p/%E3%82%B0%E3%83%A9%E3%83%95%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BF/","title":"Graph Editor"},{"content":"Solving the Traveling Salesperson Problem with Mathematica Problem 電車でこんな広告を見かけました😁📸 pic.twitter.com/iXEgvtXrpL\n\u0026mdash; 早稲田大学 早水桃子研究室 (@hayamizu_lab) October 11, 2022 Solution 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]; We create a matrix using the SparseArray function. Each element represents the distance between cities at the row and column of that element. For example, the first element {1,2}-\u0026gt;10 means the distance between 1 and 2 is 10. The second to last element {9,9} indicates the size of the matrix, and the final element Infinity means the length of paths between unspecified cities is infinite, meaning there is no path.\n1 {len,tour}=FindShortestTour[{1,2,3,4,5,6,7,8,9},DistanceFunction-\u0026gt;(d[[#1,#2]]\u0026amp;)] You can easily solve the traveling salesperson problem with the FindShortestTour function. {1,2,3,4,5,6,7,8,9} represents the city numbers. DistanceFunction-\u0026gt;(d[[#1,#2]]\u0026amp;) passes the matrix d which represents the distance between cities.\nOutput 1 {137, {1, 2, 5, 9, 8, 7, 6, 3, 4}} The output gives the shortest distance and the tour route for it. The shortest distance is 137, and the route is 1→2→5→9→8→7→6→3→4→1. Converting this to ABC order gives 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/en/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/","title":"Solving the Traveling Salesperson Problem with Mathematica"},{"content":"To check all checkboxes in a web page, open DevTools with F12, paste the following code into the console, and execute it.\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; } } Alternatively,\nCreate a new bookmark, and in the address field when registering (where you usually enter https://\u0026hellip;), paste the following code and save it. Display the web page where you want to check the boxes, and click the created bookmark to check all checkboxes.\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;}}})(); If you want to uncheck all, change the boxes[i].checked = true; part of the above script to 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/en/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/","title":"Check all checkboxes in a web page"},{"content":"Wilson\u0026rsquo;s Theorem When $p$ is a prime number, $(p−1)!≡−1 \\pmod p$ holds.\nEuler\u0026rsquo;s Formula $e^{iπ}+1=0$\nFermat\u0026rsquo;s Last Theorem For any integer $n≥3$, there are no positive integer solutions $x, y, z$ to the equation $x^n+y^n=z^n$.\nBasel Problem $1/1^2+1/2^2+1/3^2+1/4^2+...=π^2/6$\nEuler\u0026rsquo;s Prime-Generating Polynomial $n^2+n+41$ is a prime number for all integers $n$ from $0$ to $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/en/p/%E5%A5%BD%E3%81%8D%E3%81%AA%E6%95%B0%E5%BC%8F/","title":"Favorite Mathematical Formulas"},{"content":"Prerequisites Windows 11\nSteps Install App Installer from the Microsoft Store https://www.microsoft.com/store/productId/9NBLGGH4NNS1 Install apps from the command prompt 1 winget install Google.Chrome Main Apps that Can Be Installed Google Chrome (command winget install Google.Chrome) Microsoft Edge (command winget install Microsoft.Edge) Microsoft Teams (command winget install Microsoft.Teams) Microsoft Office (command winget install Microsoft.Office) Visual Studio Code (command winget install vscode) Slack (command winget install SlackTechnologies.Slack) Discord (command winget install Discord.Discord) Docker Desktop (command winget install Docker.DockerDesktop) Git (command winget install Git) 7zip (command winget install 7zip) VLC (command winget install VideoLAN.VLC) References Use the winget tool to install and manage applications\nAside I thought I could install Paint.Net too, but I wasn\u0026rsquo;t able to.\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/en/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":"Installing Apps via Command Line Using WinGet"},{"content":"Features of Rust A relatively new open-source programming language developed by Mozilla. A fast, systems programming language without garbage collection. Guarantees memory safety through unique language features called ownership and borrowing. Operates cross-platform. Comes with an excellent standard package manager called Cargo. ","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/en/p/rust%E3%81%AE%E7%89%B9%E5%BE%B4/","title":"Features of Rust"},{"content":"To dynamically set variables in Github Actions, you can achieve this by appending to $GITHUB_ENV as shown below.\n[For 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 [For 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/en/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":"Dynamically setting variables in Github Actions"},{"content":"Delete a local tag Check existing local tags with git tag. Delete the tag with git tag -d v0.1.0. (Replace v0.1.0 with the tag you want to delete) Delete a remote tag Check existing remote tags with git ls-remote --tags. Delete the remote tag with git push origin --delete v0.1.0. (Replace v0.1.0 with the tag you want to delete) Reference How to delete a tag in git locally and remotely!\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/en/p/git%E3%81%A7%E3%82%BF%E3%82%B0%E3%82%92%E6%B6%88%E3%81%99/","title":"Deleting a tag in git"},{"content":"Displaying a simple window in 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;] The source code is as follows\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 } Reference Windows Programming in Rust - CreateWindow edition\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/en/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":"Displaying a simple window in Rust"},{"content":"To write a test in Rust, create a function and add the #[test] attribute on the line above the test function definition.\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); } You can run test codes with cargo test. If the test succeeds, it outputs ok. If it fails, it outputs FAILED.\nWhen successful\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 When failed\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/en/p/rust%E3%81%A7%E3%83%86%E3%82%B9%E3%83%88%E3%82%92%E6%9B%B8%E3%81%8F/","title":"Writing Tests in Rust"},{"content":"You can display a MessageBox in Rust by following these steps.\nInstall Rust. See Getting Started with Rust. Run cargo new --bin MessageBox in the command prompt. Navigate to the MessageBox directory. Open Cargo.toml and modify it as follows: 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; Open src\\main.rs and modify it as follows: 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 ); } } Run cargo run in the command prompt. If you want to build a release version, run cargo build --release.\nReferences 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/en/p/rust%E3%81%A7messagebox%E3%82%92%E8%A1%A8%E7%A4%BA%E3%81%99%E3%82%8B/","title":"Displaying a MessageBox in Rust"},{"content":"What Does It Mean to Understand? Hello!\nToday, I would like to talk about the theme, \u0026ldquo;What does it mean to understand?\u0026rdquo;\nIs \u0026ldquo;understanding\u0026rdquo; actually ambiguous? There are moments in everyday life when you feel, \u0026ldquo;I get it!\u0026rdquo; But if you think about it carefully, is that \u0026ldquo;understanding\u0026rdquo; really complete comprehension?\nFor example, driving a car. If you step on the accelerator, it moves forward, and if you step on the brake, it stops. You might say you \u0026ldquo;understand\u0026rdquo; this. However, there are probably very few people who can explain in detail what is happening inside the engine.\nIs complete understanding necessary? Actually, even if you don\u0026rsquo;t understand everything completely, it often doesn\u0026rsquo;t interfere with daily life. Even if you don\u0026rsquo;t know the internal structure of a smartphone, you can make phone calls and send messages, right?\nBut that doesn\u0026rsquo;t mean you should make light of \u0026ldquo;understanding.\u0026rdquo; Deepening your understanding can lead to new discoveries and realizations.\nThere are also many things we don\u0026rsquo;t understand There are many things in the world that have not yet been elucidated. For example, the mechanisms of human emotions and consciousness, the origin of the universe, and so on. These are fields that are still not completely \u0026ldquo;understood\u0026rdquo; even as science advances.\nEven in the world of mathematics, there are unsolved problems like \u0026ldquo;Goldbach\u0026rsquo;s conjecture,\u0026rdquo; despite being simple problems.\nThe value of \u0026ldquo;understanding\u0026rdquo; As your \u0026ldquo;understanding\u0026rdquo; grows, you can explain things with confidence and communicate effectively with others. Having knowledge also has the advantage of making you less likely to be misled by misinformation.\nA humble attitude is important Recognizing what you \u0026ldquo;don\u0026rsquo;t understand\u0026rdquo; leads to humility. And it is precisely because of this recognition that the desire to keep learning is born.\nSo, while \u0026ldquo;understanding\u0026rdquo; is important, it is difficult to comprehend everything completely. What is truly important is to know the limits of your own understanding and to maintain an attitude of continuous learning.\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/en/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/","title":"What Does It Mean to Understand?"},{"content":"I thought about why I like mathematics and computers Equal to everyone Regardless of the person, position, or location, it always returns the same output for the same input.\nClear rules The rules are clearly defined, and there is no absurdity or injustice.\nThe answers and theories derived are forever correct There is no worry that an answer once derived will be rewritten later.\nAppropriate level of difficulty There are always unsolved problems, and you can challenge yourself to solve them at any time.\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/en/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":"Why do I like math and computers?"},{"content":"What a Community Needs I felt that the Scratch Community Guidelines are very refined and excellent. The following points were written:\nTreat everyone with respect.\nKeep safe: Do not publish personal information or contact details.\nLeave helpful comments.\nUnderstand remix culture.\nBe honest.\nMake the site a comfortable place.\nI think these perspectives are applicable to any community.\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/en/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/","title":"What a Community Needs"},{"content":"Fermat (P. de Fermat, 1601-1665) A representative French mathematician of the 17th century. He laid the foundation for analytic geometry, probability theory, and differential calculus. He is also the founder of number theory.\nDiophantus (Diophantus, c. 207-c. 291) A Greek mathematician. Famous for the introduction of symbolic notation and the study of rational solutions. His representative work is \u0026ldquo;Arithmetica\u0026rdquo;. The field of finding rational solutions to equations is called Diophantine analysis.\nEuler (L. Euler, 1707-1783) The king of mathematics born in Switzerland. He made achievements in every conceivable area of mathematics. He left behind over 700 papers and 45 books.\nLegendre (A. M. Legendre, 1752-1833) A French mathematician. He left numerous achievements in number theory, elliptic integrals, and the problem of gravitational attraction. The term \u0026ldquo;number theory\u0026rdquo; originates from his main work, \u0026ldquo;Essai sur la théorie des nombres\u0026rdquo;.\nKummer (E. E. Kummer, 1810-1893) A German mathematician. He achieved great success by applying the number theory of cyclotomic fields to Fermat\u0026rsquo;s Last Theorem.\nDescartes (R. Descartes, 1596-1650) A highly original French philosopher. His representative works include \u0026ldquo;Discourse on the Method\u0026rdquo;, \u0026ldquo;Geometry\u0026rdquo;, and \u0026ldquo;The World\u0026rdquo;.\nPascal (B. Pascal, 1623-1662) A French philosopher known for his research in probability theory and fluids. Later, he joined the Jansenists and engaged in religious activities. \u0026ldquo;Pensées\u0026rdquo; is his work from that time.\nBachet (C. G. Bachet, 1581-1638) A French nobleman who studied number puzzles as a hobby. He published a Latin translation of Diophantus\u0026rsquo;s \u0026ldquo;Arithmetica\u0026rdquo; and included his own research as annotations.\nWallis (J. Wallis, 1616-1703) An English mathematician. In his main work \u0026ldquo;Arithmetica Infinitorum\u0026rdquo;, he gave a mathematical form to the concept of limits, contributing to the foundation of calculus.\nBrouncker (W. Brouncker, 1620-1684) An Irish nobleman. The first President of the Royal Society (British Academy). A mathematics enthusiast who interacted with Wallis and others.\nLagrange (J. L. Lagrange, 1736-1813) An Italian-born French mathematician. He served as the Director of Mathematics at the Berlin Academy as Euler\u0026rsquo;s successor. He made major achievements in number theory, analytical mechanics, and more.\nSiegel (C. L. Siegel, 1896-1981) A German number theorist. He made numerous contributions to the analytic theory of numbers.\nFibonacci (L. Fibonacci, c. 1175-c. 1250) An Italian mathematician. In his main work \u0026ldquo;Liber Abaci\u0026rdquo;, he used Hindu-Arabic numerals and worked to popularize them. He also discussed congruent numbers in \u0026ldquo;Liber Quadratorum\u0026rdquo;.\nBaker (A. Baker, 1939-) An English number theorist. For his contributions to transcendental number theory, he was awarded the Fields Medal along with Heisuke Hironaka.\nPoincaré (J. Poincaré, 1854-1912) A French mathematician known as the last universal mathematician. He left behind outstanding works in automorphic functions, non-Euclidean geometry, differential equations, celestial mechanics, electrodynamics, and scientific essays.\nMordell (L. J. Mordell, 1888-1972) An American-born mathematician. His parents were immigrants from Lithuania. He published numerous papers on Diophantine equations, but Mordell\u0026rsquo;s theorem in the theory of elliptic curves is especially famous. Weil extended this to the case of general algebraic curves, leading to an explosive development in arithmetic algebraic geometry.\nWeil (A. Weil, 1906-) A French mathematician of Jewish descent. In his youth, he took an interest in Fermat\u0026rsquo;s problem and fundamentally revised algebraic geometry with the aim of applying it to number theory, providing a rigorous foundation. He is also known for his writings on the history of mathematics.\nMersenne (M. Mersenne, 1588-1648) A French Minim friar. He facilitated correspondence among mathematicians in various places. The numbers known as Mersenne numbers were actually conceived by Fermat.\nRoberval (G. P. de Roberval, 1602-1675) A French mathematician. He was almost the only person at the time who held a professorship as a mathematician, and is known for his research on the cycloid.\nAbel (N. H. Abel, 1802-1829) A Norwegian mathematician. He made outstanding achievements such as proving the insolvability of the general quintic equation, the theory of elliptic functions, and the theory of Abelian integrals, but died at a young age.\nJacobi (K. G. Jacob, 1804-1851) A German mathematician of Jewish descent. He left major achievements in the theory of elliptic functions, theta functions, differential equations, and the calculus of variations. He introduced Abel\u0026rsquo;s work to the world. He is also known for stating that the purpose of science is for \u0026ldquo;the honor of the human spirit,\u0026rdquo; rejecting utilitarianism.\nGauss (C. F. Gauss, 1777-1855) The king of mathematics born in Germany. Known for his research in number theory, non-Euclidean geometry, geodesy, hypergeometric series, the theory of surfaces, and geomagnetism. He was a perfectionist who is said to have not published his results unless they were perfected to the point where the scaffolding was invisible. His main work is \u0026ldquo;Disquisitiones Arithmeticae\u0026rdquo;.\nLamé (G. Lamé, 1795-1870) A French mathematician. Contributed to the theory of elasticity, heat conduction, etc.\nLiouville (J. Liouville, 1809-1882) A French mathematician. Contributed to differential equations, transcendental number theory, and complex analysis.\nCauchy (A. L. Cauchy, 1789-1857) A French mathematician. Highly prolific, with many achievements in theoretical physics and mathematics. In France, he is said to be respected as much as Gauss.\nGalois (E. Galois, 1811-1832) A French mathematician. He elucidated Abel\u0026rsquo;s theorem that equations of degree 5 or higher generally cannot be solved algebraically by introducing the concept of a group. He died young in a duel, which is now known to have been triggered by a trivial issue involving a woman.\nHensel (K. Hensel, 1861-1941) A German mathematician. A student of Kronecker. He introduced the theory of p-adic numbers (p-adic analysis) into number theory by applying function-theoretic methods.\nHasse (H. Hasse, 1898-1979) A German mathematician. A student of Hensel, he contributed to the foundation of p-adic analysis and its applications. His work includes the development of class field theory and research on the L-functions of elliptic curves.\nKronecker (L. Kronecker, 1823-1891) A German mathematician of Jewish descent. Contributed to the theory of elliptic functions, number theory, etc. Known for advocating the arithmetization of mathematics, but his highly subjective personality led him to unfairly criticize his colleague Weierstrass at the University of Berlin and hinder Cantor\u0026rsquo;s employment, which has given his life a negative image.\nHilbert (D. Hilbert, 1862-1943) A German mathematician. Left a massive footprint in every field of mathematics, including invariant theory, algebraic number theory, and the foundations of mathematics. The 23 problems he proposed at the International Congress of Mathematicians in Paris (1900) had a major impact on the development of mathematics.\nRiemann (B. Riemann, 1826-1866) A German mathematician. Made profound contributions to the very foundations of mathematics, such as the concept of Riemann surfaces in complex analysis and Riemannian geometry.\nFaltings (G. Faltings, 1954-) A German mathematician. Resolved the Mordell conjecture in 1983.\nWiles (A. Wiles, 1953-) An English-born mathematician. A leading figure in this field who made major contributions through his research on Iwasawa\u0026rsquo;s main conjecture, the Birch and Swinnerton-Dyer conjecture, and famously proving Fermat\u0026rsquo;s Last Theorem.\nReferences Fermat\u0026rsquo;s Last Theorem Solved! From Euler to Wiles\u0026rsquo; Proof, 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/en/p/%E6%95%B0%E5%AD%A6%E3%81%AE%E5%81%89%E4%BA%BA%E3%81%9F%E3%81%A1/","title":"Great Figures in Mathematics"},{"content":"Enumerate Window Titles Here is how to enumerate the titles of currently open windows using PowerShell.\n1 Get-Process|where{$_.mainWindowTItle}|Select-Object MainWindowTitle Output Sample\n1 2 3 4 5 6 7 8 9 MainWindowTitle --------------- Windows PowerShell Internet Explorer Untitled - Paint Untitled - Notepad Task Manager Windows Input Experience Document - 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/en/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/","title":"Enumerate Window Titles"},{"content":"Fast Batch Deletion of Large Folders When deleting a large folder in Explorer, the deletion is executed after all the folder contents are fully searched, which is slow. By deleting with a command as shown below, the search and deletion are executed simultaneously, allowing you to delete large folders at high speed.\nMove to the target folder level in the Command Prompt. Execute DEL /F /Q /S folder_name \u0026gt; NUL. Execute RMDIR /Q /S folder_name. ","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/en/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":"Fast Batch Deletion of Large Folders"},{"content":"Salesforce Chatter Bulk Delete Command This is a command to delete all posts and attachments in Salesforce Chatter. Open the Developer Console, select \u0026ldquo;Open Execute anonymous Window\u0026rdquo; from the Debug menu, paste the following code, and execute it. I personally use this when the organization\u0026rsquo;s storage capacity is running low.\n1 2 3 4 5 6 delete [select id from FeedItem]; delete [select id from FeedAttachment]; delete [select id from ContentDocument]; // Empty the recycle bin 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/en/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":"Salesforce Chatter Bulk Delete Command"},{"content":"This is a collection of useful little tips and shortcuts I use regularly on Windows. I hope this will be helpful for beginners just starting to use Windows. This assumes Windows 11, but many of them should work on Windows 10 as well.\nClose Window Alt + F4 while the window is active Ctrl + W while the window is active. Closes the tab or window (only for supported applications) Double-click the icon on the left of the window title bar Click the × on the window title bar Show Desktop Win + D. Press it twice to restore the original window state. Very useful when you want to see the desktop for just a moment. Win + M. Minimize all apps. Pressing it twice does not restore them. Voice Typing Win + H. Start voice typing. To end voice typing, press Esc or Win + H again. Show the Classic Right-Click Menu in File Explorer Press Shift + F10 or the Application key. The Application key is located at the bottom right of the keyboard. Capture a Selected Area of the Screen Win + Shift + S allows you to select an area to capture. Win + Print Screen or simply Print Screen captures the entire screen. (If you add Win, the captured image is saved to C:\\Users\\Username\\Pictures\\Screenshots.) Alt + Print Screen captures the current window. Launch Apps Pinned to the Taskbar Win + Number Key launches apps pinned to the taskbar.\nFor example, pressing Win + 1 launches the first app on the left of the taskbar. Win + T moves focus to the taskbar icons. You can then press Win + T multiple times, or use the ← or → keys to move the selection and press Enter to launch the selected app. Zoom In / Zoom Out Win + + opens Windows Magnifier. You can further zoom in or out of the screen using Win + + or -. In apps like Notepad or browsers, you can zoom in/out with Ctrl + + or - (only for supported apps). Lock Windows Win + L Ctrl + Alt + Del -\u0026gt; Space or Enter Shut Down Windows When the desktop is shown with Win + M or Win + D, or the taskbar is active with Win + T or Win + B, pressing Alt + F4 will display the dialog below. Make sure \u0026ldquo;Shut down\u0026rdquo; is selected and press Enter. Alternatively, you can use Win + R -\u0026gt; Alt + F4 -\u0026gt; Alt + F4. You can shut down using Win + X -\u0026gt; U -\u0026gt; U. Entering shutdown /s /t 0 in Command Prompt or the \u0026ldquo;Run\u0026rdquo; dialog (Win + R) will shut down the system. Adding /f will force a shutdown. Restart Windows When the desktop is shown with Win + M or Win + D, or the taskbar is active with Win + T or Win + B, pressing Alt + F4 will display the dialog below. Press ↓ once to select \u0026ldquo;Restart\u0026rdquo; and press Enter. Alternatively, you can use Win + R -\u0026gt; Alt + F4 -\u0026gt; Alt + F4. You can restart using Win + X -\u0026gt; U -\u0026gt; R. shutdown /r /t 0 restarts the system. Adding /f will force a restart. Sleep Windows When the desktop is shown with Win + M or Win + D, or the taskbar is active with Win + T or Win + B, pressing Alt + F4 will display the dialog below. Press ↑ once to select \u0026ldquo;Sleep\u0026rdquo; and press Enter. Alternatively, you can use Win + R -\u0026gt; Alt + F4 -\u0026gt; Alt + F4. Entering rundll32.exe powrprof.dll,SetSuspendState in Win + R or Command Prompt will put the system into hibernation. Sign Out (Log Off) Windows When the desktop is shown with Win + M or Win + D, or the taskbar is active with Win + T or Win + B, pressing Alt + F4 will display the dialog below. Press ↑ twice to select \u0026ldquo;Sign out\u0026rdquo; and press Enter. Alternatively, you can use Win + R -\u0026gt; Alt + F4 -\u0026gt; Alt + F4. Win + X -\u0026gt; U -\u0026gt; I Ctrl + Alt + Del -\u0026gt; Tab twice or ↓ twice -\u0026gt; Enter or Space logoff to sign out (log off). Move Windows with Keyboard Win + ←: Move left Win + →: Move right Win + ↑: Move up / Maximize Win + ↓: Move down / Minimize Win + Shift + ← or →: Move between multiple monitors Win + Alt + ← or → or ↑ or ↓: Move window without maximizing or minimizing When not minimized, press Alt + Space, then M, and use the arrow keys to move. Since the window will follow the mouse cursor, you can rescue a window even if it is displayed off-screen. End Process with Task Manager Ctrl + Shift + Esc launches Task Manager. Ctrl + Tab switches tabs. After pressing Tab on the Details tab, you can search for a process by typing its prefix in alphanumeric mode. With a process name selected, press the Delete key, followed by the Enter key to end the process. End Process by Specifying Name in Command taskkill /f /im process_name ends a process. For example, taskkill /f /im explorer.exe ends File Explorer. Launch Multiple Instances of the Same Program from Taskbar While holding Shift, left-click an icon on the taskbar to launch multiple instances of the same program. (Only for apps that support multiple instances) Launch a Program as Administrator Hold Ctrl + Shift while launching a program to open it with administrator privileges. Launch File Explorer Win + E launches File Explorer. Win + R to open \u0026ldquo;Run\u0026rdquo;, type explorer, and press Enter Ctrl + Shift + N creates a new folder. Open Command Prompt in the Current File Explorer Location In Windows 11, you can launch Command Prompt from the right-click menu by selecting \u0026ldquo;Open in Terminal\u0026rdquo;. Also, typing cmd in the address bar and pressing Enter will launch Command Prompt. Show Clipboard History Win + V shows the clipboard history. Selecting previously copied text or images will copy them again. Run Win + R opens the \u0026ldquo;Run\u0026rdquo; dialog. Here are a few commands you can execute in \u0026ldquo;Run\u0026rdquo; or Command Prompt.\nOpen Edge Type msedge and press Enter Open Internet Explorer 11 (IE11) Type powershell.exe -Command \u0026quot;(New-Object -ComObject InternetExplorer.Application).Visible = $true\u0026quot; and press Enter Open Terminal Type wt and press Enter Open Control Panel Type control and press Enter You can also open it with explorer.exe shell:::{26EE0668-A00A-44D7-9371-BEB064C98683}. Launch Notepad Type notepad and press Enter Launch Calculator Type calc and press Enter Launch Paint Type mspaint and press Enter Launch PowerShell Type powershell and press Enter Launch Visual Studio Code Type code and press Enter Launch Excel Type excel and press Enter Only if Excel is installed. Open Word Type winword and press Enter Only if Word is installed. Open PowerPoint Type powerpnt and press Enter Only if PowerPoint is installed. Open System Configuration Type msconfig and press Enter Open System Properties Type sysdm.cpl and press Enter Open Windows About (Version Info) Type winver and press Enter Open On-Screen Keyboard Type osk and press Enter Open WordPad Type wordpad or write and press Enter Open Registry Editor Type regedit and press Enter Open Programs and Features Type explorer.exe shell:::{7b81be6a-ce2b-4676-a29e-eb907a5126c5} and press Enter Open Keyboard Properties Type explorer.exe shell:::{725BE8F7-668E-4C7B-8F90-46BDB0936430} and press Enter Open Mouse Properties Type explorer.exe shell:::{6C8EEC18-8D75-41B2-A177-8831D59D2D50} and press Enter Open Sound Type explorer.exe shell:::{F2DDFC82-8F12-4CDD-B7DC-D4FE1425AA4D} and press Enter Open User Accounts Type explorer.exe shell:::{60632754-c523-4b62-b45c-4172da012619} and press Enter Copy String from a Standard Message Box Ctrl + C allows you to copy the text from a standard message box. Copying the message box above will copy the following to the clipboard: 1 2 3 4 5 6 7 [Window Title] WordPad [Main Instruction] Do you want to save changes to Document? [Save(S)] [Don\u0026#39;t Save(N)] [Cancel] Store Command Prompt Output to Clipboard Adding | clip (pipe + clip) after a command, like echo \u0026quot;hello\u0026quot; | clip, allows you to copy the standard output to the clipboard.\nText Output of Folder Hierarchy In Command Prompt, you can output the folder hierarchy in a tree format using the tree command.\nOutput Sample\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 (omitted below) Reference Keyboard shortcuts in 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/en/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":"Windows Shortcuts and Tips"},{"content":"I would like to introduce paint.net, an image editing software that I often use during my development work.\nUseful Features Not Found in Standard Windows Paint Can handle transparency and opacity Can automatically select complex areas Can handle layers Can adjust levels, brightness, contrast, etc. Can apply various effects (blur, distort, noise, etc.) Other Features Free to use Relatively lightweight and fast Intuitive to use with few quirks Supports multiple languages, including Japanese It is a highly functional yet easy-to-use software. I myself haven\u0026rsquo;t mastered all of its features yet.\nInstallation https://www.getpaint.net/download.html\nIf you wish to choose the free version, please click the red framed area at the link below.\nInstalling via the Microsoft Store is paid, but it seems to enable automatic updates. Even with the free version, you will be notified of the latest updates, so updating is relatively smooth.\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/en/p/paint.net%E3%81%AE%E9%AD%85%E5%8A%9B/","title":"The Appeal of paint.net"},{"content":"To set up a custom domain for a Github repository, you need to change the domain\u0026rsquo;s DNS settings. Here, we will explain assuming that you manage your domain with Onamae.com . Similar settings can be applied by rewriting the A record with other registrars as well.\nChange DNS settings on Onamae.com To change the DNS settings of your domain, log in to the management screen of Onamae.com . After logging in, go to the domain management screen. Once on the domain management screen, change the DNS settings. To change the DNS settings, configure them as follows:\nAccess https://www.onamae.com/ and click \u0026ldquo;Onamae.com Navi Login\u0026rdquo; Enter your \u0026ldquo;Onamae ID (Member ID)\u0026rdquo; and \u0026ldquo;Password\u0026rdquo; and click the login button Click \u0026ldquo;Name Server Settings\u0026rdquo; Click \u0026ldquo;Domain DNS Settings\u0026rdquo; Select the domain you want to set up and click \u0026ldquo;Next\u0026rdquo; Click \u0026ldquo;Set up\u0026rdquo; to the right of \u0026ldquo;Use DNS record settings\u0026rdquo; Select A for TYPE, enter 3600 for TTL, enter \u0026ldquo;185.199.108.153\u0026rdquo; for VALUE, and click \u0026ldquo;Add\u0026rdquo; Add \u0026ldquo;185.199.109.153\u0026rdquo;, \u0026ldquo;185.199.110.153\u0026rdquo;, and \u0026ldquo;185.199.111.153\u0026rdquo; in the same way as step 7. Ensure that the checkbox in \u0026ldquo;Confirm name server change for DNS record settings\u0026rdquo; is checked and click \u0026ldquo;Proceed to setting screen\u0026rdquo; If the screen \u0026ldquo;To prevent unintended DNS setting changes\u0026rdquo; appears, click \u0026ldquo;Do not set\u0026rdquo; (select as necessary) Confirm the setting details and click \u0026ldquo;Set up\u0026rdquo; This completes the DNS settings. It may take up to 72 hours for the reflection to complete. If it is not reflected after 72 hours, please try contacting Onamae.com support. To check if the settings have been reflected in your local environment, try executing the following commands. Please replace the example.com part with the domain you want to check.\nFor Linux and Mac 1 dig example.com +noall +answer -t A If the result looks like the following, the settings have been reflected.\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 For Windows 1 nslookup -q=a example.com 8.8.8.8 If the result looks like the following, the settings have been reflected.\n1 2 3 4 5 6 7 8 9 Server: dns.google Address: 8.8.8.8 Non-authoritative answer: Name: example.com Addresses: 185.199.108.153 185.199.109.153 185.199.110.153 185.199.111.153 Set a custom domain in the Github repository Open the repository page and click Settings Click Pages If you want to publish the repository source as is, select \u0026ldquo;Deploy from a branch\u0026rdquo; in Source. If you want to build the source using HUGO or similar, select \u0026ldquo;GitHub Actions\u0026rdquo;. Select the branch to publish in Branch and click Save Enter the acquired domain in Custom domain and click Save. Check \u0026ldquo;Enforce HTTPS\u0026rdquo; as necessary to support 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/en/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/","title":"How to set up a custom domain for a Github repository"},{"content":"Since the dotnet.exe command can even build simple programs, it is useful to know how to use it.\nInstalling the .NET SDK dotnet.exe is included in the .NET SDK, so we will install the .NET SDK first. Launch cmd.exe with administrator privileges and run the following command:\n1 winget install Microsoft.DotNet.SDK.6 Generating .gitignore The command to generate a .gitignore using dotnet.exe is as follows:\n1 dotnet new gitignore The generated .gitignore is as follows:\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 Although it contains many files for Visual Studio, it also includes files that generally do not need to be managed on git, such as .DS_Store on Mac.\nReference Sites Install .NET on 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/en/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":"Generating .gitignore with the dotnet command"},{"content":"When I thought about my favorite games, they all ended up being hall-of-famers. Since there are many old games, if you haven\u0026rsquo;t played them yet, please give them a try.\nGame Boy The original Game Boy is a handheld game console released by Nintendo in 1989. Later, successor models such as Game Boy Color and Game Boy Advance were released.\n① Sa・Ga2: Hihou Densetsu (Final Fantasy Legend II) An RPG released by Square (currently Square Enix) in 1990. It\u0026rsquo;s a story where you earnestly collect treasures known as MAGI across various stages. This was the first RPG I ever played.\n② Kirby\u0026rsquo;s Dream Land An action game released by Nintendo in 1992. Developed by HAL Laboratory. It\u0026rsquo;s a game where you progress by inhaling enemies or inhaling air to float in the sky. The music and sound effects are also quite well done, making it a highly rhythmic title.\n③ Pokémon Red and Green An RPG released by Nintendo in 1996. Developed by Nintendo EAD, Game Freak, and Creatures. Afterwards, it was made into an anime and became explosively popular, but I\u0026rsquo;ve only played this first generation.\nSuper Famicom A home video game console released by Nintendo in 1990. Overseas, it is also known as the SNES (Super Nintendo Entertainment System).\n④ Super Mario Kart A Super Famicom software released by Nintendo in 1992. A racing game where you compete for rank while obstructing opponents by throwing items like shells and bananas. I remember playing it together with family and friends.\n⑤ Dragon Quest V: Hand of the Heavenly Bride An RPG released by Enix in 1992. It features elements like choosing a marriage partner and making monsters you defeated into companions. I played it extensively until I recruited multiple Liquid Metal Slimes.\n⑥ Final Fantasy V An RPG released by Square in 1992. It features replayability elements where you choose a job and master its skills. Similar to Dragon Quest, I remember earnestly leveling up in caves.\n⑦ Torneko no Daibōken: Fushigi no Dungeon A roguelike game released by Chunsoft in 1993. The predecessor to the Mystery Dungeon series. Its feature is that the layout of the dungeon randomly changes every time. The catchphrase is \u0026ldquo;An RPG you can play 1000 times\u0026rdquo;.\n⑧ Fushigi no Dungeon 2: Furai no Shiren (Mystery Dungeon: Shiren the Wanderer) A roguelike game released by Chunsoft in 1995. The sequel to the Mystery Dungeon series\u0026rsquo; \u0026ldquo;Torneko no Daibōken\u0026rdquo;. There are shops inside the dungeon where you can buy items. (If you leave the shop without paying, the shopkeeper will chase after you.)\n⑨ MOTHER2 (EarthBound) The second installment of the MOTHER series, released by Nintendo in 1994. Developed by Ape and HAL Laboratory. Later, MOTHER3 was released in 2006. Produced by Shigesato Itoi, the work is studded with a unique worldview and philosophical words.\n⑩ The Legend of Zelda: A Link to the Past An action-adventure game released by Nintendo in 1991. A game where you progress by collecting various items and solving slight puzzles. Various sequels have been released since then. (Reference)\nNintendo Switch A home video game console released by Nintendo in 2017.\n⑪ Splatoon 2 An action shooter game released by Nintendo in 2017. A game where you aim for victory by securing territory using ink or defeating opponents. The sequel, Splatoon 3, was released in 2022.\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/en/p/%E5%A5%BD%E3%81%8D%E3%81%AA%E3%82%B2%E3%83%BC%E3%83%A011%E9%81%B8/","title":"11 Favorite Games"},{"content":"The command to prevent the automatic generation of .DS_Store on macOS is as follows. Please execute it in the terminal.\n1 defaults write com.apple.desktopservices DSDontWriteNetworkStores true After executing the command, restart Finder.\n1 killall Finder To restore the setting, please run the following command.\n1 defaults delete com.apple.desktopservices DSDontWriteNetworkStores false As with the above, restart Finder after changing the setting.\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/en/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/","title":"Command to prevent automatic generation of .DS_Store in macOS"},{"content":"Move the current directory to the target folder, and execute the following command to bulk delete .DS_Store including subfolders.\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/en/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/","title":"Bulk Delete .DS_Store with PowerShell"},{"content":"Available Shortcodes in 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;}}\nOthers Shortcodes\nSide note If you want to display {{\u0026lt; foo \u0026gt;}} on the site, you need to write {{\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/en/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":"Available Shortcodes in HUGO"},{"content":"In the default layout, images are placed in the center with a width of 100%. However, I felt this was a bit too large, so I tried wrapping the image under the title and changing the width to around 150px.\nThe changes made to the files are as follows.\nblank.css To change the margins, image sizes, and the number of displayed text lines, add the following code to 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 Since I couldn\u0026rsquo;t delete the definition in blank.css, I deleted the following line in post-entry.css.\n1 2 3 4 5 6 .entry-cover img { border-radius: var(--radius); pointer-events: none; /* width: 100%; */ \u0026lt;- Delete this line height: auto; } list.html To change the image layout, I modified the following section in 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;!-- Moved down --\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;!-- Moved down --\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;!-- Added --\u0026gt; \u0026lt;div style=\u0026#34;max-width:150px;margin:11px 15px 0px 0px;\u0026#34;\u0026gt;\u0026lt;!-- Added --\u0026gt; {{- $isHidden := (site.Params.cover.hidden | default site.Params.cover.hiddenInList) }}\u0026lt;!-- Moved from above --\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;!-- Moved from above --\u0026gt; \u0026lt;/div\u0026gt;\u0026lt;!-- Added --\u0026gt; \u0026lt;div style=\u0026#34;width:100%;\u0026#34;\u0026gt;\u0026lt;!-- Added --\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;!-- Added --\u0026gt; \u0026lt;/div\u0026gt;\u0026lt;!-- Added --\u0026gt; \u0026lt;/article\u0026gt; It seems there are quite a few similar requests.\nhttps://github.com/adityatelange/hugo-PaperMod/discussions/159#discussioncomment-247844\nI would be grateful if this was supported in the upstream repository as well.\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/en/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/","title":"Changing the Image Layout in PaperMod"},{"content":"Introduction The PaperMod theme supports Twitter Cards. However, Twitter Card settings need to be described in config.toml or the header information of each article\u0026rsquo;s *.md. If set in both each article and config.toml, the header information of each article takes precedence.\nHow to Configure config.toml In config.toml, add an item named images under [params]. In images, describe the path to the image to be displayed on the Twitter Card. If placing the image in the static folder, specifying just the file name is sufficient.\n1 2 [params] images = [\u0026#34;twitter_card.jpg\u0026#34;] Folder structure\n1 2 3 4 5 6 7 8 9 10 root │ config.toml (Describe here) ├─content │ └─posts │ └─article folder │ │ index.md (Describe here) │ └─images │ cover.png (Place here) └─static twitter_card.jpg (Place here) Header Information of Each Article In the header information of each article, add an item named image under cover. If you set relative to true, you can specify it as a relative path from the article\u0026rsquo;s *.md.\n1 2 3 cover: image: \u0026#34;images/cover.jpg\u0026#34; relative: true If You Do Not Want to Display It at the Top of the Article If you do not want to display a cover image at the top of the article, add an item named hidden under cover and set it to true.\n1 2 3 4 cover: image: \u0026#34;images/cover.jpg\u0026#34; relative: true hidden: true About Image Size Based on the current specifications of PaperMod, it seems that Twitter Card sizes are only supported for summary_large_image. The appropriate size (resolution) for summary_large_image varies according to different sources, but around 800 x 418 (aspect ratio 1.91:1) seems good.\nReference Site 1 Reference Site 2\nIf possible, it is recommended to resize the image before posting.\nHow to Check Settings To check Twitter Card settings, use the Twitter Card Validator. However, in my environment, the preview did not display properly, so if the preview does not appear, it is recommended to check once using a private account or similar before posting.\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/en/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":"How to set up Twitter Card in PaperMod"},{"content":"Introduction GitHub Copilot is an AI-based code completion tool developed by GitHub. By installing the GitHub Copilot plugin in the IntelliJ IDEA development environment, you can also use GitHub Copilot in IntelliJ IDEA. A Github account is required for activation.\nHow to Install Select Settings from the File menu in IntelliJ IDEA Select Plugins, and search for \u0026ldquo;GitHub Copilot\u0026rdquo; Install via the Install button Click the Restart IDE button to restart IntelliJ IDEA The installation is complete once IntelliJ IDEA restarts. Activation Click the icon at the bottom right Click Login to Github Click the Copy and Open button A browser will open. If you are not logged into Github, log in, paste the code using Ctrl+V, and click the Continue button Click the Authorize GitHub Copilot Plugin button Activation is complete when the screen above is displayed. Try it out When you type a few characters in the IntelliJ IDEA editor, GitHub Copilot will start suggesting code completions. Enjoy the powerful code completion features provided by AI!\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/en/p/intellij-idea%E3%81%A7github-copilot%E3%82%92%E4%BD%BF%E3%81%86/","title":"Using GitHub Copilot in IntelliJ IDEA"},{"content":"Introduction Go is a relatively new programming language released by Google in 2009. The Go compiler, tools, and libraries are released as open source. Also, Go is a statically typed language like C and Java, but it does not use pointers in the same way C does.\nHow to Install Install Go\nInstallers for each platform are available from the site above.\nFollow the instructions on the screen to proceed with the installation. Installation is complete. It\u0026rsquo;s easy, isn\u0026rsquo;t it?\nFirst Program Save the following program as 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;) } If you execute go run hello.go from the command prompt or terminal, Hello, world! will be output.\nIf you want to compile, executing go build hello.go will generate hello.exe. Executing hello.exe will output Hello, world!.\nYou can also execute code on a web page https://go.dev/play/\nJapanese Documentation http://go.shibu.jp/\nThe explanations necessary for learning Go are consolidated in the link above (Japanese translated version). Since technologies related to Go are open, the resources are rich enough that you don\u0026rsquo;t even need to buy a physical textbook.\nEnjoy your Go life!\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/en/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/","title":"How to Install Go"},{"content":"What is Hegel\u0026rsquo;s Dialectic? Hegel grasped the positive significance of the contradictions that reason falls into, and argued that in general, all finite things produce their opposites driven by inherent contradictions, and through mediation, they are both sublated to a higher stage, establishing this as the principle of all movement in the real world. (From Kotobank)\nMy interpretation is that all ideologies, assertions, and ideas in the real world are not simply correct in a one-sided manner. They always contain contradictions within them, and in the process of understanding and incorporating these opposing structures, one\u0026rsquo;s awareness develops to a higher level.\nI think this applies not only to human thinking but also to all phenomena in the natural world.\nFor all matter, every action has a reaction; every movement involves friction; gravity is not just for the sun and earth but mutually affects all matter. The currents of rivers and winds don\u0026rsquo;t just flow in one direction; they are subjected to various forces, changing their flow moment by moment.\nSpeaking in technical terms, computer programs also inherently contain bugs, and by resolving them, they evolve into higher-level programs. A program without bugs could be considered an uninteresting, stagnant program. It will eventually become obsolete.\nThe surrounding environment is constantly changing with the times. Instead of ignoring self-contradictions, strangely justifying them, or rigidly fixing our mindsets, I want us to always review our ways of thinking and perceiving things, flexibly adapting our thoughts.\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/en/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/","title":"Hegel's Dialectic"},{"content":"I went to Kamukura (Ramen) for the first time in years.\nGreen Onion Kimchi Ramen\nIt was delicious. It\u0026rsquo;s a flavor that makes you want to eat it every once in a while.\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/en/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) for the First Time in Years"},{"content":"I wrote a program to enumerate prime numbers in 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/en/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/","title":"Enumerate Prime Numbers in Rust"},{"content":"Relaxing Jazz Playlist ","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/en/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/","title":"Relaxing Jazz"},{"content":"Up-tempo\nElectro Swing Collection Electro Swing Mix 2019 Vol.3 lofi hip hop radio(Live) LoFi Jazz This is the motivation to study hard every day | 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/en/p/%E3%82%AB%E3%83%95%E3%82%A7%E9%9F%B3%E6%A5%BD/","title":"Cafe Music"},{"content":"It\u0026rsquo;s okay even if your efforts aren\u0026rsquo;t recognized 45年の人生で手に入れた。ぐずぐずした時、いつも背中を押してくれる言葉たち。 pic.twitter.com/EQgmujOSpg\n\u0026mdash; いれぶん (@eleven_s_s) September 6, 2022 Values are much more diverse Yusuke Narita \u0026ldquo;Of the unhappiness that humans hold\u0026rdquo;\nThe actions you take are reflected directly Hayao Miyazaki\u0026rsquo;s thoughts ","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/en/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":"Videos that Boost Motivation"},{"content":"Here are the specs for my main PC.\nItem Name Value Processor Intel Core i7-8700K CPU @ 3.70GHz 3.70 GHz Memory 32.0 GB System Type 64-bit operating system, x64-based processor OS Windows 11 Enterprise (Version 21H2, Build 22000.856) Manufacturer MouseComputer 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/en/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/","title":"My Current Main PC Specs"},{"content":"Google Material Symbols and Icons https://fonts.google.com/icons GitHub Octicons https://primer.style/octicons/ Sargam Icons https://sargamicons.com/ Thousands of free icons 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/en/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/","title":"Simple Icon Collection Sites"},{"content":"I changed the color scheme of the PaperMod theme. I referred to the following for the method.\nhttps://github.com/adityatelange/hugo-PaperMod/discussions/645\nThe CSS path is as follows.\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 { } No changes for dark mode for now.\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/en/p/papermod%E3%81%AE%E9%85%8D%E8%89%B2%E5%A4%89%E6%9B%B4/","title":"Changing the Color Scheme of PaperMod"},{"content":"When Mom was sick and resting in bed, I asked my daughter (2 years old) about preparing dinner or the bath, saying, \u0026ldquo;Should we ask Mom to do this?\u0026rdquo; She replied, \u0026ldquo;No, because she\u0026rsquo;s sleeping!\u0026rdquo; and I realized that she was being considerate in her own childish way.\nI\u0026rsquo;m glad she seems to be growing into someone who is considerate of others.\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/en/p/%E5%AD%90%E4%BE%9B%E3%81%AE%E3%81%9D%E3%82%93%E3%81%9F%E3%81%8F/","title":"A Child's Consideration"},{"content":"Finding emerging businesses Ask people inside Hot Pepper or tax accountants about businesses that are starting to trend Do not enter a business that is already saturated with strong competitors Only enter businesses where you are confident you can attract customers (do not enter businesses where existing operators are using special, inimitable customer acquisition methods) Imitate thoroughly Research the business logic before entering Copy it thoroughly Then improve upon it Systematize Systematize everything into manuals so anyone can do it effortlessly Come up with ideas to increase sales (more customers, higher unit price per customer) and reduce expenses (labor costs, advertising costs), and systematize them Management Philosophy A business owner\u0026rsquo;s philosophy is \u0026ldquo;to maximize corporate profits,\u0026rdquo; nothing more and nothing less Making social contribution or being liked by employees your management philosophy is a bad idea (consider that these will naturally follow later) ","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/en/p/%E7%B5%8C%E5%96%B6%E8%80%85%E3%83%A1%E3%83%A2/","title":"Management Notes"},{"content":"I\u0026rsquo;d like to organize my thoughts on what I find strange or think about Japanese society.\nAbout Student Loans Speaking of scholarships in Japan, most of them are interest-bearing student loans that must be repaid. In addition, university tuition fees have been continuously increasing since 1950, and the percentage of students receiving these loans is also on an upward trend.\nOn the other hand, it seems that the recent average total borrowing amount reaches 3.24 million yen.\nFor users of the Japan Student Services Organization scholarships, the average total borrowing amount is 3,243,000 yen. Reference\nIf someone is burdened with a debt of 3 million yen at the age of 22 when graduating from university, naturally, their marriage age will be delayed, and it will obviously become harder to have children. I think this is one of the causes of Japan\u0026rsquo;s declining birthrate problem.\nPervasive Self-Responsibility Theory This is somewhat based on my senses, but I feel there is a cold social attitude of \u0026ldquo;other people\u0026rsquo;s business is their business.\u0026rdquo; It might be inevitable that this trend occurs after decades of ongoing economic recession, but Even regarding the aforementioned student loan issue, it is not viewed as a problem for society as a whole, and I feel that the voices of young people and minorities, who have fewer votes in elections, are being ignored. Even though, in the long run, it is actually a very important issue for Japan as a whole.\nInstead of heading towards excessive competition, I think a spirit of everyone helping out when there are people, generations, or groups in need is extremely important for a country. (However, I feel a sense of discomfort when the government insists on \u0026ldquo;self-help and mutual help.\u0026rdquo; I want them to proactively work on rescuing the vulnerable.)\n(This article will be updated as needed.)\nCharacteristics of Japanese People as Seen by AI Yes, I will explain the characteristics of Japanese people.\n[Good Aspects]\nJapanese people have a culture of being polite and paying attention to respect and how they treat others. Punctuality is strictly enforced, and being on time is highly respected. A collectivistic mindset is strong, with an emphasis on teamwork and cooperation. Cleanliness is valued, and there is a tendency to be enthusiastic about manners and cleaning in public spaces. Gifts and souvenirs are cherished, and a culture of expressing gratitude is widespread. [Bad Aspects]\nThey may be poor at asserting their personal opinions and have a tendency to avoid clashes of opinion. A very strict work culture exists, and overtime work or death from overwork (karoshi) is sometimes seen as a problem. Issues of discrimination or exclusion towards foreigners remain, and harmony with the international community is sometimes called into question. There is an authoritarian tendency, and it is sometimes pointed out that they often accept the opinions of bosses or elders unconditionally. It is a closed society, and it is sometimes criticized for having a tendency to struggle to accept outside cultures and values. ","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/en/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/","title":"My Thoughts on Japan"},{"content":"Introduction Rust is a relatively new programming language that allows you to write fast and memory-efficient modules using modern syntax. It supports multi-platform and is also used in the world of WebAssembly and embedded systems. Notably, it has been adopted by Firefox, Dropbox, and Cloudflare.\nIt is also gaining attention as an alternative to C++.\nInstallation Install Rust\nInstallation methods for each platform are published on the site above.\nFirst Program Save the following program as main.rs.\n1 2 3 fn main() { println!(\u0026#34;Hello, world!\u0026#34;); } When you run rustc main.rs from the command prompt or terminal, it will be compiled, and running ./main (main.exe on Windows) will output Hello, world!.\nJapanese Documentation The Rust Programming Language Japanese Version\nThe explanations necessary for learning Rust are gathered in the link above (Japanese translation version). It is so comprehensive that there is no need to purchase a Rust textbook.\nIf you want to try it on the Web If you want to try it on the Web without installing a compiler, you can use The Rust Playground. When you enter the code and press the \u0026ldquo;Run\u0026rdquo; button, it will be compiled and executed on the 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/en/p/rust%E3%81%AE%E3%81%AF%E3%81%98%E3%82%81%E3%81%8B%E3%81%9F/","title":"Getting Started with Rust"},{"content":"Changed my home internet environment from Flets Hikari to J:COM On a friend\u0026rsquo;s recommendation, I changed my home internet connection from Flets Hikari to J:COM. The reasons are:\nThe monthly fee will be cheaper. 3,619 yen → 2,180 yen Internet speed will increase from 100MBps to 320MBps These points.\nImpressions after using it It\u0026rsquo;s been about a week since the switch, and so far there are almost no problems. I\u0026rsquo;ll note a few things I noticed below.\nAfter actually changing, I noticed that the download speed definitely became faster, going from 60MBps to just under 320MBps. However, the upload speed, which was around 40MBps with Flets Hikari, dropped to about 10MBps. This seems to be a specification on J:COM\u0026rsquo;s side. For now, I won\u0026rsquo;t be doing any streaming or uploading massive amounts of data, so I\u0026rsquo;ll wait and see.\nAlso, recently my family and I are mainly working remotely, and today for the first time the internet went down for a few tens of minutes. It recovered automatically, but it might not be a very good omen. It hasn\u0026rsquo;t even been a week since the switch, though\u0026hellip;\nAs a side note, J:COM regulates P2P communication, so it seems you won\u0026rsquo;t get good speeds on P2P apps. Those who use P2P should be careful.\nAbout the service At the time of signing up, I was told that if I join Netflix or Disney+, I could get 40,000 yen worth of QUO cards, which offsets the respective service contract fees and makes the average monthly fee a bit cheaper, so I signed up for the services at the same time as the contract. It seems Netflix is a 1-year contract and Disney+ is a half-year contract, and I need to complete the cancellation procedures myself.\nSince it hasn\u0026rsquo;t been long since the switch, if I have any additional usability issues or thoughts, I\u0026rsquo;d like to update the article again. See you,\n09/06 It became hard to connect to the internet 2022/09/06 around 13:13 for about 3 to 5 minutes 2022/09/06 around 13:30 for about 3 to 5 minutes And several times after that\u0026hellip; It seems DNS is the problem, so I configured the DNS server referring to here. We\u0026rsquo;ll see how this goes\u0026hellip; Even with the DNS setting, it fell into a state where it couldn\u0026rsquo;t connect, so when I inquired with support, they said they were doing emergency maintenance\u0026hellip; Right after inquiring, the connection status improved, so I think they took some sort of countermeasure.\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/en/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":"Changed my internet environment from Flets Hikari to J:COM"},{"content":"Installing HUGO Download Download HUGO\nFrom the site above, download and extract the Windows module that matches your environment. In my case, I downloaded \u0026ldquo;hugo_0.102.3_Windows-64bit.zip\u0026rdquo;.\nExtract Extract the downloaded zip file and copy the hugo.exe inside it to a folder, for example, C:\\bin.\nRegister to Environment Variables Register it to the environment variables so that you can run hugo.exe from anywhere. This is the operation on Windows 11, but I think it can be registered with the following steps.\nPress Win+Pause to open the About page Click Advanced system settings Click Environment Variables Select Path and click Edit Click New, enter \u0026ldquo;C:\\bin\u0026rdquo; on a new line, and click OK to close the dialog Preview the Blog In the command prompt, navigate to your HUGO blog folder and run the following command.\nhugo server -D\nThe execution result is as follows. (The -D option is for displaying draft articles.)\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 The address will be output when executed (in the example above, http://localhost:1313/), so copy the address to your browser. The preview will automatically update every time you save a file. To end the preview, press Ctrl+C in the command prompt.\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/en/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/","title":"[HUGO] Display Preview in Local Environment"},{"content":"Here are my 3 recommended movies featuring mathematician protagonists.\nA Beautiful Mind A film depicting the life of a real-life American genius mathematician. A surprising twist at the end. Russell Crowe\u0026rsquo;s performance in the lead role is excellent.\nEnigma A 2001 film adaptation of Robert Harris\u0026rsquo;s novel \u0026ldquo;Enigma\u0026rdquo;. — Wikipedia\nA story about decrypting the codes generated by the German Enigma cipher machine.\nThe Imitation Game Another story about cryptanalysis dealing with the Enigma. I love the atmosphere of that era.\nThe Man Who Knew Infinity A film depicting the interaction between Cambridge University mathematician G.H. Hardy and Indian mathematician Srinivasa Ramanujan. You can feel the beauty of mathematics.\nThe Theory of Everything A film depicting the life of Dr. Stephen 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/en/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":"Movies Featuring Mathematicians"},{"content":"Children\u0026rsquo;s Desk The time when my children are sleeping is when I can focus on my work. Let\u0026rsquo;s go play at the park after nap time. If I only had a Lightning to HDMI adapter for my iPad, I could work at the desk on the right\u0026hellip;\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/en/p/%E4%BB%8A%E6%97%A5%E3%81%AE%E4%BD%9C%E6%A5%AD%E7%92%B0%E5%A2%83/","title":"Today's Work Environment"},{"content":"Introduction I use IntelliJ IDEA when writing this blog. It works well with Git and is convenient because it shows markdown previews. Since I have to write the date in the md header every time I write a blog post, and there doesn\u0026rsquo;t seem to be a shortcut for inserting dates, I tried creating a command to insert the date, using the following site as a reference. I hope this helps.\nIs there a shortcut for inserting date/time in IntelliJ IDEA?\nSetup Procedure Open \u0026ldquo;File\u0026rdquo; \u0026gt; \u0026ldquo;Settings\u0026hellip;\u0026rdquo; from the menu\nSelect \u0026ldquo;Editor\u0026rdquo; \u0026gt; \u0026ldquo;Live Template\u0026rdquo; \u0026gt; \u0026ldquo;HTML/XML\u0026rdquo; and click \u0026ldquo;+\u0026rdquo; Select Live Template Enter \u0026ldquo;date\u0026rdquo; in Abbreviation Enter \u0026ldquo;Insert date and time\u0026rdquo; in Description Enter \u0026ldquo;$date$\u0026rdquo; in Template Text Click Edit Variables button\nEnter \u0026ldquo;date\u0026rdquo; in Name Enter date(\u0026quot;yyyy-MM-dd'T'HH:mm:ss'+09:00'\u0026quot;) in Expression Click OK to close the dialog Click Define or Change and check \u0026ldquo;Everywhere\u0026rdquo; Click OK to close the dialog Type \u0026ldquo;date\u0026rdquo; in the code editor and press Enter. If the date \u0026ldquo;2022-09-04T05:59:04+09:00\u0026rdquo; is inserted, the setup is complete! That\u0026rsquo;s all.\nConclusion I will continue to share more IntelliJ IDEA tips if I find them!\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/en/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":"Adding a command to insert a date in IntelliJ IDEA"},{"content":"I Started a Blog Something like fireworks, code is here\nHello everyone. Just on a whim, I decided to start a blog.\nI don\u0026rsquo;t really have a grand purpose like \u0026ldquo;I want to broadcast this!\u0026rdquo;, but I thought it would be nice to have a place where I can just write down things about technology, daily life, or whatever comes to mind.\nI\u0026rsquo;m not going to try too hard, and I plan to use it like a notepad.\nMade with Hugo This blog is made with a static site generator called \u0026ldquo;Hugo\u0026rdquo;. I found a nice theme, so I decided to use it on a whim. (It\u0026rsquo;s a secret that it took me about 2 hours to choose a theme)\nI\u0026rsquo;ll casually write down things about code or tools I\u0026rsquo;m interested in as memos.\nMorning Komeda Coffee Story By the way, this morning, I woke up a bit early and went to Komeda Coffee. I left at 8:30, walking leisurely while breathing the morning air.\nI ordered a Mini Shiro-Noir and Cafe Au Lait \u0026ldquo;A\u0026rdquo; Morning Set. I think it was about 800 yen? (I don\u0026rsquo;t remember)\nMorning cafes are nice. Having some time to just space out before work makes me feel like the day will go well.\nWith that said, I\u0026rsquo;ll be writing casually from now on. I plan to mix in technical talks and daily life stuff.\nNice to meet you!\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/en/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/","title":"I Started a Blog"},{"content":"Salesforce DevTools You can search for custom fields and export the fields of custom objects in bulk.\nIt\u0026rsquo;s also convenient to be able to build SOQL on the spot.\nSalesforce DevTools\nSalesforce advanced Code searcher This is useful when searching for Salesforce code.\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/en/p/salesforce%E3%81%8A%E3%81%99%E3%81%99%E3%82%81chrome%E6%8B%A1%E5%BC%B5/","title":"Recommended Chrome Extensions for Salesforce"},{"content":"Information security in the modern internet society is protected by public-key cryptography, such as RSA cryptography. The basis for the security of RSA relies on the fact that \u0026ldquo;the prime factorization of huge composite numbers is computationally extremely difficult.\u0026rdquo;\nIn this article, we will unravel the mathematical mechanism of the \u0026ldquo;General Number Field Sieve\u0026rdquo; (GNFS), which is the most powerful prime factorization algorithm for classical computers. We will also dive deeply into why it is completely defeated by \u0026ldquo;Shor\u0026rsquo;s Algorithm,\u0026rdquo; discovered by Peter Shor, exploring this paradigm shift thoroughly with mathematical formulas and conceptual diagrams.\n1. The Approach to Prime Factorization in Classical Computing: Evolution from Fermat\u0026rsquo;s Factorization Method The prime factorization problem is the problem of finding prime numbers $p$ and $q$ such that $N = p \\times q$ for a given composite number $N$.\nThe basic idea reduces to finding non-trivial $x$ and $y$ that satisfy the following congruence:\n$$ x^2 \\equiv y^2 \\pmod N $$ By rearranging this, we get:\n$$ x^2 - y^2 \\equiv 0 \\pmod N $$ $$ (x - y)(x + y) \\equiv 0 \\pmod N $$ Here, if $x \\not\\equiv \\pm y \\pmod N$, we can obtain a non-trivial factor of $N$ by calculating $\\gcd(x-y, N)$ or $\\gcd(x+y, N)$. This fact is the foundation of modern prime factorization algorithms like GNFS.\n2. The Ultimate Classical Algorithm: The Depths of the \u0026ldquo;General Number Field Sieve\u0026rdquo; (GNFS) \u0026ldquo;GNFS\u0026rdquo; is the fastest known prime factorization algorithm for classical computers today. Its time complexity requires sub-exponential time.\nComplexity of GNFS Letting the number of digits (bits) of the number $N$ be $b = \\log_2 N$, the computational complexity of GNFS is expressed as follows:\n$$ O\\left( \\exp \\left( \\left(\\frac{64}{9} b\\right)^{1/3} (\\log b)^{2/3} \\right) \\right) $$ As can be seen from this formula, the computational complexity is not polynomial time, but \u0026ldquo;sub-exponential time,\u0026rdquo; which is slightly slower than exponential time. Still, as the number of digits increases, the computation time grows astronomically.\nMathematical Mechanism of GNFS GNFS consists broadly of four steps:\nPolynomial Selection Sieving Matrix Reduction Square Root 2.1. Polynomial Selection and Number Fields First, we select irreducible polynomials $f(x)$ and $g(x)$ with integer coefficients. These are set to have a common root $m$ modulo $N$. That is,\n$$ f(m) \\equiv 0 \\pmod N $$ $$ g(m) \\equiv 0 \\pmod N $$ Usually, $g(x)$ is chosen as a linear polynomial $g(x) = x - m$. If we let $\\alpha$ be a root of $f(x)$, a \u0026ldquo;Number Field\u0026rdquo; $\\mathbb{Q}(\\alpha)$ is constructed. We compare operations in the ring of $\\mathbb{Q}(\\alpha)$ and operations in the normal integer ring $\\mathbb{Z}$ through the homomorphism $\\phi: \\alpha \\mapsto m$.\n2.2. Sieving Next, we search for a massive number of coprime integer pairs $(a, b)$. The goal is to find pairs such that the following two values are both \u0026ldquo;B-smooth\u0026rdquo; (composed only of relatively small prime factors):\n$a - bm$ (value over the integer ring) $b^d f(a/b)$ (corresponding to the norm $N(a - b\\alpha)$ over the number field) Here, a high-speed search method called a \u0026ldquo;Sieve\u0026rdquo; is used. This efficiently extracts $(a, b)$ pairs that satisfy the conditions from a vast number of candidates.\n2.3. Linear Algebra over GF(2) (Matrix Reduction) From the collected pairs $(a, b)$, we construct exponent vectors and find the left null space of a massive sparse matrix over $\\mathbb{F}_2$ (the field with only elements 0 and 1).\nWe find a vector $v$ as a solution so that the relations $ \\prod (a_i - b_i m) $ and $ \\prod (a_i - b_i \\alpha) $ both become squares. This is nothing but solving a system of linear equations:\n$$ M \\mathbf{x} \\equiv \\mathbf{0} \\pmod 2 $$ Advanced numerical algorithms such as the Block Lanczos Algorithm and the Block Wiedemann Algorithm are utilized here.\n2.4. Square Root Finally, we take square roots in both the number field and the integer ring to derive the relation $x^2 \\equiv y^2 \\pmod N$. Then, we calculate $\\gcd(x-y, N)$ to obtain the factor.\n3. The Breakthrough by Quantum Computing: \u0026ldquo;Shor\u0026rsquo;s Algorithm\u0026rdquo; While GNFS requires sub-exponential time, \u0026ldquo;Shor\u0026rsquo;s Algorithm,\u0026rdquo; published by Peter Shor in 1994, can solve this problem in \u0026ldquo;polynomial time\u0026rdquo; by using a quantum computer.\nComplexity of Shor\u0026rsquo;s Algorithm When the number of qubits is $O(\\log N)$, the time complexity is as follows:\n$$ O((\\log N)^3) $$ This means it does not cause an exponential explosion with respect to the number of bits. This is an astonishing result: even for huge composite numbers where the complexity of \u0026ldquo;classical computing\u0026rdquo; exceeds the lifespan of the universe, they can be cracked in hours to days with \u0026ldquo;quantum computing.\u0026rdquo;\nOverview of Shor\u0026rsquo;s Algorithm: Reduction to the Period-Finding Problem Shor\u0026rsquo;s algorithm cleverly reduces the prime factorization problem to a \u0026ldquo;period-finding problem.\u0026rdquo;\nChoose a random integer $a$ coprime to $N$ ($1 \u003c a \u003c N$). Define the function $f(x) = a^x \\bmod N$. Find the period $r$ of $f(x)$, i.e., the smallest positive integer $r$ such that $a^r \\equiv 1 \\pmod N$. If $r$ is even, check if $a^{r/2} \\not\\equiv -1 \\pmod N$, and calculate $\\gcd(a^{r/2} \\pm 1, N)$ to obtain a prime factor. \u0026ldquo;Finding the period $r$\u0026rdquo; in step 3 is the bottleneck that requires exponential time on classical computers, but quantum computers solve this instantly using \u0026ldquo;quantum superposition\u0026rdquo; and the \u0026ldquo;Quantum Fourier Transform\u0026rdquo; (QFT).\n4. Quantum Fourier Transform (QFT) and Period Extraction Let\u0026rsquo;s look in detail with formulas at the manipulation of quantum states, which is the core of Shor\u0026rsquo;s algorithm.\n4.1. Generation of Quantum Superposition First, we prepare two quantum registers. Register 1 holds a superposition state of inputs $x$, and Register 2 holds the computation result $f(x)$. We apply the Hadamard Transform to the initial state $|0\\rangle |0\\rangle$ to create a superposition of all possible $x$.\n$$ |\\psi_1\\rangle = \\frac{1}{\\sqrt{Q}} \\sum_{x=0}^{Q-1} |x\\rangle |0\\rangle $$ (Here $Q$ is a power of 2 satisfying $N^2 \\le Q \u003c 2N^2$)\nNext, we use a quantum oracle $U_f$ to compute $f(x) = a^x \\bmod N$ and store it in Register 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 $$ Let\u0026rsquo;s assume here that we measure Register 2 (in reality, the mathematical structure is the same even without measurement). If a value $y = a^{x_0} \\bmod N$ is observed, the state of Register 1 collapses into a superposition of all $x$ such that $f(x) = y$. Letting the period be $r$, such $x$ are $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 $$ (Here $M \\approx Q/r$ is the number of terms)\nThis state inherently contains information about the period $r$, but direct measurement will only yield a random $x_0 + kr$, and the period $r$ remains unknown. This is where QFT comes in.\n4.2. Application of the Quantum Fourier Transform (QFT) QFT is an operation that performs a discrete Fourier transform on the amplitudes of quantum states. The action of QFT on state $|x\\rangle$ is defined as follows:\n$$ \\text{QFT} |x\\rangle = \\frac{1}{\\sqrt{Q}} \\sum_{y=0}^{Q-1} e^{2\\pi i \\frac{xy}{Q}} |y\\rangle $$ When this is applied to $|\\psi_3\\rangle$, phase interference (quantum interference) occurs.\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 $$ Expanding the sum in this equation reveals the part:\n$$ \\sum_{k=0}^{M-1} e^{2\\pi i \\frac{kry}{Q}} $$ This sum of a geometric series reinforces each other (Constructive Interference) only when $ry/Q$ is close to an integer, and cancels each other out (Destructive Interference) otherwise.\nTherefore, the state $|y\\rangle$ measured with high probability will be an integer $y$ that satisfies the condition:\n$$ \\frac{y}{Q} \\approx \\frac{c}{r} $$ (where $c$ is some integer).\n4.3. Identifying the Period via Continued Fraction Expansion After obtaining $y$ through measurement, we perform a \u0026ldquo;Continued Fraction Expansion\u0026rdquo; of $y/Q$ using a classical computer. This allows us to calculate the convergent fraction $c/r$ of $y/Q$, and extract candidates for the period $r$ from the denominator with high efficiency.\n5. Comparison of Conceptual Models and the Paradigm Shift To intuitively understand the difference between GNFS and Shor\u0026rsquo;s algorithm, we present a conceptual diagram using Mermaid notation.\nConceptual Diagram of Shor\u0026rsquo;s Algorithm via Quantum Circuit 1 2 3 4 5 6 7 8 9 10 11 12 13 graph TD A[Initial State: 0...0] --\u0026gt; B[Superposition of all states via Hadamard Transform] B --\u0026gt; C[Modular exponentiation a^x mod N] C --\u0026gt;|Quantum Entanglement| D[Collapse to a state with periodicity] D --\u0026gt; E[Quantum Fourier Transform QFT] E --\u0026gt;|Probability amplification via interference| F[Measurement: Obtain y] F --\u0026gt; G[Classical processing: Continued Fraction Expansion] G --\u0026gt; H[Discovery of period r] H --\u0026gt; I[Calculate prime factors of 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 The Essence of the Paradigm Shift GNFS takes the approach of \u0026ldquo;searching for relations within a mathematical space (number field).\u0026rdquo; However, since the search space expands exponentially with the number of digits, it becomes virtually unsolvable for classical computer capabilities (even including parallelization) when the key length exceeds 2048 bits.\nOn the other hand, Shor\u0026rsquo;s algorithm utilizes the \u0026ldquo;wave nature of quantum interference.\u0026rdquo; It simultaneously evaluates all computation paths in a superposition state, uses QFT to cancel out (destructively interfere) unnecessary answers, and amplifies (constructively interferes) only the probability amplitude of the period that is the correct answer. Through this, instead of searching space, it realizes a completely different dimensional approach of \u0026ldquo;making the correct answer itself surface.\u0026rdquo;\n6. Summary In this article, we deeply compared the mathematical backgrounds and algorithmic structures of \u0026ldquo;GNFS,\u0026rdquo; the pinnacle of classical limits, and \u0026ldquo;Shor\u0026rsquo;s Algorithm,\u0026rdquo; which demonstrates the power of quantum computing.\nWhile GNFS drove computational complexity down to sub-exponential time by employing mathematical tricks such as polynomial selection and massive matrix calculations, Shor\u0026rsquo;s algorithm fused the fundamental principles of quantum mechanics—superposition and interference—with a mathematical tool (QFT), achieving a breakthrough to polynomial time in one stroke.\nCurrently, Fault-Tolerant Quantum Computers (FTQC) capable of executing Shor\u0026rsquo;s algorithm at a practical scale (thousands of qubits) do not exist. However, the very existence of this mathematical and theoretical paradigm shift is the primary reason why the transition to Post-Quantum Cryptography (PQC) is urgently being accelerated worldwide today.\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/en/p/gnfs-to-shors-algorithm-math-deepdive/","title":"[Complete Mathematical Guide] Why the Ultimate Classical 'GNFS' Loses to Quantum Algorithms: The Paradigm Shift in Prime Factorization"}]