Русский
Русский
English
Статистика
Реклама

Хобби

Шедевры мирового моддинга

13.04.2021 18:11:50 | Автор: admin
Много лет моим главным увлечением был моддинг компьютеров. Я следил за всеми новинками, помогал вести тематические ресурсы, да и сам создал несколько работ (одну из них даже можно найти на Хабре).

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



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

Моя подборка максимально субъективна, и в неё, конечно, вошло далеко не всё, о чём стоило бы рассказать. Но если затея вам понравится, обязательно будут и следующие выпуски. Итак, поехали!

1. Pyramid


Автор: Gup (Henk Hamers)
Год: 2010
Ворклог



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



2. FuG-01/ET


Автор: Sheyr (Marcin Krup)
Год: 2005
Ворклог



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



Небольшое интервью с автором на русском языке

3. Recycle Your Computer


Автор: BeWize (Алексей Чистов)
Год: 2004
Ворклог



Когда несколько лет назад появился новый Mac Pro в цилиндрическом корпусе, только ленивый не пошутил, что он похож на мусорное ведро. Но всё новое это хорошо забытое старое! Необычный корпус, изготовленный из самой настоящей корзины для бумаг, занял первое место в конкурсе журнала Домашний ПК и породил немало подражателей. Опять же, никаких проблем с отводом нагретого воздуха



Фоторепортаж с выставки

4. The Weapon of Mass Destruction


Автор: G-gnome (Peter Dickinson)
Год: 2005
Ворклог



Это самая настоящая бомба как по внешнему виду, так и по эффекту, который она произвела в моддинг-сообществе. Обязательно посмотрите ворклог, благо в нём сохранились фотографии. Это просто гимн металлообработке.



Примечательно, что многие детали были изготовлены вручную.



5. Zenith Antique 5-S-29 Radio


Автор: Gary Voigt
Год: 2010
Ворклог



Внимание, внимание! Говорит Нью-Йорк! Работают все радиостанции Соединённых Штатов Америки!.. Возможно, вы подумали, что перед вами компьютер, встроенный в старинный радиоприёмник. Это не так: ни одна историческая вещь при создании данного мода не пострадала. Автор с нуля изготовил копию понравившейся ему модели ретро-радио, да ещё и ухитрился разместить внутри мощный компьютер с системой водяного охлаждения. Такому подходу можно только аплодировать.



6. Cosmos Cruizer


Автор: Boddaker (Brian Carter)
Год: 2015
Ворклог



Это самая свежая работа в моей подборке, но её автор очень уважаемый моддер старой школы. На этот раз он взял за основу корпус Cooler Master Cosmos II и превратил его в подобие автомобиля в стиле хот-род. Из стеклоткани были смоделированы новые боковые стенки, благодаря которым граница между наружной и внутренней частями корпуса стирается.



7. Orac


Автор: G-gnome (Peter Dickinson)
Год: 2004
Ворклог



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



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



Авторский рендер:


Ворклог на русском языке

8. Fire Sound System


Автор: Strannik (Алексей Леонтьев)
Год: 2008



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



9. Grey Tower


Автор: Grizly
Год: 2011
Ворклог



Ещё одна интересная работа от нашего соотечественника. Проект выполнен в нетипичном для моддинга стиле ар-деко и напоминает американские небоскрёбы 30-х годов. Качество изготовления замечательное, несмотря на то, что это первый корпус автора.



10. Project Mars City


Автор: Crimson Sky
Год: 2007
Ворклог



За десятилетия, прошедшие с момента выхода первого Doom, было создано множество кейсмодов в стиле этой культовой игры. Но непревзойдённым по сей день остаётся шедевр от мастера Crimson Sky.



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



Думаю, не преувеличу, если скажу, что история моддинга делится на два периода до Project Mars City и после.



Заключение


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

Просто, мне кажется, сегодня уже сформировался некий канон, и большинство проектов похожи друг на друга. А вот конец 2000-х и начало 2010-х это было время безудержного полёта фантазии и смелых экспериментов. Потому многие тогдашние работы способны удивить и сегодня. А какие моддинг-проекты больше всего нравятся вам?

Подробнее..

Иван Чашкин Мне нравится, что OpenStreetMap это открытые данные, которые доступны всем и всегда

17.06.2020 12:21:27 | Автор: admin

Иван Чашкин web-программист и владелец небольшого интернет-магазина из Нижнего Новгорода. Но после работы он волонтер. Причем в абсолютно разных проектах: он и куратор Добрых крышечек в своем городе и опытный картограф OSM, который сделал несколько интересных инструментов. Почему он кайфует от JOSM, зачем надо отмечать подъезды и как лучше всего это сделать обо всем этом он рассказал в интервью.

Когда и как вы познакомились с проектом OpenStreetMap?

10-15 лет назад был проект Пробковорот, который строил карту пробок. Я им активно пользовался. И то ли он в какой-то момент перешел на OSM, то ли сразу его использовал. Но вот через это приложение я и узнал про существование OSM.

Почему вы начали редактировать карту в OSM? Как это случилось?

Незадолго до того, как я узнал про OSM, у меня была мысль сделать свою навигационную программу, так как тогда для Windows CE ничего подобного не было. Я стал интересоваться картографией и изучать соответствующие сервисы. Не знаю почему, но уже на этом этапе я стал собирать GPS-треки улиц своего города. В то время я жил в небольшом городке Воронежской области и обошел практически все его улицы. Кстати, он тогда был весьма плохо отрисован даже в Яндекс.Картах буквально пару улиц и всё. И представьте мою радость, когда я узнал про OSM и стал это белое пятно превращать в плотную сеть улиц, домов и пр. Тут-то мне и пригодились ранее собранные треки. Буквально на твоих глазах пустое место превращается в нормальную карту, а потом ты можешь загрузить всё это в навигатор и построить маршрут прямо до своего дома. Тогда это было чем-то невероятным.

Сложно ли вам было влиться в проект, изучить его теги, структуру, архитектуру?

Нет, не сложно, так как я увлекаюсь программированием. По мне так, OSM спроектирован достаточно логично. К тому же, есть WikiOSM, где все подробно написано практически о каждом теге. Если чего-то нет на русском, то это точно есть на английском языке. Если же все равно остались вопросы, всегда можно зайти на форум и попытать его обитателей, которые сразу же подскажут направление.



Сейчас продолжаете картографировать?

Продолжаю, но, в основном, отмечаю подъезды с номерами квартир, иногда магазины, а также, если иду или еду по незнакомой для меня территории и вижу какие-то интересные POI или нестандартное дорожное ограничение, то ставлю точку в навигаторе с комментарием. Потом уже дома, когда доходят руки, сверяюсь с OSM и вношу если необходимо правки. Помимо этого, если еду куда-то далеко или когда бываю в небольших деревнях, стараюсь всегда записывать GPS-треки, а после загружать их в OSM, чтобы потом по ним можно было выровнять спутниковые карты. А вообще есть идея сделать сервис, который бы показывал, где треков нет или они уже устарели и неплохо бы съездить туда ещё разок.

Как вы картографируете? Поделитесь своими секретами? Какие используете программы, как собираете информацию и пр.

Сейчас много правок вношу через мобильный навигатор Maps.Me. Он позволяет делать простейшие правки, в том числе оставлять заметки. Иногда использую Keypad-Mapper_3 это мобильное приложение, с помощью которого удобно собирать информацию, а именно номера домов. Треки пишу в OSM Tracker, когда это делаю, параллельно запускаю приложение Tower Collector, которое сопоставляется координаты с сигналом сотовой связи для проекта OpenCellId. Также как-то пробовал снимать панорамы улиц для Mapillary и OpenStreetCam, прикольная штука. Рекомендую. Неплохо так упрощает картирование.

Если же возникает желание отрисовать какую-то большую территорию, по-старинке распечатываю обходной лист и иду в поля: хожу, например, по дворам, смотрю их устройство и делаю пометки ручкой на листочке. Потом дома неспешно открываю JOSM и начинаю рисовать Когда так ходишь, нередко люди тебя принимают за какую-то важную персону, которая что-то проверяет, и начинают задавать странные вопросы.

Была задумка сделать простенький онлайн-редактор для быстрого внесения данных с полей, но пока до реализации не дошли руки.

Все-таки, почему подъезды?

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

К тому же, их достаточно просто отмечать: идёшь по улице и записываешь с табличек номера подъездов и квартир в них. Обычно я это делаю через Maps.Me: ставлю в нем маркер и делаю к нему подпись вида 3:21-40 это означает, что здесь находится подъезд 3, в котором располагаются квартиры с 21 по 40. Когда дом более-менее стандартный, то можно записывать только последнее число, например, 1:-20, -40, 3:-60 и т.д. Сейчас мне также периодически приходится ездить развозить заказы по адресам и если есть номера квартир в подъезде, то сразу можно построить маршрут к финишу и даже приблизительно прикинуть этаж квартиры. Кстати, недавно мне пришла мысль попробовать сделать геокодер, который бы по адресу выдавал бы координаты места с точностью до подъезда, сделал небольшой прототип и сейчас тестирую когда есть время.



Вы автор многих полезных валидаторов. Самый известный из которых валидатор подъездов. Ни одна картоакция в сообществе, связанная с номерами подъездов, не обходится без него. Расскажите о них. Как они создавались? Зачем их делали?

Мои инструменты сложно назвать валидаторами, так как они ничто ни с чем не сравнивают. Они всего лишь удобным образом в режиме онлайн показывают какой-то определенный вид информации, который уже хранится в OSM. Почти все они основаны на замечательном сервисе Overpass Turbo, благодаря которому использование OSM в исследовательских целях превратилось просто в праздник. На API этого сервиса и основаны почти все мои инструменты, которые, наверное, правильно было бы назвать другим словом визуализаторы.

Как я выбираю то, что отображать? Исходя из личных потребностей. С чем я часто работаю в OSM или сталкиваюсь в жизни, то под это и делаю очередную версию визуализатора. Начал картировать подъезды сделал инструмент, который их показывает, чтобы понимать, где они еще не отмечены.

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

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

Штабы Навального внёс, когда была президентская кампания. Было интересно посмотреть, сколько их всего по стране. Сейчас половина закрылась, поэтому периодически захожу и сверяю, для этого опять же добавил функцию подсветки на тот случай, если где-то данные различаются. Вертолётные площадки появились после очередного расследования ФБК, по ним прикольно находить большие поместья.

Одна из последних карта границ регионов. Мне на одном сайте потребовалось раскрасить регионы России по цветам. Поискал в интернете, где можно взять координаты, не нашёл. Мне показалось, что эта задача довольно интересная: нужно выгрузить координаты всех регионов и упростить линии, так чтобы было минимум точек. Можно, конечно, ещё немного оптимизировать, но в целом получилось довольно неплохое приближение.

Исходный код всех моих визуализаторов или карт есть на GitHub, в основном это JavaScript, минимум серверной части на PHP и да, если нужно, можно свободно использовать для своих целей.



Что вам нравится в OSM? Что не нравится? Что бы сделали лучше?

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

Мне нравится редактор JOSM. Многие его ругают, а я от него кайфую. Сколько лет в OSM, а до сих пор узнаю про него что-то новое, то оказывается, что у него есть эта функция, то другая. К тому же, его можно использовать не только для OSM, но и для других ГИС-задач. У него куча плагинов и невероятная гибкость.

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

Не нравится, когда люди не понимают суть проекта и портят данные. Сообщество все равно вернет всё назад, но жалко потраченного времени. Так было с покемонами, так сейчас происходит с переписью населения. Зачем это делать? Ведь эти данные в любом случае удалят.

Что бы сделал лучше? Наверное, я пожелаю разработчикам многочисленных программ, которые есть в мире OSM, терпения, сил и ярких идей. Мы пользуемся вашими наработками почти каждый день и хотим, чтобы они были еще лучше! Например, я очень жду, когда Maps.Me начнет показывать полосы на дорогах и перекрестках. Я их вношу, вношу, а он их всё не показывает.



Какие бы вы порекомендовали проекты, инструменты, приложения, которые как-то связаны с OSM?

Если говорить про мобильные навигаторы, однозначно рекомендую Maps.Me и OsmAnd. Первый вам пригодится, если вы собираетесь путешествовать по городам, второй если вас ждет поход, у него есть крутые функции, например, водная навигация. Недавно видел отличный проект OpenRecycleMap ребята из Пскова сделали карту на базе OSM, где можно найти или добавить контейнер для раздельного сбора мусора.

Что бы вы сказали тому человеку, который сомневается: использовать данные OSM или нет; участвовать в проекте или нет?

OSM это как Википедия или волонтерство. Ты, как и многие другие участники, делаешь свой небольшой вклад в общее дело, а в итоге получается, что проделана большая работа. Лично мне приятно чувствовать себя сопричастным к таким проектам, которыми пользуется большое количество людей. Вроде бы ты в удовольствие что-то делаешь и для себя, а в итоге это приносит пользу всем :-)



Используете данные OSM по работе? В личной жизни?

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

Что скажете в завершении беседы?

Если однажды попробовать поредактировать карту в OSM, то это дело может затянуть всерьёз и надолго. Поэтому будьте осторожны. :-)



Общение российских участников OpenStreetMap идёт в чатике Telegram и на форуме.
Также есть группы в социальных сетях ВКонтакте, Facebook, но в них, в основном, публикуются новости.

Присоединяйтесь к OSM!



Подробнее..

Зачем инженеру начинать танцевать танго

15.02.2021 22:09:28 | Автор: admin

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

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

Ключевое слово тут "социальное". Это не спорт (бывают спортивно-бальные танцы, в программу которых входит латина, и в её числе танго), не фитнес, не фольклорный кружок. Социальные танцы это хобби, которым занимаются миллионы людей во всём мире, и сейчас я вам расскажу, почему это идеальное занятие для аудитории Хабра: инженеров-разработчиков ПО, тестировщиков, SRE и прочих, кого ещё недавно снисходительно называли nerds и geeks (пока наши компании не стали получать миллиардные оценки, а мы сами - становиться миллионерами в те самые 30).

Ещё один важный признак социальных танцев они танцуются в парах, где есть роли ведущего и ведомого, leader и follower (вот во что, кстати, надо было переименовывать неполиткорректные master и slave). Пары эти формируются экспромтом: в танго есть понятие кабесео/мирада, когда потенциальные партнёры встречаются взглядами, кивают друг другу, партнёр подходит к партнёрше и приглашает её жестом на танцпол. В других социальных танцах наверное есть свои, более или менее формальные способы договориться о танце. Сами социальные танцы в значительной мере импровизационные, в них, конечно, есть отдельные фигуры и связки, но как именно и в каком порядке их компоновать ведущий в паре решает в процессе танца, исходя из музыки, своего настроения и наличия свободного места на танцполе.

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

Таким образом, типичная неделя ученика в группе социальных танцев состоит из двух групповых уроков по полтора часа и минимум трёх часов самостоятельной практики, без которой уроки практически не имеют смысла: на уроках мы только усваиваем материал, а для механического запоминания требуется его многократное повторение. Помимо уроков и практик вам придётся хотя бы минимально потратиться на одежду и обувь. Со временем вы захотите посещать более дорогие семинары и интенсивы и даже брать частные уроки (я со своим более чем десятилетним стажем продолжаю это делать регулярно), а также покупать или шить на заказ танцевальную "экипировку". Ради чего, спрашивается, такие вложения денег, и, что важнее, времени? И почему именно работникам сферы IT я так настойчиво рекомендую этим заниматься?

В первую очередь, социальные танцы это замечательный способ социализации (каламбур намеренный). На уроках и практиках, а также на милонгах (так называются танго-вечеринки), сальсатеках и вечеринках других танцев встречаются самые разные люди, с которыми вас будут объединять общие интересы, темы для бесед, и это прекрасно как для удовлетворения базовой потребности в общении, так и для заведения новых полезных контактов, а также, last but not least, знакомств с противоположным полом. Женщины в социальных танцах отрываются по полной по части платьев, обуви, причёсок и макияжа: всё, чего им иногда не хватает в повседневной жизни, они могут в полной мере воплотить на танцполе, поэтому с непривычки глаза разбегаются, а пульс учащается до легкой тахикардии. Ритуалы выбора партнёров и партнёрш изрядно напоминают аналогичные гендерные ритуалы флирта и соблазнения, а сам пятнадцатиминутный танец может выразить без слов множество эмоций и помогает узнать друг друга лучше, чем переписки в Тиндере или свидания в кофейнях. Впрочем, перейти от танца к непринуждённой беседе проще простого: напоминаю, работает бар!

Это снимок с настоящей московской милонги, взят с сайта LocalWayЭто снимок с настоящей московской милонги, взят с сайта LocalWay

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

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

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

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

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

На этом я закончу о социальных танцах в целом и перейду к преимуществам именно аргентинского танго.

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

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

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

А это уже фото вашего непокорного слуги в эмоциональный момент танцаА это уже фото вашего непокорного слуги в эмоциональный момент танца

Лично для меня не последнюю роль играет такая штука, как танго-туризм. Аргентинское социальное танго так широко раскинулось по планете, что танцующие тусовки есть практически в любом крупном городе мира, кроме стран, где телесный контакт между малознакомыми людьми считается неэтичным или вообще запрещён. Отправляясь в любую поездку, я кидаю в сумку пару танцевальной обуви, и практически уверен, что если захочу пойти потанцевать без труда найду себе такую возможность, как это много раз бывало в Израиле, на Кипре, в Турции, Греции, Хорватии, Италии, Франции, Испании, Германии, Дании, США, да где только не бывало. До коронавируса по всему миру, и в том числе в России и Беларуси проводились танго-фестивали, включающие как просто милонги, так и мастер-классы маэстро мирового уровня. Это было отличным поводом выбрать место для очередного отпуска: и город посмотреть, и вечером всегда есть чем заняться. Питер, Нижний, Челябинск, Минск, Стамбул, Неаполь, Генуя, Барселона вот только некоторые места, где я посещал отличные эвенты и знакомился с классными людьми.

И напоследок: когда базовые движения затанцованы до автоматизма, а нужные группы мышц постоянно находятся в тонусе, требования к физической форме становятся не такими острыми, как в начале пути. В результате танго можно танцевать и в достаточно преклонном возрасте 60-70 лет, в отличие от остальных социальных танцев, где такое скорее исключение. На милонгах в Аргентине, где танго-культура наиболее жива и интегрирована в общество, не будет сюрпризом встретить танцоров 80 лет и даже старше. Просто посмотрите, как великий Карлос Гавито в почти 60 лет танцует с 35-летней Марселой Дюран под музыку Освальдо Пульезе. Это шоу стало одним из катализаторов моего прихода в танго, а мелодия до сих пор одна из самых любимых:

Теперь у вас, наверное, остался один вопрос: с чего начать свой путь в социальные танцы, как понять, моё это или нет? Если статья вызовет интерес я напишу продолжение об этом и многом другом, что встретится на пути социального танцора, а также поделюсь личным опытом. А пока вместо ссылки на продолжение ссылка на открытый урок, который пройдёт 19 февраля (пятница) в 20:00 в московской студии El Gato Tango в Армянском переулке, где я занимаюсь бльшую часть своей танго-жизни и которую, разумеется, от души рекомендую. Преподаватели расскажут об истории и современности танго, покажут танцевание в разных стилях и под разную музыку, а под конец поставят желающих в пары и покажут несколько простых движений в учебном объятии.

Подробнее..

Как править мозги Mercedes, если играться с программируемыми калькуляторами уже надоело

10.03.2021 16:14:14 | Автор: admin


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



Так сложилось, что я являюсь поклонником автомобилей Mercedes, 10 лет езжу на них и столько же занимаюсь их диагностикой и ремонтом. Сейчас уже можно спуститься в комментарии и написать едкий пассаж. Если вы, конечно же, не обладатель BMW.


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


Близкое знакомство с начинкой моего железного коня случилось у меня весьма рандомно. Когда у меня появился первый старенький Мерседес, мне никто не мог помочь с его ремонтом по электронике. А если нет помощи со стороны, тогда что? Правильно, было решено заниматься всем самому.


Пару лет назад я приобрел дилерский сканер Star Diagnosis Part D3, и тут жизнь заиграла новыми красками. Началось познание блоков управления, такой себе курс молодого бойца по кодированию и программированию, которому вас не научат в Skillbox. Подопытным стал мой W220 S320. Здесь, пожалуй, полезно будет добавить, что несмотря на не самый свежий год выпуска 1999, внутри спрятано около 40 блоков управления и ~ 700 датчиков. Немцы.


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


Дилерский диагностический комплекс MB Star Diagnosis (D3, C4)


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


Решающий аргумент в пользу этого комплекса поддержка online SCN-кодирования. Всем остальным в 2020 году Mercedes по доброте души заблокировал online, а offline на новых машинах не работает.


Итак, мой диагностический набор N1: Star Diagnosis Part D3 original.



Этот прибор поддерживает максимальную версию софта 2014 года. Он отлично справляется с любыми машинами, выпущенными до 2014 года. Использую его для всех старых машин, начиная с 1993 года выпуска (ЭБУ PMS, HFM).


Имеется комплект шнуров для подключения по OBD2, кругляк 38 pin и тюльпаны. Софт разворачивается на старом ноутбуке Dell Latitude D630 на SSD 240Gb под дремучей Windows XP. В софт входит Xentry, Das, HHTWin, StarFinder, WIS/ASRA, EPC, Vediamo 4.




Следующим был куплен сканер Star Diagnosis C4, он используется для самых новых автомобилей. Это уже не оригинал, а китайский клон, но доработанный по элементной базе и прошивке до оригинала. Софт 2020 года, поддержка всех свежайших автомобилей, но нельзя работать со старыми. Например, на моем W220 не понимает кодировок ЭБУ, а отсутствие HHTWin заставляет вообще забыть о кузовах W124, W202, W210, W140 и т.д.



Софт развернут на Lenovo Thinkpad X220 на SSD 480Gb, под Windows 7 Pro X64. Шнурок только под OBD2, другой тут не требуется.



На этом с hardware всё, рассмотрим используемый софт.


Xentry


Xentry самый свежий софт для работы с Мерседесами и не только. После запуска ПО предлагается выбрать марку автомобиля. Это не мультимарочный сканер, поэтому помимо Мерседеса в списке есть лишь те, с которыми Мерседес так или иначе сотрудничал.



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



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


Когда машина будет выбрана, мультиплексор начнет опрашивать Gateway для сверки VIN-кода и комплектации автомобиля. Если всё проходит успешно, устанавливается связь со всеми блоками управления. Недавно у меня был на диагностике GLK300. Ниже я покажу, как выглядят результаты короткого теста:



Дальше можно зайти в каждый блок и выполнить подробные проверки, активации, кодирование.


Xentry работает с автомобилями старше 2008 года. Если машина старее, ПО автоматом запускает DAS или HHTWin, о них я расскажу ниже.


DAS (Diagnosis ASsistent)


DAS более старый ассистент, используется для авто 2000-2008 года. Все тоже самое по аналогии с Xentry, но старый интерфейс. DAS более понятен и не перегружен опциями, в отличии от Xentry. Но это мое имхо.




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


Примеры:


W220 S320 Long, разбираюсь с АКПП:



W203 C230 Kompressor, просмотр версии блока управления АКПП для дальнейшего включения скрытого режима Agility:



W203 C230 Kompressor: кодирование приборной панели, отключение лимита скорости в 120 км/ч, отключение зуммера ремня, включение информации остатка бензина в литрах:



Кодирования в блоках производится в инженерном меню, где все доступные опции на немецком техническом языке с аббревиатурами Daimler.


HHT (Hand Held Tester)


Самый старый диагностический софт HHTWin для машин с 1993 года по 2000 год. Интерфейс примитивный, но для старых автомобилей его более чем достаточно. Также можно посмотреть действительные значения параметров, сбросить адаптации и закодировать ЭБУ.


Кодирование HFM на авто W202 C36 AMG:





Кодировка блока была заменена с 000051131 (Euro0) на 000051139 (Euro1).
Особо рассказывать про HHTWin больше нечего. Можно лишь добавить, что владельцев старых подключений и соображающих в HHTWin все меньше и меньше. При этом даже старый Мерседес требует того же сброса адаптаций смеси и обучения дроссельной заслонки после замены ДМРВ.


Vediamo


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




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


Vediamo имеет базу .cbf файлов для чтения блоков, и .cff файлов для флеширования блоков.


Пора перейти к вспомогательному софту, без которого тоже тяжко жить.


StarFinder


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







Без схем порой нереально разобраться с неисправностью автомобиля, и Starfinder здесь очень выручает.


WIS/ASRA


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


Вписываем VIN и начинается магия поиска, которая Яндексу и не снилась. У автослесарей существует поговорка в WISе есть всё, а если нет, значит ты не знаешь, где искать.










EPC


EPC программа для поиска запчастей автомобилей Мерседес. Выборка по VIN-коду, поиск по номеру детали, иллюстрации компонентов, сноски на кодировки эбу.






С EPC можно с уверенностью сказать, какие номера деталей ставились на данный авто, а какие ему не подходят.


А теперь практика!


W220 привязка нового блока управления двигателем ME2.0


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


Задача: автомобиль W220 S320 Long с вышедшем из строя блоком управления двигателем ME2.0. После покупки другого блока проведена процедура Renew с помощью программатора, блок управления стал новым. Необходимо выполнить привязку моторного блока с помощью Star Diagnosis к ключу и замку зажигания FBS3.



Подключается ЭБУ и замок к машине, вставляется ключ и включается зажигание. Так как блок обнуленный, двигатель он не заведет, будет раскручивать вентилятор охлаждения двигателя на 100%. Фишку с вентилятора необходимо сдернуть, иначе есть большой шанс высадить аккумулятор и просадками превратить блок или ключ в кирпичи.




Далее подключается Star Diagnosis, выбирается авто, проводится короткий тест всех блоков и переход в блок управления двигателем.






Ввод в эксплуатацию это есть не что иное, как привязка блока. Дальше DAS предлагает интерактивные шаги.



По F2 запускаем процесс и вводим VIN от автомобиля:




На выбор предлагаются 4 кодировки: EURO3 + дистроник, EURO3, кодировка стран третьего мира + дистроник, кодировка стран третьего мира. Я выбираю последнюю, так как дистроника нет, страны третьего мира нужны для исключения из смеси задних кислородных датчиков, так называемое недоEURO2.


Дальше провожу инициализацию FBS3.




Сбрасываю адаптации в ноль.



Следующий шаг выполнение жесткой привязки и блокировки ЭБУ.





И Финиш. Теперь автомобиль можно заводить. Получился комплект запуска для W220 из ключа, замка и моторного блока.



Но в ЭБУ будут всегда присутствовать ошибки по подогреву задних кислородных датчиков и продувке катализаторов, потому что кодировка третьих стран не исключает их из диагностики. Вот тут мне поможет Vediamo.


Для запуска Vediamo необходимо закрыть DAS. Выбираю из списка .cfb файлов ME2.0, подключаюсь к блоку.



Далее запускаю функцию для разрешения записи в блок. Теперь можно переходить в вариантное кодирование.




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


Контрольной суммы в ME2.0 нет, поэтому считать не придется. На этом финиш.


Диагностика подогрева задних кислородных датчиков и продувки катализаторов больше беспокоить не будет.


В качестве заключения


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


Готов писать ещё, если пост найдет отклик у аудитории Хабра.

Подробнее..

Декоративная подсветка лестницы. Часть вторая. Программная

06.05.2021 12:20:25 | Автор: admin

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

Среда разработки

Пусть меня закидают грязными тряпками, но тут для меня однозначно лучшая - Keil uVision (4)5. Эта одна из самых мощных IDE для большого количества камней. Я даже не буду агитировать за нее и описывать все преимущества, поскольку мое мнение в данном вопросе крайне предвзято. Просто я давно работаю с этой IDE и она мне нравится. Самый большой ее минус - она платная и стоит очень конских денег. Но только не в данном случае. На наше счастье у Keil есть демо режим с ограничением в 32Кб. А в LPC11C14 всего 32Кб! Получается для этого камня можно вполне легально и полноценно использовать этот мощный инструмент! Достаточно скачать его с официального сайта. Заполняем простую анкету и получаем ссылку на скачку.

Остался открытым вопрос работы с "железом". Самый удобный - это использовать заводской программатор. Keil поддерживает большое количество отладочных систем и JTAG адаптеров. Такой подход позволит вести полноценную отладку проекта. А что делать, если нет отладчика\программатора и требуется только прошить контроллер? А на этот случай есть замечательная утилита Flash Magic, которая позволяет оживить устройство, используя вшитый в ARM загрузчик. Данная утилита работает только с контроллерами NXP. Загрузка происходит через UART. Эта замечательная прога не раз выручала меня в командировках, когда под рукой не было программатора или он выходил из строя. Замечу, что все необходимые сигналы у девайса уже выведены на разъем для программирования. Ссылка для скачивания Flash Magic здесь.

Сборка платы

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

Пустышки на столеПустышки на столе

Монтаж не заставил себя долго ждать и вот что получилось в результате:

Плата смонтированаПлата смонтирована

Далее была написана простенькая тестовая программка для проверки всех основных узлов платы. Как обычно пишется в этих случаях - при правильной сборке из исправных компонентов должна заработать сразу. Должна - заработала!

Подготовка софта

По началу тут было всё относительно просто. Пишем\адаптируем все необходимые драйверы для периферии, а именно:

  • драйвер датчика освещенности MAX44009EDT

  • драйвер датчика расстояния VL53L0X

  • драйвер управления адресной лентой

  • драйвер CAN интерфейса

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

Тестовое включениеТестовое включение

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

Здесь хотел сделать небольшое техническое отступление, поскольку хронологически событие, с которым оно связано, именно здесь и наступило. Я раньше не работал с компонентами из ближайшего магазина и цели максимально снизить стоимость у меня на работе не стоит. Спрос идет за качество. А тут я в полной мере ощутил что значит "китайское электричество до конца не изучено". Просто все работало - работало, а в один не очень прекрасный день вдруг перестало. Причина была выявлена очень быстро. Сгорел линейный стабилизатор AMS1117-5.0. И не просто сгорел сам и все, а прикинулся перемычкой и утащил с собой всех, кто на него надеялся. Цензурных слов у меня в тот момент не было. Я, как человек, привыкший доверять техническому описанию на компоненты не мог понять, что не так. Стабилизатор работал в штатном режиме. А фраза из описания "The AMS1117 series have internal power and thermal limiting circuitry designed to protect the device under overload conditions" уже была похожа на издевку. Немного полазив по просторам инета я понял, что не у меня одного такие проблемы с этим стабилизатором. А что вы хотите? Дешево! Какой спрос? Короче, не имея никакого желания заново перепаивать половину схемы я поставил годами проверенный вариант - LM1117-5.0 (кстати, не в Чип-Дипе купленный). На мое счастье он встал на плату как родной.

Ну да ладно, плата восстановлена, можно двигаться дальше.

И тут наступил какой-то творческий ступор. А что дальше? Есть железо, на котором можно сделать много разных эффектов. А что делать конкретно? Можно просто включать монотонную подсветку (неинтересно и скучно), можно поиграть с цветами (пестрота быстро надоест), можно организовать необычные динамические сцены. Много чего можно, надо на чем-то остановиться. Здесь главное не переборщить с творчеством!

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

  • в темноте светится дежурная подсветка (первая ступень)

  • при пересечении датчика плавно разгорается центральная полоса подсветки вдоль всего пролета лестницы (видим линию по центру вдоль пролета)

  • как только линия вдоль пролета разгорелась, она разделяется на две, которые расходятся в стороны (посадочные огни вдоль полосы)

  • между этими огнями начинает плавно по очереди разгораться подсветка ступеней

Это описание касается только стадии включения. Гашение ступеней можно сделать аналогично, только в обратную сторону или просто плавно погасить.

Что-же потребуется для реализации?

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

Перемычки из витой пары между фрагментами (ступенями)Перемычки из витой пары между фрагментами (ступенями)

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

Логическая организация ступенейЛогическая организация ступеней

Кроме этого необходимо не забыть, что потребление сего чуда достаточно большое и питание каждого фрагмента (ступени) желательно сделать индивидуальным.

Для того, чтобы проще было "рисовать" на таком "экране" и не требовалось каждый раз вычислять положение нужной LED-точки в программе подготавливается массив, содержащий "карту" их расположения:

// создание карты светодиодов (см. файл LED-карты)void CREATE_LEDS_MAP (void){static const uint8_t stepPerStair = STAIRS_NUM;static const uint8_t ledsPerStep = LEDGROUPS_FOR_STAIR;for (uint8_t step = 0; step < stepPerStair; step++){for (uint8_t led = 0; led < ledsPerStep; led++){if (step % 2 == 0){LedMap[led][step] = ((step) * ledsPerStep) + led + 1;            }            else            {LedMap[led][step] = ((step + 1) * ledsPerStep) - led;            }        }    }}

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

Не обращайте внимание на внешний вид ступени - это временный вариант Не обращайте внимание на внешний вид ступени - это временный вариант

В качестве заключения

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

Печатная плата

Программа

P.S. Если у кого-то будет желание доделать или внести что-то свое могу отдать два комплекта пустышек (по комплекту на лестницу) и процы к ним (как помните, у меня их много).

Подробнее..

Легко ли быть рок-звездой, если ты IT-шник и почему вам тоже полезно заниматься музыкой

22.03.2021 12:19:24 | Автор: admin

Их было шестеро - барабанщик, басист, клавишник, гитарист, баянист и человек с татуировками. Как-то так начинался бы фильм о нас, о музыкальной группе Sun-Techniki.

Вы, возможно, скажете ШТА?! Я точно на Хабре? Причём тут какой-то фильм о музыкальных сантехниках?

Да, это Хабр, и это рассказ про музыкальную группу, состоящую из сотрудников одной продуктовой IT-компании.

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

Кратко о нас: мы не профессионалы в музыке, мы профессионалы в разработке софта. Наш софт обслуживает 6% активных веб-сайтов мира (согласно Netcraft), а наша группа выступает на корпоративах в качестве хедлайнеров и за восемь выступлений мы подготовили и сыграли без малого сорок каверов. На каждое выступление мы готовим новую программу, при этом текст часто переделывается так, чтобы отражать тему корпоратива и события в жизни компании. В поддержку выступления идут слайды, которые крутит наш слайд-жокей.

Рассказ получился объёмным, поэтому без оглавления никуда:

  1. Старт проекта / Прикидываем программу выступления

  2. Управление проектом / Дисциплина бьёт талант

  3. Прототип / Щупаем номера

  4. MVP (точнее, MAP) / Минимально допустимое выступление

  5. Тестирование, багфиксинг / Гоняем программу, находим места для улучшений

  6. Релиз (раскатка) / Выступление

  7. Ретроспектива

  8. Заключение / Почему вам тоже стоит заниматься музыкой

  9. Бонусы

Вступление закончено, начинаем!


Старт проекта / Прикидываем программу выступления

Дедлайн / Дата выступления

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

Содержание проекта / Треклист

Начинаем мы с кандидатов в треклист выступления. У выступления есть стандартный общий план:

  • выход (что-то пафосное, заряжающее, вызывающее аппетит)

  • разогрев (может быть совмещён с выходом)

  • заполнение (обычно что-то спокойное)

  • набор напряжения (мы называем это ebanukha, что в переводе с суахили означает это воняет, то есть что-то панковское отвязное, может быть треш)

  • финал, в котором должен произойти катарсис и поставлена точка

Пруф про суахилиПруф про суахили

Ресурсы / Кто участвует в выступлении

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

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

Брейншторм

Соответственно, на каждый этап брейнштормятся треки. Кандидатов мы берём как просто из головы, так и из нашего слак-канала, ну и конечно же из бэклога.

Про брейншторм на Хабре писали, например, тут: 15 способов превратить мозговой штурм в результат огонь

Брейншторм у нас не совсем классический - после вброса кандидата мы сразу обсуждаем его. Кандидат отбрасывается если:

  • кто-то против. Достаточно одного голоса.

  • штука очевидно нам не по зубам на текущий момент. Такой кандидат обычно идёт в бэклог - в следующий раз может быть мы будем к нему готовы.

  • вещь никак не сочетается с другими кандидатами или темой (конь-цепцией). Тоже в бэклог.

  • вещь очевидно заметно слабее тех, кто уже есть в кандидатах. Нет смысла тратить на неё время сейчас. В бэклог.

  • вещь очевидно не будет принята аудиторией или другими заинтересованными лицами

Очевидно у нас означает мнение большинства. Мы отлично знаем, что нет ничего очевидного.

Как пример пункта 5 - я всегда хотел на восьмое марта (а лучше на 14 февраля) выпустить кавер на трек Pussy от Rammstein. Моё извращённое чувство юмора считает, что это постирония и очень смешно. Но как Product Manager я понимаю, что core segment аудитории этот пассаж не оценит.

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

Управление проектом / Дисциплина бьёт талант

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

Другое дело релиз концерта. Это проект: тут есть понятный бюджет (наш бюджет - это время, которое мы можем потратить на подготовку), чёткий expected result, жёстко зафиксированная дата, есть неопределённость пути от начала к концу. Поэтому для работы над концертом мы выбираем не гибкие методологии (мы их тоже умеем), а традиционное PMBoK-овское проектное управление.

План (Work Breakdown Structure a.k.a. Иерархическая структура работ)

Ключевые вещи в проектном управлении - это WBS (Work Breakdown Structure), майлстоуны (то есть промежуточные дедлайны), зависимости, ресурсы и управление рисками.

Про проектное управление: PMBoK за 2.5 часа: интервью с Иваном Селиховкиным

Про конкретно WBS: 4 инструмента по полочкам. Управление проектами с WBS, Диаграммой Ганта, CPM и Time-Cost или Преимущества Иерархической Структуры Работ (WBS) для менеджеров ИТ проектов

Про оценку задач: Оценка. Рассчитать и уложиться

Про управление рисками расскажу сам ниже.

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

Капитанские, но, оказывается, не всем очевидные принципы построения WBS:

  • строй WBS справа налево (вот так: <--), то есть:

    • справа напиши результат - концерт готов

    • задай вопрос что мешает считать, что результат достигнут? - номера не готовы, сцена не готова

    • и так рекурсируй до элементарных задач

  • после составления WBS пройди уже слева направо (-->) и на каждую задачу задай вопрос а почему я не могу эту задачу выкинуть?

  • майлстоуны аналогично - справа налево (опять <--). Потому что дедлайн у нас задан заранее

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

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

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

Инструментарий

Мы не используем ничего тяжёлого - нас не так много, проект структурно не такой сложный. Нам хватает каталога в Google Drive на концерт, в этом каталоге несколько документов:

  • тексты и прочие заметки по номерам

  • документ по планам и рискам (в нём несколько секций, в том числе и оперативные - worklog, brainstorm, шорт-лист треков и подобное)

  • чеклист на сам концерт, он же райдер ;)

  • после концерта в каталог добавится документ по ретроспективе

Отдельно, в корне, лежит документ с общим бэклогом.

Пример записи в ворклоге, кое-как нашёл, ибо такие вещи очень динамичны и лишнее потом просто удаляетсяПример записи в ворклоге, кое-как нашёл, ибо такие вещи очень динамичны и лишнее потом просто удаляется

Управление рисками

Отдельно коснусь моей любимой темы - управление рисками. Почему тема любима - потому что она незаслуженно игнорируется очень многими. А ведь это просто и полезно!

Как и обещал, про риски рассказываю прямо здесь, без ссылок.

Алгоритм:

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

  2. У риска оценивается вероятность срабатывания и тяжесть последствий

  3. Риски сортируются по вероятности и тяжести, и в работу берётся N топов в каждой категории. N зависит от бюджета на работу над рисками

  4. Риску прописываются два плана:

    1. План А - что надо сделать для уменьшения вероятности срабатывания риска

    2. План Б - что надо будет сделать для уменьшения тяжести последствий в случае срабатывания риска

Когда у тебя есть такая таблица, то ты мало-мальски готов встретиться с фортуной лицом к лицу, а не как обычно.

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

Для первого риска (участник заболел) предлагаю вам придумать План А и План Б и написать его в комментариях, а про второй (номер не получается) расскажу сам - План Б там вовремя понять, что не прёт и заменить трек на резервный.

Резервный трек отбирается так, чтобы его можно было легко и быстро подготовить. Как вариант резервного трека можно взять старый трек, который мы уже когда-то готовили. Если даже План Б провалился, то есть План Б2 - выкинуть трек вообще и выходить сокращённой программой. Ну либо затащить слабый номер харизмой ;)

Из типичных рисков - плохой звук на площадке. Здесь хорошего Плана Б нет, поэтому в План А (грамотно подготовить площадку и звук на ней) вкладывается довольно много ресурсов, это и выезд на площадку заранее (чтобы можно было перенести площадку в другое место), и найм крутых звуковиков, и несколько саундчеков, и детальнейший чеклист. Но про это ниже.

Из рисков, которые мы не учитывали, но которые сыграли - это выход из строя оборудования. Один раз у нас сломался баян за пять дней до выступления. Сломался жёстко, я не смог его починить. План Б мы выдумали и осуществили очень оперативно - попросили баян взаймы у знакомых. А План А я потом выполнял самостоятельно - купил новый баян.

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

Прототип / Щупаем номера

Кроме каверов на песни мы также пробовали делать каверы на плакаты. Кто не узнал - это Sonne от Rammstein.Кроме каверов на песни мы также пробовали делать каверы на плакаты. Кто не узнал - это Sonne от Rammstein.

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

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

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

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

Это всё и выясняется на прототипировании, или, как мы это называем, на прощупывании.

Очень хорошая привычка - документировать всё что можно. Сколько раз на репетиции во время свободной импровизации были найдены отличные идеи, но к следующей репетиции эти идеи забывались напрочь :( Всё превращать в бумажный документ слишком затратно, но вот записывать репетиции целиком - это просто и в некоторых случаях бесценно!Очень хорошая привычка - документировать всё что можно. Сколько раз на репетиции во время свободной импровизации были найдены отличные идеи, но к следующей репетиции эти идеи забывались напрочь :( Всё превращать в бумажный документ слишком затратно, но вот записывать репетиции целиком - это просто и в некоторых случаях бесценно!

MVP (точнее, MAP) / Минимально допустимое выступление

Из продуктового опыта мы знаем, что лучше всего сделать MVP (Minimum Viable Product), и потом его дободрить. Почему? Тема для отдельной статьи ;)

В нашем случае более правильно говорить не MVP, а MAP - Minimum Awesome Product. Ни нам, ни нашей публике не нужно тухлое выступление, нужно awesome выступление!

Про MVP: MVP: что это такое и как работает? (а тут разбор знаменитой картинки с самокатом: Как определить функционал MVP и влюбить клиента в пилотную версию продукта) и сорри за Medium, но на Хабре не нашёл подходящей статьи: The MVP is dead, long life to the MAP.

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

Вовлечение / Эмоциональная кривая

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

Трёхактная схема, классика.Трёхактная схема, классика.

Отличаемся от других / Фишки номеров

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

Кто услышит тут отсылочку к совершенно другому произведению - пишите в комментах! И отдельное спасибо программе "Соль" за proof of concept участия баяна в этой песне.

UI, UX / Тексты

Мы всегда хотим, чтобы тексты у нас были готовы уже на этапе MVP, но как правило по самым разным причинам у нас это не получается. Практически никогда тексты не были готовы заранее. Не делайте так ;) Тексты - это сложно, это важно, они могут поменять аранжировку (когда выбранная аранжировка плохо поддерживает текст). Делайте тексты как можно раньше.

С IT-продуктами аналогично - нужны фишечки, нужны эмоции и нужны тексты, ибо тексты - это UX. И нужно это как можно раньше, ибо чем раньше найдена проблема, тем дешевле её исправление.

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

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

Тестирование, багфиксинг / Гоняем программу, находим места для улучшений

До этапа MVP ты думаешь, что всё будет классно, вы опять зажжёте, будете прекрасно восприниматься, всё хорошо и всё такое. Но когда MVP по сути готов, происходит скачок требований, и ты начинаешь докапываться до себя. Здесь не то, и тут не так. Это ужасно, с этим нельзя выходить на сцену, это позор! Тут главное не опускать руки, спокойно остановиться, осмотреться и понять, что конкретно нужно доработать.

Product Walkthrough / Прогоны, сценические образы

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

То есть начинается тестирование и багфиксинг. Тяжёлое время, но именно тут продукт становится полноценным, готовым к продакшену.

Как не вспомнить анекдот:

Ветеринар на на приёме у Терапевта:

Терапевт: На что жалуетесь?

Ветеринар: Не, ну так-то каждый может!

Бета / Последние штрихи, препродакшн

В теории продуктового менеджмента где-то здесь нужно привлечь фокус-группу, но мы такой радости лишены, ибо наше выступление должно быть сюрпризом, и все детали держатся в тайне. Так что в нашем HADI-цикле буква D означает данные только изнутри системы, без участия целевой аудитории. Однако к помощи эксперта-критика мы обращаемся - у нас есть специальный человек, который подключается как раз на этапе тестирования. Это наш слайд-жокей.

Про HADI-цикл: Кейс: как ускорить развитие проекта

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

Релиз (раскатка) / Выступление

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

Работа с аутсорсерами / Саундчек

Для концертов нужно концертное оборудование, об аренде которого нужно договориться заранее. Заранее нужно договориться о приезде звуковика, чтобы он настроил всё это. Хороший звуковик стоит дорого, поэтому может быть так, что он нанимается на саунд-чек, а на самом выступлении работает другой звуковик, подешевле. С обоими звуковиками крайне желательно встретиться заранее, чтобы подготовить список оборудования.

О да, это всё должно быть в WBS, о котором я говорил в начале статьи.

Очень важно, нет, не так ОЧЕНЬ ВАЖНО провести нормальный саундчек. Нормальный - это значит прогнать программу несколько раз. В нашем случае программа обычно полчаса, значит, на саундчек нужно три часа. Это не считая монтажа оборудования, который может занимать часа два (иногда и больше).

Это типичная работа с аутсорсерами, со всеми плюсами и минусами. Кто из продуктовых команд и имел такой опыт, вероятно, сейчас смахнули скупую слезу. Да, это может быть сложным и, что самое неприятное, это может быть провальным.

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

Чеклисты

Что позволяет нормально работать с аутсорсерами? Прежде всего это грамотное ТЗ, которое составляется за несколько итераций и является опытом, сыном ошибок трудных. Также хорошей идеей является провести дополнительный саундчек на базе у звукорежа, чтобы он не на бумаге все моменты узнал, а по факту, и заранее.

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

Про ТЗ: Стандарты и шаблоны для ТЗ на разработку ПО

Ретроспектива

Очередной эксперимент - добавили женский вокал, организовав фит с коллегами. В центре в светлой футболке - наш слайд-жокей, он же критик. И не просто критик - эксперт в тяжёлой музыке, автор статей в музыкальные журналы!Очередной эксперимент - добавили женский вокал, организовав фит с коллегами. В центре в светлой футболке - наш слайд-жокей, он же критик. И не просто критик - эксперт в тяжёлой музыке, автор статей в музыкальные журналы!

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

Обычная такая ретроспектива - что было хорошо и что мы будем продолжать делать; что можно улучшить и каким образом.

Обратная связь (ищем Market Product Fit)

Нередко на аудиторию запускается анонимный опросник. Мы пробовали разные форматы - NPS, market product fit, и так далее, я полагаю, тут всё очень индивидуально. Также мы слушаем, что говорят люди, какие фотки и видео они выкладывают в инстаграм, какие видео на нашем канале набирают больше просмотров, ну в общем после релиза происходит этап валидации успеха и анализ произошедшего. Результаты этого анализа используются при подготовке следующего концерта.

Про market product fit: Market Fit или как найти точку G у стартапа

Growth hacking / Щупаем аудиторию быстро

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

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

А на самом деле мы ведь больше для себя это делаем, а не для аудитории. Просто так уж сложилось, что нам с нашей аудиторией по пути. Всем бы продуктам так, да? ;)

Заключение / Почему вам тоже стоит заниматься музыкой

Клавишник группы Sun-Techniki, он же Core Tech Lead.Клавишник группы Sun-Techniki, он же Core Tech Lead.

Может показаться, что всё это очень скучно и очень сложно. Сложно - да, скучно - нет. Я ведь не рассказал про творческую часть, там очень много фана. Само выступление - это чистый фан, чистый адреналин/дофамин/окситоцин/whatever. Иногда ты думаешь - ну ёлки, ну зачем я опять в это ввязался, но эти шестьсот часов подготовки стоят тридцати минут выступления. И тысяча часов тоже были бы адекватной ценой.

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

Так вот, я таки понял, чтобы что.

Средство против выгорания

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

На Хабре про выгорание пишут много, но я бы выделил вот эту статью: Профессиональное выгорание айтишников: 15 ответов психиатра Максима Малявина

Как не выгорать? Это просто (картинка с Тони Роббинсом):

  1. заниматься интересным ненаскучивающим делом

  2. регулярно в этом деле побеждать (получать подкрепление)

  3. работать с удовольствием

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

Музыка - это хороший вариант такого занятия. То есть музыка - это средство против выгорания. А у айтишников в музыке есть преимущество - мы умеем в процессы, у нас есть дисциплина.

Занимайтесь музыкой, выступайте. Не обязательно выступать на площадках - ютуб также отличное место.

Бонусы

Подробнее..

Разработка стековой виртуальной машины и компилятора под неё (часть II)

04.06.2021 20:14:20 | Автор: admin

В первой части Разработка стековой виртуальной машины и компилятора под неё (часть I) сделал свою элементарную стековую виртуальную машину, которая умеет работать со стеком, делать арифметику с целыми числами со знаком, условные переходы и вызовы функций с возвратом. Но так как целью было создать не только виртуальную машину, но и компилятор C подобного языка, пришло время сделать первые шаги в сторону компиляции. Опыта никакого. Буду действовать по разумению.

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

Итак, первый шаг - определиться с типами токенов (интуитивно будем ориентироваться на синтаксис C), символами которые будут отделять токены друг от друга, а также определить структуру для хранения токена (тип, текст токена, длина, строка и столбец в исходном коде).

constexpr char* BLANKS = "\x20\n\t";constexpr char* DELIMETERS = ",;{}[]()=><+-*/&|~^!.";enum class TokenType {NONE = 0, UNKNOWN, IDENTIFIER,CONST_CHAR, CONST_INTEGER, CONST_REAL, CONST_STRING,COMMA, MEMBER_ACCESS, EOS, OP_BRACES, CL_BRACES, OP_BRACKETS, CL_BRACKETS, OP_PARENTHESES, CL_PARENTHESES,BYTE, SHORT, INT, LONG, CHAR, FLOAT, DOUBLE, STRING, IF, ELSE, WHILE, RETURN,ASSIGN, EQUAL, NOT_EQUAL, GREATER, GR_EQUAL, LESS, LS_EQUAL,PLUS, MINUS, MULTIPLY, DIVIDE, AND, OR, XOR, NOT, SHL, SHR,LOGIC_AND, LOGIC_OR, LOGIC_NOT};typedef struct {TokenType type;          char* text;              WORD length;             WORD row;                WORD col;                } Token;

Далее напишем класс для разбора, ключевым методом которого станет parseToTokens(char*). Тут алгоритм простой: идем до разделителя (BLANKS и DELIMETERS), определяем начало и конец токена, классифицируем его и добавляем в вектор (список) токенов. Особые случаи разбора - это отличать целые числа от вещественных, вещественные числа (например, "315.0") отличать от применения оператора доступа к членам структуры/объекта ("obj10.field1"), а также отличать ключевые слова от других идентификаторов.

void VMParser::parseToTokens(const char* sourceCode) {TokenType isNumber = TokenType::UNKNOWN;bool insideString = false;                                         // inside string flagbool isReal = false;                                               // is real number flagsize_t length;                                                     // token length variablechar nextChar;                                                     // next char variablebool blank, delimeter;                                             // blank & delimeter char flagstokens->clear();                                                   // clear tokens vectorrowCounter = 1;                                                    // reset current row counterrowPointer = (char*)sourceCode;                                    // set current row pointer to beginningchar* cursor = (char*)sourceCode;                                  // set cursor to source beginning char* start = cursor;                                              // start new token from cursorchar value = *cursor;                                              // read first char from cursorwhile (value != NULL) {                                            // while not end of stringblank = isBlank(value);                                          // is blank char found?delimeter = isDelimeter(value);                                  // is delimeter found?length = cursor - start;                                         // measure token length    // Diffirentiate real numbers from member access operator '.'isNumber = identifyNumber(start, length - 1);                    // Try to get integer part of real numberisReal = (value=='.' && isNumber==TokenType::CONST_INTEGER);     // Is current token is real numberif ((blank || delimeter) && !insideString && !isReal) {          // if there is token separator                   if (length > 0) pushToken(start, length);                      // if length > 0 push token to vectorif (value == '\n') {                                           // if '\n' found rowCounter++;                                                // increment row counterrowPointer = cursor + 1;                                     // set row beginning pointer}nextChar = *(cursor + 1);                                      // get next char after cursorif (!blank && isDelimeter(nextChar)) {                         // if next char is also delimeterif (pushToken(cursor, 2) == TokenType::UNKNOWN)              // try to push double char delimeter tokenpushToken(cursor, 1);                                      // if not pushed - its single char delimeterelse cursor++;                                               // if double delimeter, increment cursor} else pushToken(cursor, 1);                                   // else push single char delimeterstart = cursor + 1;                                            // calculate next token start pointer}else if (value == '"') insideString = !insideString;             // if '"' char - flip insideString flag else if (insideString && value == '\n') {                        // if '\n' found inside string// TODO warn about parsing error}cursor++;                                                        // increment cursor pointervalue = *cursor;                                                 // read next char}length = cursor - start;                                           // if there is a last tokenif (length > 0) pushToken(start, length);                          // push last token to vector}

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

class VMParser {public:VMParser();~VMParser();void parseToTokens(const char* sourceCode);Token getToken(size_t index);size_t getTokenCount();  private:vector<Token>* tokens;WORD rowCounter;char* rowPointer;  bool isBlank(char value);bool isDelimeter(char value);TokenType pushToken(char* text, size_t length);TokenType getTokenType(char* text, size_t length);TokenType identifyNumber(char* text, size_t length);TokenType identifyKeyword(char* text, size_t length);};

Попробуем используя класс VMParser разобрать строку исходного кода C подобного языка (исходный код бессмысленный, просто набор случайных токенов для проверки разбора):

int main(){    printf ("Wow!");    float a = 365.0 * 10 - 10.0 / 2 + 3;while (1 != 2) {    abc.v1 = 'x';}if (a >= b) return a && b; else a || b; };

В итоге получаем в консоли следующий перечень классифицированных токенов:

Результат разбора исходного кода C подобного языкаРезультат разбора исходного кода C подобного языка

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

Для простоты сначала реализуем компилятор арифметических выражений с целыми числами (приоритет "*" и "/" над "+" и "-" учитывается), без скобок, унарных операций и других важных вещей, в том числе проверки синтаксических ошибок. Разбор выражений напишем вот так:

void VMCompiler::parseExpression(size_t startIndex, VMImage* destImage) {Token tkn;currentToken = startIndex;parseTerm(destImage);tkn = parser->getToken(currentToken);while (tkn.type==TokenType::PLUS || tkn.type==TokenType::MINUS) {  currentToken++;  parseTerm(destImage);  if (tkn.type==TokenType::PLUS) destImage->emit(OP_ADD); else destImage->emit(OP_SUB);  tkn = parser->getToken(currentToken);}}void VMCompiler::parseTerm(VMImage* destImage) {Token tkn;parseFactor(destImage);currentToken++;tkn = parser->getToken(currentToken);while (tkn.type == TokenType::MULTIPLY || tkn.type == TokenType::DIVIDE) {  currentToken++;  parseFactor(destImage);  if (tkn.type == TokenType::MULTIPLY) destImage->emit(OP_MUL); else destImage->emit(OP_DIV);  currentToken++;  tkn = parser->getToken(currentToken);}}void VMCompiler::parseFactor(VMImage* destImage) {Token tkn = parser->getToken(currentToken);char buffer[32];strncpy(buffer, tkn.text, tkn.length);buffer[tkn.length] = 0;destImage->emit(OP_CONST, atoi(buffer));}

Попробуем скормить этому компилятору выражение "3+5*6+2*3+15/5", запускаем компилятор с выводом скомпилированных команд и сразу запускаем виртуальную машину. Ожидаем, что результат вычисления должен остаться на вершине стека - 42.

Ура! Получилось! Первые шаги в сторону компилятора сделаны.

Подробнее..

Разработка стековой виртуальной машины и компилятора под неё (часть III)

20.06.2021 10:05:00 | Автор: admin

По ходу разработки генератора кода для виртуальной машины понял, что виртуальная машина не готова к полноценным вызовам функций, с передачей аргументов и хранением локальных переменных функций. Поэтому её необходимо доработать. А именно, нужно определиться с Соглашением о вызовах (calling convention). Есть много разных вариантов, но конечный выбор за разработчиком. Главное - это обеспечить целостность стека, после вызова.

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

На сегодняшний день, наиболее знакомые мне Соглашения о вызове (calling convention), регулирующее правила передачи аргументов функции, очистки стека после вызова, а также логика хранения локальных переменных - это C declaration (cdecl, x86/64) и pascal. Попробую применить эти знания с небольшими модификациями, а именно без прямого доступа программы к регистрам виртуальной машины (она же всё таки стековая, а не регистровая). Итак, логика будет следующая:

Поясню что происходит. Функция main() вызывает функцию sum() и передаёт ей два аргумента - значение переменной i и константное число 10. Осуществляется передача аргументов путём добавления значений аргументов в стек слева направо (как в pascal). После чего осуществляется вызов функции инструкцией виртуальной машины call, которой указывается адрес вызова и количество передаваемых через стек аргументов - 2.

Дальше команда call должна сделать следующие вещи:
1) сохранить в стек адрес возврата после вызова IP (Instruction Pointer + 1)
2) сохранить в стек значение Frame Pointer (регистр виртуальной машины, которым мы показываем до куда очищать стек после вызова).
3) сохраняем в стек значение Locals Pointer (регистр указывающий на место в стеке где начинаются локальные переменные вызывающей функции).
4) выставить значение Frame Pointer на первый аргумент в стеке, чтобы мы знали докуда очищать стек после завершения выполнения функции.
5) выставить значение Locals Pointer на адрес в стеке сразу после сохранных значение IP, FP, LP.

В свою очередь команда ret должна выполнить действия в обратном порядке:
1) Восстановить из стека предыдущие значения IP, FP, LP.
2) Взять результат выполнения функции с вершины стека.
3) Выставить SP = FP (очистить стек в состояние до вызова).
4) Положить на вершину стека результат выполнения функции.

Так как делаем стековую, а не регистровую виртуальную машину, не хочу давать прямой доступ к регистрам, поэтому доработаем инструкцию CALL / RET, а также добавим четыре дополнительные инструкции LOAD (положить в стек значение локальной переменной с указанным индексом), STORE (взять верхнее значение в стеке и сохранить в локальной переменной с указанным индексом), ARG (добавить в стек значение аргумента функции с указанным индексом), а также DROP - инструкция выбросить из стека верхнее значение. Последняя инструкция DROP нужна для функций значение которых нам не нужно, так как мы не даём прямой доступ к регистрам.

case OP_CALL:a = memory[ip++];      // get call address and increment addressb = memory[ip++];      // get arguments count (argc)b = sp + b;            // calculate new frame pointermemory[--sp] = ip;     // push return address to the stackmemory[--sp] = fp;     // push old Frame pointer to stackmemory[--sp] = lp;     // push old Local variables pointer to stackfp = b;                // set Frame pointer to arguments pointerlp = sp - 1;           // set Local variables pointer after top of a stackip = a;                // jump to call addressbreak;case OP_RET:a = memory[sp++];      // read function return value on top of a stackb = lp;                // save Local variables pointersp = fp;               // set stack pointer to Frame pointer (drop locals)lp = memory[b + 1];    // restore old Local variables pointerfp = memory[b + 2];    // restore old Frame pointerip = memory[b + 3];    // set IP to return addressmemory[--sp] = a;      // save return value on top of a stackbreak;case OP_LOAD:a = memory[ip++];         // read local variable indexb = lp - a;               // calculate local variable addressmemory[--sp] = memory[b]; // push local variable to stackbreak;case OP_STORE:a = memory[ip++];         // read local variable indexb = lp - a;               // calculate local variable addressmemory[b] = memory[sp++]; // pop top of stack to local variablebreak;case OP_ARG:a = memory[ip++];         // read parameter indexb = fp - a - 1;           // calculate parameter addressmemory[--sp] = memory[b]; // push parameter to stackbreak;case OP_DROP:                   // pop and drop value from stacksp++;break;

Скомпилируем код представленный на иллюстрации выше чтобы протестировать как работают новые инструкции CALL, RET, LOAD, STORE, ARG (примечание: syscall 0x21 - это распечатка числа с вершины стека в консоль):

Запустим исполнение этого кода с распечаткой состояния виртуальной машины после выполнения каждой инструкции:

[   0]    iconst  5     IP=2 FP=65535 LP=65534 SP=65534 STACK=[5] -> TOP[   2]    iload   #0    IP=4 FP=65535 LP=65534 SP=65533 STACK=[5,5] -> TOP[   4]    idec          IP=5 FP=65535 LP=65534 SP=65533 STACK=[5,4] -> TOP[   5]    idup          IP=6 FP=65535 LP=65534 SP=65532 STACK=[5,4,4] -> TOP[   6]    istore  #0    IP=8 FP=65535 LP=65534 SP=65533 STACK=[4,4] -> TOP[   8]    idup          IP=9 FP=65535 LP=65534 SP=65532 STACK=[4,4,4] -> TOP[   9]    iconst  10    IP=11 FP=65535 LP=65534 SP=65531 STACK=[4,4,4,10] -> TOP[  11]    call [32], 2  IP=32 FP=65533 LP=65527 SP=65528 STACK=[4,4,4,10,14,65535,65534] -> TOP[  32]    iconst  10    IP=34 FP=65533 LP=65527 SP=65527 STACK=[4,4,4,10,14,65535,65534,10] -> TOP[  34]    iarg    #0    IP=36 FP=65533 LP=65527 SP=65526 STACK=[4,4,4,10,14,65535,65534,10,4] -> TOP[  36]    iarg    #1    IP=38 FP=65533 LP=65527 SP=65525 STACK=[4,4,4,10,14,65535,65534,10,4,10] -> TOP[  38]    iadd          IP=39 FP=65533 LP=65527 SP=65526 STACK=[4,4,4,10,14,65535,65534,10,14] -> TOP[  39]    iload   #0    IP=41 FP=65533 LP=65527 SP=65525 STACK=[4,4,4,10,14,65535,65534,10,14,10] -> TOP[  41]    isub          IP=42 FP=65533 LP=65527 SP=65526 STACK=[4,4,4,10,14,65535,65534,10,4] -> TOP[  42]    ret           IP=14 FP=65535 LP=65534 SP=65532 STACK=[4,4,4] -> TOP[  14]    syscall 0x21  IP=16 FP=65535 LP=65534 SP=65533 STACK=[4,4] -> TOP[  16]    iconst  0     IP=18 FP=65535 LP=65534 SP=65532 STACK=[4,4,0] -> TOP[  18]    icmpjg  [2]   IP=2 FP=65535 LP=65534 SP=65534 STACK=[4] -> TOP[   2]    iload   #0    IP=4 FP=65535 LP=65534 SP=65533 STACK=[4,4] -> TOP[   4]    idec          IP=5 FP=65535 LP=65534 SP=65533 STACK=[4,3] -> TOP[   5]    idup          IP=6 FP=65535 LP=65534 SP=65532 STACK=[4,3,3] -> TOP[   6]    istore  #0    IP=8 FP=65535 LP=65534 SP=65533 STACK=[3,3] -> TOP[   8]    idup          IP=9 FP=65535 LP=65534 SP=65532 STACK=[3,3,3] -> TOP[   9]    iconst  10    IP=11 FP=65535 LP=65534 SP=65531 STACK=[3,3,3,10] -> TOP[  11]    call [32], 2  IP=32 FP=65533 LP=65527 SP=65528 STACK=[3,3,3,10,14,65535,65534] -> TOP[  32]    iconst  10    IP=34 FP=65533 LP=65527 SP=65527 STACK=[3,3,3,10,14,65535,65534,10] -> TOP[  34]    iarg    #0    IP=36 FP=65533 LP=65527 SP=65526 STACK=[3,3,3,10,14,65535,65534,10,3] -> TOP[  36]    iarg    #1    IP=38 FP=65533 LP=65527 SP=65525 STACK=[3,3,3,10,14,65535,65534,10,3,10] -> TOP[  38]    iadd          IP=39 FP=65533 LP=65527 SP=65526 STACK=[3,3,3,10,14,65535,65534,10,13] -> TOP[  39]    iload   #0    IP=41 FP=65533 LP=65527 SP=65525 STACK=[3,3,3,10,14,65535,65534,10,13,10] -> TOP[  41]    isub          IP=42 FP=65533 LP=65527 SP=65526 STACK=[3,3,3,10,14,65535,65534,10,3] -> TOP[  42]    ret           IP=14 FP=65535 LP=65534 SP=65532 STACK=[3,3,3] -> TOP[  14]    syscall 0x21  IP=16 FP=65535 LP=65534 SP=65533 STACK=[3,3] -> TOP[  16]    iconst  0     IP=18 FP=65535 LP=65534 SP=65532 STACK=[3,3,0] -> TOP[  18]    icmpjg  [2]   IP=2 FP=65535 LP=65534 SP=65534 STACK=[3] -> TOP[   2]    iload   #0    IP=4 FP=65535 LP=65534 SP=65533 STACK=[3,3] -> TOP[   4]    idec          IP=5 FP=65535 LP=65534 SP=65533 STACK=[3,2] -> TOP[   5]    idup          IP=6 FP=65535 LP=65534 SP=65532 STACK=[3,2,2] -> TOP[   6]    istore  #0    IP=8 FP=65535 LP=65534 SP=65533 STACK=[2,2] -> TOP[   8]    idup          IP=9 FP=65535 LP=65534 SP=65532 STACK=[2,2,2] -> TOP[   9]    iconst  10    IP=11 FP=65535 LP=65534 SP=65531 STACK=[2,2,2,10] -> TOP[  11]    call [32], 2  IP=32 FP=65533 LP=65527 SP=65528 STACK=[2,2,2,10,14,65535,65534] -> TOP[  32]    iconst  10    IP=34 FP=65533 LP=65527 SP=65527 STACK=[2,2,2,10,14,65535,65534,10] -> TOP[  34]    iarg    #0    IP=36 FP=65533 LP=65527 SP=65526 STACK=[2,2,2,10,14,65535,65534,10,2] -> TOP[  36]    iarg    #1    IP=38 FP=65533 LP=65527 SP=65525 STACK=[2,2,2,10,14,65535,65534,10,2,10] -> TOP[  38]    iadd          IP=39 FP=65533 LP=65527 SP=65526 STACK=[2,2,2,10,14,65535,65534,10,12] -> TOP[  39]    iload   #0    IP=41 FP=65533 LP=65527 SP=65525 STACK=[2,2,2,10,14,65535,65534,10,12,10] -> TOP[  41]    isub          IP=42 FP=65533 LP=65527 SP=65526 STACK=[2,2,2,10,14,65535,65534,10,2] -> TOP[  42]    ret           IP=14 FP=65535 LP=65534 SP=65532 STACK=[2,2,2] -> TOP[  14]    syscall 0x21  IP=16 FP=65535 LP=65534 SP=65533 STACK=[2,2] -> TOP[  16]    iconst  0     IP=18 FP=65535 LP=65534 SP=65532 STACK=[2,2,0] -> TOP[  18]    icmpjg  [2]   IP=2 FP=65535 LP=65534 SP=65534 STACK=[2] -> TOP[   2]    iload   #0    IP=4 FP=65535 LP=65534 SP=65533 STACK=[2,2] -> TOP[   4]    idec          IP=5 FP=65535 LP=65534 SP=65533 STACK=[2,1] -> TOP[   5]    idup          IP=6 FP=65535 LP=65534 SP=65532 STACK=[2,1,1] -> TOP[   6]    istore  #0    IP=8 FP=65535 LP=65534 SP=65533 STACK=[1,1] -> TOP[   8]    idup          IP=9 FP=65535 LP=65534 SP=65532 STACK=[1,1,1] -> TOP[   9]    iconst  10    IP=11 FP=65535 LP=65534 SP=65531 STACK=[1,1,1,10] -> TOP[  11]    call [32], 2  IP=32 FP=65533 LP=65527 SP=65528 STACK=[1,1,1,10,14,65535,65534] -> TOP[  32]    iconst  10    IP=34 FP=65533 LP=65527 SP=65527 STACK=[1,1,1,10,14,65535,65534,10] -> TOP[  34]    iarg    #0    IP=36 FP=65533 LP=65527 SP=65526 STACK=[1,1,1,10,14,65535,65534,10,1] -> TOP[  36]    iarg    #1    IP=38 FP=65533 LP=65527 SP=65525 STACK=[1,1,1,10,14,65535,65534,10,1,10] -> TOP[  38]    iadd          IP=39 FP=65533 LP=65527 SP=65526 STACK=[1,1,1,10,14,65535,65534,10,11] -> TOP[  39]    iload   #0    IP=41 FP=65533 LP=65527 SP=65525 STACK=[1,1,1,10,14,65535,65534,10,11,10] -> TOP[  41]    isub          IP=42 FP=65533 LP=65527 SP=65526 STACK=[1,1,1,10,14,65535,65534,10,1] -> TOP[  42]    ret           IP=14 FP=65535 LP=65534 SP=65532 STACK=[1,1,1] -> TOP[  14]    syscall 0x21  IP=16 FP=65535 LP=65534 SP=65533 STACK=[1,1] -> TOP[  16]    iconst  0     IP=18 FP=65535 LP=65534 SP=65532 STACK=[1,1,0] -> TOP[  18]    icmpjg  [2]   IP=2 FP=65535 LP=65534 SP=65534 STACK=[1] -> TOP[   2]    iload   #0    IP=4 FP=65535 LP=65534 SP=65533 STACK=[1,1] -> TOP[   4]    idec          IP=5 FP=65535 LP=65534 SP=65533 STACK=[1,0] -> TOP[   5]    idup          IP=6 FP=65535 LP=65534 SP=65532 STACK=[1,0,0] -> TOP[   6]    istore  #0    IP=8 FP=65535 LP=65534 SP=65533 STACK=[0,0] -> TOP[   8]    idup          IP=9 FP=65535 LP=65534 SP=65532 STACK=[0,0,0] -> TOP[   9]    iconst  10    IP=11 FP=65535 LP=65534 SP=65531 STACK=[0,0,0,10] -> TOP[  11]    call [32], 2  IP=32 FP=65533 LP=65527 SP=65528 STACK=[0,0,0,10,14,65535,65534] -> TOP[  32]    iconst  10    IP=34 FP=65533 LP=65527 SP=65527 STACK=[0,0,0,10,14,65535,65534,10] -> TOP[  34]    iarg    #0    IP=36 FP=65533 LP=65527 SP=65526 STACK=[0,0,0,10,14,65535,65534,10,0] -> TOP[  36]    iarg    #1    IP=38 FP=65533 LP=65527 SP=65525 STACK=[0,0,0,10,14,65535,65534,10,0,10] -> TOP[  38]    iadd          IP=39 FP=65533 LP=65527 SP=65526 STACK=[0,0,0,10,14,65535,65534,10,10] -> TOP[  39]    iload   #0    IP=41 FP=65533 LP=65527 SP=65525 STACK=[0,0,0,10,14,65535,65534,10,10,10] -> TOP[  41]    isub          IP=42 FP=65533 LP=65527 SP=65526 STACK=[0,0,0,10,14,65535,65534,10,0] -> TOP[  42]    ret           IP=14 FP=65535 LP=65534 SP=65532 STACK=[0,0,0] -> TOP[  14]    syscall 0x21  IP=16 FP=65535 LP=65534 SP=65533 STACK=[0,0] -> TOP[  16]    iconst  0     IP=18 FP=65535 LP=65534 SP=65532 STACK=[0,0,0] -> TOP[  18]    icmpjg  [2]   IP=20 FP=65535 LP=65534 SP=65534 STACK=[0] -> TOP[  20]    ---- halt ----IP=21 FP=65535 LP=65534 SP=65534 STACK=[0] -> TOPEXECUTION TIME: 0.620997s

В консоли данная программа выдает следующее

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

Ура! Это вдохновляет!

Подробнее..

Программист учится рисовать. Дневник Емели

28.12.2020 12:07:24 | Автор: admin
Так получилось, что моим основным хобби на лихой 2020-й год стало освоение ремесла рисования.

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

spoiler
В конце года я остался доволен собой и окончательно понял, что я хотел бы прокачиваться и дальше!


image
Так выглядел мой уровень изобразительных навыков в ноябре предыдущего (2019-го) года

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


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

Февраль


Свой путь я начал не в январе, а уже лишь только в середине февраля. Решил начать с сайта drawabox.com. Выучить основы, некие фундаментальные вещи: движение рукой (рисуем от плеча), четкое рисование гладких ровных линий, кривых, эллипсов, кубов и так далее.

Поглядел уроки Proko на YouTube. Также мне очень нравятся короткие обзорные ролики от CG Speak вряд ли они чему-то учат и набивают руку, это скорее мощные заряды креативности и мотивации.

Март


image

image

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

Программист учится рисовать

Меня как совершенного новичка впечатлили работы человека, решившего прокачать свой скилл с нуля. Рекомендованная книжка Марк Кистлер Вы сможете рисовать через 30 дней была хорошо разрекламирована в посте и я решил попробовать. Книга была скачана, я пошёл практиковаться по её урокам. От drawabox пока отошёл, не знаю пока, насовсем ли, возможно зря.









Апрель


Продолжаю понемножку рисовать по уроку-два-три в неделю по книжке Кистлера. Пришла также заказанная в интернет-магазине бумажная книжка Эндрю Лумис Рисование Фигуры.

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


Далее я еще несколько раз заказывал разное себе по мелочи: бумажные альбомы, обычные листы А4 (бумага для принтера), простые карандаши, ластики.

Также в этом месяце поучавствовал в Ludum Dare 46, где сам же был ответственным за графическую часть. Открыл для себя Krita (раньше уже конечно слышал об этом граф. редакторе, но вот решил освоить его). Стиль спрайтов и анимацию всё изготавливал сам.

Получилось как-то так:




Май (aka Перемены Курса)


По советам с нескольких форумов по тематикам типа С чего начать новичку, были заказаны несколько книжек по рисованию. Начал проходить главы книги Искусство Рисунка за авторством Берт Додсон.

Пробные работы по урокам из книги ниже (ноги автора поста и бутылка алкогольного напитка)





Решил попробовать рисование поз (Figure drawing, gesture drawing). Пробовал по роликам Proko на YouTube. Осознал, насколько я в этом плох, решил что нужно как-то изучить этот вопрос, прокачать этот аспект.

Ужасные попытки в рисование поз прилагаются ниже




Просматривая ролики по Krita, наткнулся на рекламу курсов обучения рисованию персонажей на Одном Популярном Сайте С Курсами TM, подвергся влиянию рекламы и пошел на сайт. Там открыл для себя много крутых курсов по рисованию от Brent Eviston. Там же был курс по Figure Drawing, где художник посоветовал сперва пройти первые базовые курсы от него по рисованию (ну ещё бы, хорошо продает себя, чертяка!). В это время как раз была какая-то удачная акция на платформе, и поддавшись импульсу, я скупил где-то с штук 5 курсов, включая заветный Figure Drawing, тем самым дав себе обещание, прокачать эти области, пройти курсы.


Начал с курса Basic Skills. Пока что всё нравится. Это отработка совсем базовых, но необходимых навыков: рисование контуров, прямых линий, эллипсов, конструирование произвольных форм, держание карандаша, привычка рисования от плеча, не от кисти и так далее.



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





Нашел хорошую подборку статей и обучающих роликов по Krita, откуда открыл для себя потрясающий сайт (и соответствующий канал на YouTube) за авторством Nathan Lovato GDQuest.com. Там есть несколько хороших курсов (серии обучающих и вводных видео на YouTube) по рисованию в Krita.

По итогу по одной идее, которую мне подкинул мой хороший друг я выдал в редакторе Krita вот такого персонажа это шахтер-работяга. Рисовал техникой позаимствованной из вышеописанных обучающих роликов Nathan Lovato.


Скетч-набросок


Финальная работа

Мысли и наблюдения, которые я зафиксировал в мае:
  • Просматривая обучающий ролик Brent Eviston Одном Популярном Сайте С Курсами TM, я подметил некую аналогию в данной фазе рисовки накидывание сперва легких еле-заметных линий, наметки крупных основных форм, с постепенным их уточнением и корректировкой. У меня в голове сама собой выстроилась аналогия из мира программирования декомпозиция, накидывание интерфейсов и API. Последующие фазы это уже имплементации, небольшие подгонки API методов, дополнительные классы и интерфейсы.
  • Я отметил у себя легкие (можно сказать скрытие) боязнь и ступор, когда сел за планшет и открыл Krita. Вот вроде бы посмотрел обучающие ролики, все было понятно, был полон решимости. Но как сел сделать что-нибудь сам, повторить технику, создать свою работу получается полный ступор и страх, некого рода паралич. Похожие чувства были у меня новичка, когда я совершенно не знал информатику, ни одного ЯВУ, не имел никакого опыта в алгоритмах и решении каких-либо алгоритмических задачек.


Июнь


Продолжаю осваивать азы рисования по курсам от Brent Eviston на Одном Популярном Сайте С Курсами TM. Получается попрактиковать где-то 1-2 курсовых дня в неделю из программы курса (курс побит на недели, недели по 5 дней).

Серия изображений с прогрессом по ходу прохождения курса












Смотрю YouTube-ролики Ctrl-Paint, а также пересматриваю классные ролики от GDQuest, стараюсь перенимать оттуда подходы к рисованию ассетов для игр. В целом пытаюсь рисовать с той же техникой и алгоритмом шагов: фаза скетча, фаза обводки и заливки форм (с разбиением частей тела или предмета сразу по слоям), фаза добавления объема путем рисования обводящих линий и теней по краям полученных форм.

Мысли и наблюдения, которые я зафиксировал в июне:
  • Просматривая и повторяя за инструктором в видеокурсах по рисованию объема и форм невольно выстраиваю в голове аналогии с слоями и подсистемами в архитектуре разабатываемого программного обеспечения.



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

    Это мне напоминает процесс, когда во время разработки, мы стараемся мыслить в один момент времени на каком-то одном уровне: 1. уровень API 2. уровень хранения данных (то, как мы побьем данные на модели и схемы, определим хранилище и так далее) 3. уровень протоколов и характеров взаимодействия (сетевые протоколы, очереди, гарантии доставки и прочее). 4. способы доставки и развертывания сервиса etc.


Июль


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

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

Продолжаю осваивать цикл курсов Art & Science, очень уж он мне по душе.

В этот месяц я ударными темпами проходил курсы Динамичные штрихи (техника применения штрихов для передачи глубины, расстояния, детализации рисунка.), Пропорции и измерения, а также Тени.

Работа с применением динамичных штрихов, кажется одно из финальных заданий курса. Сюжет на свободную тему (сделано на основе реального фото с собственного смартфона; но не срисовано!). Думаю, по рисунку вполне можно угадать город и даже более-менее вычислить обзорную точку.


Лист бумаги лежит на импровизированном самодельном мольберте, сделанном из картонной коробки

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





Упражнение по отработке динамичных штрихов не глядя на холст рисуем по внутренним ощущениям сложный контур, например кисти рук

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

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

Также я еще дозаказал себе комплект альбомов формата А4 для рисования со спиралью и еще набор цветных карандашей, 18 цветов. Думаю, такого набора цветов мне хватит за глаза. Планирую использовать синий, голубой, бурый, красный.

А ниже работы в Krita, намалёванные в июле в Krita

Это хаотичное скопление клякс почему-то очень радует меня. Я сохранил работу. Как думаете, за сколько такое пойдет на торги на Sotheby's? ;)


Образ появился еще пару месяцев назад, случайно, когда баловался на бумаге. Теперь наконец-то реализовал его с помощью планшета в графическом редакторе.
Можно углядеть здесь применение инструмента зеркалирования в Krita.



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


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

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

    Я с усмешкой подметил, как я не очень хорош во временных оценках задач то, сколько та или иная задачка на имплементацию функционала или фикс бага занимает по задумке, и то, сколько она отъела в реальности порой очень разные числа. У меня она колебалось с перекосом в перерасход часов, от 1.2 до 2-3 раз.

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


    Поверьте мне, эти пропорции чрезвычайно кривые как мои временные оценки задач в JIRA.


Август


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

Также за август немного попрактиковался с планшетом.
Получились такие пара работ:


Развитие наброска, сделанного в блокноте несколько месяцев назад


Собственно тот самый набросок

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



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



В Августе помимо практики смотрел и впитывал мастерство Давида Ревуа по его роликам. В основном смотрел записи стримов, где он делает пейзажные композиции. Хотел бы я иметь такой талант!

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













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

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


    Каждый отдельный слой сам по себе скопление странных пятен..


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


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

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



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



Сентябрь


Решил сразу на грядущий месяц выставить себе какие-то цели. Некие ориентиры, TODO-ки. Запланировать спринт, если хотите.

Итак, что я хотел бы иметь в конце месяца:
  1. Несколько пейзажных работ, сделанных в графич. редакторе. 2-3 сюжета будет здорово. Любые попытки уже хорошо.
  2. Продвинуться дальше в курсе рисования поз. Пройти в курсе хотя бы 5-6 уроков.
  3. Сделать какую-нибудь анимацию в Krita. Скажем, 5-секундный простой сюжет.


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

В итоге из запланированного удалось выполнить только пункт 2. Продвинуться дальше в курсе рисования поз. Пройти в курсе хотя бы 5-6 уроков. В виду загруженности бытовыми хлопотами, в сентябре мало удалось позаниматься прокачкой своих арт-скиллов.

Ниже то, что получилось во время обучения рисованию поз.









Первые уроки, да и вообще сам подход к рисованию поз ставят намеренные жесткие временные рамки в 30-60-90 секунд, бывают сессии до 3-5 минут, где уже можно разгуляться и уточнить свою позу, добавить каких-то деталей, теней и изюминок своей работе.

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

Октябрь


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

Ноябрь


Продолжил (вернее возобновил) курс рисования поз на Udemy. Из-за перерыва решил начать курс по позам с самых первых уроков, с самых азов первичные линии, вспомогательные линии, формирование корпуса, руки и так далее.

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


Вид моей доски в Pinterest с понравившимся артом. Назвал доску Насмотренность

Просматриваю YouTube ролики с ускоренным процессом рисования пейзажных сюжетов. Очень четко подметил, как художники активно и мудро используют слои. Впрочем, есть товарищи, которые все делают на одном слое, постепенно уменьшая кисть и меняя её. От крупных мазков на 200-300 пикселей толщиной до тонкой хирургической точечной рисовки деталей в 30-70 пикселей, при этом сам размер холста идет у художника в 3000 на 4000 пикселей, иногда и больше, чтобы было где размахнуться такими большими радиусами кистей.


Пример работы над пейзажным сюжетом в Krita с YouTube ускоренно заснятый процесс. Лайфхак: ставим скорость на 0.25 или 0.5 и получаем практически бесплатный туториал!

Прогресс за ноябрь по освоению поз представлен ниже. Надо отметить, что здесь к последним урокам автором курсов выделяются довольно длительные отрезки времени на позу по 8-12 минут, что уже непозволительная роскошь, но конец курса уже старается подать дополнительные аспекты немного анатомии, тени, попытка соблюдать пропорции.













А вот наконец-то худо-бедно реализованные в Krita попытки в пейзажные композиции.


Попытка изобразить жаркую пустыню или каньон. Кажется, я даже не определился, что хочу показать зрителю. Оттого такая каша и чепуха на холсте.


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


То же самое подземелье, без цветов, только контуры.

Ниже моя попытка изобразить облака


И наконец, ниже снова, попытка выстроить композицию замок около-феодальных времен в безжизненной инопланетной пустыне.


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

Мысли и наблюдения, которые я зафиксировал в ноябре:
  1. То что я понял и усвоил Слои в Digital Арт-е решают. Это верный способ декомпозировать свою работу. Также в каждом отдельном слое очень удобно работать с конкретной группой объектов, изолированно от других. Это как раз то самое, что даёт нам грамотная архитектура, когда система очень хорошо разбита по слоям (пакеты, уровень сервисов, уровень хранения данных, уровень представления, уровень контроллеров и т.д.), каждый слой можно модифицировать практически безболезненно и в отрыве от других, не затрагивая целиком всю систему.
  2. Про общение с сообществами и критику. Только сейчас осознал и поймал себя на мысли, что еще ни разу не выкладывал свои работы на всеобщий суд коллег по цеху (то есть тех, кто параллельно со мной осваивает науку рисования или уже прокачан в ней). Пара выкладок в телеграм чате по Krita пожалуй не в счет. Я кидал свои работы родным и друзьям, скорее чтобы получить какое-то одобрение или похвалу, это точно было не фидбека и полезной критики ради, я уверен. Зачастую так и было, лишь пара человек подмечали и честно писали некоторые огрехи. На профессиональные форумы и сообщества я пока что так и не ходил и не выкладывал там свои поделки. Думаю, это защитная функция организма. Он очень боится критики и быть уязвленным.

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

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

    Могу предположить, что у людей из арт-мира, уже умеющих в рисование, музыку, сочинительство, которые начали постигать науку программирования есть схожие страхи они боятся делиться своими сниппетами с кодом, но смело показывают черновые наброски рисунков, какие-то свои полу-готовые работы.
  3. Это может быть для кого-то откровением, но многие уроки для одного графического редактора с некоторыми адаптациями и небольшими дополнительными усилиями можно смело проходить в другом редакторе. Так, мой выбор это Krita. Но интернет сплошь завален хорошими курсами и обучающими видео именно по ФШ. Не беда, я просто искал какие-то близкие аналоги тех же кистей или инструментов в Krita, и просто старался воспроизвести предлагаемую технику или повторить нужную картинку.


  4. Еще я понял, что моя проблема в том, что я не знаю, в каких направлениях в рисунке я хочу развиваться. Пейзажи, персонажи, анимация, окружение, ассеты для игр мне одинаково интересно всё. Думаю, такое распыление как раз не пошло мне на пользу, а размазало мои усилия по прокачке тех или иных навыков, уже под конец года. С тем же программированием все не так я знаю, какие темы мне совершенно не интересны и я спокойно или порой намеренно обхожу их стороной и не трачу усилия на их изучение или по крайней мере глубокое понимание. Например, ML, Искусcтвенный интеллект, какие-то вещи из мира front-end-разработки я не хочу развиваться в этих областях и четко направляю свои усилия в другие области ИТ.


Декабрь


Почти завершил курс рисования поз, но осознал, что материал точно не освоен на все 100%. Есть очень много огрехов и совершенно плохих мест в рисунке (начиная от пропорций, заканчивая сильно искаженной позой и неправильной формой отдельных частей тела).










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


Назвал картинку Первобытный Страх

В Krita я делал небольшие разогревочные (warmup) сессии по рисованию поз. Здесь рекомендую полезный сайт, заточенный специально под эти упражнения: Line Of Action











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





Пока получился вот такой набросок моего персонажа, он еще будет дорабатываться, но уже скорее всего в следующем году. Вдохновение и некоторые фишки я брал со скетчей великого мультфильма от любимейшей анимационной студии Pixar Bug's Life, плюс немного скетчей поваров и шефов от других авторов, анатомических рисунков жуков. Процесс работы выглядела так в левой части экрана открыты и разложены ровным коллажем несколько картинок, скачанных с Pinterest, в правой части экрана графический редактор с белым холстом в отдаленном масштабе, куда штрихами набрасывались основные формы жучка от крупных и длинных линий к мелким штрихам и деталям.



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

Мысли и наблюдения, которые я зафиксировал в декабре:
  • В сети есть валом диаграмм и Mind Map-ов с планом развития навыков для освоения профессии Front-End разработчика, Back-End разаботчика и так далее. Похожих толковых и развёрнутых планов для того, чтобы стать скажем классным digital artist-ом, я так и не смог найти, но скорее всего плохо искал. Был бы очень рад, если в комментариях поделятся подобными диаграммками и планами обучения.


Немного фактов и статистики


  1. Сточил примерно 2 простых карандаша и половину цветного.
  2. Была изрисована примерно 1 целая пачка листов А4 для принтера и где-то 40 листов альбома для рисования.
  3. Посмотрел порядка 55 роликов по рисованию на YouTube (примерно 16 часов)
  4. Провел примерно 80+ часов за данным хобби (сюда не входит вдумчивый и не очень просмотр роликов с YouTube)
  5. На моё хобби было потрачено примерно 12 734 рубля.
  6. Было приобретено 3 книги по изобразительному искусству. Ни одну из них в итоге я не прочел до конца, не применил на 100% и не сказал бы сейчас, что эти покупки были оправданы. Скорее всего, это были импульсивные поступки по приобретению чего-то в надежде качественно улучшить свой навык.

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


В качестве заключения


Сейчас оглянувшись назад, оценив проделанный путь, я задал сам себе такие вопросы и постарался дать на них ответ:
  1. Остался ли я доволен проделанным по окончании года?

    Да. У меня есть работы, которые мне нравятся, нравится идея, исполнение.
  2. Мог ли я освоить рисование более эффективно за этот год?

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

    Что я могу тут советовать; я сам пока такой же новичок и я отнюдь не педагог. Я лишь уверен, что каждый пойдет абсолютно своим уникальным путем обучения, которым пошёл я. Таков путь (с)
  4. Какие мои дальнейшие планы касательно рисования?

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

    В арте мне интересно очень и очень многое:
    • пиксель-арт
    • анимация
    • пейзажи
    • механизмы, машины, здания
    • CG графика тоже очень меня привлекает. В студенчестве я баловался Blender-ом, изредка набегами заныривал туда и быстро выныривал обратно в рутину и бытовуху.
    • low-poly тоже меня завлекает

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



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

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru