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

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

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

Разрабатываем свой браузер с нуля. Часть первая: HTML

Время на прочтение15 мин
Охват и читатели70K


Всем привет!


Продолжаем цикл статей по разработке браузерного движка.


В данной статье я расскажу как создать самый быстрый HTML-парсер c DOM. Мы рассмотрим HTML спецификацию и чем она плоха относительно производительности и потребления ресурсов при разборе HTML.


С данной темой я докладывался на прошедшем HighLoad++. Конференцию не каждый может посетить, плюс в статье больше деталей.


Я предполагаю, что читатель обладает базовыми знаниями об HTML: теги, ноды, элементы, пространство имён.

И так, начнём!

Передача данных через анимированные QR на Gomobile и GopherJS

Время на прочтение12 мин
Охват и читатели35K

В данной статье я хочу рассказать о небольшом и забавном проекте выходного дня по передаче файлов через анимированные QR коды. Проект написан на Go, с использованием Gomobile и Gopherjs – последний для веб-приложения для автоматического замера скорости передачи данных. Если вам интересна идея передачи данных через визуальные коды, разработка веб-приложений не на JS или настоящая кроссплатформенность Go — велкам под кат.


txqr demo

Читать дальше →

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

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


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


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

Если коротко: это необычная tower defense, где надо бегать героем-курсором и выстраивать оборону из блоков против постоянно растущей красной биомассы.
Остальное под катом - осторожно, тяжелые пиксельартные картинки

Tiled2Unity: экспорт из Tiled Map Editor в Unity

Время на прочтение7 мин
Охват и читатели13K
Созданию простого 2D платформера посвящено немало публикаций на ресурсах для разработчиков игр. В качестве движка часто используют Unity, а для создания карт — Tiled Map Editor. Взаимодействие этих двух сред осуществляется с помощью бесплатной утилиты Tiled2Unity, которая создает из TME файлов префабы в Unity.

Как это работает, расскажем на примере разработки нашего платформера “X-Drums”.

Двигаться будем по следующей схеме:

  1. Настройка экспорта Tiled2Unity
  2. Настройка столкновений в Tiled Map Editor
  3. Настройка параметров, которые поддерживает Tiled2Unity
  4. Настройка пользовательских параметров в Tiled Map Editor

  • Пользовательские параметры для слоев (объектов)
  • Пользовательские параметры для объектов

1. Настройка экспорта


Итак, у нас есть проект в Unity и есть карта, созданная в Tiled Map Editor. Запускаем Unity и импортируем Tiled2Unity.unitypackage.


Читать дальше →

Рассказ о 33 расширениях для VS Code, об их разработке и об управлении ими

Время на прочтение10 мин
Охват и читатели21K
Автор материала, перевод которого мы сегодня публикуем, создал 33 расширения для VS Code. Он решил поделиться с теми, кому нравится этот редактор, методикой разработки и поддержки расширений. Кроме того, он кратко рассказал о своих проектах. Возможно, вы найдёте среди них что-нибудь такое, что вам пригодится.


Читать дальше →

Плагин «Rainbow CSV» как альтернатива Excel

Время на прочтение4 мин
Охват и читатели22K

Привет, Хабр! Эта статья про плагин Rainbow CSV, который я написал для 5 текстовых редакторов:


VS Code, Vim, Sublime Text 3, Atom, Gedit


Думаю, что многие читатели этой статьи периодически сталкиваются с CSV (comma-separated), ТSV (tab-separated) и подобными файлами. Если попробовать открыть их в текстовом редакторе (а как иначе узнать что там внутри?), то откроется совершенно невзрачная картина как с левой стороны изображения. Глядя на это сложно сказать даже сколько колонок в таблице. С правой стороны картинки тот же файл с включенным RainbowCSV, читаемость значительно повысилась за счет синтаксической подсветки.


image

Читать дальше →

Как вырастить лес на Actionscript3/Flash в несколько* строк кода

Время на прочтение7 мин
Охват и читатели5.9K
Вот в этом комменте я похвастался, что в своё время написал программу, создающую рендер «пристойно выглядящего» леса в двести строк кода. К сожалению, реальность оказалась немного большей по размеру — раскопанные исходники содержат примерно 2100 строк кода, из которых где-то 700 — комментарии, мысли вслух, старый отброшенный код и попытки документации методов. Размер исполняемого файла SWF, впрочем, оказался 13112 байт.

Началось всё с того, что на форуме Kongregate.com, где я в то время активно тусил, один из участников предложил посостязаться в процедурной генерации чего-либо, первой темой стал «Лес».


Читать дальше →

Как я вижу идеальный браузер

Время на прочтение37 мин
Охват и читатели37K
В последнее время появилось много статей о недостатках современного софта, при этом никто не пробует предложить свои решения, чтобы поменять ситуацию. Эта статья — ответ на некоторые статьи об этом, равно как и о мечтах о идеальном браузере. Как можно было бы переработать браузер, его UI, методы взаимодействия с сайтами, улучшить протоколы и пользовательский опыт в целом. Если у вас есть какие-то, пусть даже самые смелые мысли по этому поводу, то предлагаюсь обсудить их и быть может заложить основы для создания идеального браузера. В конечном счете, рано или поздно это нужно будет сделать, так как ситуация на рынке браузеров на данный момент совсем не радостная. И не проблема, что другие браузеры очень сложны и их сложно догнать — мы можем пойти по своему пути, реализовывать только необходимые части стандартов, при этом можем вводить свои нестандартные расширения. Не надо бежать за другими, пусть другие бегут за нами. Пусть наш браузер будет создан для людей, а не во имя коммерческих интересов корпораций добра и странных консорциумов, от которых давно нет никакой пользы.



Что же должно быть в идеальном браузере?



Читать дальше →

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

Время на прочтение10 мин
Охват и читатели6.6K

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


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

Читать дальше →

Как ECS, C# Job System и SRP меняют подход к архитектуре

Время на прочтение10 мин
Охват и читатели17K
Мы в компании давно работаем с Unity и не могли не пригласить их ребят на Pixonic DevGAMM Talks, который был в сентябре. Field Engineer Валентин Симонов рассказал, как планировать архитектуру игр с учетом преимуществ новых технологий. Unity работает над ними уже несколько лет, чтобы добиться недостижимого ранее уровня производительности. Послушать выступление можно на YouTube, а почитать расшифровку со слайдами — сразу под катом.

Написание шейдеров в Unity. GrabPass, PerRendererData

Время на прочтение9 мин
Охват и читатели30K
Привет! Я хотел бы поделиться опытом написания шейдеров в Unity. Начнем с шейдера искажения пространства (Displacement/Refraction) в 2D, рассмотрим функционал, используемый для его написания (GrabPass, PerRendererData), а также уделим внимание проблемам, которые обязательно возникнут.

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


Читать дальше →

Под капотом Graveyard Keeper: Как реализованы графические эффекты

Время на прочтение5 мин
Охват и читатели58K
Всем привет! Целых 4 года я не писал на Хабр. Последняя моя серия постов была о различных инструментах и приемах, которые мы применяли на нашей прошлой игре (разрабатывая ее на Unity). С тех пор игру ту мы благополучно выпустили, а также выпустили и новую. Так что теперь можно немного выдохнуть и написать несколько новых статей, которые могут быть кому-то полезны.


Сегодня я хочу рассказать о графических приемах и ухищрениях, которые мы применяли для создания той картинки, которую вы видите на гифке выше.

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

Для начала, кратко перечислю из чего собирается картинка в нашей игре:
Читать дальше →

Как мы боролись с Роскомнадзором и что из этого вышло

Время на прочтение23 мин
Охват и читатели61K
Руководитель сервиса для регистрации бизнеса 1С-Старт Александр Раптовский о том, как отменить судебное решение о блокировке статьи на Хабре, инициированное Роскомнадзором.


Кадр из фильма «С меня хватит!» (Falling Down), 1992
Читать дальше →

Семантика копирования и управление ресурсами в C++

Время на прочтение28 мин
Охват и читатели61K

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



Читать дальше →

Текстовый редактор — это вам не высшая математика, тут думать надо

Время на прочтение17 мин
Охват и читатели100K
Современные текстовые редакторы умеют не только бибикать и не давать выйти из программы. Оказывается, внутри них кипит очень сложный метаболизм. Хотите узнать, какие ухищрения предпринимаются для быстрого пересчета координат, как к тексту приделываются стили, фолдинги и софтврапы и как это всё обновляется, при чем тут функциональные структуры данных и очереди с приоритетами, а также как обманывать пользователя — добро пожаловать под кат!



В основе статьи — доклад Алексея Кудрявцева с Joker 2017. Алексей уже лет 10 пишет Intellij IDEA в JetBrains. Под катом вы найдете видео и текстовую расшифровку доклада.
Читать дальше →

Разработка GLSL шейдеров на Kotlin

Время на прочтение4 мин
Охват и читатели6.9K


Всем привет!

Наша компания занимается разработкой онлайн игр и сейчас мы работаем над мобильной версией нашего основного проекта. В этой статье хотим поделиться опытом разработки GLSL шейдеров для Android проекта с примерами и исходниками.
Читать дальше →

Могут ли дети в селах стать программистами, если рядом учат только на железнодорожников. Разговор с «Кружком»

Время на прочтение14 мин
Охват и читатели26K


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

Оказалось, такие истории еще случаются. В 2017 году несколько молодых преподавателей программирования из Московских школ дополнительного образования собрались в команду, назвали ее «Кружок» и поехали по городам России рассказывать детям о технологиях. Они посетили Воткинск, Калугу, Вязьму. Затем в селе Глазок под руководством ребят дети создали сайт, и тут же попали в телевизор и заголовки крупнейших СМИ.

Сейчас «Кружок» едет с туром по 10 городам, а в конце августа планирует провести фестиваль в селе Сардаял.

Преподаватели «Кружка» Саша Братчиков и Александр Патлух рассказали нам с fillpackart каково это — учить детей программированию и заниматься таким вот «технологическим миссионерством».

Пишу книгу о первом «нашем» стартапе, покорившем мир: помогайте

Время на прочтение5 мин
Охват и читатели38K
А вы знаете, что Newton, легендарный девайс Apple, работал на российской технологии распознавания рукописного текста? А вы знаете, что и сейчас всю американскую почту сортирует эта же, доработанная и усовершенствованная, технология? А вы знаете, что первая успешная в мире софтверная фирма родом из России была основана еще в Советском Союзе и называлась Параграф? Обо всем этом я и пишу книгу — и вы можете мне помочь (не деньгами).

image

Читать дальше →

Французская школа в разработке видеоигр: Another World

Время на прочтение21 мин
Охват и читатели17K
image

Французская художественная эстетика всегда слегка отличалась от эстетики англоговорящих стран. При создании своих картин, фильмов и даже мебели французы часто отказывались от скучного буквализма, столь свойственного англоязычному искусству, в пользу чего-то более утончённого. Впечатление становилось важнее, чем объективная реальность. Французское авторское кино не станет совершенно непривычным для английского глаза, как это было бы с болливудским или египетским фильмом. Однако создаваемые им эффекты гораздо больше сбивают с толку: кажется, что на поверхности лежит что-то узнаваемое и предсказуемое, но внезапно происходит неожиданный поворот. В частности, фильм может проявлять обескураживающе малый интерес к логике сюжета — основе кино в английской культуре. Для таких режиссёров, как, например, Франсуа Трюффо, сюжет намного менее интересен, чем эмоциональное воздействие картины в целом.

Какими бы грубыми ни были эти стереотипы, но когда французы открыли для себя компьютерные игры, они остались себе верны. Долгое время «французская игра» для англоязычного человека была синонимом «странной», эксцентричной, и трудно было понять, чья в этом вина — игры или игрока. Винтажные французские игры не всегда были самыми отполированными или сбалансированными с точки зрения дизайна, но сегодня они славятся своей готовностью использования палитры чувств, гораздо более богатой, чем примитивные «страх-ярость», «смех-грусть». Особенно это справедливо для игры Эрика Шайи Another World.

Как Роскомнадзор блокирует HideMy.name и что будет дальше. Слово основателям VPN-сервиса

Время на прочтение5 мин
Охват и читатели41K
Последний год у VPN-сервиса HideMy.name (бывший Hideme.ru) трудные отношения с Роскомнадзором. В 2017 сервис был заблокирован на 4,5 месяца из-за анонимайзера на сайте. И хотя позже РКН исключил Hideme из реестра, сайт все равно переехал на новый домен.

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

Надеюсь, это только начало истории, и Роскомнадзор в ответ тоже расскажет что-нибудь интересное.
Читать дальше →

Информация

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

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

Бэкенд разработчик, Архитектор программного обеспечения
Ведущий
От 5 000 $