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

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

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

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

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

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

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

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

Читать далее
Всего голосов 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 мин
Количество просмотров4.1K

При экспорте своей первой простой аркадной игры в 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 мин
Количество просмотров20K

В статье разберём основные этапы создания расширения для 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 мин
Количество просмотров123K

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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


Представляю вашему вниманию перевод этой замечательной статьи, в которой рассказывается о 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 мин
Количество просмотров71K

Эта статья посвящается всем разработчикам, тестировщикам, маркетологам и проджект-менеджерам, которые по 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.6K

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

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

Информация

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

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

Backend Developer, Software Architect
Lead
От 5 000 $