Разработчик, экспериментатор
Я уверен – senior mobile developer придет только по рекомендации
Особая выборка сотрудников
Цифры, которые я привожу ниже скорее всего несравнимы с вашими. Возможно, они обусловлены тем, что мы занимаемся заказной разработкой в самом высоком ценовом сегменте и практически не берем на работу никого, кроме senior. Мы давно отказались от «джунов». Мы не работаем с вузами и не обучаем специалистов начального уровня, чтобы потом, через 10 лет, вырастить из них монстров разработки.
Причина проста – в нашей компании нет работы для «джунов». Мы не можем рисковать на наших крупных проектах их ошибками. Не поймите меня неправильно, мы, конечно, инвестируем в обучение, но обучаем только тех, кто уже что-то знает. Так, мы создали оффлайн-университет AGIMA.university, который заточен под специалистов высокого уровня: аналитиков, тимлидов, проектировщиков и руководителей проекта.
Там добавим const, отсюда удалим const…
Эта задача возникла, когда я писал документацию для некоторых утилит, которые я использую для исследования регрессий кода, связанных с увеличением размера скомпилированных бинарников под Windows. Я запустил утилиту, скопировал в документацию её вывод и начал его описывать, когда заметил нечто странное: несколько больших глобальных объектов, которые согласно архитектуре должны были быть константными, почему-то находились в сегменте read/write данных. Сокращённая версия того вывода утилиты показана ниже:

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

И ещё один Steam Windows Client Local Privilege Escalation 0day
В предыдущей серии
Не так давно я опубликовал описание уязвимости для Steam. Я получил много отзывов от читателей. Valve не проронили ни слова, а HackerOne прислал огромное слезливое письмо и, в основном, молчал. В итоге меня забанили Valve на H1 — я не могу участвовать в их программе по отклонению уязвимостей (остальной H1 мне доступен).

Более подробно историю вы можете узнать в предыдущей публикации, здесь же я скажу пару слов об актуальном состоянии.
А оно простое и грустное — Valve все так же терпят фиаско. Последнее обновление, которое было призвано устранить проблему, легко обходится и уязвимость все еще актуальна. Да, я это проверил — прекрасно работает.
Но эта статья не о том, что старая уязвимость все еще присутствует, а о новой. Поскольку Valve еще раз изъявили желание прочитать публичный отчет, вместо частного, не будем лишать их этого удовольствия.
Не шутите с NULL

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

Всё началось с американских комиксов после Второй Мировой. Дело в том, что до войны ввели запрет на продажу порнографии, а порнографией нередко занимались бывшие бутлегеры. И вот у них встали печатные станки, и надо было что-то срочно придумывать. Придумались комиксы, поскольку с накалом обстановки из-за войны начала расти потребность в простых штуках (а комиксы тогда делали так, что читать уметь далеко не обязательно) и простых же супергероях, дарящих утешение.
Появились Супермен и его братва. Чуть позже, примерно с появлением Чудо-женщины, всё это эволюционировало обратно к мягкой порнографии (оценочное суждение). Забегая вперёд — доктор психиатрических наук обвинял эту серию в развитии множества половых извращений у малолетних американцев. Почему? Да потому что для аудитории самый естественный сюжет с дамой в трусах поверх остальной не очень богатой одежды — быть в беде. Сексуально. Ну, насколько тогда было возможно.
Разбираемся с латинскими сокращениями и фразами в английском языке
Полтора года назад, читая работы про уязвимости Meltdown и Spectre, я поймал себя на том, что не очень понимаю разницу между сокращениями i.e. и e.g. Т.е. по контексту вроде бы понятно, но потом вроде бы как-то и не совсем то. В результате я тогда сделал себе небольшую шпаргалку именно по этим сокращениям, чтобы не путаться. И тогда же появилась идея этой статьи.
Прошло время, я набрал коллекцию встреченных в английских источниках латинских слов и сокращений и сегодня готов поделиться ею с читателями Хабры. Стоит заметить, что многие из этих фраз активно употребляются и в академической литературе на русском языке, но в английском они – частые гости даже в массовых источниках. Надеюсь, что эта подборка пригодится людям, не занимающимся научной работой в русскоязычной среде, но часто сталкивающимся с более-менее серьезными текстами на английском, где латинские вкрапления могут сбить с толку.
Краткий курс компьютерной графики: пишем упрощённый OpenGL своими руками, статья 1 из 6
Содержание курса
- Статья 1: алгоритм Брезенхэма
- Статья 2: растеризация треугольника + отсечение задних граней
- Статья 3: Удаление невидимых поверхностей: z-буфер
- Статья 4: Необходимая геометрия: фестиваль матриц
- Статья 5: Пишем шейдеры под нашу библиотеку
- Статья 6: Чуть больше, чем просто шейдер: просчёт теней
Улучшение кода
Official translation (with a bit of polishing) is available here.
Постановка задачи
Цель этого цикла статей — показать, как работает OpenGL, написав его (сильно упрощённый!) клон самостоятельно. На удивление часто сталкиваюсь с людьми, которые не могут преодолеть первоначальный барьер обучения OpenGL/DirectX. Таким образом, я подготовил краткий цикл из шести лекций, после которого мои студенты выдают неплохие рендеры.
Итак, задача ставится следующим образом: не используя никаких сторонних библиотек (особенно графических) получить примерно такие картинки:

Внимание, это обучающий материал, который в целом повторит структуру библиотеки OpenGL. Это будет софтверный рендер, я не ставлю целью показать, как писать приложения под OpenGL. Я ставлю целью показать, как сам OpenGL устроен. По моему глубокому убеждению, без понимания этого написание эффективных приложений с использованием 3D библиотек невозможно.
Математическое расследование, как подделывали выборы губернатора в Приморье 16 сентября 2018 года
Публикация подробных данных по участкам на официальном сайте ЦИК www.izbirkom.ru замерла после ввода 1484 (95.74%) протоколов и не возобновлялась до самого конца. Поэтому когда в трансляции лидер голосования вдруг поменялся с Ищенко на Тарасенко, было неясно, как именно это могло произойти. В СМИ просто писали «после обработки 99,03% протоколов лидер сменился».
Однако, располагая промежуточными суммарными данными из информационной панели, с помощью простой математики и программирования можно подробно установить, что именно происходило с протоколами в ночь после выборов. Используем Python, Colab от Google и Z3 theorem prover от Microsoft Research. Ну и добьём всё обычной дедукцией.

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

В первой части публикации я объяснил, как стать «злобным» программистом Go. Зло приходит во многих формах, но в программировании оно заключается в намеренном затруднении понимания и поддержки кода. «Злые» программы игнорируют основные средства языка в пользу техник, которые обеспечивают краткосрочные выгоды, в обмен на долгосрочные проблемы. В качестве краткого напоминания, злые «практики» Go включают в себя:
- Плохо названные и организованные пакеты
- Неправильно организованные интерфейсы
- Передача указателей на переменные в функции для заполнения их значений
- Использование паники вместо ошибок
- Использование init-функций и пустого импорта для настройки зависимостей
- Загрузка файлов конфигурации с использованием init-функций
- Использование фреймворков вместо библиотек
Большой клубок зла
Что будет, если собрать все наши злые практики вместе? У нас получился бы фреймворк, который использовала бы множество файлов конфигурации, заполнял поля структур с помощью указателей, определял интерфейсы для описания публикуемых типов, опирался на «магический» код и паниковала всякий раз, когда возникала проблема.
И я сделал такой. Если вы зайдете на https://github.com/evil-go, вы увидите Fall (падение), — DI фреймворк, дающий возможность внедрять любые «злые» практики, которые только захотите. Я спаял Fall с крошечным веб-фреймворком Outboy, который следует тем же принципам.
Вы можете спросить, насколько они злодейские? Давайте посмотрим. Предлагаю пройтись по простой программе Go (написанной с использованием лучших практик), которая предоставляет http endpoint. А затем перепишем ее, используя Fall и Outboy.
Как выбрать случайное число от 1 до 10
Предположим, что в этой комнате чуть более 8500 студентов.
Самое простое — попросить кого-нибудь: «Эй, выбери случайное число от одного до десяти!». Человек отвечает: «Семь!». Отлично! Теперь у вас есть число. Однако вы начинаете задаваться вопросом, является ли оно равномерно распределённым?
User Inyerface — как не надо мучать пользователя

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

В пятницу 28 июня первые пользователи технологии vOICe vision встретились со слабовидящими людьми, чтобы рассказать о новом способе восприятия пространства, которому они научились благодаря сенсорному замещению.
Трое молодых людей первыми в России овладели навыками Звукового Зрения и смогли вновь видеть мир, оставаясь слепыми. Вадим, Руслан и Ислам – так зовут основателей и первых членов «Клуба Звукового Зрения». У них разные взгляды на жизнь и разные истории. Но то, что их объединяет заметно каждому.
Окружающий мир за них «видит» футуристическое устройство на глазах, отдалённо напоминающее очки виртуальной реальности. Оно фиксирует пространство вокруг с помощью камеры и в буквальном смысле переводит изображение в звуковую дорожку, рисуя окружающую «картинку» уже в воображении ребят.
Технология vOICe vision разработана с одной целью – научить незрячих людей видеть. И участники клуба уверены, что это возможно. В разной степени каждый из них уже научился это делать.
Ломаем игру на память: целый детектив

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

От переводчика:
Представляю вашему вниманию статью авторства Andy Gainey, в прошлом независимого разработчика игровых инструментов, ныне сотрудника Paradox Development Studio. На мой взгляд, автор играючи создал один из лучших процедурных генераторов планет с открытым исходным кодом.
Быстрое умножение целых чисел с использованием таблиц
Трюк настолько мне понравился простотой и изяществом, что уже в этом тысячелетии я с удовольствием рассказывал о нём студентам в виде следующей задачи.
Представьте себе, что в процессе возвращения в 2030 году с Луны вы вдруг обнаружили, что ваш бортовой компьютер неправильно выполняет операции целочисленного умножения, и это непременно приведёт к аварии при посадке.
В таком сюжете нет ничего особо фантастического. Вспомним, например, какие проблемы случались когда-то с процессорами Pentium , а к моменту отправки на Луну вы ещё не достигли полного импортозамещения. И вообще надо проверить, а не были ли процессоры просверлены специально.
Но к делу. Вам надо срочно реализовать умножение программно, чтоб работало быстро в реальном времени и укладывалось в доступный ресурс.
Короткая JS-задачка для понедельника

Которая родилась в процессе изучения кошмаров LexicalEnvironment и вообще ликбеза на тему "Почему оно работает так".
Задача получилась действительно из серии wtfjs, но после внимательного рассмотрения — полностью укладывается в логику работы языка.
Ис[пользу]й
На ее написание меня натолкнуло общение с многоуважаемым модератором одной из площадок, где я публикуюсь. А до нее – почти каждый комментарий, который вы оставляете к моим статьям. А между делом – почти все, что я вижу на работе каждый день. А до текущей работы – предыдущая, а до нее – еще одна, и так до той самой точки, в которой я понял, что есть польза и как ее извлекать.
Первое и главное
От пяти копеек до игры божеств
В прошлой своей статье я затронул тему настольно-ролевых конкурсов, которые, как и всевозможные инди-джемы для разработчиков софта, помогают концептам и наброскам развиться в нечто большее. В этот раз расскажу о истории другого своего конкурсного проекта.

Настольно-ролевые конкурсы мне попадались как наши отечественные (именуемые «Кашеварами»), так и международные (ежегодный Game Chef). На международном, как правило, требовалось придумать какую-то новую мини-систему правил, а на Кашевары подавались не только системы, но и модули-приключения для существующих систем. Ещё международный конкурс пытался задавать некие тренды и экспериментировать — в тот год очередной темой Game Chef стал поиск новых настольно-ролевых форматов: «отсутствие книги правил».
Information
- Rating
- 3,152-nd
- Location
- Новосибирск, Новосибирская обл., Россия
- Date of birth
- Registered
- Activity