Как стать автором
Обновить
-5
23
Рогин Василий @roginvs

Пользователь

Отправить сообщение

Атака Ферма на RSA

Время на прочтение4 мин
Количество просмотров16K

В 1643 году Пьер де Ферма предложил метод факторизации. Этот метод позволяет эффективно раскладывать целые числа на простые множители.

Алгоритм шифрования и подписи RSA основывается на том, что факторизация — это задача с высокой сложностью. Открытый ключ RSA содержит составное число (обычно называемое N), которое является произведение двух простых чисел (обычно p и q).

Если ключи RSA генерируются из «близко стоящих» простых чисел, то RSA можно взломать с помощью метода факторизации Ферма. И хотя это довольно известный факт, но, насколько я знаю, уязвимые ключи RSA не обнаруживались в «дикой природе» — до сегодняшнего дня.

Я применил метод факторизации Ферма к большим наборам открытых ключей RSA. И я смог обнаружить небольшое количество уязвимых ключей, которые принадлежали принтерам Canon и Fujifilm (первоначально выпускавшихся под маркой Fuji Xerox). В этих устройствах используется криптографический модуль от компании Rambus.
Читать дальше →
Всего голосов 34: ↑25 и ↓9+25
Комментарии22

Действующий процессор на 13 микросхемах стандартной логики

Уровень сложностиСредний
Время на прочтение7 мин
Количество просмотров22K


Привет, Хабр! Для меня было просто невозможно пройти мимо этого схемотехнического чуда. Горстка деталей на небольшой двусторонней плате выполняет команды машинного языка и выводит результат в виде двоичного кода!

Действующая модель называется "TD4 CPU", является проектом с открытыми исходниками, реально работает и позволяет понять устройство и принцип работы процессора.
Читать дальше →
Всего голосов 85: ↑84 и ↓1+109
Комментарии54

Подводные камни С++. Решаем загадки неопределённого поведения, ч. 1

Время на прочтение11 мин
Количество просмотров16K

Изучение и понимание неопределённого поведения — важный шаг для разработчика C++, поскольку undefined behavior бывает источником серьёзных ошибок и проблем в программах. UB может проявляться в разных аспектах языка, включая операции с памятью, многопоточность, арифметические вычисления, работу с указателями и так далее.

Под катом мы погрузимся в мир неопределённого поведения в C++ и рассмотрим некоторые примеры ситуаций, в которых оно может возникать.

P.S.: Часть приведённых в статье примеров вдохновлены материалами, которые можно посмотреть в разделе «Полезные ссылки».

Читать далее
Всего голосов 42: ↑40 и ↓2+44
Комментарии44

Математика провисающих проводов и цепей в играх

Время на прочтение5 мин
Количество просмотров14K
Во многих современных играх присутствуют провода, кабели и цепи. В этой статье мы рассмотрим математические модели, от которых зависит их форма, также называемая catenary («цепная линия»).

Введение в цепные линии


Из множества изученных и описанных математических объектов один очень дорог многим разработчикам игр. И только некоторые из них знают его истинное название: цепная линия.

Цепная линия — это фигура, к которой естественным образом сводится подвешенная за края верёвка или цепь. Неслучайно само название catenary происходит от латинского catenaria, что и означает «цепь».

В современных играх появляется всё больше заброшенных предприятий и разрушенных окружений. И во многих из них встречается довольно много свисающих проводов. Например, их можно увидеть в комнате GLaDOS из «Portal» или в «Half-Life: Alyx».


Так как цепные линии окружают нас повсюду, неудивительно, что мы с детства привыкли к их форме. А ещё это означает, что мы очень легко замечаем, когда что-то свисает неправильно. Подобно сложности движения кожи или физики ткани, неправильное свисание цепных линий само по себе создаёт эффект «зловещей долины».
Всего голосов 29: ↑29 и ↓0+29
Комментарии23

Сказка про Branch prediction

Время на прочтение9 мин
Количество просмотров11K

Конвейер трудится изо всех сил, чтобы повысить производительность твоей программы. А злобные «if»'ы нагло врываются посреди его работы и всё портят!

На сколько полезен конвейер в современных ЭВМ? Как сильно мешаются ветвления в коде, которые ты написал? И как архитекторы процессоров сглаживают ущерб, который «if»'ы наносят по производительности программ?

Читать далее
Всего голосов 42: ↑42 и ↓0+42
Комментарии23

5 книг, которые стоит прочесть С++-разработчику

Время на прочтение4 мин
Количество просмотров17K

Современным разработчикам, чтобы совершенствовать профессиональные навыки, требуется постоянно заниматься самообразованием. Как говорила Алиса из небезызвестной книги Льюиса Кэрролла: «Нужно бежать со всех ног, чтобы только оставаться на месте, а чтобы куда-то попасть, надо бежать как минимум вдвое быстрее». И это действительно так — останавливаться не стоит.

Один из самых распространённых инструментов самообразования — книги. Сегодня поговорим о полезных для разработчиков С++ изданиях, часть которых — просто must have. Всего в подборке пять вариантов, некоторые из них, вероятно, покажутся читателям необычным выбором. Но все они полезны для программистов. Если у вас есть собственные предпочтения, которые в подборку не попали, пишите о них в комментариях, с удовольствием ознакомимся.

Читать далее
Всего голосов 9: ↑7 и ↓2+14
Комментарии8

Поговорим об оптимизирующих компиляторах. Сказ второй: Доминирование

Уровень сложностиСредний
Время на прочтение10 мин
Количество просмотров9.7K

Сегодня мы продолжаем наш разговор об оптимизирующих компиляторах для самых маленьких и не очень. Для тех, кто пока не в курсе происходящего, но желает приобщиться - я поставил себе задачу написать цикл вводных статей в эту область для совсем-совсем начинающих. Первую часть, где рассказывается об SSA-форме, можно и нужно прочитать здесь.

Сегодня мы поговорим о доминировании. Это одна из фундаментальных вещей, на которых стоит как теория компиляторов вообще, так и многие компиляторные оптимизации в частности. Пристегните ремни и запишите стоп-слово на бумажке, чтобы не забыть.

Причаститься
Всего голосов 49: ↑49 и ↓0+49
Комментарии18

Поговорим об оптимизирующих компиляторах. Сказ первый: SSA-форма

Уровень сложностиСредний
Время на прочтение9 мин
Количество просмотров17K

Всем привет. Сегодня я хотел бы поговорить об устройстве современных оптимизирующих компиляторов. Я никогда не публиковался на Хабре ранее, но надеюсь, что мне удастся написать серию статей, которая просуммирует мой опыт в этой области.

Коротко обо мне. Меня зовут Макс, и так получилось, что я вот уже 10 лет, почти с самого начала своей карьеры, занимаюсь оптимизирующими компиляторами. Я начинал в Intel, потом перешёл в Azul Systems, год провёл в Cadence и вернулся обратно, всё это время занимаясь компиляторными оптимизациями для Java, C++ и нейросетевых моделей. На момент написания статьи у меня чуть за 900 патчей в LLVM, большинство из них посвящено цикловым оптимизациям.

За это время я провёл десятки собеседований на позиции как интернов, так и инженеров сеньорного уровня, и довольно часто люди, приходя на эти собеседования, многих вещей не знают или знают поверхностно. И я подумал: а мог бы я написать такой цикл статей, чтобы человек, прочитав их, узнал бы всю ту базу, которая, на мой собственный взгляд, необходимо начинающему компиляторному инженеру? Очень бы хотелось, чтобы новичку в этой области можно бы было дать один (относительно небольшой по объёму) набор текстов, чтобы он получил оттуда всё необходимое для старта. Это не перевод, текст оригинальный, поэтому в нём могут быть ошибки и неточности, которые я буду рад исправить, если вы мне их укажете.

Итак, поехали.

Погрузиться
Всего голосов 93: ↑91 и ↓2+117
Комментарии58

Локальное окружение для изучения Web3.js и Ethereum

Уровень сложностиПростой
Время на прочтение7 мин
Количество просмотров5.3K

В данной статье я расскажу как настроить окружение для изучения библиотеки web3.js Статья рассчитана на тех, кто интересуется blockchain и хочет научиться взаимодействовать с сетью Ethereum, она же EVM (Ethereum Virtual Machine), через библиотеку web3.js

После настройки окружения, мы отправим нашу первую транзакцию через консоль - перевод криптовалюты с одного аккаунта на другой посредством библиотеки web3, а так же изучим некоторые другие команды.

Читать далее
Всего голосов 7: ↑6 и ↓1+9
Комментарии1

5 вещей, которые предприниматели, инвесторы и рекрутеры должны знать о CTO

Уровень сложностиПростой
Время на прочтение6 мин
Количество просмотров4.3K

Я занимаю должность СТО уже около десяти лет.

К настоящему времени у меня сложилась довольно четкое понимание того, кто такой CTO, что делает CTO успешным, а что - нет.

Однако, даже сейчас я замечаю, что эта роль является одной из самых неправильно понимаемых в сфере технологий.

Читать далее
Всего голосов 10: ↑8 и ↓2+10
Комментарии10

Как заонбордиться тимлиду — первые 90 дней на новой работе

Время на прочтение7 мин
Количество просмотров10K

В этой статье обсуждаем, что и как делать тимлиду в новой команде. Расскажем, как поймать коннект с коллегами, поможем составить план на первые три месяца работы, дадим примеры и шаблоны документов.

Ещё дадим несколько советов на тот случай, если всё-таки не удаётся показать результат за отведённое время.

Читать далее
Всего голосов 12: ↑11 и ↓1+13
Комментарии5

Как писать ненормальный код и зачем это может быть нужно

Время на прочтение5 мин
Количество просмотров13K

Некоторое время назад на одном из проектов по работе я столкнулся с определенными требованиями, которые сразу же разожгли мой живой интерес разобраться с возможностями их обхода, попутно применив свой прошлый опыт написания фреймворков, интерпретаторов и т.п. В результат получилась вполне рабочая технология, позволяющая обходить с моей точки зрения лишние требования в проекте. За конкретикой прошу под кат.

Читать далее
Всего голосов 23: ↑20 и ↓3+21
Комментарии35

Портирование движка Zelda Classic в веб

Время на прочтение27 мин
Количество просмотров4.3K

Скриншот пользователя Mitchfork, победивший в соревнованиях 2021 Screenshot of the Year

Я портировал Zelda Classic (игровой движок, основанный на первой части Zelda) в веб. В него можно поиграть здесь, хватайте геймпад, если он у вас есть!

Это приложение PWA, так что можно его даже установить.
Читать дальше →
Всего голосов 11: ↑11 и ↓0+11
Комментарии1

WebAssembly: Docker без контейнеров

Уровень сложностиСредний
Время на прочтение16 мин
Количество просмотров15K

«Если бы WASM+WASI существовали в 2008 году, нам бы не пришлось создавать Docker. WebAssembly на сервере — будущее компьютерных технологий», считает Соломон Хайкс, соучредитель корпорации Docker и автор Docker Open Source Initiative.

Сравнительно недавно Docker объявил о поддержке WebAssembly на базе WasmEdge. А мы перевели фундаментальный, но практичный материал о том, как пользоваться этой технологией в экосистеме Docker и чем Wasm-контейнер отличается от классического. 

Читать далее
Всего голосов 40: ↑38 и ↓2+49
Комментарии35

Коды ошибок — это гораздо медленнее, чем исключения

Время на прочтение12 мин
Количество просмотров21K
На современных 64-битных PC-архитектурах использование C++-исключений означает всего лишь добавление к функциям недостижимого кода с вызовами деструктора и ухудшение производительность менее чем на 1%. Такие небольшие ухудшения производительности сложно даже измерить. Обработка редких ошибок с использованием возвращаемых значений требует дополнительных операций ветвления, которые, в реалистичных сценариях, замедляют программы примерно на 5%. Такой подход, кроме того, менее удобен, чем использование исключений. Если выбрасывается исключение, то на «раскрутку» каждого кадра стека тратится примерно 2 мкс.



C считается самым быстрым языком программирования. В C++ есть возможности, которые лишь повышают удобство работы, не влияя на производительность, в сравнении с C, и возможности, которые на производительность влияют. Эти возможности очень помогают в деле улучшения качества кода. В результате ими, несмотря ни на что, достаточно часто пользуются. Полиморфизм времени выполнения — это буквально вездесущая возможность, а вот исключения распространены меньше.
Читать дальше →
Всего голосов 53: ↑40 и ↓13+47
Комментарии54

Ошибки, которые я совершил, будучи молодым менеджером

Уровень сложностиПростой
Время на прочтение9 мин
Количество просмотров19K

Становление в качестве менеджера далось мне необычайно трудно. Я трижды брался за это дело и бросал, пока, наконец, мне не удалось утвердиться. И всё дело было в том, что я совершал множество ошибок. С тех пор, когда настало время растить собственную команду и обучать других управлять её частью, я видел, как многие люди в разной степени тоже испытывают трудности — зачастую аналогичные моим.

Ниже я дам небольшую, старательно собранную подборку собственных ошибок и стратегий, которые помогли их преодолеть.
Читать дальше →
Всего голосов 34: ↑30 и ↓4+39
Комментарии4

Даже Amazon не может разобраться в serverless и микросервисах

Уровень сложностиПростой
Время на прочтение3 мин
Количество просмотров38K

Эта заметка является переводом поста в блоге Дэвида Ханссона под заголовком «Even Amazon can't make sense of serverless or microservices». Здесь минимум редактуры для сохранения оригинальной авторской подачи.

Команда Prime Video из Amazon опубликовала довольно примечательное тематическое исследование, посвящённое их решению отказаться от своей микросервисной serverless-архитектуры и заменить её монолитом. Этот шаг сэкономил им ошеломляющие 90% (!!) эксплуатационных расходов, а также упростил систему. Какая победа!

Но помимо восхваления их здравого смысла, я думаю, что здесь есть более важный момент, который применим ко всей нашей отрасли...

Читать далее
Всего голосов 70: ↑44 и ↓26+27
Комментарии95

Дайте крудошлепа

Уровень сложностиСредний
Время на прочтение7 мин
Количество просмотров114K

Я устроился в небольшую компанию, которая сделал круд‑приложуху на 20 таблиц типа «заметки» и активно ее продавала госорганам за невменяемый бабос.

У нас был 3(три) Т‑Р-И статуса юзера. Anonym → Logined → Phone_Confirmed. Молодой талант до меня увидел в этом граф, и написал класс на 200+ строк, реализующий алгоритм Флойда‑Уоршелла, прикрутил стейт‑машину и не найдя интересных задач, c блеском прошел собес в Яндекс и свалил.

Меня наняли сеньором, и я каюсь ничерта не понял, алгоритм прекрасно работал на первой ступени, на второй давал сбои, тоскливо погуглил этот алгоритм, стер все к черту и написал: if(status==Logined & phone!=null){status=Phone_Confirmed}.

Один коллега посмотрел на меня с немой благодарностью, а начальник офигел и сказал, что код нерасширяем и захардкожен, а тот алгоритм мог пройти за время логN через тысячу вершин и по истечению испытательного урока меня уволили нах, так как мой технический уровень не соответствовал их высоким требованиям, впрочем выдали три зарплаты и я благодарен этим людям. Мой код оставили, тот так и не смогли починить.

Это было вступление.

Уважаемый Яндекс, Сбер и прочая! Я умею быстро решать задачи и кратно увеличивать выхлоп простыми решениями. Я самый умный программист, среди всех ваших работников! Я — НадНадсеньор! Сейчас докажу.

Потому что, только я могу решить задачку, которую вы уже 10 лет решить не можете, когда прилетает пуш‑уведомление или смс и в твоем всплывающем окне написано:

«Ваш шестизначный пароль доступа в наше приложение: 123...»

Не согласен! ...
Всего голосов 395: ↑332 и ↓63+339
Комментарии731

Полезен ли сегодня быстрый обратный квадратный корень из Quake III?

Время на прочтение23 мин
Количество просмотров73K

В 2005 году id Software опубликовала под лицензией GPL-2 исходный код своей игры 1999 года Quake III Arena. В файле code/game/q_math.c есть функция для вычисления обратного квадратного корня числа, которая на первый взгляд выглядит очень любопытным алгоритмом:

float Q_rsqrt( float number )
{
    long i;
    float x2, y;
    const float threehalfs = 1.5F;

    x2 = number * 0.5F;
    y  = number;
    i  = * ( long * ) &y;                       // зловещий хакинг чисел с плавающей запятой на уровне битов
    i  = 0x5f3759df - ( i >> 1 );               // какого чёрта?
    y  = * ( float * ) &i;
    y  = y * ( threehalfs - ( x2 * y * y ) );   // первая итерация
//  y  = y * ( threehalfs - ( x2 * y * y ) );   // вторая итерация, можно удалить

    return y;
}

Об этом алгоритме написано множество статей, и ему посвящена хорошая страница Википедии, где он назван fast inverse square root (быстрым обратным квадратным корнем). На самом деле, этот алгоритм упоминался на различных форумах ещё до публикации исходного кода Q3. Ryszard из Beyond3D провёл в 2004-2005 годах исследование и в конечном итоге выяснил, что первоначальным автором алгоритма был Грег Уолш из Ardent Computer, который создал его десятью годами ранее.
Читать дальше →
Всего голосов 148: ↑146 и ↓2+191
Комментарии52

На какие вопросы нужно себе ответить начиная поиск работы

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров5K

В последнее время меня начали бесить посты рекрутеров и карьерных консультантов о том, как надо вести себя при поиске работы. Почти все советуют вылизать резюме, поставить статус Open to work на аватарку и готовится к интервью, чтобы показать себя как можно лучше. Может, хватит такого подхода? Хватит культивировать в людях пассивную зависимость от чужого решения.

Начнем с того, что коммерческие фирмы, нанимая на работу, не занимаются благотворительностью. Им нужна чужая экспертиза и они готовы за нее платить. Ни рекрутер, ни нанимающий менеджер не делает вам одолжение приглашая на интервью или высылая оффер.

Это касается всех начиная от топ-менеджеров и заканчивая джунами.

Тогда почему же мы с таким упорством и такой надеждой уповаем на чужие ожидания и чужую оценку, на то, что нас заметят и наймут или повысят, если мы будем себя правильно вести? Почему почти из каждого поста нам говорят о том, как себя вести на интервью, как понравиться рекрутеру или нанимающему менеджеру, но так мало постов и статей о том, как самому понять и принять свою ценность и как рассказать о ней другим?

Читать далее
Всего голосов 18: ↑6 и ↓12-6
Комментарии30

Информация

В рейтинге
339-й
Откуда
Великий Новгород (Новгород), Новгородская обл., Россия
Дата рождения
Зарегистрирован
Активность