Как стать автором
Обновить
34
1.1
Константин @Cerberuser

Разработчик, экспериментатор

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

Серьёзная безопасность: всплывшие спустя 15 лет баги в ядре Linux

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

Исследователи кибербезопасности GRIMM 12 марта опубликовали три интересных бага в ядре Linux. В коде, который игнорировали около 15 лет. К счастью, кажется, всё это время никто не присматривался к коду; по крайней мере, не так усердно, чтобы заметить ошибки. Соответствующие CVE уже исправлены.

Что же это за баги?
Всего голосов 12: ↑8 и ↓4+6
Комментарии17

FizzBuzz по-сениорски

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

- Добрый день, я на интервью на позицию старшего разработчика.

- Здравствуйте, давайте начнем с небольшого теста, пока я ваше CV смотрю. Напишите программу, которая выводила бы числа от 1 до, скажем, миллиарда, притом если число кратно трем, то вместо числа выводится Fizz, если кратно пяти, то Buzz, а если и трем, и пяти, то FizzBuzz.

Серьезно, FizzBuzz? Задачка для начальной школы, на сениорскую позицию? Ну ладно.

Читать далее
Всего голосов 295: ↑288 и ↓7+369
Комментарии306

«Группа смерти» изнутри: люди, которые играют в опасные игры

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


Помните, сколько было разговоров о подростковых суицидальных группах типа «синий кит»? Широкая огласка и моральная паника способствовали тому, что на ВКонтакте и ряде других площадок такие группы научились оперативно находить и блокировать. Но чем активнее родители и педагоги вели «профилактическую работу», предупреждая об игре и выясняя, не участвуют ли в ней дети, тем больше детей узнавало, что есть такая запретная, таинственная, опасная игра. Последствия этого были вполне естественны — дальнейшее распространение игры уже не требовало участия взрослых. «Синий кит» занял особое место в подростковой культуре, где-то рядом с зацепингом и играми с перебеганием перед движущимся транспортом. Как в Мафии, здесь есть разные роли. Кто-то выбирает для себя роль игрока, кто-то — куратора, кто-то — спасателя, волонтера.

Сегодня мы попробуем увидеть происходящее глазами рядовых участников — не тех, для кого в конечном итоге все кончилось плохо, а того подавляющего большинства, которое играло, а потом продолжило жить.
Читать дальше →
Всего голосов 267: ↑256 и ↓11+321
Комментарии345

Мнимая значимость

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

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

Несмотря на то, что это искажение восприятия успешно эксплуатируется большую часть человеческой истории, широкая публика обратила на него внимание после суда над О. Джей Симпсоном, известным в России по роли в культовой комедии «Голый Пистолет». На КДПВ он сбоку.

Во время этого процесса, адвокат убийцы, некий Джонни Кокран использовал приём, позднее названный «Защитой Чубакки» — он заморочил головы присяжным, засыпав их множеством утверждений, вопросов и выводов, совершенно отвлечённых и не имеющих отношения к рассматриваемому делу.

Как это сработало?
Всего голосов 135: ↑124 и ↓11+158
Комментарии451

Как прочитать тред на 2000 комментариев и выжить

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


Давайте поговорим о больших тредах. Об этих больших, грузных засранцах, в которых разворачиваются самые интересные дискуссии и проходят самые жестокие кармовые войны. Как часто вы их читаете? А прочитав раз, возвращаетесь ли к ним? Под обычной статьёй можно обновить комментарии, прочитать ответы и свежие сообщения, но в мегатредах это делать неудобно из-за долгой загрузки. В результате, целый пласт интересного обсуждения остаётся непрочитанным, и это обидно. Написано несколько альтернативных клиентов Хабра с разными подходами к рендерингу комментариев (кое-кто даже таким образом продвигает свою разработку), а я попробовал другой подход — упростить навигацию по комментариям, представив их в виде графика.
Читать дальше →
Всего голосов 26: ↑25 и ↓1+33
Комментарии12

Использование алгоритма Прима для генерации соединённых друг с другом пещер

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


Я решил объяснить один из алгоритмов генерации карты, используемых в моей игре In the House of Silence. Главное преимущество этого способа заключается в том, что в отличие от других алгоритмов, он никаким образом не может сгенерировать карту с разделёнными частями.

Генерация идеального лабиринта



Как понятно из названия, я использую хорошо задокументированный рандомизированный алгоритм Прима. Описание этого алгоритма можно найти на Википедии, однако вы можете применить любой другой алгоритм генерации лабиринтов.

Для понятности я привёл псевдокод, описывающий алгоритм Прима. Будет довольно просто приспособить его под любой язык программирования.
Читать дальше →
Всего голосов 50: ↑50 и ↓0+50
Комментарии5

Как мы ржавели. История внедрения и обучения

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

Все говорили – переходи на rust! Начинай пользоваться самым-самым языком, который самый любимый язык на stackoverflow и всё такое.

Я тяжело вздохнул и огляделся. Ну опять двадцать-пять. Ладно, давайте разбираться, как правильно покрывать всё ржавчиной.

Профессионально я программирую уже 17 лет. В далёкие-предалёкие времена я начал изучать программирование с x86 Assembly. Такой жестокий подход к изучению компьютера дал мне глубокое понимание того как работает процессор и что делают другие языки программирования. Учить новые языки для меня никогда не было проблемой. Я их просто учил. C, C++, шарпы, ГО, тысячи разных скриптов и фреймворков. Чего уж там, ещё один язык, можно и выучить.

Ага.

Только вот не с этой ржавой развалюхой. Я просидел две недели над официальным руководством, пялился в VSCode и не мог выдавить из себя больше чем fn main() {}. Ну какого же чёрта? Я просто закрыл глаза, открыл руководство на рандомной странице и начал его читать. И прикол в том, что я понял о чём там говориться. И тут до меня дошло… Руководство написано наизнанку. Начало и конец ничуть не лучше чем в Мементо Кристофера Нолана. Они как-то умудрились запутать в общем-то нормальное руководство. После этого всё пошло получше.

Ржавые шестерёнки заскрипели и начали крутиться. Программа пошла-поехала. Если хотите знать как я внедрил rust в продакшин, как я ему научился и что из этого вышло – добро пожаловать под кат. Реальные люди, коммиты, примеры и никаких todo-list и хеллоу-ворлдов.

Ржаветь так ржаветь.
Всего голосов 113: ↑109 и ↓4+134
Комментарии315

Передача файлов по воздуху через камеру смартфона

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


Проблема


Штрихкод — классная штука для маркировки всего на свете, от товаров до людей. Сейчас в ходу около двух десятков стандартов двумерных штрихкодов, и ещё десятки неудачных, трагически непонятых, самопальных и внутренних корпоративных вариантов, большинство из которых с треском проигрывает обычному QR-коду. Распространённость и простота реализации сделали его самым популярным среди двумерных штрихкодов, но и у него есть недостаток, характерный для всех линейных собратьев: он вмещает очень мало информации. В 2-3 килобайта можно уместить ссылку или небольшой отрывок текста, но даже небольшая картинка или обычный документ уже не влезут даже в самый большой код.
Всего голосов 83: ↑82 и ↓1+113
Комментарии126

Почему хабражители предпочитают велосипеды, вместо готовых решений? Или о systemd, part 0

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

С Новым Годом Хабр!
Первого января все нормальные люди занимаются прокрастинацией, уничтожением стратегического запаса оливье и прочими, не связанными с физической или интеллектуальной нагрузкой вещами. Вот и я планировал присоединиться к этой новогодней армии, но не тут-то было!

Во всём виноват Хабр!
Всего голосов 82: ↑80 и ↓2+102
Комментарии245

Как сделать ёлку, если ты математик

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

Весь рисунок - это набор математических функций от двух аргументов, x и y. Все они так или иначе базируются на SDF. Для рисования графиков использовался desmos.com.

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

Вам не нужны юнит-тесты

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

Да, вы не ослышались – именно так! В IT-сообществе прочно укоренилось мнение, что все эти тесты вам хоть как-то помогают, но так ли это на самом деле? Вы сами пробовали мыслить критически и анализировать это расхожее мнение? Хипстеры придумывают кучу парадигм – TDD, BDD, ПДД, ГИБДД – лишь чтобы создать иллюзию бурной деятельности и хоть как-то оправдать свою зарплату. Но задумайтесь, что будет, если вы (либо ваши программисты) начнете все свое время уделять исключительно написанию кода? Для тестирования есть отдельное направление и целые подразделения. Вы же не заставляете программистов писать требования, так? Тогда почему они должны писать тесты? Всех согласных и несогласных прошу проследовать внутрь поста, где я вам наглядно покажу, что юнит (и интеграционные) тесты – великое зло!

Проследовать
Всего голосов 72: ↑41 и ↓31+25
Комментарии193

Как увидеть ℼ? Нужно швырнуть ℼ в стену

Время на прочтение2 мин
Количество просмотров48K
Лучший способ объяснить школьникам и самому себе, что такое фазовое (конфигурационное) пространство.

image


Дано: Два блока массой 1 кг и 100 (10 000, 1 000 000,… 100x) кг. Трение в системе отсутствует, удары абсолютно упругие (потерь энергии нет). Более массивный блок ударяет менее массивный и тот отскакивает от него, а потом от стенки слева. Справа стены нет, тела могут двигаться в бесконечность.

Вопрос: Сколько столкновений совершит маленький блок, пока система не придет в состояние, когда столкновения невозможны (скорость маленького тела меньше скорости большого, двигающегося в бесконечность)?

Ответ невероятен:

image


В очередной раз поражаюсь изящности объяснений от 3Blue1Brown. Предлагаю читабельный конспект с небольшими сокращениями и дополнениями.
Всего голосов 163: ↑154 и ↓9+197
Комментарии111

Почему гну перешла через реку?

Время на прочтение10 мин
Количество просмотров32K
Маленькая упрощённая иллюстрация про разные уровни экосистемы. Итак, 19 сентября 2020 антилопы собрались вот в такую формацию:



И пошли через реку. Для нормальных людей это просто стадо до горизонта, но вообще это одно из самых впечатляющих зрелищ на планете. Дуглас-Гамильтон писал про большую миграцию так: «Большинство присутствующих ученых разделяли это чувство, и они наблюдали за миграцией гну с тем же почтительным восхищением, с каким созерцают «Джоконду».



Давайте чуть углубимся в экосистему и мышление гну, чтобы понять, что случилось и почему. Сегодня мы будем думать, как гну. Очень рациональные гну с ИТ-образованием.
Всего голосов 139: ↑136 и ↓3+174
Комментарии114

Трехмерный движок в коде… ДНК

Время на прочтение40 мин
Количество просмотров23K
UPD 29 ноября: Репозиторий с кодом ДНК выложен на GitHub.
github.com/pallada-92/dna-3d-engine

UPD 30 ноября:
В англоязычном твиттере заметили проект
Новость попала в топ-10 на HackerNews!






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

Ответ довольно неожиданный — lingua franca для моделирования сложных процессов в клетках является реакции вида
Эти реакции моделируются при помощи закона действующих масс, который одинаково работает и в химии, и в молекулярной биологии.

— Неужели при помощи этих примитивных реакций можно что-то программировать?
— Да, а то, что написано выше, вычисляет $B = \sqrt{A}$.

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

Потом я расскажу, как полученные реакции скомпилировать в код ДНК, который можно синтезировать в лаборатории и (если очень повезет) получить трехмерный куб из двумерного массива пробирок.

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

Для понимания статьи никаких предварительных знаний не требуется, необходимые сведения из школьной программы по биологии мы повторим в начале статьи. Также мы разберем типичные паттерны, которые использует эволюция для достижения сложного поведения в живых клетках.
Всего голосов 94: ↑94 и ↓0+94
Комментарии30

О талантах, деньгах и алгоритмах сжатия данных

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


Алгоритмы сжатия — это очень коварная тема, привлекающая многих новичков. Это правда! Часто человеку кажется, что его осенила божественная идея, как сильно сжать данные. Любые, кстати! Без потерь! Рекурсивно! А поскольку данные — это хранение информации и передача, то если хотя бы на единицы процентов результат улучшить — это миллиарды долларов (смотрим экономию всех провайдеров на передаче и хранении, всех дата-центров компаний, всех домашних пользователей, перемножаем… аж дух захватывает)! И люди пишут письма:
«Обращаюсь к вам, как «создателю и демиургу проекта ;) compression». Мной придуман алгоритм, основанный на простом рассуждении – если файл условно несжимаемый, есть вероятность что, часть файла имеет избыточность и файл можно сжать частично. …» 
«Обращаюсь к Вам, как к одному из главных специалистов в области сжатия информации. Предлагаю Вам ознакомиться с изобретением в области сжатия информации. [...] По мнению автора, основным достоинством данного «Способа кодирования информации» является способность одинаково хорошо сжимать без потери качества информацию любого типа (видео, аудио, текст, архив и т.д.). Помимо этого «Способ» позволяет проводить процесс кодирования (сжатия) повторно....» 

Бывает даже так:
«Мне, для начала, нужно 30–60 минут общения с Вами по Скайпу.
Вопрос: каково Ваше вознаграждение и куда его отправить?» 

И если вы думаете, что обращения типа последнего — мои любимые, то реакция ровно обратная («Боже, дай мне терпения!»). Ибо по опыту в последнем случае люди наиболее настойчивые… Кстати, это могут быть не только авторы, но и инвесторы, о которых ниже тоже будет. 

Кому интересно, в чем же таки коварство алгоритмов, есть ли у нас таланты, и где же, наконец, деньги — добро пожаловать под кат! (Талантливые авторы алгоритмов могут сразу переходить в раздел «Про деньги»).
Читать дальше →
Всего голосов 155: ↑151 и ↓4+203
Комментарии162

Что .jar сторонний нам готовил…

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

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

Читать дальше →
Всего голосов 60: ↑60 и ↓0+60
Комментарии18

Делаем музыкальный инструмент из кассетного плеера

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

Кассетный синтезатор

Мне нравятся необычные музыкальные проекты. Например, я выпустил альбом, основанный на записях, сделанных NASA во время миссии «Аполлон-12». А недавно я, для управления темпом музыки, использовал собственное сердцебиение. Результаты моих музыкальных экспериментов вы можете найти здесь.

Недавно я сделал из старого кассетного плеера, напоминающего Walkman от Sony, синтезатор, управляемый MIDI-командами. Для этого мне понадобилась плата Arduino и немного кода. То, что получилось, можно назвать «кассетным синтезатором».
Всего голосов 27: ↑27 и ↓0+27
Комментарии5

Мой топ IT книг из прошлого века, актуальных до сих пор

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

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

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

В данном топе книги не упорядочены по важности, они все очень хорошие, но есть одна книга, которая равнее других.

Читать далее
Всего голосов 49: ↑48 и ↓1+67
Комментарии55

Морской бой в PostgreSQL

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

Программисты ведут ожесточенные споры о вреде и пользе хранимых процедур в базах данных. Сегодня мы отвлечемся от них и снова сделаем невероятное в невозможных условиях.

Сегодня разработчики по возможности стараются не выстраивать бизнес-логику в базах данных. Тем не менее, находятся энтузиасты, которые бросают себе вызов и создают, например, матчер биржи, а иногда целые компании переводят серверную часть на хранимые процедуры БД. Авторы таких проектов утверждают, что на базах данных можно сделать все, что угодно, если захотеть.
Читать дальше →
Всего голосов 23: ↑22 и ↓1+28
Комментарии9

Как нарисовать звезду (и не только) в полярных координатах

Время на прочтение6 мин
Количество просмотров33K
Вопрос о формуле для многоугольника в полярных координатах регулярно возникает на тематических ресурсах — и так же регулярно остаётся без внятного ответа. В лучшем случае попадается решение через функцию остатка от деления — что не является «чистым» с математической точки зрения, поскольку не позволяет производить над функцией аналитические преобразования. Видимо, настоящие математики слишком заняты решением проблем тысячелетия и поисками простого доказательства теоремы Ферма, чтобы обращать внимание на подобные банальные задачи. К счастью, в этом вопросе воображение важнее знания, и для решения этой задачи не нужно быть профессором топологических наук — достаточно знания школьного уровня.
Дальше больше картинок
Всего голосов 116: ↑114 и ↓2+148
Комментарии31

Информация

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

Специализация

Fullstack Developer
Senior