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

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

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

Время на прочтение 11 мин
Количество просмотров 10K
Ненормальное программирование *Java *Rust *
☕️ Cезон Java
✏️ Технотекст 2022

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

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

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

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

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

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

Время на прочтение 18 мин
Количество просмотров 2.7K
Ненормальное программирование *Java *Компиляторы *Kotlin *

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

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

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

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

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

Время на прочтение 13 мин
Количество просмотров 67K
Ненормальное программирование *Rust *WebAssembly *

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

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

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

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

Это как?
Всего голосов 255: ↑254 и ↓1 +253
Комментарии 88

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

Время на прочтение 39 мин
Количество просмотров 5.6K
Читальный зал Киберпанк Научная фантастика


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

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

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

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

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

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

Время на прочтение 9 мин
Количество просмотров 3.7K
Ненормальное программирование *JavaScript *Разработка игр *WebGL *
Два года назад я уже экспериментировал с веществами тенями в Phaser 2D. На последнем Ludum Dare мы внезапно решили сделать хоррор, а какой же хоррор без теней и света! Хрустнул я костяшками пальцев…

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

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

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

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

Время на прочтение 13 мин
Количество просмотров 28K
Разработка игр *Дизайн игр *Игры и игровые консоли
“Эка невидаль”, — скажете вы, — “В топ-100 вашей игры нет, так что нещитово”. Тоже правда. Зато за год разработки Protolife мы поднакопили какой-никакой опыт, которым можем поделиться с потенциальными будущими игроделами. Ветераны индустрии, боюсь, ничего интересного для себя не найдут. Но, может быть, хоть повеселитесь от души.


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


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

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

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

Время на прочтение 10 мин
Количество просмотров 6K
Ненормальное программирование *Разработка игр *WebGL *WebAssembly *

Однажды я готовился к 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. Что из этого получилось — можно прочитать под катом.


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

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

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

Время на прочтение 23 мин
Количество просмотров 11K
Научная фантастика
Финал фантастической повести. Спасибо всем, кто ждал и поддерживал!

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



Много фантастики под катом
Всего голосов 33: ↑30 и ↓3 +27
Комментарии 45

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

Время на прочтение 13 мин
Количество просмотров 5.9K
Научная фантастика
Продолжение фантастической повести. Предпоследняя глава перед большим финалом.



Немного фантастики под катом
Всего голосов 23: ↑18 и ↓5 +13
Комментарии 18

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

Время на прочтение 13 мин
Количество просмотров 7.8K
Научная фантастика
Продолжение фантастической повести. Осталось совсем немного — еще два поста, и история будет завершена.

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



Немного фантастики под катом
Всего голосов 22: ↑15 и ↓7 +8
Комментарии 6

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

Время на прочтение 17 мин
Количество просмотров 7.1K
Научная фантастика
Продолжение фантастической повести. Для тех, кто забыл (или не знал), что там было раньше — ссылки на предыдущие части ниже.


Немного фантастики под катом
Всего голосов 22: ↑17 и ↓5 +12
Комментарии 11

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

Время на прочтение 13 мин
Количество просмотров 8.6K
Научная фантастика
Продолжение фантастической повести. И все, простоев больше не будет. Мы выходим на финишную прямую.



Немного фантастики под катом
Всего голосов 17: ↑13 и ↓4 +9
Комментарии 8

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

Время на прочтение 10 мин
Количество просмотров 9.9K
Ненормальное программирование *Разработка игр *
Рассказ о том, как я попробовал построить красивые трехмерные тени не выходя за рамки уютного двухмерного гейм-девелопмента, и что из этого получилось.


Читать дальше →
Всего голосов 35: ↑34 и ↓1 +33
Комментарии 29

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

Время на прочтение 13 мин
Количество просмотров 12K
Научная фантастика
Продолжение фантастической повести. Для тех, кто забыл (или не знал), что там было раньше — ссылки на предыдущие части ниже.


Немного фантастики под катом
Всего голосов 12: ↑10 и ↓2 +8
Комментарии 8

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

Время на прочтение 12 мин
Количество просмотров 17K
Научная фантастика
Продолжение фантастической повести. Для тех, кто забыл (или не знал), что там было раньше — ссылки на предыдущие части ниже.
Предыдущие части


Немного фантастики под катом
Всего голосов 25: ↑21 и ↓4 +17
Комментарии 20

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

Время на прочтение 10 мин
Количество просмотров 13K
Научная фантастика
Немного запоздалое продолжение фантастической повести. Для тех кто забыл (или не знал) что там было раньше — ссылки на предыдущие части ниже.
Предыдущие части


Немного фантастики под катом
Всего голосов 12: ↑12 и ↓0 +12
Комментарии 14

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

Время на прочтение 12 мин
Количество просмотров 12K
Научная фантастика
Продолжаем повествование. И на случай, если кто наткнулся на этот пост впервые, это третья глава повести. Первые две можно найти по ссылкам ниже.
Предыдущие части

Друзья, у меня есть к вам предложение вместе немного пофантазировать по поводу одного вопроса. Сам вопрос несущественнен для сюжета, поэтому не будет упоминаться в повествовании, но мне интересно ваше мнение. Вопрос вы найдете в конце главы.


Немного фантастики под катом
Всего голосов 20: ↑15 и ↓5 +10
Комментарии 7

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

Время на прочтение 10 мин
Количество просмотров 14K
Научная фантастика
И снова здравствуйте. Два месяца назад я выложил первую главу повести, и, судя по реакции, получилось неплохо. Поэтому представляю вашему вниманию вторую главу.

Прошу прощения что так долго с ней возился.

На случай если кто забыл с чего все начиналось (за два месяца немудрено) — Глава 1.


Немного фантастики под катом
Всего голосов 20: ↑17 и ↓3 +14
Комментарии 7

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

Время на прочтение 8 мин
Количество просмотров 41K
Научная фантастика
Из песочницы
Здравствуйте. Хочу представить вам первую главу фантастической повести. Немного о технологиях, немного о людях. Надеюсь будет интересно.


Немного фантастики под катом
Всего голосов 35: ↑30 и ↓5 +25
Комментарии 22

LiveReload — обновление javascript без полной перезагрузки страницы (на примере mithril)

Время на прочтение 7 мин
Количество просмотров 33K
Разработка веб-сайтов *JavaScript *

Вступление


Не так давно я начал пользоваться такой полезной штукой как livereload (для тех, кто не знает, что это — есть статья на хабре). Livereload отслеживает изменения в коде веб-приложения и перегружает страницу в браузере при необходимости. При этом со стилями Livereload поступает умнее и заменяет их на лету без перезагрузки, что выглядит волшебно.

К сожалению с javascript такой номер не прокатывает — Livereload не знает как гуманно заменить только изменившиеся скрипты и перегружает всю страницу. Это особенно печалит если использовать инструмент вроде mithril, в котором представление (читай — html) задается так же в javascript. Если я меняю модель или контроллер, то тут все понятно, но если я меняю класс у дива в представлении (скажем, подбирая правильное сочетание bootstrap классов), то перезагрузка страницы кажется излишней — ну вот же, я поменял одну функцию, просто перерисуй view с ее помощью!

В целом не страшно, конечно (работали же как-то без этого раньше), но почему бы не сделать работу еще немного удобнее?



Для тех, кто торопится


Читать дальше →
Всего голосов 20: ↑16 и ↓4 +12
Комментарии 6
1

Информация

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

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

Backend Developer, Software Architect
Lead
От 5 000 $