Подписка на блог

Customize in /user/extras/follow-sheet.tmpl.php.

Sample text.

Twitter, Facebook, VK, Telegram, LinkedIn, Odnoklassniki, Pinterest, YouTube, TikTok, РСС JSON Feed

Sample text.

Савранский Дмитрий

Личный блог о том, о сём…

Проект. Трекер обращений

Контекст

Около семи лет я трудился в одной крупной компании в должности дежурного ИТ-специалиста. Работа была сменная, в т. ч. с ночными сменами, и заключалась в технической поддержке диспетчеров, которые тоже работали круглые сутки. Обычная техподдержка тоже существовала, но ребята там работали в обычном графике 5/2 и общались преимущественно с такими же обычными пользователями.

Работа техподдержки осуществлялась в системе управления пользовательскими обращениями или «Сервис Деск». Это такой сайт, где любой пользователь мог создавать обращения о своих проблемах с ИТ. Потом эти обращения назначались на исполнителей, решались и оставались в системе для накопления опыта и знаний. Удобная штука по заветам ITSM и KM. Но не когда ты дежурный.

Проблема

На смене должно быть двое дежурных, каждый со своим набором обязанностей. Каждый человек периодически занимал место одного из дежурных, а общий штат составлял десять человек. Ну, то есть должности две, а личностей у каждой должности — десять. Обязанности из суток в сутки одни и те же, а вот исполнитель разный…

Дежурные активно использовали «Сервис Деск» для фиксации и решения проблем. Но была проблемка: в системе нельзя было авторизоваться как дежурный, только через личную учётную запись. И получается, что нельзя получить или создать список обращений, к которому бы имели доступ все ребята в смене и только они.

Обращения — важный источник информации, они должны быть всегда под рукой и актуальные. А решаться обращения могут годами. И как же решалась данная «проблемка»? Правильно — гениально. Дежурные вели список важных обращений в «Ворде» и просто раз в смену актуализировали список. Или нет — я же говорю, личности разные…

Идея

Решить вопрос расширением функционала «Сервис Деска» не удалось, т. к. вещь это покупная и вообще «кто вы тут такие, шоб мы тратили на вас своё время и деньги»… В общем, было принято решение вытаскивать себя из болота прямо за волосы. Вместе с коллегами.

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

Дизайн*

* Осмысленное проектирование

Самая первая версия (MVP) представляла из себя:

  • поле для ввода номера (ID) обращения;
  • таблицу с обращениями;
  • пару кнопок «Добавить» и «Удалить».

Дизайна не было от слова «совсем», но идея работала. Настоящий proof of concept. Изображений того «чуда», естественно, не осталось…

После получения рабочего прототипа пришло время задуматься о дизайне приложения. К этому моменту я уже знал, что, например, для таблицы буду использовать библиотеку DataTables и сразу заложил её в дизайн. Технологический стек у меня был ограничен корпоративными стандартами и представлял из себя Astra Linux, PostgreSQL, nginx, C#, HTML/CSS/JavaScript и различные js-библиотеки.

Работать всё должно было примерно так:

  1. У каждого дежурного своя «Главная страница» с таблицей с обращениями и своя «Корзина».
  2. Чтобы добавить обращение в таблицу, надо было ввести номер обращения в поле и нажать кнопку «Внести». Данные запрашивались через API «Сервис Деска». Вводить можно сразу несколько номеров через пробел.
  3. Обращения в таблице появлялись в свёрнутом состоянии для экономии места, но с самой важной информацией.
  4. Если выбрать несколько обращений, то можно их все обновить кнопкой «Обновить» или удалить кнопкой «В корзину». Настроить автоматическое обновление информации по изменению в «Сервис Деске» не удалось.
  5. Если надо обновить все обращения в таблице, предусмотрена особая кнопка «Обновить всё». Так как это считается «дорогой» операцией, то и кнопка не простая, а «дорогая»: она имеет вид слайдера, который надо протянуть, чтобы кнопка сработала.
  6. Удалять всё в «Корзину» задачи не стояло, поэтому такая кнопка отсутствовала.
  7. Из «Корзины» можно любое обращение вернуть с помощью кнопки «Вернуть» или удалить с помощью «дорогой» же кнопки «Удалить».

Таким я видел сайт на варфреймах:

Варфрейм «Главная страница» Варфрейм «Корзина» Почеркушки

Варфрейм «Главная страница» — Варфрейм «Корзина» — Почеркушки

Финал

Спустя некоторое время мне удалось решить все поставленные задачи и получить полноценное веб-приложение:

Главная страница Корзина

Главная страница — Корзина

В пути по просьбе коллег в «Корзину» была добавлена кнопка «Удалить всё» на случай заметания следов. Шучу: просто тогда разработчиком я был начинающим, и при количестве обращений в таблице в несколько сотен интерфейс начинал «подтупливать». Эту проблему я решил таким вот образом, а другие уже не успел, т. к. уволился, но это уже совсем другая история…

Рецепт. Шашлык по-мексикански

Лирика

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

Ниже представлен немного дописанный рецепт, учитывающий кроме самого рецепта ещё и ответы автора на вопросы читателей.

Ингредиенты

  • Мясо (свинина, говядина, куриные ножки) — 2 килограмма;
  • Лук — 4 большие луковицы;
  • Оливковое масло — 4 столовые ложки;
  • Заварной кофе — пол-литра;
  • Специи — сушеный базилик, молотый чили, молотый чёрный перец, соль.

Сам рецепт

  1. Мясо надо нарезать на «правильные» куски. Правильный кусок для шашлыка — это кусок размером с два коробка спичек, сложенных широкими сторонами. В таком куске мясо прожаривается равномерно, не подгорает и не остаётся сырым внутри. При этом нарезать мясо надо всегда поперёк волокон.
  1. Подготовить и добавить лук. Чем дольше мясо будет мариноваться, тем крупнее надо нарезать лук. То есть, если мясо будет мариноваться 12-15 часов, то лук нужно нарезать кольцами, а если надо замариновать мясо за 2-3 часа — то натереть на тёрке. Всё дело в соке, который выделяется при нарезке лука — именно он маринует мясо. Однако, если натереть лук на тёрке и оставить мясо мариноваться на 12 часов, то мясо начнёт неприятно горчить.
  1. Добавить специи: 2 чайные ложки сушеного базилика и по щепотке молотого чили и молотого чёрного перца.
  1. Залить всё это оливковым маслом и хорошенько перемешать. Масло служит транспортом, который помогает перемещать специи в мясо. Но есть важные нюансы: масло обязательно должно быть «для жарки», холодного отжима и нерафинированное — масло для салатов не подойдёт.
  1. Сварить кофе. Это может быть американо (одна часть эспрессо и три части воды) или даже просто заваренный в кружке молотый кофе — важно лишь не допустить попадания гущи в мясо. Крепость зависит от времени, которое мясо будет мариноваться — чем меньше, тем крепче. В кофе добавить столовую ложку соли, тщательно перемешать и дать остыть в течение 5-10 минут. Растворимое кофе не подойдёт.
  1. Влить остывший кофе в мясо и тщательно перемешать — маринад должен полностью покрыть мясо. Гнёт использовать не стоит — так мясо будет набирать не только вкусы, но и воду и будет менее жёстким. Теперь можно оставить мясо на 2-3 часа при комнатной температуре. Если планируется мариновать мясо дольше — надо убрать мясо в холодильник. По истечении 12 часов маринад лучше слить.
  1. Нанизать мясо на шампуры: между кусочками не должно быть промежутков, а получившийся слой мяса должен быть толщиной в 2-3 пальца. Чтобы предотвратить возгорание стекающего жира стоит посыпать угли крупной солью. Расположить шампуры над углями так, чтобы расстояние до углей составляло около четырёх пальцев — это предотвратит пересушивание мяса. Далее регулярно переворачивать шампуры, не позволяя жиру, капающему на угли, сильно гореть. Для придания мясу аппетитной и хрустящей корочки можно полить его в конце приготовления чем-то сахаросодержащим, например, горячим вином.

Проект. Манчкин в смешном переводе

Проект некоммерческий и строится на принципах open source и DIY.

Идея

В начале 2020 года сестра подошла ко мне и поделилась идеей объединить такие разные вещи, как «Манчкин» и «смешной перевод Гоблина».

Так получилось, что добрая часть нашего общего детства прошла под знамёнами Сумкиных, мега-колец и шматриц. И, как любая детская деформация, осталась с нами до сих пор. Мы говорим цитатами, знаем наизусть сцены и любим время от времени вернуться к истокам и пересмотреть их.

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

Начало

И вот, двенадцатого июня 2020 был дан старт нашему новому проекту «Манчкин в смешном переводе». За основу был взят оригинальный «Манчкин» с его механикой. В процессе само содержимое карт и их количество было несколько переработано. Так, например, полностью исчезли карты «Получи уровень», ибо «чё это такое, за каким фигом тебе просто так уровень, п’шёл отсюдава!». Зато добавили Наёмничков! И каких — один Голый чего стоит! Спойлер: всех твоих Наёмничков… Классы и расы перемешались и превратились в просто расы: Начальники, Мэнты, Карапузы, Коротышки, Бомжи и Эльфы. Добавилась куча носимых и разовых шмоток… Короче, много всякого мы пере- и доделали. Основная наша цель была (кроме отсылочек, разумеется) — сделать игру пожёстче.

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

Недостающий элемент

Параллельно с процессом вытёсывания механики мы искали художника для воплощения наших больных фантазий относительно внешнего вида персонажей. В конце этого о-о-о-о-очень долгого пути наш выбор пал на Влада aka Skarislav. Нам очень понравился его стиль, и он был нам по карману, что для проекта, в котором участвует два с половиной землекопа, очень важно. Связавшись с Владом и получив его соглашение поработать, мы снабдили его первыми текстовыми описаниями игровых рас и стали ждать результата. А сами стали рутинно, по кругу, допиливать баланс: шлифанули, распечатали, поиграли, шлифуем дальше…

Финишная прямая

Влад рисовал, мы делали карты, шлифовали баланс и… и, в общем-то, всё. К началу октября всё было готово. Все дополнительные аксессуары были приобретены, карты отрисованы, фишки сделаны… Да, кроме карт мы ещё кое-что добавили от себя. Вообще, полный комплект выглядит так:

  • Карты: 95 карт Дверей и 73 карты Сокровищ;
  • Игровые настольные поля, семь штук — для каждого игрока (да, мы рассчитываем, что наша версия игры будет, как и оригинал, на шесть человек) плюс одно: на задней стороне каждого поля распечатан алгоритм игры, который можно положить и поглядывать на него, даже если играют все шесть человек;
  • Шесть деревянных фишек, вырезанных на лазерном станке, с помощью которых можно указать свой уровень на игровом поле и также пол своего манчкина, за счёт изображения на самой фишке;
  • Один кубик 1d6;
  • Мешочек для кубика и фишек;
  • Правила формата А3 в виде свитка;
  • README (куда ж без него);
  • Коробочка для хранения.

Финал

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

И теперь, с наборами на руках, уставшие, но удовлетворённые от окончания проекта, мы готовы поделиться им с вами! Доброй игры вам)

Привет!

Проект. Генератор Бесконечного плейлиста

Начало

Давным-давно, в далёкой-далёкой галактике... Существовал канал 2×2. Не самая его первая версия, а та — легендарная версия легендарного 2007-го... Как же была гениальна идея собрать сетку вещания из мультов с взрослым рейтингом и/или взрослыми сюжетами! Наравне с «гоблинскими» переводами это стало неотъемлемой частью моей личности и навсегда останется как уникальный опыт.

Но со временем канал ушёл в кабельное вещание, а я — в интернет... И вот в погоне за тем ностальгическим чувством был начат проект «Бесконечный плейлист» aka «Свой 2×2 „с преферансом и куртизанками“».

Идея проста: берём горсть сериалов и шоу, из которых будем собирать свою сетку, с помощью «генератора плейлиста» формируем плейлист и запускаем на медиа-приставке на бесконечное проигрывание. По итогу достаточно переключиться на приставку и начать смотреть плейлист.

Реализация

Отправной точкой написания собственного генератора стало утверждение: какие-то сериалы можно смотреть вразнобой, а какие-то — строго по порядку. Значит, сериалы должны лежать в разных каталогах, например в Random и Straight. Случайно выбираем Random или Straight, заходим внутрь, случайно выбираем сериал, и потом в зависимости от того, какой это сериал («случайный» или «упорядоченный»), выбираем серию — случайно или по порядку. Записываем в плейлист и на новый круг...

Смотрю результат: поначалу всё хорошо, но ближе к середине видно, что «упорядоченные» серии кончились и идут только серии из «случайных» сериалов. Лд, значит, надо добавить веса случайности: если в Random десять сериалов, а в Straight один, то Straight должен выбираться в десять раз реже, чем Random. Делаю, запускаю, смотрю...

Ага, понятно: этот же принцип надо применять и к сериям одного типа, иначе если из тех десяти сериалов в Random во всех, кроме одного, будет по пять серий, а в одном — 50, то эти серии тоже будут образовывать «комки» в плейлисте. Переписываю, запускаю, смотрю...

Кайф, всё работает. Но хочется ещё одного: если серия разбита на части, то хочется посмотреть всю «серию» целиком, неважно, Random это или Straight. Так у некоторых серий в названии в конце появились приписки вида (Part 1), (Part 2), (Part 3) и т. д.

Финал

На этом пока всё. Проект выложен в открытый доступ.

Привет!