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

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

Send message

История одной очереди

Level of difficultyEasy
Reading time8 min
Views22K

В одно воскресенье довелось мне стоять в очереди на избирательный участок №8134 в Алматы. Простоял я там 4 часа, а некоторые и того больше. И как-то совершенно случайно вспомнил, что в институте я учился на специальности “системы и сети массового обслуживания”, а тут у нас как раз такая сеть, которую можно попробовать рассчитать. А заодно ответить расчётами на некоторые вопросы.

Уважаемые кроты, давайте посчитаем
Total votes 112: ↑97 and ↓15+82
Comments70

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

Level of difficultyEasy
Reading time4 min
Views2.8K

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

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

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

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

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

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

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

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

Level of difficultyMedium
Reading time7 min
Views7.8K

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

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

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

Reading time11 min
Views11K

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

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

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

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

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

Прокачиваем kotlin: используем AST лямбд в рантайме

Reading time18 min
Views3.3K

История о том, как сделать свой LINQ для kotlin, и как сделать так, чтобы кода вида

data.filter { it.age > 30}.map { it.name }.toList()

мог и выполняться для данных в памяти, и превращаться в SQL запрос для базы данных.

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

Как хранить данные в png, не привлекая внимания санитаров

Reading time13 min
Views70K

Всё началось с мема, который вы видите выше.

Сначала я посмеялся. А потом задумался: может ли быть так, что скриншот базы равноценен её снэпшоту?

Для этого у нас должно быть такое графическое представление базы, которое 1 к 1 отображает данные и структуру. Если сделать скриншот такого представления, из него можно восстановить базу.

Или... графическое представление и должно быть базой!

Это как?
Total votes 255: ↑254 and ↓1+253
Comments88

Internet of Things: четыре рассказа около технологий

Reading time39 min
Views5.8K


Иллюстрация Анатолия Сазанова

Решил поделиться с вами четырьмя рассказами с «интригующими» названиями:

  • Augmented Reality
  • Умный дом
  • A.I.
  • Блокчейн

Объединяет их (как вы уже заметили) упоминание разных модных IT-слов. Их и так все пихают куда ни попадя, так почему и мне нельзя?

Немного нетвердой (и не всегда научной) и безрадостной фантастики под катом.
Читать дальше →
Total votes 18: ↑15 and ↓3+12
Comments19

Очередное незавоевание теней в Phaser, или польза велосипедов

Reading time9 min
Views3.9K
Два года назад я уже экспериментировал с веществами тенями в Phaser 2D. На последнем Ludum Dare мы внезапно решили сделать хоррор, а какой же хоррор без теней и света! Хрустнул я костяшками пальцев…

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

Вернувшись домой уже после отправки игры на конкурс, я решил все-таки “закрыть гештальт” и доделать эти несчастные тени. Что получилось — можно пощупать в игре, поиграться в демке, посмотреть на картинке, и почитать в статье.

Читать дальше →
Total votes 12: ↑12 and ↓0+12
Comments7

Трагикомедия в NaN актах: как мы cделали игру на JS и выпустили ее в Steam

Reading time13 min
Views28K
“Эка невидаль”, — скажете вы, — “В топ-100 вашей игры нет, так что нещитово”. Тоже правда. Зато за год разработки Protolife мы поднакопили какой-никакой опыт, которым можем поделиться с потенциальными будущими игроделами. Ветераны индустрии, боюсь, ничего интересного для себя не найдут. Но, может быть, хоть повеселитесь от души.


Что за игра-то? И кто “мы”?


Мы — это команда из трех человек (GRaAL, A333, icxon), волею судеб названная Volcanic Giraffe без какого либо умысла. Работали долгое время вместе, несколько раз втроем участвовали в Ludum Dare (соревнования по написанию игр за выходные), и однажды решившие довести до релиза одну из наших поделок под названием Protolife.

Если коротко: это необычная tower defense, где надо бегать героем-курсором и выстраивать оборону из блоков против постоянно растущей красной биомассы.
Остальное под катом - осторожно, тяжелые пиксельартные картинки
Total votes 95: ↑91 and ↓4+87
Comments51

Как я попробовал сделать статический анализатор GLSL (и что пошло не так)

Reading time10 min
Views6.3K

Однажды я готовился к Ludum Dare и сделал простую игру, где использовал пиксельные шейдеры (других в движок Phaser не завезли).


Что такое шейдеры?

Шейдеры — это программы на си-подобном языке GLSL, которые выполняются на видеокарте. Есть два вида шейдеров, в этой статье речь идет про пиксельные (они же “фрагментные”, fragment shaders), которые очень грубо можно представить в таком виде:


color = pixelShader(x, y, ...other attributes)

Т.е. шейдер выполняется для каждого пикселя выводимого изображения, определяя или уточняя его цвет.
Вводную можно почитать на другой статье на хабре — https://habr.com/post/333002/


Потестировав, кинул ссылку другу, и получил от него вот такой скриншот с вопросом "а это нормально?"



Нет, это было ненормально. Посмотрев внимательно код шейдера, я обнаружил ошибку в вычислениях:


if (t < M) {
    realColor = mix(color1,color2, pow(1. - t / R1, 0.5));
}

Т.к. константа R1 была меньше чем M, то в некоторых случаях в первом аргументе pow получалось число меньше нуля. Квадратный корень из отрицательного числа — штука загадочная, по крайней мере для стандарта GLSL. Мою видеокарту ничего не смутило, и она как-то выпуталась из этого положения (похоже, вернув из pow 0), а вот у друга она оказалась более разборчивой.


И тут я задумался: а могу ли я избежать таких проблем в будущем? От ошибок никто не застрахован, особенно таких, которые не воспроизводятся локально. Юнит-тесты на GLSL не напишешь. В то же время преобразования внутри шейдера довольно простые — умножения, деления, синусы, косинусы… Неужели нельзя отследить значения каждой переменной и убедиться, что ни при каких условиях не происходит выхода за допустимые границы значений?


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


Сразу предупрежу: какого-то законченного продукта получить не удалось, только учебный прототип.

Читать дальше →
Total votes 41: ↑41 and ↓0+41
Comments20

«Худой мир». Финал

Reading time23 min
Views11K
Финал фантастической повести. Спасибо всем, кто ждал и поддерживал!

Марина и Лиза достигли заповедного озера. К нему же стягиваются другие участники событий — люди, и не только.



Много фантастики под катом
Total votes 33: ↑30 and ↓3+27
Comments45

«Худой мир». Глава 10

Reading time13 min
Views6K
Продолжение фантастической повести. Предпоследняя глава перед большим финалом.



Немного фантастики под катом
Total votes 23: ↑18 and ↓5+13
Comments18

«Худой мир». Глава 9

Reading time13 min
Views7.9K
Продолжение фантастической повести. Осталось совсем немного — еще два поста, и история будет завершена.

Марина получает неожиданное предложение…



Немного фантастики под катом
Total votes 22: ↑15 and ↓7+8
Comments6

«Худой мир». Глава 8

Reading time17 min
Views7.2K
Продолжение фантастической повести. Для тех, кто забыл (или не знал), что там было раньше — ссылки на предыдущие части ниже.


Немного фантастики под катом
Total votes 22: ↑17 and ↓5+12
Comments11

«Худой мир». Глава 7

Reading time13 min
Views8.7K
Продолжение фантастической повести. И все, простоев больше не будет. Мы выходим на финишную прямую.



Немного фантастики под катом
Total votes 17: ↑13 and ↓4+9
Comments8

Тень на плетень, или 25 елок для Адама Дженсена

Reading time10 min
Views10K
Рассказ о том, как я попробовал построить красивые трехмерные тени не выходя за рамки уютного двухмерного гейм-девелопмента, и что из этого получилось.


Читать дальше →
Total votes 35: ↑34 and ↓1+33
Comments29

«Худой мир». Глава 6

Reading time13 min
Views12K
Продолжение фантастической повести. Для тех, кто забыл (или не знал), что там было раньше — ссылки на предыдущие части ниже.


Немного фантастики под катом
Total votes 12: ↑10 and ↓2+8
Comments8

«Худой мир». Глава 5

Reading time12 min
Views17K
Продолжение фантастической повести. Для тех, кто забыл (или не знал), что там было раньше — ссылки на предыдущие части ниже.
Предыдущие части


Немного фантастики под катом
Total votes 25: ↑21 and ↓4+17
Comments20

«Худой мир». Глава 4

Reading time10 min
Views13K
Немного запоздалое продолжение фантастической повести. Для тех кто забыл (или не знал) что там было раньше — ссылки на предыдущие части ниже.
Предыдущие части


Немного фантастики под катом
Total votes 12: ↑12 and ↓0+12
Comments14
1

Information

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

Specialization

Backend Developer, Software Architect
Lead
From 5,000 $