Fley's flow
Название канала я попытался выбрать так, чтобы оно было созвучно с моим никнеймом и передавало смысл всей затеи.
Я совсем не отношу себя к людям, которые могут беспрекословно придерживаться расписания и работать стабильно и безостановочно; главная мотивация в моей жизни – это дедлайны. То есть, я нередко оказываюсь в ситуации, когда под учебный проект было выделено даже неприлично большое количество времени, и неспроста, а я сажусь за задачу в последний день. Однако, как правило, я даже успеваю с ней справиться и сдать вовремя. Впрочем, будет забавно, если на эти публикации наткнется какой-нибудь HR и разочаруется – зато я хотя бы честно признаю свои особенности.
И в эти особенности хорошо вписывается слово flow – поток, в котором я нахожусь, в котором стремлюсь к своим целям, при этом выдерживая баланс с собой, с окружающими и со своими интересами.
#self
Название канала я попытался выбрать так, чтобы оно было созвучно с моим никнеймом и передавало смысл всей затеи.
Я совсем не отношу себя к людям, которые могут беспрекословно придерживаться расписания и работать стабильно и безостановочно; главная мотивация в моей жизни – это дедлайны. То есть, я нередко оказываюсь в ситуации, когда под учебный проект было выделено даже неприлично большое количество времени, и неспроста, а я сажусь за задачу в последний день. Однако, как правило, я даже успеваю с ней справиться и сдать вовремя. Впрочем, будет забавно, если на эти публикации наткнется какой-нибудь HR и разочаруется – зато я хотя бы честно признаю свои особенности.
И в эти особенности хорошо вписывается слово flow – поток, в котором я нахожусь, в котором стремлюсь к своим целям, при этом выдерживая баланс с собой, с окружающими и со своими интересами.
#self
Под эту задачу я даже сделал отдельную версию своего логотипа, который тоже содержит в себе некоторый поток, движение — хотел соблюсти символизм.
Еще один интересный факт — я очень люблю желтый цвет. В последнее время он заметно вписался в мою жизнь, но я долго не мог найти тот самый желтый, а когда делал изображение, нашел – #FFCC00 (Tangerine yellow). Он легко читается и запоминается, содержит инициалы канала, является для меня идеально сбалансированным, а также впоследствии я узнал, что это цвет Яндекса 🤷♂️
Позднее напишу более подробный пост о себе, в котором попытаюсь сделать выжимку всего жизненного опыта, по большей части не вписывающегося в резюме по той специальности, к которой я стремлюсь.
#offtopic
Еще один интересный факт — я очень люблю желтый цвет. В последнее время он заметно вписался в мою жизнь, но я долго не мог найти тот самый желтый, а когда делал изображение, нашел – #FFCC00 (Tangerine yellow). Он легко читается и запоминается, содержит инициалы канала, является для меня идеально сбалансированным, а также впоследствии я узнал, что это цвет Яндекса 🤷♂️
Позднее напишу более подробный пост о себе, в котором попытаюсь сделать выжимку всего жизненного опыта, по большей части не вписывающегося в резюме по той специальности, к которой я стремлюсь.
#offtopic
👍1
Навигация по каналу:
Личное:
#self – информация обо мне
#path – ключевые этапы жизненного пути
#recommend – рекомендации, что посмотреть или почитать
#offtopic – что-нибудь от себя
Рабочее:
#papers – статьи, разборы
#links – ссылки на мой контент
#soft – soft-скиллы
#hard – hard-скиллы
#learn – обучающие материалы
#code – код или ссылки на код
#cases – случаи и задачи из работы
#tips – небольшие советы
#results – результаты работы
#progress – результаты личного роста
#offer – путь к первому офферу
Личное:
#self – информация обо мне
#path – ключевые этапы жизненного пути
#recommend – рекомендации, что посмотреть или почитать
#offtopic – что-нибудь от себя
Рабочее:
#papers – статьи, разборы
#links – ссылки на мой контент
#soft – soft-скиллы
#hard – hard-скиллы
#learn – обучающие материалы
#code – код или ссылки на код
#cases – случаи и задачи из работы
#tips – небольшие советы
#results – результаты работы
#progress – результаты личного роста
#offer – путь к первому офферу
Обо мне
Как я говорил ранее, непосредственно к ML/DA/DS мой бэкграунд имеет слабое отношение, однако что-то же я делал эти24 года? Этот пост я пишу для того, чтобы сложить цельную картинку моего "старта" к профессии. В силу большого количества различных событий в течение жизни, расположу по возможности в хронологическом порядке и разобью на несколько публикаций. Пост обещает быть длинным, а многое из написанного вообще не будет относиться к текущим интересам, но все же постараюсь писать нескучно.
🟡 🟡 🟡 лет.
Шли прекрасные нулевые годы: 2007-й был еще далеко впереди, а вера в светлое посткоммунистическое будущее пронизывала воздух, наполненный ароматом цветущих и распускающихся в конце апреля деревьев. Я жил совершенно обычной дворовой жизнью, где не было места ссорам и вражде — конфедерацией армян, азербайджанцев и русских мы гоняли бомжей камнями, часами не слезали с тютины (шелковицы), прыгали по гаражам, взрывали то, что взрывается, стреляли из всего, что способно стрелять, и вообще в полной мере осознавали свое величие, которое меркло разве что перед старшими приятелями, которые могли гулять в соседнем дворе через дорогу.
Моё счастливое детство омрачал лишь гнёт родителей и родственников, заставлявших меня читать, писать и считать. Несмотря на оказываемое сопротивление, я безнадежно проигрывал, и в 4 года научился читать, с 6 лет уже осваивал книги самостоятельно, а к 8 годам выиграл школьную олимпиаду "Кенгуру" по математике, заняв в регионе двузначное место.
После этого я начал уверенно побеждать в битве против обучения — книги я осваивал с большим удовольствием, однако свое собственное мнение обрёл чрезвычайно рано. И в связи с этим я решил, что изучать буду лишь то, что интересно лично мне.
🟡 🟡 🟡 🟡 лет.
За этот период жизни я не могу вспомнить практически ничего значимого и выдающегося — как и все, я ходил в обычную школу, занимался баскетболом, а впоследствии и легкой атлетикой, на карманные деньги посещал компьютерные клубы после занятий, дома же сидел на сайте vkontakte.ru с использованием 3G-модема от МТС, а также посещал занятия в компьютерной школе, где изучал Word, Excel, и мою среднестатистическую жизнь ничего не нарушало.
Время шло, одних лишь книг, игр и веб-скроллинга мне было очевидно мало, в связи с чем я уже в этом возрасте начал задумываться о том, чем буду заниматься в дальнейшем.
#self #path
Как я говорил ранее, непосредственно к ML/DA/DS мой бэкграунд имеет слабое отношение, однако что-то же я делал эти
Шли прекрасные нулевые годы: 2007-й был еще далеко впереди, а вера в светлое посткоммунистическое будущее пронизывала воздух, наполненный ароматом цветущих и распускающихся в конце апреля деревьев. Я жил совершенно обычной дворовой жизнью, где не было места ссорам и вражде — конфедерацией армян, азербайджанцев и русских мы гоняли бомжей камнями, часами не слезали с тютины (шелковицы), прыгали по гаражам, взрывали то, что взрывается, стреляли из всего, что способно стрелять, и вообще в полной мере осознавали свое величие, которое меркло разве что перед старшими приятелями, которые могли гулять в соседнем дворе через дорогу.
Моё счастливое детство омрачал лишь гнёт родителей и родственников, заставлявших меня читать, писать и считать. Несмотря на оказываемое сопротивление, я безнадежно проигрывал, и в 4 года научился читать, с 6 лет уже осваивал книги самостоятельно, а к 8 годам выиграл школьную олимпиаду "Кенгуру" по математике, заняв в регионе двузначное место.
После этого я начал уверенно побеждать в битве против обучения — книги я осваивал с большим удовольствием, однако свое собственное мнение обрёл чрезвычайно рано. И в связи с этим я решил, что изучать буду лишь то, что интересно лично мне.
За этот период жизни я не могу вспомнить практически ничего значимого и выдающегося — как и все, я ходил в обычную школу, занимался баскетболом, а впоследствии и легкой атлетикой, на карманные деньги посещал компьютерные клубы после занятий, дома же сидел на сайте vkontakte.ru с использованием 3G-модема от МТС, а также посещал занятия в компьютерной школе, где изучал Word, Excel, и мою среднестатистическую жизнь ничего не нарушало.
Время шло, одних лишь книг, игр и веб-скроллинга мне было очевидно мало, в связи с чем я уже в этом возрасте начал задумываться о том, чем буду заниматься в дальнейшем.
#self #path
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Подготовка к первому собеседованию, 14 дней
Прошло уже ± две недели подготовки — вспоминал алгоритмы, остановился на тренировках от Яндекса 1.0, там представлены любопытные задачи.
Если честно, то по большей части сложностей они не вызвали: как говорится, с помощью лома и какой-то там матери решил порядка 20 задач — пока хватит.
Если чуть подробнее, то действительно слегка пришлось поломать голову, но совокупно самые сложные задачи занимали порядка 1.5-3 часов и 2-3 попытки — если лениться самому продумать все тесты. Некоторые задачи были такого же уровня или даже точь-в-точь такие, какие я даю своим ученикам. С мыслью: "Если не сдам с первого раза, горе мне как преподавателю" я их все же успешно сдавал)
Выложил также репозиторий на github😁 (надеюсь, однажды он обновится, и я все же решу все задачи).
Однако, на аналитику данных требуются не столько алгоритмы, сколько фундаментальное понимание теорвера и статистики, в связи с чем пора переключиться на повторение вузовских материалов + углублённый разбор популярных вопросов с собеседований. Часть материалов уже нашел, как будет готово — поделюсь. Там будут интересные конспекты, которые не раз пригодились мне в том числе и в СПбГУ.
#hard #progress #offer #code
Прошло уже ± две недели подготовки — вспоминал алгоритмы, остановился на тренировках от Яндекса 1.0, там представлены любопытные задачи.
Если честно, то по большей части сложностей они не вызвали: как говорится, с помощью лома и какой-то там матери решил порядка 20 задач — пока хватит.
Если чуть подробнее, то действительно слегка пришлось поломать голову, но совокупно самые сложные задачи занимали порядка 1.5-3 часов и 2-3 попытки — если лениться самому продумать все тесты. Некоторые задачи были такого же уровня или даже точь-в-точь такие, какие я даю своим ученикам. С мыслью: "Если не сдам с первого раза, горе мне как преподавателю" я их все же успешно сдавал)
Выложил также репозиторий на github
Однако, на аналитику данных требуются не столько алгоритмы, сколько фундаментальное понимание теорвера и статистики, в связи с чем пора переключиться на повторение вузовских материалов + углублённый разбор популярных вопросов с собеседований. Часть материалов уже нашел, как будет готово — поделюсь. Там будут интересные конспекты, которые не раз пригодились мне в том числе и в СПбГУ.
#hard #progress #offer #code
Please open Telegram to view this post
VIEW IN TELEGRAM
Тренировки по алгоритмам от Яндекса
Новый сезон — новые задачи и форматы
👍2
К теме о навыках и об их применимости
После покупки премиума в Telegram захотел себе анимированный значок: пара запросов в🔎 и 📺 , 30 минут в 👉 , 15 минут конвертации и результат готов:
👨💻
Даже если кажется, что старый опыт уже никогда не пригодится — это скорее всего не так.
#offtopic
После покупки премиума в Telegram захотел себе анимированный значок: пара запросов в
Даже если кажется, что старый опыт уже никогда не пригодится — это скорее всего не так.
#offtopic
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
В этом возрасте я осознал, что пора двигаться вперед — изменчивый мир под меня прогибаться не спешил, и я решительно вмешался в этот процесс.
Уже не помню, как это произошло, но мне стукнуло в голову, что я хочу организовывать турниры по различным онлайн-играм. К этому времени я уже достаточно хорошо ознакомился с компьютером, чтобы уметь открыть
Я понимал, что это только начало, — за этим турниром последовал еще десяток, я вошел в руководство большого количества сообществ, связанных с теми играми, где проводил соревнования, а в некоторых случаях организовывал такие сообщества самостоятельно. На пике деятельности турниры собирали 128 команд по 5+ человек в каждой (подумать только – 640 игроков, это ведь несколько лиг). Порой удавалось даже договариваться с официальными представителями игр и формировать призовой фонд исключительно из выделенных ими средств. В иных случаях в качестве призовых шли средства, полученные с рекламы. В рамках организации собственных сообществ я налаживал работу добровольцев-администраторов, да так, что мы упирались в пределы публикаций в сутки— больше 50 постов в день
Сам играть я тоже не забывал — был даже период времени, когда я планировал попасть в киберспорт. На сайте aim400kg, на тот момент весьма известном, я уверенно забирал топ-3 в тестах на скорость реакции среди всего СНГ. Великая киберспортивная карьера закончилась тем, что у меня на пике славы на год забрали компьютер, и я вернулся к обычному любительскому формату. Здесь я тоже не обошелся без самовыражения: монтировал видео, связанные с играми, изучая различные материалы, преимущественно на английском языке — уже тогда стало ясно, насколько велика разница между русско- и англоязычным сообществом с точки зрения количества информации. В это же время начал изучать 3D-моделирование, преимущественно Cinema4D в связке с After Effects.
В связи с тем, что к тому времени я жил в доме, а не в квартире, я имел свои обязанности по хозяйству — кто в теме, тот знает афоризм про нескончаемый ремонт в доме, и сейчас разделяет мою боль. За эти годы я научился практически всему, что необходимо для самостоятельного ремонта в доме, а мои навыки в 3D позволили даже смоделировать будущую сауну и оценить расход материалов на её строительство.
Разумеется, времени на учебу, а главное – желания – практически не оставалось, но, несмотря на это, я даже плавно набирал обороты, а занятия математикой с родственниками позволили мне в некоторой степени проявить свои способности.
Если подводить черту этому периоду, на который пришелся переходный возраст, то, хоть и не без изъянов, прошел он достаточно спокойно. Теперь я был еще более готов к новым свершениям.
#self #path
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
К этому времени я влился в сообщество "Потрачено", посвященное кривым переводам различных игр, к которому имею некоторое отношение и по сей день. Там же сделал своего первого бота, который на волне популярности в то время очень быстро набрал лимит в 10.000 друзей (напомню, что когда боты
Программирования в этом всем, кстати, практически не было. Существовал сайт, где можно было создавать гибкие шаблоны запросов и ответов для так называемого искусственного интеллекта, а также софт, позволявший отправлять личные сообщения пользователей на этот сайт, получать ответ и выдавать его пользователю обратно. Таким образом, мне достаточно было сделать большой набор гибких шаблонов для взаимодействия с пользователями, запустить нужную программу, и наблюдать. Результат превзошел все ожидания – несмотря на все особенности, общение с ботом было веселым и осмысленным, он сильно выделялся на фоне конвейерных поделок.
Самым сложным вопросом стал хостинг проекта. Первое время товарищ по сообществу за 50р./мес. держал его на своем ПК (надо ли говорить о том, с каким downtime мы имели дело?). Конечно, долго так продолжаться не могло, и я изучил вопрос онлайн-хостинга. Я даже не могу передать ту боль, которую испытал, когда узнал, что мой Linux-сервер – это одна лишь командная строка, через которую нужно поставить рабочий стол и все сопутствующее. С учетом всех допущенных оплошностей, на следующий день я увидел заветный рабочий стол Ubuntu. Однако, с объемом ОЗУ ≈256 Мбайт, это был скорее рабочий стул, который при запуске
Помимо прочего, я длительное время принимал участие в одном из семейных проектов – ежегодной всероссийской конференции, где мои обязанности в раннем возрасте ограничивались базовыми задачами "подай-принеси", а к 16-ти годам и до недавнего времени (здесь немного отступлю от хронологии) я принимал все большее участие в вопросах, связанных с техническим обеспечением и взаимодействием с участниками. Когда наступил COVID-19, работа усложнилась еще и тем, что часть участников присутствовала очно, часть заочно, и в мои задачи входило обеспечение возможности всем увидеть и услышать друг друга. Задача осложнялась особенно тем, что среди них были и люди весьма почтенного возраста, и просто со своими особенностями — нужно было набраться терпения.
#self #path
Please open Telegram to view this post
VIEW IN TELEGRAM
Все накопленные на тот момент увлечения я лишь продолжал и развивал – участвовал и выигрывал в небольших конкурсах, мои видеоролики публиковались в официальных сообществах игровых проектов. Мы наращивали сотрудничество с сообществами близкой тематики — например, несколько раз исключительно из дружеских побуждений наши рекламные публикации оказывались в небезызвестном сообществе "Мои любимые юморески" — просто потому что неплохо складывалось личное общение с админом, который весьма альтруистично подходил к подобным вопросам. В определенный момент суммарная аудитория сообществ, которые находились под моим управлением, составляла порядка 300.000 человек, что давало мне некоторые возможности для направления аудитории на личные проекты, чем я время от времени пользовался в своих целях, или же помогал друзьям.
На тот момент в компьютерной школе я уже прошел базовые пользовательские курсы, и началось время программирования. Python как учебный язык только начал набирать обороты, поэтому учился я все еще на Pascal ABC NET, о чем, впрочем, не жалею. В рамках курса мы решали задачи для начинающих — простые задачи из геометрии, математики, ряды Тейлора, робот на координатной плоскости, базовые сортировки и так далее. Я всегда в таких вещах был "на передовой" — пытался решить эти задачи быстрее всех, что нередко удавалось, и в целом легко и быстро схватывал идеи алгоритмов.
Учеба в школе становилась всё проще, оценки всё лучше, личная жизнь кипела, да и вообще всё складывалось замечательно. Однако, над моей головой нависла угроза из трех страшных букв, и практически каждый из тех, кто прочитает этот текст, тоже в свое время прошёл (или пройдет) через этот этап.
#self #path
Please open Telegram to view this post
VIEW IN TELEGRAM
pyrssa – библиотека для анализа временных рядов 📈
Давненько тут не было публикаций, но не потому что ничего не происходило. Сегодня хочу рассказать немного о своей магистерской дипломной работе в СПбГУ, которая продолжается и по сей день – библиотека для анализа временных рядов на основе метода Singular Spectrum Analysis.
Данный метод имеет мощную теоретическую базу с большим количеством замечательных свойств: позволяет производить разложение временных рядов на отдельные составляющие (тренд, период, шум), строить различные виды прогноза, заполнять пропуски (как частный случай прогноза, разумеется), с помощью итеративных алгоритмов позволяет улучшать разделимость компонент ряда, если они смешиваются между собой, находить момент разладки временного ряда (когда он меняет свою структуру, временно или навсегда), имеет приложение к многомерным данным или сразу к нескольким временным рядам (multivariate time series), и многое другое.
В рамках работы мне предстояло адаптировать существующую библиотеку Rssa для R на язык Python. Сделано это в таком виде, потому что переписывать заново все структуры данных и кучу рутины бессмысленно, а потери в скорости исключительно константные — перевод типов данных, да и только.
Работа оказалась объемной в силу большого количества непредвиденных сложностей адаптации типов данных, косяков в сторонних библиотеках, необходимости в полностью новой реализации графиков, написания документации, тестов, примеров, да и в целом в оформлении работы в приличную библиотеку.
Пользоваться ей можно уже сейчас, удачи только разобраться в теории, потому что для применения метода на практике сперва нужно попотеть :)
📖 Cписок литературы (увы, не бесплатно):
Singular Spectrum Analysis with R (Use R!)
Analysis of Time Series Structure: SSA and related techniques
#self #code #hard
Давненько тут не было публикаций, но не потому что ничего не происходило. Сегодня хочу рассказать немного о своей магистерской дипломной работе в СПбГУ, которая продолжается и по сей день – библиотека для анализа временных рядов на основе метода Singular Spectrum Analysis.
Данный метод имеет мощную теоретическую базу с большим количеством замечательных свойств: позволяет производить разложение временных рядов на отдельные составляющие (тренд, период, шум), строить различные виды прогноза, заполнять пропуски (как частный случай прогноза, разумеется), с помощью итеративных алгоритмов позволяет улучшать разделимость компонент ряда, если они смешиваются между собой, находить момент разладки временного ряда (когда он меняет свою структуру, временно или навсегда), имеет приложение к многомерным данным или сразу к нескольким временным рядам (multivariate time series), и многое другое.
В рамках работы мне предстояло адаптировать существующую библиотеку Rssa для R на язык Python. Сделано это в таком виде, потому что переписывать заново все структуры данных и кучу рутины бессмысленно, а потери в скорости исключительно константные — перевод типов данных, да и только.
Работа оказалась объемной в силу большого количества непредвиденных сложностей адаптации типов данных, косяков в сторонних библиотеках, необходимости в полностью новой реализации графиков, написания документации, тестов, примеров, да и в целом в оформлении работы в приличную библиотеку.
Пользоваться ей можно уже сейчас, удачи только разобраться в теории, потому что для применения метода на практике сперва нужно попотеть :)
Singular Spectrum Analysis with R (Use R!)
Analysis of Time Series Structure: SSA and related techniques
#self #code #hard
Please open Telegram to view this post
VIEW IN TELEGRAM
🆒2
Трекинг игроков в волейболе: связка YOLOv8 + DeepSort 📼
Сегодня расскажу о еще одном своём пет-проекте, который я делал еще в СПбГУ для зачёта по одному из предметов буквально за пару дней, а теперь уже по мере возможностей и времени шлифую и расширяю, чтобы впоследствии в перспективе применять его к своим данным и уже сейчас закидывать в резюме.
Задача
Задача состоит в том, чтобы отслеживать игроков на видеозаписях игры в волейбол (выбрал неспроста — ранее играл за сборные обоих своих вузов, в СПбГУ последний год был капитаном). Запись ведется строго сзади за лицевой линией, т.е. не как в профессиональном спорте сбоку и движется в зависимости от местоположения мяча.
Результат
На текущий момент удалось отладить связку YOLOv8 для детекции игроков и DeepSort для трекинга, OpenCV для проекции позиций треков на плоскость площадки, а также сверху прикрутил несколько эвристических фильтраций, чтобы отсеивать ложные детекции и неправильные треки. Более или менее адекватно оформленный ноутбук с кодом и пояснениями захостил вот здесь.
Последнее видео с лучшим результатом вот здесь.
От себя добавлю, что первоначальная установка TensorFlow для использования возможностей CUDA — это то еще приключение на 20 минут. Особенно весело было после установки узнать, что YOLOv8 переехал с TensorFlow на PyTorch🔫 🐻
TODO:
1) Определение игрового номера игрока — опираясь на эту информацию уже можно будет подводить статистику по игровым партиям.
2) Определение и трекинг мяча — нужно обучить YOLO отдельно на синтетических данных с игровыми мячами – задача несложная, но кропотливая, на этой основе уже можно будет делать выводы о розыгрышах.
3) Определение игрового действия — это уже из области легкой фантастики, но тоже реально, если удастся решить ранние задачи.
Также мне всегда интересна любая обратная связь, хотя, конечно, посты такие, что ни добавить, ни убавить.
#self #hard #code
Сегодня расскажу о еще одном своём пет-проекте, который я делал еще в СПбГУ для зачёта по одному из предметов буквально за пару дней, а теперь уже по мере возможностей и времени шлифую и расширяю, чтобы впоследствии в перспективе применять его к своим данным и уже сейчас закидывать в резюме.
Задача
Задача состоит в том, чтобы отслеживать игроков на видеозаписях игры в волейбол (выбрал неспроста — ранее играл за сборные обоих своих вузов, в СПбГУ последний год был капитаном). Запись ведется строго сзади за лицевой линией, т.е. не как в профессиональном спорте сбоку и движется в зависимости от местоположения мяча.
Результат
На текущий момент удалось отладить связку YOLOv8 для детекции игроков и DeepSort для трекинга, OpenCV для проекции позиций треков на плоскость площадки, а также сверху прикрутил несколько эвристических фильтраций, чтобы отсеивать ложные детекции и неправильные треки. Более или менее адекватно оформленный ноутбук с кодом и пояснениями захостил вот здесь.
Последнее видео с лучшим результатом вот здесь.
От себя добавлю, что первоначальная установка TensorFlow для использования возможностей CUDA — это то еще приключение на 20 минут. Особенно весело было после установки узнать, что YOLOv8 переехал с TensorFlow на PyTorch
TODO:
1) Определение игрового номера игрока — опираясь на эту информацию уже можно будет подводить статистику по игровым партиям.
2) Определение и трекинг мяча — нужно обучить YOLO отдельно на синтетических данных с игровыми мячами – задача несложная, но кропотливая, на этой основе уже можно будет делать выводы о розыгрышах.
3) Определение игрового действия — это уже из области легкой фантастики, но тоже реально, если удастся решить ранние задачи.
Также мне всегда интересна любая обратная связь, хотя, конечно, посты такие, что ни добавить, ни убавить.
#self #hard #code
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
Алготрейдинг 💼
Предчувствуя очередное "Разбежавшись прыгну со скалы" от российского рынка, шустро набросал код для выставления стоп-ордера по рыночной цене в Tinkoff Investments API😁
Сделаю апдейт, если все пройдет успешно (если нет — удалю пост🙂 ).
UPD: ИИС на внебиржевом рынке не торгуется, заявка успешно стоит, но смысла в ней нет⭐️
#code #offtopic
Предчувствуя очередное "Разбежавшись прыгну со скалы" от российского рынка, шустро набросал код для выставления стоп-ордера по рыночной цене в Tinkoff Investments API
Сделаю апдейт, если все пройдет успешно (если нет — удалю пост
UPD: ИИС на внебиржевом рынке не торгуется, заявка успешно стоит, но смысла в ней нет
#code #offtopic
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥1
Поиск работы, 69 дней 📣
Долго я не писал ничего на эту тему, хотя уже есть некоторые движения.
👀 За это время я полностью прошел курс по SQL: Практический курс для новичков по SQL и PostgreSQL (Илья Фофанов).
Опишу кратко: ранее в рамках вуза уже видел SQL, знал материал до INNER/OUTER JOIN и подзапросов, хотел заглянуть дальше, плюс расширить кругозор. Со своей задачей курс справился отлично: минимум теории, максимум практики, повествование сопровождается советами бывалого человека. Если нужен SQL на уровне побочной работы, типа Data Engineer, то хватит с головой. Курс занял 5 дней (Прямо как обещают на обложках учебников).
👀 Также я понял, что необходимо укреплять фундамент, поэтому повторно прошел курс теории вероятностей. Не так, как это часто в вузе бывает, а на любых не слишком понятных мне моментах я старался уйти вглубь (наконец-то руки дошли до доказательства, откуда же в нормальном распределении появляется множитель с числом 3⃣ ). В совокупности это заняло порядка 14 дней. Взял за основу вот эту книгу: Чернова Н. И. Теория Вероятностей.
Очень легко читается, много подробностей: местами лишних, местами спорных, но в совокупности для второго (❗️ ) прохода по ТВ очень приятная книга. Также вся эта тема сподвигла меня на ведение рукописного конспекта, который я буду со временем дополнять.
👀 Параллельно подбивал резюме и проекты, немного наполнял контентом свой Github, подавал резюме в компании.
Результат пока следующий: 4 заявки, из которых:
1 – без ответа;
1 – с негативным (уже нашли человека);
1 – с собеседованием и жду тестовое;
1 – с успешным первым тестовым и отправленным вторым.
Есть чувство, что второе тестовое тоже хорошее, время покажет.
🖼 Картинка к посту – шедевр. Мне всегда нравилось представлять, что происходит в этот момент у бедных фотомоделей в голове: "Господи, что я тут делаю?", да и эти улыбки – им анекдот на питоне написали?
class Man:
def _ _init_ _(self, hat):
self._hat = hat
self.fits = True
#hard #learn #progress #offer
Долго я не писал ничего на эту тему, хотя уже есть некоторые движения.
Опишу кратко: ранее в рамках вуза уже видел SQL, знал материал до INNER/OUTER JOIN и подзапросов, хотел заглянуть дальше, плюс расширить кругозор. Со своей задачей курс справился отлично: минимум теории, максимум практики, повествование сопровождается советами бывалого человека. Если нужен SQL на уровне побочной работы, типа Data Engineer, то хватит с головой. Курс занял 5 дней (Прямо как обещают на обложках учебников).
Очень легко читается, много подробностей: местами лишних, местами спорных, но в совокупности для второго (
Результат пока следующий: 4 заявки, из которых:
1 – без ответа;
1 – с негативным (уже нашли человека);
1 – с собеседованием и жду тестовое;
1 – с успешным первым тестовым и отправленным вторым.
Есть чувство, что второе тестовое тоже хорошее, время покажет.
class Man:
def _ _init_ _(self, hat):
self._hat = hat
self.fits = True
#hard #learn #progress #offer
Please open Telegram to view this post
VIEW IN TELEGRAM
Если кратко, то собеседование можно описать словом кринж (от англ. to cringe, прим. автора).
Мне пришло в голову начать рассказ о себе вообще не с профильных вещей: рассказать о левых ЯП, которые я тоже знаю и использовал, потом начал говорить про свой МаТеМаТиЧеСкИй бэкграунд, заявил, что хорош в теорвере, сразу же получил запрос "Сформулируйте ЦПТ Ляпунова", на что я неловко парировал "Знаю только в классической формулировке" и сказал что-то невнятно-неточное, но в общем по теме.
Когда дошло до матриц, попросили обратить матрицу размера 2х3. Я с умным видом заявил, что дострою рядом единичную матрицу и проведу элементарные преобразования, на что меня вполне справедливо прервали фразой "На самом деле, эта матрица необратима". МаТеМаТиК: забыл, что обратимость матриц требует квадратной формы. Через полчаса после собеседования вспомнил, что можно было бы отразить удар псевдообратной матрицей (да-да, тот самый момент, когда понимаешь через несколько часов, как надо было ответить хулигану в споре, чтобы все закончилось в твою пользу). Делаю вывод: надо пройтись и по линейной алгебре тоже.
Многие вопросы я сразу отсекал фразами наподобие "Теорию алгоритмов я не знаю, знаю только практику" (чукча не читатель — чукча писатель). По поводу TF и PyTorch были вопросы, но я даже ONNX еще не трогал: сказал, зачем он идейно, не более. Диалог получился тупиковый: спрашивать почти нечего, а обсуждать не выходит, итог: сошлись на тестовом задании.
Потом вопросы общего плана: как я отстаиваю свою точку зрения в споре, что мне нужно для комфортной работы, ожидаемая ЗП и т.д. Ознакомился с задачами компании, мне все понравилось, в целом очень близко к тому, что меня интересует, но дальше уже вопрос, насколько я буду интересен компании.
С теорией вероятностей у меня все хорошо в том смысле, что я достаточно точно оцениваю вероятности событий в своей жизни, поэтому не стал удивляться, что тестовое задание пока не прислали. Буду верить, что это потому что люди заняты своими делами...
Stay tuned
#offer
Please open Telegram to view this post
VIEW IN TELEGRAM
🌚1
Тестовое задание: часть 1 ✍️
Как я ранее писал, мне после собеседования обещали тестовое задание — вот и оно.
Формулировка задания📁
Используя PyTorch, обучить модель классификации лица по 5 основным эмоциям (angry, sad, neutral, happy, surprise). На выходе получить модель, логируя результаты в tensorboard, сравнить accuracy на train-е и валидации. Конвертировать модель в формат ONNX и выполнить инференс в ONNX Runtime. Скрипт должен иметь возможность получать изображение как с Web-камеры/видео, так и из файла.
Таким образом, требуется прислать архив (или ссылка на google colab), содерджащий все этапы обучения модели, а также конвертированный бинарный файл и скрипт инференса.
Срок — 2 дня.
Первое впечатление🐻
На собеседовании я признался, что:
1) Модели в PyTorch я не обучал: ранее обучал лишь на TF или использовал предобученные в PyTorch.
2) Из ONNX слышал только эти четыре буквы и знаю, зачем они нужны, но сам не трогал.
3) Вполне логичный вывод из пункта 2, что инференс моделей я не делал.
4) JavaScript не знаю (почти) и не пользовался (может, это фантомное воспоминание, но такой вопрос как будто был).
А также дополню:
5) С TensorBoard я ранее тоже не взаимодействовал.
Первый вопрос, который возник: что же я делал все эти годы?
Второй: Возможно ли за 2 дня изучить PyTorch, TensorBoard, ONNX, ONNX Runtime и JS?
Третий: Это стресс-тестовое задание, которое специально подбивалось под то, чего я не умею, чтобы проверить меня на прочность?🤔
Процесс работы⏲
0⃣ Нулевой день
На самом деле, у меня было еще несколько часов за день до решения задания, которые я потратил на изучение известных датасетов, моделей, SOTA-решений, в какую сторону правильнее копать, плюс куча полезных ссылок, связанных с подбором параметров для обучения, на которые было удобно ссылаться впоследствии.
Что в итоге:
Датасет – FER-2013. ЧБ-изображения размера 48х48 в количестве 36к.
Модели – VGG, ResNet. Показывали в среднем более высокое качество, часто используются. EfficientNet хорошо себя проявил на другом подобном датасете, но вполне возможно, что разница в 6 лет между этим датасетом и моделью сыграла свою роль в ее популярности.
1️⃣ Первый день
Сперва я занимался предобработкой датасета, изучив баланс классов и сами изображения для каждого класса. Вердикт: не оч. Неудивительно, что SOTA-решения показывают точность около 75%, с такими-то рожами... Но, в связи с тем, что это единственный хорошо изученный и одновременно небольшой датасет, полюбить пришлось и козла.
Первым выбором стала модель VGG19, усовершенствованная версия которой светилась среди SOTA-решений этого года (Спустя 10 лет не только я оказался в этом богом забытом месте). SOTA-версию идейно я понял, а вот технически не понял, поэтому не стал юзать, хотя можно было бы изучить. Просто не захотел напороться на подводные камни там, где имел слабое представление и кучу зависимостей от старых версий библиотек.
К концу первого дня у меня была первая готовая модель, с учетом первой пробы пера обучения на PyTorch и логгирования в TensorBoard, а также ударов всеми частами тела о❌ CUDA Out Of Memory посреди процесса, которые, конечно, не решались ни одним известным способом, потому что повторная загрузка модели съедала видеопамять, а назад не возвращала ни при каких обстоятельствах.
Точность: 73%. Близко к SOTA, за исключением того, что у меня лишь 5 классов, а не 7, как в изначальном датасете.
На этом день закончился.
#offer
Как я ранее писал, мне после собеседования обещали тестовое задание — вот и оно.
Формулировка задания
Используя PyTorch, обучить модель классификации лица по 5 основным эмоциям (angry, sad, neutral, happy, surprise). На выходе получить модель, логируя результаты в tensorboard, сравнить accuracy на train-е и валидации. Конвертировать модель в формат ONNX и выполнить инференс в ONNX Runtime. Скрипт должен иметь возможность получать изображение как с Web-камеры/видео, так и из файла.
Таким образом, требуется прислать архив (или ссылка на google colab), содерджащий все этапы обучения модели, а также конвертированный бинарный файл и скрипт инференса.
Срок — 2 дня.
Первое впечатление
На собеседовании я признался, что:
1) Модели в PyTorch я не обучал: ранее обучал лишь на TF или использовал предобученные в PyTorch.
2) Из ONNX слышал только эти четыре буквы и знаю, зачем они нужны, но сам не трогал.
3) Вполне логичный вывод из пункта 2, что инференс моделей я не делал.
4) JavaScript не знаю (почти) и не пользовался (может, это фантомное воспоминание, но такой вопрос как будто был).
А также дополню:
5) С TensorBoard я ранее тоже не взаимодействовал.
Первый вопрос, который возник: что же я делал все эти годы?
Второй: Возможно ли за 2 дня изучить PyTorch, TensorBoard, ONNX, ONNX Runtime и JS?
Третий: Это стресс-тестовое задание, которое специально подбивалось под то, чего я не умею, чтобы проверить меня на прочность?
Процесс работы
На самом деле, у меня было еще несколько часов за день до решения задания, которые я потратил на изучение известных датасетов, моделей, SOTA-решений, в какую сторону правильнее копать, плюс куча полезных ссылок, связанных с подбором параметров для обучения, на которые было удобно ссылаться впоследствии.
Что в итоге:
Датасет – FER-2013. ЧБ-изображения размера 48х48 в количестве 36к.
Модели – VGG, ResNet. Показывали в среднем более высокое качество, часто используются. EfficientNet хорошо себя проявил на другом подобном датасете, но вполне возможно, что разница в 6 лет между этим датасетом и моделью сыграла свою роль в ее популярности.
Сперва я занимался предобработкой датасета, изучив баланс классов и сами изображения для каждого класса. Вердикт: не оч. Неудивительно, что SOTA-решения показывают точность около 75%, с такими-то рожами... Но, в связи с тем, что это единственный хорошо изученный и одновременно небольшой датасет, полюбить пришлось и козла.
Первым выбором стала модель VGG19, усовершенствованная версия которой светилась среди SOTA-решений этого года (Спустя 10 лет не только я оказался в этом богом забытом месте). SOTA-версию идейно я понял, а вот технически не понял, поэтому не стал юзать, хотя можно было бы изучить. Просто не захотел напороться на подводные камни там, где имел слабое представление и кучу зависимостей от старых версий библиотек.
К концу первого дня у меня была первая готовая модель, с учетом первой пробы пера обучения на PyTorch и логгирования в TensorBoard, а также ударов всеми частами тела о
Точность: 73%. Близко к SOTA, за исключением того, что у меня лишь 5 классов, а не 7, как в изначальном датасете.
На этом день закончился.
#offer
Please open Telegram to view this post
VIEW IN TELEGRAM
Paperswithcode
Papers with Code - FER2013 Dataset
Fer2013 contains approximately 30,000 facial RGB images of different expressions with size restricted to 48×48, and the main labels of it can be divided into 7 types: 0=Angry, 1=Disgust, 2=Fear, 3=Happy, 4=Sad, 5=Surprise, 6=Neutral. The Disgust expression…
👍2🍌1
Приходишь пожарить картофель – уходишь Дата-саентистом
P.S. автор рецепта хоть бы лямбду сказал, чтобы понимать, какие жертвы ждать среди картофеля...
#offtopic
P.S. автор рецепта хоть бы лямбду сказал, чтобы понимать, какие жертвы ждать среди картофеля...
#offtopic
🍾1
Тестовое задание: часть 2 ✍️
2️⃣ Второй день
Проснулись — улыбнулись: все шло по моему рабочему плану "К концу первого дня первая модель, к концу второго – готовый инференс".
Я решил довести обучение до ума: чуток подрегулировать параметры модели, learning rate и прочие вещи. По итогу на все той же ласточке VGG19 достаточно быстро довел до 76%, после чего успокоился и решил, что для тестового задания качество будет достаточным. Дальше — веселее, пришло время конвертации модели в ONNX.
Сразу же вылез тот факт, что модель я тренировал на изображениях размера 48x48, а такая интересная штука, как AdaptiveAvgPool2d (который и позволяет подавать модели фотографии изображения другого размера для обучения) конвертируется в ONNX только для изображений формата 224x224. В противном же случае возникает ошибка, которая в действительности сейчас практически не решается. Таким образом, модель сама по себе работает, а в ONNX перевести не вариант. Перепробовал 4-5 наиболее адекватных решений из обсуждений этой проблемы на гитхабе, ни одно из них не помогло (одно даже заработало, только вот точность упала до 50%).
Итог: время на исходе, часы потрачены, а модели нет. Tо есть, случилась ситуация как в этих детских играх с бросанием кубика и ходами по количеству выпавших очков, где перед финишем ты попадаешь на клетку, возвращающую тебя на самое начало. Делать нечего — решил учить другую модель, остановился на ResNet. Благо, там этот же AdaptiveAvgPool имел размерность 1х1, за счет чего не возникло проблем при конвертации (и это я проверил, разумеется, до обучения).
С помощью лома и какой-то там матери обучил модель, точность которой составила 72%. Падением на 4% я удовлетворился.
Далее — инференс. Сразу же при поиске, как подключить результат к вебке, нашел ONNX Runtime Web Demo от Microsoft, в котором по факту была задача из моего ТЗ. Практически тупо один в один: модель для классификации эмоций, позволяющая загружать картинки и включать вебку. Более того, обучена она была на том же датасете. Опять же, к гадалке не ходи, скорее всего при выборе задачи эту демку там же и нашли. Разумеется, я не стал далеко уходить от примера — установил Node JS, запустил у себя этот проект, вырезал из него все остальные модели, наладил связи и запустил свою.
В результате было что-то несусветное: счастливые люди превратились в дед-инсайдов, грустные – в агрессивных, и далее по списку. Написал инференс на Python, стал проверять на картинках — там все в порядке. Главное и единственное подозрение пало на входные данные. Подозрения подтвердились проверкой и выводом информации в консоль, дальше я примерно имитируя трансформации, которые производились с помощью PyTorch перед подачей в модель, дописал их на JavaScript, основываясь на значениях тензоров, и в итоге получил результат близкий, но все же не идентичный.
✅ Итог: на часах 5 утра, я освоил PyTorch и TensorBoard за один день, ONNX, ONNX Runtime за второй день, а JavaScript — за одну ночь. Модель обучена и работает, хотя и слегка калечно. Тестовое задание упаковано и отправлено.
#offer
Проснулись — улыбнулись: все шло по моему рабочему плану "К концу первого дня первая модель, к концу второго – готовый инференс".
Я решил довести обучение до ума: чуток подрегулировать параметры модели, learning rate и прочие вещи. По итогу на все той же ласточке VGG19 достаточно быстро довел до 76%, после чего успокоился и решил, что для тестового задания качество будет достаточным. Дальше — веселее, пришло время конвертации модели в ONNX.
Сразу же вылез тот факт, что модель я тренировал на изображениях размера 48x48, а такая интересная штука, как AdaptiveAvgPool2d (который и позволяет подавать модели фотографии изображения другого размера для обучения) конвертируется в ONNX только для изображений формата 224x224. В противном же случае возникает ошибка, которая в действительности сейчас практически не решается. Таким образом, модель сама по себе работает, а в ONNX перевести не вариант. Перепробовал 4-5 наиболее адекватных решений из обсуждений этой проблемы на гитхабе, ни одно из них не помогло (одно даже заработало, только вот точность упала до 50%).
Итог: время на исходе, часы потрачены, а модели нет. Tо есть, случилась ситуация как в этих детских играх с бросанием кубика и ходами по количеству выпавших очков, где перед финишем ты попадаешь на клетку, возвращающую тебя на самое начало. Делать нечего — решил учить другую модель, остановился на ResNet. Благо, там этот же AdaptiveAvgPool имел размерность 1х1, за счет чего не возникло проблем при конвертации (и это я проверил, разумеется, до обучения).
С помощью лома и какой-то там матери обучил модель, точность которой составила 72%. Падением на 4% я удовлетворился.
Далее — инференс. Сразу же при поиске, как подключить результат к вебке, нашел ONNX Runtime Web Demo от Microsoft, в котором по факту была задача из моего ТЗ. Практически тупо один в один: модель для классификации эмоций, позволяющая загружать картинки и включать вебку. Более того, обучена она была на том же датасете. Опять же, к гадалке не ходи, скорее всего при выборе задачи эту демку там же и нашли. Разумеется, я не стал далеко уходить от примера — установил Node JS, запустил у себя этот проект, вырезал из него все остальные модели, наладил связи и запустил свою.
В результате было что-то несусветное: счастливые люди превратились в дед-инсайдов, грустные – в агрессивных, и далее по списку. Написал инференс на Python, стал проверять на картинках — там все в порядке. Главное и единственное подозрение пало на входные данные. Подозрения подтвердились проверкой и выводом информации в консоль, дальше я примерно имитируя трансформации, которые производились с помощью PyTorch перед подачей в модель, дописал их на JavaScript, основываясь на значениях тензоров, и в итоге получил результат близкий, но все же не идентичный.
#offer
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
GitHub - microsoft/onnxruntime-web-demo: demos to show the capabilities of ONNX Runtime Web
demos to show the capabilities of ONNX Runtime Web - microsoft/onnxruntime-web-demo
Тестовое задание: часть 3 ✍️
Давно я не выходил на связь, не хотел раньше времени говорить, чтобы не сглазить.
Обратная связь пришла уже через два дня: тестовое задание выполнено хорошо, я интересен команде, оставались лишь формальные вопросы. На днях выслали оффер, съездил пару раз с документами в офис, а уже сегодня вышел на работу.💼
P.S. как-то бездарно я веду канал: мол, буду продираться через тернии, а по итогу конвертация собеса в работу оказалась стопроцентной. Обещаю исправиться – теперь будет о чем рассказать уже изнутри.📂
К посту прикрепил пару фотографий с места событий📍
#offer #progress #path
Давно я не выходил на связь, не хотел раньше времени говорить, чтобы не сглазить.
Обратная связь пришла уже через два дня: тестовое задание выполнено хорошо, я интересен команде, оставались лишь формальные вопросы. На днях выслали оффер, съездил пару раз с документами в офис, а уже сегодня вышел на работу.
P.S. как-то бездарно я веду канал: мол, буду продираться через тернии, а по итогу конвертация собеса в работу оказалась стопроцентной. Обещаю исправиться – теперь будет о чем рассказать уже изнутри.
К посту прикрепил пару фотографий с места событий
#offer #progress #path
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥6👍1
Прошла первая рабочая неделя в компании, спешу рассказать (спустя почти две недели
Я устроился в ЮГПА в отдел ML-разработки. Таким образом, моя основная работа состоит в том, чтобы находить данные и обучать модели. В общем, это то, чего я хотел и искал. Наш продукт – CubicCV. Если кратко, то делаем систему видеонаблюдения с кучей плюшек сверху: от отслеживания людей в кадре, их пола и возраста до проверки износа оборудования, Face ID и иных полезностей.
Команда мне понравилась, все ребята очень приятные, руководитель отличный, местоположение и условия в офисе хорошие.
Что мне особенно понравилось – моя тестовая задача с определением эмоций оказалась не высосанным из пальца заданием, а реальной задачей на проекте. Поэтому, неудивительно, меня назначили на эту задачу, чтобы теперь уже не сумбурно, а адекватно её допилить. За пару месяцев до меня этой задачей занимался другой человек, даже сделал её, поэтому нужно было сравнить наши модели и выбрать лучшую.
В связи с тем, что я вышел на работу в пятницу, еще и в неполный рабочий день, я только и успел, что настроить рабочее пространство, познакомиться с людьми, получить доступы и сходить после работы в бар с коллегами буквально на часок.
Понедельник. Я открываю репозиторий, в котором другой человек уже решал ту же задачу. Первое ощущение – паника, потому что передо мной куча непонятного кода, логики, модулей, структур и иных вещей. Сам код в целом хороший, но при условии околонулевой документации и неочевидных взаимодействий разруливать было непросто.
Вроде начинаю чё-то робко понимать. К концу дня я изучил код вдоль и поперек, нашел датасеты для задачи, дальше оставалось действовать.
Жаль, что я веду канал не каждый день – эти 4 дня смешались, потому что я решал все ту же задачу. Расскажу чуть подробнее про поиск данных: сперва нашел замену своему прошлому датасету – FER+ – оказывается, есть хорошие люди, которые сели и переразметили старый FER, изменив классы для неправильных изображений, а также убрав изображения без лиц. Затем я нашел кусочек AffectNet на 40к картинок, а потом еще 5.5 тыс. изображений, найденных и размеченных каким-то святым человеком, потому что их качество оказалось на порядки выше того, что есть в FER и AffectNet.
После этого я, изучив чужой код, понял, что изначально мы обучали наши модели на разных данных, на разное число классов, с различными предобработками. То есть, модели вообще сравнивать смысла нет.
Таким образом, дальше предстояло сделать предобработку данных по подобию, но лучше той, что была ранее: выровнять лица по горизонтали (для этой задачи взял RetinaFace, чтобы на основе местоположения глаз осуществлять поворот).
Работа с данными удалась, я с подсказкой руководителя в очень нужный момент даже не успел упереться в одну нетривиальную проблему, и к утру понедельника брошенная мной обучаться на ночь с пятницы на субботу модель выдала 78.7% точности.
В сравнении с тем, что было ранее, прирост составил 10% (он, конечно, в целом не такой высокий, потому что я ведь обучал на меньшее число классов), а с моим личным результатом на то же число классов прирост составил около 5%.
В общем, результат очень неплохой, руководитель меня похвалил, так что я, можно сказать, сразу же себя проявил с хорошей стороны.
Попытки играться с архитектурами, параметрами и т.д. ни к чему особо не привели – простой ResNet18 решил эту задачу наилучшим образом, даже его модификации не показали никаких улучшений.
Теперь мне остается сконвертировать модели в ONNX, TRT и подбить код для удобного сравнения моделей между собой.
То ли еще будет...
#progress #hard
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2❤1👌1🏆1
Впервые мне предстояло решить задачу, всецело опираясь на чужой проект и модернизируя его код. Несмотря на то, что он по большей части был хорошим, я столкнулся с различными проблемами, и даже пару раз больно ударился. Собственно, ниже несколько выводов:
Это очень полезная штука, хотя бы ей надо пользоваться, если не пишешь документацию, потому что из нее можно понять примерный вид входа/выхода функции.
Может показаться, что документирование отнимает много времени, но на самом деле правило простое: написали функцию, сделали аннотации типов – сделайте и docstring, с учетом помощи IDE это займет 3-4 минуты и впоследствии сэкономит не менее 10-15 при повторном изучении кода. Также не забывайте проставлять однострочные комментарии в неочевидных местах, если такие есть.
Вот здесь я получил удар под дых, потому что при обучении модели постфактум один раз не увидел, что там вручную выставлено 7 классов, а не 5. Решение: сразу завести файл с набором констант, и в случае их зависимости друг от друга делать так, чтобы при изменении одной изменялись и зависимые.
Если в коде в различных файлах есть повторяющиеся функции или действия, их тоже необходимо минимизировать до нуля, чтобы при малейшем изменении не пришлось бегать между файлами и делать замены, или, не дай бог, вообще не найти до поры до времени возникшую из-за этого ошибку.
Казалось бы, настолько очевидные вещи, которые сами собой разумеются – зачем их вообще озвучивать? Я просто надеюсь, что прочитавшие и причастные узнали, согласны и помогут своим коллегам не умереть под завалами вашего же кода
#hard
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1👍1👌1