Рубрика «tutorial» - 8

Аппликативные парсеры на Haskell - 1

Мотивация

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

Мне не хватало хорошего примера, где бы окупались усилия, потраченные на освоение "матчасти". Для меня одним из самых удачных таких примеров оказались парсеры. Теперь я довольно часто рассказываю про них, когда у меня спрашивают, для каких распространённых задач можно красиво использовать Haskell.

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

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

Читать полностью »

Unreal Engine 4 — шейдер горения - 1

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

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

Swagger – умная документация вашего RESTful web-API — обзор Junior back-end developer-а для новичков - 1

Предисловие

Команда, в которой я сделала свои первые шаги на поприще написания промышленного кода, занималась разработкой удобного API к функциональности программного продукта на C# (для удобства назовем его, скажем, буквой E), существовавшего уже много лет и зарекомендовавшего себя на рынке с весьма положительной стороны. И здесь вроде бы у юного падавана пока не должно возникать вопросов, однако же представим себе, что ранее вы, скорей всего, конечно, писали собственные web-API, но вряд ли для широкой аудитории, а значит жили по принципу «Сам создал – сам пользуюсь», и если вдруг кого-то бы заинтересовала функциональность вашего API, то вы, наверное, кинули бы ему pdf-файл с подробной инструкцией (по крайней мере я бы сделала именно так). «Где посмотреть функционал апи» — спросила я тимлида ожидая получить ссылку на текстовый документ. «Загляни в Swagger» — ответил он.

Читать полностью »

Добрый день! Представляю вашему вниманию продолжение статьи «Скачиваем, сохраняем и просматриваем PDF в Swift», как и обещал автор — немного подробнее рассмотрим PDFKit.

PDFKit появился в iOS 11, и в нем есть 3 замечательные функции, о которых бы я хотел рассказать, в процессе создания приложения читалки eBook: Разбиение по страницам, Отображение Содержания и Иконка страницы.

Всем, кто заинтересовался, добро пожаловать под кат.
Читать полностью »

«Монстры в играх или 15 см достаточно для атаки» - 1

Спасибо читателям за проявленный интерес, рад что материалы полезны.

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

Их существует всего три:

  • ближняя
  • средняя
  • дальняя

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

Цикл статей “ монстропедия “ ч.2

image

Зачастую разработчики прибегают к простым решениям для создания иллюзии разнообразия противников в игре. Перекрасить монстра, поменять цвет пламени, натянуть новую шкурку на старую тварь и добавить шипов/рогов/зубов/лап, но известная фраза гласит “старого пса не научишь новым трюкам”

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

Вы разработчик, что делать?

Читать полностью »

image

Противники, одни из ключевых фигур, без которых та или иная игра может потерять свой смысл, а когда эти враги еще и монстры, то как раз они и создают ту атмосферу, которую вкладывают создатели. Тяжело представить Silent Hill без пирамида-голового, outlast — без Криса Уокера и так далее, принцип понятен. Монстры — это собирательный образ врага в игре, это может быть не только уродливый демон или гигантские пауки, даже злобный сосед, как Hello Neighbor, является монстром, несмотря на облик человека.

Дойдя до этой части, читатель спросит:

“ А о чем собственно речь?Читать полностью »

ЗАЧЕМ?

Я пишу эту статью для того, чтобы путь, который у меня занял в общей сложности не меньше года, читатель смог пройти за пару часов. Как показал мой личный опыт, просто программировать на Си несколько легче, чем заставить работать серьезное расширение для PHP. Здесь я максимально подробно расскажу вам о том, как сделать расширение на примере библиотеки libtrie, реализующей префиксное дерево, более известное как trie. Я буду писать и параллельно выполнять описываемые действия на свежеустановленной системе Lubuntu 18.04.Начнем.Читать полностью »

В этой статье я хочу рассказать про свой опыт разработки так называемого Device Handler для умного дома SmartThings. Задача состояла в добавлении универсального устройства на базе протокола Z-Wave — Z-Uno, а так же обработка подключаемых к нему дочерних устройств.

Как я добавлял новое устройство в SmartThings Hub, часть 1 - 1
Читать полностью »

Предисловие

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

Встроили мы как-то раз в приложение Яндексмапкит (октябрь 2017 года примерно) вместо эпловых карт (ничего личного — только бизнес). Через месяца 3 в один прекрасный зимний день Андройд версия карт вышла из строя на дня 2 из-за ключей, карта просто превратилась в тыкву) На что в чатике от руководства проскочило: “на андройде карты сломали, починить не знают как” В то время, как iOS-клиента это не коснулось. Бедолаги на андройде… на этот раз ребята были не причем ведь. В те дни упали многие прилаги: почта России, Утконос, может помните ребята?

Сказ о том как я Yandex MapKit на iOS обновлял или карты, деньги, 2 мапкита - 1

Это я к тому, что когда ваше приложение завязано на сторонние сервисы, то неплохо бы иметь план “Б” на этот случай, например переключить на предыдущий вариант реализации карт от Apple, а не заменять один на другой…

Еще через месяца 3, где-то в марте от Яндекса прилетело письмо, что наконец-то обновили они sdk, (прошло совсем немного времени, года 4-5 с предшествующего обновления):
"-Обновляйтесь, через год старый отключим", вкратце. До этого просто была старая версия 1.0

Сказ о том как я Yandex MapKit на iOS обновлял или карты, деньги, 2 мапкита - 2
Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js