[{"content":"Информационная безопасность в современном интернет-обществе защищена криптографией с открытым ключом, такой как RSA. Основа безопасности RSA опирается на тот факт, что \u0026ldquo;факторизация огромных составных чисел вычислительно крайне сложна\u0026rdquo; .\nВ этой статье мы раскроем математический механизм \u0026ldquo;Общего метода решета числового поля\u0026rdquo; (GNFS) — самого мощного алгоритма факторизации для классических компьютеров, и подробно разберем, почему он полностью побежден \u0026ldquo;Алгоритмом Шора\u0026rdquo; , открытым Питером Шором. Мы глубоко исследуем эту смену парадигмы с помощью математических формул и концептуальных схем.\n1. Подход к факторизации в классических вычислениях: развитие метода факторизации Ферма Задача факторизации — это задача поиска простых чисел $p, q$, таких что $N = p \\times q$ для заданного составного числа $N$.\nОсновная идея сводится к поиску нетривиальных $x, y$, удовлетворяющих следующему сравнению:\n$$ x^2 \\equiv y^2 \\pmod N $$ Если мы преобразуем это, то получим:\n$$ x^2 - y^2 \\equiv 0 \\pmod N $$ $$ (x - y)(x + y) \\equiv 0 \\pmod N $$ Здесь, если $x \\not\\equiv \\pm y \\pmod N$, мы можем получить нетривиальный делитель $N$, вычислив $\\gcd(x-y, N)$ или $\\gcd(x+y, N)$. Этот факт лежит в основе современных алгоритмов факторизации, таких как GNFS.\n2. Сильнейший классический алгоритм: Глубины \u0026ldquo;Общего метода решета числового поля\u0026rdquo; (GNFS) \u0026ldquo;GNFS\u0026rdquo; — это самый быстрый алгоритм факторизации для классических компьютеров из известных на сегодняшний день. Его временная сложность требует субэкспоненциального (Sub-exponential) времени.\nСложность GNFS Если предположить, что количество цифр $N$ равно $b = \\log_2 N$, сложность GNFS может быть выражена следующим образом:\n$$ O\\left( \\exp \\left( \\left(\\frac{64}{9} b\\right)^{1/3} (\\log b)^{2/3} \\right) \\right) $$ Как видно из этой формулы, сложность представляет собой не полиномиальное время, а \u0026ldquo;субэкспоненциальное время\u0026rdquo; , что лишь немного медленнее экспоненциального. Тем не менее, с увеличением количества цифр время вычислений возрастает астрономически.\nМатематический механизм GNFS GNFS можно условно разделить на 4 этапа:\nВыбор многочленов (Polynomial Selection) Просеивание (Sieving) Редукция матрицы (Matrix Reduction) Вычисление квадратного корня (Square Root) 2.1. Выбор многочленов и алгебраическое числовое поле Сначала выбираются неприводимые многочлены $f(x)$ и $g(x)$ с целыми коэффициентами. Они задаются так, чтобы иметь общий корень $m$ по модулю $N$. То есть:\n$$ f(m) \\equiv 0 \\pmod N $$ $$ g(m) \\equiv 0 \\pmod N $$ Обычно $g(x)$ выбирается как многочлен первой степени $g(x) = x - m$. Если корень $f(x)$ обозначить как $\\alpha$, образуется \u0026ldquo;алгебраическое числовое поле\u0026rdquo; (Number Field) $\\mathbb{Q}(\\alpha)$. Мы сравниваем операции в кольце $\\mathbb{Q}(\\alpha)$ и операции в обычном кольце целых чисел $\\mathbb{Z}$ посредством гомоморфизма $\\phi: \\alpha \\mapsto m$.\n2.2. Просеивание (Sieving) Далее мы ищем большое количество пар взаимно простых целых чисел $(a, b)$. Цель — найти такие пары, чтобы оба следующих значения были \u0026ldquo;B-гладкими\u0026rdquo; (B-smooth, то есть состоящими только из относительно малых простых множителей):\n$a - bm$ (значение в кольце целых чисел) $b^d f(a/b)$ (соответствует норме $N(a - b\\alpha)$ в алгебраическом поле) Здесь используется метод быстрого поиска, называемый \u0026ldquo;Решето\u0026rdquo; (Sieve). Это позволяет эффективно извлекать пары $(a, b)$, удовлетворяющие условиям, из огромного числа кандидатов.\n2.3. Редукция матрицы (Linear Algebra over GF(2)) Из собранных пар $(a, b)$ мы формируем векторы показателей степени и находим левое нуль-пространство огромной разреженной матрицы над $\\mathbb{F}_2$ (поле, содержащее только 0 и 1).\nМы находим вектор решения $v$ так, чтобы соотношения $ \\prod (a_i - b_i m) $ и $ \\prod (a_i - b_i \\alpha) $ становились полными квадратами. Это не что иное, как решение системы линейных уравнений:\n$$ M \\mathbf{x} \\equiv \\mathbf{0} \\pmod 2 $$ Здесь используются продвинутые алгоритмы численных вычислений, такие как алгоритм блочного Ланцоша (Block Lanczos) или блочного Видемана (Block Wiedemann).\n2.4. Вычисление квадратного корня Наконец, мы извлекаем квадратный корень как в алгебраическом числовом поле, так и в кольце целых чисел, что приводит к соотношению $x^2 \\equiv y^2 \\pmod N$. Затем мы вычисляем $\\gcd(x-y, N)$ и получаем делитель.\n3. Прорыв квантовых вычислений: \u0026ldquo;Алгоритм Шора\u0026rdquo; В то время как GNFS требует субэкспоненциального времени, \u0026ldquo;Алгоритм Шора\u0026rdquo; , опубликованный Питером Шором в 1994 году, может решить эту задачу за \u0026ldquo;полиномиальное время\u0026rdquo; с использованием квантового компьютера.\nСложность Алгоритма Шора Если предположить, что количество кубитов равно $O(\\log N)$, то временная сложность составит:\n$$ O((\\log N)^3) $$ Это означает, что экспоненциального взрыва относительно количества битов не происходит. Это поразительный результат, когда факторизация огромных составных чисел, время вычисления которых в \u0026ldquo;классических вычислениях\u0026rdquo; превышает возраст Вселенной, может быть решена от нескольких часов до нескольких дней с помощью \u0026ldquo;квантовых вычислений\u0026rdquo; .\nОбзор Алгоритма Шора: Сведение к задаче поиска периода Алгоритм Шора искусно сводит задачу факторизации к \u0026ldquo;задаче поиска периода\u0026rdquo; .\nВыберите случайное целое число $a$, взаимно простое с $N$ ($1 \u003c a \u003c N$). Определите функцию $f(x) = a^x \\bmod N$. Найдите период $r$ функции $f(x)$, то есть наименьшее положительное целое число $r$ такое, что $a^r \\equiv 1 \\pmod N$. Если $r$ четное, проверьте, не выполняется ли $a^{r/2} \\not\\equiv -1 \\pmod N$, и вычислите $\\gcd(a^{r/2} \\pm 1, N)$ для получения простого делителя. Этот шаг 3, то есть \u0026ldquo;нахождение периода $r$\u0026rdquo; , является узким местом, требующим экспоненциального времени на классическом компьютере. Однако квантовый компьютер решает это мгновенно, используя \u0026ldquo;квантовую суперпозицию\u0026rdquo; и \u0026ldquo;Квантовое преобразование Фурье\u0026rdquo; (QFT).\n4. Квантовое преобразование Фурье (QFT) и извлечение периода Давайте подробнее рассмотрим математические операции над квантовыми состояниями, которые лежат в основе Алгоритма Шора.\n4.1. Генерация квантовой суперпозиции Сначала подготовьте 2 квантовых регистра. Регистр 1 хранит состояние суперпозиции входных данных $x$, а регистр 2 хранит результат вычисления функции $f(x)$. Примените преобразование Адамара (Hadamard Transform) к начальному состоянию $|0\\rangle |0\\rangle$, чтобы создать суперпозицию всех возможных значений $x$.\n$$ |\\psi_1\\rangle = \\frac{1}{\\sqrt{Q}} \\sum_{x=0}^{Q-1} |x\\rangle |0\\rangle $$ (где $Q$ — это степень двойки, удовлетворяющая $N^2 \\le Q \u003c 2N^2$)\nДалее используйте квантовый оракул $U_f$ для вычисления $f(x) = a^x \\bmod N$ и сохраните результат в регистре 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 $$ Предположим теперь, что регистр 2 измеряется (теоретически, даже если он не измеряется, математическая структура та же). Если наблюдается некоторое значение $y = a^{x_0} \\bmod N$, состояние регистра 1 коллапсирует в суперпозицию всех $x$, удовлетворяющих $f(x) = y$. Если предположить, что период равен $r$, такие $x$ будут иметь вид $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 $$ (где $M \\approx Q/r$ — количество членов)\nЭто состояние содержит информацию о периоде $r$, но прямое измерение даст лишь случайное $x_0 + kr$, и период $r$ останется неизвестным. Здесь вступает в дело QFT.\n4.2. Применение Квантового преобразования Фурье (QFT) QFT — это операция, применяющая дискретное преобразование Фурье к амплитудам квантового состояния. Действие QFT на состояние $|x\\rangle$ определяется следующим образом:\n$$ \\text{QFT} |x\\rangle = \\frac{1}{\\sqrt{Q}} \\sum_{y=0}^{Q-1} e^{2\\pi i \\frac{xy}{Q}} |y\\rangle $$ Когда это применяется к $|\\psi_3\\rangle$, возникает фазовая интерференция (квантовая интерференция).\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 $$ Если мы раскроем сумму в этой формуле, появится следующая часть:\n$$ \\sum_{k=0}^{M-1} e^{2\\pi i \\frac{kry}{Q}} $$ Сумма этой геометрической прогрессии взаимно усиливается (Конструктивная интерференция, Constructive Interference) только когда $ry/Q$ близко к целому числу, и взаимно уничтожается (Деструктивная интерференция, Destructive Interference) в других случаях.\nСледовательно, состояние $|y\\rangle$, измеряемое с высокой вероятностью, будет целым числом $y$, удовлетворяющим условию:\n$$ \\frac{y}{Q} \\approx \\frac{c}{r} $$ (где $c$ — некоторое целое число).\n4.3. Определение периода через разложение в цепную дробь После получения $y$ в результате измерения используйте классический компьютер для выполнения \u0026ldquo;разложения в цепную дробь\u0026rdquo; (Continued Fraction Expansion) $y/Q$. Это позволяет вычислить подходящую дробь $c/r$ для $y/Q$ и с высокой эффективностью извлечь кандидата на период $r$ из знаменателя.\n5. Сравнение концептуальных моделей и смена парадигмы Чтобы интуитивно понять разницу между GNFS и Алгоритмом Шора, приводится концептуальная схема с использованием нотации Mermaid.\nКонцептуальная схема Алгоритма Шора с использованием квантовой схемы 1 2 3 4 5 6 7 8 9 10 11 12 13 graph TD A[Начальное состояние: 0...0] --\u0026gt; B[Суперпозиция всех состояний через преобразование Адамара] B --\u0026gt; C[Операция модульного возведения в степень a^x mod N] C --\u0026gt;|Квантовая запутанность| D[Коллапс в состояние с периодичностью] D --\u0026gt; E[Квантовое преобразование Фурье QFT] E --\u0026gt;|Усиление вероятности через интерференцию| F[Измерение: Получение y] F --\u0026gt; G[Классическая обработка: Цепная дробь] G --\u0026gt; H[Обнаружение периода r] H --\u0026gt; I[Вычисление простых множителей 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 Суть смены парадигмы GNFS использует подход \u0026ldquo;поиска соотношений внутри математического пространства (алгебраического поля)\u0026rdquo; . Однако, поскольку пространство поиска расширяется экспоненциально относительно количества цифр, расшифровка становится практически невозможной при длине ключа свыше 2048 бит с использованием классических вычислительных мощностей (даже с учетом распараллеливания).\nС другой стороны, алгоритм Шора использует \u0026ldquo;волновую природу квантовой интерференции\u0026rdquo; . Он оценивает все пути вычислений в состоянии суперпозиции одновременно, подавляет (ослабляет) ненужные ответы с помощью QFT и усиливает только амплитуду вероятности для правильного периода. При этом подход заключается не в поиске в пространстве, а в переходе в совершенно другое измерение: \u0026ldquo;позволить правильному ответу проявиться самому\u0026rdquo; .\n6. Заключение В этой статье мы глубоко сравнили математическую основу и структуру алгоритмов между \u0026ldquo;GNFS\u0026rdquo; , который является пределом классических вычислений, и \u0026ldquo;Алгоритмом Шора\u0026rdquo; , который демонстрирует мощь квантовых вычислений.\nВ то время как GNFS использует математические ухищрения, такие как выбор многочленов и вычисления с огромными матрицами, чтобы снизить сложность до субэкспоненциального времени, Алгоритм Шора достигает прямого прорыва до полиномиального времени, объединяя базовые принципы квантовой механики (суперпозицию и интерференцию) с математическим инструментом (QFT).\nВ настоящее время не существует отказоустойчивого квантового компьютера (FTQC) практического масштаба (тысячи кубитов), способного запустить Алгоритм Шора. Однако именно наличие этой теоретической и математической смены парадигмы является главной причиной ускорения глобального перехода к постквантовой криптографии (PQC: Post-Quantum Cryptography) во всем мире уже сегодня.\n","date":"2026-09-06T12:00:00+09:00","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/ru/p/gnfs-to-shors-algorithm-math-deepdive/","title":"【Полное понимание через формулы】 Почему сильнейший классический «GNFS» проигрывает квантовым алгоритмам? Смена парадигмы в факторизации"},{"content":"Введение: \u0026ldquo;Парадигмальный сдвиг в вычислениях\u0026rdquo; благодаря квантовым компьютерам В последние годы не проходит и дня, чтобы мы не встретили термин «квантовый компьютер» в новостях или статьях о технологиях. Истории, похожие на научную фантастику, например, «завершение вычислений за несколько минут, на которые современным суперкомпьютерам потребовались бы тысячи лет» или «все современные криптографические технологии могут быть взломаны», звучат всё более правдоподобно. Гигантские ИТ-корпорации, такие как Google, IBM и Microsoft, а также университеты и стартапы по всему миру ожесточенно конкурируют за коммерциализацию этой технологии мечты.\nОднако, если спросить: «Что же такое квантовый компьютер на самом деле?», мало кто сможет ответить точно. У многих сложился расплывчатый образ «волшебной коробки, способной рассчитывать все комбинации одновременно», но, строго говоря, это не так.\nВ этой статье мы максимально доступно и в то же время технически грамотно объясним с самых основ, чем квантовый компьютер принципиально отличается от классического (ПК и смартфонов, которыми мы обычно пользуемся), и как такие странные явления квантовой механики, как «Суперпозиция», «Квантовая запутанность» и «Квантовые вентили», используются в вычислениях. Прочитав эту статью до конца, вы сможете четко понять истинное величие квантовых компьютеров и их текущие проблемы.\nГлава 1: Принципиальные отличия классических компьютеров от квантовых Чтобы понять, как работают квантовые компьютеры, нам сначала нужно вспомнить, как работают «классические компьютеры», которыми мы пользуемся сегодня.\nСравнительная таблица: Классический компьютер против Квантового компьютера Параметр Классический компьютер Квантовый компьютер Базовая единица Бит (0 или 1) Кубит (суперпозиция 0 и 1) Представление состояния Детерминированное Вероятностное (не определено до момента измерения) Метод вычислений Последовательная обработка (для распараллеливания нужны физические ядра) Квантовый параллелизм (одновременное управление экспоненциальным числом состояний) Сильные стороны Арифметика, повседневная обработка данных Факторизация простых чисел, расчеты в квантовой химии Отказоустойчивость Очень высокая Очень низкая (требуется криогенная среда или исправление ошибок) Мир классических компьютеров: «Биты» из нулей и единиц Классические компьютеры представляют всю информацию либо как «0», либо как «1». Это называется бит (Bit) . Физически это выражается высоким (1) или низким (0) напряжением транзистора на полупроводниковом чипе. Фотографии высокого разрешения на вашем смартфоне, текст, который вы сейчас читаете, и ваши любимые видео на YouTube — в конечном итоге сводятся к огромному количеству «нулей и единиц». Вычисления — это не что иное, как процесс манипулирования этими строками нулей и единиц путем объединения базовых логических схем, таких как И (конъюнкция), ИЛИ (дизъюнкция) и НЕ (отрицание). Это очень надежный и детерминированный мир. Если входные данные одинаковы, вы всегда получите один и тот же результат.\nМир квантовых компьютеров: «Кубиты», которые одновременно и 0, и 1 С другой стороны, минимальная единица информации в квантовом компьютере называется кубитом (Qubit: Quantum bit) . Самая важная особенность кубита состоит в том, что он может находиться не только в состоянии «0» или «1», как классический бит, но и в «состоянии, где 0 и 1 смешаны с определенной вероятностью». Это называется «Суперпозиция (Superposition)» .\nНапример, если классический бит — это монета, лежащая орлом или решкой вверх, то кубит часто сравнивают с «монетой, которая непрерывно вращается в воздухе». Про вращающуюся монету нельзя сказать, орел это или решка, оба состояния накладываются друг на друга. И только в тот момент, когда монета падает на пол и останавливается (в квантовой механике это называется «измерением»), окончательно определяется, «орел» это или «решка».\nКвантовые компьютеры включают это специфическое свойство микромира (квантовой механики), при котором «состояние не определено до наблюдения», непосредственно в процесс обработки информации.\nГлава 2: Три квантово-механических свойства, в корне меняющих вычисления Источник невероятной вычислительной мощности квантовых компьютеров заключается не в высокой тактовой частоте или малых размерах компонентов. Он кроется в использовании самих законов физики в качестве вычислительных ресурсов. Ключевыми являются следующие три квантово-механических явления.\n1. Суперпозиция (Superposition) и экспоненциальный объем информации Как упоминалось ранее, кубит может одновременно хранить состояния 0 и 1. Один кубит — это «суперпозиция 0 и 1», но что произойдет, если мы увеличим количество кубитов?\n1 кубит: суперпозиция 2 состояний (0, 1) 2 кубита: суперпозиция 4 состояний (00, 01, 10, 11) 3 кубита: суперпозиция 8 состояний N кубитов: суперпозиция $2^N$ паттернов Имея всего 50 кубитов, можно одновременно хранить $2^{50}$ (около 1,1 квадриллиона) состояний. А имея всего 300 кубитов, можно удерживать одновременно $2^{300}$ паттернов (число, превышающее количество всех атомов во Вселенной!). Эта экспоненциальная способность хранения информации является основой потенциала квантовых компьютеров. Физически невозможно заставить классический компьютер хранить в памяти количество состояний, превышающее число атомов во Вселенной.\n2. Квантовая запутанность (Entanglement): Жуткое дальнодействие Квантовая запутанность — это настолько загадочное явление, противоречащее человеческой интуиции, что Эйнштейн называл его «жутким дальнодействием» (Spooky action at a distance) и так и не принял его до конца жизни.\nКогда несколько кубитов переходят в состояние «квантовой запутанности», они становятся тесно связанными друг с другом, образуя нечто вроде общей судьбы: «как только состояние одного определено, состояние другого определяется мгновенно, независимо от того, насколько далеко они находятся друг от друга» .\nНапример, предположим, что два кубита А и В запутаны (каждый находится в состоянии суперпозиции 0 и 1). Если мы измерим А и получим «0», то состояние В мгновенно определится (например, всегда будет «1»), превышая скорость света, которая является пределом скорости передачи информации. В квантовых компьютерах эта квантовая запутанность используется для выражения сложных корреляций между несколькими кубитами и выполнения массовой параллельной обработки информации. Без запутанности вычислительная мощность квантового компьютера мало чем отличалась бы от классического.\n3. Квантовая интерференция (Quantum Interference): Магия выявления правильного ответа Вы можете подумать: «Если он может удерживать все паттерны одновременно, разве он не может просто рассчитать их все сразу параллельно и мгновенно выдать ответ?» Это самое распространенное заблуждение о квантовых компьютерах. Даже если вы выполняете вычисления в состоянии суперпозиции, в конечном итоге вам нужно произвести «измерение», чтобы узнать ответ. Но в момент измерения состояние случайным образом коллапсирует в один из $2^N$ паттернов. В результате получится просто случайный ответ.\nЗдесь на сцену выходит «Квантовая интерференция (Interference)» . Когда волны сталкиваются, там, где их фазы совпадают, они усиливают друг друга, а там, где фазы противоположны — гасят (в сущности, тот же принцип используется в наушниках с активным шумоподавлением).\nХороший «квантовый алгоритм» ловко манипулирует квантовыми состояниями в процессе вычислений так, чтобы «амплитуды вероятностей состояний (волн), ведущих к правильному ответу, усиливались друг другом (амплификация)» , а «амплитуды вероятностей состояний, ведущих к неправильным ответам, гасили друг друга (аннуляция)» . В итоге он спроектирован так, что при финальном измерении «правильный ответ» выпадает с вероятностью, близкой к 100%. Искусное проектирование этого процесса интерференции и есть суть квантового программирования.\nГлава 3: Как происходят вычисления? «Квантовые вентили» и «Квантовые схемы» Подобно тому, как классические компьютеры используют логические вентили (И, ИЛИ, НЕ и т. д.) для выполнения вычислений, квантовые компьютеры применяют к кубитам операции, называемые «Квантовыми вентилями (Quantum Gates)» . Комбинация из нескольких квантовых вентилей называется Квантовой схемой (Quantum Circuit) .\nСостояние кубита математически представляется точкой на поверхности трехмерной сферы, называемой «Сферой Блоха». Северный полюс — это «0», Южный — «1», а экватор — «состояние, в котором 0 и 1 накладываются друг на друга в равной степени». Квантовые вентили — это не что иное, как операции вращения состояния (вектора) на поверхности этой сферы.\nДавайте познакомимся с некоторыми типичными квантовыми вентилями.\n1. Вентиль Адамара (H-вентиль) Это самый фундаментальный вентиль, уникальный для квантовых компьютеров, не имеющий аналогов в классических. Если пропустить кубит в состоянии идеального «0» через H-вентиль, создается «состояние идеальной суперпозиции» (точка на экваторе сферы Блоха), в котором 0 и 1 наблюдаются с вероятностью ровно пятьдесят на пятьдесят. В качестве начального шага многие квантовые алгоритмы начинаются с применения этого H-вентиля ко всем кубитам.\n2. Вентили Паули (вентили X, Y, Z) Это вентили, включающие операции, эквивалентные классическому вентилю НЕ (инверсия 0 в 1, и 1 в 0). На сфере Блоха это соответствует повороту на 180 градусов вокруг осей X, Y и Z. В частности, вентиль X инвертирует Северный полюс (0) в Южный полюс (1), работая точно так же, как классический вентиль НЕ. Вентиль Z играет роль инвертирования «фазы (что-то вроде синхронизации волны)» суперпозиции и чрезвычайно важен для создания квантовой интерференции.\n3. Вентиль CNOT (Контролируемое НЕ) Это сверхважный вентиль для создания квантовой запутанности. Он использует два кубита (управляющий и целевой). Он работает так: «Если управляющий бит равен 1, состояние целевого бита инвертируется (вентиль X). Если управляющий бит равен 0, ничего не происходит». На первый взгляд это похоже на простое условное ветвление IF, но что произойдет, если управляющий бит будет находиться в «состоянии суперпозиции 0 и 1»? Целевой бит перейдет в «состояние, где накладываются инвертированное и неинвертированное состояния», и судьба двух битов окажется полностью связана. Два кубита красиво «запутываются».\nРасставляя и применяя эти вентили по порядку слева направо, словно ноты в партитуре, мы можем выполнять сложные алгоритмы.\nГлава 4: В чем сильны и в чем слабы квантовые компьютеры? Здесь мы должны сообщить вам важный факт. Квантовый компьютер — это не всемогущий бог. В повседневных задачах, таких как веб-браузинг, рендеринг видео, обработка макросов в Excel или работа обычных приложений на смартфоне, квантовые компьютеры, вероятно, никогда не превзойдут классические. Для таких последовательных процессов гораздо лучше подходят классические компьютеры, которые уже в высшей степени оптимизированы, могут похвастаться потрясающей скоростью и дешевизной.\nИстинная ценность квантовых компьютеров проявляется только в «особых задачах, где количество вычислительных комбинаций на классическом компьютере возрастает экспоненциально, и для их решения потребовалось бы время, равное возрасту Вселенной» . Это называется «Квантовым превосходством (Quantum Supremacy)» или «Квантовым преимуществом (Quantum Advantage)».\nВ чем преуспевают квантовые компьютеры (Убойные приложения) 1. Факторизация простых чисел и взлом шифров (Алгоритм Шора) В настоящее время безопасные коммуникации в Интернете (например, оплата кредитными картами или передача личных данных) защищены «алгоритмом шифрования RSA», который основан на предпосылке, что «факторизация огромных чисел практически невозможна (требует колоссального времени) для классического компьютера». Однако, используя «алгоритм Шора», открытый математиком Питером Шором в 1994 году, квантовый компьютер может умело использовать интерференцию, чтобы решить эту задачу с невероятной скоростью (за полиномиальное время). В результате существует риск того, что современные криптографические системы в будущем рухнут, поэтому центральные банки и правительственные учреждения по всему миру спешат перейти на «Постквантовую криптографию (Post-Quantum Cryptography)».\n2. Квантово-химические расчеты, разработка новых материалов и лекарств Поведение молекул и атомов в природе изначально подчиняется законам квантовой механики. Если попытаться смоделировать поведение сложных молекул на классическом компьютере, комбинации взаимодействий между электронами приведут к комбинаторному взрыву, и мы быстро упремся в пределы вычислений даже для относительно небольших молекул. Как сказал лауреат Нобелевской премии по физике Ричард Фейнман: «Если вы хотите симулировать природу, вы должны делать это по законам квантовой механики». Квантовые компьютеры демонстрируют подавляющую естественную мощь в симуляции материалов. Ожидаются прорывы в решении глобальных проблем человечества, такие как разработка инновационных лекарств, открытие сверхпроводников, работающих при комнатной температуре, создание высокоэффективных материалов для солнечных батарей и аккумуляторов, а также синтез энергоэффективных удобрений.\n3. Задачи комбинаторной оптимизации и поиска (Алгоритм Гровера) Квантовые алгоритмы также эффективны для задач поиска оптимального варианта из огромного числа альтернатив (например, оптимальных логистических маршрутов, оптимизации финансовых портфелей и т. д.). Используя «Алгоритм Гровера», можно найти нужные данные в неструктурированной базе данных за количество шагов, пропорциональное квадратному корню от того, что потребовалось бы классическому компьютеру. Например, если имеется 100 миллионов записей, поиск, требующий до 100 миллионов итераций на классическом компьютере, может быть выполнен примерно за 10 000 итераций.\nГлава 5: Физическая стена на пути: «Декогеренция» и «Квантовая коррекция ошибок» Хотя в теории квантовые компьютеры обладают магической мощью, на пути к их коммерческому использованию стоит чрезвычайно высокая и крутая физическая стена. Самый главный враг — это «Шум» .\n«Суперпозиция» и «Квантовая запутанность» кубитов — чрезвычайно тонкие и хрупкие состояния. Достаточно легкого теплового воздействия, колебаний электромагнитных волн или воздействия космических лучей, чтобы это магическое состояние мгновенно разрушилось и кубит превратился в обычный классический бит. Это явление называется «Декогеренцией (Квантовым коллапсом)» .\nОжесточенная конкуренция методов физической реализации В настоящее время по всему миру исследуются различные способы физического создания этих хрупких кубитов, и идет борьба за лидерство.\nСверхпроводниковый метод (Superconducting) : Используется Google, IBM, Amazon и др. В нем используются сверхпроводящие контуры, и для контроля квантовых состояний они охлаждаются почти до абсолютного нуля (около -273°C) с помощью гигантских рефрижераторов. В настоящее время это ведущий метод, в котором проще всего увеличивать число кубитов, однако охлаждающее оборудование является громоздким и дорогим. Метод ионных ловушек (Trapped Ion) : Используется IonQ, Quantinuum и др. Ионы (атомы) удерживаются в вакууме с помощью электромагнитных полей и контролируются точными лазерами. Преимущество состоит в том, что все кубиты идентичны, а состояния могут сохраняться долго (долгое время когерентности), однако скорость операций медленнее по сравнению со сверхпроводниками. Фотонный метод (Photonic) : Приоритет компании PsiQuantum и др. Использует частицы света (фотоны). Главное преимущество в том, что многие компоненты работают при комнатной температуре и не требуют криогенной среды; он также отлично совместим с существующими технологиями производства кремниевых чипов и оптоволоконной связи. Топологический метод (Topological) : Долгое время исследуется Microsoft. Это амбициозный подход, использующий топологические свойства особых частиц, называемых энионами, для создания кубитов, которые фундаментально устойчивы к шуму среды. Теоретически это самый мощный метод, но его физическая реализация считается наиболее сложной. Путь к конечной цели: «Отказоустойчивый квантовый компьютер (FTQC)» В мире современных классических компьютеров тоже случаются вычислительные ошибки (например, инверсия битов из-за космических лучей), но они идеально исправляются с помощью «кодов коррекции ошибок», поэтому мы пользуемся смартфонами, даже не подозревая о них. Для выполнения крупномасштабных практических вычислений на квантовых компьютерах аналогичным образом необходима «Квантовая коррекция ошибок (Quantum Error Correction: QEC)» .\nОднако квантовые состояния обладают свойством «разрушаться при измерении», что порождает фатальную дилемму: нельзя напрямую заглянуть внутрь (измерить), чтобы проверить наличие ошибки. Для решения этой проблемы была разработана теория, позволяющая искусно объединять большое количество нестабильных «физических кубитов» для создания одного стабильного «логического кубита», способного обнаруживать и исправлять ошибки (например, поверхностный код). Тем не менее, считается, что для создания одного логического кубита потребуется от 1 000 до 10 000 физических кубитов. Чтобы запустить алгоритм Шора с использованием тысяч логических кубитов, потребуется колоссальная система, содержащая миллионы или даже десятки миллионов физических кубитов в целом.\nСейчас мы находимся в эре, называемой NISQ (Noisy Intermediate-Scale Quantum — квантовые технологии средних масштабов с шумом) . Это переходные устройства без исправления ошибок, работающие на десятках или сотнях кубитов. По прогнозам экспертов, для достижения конечной цели — создания полностью способного к исправлению ошибок «Отказоустойчивого квантового компьютера (Fault-Tolerant Quantum Computer: FTQC)» — потребуются еще от 10 лет до нескольких десятилетий долгосрочных исследований и разработок.\nГлава 6: История и будущие перспективы квантовых компьютеров В заключение давайте посмотрим, как зародились квантовые компьютеры и к чему они движутся.\nОт рождения теории до демонстрации «Квантового превосходства» 1980-е годы : Физики Пол Бениофф и Ричард Фейнман предложили концепцию компьютера, использующего принципы квантовой механики. Отправной точкой стала фраза: «Если вы хотите моделировать природу, используйте квантовую механику». 1994 год : Питер Шор публикует квантовый алгоритм факторизации (Алгоритм Шора). Это потрясло мир и привело к притоку колоссального финансирования исследований. 1996 год : Лов Гровер публикует Алгоритм Гровера, ускоряющий поиск данных. 2019 год : Историческая веха. Google объявляет, что с помощью 53-кубитного сверхпроводящего процессора «Sycamore» они за 200 секунд выполнили вычисление генерации случайных чисел, на которое классическому суперкомпьютеру потребовалось бы (как считалось) 10 000 лет. Это вызвало огромный резонанс как первая в мире демонстрация «Квантового превосходства (Quantum Supremacy)» (хотя позже IBM и другие улучшили алгоритм со стороны классического суперкомпьютера и возразили, что эту задачу можно решить за несколько дней, что вызвало горячие споры). 2023 год и далее : IBM анонсирует процессор «Condor» с более чем 1000 кубитов. Кроме того, Гарвардский университет и другие учреждения добились успеха в создании и манипулировании «логическими кубитами», и стали появляться сообщения о ранних демонстрациях технологий исправления ошибок. На пути к технологиям следующего поколения Квантовый компьютер — это не просто «ЦП следующего поколения с более высокой тактовой частотой». Это подлинный парадигмальный сдвиг в информатике, фундаментально переписывающий само понятие вычислений по правилам квантовой механики, управляющей микромиром.\nВероятно, при нашей жизни мы не увидим карманных «персональных квантовых смартфонов» (да они и не нужны). Но будущее, в котором мощные квантовые дата-центры в облачных сетях вроде AWS или Azure внезапно откроют лекарство от неизлечимой болезни или изобретут материал для чистой энергии, спасающий от глобального потепления (например, катализатор для синтеза аммиака из атмосферного азота при комнатной температуре), неминуемо приближается.\nСейчас мы находимся на заре, сравнимой с 1940-ми годами и компьютером ENIAC, который работал на перфокартах, пока жар от огромных вакуумных ламп накалял комнату. Тем не менее, лучшие умы исследователей и инженеров по всему миру напряженно работают, и о технологических прорывах сообщается почти ежедневно. То, что мы можем в реальном времени наблюдать эволюцию этого нового «рассвета вычислений», означает, что мы живем в чрезвычайно захватывающую историческую эпоху.\nДверь в квантовый мир только приоткрылась. Мы не можем отвести глаз от того, что будет дальше.\nЭта статья призвана в доступной форме объяснить основные концепции квантовых вычислений для бизнес-специалистов и обычных людей, интересующихся технологиями. Пожалуйста, обратите внимание, что некоторые строгие математические и физические определения (такие как детали нотации бра-кет и амплитуд комплексных вероятностей) были несколько упрощены.\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/ru/p/quantum-computer-basics/","title":"【Полный разбор】 Что такое квантовый компьютер? 〜Принципы вычислений с нуля〜"},{"content":"Введение: «Угроза» криптографическим технологиям со стороны квантовых компьютеров В настоящее время большинство наших повседневных коммуникаций в интернете — онлайн-банкинг, просмотр веб-сайтов (HTTPS), обмен сообщениями в приложениях, а также транзакции блокчейна и криптоактивов — защищены технологией, известной как «криптография с открытым ключом». В частности, такие алгоритмы, как RSA и криптография на эллиптических кривых (ECC), служат основой, обеспечивающей надежность современного цифрового общества.\nЭти методы криптографии основаны на математических проблемах, таких как «факторизация больших простых чисел» и «проблема дискретного логарифма», решение которых на современных классических компьютерах (включая суперкомпьютеры) требует астрономического количества времени. Однако с быстрым развитием квантовых компьютеров в последние годы, этот фундамент будет полностью разрушен, как только они будут внедрены на практике.\nВ 1994 году Питер Шор (Peter Shor) опубликовал «Алгоритм Шора», математически доказав, что факторизацию и задачу дискретного логарифмирования можно решить за очень короткое время с помощью достаточно мощного квантового компьютера. Это означает риск того, что все зашифрованные коммуникации, защищающие сегодня интернет, будут расшифрованы в будущем (проблема, известная как Y2Q: Years to Quantum, или Q-Day).\nЕще более серьезной является проблема так называемого «Harvest Now, Decrypt Later (Собери сейчас, расшифруй позже)». Данные, которые необходимо сохранять в тайне десятилетиями, такие как государственные секреты, интеллектуальная собственность компаний и биометрическая информация лиц, уже могут становиться объектами краж с расчетом на их расшифровку в будущем.\nЧтобы противостоять этому беспрецедентному кризису, криптографы и исследовательские институты по всему миру объединяют усилия для разработки криптографических технологий следующего поколения, способных противостоять атакам квантовых компьютеров — постквантовой криптографии (PQC: Post-Quantum Cryptography) . В этой статье мы подробно рассмотрим основы PQC, механизмы работы основных алгоритмов и последние тенденции глобальной стандартизации, продвигаемые Национальным институтом стандартов и технологий США (NIST).\nЧто такое постквантовая криптография (PQC)? Постквантовая криптография (Post-Quantum Cryptography, PQC) — это общий термин для криптографических алгоритмов, предназначенных для работы на существующих классических компьютерах, но при этом устойчивых к атакам крупномасштабных квантовых компьютеров в будущем (включая атаки с использованием алгоритма Шора).\nЧасто путают такие технологии, как «Квантовая криптография (Quantum Cryptography)» и «Квантовое распределение ключей (QKD)», но это совершенно разные подходы. Квантовая криптография (QKD) — это аппаратная технология, использующая законы квантовой механики (например, изменение состояния при наблюдении) для физического исключения прослушивания в каналах связи. Для этого требуются специальные оптоволоконные линии и оборудование, что связано с высокими затратами на внедрение и ограничениями по расстоянию.\nС другой стороны, PQC — это программная технология криптографии, основанная исключительно на «математике» . Поэтому её можно внедрить в виде обновлений программного обеспечения в существующую интернет-инфраструктуру, серверы, смартфоны, браузеры и т.д., что делает её применение в реальном мире крайне удобным. ИТ-компании и правительственные учреждения по всему миру считают первоочередной задачей замену (миграцию) используемых сегодня алгоритмов RSA и ECC на PQC.\n4 основных математических подхода, на которых базируется PQC Различные алгоритмы PQC основаны на математических задачах, которые сложно эффективно решить даже с помощью квантового компьютера (например, NP-трудные задачи). Здесь мы представляем 4 основные категории, доминирующие в настоящее время.\nОсновные подходы к постквантовой криптографии (PQC) 1 2 3 4 5 6 7 8 9 10 11 12 graph LR PQC[Постквантовая криптография PQC] --\u0026gt; L[Криптография на решетках Lattice-based] PQC --\u0026gt; H[Криптография на хеш-функциях Hash-based] PQC --\u0026gt; M[Многомерная криптография Multivariate] PQC --\u0026gt; C[Криптография на кодах Code-based] L --\u0026gt; L1(FIPS 203: ML-KEM) L --\u0026gt; L2(FIPS 204: ML-DSA) H --\u0026gt; H1(FIPS 205: SLH-DSA) style PQC fill:#f9f,stroke:#333,stroke-width:2px 1. Криптография на решетках (Lattice-based Cryptography) В настоящее время «криптография на решетках» является наиболее перспективным и основным направлением в области PQC. Эта криптография основывает свою безопасность на проблемах точек, регулярно расположенных в виде решеток в многомерных пространствах. Известные проблемы включают «Проблему кратчайшего вектора (SVP)» и «Обучение с ошибками (LWE)».\nКраткое описание механизма: Представьте себе бесчисленное множество точек, выстроенных в виде решетки в пространстве с очень высокой размерностью (от сотен до тысяч измерений). Найти определенную точку решетки легко в двух или трех измерениях, но в сотнях измерений до сих пор не существует эффективного алгоритма ни для классических, ни для квантовых компьютеров. В частности, проблема LWE использует свойство, согласно которому «намеренное добавление небольшого \u0026lsquo;шума (ошибки)\u0026rsquo; к системе линейных уравнений делает угадывание исходных переменных чрезвычайно сложным».\nПреимущества:\nПрименима как для обмена ключами (KEM), так и для цифровых подписей. Очень высокая скорость обработки (иногда быстрее, чем RSA или ECC). Сбалансированный размер ключа и шифротекста. Большинство алгоритмов, стандартизируемых NIST в настоящее время (такие как ML-KEM и ML-DSA), используют криптографию на решетках.\n2. Криптография на хеш-функциях (Hash-based Cryptography) Криптография на хеш-функциях — это алгоритмы PQC, специализирующиеся на цифровых подписях. Их безопасность основана исключительно на устойчивости к коллизиям и односторонности безопасных «криптографических хеш-функций», таких как SHA-2 или SHA-3.\nКраткое описание механизма: Отправной точкой является схема одноразовой подписи, называемая «Подписью Лэмпорта (Lamport Signature)», которую можно использовать только один раз. Связывая их в древовидную структуру данных под названием «Дерево Меркла (Merkle Tree)», она позволяет использовать один набор ключей для множества подписей.\nПреимущества:\nИсключительно надежная основа безопасности, с сильным доказательством того, что «пока хеш-функция безопасна, алгоритм тоже безопасен». Низкий риск обнаружения неожиданных методов взлома из-за слабой зависимости от математических структур. Недостатки:\nНе может использоваться для обмена ключами (KEM), только для цифровых подписей. Размер подписи, как правило, большой. Существуют версии с сохранением состояния (stateful) и без (stateless). В версиях с сохранением состояния (например, XMSS) сложно управлять ключами, что усложняет их внедрение. NIST стандартизировал «SLH-DSA (ранее SPHINCS+)» в качестве стандарта хеш-подписи без сохранения состояния.\n3. Многомерная криптография (Multivariate Cryptography) Многомерная криптография основывает свою безопасность на трудности решения систем квадратных уравнений с множеством переменных (проблема MQ: Multivariate Quadratic problem). Эта проблема известна как NP-трудная.\nКраткое описание механизма: Отправитель создает шифротекст (подпись), подставляя открытый текст (или хеш-значение) в сложное уравнение с множеством переменных, переданное в качестве открытого ключа. Законный получатель владеет «скрытой информацией (лазейкой), преобразующей структуру уравнения в легко решаемую форму» в качестве секретного ключа, и использует её для расшифровки (или проверки подписи).\nПреимущества:\nОчень маленький размер подписи. Чрезвычайно высокая скорость проверки подписи. Подходит для IoT-устройств с ограниченными ресурсами. Недостатки:\nОчень большой размер открытого ключа (может достигать от десятков до сотен килобайт). В прошлом некоторые перспективные алгоритмы (например, Rainbow) были взломаны классическими атаками, что делает создание доверия к их безопасности немного сложнее по сравнению с другими методами. 4. Криптография на кодах (Code-based Cryptography) Криптография на кодах — это применение теории «кодов с исправлением ошибок», используемых для устранения ошибок в каналах связи. Предложенная в 1978 году «Криптосистема Мак-Элиса (McEliece)» является самой известной и одной из старейших в области PQC.\nКраткое описание механизма: Отправитель кодирует открытый текст, используя открытый ключ получателя (генераторную матрицу кода с исправлением ошибок, скрывающую определенную структуру), и намеренно добавляет ошибки (шум) перед отправкой. Получатель использует секретный ключ для устранения ошибок и извлечения текста. Атакующий должен исправить ошибки в случайном коде, не зная его структуры, что называется «задачей синдромного декодирования», которая является NP-трудной.\nПреимущества:\nИнтенсивно изучается на протяжении более 40 лет без нахождения эффективных атак, что гарантирует высокую надежность безопасности. Высокая скорость процессов шифрования и дешифрования. Недостатки:\nОчень большой размер открытого ключа (может достигать нескольких мегабайт). Поэтому трудно использовать в средах с ограниченной пропускной способностью или памятью (например, при рукопожатии TLS). Последние тенденции стандартизации PQC в NIST Национальный институт стандартов и технологий США (NIST) объявил глобальный конкурс на алгоритмы постквантовой криптографии следующего поколения в 2016 году и провел несколько этапов строгой оценки на протяжении многих лет.\nВ 2024 году NIST окончательно утвердил следующие три алгоритма в качестве официальных Федеральных стандартов обработки информации (FIPS). Это создает прочную основу для организаций по всему миру, чтобы начать их внедрение в производственных средах.\nУтвержденные стандарты FIPS (2024) FIPS 203: ML-KEM (ранее CRYSTALS-Kyber)\nНазначение: Механизм инкапсуляции ключей (KEM) / Шифрование и обмен ключами Базовая технология: Криптография на решетках (Module-LWE) Особенности: Предлагает отличный баланс между размером ключа и скоростью, становясь стандартом по умолчанию для обмена ключами PQC в общих интернет-приложениях, таких как веб-коммуникации (TLS) и защищенные мессенджеры. FIPS 204: ML-DSA (ранее CRYSTALS-Dilithium)\nНазначение: Цифровая подпись Базовая технология: Криптография на решетках (Module-LWE) Особенности: Основной стандарт для цифровых подписей. Обеспечивает эффективную обработку и станет новым стандартом для всех сценариев использования электронных подписей, таких как подписание программного обеспечения и аутентификация документов. FIPS 205: SLH-DSA (ранее SPHINCS+)\nНазначение: Цифровая подпись Базовая технология: Криптография на хеш-функциях (без сохранения состояния) Особенности: Играет важную роль в качестве резервного варианта на случай обнаружения уязвимостей в криптографии на решетках. Хотя размер подписи больше, это подходит для случаев, когда требуется долгосрочная надежность. Стремление к разнообразию Хотя NIST завершил начальный процесс стандартизации, поиск дополнительных алгоритмов продолжается. Учитывая сильный уклон стандартов в сторону «криптографии на решетках», обеспечение криптографического разнообразия (Crypto Diversity) считается крайне важным. Ведется оценка криптографии на кодах и других методов в качестве резервных стандартов для обмена ключами, что укрепит основу PQC в будущем.\nСценарии миграции на PQC и вызовы: важность «криптографической гибкости» С выпуском официальных стандартов NIST, правительственные учреждения, финансовые институты и технологические компании по всему миру начнут ускорять переход с существующих RSA/ECC на PQC. Руководства Агентства национальной безопасности США (NSA) также рекомендуют скорейшее завершение миграции.\nВнедрение гибридного подхода Поскольку алгоритмы PQC являются новыми, они не прошли проверку временем, как классическая криптография. Учитывая риски скрытых ошибок в реализациях или обнаружения новых методов атак, на переходном этапе рекомендуется «гибридный подход» . Этот метод сочетает проверенную криптографию (например, ECDHE) с новыми PQC (например, ML-KEM) для обмена ключами. В настоящее время браузеры и облачные сервисы активно внедряют этот подход в тестовом режиме.\nДостижение криптографической гибкости (Crypto-Agility) Самое важное для компаний и разработчиков систем — обеспечение «криптографической гибкости (Crypto-Agility)» . Важнейшее значение имеет гибкая архитектура системы, позволяющая быстро обновлять или заменять криптографические алгоритмы без остановки системы в случае обнаружения дефектов или появления новых стандартов.\nСоздание криптографического перечня (CBOM: Cryptography Bill of Materials) для точного понимания того, «где», «какая криптография» и «для какой цели» используется в системе, является важным первым шагом на пути к миграции на PQC.\nЗаключение: Подготовка к грядущему дню «Q-Day» Хотя развитие квантовых компьютеров принесет огромную пользу человечеству, это также и величайшая угроза криптографической безопасности — основе нашего цифрового общества. Постквантовая криптография (PQC) больше не является «отдаленной темой исследований будущего». После публикации стандартов FIPS от NIST, PQC вступила в стадию полномасштабного «внедрения и миграции».\nУчитывая угрозу «Собери сейчас, расшифруй позже», миграция на PQC — это первоочередная задача, которую любая организация, работающая с конфиденциальными данными, должна начать решать «прямо сейчас». Давайте безопасно преодолеем эпоху квантовых компьютеров, глубоко понимая криптографические технологии следующего поколения и повышая криптографическую гибкость наших систем.\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/ru/p/post-quantum-cryptography/","title":"【PQC】Полная картина \"постквантовой криптографии\", криптографии следующего поколения в эпоху квантовых компьютеров"},{"content":"Введение: Пересечение криптографии и квантовых компьютеров В современном интернет-обществе основой защиты секретности связи является «криптография с открытым ключом». Наиболее представительным является шифрование RSA, разработанное в 1977 году Роном Ривестом, Ади Шамиром и Леонардом Адлеманом. От покупок в Интернете и просмотра веб-сайтов (HTTPS) до отправки и получения электронной почты, шифрование RSA служит сердцем интернет-инфраструктуры.\nОднако появление «квантовых компьютеров» указывает на возможность того, что эта безопасность может быть разрушена на корню. В СМИ иногда появляются сенсационные заголовки, такие как «Как только квантовый компьютер будет готов, все пароли в мире будут расшифрованы за секунды». Так ли это на самом деле?\nВ этой статье подробно рассматривается механизм GNFS (Общий метод решета числового поля) как классический метод дешифрования, а также окончательный алгоритм дешифрования с использованием квантовых компьютеров — «Алгоритм Шора» (Shor\u0026rsquo;s Algorithm). Мы доступно объясним такие концепции, как квантовое преобразование Фурье и поиск периода, и подробно рассмотрим текущее состояние аппаратного обеспечения в эпоху NISQ (Noisy Intermediate-Scale Quantum) и реальные препятствия для взлома RSA-2048.\nОснова RSA: Сложность факторизации Безопасность RSA зависит от математической асимметрии: «Легко перемножить два гигантских простых числа, но крайне сложно найти (факторизовать) исходные простые числа из результата (составного числа)».\nНапример, пусть есть $ p = 61 $ и $ q = 53 $. Вычисление $ N = p \\times q = 3233 $ мгновенно. Однако, если дано только «3233» и нужно найти исходные простые числа, факторизация требует экспоненциально больше вычислений с ростом числа.\nВ текущем стандарте RSA-2048 используется составное число $ N $ длиной 2048 бит (около 617 десятичных цифр). Если мы сможем факторизовать $ N $, шифр будет взломан.\nКлассический подход: GNFS (Общий метод решета числового поля) Для факторизации математики разрабатывали различные алгоритмы. Самым быстрым для классических компьютеров в настоящее время является ** GNFS (General Number Field Sieve) **.\nGNFS расширяет вычисления в кольце целых чисел до более абстрактного алгебраического числового поля. Основные этапы:\n** Выбор полинома **: Найти полином $ f(x) $, корнем которого является $ N $. ** Сбор данных (просеивание) **: Найти много пар чисел, разложимых на малые простые (гладкие числа). Это самый долгий этап. ** Генерация и редукция матрицы **: Создать гигантскую разреженную матрицу и решить её методами линейной алгебры. ** Вычисление квадратного корня **: Найти факторы (простые множители) $ N $. Сложность вычисляется как $ O(\\exp((\\sqrt[3]{\\frac{64}{9}} + o(1)) (\\log N)^{\\frac{1}{3}} (\\log \\log N)^{\\frac{2}{3}})) $ — это «субэкспоненциальное» время.\nВ 2020 году исследователи успешно факторизовали RSA-250 (829 бит) с помощью GNFS, потратив около 2700 процессоро-лет. Но для 2048 бит требуемые вычисления превышают возраст Вселенной в триллионы раз, что делает классические методы непрактичными.\nКозырь квантовых компьютеров: Алгоритм Шора В 1994 году Питер Шор представил «алгоритм Шора», который решает проблему факторизации на квантовом компьютере за ** полиномиальное время ** ($ O((\\log N)^3) $). Это теоретически означает полный взлом RSA.\nОбщая схема алгоритма Шора 1 2 3 4 5 6 7 8 9 10 graph TD A[Ввод числа N] --\u0026gt; B[Выбор случайного целого a] B --\u0026gt; C{НОД\u0026lt;br\u0026gt;a и N} C --\u0026gt;|Больше 1| D[Удача! Найден множитель!] C --\u0026gt;|1 Взаимно просты| E[Квантовый компьютер] E --\u0026gt; F[Поиск периода r для f_x = a^x mod N\u0026lt;br\u0026gt;через QFT] F --\u0026gt; G{Период r четный и\u0026lt;br\u0026gt;a^r/2 ≢ -1 mod N} G --\u0026gt;|Да| H[Вычисление НОД gcd_a^r/2 ± 1, N] H --\u0026gt; I((Успешная факторизация!)) G --\u0026gt;|Нет| B Шаг 1: Сведение к поиску периода (Классическая часть) Выбираем $ a $, взаимно простое с $ N $. Рассмотрим последовательность: $ f(x) = a^x \\pmod N $ Эта функция периодична, и задача — найти её период $ r $. Если период $ r $ найден и он четный, то с помощью: $ (a^{r/2} - 1)(a^{r/2} + 1) \\equiv 0 \\pmod N $ и алгоритма Евклида мы можем легко найти факторы $ N $.\nШаг 2: Суперпозиция Квантовый компьютер готовит два регистра. С помощью вентилей Адамара первый регистр переводится в ** состояние равномерной суперпозиции ** всех возможных значений $ x $.\nШаг 3: Квантовое модульное возведение в степень Параллельно для всех состояний суперпозиции вычисляется $ a^x \\pmod N $.\nШаг 4: Квантовое преобразование Фурье (QFT) Чтобы извлечь информацию о периоде, применяется ** QFT ** к первому регистру. Благодаря конструктивной и деструктивной интерференции, вероятности неправильных периодов гасятся, а вероятность правильного периода $ r $ усиливается.\nШаг 5: Измерение и непрерывные дроби После применения QFT измерение первого регистра дает значение, из которого классическим методом непрерывных дробей находится точный период $ r $. Имея $ r $, мы получаем множители $ N $.\nВозможности и проблемы эпохи NISQ Будет ли RSA взломан завтра? Ответ — однозначное «Нет», из-за аппаратных ограничений.\nЭпоха NISQ Мы находимся в эре устройств NISQ с десятками/сотнями физических кубитов, подверженных сильному шуму. Декогеренция и ошибки вентилей разрушают результаты сложных алгоритмов вроде алгоритма Шора.\nФизические и логические кубиты Для исправления ошибок требуется \u0026ldquo;квантовая коррекция ошибок\u0026rdquo; (например, Surface Code). Для создания одного идеального логического кубита требуется от 1000 до 10000 физических кубитов (оверхед).\nРесурсы для взлома RSA-2048 По оценкам 2021 года от Craig Gidney и Martin Ekerå, для взлома RSA-2048 потребуется:\n** Логические кубиты **: ~ 4,096 ** Физические кубиты **: ** ~ 20 миллионов ** (при уровне ошибок $10^{-3}$) ** Время вычислений **: ~ 8 часов В конце 2023 года IBM представила процессор \u0026ldquo;Condor\u0026rdquo; с 1,121 кубитом. Масштабирование до ** 20 миллионов ** практических кубитов связано с колоссальными инженерными барьерами. Большинство экспертов считают, что для создания отказоустойчивого квантового компьютера (FTQC) потребуется от 10 до 30 лет или больше.\nУгроза \u0026ldquo;Store Now, Decrypt Later\u0026rdquo; и эра PQC Считать, что можно расслабиться на 10 лет, преждевременно. Существует угроза ** \u0026ldquo;Store Now, Decrypt Later\u0026rdquo; (Сохрани сейчас, расшифруй позже) **. Злоумышленники собирают и хранят зашифрованные данные, чтобы расшифровать их, как только квантовые компьютеры станут доступны.\nВ ответ на эту угрозу NIST ускоряет стандартизацию ** Постквантовой криптографии (PQC: Post-Quantum Cryptography) **. Основные направления PQC:\n** Криптография на решетках (Lattice-based cryptography) **: На основе задачи LWE (Kyber, Dilithium). ** Криптография на кодах (Code-based cryptography) **: Сложность декодирования кодов. ** Многомерная криптография (Multivariate cryptography) **: Системы квадратных уравнений. ** Хэш-сигнатуры (Hash-based signatures) **: Только на основе хэш-функций. Основные платформы, такие как Google Chrome и Apple iMessage, уже начали тестировать и внедрять гибридные PQC решения.\nЗаключение Квантовые компьютеры переходят из области фантастики в реальную инженерную задачу. Алгоритм Шора — это великое интеллектуальное достижение, объединившее математику и квантовую механику, обладающее разрушительной силой для основ нашего цифрового общества.\nRSA не устареет завтра, но в свете угроз вроде \u0026ldquo;Store Now, Decrypt Later\u0026rdquo;, масштабный переход криптографии к PQC уже начался. Мы являемся свидетелями смены парадигмы в информационной безопасности.\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/ru/p/shors-algorithm-and-rsa-breaking/","title":"Действительно ли квантовые компьютеры уничтожат шифрование RSA? ~ Алгоритм Шора и текущий этап ~"},{"content":"\u0026ldquo;Полная анатомия\u0026rdquo; понимания сильнейшего алгоритма криптоанализа \u0026ldquo;GNFS\u0026rdquo; путем его реализации на C++ «Шифрование RSA» фундаментально поддерживает современный Интернет. Его надежность опирается на математическое убеждение, что «факторизация огромного составного числа практически невозможна для современных компьютеров».\nОднако человечество никогда не сдается. В настоящее время существует ** самый сильный и передовой алгоритм ** человечества для гигантской факторизации на классических компьютерах (обычных, а не квантовых). Он называется ** \u0026ldquo;Общий метод решета числового поля\u0026rdquo; (GNFS: General Number Field Sieve) **.\nВ этой статье мы полностью публикуем код реализации на C++ (с использованием целых чисел произвольной точности boost::multiprecision библиотеки Boost), который строго моделирует эту передовую логику вычислений GNFS, и подробно объясняем стоящую за ней «алгебраическую теорию чисел».\nПожалуйста, насладитесь тайнами математики и мощью информатики, которая их покоряет, вместе с исходным кодом.\n1. Логический фреймворк GNFS (полный исходный код) Сначала представим всю картину реализации GNFS на C++, которая будет здесь объясняться. Фактический метод решета числового поля (например, CADO-NFS) — это гигантская распределенная система из сотен тысяч строк кода. Однако этот код извлекает ** «5 основных конвейеров (фаз)» **, составляющих GNFS, проектирует их как классы и строго моделирует в минимальной конфигурации без потери математического смысла.\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; // Использование чисел произвольной точности Boost.Multiprecision using namespace boost::multiprecision; // ============================================================================ // [SOTA GNFS] General Number Field Sieve Передовой логический фреймворк // // Этот код строго моделирует 5 конвейеров современного GNFS, // используемого в CADO-NFS и др., как классы на 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; }; // ============================================================================ // Фаза 1: Выбор полинома (алгоритм КлейнЮнга) // ============================================================================ class PolynomialSelector { public: int degree; std::vector\u0026lt;cpp_int\u0026gt; f; // Алгебраический полином f(x) std::vector\u0026lt;cpp_int\u0026gt; g; // Рациональный полином g(x) = x - m cpp_int m; PolynomialSelector(int d) : degree(d) {} // Генерация начального полинома на основе m-расширения (в реальности используется более сложное сокращение базиса решетки LLL) void select(const cpp_int\u0026amp; N) { std::cout \u0026lt;\u0026lt; \u0026#34;[Фаза 1] Выбор полинома (Степень \u0026#34; \u0026lt;\u0026lt; degree \u0026lt;\u0026lt; \u0026#34;) начинается...\u0026#34; \u0026lt;\u0026lt; std::endl; // Простое m-расширение (степени d) // m = N^(1/d) cpp_int N_copy = N; m = 1; // Простая аппроксимация m (без использования функций Boost) cpp_int low = 1, high = N; while (low \u0026lt;= high) { cpp_int mid = low + (high - low) / 2; cpp_int p = 1; for(int i=0; i\u0026lt;degree; ++i) p *= mid; if (p \u0026lt;= N) { m = mid; low = mid + 1; } else { high = mid - 1; } } f.resize(degree + 1); cpp_int temp = N; for (int i = 0; i \u0026lt;= degree; ++i) { f[i] = temp % m; temp /= m; } g = {-m, 1}; // g(x) = x - m std::cout \u0026lt;\u0026lt; \u0026#34; -\u0026gt; m = \u0026#34; \u0026lt;\u0026lt; m \u0026lt;\u0026lt; std::endl; std::cout \u0026lt;\u0026lt; \u0026#34; -\u0026gt; f(x) = \u0026#34;; for(int i = degree; i \u0026gt;= 0; --i) { std::cout \u0026lt;\u0026lt; f[i] \u0026lt;\u0026lt; \u0026#34;x^\u0026#34; \u0026lt;\u0026lt; i \u0026lt;\u0026lt; (i \u0026gt; 0 ? \u0026#34; + \u0026#34; : \u0026#34;\u0026#34;); } std::cout \u0026lt;\u0026lt; \u0026#34;\\n[Фаза 1] Завершено.\u0026#34; \u0026lt;\u0026lt; std::endl; } }; // ============================================================================ // Фаза 2: Решето на решетках (Lattice Sieving) // ============================================================================ // В современных GNFS вместо Line Sieve используется Special-q Lattice Sieving, // разработанное Франке и КлейнЮнгом, которое стало де-факто стандартом. 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;[Фаза 2] Генерация факторных баз (Рациональная граница: \u0026#34; \u0026lt;\u0026lt; rational_bound \u0026lt;\u0026lt; \u0026#34;, Алгебраическая граница: \u0026#34; \u0026lt;\u0026lt; algebraic_bound \u0026lt;\u0026lt; \u0026#34;)\u0026#34; \u0026lt;\u0026lt; std::endl; // (Опущено) На самом деле выполняется генерация простых чисел и фильтрация с помощью символов Лежандра и т.д. } std::vector\u0026lt;Relation\u0026gt; sieve(const PolynomialSelector\u0026amp; poly) { std::cout \u0026lt;\u0026lt; \u0026#34;[Фаза 2] Special-q Lattice Sieving активен...\u0026#34; \u0026lt;\u0026lt; std::endl; std::vector\u0026lt;Relation\u0026gt; relations; // Макетная реализация: реальное решето на решетках сканирует сотни ГБ памяти блоками. // Пары (a, b) проецируются на решетку (a = i*q + j*...) для каждого особого простого q, // и выполняется просеивание с экстремальной эффективностью кэширования. // Добавлено фиктивное отношение для демонстрации 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;[Фаза 2] Найдено \u0026#34; \u0026lt;\u0026lt; relations.size() \u0026lt;\u0026lt; \u0026#34; отношений.\u0026#34; \u0026lt;\u0026lt; std::endl; return relations; } }; // ============================================================================ // Фаза 3: Фильтрация (удаление синглтонов и слияние клик) // ============================================================================ class Filter { public: void reduce_matrix(std::vector\u0026lt;Relation\u0026gt;\u0026amp; relations) { std::cout \u0026lt;\u0026lt; \u0026#34;[Фаза 3] Фильтрация отношений...\u0026#34; \u0026lt;\u0026lt; std::endl; // 1. Удаление синглтонов (удаление отношений с простыми числами, появляющимися только раз) // 2. Слияние клик (объединение отношений для превращения разреженной матрицы в плотную) // В реальности алгоритмы вроде Union-Find сжимают матрицу из сотен миллионов строк до нескольких миллионов. std::cout \u0026lt;\u0026lt; \u0026#34;[Фаза 3] Размер матрицы оптимально уменьшен.\u0026#34; \u0026lt;\u0026lt; std::endl; } }; // ============================================================================ // Фаза 4: Линейная алгебра над GF(2) (метод Блока Видемана) // ============================================================================ class LinearAlgebraGF2 { public: // В современных суперкомпьютерных средах вместо метода Block Lanczos // передовым является метод Block Wiedemann (реализация Coppersmith), удобный для распределенных вычислений. 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;[Фаза 4] Алгоритм Блока Видемана над GF(2) начинается...\u0026#34; \u0026lt;\u0026lt; std::endl; // Итеративное вычисление произведения разреженной матрицы и вектора, // поиск нескольких векторов решений (ядер), где M * x = 0 mod 2. std::vector\u0026lt;std::vector\u0026lt;int\u0026gt;\u0026gt; dependencies; // Список зависимостей // Фиктивные данные dependencies.push_back({0}); std::cout \u0026lt;\u0026lt; \u0026#34;[Фаза 4] Найдено \u0026#34; \u0026lt;\u0026lt; dependencies.size() \u0026lt;\u0026lt; \u0026#34; линейных зависимостей (полных квадратов).\u0026#34; \u0026lt;\u0026lt; std::endl; return dependencies; } }; // ============================================================================ // Фаза 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;[Фаза 5] Вычисление алгебраического квадратного корня...\u0026#34; \u0026lt;\u0026lt; std::endl; // 1. Вычисление рационального корня V cpp_int V = 1; // V = sqrt( prod(a - bm) ) mod N // 2. Вычисление алгебраического корня gamma (методом Монтгомери и др.) // Нахождение элемент gamma в огромном алгебраическом поле O_K и его отображение в реальный мир гомоморфизмом phi // Y = phi(gamma) mod N cpp_int Y = 1; // Предполагается, что в Фазах 2 и 4 были добавлены столбцы квадратичных характеров (Quadratic Characters) // во избежание препятствий группы классов идеалов и группы единиц. std::cout \u0026lt;\u0026lt; \u0026#34; -\u0026gt; Гомоморфизм phi применен.\u0026#34; \u0026lt;\u0026lt; std::endl; std::cout \u0026lt;\u0026lt; \u0026#34;[Фаза 5] Вычисление НОД(V - Y, N)...\u0026#34; \u0026lt;\u0026lt; std::endl; cpp_int factor = gcd(V - Y, N); // НОД(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;[УСПЕХ] Найден нетривиальный множитель: \u0026#34; \u0026lt;\u0026lt; factor \u0026lt;\u0026lt; std::endl; std::cout \u0026lt;\u0026lt; \u0026#34; Другой множитель: \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;[НЕУДАЧА] Тривиальное решение. Пробуем следующую зависимость...\u0026#34; \u0026lt;\u0026lt; std::endl; } } }; // ============================================================================ // Основной конвейер выполнения // ============================================================================ 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 (Boost C++) \u0026#34; \u0026lt;\u0026lt; std::endl; std::cout \u0026lt;\u0026lt; \u0026#34;================================================================\u0026#34; \u0026lt;\u0026lt; std::endl; // Гигантское составное число N (например, RSA-270) cpp_int N(\u0026#34;233108530344407544527637656910680524145619812480305449042948611968495918245135782867888369318577116418213919268572658314913060672626911354027609793166341626693946596196427744273886601876896313468704059066746903123910748277606548649151920812699309766587514735456594993207\u0026#34;); // Степень полинома (для \u0026gt; 130 цифр обычно выбирают 5-6) int degree = 6; // Инициализация конвейера PolynomialSelector poly_select(degree); LatticeSieve sieve(10000000, 20000000); // Реальные границы составляют миллионы Filter filter; LinearAlgebraGF2 linalg; AlgebraicSquareRoot sqrt_step; auto start_time = std::chrono::high_resolution_clock::now(); // 1. Выбор полинома poly_select.select(N); // 2. Просеивание (sieve) sieve.generate_factor_bases(); std::vector\u0026lt;Relation\u0026gt; relations = sieve.sieve(poly_select); // 3. Фильтрация (сжатие матрицы) filter.reduce_matrix(relations); // 4. Линейная алгебра (Поиск нуль-пространства над GF(2)) std::vector\u0026lt;std::vector\u0026lt;int\u0026gt;\u0026gt; dependencies = linalg.solve_nullspace(relations); // 5. Вычисление алгебраического квадратного корня и НОД 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[Система] Конвейер SOTA GNFS завершен за \u0026#34; \u0026lt;\u0026lt; elapsed.count() \u0026lt;\u0026lt; \u0026#34; секунд.\u0026#34; \u0026lt;\u0026lt; std::endl; return 0; } Итак, как этот код разрушает криптографические стены? Давайте разберем тщательный алгоритм и высшую математику каждой из 5 фаз.\n2. Конечная цель GNFS: $X^2 \\equiv Y^2 \\pmod N$ Как и в случае GNFS, большинство современных алгоритмов факторизации гигантских чисел стремятся найти нетривиальную пару $(X, Y)$, удовлетворяющую следующему сравнению:\n$$X^2 \\equiv Y^2 \\pmod N$$ Это означает, что «остаток от деления $X^2$ и $Y^2$ на $N$ одинаков». Преобразовав это, получим: $X^2 - Y^2 \\equiv 0 \\pmod N$ Другими словами, $(X-Y)(X+Y)$ кратно $N$.\nЕсли $X \\not\\equiv \\pm Y \\pmod N$ (нетривиальное решение), это означает, что между $(X-Y)$ и $N$ есть «общий делитель больше 1 и меньше $N$». Если мы воспользуемся алгоритмом Евклида для вычисления ** $\\gcd(X-Y, N)$ **, то легко найдем простой множитель $N$.\nОднако поиск этих $X$ и $Y$ сродни поиску иголки в пустыне. Поэтому GNFS применяет гениальный подход: создает ** два мира ** — «мир реальных целых чисел» и «мир алгебраических числовых полей полиномов» — для распределения вычислений.\n3. Фаза 1: Выбор полинома (Polynomial Selection) 1 2 3 4 5 6 7 8 9 10 11 12 class PolynomialSelector { // ... void select(const cpp_int\u0026amp; N) { // вычисление m = N^(1/d) и m-расширение // ... for (int i = 0; i \u0026lt;= degree; ++i) { f[i] = temp % m; temp /= m; } g = {-m, 1}; // g(x) = x - m } }; Первый шаг GNFS — создание «магического полинома», связывающего оба мира. Для гигантского числа $N$ выбираем целое $m$. Обычно так, чтобы $m \\approx N^{1/d}$ (в коде предполагается полином степени $d=6$).\nЗатем мы разлагаем $N$ по основанию $m$ и используем его коэффициенты для построения полинома $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$$ Этот полином $f(x)$ обладает крайне важным свойством: ** «если подставить $m$ в переменную $x$, получится ровно $N$ ($f(m) = N$)» **. То есть $f(m) \\equiv 0 \\pmod N$. Рациональный полином определяется как $g(x) = x - m$.\nВ результате ** «мир алгебраического поля $\\mathbb{Z}[\\alpha]$» **, управляемый корнем $\\alpha$ из $f(x)=0$, и обычный ** «мир рациональных чисел (целых) $\\mathbb{Z}$» ** прочно связываются «гомоморфизмом колец» $x \\to m$.\nВ современных CADO-NFS и других реализациях используются алгоритмы КлейнЮнга и алгоритм LLL-редукции базиса решетки для поиска «самого удобного полинома $f(x)$», при котором коэффициенты не становятся чрезмерно большими, а простые числа легче появляются на следующих этапах. Этот поиск может занимать месяцы.\n4. Фаза 2: Решето на специальной q-решетке (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) { // ... // Пары (a, b) проецируются на решетку для каждого особого простого q, // и выполняется просеивание, максимизирующее эффективность кэширования. // ... } }; Подготовив оба мира, мы переходим к поиску «гладких чисел (состоящих только из маленьких простых множителей)» в обоих мирах. Генерируются бесчисленные пары целых чисел $(a, b)$ и вычисляются два значения:\nРациональное значение : $a - bm$ Алгебраическая норма : $b^d f(a/b)$ Цель GNFS состоит в том, чтобы собрать от десятков до сотен миллионов ** «пар (отношений), в которых и рациональное, и алгебраическое значения могут быть полностью факторизованы только малыми простыми множителями» **.\nВ раннем GNFS использовалось «Линейное решето (Line Sieve)», где $(a, b)$ располагались на плоскости $xy$ и делились на простые числа. Но это было крайне медленно из-за промахов кэша при частом обращении к памяти.\nПоэтому современные коды используют метод, называемый ** \u0026ldquo;Special-q Lattice Sieve\u0026rdquo; **. Фиксируется достаточно большое простое число $q$, и вычисляются только пары $(a, b)$, где «алгебраическое значение гарантированно делится на $q$». Пары, удовлетворяющие этому условию, образуют «решетку (Lattice)» на плоскости, делая скачки адресов в памяти постоянными, что идеально вписывается в кэш L1/L2 процессора. Введение решета на решетках резко повысило скорость вычислений GNFS.\n5. Фаза 3: Фильтрация (Filtering) 1 2 3 4 5 6 7 class Filter { public: void reduce_matrix(std::vector\u0026lt;Relation\u0026gt;\u0026amp; relations) { // 1. Удаление синглтонов (удаление отношений с простыми числами, появляющимися только 1 раз) // 2. Слияние клик (объединение отношений для уплотнения разреженной матрицы) } }; Сотни миллионов отношений, собранных компьютерами по всему миру за несколько месяцев на Фазе 2. Однако, если их сразу передать на следующий этап «вычисления матрицы», память суперкомпьютера переполнится.\nСледовательно, происходит экстремальный процесс сжатия матрицы, называемый ** Фильтрацией (Filtering) **.\nУдаление синглтонов (Singleton removal) Предположим, гигантское простое число $p$ встречается только «1 раз» во всех миллионах отношений. Наша цель — «сделать показатели всех простых чисел четными (кратными 2)», так что простое число, появляющееся лишь однажды, не может стать четным. Поэтому отношения, содержащие такое простое число, немедленно удаляются как «бесполезный мусор». Это вызывает цепную реакцию, убирая миллионы строк данных.\nСлияние клик (Clique merging) Далее, путем сложения отношений, разделяющих определенные простые числа, разреженная матрица сжимается и становится более плотной (используя метод, подобный поиску клик в теории графов).\nБлагодаря этой оптимизации, гигантская разреженная матрица радикально сжимается до вычислимых размеров.\n6. Фаза 4: Линейная алгебра над GF(2) (метод Блока Видемана) 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) { // Итеративное вычисление произведения разреженной матрицы и вектора, // поиск решений (ядер), где M * x = 0 mod 2. } }; Теперь мы подходим к сути головоломки. Мы объединяем собранные отношения для поиска ** «комбинаций, в которых степени всех простых множителей становятся четными» **.\nМатематически, используя гигантскую матрицу $M$, элементы которой представляют собой «четность или нечетность (т.е. 0 или 1)» степени каждого простого числа, и вектор $x$, показывающий, какие отношения используются, мы решаем уравнение (поиск нуль-пространства): $M \\cdot x \\equiv 0 \\pmod 2$\nНам нужно решить систему уравнений матрицы размером миллионы на миллионы строк и столбцов. При обычном методе Гаусса сложность составляет $O(N^3)$, и вычисления не закончатся до конца Вселенной.\nПоэтому современные реализации применяют ** «Метод Блока Видемана (Block Wiedemann)» **. Это вид метода подпространства Крылова, который находит решение путем итеративного умножения матрицы на вектор, эксплуатируя то, что матрица $M$ «очень разреженная (почти все 0)». В отличие от старого метода Block Lanczos, метод Block Wiedemann полностью разделяет вычислительный процесс на кластеры, демонстрируя огромную мощь в современных распределенных облачных вычислениях и на суперкомпьютерах.\n7. Фаза 5: Алгебраический квадратный корень (Algebraic Square Root) и крушение криптографии 1 2 3 4 5 6 7 8 9 10 11 12 13 class AlgebraicSquareRoot { public: void compute_and_factor(...) { // 1. Вычисление рационального квадратного корня V cpp_int V = 1; // 2. Вычисление алгебраического корня gamma cpp_int Y = 1; // ... cpp_int factor = gcd(V - Y, N); // GCD(X-Y, N) } }; Через вычисления матрицы на Фазе 4 мы получили набор отношений $S$, которые «при перемножении дают четные степени для всех простых множителей». Это позволяет нам создать «квадрат» в обоих мирах — рациональном и алгебраическом.\nПоскольку рациональная сторона — это просто умножение целых чисел, вычислить квадратный корень $V$ легко. $$V^2 = \\prod_{S} (a - bm)$$ Но настоящий ад ждет на «алгебраической стороне». В мире алгебраических полей $\\mathbb{Z}[\\alpha]$ уникальность факторизации на простые не сохраняется, поэтому мы вычисляли, используя идеалы. Расчеты матрицы гарантировали лишь ** «создание квадрата идеала», но не «гарантировали, что это квадрат элемента ($\\gamma^2$)» **.\nЗдесь возникают грозные барьеры алгебраической теории чисел — «препятствие группы классов идеалов» и «препятствие группы единиц». Чтобы преодолеть эту стену, GNFS использует магию ** «Квадратичных характеров (Quadratic Characters)» **. В матрицу Фазы 4 заранее добавляются несколько десятков специальных столбцов квадратичных вычетов (символов Лежандра) для особых простых идеалов. В результате найденный набор $S$ с ошеломляющей вероятностью обходит все препятствия и благополучно формирует «истинный квадрат элемента $\\gamma^2$».\nПроцесс нахождения $\\gamma$ (Алгебраический квадратный корень) выполняется с помощью невероятно сложного алгоритма, такого как метод Монтгомери.\nИ, наконец, алгебраический корень $\\gamma$ переносится в реальный мир с помощью гомоморфизма колец $\\phi$ (подстановка $m$ вместо $x$), образуя $Y$. Установив $V$ с рациональной стороны как $X$, мы получаем абсолютное уравнение, к которому стремились:\n$$X^2 \\equiv Y^2 \\pmod N$$\nОстается только вычислить $\\gcd(X-Y, N)$. За долю секунды 0,001 с нетривиальный множитель выводится на экран, и гордая, неприступная криптография RSA полностью рушится.\nЗаключение GNFS — это не просто метод программирования. Это шедевр человеческого интеллекта, который покорил «глубины чистой математики», такие как абстрактная алгебра, теория колец и группы классов идеалов, с помощью «экстремальной инженерии» — распределенной архитектуры суперкомпьютеров и кэш-оптимизации.\nНаши повседневные сообщения в чатах или данные кредитных карт защищены именно этими колоссальными математическими битвами.\nМы надеемся, что этот фреймворк на C++ позволил вам почувствовать «романтику математики и компьютеров», стоящую за передовыми алгоритмами криптоанализа.\n","date":"2026-09-05T13:04:59+09:00","image":"http://kenji.blog/p/gnfs-cpp-implementation/gnfs_cpp_blog_eyecatch_1788580949217_hu57b4110ce75cf76414fb819be22bae03_985705_120x120_fill_q75_box_smart1.jpg","permalink":"http://kenji.blog/ru/p/gnfs-cpp-implementation/","title":"\"Полная анатомия\" понимания сильнейшего алгоритма криптоанализа \"GNFS\" путем его реализации на C++"},{"content":"Истинная математическая структура общего метода решета числового поля (GNFS) Конечная цель GNFS — найти $X, Y$ такие, что $X^2 \\equiv Y^2 \\pmod N$. Для достижения этого математики построили мост между \u0026ldquo;миром реальных целых чисел\u0026rdquo; и \u0026ldquo;миром алгебраических полей\u0026rdquo;. Этим мостом является «гомоморфизм».\nЭтап 1: «Гомоморфизм» (Homomorphism), соединяющий миры 1. Выбор многочлена и определение корня Для гигантского составного числа $N$ мы выбираем некоторое целое число $m$ и многочлен $f(x)$ так, чтобы $f(m) \\equiv 0 \\pmod N$. (Пример: Разложите $N$ по основанию $m$ и постройте $f(x)$ из его коэффициентов. При этом предполагается, что $f(x)$ неприводим над полем рациональных чисел $\\mathbb{Q}$).\nДалее, пусть $\\alpha$ — один из «комплексных корней» уравнения $f(x) = 0$. Естественно, $f(\\alpha) = 0$. $\\alpha$ — это не целое число, а сложное число (алгебраическое число), которое может содержать корни или мнимые единицы.\n2. Построение кольца (Ring) и гомоморфизма Здесь мы подготавливаем два математических «кольца» (миры, где определены сложение и умножение):\nМир A: $\\mathbb{Z}[\\alpha]$ (Кольцо алгебраических целых чисел, содержащее $\\alpha$) Это мир чисел, выраженных в виде $a + b\\alpha + c\\alpha^2 + \\dots$. Мир B: $\\mathbb{Z}/N\\mathbb{Z}$ (Кольцо вычетов по модулю $N$) Мир сравнений (по модулю), состоящий только из целых чисел от $0$ до $N-1$. Здесь мы определяем отображение (mapping) $\\phi$ из Мира A в Мир B следующим образом: $$\\phi : \\mathbb{Z}[\\alpha] \\to \\mathbb{Z}/N\\mathbb{Z}$$ $$\\phi(\\alpha) = m \\pmod N$$\nЭто отображение $\\phi$ — магическая операция, которая полностью заменяет переменную $\\alpha$ в Мире A на целое число $m$ в Мире B. Это $\\phi$ обладает чрезвычайно мощным свойством, называемым \u0026ldquo;Гомоморфизм колец\u0026rdquo; (Ring Homomorphism). Гомоморфизм — это свойство \u0026ldquo;перехода в другой мир без разрушения структуры сложения и умножения\u0026rdquo;. То есть выполняются следующие уравнения:\n$\\phi(X \\times Y) = \\phi(X) \\times \\phi(Y)$ $\\phi(X^2) = \\phi(X)^2$ Что все это значит? Если мы сможем создать \u0026ldquo;полный квадрат\u0026rdquo; ($\\gamma^2$) из сложного элемента $\\gamma$ в \u0026ldquo;Мире A\u0026rdquo; (мире $\\alpha$), мы сможем прыгнуть в \u0026ldquo;Мир B\u0026rdquo; (мир остатков) с помощью $\\phi$, и форма квадрата $\\phi(\\gamma)^2$ будет идеально сохранена.\nЭтап 2: Крах разложения на простые множители и рождение «Идеала» (Ideal) Мы хотим собрать множество подходящих элементов $(a - b\\alpha)$ в Мире A ($\\mathbb{Z}[\\alpha]$) и перемножить их, чтобы получить «полный квадрат» (квадратичный элемент). Обычно мы могли бы разложить собранные $(a - b\\alpha)$ на «простые множители» и объединить их так, чтобы все показатели степеней простых чисел стали четными (решается с помощью матриц), создавая таким образом квадрат.\nОднако здесь на пути встает стена алгебраического отчаяния. В мире алгебраических полей, таких как $\\mathbb{Z}[\\alpha]$, \u0026ldquo;уникальность разложения на простые множители (каждое число может быть представлено как произведение простых чисел только одним способом)\u0026rdquo;, которую мы изучали в средней школе, полностью рушится.\n(Пример: В некоторых мирах алгебраических полей $6 = 2 \\times 3$, и в то же время $6 = (1+\\sqrt{-5}) \\times (1-\\sqrt{-5})$, что делает невозможным узнать, какие из них являются истинными простыми числами).\nЕсли разложение на простые множители не уникально, то головоломка \u0026ldquo;подсчета простых чисел до тех пор, пока их не станет четное количество\u0026rdquo; (метод решета) принципиально невыполнима.\nСпасение Куммера и Дедекинда: «Идеал» Этот крах был спасен концепцией \u0026ldquo;Идеала\u0026rdquo; (Ideal: Идеальное число), созданной математиками 19 века. Вместо того чтобы рассматривать сам элемент, рассматривая \u0026ldquo;множество кратных (идеал)\u0026rdquo;, порожденное этим элементом, разложение на простые множители снова стало возможным.\nВ кольце целых чисел алгебраического поля $\\mathcal{O}_K$ (более совершенном кольце, включающем $\\mathbb{Z}[\\alpha]$), даже если элементы не могут быть однозначно разложены на множители, доказано, что \u0026ldquo;Идеал всегда может быть однозначно разложен на простые множители как произведение \u0026lsquo;простых идеалов\u0026rsquo; ($\\mathfrak{p}$)\u0026rdquo;.\nПоэтому в GNFS вместо разложения самого элемента $(a - b\\alpha)$ мы выполняем разложение на простые идеалы главного идеала $\\langle a - b\\alpha \\rangle$, который он порождает.\nЭтап 3: Норма (Norm) и два решета (Sieve) Тогда как нам узнать, на какие простые идеалы распадается идеал $\\langle a - b\\alpha \\rangle$? Здесь мы используем функцию, называемую \u0026ldquo;Норма\u0026rdquo; (Norm). Норма — это функция, которая преобразует сложные элементы алгебраического поля в \u0026ldquo;обычные целые числа $\\mathbb{Z}$\u0026rdquo; реального мира.\nНорма элемента $(a - b\\alpha)$ вычисляется с помощью простого многочлена $b^d f(a/b)$ (где $d$ — степень $f(x)$).\nБлагодаря алгебраической теореме известно, что \u0026ldquo;если норма идеала может быть полностью разложена на небольшие простые числа (является гладкой), то исходный идеал также может быть полностью разложен на небольшие простые идеалы\u0026rdquo;.\nПоэтому GNFS одновременно вычисляет следующие две вещи для огромного количества пар целых чисел $(a, b)$ и собирает только те пары, где обе являются \u0026ldquo;гладкими числами\u0026rdquo;:\nРациональное решето (Rational Sieve): $a - bm$ (значение в реальном мире) Алгебраическое решето (Algebraic Sieve): $b^d f(a/b)$ (норма в мире алгебраического поля) Мы собираем десятки миллионов пар $(a, b)$, обе из которых гладкие, решаем данные о разложении идеалов на простые множители (сколько простых идеалов присутствует) в виде гигантской матрицы (линейная алгебра над GF(2)) и находим множество $S$ пар таких, что \u0026ldquo;при перемножении показатели всех простых идеалов становятся четными\u0026rdquo;.\nЭтап 4: Два «Препятствия» и группа классов идеалов С помощью матричных вычислений мы обнаружили, что умножение всех идеалов $(a - b\\alpha)$ во множестве $S$ дает квадрат некоторого идеала $I$. $$\\prod_{S} \\langle a - b\\alpha \\rangle = I^2$$ Но это еще не конец. Самая глубокая и трудная математическая стена в GNFS находится здесь.\nВ конечном итоге нам нужен не \u0026ldquo;квадрат идеала\u0026rdquo;, а \u0026ldquo;квадрат элемента\u0026rdquo; ($\\gamma^2$) для подстановки в отображение $\\phi$. Только потому, что идеал возведен в квадрат, не означает, что сам элемент возведен в квадрат. Здесь существуют два невероятно сильных математических препятствия (Obstructions).\nПрепятствие 1: Стена группы классов идеалов (Ideal Class Group) Идеал $I$ не всегда является \u0026ldquo;идеалом, порожденным одним элементом (главным идеалом)\u0026rdquo;. Невозможно извлечь конкретный элемент $\\gamma$ из идеала, который не является главным.\nЗдесь появляется концепция \u0026ldquo;Группы классов идеалов (Class Group, $Cl_K$)\u0026rdquo;. Группа классов идеалов — это группа, которая измеряет, \u0026ldquo;сколько неглавных идеалов существует в мире алгебраического поля (насколько разрушена уникальность разложения на простые множители)\u0026rdquo;. Даже если $\\prod \\langle a - b\\alpha \\rangle$ становится $I^2$, если $I$ не является единичным элементом (главным идеалом) в группе классов идеалов, мы не можем вернуть его к квадрату элемента.\nПрепятствие 2: Стена группы единиц (Unit Group) Допустим, нам повезло, и $I$ является главным идеалом $\\langle \\gamma \\rangle$. Тогда $\\prod \\langle a - b\\alpha \\rangle = \\langle \\gamma^2 \\rangle$. Вы можете подумать: \u0026ldquo;Отлично, элемент тоже в квадрате!\u0026rdquo;, но вы глубоко ошибаетесь.\nТот факт, что идеалы (множества кратных) равны, не означает, что элементы полностью равны. Всегда будет сдвиг на \u0026ldquo;Единицу\u0026rdquo; (Unit: число, обратное которому также является целым, например 1 или -1). Другими словами, фактическое равенство элементов выглядит следующим образом: $$\\prod_{S} (a - b\\alpha) = u \\cdot \\gamma^2$$ (где $u$ — элемент группы единиц $U_K$)\nЕсли только эта единица $u$ сама не является квадратом чего-либо (квадратичным элементом), левая часть никогда не сможет стать \u0026ldquo;идеальным квадратом элемента\u0026rdquo;.\nЭтап 5: Магия Адлемана «Квадратичные характеры» (Quadratic Characters) Препятствие группы классов идеалов и препятствие группы единиц. Как нам их преодолеть? Здесь появляется гениальный метод, называемый \u0026ldquo;Квадратичными характерами\u0026rdquo; (Quadratic Characters), введенный криптографом Леонардом Адлеманом (буква \u0026ldquo;A\u0026rdquo; в RSA) и его коллегами.\nЧтобы определить, \u0026ldquo;является ли элемент полным квадратом в алгебраическом поле\u0026rdquo;, мы используем версию символа Лежандра (квадратичного вычета) для алгебраических полей. В гигантскую матрицу (головоломку для того, чтобы сделать количество простых идеалов четным) мы тайно добавляем несколько десятков дополнительных условий (столбцов), утверждающих, что \u0026ldquo;квадратичные характеры для некоторых особых простых идеалов $\\mathfrak{q}$ также все становятся равными $1$ (четными)\u0026rdquo;.\nКогда мы находим множество $S$, удовлетворяющее этим дополнительным условиям с помощью матричных вычислений, глубокая теорема алгебраической теории чисел гарантирует, что \u0026ldquo;как препятствие группы классов идеалов, так и препятствие группы единиц исчезнут естественным образом с подавляющей вероятностью\u0026rdquo;.\nБлагодаря этому мы наконец получаем истинное уравнение: $$\\prod_{S} (a - b\\alpha) = \\gamma^2$$ Финальный этап: Слияние миров и взлом криптографии Наконец, все кусочки головоломки на месте.\n[Элемент в мире алгебраического поля (Мир A)] $\\gamma^2 = \\prod (a - b\\alpha)$ (Используйте алгоритм извлечения квадратного корня, чтобы найти $\\gamma$)\n[Элемент в реальном мире (мир рациональных чисел)] $V^2 = \\prod (a - bm)$ (Это просто обычное умножение целых чисел, поэтому квадратный корень $V$ можно найти легко)\nТеперь настало время для работы первого магического моста, который мы создали, гомоморфизма $\\phi$. Мы переносим элемент $\\gamma$ из Мира A в Мир B (мир остатков $N$) с помощью $\\phi$ (отображения, которое подставляет $m$ вместо $\\alpha$). $$Y = \\phi(\\gamma) \\pmod N$$ С другой стороны, мы берем $V$, созданный в реальном мире, прямо в мир остатков и называем его $X$. $$X = V \\pmod N$$ Благодаря свойству гомоморфизма \u0026ldquo;сохранять структуру\u0026rdquo;, квадратичное отношение, которое было истинным в Мире A, идеально сохраняется в Мире B (мире по модулю $N$). Более того, поскольку исходные пары $(a, b)$ были сформированы так, чтобы соответствовать как $a - b\\alpha$ и $a - bm$, эти $X$ и $Y$ сталкиваются в мире по модулю $N$ и порождают следующее абсолютное уравнение:\n$$X^2 \\equiv Y^2 \\pmod N$$\nТеперь остается только молиться, чтобы $X$ и $Y$ не были тривиальными решениями ($X \\equiv \\pm Y$), а затем мы вычисляем: $\\gcd(X - Y, N)$\nЕсли это нетривиальное решение, алгоритм Евклида пронесется за 0,001 секунды, и секретные простые числа $p$ и $q$, которые являются сердцем криптографии RSA, будут выведены на экран.\nЭто и есть полная картина \u0026ldquo;Общего метода решета числового поля (GNFS)\u0026rdquo;, который объединяет в себе суть современной математики.\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/ru/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":"Истинная математическая структура общего метода решета числового поля (GNFS)"},{"content":"Что такое Общий метод решета числового поля (GNFS) — сильнейшая математика человечества, взламывающая криптографию интернета? Интернет, которым мы пользуемся каждый день. Все наши коммуникации, будь то сообщения в LINE, видео на YouTube или покупки на Amazon, защищены «криптографией». В настоящее время самым распространенным алгоритмом шифрования в мире является «шифр RSA».\nСуть защиты RSA очень проста. Она использует математическое свойство, заключающееся в том, что «даже компьютеры не могут решить задачу факторизации гигантских чисел на простые множители» . Например, для числа «15» сразу понятно, что это «3 × 5». Но как только число становится «270-значным», даже если объединить все суперкомпьютеры мира, на его решение уйдут сотни миллионов лет.\nОднако математики тоже не сидят сложа руки. Чтобы взломать этот неприступный шифр, человечество создало магический алгоритм (вычислительную процедуру) под названием «Общий метод решета числового поля (GNFS — General Number Field Sieve)» .\nВ этой статье мы не будем использовать сложные технические термины, а опираясь только на знания математики средней школы (разложение на простые множители, алгебраические выражения, наибольший общий делитель) , полностью шаг за шагом объясним, как этот «сильнейший алгоритм человечества» взламывает шифры!\nГлава 1: Цель взлома — «формула из средней школы» Главный прием против факторизации гигантских чисел. Это формула, которую изучают в средних классах.\n$X^2 - Y^2 = (X + Y)(X - Y)$\nВы можете подумать: «Э-э, неужели такая базовая формула может взломать шифр?». Однако это и есть тот самый главный ключ, который все открывает.\nГлавная цель при взломе шифра — найти для огромного числа $N$ «такие числа ($X$ и $Y$), что остатки от деления $X^2$ и $Y^2$ на $N$ будут одинаковыми» .\nПочему «одинаковые остатки» могут взломать шифр? Предположим, у двух чисел $X^2$ и $Y^2$ «остатки от деления на $N$ одинаковые». Одинаковые остатки означают, что при вычитании «$X^2 - Y^2$» результат обязательно будет без остатка делиться на $N$ (станет кратным $N$) .\nЗдесь давайте представим, что огромное число $N$, используемое в шифре, образовано умножением двух секретных простых чисел ($p$ и $q$) ($N = p \\times q$).\nЕсли разложить на множители $X^2 - Y^2$, то получится $(X - Y)(X + Y)$ . То, что это число кратно $N$, означает, что где-то в этом умножении спрятаны секретные простые числа $p$ и $q$.\nИ тут происходит чудо. Математическая вероятность того, что два простых числа $p$ и $q$ разойдутся по разным «комнатам» — «$p$ в комнату $(X - Y)$», а «$q$ в комнату $(X + Y)$» — составляет ровно 50% (одна вторая) .\nПредположим, что только простое число $p$ попало в комнату $(X - Y)$. Давайте вычислим «наибольший общий делитель (самый большой общий компонент)» между $(X - Y)$ и $N$.\nСодержимое $(X - Y)$ = $p \\times$ какое-то число Содержимое $N$ = $p \\times q$ Единственный общий компонент здесь — это «$p$» ! Другими словами, в момент вычисления наибольшего общего делителя скрытое простое число $p$ внезапно выпадает, и шифр оказывается полностью взломанным. (Наибольший общий делитель можно моментально вычислить даже на смартфоне с помощью «Алгоритма Евклида»)\n[Мини-колонка: Почему именно квадрат? Разве куб или удвоение не подойдут?]\nЕсли взять «$2X - 2Y$», это превратится в $2(X - Y)$, и останется только одна комната, так что простые числа разделить не получится. Если взять «$X^3 - Y^3$», размеры комнат станут несбалансированными, и вычисления станут неоправданно тяжелыми. Для идеального разделения двух простых чисел «квадрат», образующий две красивые комнаты, является самым оптимальным вариантом.\nГлава 2: Как найти X и Y? «Головоломка по сбору карточек с простыми числами» Цель ясна. Однако, если пытаться искать «$X^2$ и $Y^2$ с одинаковыми остатками» наугад, мы не найдем их до самого конца существования Вселенной. Поэтому математики придумали гениальный метод под названием «Головоломка по сбору карточек с простыми числами» .\nШаг 1: Просеивание только золотого песка (гладких чисел) Сначала мы берем произвольное число $Z$, возводим его в квадрат и вычисляем остаток $W$ от деления на $N$. (Мир остатков: $Z^2 = W$)\nПолученный остаток $W$ мы раскладываем на простые множители. Здесь, только когда получается «$W$, состоящее исключительно из маленьких простых чисел, таких как 2, 3, 5, 7» , мы оставляем эту формулу как «выигрышную карточку». Если примешивается большое простое число — мы ее выбрасываем. Это похоже на работу с ситом (решетом) в реке: мы отбрасываем большие камни и собираем только золотой песок.\nШаг 2: Головоломка с приведением к «четному числу» Предположим, мы собрали 3 таких карточки с золотым песком:\nКарточка A: $Z_1^2 = 2^3 \\times 3^1$ Карточка B: $Z_2^2 = 2^1 \\times 5^1$ Карточка C: $Z_3^2 = 3^1 \\times 5^1$ Давайте перемножим их все. Правая сторона станет $(2^3 \\times 3^1) \\times (2^1 \\times 5^1) \\times (3^1 \\times 5^1)$, а после упрощения получится «$2^4 \\times 3^2 \\times 5^2$» .\nПоразительно, но количество простых чисел стало «4, 2, 2» — все они стали четными ! То, что все они стали четными, означает, что если поделить их количество пополам, мы получим «квадрат чего-либо». А именно: $(2^2 \\times 3^1 \\times 5^1)^2 = (60)^2$.\nПоскольку левая сторона равна $(Z_1 \\times Z_2 \\times Z_3)^2$, мы, наконец, получаем: $X = (Z_1 \\times Z_2 \\times Z_3)$ $Y = 60$ Долгожданная пара «$X^2 = Y^2$» завершена!\nДля компьютеров головоломки с подсчетом того, «четное число или нечетное (0 или 1)», даются очень легко, поэтому с помощью этого метода можно очень быстро найти $X$ и $Y$.\nГлава 3: Стена отчаяния на пути Казалось бы, теперь любой шифр можно взломать! \u0026hellip;Но тут возникает огромная проблема. Если число шифра $N$ имеет длину до «100 цифр», этот метод (называемый методом квадратичного решета) справляется. Но когда $N$ становится «200-значным или 300-значным», промежуточное значение $W$ становится слишком гигантским.\nКогда числа становятся слишком огромными, «числа, состоящие только из маленьких простых чисел (золотой песок)», перестают появляться вообще. Найти их становится сложнее, чем контактную линзу в пустыне, и собрать карточки для решения головоломки становится абсолютно невозможно.\nИ вот здесь наконец появляется совершенное оружие человечества — «Общий метод решета числового поля (GNFS)» .\nГлава 4: Гениальная идея человечества — создание «двух миров» Гениальность идеи GNFS заключается в следующем: «Раз числа становятся огромными потому, что мы считаем только в реальном мире, давайте создадим \u0026ldquo;параллельный мир\u0026rdquo; с помощью полиномов (алгебраических выражений) и разделим вычислительную нагрузку на две части» .\nМагия алгебраических выражений GNFS преобразует огромное число $N$ в алгебраическое выражение, используя базовое число $m$. Например, если $N=100$, мы выбираем $m=4$, тогда $100 = 4^3 + 2(4^2) + 4$. Используя переменную $x$, мы превращаем это в выражение (параллельный мир): $f(x) = x^3 + 2x^2 + x$ .\nСамое интересное в этом выражении — его свойство: «Если подставить вместо $x$ число $m$ (в данном примере 4), то можно в любой момент \u0026ldquo;телепортироваться\u0026rdquo; обратно к реальному числу $N$» .\nПоиск золотого песка одновременно в двух мирах GNFS генерирует множество произвольных пар целых чисел $(a, b)$ и одновременно выполняет два вычисления:\nРеальный мир: $a - b \\times m$ Алгебраический мир: значение $a - b \\times x$, вычисленное по правилам алгебраических выражений Благодаря разделению задачи на два мира, размер используемых чисел радикально уменьшается (становится «легче»). Представьте себе, что гигантский валун разбили на два удобных камня.\nЗатем с помощью сита (решета) отсеиваются и собираются только те чудесные пары $(a, b)$, в которых «и в реальном мире, и в алгебраическом мире результаты состоят только из маленьких простых чисел (являются золотым песком)» . Отсюда и происходит название «метод решета числового поля».\nМомент взлома шифра Когда из обоих миров собираются десятки миллионов «карточек с золотым песком», с помощью матричных вычислений на суперкомпьютерах находится «комбинация, при которой количество простых чисел становится полностью четным», точно так же, как во 2-й главе.\nКогда комбинация найдена:\nЧисло в квадрате, полученное в реальном мире, обозначается как $X^2$ Выражение в квадрате, полученное в алгебраическом мире, обозначается как $Y(x)^2$ И наконец, мы подставляем $m$ вместо $x$ в $Y(x)$ алгебраического мира, телепортируя его и объединяя с реальным миром. И тут, как по математическому волшебству, строго выполняется условие «остатки $X^2$ и $Y^2$ одинаковы» !\nДальше, как было описано в 1-й главе, достаточно вычислить наибольший общий делитель $X - Y$ и $N$, и неприступный шифр RSA с грохотом рассыпается, открывая секретные простые числа.\nЗаключение: Математика не заканчивается Возможно, вы подумали: «Отлично, с помощью GNFS можно взломать любой шифр!». Однако шифр RSA не сдается. В современном интернете используется чудовищно огромное число под названием «RSA-2048 (около 617 цифр)».\nКаким бы сильным алгоритмом ни был GNFS, считается, что даже для взлома 270-значного числа (RSA-270) потребовались бы тысячи, а то и десятки тысяч лет, даже если бы объединили все компьютеры мира. На данный момент наши данные в LINE и банках в безопасности.\nНо что, если появится «магия, способная мгновенно находить $X$ и $Y$ для любого сколь угодно гигантского числа» ? На самом деле, самое близкое к этому — разрабатываемые сейчас «квантовые компьютеры (Алгоритм Шора)» . Математически доказано, что, используя волновую природу квантовой механики, можно проигнорировать утомительную головоломку со сбором карточек и вытянуть правильный ответ за один раз.\nБесконечная битва умов между создателями шифров (защитой) и создателями алгоритмов взлома (атакой). Когда узнаешь, что «разложение на простые множители» и «алгебраические выражения», которые изучают в средней школе, на самом деле являются оружием, ожесточенно сражающимся на переднем крае глобальной безопасности, разве уроки математики не начинают казаться чуточку интереснее?\nВозможно, именно вы, читающий эту статью, в будущем откроете новый сильнейший алгоритм!\n(※Эта статья концептуализирует математическую привлекательность взлома шифров для школьников. Настоящий GNFS рассчитывается строго с использованием высшей университетской математики, такой как идеальные группы классов алгебраических числовых полей и гомоморфизмы)\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/ru/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":"Что такое Общий метод решета числового поля (GNFS) — сильнейшая математика человечества, взламывающая криптографию интернета?"},{"content":"Плюсы и минусы антипрививочного движения: Будущее 5000 человек, убитых «тревогой из лучших побуждений», и уроки эпидемиологии, которые мы должны усвоить «Иллюзия причинно-следственной связи», высвеченная пандемией коронавируса С 2021 года в Японии быстрыми темпами проводилась вакцинация от коронавируса. Это был редкий в истории человечества проект в области общественного здравоохранения, в рамках которого почти 80% населения были вакцинированы за короткий период. В ходе этого процесса мы стали свидетелями бесчисленных «криков» в социальных сетях и СМИ: «Член семьи умер через несколько дней после вакцинации», «После вакцинации продолжаются необъяснимые проблемы со здоровьем». Эти жалобы были душераздирающими, и для тех, кто с ними столкнулся, эти страдания были неоспоримой истиной.\nОднако здесь кроется хладнокровная, но чрезвычайно важная «ловушка» эпидемиологии. Учитывая численность населения Японии, независимо от того, делают ли они прививки или нет, от 3000 до 4000 человек умирают каждый день от различных причин (болезни, несчастные случаи, старость). Если большая часть населения пройдет вакцинацию одновременно, по законам вероятности «определенное количество людей умрет на следующий день после вакцинации (по причинам, не связанным с вакциной)». В специальной терминологии это называется «Совпадением» (Coincidence) .\nЛюди наделены когнитивным искажением, называемым «ошибка после этого — значит вследствие этого» (post hoc ergo propter hoc). Если «B (смерть) происходит после A (вакцинации)», мы интуитивно делаем вывод, что «A является причиной B». Во время пандемии это когнитивное искажение было усилено социальными сетями, создав слой общества, в котором образ «вакцина = опасность» укоренился еще до научной проверки.\nМногие эксперты в области общественного здравоохранения наблюдали за этой картиной с чувством дежавю. Потому что всего несколько лет назад Япония была единственной развитой страной, которая добровольно отказалась от средств предотвращения предотвратимых заболеваний из-за этой «тревоги без науки». Это проблема «Вакцины против рака шейки матки (Вакцины против ВПЧ)» .\nЧто произошло в Японии в 2013 году? Давайте немного отмотаем время назад. Рак шейки матки поражает около 11 000 женщин ежегодно, унося около 2900 жизней. Его часто называют «убийцей матерей», поскольку он поражает женщин в возрасте от 20 до 40 лет, на пике их воспитания детей и карьеры. Причиной является заражение вирусом папилломы человека (ВПЧ), распространенным вирусом, которым хотя бы раз в жизни заражаются 80% женщин, ведущих половую жизнь. Вакцина против ВПЧ, предотвращающая заражение этим вирусом, внедрялась по всему миру как «прорывная вакцина, способная предотвратить рак», а в Японии она стала обязательной (настоятельно рекомендованной правительством и доступной бесплатно) в апреле 2013 года.\nОднако вскоре ситуация резко ухудшилась. Некоторые из вакцинированных девочек сообщали о таких симптомах, как боль во всем теле, двигательные расстройства и проблемы с памятью. СМИ ежедневно широко освещали это как «подозрения на побочные эффекты вакцины». Кадры с бьющимися в конвульсиях девочками оказали сильное влияние на зрителей, и общественное мнение быстро склонилось к теории «вакцина опасна».\nВ ответ Министерство здравоохранения, труда и социального обеспечения в июне 2013 года, всего через два месяца после начала плановой вакцинации, решило «приостановить активные рекомендации». Это не было «запретом» или «отменой», а крайне двусмысленным политическим решением «сохранить рамки плановой вакцинации, но прекратить рассылку индивидуальных уведомлений от правительства». Однако до населения это дошло как сообщение о том, что «правительство признало вакцину опасной и остановило её». В результате уровень вакцинации, составлявший более 70%, в мгновение ока упал ниже 1%.\nС этого начались «8 потерянных лет» (Vaccine Gap) в Японии.\n«Правда», раскрытая Нагойским исследованием Действительно ли симптомы, о которых сообщали СМИ, были вызваны вакциной? Существует масштабный опрос, который попытался ответить на этот вопрос с научной точки зрения. Он известен как «Нагойское исследование» (Nagoya Study) .\nВ 2015 году город Нагоя провел масштабное анкетирование около 70 000 молодых женщин. Опрос включал как «вакцинированных», так и «невакцинированных», и спрашивал о наличии или отсутствии 24 симптомов, таких как «нерегулярные менструации», «боль в суставах» и «снижение концентрации». Если причиной была вакцина, эти симптомы должны были значительно чаще встречаться в группе «вакцинированных».\nРезультаты были шокирующими. Между «группой вакцинированных» и «группой невакцинированных» не было выявлено значимой разницы в частоте возникновения симптомов.\nЧто это значит? Девочки-подростки, независимо от того, привиты они или нет, подвержены проблемам со здоровьем, таким как ортостатические нарушения регуляции и хронические боли из-за гормональных изменений и особых обстоятельств периода полового созревания. Другими словами, была доля «девочек, которые не были вакцинированы, но имели те же симптомы», примерно равная числу «девочек, у которых появились симптомы после вакцинации», о которых сообщали СМИ. Однако проблемы со здоровьем у невакцинированных детей рассматривались как «расстройства пубертатного периода», в то время как недомогания только у вакцинированных детей преподносились как «ущерб от вакцины». Данные показали, что это, скорее всего, и есть истинная природа феномена, вокруг которого подняли шум как о «медицинской катастрофе».\nКроме того, было отмечено участие «эффекта ноцебо» (Nocebo effect). В отличие от эффекта «плацебо», это явление, при котором боль или недомогание действительно возникают из-за беспокойства и страха, когда вы принимаете что-то, веря, что «это вредно для организма». Нельзя отрицать, что шквал негативных репортажей мог повлиять на хрупкие умы и тела девочек.\n«Грех бездействия» в цифрах «Прекратить рекомендации на всякий случай». На первый взгляд, это решение кажется «осторожным и безопасным выбором». Раз будет поздно, когда что-то уже случится, сомнительное следует остановить. Однако в сфере общественного здравоохранения «ничего не делать» (бездействие) иногда приносит ущерб, намного превышающий риск «что-то сделать».\nИсследовательская группа Осакского университета опубликовала жестокие оценки последствий этого решения. Из-за резкого снижения уровня вакцинации с 2013 по 2019 год, количество больных раком шейки матки в будущем, которое можно было бы предотвратить, увеличится примерно на 25 000 человек, а количество смертей — на 5 000–5 700 человек.\nБолее 5000 смертей. Это цифра, сопоставимая с крупномасштабным стихийным бедствием. Пытаясь избежать риска, причинно-следственная связь которого научно не установлена — «беспокойство по поводу побочных эффектов» — мы возложили определенный и серьезный риск «смерти от рака» на будущих женщин.\nЕсли мы посмотрим на мир, разница очевидна. В Австралии, благодаря распространению вакцинации среди мужчин и женщин, прогнозируется, что рак шейки матки будет «искоренен» (станет редким видом рака) примерно к 2028 году. Из Великобритании также поступают сообщения о том, что заболеваемость раком шейки матки среди вакцинированного поколения упала почти до нуля. В то время как мир движется к будущему «победы над раком», только Япония осталась в прошлом, где «количество рака продолжает расти». В 2015 году Глобальный консультативный комитет ВОЗ по безопасности вакцин специально раскритиковал ситуацию в Японии, заявив: «Политические решения, не основанные на научных доказательствах, приводят к реальному вреду (смертям от рака)».\nЦепь «Недоверия к вакцинам» за океаном Трагедия с вакциной против ВПЧ, произошедшая в Японии, отнюдь не является «исключительной японской ситуацией». Даже сейчас в мире сообщается о случаях, показывающих, что когда «интуитивная тревога» или «идеология» ставятся выше науки, инфекционные заболевания могут обнажить свои клыки в любое время и в любом месте.\nЯрким примером этого является эпидемия «Кори» в США.\nКорь — высококонтагиозный вирус, но заболевание почти полностью предотвращается с помощью вакцины. В США благодаря тщательной программе вакцинации в 2000 году было объявлено о ее «искоренении» (elimination). То есть считалось, что эндемичный вирус исчез из страны. Однако в последние годы корь снова начала распространяться.\nСогласно сообщениям BBC (2024), органы здравоохранения США отмечают, что глубоко укоренившееся в некоторых сообществах «недоверие к вакцинам» (Vaccine Hesitancy) становится рассадником инфекции. Уровень вакцинации снизился в районах, где распространены религиозные соображения, группы, пропагандирующие «естественный» образ жизни, или идеология антипрививочников, основанная на дезинформации. Когда вирус завозится из-за границы в эти районы, среди людей, не имеющих иммунитета, происходят взрывные вспышки.\nКорь — это не просто болезнь, заканчивающаяся лихорадкой или сыпью. Она может вызывать тяжелые осложнения, такие как пневмония или энцефалит, и даже в развитых странах может привести к летальному исходу. Болезнь, которую человечество, объединив усилия, однажды «сдержало», снова угрожает жизням детей, пользуясь «подозрительностью» людей. Случай в США предупреждает нас: «Волнорез в виде высокого уровня вакцинации может рухнуть в одно мгновение, если доверие людей пошатнется».\nПоражение СМИ, экспертов и всех нас Почему такие ситуации повторяются? Причиной является асимметрия информации, присущая современному обществу, и наши когнитивные искажения.\nВ вопросе вакцины против ВПЧ в Японии СМИ сенсационно освещали «подозрения на побочные эффекты». Конструкция «бедные жертвы» против «хладнокровного государства и фармацевтических компаний» была очень мощной и сильно играла на эмоциях зрителей. С другой стороны, научные объяснения экспертов, такие как «статистически значимой разницы нет» или «польза превышает риск», звучали сухо и холодно и были бессильны перед потоком эмоций.\nВ мире науки, если есть устоявшаяся теория, поддерживаемая 99% ученых, и 1% несогласных, это не рассматривается как «равноценные мнения». Однако СМИ, придавая слишком большое значение «справедливости» или чтобы привлечь внимание, представляли данные, спасающие десятки тысяч жизней, и эмоциональные жалобы одного пострадавшего как «равноценные». Политики также, опасаясь негативной реакции общественности, предпочли «чтение атмосферы» научным доказательствам. В результате активные рекомендации вакцины против ВПЧ в Японии были приостановлены примерно на 9 лет, что привело к множеству предотвратимых случаев рака.\nИстория повторяется: Нужен разум, чтобы противостоять «атмосфере» В 2022 году в Японии, наконец, возобновились активные рекомендации по вакцине против ВПЧ. Однако потерянное время и жизни не вернуть. И, как показывает нынешняя эпидемия кори в США, если мы расслабимся, история будет повторяться снова и снова.\nМы не можем полностью отрицать движение антипрививочников или само беспокойство по поводу медицины. Осторожность в отношении того, что попадает в организм, является защитным инстинктом человека, и в прошлом действительно происходили катастрофы с лекарствами. Контроль и сомнение в авторитетах важны при демократии.\nОднако череда событий, связанных с вакцинами от COVID-19, ВПЧ и эпидемией кори в США, сталкивает нас с жестоким фактом: «тревога из лучших побуждений, игнорирующая науку», может унести больше жизней, чем сам вирус.\n«Это может быть опасно, давайте подождем и посмотрим». Принимая это решение, принимаем ли мы в расчет «вероятность умереть от болезни, пока мы ждем»? «Натуральное — лучше всего». Говоря это, не забыли ли мы историю о том, что «именно вирусы в природе наиболее безжалостно уносили жизни»?\nВ будущем появятся новые инфекционные заболевания и будут разработаны новые вакцины. Будем ли мы снова обмануты явлением «совпадения» и поддадимся эмоциональной агитации? Или мы сможем спокойно проанализировать данные и взвесить риски и выгоды?\nГоворят, история повторяется. Но единственное, что может ее остановить, — это наш разум. Глядя на статистически верные данные, мы должны обладать интеллектом, чтобы выбирать «факты», а не «атмосферу». Это наша ответственность как живущих в современную эпоху.\nЛитература и источники данных Министерство здравоохранения, труда и социального обеспечения (MHLW) : «Папилломавирусная инфекция человека — рак шейки матки и вакцина против ВПЧ» Национальный онкологический центр Японии (NCC) : Информационная служба по онкологии, статистические данные «Рак шейки матки» BBC News (Япония) : «ЦКЗ США призывает к вакцинации на фоне вспышки кори — рост числа заражений в мире» (2024) и связанные оригинальные статьи Исследовательская группа Осакского университета (Yagi A, et al. Lancet Public Health. 2020) : Исследование, оценивающее избыточную заболеваемость и смертность из-за приостановки активных рекомендаций по плановой вакцинации против ВПЧ 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/ru/p/anti-vaccine-pros-cons-ru/","title":"Плюсы и минусы антипрививочников"},{"content":"Миф и реальность \u0026ldquo;Японцы прежде всего\u0026rdquo;: защита Японии во имя \u0026ldquo;сосуществования\u0026rdquo; в 2026 году Введение: Почему эти слова трогают сердца именно сейчас 2026 год. Сегодня мы стоим на беспрецедентном поворотном этапе эпохи. Затяжная инфляция, стагнация реальных доходов, а также стремительное старение и сокращение населения. Каждый раз, когда переписываются ценники на полках супермаркетов, тревога о будущем бросает тень на наши сердца.\nНа фоне этого чувства безысходности стремительно набирает популярность одна фраза. Это \u0026ldquo;Японцы прежде всего\u0026rdquo; (Japan First).\nЖелание \u0026ldquo;сначала обогатить жизнь собственных граждан\u0026rdquo; и \u0026ldquo;защитить японскую культуру и общественную безопасность в качестве главного приоритета\u0026rdquo; является абсолютно естественной и насущной потребностью любого суверенного гражданина и человека, живущего в этой стране. Однако между \u0026ldquo;идеалами\u0026rdquo;, провозглашаемыми этой фразой, и \u0026ldquo;реальностью\u0026rdquo;, которую демонстрируют статистические данные, существует огромный разрыв, с которым нам предстоит столкнуться лицом к лицу.\nВ этой статье мы отбросим эмоции и навешивание ярлыков и раскроем истинную суть этой проблемы, основываясь на объективных данных, хронологических изменениях и фактах с различных передовых рубежей общества.\nГлава 1: Хронология \u0026ldquo;Японцы прежде всего\u0026rdquo; и социальный фон Эта фраза не появилась внезапно. Она сформировалась в результате сложного переплетения глобальных тенденций и уникальных обстоятельств Японии.\n1. 2016–2017 годы: Импорт и закрепление термина В 2016 году лозунг \u0026ldquo;Америка прежде всего\u0026rdquo;, выдвинутый Дональдом Трампом, потряс весь мир. Внутри страны в 2017 году внимание привлекла партия \u0026ldquo;Томин фаст но кай\u0026rdquo; (Жители Токио прежде всего), возглавляемая губернатором Токио Юрико Коикэ. На тот момент это была скорее риторика для уточнения политических приоритетов, и ксенофобский оттенок был ограниченным.\n2. 2023–2024 годы: Визуализация тревоги Замедление восстановления экономики после пандемии и инфляция, сопровождавшаяся резким падением курса иены, сильно ударили по обычным семьям. Примерно в это же время в социальных сетях начали вспыхивать недовольства, основанные на фрагментарной информации, такие как \u0026ldquo;Слишком щедрая поддержка иностранцев\u0026rdquo; и \u0026ldquo;Налоговые деньги японцев уходят к иностранцам\u0026rdquo;.\n3. 2025–2026 годы: Слияние политических сил и социальных сетей На национальных выборах 2025 года политические силы, сделавшие \u0026ldquo;Японцы прежде всего\u0026rdquo; своим официальным лозунгом, получили определенное количество мест в парламенте. Алгоритмы социальных сетей, реагируя на тревогу людей, стали отдавать приоритет радикальным публикациям, что ускорило \u0026ldquo;эффект эхо-камеры\u0026rdquo;, при котором усиливаются только определенные ценности.\nПоследние опросы общественного мнения, проведенные различными газетами (в конце 2025 года), выявили ситуацию, при которой общественное мнение разделилось ровно пополам: 42% ответили \u0026ldquo;согласен или скорее согласен\u0026rdquo; , а 38% — \u0026ldquo;не согласен или скорее не согласен\u0026rdquo; с этим лозунгом.\nГлава 2: Правда об экономике и социальном обеспечении —— \u0026ldquo;Расхитители\u0026rdquo; или \u0026ldquo;Опора\u0026rdquo;? Одним из столпов логики сторонников \u0026ldquo;Японцы прежде всего\u0026rdquo; является представление о том, что \u0026ldquo;ресурсы японцев отбираются иностранцами\u0026rdquo;. Однако первичные данные правительственных министерств показывают реальность, прямо противоположную этому интуитивному восприятию.\n1. Рабочая сила: \u0026ldquo;Жизненно важная кровь\u0026rdquo;, поддерживающая экономику Японии По данным отчета Министерства здравоохранения, труда и благосостояния \u0026ldquo;О ситуации с трудоустройством иностранцев (на конец октября 2024 года)\u0026rdquo;, число иностранных работников составило 2 048 675 человек . По текущим оценкам 2026 года, это число уже превысило 2,3 миллиона человек .\nОтрасль Доля и темп роста иностранных работников Реальность и их роль Строительство Рост примерно на 22,7% в годовом исчислении Жизненно важны для поддержания инфраструктуры и ремонта стареющих мостов и дорог. Здравоохранение и соцобеспечение Рост примерно на 28,1% в годовом исчислении Работают на передовой линии ухода, поддерживая японских пенсионеров. Производство Составляют около 26% от общего числа Костяк, поддерживающий экспортную промышленность Японии. В настоящее время они занимают не те рабочие места, на которых хотели бы работать японцы, а заполняют \u0026ldquo;пустоты, которые японцы больше не могут заполнить\u0026rdquo; . Если мы исключим их во имя \u0026ldquo;Японцы прежде всего\u0026rdquo;, наша система ухода за пожилыми людьми немедленно рухнет, а цены на жилье и продукты питания взлетят на десятки процентов или даже в несколько раз.\n2. Социальное обеспечение: Мифы и реальность о пособиях по безработице В социальных сетях наиболее активно распространяется миф о том, что \u0026ldquo;иностранцы получают пособия по безработице в приоритетном порядке\u0026rdquo;. Однако, если мы посмотрим на статистику Министерства здравоохранения, труда и благосостояния, доля домохозяйств, в которых главой является иностранец, от общего числа получающих пособия составляет всего около 2,8–2,9% . На протяжении последних более чем десяти лет этот показатель практически не менялся.\nНапротив, если взглянуть на возрастной состав иностранных резидентов, большинство из них — это работоспособное поколение от 20 до 40 лет . Они выплачивают пенсионные взносы и взносы на медицинское страхование, играя роль \u0026ldquo;доноров\u0026rdquo;, поддерживающих пенсии и медицинские расходы, которые получают \u0026ldquo;пожилые японцы\u0026rdquo; . Именно они, и никто другой, заполняют пустоту работоспособного населения, оставленную японцами, и продлевают жизнь системе социального обеспечения Японии.\nГлава 3: Предубеждения о преступности и социальных сетях —— Логическая деконструкция \u0026ldquo;преступности иностранцев\u0026rdquo; Тревога за общественную безопасность сильнее всего разжигает настроения \u0026ldquo;Японцы прежде всего\u0026rdquo;. Однако, при детальном изучении статистики Национального полицейского агентства и \u0026ldquo;Белой книги о преступности\u0026rdquo; Министерства юстиции становится ясно, насколько образ \u0026ldquo;жестокого иностранца\u0026rdquo; в интернете создан когнитивными искажениями.\n1. Трезвое сравнение \u0026ldquo;Общего числа\u0026rdquo; и \u0026ldquo;Уровня преступности\u0026rdquo; Согласно статистике, опубликованной в 2024 году, доля иностранцев среди всех арестованных составляет около 5,5% . Остальные 95% — это преступления, совершенные японцами.\nСравнение числа арестованных на 100 000 человек населения (уровень преступности) еще больше раскрывает суть.\nКатегория Число арестованных на 100 000 человек (оценка) Японцы (все возрасты) Около 142,7 человек Иностранные резиденты (постоянные/долгосрочные) Около 120,0 человек Статистический факт заключается в том, что уровень преступности среди иностранцев, проживающих в Японии в среднесрочной и долгосрочной перспективе, ниже, чем в среднем по всем японцам .\n2. Магия \u0026ldquo;возрастного\u0026rdquo; смещения Почему же доминирует представление о том, что \u0026ldquo;иностранцы — это страшно\u0026rdquo;? Главная причина заключается в разнице \u0026ldquo;возрастного состава\u0026rdquo; в криминологии.\nЯпонцы: Около 30% составляют пожилые люди с крайне низким уровнем преступности. Поскольку эта группа занижает \u0026ldquo;знаменатель\u0026rdquo;, общие показатели для Японии кажутся низкими. Иностранцы: Поскольку они приезжают в Японию в качестве рабочей силы, более 80% из них относятся к \u0026ldquo;молодому и среднему возрасту\u0026rdquo; — группам, которые статистически более склонны к совершению преступлений . Если мы сравним уровень преступности японцев и иностранцев при одном и том же условии \u0026ldquo;в возрасте 20 лет\u0026rdquo;, мы не увидим существенной разницы между ними. Иными словами, дело не в том, что \u0026ldquo;уровень безопасности ухудшился из-за увеличения числа иностранцев\u0026rdquo;, а просто в том, что \u0026ldquo;возрастная группа, склонная к преступлениям (молодежь), представлена в Японии в виде иностранцев\u0026rdquo; .\n3. \u0026ldquo;Предвзятость подтверждения\u0026rdquo;, создаваемая социальными сетями Алгоритмы социальных сетей используют нашу \u0026ldquo;тревогу\u0026rdquo; в качестве топлива. Когда происходит одно преступление, совершенное иностранцем, оно связывается с его \u0026ldquo;атрибутом (национальностью)\u0026rdquo; и агрессивно распространяется. В результате в нашем мозге усиливается лишь воспоминание о том, что \u0026ldquo;снова иностранец совершил инцидент\u0026rdquo;.\nЭто называется \u0026ldquo;Предвзятость подтверждения\u0026rdquo; . Преступления, совершаемые японцами и составляющие 95% от общего числа, игнорируются как \u0026ldquo;повседневность\u0026rdquo;, а 5% преступлений иностранцев подменяют собой образ \u0026ldquo;всех иностранцев\u0026rdquo;.\nГлава 4: Наследие культуры —— \u0026ldquo;Разрушители\u0026rdquo; или \u0026ldquo;Спасители\u0026rdquo;? Опасения по поводу того, что \u0026ldquo;японские традиции и культура разрушаются\u0026rdquo;, также расходятся с реальностью на местах.\n1. \u0026ldquo;Последние наследники\u0026rdquo; традиционных ремесел Число работников, занятых в производстве традиционных японских ремесел, резко сократилось с примерно 300 000 в 1970-х годах до всего около 50 000 сегодня. От этого кризиса исчезновения спасают иностранцы, приехавшие в Японию с глубоким уважением к японской культуре.\nПивоварни саке и кузнецы мечей: Иностранцы становятся учениками в мастерских, где японцы уже отказались от передачи традиций. Привнося свои возможности для трансляции культуры за рубеж и новую чувственность, они возрождают культуру, находящуюся на грани исчезновения, превращая ее в \u0026ldquo;устойчивую индустрию\u0026rdquo;. 2. Поддержание местных сообществ В местных муниципалитетах, откуда исчезла молодежь и которые стали \u0026ldquo;городами, рискующими исчезнуть\u0026rdquo;, иностранные технические стажеры и квалифицированные рабочие становятся организаторами местных фестивалей и поддерживают основу сельского хозяйства. Кто возделывает заброшенные сельскохозяйственные угодья, оставленные японцами, и кто сохраняет ежегодные мероприятия, проводящиеся сотни лет? Если мы посмотрим на эту реальность, станет ясно, что они не \u0026ldquo;разрушители\u0026rdquo; культуры, а \u0026ldquo;последний рубеж обороны\u0026rdquo; .\nГлава 5: Опасения в сфере образования и цепная реакция \u0026ldquo;издевательств\u0026rdquo; Побочные эффекты от внедрения термина \u0026ldquo;Японцы прежде всего\u0026rdquo; в образовательную среду весьма серьезны.\nДихотомия, разделяющая на \u0026ldquo;Своих и Чужих\u0026rdquo;: Если дети усвоят ложное чувство элитарности, будто \u0026ldquo;японцы — это привилегированный класс, которому следует отдавать приоритет\u0026rdquo;, это легко приведет к издевательствам с целью исключения \u0026ldquo;тех, кто отличается от нас\u0026rdquo;. Иерархия по происхождению: Дети, которые выглядят или чьи имена звучат иначе, подвергаются нападкам как \u0026ldquo;не японцы\u0026rdquo;, даже если у них есть японское гражданство. Это крах образования и действие, наносящее вред талантам, которые будут руководить будущим Японии. Специалисты в сфере образования опасаются, что исключительность слова \u0026ldquo;прежде всего\u0026rdquo; подрывает способность детей к мультикультурному сосуществованию, рискуя в результате изолировать Японию от остального мира.\nГлава 6: Глобальные тенденции и волна популизма Этот феномен не уникален для Японии. В западных странах также наблюдается постоянное явление, когда классы, не получившие выгоды от глобализации, склоняются к популизму, провозглашающему \u0026ldquo;свою страну прежде всего\u0026rdquo;.\nОднако ключевое отличие Японии от Запада заключается в том, что здесь \u0026ldquo;население сокращается самыми быстрыми темпами в мире\u0026rdquo; . Если у других стран есть возможность \u0026ldquo;ограничивать\u0026rdquo;, в Японии уже существует бесчисленное множество объектов социальной инфраструктуры, которые невозможно поддерживать без \u0026ldquo;сотрудничества\u0026rdquo;. Эмоциональное следование принципу \u0026ldquo;прежде всего\u0026rdquo; логически означает \u0026ldquo;медленное самоубийство\u0026rdquo;.\nВместо заключения: Что такое истинное \u0026ldquo;Японцы прежде всего\u0026rdquo;? Само желание, заложенное в словах \u0026ldquo;Японцы прежде всего\u0026rdquo; — просьба к тому, чтобы \u0026ldquo;жизнь граждан была на первом месте\u0026rdquo;, — является самой базовой обязанностью любого правительства.\nОднако средством достижения этого желания не должно быть \u0026ldquo;исключение соседей\u0026rdquo;. Как показывают объективные данные, удобство жизни, общественная безопасность, традиционная культура и сама система социального обеспечения, которыми мы наслаждаемся сегодня, находятся в фазе \u0026ldquo;зависимости и сосуществования\u0026rdquo;, и они уже не могут быть сохранены без присутствия иностранцев.\nРазве истинное \u0026ldquo;Японцы прежде всего\u0026rdquo; не заключается в спокойном применении на практике следующих трех пунктов?\nДискуссии на основе фактов: Не поддаваться влиянию слухов и преувеличенной информации, а понимать реальность на основе первичной статистики правительственных министерств. Установление справедливых правил: Требовать от иностранцев соблюдения японских правил и, в то же время, чтобы японское общество относилось к ним как к равноправным партнерам. Внутреннее обновление: Вместо того чтобы воспринимать принятие иностранцев как \u0026ldquo;потерю Японии\u0026rdquo;, изменить восприятие на то, что мы заимствуем их силу для \u0026ldquo;восстановления и поддержания Японии\u0026rdquo;. В 2026 году мы стоим на важном распутье. Будем ли мы продолжать выкрикивать слова, ведущие к расколу, и душить сами себя? Или же мы посмотрим правде в глаза и сделаем шаг к \u0026ldquo;устойчивой Японии\u0026rdquo;, где самые разные люди будут поддерживать друг друга?\nОтвет кроется в \u0026ldquo;интеллекте\u0026rdquo; и \u0026ldquo;мужестве\u0026rdquo; в сердце каждого из нас.\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/ru/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":"Миф и реальность \"Японцы прежде всего\": защита Японии во имя \"сосуществования\" в 2026 году"},{"content":"[Внимание] Будет ли взиматься плата после окончания бесплатного пробного периода Gemini? Краткое руководство по отмене Когда вы пытаетесь протестировать ИИ-сервис \u0026ldquo;Gemini\u0026rdquo; от Google, изначально предоставляется ** 1-месячный бесплатный пробный период ** . Я думаю, многие люди регистрируются с мыслью: «Раз это бесплатно, я пока попробую», но здесь есть на что обратить внимание.\nЧто произойдет, когда закончится бесплатный пробный период? По окончании пробного периода с вас будет автоматически взиматься ** 2900 иен в месяц ** . Это связано с подпиской под названием «Подписка Google One», и это механизм, который переходит к постоянному выставлению счетов, если вы ничего не предпринимаете.\nЕсли вы отмените подписку, плата не будет взиматься, но\u0026hellip; Конечно, плата не будет взиматься, если вы отмените подписку в течение пробного периода. На официальной странице с пояснениями также есть раздел «Как отменить подписку Google One».\n👉 Отменить подписку Google One (Официально)\nОднако, когда я на самом деле пытаюсь получить к нему доступ, я оказываюсь в ситуации, когда «почему-то я не могу отменить\u0026hellip;». Я был в замешательстве и думал: «Э-э, где мне это остановить?»\nНажмите здесь, чтобы узнать правильный способ отмены! В результате поисков я выяснил, что страница, на которой мне действительно удалось отменить подписку, была следующей.\n👉 Аккаунт Google – Удаление сервисов\nОтсюда выберите «Google One» и удалите его, чтобы завершить отмену.\nКраткое содержание Бесплатный пробный период Gemini составляет 1 месяц По окончании с вас будет автоматически взиматься ** 2900 иен в месяц ** Отмена не всегда возможна на официальной странице с пояснениями Вы можете отменить подписку на ** «странице удаления сервисов» ** Если вы думаете: «Все в порядке, потому что это бесплатная пробная версия», с вас будет взиматься плата, прежде чем вы это заметите, поэтому будьте осторожны!\n👉 Если вы читаете эту статью, возможно, вы прямо сейчас задаетесь вопросом: «Где мне отменить?» На всякий случай, пожалуйста, проверьте ссылку выше.\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/ru/p/%D1%87%D1%82%D0%BE-%D0%B4%D0%B5%D0%BB%D0%B0%D1%82%D1%8C-%D0%B5%D1%81%D0%BB%D0%B8-%D0%B2%D1%8B-%D0%BD%D0%B5-%D0%BC%D0%BE%D0%B6%D0%B5%D1%82%D0%B5-%D0%BE%D1%82%D0%BC%D0%B5%D0%BD%D0%B8%D1%82%D1%8C-%D0%BF%D0%BE%D0%B4%D0%BF%D0%B8%D1%81%D0%BA%D1%83-google-one-gemini/","title":"Что делать, если вы не можете отменить подписку Google One (Gemini)"},{"content":"🎬 Сценарий стрима на YouTube (Разработка приложения для создания новогодних открыток, Часть 1) Начало трансляции (первые 2–3 минуты) Краткое приветствие \u0026ldquo;Всем привет. С сегодняшнего дня я начинаю серию трансляций по постепенной разработке приложения для создания новогодних открыток на C++.\u0026rdquo; \u0026ldquo;Я пока не знаю, сколько стримов понадобится до завершения, но мы будем двигаться вперед шаг за шагом в формате серии.\u0026rdquo; \u0026ldquo;В основном я буду работать молча, поэтому надеюсь, что вы сможете смотреть это в качестве фона для своей работы.\u0026rdquo;\nОбзор целевого приложения \u0026ldquo;В этом приложении я хочу сделать возможным дизайн обратной стороны новогодних открыток.\u0026rdquo; \u0026ldquo;Я планирую добавить вставку фотографий, настройку шрифтов, использование ИИ для обработки изображений и генерации иллюстраций, и в конечном итоге загрузить его в Microsoft Store.\u0026rdquo;\nЦели работы на сегодня \u0026ldquo;Сегодня, в первой части, мы подготовим окружение и заложим основу.\u0026rdquo; \u0026ldquo;В частности:\nСоздание GIT репозитория Создание главного окна Отображение диалогового окна информации о версии Создание меню и реализация команды выхода Инициализация и освобождение ресурсов Direct2D, а также отображение HelloWorld Я планирую двигаться по этому списку.\u0026rdquo;\nО публикации исходного кода \u0026ldquo;Исходный код опубликован на GitHub. Если вам интересно, пожалуйста, загляните.\u0026rdquo; → https://github.com/kenjinote/NengaCardApp/\nРабочая часть (молча) Создание репозитория GitHub → Первоначальный коммит (Initial commit)\nСоздание шаблона главного окна\nСоздание диалогового окна версии, меню и реализация команды выхода\nИнициализация и освобождение ресурсов Direct2D → Проверка отображения HelloWorld\nОтправка (Push) на GitHub по мере необходимости\n※ В основном молча, короткие пояснения только при необходимости\nПеред завершением трансляции (последние 1-2 минуты) Итоги прогресса за сегодня \u0026ldquo;Сегодня мы создали репозиторий GIT, реализовали главное окно, кнопку выхода и диалоговое окно версии.\u0026rdquo; \u0026ldquo;Мы дошли до того, что смогли отобразить HelloWorld с помощью Direct2D.\u0026rdquo;\nЗадел на следующий раз \u0026ldquo;Начиная со следующего раза, я бы хотел привести в порядок часть пользовательского интерфейса (UI) и перейти к таким вещам, как превращение строк в объекты.\u0026rdquo;\nПовторное напоминание ссылки на GitHub → https://github.com/kenjinote/NengaCardApp/\nЗавершение \u0026ldquo;Спасибо за просмотр. В следующий раз я тоже буду продолжать усердно работать, так что, пожалуйста, поддержите меня.\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/ru/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":"Стрим разработки приложения для создания новогодних открыток VOL.1 (Сценарий)"},{"content":"Установка MSIX с использованием самоподписанного сертификата При распространении приложений в Windows использование пакета MSIX удобно, поскольку механизм установки и обновления унифицирован. Однако существует ограничение: для MSIX всегда требуется «подписанный сертификат». Когда вы хотите протестировать приложение, разработанное компанией или частным лицом, могут возникнуть ситуации, когда «покупка коммерческого сертификата подписи кода — это слишком».\nЗдесь на помощь приходит самоподписанный сертификат (Self-Signed Certificate) . В этой статье описаны шаги по прикреплению самоподписанного сертификата к MSIX и возможности его установки в локальной среде.\n1. Создание самоподписанного сертификата Сначала запустите PowerShell в режиме администратора и выполните следующую команду.\n1 2 // Создание самоподписанного сертификата 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; Здесь создается сертификат для «подписания кода».\nЕго будет легче найти позже, если вы дадите ему понятное имя с помощью -FriendlyName. Вы можете настроить срок действия с помощью -NotAfter. На этот раз мы установили его на 10 лет. 2. Экспорт файла PFX Экспортируйте созданный сертификат в формате PFX, чтобы его можно было использовать с signtool.\n1 2 3 4 // Создание 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 Пароль, установленный в это время (в примере password ), потребуется для последующей операции подписания.\n3. Установка самоподписанного сертификата в Доверенные корневые центры сертификации Созданный сертификат сам по себе не будет пользоваться доверием Windows. Чтобы его установить, необходимо импортировать его из certmgr.msc в [Доверенные корневые центры сертификации] -\u0026gt; [Сертификаты] .\nЕсли вы импортируете экспортированный сертификат ( .cer или .pfx ), он будет рассматриваться как доверенный сертификат на целевом ПК. В результате, даже если вы подпишете MSIX, предупреждение «Ненадежный сертификат» не появится.\n4. Подписание установщика (MSIX) Наконец, используйте созданный сертификат PFX для подписания MSIX. signtool входит в состав Visual Studio и Windows SDK.\n1 2 // Подписание установщика 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 указывает алгоритм подписи. Укажите файл PFX с помощью /f и передайте пароль с помощью /p. Наконец, укажите путь к файлу MSIX. Если путь к signtool не найден, укажите полный путь. В моей среде он находился в следующем месте. 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; На этом подписание завершено, и MSIX, который можно установить на целевой ПК, будет готов.\nЗаключение Создайте самоподписанный сертификат с помощью New-SelfSignedCertificate Экспортируйте PFX с помощью Export-PfxCertificate Установите сертификат в Доверенные корневые центры сертификации Подпишите MSIX с помощью signtool Поняв этот процесс, вы сможете проверить работу и протестировать распространение в локальной среде без покупки коммерческого сертификата. Конечно, для реального коммерческого распространения требуется сертификат, выданный центром сертификации, но этот метод очень полезен на этапе разработки и проверки.\n👉 В этот раз мы использовали installer.msix в качестве примера, но ту же процедуру можно применить и к приложениям, которые вы создали сами.\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/ru/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":"Установка MSIX с использованием самоподписанного сертификата"},{"content":"Инструмент для тех, кто «не умеет писать код, но обладает логикой». Почему я создал LogicPad Здравствуйте, я kenji. Я создатель low-code инструмента «LogicPad». В этот раз, вместо того чтобы представлять продукт, я хотел бы немного с личной точки зрения написать об истории его создания: «почему я решил это сделать?» и о своих собственных чувствах.\nЧестно говоря, это была не просто разработка инструмента. Мое прошлое, разочарования на работе, мои навыки и тлеющее желание «однажды я хочу создать свой собственный продукт» ―― Результатом пересечения всего этого и стало рождение LogicPad.\nДругими словами, это также «главный проект всей моей жизни» для меня. Я напишу об этой предыстории настолько честно и страстно, насколько смогу.\nЧестно говоря, я хотел продукт, о котором мог бы с гордостью сказать: «Я сделал это» Если честно, это был самый первый мотив.\nС давних пор я любил писать код, как на работе, так и в качестве хобби. Я участвовал в различных разработках. Но однажды я вдруг понял. «У меня нет продукта, который я бы выпустил в мир под своим именем и под свою ответственность».\nКонечно, вещи, которые мы делаем в команде, имеют ценность, и было много работы, которой я гордился. Но где-то было и чувство пустоты: «Неужели я так и закончу свою карьеру под чьим-то чужим именем?»\nХотя бы раз. Я хочу оставить что-то, о чем я смогу с гордостью сказать: «Я создал это». С этой мыслью я начал продумывать концепцию LogicPad. Это было около 6 лет назад (примерно в 2019 году). (Сама первоначальная идея появилась около 2015 года, когда я узнал о Blueprints, языке визуального программирования в Unreal Engine.)\nВы не можете участвовать, потому что не умеете писать код. Разве это не потеря? На моей работе было много талантливых людей.\nОни могут выстраивать логику. Они свободно используют функции Excel и могут видеть суть проблемы. Но ―― их руки останавливаются на этапе «написания кода».\n«Я выполняю эту работу, каждый раз глядя в руководство, разве мы не можем это автоматизировать?» «Да, можем. Но\u0026hellip; для этого нужно написать код\u0026hellip;»\nТакие разговоры происходили много раз.\nКаждый раз я думал. «Хотя они понимают логику, это действительно потеря, что они останавливаются перед стеной кода».\nВыбор low-code редактора На самом деле, на моей предыдущей работе я разрабатывал 2D CAD программу, которая работала через графический интерфейс (GUI). В CAD вы собираете фигуры с помощью мыши, не так ли? Другими словами, это мир «построения логики через операции» .\nЯ подумал: «Это очень хорошо сочетается с low-code».\nЕсли заглянуть еще дальше в прошлое, со студенческих времен я всегда занимался обработкой изображений, числовой обработкой, инструментами Windows, инструментами автопостинга в SNS и т. д. Всякий раз, когда у меня появлялась идея, я сразу же писал код и массово создавал небольшие программы. Я думаю, их более 600. Они до сих пор хранятся на GitHub.\nВ то время я не задумывался о смысле. Это было просто «я делаю это, потому что хочу». Вот и все.\nНо теперь, создавая LogicPad\u0026hellip;\nЯ действительно почувствовал, что точки соединились в линию.\nПростой в использовании, но мощный. Сложность баланса Продвигаясь в разработке, я всегда думал о том, «как сделать его интуитивно понятным, но в то же время по-настоящему мощным инструментом» .\nЕсли вы добавите функции, то увеличите то, что можно сделать. Но он станет сложным в использовании. Если сделать его простым, то любой сможет им пользоваться. Но тогда найдутся люди, которым этого будет недостаточно.\nЧтобы люди не говорили: «Low-code инструменты — это просто игрушки, верно?» Но и чтобы не говорили: «В конце концов, все равно нужно писать код, так?»\nЯ постоянно боролся на этой тонкой грани между интуитивностью и выразительностью.\nЯ много раз переделывал пользовательский интерфейс, много раз отказывался от него, и когда я наконец приблизился к форме, которая заставила меня подумать: «Это сработает», я был по-настоящему счастлив.\nМеня спасло первое слово «пользователя» Первым человеком, которому я дал LogicPad, была моя бывшая коллега. Она не сильна в IT и боится кода. Но она хороша в логике.\nЯ немного объяснил и дал ей попробовать\u0026hellip; Слова, которые она сказала через несколько минут, я не могу забыть до сих пор.\n«Если это так, я думаю, что тоже смогу это сделать!»\nЯ чуть не расплакался. Это было то, что я хотел ей дать.\nНе просто работающий инструмент, а чувство «я смогла создать это сама!» . Я убедился, что в этом и заключается истинная ценность LogicPad.\nЕсли больше людей смогут создавать, общество станет намного интереснее Я действительно считаю, что «демократизация технологий» очень важна.\nТехнологии способны изменить мир. Но круг людей, которые могут с ними обращаться, ограничен.\nЧто если бы вы могли создать приложение, просто «понимая логику»?\nБольше людей смогут перейти на сторону «создателей». И я верю, что то, что родится оттуда, превзойдет наше нынешнее воображение.\nЕсли бы LogicPad мог стать этим входом. Я хочу, чтобы это был инструмент, который превращает «я хочу создать» в «я могу создать».\nЭто мое желание.\nВ заключение LogicPad все еще находится в бета-версии и не завершен. Есть еще горы того, что нужно улучшить, и того, что я хочу сделать.\nНо я вложил все «точки» моей жизни в этот инструмент . Теперь я могу сказать это с гордостью.\n«Это продукт, который я создал» .\n👇 Бонус: что вы можете делать с LogicPad Построение процессов с помощью перетаскивания (Drag \u0026amp; Drop) Управление условными ветвлениями и переменными через GUI Подготовлены различные узлы для интеграции с ИИ Возможность расширения для опытных пользователей путем вставки скриптов Высокоточные математические функции и обработка данных (например, вычисления с бесконечной точностью) Обширные сочетания клавиш для опытных пользователей Поддержка более 90 языков Что я хочу сделать в будущем Интеграция с ИИ для генерации логики из естественного языка Механизм, позволяющий пользователям создавать собственные узлы Создание платформы, где можно будет делиться созданными узлами и логикой ✍️ Послесловие Большое спасибо, что дочитали до этого момента. Это была не просто разработка инструмента, а вызов, в который я вложил свой собственный опыт, страсть и частички своей жизни.\n«Не умею писать код, но обладаю логикой». Будущее, в котором такие люди смогут «создавать» своими силами. Я хочу продолжать стремиться к этому с помощью LogicPad.\nЕсли это заставило вас хотя бы немного подумать: «Я хочу это использовать», я буду очень рад. Если вам интересно, пожалуйста, попробуйте LogicPad.\nИ если у вас есть какие-либо мысли или вы что-то заметили после его использования, неважно насколько это незначительно. Ваш голос станет огромной движущей силой для следующего шага этого продукта.\nСпасибо за вашу постоянную поддержку.\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/ru/p/logicpad-%E9%96%8B%E7%99%BA%E7%A7%98%E8%A9%B1/","title":"История создания LogicPad"},{"content":"Как массово удалить метаданные (личную информацию) из Excel, Word и других файлов с помощью PowerShell Файлы Office, такие как Excel, автоматически сохраняют «метаданные (личную информацию)», включая автора, того, кто последним вносил изменения, и название компании. Часто возникают ситуации, когда необходимо удалить эту информацию, например, при обмене файлами за пределами компании.\nВ этой статье мы подробно расскажем, как удалить метаданные из Excel с помощью PowerShell, уделяя особое внимание массовой обработке файлов в папке и применению к другим файлам Office, таким как Word и PowerPoint.\n1. Удаление метаданных из одного файла Excel Это самый базовый скрипт для удаления личной информации из одного файла Excel. Он вызывает COM-объект Excel, устанавливает свойство RemovePersonalInformation в $true и сохраняет изменения.\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 # Запуск приложения Excel в скрытом режиме $excel = New-Object -ComObject Excel.Application $excel.Visible = $false $excel.DisplayAlerts = $false # Открытие файла (* укажите абсолютный путь) $filePath = \u0026#34;C:\\Path\\To\\Your\\File.xlsx\u0026#34; $wb = $excel.Workbooks.Open($filePath) # Включение настройки для удаления метаданных (личной информации) $wb.RemovePersonalInformation = $true # Сохранение с перезаписью и закрытие $wb.Save() $wb.Close($false) # Закрытие Excel и освобождение памяти $excel.Quit() [System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel) | Out-Null Примечание: Для пути, передаваемого в Workbooks.Open(), обязательно укажите абсолютный путь (полный путь). Использование относительного пути может привести к ошибке.\n2. Массовая обработка всех файлов Excel в папке На практике часто возникает необходимость «сразу удалить метаданные из десятков файлов Excel в определенной папке». Это можно реализовать с помощью цикла в сочетании с Get-ChildItem.\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 $targetFolder = \u0026#34;C:\\Path\\To\\Your\\Folder\u0026#34; # Получение всех файлов .xlsx и .xls в папке $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;Файлы Excel не найдены.\u0026#34; exit } $excel = New-Object -ComObject Excel.Application $excel.Visible = $false $excel.DisplayAlerts = $false foreach ($file in $excelFiles) { Write-Host \u0026#34;Удаление метаданных из $($file.Name)...\u0026#34; # Открытие файла $wb = $excel.Workbooks.Open($file.FullName) # Удаление метаданных и сохранение с перезаписью $wb.RemovePersonalInformation = $true $wb.Save() $wb.Close($false) } $excel.Quit() [System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel) | Out-Null Write-Host \u0026#34;Вся обработка завершена!\u0026#34; 3. Удаление метаданных из других файлов Office (Word / PowerPoint) Метаданные можно удалить не только в Excel, но и в Word или PowerPoint, используя точно такую же логику. Отличается только имя вызываемого COM-объекта, а наличие свойства RemovePersonalInformation остается общим.\nДля 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 Для PowerPoint В случае PowerPoint настройка свойства RemovePersonalInformation аналогична, но поведение скрытого запуска немного отличается.\n1 2 3 4 5 6 7 8 9 10 $ppt = New-Object -ComObject PowerPoint.Application # Открытие файла с указанием скрытого режима (msoFalse) во 2-м - 4-м аргументах $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 Заключение Использование PowerShell и COM-объектов позволяет полностью автоматизировать удаление метаданных из файлов Office. Чтобы предотвратить случайную утечку конфиденциальной информации и личных имен, очень удобно иметь под рукой скрипт для массовой обработки папок перед сдачей проектов.\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/ru/p/kak-udalit-metadannye-excel-s-pomoshchyu-powershell/","title":"Как массово удалить метаданные (личную информацию) из Excel, Word и других файлов с помощью PowerShell"},{"content":"Простое объяснение гипотезы Кеплера! 〜Как плотнее всего упаковать арбузы〜 Всем привет, это kenji!\nСегодня я хотел бы максимально просто рассказать о математической проблеме со сложным названием — «гипотеза Кеплера».\nНа первый взгляд это может показаться очень специфической темой, но на самом деле это довольно практичная задача: «как плотнее всего упаковать арбузы в коробку?». Она также имеет отношение к холодильникам в магазинах и к тому, как складывать грузы.\nА в мире математики это супер-романтичная история о том, что никто не мог доказать это на протяжении более 400 лет .\nНу что, поехали!\nКто такой Кеплер? Для начала, кто такой «Кеплер» из «гипотезы Кеплера»?\nЭто имя немецкого астронома и математика Иоганна Кеплера (Johannes Kepler) .\nЭтот человек был невероятно выдающимся. Например, именно он открыл, что орбиты планет имеют форму эллипса. Сегодня это общеизвестный факт, но в то время (около 1600 года) даже гелиоцентрическая система не пользовалась особым доверием.\nГалилей = гений наблюдений Кеплер = гений, описавший Вселенную формулами Ньютон = супергений, объединивший эти теории в законы физики В таком контексте Кеплер был пионером в том, чтобы «описывать Вселенную с помощью математики».\nИ вот однажды он заявил следующее.\nЧто такое гипотеза Кеплера? Проще говоря, «гипотеза Кеплера» — это вот о чем.\nЕсли мы упаковываем шары одинакового размера (например, арбузы или апельсины) в коробку, какой способ укладки позволит упаковать их плотнее всего?\nВот такая задача.\nИ Кеплер в 1600-х годах предположил следующее:\nРазве не эффективнее всего складывать их треугольником, как это делают с апельсинами на рынке?\nГоворя математическим языком, это называется «задача о плотнейшей упаковке» — поиск способа максимально плотно заполнить пространство шарами.\nКеплер предположил, что наиболее эффективным способом является «гранецентрированная кубическая решетка (ГЦК)» (примерно так же, как складывают арбузы треугольником).\nИ хотя все думали: «Да, это звучит правдоподобно», математически доказать, что «это абсолютно лучший вариант!», оказалось невероятно сложно.\n400 лет до доказательства!?! Итак, когда же это было окончательно доказано?\nУдивительно, но это произошло примерно в 1998–2005 годах . То есть около 400 лет никто не мог этого доказать . Просто невероятно.\nБолее того, доказал её американский математик Томас Хейлс (Thomas Hales) .\nПоняв, что вручную это вычислить невозможно, он использовал компьютер для доказательства . Однако доказательство оказалось настолько сложным, что люди не смогли его нормально проверить! Это вызвало проблему.\nВ математическом мире разгорелись бурные дебаты: «Можно ли доверять доказательству, выполненному на компьютере?».\nВ итоге в 2014 году было завершено «строгое доказательство, проверенное с учетом компьютера» (официально называемое «формальным доказательством»).\nЭто означает, что понадобилось более 400 лет , чтобы доказать правоту интуиции Кеплера. Настоящая романтика.\nЭто очень часто используется в реальной жизни Можно подумать, что вопрос о том, «как складывать шары», волнует только математиков-гиков, но на самом деле это суперпрактично.\nЭффективная расстановка напитков в холодильниках супермаркетов Укладка консервных банок на транспортные поддоны Применение в телекоммуникациях (например, для сжатия цифровых сигналов) Использование при проектировании для 3D-принтеров и кристаллических структур И многое другое — на самом деле эта теория активно применяется за кулисами нашей повседневной жизни.\nЗаключение: человеческая интуиция удивительна Итак, подведем итоги.\nГипотеза Кеплера = задача о том, как наиболее плотно упаковать шары Кеплер = математик и астроном, открывший орбиты планет Гипотеза была выдвинута в 1600-х годах! А доказана только в 2000-х! Она имеет множество применений в реальной жизни! И самое интересное здесь то, что «способ укладки, который продавцы на рынке использовали интуитивно, оказался математически лучшим» .\nИными словами, человеческая интуиция поразительна . А тот факт, что на её доказательство может уйти 400 лет , делает эту историю по-настоящему романтичной.\nЕсли вам это интересно, обязательно поищите информацию по запросам «Томас Хейлс», «формальное доказательство» и «Sphere Packing». Если копнуть глубже, это безумно интересно.\nДо встречи!\n[PR]\n今すぐ購入 ","date":"2025-07-21T22:53:03+09:00","image":"http://kenji.blog/p/%E3%82%B1%E3%83%97%E3%83%A9%E3%83%BC%E4%BA%88%E6%83%B3%E3%82%92%E3%82%8F%E3%81%8B%E3%82%8A%E3%82%84%E3%81%99%E3%81%8F%E8%A7%A3%E8%AA%AC/img_huc7f0a2c79b029796989bdbbe22e755bc_619919_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/ru/p/prosto-o-gipoteze-keplera/","title":"Простое объяснение гипотезы Кеплера"},{"content":"Стена разработки ИИ 〜 Мы добрались до 8-й станции, но потом начался ад 〜\nВсем привет, это kenji.\nВ последнее время я очень часто слышу: \u0026ldquo;Я попросил ИИ, и он сделал мне приложение!\u0026rdquo; Мы прошли эпоху no-code и low-code и вступили в фазу \u0026ldquo;vibe-coding\u0026rdquo; (написание кода по атмосфере).\nНапример, если вы скажете: \u0026ldquo;Создай приложение, которое может редактировать изображения и публиковать их в соцсетях\u0026rdquo;, ИИ выдаст код и даже пользовательский интерфейс. Вы подумаете: \u0026ldquo;Ух ты, нам больше не нужны люди, да?\u0026rdquo;\nНо знаете, это как спуститься на 8-ю станцию горы Фудзи в сандалиях.\nДо 8-й станции кажется, что это \u0026ldquo;проще простого\u0026rdquo; Разработка с помощью ИИ поначалу действительно кажется легкой. Файловый ввод-вывод? Пока что работает. Сеть? Ну, подключается. База данных? JSON сойдет. UI? ChatGPT выдал код на React. Оплата? API Stripe можно просто скопировать и вставить.\nНа этом этапе у вас возникает иллюзия: \u0026ldquo;А не инженер ли я уже?\u0026rdquo; Но настоящий ад начинается именно здесь.\nПочему мы застреваем? Причина проста: \u0026ldquo;ИИ делает что-то похожее на правду, но финальная доработка полностью ложится на плечи человека\u0026rdquo;.\nДанные теряются при файловом вводе-выводе Нормализация БД слабая, поэтому поиск работает медленно UI не интуитивно понятен Нагрузочное тестирование не проводилось, поэтому при наплыве посетителей все падает Отказ при проверке Apple/Google Нарушение юридических требований и (почти) скандал Иными словами, ИИ хорош в создании прототипов, которые выглядят как готовые, но доведение их до состояния \u0026ldquo;продукта, который можно выпустить в мир\u0026rdquo;, до сих пор остается работой человека.\nНо есть парадокс Здесь мы замечаем один парадокс.\nЧто, если в будущем ИИ действительно сможет делать всё? То есть, что, если \u0026ldquo;безопасность, биллинг и проектирование — всё это будет идеально обрабатываться ИИ\u0026rdquo;?\nВ этот момент необходимость в том, чтобы человечество создавало приложения, может отпасть сама собой.\nПотому что, если пользователь напрямую скажет ИИ: \u0026ldquo;Я хочу сделать то-то\u0026rdquo;, задача будет выполнена мгновенно без какого-либо приложения.\n🌀 Например Раньше мы \u0026ldquo;запускали приложение калькулятора, чтобы посчитать\u0026rdquo;, а теперь достаточно сказать: \u0026ldquo;Привет, Siri, сколько будет 12×32?\u0026rdquo;, и всё готово.\nТочно так же, если вы скажете: \u0026ldquo;ИИ, отредактируй фотографию и поделись ею\u0026rdquo;, процесс может быть завершен без использования UI или API приложения.\nИными словами, когда цель \u0026ldquo;создать приложение с помощью ИИ\u0026rdquo; будет достигнута, может наступить мир, в котором сами приложения станут не нужны.\nВ итоге, что мы можем сделать сейчас Итак, что же нам делать?\nПока что \u0026ldquo;всё, что выше 8-й станции\u0026rdquo; — это территория человека, поэтому давайте оттачивать эти навыки. Сосредоточиться на фундаментальном понимании пользователей и проектировании сервисов. Думать о том, что \u0026ldquo;имеет ценность\u0026rdquo;, а не о том, что \u0026ldquo;можно сделать\u0026rdquo;. Искать способы предоставления ценности, которые \u0026ldquo;не ограничены форматом приложения\u0026rdquo;. ИИ — это инструмент, лифт, а иногда и конкурент. Но вопросы \u0026ldquo;что создавать\u0026rdquo; и \u0026ldquo;зачем это создавать\u0026rdquo; по-прежнему остаются вопросами для нас, людей.\nЗаключение: Стена разработки ИИ — это не технологии, а структурный парадокс.\nМы живем в эпоху, когда каждый может добраться до 8-й станции горы Фудзи. Но именно после этого начинается самое интересное.\nИ, возможно, когда мы достигнем вершины, нас будет ждать будущее, в котором мы спросим себя: \u0026ldquo;А нужно ли вообще было лезть на эту гору?\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/ru/p/ai%E9%96%8B%E7%99%BA%E3%81%AE%E5%A3%81/","title":"Стена разработки ИИ"},{"content":"🎯 Как вызвать Microsoft.Windows.AI из C++ [с примером кода] Начиная с Windows 10, Windows стандартно поставляется с средой выполнения, которая может выполнять модели ИИ в формате ONNX. Это Windows ML (Windows.AI.MachineLearning).\nВ этой статье подробно объясняется, как вызвать Microsoft.Windows.AI.MachineLearning из C++ (на базе приложения Win32), с примером кода.\n✅ Подготовка ◾ Требования Windows 10 (1809+) или Windows 11 Visual Studio 2019 или новее (подойдет версия Community) Поддержка C++/WinRT (Microsoft.Windows.CppWinRT) Windows SDK 10.0.17763.0 или новее ✅ Структура проекта Создайте проект со следующей структурой в Visual Studio.\nТип: Настольное приложение Windows C++ (Пустой проект)\nПодсистема: Windows (WinMain)\nДобавьте следующий пакет через NuGet\n1 Microsoft.Windows.CppWinRT ✅ Пример кода Ниже приведен минимальный пример, объединяющий Win32 API и Windows.AI.MachineLearning с использованием WinMain.\n※ Используемая модель ONNX — model.onnx, поместите ее в ту же папку, что и исполняемый файл.\nmain.cpp 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 #include \u0026lt;windows.h\u0026gt; #include \u0026lt;winrt/Windows.AI.MachineLearning.h\u0026gt; #include \u0026lt;winrt/Windows.Storage.h\u0026gt; #pragma comment(lib, \u0026#34;windowsapp\u0026#34;) // Для связывания с WinRT using namespace winrt; using namespace Windows::AI::MachineLearning; using namespace Windows::Storage; int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int nCmdShow) { // Инициализация WinRT (допускается MTA или STA) winrt::init_apartment(); try { // Загрузка файла модели auto modelFile = StorageFile::GetFileFromPathAsync(L\u0026#34;model.onnx\u0026#34;).get(); LearningModel model = LearningModel::LoadFromStorageFileAsync(modelFile).get(); // Создание сессии LearningModelSession session(model); LearningModelBinding binding(session); // Ввод/вывод модели (здесь пока пустой ввод) // Фактически требуется привязка с помощью TensorFloat и т. д. // Выполнение вывода auto result = session.EvaluateAsync(binding, L\u0026#34;\u0026#34;).get(); MessageBox(nullptr, L\u0026#34;Вывод завершен\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;Ошибка\u0026#34;, MB_ICONERROR); } return 0; } ✅ Дополнение: Как указать входной и выходной Tensor В зависимости от модели перед выводом может потребоваться создание и привязка Tensor.\nПример:\n1 2 3 4 5 6 7 8 // Преобразование одномерного массива float в Tensor std::vector\u0026lt;float\u0026gt; inputData = {0.5f, 0.3f, 0.2f}; std::vector\u0026lt;int64_t\u0026gt; shape = {1, 3}; // Форма: [1, 3] auto tensor = TensorFloat::CreateFromArray(shape, inputData); // Привязка ввода (соответствует имени ввода модели) binding.Bind(L\u0026#34;input_0\u0026#34;, tensor); Аналогично, вывод можно получить с помощью result.Outputs().Lookup(L\u0026quot;output_0\u0026quot;).\n✅ Заметки по отладке Если файл модели не существует в папке выполнения, будет выброшено FileNotFoundException. Если имена ввода/вывода не совпадают, возникнет ошибка invalid_argument. Точные спецификации ввода/вывода модели можно проверить с помощью таких инструментов, как Netron. ✅ Заключение Элемент Содержание Используемый API Windows.AI.MachineLearning (WinRT) Язык C++ (на базе Win32) Рекомендуемый метод Через заголовок C++/WinRT Преимущества Модель ONNX работает изначально, также поддерживается GPU Внимание Обратите внимание на имя ввода модели и форму Tensor ✅ Альтернатива: Для тех, кто не хочет использовать WinRT Используя ONNX Runtime от Microsoft, вы можете полностью обрабатывать модели ONNX из C++ без WinRT. Поддерживает кроссплатформенность, что позволяет использовать общий код для Windows/Linux. 📌 В завершение Windows ML (Microsoft.Windows.AI) — это мощный механизм вывода ИИ, который можно эффективно использовать даже из C++. Если вам нужен встроенный вывод в Windows, пожалуйста, попробуйте.\nКонкретные примеры создания моделей ONNX и привязки Tensor будут объяснены в следующем руководстве!\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/ru/p/kak-vyzvat-microsoft-windows-ai-iz-c-/","title":"Как вызвать Microsoft.Windows.AI из C++"},{"content":"✅ Шаги настройки TinyLLaMA × C++ (с использованием llama.cpp) 🔧 Шаг 1: Подготовка llama.cpp 1-1. Требуемое окружение (Минимум) ОС: Windows / Linux / macOS Среда разработки: g++ / clang / MSVC Git / CMake 1-2. Получение и сборка 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 В Windows проще всего использовать Visual Studio Developer Command Prompt с командой cmake --build . --config Release.\n📦 Шаг 2: Скачивание и конвертация модели TinyLLaMA 2-1. Получение оригинальной модели с HuggingFace Пример: TinyLLaMA-1.1B\n1 2 3 4 5 6 7 # При необходимости скачайте с помощью transformers 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 Это шаг преобразования в формат Hugging Face.\n2-2. Конвертация в формат GGUF (для llama.cpp) 1 2 cd llama.cpp python3 convert.py ./hf_model --outfile tinyllama.gguf 2-3. Квантование модели (уменьшение размера) 1 ./quantize ./tinyllama.gguf ./tinyllama-q4.gguf q4_0 q4_0 — это 4-битное квантование. Размер модели уменьшится примерно до ** 350 МБ **.\n🧪 Шаг 3: Вызов модели из C++ (Пример кода) 3-1. Простой код на C++ (Вывод) 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;Пользователь говорит, что хочет загрузить данные Excel, отфильтровать их и сохранить. Какова конфигурация узла?\u0026#34;; llama_batch batch = llama_batch_init(512, 0, 1); llama_token BOS = llama_token_bos(model); batch.token[0] = BOS; // Токенизация 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); // Получение результата 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; } 🧱 Шаг 4: Метод компиляции (Пример) 1 g++ -I./llama.cpp main.cpp ./llama.cpp/build/libllama.a -o tiny_infer -pthread -std=c++11 Библиотека libllama.a создается в директории build/ после сборки.\n✅ Пример структуры файлов (Организация) 1 2 3 4 5 6 my_app/ ├── tinyllama-q4.gguf # Квантованная модель (~350 МБ) ├── main.cpp # Код C++ выше ├── llama.cpp/ # Ядро llama.cpp └── build/ └── libllama.a # Скомпилированная библиотека 🧠 Заметки для применения в проектах Добавьте код на C++ для сопоставления и выбора шаблонов узлов на основе вывода Пример: Если содержит \u0026ldquo;Excel\u0026rdquo;, \u0026ldquo;фильтр\u0026rdquo;, \u0026ldquo;сохранить\u0026rdquo; -\u0026gt; Создать соответствующую группу узлов Для этой части подойдет простая конфигурация, например оператор if + загрузка шаблона JSON 📌 Итог Параметр Описание Рекомендуемая модель TinyLLaMA-1.1B-Chat v1.0 (GGUF + Квантование) Размер ~350-450 МБ (4-битное квантование) Интеграция с C++ Возможна через llama.cpp, почти без внешних зависимостей Производительность Достаточна для простого понимания намерений и генерации текста (Естественный текст -\u0026gt; Конфигурация) Расширяемость Можно превратить в ИИ для генерации узлов, комбинируя с заполнением слотов и вызовом шаблонов ","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/ru/p/shagi-dlya-vyzova-tinyllama-iz-cpp-s-ispolzovaniem-llama-cpp/","title":"Шаги для вызова TinyLLaMA из C++ (с использованием llama.cpp)"},{"content":"✅ Как отправлять сообщения с использованием токена доступа (Slack Web API) «OAuth Token (например, xoxb- и т.д.)» от Slack — это ключ для публикации сообщений с помощью Web API от Slack. В этом случае, в отличие от Webhook, вы выполняете POST запрос к конечной точке API Slack с заголовком Authorization: Bearer.\n🔑 Необходимые условия Вы должны включить chat:write в область действия OAuth в вашем приложении Slack:\nШаги настройки Перейдите на https://api.slack.com/apps Создайте приложение или выберите существующее В «OAuth \u0026amp; Permissions» \u0026gt; Scopes → Добавьте chat:write Выполните «Install to Workspace» или «Reinstall», чтобы получить Access Token (например: xoxb-xxxxxxxxxx) 💻 Код на C++ (Отправка в Slack API через 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 и 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 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;Ошибка отправки\\n\u0026#34;; return false; } // Проверка кода статуса 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-ваш-токен-доступа\u0026#34;; // Токен доступа std::string channel = \u0026#34;ID-канала-или-#general\u0026#34;; // Пример: \u0026#34;#general\u0026#34; или \u0026#34;C0123456789\u0026#34; std::string message = \u0026#34;Попытка отправки в Slack из C++!\u0026#34;; if (PostSlackMessage(token, channel, message)) { std::cout \u0026lt;\u0026lt; \u0026#34;Успешная отправка!\\n\u0026#34;; } else { std::cerr \u0026lt;\u0026lt; \u0026#34;Ошибка при отправке.\\n\u0026#34;; } return 0; } 📌 Как получить ID канала Использование только имени канала (например, #general) иногда может привести к ошибке. Более надежный способ — использовать ID из URL страницы канала в Slack.\n1 2 https://app.slack.com/client/Txxxxx/C0123456789 ↑ Эта часть — ID канала ✅ О типах токенов (Дополнительно) Формат токена Назначение Пример xoxb-... Bot Token (Рекомендуется) Публикация, редактирование, удаление xoxp-... User Token (Не рекомендуется) Операции не связанные с ботом Refresh Token Для обновления долгосрочного токена Обычно не используется 📝 Заключение Для публикации в Slack из C++ метод Slack Web API + Bearer Token является наиболее надежным Используйте конечную точку chat.postMessage с HTTPS POST Токен необходимо передавать в заголовке Bearer Канал надежнее всего указывать по ID ","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/ru/p/%D0%BA%D0%B0%D0%BA-%D0%BE%D1%82%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D1%8F%D1%82%D1%8C-%D1%81%D0%BE%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%B8%D1%8F-%D0%B2-slack-%D1%81-%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E-slack-app--oauth2/","title":"Как отправлять сообщения в Slack с помощью Slack App + OAuth2"},{"content":"Как отправлять сообщения в Slack на C++ (Win32 API + WinHTTP) [Поддержка Webhook] Я хочу отправлять сообщения в Slack из C++. Это часто встречается в Node.js и Python, но случаев использования \u0026ldquo;C++ × Win32 API × WinHTTP\u0026rdquo; немного.\nВ этой статье я шаг за шагом и понятно объясню как отправлять сообщения из C++ в Slack с использованием URL Webhook .\n✅ Общий процесс Чтобы опубликовать сообщение в Slack, выполните следующие шаги:\nПолучите URL Slack Webhook (API-ключ) Отправьте POST запрос с помощью WinHTTP Сформируйте текст сообщения в формате JSON Проверьте результат, и готово! 🔑 Шаг 1: Как получить URL Slack Webhook В Slack можно легко отправлять сообщения из внешних сервисов с помощью функции Incoming Webhooks.\nШаги получения Перейдите на https://api.slack.com/apps Нажмите Create New App Выберите From scratch, укажите имя приложения и целевую рабочую область В левом меню выберите \u0026ldquo;Incoming Webhooks\u0026rdquo; и включите их Нажмите \u0026ldquo;Add New Webhook to Workspace\u0026rdquo; и выберите канал Скопируйте сгенерированный URL (например: https://hooks.slack.com/services/xxx/yyy/zzz) Этот URL работает как API-ключ.\n💻 Шаг 2: Отправка сообщения в Slack с помощью кода C++ Используемые технологии Win32 API WinHTTP (стандартная библиотека) Сообщения в формате JSON Пример кода (Отправка в 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) { // 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;URL分解に失敗しました\\n\u0026#34;; return false; } // HTTPセッションと接続 HINTERNET hSession = WinHttpOpen(L\u0026#34;SlackPoster/1.0\u0026#34;, WINHTTP_ACCESS_TYPE_DEFAULT_PROXY, WINHTTP_NO_PROXY_NAME, WINHTTP_NO_PROXY_BYPASS, 0); HINTERNET hConnect = WinHttpConnect(hSession, hostName, urlComp.nPort, 0); HINTERNET hRequest = WinHttpOpenRequest(hConnect, L\u0026#34;POST\u0026#34;, urlPath, NULL, WINHTTP_NO_REFERER, WINHTTP_DEFAULT_ACCEPT_TYPES, WINHTTP_FLAG_SECURE); std::wstring headers = L\u0026#34;Content-Type: application/json\\r\\n\u0026#34;; BOOL result = WinHttpSendRequest(hRequest, headers.c_str(), -1, (LPVOID)messageJson.c_str(), messageJson.length(), messageJson.length(), 0); if (!result) { std::cerr \u0026lt;\u0026lt; \u0026#34;送信リクエストに失敗しました\\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); // リソース解放 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;; // 自分のWebhookに置き換えてください std::string message = R\u0026#34;({ \u0026#34;text\u0026#34;: \u0026#34;Hello from C++ :rocket:\u0026#34;, \u0026#34;username\u0026#34;: \u0026#34;C++ Bot\u0026#34;, \u0026#34;icon_emoji\u0026#34;: \u0026#34;:robot_face:\u0026#34; })\u0026#34;; if (PostToSlack(webhookUrl, message)) { std::cout \u0026lt;\u0026lt; \u0026#34;投稿に成功しました！\\n\u0026#34;; } else { std::cerr \u0026lt;\u0026lt; \u0026#34;投稿に失敗しました。\\n\u0026#34;; } return 0; } 🧪 Настройка JSON сообщений В Slack Webhook можно включать следующие параметры:\n1 2 3 4 5 6 { \u0026#34;text\u0026#34;: \u0026#34;Содержимое уведомления\u0026#34;, \u0026#34;username\u0026#34;: \u0026#34;Имя бота\u0026#34;, \u0026#34;icon_emoji\u0026#34;: \u0026#34;:rocket:\u0026#34;, \u0026#34;channel\u0026#34;: \u0026#34;#любое_имя_канала\u0026#34; } 📌 Дополнительная информация Content-Type должен быть обязательно указан как \u0026quot;application/json\u0026quot; URL Webhook передается как wstring без изменений (URL-кодирование не требуется) Так как это HTTPS соединение, не забудьте WINHTTP_FLAG_SECURE 🎉 Бонус: Пример проверки публикации в Slack В Slack это будет выглядеть так:\n1 2 [C++ Bot] Hello from C++ :rocket: ✍️ Итоги Параметр Описание Метод отправки Webhook (Incoming Webhooks) Библиотека связи WinHTTP Формат данных JSON Доступные параметры text, username, icon_emoji, channel и т.д. Даже если вы думали, что интеграция со Slack на C++ — это сложно\u0026hellip; вы можете добавить бота для уведомлений прямо сегодня!\n🚀 Что дальше? Если вам интересно, в следующий раз:\nПрикрепление файлов Интерфейс с кнопками Гибкая работа с API через Slack App + OAuth2 Мы также можем представить более продвинутую интеграцию со Slack, подобную этой!\n","date":"2025-07-16T19:42:56+09:00","image":"http://kenji.blog/p/c-win32-api--winhttp%E3%81%A7slack%E3%81%AB%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E3%82%92%E6%8A%95%E7%A8%BF%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95webhook%E5%AF%BE%E5%BF%9C/img_huc0fc953b24035d17918192b772178b43_75467_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/ru/p/%D0%BA%D0%B0%D0%BA-%D0%BE%D1%82%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D1%8F%D1%82%D1%8C-%D1%81%D0%BE%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%B8%D1%8F-%D0%B2-slack-%D0%BD%D0%B0-c-win32-api--winhttp-%D0%BF%D0%BE%D0%B4%D0%B4%D0%B5%D1%80%D0%B6%D0%BA%D0%B0-webhook/","title":"Как отправлять сообщения в Slack на C++ (Win32 API + WinHTTP) [Поддержка Webhook]"},{"content":"Market-in и Product-out Привет, это Кенджи.\nИногда в бизнес-книгах или проектных предложениях я вижу что-то вроде:\n\u0026ldquo;У нас стратегия market-in.\u0026rdquo; \u0026ldquo;Это модель product-out.\u0026rdquo;\nТакие вещи говорят, но\u0026hellip;\nНет, market-in? Product-out? Что круче???\nРазве не так?\nТак что на этот раз я постараюсь разобрать эти \u0026ldquo;market-in\u0026rdquo; и \u0026ldquo;product-out\u0026rdquo; как можно проще и посмотреть на них немного критически.\nКороче говоря\u0026hellip; Market-in : Прислушиваться к голосу рынка (market) и создавать продукты в соответствии с ним. Product-out : Создавать то, что мы (product) считаем хорошим, и выпускать это в мир. Вот и все. Просто.\nНапример, в раменной\u0026hellip; Раменная в стиле market-in: \u0026ldquo;В последнее время популярен иэкей рамен. Отлично, добавим побольше жира и чеснока!\u0026rdquo; — вот так.\nРаменная в стиле product-out: \u0026ldquo;Этот соево-базиликовый соленый рамен, который я приготовил, просто великолепен, так что ешьте\u0026rdquo; — вот так.\nЧто правильнее\u0026hellip; Оба варианта правильные Market-in ориентирован на потребности клиентов, поэтому \u0026ldquo;вероятность продаж высока\u0026rdquo;, но прорывные идеи или инновации рождаются редко.\nProduct-out — это \u0026ldquo;воплощение справедливости, в которую мы верим\u0026rdquo;, поэтому он острый и привлекательный, но если промахнуться, это никого не зацепит.\niPhone похож на product-out В эпоху, когда говорили \u0026ldquo;смартфоны не нужны\u0026rdquo;, Apple выпустила iPhone.\nЭто уже абсолютно успешный пример product-out .\nЕсли бы они слушали пользователей, им бы сказали \u0026ldquo;Телефон без клавиатуры? Ни за что\u0026rdquo;, и на этом бы все закончилось.\nНо product-out легко может стать \u0026ldquo;самодовольством\u0026rdquo; Иногда есть компании или люди, которые говорят: \u0026ldquo;Мы типа product-out\u0026rdquo;, но\nНет, разве это не просто игнорирование пользователей?\nИногда я так думаю.\n\u0026ldquo;Сделал, потому что хотел. Но не продалось\u0026rdquo; — это не product-out, а \u0026ldquo;эгоистичный out\u0026rdquo;, не так ли?\nУ market-in тоже есть ловушки С другой стороны, market-in тоже не идеален.\nЕсли говорить: \u0026ldquo;Мы сделаем все, что просят пользователи!\u0026rdquo;, суть продукта размоется, и в итоге он никого не зацепит.\nВы добавляете всё новые функции, и вдруг понимаете, что это какой-то хаотичный инструмент.\nПо-настоящему удивительны те, кто \u0026ldquo;делает и то, и другое\u0026rdquo; Удивительные продукты — это те, которые четко показывают: \u0026ldquo;то, что пользователи действительно хотели, но не могли выразить словами\u0026rdquo;.\nДругими словами, \u0026ldquo;получить сочувствие в стиле market-in, используя идею product-out\u0026rdquo;.\nСказать это легко, но сделать невероятно сложно. Но если вы сможете это сделать, он мгновенно станет \u0026ldquo;божественным продуктом\u0026rdquo;.\nВывод: реакция пользователей решает всё, а не слова Market-in или product-out. Вопрос о том, что правильнее, не имеет особого смысла.\n\u0026ldquo;Достигло ли это сердца пользователя?\u0026rdquo; — вот и всё , я думаю.\n\u0026ldquo;У нас стратегия похожа на это\u0026rdquo; — я считаю, что достаточно, если мы сможем написать это позже в маркетинговых материалах.\nВот и вся история про market-in и product-out!\nНе поддаваясь влиянию странных иностранных слов, думать \u0026ldquo;в конце концов, как я могу сделать людей счастливыми?\u0026rdquo; — это самое здравое, как мне кажется.\nПока-пока~.\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/ru/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 и Product-out"},{"content":"\u0026ldquo;Действительно ли любое число в конце концов становится 1?\u0026rdquo; ── Играем с гипотезой Коллатца Всем привет! Это Кенджи.\nВнезапный вопрос: когда вы слышите о \u0026ldquo;правиле, по которому любое число в итоге превращается в 1\u0026rdquo;, разве это не кажется вам немного странным?\nНапример, 19, или 87, или даже 1000000. Если вы следуете определенному правилу и манипулируете числами, по какой-то причине они всегда сводятся к \u0026ldquo;1\u0026rdquo;.\nЭта сказочная история и есть гипотеза Коллатца (Collatz Conjecture).\nДля начала, что такое гипотеза Коллатца? Сначала позвольте мне представить правила.\nСтарт: выберите любое положительное целое число\nОперация:\nЕсли четное → делим пополам (n → n / 2) Если нечетное → умножаем на 3 и прибавляем 1 (n → 3n + 1) Если повторять это снова и снова, гипотеза гласит, что любое число в конечном итоге достигнет 1.\nНапример, если мы начнем с 6:\n1 6 → 3 → 10 → 5 → 16 → 8 → 4 → 2 → 1 Оно действительно стало \u0026ldquo;1\u0026rdquo;. С возвращением!\nДавайте попробуем это в коде: Коллатц на Python Что ж, в таких случаях быстрее всего попробовать написать код! Давайте выведем \u0026ldquo;последовательность Коллатца\u0026rdquo; с помощью 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 # Пример: давайте начнем с 19 print(collatz(19)) При запуске:\n1 [19, 58, 29, 88, 44, 22, 11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1] Оно успешно достигает 1. Пришлось сделать немало крюков, но в итоге мы на финише!\nКстати, даже если мы начнем с 29, оно достигнет 1 таким же образом.\n1 pythonprint(collatz(29)) При запуске:\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] На это уходит целых 111 шагов!\nБолее того, по пути оно иногда раздувается до более чем 9000. Это тот случай, когда перед финишем делается огромный крюк.\nИтак, что же в итоге в этом такого удивительного? Удивительное в этой гипотезе то, что:\nХотя это не доказано, похоже, что оно всегда сводится к 1, независимо от того, какое число вы берете\nВот в чем крутизна.\nА? А как насчет триллиона или квадриллиона\u0026hellip;?\nЕсли вы подумали об этом, то вы очень проницательны. На самом деле, с помощью компьютеров это было проверено вплоть до \u0026ldquo;2 в 68-й степени\u0026rdquo;, и все они достигают 1. Невероятно\u0026hellip;\nНо не было теоретически доказано, что \u0026ldquo;все будет именно так\u0026rdquo;. Вот что называется \u0026ldquo;нерешенной проблемой\u0026rdquo; в мире математики.\nКто такой мистер Коллатц? Итак, дочитав до этого места, вы, возможно, спросите: \u0026ldquo;Кто вообще такой Коллатц?\u0026rdquo; Я представлю его как следует!\nИмя: Лотар Коллатц (Lothar Collatz) Гражданство: Германия Годы жизни: 1910 - 1990 Профессия: Математик (активно работал в области функционального анализа и теории чисел) Он предложил эту гипотезу в 1937 году, и с тех пор, на протяжении более 80 лет, никто не смог ее ни доказать, ни опровергнуть.\nКстати, эта проблема настолько проста, но в то же время невероятно глубока, что даже Пол Эрдёш (супер-известный математик) сказал нечто подобное.\n\u0026ldquo;Математика еще не созрела для решения проблемы Коллатца.\u0026rdquo;\nИными словами, существует теория, что человеческая математика еще не доросла до этой загадки\u0026hellip;\n\u0026ldquo;Сложные формулы\u0026rdquo; не нужны Прелесть гипотезы Коллатца в том, что каждый может с ней поиграть.\nВам нужны только ручка и бумага. Если вы напишете код на Python, вы сможете проверять это автоматически. И при этом передовые математики всерьез ломают над ней голову.\nРазве это не захватывающе?\nБонус: Код для массовой проверки Я также приложу код для проверки множества чисел за один раз.\n1 2 3 for n in range(1, 21): steps = collatz(n) print(f\u0026#34;{n}: {steps} (количество шагов: {len(steps)-1})\u0026#34;) Этот код сразу выведет последовательности Коллатца для чисел от \u0026ldquo;1 до 20\u0026rdquo;.\nВывод: Этот мир действительно странный Итак, это гипотеза Коллатца.\nХотя она очень проста Никто не может ее доказать Это огромная проблема в математическом мире Она оказалась чем-то вроде сгустка тайн.\nДаже новички в программировании могут попробовать ее, так что, пожалуйста, поиграйте!\nРекомендуемые ссылки (для тех, кому интересно) Википедия: Гипотеза Коллатца Статья Теренса Тао (на английском) Также может быть интересно создать визуализированную версию на Python! (Если будет запрос, я ее сделаю) Если вы хотите узнать больше историй о \u0026ldquo;таинственной математике × программировании\u0026rdquo;, пожалуйста, не стесняйтесь писать \u0026ldquo;расскажи больше\u0026rdquo;. В будущем я расскажу вам о гипотезе Римана, простых числах и многом другом!\n📮 Конец!\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/ru/p/collatz-conjecture/","title":"Гипотеза Коллатца"},{"content":"Как отправлять сообщения в Microsoft Teams из C++ (WinHTTP + Graph API) Хотите автоматически отправлять сообщения в чат Microsoft Teams? Для этого отлично подойдет ** Microsoft Graph API **. В этой статье мы пошагово рассмотрим ** примеры кода на C++ с использованием WinHTTP ** и ** необходимые шаги для аутентификации API **.\n🔧 Необходимая подготовка (настройка аутентификации Microsoft Graph API) 1. Регистрация приложения на портале Azure Во-первых, чтобы использовать Microsoft Graph API, необходимо зарегистрировать приложение в Azure.\nПерейдите на Azure Portal ** \u0026ldquo;Microsoft Entra ID\u0026rdquo; ** \u0026gt; ** \u0026ldquo;＋Добавить\u0026rdquo; ** \u0026gt; ** \u0026ldquo;Регистрация приложения\u0026rdquo; ** \u0026gt; ** \u0026ldquo;Новая регистрация\u0026rdquo; ** Введите любое имя приложения и нажмите «Зарегистрировать» 2. Добавление разрешений API В левом меню перейдите в «Разрешения API» Выберите ** \u0026ldquo;Microsoft Graph\u0026rdquo; ** \u0026gt; ** \u0026ldquo;Выбрать разрешения\u0026rdquo; **, найдите следующие области и нажмите ** \u0026ldquo;Обновить разрешения\u0026rdquo; ** Chat.ReadWrite User.Read ※ Если вы хотите отправлять сообщения в канал, также потребуется ChannelMessage.Send\n3. Запишите идентификатор клиента и идентификатор арендатора Сохраните следующие два значения, отображаемые на вкладке «Обзор»:\nИдентификатор приложения (клиента) Идентификатор каталога (арендатора) 4. Создание секрета клиента Перейдите на вкладку «Сертификаты и секреты» «Новый секрет клиента» \u0026gt; установите срок действия и нажмите «Добавить» ** Обязательно сразу запишите отображаемое значение (секрет) ** 🔐 Получение маркера доступа (OAuth2) Мы будем использовать поток client_credentials для получения маркера. Выполните следующую команду с помощью curl, чтобы получить маркер доступа.\n1 2 3 4 5 6 7 curl -X POST ^ https://login.microsoftonline.com/{Идентификатор_арендатора}/oauth2/v2.0/token ^ -H \u0026#34;Content-Type: application/x-www-form-urlencoded\u0026#34; ^ -d \u0026#34;client_id={Идентификатор_клиента}\u0026#34; ^ -d \u0026#34;scope=https%3A%2F%2Fgraph.microsoft.com%2F.default\u0026#34; ^ -d \u0026#34;client_secret={Секрет_клиента}\u0026#34; ^ -d \u0026#34;grant_type=client_credentials\u0026#34; Пример ответа 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... (пропущено)\u0026#34; } Используйте этот access_token для вызова Microsoft Graph API.\n💬 Пример на C++ для отправки сообщения в чат Teams Ниже приведен пример на C++ с использованием 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; } 🔍 Как получить идентификатор чата Вы можете узнать идентификатор чата, используя 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; Пример ответа 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; } ] } 📌 Примечания Этот пример — минимальная реализация. В реальных условиях: Обработка истечения срока действия маркера Проверка сертификата HTTPS Улучшенная обработка ошибок Для публикации в каналах используйте teams/{team-id}/channels/{channel-id}/messages. Для отправки вложений требуется многокомпонентная обработка или Graph Drive API. 📎 Заключение Функция Описание Graph API Официальный API для взаимодействия с Teams Регистрация приложения Необходимые процедуры аутентификации в Azure Маркер доступа Получен через OAuth2, используется для запросов Реализация C++ Вызов Graph API с использованием WinHTTP 🚀 Следующие шаги В качестве более сложных примеров также возможно:\nОтправка сообщений в каналы команды (/teams/{team-id}/channels/...) Отправка сообщений с вложениями Переключение между учетными записями ботов и пользователей Полная реализация на C++, включая получение маркера Если у вас есть пожелания, смело оставляйте комментарии!\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/ru/p/%D0%BA%D0%B0%D0%BA-%D0%BE%D1%82%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D1%8F%D1%82%D1%8C-%D1%81%D0%BE%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%B8%D1%8F-%D0%B2-microsoft-teams-%D0%B8%D0%B7-c-winhttp--graph-api/","title":"Как отправлять сообщения в Microsoft Teams из C++ (WinHTTP + Graph API)"},{"content":"Мы обобщили информацию об отметках \u0026ldquo;обязательно\u0026rdquo; в зарубежных пользовательских интерфейсах (формах) вместе с материалами руководств по UI.\n📌 Основные знаки обязательного заполнения и лучшие практики Использование звездочки (*)\nЭто наиболее распространенный и широко используемый способ, когда обязательные поля помечаются символом \u0026ldquo;*\u0026rdquo;. Однако в начале формы обязательно должно быть пояснение, например, \u0026ldquo; — обязательное поле\u0026rdquo;* (Nielsen Norman Group, California State University, Northridge). Также есть примеры использования цвета для выделения (например, красный текст). Явное указание \u0026ldquo;Required\u0026rdquo; или \u0026ldquo;(required)\u0026rdquo; в метке\nДобавление слова \u0026ldquo;Required\u0026rdquo; в текстовую метку (label) делает его понятным для программ чтения с экрана, что улучшает доступность (Deque). Совместное использование атрибутов ARIA и атрибута required в HTML5\nВ дополнение к визуальному отображению использование aria-required=\u0026quot;true\u0026quot; и \u0026lt;input required\u0026gt; позволяет программно передать обязательность поля (Deque). Использование \u0026ldquo;(optional)\u0026rdquo; для явного указания необязательных полей\nВместо обязательных полей можно использовать \u0026ldquo;(optional)\u0026rdquo; для указания необязательных, что эффективно при их смешивании. Однако Nielsen‑Norman отмечает, что \u0026ldquo;легче принимать решения, когда обязательные поля также четко обозначены\u0026rdquo; (TPGi). ✅ Краткое изложение руководств по UI Источник Содержание NN/g: Marking Required Fields in Forms Рекомендуется комбинация звездочки и пояснительного текста; отображение только необязательных полей считается недружелюбным (Nielsen Norman Group). Deque (Anatomy of Accessible Forms) ・Использование строки \u0026ldquo;Required\u0026rdquo; или изображения внутри метки.\n・Четко указано, что одной лишь цветовой индикации недостаточно. W3C Techniques (H90) Примеры включения звездочки или \u0026ldquo;(required)\u0026rdquo; в метку с определением значения в начале формы. TPGi (Doing what\u0026rsquo;s required) С учетом доступности комбинация звездочки, атрибута ARIA и текстовой вставки в метку оценивается как оптимальная. Contensis Руководство по UX форм Кратко отмечено, что важна последовательная разметка (например, * или (optional)) . ✅ Рекомендуемый подход к реализации Добавьте пояснительный текст в начале формы :\nFields marked with * are required. (Или все вместе: \u0026ldquo;All fields are required\u0026rdquo;, а если есть необязательные: \u0026ldquo;unless marked optional\u0026rdquo;)\nДобавление меток (Label) :\nНапишите, например, First Name * или Email (required). Атрибуты ARIA и HTML5 :\n1 2 \u0026lt;label for=\u0026#34;email\u0026#34;\u0026gt;Email \u0026lt;abbr title=\u0026#34;required\u0026#34;\u0026gt;*\u0026lt;/abbr\u0026gt;\u0026lt;/label\u0026gt; \u0026lt;input id=\u0026#34;email\u0026#34; required aria-required=\u0026#34;true\u0026#34;\u0026gt; Не полагайтесь только на цвет : обеспечьте поддержку как визуально, так и программно.\n🔗 Полезные ссылки (материалы руководств по UI) NN/g: Marking Required Fields in Forms (California State University, Northridge, Nielsen Norman Group, Deque) Deque: Anatomy of Accessible Forms (Deque) W3C Techniques: H90 Indicating required form controls (W3C) TPGi: Indicating mandatory fields accessibly (TPGi) Contensis: UX Forms Guidelines (Contensis) При необходимости мы также можем предоставить конкретные примеры кода HTML/CSS, шаблоны дизайна компонентов UI для Sketch или Figma и т. д. Пожалуйста, обращайтесь к нам!\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/ru/p/%D0%BE-%D0%B7%D0%BD%D0%B0%D0%BA%D0%B5-%D0%BE%D0%B1%D1%8F%D0%B7%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D0%B3%D0%BE-%D0%B7%D0%B0%D0%BF%D0%BE%D0%BB%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F-%D0%B2-%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%85-%D0%B2%D0%B2%D0%BE%D0%B4%D0%B0/","title":"О знаке обязательного заполнения в формах ввода"},{"content":"【Для начинающих】Как установить Gemini CLI на Windows \u0026ldquo;Gemini CLI\u0026rdquo; позволяет использовать генеративный ИИ Google \u0026ldquo;Gemini\u0026rdquo; из командной строки. В этой статье мы максимально просто объясним шаги по установке Gemini CLI в среде Windows.\n1. Предварительная подготовка: Установка Node.js и npm Во-первых, поскольку Gemini CLI работает в среде под названием \u0026ldquo;Node.js\u0026rdquo;, вам необходимо предварительно установить следующее:\nNode.js npm (инструмент управления пакетами, поставляемый с Node.js) npx (инструмент выполнения команд, включенный в npm) Пожалуйста, скачайте версию Node.js для Windows с официального сайта ниже (рекомендуется версия LTS):\n👉 Официальный сайт Node.js\nПосле завершения установки давайте проверим, правильно ли она выполнена, с помощью следующих команд.\n1 2 node -v npm -v 2. Запуск PowerShell Для использования Gemini CLI в Windows обычно используется PowerShell. Введите \u0026ldquo;PowerShell\u0026rdquo; в меню \u0026ldquo;Пуск\u0026rdquo; и запустите его.\n3. Установка Gemini CLI Скопируйте и вставьте следующую команду в PowerShell и выполните её:\n1 npx @google/gemini-cli Эта команда предназначена для временного выполнения пакета Gemini CLI, выпущенного Google. При необходимости может потребоваться выполнить первоначальную настройку или войти в систему.\n※ При первом запуске это может занять несколько минут. Если возникнет ошибка, пожалуйста, еще раз проверьте Node.js и ваше сетевое окружение.\n4. Установка завершена! Что дальше Теперь Gemini CLI установлен на Windows. В дальнейшем, используя Gemini из командной строки, вы сможете выполнять различные операции, такие как генерация текста и дополнение кода.\nЕсли вы хотите ознакомиться с официальной документацией или справкой, вы также можете использовать такую команду:\n1 npx @google/gemini-cli --help Заключение Давайте повторим шаги по установке Gemini CLI на Windows.\nУстановите Node.js и npm Запустите PowerShell Выполните npx @google/gemini-cli Вот и всё! Если вы хотите использовать генеративный ИИ локально, обязательно попробуйте выполнить эти шаги.\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/ru/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":"Как установить Gemini CLI в среде Windows"},{"content":"Я снова получил награду Microsoft MVP (2025-2026)! Здравствуйте, я kenji.\nУ меня объявление. В этом году я снова получил звание Microsoft MVP (Most Valuable Professional) . Это уже девятый раз, когда я получаю эту награду.\nОгромное спасибо всем, кто меня всегда поддерживает.\nЧто такое Microsoft MVP? Когда многие слышат \u0026ldquo;MVP\u0026rdquo;, они могут подумать о самом ценном игроке в спорте, но этот MVP — титул, присуждаемый тем, кто внес вклад в технологическое сообщество Microsoft .\nВ частности,\nРаспространение информации через технические блоги и социальные сети Публикация примеров кода на GitHub Выступления на учебных группах и конференциях Ответы на сайтах вопросов и ответов Технический обмен и сотрудничество с зарубежными разработчиками Участие и публикации в сообществах, объединяющих инженеров Таким образом, это система, которая оценивает деятельность по \u0026ldquo;обмену вашими знаниями и опытом ради кого-то другого\u0026rdquo;.\nПобедители есть по всему миру, но количество выбранных каждый год ограничено, и повторное получение награды — далеко не простая задача. Именно поэтому для меня большая честь получить такое признание.\nНа чем я сосредоточился в прошедшем году В этом году я сосредоточился на распространении информации с учетом \u0026ldquo;понятности\u0026rdquo; технологий и \u0026ldquo;доступности\u0026rdquo; .\nПубликация практических примеров кода на GitHub Выступления на учебных группах и конференциях (как внутри страны, так и за рубежом) Регулярное распространение информации через технические блоги и социальные сети Непрерывная деятельность по ответам на сайтах вопросов и ответов Обмен знаниями на сайтах сообществ инженеров Взаимодействие и совместная проверка с зарубежными инженерами Среди прочего, публикация кода на GitHub была особенно запоминающейся, так как я получал комментарии вроде \u0026ldquo;Это помогло мне, потому что я столкнулся с той же проблемой!\u0026rdquo;, что заставило меня осознать, что мои усилия помогают другим в их разработке.\nКроме того, на выступлениях во время мероприятий я иногда получал отзывы, такие как \u0026ldquo;Было понятно даже новичкам\u0026rdquo;, что послужило хорошим поводом задуматься о том, \u0026ldquo;что такое техническое объяснение, которое доходит до слушателя?\u0026rdquo;.\nВзгляд в следующий год Эволюция технологий происходит очень быстро, и даже просто успевать за ней сложно. Тем не менее, я считаю, что есть огромная ценность в предоставлении реальных знаний как \u0026ldquo;первичной информации\u0026rdquo; , таких как фактический опыт, полученный путем проб и ошибок, а также моменты, где я сталкивался с трудностями.\nВ следующем году я хочу попробовать свои силы в создании \u0026ldquo;визуально понятного технического контента\u0026rdquo;, включающего видео и иллюстрации . Я надеюсь увеличить количество публикуемых материалов, чтобы хоть немного помочь кому-то разрешить ситуации \u0026ldquo;Я застрял!\u0026rdquo;.\nВ заключение Титул MVP — это всего лишь ступенька на пути.\nЯ буду продолжать в своем собственном темпе, не перенапрягаясь. Но с целью быть действительно полезным кому-то.\n\u0026ldquo;Ваши исследования мне помогли\u0026rdquo; \u0026ldquo;Этот пример работает!\u0026rdquo; \u0026ldquo;Это объяснение было легко понять\u0026rdquo;\nЯ хочу продолжать быть таким инженером, о котором люди смогут сказать подобные вещи.\nСпасибо за вашу постоянную поддержку.\nGitHub: https://github.com/kenjinote Технический блог: 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/ru/p/%D1%8F-%D1%81%D0%BD%D0%BE%D0%B2%D0%B0-%D0%BF%D0%BE%D0%BB%D1%83%D1%87%D0%B8%D0%BB-%D0%BD%D0%B0%D0%B3%D1%80%D0%B0%D0%B4%D1%83-microsoft-mvp-2025-2026/","title":"Я снова получил награду Microsoft MVP (2025-2026)"},{"content":"Привлекательность и проблемы разработки с Win32API + C++ Для тех, кто хочет освоить разработку приложений под Windows, Win32API + C++ по-прежнему остается мощным выбором. Эта комбинация, позволяющая взаимодействовать с ОС на минимальном расстоянии, сочетает в себе высокую скорость и гибкость.\nС другой стороны, поскольку она сильно отличается от современных стилей разработки, для ее освоения потребуется решимость.\nНа этой странице, с точки зрения действующего разработчика приложений под Windows , мы наглядно объясним ее преимущества и недостатки.\nПреимущества Сверхбыстрое нативное выполнение Поскольку C++ и Win32API работают на уровне, наиболее близком к ОС, лишних накладных расходов практически нет. Эффективность использования процессора и памяти чрезвычайно высока, и она может похвастаться подавляющей скоростью выполнения .\nВысокая гибкость и свобода Вы можете самостоятельно и детально контролировать любое поведение приложения, такое как управление окнами, асинхронная обработка, интеграция COM и управление процессами. Также возможно создание специализированных инструментов и собственных фреймворков.\nЛегкость распространения без среды выполнения Поскольку не требуются внешние среды выполнения, такие как .NET или Java, приложение можно распространять в виде одного исполняемого файла . Проблемы при распространении возникают редко, и привлекает то, что его легко запустить даже без установщика.\nВозможность создания легковесных приложений Поскольку требуется лишь минимальная конфигурация, характерной чертой является то, что объем используемой памяти очень мал . Приложение будет комфортно работать даже на ПК с низкими характеристиками и в средах виртуальных машин.\nВозможен расширенный контроль на уровне ОС Также можно реализовать управление, которое сложно выполнить с помощью обычных языков и библиотек , такое как глобальные хуки мыши и клавиатуры, тонкая настройка стилей окон и операции с системным меню.\nНедостатки Низкая эффективность разработки Создание графического интерфейса пользователя (GUI) также должно выполняться полностью с помощью кода, и для создания одной кнопки могут потребоваться десятки строк кода . Внесение изменений при перепроектировании также затруднено, а производительность ниже по сравнению с разработкой с использованием фреймворков UI.\nСклонность к снижению ремонтопригодности Содержит много кода со специальной структурой , такого как циклы сообщений и оконные процедуры, что затрудняет его чтение и повторное использование. Есть также аспекты, которые делают его непригодным для командной разработки или долгосрочной поддержки.\nАдаптация к современному UI хлопотна Сложно адаптироваться к UX, востребованному в последние годы , такому как поддержка высокого DPI, сенсорных интерфейсов, специальных возможностей и темного режима. Каждый из них нужно обрабатывать вручную, что требует больших усилий.\nНе поддерживает кроссплатформенность Поскольку это API исключительно для Windows, его невозможно перенести на macOS или Linux . Если предполагается развертывание на нескольких платформах, потребуется выбрать другую технологию.\nОчень высокая стоимость обучения Вы должны понимать концепции и механизмы, которые редко используются сегодня , такие как дескрипторы (handles), GDI, COM и OLE. Многие документы также устарели, а обучение требует времени и терпения.\nПодходящие применения Легковесные инструменты , такие как средства запуска файлов и помощники по горячим клавишам Системные утилиты , такие как управление буфером обмена и управление IME Приложения для нативного контроля , такие как глобальные хуки и захват окон Вспомогательные инструменты для драйверов , тесно связанные с аппаратным обеспечением Неподходящие применения Приложения для обычных потребителей , где важен современный UI / UX Создание прототипов и разработка MVP , где приоритетом является скорость Крупномасштабные проекты , предполагающие долгосрочную эксплуатацию и командную разработку Кроссплатформенные продукты , которые должны поддерживать несколько ОС Итоговая оценка Критерий Оценка Скорость выполнения ◎ Очень быстро Эффективность памяти ◎ Отлично Скорость разработки × Медленно Ремонтопригодность × Низкая Кроссплатформенность × Не поддерживается Поддержка современного UI × Слабая Свобода контроля ОС ◎ Подавляюще высокая Заключение Win32API + C++ — это инструмент, подходящий для разработчиков, которые «хотят обрабатывать все в ОС самостоятельно». Хотя его мощь огромна, обучение и использование требуют соответствующей решимости.\nСтоит ли делать такой «осознанный выбор», зависит от характера приложения, которое вы стремитесь создать.\nПогрузиться в мир #include \u0026lt;windows.h\u0026gt; , не полагаясь на фреймворки GUI или современные языки — этот выбор по-прежнему имеет смысл.\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/ru/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":"Преимущества и недостатки создания программ с использованием Win32API + C++"},{"content":"Если вы хотите использовать libcurl (с поддержкой OpenSSL) в Visual Studio, то установка vcpkg — это простой и рекомендуемый способ libcurl часто используется, когда вы хотите работать с HTTP-соединениями в C++. Но настройка сборки и зависимостей может оказаться неожиданно сложной задачей.\nВ таких случаях на помощь приходит инструмент управления библиотеками C++ от Microsoft — ** «vcpkg» ** . В этот раз я расскажу о шагах по использованию vcpkg для установки libcurl (с поддержкой OpenSSL) и его бесперебойного использования в Visual Studio.\nУстановка vcpkg (только для тех, кто еще не установил) Сначала давайте установим vcpkg. Пожалуйста, выполните следующие шаги в PowerShell.\n1 2 3 git clone https://github.com/microsoft/vcpkg cd vcpkg .\\bootstrap-vcpkg.bat ※ Если у вас еще не установлен Git, установите его с официального сайта Git.\nУстановка libcurl (с поддержкой OpenSSL) Затем мы используем vcpkg для установки libcurl. Чтобы указать 64-битную версию, совместимую с OpenSSL, выполните следующую команду.\n1 vcpkg install curl[ssl] --triplet x64-windows При выполнении этой команды необходимые зависимости (такие как OpenSSL) также будут настроены автоматически.\nНастройка интеграции с Visual Studio Чтобы упростить использование библиотек, установленных с помощью vcpkg, из ваших проектов Visual Studio, настройте интеграцию с помощью следующей команды.\n1 vcpkg integrate install После этой настройки вы сможете автоматически использовать #include \u0026lt;curl/curl.h\u0026gt; в проектах Visual Studio, и вам больше не нужно будет вручную настраивать пути к библиотекам или параметры компоновщика.\nВ заключение Теперь вы готовы использовать libcurl (с поддержкой OpenSSL) в Visual Studio.\nС помощью vcpkg вы можете управлять всеми сложными зависимостями сразу Легко установить libcurl с помощью vcpkg install curl[ssl] --triplet x64-windows Автоматическая интеграция с Visual Studio с помощью vcpkg integrate install После этого просто включите заголовочный файл в свой проект и начните разработку с использованием API libcurl. Воспользуйтесь удобным vcpkg, чтобы значительно повысить эффективность разработки.\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/ru/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":"[Для начинающих] Шаги по установке libcurl (с поддержкой OpenSSL) в Visual Studio с помощью vcpkg"},{"content":"«Духовная безопасность», необходимая, чтобы не быть втянутым в теории заговора Просматривая интернет, иногда можно наткнуться на разговоры в духе «теорий заговора».\n«А нет ли кого-то, кто тайно управляет этим событием?» «Может, настоящая правда скрыта?» Наверняка многие из вас видели, как подобные высказывания распространяются в правдоподобной форме.\nЧтобы не слишком втягиваться в такую информацию, важны не только «знания» и «способность мыслить», но и состояние души, то есть обеспечение «духовной безопасности».\nНиже представлены 6 полезных подходов для этого.\nНе связывайте сразу тревогу и «ответы» Главная особенность теорий заговора — это то, что они предлагают ясные и понятные \u0026ldquo;ответы\u0026rdquo; на наши тревоги и сомнения.\nНапример, на вопросы:\n«Почему происходят такие инциденты?» «Кому это выгодно?» когда предлагается сценарий вроде «на самом деле этим тайно управляет тот-то», мы склонны с ним соглашаться.\nНо именно когда вы чувствуете тревогу, важно не делать поспешных выводов и отложить решение.\n«Способность оставаться в неведении» — это также признак интеллектуальной зрелости.\nНамеренно расширяйте источники информации Многие из тех, кто увлекается теориями заговора, склонны сосредоточенно смотреть только на информацию с \u0026ldquo;похожими взглядами\u0026rdquo;.\nЭто называется «предвзятостью подтверждения» — психологическое искажение, при котором человек сталкивается только с информацией, подкрепляющей его уже имеющиеся убеждения.\nОсобенно алгоритмы социальных сетей и видеохостингов постоянно предлагают посты, которые вам, вероятно, понравятся, из-за чего кругозор может естественно сузиться.\nСознательное:\nОбращение к СМИ с разными точками зрения Просмотр зарубежных новостей и академических источников Прислушивание к мнениям, отличным от ваших и другие способы диверсификации источников информации помогают избежать рисков.\nНе думайте: «Меня не обманут» Люди с хорошими знаниями или логическим мышлением на самом деле иногда легче втягиваются в теории заговора.\nУбеждение: «Я могу заметить истину, которую не видят другие» может стать фактором, затуманивающим суждение.\nКак бы мы ни были осторожны, люди могут ошибаться. Именно поэтому исходить из того, что и вас могут обмануть, — это более рациональный подход.\n«Сомневаться, но не делать категоричных выводов» — это ваша защита.\nСмотрите на структуру, не поддаваясь истории Теории заговора всегда сопровождаются «драматическими историями».\nСтруктура противостояния добра и зла Правители и подчиненные Пробудившийся я vs общество с промытыми мозгами Такие простые бинарные оппозиции привлекательны как история, но не всегда правильно отражают реальность.\nВ реальных событиях и движениях общества переплетено множество элементов, таких как сложные причинно-следственные связи, исторический контекст, институциональные структуры.\nВажно не поддаваться эмоциям истории и иметь структурное понимание того, «почему это происходит?».\nНе оставляйте одиночество без внимания За сильным влечением к теориям заговора может скрываться «изоляция» или «отсутствие своего места».\nКогда человек чувствует себя одиноким, он легко впадает в сильную зависимость от людей или групп, которые его понимают. Сообщества конспирологов иногда берут на себя функцию этого \u0026ldquo;места\u0026rdquo;.\nИменно поэтому усилия, направленные на то, чтобы не быть одиноким, также способствуют вашей духовной безопасности.\nНапример:\nРегулярно общаться с людьми Участвовать в сообществах, разделяющих ваши хобби и интересы Поддерживать связи не বাতাসে, но и оффлайн Такие действия способствуют душевному равновесию.\nОсознавайте важность диалога, а не отрицания Даже если кто-то из ваших близких увлекся теориями заговора, категоричное отрицание может привести к обратному эффекту.\nКогда убеждения человека отвергаются, психологически усиливается тенденция защищать их (это называется \u0026ldquo;защитным познанием\u0026rdquo;).\nВместо этого:\nВнимательно спросить: «Почему ты так думаешь?» Спокойно показать свою точку зрения: «Возможно, есть и такой взгляд» Принимая такой диалоговый подход, появляется возможность того, что кругозор собеседника расширится естественным образом.\nЗаключение: Что можно сделать, чтобы держаться подальше от теорий заговора Иметь способность не связывать сразу тревогу с ответами и уметь откладывать суждения Диверсифицировать источники информации и замечать предвзятость Признавать, что ваше суждение не абсолютно Смотреть на вещи через структуру и причинно-следственные связи, а не через истории Избегать одиночества и поддерживать связи Отвечать на теории заговора других людей диалогом, а не отрицанием Считается, что на то, увлечется ли человек теорией заговора, большее влияние оказывает психологическое состояние и окружение, чем объем знаний.\nИменно поэтому, не думая, что \u0026ldquo;со мной все в порядке\u0026rdquo;, постепенные усилия по повышению духовной безопасности в повседневной жизни станут большой опорой для того, чтобы гибко жить в будущем информационном обществе.\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/ru/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":"Что нужно, чтобы не попасться на теорию заговора"},{"content":"История разработки Low-Code / No-Code (с 1980-х годов до наших дней) Разработка Low-code / No-code — это метод разработки, который позволяет создавать приложения, веб-сайты и базы данных без специализированных знаний в программировании. Эта концепция зародилась в 1980-х годах и развивалась в виде различных платформ вместе с распространением ПК, эволюцией Интернета и расширением облачных технологий. В этой статье мы рассмотрим типичные инструменты и сервисы по десятилетиям, а также расскажем об их особенностях и ценах.\n1980-е годы: Ранний этап HyperCard (Apple, 1987) Инструмент для создания приложений для Macintosh. Экраны строились в виде карточек, а графический интерфейс (GUI) создавался с помощью перетаскивания (drag-and-drop). Также было возможно простое управление действиями с помощью собственного скриптового языка \u0026ldquo;HyperTalk\u0026rdquo;. Пользовался популярностью для прототипирования. Цена на момент выпуска составляла 49,95 долларов, а позже он предоставлялся бесплатно новым покупателям Mac. Последняя версия вышла в 1998 году, и поддержки Mac OS X и выше нет.\nFileMaker (Claris/Apple, 1985) Графическое программное обеспечение для баз данных. Инструмент реляционных баз данных, предлагающий табличное отображение данных наряду со свободным редактированием макетов и функциями скриптов. В настоящее время предлагается как \u0026ldquo;Claris FileMaker Pro\u0026rdquo;, а полная версия лицензии стоит 594 доллара (на 2024 год).\n1990-е годы: Появление приложений с GUI и корпоративной разработки Visual Basic (Microsoft, 1991) Интегрированная среда разработки (IDE), специализирующаяся на разработке приложений для Windows. Можно было легко создавать приложения, управляемые событиями, перетаскивая компоненты GUI, такие как кнопки и метки. После выпуска VB6.0 в 1998 году произошел переход к эпохе .NET.\nMicrosoft Access (1992) Инструмент разработки баз данных для Windows. Позволял проектировать реляционные базы данных и создавать формы через GUI, широко использовался для разработки корпоративных приложений общего назначения. В настоящее время предлагается как часть Microsoft 365.\nPowerBuilder (PowerSoft/Sybase, 1991) Инструмент разработки 4GL для бизнес-приложений. Поддерживал архитектуру клиент/сервер и имел сильные стороны в интеграции баз данных. В настоящее время продолжает предлагаться под эгидой SAP.\nDreamweaver (Macromedia, 1997) Инструмент WYSIWYG, позволяющий визуально создавать веб-страницы. Позволял переключаться между редактированием HTML и просмотром дизайна, а также поддерживал ASP и PHP. В настоящее время предлагается Adobe по подписке (около 34,49 долларов в месяц).\nFlash (Macromedia, 1996) Первоначально инструмент для создания векторной анимации, разработанный как FutureSplash Animator. Позже использовался для создания интерактивного веб-контента, но поддержка была прекращена в 2020 году из-за проблем с безопасностью.\nGameMaker (1999) Инструмент для создания 2D-игр для начинающих. Размещение объектов и управление событиями возможно с помощью перетаскивания. Позже добавлена поддержка скриптов (GML), и в настоящее время предлагаются различные планы для коммерческого использования.\n2000-е годы: Распространение веб-технологий и открытого исходного кода WordPress (2003) CMS с открытым исходным кодом на базе PHP и MySQL. Позволяет создавать блоги и корпоративные сайты с использованием тем и плагинов без знаний программирования. Распространяется бесплатно и является одной из самых используемых CMS в мире.\nWix (2006) Сервис no-code, позволяющий создавать веб-сайты прямо в браузере. Вы можете выбрать шаблон и редактировать его с помощью drag-and-drop. Помимо бесплатного плана, платные планы позволяют использовать собственные домены и функции электронной коммерции.\nOutSystems (2001) Платформа low-code для предприятий. Позволяет быстро разрабатывать бизнес-системы, поэтому её внедрение активно продвигается в крупных компаниях и государственных учреждениях. Поддерживает как облачные, так и локальные решения.\nScratch (MIT, 2007) Инструмент для обучения программированию, разработанный для детей. Позволяет создавать игры и анимации путем объединения цветных блоков, широко используется в образовательной среде. Предоставляется бесплатно.\nAirtable (2013) Облачный сервис, объединяющий электронные таблицы и базы данных. Внешне похож на Excel, но позволяет устанавливать связи, использовать канбан-доски, интегрироваться с API и многое другое. Широко используется как частными лицами, так и корпорациями.\n2010-е — 2020-е годы: Эпоха облаков и автоматизации В последние годы облачные инструменты low-code / no-code стремительно развиваются.\nPower Platform (Microsoft) Интегрированная платформа для разработки бизнес-приложений и автоматизации, включающая \u0026ldquo;Power Apps\u0026rdquo; и \u0026ldquo;Power Automate\u0026rdquo;. Позволяет визуально выстраивать бизнес-процессы компании с помощью drag-and-drop.\nSalesforce Lightning Platform Платформа разработки приложений, предоставляемая CRM-системой Salesforce. Позволяет создавать бизнес-приложения с помощью GUI и легко интегрироваться с другими сервисами Salesforce.\nZapier / IFTTT Инструменты автоматизации, позволяющие настраивать интеграцию между несколькими облачными сервисами без написания кода. Например, легко реализуются рабочие процессы вроде «отправить уведомление в Slack при заполнении формы Google».\nNotion (2010-е годы) Универсальное рабочее пространство, объединяющее управление документами, задачами, Wiki и многое другое. Также включает функцию пользовательских баз данных, что помогает улучшать рабочие процессы без написания кода.\nConstruct 3 / GameSalad Инструменты, позволяющие создавать игры с помощью drag-and-drop. Construct 3 поддерживает HTML5 и работает в браузере, пользуясь популярностью в сфере образования и среди инди-разработчиков.\nИсточники информации и примечания Эта статья составлена на основе официальных сайтов каждого продукта, Википедии, а также надежных материалов и статей (Apple, Microsoft, Adobe и др.). Информация о ценах по возможности отражает официальные данные на тот момент или на сегодняшний день (в основном указаны в долларах США). Большинство инструментов, появившихся после 2000-х годов, работают по модели подписки, и цены варьируются в зависимости от плана.\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/ru/p/%D0%B8%D1%81%D1%82%D0%BE%D1%80%D0%B8%D1%8F-low-code-%D0%B8-no-code/","title":"История No-Code в локальных средах"},{"content":"Что же такое FizzBuzz в конце концов? Всем привет!\nСегодня я хотел бы написать о \u0026ldquo;FizzBuzz\u0026rdquo;.\nИ те, кто скажет: \u0026ldquo;А, я знаю это!\u0026rdquo;, и те, кто подумает: \u0026ldquo;Вроде слышал, но не совсем понимаю\u0026rdquo;, пожалуйста, останьтесь со мной ненадолго. Это займет всего пару минут, и, возможно, вы скажете \u0026ldquo;Ага, понятно\u0026rdquo;.\nДействительно ли \u0026ldquo;Вы не программист, если не можете написать FizzBuzz\u0026rdquo;? В общих чертах, FizzBuzz выглядит вот так.\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) Да, это та самая знаменитая \u0026ldquo;проблема FizzBuzz\u0026rdquo;.\nВы перебираете числа от 1 до 100 по порядку,\nесли число кратно 3, выводите \u0026ldquo;Fizz\u0026rdquo;, если кратно 5, выводите \u0026ldquo;Buzz\u0026rdquo;,\nа если кратно обоим, выводите \u0026ldquo;FizzBuzz\u0026rdquo;. Всё очень просто.\nИ тем не менее, по какой-то причине, к этому часто относятся как к \u0026ldquo;минимальному тесту для программистов\u0026rdquo;. Эту задачу дают на собеседованиях, а в соцсетях то и дело встречаются высокомерные комментарии вроде \u0026ldquo;Те, кто даже FizzBuzz написать не может\u0026hellip;\u0026rdquo;.\nНо подождите минутку.\nДействительно ли можно утверждать, что \u0026ldquo;не можешь написать FizzBuzz = не умеешь программировать\u0026rdquo;?\nДело не в том, можете ли вы это сделать, а в том, находитесь ли вы в \u0026ldquo;состоянии\u0026rdquo; это сделать Конечно, для решения FizzBuzz требуется понимание синтаксиса и базовое логическое мышление. Поэтому вполне логично использовать его для \u0026ldquo;проверки основ\u0026rdquo;.\nНо послушайте.\nВ разных условиях результаты будут разными.\nНапример,\nКогда вы нервничаете перед интервьюером, которого видите впервые Когда вам внезапно дают маркер и доску, а под рукой нет редактора кода Когда вы вдруг не можете вспомнить: \u0026ldquo;Подождите, а как работает оператор остатка от деления (modulo)?\u0026rdquo; \u0026hellip; Разве такого не бывает? Мы же люди, в конце концов. Я думаю, такое случается.\nПоэтому, вместо того чтобы спрашивать \u0026ldquo;можете ли вы написать FizzBuzz\u0026rdquo;, я считаю, что гораздо важнее \u0026ldquo;можете ли вы привести себя в состояние, в котором сможете написать FizzBuzz\u0026rdquo;.\nЛовушка популярного совета \u0026ldquo;Просто тренируйтесь, и всё будет хорошо\u0026rdquo; Когда заходит речь об этом, часто звучит совет \u0026ldquo;Так тренируйтесь каждый день!\u0026rdquo;.\nДействительно, благодаря регулярным тренировкам вы сможете писать код быстро и без запинок, и само по себе это хорошо. Но если исходить из предпосылки \u0026ldquo;если не можешь написать FizzBuzz, ты профнепригоден\u0026rdquo;, это может превратиться в обычный страх.\nДругими словами, легко попасть в ловушку мышления, где вы чувствуете: \u0026ldquo;Я ошибся = я ни на что не годен\u0026rdquo;.\nНапример, когда вы просыпаете утром, разве вы не склонны думать: \u0026ldquo;Я такой ленивый\u0026hellip;\u0026rdquo;? Но возможно, ваше тело просто сильно устало.\nТо же самое и с FizzBuzz.\nИ всё же, FizzBuzz — это действительно хороший вопрос Не поймите меня неправильно, в самой задаче FizzBuzz нет ничего плохого.\nНаоборот, я считаю, что это очень хорошо продуманный вопрос. Правила просты, и их легко расширить. Например, если вы немного измените подход, это заставит вас мыслить глубже.\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) Это пример того, как \u0026ldquo;можно написать без if-elif-else\u0026rdquo;. Выглядит немного элегантнее, не так ли?\nДругими словами, FizzBuzz — это не только про то, \u0026ldquo;смогли ли вы это сделать\u0026rdquo;, но и отличная отправная точка для понимания того, \u0026ldquo;как вы пишете\u0026rdquo; и \u0026ldquo;насколько глубоко вы понимаете процесс\u0026rdquo;.\nВ заключение Я думаю, нам не стоит придавать слишком большое значение тому, может ли человек написать FizzBuzz.\nДаже если у вас не получилось его написать, это может просто означать, что \u0026ldquo;именно в этот момент вы были не в форме\u0026rdquo;, и часто, если вы спокойно подумаете об этом позже, у вас всё получится.\nНе торопитесь, давайте двигаться шаг за шагом.\nКод пишут люди. А поскольку мы люди, мы иногда что-то забываем и иногда нервничаем. Я считаю, что вполне достаточно принимать это и понемногу двигаться вперёд.\nИтак, давайте расслабимся и напишем сегодня немного кода.\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/ru/p/fizzbuzz/","title":"FizzBuzz"},{"content":"Ханойская башня Привет!\nСегодня я хотел бы поговорить о «Ханойской башне» и показать пример программы на Python.\nЧто такое Ханойская башня? Ханойская башня — это головоломка, состоящая из трех стержней и нескольких дисков. Диски имеют разный размер, и изначально они сложены на одном стержне в порядке убывания размера сверху вниз. Правила следующие:\nЗа один раз можно перемещать только один диск. Больший диск нельзя класть поверх меньшего. Считается, что эта головоломка является отличным материалом для изучения рекурсивного мышления. Рекурсия — это метод решения проблемы путем разбиения её на более мелкие проблемы того же типа. В Ханойской башне для перемещения n дисков мы повторяем операцию перемещения n-1 дисков.\nДавайте решим Ханойскую башню на Python Ниже приведен пример кода на 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) # Пример: Перемещение 3 дисков с A на C hanoi(3, \u0026#39;A\u0026#39;, \u0026#39;C\u0026#39;, \u0026#39;B\u0026#39;) В этом коде функция hanoi вызывается рекурсивно, и отображаются шаги для перемещения дисков. Например, для 3 дисков будет получен следующий результат:\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 Таким образом, используя рекурсивный подход, даже сложные проблемы можно решать довольно просто.\nСколько времени потребуется для перемещения 64 дисков? Минимальное количество перемещений для Ханойской башни составляет 2^n - 1. Это означает, что для перемещения 64 дисков потребуется 2^64 - 1 раз, или около 1,84×10^19 перемещений. Даже если мы могли бы делать одно перемещение в секунду, это заняло бы около 584 миллиардов лет. Это примерно в 42 раза больше возраста Вселенной (около 13,7 миллиарда лет).\nСледовательно, по мере увеличения количества дисков количество необходимых перемещений растет в геометрической прогрессии. В связи с этим перемещение 64 дисков в реальности не представляется возможным.\nЗаключение Ханойская башня — это превосходная головоломка для изучения рекурсивного мышления. С помощью Python можно легко реализовать её решение. Однако стоит учитывать, что с увеличением числа дисков количество необходимых перемещений резко возрастает.\nПонимая рекурсивный подход и самостоятельно написав код, вы сможете улучшить свои навыки программирования. Обязательно попробуйте решить задачу о Ханойской башне.\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/ru/p/%D1%85%D0%B0%D0%BD%D0%BE%D0%B9%D1%81%D0%BA%D0%B0%D1%8F-%D0%B1%D0%B0%D1%88%D0%BD%D1%8F/","title":"Ханойская башня"},{"content":"Количество строк исходного кода Здравствуйте!\nСегодня я хотел бы поговорить на немного необычную тему.\nЭто разговор о том: \u0026ldquo;Насколько увеличилось количество строк исходного кода по сравнению с прошлым?\u0026rdquo;\nНапример, программное обеспечение космического шаттла состояло примерно из 420 000 строк кода. Этот код разрабатывался с использованием очень строгого процесса, чтобы соответствовать высоким стандартам качества NASA. С другой стороны, в современных крупномасштабных программных проектах нередко количество строк кода превышает десятки миллионов. Например, говорят, что кодовая база Google достигает примерно 2 миллиардов строк.\nТаким образом, масштаб программного обеспечения со временем увеличивается.\nНо, подождите минутку.\nУвеличение количества строк кода не обязательно является чем-то плохим. Естественно, что кода становится больше для добавления новых функций и удовлетворения потребностей пользователей. Однако, по мере роста количества кода увеличивается и риск появления ошибок. На самом деле, одно исследование показало, что когда проект с открытым исходным кодом превышает 1 миллион строк, частота возникновения ошибок имеет тенденцию к увеличению.\nТем не менее, не все проекты увеличивают код одинаково.\nНапример, ядро Linux составляло около 200 000 строк в версии 1.0 в 1994 году, но увеличилось до примерно 20 миллионов строк в версии 4.2 в 2015 году. Этот рост обусловлен развитием аппаратного обеспечения и добавлением новых функций.\nПоэтому количество строк исходного кода сильно варьируется в зависимости от масштаба проекта, его цели и исторического контекста.\nСамо по себе увеличение количества строк кода не является проблемой, но для поддержания качества и удобства сопровождения необходимо надлежащее управление. Важно понимать риски, связанные с ростом кода, и принимать соответствующие меры.\nВ заключение, я считаю, что важно не слишком зацикливаться на количестве строк кода, а сосредоточиться на цели и качестве проекта.\nДо новых встреч!\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/ru/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":"Количество строк исходного кода"},{"content":"Принцип Керкгоффса Всем привет!\nСегодня я бы хотел поговорить о чем-то довольно интересном и на самом деле очень важном — о «Принципе Керкгоффса».\nОй, подождите-ка.\nВозможно, кто-то из вас подумал: «Я никогда не слышал о Принципе Керкгоффса, и это звучит слишком сложно\u0026hellip;». Не волнуйтесь. Эта статья предназначена именно для вас.\nЧто значит «Безопасная криптография»? Например, кто-то подходит к вам и говорит: «Этот сейф может открыть только тот, кто знает секретный способ».\nНа первый взгляд это звучит очень надежно, не так ли?\nНо если задуматься, разве это не вызывает легкого беспокойства?\nТипа: «Если этот секрет раскроют, то всему конец, верно?»\nНа самом деле, именно поэтому и появился Принцип Керкгоффса.\nЧто же такое «Принцип Керкгоффса»? Если говорить очень кратко, то это:\nИдея о том, что «Криптография должна оставаться безопасной, даже если её механизм раскрыт» .\nТочнее говоря, «Безопасность должна зависеть только от \u0026ldquo;секретного ключа\u0026rdquo;, и это абсолютно нормально, если сам метод шифрования будет общедоступен!»\nИ наоборот, «Система, которая полагается только на секретность своего алгоритма (механизма) шифрования, считается ненадежной».\n«Безопасно, пока механизм в секрете» — это может быть немного опасно Вот очень распространенный образ мышления:\n«Я никому не показывал внутренности этого приложения, поэтому с безопасностью всё в порядке».\nЯ понимаю это чувство.\nНо это всё равно что сказать: «Поскольку никто его не видел, никто и не найдет уязвимостей, значит, всё хорошо, так?»\nВ действительности, сам факт того, что «его никто не видел», может стать риском.\nНо почему этот принцип так важен? Причина в том, что если кто-то завладеет механизмом и сможет легко его взломать, то эта криптография потерпит неудачу.\nВ качестве аналогии представьте себе дверной замок с очень сложным механизмом, который на самом деле можно открыть дубликатом, сделанным в дешевом магазине.\nВажно не то, что «Это безопасно, потому что ключ является секретом», а то, что «Даже если показать весь механизм, его невозможно открыть без правильного ключа».\nЧувство «Но разве это не страшно?» В этот момент многие люди чувствуют следующее:\n«Раскрыть весь механизм — разве это не страшно?»\nЯ понимаю эту тревогу.\nВедь вы наверняка подумаете: «Если я всё покажу, разве это не скопируют или не используют во зло?»\nНо именно в этом и заключается суть Принципа Керкгоффса.\n«Сила, которая не разрушается, даже если показать внутренности» — вот что такое настоящая безопасность.\nТем не менее, поначалу требуется немного смелости Если поставить себя на место разработчика: «Опубликовать механизм = показать свои слабые стороны», это, безусловно, заставляет нервничать.\nНо подумайте об этом.\nТо, что открыто показывает свой механизм и говорит: «Любой может проверить это», в конечном итоге вызывает больше доверия.\nЭто ведь похоже на человеческие отношения, не так ли?\n«Человек, который показывает свое истинное лицо и с которым всё равно легко ладить» — это тот, с кем чувствуешь себя спокойнее всего.\nВот и всё Принцип Керкгоффса может звучать немного теоретически, но его суть очень проста.\nВсё дело в том, чтобы «Создать механизм, который не сломается, кто бы на него ни посмотрел» .\nПравильный дизайн значит больше, чем поверхностные секреты.\nКод, который не стыдно показать, лучше, чем код, который вы не хотели бы показывать никому.\nВозможно, именно такая «сила» будет всё больше востребована в будущем.\nСпасибо за прочтение!\nТема безопасности может быть немного сложной, но в ней есть моменты, которые перекликаются с «человеческими отношениями» и «повседневным чувством безопасности».\nЯ уверен, что если вы будете изучать её понемногу, не перегружая себя, из этого выйдет что-то хорошее.\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/ru/p/printsip-kerkgofsa/","title":"Принцип Керкгоффса"},{"content":"🎯 Шаги по запуску PowerShell из C++ через C++/CLI DLL (Visual Studio 2022 / C++) ✅ Общая структура 🔹 ① Обертка CLI DLL (C++/CLI) Предоставляет функциональность для выполнения скриптов PowerShell.\n🔹 ② Вызывающая сторона Native C++ Вызывает CLI DLL для запуска скриптов PowerShell.\n🔧 Шаг 1: Создание проекта обертки CLI DLL 1. Создание проекта [Создать новый] → [C++] → Библиотека классов CLR (.NET Framework) Имя: PowerShellWrapper 💡 Если этот шаблон не отображается, установите рабочую нагрузку \u0026ldquo;Разработка классических приложений .NET\u0026rdquo;.\n2. Добавление пакета NuGet Щелкните правой кнопкой мыши проект → [Управление пакетами NuGet] Найдите и установите System.Management.Automation\n(версия 5.x или 7.x) 3. Реализация кода на стороне CLI PowerShellWrapper.h 1 2 3 4 5 6 7 8 9 10 #pragma once using namespace System; namespace PowerShellWrapper { public ref class PowerShellExecutor { public: String^ Execute(String^ script); }; } PowerShellWrapper.cpp 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 #include \u0026#34;PowerShellWrapper.h\u0026#34; using namespace System; using namespace System::Management::Automation; using namespace System::Collections::ObjectModel; String^ PowerShellWrapper::PowerShellExecutor::Execute(String^ script) { PowerShell^ ps = PowerShell::Create(); ps-\u0026gt;AddScript(script); Collection\u0026lt;PSObject^\u0026gt;^ results = ps-\u0026gt;Invoke(); System::Text::StringBuilder^ sb = gcnew System::Text::StringBuilder(); for each (PSObject^ result in results) { sb-\u0026gt;AppendLine(result-\u0026gt;ToString()); } return sb-\u0026gt;ToString(); } 🔧 Шаг 2: Вызов со стороны Native C++ 1. Создание проекта консольного приложения C++ Имя: NativeApp 2. Настройки ссылок Щелкните правой кнопкой мыши проект → [Добавить ссылку] → [Проекты] → добавьте PowerShellWrapper [Свойства конфигурации] → [C/C++] → [Поддержка общеязыковой среды выполнения] → измените на /clr 3. Код выполнения (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; } 💡 Дополнительные примечания (IDL / TLB / регистрация COM) Поскольку эта конфигурация ссылается напрямую на .NET DLL, а не на COM, IDL, TLB и регистрация COM не требуются . ✅ Финальная структура 1 2 3 4 5 Solution ├── PowerShellWrapper (C++/CLI DLL) │ └── PowerShellExecutor ├── NativeApp (C++ EXE) └── main.cpp → Вызов 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/ru/p/%D1%88%D0%B0%D0%B3%D0%B8-%D0%BF%D0%BE-%D0%B7%D0%B0%D0%BF%D1%83%D1%81%D0%BA%D1%83-powershell-%D0%B8%D0%B7-c-%D1%87%D0%B5%D1%80%D0%B5%D0%B7-c-cli-dll/","title":"Шаги по запуску PowerShell из C++ через C++/CLI DLL"},{"content":"【Windows】Как проверить статус лицензии (всего одной командой) Вы когда-нибудь задумывались о том, правильно ли активирована ваша лицензия Windows?\nВ таких случаях существует удобный способ проверить информацию о лицензии с помощью одной команды. Просто выполните следующие шаги, чтобы легко проверить текущий статус лицензии.\nКоманда для проверки статуса лицензии Вы можете использовать встроенный скриптовый инструмент Windows для отображения информации о лицензии. Вот команда, которую нужно использовать:\n1 slmgr /dli При запуске этой команды часть информации о лицензии отобразится в окне.\nКак выполнить В меню «Пуск» введите «cmd», щелкните правой кнопкой мыши «Командная строка» → «Запуск от имени администратора».\nВведите следующее в командной строке и нажмите Enter:\n1 slmgr /dli Подождав несколько секунд, вы увидите следующую информацию о лицензии.\nОсновная отображаемая информация Часть ключа продукта Тип лицензии (Retail, OEM и т. д.) Статус лицензии (действительна, просрочена, не активирована и т. д.) Что если вы хотите узнать более подробную информацию? Существуют также следующие команды:\nslmgr /dlv: Отображает более подробную информацию о лицензии slmgr /xpr: Отображает срок действия лицензии (является ли она постоянной и т. д.) Резюме Статус лицензии Windows можно легко проверить одной командой.\nПростая проверка: slmgr /dli Подробная проверка: slmgr /dlv Проверка срока действия: slmgr /xpr Если с лицензией возникнут проблемы, могут быть ограничения на обновления и некоторые функции, поэтому полезно регулярно проверять её.\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/ru/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":"Команда для проверки статуса лицензии Windows"},{"content":"Оптимизированные параметры преобразования ffmpeg для iOS Представляем команду ffmpeg для преобразования видео, чтобы оно плавно воспроизводилось на устройствах iOS (iPhone и 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 Значение каждого параметра (краткое объяснение) Параметр Описание -i input.mp4 Входной файл (исходное видео) -c:v libx264 Кодирование видео в H.264 (поддерживается iOS) -profile:v high -level 4.1 Широко совместимый профиль и уровень для iOS -vf \u0026quot;scale=1920:-2\u0026quot; Изменение размера до 1920 пикселей по ширине, высота настраивается автоматически с сохранением соотношения сторон -r 30 Преобразование частоты кадров в 30 кадров в секунду -crf 20 Качество видео (чем ниже значение, тем выше качество, рекомендуется 18–23) -preset slow Баланс между скоростью кодирования и степенью сжатия (slow — высокое сжатие и качество) -c:a aac Кодирование звука в формате AAC -b:a 128k Установка битрейта звука 128 кбит/с -ar 48000 Установка частоты дискретизации звука 48 кГц (рекомендуется для iOS) -movflags +faststart Помещает индекс в начало видео, чтобы ускорить ** потоковое воспроизведение в Интернете и на iOS ** Ожидается, что видео, преобразованные с этими настройками, будут иметь высокую совместимость и плавное воспроизведение на устройствах Apple, таких как iPhone и iPad.\nПри необходимости вы можете настроить размер файла и качество изображения, изменив разрешение или битрейт. Если вам нужно высокое качество, попробуйте установить -crf около 18, а если вы хотите уменьшить размер файла, установите его на 22–25.\n","date":"2025-03-02T04:16:07+09:00","image":"http://kenji.blog/p/ios-%E5%90%91%E3%81%91%E3%81%AE-ffmpeg-%E3%83%91%E3%83%A9%E3%83%A1%E3%83%BC%E3%82%BF/img_hu6ca6c354dba8425c4a9e54b9842ad89b_30790_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/ru/p/%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D1%8B-ffmpeg-%D0%B4%D0%BB%D1%8F-ios/","title":"Параметры ffmpeg для iOS"},{"content":"Шаги по восстановлению устройств Android (Google Pixel) Если ваше устройство Google Pixel столкнулось с серьезными системными проблемами, такими как «циклическая перезагрузка (bootloop)», «зависание на экране с логотипом» или «крайне нестабильная работа», вы можете использовать официальный инструмент Google «Pixel Update and Software Repair» для безопасного восстановления (ремонта) программного обеспечения устройства через браузер.\nВ этой статье подробно описываются конкретные шаги и важные моменты.\n1. Доступ к инструменту восстановления Сначала перейдите на следующую официальную страницу инструмента восстановления через браузер (рекомендуется Google Chrome или Microsoft Edge) на вашем ПК (Windows или Mac).\n🔗 Официальный сайт Pixel Update and Software Repair\n※Внимание※ При выполнении процесса восстановления все данные на устройстве (фотографии, приложения, контакты и т. д.) могут быть полностью удалены (сброшены) . Если устройство все еще можно использовать, обязательно заранее сделайте резервную копию на Google Диск или аналогичный сервис.\n2. Подготовка перед восстановлением Чтобы процесс прошел гладко, подготовьте следующее.\nЗарядка аккумулятора Если питание отключится в процессе, устройство может превратиться в «кирпич» (полностью сломаться). Убедитесь, что аккумулятор заряжен как минимум на 50%, а лучше полностью. Использование оригинального USB-кабеля Настоятельно рекомендуется использовать оригинальный кабель USB-C, который поставлялся с устройством, чтобы обеспечить стабильную передачу данных. (При необходимости) Установка драйверов Если вы используете ПК с Windows, устройство может не распознаваться правильно. В этом случае установите Google USB Driver . 3. Конкретные шаги по восстановлению После завершения подготовки следуйте инструкциям на экране для продолжения восстановления.\nStep 1: Выбор оператора и подключение устройства Когда вы откроете сайт, сначала появится экран выбора оператора мобильной связи. Если ваше устройство работает без SIM-карты или не привязано к оператору, выберите «Другое (Other)» и т. п. После этого подключите ПК и устройство Pixel с помощью USB-кабеля.\nStep 2: Переход в режим Rescue Mode (Fastboot Mode) Следуя инструкциям на экране, при выключенном устройстве одновременно нажмите и удерживайте кнопку питания и кнопку уменьшения громкости , чтобы запустить режим Fastboot (экран с черным фоном и лежащим логотипом Android).\nStep 3: Распознавание устройства на ПК При нажатии кнопки «Подключить устройство» в браузере откроется всплывающее окно, и подключенное устройство Pixel отобразится в списке. Выберите нужное устройство и разрешите подключение.\nStep 4: Загрузка и установка программного обеспечения После распознавания устройства автоматически будет выбрана оптимальная версия ОС Android (прошивка). При нажатии кнопки «Установить» начнется загрузка программного обеспечения на ПК и последующая запись (прошивка) на устройство.\n⚠️ Предупреждение: Во время этого процесса ни в коем случае не отключайте USB-кабель и не выключайте ПК.\nStep 5: Завершение и первоначальная настройка Если индикатор выполнения достигнет 100% и появится сообщение «Готово», восстановление прошло успешно. Устройство автоматически перезагрузится, и появится экран первоначальной настройки (экран «Привет»), как при покупке.\nЗаключение Официальный инструмент восстановления Google Pixel — это отличный инструмент, который позволяет безопасно перепрошить устройство всего несколькими кликами в браузере, без необходимости напрямую использовать специальные команды (adb или fastboot).\nПрежде чем нести неисправное устройство в сервисный центр, попробуйте выполнить эти шаги, так как они могут легко решить проблему. Надеемся, это будет вам полезно.\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/ru/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)"},{"content":"Отправка электронной почты Gmail с помощью curl 1. Получение пароля приложения https://myaccount.google.com/apppasswords Нажмите на ссылку выше и введите имя приложения. Сохраните сгенерированный пароль.\n2. Отправка электронной почты с помощью команды curl Выполните следующую команду.\nВ приведенном ниже примере содержимое письма написано в mail.txt.\n1 2 3 4 5 6 From: from@gmail.com To: to@gmail.com Subject: Тестовое письмо Content-Type: text/plain; charset=\u0026#34;UTF-8\u0026#34; Это тестовое письмо. Создайте указанный выше файл и выполните следующую команду.\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 ※ Пожалуйста, замените xxxxxxxxxxxxxxxx на пароль вашего приложения.\n","date":"2025-02-27T02:13:31+09:00","image":"http://kenji.blog/p/gmail%E3%82%92curl%E3%81%8B%E3%82%89%E9%80%81%E3%82%8B/img_hua1028a8ea194106f3853f4bdf4e1e991_75790_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/ru/p/%D0%BE%D1%82%D0%BF%D1%80%D0%B0%D0%B2%D0%BA%D0%B0-%D1%8D%D0%BB%D0%B5%D0%BA%D1%82%D1%80%D0%BE%D0%BD%D0%BD%D0%BE%D0%B9-%D0%BF%D0%BE%D1%87%D1%82%D1%8B-gmail-%D1%81-%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E-curl/","title":"Отправка электронной почты Gmail с помощью curl"},{"content":"Введение в пример кода с использованием стандартной библиотеки.\nСкачивание и отображение изображения 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() # Сохранить во временный файл и отобразить 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;Произошла ошибка: {e}\u0026#34;) finally: if \u0026#39;tmp\u0026#39; in locals(): os.unlink(tmp.name) # Удалить временный файл ","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/ru/p/python%E3%82%B3%E3%83%BC%E3%83%89%E7%89%87/","title":"Фрагменты кода Python"},{"content":"Вызов API ChatGPT из curl Предполагается вызов из командной строки Windows.\n1 2 curl https://api.openai.com/v1/chat/completions -H \u0026#34;Content-Type: application/json\u0026#34; -H \u0026#34;Authorization: Bearer sk-proj-XXXXXXXXXXXXXXXXXXXX\u0026#34; -d \u0026#34;{\u0026#34;\u0026#34;model\u0026#34;\u0026#34;: \u0026#34;\u0026#34;gpt-3.5-turbo\u0026#34;\u0026#34;,\u0026#34;\u0026#34;messages\u0026#34;\u0026#34;: [{\u0026#34;\u0026#34;role\u0026#34;\u0026#34;: \u0026#34;\u0026#34;system\u0026#34;\u0026#34;, \u0026#34;\u0026#34;content\u0026#34;\u0026#34;: \u0026#34;\u0026#34;Пожалуйста, отвечайте на кансайском диалекте.\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;Вставьте сюда сообщение, которое хотите отправить\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/ru/p/%D0%B2%D1%8B%D0%B7%D0%BE%D0%B2-api-chatgpt-%D0%B8%D0%B7-curl/","title":"Вызов API ChatGPT из curl"},{"content":"Сводка акций с высокими дивидендами 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/ru/p/%D1%81%D0%B2%D0%BE%D0%B4%D0%BA%D0%B0-%D0%B0%D0%BA%D1%86%D0%B8%D0%B9-%D1%81-%D0%B2%D1%8B%D1%81%D0%BE%D0%BA%D0%B8%D0%BC%D0%B8-%D0%B4%D0%B8%D0%B2%D0%B8%D0%B4%D0%B5%D0%BD%D0%B4%D0%B0%D0%BC%D0%B8/","title":"Сводка акций с высокими дивидендами"},{"content":"Долгосрочные цели Через 1 год Запустить бизнес Создать домашнюю страницу и выпустить программное обеспечение (бесплатно) Через 2 года Годовой доход 10 миллионов иен Опубликовать книгу Выпустить программное обеспечение (платно) Через 3 года Годовой доход 100 миллионов иен Через 5 лет Годовой доход 1 миллиард иен Через 10 лет Годовой доход 10 миллиардов иен Краткосрочные цели Через 1 месяц Создать бизнес-план Через 3 месяца Привлечь около 5 миллионов иен для запуска бизнеса Через 6 месяцев Запустить бизнес Через 1 год Вывести бизнес на стабильную траекторию Ближайшие задачи Прояснение целей и видения\nЦель: Зачем создавать программное обеспечение? Пример: Решение проблем, предоставление новой ценности, таргетинг на определенную нишу и т.д. Видение: Какое будущее вы хотите реализовать с помощью программного обеспечения? Пример: Повышение эффективности бизнеса, улучшение повседневной жизни, повышение качества образования и т.д. Исследование рынка и анализ потребностей\nЦелевые пользователи: Кто будет использовать программное обеспечение? Укажите возрастную группу, профессию, интересы и т.д. Анализ конкурентов: Есть ли конкуренты в этой же области? Проанализируйте их сильные и слабые стороны. Определение потребностей: Поймите нерешенные проблемы и желания целевых пользователей. Дизайн и особенности программного обеспечения\nОсновные функции: Перечислите необходимые функции. Пример: аутентификация пользователей, хранение данных, функции аналитики и т.д. Отличительные особенности: Четко определите, что делает его уникальным по сравнению с продуктами конкурентов. Пример: простой интерфейс, использование ИИ, высокая степень настройки. Технические спецификации: Используемые языки программирования, фреймворки, базы данных и т.д. План разработки и распределение ресурсов\nГрафик разработки: Установите сроки для каждого этапа проекта. Пример: разработка прототипа, тестирование, официальный релиз. Состав команды: Необходимые кадры и навыки (программисты, дизайнеры, маркетологи и т.д.). Бюджет: Оцените затраты на разработку, маркетинг и операционные расходы. Маркетинг и модель монетизации\nМетоды продвижения: Используйте социальные сети, веб-сайты, рекламу и т.д. для повышения узнаваемости. Стратегия монетизации: Рассмотрите варианты, такие как бесплатная + платная версия, ежемесячная подписка, доход от рекламы и т.д. Стратегия привлечения пользователей: Предоставление бесплатных пробных версий, поощрение рекомендаций, создание сообщества пользователей и т.д. Операционная деятельность и масштабирование\nОперационная деятельность после релиза: Сбор отзывов пользователей, исправление ошибок, добавление функций. Стратегия роста: План по увеличению числа пользователей, выходу в другие страны и разработке новых функций. Управление рисками: Подготовка мер по устранению юридических и технических проблем. ","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/ru/p/goals/","title":"Цели"},{"content":"В последнее время я заинтересовался кожаными изделиями и приобрел несколько вещей. В связи с этим у меня также возник интерес к уходу за кожей, и я собрал несколько соответствующих средств, о которых хочу рассказать.\nНедавно приобретенные средства по уходу за кожей M.MOWBRAY DELICATE CREAM Цена: около 1,320 иен\nЭтот крем обеспечивает питание, увлажнение и придает эластичность. Он не дает блеска, но отлично подходит для кожи, нуждающейся в сильном увлажнении. У него есть небольшой запах, но он не отталкивающий. Так как крем бесцветный, он очень универсален. Поскольку у него легкая текстура, возможно, стоит использовать его немного больше по сравнению с другими кремами.\nCollonil 1909 Supreme Creme de Luxe Цена: около 1,777 иен\nИзвестный, стандартный и универсальный крем, который редко оставляет пятна. Он восстанавливает цвет кожи и делает ее увлажненной. Придает небольшой блеск. Крем белого цвета и, похоже, также обладает водоотталкивающим эффектом.\nM.MOWBRAY SHOE CREAM (Черный) Цена: около 1,000 иен\nКрем для обуви. Содержит воск, масла и органические растворители. Восстанавливает цвет кожи и придает блеск. Так как он черный, применяется для черной кожи. Я использую его для своих костюмных туфель.\nM.MOWBRAY STAIN REMOVER Цена: около 700 иен\nЭто средство шло в комплекте, когда я покупал щетку. Очиститель для обуви на водной основе. Удаляет грязь с кожи. Обильно смочите ткань и аккуратно потрите кожу, чтобы удалить грязь.\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/ru/p/%D1%83%D1%85%D0%BE%D0%B4-%D0%B7%D0%B0-%D0%BA%D0%BE%D0%B6%D0%B0%D0%BD%D1%8B%D0%BC%D0%B8-%D0%B8%D0%B7%D0%B4%D0%B5%D0%BB%D0%B8%D1%8F%D0%BC%D0%B8/","title":"Уход за кожаными изделиями"},{"content":"Здравствуйте! Сегодня поговорим о \u0026ldquo;Бритве Хэнлона\u0026rdquo; Сегодня я хочу написать об идее с немного странным названием \u0026ldquo;Бритва Хэнлона\u0026rdquo;. Услышав только название, вы можете подумать: \u0026ldquo;Звучит как-то пугающе\u0026hellip;\u0026rdquo;, но на самом деле это очень знакомая концепция, которая дает нам добрый взгляд на вещи.\nВы когда-нибудь думали: \u0026ldquo;Этот человек, наверное, меня ненавидит\u0026hellip;\u0026rdquo;? Например, у вас когда-нибудь был такой опыт?\n・Медленный ответ в LINE ・Мы встретились глазами, но со мной не поздоровались ・Мою просьбу проигнорировали\nВ такие моменты вы можете забеспокоиться и подумать: \u0026ldquo;Неужели меня ненавидят?\u0026rdquo; Со мной такое часто бывает. И я сам себя накручиваю.\nЧто такое Бритва Хэнлона? И тут появляется \u0026ldquo;Бритва Хэнлона\u0026rdquo;.\nЭтот термин изначально на английском звучит как \u0026ldquo;Hanlon\u0026rsquo;s Razor\u0026rdquo;. Примерный смысл таков:\n\u0026ldquo;Никогда не приписывайте злому умыслу то, что вполне можно объяснить глупостью.\u0026rdquo;\n\u0026hellip;Звучит немного резковато, не правда ли. Если сказать чуть мягче:\n\u0026ldquo;Даже если кажется, что другой человек ведет себя злонамеренно, это может быть просто ошибкой или невнимательностью.\u0026rdquo;\nВот такая идея.\nКто это сказал? Кто такой Роберт Дж. Хэнлон? Считается, что этот термин впервые появился в книге под названием \u0026ldquo;Murphy’s Law Book Two\u0026rdquo;, опубликованной в 1980 году.\nИдея, предложенная одним из авторов, Робертом Дж. Хэнлоном , была использована как есть, и стала называться \u0026ldquo;Бритвой Хэнлона\u0026rdquo;.\nКстати, эта \u0026ldquo;Бритва (Razor)\u0026rdquo; похожа на философский инструмент, означающий \u0026ldquo;давайте отсечем все лишнее и будем думать просто\u0026rdquo;, фраза, используемая для организации мыслей, наряду с бритвой Оккама.\nДумать, что \u0026ldquo;был злой умысел\u0026rdquo;, тяжело Например, когда ваше электронное письмо игнорируют на работе.\nДумать \u0026ldquo;Почему они не отвечают? Они меня ненавидят?\u0026rdquo; заставляет вас становиться все более негативным, не так ли.\nНо, если хорошенько подумать, ・Случайно пропустили ・Написали ответ, но не отправили ・Уведомление затерялось в смартфоне\nТакие причины на удивление часты. И мы сами совершаем такие ошибки.\nСтранно, как мы снисходительны к своим ошибкам, но строги к чужим Например, когда вы забыли ответить на сообщение друга в LINE.\nВы отвечаете: \u0026ldquo;Ой, извини! Не заметил уведомление~\u0026rdquo; без всякого злого умысла, верно?\nНо когда кто-то другой делает то же самое с вами, вы думаете: \u0026ldquo;Меня проигнорировали\u0026rdquo;.\nЭто случается часто. Люди очень хорошо понимают свои собственные обстоятельства, но чужие обстоятельства увидеть сложнее.\nПредполагать, что \u0026ldquo;есть злой умысел\u0026rdquo;, на самом деле невыгодно Когда кто-то что-то делает, если вы предполагаете, что у него \u0026ldquo;злой умысел\u0026rdquo;, вы делаете этого человека врагом в своем сердце.\nНо на самом деле, возможно, он просто неуклюж, или, возможно, он перегружен другими делами.\nКонечно, есть действительно грубые люди, и это нормально - чувствовать обиду, когда с вами плохо обращаются.\nНо лучше не предполагать, что это \u0026ldquo;наверняка злой умысел\u0026rdquo;, тогда на душе станет немного легче.\nТем не менее, это не значит, что вы должны все терпеть Пожалуйста, не поймите меня неправильно, я не хочу сказать \u0026ldquo;ты слишком много переживаешь из-за всего\u0026rdquo;.\nКогда делают что-то неприятное, это нормально думать: \u0026ldquo;Это было ужасно\u0026rdquo;.\nОднако, вместо того, чтобы предполагать \u0026ldquo;У этого человека плохой характер\u0026rdquo; или \u0026ldquo;Он пытался причинить мне боль нарочно\u0026rdquo;,\nЯ предлагаю, что было бы неплохо быть немного снисходительнее и подумать: \u0026ldquo;Может быть, были какие-то обстоятельства\u0026rdquo;.\nИтак: если посмотреть чуть добрее, мир может измениться Я думаю, что Бритва Хэнлона — это скорее \u0026ldquo;способ защитить свое сердце\u0026rdquo;, чем \u0026ldquo;быть добрым к людям\u0026rdquo;.\nКогда вы чувствуете злой умысел в чьих-то действиях, ваши собственные чувства тоже становятся напряженными.\nНо если вы можете подумать: \u0026ldquo;Возможно, это просто ошибка, или у них не было времени\u0026rdquo;, вам станет немного легче.\nВот так, это идея, которую вы можете использовать для себя.\nВ заключение: пожалуйста, поделитесь и своим опытом Большое спасибо за прочтение.\nЕсли у вас есть история, когда вы думали: \u0026ldquo;В такой момент мне было не по себе~\u0026rdquo;, пожалуйста, дайте мне знать.\nПростое выражение своего опыта словами может принести немного облегчения, не так ли.\nДо встречи!\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/ru/p/%D0%B1%D1%80%D0%B8%D1%82%D0%B2%D0%B0-%D1%85%D1%8D%D0%BD%D0%BB%D0%BE%D0%BD%D0%B0/","title":"Бритва Хэнлона"},{"content":"Базовые знания о компьютерах На этой странице объясняется, что такое компьютер.\nОпределение компьютера Компьютер - это машина, состоящая из следующих пяти устройств.\nУстройство ввода Устройство вывода Устройство хранения Устройство управления Арифметическое устройство Грубо говоря, компьютер - это машина, которая принимает определенный ввод, выполняет определенную обработку и выводит результат. Он может сохранять введенные данные, вычислять и выводить их. Устройство управления играет роль в управлении четырьмя вышеупомянутыми устройствами.\nЧто нужно для работы компьютера Для работы компьютера, помимо оборудования (аппаратного обеспечения), необходимы программы (программное обеспечение).\nПрограммы указывают компьютеру, какую обработку выполнять. Программы пишутся в формате, который может понять компьютер.\nПример программы: Программа, которая вычисляет сумму целых чисел от 1 до введенного числа\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() { // Выделение необходимой памяти int n, sum = 0; // Вывод cout \u0026lt;\u0026lt; \u0026#34;Введите целое число: \u0026#34;; // Ввод cin \u0026gt;\u0026gt; n; // Вычисление for (int i = 1; i \u0026lt;= n; i++) { // Вычисление sum += i; } // Вывод cout \u0026lt;\u0026lt; \u0026#34;Сумма от 1 до \u0026#34; \u0026lt;\u0026lt; n \u0026lt;\u0026lt; \u0026#34; равна \u0026#34; \u0026lt;\u0026lt; sum \u0026lt;\u0026lt; \u0026#34;.\u0026#34; \u0026lt;\u0026lt; endl; // Завершение return 0; } Программы преобразуются в машинный код компилятором, превращаясь в формат, который может выполнить компьютер.\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/ru/p/%D0%B1%D0%B0%D0%B7%D0%BE%D0%B2%D1%8B%D0%B5-%D0%B7%D0%BD%D0%B0%D0%BD%D0%B8%D1%8F-%D0%BE-%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%B0%D1%85/","title":"Базовые знания о компьютерах"},{"content":"Рекомендуемые приложения для iOS 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/ru/p/rekomenduemye-prilozheniya-dlya-ios/","title":"Рекомендуемые приложения для iOS"},{"content":"Старая пара, осел и наша проблема \u0026ldquo;кого слушать\u0026rdquo; Всем привет!\nСегодня я хотел бы написать о том, над чем немного задумался, прочитав \u0026ldquo;Историю о старой паре и осле\u0026rdquo;.\nНаверняка многие из вас слышали о ней. Это та самая знаменитая басня.\nЧто такое \u0026ldquo;История о старой паре и осле\u0026rdquo;? Давным-давно жили-были старик, старуха и осел.\nСначала старик ехал на осле, а старуха шла пешком. Тогда один прохожий сказал:\n\u0026ldquo;Что за мужчина, заставляет свою старую жену идти пешком, а сам едет!\u0026rdquo;\nУслышав это, старая пара решила, что в этот раз на осла сядет старуха. Тогда другой человек сказал:\n\u0026ldquo;Как возмутительно, что женщина едет на осле и заставляет мужчину идти пешком!\u0026rdquo;\nНу хорошо, тогда в этот раз они оба сели на осла. И тут им снова говорят:\n\u0026ldquo;Бедный осел, для него слишком тяжело везти двоих!\u0026rdquo;\nВ таком случае они оба слезли с осла и пошли пешком. Но тут\u0026hellip;\n\u0026ldquo;Почему никто не едет верхом, хотя у них есть осел?\u0026rdquo;\nВ конце концов старая пара совсем растерялась.\n\u0026ldquo;Давайте выслушаем мнение каждого\u0026rdquo; — это, конечно, правильный аргумент. Но\u0026hellip; Эта история часто воспринимается как поучение о том, что \u0026ldquo;ах, если вы будете заботиться только о том, что думают другие, этому не будет конца\u0026rdquo;.\nНо в реальности всё не так просто.\nЧасто можно встретить людей, которые говорят: \u0026ldquo;Не обращай внимания на то, что думают другие!\u0026rdquo;\nНо когда дело доходит до того, можете ли вы игнорировать всё, становится немного сложнее. Например, когда публикуете что-то в социальных сетях. Когда думаете о том, что сказать на корпоративной вечеринке. Невозможно не беспокоиться о чьей-то реакции.\nЭто потому, что \u0026ldquo;мнения других\u0026rdquo; иногда касаются нашей безопасности и того, как нас оценивают.\nИ всё же, если вы слишком подвержены влиянию, это становится болезненным Думаю, старая пара в этой истории сначала просто думала: \u0026ldquo;Что же нам делать?\u0026rdquo;\nНо как бы вы ни поступали, всегда найдется \u0026ldquo;кто-то\u0026rdquo;, кто будет жаловаться.\nА потом они начинают ходить по кругу: \u0026ldquo;Ну, тогда давай сделаем так\u0026rdquo; или \u0026ldquo;Может, всё-таки вот так?\u0026rdquo;, и не успеете оглянуться, как потеряете из виду то, что хотели сделать.\nТакое часто случается и в нашей повседневной жизни.\nОжидания начальника, слова родителей, количество \u0026ldquo;лайков\u0026rdquo; в соцсетях. Подстраиваясь под это, не теряете ли вы иногда понимание того, чего на самом деле хотите вы сами?\nВажно выбирать, \u0026ldquo;кого слушать\u0026rdquo; Так что же нам делать? Правильного ответа нет.\nОднако \u0026ldquo;следовать мнению каждого\u0026rdquo; практически невозможно.\nПоэтому я считаю важным самому выбирать, \u0026ldquo;кого слушать\u0026rdquo;.\nНапример, \u0026ldquo;прислушиваться к советам только тех людей, которых вы уважаете\u0026rdquo; или \u0026ldquo;использовать в качестве критерия то, сможете ли вы убедить себя в прошлом\u0026rdquo;.\nДаже если это всего лишь один критерий, который заставляет вас подумать: \u0026ldquo;Я хочу в это верить\u0026rdquo;, шума в мире станет немного меньше.\nПоэтому, когда вы немного устали Возможно, стоит вспомнить историю о \u0026ldquo;старой паре и осле\u0026rdquo;.\nВедь так легко начать беспокоиться о том, что думают другие, не так ли?\nНо если вы будете отвечать всем, то в итоге сами слезете с осла.\nИногда, если вы сможете подумать: \u0026ldquo;Может быть, стоит поставить свои чувства на первое место\u0026rdquo;, на душе станет чуточку легче.\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/ru/p/%D0%B8%D1%81%D1%82%D0%BE%D1%80%D0%B8%D1%8F-%D0%BE-%D1%81%D1%82%D0%B0%D1%80%D0%BE%D0%B9-%D0%BF%D0%B0%D1%80%D0%B5-%D0%B8-%D0%BE%D1%81%D0%BB%D0%B5/","title":"История о старой паре и осле"},{"content":"Почему было почти невозможно создать синий светодиод Введение в англоязычный документальный фильм. Очень интересно. У меня сложилось сильное впечатление, что японец, решивший эту чрезвычайно сложную проблему, поначалу не был высоко оценен в Японии.\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/ru/p/%D0%BF%D0%BE%D1%87%D0%B5%D0%BC%D1%83-%D0%B1%D1%8B%D0%BB%D0%BE-%D0%BF%D0%BE%D1%87%D1%82%D0%B8-%D0%BD%D0%B5%D0%B2%D0%BE%D0%B7%D0%BC%D0%BE%D0%B6%D0%BD%D0%BE-%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D1%82%D1%8C-%D1%81%D0%B8%D0%BD%D0%B8%D0%B9-%D1%81%D0%B2%D0%B5%D1%82%D0%BE%D0%B4%D0%B8%D0%BE%D0%B4/","title":"Почему было почти невозможно создать синий светодиод"},{"content":"Начинаем разработку на Qt в VSCode: Как установить Qt Extension Pack Привет, я Kenji. В этот раз я расскажу «Как настроить среду разработки Qt в Visual Studio Code (далее VSCode)».\nВ последнее время, в дополнение к официальному Qt Creator, всё больше людей хотят разрабатывать приложения Qt с использованием легковесного и расширяемого VSCode. Тем, кто ищет такую возможность, я рекомендую ** «Qt Extension Pack» **. Просто установив этот пакет расширений, вы получите все основные расширения, связанные с Qt, одновременно.\nЦелевая аудитория Те, кто хочет начать разработку GUI-приложений с использованием Qt Те, кто хочет разрабатывать в VSCode, а не в Qt Creator Те, кому лень искать расширения по одному Предварительные требования VSCode уже установлен (Вы можете бесплатно скачать его с официального сайта) Сама библиотека Qt установлена (Официальный сайт Qt) Что такое Qt Extension Pack? Qt Extension Pack — это пакет расширений для VSCode. Установив его, автоматически добавятся следующие функции:\nПоддержка файлов .ui (Qt Designer) Подсветка синтаксиса для файлов .pro и .qrc Автодополнение кода C++ для Qt, поддержка сборки и отладки Qt Resource Browser (просмотр ресурсов) Инструкция по установке 1. Откройте VSCode Сначала запустите VSCode.\n2. Откройте панель расширений Нажмите на панель активности слева (иконка с квадратиками), чтобы открыть «Расширения».\nИли вы можете нажать сочетание клавиш Ctrl + Shift + X.\n3. Найдите «Qt Extension Pack» Введите следующее ключевое слово в строку поиска:\n1 Qt Extension Pack 4. Нажмите кнопку установки Когда появится нужный пакет, нажмите кнопку «Установить». Это установит сразу несколько следующих расширений:\nQt Language Support QML Support Qt Designer Integration CMake Tools (необходимо для разработки Qt с поддержкой CMake) Дополнение к настройкам проекта (пример CMake + Qt) Если вы используете Qt на базе CMake, рекомендуется комбинация со следующими расширениями:\nCMake Tools CMake Language Support Кроме того, если вы добавите следующий код в CMakeLists.txt, интеграция с Qt будет проходить более гладко:\n1 2 find_package(Qt6 REQUIRED COMPONENTS Widgets) target_link_libraries(MyApp PRIVATE Qt6::Widgets) Бонус: Как открывать файлы .ui? Файлы .ui можно редактировать в Qt Designer. В VSCode вы сможете нажать правой кнопкой мыши на файл .ui → выбрать Open with Qt Designer (необходимо, чтобы Qt Designer был включен в переменную среды PATH).\nЗаключение Шаг Описание 1 Запуск VSCode 2 Открытие панели расширений 3 Поиск «Qt Extension Pack» 4 Нажатие кнопки установки Создание среды Qt в VSCode стало намного проще, чем раньше. Она имеет достаточно функций, чтобы служить альтернативой Qt Creator, и мы рекомендуем её тем, кто хочет работать легко и быстро.\nРекомендуемые ссылки Официальный сайт Qt Qt Extension Pack - Visual Studio Marketplace Официальный сайт VSCode Расширение CMake Tools В заключение В будущем я планирую продолжить разработку, используя UI-инструменты Qt и QML в этой среде. В следующий раз я планирую объяснить, ** как собрать и запустить приложение Hello World на Qt из VSCode **.\nДо скорого!\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/ru/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":"Я попробовал установить Qt Extension Pack в Visual Studio Code"},{"content":"Как проверить, заблокирован ли ваш iPhone под оператора Главный экран ＞ Настройки ＞ Основные ＞ Об этом устройстве ＞ Блокировка оператором\nПроверьте, написано ли там Нет ограничений SIM или SIM-карта заблокирована.\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/ru/p/%D0%BA%D0%B0%D0%BA-%D0%BF%D1%80%D0%BE%D0%B2%D0%B5%D1%80%D0%B8%D1%82%D1%8C-%D0%B7%D0%B0%D0%B1%D0%BB%D0%BE%D0%BA%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD-%D0%BB%D0%B8-%D0%B2%D0%B0%D1%88-iphone-%D0%BF%D0%BE%D0%B4-%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B0/","title":"Как проверить, заблокирован ли ваш iPhone под оператора"},{"content":"Обзор 1 Класс P — это класс проблем, которые могут быть разрешены за полиномиальное время на детерминированной машине Тьюринга, а класс NP — это класс проблем, для которых, когда дается доказательство того, что ответ — «да» (называемое свидетелем), правильность свидетеля может быть проверена за полиномиальное время (это называется верификацией). Поскольку проблемы, разрешимые за полиномиальное время, также проверяемы за полиномиальное время, очевидно, что P⊆NP, но неясно, является ли P строгим подмножеством NP. Хотя доказательства еще нет, многие исследователи верят, что P≠NP. Это предположение о том, что класс P и класс NP не равны, называется \u0026#34;проблемой P≠NP\u0026#34;. Справочный сайт : https://daigakudenki.com/np-hard/\n","date":"2024-09-11T02:22:39+09:00","permalink":"http://kenji.blog/ru/p/pnp%E4%BA%88%E6%83%B3/","title":"Проблема P≠NP"},{"content":"Я снова получил награду Microsoft MVP (2024-2025) Здравствуйте, это kenji. Сообщаю вам, что в этом году я снова получил награду Microsoft MVP (Most Valuable Professional). Это уже моя восьмая награда.\nВоспользовавшись случаем, я решил немного написать о том, что же такое MVP.\nЧто такое Microsoft MVP? Хотя это и называется MVP, речь идет не о самом ценном игроке в спорте (хотя меня иногда об этом спрашивают\u0026hellip;). Microsoft MVP (Most Valuable Professional) — это звание, присуждаемое людям, которые активно делятся своими знаниями и опытом работы с технологиями Microsoft с сообществом.\nНаписание технических блогов, ответы на вопросы на сайтах Q\u0026amp;A, публикация примеров кода, выступления на мероприятиях. Оценивается именно такая кропотливая работа: «делиться тем, что знаешь, в форме, полезной для других».\nОбладатели награды есть по всему миру, но их количество каждый год ограничено, и повторно получить ее непросто. В таких условиях я действительно благодарен за то, что меня снова удостоили этого звания.\nО причинах получения награды В этот раз я снова получил награду в категории «Developer Technologies». За последний год я занимался следующими вещами:\nНаписание статей в блоге о технологиях, связанных с Microsoft Публикация ответов на технических сайтах Q\u0026amp;A Публикация примеров кода на GitHub Выступления на учебных семинарах и технических мероприятиях и т.д. В этом нет ничего особенного, но я старался делиться «тем, что попробовал, и это сработало» или «тем, с чем возникли трудности, но удалось решить», придавая этому максимально полезную форму.\nЯ искренне рад, что это принесло такие плоды.\nО планах на будущее Мир технологий развивается очень быстро, и просто успевать за ним уже сложно. Но именно поэтому я считаю важным делиться «живой информацией»: как это работает на практике, что было непонятно.\nЯ планирую и дальше продолжать в том же духе, в своем собственном темпе, без лишнего напряжения. Буду рад, если смогу делиться информацией, которая хотя бы в какой-то форме заставит кого-то подумать: «О, это помогло».\nНадеюсь на вашу поддержку и в будущем.\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/ru/p/%D1%8F-%D1%81%D0%BD%D0%BE%D0%B2%D0%B0-%D0%BF%D0%BE%D0%BB%D1%83%D1%87%D0%B8%D0%BB-%D0%BD%D0%B0%D0%B3%D1%80%D0%B0%D0%B4%D1%83-microsoft-mvp-2024-2025/","title":"Я снова получил награду Microsoft MVP (2024-2025)"},{"content":"Что такое yt-dlp yt-dlp — это инструмент командной строки для скачивания видео с YouTube. Помимо скачивания видео, вы также можете скачивать их как аудиофайлы в формате mp3.\nСкачивание и установка Скачайте последнюю версию yt-dlp.exe со страницы релизов yt-dlp. Поместите yt-dlp.exe в любую папку. Добавьте путь к папке с yt-dlp.exe в переменную среды Path. Как использовать Запустите yt-dlp.exe в командной строке и укажите URL-адрес видео на YouTube.\n1 yt-dlp.exe \u0026#34;https://www.youtube.com/watch?v=VIDEO_ID\u0026#34; ※ В качестве аргумента достаточно использовать только часть VIDEO_ID.\nДля скачивания в виде аудиофайла mp3 выполните следующую команду.\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; Теперь видео будет скачано в текущий каталог, где была выполнена команда.\nКонец.\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/ru/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":"Как скачать видео с YouTube с помощью yt-dlp.exe"},{"content":" Футбол - Болбой @gg211204 『День, когда болбой стал героем』 Болбой, спасший команду в тот день, позже был приглашен в клуб и разделил трапезу с игроками. #Тоттенхэм #Шпоры #Моуринью #Болбой ♬ original sound - じょり Старбакс ","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/ru/p/%D1%81%D1%81%D1%8B%D0%BB%D0%BA%D0%B8-%D0%BD%D0%B0-%D0%BA%D0%BE%D1%80%D0%BE%D1%82%D0%BA%D0%B8%D0%B5-%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE/","title":"Ссылки на короткие видео"},{"content":"Всем привет!\nСегодня я хотел бы поговорить о цитатах Альберта Эйнштейна.\nМир не оценивает ваши добрые дела? 1 2 3 4 5 6 Мир никогда не оценит миллион добрых дел, которые вы совершаете. Но он будет критиковать вас за один неверный поступок... Однако не отчаивайтесь «Всегда возвышайтесь над всеми насмешками и критикой. Оставайтесь сильными.» - Альберт Эйнштейн Говорят, что эти слова произнес Эйнштейн. Они остро указывают на суровость общества, которую мы ощущаем каждый день, и предвзятость в оценках людей.\nИ все же, продолжайте подниматься «Всегда возвышайтесь над всеми насмешками и критикой. Оставайтесь сильными.»\nЭто продолжение цитаты можно считать ответом Эйнштейна на суровую реальность, упомянутую выше. Оно учит нас важности не поддаваться критике или насмешкам и продолжать двигаться вперед, веря в себя.\nПрименение учений Эйнштейна в повседневной жизни Эта цитата глубоко связана с нашей повседневной жизнью. Например, ваши усилия на работе могут быть не признаны, и только мелкие ошибки будут привлекать внимание. Или часть вашего высказывания в социальных сетях может быть вырвана из контекста и подвергнута критике.\nВ такие моменты, пожалуйста, вспомните эти слова Эйнштейна. Важно сохранять свои собственные убеждения, а не поддаваться влиянию оценок других людей.\nЗаключение Эта цитата Эйнштейна учит нас важности «жить с верой в себя, не поддаваясь влиянию оценок других». Давайте наберемся смелости идти тем путем, в который мы верим, не поддаваясь критике или насмешкам.\nИ в заключение, еще раз слова Эйнштейна.\n** «Всегда возвышайтесь над всеми насмешками и критикой. Оставайтесь сильными.» **\nНадеюсь, эти слова найдут отклик в вашем сердце и вдохновят вас сделать позитивный шаг вперед.\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/ru/p/%D1%86%D0%B8%D1%82%D0%B0%D1%82%D1%8B-%D0%B0%D0%BB%D1%8C%D0%B1%D0%B5%D1%80%D1%82%D0%B0-%D1%8D%D0%B9%D0%BD%D1%88%D1%82%D0%B5%D0%B9%D0%BD%D0%B0/","title":"Цитаты Альберта Эйнштейна"},{"content":"Ниже приведен простой код на языке C, который генерирует простые числа в заданном диапазоне. В этом примере перечисляются простые числа от 1 до 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;Введите максимальное значение диапазона для генерации простых чисел: \u0026#34;); scanf(\u0026#34;%d\u0026#34;, \u0026amp;n); printf(\u0026#34;Простые числа от 1 до %d следующие:\\n\u0026#34;, n); printPrimes(n); return 0; } Этот код работает следующим образом:\nФункция isPrime: Определяет, является ли заданное число простым. Для эффективности сначала проверяется делимость на 2 и 3, а затем проверка продолжается с кратными 6. Функция printPrimes: Выводит простые числа в заданном диапазоне. Сначала выводится 2, затем проверяются только нечетные числа. Функция main: Запрашивает у пользователя максимальное значение диапазона и выводит простые числа в этом диапазоне. При компиляции и выполнении этого кода будут отображены простые числа в заданном диапазоне.\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/ru/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-код для генерации простых чисел"},{"content":"\nАкико Ёсано \u0026ldquo;Не умирай\u0026rdquo;\n―― Оплакивая брата в осадной армии Порт-Артура\nО, мой брат, я плачу по тебе, Пожалуйста, не умирай, Поскольку ты родился последним Родительская любовь к тебе была сильнее, Разве родители вложили тебе в руки меч И учили убивать людей? Разве они растили тебя до двадцати четырех лет, Чтобы ты убивал людей и умер?\nТы хозяин, гордящийся старым домом Торговца на улицах Сакаи, И поскольку ты наследуешь имя родителей, Пожалуйста, не умирай. Даже если падет крепость Порт-Артур, Или не падет, что с того? Ты ведь не знаешь, не так ли? В законах купеческой семьи этого не было.\nПожалуйста, не умирай, Император сам не выходит На битву, Неужели он велит людям проливать кровь друг друга, Умирать на пути зверей, И называть смерть человеческой честью? Разве он, с его великим сердцем, Мог бы так подумать изначально?\nО, мой брат, в бою Пожалуйста, не умирай. Наша мать, овдовевшая прошлой осенью, Когда ушел наш отец, В своей печали с болью Проводила призванного сына и стережет дом, Даже в этот так называемый мирный век Седых волос у матери прибавилось.\nПлачет, склонившись в тени занавески лавки, Твоя хрупкая молодая жена. Ты забыл ее или думаешь о ней? Подумай о девичьем сердце Той, с кем вы расстались, не прожив и десяти месяцев. В этом мире для нее есть только ты, О, на кого же еще ей опереться? Пожалуйста, не умирай.\n","date":"2024-07-25T13:16:47+09:00","permalink":"http://kenji.blog/ru/p/%D0%BD%D0%B5-%D1%83%D0%BC%D0%B8%D1%80%D0%B0%D0%B9/","title":"Не умирай"},{"content":"\n🔹 Обзор личности Акико Ёсано (1878–1942) — японская поэтесса, писательница и мыслительница, творившая с эпохи Мэйдзи до начала эпохи Сёва. Она особенно известна своими страстными и уникальными произведениями танка и является новатором, открывшим новые горизонты в независимости женщин и выражении любви в современной японской литературе.\nНастоящее имя : Ёсано (девичья фамилия: Отори) Сё\nМесто рождения : Сакаи (город Сакаи, префектура Осака)\nМуж : Ёсано Тэккан (поэт)\nОсновной период творчества : Поздняя Мэйдзи – ранняя Сёва\nХарактерные черты :\nПривлекла внимание стихотворениями танка, в которых откровенно воспевались романтические чувства женщин Придерживалась феминистских идей, продвигала образование и независимость женщин Демонстрировала пацифистскую позицию, критикуя Русско-японскую войну Центральная фигура литературного журнала \u0026ldquo;Мёдзё\u0026rdquo; 🔹 Главные произведения, их сюжет и особенности 1. \u0026ldquo;Спутанные волосы\u0026rdquo; (1901) Обзор : Дебютный сборник стихов. Опубликован, когда ей было чуть за двадцать, и оказал огромное влияние на японские литературные круги. Особенности : Откровенное выражение романтических чувств и плотских желаний с женской точки зрения. Известное стихотворение : Не коснувшись Горячей крови моей мягкой кожи, Разве тебе не одиноко проповедовать Путь?\n→ Вызвала бурные обсуждения, выразив словами самой женщины взгляды на любовь, которые по тогдашним меркам морали считались смелыми.\n2. \u0026ldquo;Не отдавай, любимый, жизнь свою\u0026rdquo; (1904) Формат : Стихотворение (не танка, а поэзия) Содержание : Антивоенное стихотворение, адресованное младшему брату, отправленному на Русско-японскую войну. Отрывок : Не отдавай, любимый, жизнь свою! Ты — младший, Мать слезы льет, Сжимая рукав твой\u0026hellip;\nЗначение : Стало новаторским, так как призывало против войны с позиции женщины, скорбящей о возможной смерти брата, в то время, когда преобладала тенденция к идеализации войны. 🔹 Влияние и оценка Вела социально прогрессивную деятельность: освобождение женщин, пацифизм, распространение образования. В последние годы жизни посвятила себя женскому образованию и участвовала в создании женского колледжа (например, Институт культуры). Одна из самых важных женщин-интеллектуалов и литераторов довоенной Японии. 🔹 Заключение Пункт Содержание Имя Акико Ёсано Сфера деятельности Танка, поэзия, критика, образование Главные произведения \u0026ldquo;Спутанные волосы\u0026rdquo;, \u0026ldquo;Не отдавай, любимый, жизнь свою\u0026rdquo; Особенности Свобода любви, независимость женщин, выражение пацифизма Влияние на современность Феминистская литература, обновление современной танка, пионер антивоенной поэзии ","date":"2024-07-25T13:08:36+09:00","permalink":"http://kenji.blog/ru/p/ob-akiko-yosano/","title":"Об Акико Ёсано"},{"content":"Введение в Mathematica Решение уравнений 1 Solve[x^2 - 3 x + 2 == 0, x] Вывод\n1 {{x -\u0026gt; 1}, {x -\u0026gt; 2}} Поиск решений уравнений в целых числах 1 Solve[x^2 - 3 x + 2 == 0 \u0026amp;\u0026amp; 0 \u0026lt;= x \u0026lt;= 2, x, Integers] Вывод\n1 {{x -\u0026gt; 1}, {x -\u0026gt; 2}} Решение систем уравнений 1 Solve[{x + y == 3, x - y == 1}, {x, y}] Вывод\n1 {{x -\u0026gt; 2, y -\u0026gt; 1}} Решение неравенств 1 Reduce[x^2 - 3 x + 2 \u0026gt; 0, x] Вывод\n1 x \u0026lt; 1 || x \u0026gt; 2 Дифференцирование 1 D[x^2, x] Вывод\n1 2 x Интегрирование 1 Integrate[x^2, x] Вывод\n1 x^3/3 Вычисление пределов 1 Limit[1/x, x -\u0026gt; 0] Вывод\n1 Infinity Вычисление рядов 1 Sum[1/n^2, {n, 1, Infinity}] Вывод\n1 π^2/6 Создание матриц 1 m = {{1, 2}, {3, 4}} Умножение матриц 1 m . m Вывод\n1 {{7, 10}, {15, 22}} Вычисление обратной матрицы 1 Inverse[m] Вывод\n1 {{-2, 1}, {1.5, -0.5}} Поиск собственных значений и векторов 1 Eigensystem[m] Вывод\n1 {{5, 0}, {{1, 1}, {1, -1}}} Скалярное произведение векторов 1 {1, 2} . {3, 4} Вывод\n1 11 Векторное произведение векторов 1 Cross[{1, 2, 3}, {4, 5, 6}] Вывод\n1 {-3, 6, -3} Вычисление длины вектора 1 Norm[{1, 2, 3}] Вывод\n1 √14 Вычисление угла между векторами 1 ArcCos[{1, 2} . {3, 4}/(Norm[{1, 2}] Norm[{3, 4}])] Вывод\n1 ArcCos[11/(√5 √25)] Проекция вектора 1 {1, 2} . {3, 4}/Norm[{3, 4}] {3, 4}/Norm[{3, 4}] Вывод\n1 {11/5, 22/5} Вращение вектора 1 RotationMatrix[π/2].{1, 0} Вывод\n1 {0, 1} Параллельный перенос вектора 1 TranslationTransform[{1, 2}][{3, 4}] Вывод\n1 {4, 6} Масштабирование вектора 1 ScalingTransform[{2, 3}][{1, 1}] Вывод\n1 {2, 3} Отражение вектора 1 ReflectionTransform[{1, 1}][{1, 1}] Вывод\n1 {0, 0} Генерация случайных чисел 1 RandomReal[] Вывод\n1 0.123456 Генерация случайных чисел (целые числа) 1 RandomInteger[] Вывод\n1 123456 Генерация случайных чисел (с указанием диапазона) 1 RandomReal[{1, 10}] Вывод\n1 5.6789 Генерация случайных чисел (целые числа, с указанием диапазона) 1 RandomInteger[{1, 10}] Вывод\n1 5 Генерация случайных чисел (с указанием распределения) 1 RandomVariate[NormalDistribution[0, 1]] Вывод\n1 0.123456 Генерация случайных чисел (с распределением и количеством) 1 RandomVariate[NormalDistribution[0, 1], 10] Вывод\n1 {0.123456, 0.234567, ..., 0.987654} Генерация случайных чисел (распределение, количество, seed) 1 2 SeedRandom[12345] RandomVariate[NormalDistribution[0, 1], 10] Вывод\n1 {0.123456, 0.234567, ..., 0.987654} Применение функции к элементам массива 1 2 3 Map[Sqrt, {1, 4, 9}] Sqrt /@ {1, 4, 9} Map[#^(1/2)\u0026amp;, {1, 4, 9}] Вывод\n1 {1, 2, 3} Определение функции с помощью лямбда-выражения 1 2 f = Function[x, x^2] f[3] Вывод\n1 9 Композиция функций 1 2 3 4 f = Function[x, x^2] g = Function[x, x + 1] h = Function[x, f[g[x]]] h[3] Вывод\n1 16 Ссылка на результат предыдущего вычисления 1 % + 1 Вывод\n1 17 Чистые функции 1 (#+3)\u0026amp;[5] Вывод\n1 8 Извлечение из массива 1 2 Select[{1, 2, 3, 4, 5}, EvenQ] Select[{1, 2, 3, 4, 5}, Mod[#,2]==0\u0026amp;] Вывод\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/ru/p/mathematica%E5%85%A5%E9%96%80/","title":"Введение в Mathematica"},{"content":"Что такое Hugo Hugo — это генератор статических сайтов. Он позволяет создавать веб-сайты, преобразуя файлы Markdown в HTML. Hugo написан на языке Go и работает очень быстро.\nЭтот блог также создан с помощью Hugo.\nУстановка CLI Hugo Чтобы установить CLI Hugo, выполните следующую команду.\n※ Это пример для macOS. Для других ОС, пожалуйста, обратитесь к официальной документации.\n1 brew install hugo Вы можете установить его с помощью Homebrew.\nСписок команд Hugo Hugo предлагает различные команды. Ниже приведены наиболее часто используемые команды.\nСоздать новый сайт 1 hugo new site \u0026lt;Имя сайта\u0026gt; Команда для создания нового сайта. Вместо \u0026lt;Имя сайта\u0026gt; укажите название вашего сайта.\nСоздать новую статью 1 hugo new \u0026lt;Имя статьи\u0026gt;.md Команда для создания новой статьи. Вместо \u0026lt;Имя статьи\u0026gt; укажите название вашей статьи.\nЗапустить сервер 1 hugo server Команда для запуска локального сервера. Вы можете получить к нему доступ по адресу http://localhost:1313.\nСборка сайта 1 hugo Команда для сборки сайта. HTML-файлы будут сгенерированы в директории public.\nРазвертывание 1 hugo deploy Команда для развертывания сайта. Настройки развертывания выполняются в файле config.toml.\nПоказать список статей 1 hugo list all Команда для отображения списка статей.\nПроверка конфигурации 1 hugo config Команда для проверки конфигурации.\nПоказать справку 1 hugo help Команда для отображения справки.\nПоказать версию 1 hugo version Команда для отображения версии.\nНа этом список команд Hugo завершен. Существует множество других команд, поэтому, пожалуйста, обратитесь к официальной документации.\nСсылки Официальная документация Hugo ","date":"2024-05-31T01:36:00+09:00","image":"http://kenji.blog/p/hugo%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E4%B8%80%E8%A6%A7/img_hu415dc7e70376ac350673d0366f70ca4b_19909_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/ru/p/hugo%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E4%B8%80%E8%A6%A7/","title":"Список команд Hugo"},{"content":"Список рекомендуемых расширений Visual Studio Code Категория Название Разработчик Описание Управление вирт. машинами и контейнерами Remote Devlopment Microsoft Поддерживает удаленную разработку путем подключения к виртуальным контейнерам/WSL через SSH Управление вирт. машинами и контейнерами Docker Microsoft Поддерживает управление контейнерами Docker Управление кодом GitHub Pull Requests GitHub Управляет Pull Requests из GitHub в VSCode Управление кодом GitHub Copilot GitHub Поддерживает автодополнение кода с помощью ИИ Управление кодом Git Graph mhutchie Графически отображает ветки и коммиты Git Управление кодом Git History Don Jayamanne Отображает историю Git Веб-разработка и браузер Debugger for Firefox Firefox DevTools Позволяет использовать отладчик Firefox в VSCode Веб-разработка и браузер Microsoft Edge Tool For VScode Microsoft Позволяет использовать инструменты разработчика Edge в VSCode Веб-разработка и браузер Vue Language Features(Volar) Vue Поддерживает языковые функции Vue Веб-разработка и браузер JavaScript (ES6) code snippets charalampos karypidis Предоставляет сниппеты для JavaScript Веб-разработка и браузер Tailwind CSS IntelliSense Tailwind Labs Предоставляет сниппеты для Tailwind CSS Облачная разработка AWS Toolkit Amazon Web Services Поддерживает разработку для AWS Облачная разработка Azure Tools Microsoft Поддерживает разработку для Azure Облачная разработка Google Cloud Tools Google Cloud Поддерживает разработку для Google Cloud Базы данных MySQL Jun Han Поддерживает разработку для MySQL Базы данных SQL Server(mssql) Microsoft Поддерживает разработку для SQL Server Базы данных PostgreSQL Chris Kolkman Поддерживает разработку для PostgreSQL Встраиваемые системы PlatformIO PlatformIO Поддерживает разработку в PlatformIO Встраиваемые системы Arduino Microsoft Поддерживает разработку для Arduino Встраиваемые системы WorkBench Particle Среда разработки от Particle, поддерживающая разработку для IoT, включая прошивки, библиотеки и интеграцию с облаком C/C++ C/C++ Extension Pack Microsoft Поддерживает разработку на C/C++ C/C++ C/C++ Runner franneck94 Запускает код C/C++ (поддерживает компиляторы gcc, msvc, cuda nvccc) C/C++ Cortex-Debug marus25 Поддерживает отладку микроконтроллеров Cortex-A/R/M Python Python Extension Pack Microsoft Поддерживает разработку на Python Python jupyter Microsoft Поддерживает разработку Jupyter Notebook Утилиты и расширения UI Makrdown All in One Yu Zhang Поддерживает написание Markdown Утилиты и расширения UI Hex Editor Microsoft Редактирует бинарные файлы Утилиты и расширения UI vscode-pdf tomoki1207 Отображает PDF файлы Утилиты и расширения UI Rainbow CSV mechatroner Отображает CSV файлы в цвете Утилиты и расширения UI Draw.io Integration Henning Dieterichs Позволяет использовать Draw.io в VSCode Утилиты и расширения UI Japanese Language Pack for Visual Studio Code Microsoft Языковой пакет Утилиты и расширения UI Live Share Microsoft Поддерживает совместную работу в реальном времени ","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/ru/p/%D1%80%D0%B5%D0%BA%D0%BE%D0%BC%D0%B5%D0%BD%D0%B4%D1%83%D0%B5%D0%BC%D1%8B%D0%B5-%D1%80%D0%B0%D1%81%D1%88%D0%B8%D1%80%D0%B5%D0%BD%D0%B8%D1%8F-visual-studio-code/","title":"Рекомендуемые расширения Visual Studio Code"},{"content":"Что такое mermaid.js mermaid.js — это библиотека JavaScript, которая позволяет писать текстовый синтаксис (синтаксис Mermaid) для графического отображения сложных диаграмм, таких как блок-схемы, графы и диаграммы Ганта. Она также используется в различных сервисах, таких как GitHub, Qiita и Notion. На этот раз мы попробуем включить использование mermaid.js в hugo.\nВключение mermaid.js в hugo Шаги следующие:\nДобавьте следующее в 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 загружается только если mermaid: true в условии if. Эта библиотека довольно большая, около 3 МБ.\nСоздайте assets/js/load-mermaid.js. Этот процесс используется для инициализации и перерисовки при динамическом переключении темы. 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); Исходный код основан на следующем:\nReinitialize with new theme #1945 Измените обработку переключения темы в 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;); } } } Создайте 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; Теперь mermaid.js готов к использованию.\nИспользование mermaid.js Добавьте следующее в определение статьи 1 marmaid: true Добавьте следующее в тело статьи Блок-схема\n1 2 3 4 5 6 {{\u0026lt;mermaid align=\u0026#34;center\u0026#34;\u0026gt;}} graph TD A[Начало] --\u0026gt;|Условие 1| B(Условие 2) B --\u0026gt; C{Условие 3} C --\u0026gt;|Условие 4| D[Конец] {{\u0026lt;/mermaid\u0026gt;}} Результат\ngraph TD A[Начало] --\u003e|Условие 1| B(Условие 2) B --\u003e C{Условие 3} C --\u003e|Условие 4| D[Конец] Диаграмма Ганта\n1 2 3 4 5 6 7 8 9 10 11 12 {{\u0026lt;mermaid align=\u0026#34;center\u0026#34;\u0026gt;}} gantt section Project Определение требований :done, a, 2024-05-25, 5d Базовое проектирование :done, b, after a, 5d Детальное проектирование :done, c, after b, 5d Производство :active, d, after c, 10d Модульное тестирование :crit, e, after d, 5d Интеграционное тестирование : f, after e, 5d Системное тестирование : g, after f, 5d Релиз :milestone, h, after g, 1d {{\u0026lt;/mermaid\u0026gt;}} Результат\ngantt section Project Определение требований :done, a, 2024-05-25, 5d Базовое проектирование :done, b, after a, 5d Детальное проектирование :done, c, after b, 5d Производство :active, d, after c, 10d Модульное тестирование :crit, e, after d, 5d Интеграционное тестирование : f, after e, 5d Системное тестирование : g, after f, 5d Релиз :milestone, h, after g, 1d Диаграмма последовательности\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 view-\u0026gt;\u0026gt;controller: Запрос аутентификации controller-\u0026gt;\u0026gt;model: Запрос аутентификации model-\u0026gt;\u0026gt;database: Запрос аутентификации database--\u0026gt;\u0026gt;model: Возврат результата model--\u0026gt;\u0026gt;controller: Возврат результата controller--\u0026gt;\u0026gt;view: Возврат результата view--\u0026gt;\u0026gt;user: Показ результата {{\u0026lt;/mermaid\u0026gt;}} Результат\nsequenceDiagram participant user participant view participant controller participant model participant database user-\u003e\u003eview: Ввод ID/PW view-\u003e\u003econtroller: ajax запрос controller-\u003e\u003emodel: Запрос аутентификации model-\u003e\u003edatabase: Выполнение SQL database--\u003e\u003emodel: Возврат результата SQL model--\u003e\u003econtroller: Возврат результата аутентификации controller--\u003e\u003eview: Возврат результата ajax запроса view--\u003e\u003euser: Показ результата аутентификации На этом всё.\nСсылки Официальный сайт mermaid.js Демо-сайт для предпросмотра синтаксиса mermaid ","date":"2024-05-25T02:18:09+09:00","image":"http://kenji.blog/p/mermaid.js%E3%82%92%E8%A9%A6%E3%81%97%E3%81%A6%E3%81%BF%E3%82%8B/img_2_huc7c099ec3ef9a6ce3efa5818e1489313_12585_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/ru/p/mermaid.js%E3%82%92%E8%A9%A6%E3%81%97%E3%81%A6%E3%81%BF%E3%82%8B/","title":"Пробуем mermaid.js"},{"content":"Как отменить git reset Если вы случайно выполнили git reset после того, как сделали git commit, вот как отменить git reset (как восстановить состояние на момент git commit).\nПроверьте ID коммита до сброса с помощью git reflog Вернитесь к состоянию до сброса с помощью git reset --hard HEAD@{число} Вот как можно отменить 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/ru/p/%D0%BA%D0%B0%D0%BA-%D0%BE%D1%82%D0%BC%D0%B5%D0%BD%D0%B8%D1%82%D1%8C-git-reset/","title":"Как отменить git reset"},{"content":"Открытие исходного кода MS-DOS 4.0 Компания Microsoft открыла исходный код MS-DOS 4.0, выпущенного около 40 лет назад. Он почти полностью написан на ассемблере 8086.\nРепозиторий github https://github.com/microsoft/MS-DOS\nСсылки Открытие исходного кода 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/ru/p/ms-dos-4-0-open-source/","title":"Открытие исходного кода MS-DOS 4.0"},{"content":" Читаемый код (The Art of Readable Code) Принципы программирования (Principles of Programming) Программист-прагматик (The Pragmatic Programmer) Технологии, поддерживающие Web Как создавать безопасные веб-приложения Как работают сети Исчерпывающее руководство по SQL от экспертов Практическое руководство по Docker Полное руководство по Kubernetes CODE COMPLETE Второе издание Clean Code: Мастерство Agile-разработчика Clean Architecture: Структура и дизайн ПО Технологии, которые нужно знать, прежде чем стать программистом игр Being Geek Почему мы создаем с использованием ООП ","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/ru/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":"Рекомендуемые книги для начинающих инженеров"},{"content":"Я создал шаблон календаря Excel (версия с праздничными днями)! Я создал шаблон Excel, который отображает праздники в календаре за этот месяц, если вы вводите год и месяц.\nПожалуйста, скачайте и используйте его. Календарь.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/ru/p/%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD-%D0%BA%D0%B0%D0%BB%D0%B5%D0%BD%D0%B4%D0%B0%D1%80%D1%8F-excel-%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D1%8F-%D1%81-%D0%B2%D1%8B%D1%85%D0%BE%D0%B4%D0%BD%D1%8B%D0%BC%D0%B8-%D0%B4%D0%BD%D1%8F%D0%BC%D0%B8/","title":"Шаблон календаря Excel (версия с праздничными днями)"},{"content":"※ Это шаги настройки для Windows 11.\nОткройте Панель управления Выберите Электропитание Нажмите \u0026ldquo;Действие кнопок питания\u0026rdquo; Нажмите \u0026ldquo;Изменение параметров, которые сейчас недоступны\u0026rdquo; Снимите флажок \u0026ldquo;Включить быстрый запуск (рекомендуется)\u0026rdquo; Нажмите \u0026ldquo;Сохранить изменения\u0026rdquo; Справка \\[Windows 10\\] Подскажите, как отключить быстрый запуск.\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/ru/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":"Как исправить сброс настроек DPI при каждом запуске с несколькими мониторами"},{"content":"Получить только последнюю версию репозитория Вы можете получить только последнюю версию репозитория с помощью следующей команды. Это полезно, когда вы хотите быстро загрузить репозиторий для экономии дискового пространства.\n1 git clone --depth 1 \u0026lt;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/ru/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":"Получить только последнюю версию репозитория git"},{"content":"Как исправить следующую ошибку в GitHub Copilot GitHub Copilot перестал работать примерно 19 апреля 2024 года. Сообщение об ошибке выглядит следующим образом:\n1 2 [ERROR] [ghostText] [2024-04-21T04:06:46.900Z] Error on ghost text request: (FetchError) unable to verify the first certificate [ERROR] [certificates] [2024-04-21T04:06:46.901Z] Your current Copilot license doesn\u0026#39;t support proxy connections with custom certificates. Please visit https://gh.io/copilot-network-errors to learn more. Original cause: {\u0026#34;type\u0026#34;:\u0026#34;system\u0026#34;,\u0026#34;_name\u0026#34;:\u0026#34;FetchError\u0026#34;,\u0026#34;code\u0026#34;:\u0026#34;UNABLE_TO_VERIFY_LEAF_SIGNATURE\u0026#34;} Как исправить Похоже, это ошибка в ESET. В расширенных настройках ESET отключите параметр \u0026ldquo;Включить SSL/TLS\u0026rdquo;. Ссылки Похоже, та же ошибка возникает и в AWS CDK.\nAWS CDK bootstrap certificate warning-error ","date":"2024-04-21T18:47:26+09:00","image":"http://kenji.blog/p/%E8%A8%BC%E6%98%8E%E6%9B%B8%E3%82%A8%E3%83%A9%E3%83%BC%E3%81%A7github-copilot%E3%81%8C%E4%BD%BF%E3%81%88%E3%81%AA%E3%81%8F%E3%81%AA%E3%81%A3%E3%81%9F%E5%A0%B4%E5%90%88%E3%81%AE%E5%AF%BE%E5%87%A6%E6%96%B9%E6%B3%95/img_hue52485515660c172702881501d13c34d_319675_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/ru/p/%D0%BA%D0%B0%D0%BA-%D0%B8%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D1%82%D1%8C-%D0%BE%D1%88%D0%B8%D0%B1%D0%BA%D1%83-%D1%81%D0%B5%D1%80%D1%82%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%82%D0%B0-github-copilot/","title":"Как исправить ошибку сертификата GitHub Copilot"},{"content":"\nВведение в Vim Загрузка и установка https://www.vim.org/download.php\nЗагрузите и установите модуль для вашей ОС с указанного выше сайта.\nДля Windows, вероятно, лучше всего выбрать gvim_X.X.X_x64_signed.exe.\nКак запустить В Windows необходимо зарегистрировать папку, содержащую vim.exe, в переменной среды Path.\nСпособ запуска\n1 vim Если вы хотите запустить, указав имя файла\n1 vim filename.txt Как выйти Чтобы выйти, введите : (двоеточие), затем введите q и нажмите Enter\n1 :q Если файл был обновлен, отобразится Нет записи с момента последнего изменения (добавьте ! для игнорирования). Вы можете отменить изменения и принудительно завершить работу.\n1 :q! Чтобы сохранить файл и выйти\n1 :wq Следующее означает то же самое.\n1 :x Вы также можете выйти, дважды нажав z, удерживая Shift. (То же, что и :wq)\nРежимы Vim имеет командный режим и режим ввода. Когда вы запускаете vim, он переходит в командный режим, а при нажатии клавиши i вы переходите в режим ввода.\nВ режиме ввода вы можете печатать текст, как обычно. Чтобы перейти из режима ввода в командный режим, нажмите клавишу ESC.\nОсобенностью vim является наличие такого переключения режимов.\nПеремещение курсора и прокрутка Ниже приведен список команд перемещения курсора и прокрутки в командном режиме.\nКлавиша Описание h (или Ctrl+H, BackSpace, ←) Перемещение влево j (или Ctrl+J, N, ↓) Перемещение вниз k (или Ctrl+P, ↑) Перемещение вверх l (или Space, →) Перемещение вправо + (или Enter) Перемещение в начало следующей строки - Перемещение в начало предыдущей строки Ctrl+B (или PageUp) Прокрутка вверх Ctrl+F (или PageDown) Прокрутка вниз Ctrl+U Прокрутка вверх на пол-экрана Ctrl+D Прокрутка вниз на пол-экрана Ctrl+Y Прокрутка вверх на 1 строку Ctrl+E Прокрутка вниз на 1 строку z Enter Прокрутка строки с курсором к верхнему краю экрана z . Прокрутка строки с курсором к центру экрана z - Прокрутка строки с курсором к нижнему краю экрана 0 (или |) Перемещение курсора в начало строки $ Перемещение курсора в конец строки ^ (или _) Перемещение курсора в начало строки (без учета пробелов, Tab) G (или :$) Перемещение курсора на последнюю строку :номер строки Enter Переход на указанную строку Если после числа вы введете вышеуказанные клавиши перемещения, вы сможете переместиться столько раз, сколько указано в числе. (Например, ввод 3j переместит вас на 3 строки вниз от текущего положения курсора.)\nДругие команды Клавиша Описание Ctrl+L Перерисовать экран Ctrl+G Отобразить количество строк всего файла, позицию курсора и т. д. ","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/ru/p/vim-introduction/","title":"Введение в Vim"},{"content":"О необходимости вызова DestroyIcon Вызывать DestroyIcon необходимо в следующих случаях:\nCreateIconFromResourceEx (если вызвано без флага LR_SHARED) CreateIconIndirect CopyIcon При создании с помощью указанных выше функций.\nLoadIcon LoadImage (при использовании флага LR_SHARED) CopyImage (при использовании флага LR_COPYRETURNORG, если параметр hImage — общая иконка) CreateIconFromResource CreateIconFromResourceEx (при использовании флага LR_SHARED) Иконки, созданные и загруженные в перечисленных выше случаях, не должны вызывать DestroyIcon.\nСсылки Функция DestroyIcon (winuser.h) ","date":"2024-04-19T01:55:17+09:00","permalink":"http://kenji.blog/ru/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 не требует вызова DestroyIcon"},{"content":"Видео лекций о генеративном ИИ \u0026ldquo;Генеративный ИИ\u0026rdquo; (1) Профессор Масаюки Накао, Токийский университет 2023.9.8 \u0026ldquo;Генеративный ИИ\u0026rdquo; (2) Профессор Куниёси Сакаи, Токийский университет 2023.10.11 \u0026ldquo;Генеративный ИИ\u0026rdquo; (3) Профессор Ютака Мацуо, Токийский университет 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/ru/p/%D0%BE-%D0%B3%D0%B5%D0%BD%D0%B5%D1%80%D0%B0%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%BC-%D0%B8%D0%B8/","title":"О генеративном ИИ"},{"content":"Генерация QR-кода с помощью curl Внимание: Представленный метод возвращает QR-код, сгенерированный на стороне сервера, поэтому журналы могут сохраняться. Будьте осторожны при преобразовании конфиденциальной информации, такой как личные данные, в QR-код.\nМетод 1 Это способ генерации QR-кода в командной строке. qrenco.de возвращает текстовый ответ.\n1 curl qrenco.de/kenji.blog Результат вывода 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 █████████████████████████████ █████████████████████████████ ████ ▄▄▄▄▄ █ ▄ ▄ █ ▄▄▄▄▄ ████ ████ █ █ █ ▀▀▀██ █ █ ████ ████ █▄▄▄█ █▀▀█▀▄█ █▄▄▄█ ████ ████▄▄▄▄▄▄▄█▄▀ ▀ █▄▄▄▄▄▄▄████ ████▄ █▀▄ ▄▀█▄▀ ▀██▄▀ ▄████ ████▀▀▀█ ▄▄ ▄█▄█▀█▀▄██ ▀████ ████▄▄▄██▄▄█ █▀█ ▄██▀▀█ █████ ████ ▄▄▄▄▄ █▀█ ▀ ▄▀▄▄▄ ▀████ ████ █ █ █▄▄ ▄▀▄▀▄ ██ ▀████ ████ █▄▄▄█ █▀▀█ ▀▄▄▄ ▄▄██████ ████▄▄▄▄▄▄▄█▄▄███▄▄█▄███▄████ █████████████████████████████ █████████████████████████████ Ссылки qrenco.de Метод 2 api.qrserver.com возвращает изображение.\n1 curl -o qr.png \u0026#34;https://api.qrserver.com/v1/create-qr-code/?size=150x150\u0026amp;data=HelloWorld\u0026#34; Результат вывода Ссылки 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/ru/p/%D0%B3%D0%B5%D0%BD%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D1%8F-qr-%D0%BA%D0%BE%D0%B4%D0%B0-%D1%81-%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E-curl/","title":"Генерация QR-кода с помощью curl"},{"content":"Список сочетаний клавиш Сочетание клавиш Описание Ctrl + B Жирный Ctrl + I Курсив Ctrl + U Подчеркнутый Ctrl + E Выровнять по центру Ctrl + L Выровнять по левому краю Ctrl + R Выровнять по правому краю Ctrl + ] Увеличить размер шрифта Ctrl + [ Уменьшить размер шрифта Ctrl + C Копировать Ctrl + V Вставить Ctrl + X Вырезать Ctrl + Z Отменить Ctrl + Y Повторить отмененное действие Ctrl + A Выделить все Shift + клавиши со стрелками Выделить диапазон Ctrl + F Найти текст Ctrl + H Заменить текст Ctrl + P Предварительный просмотр печати Ctrl + S Сохранить документ F12 Сохранить как Ctrl + Home Перейти в начало документа Ctrl + End Перейти в конец документа Ссылка Сочетания клавиш в 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/ru/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"},{"content":"Представляю вам расширение браузера Edge «Автообновление вкладок», которое автоматически обновляет веб-страницы.\nУстановка автообновления вкладок Автообновление вкладок\nЗайдите на указанный выше сайт и нажмите Установить.\nНажмите Добавить расширение.\nКак использовать После завершения установки в правом верхнем углу Edge будет добавлен значок.\nОткройте веб-страницу, которую хотите автоматически обновлять, и нажмите на значок, чтобы начать автоматическое обновление.\nОбласть в зеленой рамке — это интервал автоматического обновления. Пожалуйста, выберите время автоматического обновления.\nЧтобы остановить автоматическое обновление, нажмите на значок, а затем нажмите 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/ru/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":"Браузерное расширение для автообновления веб-страниц (Надстройка Edge)"},{"content":"Список сочетаний клавиш Visual Studio Я составил список сочетаний клавиш Visual Studio, которые я часто использую. Изучив сочетания клавиш для Visual Studio, вы сможете эффективно выполнять задачи разработки. Пожалуйста, используйте их.\n※ Проверено в Visual Studio 2022.\nСочетание клавиш Описание F1 Показать справку для выбранного слова F2 Перейти к закладке Ctrl + F2 Добавить закладку Ctrl + Shift + F2 Удалить все закладки F5 Собрать и запустить (с отладкой) Ctrl + F5 Собрать и запустить (без отладки) F7 Собрать F9 Добавить точку останова на строку с курсором Ctrl + F9 Отключить точку останова на строке с курсором Shift + Ctrl + F9 Удалить все точки останова F10 Шаг с обходом F11 Шаг с заходом F12 Перейти к определению Ctrl + D Дублировать строку с курсором Ctrl + X Вырезать строку (если нет выделения) Ctrl + Shift + ] Выделить до парной скобки Alt + Стрелки вверх/вниз Переместить строку с курсором вверх/вниз Alt + Shift + Стрелки Мультикурсор/блочное выделение Ctrl + Tab Переключить исходный код/окно Ctrl + Shift + V Показать историю буфера обмена Ctrl + K затем Ctrl + C Закомментировать строку с курсором Ctrl + K затем Ctrl + U Раскомментировать строку с курсором Ctrl + G Перейти к указанному номеру строки Ctrl + F Поиск Ctrl + Shift + F Глобальный поиск Ctrl + H Замена Ctrl + Shift + F Глобальная замена Ctrl + Tab Переключить исходный код/окно Ctrl + Space Автодополнение слов Ctrl + Alt + L Открыть окно обозревателя решений Ctrl + Shift + E Открыть окно представления ресурсов Ctrl + 0 затем Ctrl + G Открыть окно коммитов Git Ссылки Сочетания клавиш в 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/ru/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"},{"content":"В этой статье мы расскажем, как добавить функцию grep из Hidemaru Editor в контекстное меню Проводника (по правому клику мыши) в Windows 10/11.\n※ Обратите внимание, что следующие шаги связаны с изменением реестра, поэтому выполняйте их на свой страх и риск.\nШаги Откройте ссылку ниже и сохраните файл в любую папку. Регистрация_в_реестре_Hidemaru.reg\nДважды щелкните файл Регистрация_в_реестре_Hidemaru.reg, чтобы добавить его в реестр. Источники Запуск Hidemaru grep из контекстного меню папки ","date":"2024-04-03T00:00:46+09:00","image":"http://kenji.blog/p/%E3%82%A8%E3%82%AF%E3%82%B9%E3%83%97%E3%83%AD%E3%83%BC%E3%83%A9%E3%83%BC%E3%81%AE%E5%8F%B3%E3%82%AF%E3%83%AA%E3%83%83%E3%82%AF%E3%83%A1%E3%83%8B%E3%83%A5%E3%83%BC%E3%81%AB%E7%A7%80%E4%B8%B8%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BFgrep%E3%82%92%E8%BF%BD%E5%8A%A0%E3%81%99%E3%82%8B/img_hu1bfa3588f39c8e6af312f48159d52b67_932_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/ru/p/%D0%B4%D0%BE%D0%B1%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5-grep-hidemaru-editor-%D0%B2-%D0%BA%D0%BE%D0%BD%D1%82%D0%B5%D0%BA%D1%81%D1%82%D0%BD%D0%BE%D0%B5-%D0%BC%D0%B5%D0%BD%D1%8E-%D0%BF%D1%80%D0%BE%D0%B2%D0%BE%D0%B4%D0%BD%D0%B8%D0%BA%D0%B0/","title":"Добавление grep Hidemaru Editor в контекстное меню Проводника"},{"content":"Вы знаете о парадоксе дней рождения? Я расскажу немного странную историю. Как вы думаете, сколько людей должно собраться, чтобы \u0026ldquo;вероятность того, что у кого-то совпадут дни рождения\u0026rdquo; стала высокой?\nНапример, в году 365 дней, поэтому когда говорят, что \u0026ldquo;если соберутся 23 человека, вероятность того, что у кого-то совпадет день рождения, составляет 50% или больше\u0026rdquo;\u0026hellip; это кажется несколько противоречащим интуиции, не так ли?\nНо это действительно больше 50%.\nПочему так происходит? Это явление называется \u0026ldquo;парадоксом дней рождения\u0026rdquo;. Название содержит слово \u0026ldquo;парадокс\u0026rdquo;, но для этого есть веская математическая причина.\nЕсли количество людей обозначить как \u0026ldquo;n\u0026rdquo;, то вероятность того, что ни у кого не совпадет день рождения, можно вычислить по следующей формуле:\n1 P(ни у кого не совпадает) = 365/365 × 364/365 × 363/365 × ... × (365 - n + 1)/365 Вычитая это из 1, мы получаем \u0026ldquo;вероятность совпадения с кем-то\u0026rdquo;.\nПосмотрим на результаты\u0026hellip; Количество человек Вероятность совпадения дней рождения 10 человек Около 11.7% 20 человек Около 41.1% 23 человека Около 50.7% (Здесь внимание!) 30 человек Около 70.6% 70 человек Целых 99.9%! Другими словами, если есть всего 23 человека, с вероятностью больше половины дни рождения кого-то совпадут. Кажется, это вполне применимо к школьным классам или рабочим совещаниям.\nЗаключение: разница между интуицией и математикой интересна \u0026ldquo;Парадокс дней рождения\u0026rdquo; — это интересный пример того, как наша интуиция расходится с реальной математической вероятностью. Знание таких вещей может оживить небольшую беседу или викторину!\nПолезные ссылки Парадокс дней рождения (Википедия) ","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/ru/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":"Что такое парадокс дней рождения?"},{"content":"Что такое Snipping Tool Snipping Tool — это стандартный инструмент для создания скриншотов в Windows. С его помощью можно вырезать и сохранить часть экрана, сделать снимок всего экрана или записать его.\nКак запустить Snipping Tool В основном можно запустить тремя следующими способами:\nНажмите клавишу Win, введите Snipping Tool и нажмите клавишу Enter. Нажмите клавишу Win + Shift + S. Нажмите клавишу Win + R, введите snippingtool и нажмите клавишу Enter. Как использовать Snipping Tool Способ сохранения захваченного изображения следующий: Выберите значок Камера. Нажмите кнопку Создать. Выберите область для захвата. Нажмите кнопку Сохранить как. Укажите место сохранения и имя файла, затем сохраните. Способ записи видео следующий: Выберите значок Видео. Нажмите кнопку Создать. Выберите область для захвата. Нажмите кнопку Старт. Запишите экран. Нажмите кнопку Остановить. Нажмите кнопку Сохранить как. Укажите место сохранения и имя файла, затем сохраните. Ссылки Использование Snipping Tool для создания скриншотов ","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/ru/p/how-to-use-snipping-tool/","title":"Как использовать Snipping Tool"},{"content":"Вот как создать ярлык для блокировки компьютера.\nЭто удобно, так как вы можете заблокировать компьютер, дважды щелкнув по созданному ярлыку на рабочем столе.\nСпособ создания 1. Щелкните правой кнопкой мыши на рабочем столе и выберите Создать \u0026gt; Ярлык 2. Появится экран создания ярлыка, введите rundll32.exe user32.dll,LockWorkStation и нажмите Далее 3. Введите имя ярлыка Блокировка компьютера и нажмите Готово 4. Изменение значка созданного ярлыка Щелкните правой кнопкой мыши по созданному ярлыку и выберите Свойства\nНажмите Сменить значок\nВыберите желтый квадратный значок и нажмите ОК, затем снова нажмите ОК, чтобы закрыть свойства\nНа этом всё.\nДвойной щелчок по созданному ярлыку заблокирует компьютер.\nВы также можете заблокировать компьютер, нажав Клавиша Win + Клавиша L.\n※ Примечание: диалоговое окно подтверждения блокировки компьютера не отображается.\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/ru/p/%D0%BA%D0%B0%D0%BA-%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D1%82%D1%8C-%D1%8F%D1%80%D0%BB%D1%8B%D0%BA-%D0%B4%D0%BB%D1%8F-%D0%B1%D0%BB%D0%BE%D0%BA%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B8-%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%B0/","title":"Как создать ярлык для блокировки компьютера"},{"content":"Что такое парадокс Монти Холла Парадокс Монти Холла — это задача, основанная на игре из американского телешоу \u0026ldquo;Let\u0026rsquo;s Make a Deal\u0026rdquo;, которая выглядит следующим образом.\nИсходные условия: за одной из трех дверей находится приз, а за двумя другими — ничего.\nУчастник выбирает одну из трех дверей. Ведущий открывает одну из двух оставшихся дверей (ту, за которой нет приза). Участника спрашивают, хочет ли он изменить свой выбор двери. Задача состоит в том, чтобы решить, лучше ли участнику изменить свой выбор или нет.\nРешение Решение парадокса Монти Холла выглядит следующим образом.\nЕсли участник не меняет дверь, которую он выбрал изначально\nВероятность выигрыша: 1/3 Вероятность проигрыша: 2/3 После того как ведущий открывает дверь без приза\nЕсли не менять выбор, вероятность выигрыша: 1/3 (остается такой же, как в п. 1) Если изменить выбор, вероятность выигрыша: 2/3 (вероятность того, что приз не был выбран изначально) Следовательно, у участника больше шансов на выигрыш, если он изменит свой выбор.\nИсточники 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/ru/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":"Парадокс Монти Холла"},{"content":"Скачивание micro https://github.com/zyedidia/micro/releases\nОткройте ссылку выше, нажмите Show all XX assets (где X - цифры) и скачайте micro-X.X.XX-win64.zip (где X - цифры). Распакуйте zip-файл и поместите все файлы в любую папку.\nНастройка переменных среды Чтобы использовать micro.exe из командной строки, необходимо настроить переменные среды.\nНажмите клавиши Win + R, введите sysdm.cpl и нажмите Enter. В окне Свойства системы нажмите Свойства системы. Нажмите Переменные среды. Выберите Path в Системные переменные и нажмите Изменить. Нажмите Создать и добавьте путь к папке, содержащей micro.exe. Нажмите ОК, чтобы закрыть все диалоговые окна. Перезапустите командную строку, введите nano и проверьте, запускается ли он. Как использовать micro При вводе micro в командной строке и выполнении появится следующий экран. Основные операции и сочетания клавиш следующие:\nСочетания клавиш Операция Ctrl+Q Закрыть файл Ctrl+S Сохранить файл Ctrl+O Открыть файл Ctrl+A Выбрать всё Ctrl+X Вырезать выделенное Ctrl+C Скопировать выделенное Ctrl+V Вставить Ctrl+Z Отменить Ctrl+Y Повторить Ctrl+E Выполнить команду редактора Ссылки 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/ru/p/%D0%BA%D0%B0%D0%BA-%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%B8%D1%82%D1%8C-%D1%82%D0%B5%D0%BA%D1%81%D1%82%D0%BE%D0%B2%D1%8B%D0%B9-%D1%80%D0%B5%D0%B4%D0%B0%D0%BA%D1%82%D0%BE%D1%80-micro-%D0%BD%D0%B0-windows/","title":"Как установить текстовый редактор micro на Windows"},{"content":"Загрузка nano.exe https://sourceforge.net/projects/nano-for-windows/\nОткройте ссылку выше и нажмите Download, чтобы загрузить GNU-Nano_Win32(static).zip. Распакуйте zip-файл и поместите nano.exe в любую папку.\nВвод на японском языке не поддерживается. (По состоянию на 31.03.2024) Настройка переменных среды Чтобы использовать nano.exe из командной строки, необходимо настроить переменные среды.\nНажмите клавишу Win + клавишу R, введите sysdm.cpl и нажмите клавишу Enter. Нажмите Свойства системы (System Properties). Нажмите Переменные среды (Environment Variables). Выберите Path в разделе Системные переменные и нажмите Изменить (Edit). Нажмите Создать (New) и добавьте путь к nano.exe. Нажмите OK, чтобы закрыть все диалоговые окна. Перезапустите командную строку, введите nano и проверьте, запускается ли он. Как использовать nano Когда вы вводите nano и запускаете его, отобразится следующий экран.\nВ нижней части экрана отображаются описания сочетаний клавиш.\nЗначения символов следующие:\n^ означает клавишу Ctrl. M- означает клавишу Alt. Чтобы сохранить и закрыть, нажмите Ctrl + S, а затем нажмите Ctrl + X.\nРекомендации 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/ru/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":"Как установить CLI текстовый редактор nano в Windows"},{"content":"Как исправить ошибку \u0026lsquo;Temporary failure resolving\u0026hellip;\u0026rsquo; в WSL kenji@MyComputer:~$ sudo apt update [sudo] password for kenji: Err:1 http://archive.ubuntu.com/ubuntu focal InRelease Temporary failure resolving 'archive.ubuntu.com'\nКогда в WSL появляется вышеуказанная ошибка, возможно, неправильно настроен DNS-сервер. В моей среде проблема была решена с помощью следующих шагов:\nЗапустите WSL. Выполните команду sudo nano /etc/resolv.conf. Измените строку nameserver следующим образом: nameserver 8.8.8.8 Сохраните, нажав Ctrl + S, и выйдите, нажав Ctrl + X. Выполните команду sudo apt update. Если ошибка не появляется, проблема решена. Если вышеуказанные шаги не помогли Кажется, в некоторых случаях вышеуказанные шаги не решают проблему. Пожалуйста, обратитесь к следующей статье.\nКак решить проблему \u0026lsquo;Temporary failure resolving\u0026hellip;\u0026rsquo; при apt update в 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/ru/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":"Как исправить ошибку 'Temporary failure resolving...' в WSL"},{"content":"Как закрыть через контекстное меню панели задач Этот метод работает в Windows 10. В Windows 11 это меню, похоже, не отображается. Если вы щелкнете правой кнопкой мыши на панели задач, удерживая клавиши Shift и Ctrl, в меню появится пункт Выход из проводника.\nКак закрыть через Диспетчер задач Нажмите Ctrl + Shift + Esc, чтобы открыть Диспетчер задач. Выберите Подробности. Выберите explorer.exe, нажмите клавишу Delete, и когда вас спросят Завершить процесс explorer.exe?, выберите Завершить процесс. Как закрыть через Командную строку Нажмите Win + R, введите cmd и нажмите Enter. Введите taskkill /f /im explorer.exe и нажмите Enter. Как запустить Проводник из Диспетчера задач Нажмите Ctrl + Shift + Esc, чтобы открыть Диспетчер задач. В меню «Файл» выберите Запустить новую задачу. Введите explorer.exe и нажмите 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/ru/p/%D0%BA%D0%B0%D0%BA-%D0%B7%D0%B0%D0%BA%D1%80%D1%8B%D1%82%D1%8C-%D0%B8-%D0%BF%D0%B5%D1%80%D0%B5%D0%B7%D0%B0%D0%BF%D1%83%D1%81%D1%82%D0%B8%D1%82%D1%8C-%D0%BF%D1%80%D0%BE%D0%B2%D0%BE%D0%B4%D0%BD%D0%B8%D0%BA/","title":"Как закрыть и перезапустить Проводник"},{"content":"Как вернуть классическое контекстное меню в Windows 11 Здесь мы покажем, как вернуть контекстное меню (по правому клику) в Windows 11 к классическому виду.\nОткройте Редактор реестра. Нажмите Win + R, введите regedit и нажмите Enter. Перейдите к HKEY_CURRENT_USER\\Software\\Classes\\CLSID\\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}. Если этого ключа нет, создайте его.\nПерейдите к HKEY_CURRENT_USER\\Software\\Classes\\CLSID\\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\\InprocServer32. Если этого ключа нет, создайте его.\nУбедитесь, что значение (По умолчанию) в InprocServer32 пустое.\nПерезагрузите компьютер. Убедитесь, что контекстное меню вернулось к классическому виду. ","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/ru/p/kak-vernut-klassicheskoe-kontekstnoe-menyu-v-windows-11/","title":"Как вернуть классическое контекстное меню в Windows 11"},{"content":"JetBrains Mono Это шрифт для программирования с открытым исходным кодом, предоставляемый JetBrains.\nСкачать: https://www.jetbrains.com/ja-jp/lp/mono/\nHackGen Hakugen (HackGen) — это шрифт для программирования, созданный путем объединения английского шрифта Hack для программирования и Genjyuu Gothic, производного от Source Han Sans.\nСкачать: https://github.com/yuru7/HackGen/releases\nRicty Diminished Ricty Diminished — это родственный шрифт Ricty, созданный путем объединения Inconsolata и Circle M+ 1m с помощью скрипта генерации Ricty вместо Inconsolata и Migu 1M. Поскольку он не содержит глифов IPA Gothic, количество используемых глифов кандзи невелико, но вместо этого его можно распространять по лицензии SIL Open Font License.\nСкачать: https://rictyfonts.github.io/diminished\nCica Шрифт для программирования, использующий Hack + DejaVu Sans Mono для английских букв, цифр и символов. Для других символов используется Rounded Mgen+.\nСкачать: https://github.com/miiton/Cica/releases\nСсылка:\nHack DejaVu Sans Mono Rounded Mgen+ Migu Это составной шрифт M+ и IPA.\nСкачать: https://itouhiro.github.io/mixfont-mplus-ipa/migu/\nOsaka Это шрифт, который позволяет использовать Osaka, стандартный шрифт Mac OS, в Windows.\nСкачать: http://ifs.nog.cc/osakattf.hp.infoseek.co.jp/\nPlemolJP Это шрифт для программирования, который сочетает в себе японский шрифт с открытым исходным кодом IBM Plex Sans JP, выпущенный IBM, и IBM Plex Mono из серии IBM Plex.\nСкачать: 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/ru/p/%D0%BA%D0%BE%D0%BB%D0%BB%D0%B5%D0%BA%D1%86%D0%B8%D1%8F-%D1%88%D1%80%D0%B8%D1%84%D1%82%D0%BE%D0%B2-%D0%B4%D0%BB%D1%8F-%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F/","title":"Коллекция шрифтов для программирования"},{"content":"Я покажу, как запустить редактор Hidemaru с помощью команды «hide». Примечание: этот метод протестирован на Windows 10/11.\nОткройте редактор реестра. Перейдите в HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths. Создайте ключ с именем hide.exe в App Paths. ※ Часть имени ключа перед .exe будет названием команды. Установите путь к исполняемому файлу редактора Hidemaru в значение (По умолчанию) ключа hide.exe. В моей среде это было \u0026quot;C:\\Program Files (x86)\\Hidemaru\\Hidemaru.exe\u0026quot;. Создайте строковый параметр (String Value) с именем Path в ключе hide.exe. Установите путь к папке с исполняемым файлом редактора Hidemaru в данные параметра Path. В моей среде это было \u0026quot;C:\\Program Files (x86)\\Hidemaru\u0026quot;. Теперь вы можете запустить редактор Hidemaru с помощью команды hide в окне Выполнить , которое появляется при нажатии Win + R. Кроме того, в командной строке вы можете запустить редактор Hidemaru с помощью команды start hide. 1 2 3 4 5 Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\hide.exe] @=\u0026#34;\\\u0026#34;C:\\\\Program Files (x86)\\\\Hidemaru\\\\Hidemaru.exe\\\u0026#34;\u0026#34; \u0026#34;Path\u0026#34;=\u0026#34;\\\u0026#34;C:\\\\Program Files (x86)\\\\Hidemaru\\\\\\\u0026#34;\u0026#34; Если вы сохраните приведенное выше содержимое в файл .reg и запустите его, настройки будут добавлены в реестр.\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/ru/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":"Как запустить редактор Hidemaru с помощью команды «hide»"},{"content":"Нерешенные математические проблемы Мы расскажем о нерешенных математических проблемах. Хотя сами проблемы просты, существует еще много проблем, которые не доказаны.\nСуществует ли бесконечное множество совершенных чисел? Совершенное число — это натуральное число, равное сумме всех своих собственных делителей (то есть делителей, отличных от самого числа). Например,\nДелителями числа 6 являются 1, 2 и 3, а 1+2+3=6, поэтому это совершенное число. Делителями числа 28 являются 1, 2, 4, 7 и 14, а 1+2+4+7+14=28, поэтому это совершенное число. На данный момент обнаружено только 51 совершенное число. Хотя ожидается, что их бесконечно много, это еще не доказано.\nПроблема Гольдбаха Проблема Гольдбаха (или гипотеза Гольдбаха) утверждает, что любое четное число больше 2 можно представить в виде суммы двух простых чисел. (Здесь простое число — это натуральное число, не имеющее делителей, кроме 1 и самого себя.)\nНапример,\n4=2+2 6=3+3 8=3+5 10=3+7=5+5 Сама проблема очень проста, но она до сих пор не доказана.\nГипотеза Римана Гипотеза утверждает, что нетривиальные нули дзета-функции Римана ограничиваются отрицательными четными числами и комплексными числами с действительной частью, равной 1 / 2.\nДзета-функция Римана $\\zeta$ определяется следующим образом, где $s$ — комплексное число, а $n$ — натуральное число:\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$$ ","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/ru/p/nereshennye-matematicheskie-problemy/","title":"Нерешенные математические проблемы"},{"content":"\u0026ldquo;Я собрал много диалоговых окон информации о версии\u0026rdquo; Windows 11 Во-первых, вот информация о версии Windows 11, которую я сейчас использую. IntelliJ IDEA (Community Edition) В этой среде я пишу этот блог. Visual Studio Code Это редактор, который я тоже часто использую. Он удивительно прост. Visual Studio Это среда разработки, которую я использую для C++. LINE(Windows) Это версия LINE для Windows. Paint.NET Это программа для редактирования изображений. sakuraエディタ Это текстовый редактор. Google Chrome Это Google Chrome. Я перестал часто им пользоваться после появления Edge. Firefox Это Firefox. В последнее время я им мало пользуюсь. Microsoft Edge Это Microsoft Edge. В последнее время я часто им пользуюсь. OBS Studio Это OBS Studio. В последнее время я им мало пользуюсь. TradingView Это TradingView. В последнее время я использую его для просмотра графика доллар/иена. Spy++ Это Spy++. Это инструмент, включенный в Windows SDK. depency walker Это depency walker. Это инструмент, включенный в Windows SDK. resource hacker Это resource hacker. Это инструмент для редактирования и извлечения ресурсов из исполняемых файлов. Microsoft Excel Это Microsoft Excel. bandy cam Это bandy cam. Это инструмент для захвата видео. winmerge Это winmerge. Это инструмент для просмотра различий в файлах. iTunes Это iTunes. В последнее время я им мало пользуюсь. 秀丸エディタ Это текстовый редактор Hidemaru. Adobe Photoshop CS6 Это Adobe Photoshop CS6. Adobe Illustrator CS6 Это Adobe Illustrator CS6. ESET NOD32 Это ESET NOD32. NotePad++ Это NotePad++. Это текстовый редактор. MIFES Это MIFES. В последнее время я им мало пользуюсь. ","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/ru/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":"Я собрал много диалоговых окон информации о версии"},{"content":"Инструмент для записи экрана в формате GIF Я создал инструмент для записи экрана в виде GIF-анимации. Используя этот инструмент, вы можете записывать действия на экране и делиться ими с помощью таких средств связи, как Microsoft Teams.\nКак использовать Запустите инструмент Укажите область для записи. Если область не указана, будет записан весь экран. Нажмите кнопку записи Нажмите кнопку остановки записи GIF-анимация будет сохранена в той же папке, что и исполняемый файл Скачать Скачать\nОткройте ссылку выше и нажмите на GIFScreenRecorder.exe, чтобы скачать исполняемый файл.\nИсходный код 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/ru/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"},{"content":"Резюме подготовки к экзамену PMP Это резюме моей подготовки к экзамену PMP.\nОбзор PMP — это сертификация по управлению проектами. Она основана на руководстве PMBOK (последнее 7-е издание). Экзамен PMP состоит из 180 вопросов за 230 минут, но 5 вопросов являются пробными, поэтому для успешной сдачи необходимо правильно ответить как минимум на 106 из 175 вопросов. Вопросы представлены в формате множественного выбора, в основном с 4 вариантами, но некоторые вопросы могут иметь 5 вариантов или требовать выбора нескольких ответов.\nЛидерство-служение (Servant Leadership) Стиль лидерства, при котором руководитель поддерживает команду снизу, а не приказывает сверху.\n10 принципов лидерства-служения Слушание (Listening) Эмпатия (Empathy) Исцеление (Healing) Осознанность (Awareness) Убеждение (Persuasion) Концептуализация (Conceptualization) Предвидение (Foresight) Ответственное управление (Stewardship) Приверженность росту людей (Commitment to the growth of people) Создание сообщества (Building community) 4 ценности Agile-манифеста Мы постоянно открываем для себя более совершенные методы разработки программного обеспечения, занимаясь разработкой непосредственно и помогая в этом другим. Благодаря этой работе мы пришли к следующим ценностям:\nЛюди и взаимодействие важнее процессов и инструментов Работающий продукт важнее исчерпывающей документации Сотрудничество с заказчиком важнее согласования условий контракта Готовность к изменениям важнее следования первоначальному плану То есть, не отрицая важности того, что справа, мы всё-таки больше ценим то, что слева.\nAgile-манифест\n12 принципов Agile-манифеста Наивысшим приоритетом для нас является удовлетворение потребностей заказчика благодаря регулярной и ранней поставке ценного программного обеспечения. Изменение требований приветствуется даже на поздних стадиях разработки. Agile-процессы позволяют использовать изменения для обеспечения конкурентного преимущества заказчика. Выпускайте работающее программное обеспечение как можно чаще, с периодичностью от пары недель до пары месяцев. Представители бизнеса и разработчики должны работать вместе ежедневно на протяжении всего проекта. Над проектом должны работать мотивированные профессионалы. Создайте условия, обеспечьте поддержку и доверьте им выполнение работы. Непосредственное общение — наиболее практичный и эффективный способ обмена информацией как с самой командой, так и внутри неё. Работающее программное обеспечение — основной показатель прогресса. Agile-процессы способствуют устойчивому развитию. Спонсоры, разработчики и пользователи должны иметь возможность поддерживать постоянный темп на неопределенный срок. Постоянное внимание к техническому совершенству и качеству проектирования повышает гибкость. Простота — искусство минимизации лишней работы — крайне необходима. Самые лучшие архитектурные и технические требования, а также дизайн рождаются в самоорганизующихся командах. Команда регулярно анализирует, как стать более эффективной, и соответственно корректирует свое поведение. Принципы Agile-манифеста\nТермины Эпик (Epic) Пользовательская история (User Story) Задача (Task) Бэклог продукта (Product Backlog) Владелец продукта (Product Owner) Заинтересованные стороны (Stakeholder) Практическое руководство по Agile (Agile Practice Guide) Бережливая разработка (Lean) Канбан (Kanban) Цепочка создания стоимости (Value Chain) Фактическая стоимость (AC: Actual Cost) Освоенный объем (EV: Earned Value) Плановый объем (PV: Planned Value) Анализ освоенного объема (EVA) Индекс выполнения расписания (SPI = EV / PV) Индекс выполнения стоимости (CPI = EV / AC) Управление освоенным объемом (EVM) Бюджет по завершении (BAC) Прогноз до завершения (ETC) Прогноз по завершении (EAC) Функциональная структура Матричная структура Проектная структура Лидерство-служение (Servant Leadership) Модель Такмана (Формирование, Шторм, Нормирование, Выполнение, Расставание) Устав команды (Team Charter) Покер планирования (Числа Фибоначчи) Ретроспектива Виртуальная команда Устав проекта (Project Charter) Конфликт (6 методов: Решение проблемы, Сотрудничество, Компромисс, Сглаживание, Принуждение, Уклонение) Картирование потока создания ценности (VSM) Наставничество (Mentoring) Коучинг (Coaching) Обучение (Training) Теория X и Y Макгрегора SWOT-анализ Модель SECI PDCA, PDSA PESTLE-анализ VUCA Метод Монте-Карло Дерево решений Ожидаемая денежная стоимость (EMV) Индекс потребительской лояльности (NPS) Анализ затрат и выгод Обзор спринта (Sprint Review) Управление релизами Описание содержания работ (SOW) Описание содержания работ по закупкам (P-SOW) Запрос информации (RFI) Запрос предложений (RFP) Контракт с фиксированной ценой (FP) Контракт \u0026ldquo;Время и материалы\u0026rdquo; (T\u0026amp;M) Контракт с возмещением затрат (CR) Контракт с фиксированной ценой и поощрительным вознаграждением (FPIF) Разрастание содержания (Scope Creep) Модель Кано Метод распределения финансирования Метод 100 баллов Метод MoSCoW Матрица прослеживаемости требований Словарь ИСР (WBS Dictionary) Скорость (Velocity) Диаграмма скорости (Velocity Chart) Матрица вовлеченности (Неосознанность, Сопротивление, Нейтралитет, Поддержка, Лидерство) Фазовый шлюз (Phase Gate) Информационный радиатор Диаграмма сгорания задач (Burndown Chart) Диаграмма выгорания (Burnup Chart) Накопительная диаграмма потока (CFD) QCD (Качество, Стоимость, Поставка) Спиральная модель Критическая цепь (Critical Chain) Фича (Feature) Итерация / Спринт Итеративный подход Инкрементный подход Инкремент Устойчивость (Resilience) Ответственное управление (Stewardship) Эскалация KPT (Keep, Problem, Try) Матрица RACI Офис управления проектами (PMO) Ритм (Cadence) Адаптация (Tailoring) Нейрологические уровни Бизнес-кейс Анализ тенденций План управления качеством Процесс управления (Governance) Владелец продукта (Product Owner) Спонсор проекта (Project Owner) Менеджер проекта (Project Manager) Руководитель проекта (Project Leader) Участник проекта (Project Member) Гибридный подход Минимально жизнеспособный продукт (MVP) Обзор итерации (Iteration Review) Воркшоп (Workshop) План управления выгодами проекта Ключевые показатели эффективности (KPI) На месте (On-site) Аналогичная оценка Оценка по трем точкам Параметрическая оценка Обзор проекта (Project Review) Подход \u0026ldquo;Большого взрыва\u0026rdquo; DSDM (Метод разработки динамических систем) Закон Брукса Реестр рисков (Risk Register) Ситуационное лидерство (SL) Компетентность (Competence) Приверженность (Commitment) Ссылки Руководство по Scrum PMI ECO Практическое руководство по Agile Кодекс этики PMI Учебные материалы Курс стратегии для сдачи экзамена PMP®! (2021) Поддержка Agile ","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/ru/p/pmp%E5%8B%89%E5%BC%B7/","title":"Изучение PMP"},{"content":"Обзор Заметки о стихийных бедствиях, произошедших в Японии\nЗемлетрясение на полуострове Ното 1 января 2024 года ","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/ru/p/%E6%97%A5%E6%9C%AC%E3%81%AE%E7%81%BD%E5%AE%B3/","title":"Стихийные бедствия в Японии"},{"content":"Семь трав Сэри (Омежник) Назуна (Пастушья сумка) Гогё (Сушеница) Хакобэра (Звездчатка) Хотокеноза (Бородавник) Сузуна (Репа) Сузусиро (Редька) ","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/ru/p/%D1%80%D0%B5%D1%86%D0%B5%D0%BF%D1%82-%D1%80%D0%B8%D1%81%D0%BE%D0%B2%D0%BE%D0%B9-%D0%BA%D0%B0%D1%88%D0%B8-%D1%81-%D1%81%D0%B5%D0%BC%D1%8C%D1%8E-%D1%82%D1%80%D0%B0%D0%B2%D0%B0%D0%BC%D0%B8/","title":"Рецепт рисовой каши с семью травами"},{"content":"Рекомендуемая японская музыка チューリップ - 青春の影 イルカ - なごり雪 河島英五 - 酒と泪と男と女 Orangestar - Surges 竹内まりや - Plastic Love RADWIMPS - 前前前世 BEGIN - 島人ぬ宝 ザ・ブルーハーツ - 情熱の薔薇 荒井由実 - ルージュの伝言 Begin - 海の声 荒井由実 - ひこうき雲 Love is Over - 欧陽菲菲 クラムボン - 波よせて RADWIMPS - スパークル かりゆし58 - アンマー かりゆし58 - オワリはじまり テレサ・テン - 時の流れに身をまかせ 宇多田ヒカル『One Last Kiss』 不可思議/wonderboy - Pellicule (Official Music Video) Kamen Rider Black RX - Opening Song たしかなこと / 小田和正 - Covered by パクユナ 【Japanese healing song】Hana／Kosuke Atari（covered by Leah） 「真夜中のドア〜stay with me」/ 松原みき Official Lyric Video Midnight Pretenders Anri - Last Summer Whisper 1985 - The Blue Hearts BUMP OF CHICKEN - supernova チューリップ　心の旅　1972 小さな恋のうた ASKA - はじまりはいつも雨 (Official Music Video) キリンジ - エイリアンズ あの日の空よ - 南こうせつ ","date":"2024-01-06T04:11:01+09:00","image":"http://kenji.blog/p/%E5%A5%BD%E3%81%8D%E3%81%AA%E9%82%A6%E6%A5%BD/img_hub840e0bd8da1fd2845b1fe157b13d9d8_1067024_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/ru/p/%D0%BB%D1%8E%D0%B1%D0%B8%D0%BC%D0%B0%D1%8F-%D1%8F%D0%BF%D0%BE%D0%BD%D1%81%D0%BA%D0%B0%D1%8F-%D0%BC%D1%83%D0%B7%D1%8B%D0%BA%D0%B0/","title":"Любимая японская музыка"},{"content":"Рекомендуемая западная музыка Keane - Somewhere Only We Know Ben E. King - Stand By Me The Beatles - Hey Jude The Mamas \u0026amp; The Papas - California Dreamin' Ed Sheeran - Shape of You Mark Ronson ft. Bruno Mars – Uptown Funk Sugar - Maroon 5 Bette Midler - The Rose Green Day - Basket Case Coldplay - Viva La VidaViva La Vida Maroon 5 - Memories (Lyrics) Dido - Thank You (Official Video) Bob Dylan - Blowin\u0026rsquo; The Wind 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/ru/p/%D0%BB%D1%8E%D0%B1%D0%B8%D0%BC%D0%B0%D1%8F-%D0%B7%D0%B0%D0%BF%D0%B0%D0%B4%D0%BD%D0%B0%D1%8F-%D0%BC%D1%83%D0%B7%D1%8B%D0%BA%D0%B0/","title":"Любимая западная музыка"},{"content":"Установка PowerToys через командную строку Здесь показано, как установить PowerToys через командную строку.\n1 winget install Microsoft.PowerToys --source winget Удаление PowerToys через командную строку 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/ru/p/powertoys%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB/","title":"Установка PowerToys через командную строку"},{"content":"Давайте проявим уважение Давайте уважать тех, кто может делать то, чего не можем мы\nВ обществе на удивление много людей, которые оценивают работу и должности и не проявляют уважения\nДавайте уважать людей, которые выполняют работу, которую мы не можем сделать, независимо от того, какая это работа\nЯ хочу запомнить это\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/ru/p/%D0%B4%D0%B0%D0%B2%D0%B0%D0%B9%D1%82%D0%B5-%D1%83%D0%B2%D0%B0%D0%B6%D0%B0%D1%82%D1%8C-%D1%82%D0%B5%D1%85-%D0%BA%D1%82%D0%BE-%D0%BC%D0%BE%D0%B6%D0%B5%D1%82-%D0%B4%D0%B5%D0%BB%D0%B0%D1%82%D1%8C-%D1%82%D0%BE-%D1%87%D0%B5%D0%B3%D0%BE-%D0%BD%D0%B5-%D0%BC%D0%BE%D0%B6%D0%B5%D0%BC-%D0%BC%D1%8B/","title":"Давайте уважать тех, кто может делать то, чего не можем мы"},{"content":"Splatoon 2 Наверное, Splatoon 2 — это игра, в которую я играю дольше всего в своей жизни. Я почти не играл в сюжетный режим, но подбор игроков в сетевых матчах 4 на 4 реализован очень хорошо: я могу играть с людьми примерно моего уровня, что делает игру увлекательной и не дает заскучать. Также интересно предугадывать действия противников и союзников, продумывая стратегию победы.\nОружие Оружие, которое я использую чаще всего, по порядку: «Foil Squeezer», «Splattershot Jr.», «Splat Roller» и «Foil Flingza Roller». «Splattershot Jr.» — это оружие для новичков, я часто им пользовался в самом начале.\nОчки закраски для каждого из них представлены ниже.\nОружие Очки закраски Flingza Roller 6,636,594p Splat Roller 6,200,629p Splattershot Jr. 4,211,759p Foil Squeezer 744,678p Splattershot 301,238p Об уровне Кажется, я постоянно перемещаюсь между A+ и S+, и никак не могу достичь верхних рангов S+, но я скорее наслаждаюсь самими матчами, чем стремлюсь подняться на вершину. (Если подняться слишком высоко, противники станут сильнее, появится напряжение, и игра перестанет приносить удовольствие).\nВремя игры Мое время в игре уже превысило 2500 часов.\nПланы на будущее Я хочу поддерживать свой уровень и просто получать удовольствие от игры, но также я бы хотел достичь максимума по деньгам и снаряжению. С тех пор как вышла Splatoon 3, время ожидания матчей увеличилось, а иногда матчи вообще не находятся, так что я надеюсь продолжать играть, желая, чтобы количество игроков больше не уменьшалось.\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/ru/p/splatoon-2/","title":"Splatoon 2"},{"content":"О получении награды Microsoft MVP (2023-2024) Недавно я получил награду Microsoft MVP (2023-2024). Это уже седьмой год подряд, начиная с 2017 года.\nКатегория, в которой я получил награду, — Developer Technologies .\nОглядываясь на мою прошлую деятельность, я занимался следующим:\nПубликация кода на GitHub Распространение технической информации в блоге и социальных сетях (Twitter и др.) Публикации на форуме MSDN Отзывы о продуктах Microsoft В будущем я планирую продолжать писать качественные статьи и делиться информацией.\nБольшое спасибо за вашу поддержку.\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/ru/p/microsoft-mvp%E5%8F%97%E8%B3%9E%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A62023-2024/","title":"О получении награды Microsoft MVP (2023-2024)"},{"content":"Три классические задачи на построение древней Греции Построить квадрат, равновеликий по площади данному кругу (Квадратура круга) Разделить произвольный заданный угол на три равные части (Трисекция угла) Построить куб, объем которого в два раза больше объема заданного куба (Удвоение куба) Архимедова спираль На плоскости луч OB вращается вокруг фиксированной точки O с постоянной скоростью. Если начальное положение — OA, и точка P начинает движение от O вдоль OB с постоянной скоростью одновременно с началом вращения, то линия, которую описывает точка P, называется архимедовой спиралью.\nТеорема Паппа Циклоида Конхоида Никомеда Циссоида Диокла Метод касательных Ферма Метод нормалей Декарта Хронология Год Событие Около 3400 г. до н.э. Шумеры используют глиняные жетоны для счета Около 3000 г. до н.э. Появление иероглифической математики в Египте Около 2800 г. до н.э. Индская цивилизация использует меры и веса на основе десятичной системы Около 2700 г. до н.э. Египтяне используют веревку и пифагоровы тройки для проверки углов Около 2500 г. до н.э. Обнаружен абак, инструмент для вычислений Около 2500 г. до н.э. Ссылки История математики ","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/ru/p/%D0%B8%D1%81%D1%82%D0%BE%D1%80%D0%B8%D1%8F-%D0%BC%D0%B0%D1%82%D0%B5%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B8/","title":"История математики"},{"content":"О трекболе Elecom Deft Pro M-DPT1MRBK Прошла примерно неделя с момента покупки трекбола Elecom \u0026ldquo;Deft Pro M-DPT1MRBK\u0026rdquo;, поэтому я сделаю обзор своих впечатлений от его использования.\nОсновные особенности\nБольшое количество кнопок (8 кнопок) Можно подключить 3 способами: по кабелю, через беспроводной ресивер и Bluetooth Большой размер шара (средний диаметр 44 мм) Цена покупки на Amazon: 7 012 иен (по состоянию на 2 мая 2021 года) Плюсы По сравнению с мышью нет необходимости двигать запястьем, поэтому нагрузка на запястье снижается Поскольку кнопок много, им можно назначать различные функции В настоящее время я назначил их так, как показано выше. Вы также можете изменять назначения кнопок для каждого приложения. ※ Для назначения кнопок требуется установка специального программного обеспечения. Поскольку шар большой, делать точные движения относительно легко по сравнению с другими трекболами Минусы Вокруг трекбола скапливается пыль, поэтому необходимо регулярно (раз в несколько дней) снимать шар и чистить его Поскольку ощущение от работы отличается от мыши (перемещение курсора указательным и средним пальцами, управление колесиком мыши большим пальцем), требуется время, чтобы привыкнуть Хотя я написал выше, что легко делать точные движения, всё же трудно перемещать курсор на один пиксель с помощью трекбола Нельзя использовать колесико, удерживая левую кнопку (например, если вы хотите изменить масштаб при выделении области в Paint) В заключение, я думаю, что это один из самых дорогих трекболов, но в целом им довольно легко управлять, и я думаю, что моя работа стала более продуктивной. Надеюсь, это будет полезно для тех, кто рассматривает возможность покупки.\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/ru/p/%D1%80%D0%B5%D0%BA%D0%BE%D0%BC%D0%B5%D0%BD%D0%B4%D0%B0%D1%86%D0%B8%D1%8F-%D1%82%D1%80%D0%B5%D0%BA%D0%B1%D0%BE%D0%BB%D0%B0-deft-pro-m-dpt1mrbk/","title":"Рекомендация трекбола Deft Pro (M-DPT1MRBK)"},{"content":"Что такое wxWidgets wxWidgets — это библиотека C++ для создания графического интерфейса, которая работает на таких платформах, как Windows, Mac, Linux, Android и iOS.\nУстановка wxWidgets Откройте https://www.wxwidgets.org/downloads/ и скачайте Windows Installer. Запустите wxMSW-3.2.2.1-Setup.exe для установки. Из установленной папки откройте \u0026ldquo;C:\\wxWidgets-3.2.2.1\\build\\msw\\wx_vc17.sln\u0026rdquo;. Открыв wx_vc17.sln, выберите Сборка \u0026gt; Пакетная сборка. Нажмите кнопку Выбрать все, а затем кнопку Перестроить. После завершения сборки временно закройте Visual Studio. Создание примера проекта Откройте Visual Studio. Выберите Файл \u0026gt; Создать \u0026gt; Проект. Выберите Классическое приложение Windows (вкладки C++, Windows, Рабочий стол). Введите wxWidgetsSample в поле Имя проекта. Нажмите Создать. Щелкните правой кнопкой мыши wxWidgetsSample и выберите Свойства. Добавьте C:\\wxWidgets-3.2.2.1\\include и C:\\wxWidgets-3.2.2.1\\include\\msvc в Свойства конфигурации \u0026gt; C/C++ \u0026gt; Дополнительные каталоги включаемых файлов. Добавьте C:\\wxWidgets-3.2.2.1\\lib\\vc_x64_lib в Свойства конфигурации \u0026gt; Компоновщик \u0026gt; Дополнительные каталоги библиотек. Откройте wxWidgetsSample.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 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;); } После сборки и запуска откроется следующее окно. Ссылки Пример проекта доступен ниже. wxWidgetsSample\nОфициальный сайт Игра с использованием C++ и wxWidgets На этом всё.\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/ru/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":"Пример использования wxWidgets"},{"content":"Фильмы, которые хочу посмотреть (отмечать по мере просмотра) Укрась прощальное утро цветами обещания Любимое уравнение профессора Летние войны Скрытые фигуры Умница Уилл Хантинг Игры разума Вселенная Стивена Хокинга Человек, который познал бесконечность Хокинг (Бенедикт Камбербэтч) Тэнти: Самурай-астроном Пи Двадцать одно Коэффициент интеллекта (I.Q.) Доказательство 3 идиота Баффало 66 Заводной апельсин Обратная тяга Парень из Асакусы Лучший стрелок (Top Gun) Матрица: Воскрешение Я — легенда Код да Винчи Социальная сеть Врата;Штейна (STEINS;GATE) Странники (Planetes) Гравитация Вайолет Эвергарден Психопаспорт Клинок, рассекающий демонов Принцесса Мононоке Winny Нулевой фокус Зверополис Твое имя Дитя погоды Назад в будущее (1,2,3) Годзилла: Возрождение Новый Ультрамен Новый Камен Райдер Судзумэ, закрывающая двери 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/ru/p/%E6%98%A0%E7%94%BBtodo%E3%83%AA%E3%82%B9%E3%83%88/","title":"Список задач по фильмам"},{"content":"Крутые шаблоны веб-страниц\nhtml5up https://html5up.net/ Подумал, что хочу попробовать использовать, поэтому делаю заметку.\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/ru/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":"Крутые шаблоны веб-страниц (html5up)"},{"content":"Предварительные условия Стандарт ISO C++ 20 (/std:c++20) Код 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()); Вот как можно вывести текущее время в формате ISO8601 в C++.\nСсылки 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/ru/p/%D0%BA%D0%B0%D0%BA-%D0%B2%D1%8B%D0%B2%D0%B5%D1%81%D1%82%D0%B8-%D1%82%D0%B5%D0%BA%D1%83%D1%89%D0%B5%D0%B5-%D0%B2%D1%80%D0%B5%D0%BC%D1%8F-%D0%B2-%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82%D0%B5-iso8601-%D0%B2-c-/","title":"Как вывести текущее время в формате ISO8601 в C++"},{"content":"Я покажу вам, как создать ярлык для завершения работы Windows.\nУдобно иметь возможность завершить работу, дважды щелкнув по созданному ярлыку на рабочем столе.\nСпособ создания 1. Щелкните правой кнопкой мыши на рабочем столе и выберите Создать \u0026gt; Ярлык 2. Появится экран создания ярлыка. Введите shutdown.exe -s -f -t 0 и нажмите Далее 3. Введите имя ярлыка Завершение работы и нажмите Готово 4. Измените значок созданного ярлыка Щелкните правой кнопкой мыши созданный ярлык и выберите Свойства\nНажмите Сменить значок\nВыберите красный квадратный значок и нажмите ОК, затем снова нажмите ОК, чтобы закрыть окно свойств.\nНа этом всё.\nПри двойном щелчке по созданному ярлыку работа Windows будет завершена.\nПримечание: диалоговое окно подтверждения завершения работы не отображается.\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/ru/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":"Как создать ярлык для завершения работы Windows"},{"content":"В этой статье мы расскажем, как применить мозаику к определенной части изображения в paint.net.\nПри загрузке изображений в интернет иногда возникает необходимость скрыть определенные участки с помощью мозаики. С помощью paint.net вы можете быстро и легко отредактировать изображение.\nИнструкция 1. Откройте изображение, которое хотите отредактировать, в paint.net 2. Используйте инструмент выделения, чтобы выбрать область для наложения мозаики (можно выбрать несколько областей) 3. В меню выберите: Эффекты (Effects) \u0026gt; Искажение (Distort) \u0026gt; Мозаика (Pixelate) Размер ячейки определяет крупность мозаики. Чем больше значение, тем сильнее скрывается изображение. [Уменьшение] Выберите Билинейный (многовыборочный) [Увеличение] Выберите Ближайший сосед Нажмите OK, чтобы закрыть диалоговое окно.\n4. После того как мозаика будет применена к изображению, сохраните его. На этом всё.\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/ru/p/how-to-apply-mosaic-to-a-specific-part-of-an-image-in-paint-net/","title":"Как применить мозаику к определенной части изображения в paint.net"},{"content":"Я покажу вам, как добавить рамку к изображению с помощью paint.net.\nШаги 1. Откройте изображение, к которому хотите добавить рамку, в paint.net 2. Установите вторичный цвет (это будет цвет рамки) Если цветовая палитра не отображается, нажмите клавишу F8 на клавиатуре.\nЧтобы установить черный цвет, нажмите .\n3. Меню \u0026gt; Изображение \u0026gt; Выберите Изменить размер холста Увеличьте ширину и высоту на 2 пикселя каждую. Увеличение на 2 пикселя означает, что рамка будет 1 пиксель. Если вы хотите, чтобы рамка была 5 пикселей, увеличьте ширину и высоту на 10 пикселей каждую.\nВыберите якорь \u0026ldquo;По центру\u0026rdquo; и нажмите ОК.\n4. Рамка будет добавлена к изображению, сохраните изображение. На этом все.\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/ru/p/%D0%BA%D0%B0%D0%BA-%D0%B4%D0%BE%D0%B1%D0%B0%D0%B2%D0%B8%D1%82%D1%8C-%D1%80%D0%B0%D0%BC%D0%BA%D1%83-%D0%BA-%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D1%8E-%D1%81-%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E-paint-net/","title":"Как добавить рамку к изображению с помощью paint.net"},{"content":"Введение Используя сервис под названием Ranklet , вы можете легко получить и разместить рейтинг популярных страниц из Google Analytics.\nВ этой статье я расскажу, как разместить его в блоге HUGO.\nПример работы Подготовка Google Analytics должен быть настроен на сайте Шаги Перейдите в Ranklet Нажмите Sign in with Google , чтобы войти с помощью учетной записи Google (должна быть привязана к учетной записи Google Analytics) Нажмите Разрешить\nНастройте основную информацию Я настроил, как показано выше.\nВ Google Analytics View выберите представление, для которого вы хотите получить рейтинг. Настройте замену текста Я настроил, как показано выше. Это настроено для удаления | kenji.blog из заголовка страницы.\nНастройте шаблон 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 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 (изменен размер шрифта, описание будет отображаться в 3 строки) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 #ranklet-{{context.id}} { .ranklet-reset { // リセット table, tr, td, div, span { margin: 0; padding: 0; border: 0; font-size: 100%; font: inherit; vertical-align: baseline; line-height: 1; box-sizing: border-box; } } .ranklet-table { border-collapse: separate; border-spacing: 8px 24px; width: 100%; word-break: break-all; td { vertical-align: middle; } .ranklet-rank { text-align: center; font-size: 120%; } .ranklet-image { text-align: center; img { max-width: 128px; max-height: 128px; } } .ranklet-meta { .ranklet-title { font-size: 20px; line-height: 125%; } .ranklet-description { font-size: 16px; margin-top: 8px; line-height: 125%; display: -webkit-box; overflow: hidden; -webkit-box-orient: vertical; -webkit-line-clamp: 3; /* 行数 */ } } } } JavaScript без изменений Скопируйте HTML из публикации на сайте Скопируйте отображаемый HTML\nВставьте в шаблон HUGO Создайте layouts/partials/ranklet.html и вставьте скопированный 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; Вставьте приведенный ниже код в строку перед \u0026lt;/footer\u0026gt; в layouts/_default/single.html 1 {{- partial \u0026#34;ranklet.html\u0026#34; . }} На этом все. Рейтинг будет отображаться в нижней части этой страницы, как показано ниже.\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/ru/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":"Как получить и разместить рейтинг популярных страниц из Google Analytics"},{"content":"Python Google Colaboratory Google Colaboratory — это среда выполнения Python, которая может запускаться онлайн.\nТакже доступно использование GPU. С помощью блокнотов Colab можно писать исполняемый код и форматированный текст (включая изображения, HTML, LaTeX и т. д.) в одном документе. Основан на Jupyter Notebook.\nRust Rust Playground JavaScript Javascript Playground Java paiza.IO Online Java compiler Haskell Haskell Playground Swift Online Swift Playground C++ C++ 14 Другое AWS Cloud9 Онлайн-интегрированная среда разработки, предоставляемая Amazon AWS. Поставляется с предварительно упакованными инструментами для более чем 40 языков программирования, таких как Node.js, JavaScript, Python, PHP, Ruby, Go, C++ и других.\nVisual Studio Code for the Web Онлайн-среда разработки от Microsoft. Однако невозможно выполнять или отлаживать языки, требующие компиляции.\npaiza.IO Онлайн-среда выполнения, поддерживающая 24 основных языка, включая C, C++, Java, Ruby, Python, PHP, Perl и др.\nCodePen Онлайн-среда выполнения для HTML, CSS и JavaScript.\ncodeanywhere Онлайн IDE. Вы можете делиться кодом и общаться в чате.\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/ru/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":"【По языкам】Сводка сред выполнения кода онлайн"},{"content":"Что такое решето Эратосфена Решето Эратосфена — это алгоритм для нахождения всех простых чисел до заданного целого числа. Алгоритм прост и может быть реализован с помощью следующих шагов:\nСоздайте логический (bool) массив из N элементов и инициализируйте все элементы как true. Установите 0-й и 1-й элементы массива как false (так как 0 и 1 не являются простыми числами). Если 2-й элемент массива равен true, выведите 2 как простое число. Установите все элементы, кратные 2, начиная с $2^2$, в false ※ Если 3-й элемент массива равен true, выведите 3 как простое число. Установите все элементы, кратные 3, начиная с $3^2$, в false. Повторите тот же процесс для 4-го, 5-го, \u0026hellip;, N-го элементов. ※ Причина, по которой мы устанавливаем в false элементы, начиная с квадрата числа, заключается в том, что числа, меньшие квадрата, уже были обработаны (перечисление завершено).\nРеализация на 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; } } } } Немного более быстрая версия Мы реализуем немного более быструю версию, учитывая следующие моменты:\nВместо инициализации массива значением true, инициализируем его значением false (так быстрее). Поскольку кратные 2 не являются простыми числами, мы опускаем процесс установки кратных 2 в false. Нет необходимости выполнять цикл до n; если найти простые числа до квадратного корня из n, можно найти все простые числа до 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); } } Источники Решето Эратосфена ","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/ru/p/kak-najti-prostye-chisla-do-1000-s-pomoshchyu-resheta-eratosfena/","title":"Как найти простые числа до 1000 с помощью решета Эратосфена"},{"content":"Установка через терминал Откройте терминал Выполните sudo gem install cocoapods → Почему-то появилось следующее сообщение об ошибке, и установка не удалась. Вывод 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. Поэтому я поискал сообщение об ошибке в интернете (см. \u0026ldquo;Справочные материалы\u0026rdquo; ниже) и выполнил следующую команду 1 /bin/bash -c \u0026#34;$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)\u0026#34; Вывод 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 Выполните brew install cocoapods Вывод 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`). Выполните pod --version Вывод 1 1.12.0 Вроде бы всё успешно установилось.\nСправочные материалы 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/ru/p/%D0%BA%D0%B0%D0%BA-%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%B8%D1%82%D1%8C-cocoapods-%D0%BD%D0%B0-mac/","title":"Как установить CocoaPods на mac"},{"content":"Как получить количество созданных записей по дням с помощью SOQL в Salesforce Откройте консоль разработчика. Откройте вкладку Query Editor. Вставьте и выполните следующий SOQL-запрос. 1 select day_only(createdDate), count(createdDate) from account group by day_only(createdDate) order by count(createdDate) desc limit 10 Пожалуйста, измените account на имя любого объекта, который вы хотите получить, и выполните запрос.\nСсылки 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/ru/p/%D0%BA%D0%B0%D0%BA-%D0%BF%D0%BE%D0%BB%D1%83%D1%87%D0%B8%D1%82%D1%8C-%D0%BA%D0%BE%D0%BB%D0%B8%D1%87%D0%B5%D1%81%D1%82%D0%B2%D0%BE-%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85-%D0%B7%D0%B0%D0%BF%D0%B8%D1%81%D0%B5%D0%B9-%D0%BF%D0%BE-%D0%B4%D0%BD%D1%8F%D0%BC-%D1%81-%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E-soql-%D0%B2-salesforce/","title":"Как получить количество созданных записей по дням с помощью SOQL в Salesforce"},{"content":"\nТребования Аккаунт Google Шаги Перейдите на https://colab.research.google.com/ Выберите «Файл» → «Создать блокнот» Вставьте и выполните следующий код 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() # отображение легенды plt.show() Результат Ссылки 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/ru/p/%D0%BA%D0%B0%D0%BA-%D1%80%D0%B8%D1%81%D0%BE%D0%B2%D0%B0%D1%82%D1%8C-%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D0%BA%D0%B8-%D1%81-%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E-python-matplotlib-pyplot/","title":"Как рисовать графики с помощью Python (matplotlib.pyplot)"},{"content":"Что потребуется Twitter API Twitter API SECRET Twitter ACCESS TOKEN Twitter ACCESS TOKEN SECRET Аккаунт Google Обратитесь к справочным сайтам, чтобы узнать, как получить Twitter API.\nШаги для публикации твита с помощью API Перейдите на https://colab.research.google.com/ Выберите \u0026ldquo;Файл\u0026rdquo; -\u0026gt; \u0026ldquo;Создать блокнот\u0026rdquo; Вставьте и выполните следующий код (используйте фактические значения, которые вы получили сами) 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; Вставьте и выполните следующий код 1 import tweepy Вставьте и выполните следующий код (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;) → Будет опубликован твит hello\nВставьте и выполните следующий код (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;) → Будет опубликован твит hello v2\nНа этом всё\nСсылки [По состоянию на апрель 2021] Исчерпывающее руководство по заявке на использование Twitter API с примерами и скриншотами [Никаких сложных настроек!] Рекомендуем Google Colaboratory как тестовую среду для Twitter API [Исходный код также прилагается] [Tweepy] Twitter API v2: Твиты, ответы, твиты с опросом, твиты с медиа (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/ru/p/%D0%BA%D0%B0%D0%BA-%D0%BD%D0%B0%D0%BF%D0%B8%D1%81%D0%B0%D1%82%D1%8C-%D1%82%D0%B2%D0%B8%D1%82-%D1%81-%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E-twitter-api-%D0%B8-google-colaboratory/","title":"Как написать твит с помощью Twitter API и Google Colaboratory"},{"content":"Что такое OpenSSL Это библиотека с открытым исходным кодом, которая предоставляет функции, необходимые для шифрованной связи.\nЧтобы использовать её из программы, необходимо собрать библиотеку из предоставленного исходного кода на языке C.\nНиже приведена процедура сборки.\nПодготовка среды сборки Perl\nСкачайте strawberry-perl-5.32.1.1-64bit.msi с https://strawberryperl.com/. Подойдет последняя версия.\nNASM\nСкачайте 2.16.01/nasm-2.16.01-win64.zip из раздела Download на https://www.nasm.us/. Подойдет последняя версия, кроме rc. После установки необходимо добавить папку с установленным NASM в переменную среды PATH.\nVisual Studio 2022 или Build Tools for Visual Studio 2022\nУстановите Visual Studio 2022 Community или Build Tools for Visual Studio 2022 с https://visualstudio.microsoft.com/ja/downloads/.\nПроцедура сборки OpenSSL в Windows Скачайте и распакуйте openssl-3.1.0.tar.gz с https://www.openssl.org/source/. Если не получается распаковать, выполните команду tar -xzf openssl-3.1.0.tar.gz в командной строке. Запустите командную строку от имени администратора Откройте распакованную папку Выполните следующую команду. Измените часть Community в соответствии с версией установленного Visual Studio. 1 \u0026#34;C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\VC\\Auxiliary\\Build\\vcvarsall.bat\u0026#34; x64 Выполните следующую команду 1 perl Configure VC-WIN64A Выполните следующую команду (это займет много времени) 1 nmake Выполните следующую команду (это займет много времени) 1 nmake test Выполните следующую команду 1 nmake install В случае успеха OpenSSL будет установлен в C:\\Program Files\\OpenSSL.\nГотово.\nСсылки 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/ru/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":"Как собрать OpenSSL в Windows"},{"content":"Что такое i18n? i18n — это аббревиатура от Internationalization, что означает интернационализацию. Поскольку слово Internationalization длинное, оно сокращается до i18n, что означает наличие 18 символов между первой буквой i и последней буквой n.\nЭтот термин иногда используется в контексте интернационализации программного обеспечения.\nК основным элементам, на которые направлена интернационализация, относятся следующие: 1\nНабор символов (стандартные кодировки и т.д.) Направление текста (слева направо, справа налево, сверху вниз влево и др.) Текст Шрифты Форматирование Числа (символ десятичной запятой, разделитель групп разрядов, количество цифр в группе и т.д.) Дата и время (формат записи года/месяца/дня, различия в используемых календарях, таких как исламский/григорианский/еврейский/японский и т.д.) Разница во времени для информации о дате и времени Информация о валюте Интернационализация и локализация - Википедия\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/ru/p/i18n%E3%81%A8%E3%81%AF/","title":"Что такое i18n?"},{"content":"Как создать презентацию с помощью HTML reveal.js — это инструмент для создания презентаций с использованием HTML и Markdown, который обладает следующими функциями:\nРазнообразные функции презентации, такие как математические формулы, анимации и управление смахиванием Возможность настройки тем и макетов Функции навигации, поддерживающие несколько устройств, такие как мышь, клавиатура и сенсорная панель Предоставление расширенных функций, таких как автовоспроизведение слайдов и встраивание видео Возможность экспорта в формат PDF Благодаря этим функциям пользователи могут легко создавать интерактивные и привлекательные презентации.\nУстановка и использование reveal.js Самый простой способ использования — скачать весь ZIP-архив со следующей страницы и распаковать его.\nОткройте https://revealjs.com/installation и скачайте master.zip по ссылке Откройте index.html из распакованной папки в браузере Отредактируйте index.html, чтобы создать свою собственную презентацию ※ Демонстрационный HTML-код написан в demo.html, так что вы можете использовать его в качестве справки.\nСпособы применения Созданную презентацию можно опубликовать как веб-страницу без изменений или экспортировать в виде PDF. Кроме того, поскольку исходный код презентации — это текст, им легко управлять с помощью систем контроля версий.\nКажется, презентации также можно создавать в формате Markdown.\nСсылки Давайте использовать reveal.js для будущих презентаций Список примеров синтаксиса Markdown ","date":"2023-04-06T23:23:46+09:00","image":"http://kenji.blog/p/html%E3%81%A7%E3%83%97%E3%83%AC%E3%82%BC%E3%83%B3%E8%B3%87%E6%96%99%E3%82%92%E4%BD%9C%E3%82%8B%E6%96%B9%E6%B3%95reveal.js/img_hu4de64f3f6be8c50037c2a4c6c2d48287_30871_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/ru/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":"Как создать презентацию с помощью HTML (reveal.js)"},{"content":"Что такое Stable diffusion Stable diffusion — это ИИ, генерирующий изображения на основе введенной текстовой информации, разработанный исследовательской группой Мюнхенского университета в Германии. Обучаясь на различных изображениях, он может создавать самые разные картинки, от фотореалистичных до иллюстраций.\nВ этот раз я расскажу, как генерировать иллюстрации с использованием предварительно обученных данных Stable diffusion.\nЧто понадобится Аккаунт Google И всё.\nПроцесс генерации Откройте https://colab.research.google.com В левом верхнем углу выберите Файл и нажмите Создать блокнот В меню Редактировать выберите Настройки блокнота Измените Аппаратный ускоритель на GPU Вставьте следующий код и выполните его 1 !pip install diffusers==0.8.0 transformers Вставьте следующий код и выполните его 1 from diffusers import StableDiffusionPipeline Вставьте следующий код и выполните его 1 2 pipe = StableDiffusionPipeline.from_pretrained(\u0026#34;gsdf/Counterfeit-V2.5\u0026#34;) pipe.to(\u0026#34;cuda\u0026#34;) Вставьте следующий код и выполните его 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 Используемый здесь Prompt основан на Prompt с https://huggingface.co/gsdf/Counterfeit-V2.5.\nРезультаты генерации (несколько) Ссылки https://huggingface.co/gsdf/Counterfeit-V2.5 Я попытался создать программу для генерации изображений с использованием искусственного интеллекта (ИИ) за 15 минут 【Живое программирование】 ","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/ru/p/%D0%BA%D0%B0%D0%BA-%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D1%82%D1%8C-%D0%B8%D0%BB%D0%BB%D1%8E%D1%81%D1%82%D1%80%D0%B0%D1%86%D0%B8%D0%B8-%D1%81-%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E-%D0%B8%D0%B8-stablediffusion/","title":"Как создать иллюстрации с помощью ИИ (StableDiffusion)"},{"content":"Что такое исполняемый файл (exe)? Файл, который может быть запущен в Windows. В основном он написан в формате, называемом форматом PE. Он содержит машинный код для выполнения и ресурсы, такие как значки и изображения.\nСуществует несколько инструментов для анализа исполняемых файлов, поэтому на этот раз я расскажу о них.\n7-Zip EXE-файлы иногда создаются путем сжатия файлов, так как они, как правило, имеют большой размер. В этом случае вы можете извлечь исполняемый файл и проверить его содержимое с помощью программного обеспечения для сжатия и распаковки файлов 7-Zip. WinRAR - еще один подобный инструмент, который также может распаковывать файлы.\nResource Hacker Вы можете извлекать ресурсы (значки, растровые изображения, диалоговые окна, строки и т. д.), находящиеся в EXE-файле. Кроме того, поскольку он также работает как шестнадцатеричный редактор, вы можете редактировать и переписывать содержимое EXE-файла.\nPE Explorer Вы можете анализировать PE-файлы для Windows (EXE, DLL, OCX, SYS, драйверы). PE Explorer предоставляет различные функции анализа, такие как отображение структуры файла, заголовка файла, записей каталога, а также экспортируемых функций и символов.\nDependency Walker Вы можете проверить файлы DLL, от которых зависит EXE-файл, и убедиться, что они загружены правильно. Вы также можете отслеживать вызовы функций файлов DLL.\nGhidra Это мощный инструмент реверс-инжиниринга, разработанный АНБ (Агентством национальной безопасности США) и бесплатно доступный в качестве инструмента с открытым исходным кодом. Он не только дизассемблирует EXE-файлы (преобразует их в язык ассемблера), но также имеет функцию декомпиляции в форму, близкую к языку C, что делает его очень популярным.\nIDA Free / IDA Pro Это высокопроизводительный дизассемблер и декомпилятор, который стал мировым отраслевым стандартом в области анализа вредоносных программ и реверс-инжиниринга. Версия Pro стоит очень дорого, но в личных или некоммерческих целях вы можете бесплатно использовать версию с ограниченным функционалом «IDA Free».\nx64dbg (x32dbg) Это отладчик с открытым исходным кодом для Windows. Он специализируется на «динамическом анализе», который анализирует содержимое и состояние памяти, выполняя исполняемый файл пошагово, и часто используется для взлома crackme (задач для анализа) и исследования поведения вредоносных программ.\nILSpy / dotPeek Если целевой EXE-файл был создан с использованием языков семейства .NET, таких как C#, вы можете использовать эти инструменты для декомпиляции до состояния, почти идентичного исходному коду, и раскрыть его содержимое.\nЭти инструменты полезны для проверки содержимого EXE-файла, но вы должны быть осторожны. Редактирование файлов или их использование в незаконных целях может привести к проблемам с авторскими правами и безопасностью, поэтому, пожалуйста, используйте их только при полном понимании этого.\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/ru/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/","title":"Инструменты для анализа содержимого исполняемого файла (exe)"},{"content":"Введение Я покажу вам, как переключать приложения на Mac подобно Windows (Alt+Tab).\nПоскольку этого сложно достичь изменением стандартных настроек, этот метод включает установку приложения.\nДемонстрация работы Как настроить (macOS Ventura) Откройте https://alt-tab-macos.netlify.app Нажмите Download the latest release Откройте загруженное приложение Следуйте инструкциям по установке Теперь вы сможете переключать приложения с помощью Alt+Tab, как в Windows.\nКонец\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/ru/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":"Как переключать приложения как в Windows (Alt+Tab) на Mac"},{"content":"Введение При переключении между Windows и Mac часто используемые сочетания клавиш, такие как копирование, вставка, отмена и т. д., различаются. Здесь я расскажу, как их синхронизировать.\nСпособ настройки (macOS Ventura) Откройте «Системные настройки» Выберите «Клавиатура» Выберите «Сочетания клавиш» Выберите «Клавиши модификации» Назначьте клавишу Control(^) на «⌘ Command» Назначьте клавишу Command(⌘) на «^ Control» Нажмите «Готово» Вот и все\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/ru/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":"Как сделать так, чтобы сочетания клавиш для копирования и вставки на Mac совпадали с Windows"},{"content":"Введение Я использую американскую клавиатуру (US), и в Windows я переключаюсь на японский ввод с помощью Alt + `. Я хотел переключаться с помощью той же клавиши на mac, и, поискав, я обнаружил, что это можно изменить в настройках.\nКак настроить (macOS Ventura) Откройте Системные настройки Выберите Клавиатура Выберите Сочетания клавиш Выберите Источники ввода Дважды щелкните по обозначению сочетания клавиш справа от \u0026ldquo;Выбрать следующий источник в меню ввода\u0026rdquo; Введите Alt + ` Нажмите Готово Теперь вы сможете переключаться между английским ⇔ японским с помощью Alt + `. Однако по умолчанию катакана включена в переключение, поэтому я удалил катакану из источников ввода, выполнив следующие действия.\nОткройте Системные настройки Выберите Клавиатура Нажмите \u0026ldquo;Изменить\u0026rdquo; справа от Японский - Ввод ромадзи в источниках ввода Нажмите Японский - Ввод ромадзи Снимите флажок \u0026ldquo;Катакана\u0026rdquo; в режимах ввода Нажмите Готово На этом все\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/ru/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":"Как изменить сочетание клавиш для переключения между японским и английским вводом на mac"},{"content":"Как найти расположение исполняемого файла в пути Windows При выполнении команды с указанием исполняемого файла иногда хочется узнать, где находится этот исполняемый файл. В таких случаях можно использовать команду ниже, чтобы проверить расположение исполняемого файла.\n1 where \u0026lt;имя исполняемого файла\u0026gt; Например, если вы хотите узнать расположение Paint (mspaint.exe), сделайте следующее:\n1 where mspaint.exe Ссылки 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/ru/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":"Как найти расположение исполняемого файла в пути Windows"},{"content":"Покупка mac mini(2018) Я купил подержанный mac mini(2018) предыдущего поколения на Mercari. Характеристики следующие:\nПроцессор: 3.2GHz 6-ядерный Intel Core i7 Оперативная память: 32GB Накопитель: 1TB SSD Цена составляет 77 000 иен.\nПричина покупки Я использую mac mini с почти такими же характеристиками на работе для разработки мобильных приложений, и хотел создать среду разработки и дома (особенно среду выполнения xcode). У меня есть macbook pro, но я купил его 9 лет назад, и он работает довольно медленно, поэтому я его почти не использую. Я хотел заниматься разработкой приложений для iOS в личных целях. Сразу же установил xcode и inteliJ IDEA Версия xcode — Version 14.3 (14E222b) Версия inteliJ IDEA — 2023.1 Ну что ж! Начнем разработку!\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/ru/p/%D0%BF%D0%BE%D0%BA%D1%83%D0%BF%D0%BA%D0%B0-mac-mini2018/","title":"Покупка mac mini(2018)"},{"content":"О \u0026ldquo;Unsplash\u0026rdquo; https://unsplash.com/ja/\nСайт фотоматериалов \u0026ldquo;Unsplash\u0026rdquo; вкратце имеет следующие особенности:\nВсе изображения можно использовать бесплатно Разрешено коммерческое использование Разрешена обработка изображений Разрешение на использование не требуется Указание авторства не требуется Он очень удобен при написании статей в блоге, поэтому обязательно попробуйте.\n※ Что касается лицензии, пожалуйста, обратитесь к \u0026ldquo;сноске\u0026rdquo; ниже. 1\nЯ также буду использовать его на этом сайте.\nЛицензия Unsplash\u0026#160;\u0026#x21a9;\u0026#xfe0e;\n","date":"2023-04-02T14:44:17+09:00","image":"http://kenji.blog/p/%E3%83%96%E3%83%AD%E3%82%B0%E3%81%A7%E4%BD%BF%E3%81%88%E3%82%8B%E5%86%99%E7%9C%9F%E7%B4%A0%E6%9D%90%E3%82%B5%E3%82%A4%E3%83%88unsplash%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/img_1_hu43cbd10eab78d2e7468dbb36abe8d794_828454_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/ru/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":"О сайте фотоматериалов \"Unsplash\" для блогов"},{"content":"Получение примера egui Вы можете запустить пример egui с помощью следующих команд.\n1 2 3 git clone https://github.com/emilk/eframe_template/ egui_test cd egui_test cargo run Загрузка шрифта с поддержкой японского языка Чтобы отобразить японский язык, необходимо загрузить соответствующий шрифт.\nВ src/app.rs добавьте следующие строки в метод pub fn new.\n1 2 3 4 5 6 7 8 9 10 11 12 // Загрузка шрифта с поддержкой японского языка 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); Теперь вы можете отображать японский язык. ","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/ru/p/how-to-display-japanese-in-egui-ru/","title":"Как отобразить японский язык в egui"},{"content":"Что такое KaTeX? KaTeX — это JavaScript-библиотека для отображения математических формул в стиле LaTeX в HTML.\nВ частности, вы можете отображать формулы, подобные этой:\n$$f(x) = x^2 + x + 41$$ Существуют и другие библиотеки для отображения формул в стиле LaTeX, но KaTeX славится своей простотой и скоростью.\nКак внедрить в hugo Создайте новый файл layouts/partials/math.html в структуре папок hugo. Содержимое должно быть следующим:\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; Затем добавьте следующий код в существующий файл layouts/partials/extend_head.html. 1 2 3 {{ if or .Params.math .Site.Params.math }} {{ partial \u0026#34;math.html\u0026#34; . }} {{ end }} Теперь вы готовы использовать KaTeX. Добавив math: true в front matter вашей страницы, вы сможете активировать KaTeX.\nВсе, что вам нужно сделать, это написать формулы в стиле LaTeX в теле вашей статьи. 1 $$ e^{i \\pi} = -1 $$ При написании, как показано выше, это будет отображаться следующим образом:\n$$ e^{i \\pi} = -1 $$ Ссылки Math Typesetting | PaperModX KaTex Auto-render Extension Введение в 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/ru/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":"Как включить KaTeX (отображение формул в стиле LaTeX) в hugo"},{"content":"Как завоевывать друзей и оказывать влияние на людей https://amzn.to/3YTv0Dr\nСмелость не нравиться https://amzn.to/3n3SVCQ\nСдвиг жизни: жизненная стратегия в эпоху 100-летней жизни https://amzn.to/3TtKUDf\n7 навыков высокоэффективных людей 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/ru/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":"Рекомендуемые бизнес-книги"},{"content":"Рекомендуемые расширения Chrome Я познакомлю вас с расширениями Chrome, которые использую в настоящее время. Хотя они для Chrome, вы также можете использовать их в Microsoft Edge.\n1. simpleGestures Расширение, позволяющее использовать жесты мышью. Вы можете управлять браузером без использования клавиатуры или наведения на кнопки панели инструментов.\nНапример, вы можете вернуться назад, удерживая правую кнопку мыши и сдвинув мышь влево, или перейти вперед, удерживая правую кнопку мыши и сдвинув мышь вправо.\nОно также имеет открытый исходный код, поэтому оно очень надежно.\nsimpleGestures github 2. uBlock Origin Расширение, блокирующее рекламу. Оно с открытым исходным кодом, поэтому высоконадежно. Кроме того, оно использует мало ресурсов процессора и памяти и работает плавно.\nuBlock Origin github 3. Переводчик DeepL Расширение Chrome, позволяющее переводить страницы с помощью всемирно известного сервиса переводов DeepL. При выборе текста, который вы хотите перевести в браузере, появится значок DeepL, при нажатии на который он будет переведен автоматически.\nDeepL Translator 4. Боковая панель ChatGPT Расширение для использования ChatGPT на боковой панели. Вы можете отобразить боковую панель, нажав Ctrl+P, и сразу же задать вопросы ИИ. Если на странице выделен какой-либо текст, он будет скопирован прямо в ваш вопрос, поэтому вы можете немедленно задать его с помощью Ctrl+Enter.\nChatGPT Sidebar 5. Salesforce DevTools Расширение, добавляющее полезные функции для разработки Salesforce. Я думаю, что это не нужно для тех, кто не использует 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/ru/p/%D1%80%D0%B5%D0%BA%D0%BE%D0%BC%D0%B5%D0%BD%D0%B4%D1%83%D0%B5%D0%BC%D1%8B%D0%B5-%D1%80%D0%B0%D1%81%D1%88%D0%B8%D1%80%D0%B5%D0%BD%D0%B8%D1%8F-chrome/","title":"Рекомендуемые расширения Chrome"},{"content":"Как обновить rustc Просто выполните следующую команду.\n1 rustup update Пример вывода 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/ru/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":"Как обновить rustc"},{"content":"Что такое egui Это библиотека GUI, которую можно использовать с rust.\nПробуем egui Вы можете запустить пример egui с помощью следующих команд.\n1 2 3 git clone https://github.com/emilk/eframe_template/ egui_test cd egui_test cargo run После этого вы можете пробовать разные вещи, играя с примером кода.\nСсылки Официальный репозиторий на 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/ru/p/%D0%BF%D1%80%D0%BE%D0%B1%D1%83%D0%B5%D0%BC-egui/","title":"Пробуем egui"},{"content":"Способ устранения шума YAMAHA AG03 При прослушивании звука с ПК через монитор AG03 регулярно (примерно раз в 1-3 минуты) возникал раздражающий шум. Поискав информацию, я обнаружил следующий способ борьбы с шумом AG03:\nhttps://jp.yamaha.com/support/updates/yamaha_steinberg_usb_driver_for_win.html\nЗагрузив и установив Yamaha Steinberg USB Driver с вышеуказанного сайта, я смог избавиться от шума.\nКупить сейчас Ссылки 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/ru/p/ag03%E3%83%8E%E3%82%A4%E3%82%BA%E8%A7%A3%E6%B6%88%E6%96%B9%E6%B3%95/","title":"Способ устранения шума AG03"},{"content":"Рекомендуемая и желаемая периферия для ПК от действующего инженера Клавиатура Прежде всего, рекомендуется клавиатура с бесконтактными емкостными переключателями, которую сложно сломать. У меня RealForce уже больше 10 лет, и я до сих пор активно ею пользуюсь. Тип, который я использую, — тихая с английской раскладкой.\nОднако в последнее время меня также заинтересовала клавиатура под названием Logitech MX Keys.\nТрекбол В качестве указывающего устройства рекомендуется использовать трекбол вместо мыши, так как он снижает утомляемость.\nЯ использую Logitech MX Ergo. Это дорогой продукт стоимостью более 10 000 иен, но я считаю, что он того стоит.\nМеня также интересует DEFT PRO(M-DPT1MRXBK) — модель с большим шаром, управляемая указательным и средним пальцами. Дисплей Подойдет любой, но рекомендуется дисплей с высоким разрешением 4K.\nВ настоящее время я использую 4K-дисплей DELL.\nСейчас я хочу приобрести широкоформатный дисплей EIZO или дисплей DELL.\n","date":"2023-02-28T00:51:49+09:00","image":"http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AEpc%E5%91%A8%E8%BE%BA%E6%A9%9F%E5%99%A8/img_hu9c34821fcae33240cf8bba1055606dc6_434960_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/ru/p/%D1%80%D0%B5%D0%BA%D0%BE%D0%BC%D0%B5%D0%BD%D0%B4%D1%83%D0%B5%D0%BC%D0%B0%D1%8F-%D0%BF%D0%B5%D1%80%D0%B8%D1%84%D0%B5%D1%80%D0%B8%D1%8F-%D0%B4%D0%BB%D1%8F-%D0%BF%D0%BA/","title":"Рекомендуемая периферия для ПК"},{"content":"fontplus.jp - сервис для использования платных веб-шрифтов https://fontplus.jp/\nЗа 1100 иен в месяц можно использовать все шрифты, а также поддерживается их использование на нескольких сайтах.\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/ru/p/fontplus.jp/","title":"О fontplus.jp"},{"content":"По умолчанию в HUGO запрещено использование HTML-тегов в статьях, но если добавить следующий код в config.toml, это станет возможным.\n1 2 [markup.goldmark.renderer] unsafe = true Ссылка: 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/ru/p/ispolzovanie-html-tegov-v-hugo/","title":"Использование HTML-тегов в HUGO"},{"content":"Поиск спонсоров на GitHub Я буду рад, если вы станете моим спонсором на GitHub, нажав на кнопку ниже.\nСредства пойдут на разработку инструментов и другие цели.\nЯ буду очень стараться, чтобы получить сертификат для подписи кода!\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/ru/p/%D0%BF%D0%BE%D0%B8%D1%81%D0%BA-%D1%81%D0%BF%D0%BE%D0%BD%D1%81%D0%BE%D1%80%D0%BE%D0%B2-%D0%BD%D0%B0-github/","title":"Поиск спонсоров на GitHub"},{"content":"Что такое кнопка Кнопка — это элемент управления GUI, который может быть реализован с использованием стандартного API Windows. При щелчке (нажатие левой кнопки мыши, отпускание левой кнопки мыши) в определенной области экрана, выполняется заданная в программе операция.\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 // Создание кнопки 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); ... // При нажатии операционная система отправляет окну сообщение WM_COMMAND. case WM_COMMAND: switch(LOWORD(wParam)) { case ID_BUTTON1: SendMessage(hWnd,WM_CLOSE,0,0); break; } break; Пример кода можно найти ниже. 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/ru/p/%E3%83%9C%E3%82%BF%E3%83%B3%E3%81%A4%E3%81%84%E3%81%A6/","title":"О кнопках"},{"content":"Я купил ноутбук ThinkPad (б/у) Поскольку моя работа на ноутбуке в основном состоит из подключения к удаленному рабочему столу других устройств, мне не нужен был высокопроизводительный ПК. ChromeBook подошел бы, но, поскольку не было хорошего дизайна или высокого разрешения, я купил ThinkPad.\nХарактеристики указаны ниже, а цена составила около 55 000 иен с использованием различных баллов.\nThinkPad T470s Процессор: Intel Core i7 7600U Оперативная память: 24 ГБ SSD: 512 ГБ ОС: Windows 10 Pro 64bit Экран: 14,0 дюймов широкий (матовая панель) Разрешение: ЖК-дисплей WQHD 2560×1440 Вес: около 1,32 кг Примечания: Английская клавиатура Так как он б/у, я думал, что могут быть следы использования или царапины, но все было совершенно нормально без каких-либо проблем. Батарея также пока работает без проблем.\nНедостатки, о которых я могу сейчас подумать Нет клавиши Pause и клавиши App. Я использовал клавишу Pause в качестве ярлыка для открытия настроек системы. Кроме того, я использовал клавишу App для открытия всплывающего меню, поэтому без нее неудобно. Клавиши PageUp и PageDown находятся прямо рядом с клавишами со стрелками на клавиатуре, поэтому я часто нажимаю их по ошибке. Возможно, это дело привычки. Другие ПК, которые я рассматривал, но не купил ASUS Chromebook Flip C436FA (C436FA-ENG) HP Ноутбук HP15s-fq Справочные материалы: 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/ru/p/%D1%8F-%D0%BA%D1%83%D0%BF%D0%B8%D0%BB-thinkpad-%D0%B1%D1%83/","title":"Я купил ThinkPad (б/у)"},{"content":"Простое удаленное подключение с TeamViewer С помощью TeamViewer легко установить удаленное подключение к рабочему столу.\nЗапустите TeamViewer как на удаленном, так и на локальном компьютере, затем введите ID и пароль удаленного компьютера на локальном, чтобы установить соединение.\nЕсли вы хотите подключиться удаленно через командную строку, используйте следующее:\n1 %ProgramFiles%\\TeamViewer\\TeamViewer.exe -i \u0026lt;ID\u0026gt; -P \u0026lt;Password\u0026gt; Введите ID удаленного компьютера вместо \u0026lt;ID\u0026gt; и пароль удаленного компьютера вместо \u0026lt;Password\u0026gt;.\nСоздание файла ярлыка с приведенной выше командой полезно, так как позволяет не вводить ID/PW каждый раз.\nСправочный сайт: 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/ru/p/prostoe-udalennoe-podklyuchenie-s-teamviewer/","title":"Простое удаленное подключение с TeamViewer"},{"content":" Глупцы учатся на своем опыте, а мудрые на истории (Отто фон Бисмарк)\nНе давай человеку рыбу, научи его рыбачить (Лао-цзы)\nОставайтесь голодными, оставайтесь безрассудными (Стив Джобс)\nСделанное лучше идеального (Марк Цукерберг)\nБудьте проще (Джеймс Гослинг)\nУ меня нет времени беспокоиться о тех, кому я не нравлюсь. Я слишком занят любовью к тем, кто любит меня. (Снупи)\nВеличайшее счастье для человека — это \u0026ldquo;найти работу, которая максимально раскрывает его потенциал\u0026rdquo; (Карл Маркс)\nЕсли небольшое знание опасно, то где тот человек, у которого его столько, чтобы быть вне опасности? (Томас Гексли 1877)\n«Наоборот, — продолжал Траляля, — если бы это было так, это могло бы быть; и если бы это было так, это было бы; но так как это не так, этого нет. Это логика». (Льюис Кэрролл, «Алиса в Зазеркалье» 1872)\nНе будет преувеличением назвать Клода Шеннона отцом информационного века, а его академические достижения входят в число величайших в XX веке. (Отзыв Американского математического общества)\nТе, кто знаком с современным состоянием символической теории алгебры, знают, что обоснованность процесса анализа зависит не от интерпретации используемых символов, а исключительно от законов их комбинации. (Джордж Буль, в начале своей книги «Математический анализ логики» 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/ru/p/%D1%81%D0%B1%D0%BE%D1%80%D0%BD%D0%B8%D0%BA-%D1%86%D0%B8%D1%82%D0%B0%D1%82/","title":"Сборник цитат"},{"content":"Редактор графов Это знакомство с веб-страницей, которая позволяет создавать простые графы.\nhttps://csacademy.com/app/graph_editor/\nВы можете создавать графы путем ввода числовых значений. Кроме того, кажется, что вы также можете перемещать элементы с помощью мыши.\nНажав на Directed, вы также можете создавать ориентированные графы.\nВы можете сохранить созданные вами графы или графы, созданные через 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/ru/p/%E3%82%B0%E3%83%A9%E3%83%95%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BF/","title":"Редактор графов"},{"content":"Решение задачи коммивояжера с помощью Mathematica Проблема 電車でこんな広告を見かけました😁📸 pic.twitter.com/iXEgvtXrpL\n\u0026mdash; 早稲田大学 早水桃子研究室 (@hayamizu_lab) October 11, 2022 Решение 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]; Создайте матрицу с помощью функции SparseArray. Каждый элемент представляет расстояние между городами в строке и столбце этого элемента. Например, первый элемент {1,2}-\u0026gt;10 означает, что расстояние между 1 и 2 равно 10. Предпоследний элемент {9,9} указывает на размер матрицы, а последний элемент Infinity означает, что длина пути между неуказанными городами бесконечна. Другими словами, это означает, что пути нет.\n1 {len,tour}=FindShortestTour[{1,2,3,4,5,6,7,8,9},DistanceFunction-\u0026gt;(d[[#1,#2]]\u0026amp;)] Вы можете легко решить задачу коммивояжера с помощью функции FindShortestTour. {1,2,3,4,5,6,7,8,9} представляют номера городов. DistanceFunction-\u0026gt;(d[[#1,#2]]\u0026amp;) передает матрицу d, представляющую расстояния между городами.\nВывод 1 {137, {1, 2, 5, 9, 8, 7, 6, 3, 4}} Выводом являются кратчайшее расстояние и маршрут в это время. Кратчайшее расстояние равно 137, а маршрут — 1→2→5→9→8→7→6→3→4→1. Если изменить порядок на ABC, он станет 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/ru/p/%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D0%B5-%D0%B7%D0%B0%D0%B4%D0%B0%D1%87%D0%B8-%D0%BA%D0%BE%D0%BC%D0%BC%D0%B8%D0%B2%D0%BE%D1%8F%D0%B6%D0%B5%D1%80%D0%B0-%D1%81-%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E-mathematica/","title":"Решение задачи коммивояжера с помощью Mathematica"},{"content":"Чтобы отметить все флажки на веб-странице, откройте DevTools с помощью F12, вставьте следующий код в консоль и выполните его.\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; } } Или,\nСоздайте новую закладку и вставьте следующий код в адрес регистрации (обычно там, где вы вводите https://\u0026hellip;). Откройте веб-страницу, на которой вы хотите отметить флажки, нажмите на созданную закладку, и все флажки будут отмечены.\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;}}})(); Если вы хотите снять все флажки, измените часть boxes[i].checked = true; в приведенном выше скрипте на 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/ru/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":"Отметить все флажки на веб-странице"},{"content":"Теорема Вильсона Пусть $p$ — простое число, тогда выполняется $(p−1)!≡−1 \\pmod p$\nФормула Эйлера $e^{iπ}+1=0$\nВеликая теорема Ферма Для любого целого числа $n≥3$ не существует таких положительных целых чисел $x,y,z$, которые удовлетворяли бы уравнению $x^n+y^n=z^n$\nБазельская проблема $1/1^2+1/2^2+1/3^2+1/4^2+...=π^2/6$\nМногочлен Эйлера для генерации простых чисел $n^2+n+41$ дает простые числа для всех целых $n$ от $0$ до $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/ru/p/%D0%BC%D0%BE%D0%B8-%D0%BB%D1%8E%D0%B1%D0%B8%D0%BC%D1%8B%D0%B5-%D0%BC%D0%B0%D1%82%D0%B5%D0%BC%D0%B0%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5-%D1%84%D0%BE%D1%80%D0%BC%D1%83%D0%BB%D1%8B/","title":"Мои любимые математические формулы"},{"content":"Предварительные условия Наличие Windows 11\nШаги Установите App Installer из Microsoft Store https://www.microsoft.com/store/productId/9NBLGGH4NNS1 Установите приложение через командную строку 1 winget install Google.Chrome Основные приложения, доступные для установки Google Chrome (команда winget install Google.Chrome) Microsoft Edge (команда winget install Microsoft.Edge) Microsoft Teams (команда winget install Microsoft.Teams) Microsoft Office (команда winget install Microsoft.Office) Visual Studio Code (команда winget install vscode) Slack (команда winget install SlackTechnologies.Slack) Discord (команда winget install Discord.Discord) Docker Desktop (команда winget install Docker.DockerDesktop) Git (команда winget install Git) 7zip (команда winget install 7zip) VLC (команда winget install VideoLAN.VLC) Ссылки Использование инструмента winget для установки приложений и управления ими\nОтступление Я думал, что смогу установить Paint.Net, но не получилось.\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/ru/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":"Установка приложений с помощью команд через WinGet"},{"content":"Особенности Rust Относительно новый язык программирования с открытым исходным кодом, разрабатываемый Mozilla Быстрый язык без сборщика мусора, специально предназначенный для системного программирования Имеет уникальный механизм владения и заимствования в качестве спецификации языка, что обеспечивает безопасность памяти Работает на различных кросс-платформах Стандартно поставляется с отличным менеджером пакетов 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/ru/p/rust%E3%81%AE%E7%89%B9%E5%BE%B4/","title":"Особенности Rust"},{"content":"Чтобы динамически задавать переменные в Github Actions, это можно реализовать путем добавления записи в $env:GITHUB_ENV, как показано ниже.\n【Для 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 【Для 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/ru/p/%D0%B4%D0%B8%D0%BD%D0%B0%D0%BC%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F-%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0-%D0%BF%D0%B5%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D1%8B%D1%85-%D0%B2-github-actions/","title":"Динамическая настройка переменных в Github Actions"},{"content":"Удаление локального тега Проверьте существующие локальные теги с помощью git tag. Удалите тег с помощью git tag -d v0.1.0. (Замените v0.1.0 на тег, который вы хотите удалить) Удаление удаленного тега Проверьте существующие удаленные теги с помощью git ls-remote --tags. Удалите удаленный тег с помощью git push origin --delete v0.1.0. (Замените v0.1.0 на тег, который вы хотите удалить) Ссылки Как удалить тег git локально и удаленно!\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/ru/p/git%E3%81%A7%E3%82%BF%E3%82%B0%E3%82%92%E6%B6%88%E3%81%99/","title":"Удаление тегов в git"},{"content":"Отображение простого окна в 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;] Исходный код ниже\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 } Ссылка Программирование Windows в Rust - часть CreateWindow\n","date":"2022-10-01T19:08:58+09:00","image":"http://kenji.blog/p/rust%E3%81%A7%E3%82%B7%E3%83%B3%E3%83%97%E3%83%AB%E3%81%AA%E3%82%A6%E3%82%A3%E3%83%B3%E3%83%89%E3%82%A6%E3%82%92%E8%A1%A8%E7%A4%BA%E3%81%99%E3%82%8B/images/rust_logo_huefc2d075e966b0edc0b7186c50038553_22411_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/ru/p/otobrazhenie-prostogo-okna-v-rust/","title":"Отображение простого окна в Rust"},{"content":"Чтобы написать тесты в Rust, создайте функцию и добавьте атрибут #[test] строкой выше определения тестовой функции.\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); } Код тестирования можно выполнить с помощью cargo test. Если тест успешен, выводится ok. Если тест не пройден, выводится FAILED.\nВ случае успеха\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 В случае ошибки\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/ru/p/rust%E3%81%A7%E3%83%86%E3%82%B9%E3%83%88%E3%82%92%E6%9B%B8%E3%81%8F/","title":"Написание тестов в Rust"},{"content":"Вы можете отобразить MessageBox в Rust, выполнив следующие шаги.\nУстановите Rust. См. С чего начать в Rust Выполните команду cargo new --bin MessageBox в командной строке. Перейдите в каталог MessageBox. Откройте Cargo.toml и измените его следующим образом. 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; Откройте src\\main.rs и измените его следующим образом. 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 ); } } Выполните команду cargo run в командной строке. Для сборки релиза выполните cargo build --release.\nСсылка 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/ru/p/%D0%BE%D1%82%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5-messagebox-%D0%B2-rust/","title":"Отображение MessageBox в Rust"},{"content":"Что значит понимать? Всем привет!\nСегодня я хотел бы поговорить на тему «Что значит понимать?».\nДействительно ли «понимание» неоднозначно? В повседневной жизни бывают моменты, когда мы чувствуем: «Я понял!». Но если задуматься, действительно ли это «понимание» означает полное осознание?\nВозьмем, к примеру, вождение автомобиля. Если нажать на газ, он поедет, если нажать на тормоз — остановится. Возможно, это можно назвать «пониманием». Однако мало кто сможет подробно объяснить, что происходит внутри двигателя.\nНеобходимо ли полное понимание? На самом деле, даже если мы не понимаем всего досконально, это часто не мешает нашей повседневной жизни. Вы можете звонить или отправлять сообщения, не зная внутреннего устройства смартфона.\nОднако это не значит, что мы должны пренебрегать «пониманием». По мере углубления понимания могут рождаться новые открытия и озарения.\nЕсть много вещей, которых мы не понимаем В мире есть еще много неразгаданного. Например, механизмы человеческих эмоций и сознания, происхождение Вселенной. Это те области, которые до сих пор до конца не «поняты», несмотря на прогресс науки.\nДаже в мире математики существуют нерешенные проблемы, такие как «Гипотеза Гольдбаха», несмотря на их внешнюю простоту.\nЦенность «понимания» Когда то, что мы «понимаем», расширяется, мы можем уверенно объяснять вещи и эффективно общаться с другими. Кроме того, наличие знаний имеет преимущество — нас сложнее обмануть дезинформацией.\nВажность скромности Осознание того, что мы чего-то «не понимаем», ведет к скромности. И именно благодаря этому осознанию рождается желание продолжать учиться.\nТаким образом, хотя «понимать» важно, полностью осознать все довольно сложно. Самое главное, не так ли — это знать пределы своего понимания и сохранять стремление к дальнейшему обучению?\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/ru/p/chto-znachit-ponimat/","title":"Что значит понимать?"},{"content":"Я подумал о том, почему мне нравится математика и компьютеры Равенство для всех Они всегда выдают один и тот же результат на один и тот же ввод, независимо от человека, его положения или места.\nЧеткие правила Правила четко определены, нет абсурда или несправедливости.\nПолученные ответы и теории верны навсегда Нет необходимости беспокоиться о том, что однажды полученный ответ будет впоследствии изменен.\nСуществует умеренный уровень сложности Всегда есть нерешенные проблемы, и вы в любой момент можете бросить вызов их решению.\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/ru/p/pochemu-mne-nravitsya-matematika-i-kompyutery/","title":"Почему мне нравится математика и компьютеры"},{"content":"Что нужно сообществу Мне показалось, что правила сообщества Scratch очень хорошо продуманы и полезны. Там было написано следующее.\nОтноситесь ко всем с уважением.\nБудьте в безопасности: не публикуйте личную или контактную информацию.\nОставляйте полезные комментарии.\nПонимайте культуру ремиксов.\nБудьте честными.\nСделайте сайт приятным местом.\nЯ думаю, что эти принципы применимы к любому сообществу.\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/ru/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":"Что нужно сообществу"},{"content":"Ферма (P. de Fermat, 1601-1665) Выдающийся французский математик 17-го века. Заложил основы аналитической геометрии, теории вероятностей и исчисления. Также является основателем теории чисел.\nДиофант (Diophantus, ок. 207-291) Греческий математик. Известен введением символики и изучением рациональных решений. Его главный труд — «Арифметика». Область нахождения рациональных решений уравнений называется диофантовым анализом.\nЭйлер (L. Euler, 1707-1783) Король математики родом из Швейцарии. Добился достижений почти во всех областях математики. Оставил более 700 статей и 45 книг.\nЛежандр (A. M. Legendre, 1752-1833) Французский математик. Оставил множество достижений в теории чисел, эллиптических интегралах и задачах притяжения. Термин «теория чисел» происходит от его главного труда «Опыт теории чисел».\nКуммер (E. E. Kummer, 1810-1893) Немецкий математик. Добился больших результатов, применив теорию чисел круговых полей к Великой теореме Ферма.\nДекарт (R. Descartes, 1596-1650) Оригинальный французский философ. Основные труды: «Рассуждение о методе», «Геометрия», «Космология».\nПаскаль (B. Pascal, 1623-1662) Французский философ, известный своими исследованиями в области теории вероятностей и механики жидкостей. Позже присоединился к янсенистам и занялся религиозной деятельностью. В это время были написаны его «Мысли».\nБаше (C. G. Bachet, 1581-1638) Французский аристократ, увлекавшийся числовыми головоломками. Издал латинский перевод «Арифметики» Диофанта и добавил свои исследования в качестве комментариев.\nВаллис (J. Wallis, 1616-1703) Английский математик. В своем главном труде «Арифметика бесконечного» придал математическую форму понятию предела и внес вклад в создание основ дифференциального и интегрального исчисления.\nБроункер (W. Brouncker, 1620-1684) Ирландский аристократ. Первый президент Лондонского королевского общества. Любитель математики, общался с Валлисом и другими.\nЛагранж (J. L. Lagrange, 1736-1813) Французский математик, родившийся в Италии. Сменил Эйлера на посту директора математического отделения Берлинской академии. Добился больших достижений в теории чисел, аналитической механике и др.\nЗигель (C. L. Siegel, 1896-1981) Немецкий специалист по теории чисел. Внес большой вклад в аналитическую теорию чисел.\nФибоначчи (L. Fibonacci, ок. 1175-1250) Итальянский математик. В своем главном труде «Книга абака» использовал индо-арабские цифры и способствовал их распространению. Также обсуждал конгруэнтные числа в «Книге квадратов».\nБейкер (A. Baker, 1939-) Английский специалист по теории чисел. Был удостоен Филдсовской премии вместе с Хэйсукэ Хиронакой за вклад в теорию трансцендентных чисел.\nПуанкаре (J. Poincare, 1854-1912) Французский математик, которого называют последним математиком-универсалом. Оставил выдающиеся труды по теории автоморфных функций, неевклидовой геометрии, дифференциальным уравнениям, небесной механике, электродинамике, а также научно-критические статьи.\nМорделл (L. J. Mordell, 1888-1972) Математик американского происхождения. Его родители — эмигранты из Литвы. Оставил множество статей по теории диофантовых уравнений, но теорема Морделла в теории эллиптических кривых особенно известна. Вейль обобщил ее для случая общих алгебраических кривых, после чего арифметическая алгебраическая геометрия получила бурное развитие.\nВейль (A. Weil, 1906-) Французский математик еврейского происхождения. В молодости заинтересовался проблемой Ферма, фундаментально пересмотрел алгебраическую геометрию для применения в теории чисел и заложил ее строгие основы. Также известен своими трудами по истории математики.\nМерсенн (M. Mersenne, 1588-1648) Французский священник ордена минимов. Выступал посредником в переписке между математиками разных стран. Числа, названные числами Мерсенна, на самом деле были придуманы Ферма.\nРоберваль (G. P. de Roberval, 1602-1675) Французский математик. Был едва ли не единственным человеком в то время, получившим должность профессора математики, известен исследованиями циклоиды.\nАбель (N. H. Abel, 1802-1829) Норвежский математик. Добился выдающихся результатов, таких как неразрешимость в радикалах общего уравнения 5-й степени, теория эллиптических функций и теория абелевых интегралов, но умер молодым.\nЯкоби (K. G. Jacob, 1804-1851) Немецкий математик еврейского происхождения. Оставил большие достижения в теории эллиптических функций, теории тета-функций, дифференциальных уравнениях и вариационном исчислении. Представил миру достижения Абеля. Известен также тем, что отвергал прагматизм, считая целью науки «честь человеческого духа».\nГаусс (C. F. Gauss, 1777-1855) Король математики, родившийся в Германии. Известен исследованиями в теории чисел, неевклидовой геометрии, геодезии, гипергеометрических рядах, теории поверхностей и земном магнетизме. Был перфекционистом и не публиковал результаты, пока они не были доведены до совершенства. Главный труд — «Арифметические исследования».\nЛаме (G. Lame, 1795-1870) Французский математик. Внес вклад в теорию упругости, теорию теплопроводности и др.\nЛиувилль (J. Liouville, 1809-1882) Французский математик. Внес вклад в дифференциальные уравнения, теорию трансцендентных чисел и теорию функций.\nКоши (A. L. Cauchy, 1789-1857) Французский математик. Очень плодовит, имеет множество достижений в теоретической физике и математике. Говорят, что во Франции его уважают так же, как Гаусса.\nГалуа (E. Galois, 1811-1832) Французский математик. Введя понятие группы, объяснил теорему Абеля о том, что уравнения 5-й степени и выше в общем виде неразрешимы в радикалах. Погиб на дуэли в молодом возрасте, и сейчас известно, что причиной стала тривиальная ссора из-за женщины.\nГензель (K. Hensel, 1861-1941) Немецкий математик. Ученик Кронекера. Применив методы теории функций, ввел в теорию чисел p-адическую теорию (p-адический анализ).\nХассе (H. Hasse, 1898-1979) Немецкий математик. Ученик Гензеля, внес вклад в обоснование p-адического анализа и его применения. Занимался развитием теории полей классов, исследованием L-функций эллиптических кривых и др.\nКронекер (L. Kronecker, 1823-1891) Немецкий математик еврейского происхождения. Внес вклад в теорию эллиптических функций, теорию чисел и др. Известен тем, что выступал за арифметическое обоснование математики, но его сильный субъективизм, необоснованная критика коллеги по Берлинскому университету Вейерштрасса и препятствование трудоустройству Кантора создали негативный образ его жизни.\nГильберт (D. Hilbert, 1862-1943) Немецкий математик. Оставил огромный след во всех областях математики, включая теорию инвариантов, алгебраическую теорию чисел и основания математики. 23 проблемы, предложенные им на Международном конгрессе математиков в Париже (1900), оказали большое влияние на развитие математики.\nРиман (B. Riemann, 1826-1866) Немецкий математик. Добился больших результатов, затрагивающих основы математики, таких как понятие римановой поверхности в теории комплексных функций и риманова геометрия.\nФальтингс (G. Faltings, 1954-) Немецкий математик. Решил гипотезу Морделла в 1983 году.\nУайлс (A. Wiles, 1953-) Математик британского происхождения. Ведущий специалист в своей области, внесший большой вклад в исследования, такие как главная гипотеза Ивасавы и гипотеза Бёрча — Свиннертон-Дайера.\nЛитература Великая теорема Ферма решена! От Эйлера до доказательства Уайлса (Издательство Коданся)\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/ru/p/%D0%B2%D0%B5%D0%BB%D0%B8%D0%BA%D0%B8%D0%B5-%D0%BC%D0%B0%D1%82%D0%B5%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B8/","title":"Великие математики"},{"content":"Перечисление заголовков окон Способ перечисления заголовков открытых в данный момент окон с помощью PowerShell.\n1 Get-Process|where{$_.mainWindowTItle}|Select-Object MainWindowTitle Пример вывода\n1 2 3 4 5 6 7 8 9 MainWindowTitle --------------- Windows PowerShell Internet Explorer Безымянный - Paint Безымянный - Блокнот Диспетчер задач Windows Input Experience Документ - 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/ru/p/%D0%BF%D0%B5%D1%80%D0%B5%D1%87%D0%B8%D1%81%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5-%D0%B7%D0%B0%D0%B3%D0%BE%D0%BB%D0%BE%D0%B2%D0%BA%D0%BE%D0%B2-%D0%BE%D0%BA%D0%BE%D0%BD/","title":"Перечисление заголовков окон"},{"content":"Быстрое массовое удаление больших папок При удалении большой папки в Проводнике скорость низкая, потому что содержимое папки сначала полностью сканируется, а затем выполняется удаление. Если удалять с помощью команды, как показано ниже, сканирование и удаление будут выполняться одновременно, поэтому вы сможете быстро удалять большие папки.\nВ командной строке перейдите в иерархию целевой папки. Выполните DEL /F /Q /S ИмяПапки \u0026gt; NUL. Выполните RMDIR /Q /S ИмяПапки. ","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/ru/p/%D0%B1%D1%8B%D1%81%D1%82%D1%80%D0%BE%D0%B5-%D0%BC%D0%B0%D1%81%D1%81%D0%BE%D0%B2%D0%BE%D0%B5-%D1%83%D0%B4%D0%B0%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5-%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85-%D0%BF%D0%B0%D0%BF%D0%BE%D0%BA/","title":"Быстрое массовое удаление больших папок"},{"content":"Команда для удаления всех данных Salesforce Chatter Эта команда удаляет все сообщения и вложения в Salesforce Chatter. Откройте Developer Console, выберите \u0026ldquo;Open Execute anonymous Window\u0026rdquo; в меню Debug, вставьте следующий код и выполните его. Лично я использую это, когда объем памяти организации подходит к концу.\n1 2 3 4 5 6 delete [select id from FeedItem]; delete [select id from FeedAttachment]; delete [select id from ContentDocument]; // Очистить корзину 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/ru/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"},{"content":"Это небольшая коллекция хитростей, которые я обычно использую в Windows. Буду рад, если это прочитают те, кто только начинает пользоваться Windows. Предполагается использование Windows 11, но думаю, что многое из этого будет работать и в Windows 10.\nЗакрытие окна Alt + F4, когда окно активно Ctrl + W, когда окно активно. Закрывает вкладку или окно (только в поддерживаемых приложениях) Двойной щелчок по иконке слева в строке заголовка окна Щелчок по × в строке заголовка окна Отображение рабочего стола Win + D. Двойное нажатие возвращает окно в исходное состояние. Удобно, когда нужно на мгновение показать рабочий стол. Win + M. Свернуть все приложения. Повторное нажатие не возвращает их обратно. Голосовой ввод Win + H. Начать голосовой ввод. Чтобы завершить голосовой ввод, нажмите Esc или снова Win + H. Отображение классического контекстного меню в проводнике Нажмите Shift + F10 или клавишу Application. Клавиша Application находится в правой нижней части клавиатуры. Захват экрана с выбором области Win + Shift + S позволяет выбрать область и захватить экран. Win + Print Screen или просто Print Screen позволяет захватить весь экран. (Если добавить Win, изображение будет сохранено в C:\\Users\\ИмяПользователя\\Pictures\\Screenshots.) Alt + Print Screen позволяет захватить текущее окно. Запуск приложений, закрепленных на панели задач Win + цифра запускает приложение, закрепленное на панели задач.\nНапример, нажатие Win + 1 запустит первое приложение слева на панели задач. Win + T позволяет перевести фокус на иконки панели задач, затем можно несколько раз нажать Win + T или использовать ← и → для перемещения выбора, а клавишей Enter запустить выбранное приложение. Увеличение / Уменьшение Win + + запускает экранную лупу Windows. Далее с помощью Win + + или - можно увеличивать и уменьшать масштаб экрана. В блокноте или браузере Ctrl + + или - позволяет увеличивать и уменьшать масштаб (только в поддерживаемых приложениях). Блокировка Windows Win + L Ctrl + Alt + Del → Space или Enter Завершение работы Windows Если нажать Alt + F4 в состоянии отображения рабочего стола (после Win + M или Win + D) или когда панель задач активна (Win + T или Win + B), появится диалоговое окно, как показано ниже. Убедитесь, что выбрано \u0026ldquo;Завершение работы\u0026rdquo;, и нажмите Enter. Также можно использовать Win + R → Alt + F4 → Alt + F4. Завершить работу можно через Win + X → U → U. Завершить работу можно, введя shutdown /s /t 0 в командной строке или в окне \u0026ldquo;Выполнить\u0026rdquo; (Win + R). Добавление /f приведет к принудительному завершению работы. Перезагрузка Windows Если нажать Alt + F4 в состоянии отображения рабочего стола (после Win + M или Win + D) или когда панель задач активна (Win + T или Win + B), появится диалоговое окно, как показано ниже. Нажмите ↓ один раз, чтобы выбрать \u0026ldquo;Перезагрузка\u0026rdquo;, и нажмите Enter. Также можно использовать Win + R → Alt + F4 → Alt + F4. Перезагрузить можно через Win + X → U → R. Перезагрузить можно с помощью shutdown /r /t 0. Добавление /f приведет к принудительной перезагрузке. Спящий режим Windows Если нажать Alt + F4 в состоянии отображения рабочего стола (после Win + M или Win + D) или когда панель задач активна (Win + T или Win + B), появится диалоговое окно, как показано ниже. Нажмите ↑ один раз, чтобы выбрать \u0026ldquo;Спящий режим\u0026rdquo;, и нажмите Enter. Также можно использовать Win + R → Alt + F4 → Alt + F4. Перевести в режим гибернации можно, введя rundll32.exe powrprof.dll,SetSuspendState в окне Win + R или в командной строке. Выход из системы Windows Если нажать Alt + F4 в состоянии отображения рабочего стола (после Win + M или Win + D) или когда панель задач активна (Win + T или Win + B), появится диалоговое окно, как показано ниже. Нажмите ↑ два раза, чтобы выбрать \u0026ldquo;Выход\u0026rdquo;, и нажмите Enter. Также можно использовать Win + R → Alt + F4 → Alt + F4. Win + X → U → I Ctrl + Alt + Del → 2 раза Tab или 2 раза ↓ → Enter или Space Выйти из системы можно с помощью команды logoff. Перемещение окна с помощью клавиатуры Win + ←: Переместить влево Win + →: Переместить вправо Win + ↑: Переместить вверх / Развернуть Win + ↓: Переместить вниз / Свернуть Win + Shift + ← или →: Перемещение между мониторами Win + Alt + ←, →, ↑ или ↓: Перемещение окна без развертывания или сворачивания В несвернутом состоянии нажмите Alt + Space, затем M, после чего перемещайте окно стрелками.\n※ Поскольку окно будет следовать за курсором мыши, вы сможете \u0026ldquo;спасти\u0026rdquo; его, даже если оно находится за пределами экрана. Завершение процесса в диспетчере задач Диспетчер задач можно запустить с помощью Ctrl + Shift + Esc. Вкладки можно переключать с помощью Ctrl + Tab. На вкладке Подробности, нажав Tab, можно искать процесс по начальным буквам, вводя их на английской раскладке. Выбрав имя процесса, нажмите клавишу Delete, а затем Enter, чтобы завершить процесс. Завершение процесса по имени с помощью команды Процесс можно завершить с помощью taskkill /f /im ИмяПроцесса. Например, taskkill /f /im explorer.exe завершит работу проводника. Запуск нескольких копий одной программы с панели задач Удерживая клавишу Shift, щелкните левой кнопкой мыши по значку на панели задач, чтобы запустить еще одну копию программы. (Только для приложений, поддерживающих запуск нескольких копий) Запуск программы от имени администратора Удерживая Ctrl + Shift, запустите программу, чтобы открыть ее с правами администратора. Запуск проводника Проводник можно запустить с помощью Win + E. Нажмите Win + R, чтобы открыть \u0026ldquo;Выполнить\u0026rdquo;, введите explorer и нажмите Enter. Создать новую папку можно с помощью Ctrl + Shift + N. Открытие командной строки в текущем расположении проводника В Windows 11 командную строку можно запустить из контекстного меню, выбрав \u0026ldquo;Терминал\u0026rdquo;. Также командную строку можно запустить, введя cmd в адресной строке и нажав Enter. Отображение истории буфера обмена Историю буфера обмена можно открыть с помощью Win + V. Выбрав ранее скопированный текст или изображение, вы можете скопировать его снова. Выполнить Окно \u0026ldquo;Выполнить\u0026rdquo; можно открыть с помощью Win + R. Ниже представлены некоторые команды, которые можно выполнить в окне \u0026ldquo;Выполнить\u0026rdquo; или в командной строке.\nОткрыть Edge Введите msedge и нажмите Enter Открыть Internet Explorer 11 (IE11) Введите powershell.exe -Command \u0026quot;(New-Object -ComObject InternetExplorer.Application).Visible = $true\u0026quot; и нажмите Enter Открыть Терминал Введите wt и нажмите Enter Открыть Панель управления Введите control и нажмите Enter Также можно открыть с помощью explorer.exe shell:::{26EE0668-A00A-44D7-9371-BEB064C98683}. Запустить Блокнот Введите notepad и нажмите Enter Запустить Калькулятор Введите calc и нажмите Enter Запустить Paint Введите mspaint и нажмите Enter Запустить PowerShell Введите powershell и нажмите Enter Запустить Visual Studio Code Введите code и нажмите Enter Запустить Excel Введите excel и нажмите Enter\n※ Только если установлен Excel. Открыть Word Введите winword и нажмите Enter\n※ Только если установлен Word. Открыть PowerPoint Введите powerpnt и нажмите Enter\n※ Только если установлен PowerPoint. Открыть Конфигурацию системы Введите msconfig и нажмите Enter Открыть Свойства системы Введите sysdm.cpl и нажмите Enter Открыть сведения о версии Windows Введите winver и нажмите Enter Открыть Экранную клавиатуру Введите osk и нажмите Enter Открыть WordPad Введите wordpad или write и нажмите Enter Открыть Редактор реестра Введите regedit и нажмите Enter Открыть Программы и компоненты Введите explorer.exe shell:::{7b81be6a-ce2b-4676-a29e-eb907a5126c5} и нажмите Enter Открыть Свойства клавиатуры Введите explorer.exe shell:::{725BE8F7-668E-4C7B-8F90-46BDB0936430} и нажмите Enter Открыть Свойства мыши Введите explorer.exe shell:::{6C8EEC18-8D75-41B2-A177-8831D59D2D50} и нажмите Enter Открыть Звук Введите explorer.exe shell:::{F2DDFC82-8F12-4CDD-B7DC-D4FE1425AA4D} и нажмите Enter Открыть Учетные записи пользователей Введите explorer.exe shell:::{60632754-c523-4b62-b45c-4172da012619} и нажмите Enter Копирование текста стандартного окна сообщения С помощью Ctrl + C можно скопировать текст стандартного окна сообщения. Если скопировать приведенное выше окно сообщения, в буфер обмена будет скопировано следующее: 1 2 3 4 5 6 7 [Window Title] ワードパッド [Main Instruction] ドキュメント への変更内容を保存しますか? [保存する(S)] [保存しない(N)] [キャンセル] Сохранение вывода командной строки в буфер обмена Добавление | clip (конвейер + clip) после команды, например echo \u0026quot;hello\u0026quot; | clip, позволяет скопировать стандартный вывод в буфер обмена.\nВывод иерархии папок в текстовом виде В командной строке с помощью команды tree можно вывести иерархию папок в виде дерева.\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 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 (далее опущено) Ссылки Сочетания клавиш в 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/ru/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"},{"content":"Я хочу представить paint.net, программу для редактирования изображений, которую я часто использую в процессе разработки.\nПолезные функции, недоступные в стандартном Paint для Windows Работа с прозрачностью и непрозрачностью Автоматическое выделение сложных областей Работа со слоями Настройка уровней, яркости, контрастности и т. д. Различные эффекты (размытие, искажение, шум и т. д.) Другие особенности Бесплатное использование Относительно низкие системные требования Интуитивно понятный интерфейс без лишних сложностей Поддержка множества языков Это очень функциональная, но простая в использовании программа. Я сам еще не освоил все её функции.\nУстановить можно здесь https://www.getpaint.net/download.html\nЕсли вы выбираете бесплатную версию, нажмите на область, выделенную красной рамкой по ссылке ниже.\nЕсли установить программу через Microsoft Store, она будет платной, но взамен появится функция автоматического обновления. Даже в бесплатной версии вы получаете уведомления о новых обновлениях, поэтому процесс обновления проходит довольно гладко.\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/ru/p/paint.net%E3%81%AE%E9%AD%85%E5%8A%9B/","title":"Очарование paint.net"},{"content":"Чтобы настроить пользовательский домен для репозитория Github, вам необходимо изменить настройки DNS домена. Здесь мы предполагаем, что вы управляете своим доменом с помощью Onamae.com для объяснения процесса. Аналогичные настройки можно выполнить, перезаписав записи A у других регистраторов.\nИзменение настроек DNS на Onamae.com Чтобы изменить настройки DNS домена, войдите в панель управления Onamae.com . После входа перейдите на экран управления доменом. Перейдя на экран управления доменом, измените настройки DNS. Чтобы изменить настройки DNS, выполните следующие действия.\nПерейдите на https://www.onamae.com/ и нажмите «Вход в Onamae.com Navi» Введите «ID Onamae (ID участника)» и «Пароль» и нажмите кнопку входа Нажмите «Настройки сервера имен» Нажмите «Настройки DNS домена» Выберите домен, который хотите настроить, и нажмите «Далее» Нажмите «Настроить» справа от «Использовать настройку записи DNS» Выберите A для TYPE, введите 3600 для TTL и «185.199.108.153» для VALUE и нажмите «Добавить» Аналогично шагу 7, добавьте «185.199.109.153», «185.199.110.153» и «185.199.111.153» В разделе «Подтверждение изменения сервера имен для настройки записи DNS» убедитесь, что установлен флажок, и нажмите «Перейти к экрану настройки» Если появится экран с надписью «Для предотвращения непреднамеренных изменений настроек DNS», нажмите «Не настраивать» (выберите по необходимости) Проверьте настройки и нажмите «Настроить» На этом настройки DNS завершены. Для полного обновления может потребоваться до 72 часов. Если изменения не отобразятся через 72 часа, обратитесь в службу поддержки Onamae.com. Чтобы проверить, применены ли настройки в вашей локальной среде, попробуйте выполнить следующую команду. Замените example.com на домен, который хотите проверить.\nДля Linux и Mac 1 dig example.com +noall +answer -t A Если результат выглядит следующим образом, настройки были применены.\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 Для Windows 1 nslookup -q=a example.com 8.8.8.8 Если результат выглядит следующим образом, настройки были применены.\n1 2 3 4 5 6 7 8 9 サーバー: dns.google Address: 8.8.8.8 権限のない回答: 名前: example.com Addresses: 185.199.108.153 185.199.109.153 185.199.110.153 185.199.111.153 Настройка пользовательского домена для репозитория Github Откройте страницу репозитория и нажмите Settings (Настройки) Нажмите Pages (Страницы) Если вы публикуете исходный код репозитория как есть, выберите «Deploy from a branch» в разделе Source. Если вы собираете исходный код, например HUGO, выберите «GitHub Actions». Выберите ветку для публикации в разделе Branch и нажмите Save (Сохранить) Введите полученный домен в поле Custom domain (Пользовательский домен) и нажмите Save. При необходимости установите флажок «Enforce HTTPS», чтобы включить поддержку 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/ru/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":"Как настроить пользовательский домен для репозитория Github"},{"content":"Команда dotnet.exe позволяет выполнять сборку даже простых программ, поэтому её полезно иметь под рукой.\nУстановка .NET SDK Поскольку dotnet.exe входит в состав .NET SDK, для начала установите .NET SDK. Запустите cmd.exe с правами администратора и выполните следующую команду.\n1 winget install Microsoft.DotNet.SDK.6 Создание .gitignore Команда для создания .gitignore с помощью dotnet.exe выглядит следующим образом:\n1 dotnet new gitignore Созданный файл .gitignore выглядит так:\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 Хотя там много файлов для Visual Studio, он также включает файлы, которые обычно не требуют управления в git, например «.DS_Store» на Mac.\nПолезные ссылки Установка .NET на 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/ru/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":"Создание .gitignore с помощью команды dotnet"},{"content":"Когда я вспомнил свои любимые игры, оказалось, что это в основном признанные шедевры. Многие из них довольно старые, поэтому, если вы в них еще не играли, обязательно попробуйте.\nGame Boy Оригинальный Game Boy — это портативная консоль, выпущенная Nintendo в 1989 году. Впоследствии были выпущены такие преемники, как Game Boy Color и Game Boy Advance.\n① Sa・Ga2 Hihou Densetsu Ролевая игра, выпущенная Square (ныне Square Enix) в 1990 году. История заключается в том, чтобы собирать сокровища на различных этапах, и это первая RPG, в которую я когда-либо играл.\n② Kirby\u0026rsquo;s Dream Land (Hoshi no Kirby) Экшен-игра, выпущенная Nintendo в 1992 году. Разработана HAL Laboratory. В ней вы продвигаетесь вперед, засасывая врагов и вдыхая воздух, чтобы парить в небе. Музыка и звуковые эффекты сделаны очень хорошо, что делает игру ритмичной.\n③ Pokémon Red и Green Ролевая игра, выпущенная Nintendo в 1996 году. Разработана Nintendo EAD, Game Freak и Creatures. После этого по ней сняли аниме, и она приобрела взрывную популярность, но я играл только в это первое поколение.\nSuper Famicom Домашняя игровая консоль, выпущенная Nintendo в 1990 году. За рубежом она также известна как SNES (Super Nintendo Entertainment System).\n④ Super Mario Kart Игра для Super Famicom, выпущенная Nintendo в 1992 году. Гоночная игра, в которой вы соревнуетесь за место, мешая противникам, бросая в них панцири и бананы. Помню, как играл в нее с семьей и друзьями.\n⑤ Dragon Quest V: Hand of the Heavenly Bride Ролевая игра, выпущенная Enix в 1992 году. В ней есть элементы выбора брачного партнера и возможность брать в союзники побежденных монстров. Я играл в нее до тех пор, пока не завербовал несколько металлических слизней (Metal Slimes).\n⑥ Final Fantasy V Ролевая игра, выпущенная Square в 1992 году. В ней есть элемент глубокого погружения, заключающийся в выборе профессий (jobs) и освоении навыков. Как и в Dragon Quest, помню, как безостановочно повышал уровень в пещерах.\n⑦ Torneko\u0026rsquo;s Great Adventure: Mystery Dungeon Игра в жанре roguelike, выпущенная Chunsoft в 1993 году. Предшественник серии Mystery Dungeon. Ее особенность заключается в том, что форма подземелья каждый раз меняется случайным образом. Рекламный слоган игры: «RPG, в которую можно сыграть 1000 раз».\n⑧ Mystery Dungeon 2: Shiren the Wanderer Игра в жанре roguelike, выпущенная Chunsoft в 1995 году. Продолжение серии Mystery Dungeon «Torneko\u0026rsquo;s Great Adventure». В подземельях есть магазины, где можно покупать предметы. (Если вы выйдете из магазина, ничего не купив, владелец магазина погонится за вами).\n⑨ MOTHER2 (EarthBound) Вторая часть серии MOTHER, выпущенная Nintendo в 1994 году. Разработана Ape и HAL Laboratory. Затем, в 2006 году, вышла MOTHER3. Игра, спродюсированная Сигэсато Итои, наполнена уникальным взглядом на мир и философскими изречениями.\n⑩ The Legend of Zelda: A Link to the Past Приключенческая экшен-игра, выпущенная Nintendo в 1991 году. Игра, в которой вы продвигаетесь вперед, собирая различные предметы и решая небольшие головоломки. Впоследствии было выпущено множество сиквелов. (Ссылка)\nNintendo Switch Домашняя игровая консоль, выпущенная Nintendo в 2017 году.\n⑪ Splatoon 2 Экшен-шутер, выпущенный Nintendo в 2017 году. Игра, в которой вы стремитесь к победе, захватывая территорию с помощью чернил и побеждая противников. В 2022 году вышло продолжение — Splatoon 3.\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/ru/p/11-moih-lyubimyh-igr/","title":"11 моих любимых игр"},{"content":"Команда для предотвращения автоматического создания .DS_Store в macOS приведена ниже. Пожалуйста, выполните её в терминале.\n1 defaults write com.apple.desktopservices DSDontWriteNetworkStores true После выполнения команды перезапустите Finder.\n1 killall Finder Если вы хотите вернуть настройки по умолчанию, выполните следующую команду.\n1 defaults delete com.apple.desktopservices DSDontWriteNetworkStores false Как и выше, если вы изменили настройки, перезапустите Finder.\n1 killall Finder ","date":"2022-09-12T16:03:42+09:00","image":"http://kenji.blog/p/macos%E3%81%A7.ds_store%E3%82%92%E8%87%AA%E5%8B%95%E7%94%9F%E6%88%90%E3%81%97%E3%81%AA%E3%81%84%E3%82%88%E3%81%86%E3%81%AB%E3%81%99%E3%82%8B%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89/img_hu4b5bbd3b572a7a7eb2cc4ecf633430af_78743_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/ru/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":"Команда для предотвращения автоматического создания .DS_Store в macOS"},{"content":"Перейдите в целевую папку и выполните следующую команду, чтобы массово удалить файлы .DS_Store, включая те, что находятся во вложенных папках.\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/ru/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":"Массовое удаление .DS_Store с помощью PowerShell"},{"content":"Шорткоды, которые можно использовать в 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;}}\nПрочее Shortcodes\nПримечание Если вы хотите отобразить {{\u0026lt; foo \u0026gt;}} на сайте, вам нужно написать это как {{\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/ru/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":"Шорткоды, которые можно использовать в HUGO"},{"content":"В макете по умолчанию изображение располагается по центру с шириной 100%, но иногда мне казалось, что оно слишком большое, поэтому я решил обтекать изображение под заголовком и изменить ширину примерно до 150px.\nМеста изменения файлов следующие.\nblank.css Чтобы изменить поля, размер изображения и строки отображения текста, добавьте следующее описание в 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 Поскольку определение не удалось удалить на стороне blank.css, удалите следующую строку в post-entry.css.\n1 2 3 4 5 6 .entry-cover img { border-radius: var(--radius); pointer-events: none; /* width: 100%; */ ← удалить эту строку height: auto; } list.html Чтобы изменить расположение изображения, я изменил следующие части 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;!-- переместить вниз --\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;!-- переместить вниз --\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;!-- добавить --\u0026gt; \u0026lt;div style=\u0026#34;max-width:150px;margin:11px 15px 0px 0px;\u0026#34;\u0026gt;\u0026lt;!-- добавить --\u0026gt; {{- $isHidden := (site.Params.cover.hidden | default site.Params.cover.hiddenInList) }}\u0026lt;!-- переместить сверху --\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;!-- переместить сверху --\u0026gt; \u0026lt;/div\u0026gt;\u0026lt;!-- добавить --\u0026gt; \u0026lt;div style=\u0026#34;width:100%;\u0026#34;\u0026gt;\u0026lt;!-- добавить --\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;!-- добавить --\u0026gt; \u0026lt;/div\u0026gt;\u0026lt;!-- добавить --\u0026gt; \u0026lt;/article\u0026gt; Похожих запросов, кажется, немало.\nhttps://github.com/adityatelange/hugo-PaperMod/discussions/159#discussioncomment-247844\nБыло бы здорово, если бы оригинальные разработчики тоже это поддержали.\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/ru/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":"Изменение расположения изображений в PaperMod"},{"content":"Введение Тема PaperMod поддерживает Twitter Card. Однако настройки Twitter Card должны быть прописаны в config.toml или в заголовке *.md каждой статьи. Если они заданы как в каждой статье, так и в config.toml, приоритет будет иметь заголовок каждой статьи.\nСпособ настройки config.toml В config.toml добавьте элемент с именем images в разделе [params]. В images укажите путь к изображению, которое будет отображаться в Twitter Card. Если вы размещаете изображение в папке static, достаточно указать только имя файла.\n1 2 [params] images = [\u0026#34;twitter_card.jpg\u0026#34;] Структура папок\n1 2 3 4 5 6 7 8 9 10 root │ config.toml (писать здесь) ├─content │ └─posts │ └─папка статьи │ │ index.md (писать здесь) │ └─images │ cover.png (поместить здесь) └─static twitter_card.jpg (поместить здесь) Информация в заголовке каждой статьи В информацию в заголовке каждой статьи добавьте элемент с именем image в разделе cover. Если установить relative в true, можно указать относительный путь от *.md статьи.\n1 2 3 cover: image: \u0026#34;images/cover.jpg\u0026#34; relative: true Если вы не хотите отображать её в верхней части статьи Если вы не хотите отображать обложку в верхней части статьи, добавьте элемент с именем hidden в разделе cover и установите его в true.\n1 2 3 4 cover: image: \u0026#34;images/cover.jpg\u0026#34; relative: true hidden: true О размере изображения Согласно текущей спецификации PaperMod, размер Twitter Card, по-видимому, поддерживает только summary_large_image. Подходящий размер (разрешение) для summary_large_image варьируется, но кажется, что около 800 x 418 (соотношение сторон 1.91:1) является оптимальным.\nСправочный сайт 1 Справочный сайт 2\nЕсли возможно, мы рекомендуем изменить размер изображения перед публикацией.\nКак проверить настройки Чтобы проверить настройки Twitter Card, используйте Twitter Card Validator. Однако в моей среде предварительный просмотр отображался некорректно, поэтому, если предварительный просмотр не отображается, мы рекомендуем проверить его один раз перед публикацией, используя закрытый аккаунт и т. д.\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/ru/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":"Как настроить Twitter Card в PaperMod"},{"content":"Введение GitHub Copilot — это инструмент для автодополнения кода на базе искусственного интеллекта, разработанный GitHub. Если вы установите плагин GitHub Copilot в среду разработки IntelliJ IDEA, вы сможете использовать GitHub Copilot и в IntelliJ IDEA. Для активации вам понадобится учетная запись Github.\nСпособ установки В меню IntelliJ IDEA выберите File, затем Settings. Выберите Plugins и введите в поиск «GitHub Copilot». Нажмите кнопку установки (Install). Нажмите кнопку Restart IDE, чтобы перезапустить IntelliJ IDEA. После перезапуска IntelliJ IDEA установка будет завершена. Активация Нажмите на значок в правом нижнем углу. Нажмите Login to Github. Нажмите кнопку Copy and Open. Откроется браузер. Если вы не вошли в Github, авторизуйтесь, затем вставьте код с помощью Ctrl+V и нажмите кнопку Continue. Нажмите кнопку Authorize GitHub Copilot Plugin. Если появился экран выше, активация завершена. Использование Если вы введете несколько символов в редакторе IntelliJ IDEA, GitHub Copilot предложит продолжение кода. Наслаждайтесь мощной функцией автодополнения на базе ИИ!\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/ru/p/ispolzovanie-github-copilot-v-intellij-idea/","title":"Использование GitHub Copilot в IntelliJ IDEA"},{"content":"Введение Go - это относительно новый язык программирования, выпущенный Google в 2009 году. Компилятор, инструменты и библиотеки Go имеют открытый исходный код. Кроме того, Go - это язык со статической типизацией, как C или Java, но он не использует указатели, как C.\nСпособ установки Установить Go\nУстановщики для каждой платформы доступны на сайте выше.\nСледуйте инструкциям на экране для продолжения установки. Установка завершена. Это просто, не так ли?\nПервая программа Сохраните следующую программу как 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;) } Когда вы запустите go run hello.go из командной строки или терминала, будет выведено Hello, world!.\nЕсли вы хотите скомпилировать, запуск go build hello.go создаст hello.exe. Запуск hello.exe выведет Hello, world!.\nВы также можете запускать код на веб-странице https://go.dev/play/\nДокументация http://go.shibu.jp/\nОбъяснения, необходимые для изучения Go, собраны по ссылке выше. Технологии, связанные с Go, настолько открыты и полны, что вам не нужно покупать бумажные учебники.\nИтак, наслаждайтесь жизнью с Go!\n","date":"2022-09-10T00:48:17+09:00","image":"http://kenji.blog/p/go%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/images/cover_hu90f0e026fa77d6f7268f9adc11e245d4_5801_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/ru/p/%D0%BA%D0%B0%D0%BA-%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%B8%D1%82%D1%8C-go/","title":"Как установить Go"},{"content":"Что такое диалектика Гегеля Гегель осознал положительное значение противоречий, в которые впадает разум, и утверждал, что все конечные вещи в целом порождают противоположности с противоречиями, присущими им самим в качестве движущей силы, и вместе снимаются на более высокую ступень с этим в качестве посредника, и сделал это принципом всякого движения в реальном мире. (Из Kotobank)\nМоя интерпретация заключается в том, что каждое утверждение и идея в реальном мире не просто односторонне верны, но обязательно содержат в себе противоречия, и, понимая и включая эту противоположную структуру, осознание развивается на более высокий уровень.\nЯ думаю, что это относится не только к образу мышления людей, но и ко всем явлениям в природном мире.\nДля всей материи, если действует действие, действует противодействие. Если все вещи движутся, действует трение. Гравитация взаимно влияет не только на солнце и землю, но и на всю материю. Поток рек и поток ветра не просто текут в одном направлении, но подвергаются различным силам, и поток меняется в одно мгновение.\nТехнически говоря, компьютерные программы также обязательно содержат ошибки внутри себя, и, устраняя их, они становятся программами более высокого уровня. Я думаю, можно сказать, что программа без ошибок — это неинтересная программа, которая не развивалась. В конечном итоге она устареет.\nОкружающая среда постоянно меняется со временем. Вместо того чтобы игнорировать внутренние противоречия, странно их оправдывать или фиксировать свой образ мышления, я хотел бы постоянно пересматривать свой образ мышления и способ восприятия вещей и гибко менять свое мышление.\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/ru/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":"Диалектика Гегеля"},{"content":"Я сходил в Камукура (рамэн) впервые за несколько лет.\nРамэн с зеленым луком и кимчи\nБыло очень вкусно. Это вкус, которого иногда хочется.\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/ru/p/%D0%BA%D0%B0%D0%BC%D1%83%D0%BA%D1%83%D1%80%D0%B0-%D1%80%D0%B0%D0%BC%D1%8D%D0%BD-%D0%B2%D0%BF%D0%B5%D1%80%D0%B2%D1%8B%D0%B5-%D0%B7%D0%B0-%D0%BD%D0%B5%D1%81%D0%BA%D0%BE%D0%BB%D1%8C%D0%BA%D0%BE-%D0%BB%D0%B5%D1%82/","title":"Камукура (рамэн) впервые за несколько лет"},{"content":"Я написал программу для перечисления простых чисел на 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/ru/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":"Перечисление простых чисел в Rust"},{"content":"Плейлист спокойного джаза ","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/ru/p/%D1%81%D0%BF%D0%BE%D0%BA%D0%BE%D0%B9%D0%BD%D1%8B%D0%B9-%D0%B4%D0%B6%D0%B0%D0%B7/","title":"Спокойный джаз"},{"content":"Быстрый темп\nElectro Swing Collection Electro Swing Mix 2019 Vol.3 lofi hip hop radio(Live) LoFi джаз Это моя мотивация усердно учиться каждый день | 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/ru/p/%D0%BC%D1%83%D0%B7%D1%8B%D0%BA%D0%B0-%D0%B4%D0%BB%D1%8F-%D0%BA%D0%B0%D1%84%D0%B5/","title":"Музыка для кафе"},{"content":"Ничего страшного, если ваши усилия не признают 45年の人生で手に入れた。ぐずぐずした時、いつも背中を押してくれる言葉たち。 pic.twitter.com/EQgmujOSpg\n\u0026mdash; いれぶん (@eleven_s_s) September 6, 2022 Ценности гораздо более разнообразны Юсуке Нарита \u0026ldquo;Среди несчастий, которые испытывает человек\u0026rdquo;\nВаши действия отражаются напрямую Мысли Хаяо Миядзаки ","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/ru/p/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-%D0%BA%D0%BE%D1%82%D0%BE%D1%80%D1%8B%D0%B5-%D0%BF%D0%BE%D0%B4%D0%BD%D0%B8%D0%BC%D0%B0%D1%8E%D1%82-%D0%BC%D0%BE%D1%82%D0%B8%D0%B2%D0%B0%D1%86%D0%B8%D1%8E/","title":"Видео, которые поднимают мотивацию"},{"content":"Здесь представлены характеристики моего основного ПК.\nНазвание элемента Значение Процессор Intel Core i7-8700K CPU @ 3.70GHz 3.70 GHz Память 32.0 GB Тип системы 64-разрядная операционная система, процессор на базе x64 ОС Windows 11 Enterprise (версия 21H2, сборка 22000.856) Производитель Mouse Computer Co., Ltd. ","date":"2022-09-08T01:55:00+09:00","image":"http://kenji.blog/p/%E4%BB%8A%E3%81%AE%E3%83%A1%E3%82%A4%E3%83%B3pc%E3%82%B9%E3%83%9A%E3%83%83%E3%82%AF/images/img_hu731502385ac0a573daf05287c34d796a_240757_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/ru/p/%D1%85%D0%B0%D1%80%D0%B0%D0%BA%D1%82%D0%B5%D1%80%D0%B8%D1%81%D1%82%D0%B8%D0%BA%D0%B8-%D0%BC%D0%BE%D0%B5%D0%B3%D0%BE-%D1%82%D0%B5%D0%BA%D1%83%D1%89%D0%B5%D0%B3%D0%BE-%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%BD%D0%BE%D0%B3%D0%BE-%D0%BF%D0%BA/","title":"Характеристики моего текущего основного ПК"},{"content":"Google Material Symbols and Icons https://fonts.google.com/icons GitHub Octicons https://primer.style/octicons/ Sargam Icons https://sargamicons.com/ Тысячи бесплатных иконок 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/ru/p/%D1%81%D0%B0%D0%B9%D1%82%D1%8B-%D1%81-%D0%BF%D1%80%D0%BE%D1%81%D1%82%D1%8B%D0%BC%D0%B8-%D0%BA%D0%BE%D0%BB%D0%BB%D0%B5%D0%BA%D1%86%D0%B8%D1%8F%D0%BC%D0%B8-%D0%B8%D0%BA%D0%BE%D0%BD%D0%BE%D0%BA/","title":"Сайты с простыми коллекциями иконок"},{"content":"Я изменил цветовую схему темы PaperMod. Способ изменения описан ниже.\nhttps://github.com/adityatelange/hugo-PaperMod/discussions/645\nПуть к CSS следующий:\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 { } Темная тема пока без изменений.\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/ru/p/izmenenie-tsvetovoy-shemy-papermod/","title":"Изменение цветовой схемы PaperMod"},{"content":"Когда мама плохо себя чувствовала и лежала в постели, я спросил нашу дочь (2 года) насчет подготовки к ужину или ванне: «Может, попросим маму помочь с этим?» Она ответила: «Нет, она спит!» — и я подумал о том, что даже ребенок может быть таким заботливым по-своему.\nЯ рад, что она, кажется, растет человеком, способным сопереживать другим.\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/ru/p/detskaya-chutkost/","title":"Детская чуткость"},{"content":"Поиск развивающегося бизнеса Спрашивайте инсайдеров Hot Pepper или налоговых бухгалтеров о набирающих популярность бизнесах. Не входите в бизнес, который уже перенасыщен и в котором доминируют сильные игроки. Входите только в те бизнесы, где вы уверены в возможности привлечения клиентов (не входите в бизнес, где существующие игроки используют уникальные методы привлечения клиентов, которые невозможно скопировать). Тщательное копирование Перед входом изучите бизнес-логику. Тщательно копируйте. Затем вносите улучшения. Систематизация Создайте инструкции для всего, чтобы любой мог выполнить это без лишних усилий. Придумывайте и систематизируйте идеи для увеличения продаж (рост числа клиентов, увеличение среднего чека) и сокращения расходов (затраты на персонал, рекламу). Философия руководителя Философия руководителя заключается в \u0026ldquo;максимизации прибыли компании\u0026rdquo; — ни больше, ни меньше. Делать философией социальный вклад или стремление нравиться сотрудникам — это ошибка (считайте, что эти вещи придут сами собой позже). ","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/ru/p/%E7%B5%8C%E5%96%B6%E8%80%85%E3%83%A1%E3%83%A2/","title":"Заметки Руководителя"},{"content":"Я бы хотел упорядочить свои мысли и то, что я считаю странным в японском обществе.\nО стипендиях Когда говорят о стипендиях в Японии, в большинстве случаев это кредиты с процентами, которые необходимо возвращать. Кроме того, плата за обучение в университетах постоянно растет с 1950 года, и число получателей стипендий также увеличивается.\nС другой стороны, в последнее время средняя сумма долга, похоже, достигает 3,24 миллиона иен.\nСреди получателей стипендий Японской организации студенческих услуг средняя сумма долга составляет 3 243 000 иен. Источник\nЕсли к моменту окончания университета в возрасте 22 лет на вас висит долг в 3 миллиона иен, естественно, что возраст вступления в брак сдвинется, а заводить детей станет сложнее, и я думаю, что это одна из причин проблемы снижения рождаемости в Японии.\nШироко распространенная теория личной ответственности Это больше на уровне ощущений, но я считаю, что в обществе существует холодное отношение в духе \u0026ldquo;чужие проблемы - это чужие проблемы\u0026rdquo;. Возможно, такая тенденция неизбежна, когда экономический спад продолжается десятилетиями, но даже вышеупомянутая проблема стипендий не воспринимается как проблема всего общества в целом, и мне кажется, что голоса молодежи и меньшинств, имеющих мало голосов на выборах, игнорируются. Хотя, если смотреть в долгосрочной перспективе, это очень важная проблема для всей Японии.\nВместо того чтобы двигаться в сторону чрезмерной конкуренции, я думаю, что для страны очень важен дух взаимопомощи, когда все помогают тем людям, поколениям или группам, которые находятся в беде. (Однако меня не устраивает, когда государство настаивает на \u0026ldquo;самопомощи и взаимопомощи\u0026rdquo;. Я хочу, чтобы они проявляли инициативу и помогали уязвимым слоям населения.)\n(Эта статья будет время от времени обновляться.)\nХарактеристики японцев с точки зрения ИИ Да, я расскажу об особенностях японцев.\n【Положительные стороны】\nЯпонцы вежливы, и у них есть культура заботы об уважении и обхождении с другими. Строго соблюдается пунктуальность, и уважение ко времени очень ценится. Сильно выражено коллективистское мышление, подчеркивается важность командной работы и сотрудничества. Ценится чистота, и наблюдается тенденция к строгому соблюдению манер и чистоты в общественных местах. Большое значение придается подаркам и сувенирам, широко распространена культура благодарности. 【Отрицательные стороны】\nИногда им трудно отстаивать свое личное мнение, и они склонны избегать столкновения мнений. Из-за очень строгой трудовой культуры сверхурочная работа и смерть от переутомления иногда становятся проблемой. Остается проблема дискриминации и отчуждения по отношению к иностранцам, и иногда поднимается вопрос о гармоничном сосуществовании с международным сообществом. Присутствует тенденция к авторитаризму, и часто отмечается, что они безоговорочно принимают мнение начальства и старших. Иногда их критикуют за то, что это закрытое общество, которое с трудом принимает внешние культуры и ценности. ","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/ru/p/%D0%BC%D0%BE%D0%B8-%D0%BC%D1%8B%D1%81%D0%BB%D0%B8-%D0%BE-%D1%8F%D0%BF%D0%BE%D0%BD%D0%B8%D0%B8/","title":"Мои мысли о Японии"},{"content":"Введение Rust — это относительно новый язык программирования, который позволяет писать быстрые и эффективные по памяти модули, используя современный синтаксис. Он поддерживает мультиплатформенность и используется в мире WebAssembly и встраиваемых систем. Известно, что он применяется в Firefox, DropBox и Cloudflare.\nОн также привлекает внимание как альтернатива C++.\nКак установить Установить Rust\nИнструкции по установке для каждой платформы доступны на сайте выше.\nВаша первая программа Сохраните следующую программу как main.rs.\n1 2 3 fn main() { println!(\u0026#34;Hello, world!\u0026#34;); } Если выполнить rustc main.rs в командной строке или терминале, программа скомпилируется, и при запуске ./main (в Windows — main.exe) выведет Hello, world!.\nДокументация (на японском) The Rust Programming Language (Японская версия)\nВсе необходимые для изучения Rust материалы собраны по ссылке выше (перевод на японский). Она настолько исчерпывающая, что вам даже не придется покупать учебник по Rust.\nЕсли вы хотите попробовать в браузере Если вы хотите попробовать запустить код в браузере без установки компилятора, вы можете использовать The Rust Playground. Введите код и нажмите кнопку «Запуск», и он скомпилируется и выполнится прямо в веб-браузере.\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/ru/p/rust%E3%81%AE%E3%81%AF%E3%81%98%E3%82%81%E3%81%8B%E3%81%9F/","title":"Как начать работать с Rust"},{"content":"Сменил домашний интернет с Flets Hikari на J:COM По совету знакомого сменил домашний интернет с Flets Hikari на J:COM. Причины следующие:\nЕжемесячная плата становится ниже: с 3,619 иен до 2,180 иен. Скорость интернета увеличивается со 100 Мбит/с до 320 Мбит/с. В основном из-за этих пунктов.\nВпечатления от использования Прошла примерно неделя после перехода, и пока почти никаких проблем нет. Ниже опишу некоторые моменты, которые привлекли моё внимание.\nПосле перехода я действительно заметил, что скорость скачивания стала быстрее — с 60 Мбит/с она поднялась почти до 320 Мбит/с. Однако, скорость отдачи упала с 40 Мбит/с (на Flets Hikari) до примерно 10 Мбит/с. Похоже, это особенности спецификации J:COM. Поскольку сейчас я не занимаюсь стримингом и не загружаю большие объемы данных, пока понаблюдаю за ситуацией.\nКроме того, в последнее время я и моя семья в основном работаем удаленно, и сегодня впервые интернет пропал на несколько десятков минут. Он восстановился автоматически, но, возможно, это не очень хорошее начало. Хотя прошла всего неделя после перехода\u0026hellip;\nКстати, кажется, скорость в P2P-приложениях низкая, поскольку J:COM ограничивает P2P-соединения. Тем, кто использует P2P, стоит быть внимательными.\nО сервисах При заключении контракта мне сказали, что если я подпишусь на Netflix или Disney+, то получу подарочную карту QUO на 40,000 иен. Это компенсирует плату за услуги, и ежемесячная плата в среднем станет ниже. Поэтому я подключил эти сервисы одновременно с подписанием контракта. Контракт на Netflix рассчитан на год, а на Disney+ — на полгода. Похоже, мне придется самому отменять подписки.\nПоскольку я перешел совсем недавно, я обновлю статью, если появятся новые впечатления. До скорого.\n09/06 Проблемы с подключением к интернету 2022/09/06 около 13:13, от 3 до 5 минут 2022/09/06 около 13:30, от 3 до 5 минут После этого еще несколько раз\u0026hellip; Похоже, проблема с DNS, поэтому я настроил DNS-сервер, ориентируясь на эту статью. Посмотрим, что будет дальше\u0026hellip; Поскольку я не мог подключиться даже с новыми настройками DNS, я обратился в службу поддержки, и они сообщили, что проводят экстренные технические работы\u0026hellip; Сразу после моего обращения связь восстановилась, так что, думаю, они что-то исправили.\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/ru/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":"Сменил домашний интернет с Flets Hikari на J:COM"},{"content":"Установка HUGO Скачивание Скачать HUGO\nС указанного выше сайта скачайте и распакуйте модуль для Windows, соответствующий вашей среде. В моем случае я скачал \u0026ldquo;hugo_0.102.3_Windows-64bit.zip\u0026rdquo;.\nРаспаковка Распакуйте скачанный zip-архив и скопируйте находящийся в нем hugo.exe в созданную вами папку, например C:\\bin.\nРегистрация в переменных среды Зарегистрируйте в переменных среды, чтобы запускать hugo.exe из любого места. Это действия для Windows 11, но я думаю, что вы можете зарегистрировать его, выполнив следующие шаги.\nНажмите кнопку Win+Pause, чтобы открыть сведения о системе. Нажмите Дополнительные параметры системы. Нажмите Переменные среды. Выберите Path и нажмите Изменить. Нажмите Создать, введите \u0026ldquo;C:\\bin\u0026rdquo; в новой строке и нажмите ОК, чтобы закрыть диалоговое окно. Предварительный просмотр блога Перейдите в папку блога HUGO в командной строке и выполните следующую команду.\nhugo server -D\nРезультат выполнения ниже. (-D — это параметр для отображения черновых статей.)\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 Адрес выводится во время выполнения (в примере выше http://localhost:1313/), поэтому скопируйте адрес в свой браузер. Предварительный просмотр автоматически обновляется при каждом сохранении файла. Чтобы завершить предварительный просмотр, введите Ctrl+C в командной строке.\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/ru/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】Предварительный просмотр в локальной среде"},{"content":"Вот 3 моих любимых фильма, где главным героем является математик.\nИгры разума Произведение, описывающее половину жизни реального американского гения-математика. Удивительный поворот в конце. Исполнитель главной роли Рассел Кроу отлично справляется со своей ролью.\nЭнигма Фильм 2001 года, экранизация романа Роберта Харриса «Энигма». Из Википедии\nИстория о расшифровке шифра, созданного Германией, с помощью шифровальной машины Энигма.\nИгра в имитацию Еще одна история о расшифровке, в которой фигурирует Энигма. Мне нравится мировоззрение того времени.\nЧеловек, который познал бесконечность Произведение, описывающее общение математика Харди из Кембриджского университета и индийского математика Рамануджана. Вы можете почувствовать красоту математики.\nВселенная Стивена Хокинга Произведение, описывающее половину жизни доктора Хокинга.\nСтрасти по частицам ","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/ru/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":"Фильмы с участием математиков"},{"content":"Детский стол Время, когда мой ребенок спит, — это время, когда я могу сосредоточиться на работе. Пойдем поиграем в парке после того, как закончится тихий час. Если бы у меня только был адаптер с Lightning на HDMI для iPad, я бы мог работать за столом справа~\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/ru/p/%E4%BB%8A%E6%97%A5%E3%81%AE%E4%BD%9C%E6%A5%AD%E7%92%B0%E5%A2%83/","title":"Сегодняшняя рабочая среда"},{"content":"Введение При написании этого блога я использую IntelliJ IDEA. Это удобно, потому что он хорошо совместим с Git и отображает предварительный просмотр Markdown. Каждый раз, когда я пишу в блог, мне приходится указывать дату в заголовке файла md. Похоже, для этого нет встроенного сочетания клавиш, поэтому я создал команду для вставки даты, опираясь на следующий сайт. Надеюсь, это будет полезно.\nIs there a shortcut for inserting date/time in IntelliJ IDEA?\nПроцедура настройки Откройте в меню \u0026ldquo;File\u0026rdquo; \u0026gt; \u0026ldquo;Settings\u0026hellip;\u0026rdquo;\nВыберите \u0026ldquo;Editor\u0026rdquo; \u0026gt; \u0026ldquo;Live Template\u0026rdquo; \u0026gt; \u0026ldquo;HTML/XML\u0026rdquo; и нажмите кнопку \u0026ldquo;+\u0026rdquo; Выберите Live Template Введите \u0026ldquo;date\u0026rdquo; в поле Abbreviation Введите \u0026ldquo;Вставить дату и время\u0026rdquo; в поле Description Введите \u0026ldquo;$date$\u0026rdquo; в поле Template Text Нажмите кнопку Edit Variables\nВведите \u0026ldquo;date\u0026rdquo; в поле Name Введите date(\u0026quot;yyyy-MM-dd'T'HH:mm:ss'+09:00'\u0026quot;) в поле Expression Нажмите OK, чтобы закрыть диалоговое окно Нажмите Define или Change и отметьте галочкой \u0026ldquo;Everywhere\u0026rdquo; Нажмите OK, чтобы закрыть диалоговое окно В редакторе кода введите \u0026ldquo;date\u0026rdquo; и нажмите Enter. Если вставится дата \u0026ldquo;2022-09-04T05:59:04+09:00\u0026rdquo;, настройка завершена! На этом всё.\nЗаключение Если я найду другие небольшие хитрости для IntelliJ IDEA, я обязательно поделюсь ими снова!\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/ru/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":"Добавление команды для вставки даты в IntelliJ IDEA"},{"content":"Я начал вести блог Что-то вроде фейерверка, код здесь\nВсем привет. Я решил завести блог просто так.\nУ меня нет какой-то великой цели вроде \u0026ldquo;Я хочу опубликовать это!\u0026rdquo;, просто подумал, что было бы здорово иметь место, где я мог бы писать то, что приходит в голову, будь то технологии или повседневная жизнь.\nПостараюсь не относиться к этому слишком серьезно и буду вести его как блокнот.\nСделано с помощью Hugo Этот блог создан с помощью генератора статических сайтов \u0026ldquo;Hugo\u0026rdquo;. Я нашел симпатичную тему и решил ее попробовать. (То, что на выбор темы ушло около 2 часов — это секрет)\nЯ также планирую делать заметки о коде и инструментах, которые меня заинтересовали.\nУтренний поход в Komeda Кстати, сегодня утром я проснулся пораньше и пошел в кафе Komeda. Вышел в 8:30, прогуливаясь и вдыхая утренний воздух.\nЗаказал утренний сет А с мини-сироноваром и кофе с молоком. Кажется, это стоило около 800 иен? (Не помню)\nУтреннее кафе — это здорово. Если перед работой есть время немного расслабиться, кажется, что весь день пройдет хорошо.\nТак что с этого момента я буду писать в свободном стиле. Планирую смешивать технические темы и повседневную жизнь.\nБуду рад вашей поддержке!\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/ru/p/%D1%8F-%D0%BD%D0%B0%D1%87%D0%B0%D0%BB-%D0%B2%D0%B5%D1%81%D1%82%D0%B8-%D0%B1%D0%BB%D0%BE%D0%B3/","title":"Я начал вести блог"},{"content":"Salesforce DevTools Вы можете искать пользовательские поля или выводить поля пользовательских объектов все сразу.\nТакже удобно собирать SOQL на месте.\nSalesforce DevTools\nSalesforce advanced Code searcher Это удобно при поиске кода Salesforce.\nSalesforce advanced Code searcher\n","date":"2022-05-02T10:39:36+09:00","image":"http://kenji.blog/p/salesforce%E3%81%8A%E3%81%99%E3%81%99%E3%82%81chrome%E6%8B%A1%E5%BC%B5/img_huc75a5c8c4d45e738551ca5afb26f380b_13227_120x120_fill_box_smart1_3.png","permalink":"http://kenji.blog/ru/p/salesforce%E3%81%8A%E3%81%99%E3%81%99%E3%82%81chrome%E6%8B%A1%E5%BC%B5/","title":"Рекомендуемые расширения Chrome для Salesforce"}]