Как стать автором
Обновить
36
0
Максим @Moximko

Программист

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

Давайте поговорим. О тлене и депрессии

Время на прочтение10 мин
Количество просмотров38K
«Мужчина приходит к врачу. Жалуется на депрессию, говорит, жизнь груба и жестока, что он чувствует себя одиноким в угрожающем мире. Врач предлагает простой рецепт: «Великий клоун Пальячи сегодня в городе, сходите, это вас подбодрит». Мужчина взрывается слезами. «Но доктор», — говорит он — «Я и есть Пальячи»

Недавно, после статьи про "Гаджеты для сна", где в результате опроса выяснилось что у более 50% опрошенных «все хреново с эмоциями и стрессом», я написал одному хорошему человеку с запросом: «пришли мне, пожалуйста, три самых полезных статьи про депрессию». Он мне ответил: «Я на антидепрессантах, изучаю вопрос изнутри».

Возможно это сезонное аффективное расстройство (SAD), а возможно, это объективно пришел полярный зверек. «Тьма, пришедшая со Средиземного моря, накрыла ненавидимый прокуратором город». В этом году я понял, что и я качусь под откос. Когда перестали радовать «Рик и Морти», «Кремниевая долина», «Доктор Хаус», большой лохматый пёс и три кота.

Но патроны еще есть — я с радостью жду утренний кофе, вечернее рубилово с мужиками в хоккей, плюсики на Хабре и годные комментарии. И «Дюну 2020» очень жду.

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

Вот мои топ-3 статьи:


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

image

(Да простится мне такой «неформат», ибо тема важная)
Читать дальше →
Всего голосов 97: ↑80 и ↓17+63
Комментарии251

Делаем современное веб-приложение с нуля

Время на прочтение31 мин
Количество просмотров146K
Итак, вы решили сделать новый проект. И проект этот — веб-приложение. Сколько времени уйдёт на создание базового прототипа? Насколько это сложно? Что должен уже со старта уметь современный веб-сайт?

В этой статье мы попробуем набросать boilerplate простейшего веб-приложения со следующей архитектурой:


Что мы покроем:

  • настройка dev-окружения в docker-compose.
  • создание бэкенда на Flask.
  • создание фронтенда на Express.
  • сборка JS с помощью Webpack.
  • React, Redux и server side rendering.
  • очереди задач с RQ.
Читать дальше →
Всего голосов 64: ↑56 и ↓8+48
Комментарии125

Рисуем мультяшный взрыв за 180 строчек голого C++

Время на прочтение6 мин
Количество просмотров69K
Неделю назад я опубликовал очередную главу из моего курса лекций по компьютерной графике; сегодня опять возвращаемся к трассировке лучей, но на сей раз пойдём самую чуточку дальше отрисовки тривиальных сфер. Фотореалистичность мне не нужна, для мультяшных целей подобный взрыв, как мне кажется, сойдёт.

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

Итого, как в таких условиях нарисовать вот такую картинку за 180 строчек кода?


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

256 строчек голого C++: пишем трассировщик лучей с нуля за несколько часов

Время на прочтение8 мин
Количество просмотров142K
Публикую очередную главу из моего курса лекций по компьютерной графике (вот тут можно читать оригинал на русском, хотя английская версия новее). На сей раз тема разговора — отрисовка сцен при помощи трассировки лучей. Как обычно, я стараюсь избегать сторонних библиотек, так как это заставляет студентов заглянуть под капот.

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

Внимание: просто рассматривать мой код, равно как и просто читать эту статью с чашкой чая в руке, смысла не имеет. Эта статья рассчитана на то, что вы возьмётесь за клавиатуру и напишете ваш собственный движок. Он наверняка будет лучше моего. Ну или просто смените язык программирования!

Итак, сегодня я покажу, как отрисовывать подобные картинки:


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

Кибердемоны: искусственный интеллект DOOM 2016

Время на прочтение12 мин
Количество просмотров33K
Шутеры от первого лица за долгие годы эволюционировали и стали очень интересной средой для неигровых персонажей: солдаты прячутся за укрытиями, чужие преследуют игрока, а напарники помогают ему в пылу боя. Всё это вписывается в концепцию дизайна современных шутеров: удерживания территории, создания рубежей обороны и сдерживания игрока. В этой статье я на примере перезапуска франшизы DOOM 2016 года расскажу о том, что происходит, когда разработчики отказываются использовать в игре стандартный кодекс поведения.


DOOM построен на философии, известной как "push forward combat" («агрессивный бой»), влияющей на нарратив, дизайн уровней, перемещения игрока и многое другое. Если вкратце, то он является критическим взглядом и реакцией на современные шутеры. В то время как Call of Duty заставляет игрока ползать за укрытиями и снимать врагов издалека, DOOM нарушает эти правила, создавая мощный, быстрый, «спинномозговой» геймплей. Но как это всё устроено, и что предпринимает ИИ, чтобы сделать игровой процесс живым?
Всего голосов 57: ↑57 и ↓0+57
Комментарии37

Создание «искусственной жизни» на компьютере

Время на прочтение10 мин
Количество просмотров109K
Всем привет. В статье хочу описать свой эксперимент по созданию «искусственной жизни» на компьютере.

Как это выглядит?

картинка кликабельна

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

Ну а дальше за работу принимается эволюция и естественный отбор.

А мне остаётся только наблюдать за развитием мира.

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

Поведением ботов управляет код, записанный в них.

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

Внутреннее устройство кода — это самое интересное в проекте.

Код должен быть простым и выдерживать различные модификации (случайное изменение любого элемента в коде) над собой без синтаксических ошибок.
Читать дальше →
Всего голосов 214: ↑210 и ↓4+206
Комментарии393

Бот для Starcraft на Rust, C и на любом другом языке

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

StarCraft: Brood War. Как много это значит для меня. И для многих из вас. Настолько много, что я засомневался, давать ли ссылку на вики.


Как-то раз мне в личку постучался Halt и предложил выучить Rust. Как и любые нормальные люди, мы решили начать с hello world написания динамической библиотеки под Windows, которая могла бы загружаться в адресное пространство игры StarCraft и управлять юнитами.


В статье будет описан процесс поиска решений, использования технологий, приемов, которые позволят вам почерпнуть новое в языке Rust и его экосистеме или вдохновиться для реализации бота на своем любимом языке, будь то C, C++, ruby, python, e.t.c.

Ready to roll out!
Всего голосов 87: ↑86 и ↓1+85
Комментарии22

Моё участие в разработке Uncharted 4

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

После выпуска Uncharted 4 я уже могу рассказать о том, над чем работал в этом проекте. В основном я разрабатывал ИИ для напарников игрока в однопользовательском режиме и помощников в многопользовательском, а также немного работал над геймплейной логикой. Я опущу те аспекты, которые не добрались до готовой игры и некоторые мелкие детали.

Итак, приступаем:

Система постов


Прежде чем начать, я хотел бы рассказать о использованной у NPC системе постов. Я не работал над ядром логики этой системы, а помогал писать клиентский код, который её использовал.

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

Всего голосов 55: ↑52 и ↓3+49
Комментарии34

Практика метапрограммирования на C++: бинарное дерево поиска на этапе компиляции

Время на прочтение27 мин
Количество просмотров52K
Создатели шаблонов в C++ заложили основу целого направления для исследований и разработки: оказалось, что язык шаблонов C++ обладает полнотой по Тьюрингу, то есть метапрограммы (программы, предназначенные для работы на этапе компиляции) C++ в состоянии вычислить всё вычислимое. На практике мощь шаблонов чаще всего применяется при описании обобщенных структур данных и алгоритмов: STL (Standard Template Library) тому живой пример.

Однако, с приходом C++11 с его variadic-шаблонами, библиотекой type_traits, кортежами и constexpr'ами метапрограммирование стало более удобным и наглядным, открыв дорогу к реализации многих идей, которые раньше можно было воплотить только с помощью расширений конкретного компилятора или сложных многоэтажных макросов.

В данной статье будет разработана реализация бинарного дерева поиска времени компиляции: структуры данных, являющейся логическим «расширением» кортежа. Мы воплотим бинарное дерево в виде шаблона и попрактикуемся в метапрограммировании: переносе рекурсивных и не только алгоритмов на язык шаблонов C++.
Читать дальше →
Всего голосов 47: ↑46 и ↓1+45
Комментарии63

Самая сложная программа

Время на прочтение5 мин
Количество просмотров126K
От переводчика: я нашел на Quora вопрос: Какую программу или код можно назвать самыми сложными из когда-либо написанных? Ответ одного из учасников был настолько хорош, что вполне тянет на статью.

Пристегни ремни.

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

Это программа – компьютерный червь. Червь был написан, судя по всему, между 2005 и 2010 годами. Поскольку этот червь является таким сложным, я могу дать лишь общее описание того, что он делает.
Читать дальше →
Всего голосов 174: ↑158 и ↓16+142
Комментарии272

Как стать GPU-инженером за час

Время на прочтение20 мин
Количество просмотров25K
Нужно ли iOS-разработчику, не занимающемуся играми, уметь работать с GPU? Нужно ли ему вообще знать о том, что в айфоне есть GPU? Многие успешно работают в iOS-разработке, никогда не задумываясь об этой теме. Но GPU может быть полезен как для 3D-графики, так и для других задач, в ряде случаев оставляя CPU позади.

Когда на конференции Mobius 2017 Moscow Андрей Володин (Prisma AI) рассказал об использовании GPU в iOS, его доклад стал одним из фаворитов конференции, получив высокие оценки зрителей. А теперь на основе этого доклада мы подготовили хабрапост, позволяющий получить всю ту же информацию текстом. Интересно будет даже тем, кто не работает с iOS: доклад начинается с вещей, не привязанных конкретно к этой платформе.
Осторожно, трафик: под катом очень много изображений со слайдов.

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

9 лучших книг про IT и программирование, которые вы могли пропустить

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

Помните, Льюис Кэрролл писал: «Здесь приходится бежать со всех ног, чтобы только остаться на том же месте, а чтобы попасть в другое место, нужно бежать вдвое быстрее»? Это фраза прекрасно подходит для IT-мира: технологии быстро развиваются, и каждый день нужно осваивать что-то новое, чтобы оставаться востребованным специалистом. У каждого программиста наверняка есть 5-6 бумажных книг, ставших классикой. О некоторых таких книгах мы уже писали. Но чтобы оставаться востребованным кодером, надо постоянно обновлять библиотеку. В прошлом году портал DevMountain сделал подборку из семи не слишком популярных книг для начинающих программистов. Учитывалась не только оценка портала, но и отзывы на Amazon, а также рекомендации популярных блогов. Автор GeekBrains Илья Бубнов внимательно изучил этот список, а также дополнил подборку парой свежайших экземпляров.
Читать дальше →
Всего голосов 30: ↑26 и ↓4+22
Комментарии3

Linux в одном файле для Macbook

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


TL;DR Можно уместить полноценный Linux Live дистрибутив в один файл, если вкомпилировать в ядро initramfs с корневой файловой системой. Компьютеры с UEFI умеют загружать такой файл напрямую, без помощи загрузчика типа GRUB. У меня получилось уместить дистрибутив с программами aircrack-ng, reaver и драйверами для карт Wi-Fi в файл размером 12 мегабайт (наверняка можно еще меньше).

Основные преимущества


  • Работает на любых компьютерах с UEFI — один и тот же файл будет работать на PC и Mac.
  • Не требует установки — достаточно скопировать один файл на EFI-раздел диска и указать в переменных NVRAM путь к этому файлу.
  • Не нужно устанавливать загрузчики GRUB, rEFInd — ядро Linux собранное с поддержкой EFI Stub можно грузить напрямую без промежуточного загрузчика.
  • Не нужны USB-флешки — скопированный на раздел EFI дистрибутив остается там навсегда, и его можно будет загрузить в любой момент. Он не занимает места на разделе основной системы, так как раздел EFI не используется в ОС.
  • Не изменяет процесс загрузки — систему можно загрузить один раз, без изменения порядка загрузки в настройках UEFI. Следующая перезагрузка компьютера загрузит обычную операционную систему. Никаких следов Linux в очередности загрузки не останется.
  • Совместимо с шифрованием диска FileVault и т.д. — файл копируется на EFI System Partition, специальный зарезервированный раздел диска. В компьютерах Mac его размер около 200 мегабайт. Он выделен под Boot Camp и обычно не используется
Читать дальше →
Всего голосов 78: ↑77 и ↓1+76
Комментарии48

Рефлексия в C++14

Время на прочтение15 мин
Количество просмотров31K
Данная статья является расшифровкой (с небольшими правками) доклада Антона antoshkka Полухина — “Немного магии для C++14”.

Я тут недавно ковырялся с C++ и случайно открыл пару новых приемов метапрограммирования, которые позволяют делать рефлексию в C++14. Пара мотивационных примеров. Вот у вас есть какая-то POD структура, в ней какие-то поля:

struct complicated_struct {
    int i;
    short s;
    double d;
    unsigned u;
};

Количество полей и их имена не имеют значение, важно то, что с этой структуры мы можем написать следующий кусочек кода:

#include <iostream>
#include "magic_get.hpp"

struct complicated_struct { /* … */ };

int main() {
    using namespace pod_ops;
    complicated_struct s {1, 2, 3.0, 4};
    std::cout << "s == " << s << std::endl; // Compile time error?
}

Функция main, в ней создаем переменную нашей структуры, как-то ее инициализируем через aggregate инициализацию, а потом эту переменную пытаемся вывести в std::cout. И в этот момент у нас, по идее, должна быть ошибка компиляции: мы не определили оператор вывода в поток для нашей структуры, компилятор не знает как все это скомпилировать и вывести. Однако, оно скомпилируется и выведет содержимое структуры:

antoshkka@home:~$ ./test
s == {1, 2, 3.0, 4}

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

Шпаргалка по шаблонам проектирования

Время на прочтение2 мин
Количество просмотров1.4M

Перевод pdf файла с сайта http://www.mcdonaldland.info/ с описанием 23-х шаблонов проектирования GOF. Каждый пункт содержит [очень] короткое описание паттерна и UML-диаграмму. Сама шпаргалка доступна в pdf, в виде двух png файлов (как в оригинале), и в виде 23-х отдельных частей изображений. Для самых нетерпеливых — все файлы в конце статьи.

Под катом — много картинок.

Читать дальше →
Всего голосов 192: ↑179 и ↓13+166
Комментарии66

Linux: перенаправление

Время на прочтение5 мин
Количество просмотров75K
Если вы уже освоились с основами терминала, возможно, вы уже готовы к тому, чтобы комбинировать изученные команды. Иногда выполнения команд оболочки по одной вполне достаточно для решения некоей задачи, но в некоторых случаях вводить команду за командой слишком утомительно и нерационально. В подобной ситуации нам пригодятся некоторые особые символы, вроде угловых скобок.



Для оболочки, интерпретатора команд Linux, эти дополнительные символы — не пустая трата места на экране. Они — мощные команды, которые могут связывать воедино различные фрагменты информации, разделять то, что было до этого цельным, и делать ещё много всего. Одна из самых простых, и, в то же время, мощных и широко используемых возможностей оболочки — это перенаправление стандартных потоков ввода/вывода.
Читать дальше →
Всего голосов 48: ↑40 и ↓8+32
Комментарии26

10 приёмов работы в терминале Linux, о которых мало кто знает

Время на прочтение3 мин
Количество просмотров167K
Близкое знакомство с возможностями терминала — один из признаков человека, который хорошо разбирается в Linux. Хотя некоторые вещи запомнить сложно, есть довольно-таки простые, но эффективные приёмы, которые способны повысить качество и скорость работы в терминале. Пожалуй, каждый пользователь Linux рано или поздно обзаводится собственным списком ценных мелочей. Надеемся, некоторых из тех десяти приёмов работы в командной строке Linux, которыми мы хотим с вами поделиться, попадут в ваш личный список полезных команд.

Читать дальше →
Всего голосов 120: ↑95 и ↓25+70
Комментарии108

«Паровозик, который смог!» или «Специализация Машинное обучение и анализ данных», глазами новичка в Data Science

Время на прочтение14 мин
Количество просмотров52K
Ранее в моей прошлой статье, посвящённой обучению Data Science с нуля, я обещал записаться на специализацию «Машинное обучение и анализ данных», на Coursera и поделиться моими впечатлениями о доступности этих знаний для практически абсолютного новичка в области науки о данных. Сказано – сделано! Хотя безусловно, на Хабре уже есть упоминания об этой и аналогичных специализациях, но думаю мои «пять копеек» не помешают.

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


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

Истинная реализация нейросети с нуля на языке программирования C#

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

image


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


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

Читать дальше →
Всего голосов 36: ↑28 и ↓8+20
Комментарии28

Перевод App Store Review Guidelines

Время на прочтение1 мин
Количество просмотров13K
Не так давно Apple обновила руководство по публикации приложений в App Store (App Store Review Guidelines). В документ были добавлены пункты, описывающие правила работы с Extensions, HomeKit, HealthKit, TestFlight и Apple Pay (с 25 по 29).

Ранее на Хабре уже публиковался полный перевод этого руководства (низкий поклон автору), но было это аж в 2010 году. С тех пор многие правила были исправлены или удалены.
Читать дальше →
Всего голосов 21: ↑18 и ↓3+15
Комментарии5
1

Информация

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