Как стать автором
Обновить
191
73.1
Алексей Гришин @GRaAL

Разработчик широкого профиля

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

Вороной, Манхэттен, рандом

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

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

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

Осторожно, очень много картинок!

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

Пишем трассировщик лучей для ZX Spectrum

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

Я люблю трассировщики лучей и даже посвятил им половину своей книги. Менее известна моя любовь к ZX Spectrum — домашнему компьютеру 1982 года, с которым я вырос и с которого начался мой интерес к графике и программированию. По современным стандартам эта машина столь смехотворно слаба (и даже по стандартам 1980-х), поэтому возникает неизбежный вопрос: в какой степени удастся портировать трассировщик лучей из книги Computer Graphics from Scratch на ZX Spectrum?

В ZX Spectrum установлен процессор Z80 на 3,5 МГц (в тысячу раз медленнее, чем современные компьютеры), который не может умножать числа (!!!), и 48 КБ ОЗУ (в миллион раз меньше); он имеет графический режим 256x176 (примерно в двести раз меньше современного разрешения), способный отображать 15 цветов (в миллион раз меньше, к тому же с довольно необычными особенностями). Интересная машина для графического приложения, активно задействующего CPU!

Я планирую реализовать его на Sinclair BASIC — встроенном языке программирования Spectrum. Это не просто BASIC, а древний, очень ограниченный диалект BASIC. Например, единственные структуры управления в нём — это FOR и IF (а у IF нет ELSE и даже ENDIF); все переменные глобальны; не существует вызовов функций, только GO TO и GO SUB; и так далее. Кроме того, он интерпретируемый, то есть сверхмедленный. Но, по крайней мере, он реализует программное умножение! Если мне нужна будет производительность, то я всегда могу переписать трассировщик на ассемблере.

Я настроил минимально необходимую среду: код на BASIC я пишу в VS Code, компилирую его с помощью BAS2TAP и запускаю в эмуляторе FUSE. Благодаря этому скорость итераций оказалась достаточно высокой.

Читать далее
Всего голосов 142: ↑141 и ↓1 +140
Комментарии 85

Уменьшение размера файла с игрой в Godot 4

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

При экспорте своей первой простой аркадной игры в Godot 4.1 я столкнулся с проблемой. Не смотря на простоту проекта и присутствие лишь небольшого количества содержимого: несколько спрайтов и небольшого разрешения фонов, игра весила 67 мб. Я полез гуглить, в чем проблема и как можно ужать итоговый exe файл.

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

Road Run, или как я свою первую игру делал. Часть 3

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

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

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

Пишем key-value storage на пакетах ping'а или храним данные между облаками

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

Как-то давно я просматривал опции для команды ping и обратил внимание, что можно задавать размер ICMP пакета. "Хм", — подумал я: "Можно же сложить в сам пакет какую-то полезную нагрузку". Эта идея время от времени всплывала у меня в голове, но что именно можно хранить в пакете ICMP придумать не удавалось. Однако, недавно пришло понимание, что если хранить данные в ICMP пакете, то они не будут занимать место в оперативной памяти! То есть можно сделать key-value хранилище, где все данные будут храниться внутри сети.

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

Запускаем Doom внутри PostgreSQL

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

В статье разберём основные этапы создания расширения для PostgreSQL на языке C и как запустить внутри СУБД игру Doom.

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

Язык Umka 1.0 и игровой фреймворк Tophat

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

После трёх лет неторопливой разработки вышла версия 1.0 моего скриптового языка Umka. Это статически типизированный язык, предназначенный для встраивания в программы на C/C++. Синтаксис и некоторые особенности семантики Umka были вдохновлены языком Go, однако Umka никак не зависит от экосистемы Go и не требует для работы ничего, кроме стандартной библиотеки C.

Основным применением языка стал игровой фреймворк Tophat, созданный Марком Машкаринцем. Версия Tophat 1.0 вышла одновременно с Umka. Это очень простой модульный фреймворк для создания 2D игр. Несколько мини-игр на нём были написаны для участия в джемах. Сейчас в разработке находятся два более крупных игровых проекта — платформер-головоломка и игра о диспетчеризации железнодорожного движения.

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

Как Федор выписывался из военкомата после эмиграции: полный гайд по снятию с воинского учета удаленно

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

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

Читать далее
Всего голосов 150: ↑132 и ↓18 +114
Комментарии 280

Любовь, смерть и разработка игр

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

Я открываю чат команды и пишу "как же вы меня достали"

Кажется, ранее я отправил какое-то предложение по игре, а они разнесли его в пух и прах.

Я злюсь. Потому что мне важно мнение этих людей.

Как это назвать правильно? Когда вы ночевали вместе в одном офисе, когда не спали ночами, и создавали что-то из ничего?

git pull — это волшебное заклинание, означающее "покажи мне ещё больше красоты, сделанной ими". git push — это волшебное заклинание, означающее "зацените красоту, которую сделал я".

— "Эй, у нас проект теперь не билдится" — "Зато красиво!" — "Это да"

Я открываю чат команды и пишу
Всего голосов 17: ↑12 и ↓5 +7
Комментарии 6

Сказка о типизации

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

В некотором царстве, в некотором государстве жил был царь. Как-то раз объявил царь всему народу - "Кто решит три моих задачки, тот сам сможет царём стать". И даже контракт метода опубликовал, всё честь по чести.

Это только присказка, сказка будет впереди
Всего голосов 60: ↑57 и ↓3 +54
Комментарии 21

Краткое руководство по работе с данными с помощью Miller

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


Привет, друзья!


Представляю вашему вниманию перевод этой замечательной статьи, в которой рассказывается о Miller — автономном, легковесном и мощном интерфейсе командной строки (Command Line Interface, CLI) для работы с данными в форматах CSV, JSON и некоторых других.


Интересно? Тогда прошу под кат.

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

Сезон Java всё: итоги и самые полезные статьи

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

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

Или нет: я (@apoltavcev) попросил участников сезона Java выбрать лучшие статьи. Под катом вас ждут краткие итоги конкурса и посты, которые настоятельно рекомендуются к прочтению.

А если вы пишете не про Java, а на Java — посмотрите вакансии Сбера. Они проспонсировали нашу Java-вечеринку, за что им большое спасибо.

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

Как я реализовывал switch exhaustiveness checker для Java 8

Время на прочтение 8 мин
Количество просмотров 3.5K
В последние время многие промышленные языки вроде C#, Kotlin и Java стали реализовывать switch exhaustiveness проверки для разных языковых элементов: sealed classes, records и enums. Я могу предположить, что это связано с популяризацией Data Oriented Programming. К сожалению, я пока привязан к Java 11, где эта функциональность компилятором не реализована. Поэтому, я решил сделать что-нибудь, что будет проверять switch exhaustiveness для Enums и будет работать на Java 8 и выше.

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

It is Wednesday, my java dudes, или насколько сложно сделать свою JVM

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

Что делать, если накануне переезда повысилась тревожность, а привычные методы не приносят успокоения?

Конечно же вырабатывать дофамин через решение упоротых инженерных задач!

Мне стало интересно - насколько тяжко было бы сделать свой интерпретатор байт-кода Java? И насколько сложно было бы научить его “новым трюкам”?

Писать я буду на Rust, поэтому и проект, не мудрствуя лукаво, назвал Rjava.

Читать далее
Всего голосов 67: ↑66 и ↓1 +65
Комментарии 26

Выбираем лучший текстовый редактор для поиска логов

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

Логов становится все больше и больше, а времени на их анализ и поиск всё меньше. Мне стало интересно, а есть ли разница в скорости и производительности популярных программ при работе с большими объемами текста. Оказывается есть! Будем сравнивать Notepad, Notepad++, TextPad и Atom в скорости поиска текста в лог-файлах.

Читать далее
Всего голосов 17: ↑11 и ↓6 +5
Комментарии 82

9 упражнений для тех, кто весь день за компом

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

Эта статья посвящается всем разработчикам, тестировщикам, маркетологам и проджект-менеджерам, которые по 8 часов в день сидят за компьютером без движения. Наша работа — это монитор, мышка, клавиатура и не всегда удобное кресло. Здоровье от такой жизни страдает, зрение падает, а спина болит. С этим явно нужно что-то делать. Обычно в этом блоге мы рассказываем о разработке — но в этот раз сделаем исключение. Поговорим о том, как сохранить здоровье.

Читать далее
Всего голосов 71: ↑67 и ↓4 +63
Комментарии 27

Пишем на Rust расширение для SQLite, чтобы научить его работать с файлами Excel

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

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

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

Исходный код на GitHub

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

Моделирование базы данных в Neo4j

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

Моделирование базы данных в графовых БД существенно отличается от реляционных. В этой статье я расскажу о best practices, тонкостях и нюансах моделирования данных в Neo4j.

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

Обработка исключений в Java в функциональном стиле

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

В данной статье автор предоставит информацию о собственной библиотеке для обработки исключений (Exception) в функциональном стиле.

Предпосылки

В Java начиная с версии 8 появились новые возможности в виде функциональных интерфейсов и потоков (Stream API). Эти возможности позволяют писать код в новом функциональном стиле без явных циклов, временных переменных, условий ветвления и проч. Я уверен что этот стиль программирования станет со временем основным для большинства Java программистов.

Читать далее
Всего голосов 40: ↑37 и ↓3 +34
Комментарии 32

Мой опыт использования LiteDB

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

Недавно я искал систему хранения для моей программы. Она представляет собой desktop-приложение, которому нужно хранить множество объектов и осуществлять поиск текста в них. И я подумал: "Почему бы не попробовать что-то новое". Вместо SQL базы данных типа SqLite я мог бы использовать документную базу данных. Но мне хотелось бы, чтобы для неё не требовался отдельный сервер, чтобы она работала с простым файлом. Поиск в Интернет подобных систем для .NET приложений быстро вывел меня на LiteDB. Здесь я хочу поделиться тем, что я нашёл в процессе работы с этой базой данных.

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

Информация

В рейтинге
61-й
Откуда
Алматы (Алма-Ата), Алма-Атинская обл., Казахстан
Зарегистрирован
Активность

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

Backend Developer, Software Architect
Lead
От 5 000 $