Pull to refresh
180
2.5
Алексей Гришин @GRaAL

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

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

Level of difficulty Easy
Reading time 34 min
Views 11K

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

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

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

Читать далее
Total votes 138: ↑138 and ↓0 +138
Comments 52

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

Level of difficulty Easy
Reading time 16 min
Views 19K

Я люблю трассировщики лучей и даже посвятил им половину своей книги. Менее известна моя любовь к 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. Благодаря этому скорость итераций оказалась достаточно высокой.

Читать далее
Total votes 142: ↑141 and ↓1 +140
Comments 85

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

Level of difficulty Easy
Reading time 4 min
Views 3.7K

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

Читать далее
Total votes 9: ↑8 and ↓1 +7
Comments 10

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

Level of difficulty Easy
Reading time 7 min
Views 3.2K

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

Читать далее
Total votes 8: ↑8 and ↓0 +8
Comments 2

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

Level of difficulty Medium
Reading time 5 min
Views 3.1K

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

Читать дальше →
Total votes 15: ↑14 and ↓1 +13
Comments 10

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

Reading time 4 min
Views 6.3K

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

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

Читать далее
Total votes 24: ↑22 and ↓2 +20
Comments 8

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

Level of difficulty Easy
Reading time 13 min
Views 121K

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

Читать далее
Total votes 150: ↑132 and ↓18 +114
Comments 280

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

Level of difficulty Easy
Reading time 4 min
Views 2.7K

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

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

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

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

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

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

Я открываю чат команды и пишу
Total votes 17: ↑12 and ↓5 +7
Comments 6

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

Level of difficulty Medium
Reading time 7 min
Views 7.7K

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

Это только присказка, сказка будет впереди
Total votes 60: ↑57 and ↓3 +54
Comments 21

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

Reading time 3 min
Views 3.1K


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


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


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

Читать дальше →
Total votes 25: ↑25 and ↓0 +25
Comments 7

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

Reading time 6 min
Views 26K

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

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

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

Читать далее
Total votes 38: ↑38 and ↓0 +38
Comments 0

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

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

Читать дальше →
Total votes 14: ↑12 and ↓2 +10
Comments 16

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

Reading time 11 min
Views 11K

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

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

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

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

Читать далее
Total votes 67: ↑66 and ↓1 +65
Comments 26

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

Reading time 4 min
Views 13K

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

Читать далее
Total votes 17: ↑11 and ↓6 +5
Comments 82

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

Reading time 4 min
Views 66K

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

Читать далее
Total votes 71: ↑67 and ↓4 +63
Comments 27

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

Reading time 11 min
Views 6.7K

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

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

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

Читать далее
Total votes 23: ↑23 and ↓0 +23
Comments 0

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

Reading time 4 min
Views 5K

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

Читать далее
Total votes 11: ↑10 and ↓1 +9
Comments 5

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

Reading time 4 min
Views 25K

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

Предпосылки

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

Читать далее
Total votes 40: ↑37 and ↓3 +34
Comments 31

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

Reading time 8 min
Views 9.3K

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

Читать далее
Total votes 9: ↑8 and ↓1 +7
Comments 23

Information

Rating
870-th
Location
Алматы (Алма-Ата), Алма-Атинская обл., Казахстан
Registered
Activity

Specialization

Backend Developer, Software Architect
Lead
From 5,000 $