Pull to refresh
1
0

Android-разработчик

Send message

Рисуем муравьями: процедурные изображения при помощи алгоритмов оптимизации муравьиной колонии

Reading time7 min
Views10K

Почему мне захотелось рисовать муравьями


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

Я думала о том, как представить это графически, и одной из нашедших во мне отклик картинок стало изображение муравьиной колонии. Муравьи — прекрасный пример возникающей (эмерджентной) сложности. Ни один отдельный муравей не является архитектором, но вместе они строят великолепные сложные структуры.
Читать дальше →
Total votes 42: ↑42 and ↓0+42
Comments5

Дешёвая и быстрая печать на чековом термопринтере

Reading time4 min
Views51K

У нас, айтишников, часто возникает задача напечатать что-то простое и одноразовое – например, логин и пароль новому сотруднику, тикет для монтажника или что-то в этом роде. Тратить бумагу и картридж на подобное очень дорого. При этом есть принтеры с ультрадешёвой скоростной печатью, про которые редко кто вспоминает, хотя видим мы их все каждый день по много раз. Речь про чековые термопринтеры.



Total votes 96: ↑96 and ↓0+96
Comments98

Курс Молодого Геймдизайнера: как считать баланс персонажей и снаряжения без математики

Reading time6 min
Views54K


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

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

Статья будет полезна тем, кому надо заняться балансом, но не знает с чего начать, а также начинающим геймдизайнерам, которые будут выбирать специализацию. Ну и всем, кто просто интересуется, чем занимаются ГД, когда не придумывают новые виды лутбоксов.
Читать дальше →
Total votes 69: ↑67 and ↓2+65
Comments38

Чего стоит идея и как превратить ее в концепт: инструменты геймдизайнера

Reading time8 min
Views13K


«Идея ничего не стоит» — эту мантру слышал наверное каждый геймдизайнер. Важны лишь концепт и реализация. Только на бумаге или экране компьютера идея начинает обретать смысл и форму. И я задался вопросом: а есть ли какие-то базовые принципы по превращению идеи в концепт?

Внутри перевод с краткой теорией и практическими советами для всех, кто ждет вдохновения или не знает, с чего начать.
Читать дальше →
Total votes 20: ↑18 and ↓2+16
Comments3

Как подружить дизайнера, верстальщика и «Фигму» с помощью дизайн-системы, ломика и какой-то матери™

Reading time31 min
Views75K


Привет, Хабр. Недавно я выпендрился в комментариях и пообещал подробно ответить на вопрос о том, как дизайн-система упрощает взаимоотношения и нейтрализует конфликты между дизайнерами и верстальщиками (разработчиками). Плюс рассказать о некоторых вариантах стандартизации именования слоёв. Вот и отвечаю. Подробно. Про сетки. Про компоненты. Про иконки. Про язык. Про БЭМ. Про «фигмин» слэш и её же плагины. Про артборды и вьюпорты. Про типографику. Про стили и палитры. Про эффекты. Про экспорт растра. Про «мультиплеер». Про распределение обязанностей. Ну и немножко «о жизни, вселенной и вообще». Осторожно, трафик: внутри много картинок, есть gif-анимации. А ещё много, действительно много нудного текста. Я предупредил.
Читать дальше →
Total votes 43: ↑42 and ↓1+41
Comments36

Как понять, что ты действительно бросил курить

Reading time13 min
Views193K

Осторожно, лонгрид. TL;DR. Много курил, давно бросил. Есть интересное наблюдение на тему вредных привычек. Не встречал его в других источниках. У части людей, бросивших курить, годами сохраняется зависимость, несмотря на то, что они не употребляют сигареты. Привычка продолжает косвенно влиять на жизнь. Это можно исправить. Ниже опишу некоторые признаки проблемы и постараюсь ее декомпозировать. Ничего не продаю. Это личный опыт, из которого выжата кое-какая теоретическая база. Может пригодиться, если вы бросили курить, но боитесь рецидивов. Или разделяете один из характерных стереотипов, например: «бывших курильщиков не бывает», «это болезнь на всю жизнь...», «курение — страшное зло». Мне кажется, принцип актуален и для других зависимостей от доступных эндорфинов: тяги к сладкому, обжорства, алкоголизма на обратимых стадиях, игромании и др.
Читать дальше →
Total votes 108: ↑106 and ↓2+104
Comments151

Создание «искусственной жизни» на компьютере

Reading time10 min
Views109K
Всем привет. В статье хочу описать свой эксперимент по созданию «искусственной жизни» на компьютере.

Как это выглядит?

картинка кликабельна

На компьютере создаётся виртуальная среда со своими правилами и выпускается первая простейшая живность. Буду называть их ботами. Боты могут погибнуть или выжить и дать потомство. Потомок может слегка отличаться от предка.

Ну а дальше за работу принимается эволюция и естественный отбор.

А мне остаётся только наблюдать за развитием мира.

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

Поведением ботов управляет код, записанный в них.

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

Внутреннее устройство кода — это самое интересное в проекте.

Код должен быть простым и выдерживать различные модификации (случайное изменение любого элемента в коде) над собой без синтаксических ошибок.
Читать дальше →
Total votes 214: ↑210 and ↓4+206
Comments393

Теория счастья. Введение в мерфологию

Reading time12 min
Views33K
Продолжаю знакомить читателей Хабра с главами из своей книжки «Теория счастья» с подзаголовком «Математические основы законов подлости». Это ещё не изданная научно-популярная книжка, очень неформально рассказывающая о том, как математика позволяет с новой степенью осознанности взглянуть на мир и жизнь людей. Она для тех кому интересна наука и для тех, кому интересна жизнь. А поскольку жизнь наша сложна и, по большому счёту, непредсказуема, упор в книжке делается, в основном, на теорию вероятностей и математическую статистику. Здесь не доказываются теоремы и не даются основы науки, это ни в коем случае не учебник, а то, что называется recreational science. Но именно такой почти игровой подход позволяет развить интуицию, скрасить яркими примерами лекции для студентов и, наконец, объяснить нематематикам и нашим детям, что же такого интересного мы нашли в своей сухой науке.



Это, одна из первых глав, в которой на примере велосипедиста рассматриваются нужные нам инструменты для измерения несправедливости: кривая Лоренца и индекс Джини, а также упоминаются пресловутый Парето и грозный инспектор.

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

Теория счастья. Закон арбузной корки и нормальность ненормальности

Reading time10 min
Views74K
Представляю на суд читателей Хабра неупорядоченные главы из своей книжки «Теория счастья» с подзаголовком «Математические основы законов подлости». Это ещё не изданная научно-популярная книжка, очень неформально рассказывающая о том, как математика позволяет с новой степенью осознанности взглянуть на мир и жизнь людей. Она для тех кому интересна наука и для тех, кому интересна жизнь. А поскольку жизнь наша сложна и, по большому счёту, непредсказуема, упор в книжке делается, в основном, на теорию вероятностей и математическую статистику. Здесь не доказываются теоремы и не даются основы науки, это ни в коем случае не учебник, а то, что называется recreational science. Но именно такой почти игровой подход позволяет развить интуицию, скрасить яркими примерами лекции для студентов и, наконец, объяснить нематематикам и нашим детям, что же такого интересного мы нашли в своей сухой науке.



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

Читать дальше →
Total votes 118: ↑117 and ↓1+116
Comments250

Избавляемся от библиотек сохранения состояния фрагмента с помощью чистого kotlin

Reading time2 min
Views6.3K
image

Android библиотеки вспомогательной кодогенерации, такие как Android Annotations или мой любимый Icepick, которые разработчики привыкли использовать для упрощения написания, не готовы были сразу подружиться с Kotlin-кодом, так как большинство из них требует держать поля с модификатором package private. Конечно, ничего страшного писать

@JvmField @State
internal var carName: String? = null

вместо

@State String carName;

Но лучше вспомнить, что Kotlin к нам пришёл для упрощением кода, а не наоборот.
Читать дальше →
Total votes 11: ↑9 and ↓2+7
Comments6

Подходы к созданию скриптового языка описания настольных игр

Reading time9 min
Views20K
Так уж случилось, что игры я писал лишь для себя, и профессионально этим никогда не занимался.
А вот опыт писать DSL (Domain Specific language) для уменьшения рутины написания совершенно разного кода хоть какой-то есть.
Именно этим и хочется поделится: как упорядочить необъятное.



Наш хороший хабр-юзер GlukKazan пишет много статей о том какие есть замечательные продукты для создания различных досочных игр. Такие как Zillions of Games и Axiom Development Kit.
Однако эти программы не универсальны. И всегда хочется улучшить их. Но данные продукты не свободны, поэтому приходится писать программный продукт заново.
GlukKazan работает над открытым проектом Dagaz, о чём делится отличными статьями (например тут: Dagaz: Новое начало).

Итак, предположим, мы хотим создать универсальный игровой движок для настольных игр, и его основой мы хотим видеть скриптовый язык, который помогает растолковать движку правила игры.
Каким мы хотим его видеть?
1) Язык должен быть универсальным, насколько можно, дабы описать почти любые правила игры.
2) Тем не менее, язык должен быть как можно проще, минимум конструкций.
3) Описание правил должны быть легки для чтения игроделу и для написания своих игр
4) Для большинства случаев игры можно писать, дополняя/изменяя уже написанные
5) Коммуникация (АПИ) со скриптом должна быть насколько простой, насколько это возможно. Так, что бы можно легко писать ботов и ИИ.
На первый взгляд кажется, что потраченные усилия вообще никому не нужны будут, поскольку рутину не уменьшить, проще писать игры сразу готовыми.
Но это не так.
Всё куда проще!
Читать дальше →
Total votes 23: ↑20 and ↓3+17
Comments30

Зоопарк Алгебрaических Типов Данных

Reading time8 min
Views24K
В этой статье мы попытаемся рассмотреть всё разнообразие Алгебраических Типов Данных.

Надо сказать, задача это достаточно неподъёмная, и понять человеку, если он ранее с Алгебраическими Типами не имел дело — не очень просто.
АТД были впервые использованы в языке Hope, но основную популярность они приобрели благодаря языкам ML, такими как Standart ML, OCaml, F#, и языку Haskell.
Ныне АТД в той или иной мере поддерживаются в значительно большем количестве языков: Scala, Rust, Nemerle, Racket,…
АТД — это универсальный тип данных. С помощью него можно представить большинство типов данных.
АТД называются алгебраическими, потому что их можно представить как некую алгебраическую композицию типов его составляющих. Это знание даёт своё преимущество: понимая свойства алгебраической композиции, можно посчитать какой тип необходим для построения тех или иных данных.
Будем рассматривать типы на основе языка Haskell, однако подобного с лёгкими изменениями можно добиться в других языках с поддержкой АТД.
Читать дальше →
Total votes 43: ↑38 and ↓5+33
Comments34

Пишем эффективный blur на Android

Reading time8 min
Views54K
image
Сегодня мы попытаемся разобраться с методами размытия (blur) доступными для Android разработчиков. Прочитав определенное число статей и постов на StackOverflow, можно сказать, что мнений и способов выполнить эту задачу достаточно много. Я попытаюсь собрать все это в кучу.

И так, зачем?


Все чаще и чаще можно заметить эффект размытия в приложениях появляющихся на просторах Google Play Store. Взять хотя бы замечательное приложение Muzei от +RomanNurik или тот же Yahoo Weather. Глядя на эти приложения можно заметить, что при умелом обращении размытием можно добиться очень впечатляющих результатов.

Читать дальше →
Total votes 50: ↑41 and ↓9+32
Comments11

Создание шейдеров

Reading time27 min
Views188K
Освоить создание графических шейдеров — это значит взять под свой контроль всю мощь видепроцессора с его тысячами параллельно работающих ядер. При таком способе программирования требуется другой образ мышления, но раскрытие его потенциала стоит потраченных усилий.

Практически в любой современной графической симуляции используется код, написанный для видеопроцессора: от реалистичных эффектов освещения в высокотехнологичных AAA-играх до двухмерных эффектов постпроцессинга и симуляции жидкостей.


Сцена из Minecraft, до и после добавления нескольких шейдеров.

Задача этого туториала


Иногда программирование шейдеров представляется загадочной чёрной магией и его часто понимают неправильно. Существует множество примеров кода, демонстрирующих создание невероятных эффектов, но в которых практически нет объяснений. В своём руководстве я хочу восполнить этот пробел. Я сосредоточусь в основном на базовых принципах создания и понимания кода шейдеров, чтобы вы смогли с лёгкостью настраивать, сочетать или писать свои собственные шейдеры с нуля!
Total votes 105: ↑105 and ↓0+105
Comments27

LibGDX + Scene2d (программируем на Kotlin). Часть 2

Reading time9 min
Views8.3K
Всем привет. Сегодня я расскажу об атласе текстур, шкурках, пройдемся еще раз по работе с версткой. Далее интернационализация и в заключение пара тонкостей по работе с цветом. И в следующем уроке перейдем к модели игры и связыванию игровой логики и элементов UI.

Предыдущие части


Атлас текстур


Одним из важнейших параметров «комфортности» приложения является время загрузки. Узким звеном в этом плане является считывание с накопителя. Если мы используем везде вот такие конструкции
Image(Texture("backgrounds/main-screen-background.png"))
то мы создаем избыточную задержки. В данном случае текстура «backgrounds/main-screen-background.png» будет считана с накопителя в синхронном режиме. Это не всегда является злом. Как правило загрузка одной фоновой картинки не портит впечатления от работы с программой. Но если мы будет каждый элемент нашей сцены считывать таким образом, скорость и плавность приложения могут серьезно просесть.
Читать дальше →
Total votes 8: ↑6 and ↓2+4
Comments8

LibGDX + Scene2d (программируем на Kotlin). Часть 1

Reading time6 min
Views7.9K
И снова здравствуйте. По результатам прошлой публикации, я пришел к выводу что опять совершаю ошибки. Высокие темп публикации неудобен ни мне, ни вам. И попробую еще подсократить теорию, но приводить больше примеров кода.

Небольшое лирическое отступление. LibGDX в значительной части представляет из себя простую обертку над OpenGL. Просто работа с текстурами. Все что мы делаем — это указываем порядок и способ отрисовки текстур. Базовый инструмент для рисования текстур — Drawable.
Читать дальше →
Total votes 8: ↑7 and ↓1+6
Comments2

LibGDX + Scene2d (программируем на Kotlin). Часть 0

Reading time9 min
Views18K
И снова всем привет! Спешу поделиться, у меня были отличные выходные! Полтора дня я обдумывал вариант подачи материала, пилил макет и вообще всячески старался сделать хорошо. Что такое хорошо в контексте обучающего материала? На мой взгляд это «интересность», краткость, корректность и наглядность. Для меня лично написать такую статью — это подвиг. А вот серию статей — просто емкая и ответственная задача. Изучать Scene2d мы будем в процессе написания игры с нуля! Процесс нашего творчества растянется на долгие десять-двенадцать дней. Мне хочется верить что периодичность материалов будет примерно раз в день. Для меня лично это очень амбициозная задача, ведь требуется не столько запрограммировать, но и описать в статьях с детальным разбором. Я не сторонник бросаться в бушующий океан, в надежде научиться плавать. Мы прыгнем у лужу и будем последовательно ее углублять и расширять. Итак начинаем.
Читать дальше →
Total votes 21: ↑18 and ↓3+15
Comments9

Эссенциализм и теория принятия решений

Reading time8 min
Views11K

Когда я готовил статью про визуализацию одномерных данных, изучил минималистический подход к построению диаграмм Эдварда Тафти. Минимализм — хорошая идея, но название не очень удачное, так как не отвечает на вопрос, что за минимум мы должны оставить?


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


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


Хорошо автор книги в конце написал, что главное в его подходе. Оказалось, что это вопрос, который нужно задавать при принятии любого решения:


Что существенно?

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


Читать дальше →
Total votes 13: ↑12 and ↓1+11
Comments3

Логика сознания. Часть 12. Поиск закономерностей. Комбинаторное пространство

Reading time26 min
Views34K
imageПоэзия — та же добыча радия.
В грамм добыча, в годы труды.
Изводишь единого слова ради
Тысячи тонн словесной руды.
Но как испепеляюще слов этих жжение
Рядом с тлением слова-сырца.
Эти слова приводят в движение
Тысячи лет миллионов сердца.

Владимир Маяковский


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

Сделаем еще один шаг в сторону универсального обобщения. Опишем идею комбинаторного пространства и то, как это пространство помогает искать закономерности и тем самым решать задачу обучения с учителем.
Total votes 39: ↑36 and ↓3+33
Comments74

Охота на мифический MVC. Построение пользовательского интерфейса

Reading time27 min
Views40K

Детектив по материалам IT. Часть вторая


В этой части я покажу как изначально выглядело деление пользовательского интерфейса и что из себя представляли Вид и Контроллер. Попробую рассказать почему в современных GUI библиотеках используется их объединение и какие вообще интересные решения можно найти в этой области на сегодняшний день. Ссылки на первоисточники приведены в начале первой части.


Начну с Вида. Не смотря на то, что Вид определяется как модуль, отображающий Модель – "а view is a (visual) representation of its model", на практике к Виду, как правило, просто относят все графические элементы GUI, то есть Видом считается все то, что мы видим на экране ЭВМ.


Понятно, что тут содержится некое противоречие, поскольку такие графические компоненты как меню, кнопки, тулбары служат не для отображения информации о системе, а прежде всего для управления системой. Клавиатура и мышь всегда были средством управления программой и находились в «ведомости» Контроллера (как бы его не трактовали). Поэтому кажется нелогичным и странным, что кнопки, сделанные из пластмассы, считаются элементами управления и относятся к Контроллеру, а кнопки, нарисованные на экране, и по сути выполняющие те же самые функции (производить входящие события), почему то относят к Виду.


View or Controller

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

Information

Rating
Does not participate
Registered
Activity