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

Билл Кеннеди в одной из лекций своего замечательного курса Ultimate Go programming сказал:

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

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

Начинаем изучать микроконтроллеры на примере STM32F030f4p6 - 1

0. Перед прочтением статьи

Данная статья преследует следующие цели:

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

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

[] Реализация honeypot на маршрутизаторах Cisco - 1

Пришла в голову мысль сделать на маршрутизаторе Cisco некое подобие известного пакета fail2ban, используя средства только самого маршрутизатора.

Работает это так. В списке доступа, прикреплённом к интерфейсу граничного интернет-маршрутизатора, создаются правила-ловушки. Когда правило срабатывает, в лог записывается событие. Каждая строка такого события содержит специальную метку, чтобы их легче было отобрать. Лог анализируется, и все попавшие в ловушку IP адреса заносятся в специальную объектную группу. Эту группу можно использовать в том же списке доступа, чтобы забанить доступ злоумышленникам уже ко всем IP адресам и портам нашей сети.

Для понимания этой статьи нужно знать, что такое списки доступа (access lists), и для чего они нужны, а также знать, как использовать в списках доступа объектные группы (object-group).
Читать полностью »

Аппликативные парсеры на 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, является монстром, несмотря на облик человека.

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

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


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