Перенос с другого сайта.
Android версию собрали. Отправили на публикацию в Google Play.
Сейчас нужно собрать IOS версию. Но это только на маках можно собрать.
Поэтому изучаю совместную работу в Unity. Репозиторий внутри Unity.
Протестировал. Работает.
Отправил свою инструкцию заказчику.
Будет пробовать компилировать
---
Интересно сколько маки стоят. Для такой работы и старый подойдёт. Пойду оценю.
---
Всего-то 100 тысяч рублей... :)
---
Я лучше заморочусь и соберу эмулятор.
Или куплю готовый. Если без заморочек.
Но лично мне и андройда с ПК хватит.
---
Создал резюме на hh.ru https://kirov.hh.ru/resume/f3758281ff08d786920039e...
Постепенно буду дополнять.
И отправил 10 откликов на должность Unity разработчик.
Пусть шлют тестовое задание. Не понимаю эти достижения. Написать я могу всё что угодно.
Позже будут видео для портфолио.
И видео для этого тоже подходит хорошо. Только нужно записать правильно.
Там хоть видно что человек сделал.
Я в откликах пишу.
---
Буду рад получить тестовое задание. Musin.Mihail@gmail.com
Могу показать только видео на канале.
https://www.youtube.com/channel/UCtu5zDXxu4CqJjaE8MmIizQ/videos
---
Как минимум я пойму, смогу я потянуть их уровень разработки или нет
И получу дополнительный опыт во время тестовой работы
Я сейчас ищу дополнительную работу. Так как все задания я делаю очень быстро. И приходится ждать.
---
Во мне нет не грамма творчества... И это не лечится...
---
Ещё хочу скульптинг изучить. Пробовал в zbrush, понравилось. Но программа платная.
Ещё хочу Blender изучить. И там есть скульптинг. И вроде даже не хуже чем в zbrush в каких то аспектах.
Хотя я опять из себя комбайн делаю. Не могу искоренить из себя мысль, что нужно быть универсалом.
Даже видео есть с моей второй попыткой. Первая тоже есть, но там совсем плохо.
Но скорей всего тоже упрётся в моё отсутствие фантазии. Но может получится делать по референсам.
---
Вчера одобрили резюме, сегодня заблокировал. Написали, чтобы я заполнил все поля. Но они все заполнены.
Потом увидел, что нужно заполнить работу за последние 3 года.
Внёс туда 12 лет работы в магазине. Жду решения.
---
Одобрили.
---
Сейчас в резуме у меня
Опыт работы 13 лет 4 месяца
---
Я перенёс программу для сканирования портов в Unity. Сейчас тестирую.
В Unity интерфейс проще делать.
Хочу в один проект запихать все свои программы, что бы они работали в фоновом режиме в одном месте.
---
Нашёл одну ошибку. Пинг не работает.
В Unity есть свой пинг. и он конфликтует с системным.
Я указал, что нужно использовать системный. Но видимо остальную часть тоже нужно переделать.
---
Закончил проверку первого диапазона. И выдав в конце 3 открытых адреса. В процессе ожидания.
Следующий диапазон уже отрабатывает нормально.
---
Видимо это был уникальный диапазон, где все адреса были закрыты, больше 4 тысяч. А во время ожидания все запущенные потоки закончили свою работы и в итоге нашлось всего 3 адреса.
---
Результаты поиска прошлой программы и программы в Unity отличается.
Хотя код одинаковый, но отклик на Ping разный.
---
Но порты вроде те же нашёл.
---
Сейчас нужно разобраться как добавить приложение в трей.
И убрать отображение программы в панели задач.
---
На всякий случай ограничил фпс до 1.
Application.targetFrameRate = 1;
Работает также. Но GPU нагружен на 8%
---
Убрал ограничение, особо ничего не поменялось.
---
Ещё раз перелопатил код, чтобы программа работала беспрерывно. Раньше приходилось вставлять задержку, чтобы все потоки успели завершится.
---
Ускорил работу потоков со 100 миллисекунд до 20. И всё стабильно работает. работает в среднем 250 потоков одновременно.
---
Решил протестировать на 30000 адресах.
скорость 100 - 100 потоков, и скорость 20 - 250 потоков. результат одинаковый.
скорость 10 - 500 потоков. Данные стали теряться.
оставлю 20.
---
Игра опубликована.
---
Добавил возможность работать нескольких дронам.
Скорректировал их логику. Чтобы они не шли на одну станцию одновременно.
Они могут толпится только когда для добычи осталось мало места.
---
Как же не хочется быть универсалом, и очень хочется быть универсалом.
Начали новую игру. Раскраску.
Сначала приходится всё обсуждать с заказчиком, потом приходиться всё обсуждать с художником. За кулисами заказчик тоже общается с художником.
В итоге, мне силовым методом приходится объяснять что мне нужно для работы. У всех у нас свои тараканы в голове.
Прошлый программист свою неопытность, скрывал возможностями движка. Типа это не он так криво сделал, а движок по другому не умеет.
Приходится часто говорит, чтобы забывали, что им говорил тот программист.
И это всё тормозит работу.
Вроде в итоге всё решили. Но настала ночь. Все ушли спать, а я опять бездельничаю...
А если бы я умел рисовать, то я бы нарисовал так как мне нужно.
А если бы хотел руководить, я бы сам создал игру
Но сейчас я начал рисовать спрайты для своей игры Recycling the World. Пока только наброски, чтобы понять что я хочу видеть.
---
Под одним из моих видео появился комментарий.
"Здравствуйте, как с вами связаться? Требуется запись курса по unity, если интересно, оставьте контактный номер или почту"
---
Когда я сижу за компьютером, то у меня почти никогда не появляется новых идей. Это нужно от всего отвлечься и тупо смотреть в потолок размышляя о чём либо.
А я в свободное время смотрю видео из интернета...
Но когда я ложусь спать, я могу часа два просто так валятся перед тем как засну.
И почему то я только в эту ночь сообразил записывать свои идеи на телефон.
Писать долго, диктофон включать долго. Поэтому записываю видео. Камера включается сразу, при двойном нажатии на кнопку включения телефона.
Сейчас буду переслушивать и записывать в свои заметки.
---
Набросал тезисы из записей.
Там идеи по всем играм. Покажу тезисы по своей. Написано криво.
---
Я видимо вечно буду мучать свою программу по перебору адресов.
Одна из проблем которая всегда меня мучала, это то, что потоки иногда не завершались.
Сейчас сделал ограничение до 100 потоков. Но в один момент они почему то все 100 повисли. и программа перестала работать. Так было и раньше.
Пришлось немного увеличить код.
До этого я сразу создавал и запускал поток.
сейчас я создаю новый поток, потом запускаю его, потом останавливаю через 2 секунды.
---
Для удачной проверки нужно меньше 1 секунды.
Но если проверка не удачная, поток висит 5 секунд, а иногда почему то зависает.
---
Нужно такую же систему на проверку портов повесить
Но там есть своя проверка вроде.
Я проблемы только с пингом до этого замечал.
---
Сейчас у меня проверка проходит намного быстрее если диапазон адресов полностью закрыт. При этом потоков в среднем 65 - 80.
---
Я ещё задумался.
Я до этого потоки не останавливал. Они наверно сами завершались после выполнения. Или они где то все весят в подвешенном состоянии...
---
Добавил в проверку порта тоже самое. Но время мне там нужно 10 секунд. Чтобы наверняка. Не помню сколько там идёт удачная проверка.
Поэтому добавил в метод приём времени.
---
И уменьшил интерфейс
---
Я сейчас задумался о резюме, вакансиях, собеседованиях.
Но я же не хочу работать в штате компании...
Тогда зачем я ищу работу в компаниях...
Там куча всего, от чего я убегал все эти годы.
И я убедился в этом после отказов на должность. Формулировка отказов показывала, что эта не та работа на которую я хочу идти.
И они все ждут реального опыта и хорошего портфолио.
---
Пришлось повозится, но я сделал основу для раскраски.
Во время работы есть большие просадки фпс, но это unity любит на что-то тратить ресурсы.
---
Ещё сделал адаптивное расширения под любые расширения. Тавтология...
До этого надеялся на Unity. Но ничего путного не получалось. Пришлось придумывать формулу и менять размер и расположения через скрипт.
Теперь на любом расширении картинка выглядит одинаковой.
Крове вертикального расположения.
Это передача UI картинки с маской.
И основной код.
Большая часть кода это корректировка размеров.
И есть лишний код. оказывается сбор коллайдеров забыл из кода удалить.
И переменный нужно по другому обозвать.
Устал сидеть с кодом, так и оставил.
---
Вот...
Я ответил, жду задание.
---
Нужно в раскраске менять точки на линии.
Если "кляксы" слишком меленькие или мышка двигается быстро, то появляются пустоты.
Стандартная отрисовка линий не работает с масками, придётся придумывать свою систему.
---
Нашёл решение. В итоге один цикл и одна дополнительная строчка.
---
Ещё нужно корректировку размеров под расширение экрана сократить. Но мне лень. :)
---
Вроде работаю понемногу а программа уже 8 часов насчитала.
Если интересно то я загрузил лог программы.
До этого следил только за папкой Assets. Но бывает работаешь без сохранений, а программа пишет временные файлы у себя.
Поэтому сейчас слежу за всем проектом. Программа подвисает во время расчётов. На на работу компьютера это не влияет.
---
Попробую через диспетчер задач проследить на момент нагрузки.
---
Программа включается каждые 2 минуты и нагружает мой процессор на 27%. Примерно на 10 секунд.
Но у меня идёт проверка каждого файла с каждым файлом, по названию и размеру. Чтобы писать лог изменений. Много работы.
Я этой просадки во время работы не замечаю. Если начну замечать, то буду просто сравнивать общий вес всех файлов.
Или размер файла перестану проверять. Нагрузка в 2 раза уменьшится.
---
Без размеров я не смогу отслеживать изменения файла. Поэтому только смогу полностью убрать сравнение и считать общий размер для сравнения.
Хотя я могу брать дату создания и последнего изменения. и если она старше последней проверки, то изменения были.
---
Наверное в ближайшее время займусь. В таком случае мне вообще ненужно сравнивать файлы. А просто считывать даты
Заодно перенесу эту программу в unity.
---
Я ещё заметил случай, что если включить Unity, при включённой программе сделанной в Unity, то в консоли появилась ошибка. я не придал её значения.
Но несколько раз я заметил, что программа зависает если работаю в Unity.
Пытаются что-то использовать одновременно. Попробую определить.
И добавить в программе отработку этой ошибки. Чтобы она не зависала.
Но я видел эту ошибку в консоли только один раз. А зависала программе несколько раз. Но у неё нет логов по умолчанию..
---
Нашёл какой-то лог
Trying to add PortsFoundCount (UnityEngine.UI.Text) for graphic rebuild while we are already inside a graphic rebuild loop. This is not supported.
Как я понял два попытались одновременно обратиться к полю. PortsFoundCount
---
Уберу вывод теста в другой метод который закрывает поток через 10 секунд.
Хотя Enuverator тоже не синхронно работает. но синхронно я их не запускаю, поэтому и синхронно они не могут завершится.
---
Добавил код в Unity и уменьшил в 2 раза.
---
Закончил.
Объединил две программы в одну. Сделал кнопки для переключения.
И облегчил сканер файлов.
Теперь он проверяет количество файлов. И проверяет дату на изменение.
---
Средняя нагрузка процессора 3-5%
При сканирование файлов 8% примерно на 2-3 секунды.
---
Мне сегодня впервые приснился кошмар, что я не смог запрограммировать алгоритм, я постоянно переписываю код, но результат не меняется, ничего не работает. Ужас...
---
---
Очередная задача. Мне нужно сделать маску которая будет видна через другую маску.
Встроенными методами сделать это не получается.
Начинаю изучать шейдеры.
---
Когда я изучу, то в итоге на фоне у меня будут несколько фонов разных цветов и текстур. А добавлять я буду только маски, за место картинок с цветами.
По крайнем меря я себе это так представляю.
Никогда с шейдерами не работал. Даже с готовыми.
---
Получилось к форме кляксы (сейчас круг) добавить текстуру.
---
Метод "научного тыка" самый эффективный.
---
Но это работа со спрайтами. в UI Image всё плохо с этим же шейдером.
Я скорей всего переделаю всё под спрайты.
---
Оказывается у холста была выключена поддержка шейдеров.
additional shader channels
---
Хватило трёх часов чтобы перейти от "Для кого снимают эти ролики! ничего не понятно! %?№!$" до первого результата.
---
один шейдер одна текстура.
Если мне нужно разные объекты с разными текстурами, то мне нужно создавать несколько шейдеров...
---
Не шейдер нужно дублировать. А материалы с этим шейдером.
---
Маска на UI Image всё ровно не видит материал с этими шейдером.
---
Буду из UI Image переделывать в Sprite Renderer.
---
Начал переделывать скрипт и понял. что я буду удалять формулу, которая переводит координаты камеры в координаты интерфейса. Раньше у меня рисунок висел в интерфейсе, так как там была маска которая мне нужна.
Сейчас буду работать через спрайты. А как я заметил, спрайты сами нормально масштабируются под размеры экрана, а интерфейс нет.
Хотя у меня подобная система висит на интерфейсе. И она мне нужна. Поэтому не зря придумывал.
---
Очередная проблема. в интерфейсе отображение элемента идёт от иерархии. А в спрайтах от слоёв. Маска на спрайтах работают от слоёв.
Но если разные цвета на одной масcе будут одного слова. то линии не накладываются друг на друга, они перемешиваются...
---
Хотя может мне кажется, у меня появилась фантомная линия, которая повторяет движения мышки, но с задержкой.
Очень странно...
---
Это не фантомные линии, это спрайты одного слоя перемешиваются во время рисования...
---
Может получится распределить слои с помощью координаты Z
---
Изменение координат помогло.
---
10 апреля пришло тестовое задание, сделать копию игры. Несколько уровней.
https://play.google.com/store/apps/details?id=com....
Сейчас решил хотя бы начать. Нужно реализовать движение по линии и добавить линию за объектом.
Игра на моём телефоне почему-то сильно тормозит. Телефон слабый, но не для такой игры.
Пока помог опыт создания раскраски. Реализовал появление линии с помощью кучи объектов. Пока создаю 3D объекты, потом можно заменить на спрайты. Хотя меня попросили сделать туннели и мосты, на мостах будет плохо смотрится, даже если сделать очень часто. Хотя я могу оставить небольшое углубление и заполнять его.
---
Следующее задание, это реализовать линию движения и на основе этой линии сделать дорогу.
Или сделать дорогу и потом добавить линию.
Но я пока не знаю как правильно совместить дорогу и линию.
---
Смотрел как создать кривую Безье, чтобы все было ровно и движение по ней, но это не помогает понять как создать уровень по этой линии.
---
Нашёл инструмент ProBuilder
В нём можно создавать линии по кривым Безье.
Буду изучать.
---
Как я понимаю исходник создаёт путь по линии и огромной кучи префабов, чтобы было ровно. Поэтому игра тормозит.
---
Начну генерировать меш с нуля. Хорошо, что уже изучал основы. Пока сгенерирую просто прямую конструкцию.
Сейчас сгенерировал точки по своему шаблону. Следующим шагом. это соединить их.
---
Точки соединил. сейчас нужно точки выставлять основываясь на направляющей линии. которая будет строится по кривой Безье.
---
И форму я могу любую сделать.
---
Очередной затуп. Не могу определить в каком последовательности соединять вершины. Тень неправильно ложится, краёв не видно.
---
Добился появления краёв. Но треугольники как то не правильно отображаются.
Раньше находил решение, даже нашёл видео где объясняют. Вроде повторяю, но не получается.
И математика с геометрией не мой конёк. Приходится зарисовывать и раз 5-10 переписываю код, при каждой попытке.
---
Почти закончил раскраску. По сути осталось реализовать систему возврата изменений.
И настраивать размеры инструментов и цвета.
---
---
Пока не могу решить проблемы с отображение меша, но реализовал создание меша, который повторяет движение объекта.
Сейчас нужно создать кривые Безье и пустить объект по ним.
---
Сейчас на одном объекте всё хорошо, но тоже код на другом объекте создаёт пересвет.
---
Видимо что-то с циклами. Я создаю очень много треугольников.
---
Кто найдёт ошибку? Слева создаётся больше треугольников или ещё что-то...
И пример, на изображении 32 треугольника, написано 80.
---
Решил. Я не удалял старые треугольники, и создавал поверх них новые.
Добавил строчку Tringle.Clear();
---
Следующий непонятный для меня этап. Когда я буду таким образом строить дороги, то дороги будут пересекаться.
И мне как-то нужно удалять стенки.
---
И вот вам видео на 6 часов.
Я его посмотрел, часть подробно, часть на перемотке. Ещё буду пересматривать. Но о пересечение мешей там не рассказывается.
---
Научился удалять треугольники в которые попал луч.
Сейчас нужно научится удалять треугольники в радиусе.
Потом находить точку пересечения линий, удалять там треугольники и на их месте генерировать перекрёсток.
---
Надоело думать. Пущу по путям объект, который будет пускать перед собой лучу. И удалять все треугольники по пути.
Тогда осталось создать кривую и построить на её основе дорогу.
---
Меня в интернете нашёл человек и просит проконсультировать. Даже готов за это денег платить.
Интересно. Типа менторство.
Новый опыт. Посмотрю что из этого выйдет.
Он меня назвал профессионалом. Поэтому не уверен, что смогу ответить на все его вопросы.
---
Встретил вопрос под одному видео с конвейерами. Открываю его. А там моё видео. :))
---
Научился строить кривую Безье. Скопировал формулу движения и поворота из обучающего видео.
Сейчас нужно научится делать её длинной.
---
Решил сам разобраться и понять структуру формулы. Добавил ещё одну точку.
Сейчас нужно точки собрать в массив и переделать формулу для массива.
Но пока не получается понять формулу поворота. это нужно найти производную от этой формулы.
Но трёх точек из готовой формулы мне мало, чтобы понять логику. А в математике я плох.
---
Всё ровно придётся изучать дальше.
---
Разделю формулу на отдельные методы. Так мне их читать легче.
Сейчас нужно создать массив и сделать под него один метод.
---
Для закрепления результата пустил генерацию меша по этой линии
Только пришлось меш развернуть и видимо опять тени неправильно будут отображается. Исчезли углы.
---
Развернул свет. и вроде нормально всё с тенями.
---
Почти доделал раскраску.
Осталось поменять систему заливки, иначе возврат действий неправильно работает. В видео в конце видно.
---
Но на телефоне тормозит от такого количества объектов. А иногда намертво зависает.
---
Оптимизировать буду потом. частоту появления объектов и разрешение спрайтов.
Может попробую создавать линию между дальними точками.
---
Отключил шейдер, стабильные зависания закончились.
Оптимизировал количество появляющихся клякс. Игра стала работать лучше.
Может после оптимизации и шейдеры будут работать, но я сомневаюсь...
---
Я решил не мучится с производной. А просто высчитывать будущую точку и поворачиваться к ней.
---
Убрал изменение переменной в метод. Если хочу менять параметры через инспектор.
---
Осталось придумать формулы расчёта кривой по любому количеству точек.
---
Строчку с создание новой переменной с координатами тоже можно убрать и добавить прямо в поворот.
_old тоже лишняя. Забыл убрать.
---
Голова отказывается соображать...
Кручу эту формулу как могу, но не получается.
Самый лучший результат, это построение со второй точки, с перекрученной последней...
---
Перекрутка не так страшна. Её можно убрать установив последнюю точку в другое место.
---
Если плюнуть на первую точку и вести расчёт со второй, то в целом всё нормально.
---
Осталось разобраться с перекрёстком.
---
Если поизвращаться с кодом, то можно сделать дорогу с первой точки, только первый участок будет прямой.
У меня на этой сцене видеокарта работает на 99 процентов...
Это при полном экране.
Хотя в профиле ничего особенного.
---
Вариант пускать ещё один объект по путям и удалять треугольники по пути не рабочий. Появятся дыры по краям.
Продолжу изучение.
---
Мой перфекционизм мешает мне работать...
Хочу всё сделать идеально, и чтобы уровни сами генерировались. Но знаний на это не хватает.
Решил сделать криво, но быстрее. Установил объект на перекрёстке.
И при приближении к этому объекту меняется шаблон дороги.
Ещё есть вариант, генерировать таким способом дорогу и сохранять полученный результат в префабы. И каким- то редактировать вручную перекрёстки.
Если перекрёстков несколько, можно объект заменить коллайдером. и при вхождение в коллайдер меняется шаблон. Сейчас и попробую это сделать.
---
Надоело мне возится с этим тестовым задание. Оставлю так.
Буду каждый уровень настраивать. Хотя можно вообще без перекрёстков. Но мне хотелось научится.
Осталось добавить препятствие и движение игрока.
---
Хотя ещё было задание добавить мосты и туннели.
Сделаю по такому же принципу.
---
Туннель и мост готовы. :)
Только у меня проблемы с генерацией меша. он генерируется не по линиям а как-то иначе.
И кривая тоже ведёт себя плохо. нужно делать больше точек и на одинаковом расстоянии. иначе скорость меняется и количество секций в меше.
---
Отправил игрока по путям.
---
Увеличил частоту обновления меша и края стали ровными. Сейчас можно перекрёстки донастроить.
Но нужно как то впихнуть промежуточные стадии генерации. чтобы переходы были плавными. Но я этого делать не буду
---
Пришлось отказать от разработки раскраски. Хотя потратил на неё 22 часа чистого времени.
Не хочет она работать на адроиде, даже с отключёнными шейдерами через неопределённо количество "клякс" игра зависает.
---
Может в будущем научусь полноценно рисовать на текстурах.
---
Собрал 2 уровня для тестового задания.
Соберу ещё один и буду собирать минимальный интерфейс для перехода на уровни.
---
Третий готов.
---
Тестовое задание готово и отправлено.
В описанни под видео есть ссылка на apk файл.
---
Удобно что на Ютубе можно менять музыку. Забыл в редакторе отключить эффект и он исказил музыку.
Сейчас заменил в творческой студии, и всё.
А я уже хотел удалять и заливать по новой.
И у меня есть несколько видео без звука. Я могу добавить туда музыку.
---
Добавил ещё видео с раскраской. Для андроида она не работает, но на компьютере работает всё отлично.
В описании к видео есть ссылка на архив.
---
Ответили насчёт тестового задания. И ответ странный...
Как я понял они просят сделать готовую игру?
Технически я отказался.
---
Добавил прототипы манипуляторов для дронов.
Интересное наблюдение. Методы типа OnTriggerEnter. Проверяют столкновения со всеми коллайдерами всех "детей".
А я думал, что только с коллайдерами которые навешаны на сам объект.
---
Мне ответили на вакансию.
"Михаил, выши ответы и знания меня устроили, ваше резюме передано тимлидеру."
---
Появилась мысль зарегистрировать аккаунт разработчика на Goggle Play.
Начну делать мобильные, простые игры.
---
Оплатил 25$ для доступа в Google Play
Отправил копию паспорта для подтверждения личности.
---
Создал приложение "Ride the Line". С фантазий у меня туго...
Буду развивать тестовое задание с линией и препятствиями.
---
Личность подтвердили.
---
Завтра продолжу настраивать генерацию меша "дороги".
И забыл сказать. Я убрал разметку со сцены и добавил разметку в код.
Буду думать над другими решениями данной задачи.
---
Лень великая сила. Только сегодня начал работать с игрой для Google Play.
Хотя вчера много времени потратил на свою программу. Если я не говорил, то я делаю сканер для IP камер.
Пингую диапазоны IP адресов. Проверяю открытые порты.
Вчера научился проверять логины и пароли для камер Dahua, и переводить массив байтов в JPG картинку. Но пока не могу в полной мере разобраться с формированием массива байтов.
---
Сегодня разделил меши разных участков дороги на разные объекты. Дальше буду думать над переходами между участками.
Разделение меша поможет мне делать разные участки дороги с разной детализацией. Раньше приходилось все участки делать из одинакового количества вершин.
---
Переделал код контроля постройки участков дороги. Стало наглядней.
---
Сократил код. Объединил создание участков в один метод. Отправляю туда только шаблон вершин.
Только нужно будет шаблоны вершин переименовать.
---
Хотя можно не заморачиваться над переходами, а сделать шаблоны, которые будут ровно крепится друг к другу. А даже если и не ровно, просто закрыть отверстия. Нужно будет над этим подумать...
---
Или плюнуть и не заморачиваться с видами дороги. а просто сделать линию в воздухе. Типа как текущий "мост"
И вообще убрать перекрёстки...
---
Нашёл как сохранять сгенерированный мешь.
AssetDatabase.CreateAsset(mesh.GetComponent<MeshFilter>().mesh, savePath);
Теперь могу один раз сгенерировать и добавить готовый в игру.
---
В последние 4 дня я расслабился.
Пассивный доход у меня есть.
И как то стало лениво работать ради денег.
Даже начал видео для игрового ютуб канала делать. Хотя тоже ради денег. :) Но там не нужно работать, напрягать мозг.
Завтра пойду в свой первый пеший поход на два дня, тоже буду писать видео для другова канала.
И тут я узнаю, что в магазине от куда идёт пассивный доход, уволился основной работник.
И я снова задумался.... что нужно не рассчитывать на этот источник дохода.
Приду из похода и продолжу обучение программирования.