Search
Write a publication
Pull to refresh
35
0.9
Константин @Cerberuser

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

Send message

TypeScript. Магия выражений

Reading time7 min
Views38K
TypeScript — поистине прекрасный язык. В его арсенале есть все, что необходимо для качественной разработки. И если вдруг, кому-то знакомы секс-драматические этюды с JavaScript, то меня поймет. TypeScript имеет ряд допущений, неожиданный синтаксис, восхитительные конструкции, которые подчеркивают его красоту, форму и наполняют новым смыслом. Сегодня речь о них, об этих допущениях, о магии выражений. Кому интересно, добро пожаловать.
Читать дальше →

Я уверен – senior mobile developer придет только по рекомендации

Reading time4 min
Views6.7K

Особая выборка сотрудников


Цифры, которые я привожу ниже скорее всего несравнимы с вашими. Возможно, они обусловлены тем, что мы занимаемся заказной разработкой в самом высоком ценовом сегменте и практически не берем на работу никого, кроме senior. Мы давно отказались от «‎джунов». Мы не работаем с вузами и не обучаем специалистов начального уровня, чтобы потом, через 10 лет, вырастить из них монстров разработки.

Причина проста – в нашей компании нет работы для «‎джунов». Мы не можем рисковать на наших крупных проектах их ошибками. Не поймите меня неправильно, мы, конечно, инвестируем в обучение, но обучаем только тех, кто уже что-то знает. Так, мы создали оффлайн-университет AGIMA.university, который заточен под специалистов высокого уровня: аналитиков, тимлидов, проектировщиков и руководителей проекта.

Там добавим const, отсюда удалим const…

Reading time9 min
Views18K
Я только что закончил серию изменений в коде браузера Chrome, которая уменьшила размер его бинарника под Windows примерно на 1 мегабайт, перенесла около 500 КB из read/write сегмента в read-only, а также уменьшила потребление оперативной памяти в общем примерно на 200 KB на каждый процесс Chrome. Удивительное заключается в том, что конкретно данная серия изменений состояла исключительно из удаления и добавления ключевого слова const в некоторых местах кода. Да, компиляторы — странные.

Эта задача возникла, когда я писал документацию для некоторых утилит, которые я использую для исследования регрессий кода, связанных с увеличением размера скомпилированных бинарников под Windows. Я запустил утилиту, скопировал в документацию её вывод и начал его описывать, когда заметил нечто странное: несколько больших глобальных объектов, которые согласно архитектуре должны были быть константными, почему-то находились в сегменте read/write данных. Сокращённая версия того вывода утилиты показана ниже:

image

Большинство исполняемых форматов имеют как минимум два сегмента данных — один для read/write объектов и ещё один для read-only. Если у вас есть константные данные, такие, например, как kBrotliDictionary, то их будет логично поместить в read-only сегмент, который является сегментом «2» в бинарнике Chrome под Windows. Однако некоторые константные данные, такие как unigram_table, device::UsbIds::vendors_ и blink::serializedCharacterData были в секции «3», то есть в read/write сегменте.

image
Читать дальше →

И ещё один Steam Windows Client Local Privilege Escalation 0day

Reading time7 min
Views21K

В предыдущей серии


Не так давно я опубликовал описание уязвимости для Steam. Я получил много отзывов от читателей. Valve не проронили ни слова, а HackerOne прислал огромное слезливое письмо и, в основном, молчал. В итоге меня забанили Valve на H1 — я не могу участвовать в их программе по отклонению уязвимостей (остальной H1 мне доступен).



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

А оно простое и грустное — Valve все так же терпят фиаско. Последнее обновление, которое было призвано устранить проблему, легко обходится и уязвимость все еще актуальна. Да, я это проверил — прекрасно работает.

Но эта статья не о том, что старая уязвимость все еще присутствует, а о новой. Поскольку Valve еще раз изъявили желание прочитать публичный отчет, вместо частного, не будем лишать их этого удовольствия.
Читать дальше →

Не шутите с NULL

Reading time5 min
Views23K
Достойная пятницы история приключилась с американским исследователем в области безопасности Джозефом Тартаро (Joseph Tartaro). Захотелось ему выделиться, заказав не просто индивидуальный номер на авто, но и связав его со своим ремеслом. Первой мыслью было поиграться с SEGFAULT или чем-то вроде этого. Но в итоге он остановился на номере NULL для своей машины и VOID для своей жены. Почуяли неладное? О том, чем обернулась для него невинная шалость, о ещё одном курьёзном мистере Null и о поучительных багах при проверке типов данных в пользовательском вводе, читайте под катом.

Читать дальше →

Как устроена защита детей от информации — и феерическая история про то, откуда она сначала взялась (18+)

Reading time10 min
Views85K


Всё началось с американских комиксов после Второй Мировой. Дело в том, что до войны ввели запрет на продажу порнографии, а порнографией нередко занимались бывшие бутлегеры. И вот у них встали печатные станки, и надо было что-то срочно придумывать. Придумались комиксы, поскольку с накалом обстановки из-за войны начала расти потребность в простых штуках (а комиксы тогда делали так, что читать уметь далеко не обязательно) и простых же супергероях, дарящих утешение.

Появились Супермен и его братва. Чуть позже, примерно с появлением Чудо-женщины, всё это эволюционировало обратно к мягкой порнографии (оценочное суждение). Забегая вперёд — доктор психиатрических наук обвинял эту серию в развитии множества половых извращений у малолетних американцев. Почему? Да потому что для аудитории самый естественный сюжет с дамой в трусах поверх остальной не очень богатой одежды — быть в беде. Сексуально. Ну, насколько тогда было возможно.
Читать дальше →

Разбираемся с латинскими сокращениями и фразами в английском языке

Reading time6 min
Views70K


Полтора года назад, читая работы про уязвимости Meltdown и Spectre, я поймал себя на том, что не очень понимаю разницу между сокращениями i.e. и e.g. Т.е. по контексту вроде бы понятно, но потом вроде бы как-то и не совсем то. В результате я тогда сделал себе небольшую шпаргалку именно по этим сокращениям, чтобы не путаться. И тогда же появилась идея этой статьи.


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

Читать дальше →

Краткий курс компьютерной графики: пишем упрощённый OpenGL своими руками, статья 1 из 6

Reading time7 min
Views411K

Содержание курса



Улучшение кода






Official translation (with a bit of polishing) is available here.




Постановка задачи


Цель этого цикла статей — показать, как работает OpenGL, написав его (сильно упрощённый!) клон самостоятельно. На удивление часто сталкиваюсь с людьми, которые не могут преодолеть первоначальный барьер обучения OpenGL/DirectX. Таким образом, я подготовил краткий цикл из шести лекций, после которого мои студенты выдают неплохие рендеры.

Итак, задача ставится следующим образом: не используя никаких сторонних библиотек (особенно графических) получить примерно такие картинки:



Внимание, это обучающий материал, который в целом повторит структуру библиотеки OpenGL. Это будет софтверный рендер, я не ставлю целью показать, как писать приложения под OpenGL. Я ставлю целью показать, как сам OpenGL устроен. По моему глубокому убеждению, без понимания этого написание эффективных приложений с использованием 3D библиотек невозможно.
Читать дальше →

Математическое расследование, как подделывали выборы губернатора в Приморье 16 сентября 2018 года

Reading time19 min
Views97K
Во втором туре выборов губернатора Приморского края 16 сентября 2018 года встречались действующий и.о. губернатора Андрей Тарасенко и занявший второе место в первом туре коммунист Андрей Ищенко. В ходе подсчета голосов на сайте ЦИК РФ отображалась информационная панель с растущим числом обработанных протоколов и голосов за кандидатов.

Публикация подробных данных по участкам на официальном сайте ЦИК www.izbirkom.ru замерла после ввода 1484 (95.74%) протоколов и не возобновлялась до самого конца. Поэтому когда в трансляции лидер голосования вдруг поменялся с Ищенко на Тарасенко, было неясно, как именно это могло произойти. В СМИ просто писали «после обработки 99,03% протоколов лидер сменился».

Однако, располагая промежуточными суммарными данными из информационной панели, с помощью простой математики и программирования можно подробно установить, что именно происходило с протоколами в ночь после выборов. Используем Python, Colab от Google и Z3 theorem prover от Microsoft Research. Ну и добьём всё обычной дедукцией.


И что же там можно расследовать?

Делать хорошо, делая плохо: написание «злого» кода с помощью Go, часть 2

Reading time9 min
Views3.4K
Вредные советы для Go-программиста

image

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

  • Плохо названные и организованные пакеты
  • Неправильно организованные интерфейсы
  • Передача указателей на переменные в функции для заполнения их значений
  • Использование паники вместо ошибок
  • Использование init-функций и пустого импорта для настройки зависимостей
  • Загрузка файлов конфигурации с использованием init-функций
  • Использование фреймворков вместо библиотек

Большой клубок зла


Что будет, если собрать все наши злые практики вместе? У нас получился бы фреймворк, который использовала бы множество файлов конфигурации, заполнял поля структур с помощью указателей, определял интерфейсы для описания публикуемых типов, опирался на «магический» код и паниковала всякий раз, когда возникала проблема.

И я сделал такой. Если вы зайдете на https://github.com/evil-go, вы увидите Fall (падение), — DI фреймворк, дающий возможность внедрять любые «злые» практики, которые только захотите. Я спаял Fall с крошечным веб-фреймворком Outboy, который следует тем же принципам.

Вы можете спросить, насколько они злодейские? Давайте посмотрим. Предлагаю пройтись по простой программе Go (написанной с использованием лучших практик), которая предоставляет http endpoint. А затем перепишем ее, используя Fall и Outboy.
Читать дальше →

Как выбрать случайное число от 1 до 10

Reading time6 min
Views46K
Представьте, что вам нужно сгенерировать равномерно распределённое случайное число от 1 до 10. То есть целое число от 1 до 10 включительно, с равной вероятностью (10%) появления каждого. Но, скажем, без доступа к монетам, компьютерам, радиоактивному материалу или другим подобным источникам (псевдо) случайных чисел. У вас есть только комната с людьми.

Предположим, что в этой комнате чуть более 8500 студентов.

Самое простое — попросить кого-нибудь: «Эй, выбери случайное число от одного до десяти!». Человек отвечает: «Семь!». Отлично! Теперь у вас есть число. Однако вы начинаете задаваться вопросом, является ли оно равномерно распределённым?
Читать дальше →

Пионеры новых технологий: Вадим Арцев рассказал, как перестал быть незрячим

Reading time4 min
Views16K


В пятницу 28 июня первые пользователи технологии vOICe vision встретились со слабовидящими людьми, чтобы рассказать о новом способе восприятия пространства, которому они научились благодаря сенсорному замещению.

Трое молодых людей первыми в России овладели навыками Звукового Зрения и смогли вновь видеть мир, оставаясь слепыми. Вадим, Руслан и Ислам – так зовут основателей и первых членов «Клуба Звукового Зрения». У них разные взгляды на жизнь и разные истории. Но то, что их объединяет заметно каждому.

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

Технология vOICe vision разработана с одной целью – научить незрячих людей видеть. И участники клуба уверены, что это возможно. В разной степени каждый из них уже научился это делать.
Читать дальше →
Информационная безопасность — самая увлекательная и азартная сфера компьютерных технологий. В ИБ постоянно идет противоборство «меча и щита», средств атаки и защиты. Но даже самая мощная защита может быть неэффективна, если не уметь с ней обращаться. А учиться можно на громких провалах других компаний. Мы вместе с Kaspersky подготовили тест по наиболее известным факапам в сфере ИБ. Проверим, свежи ли они еще в вашей памяти.
Пройти тест

Ломаем игру на память: целый детектив

Reading time13 min
Views23K


Эта игра не давала нам покоя несколько месяцев. Правила очень простые: надо выкладывать карточки с картинками и придумывать сказку. Потом вспомнить её.

Простая штука на запоминание, подумали мы. Сто раз в такое играли, и всё наше образование просто вопит, что сейчас будет просто.

Три месяца. Три долбанных месяца прошло, прежде чем мы почти научились выигрывать. По пути нам пришлось поднять переводы «Войны и мира» и вообще узнать много нового о длине слов в разных языках. Заодно дошли до психолингвистов. И решили для себя давний вопрос про длину сообщения в русском и английском.

Спойлер: русский язык в среднем (на длинных фразах) не длиннее английского. И вообще все языки примерно одинаковы по скорости передачи информации — по крайней мере, так нам сказали в РАН. Но сразу сказали, что цитировать их нельзя, потому что исследования нет, и где-то рядом ходит РЕН-ТВ. Тут очень кстати пришёлся релиз английской версии Хабра с переводами — так мы быстро нашли базу эквивалентов.

Но давайте с самого начала.
Читать дальше →

Процедурная генерация планет

Reading time19 min
Views40K

От переводчика:
Представляю вашему вниманию статью авторства Andy Gainey, в прошлом независимого разработчика игровых инструментов, ныне сотрудника Paradox Development Studio. На мой взгляд, автор играючи создал один из лучших процедурных генераторов планет с открытым исходным кодом.

Читать дальше →

Быстрое умножение целых чисел с использованием таблиц

Reading time3 min
Views15K
Хочу рассказать читателям о программистском трюке, с которым я познакомился в какой-то переводной книжке, содержащей подборку таких трюков, в те далёкие времена, когда ещё не изобрели не то что байт, а страшно сказать — стек, а великий Дейкстра ещё не проклял оператор GOTO (sic, in uppercase).

Трюк настолько мне понравился простотой и изяществом, что уже в этом тысячелетии я с удовольствием рассказывал о нём студентам в виде следующей задачи.

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

В таком сюжете нет ничего особо фантастического. Вспомним, например, какие проблемы случались когда-то с процессорами Pentium , а к моменту отправки на Луну вы ещё не достигли полного импортозамещения. И вообще надо проверить, а не были ли процессоры просверлены специально.

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

Короткая JS-задачка для понедельника

Reading time2 min
Views5.3K
image

Которая родилась в процессе изучения кошмаров LexicalEnvironment и вообще ликбеза на тему "Почему оно работает так".


Задача получилась действительно из серии wtfjs, но после внимательного рассмотрения — полностью укладывается в логику работы языка.

Читать дальше →

Ис[пользу]й

Reading time10 min
Views11K
Это – самая полезная статья из всех, что вы читали. Потому что она о пользе и ее получении.

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

Первое и главное

Читать дальше →

От пяти копеек до игры божеств

Reading time18 min
Views3.6K
Доброго дня.

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

Настольно-ролевые конкурсы мне попадались как наши отечественные (именуемые «Кашеварами»), так и международные (ежегодный Game Chef). На международном, как правило, требовалось придумать какую-то новую мини-систему правил, а на Кашевары подавались не только системы, но и модули-приключения для существующих систем. Ещё международный конкурс пытался задавать некие тренды и экспериментировать — в тот год очередной темой Game Chef стал поиск новых настольно-ролевых форматов: «отсутствие книги правил».
Читать дальше →

Information

Rating
3,152-nd
Location
Новосибирск, Новосибирская обл., Россия
Date of birth
Registered
Activity

Specialization

Fullstack Developer
Senior