partially unsupervised
6.52K subscribers
20 photos
2 files
153 links
@arsenyinfo пишет про software engineering и machine learning
Download Telegram
Эффект бабочки в опенсорсе: случайно обнаружил куски своего кода двухлетней давности в плагине для GIMP.

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

1) Несоответствие уровней абстракций. Например, в скиллах человек перечисляет: умею AWS, machine learning, software design, REST API и YOLO v3. Чувак, если ты в рамках малого куска резюме не можешь обеспечить консистентность абстракций, то заранее страшновато смотреть на твой software design.

2) Неровная производная грейдов на предыдущих местах работы. Цепочка intern => engineer => senior engineer => lead engineer выглядит логично. Цепочка senior engineer => intern / junior => head of something вызывает некоторые вопросы: понятно, в какой дыре он был "сеньором", если дальше смог попасть только на стажировку; да и попадание из джунов в большие боссы намекает на некоторую инфляцию тайтлов на последнем месте работы. Конечно, соверешенно не проблема, что человек работал на какой-то галере - проблема в том, что он смело транслирует этот булшит в CV, а значит его остальное хвастовство можно смело делить на X в уме.

Вообще, хвастаться тоже надо уметь. Формулировки типа "Built 100+ ML models for in cloud environment using Random Forest, a predictive modeling technique, in R programming language" могут впечатлить только очень специфическую аудиторию, в определенных кругах это называется "гнилые понты". Play stupid games, win stupid prizes.
Сегодня с разных сторон прилетело удивительное количество интересных ссылок сугубо про компьютерное зрение, и я просто обязан поделиться хотя бы некоторыми из них:

- Два обзора недавнего CVPR 2021 с фокусом на разные темы: первый, второй. Если кто-то не в курсе, это крупнейшная академическая конференция про CV.
- Отличная статья про StyleGAN (и многое вокруг) от @CVML_team. Вообще, посты Антона на Хабре - едва ли не лучший русскоязычный контент про computer vision: и академическая широта, и прагматичный взгляд из индустрии, и хороший слог.
- Наконец, @BoreMeNo прислал ссылку на видео про робота для игры в пул. Там маловато деталей реализации, но в целом за 20 минут можно понять, что нужно знать и уметь для построения подобной умной железки. CV часть, на мой взгляд, довольно простая, а вот остальное 🤯
Сидели недавно в баре с приятелем, болтали про работу. И он сказал примерно следующее: "в такой-то части компании Х полный бардак, некоторые разработчики работают на второй работе и особо не скрывают этого". И это напомнило историю, которую мне пересказали в аналогичных условиях.

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

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

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

Расскажите в комментариях ваши любимые истории о том, как люди совмещают несколько работ, и к чему это приводит!
Прочитал прекрасный лонгрид про Трампа современное де-факто кастовое строение общества (очень рекомендую осилить целиком). Самые нетерпеливые читатели могут уже возмутиться "эй, мне обещали, что это канал про ML и software engineering, верните мои деньги!". Но погодите отписываться, это пост на самом деле про карьеру в software.

Вырву цитату из этой статьи:

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

Этот тезис обязателен для осознания многим, например:
- тем, кто пытается вкатиться в индустрию без релевантного образования (а таких людей очень много);
- тем, кто в этом помогает (авторы всяких курсов программирования);
- тем, кто застрял в карьере на уровне code monkey (и недоволен этим).

Действительно, ставшие популярными behavioral интервью проверяют не только, не мудак ли кандидат, но и является ли он частью "касты технарей". Это необязательно значит быть архетипичным нердом, но какие-то общие ценности ожидаются. Знаменитое fake it till you make it - как раз про то, чтобы успешно мимикрировать под эту касту, и потом уже влиться в нее по-настоящему.

Разумеется, все вышесказанное никак не противоречит необходимости ботать алгоритмы, уметь пользоваться современными инструментами, сколько-то знать математику и в целом уметь программировать. Но этого недостаточно: при прочих равных из двух кандидатов, закончивших одинаковые курсы, пролиставших одинаковые учебники и сделавших одинаковые пет-проекты, первым получит работу тот, кто в свободное время читает научпоп про космос и играет в видеоигры, а не тот, кто с юности любит музеи современного искусства и артхаусное кино.
Я традиционно недолюбливаю Jupyter ноутбуки, основные причины такой нелюбви в свое время прекрасно описал Joel Grus. Конечно, в некоторых задачах они прям хороши (поиграть с визуализацией или подготовить сколько-то интерактивный отчет для executives), хотя и в подобных задачах я все чаще использую streamlit. Поэтому появление Google Colab в свое время тоже прошло мимо меня.

И вот недавно, когда Google выкатил дополнительный тарифный план Colab Pro+, я задумался: а можно ли этим хоть как-то пользоваться вне jupyter-инфраструктуры? И, оказывается, человечество уже все придумало - для SSH подключения к colab инстансу достаточно:
1) запустить colab ноутбук;
2) поставить там ngrok или cloudflared и запустить его в бэкграунд процессе;
2.1) в случае с cloudflared - поставить соответствующий клиент на локальной машине;
3) подключиться по SSH
4) PROFIT!

В итоге можно для мелких экспериментов бесплатно получить почти полноценный инстанс с Ubuntu, парой CPU ядер, CUDA и рут-доступом. Если лень делать это все руками, можно воспользоваться готовыми решениям, например, colab-ssh для cloudflared, сниппет для ngrok.
Наверняка почти все читатели что-то слышали о том, что Apple планирует сканировать ваши айфоны в поисках детского порно. Так вот, на Реддите утверждают, что экспортировали модель NeuralHash, которая используется для матчинга ваших фоток с базой запрещенного контента, и сконвертировали ее в ONNX. Кстати, это обычный MobilenetV3.

Сейчас, в условиях отсутствия в публичном доступе базы хэшей плохого контента, эта модель малополезна для злодеев, и представляет интерес в основном для любопытных инженеров. С другой стороны, если проверка осуществляется на девайсе, эта самая база тоже может быть найдена где-то среди файлов ios, и тогда технически продвинутые педофилы смогут легко обойти защиту Apple.
Today I learned: в pytest можно легко тестировать логирование. Не нужно самому возиться с моками для логгера, все уже готово - достаточно использовать дефолтную фикстуру caplog (пример использования для ленивых).

Очень удобно, если у вас бывает своеобразный код, где логи - это единственный side effect. С другой стороны, такой код может быть и звоночком - возможно, с дизайном что-то не так.
Три ссылки, объединенные темой "вряд ли мне это пригодится, но впечатляет!"

1) Пост в блоге Яндекса о том, как они в коллаборации с HuggingFace сделали DeDLOC - фреймворк для распределенного обучения больших deep learning на гетерогенном "кластере", а точнее - разношерстном наборе волонтерских GPU машин (и Google Colab инстансов, хаха).

2) CLI-тулза для семантического поиска по изображениям на базе CLIP. Т.е. cd photos && rclip "search query"

3) Огромный список open source проектов про sustainability природных ресурсов. Интересно, что в списке прекрасно сочетаются проекты вида "ML модель, чтобы делать Х (например, находить объекты со спутниковых снимков)" и "калькулятор CO2 выбросов от твоей видеокарты".
Возможно, вы знали, что существует такая задача как approximate matrix multiplication (я и не подозревал). Возможно, вы даже представляли, что современные методы приближения могут быть на порядок быстрее, чем точное вычисление. Но большинство из вас наверняка не видело эту свежую работу, которая утверждает, что их метод обеспечивает ускорение на два порядка.

Конечно, до прикладного применения еще очень далеко, но совершенно нельзя исключать, что в обозримом будущем это будет привычным инструментом в ML (как, например, квантизация float32=>float16).
Если вы вдруг забыли, кто такой Юрген Шмидтхубер, то он, обмазавшись нефтедолларами, спешит напомнить, что не только изобрел примерно весь современный диплернинг, но еще и бицуху накачал нормально 💪
Минутка рекламы. Хочу посоветовать канал @bdscience_ru за авторством широко известного в узких кругах Леши Чернобровова.

Мы познакомились с Лешей в 2017, когда он приехал на минский датафест и сделал отличный доклад про ML для ценообразования; впоследствии я не раз давал знакомым ссылку на видео.

Крупные компании платят Леше чемоданчики денег за консультации, а мы, тем временем, можем просто читать его канал.
Недавно объявили результаты Шнобелевской премии 2021. И там есть кое-что занятное для машинлернеров (особенно выходцев из ex-USSR).

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

В абстракте оригинальной статьи написано, что body-mass index is estimated using a computer vision algorithm, это интересно! Полная статья стоит денег, но sci-hub нам поможет🏴‍☠️

Оказывается, что лауреат премии использовал для оценки BMI готовый алгоритм. Есть ссылка на некий Google Drive, но эта ссылка битая, приходится искать - я нашел только статью на arxiv. Итак, статья действительно есть, даже принята на какую-никакую, а конференцию. Ссылки в статье уже тоже в основном не работают.

Статья примерно такая: взяли датасет лиц с BMI лейблами, как-то почистили его, оставили 4к лиц, кое-как поделили их на трейн/тест (every person that has a face image in test set also had a face image in the training set), извлекли из них VGG фичи, обучили SVM регрессию поверх этих фичей и даже посчитали какие-то метрики: корреляция Пирсона по тестовой выборке составила 0.65. Оставшиеся 25% статьи поднимают этические вопросы.

Иными словами, как студенческая работа ок, но ни для чего серьезного это не годится. Соответственно, и та самая работа по экономике заведомо бестолкова, но не тем причинам, которые могли бы отметить в жюри премии. Garbage in - garbage out.
Так как мне в обозримом будущем может понадобиться поверхностное знание NLP, решил пройти какой-нибудь небольшой курс и выбрал NLP Course | For You. Так вот, это кайф с первой недели!

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

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

~~

Вообще идея "давайте вернемся к истокам и будем делать образование текстом" не новая, например, ее активно продвигает Educative.io:

Videos are holding you back. The average video tutorial is spoken at 150 words per minute, while you can read at 250. That‘s why our courses are text-based.

У Educative есть несколько хитовых курсов: например, Grokking the System Design Interview и Grokking the Coding Interview (сам я их не проходил). От тех Educative курсов, которые я когда-то щупал своими руками, ощущения неоднозначные, разбежка от достойных цельных курсов до третьесортных компиляций бестолковых постов с медиума👳‍♂️. В принципе, неудивительно - платформа со свободным доступом для авторов всегда будет привлекать не только крутых ребят, но и всякий треш.
Кажется, в написании любого computer vision пайплайна обязательно должны быть два важных этапа:
1) "все-таки придется добавить больше визуализаций";
2) "все-таки где-то перепутал x и y (или height и width)".

Я как наступал на такие грабли, так и продолжаю до сих пор. Разве что дебажить начал быстрее.
Мини-история началась с того, что Notion начал раздавать промокод (ADALOVELACE) на $500. Я пользуюсь этим сервисом, так что пошел в настройки, вбил код и заодно решил посмотреть, что там вообще в настройках есть.

Нашел поле Domain - на каком домене будут находиться те записи, которые я решил пошарить. По умолчанию там рандомный бессмысленный домен, почему бы и не поменять.

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

Резонно предположить, что иногда внешние апишки так устроены, чтобы не раскрывать всю правду потенциальным злоумышленникам. Например, если кто-то явно брутфорсит пароли к вашему сервису, нормально отвечать что-то вроде Wrong password или Service not available, даже если пароль правильный и сервис нормально работает.

Long story short: несколько попыток перебора показали, что недоступны все домены по маске *arse*. Что ж, Notion не первый - я с таким уже сталкивался :(



Вообще, технические решения, основанные на white/black списках, не очень надежны.

Когда-то давно в одном популярном сервисе мы делали подсказки для опечаток в почте. Многие пользователи вводили vasya@meil.ru и страдали, что им не приходит confirmation email. Я почитал про расстояние Левенштейна и сделал так: для всех доменов не из top-N ищем соседа с расстоянием == 1 и предлагаем заменить.

Все круто, метрики везде растут, кроме одного региона - Азии. Потому что относительно популярный в Азии ymail.com не попал в глобальный top-N, и мы предлагали его заменить на gmail.com.
Я просто оставлю это здесь: A Time-Series Analysis of my Girlfriends Mood Swings. Сатирически-академический подход к важному вопросу "как девушка отреагирует, если я буду играть в видеоигры всю субботу напролет".
Спустя 10 месяцев поиска компания, в которой я работаю, смогла нанять погонщика менеджера для меня Head of ML. Он произвел впечатление на СТО своим девизом "Все мои сотрудники должны быть способны стать CEO стартапа через 10 лет!" - мол, надо развивать гребцов вширь, коучить обучать их делать более разнообразную работу, и уж тогда-то все заколосится.

Мне настолько не нравится этот девиз, что я созрел написать лонгрид про разделение ролей.

В одной из компаний, где я раньше работал, инженеры крутили свои гайки и не особенно стремились видеть большую картину. И однажды СТО собрал нас всех на оффсайте и сказал: "Дорогие инженеры, я хочу, чтобы каждый из вас после работы здесь мог стать фаундером стартапа! Благословляю вас больше вовлекаться в продуктовую работу!".

Его месседж был во многом уместен - культура компании была слегка перекошена, ownership-а на местах не хватало, инженеры могли делать херню и оправдываться в духе "с моей стороны пуля вылетела". Но вот соус, под которым месседж подавался, все испортил - инженеры чуть не устроили бунт. Многие из них пришли из компаний попроще, где занимали позиции тим-, тех- и прочих лидов, страдая и не особенно преуспевая, и потому с удовольствием вернулись к работе своими руками. "Зачем мне быть фаундером, после ухода из компании я рассчитываю уйти в другую компанию и там тоже писать код!" - возмущались инженеры, и СТО вынужден был сдать назад, пока его не подняли на вилы.

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

Не каждый должен быть готов стать CEO или фаундером через 10 лет. Не каждый даже должен готовиться стать менеджером или каким-то еще лидером - программисты находятся в отличной позиции, чтобы просто качественно делать свою работу и впредь, будучи рядовым исполнителем aka individual contributor. Как и не каждый доктор должен стремиться открывать свою клинику, не каждый редактор - открывать свое издательство, а про бордели и блудниц sex workers уважаемые читатели могут опционально додумать сами.
Хочу порекомендовать Tailscale - софт для настройки VPN, который просто работает из коробки и не требует особой конфигурации или понимания, как вообще работают сети.

Например, если covid не запер вас дома, и вам хочется хоть иногда путешествовать, и при этом иметь доступ к домашней сети и заодно прогонять через нее весь трафик, пользуясь стремным wi-fi где-то в отеле, предварительная настройка VPN с tailscale займет от силы пять минут.
Меня наконец-то пустили потрогать Github Copilot, и даже соответствующий плагин к Pycharm подоспел.

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

Ощущения, как и ожидалось, неоднозначные.

Во-первых, copilot быстро выучил структуру json-файлов, которые я перекладывал: предлагал строки вроде `if data["key"] == "value", хотя ни key, ни value в этой функции нигде не появлялись.

Во-вторых, некоторые дополнения прямо в точку. Например, по инпуту
core, *_ = centers
dists = [

предложить dists = [np.linalg.norm(c - core) for c in centers] - это круто.

В-третьих, иногда плагин берет на себя прям слишком много и начинает творить. Например, по началу файла "This script can be used to prepare...", он нафигачил еще 20+ строк (неправильного) описания скрипта, его аргументов и наимпортировал 8 библиотек, часть из которых в проекте вообще не используются.

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