uk
Feedback
DevFM

DevFM

Відкрити в Telegram

О разработке: AI, технологии, инструменты, system design, процессы, команды Для связи @sa_bul

Показати більше
3 050
Підписники
-224 години
-37 днів
+12630 днів
Архів дописів
DevFM
3 050
Теория разбитых окон 10% людей* всегда несут фантик до мусорки, 5% людей всегда бросают фантик под ноги. Остальные 85% людей действует по ситуации — если вокруг уже грязно, то бросают под ноги, а если чисто — то несут до мусорки. В статье О разбитых окнах проводится параллель между разбитыми окнами и проектной разработкой. Выстраивание правильных процессов даёт долгосрочный положительный эффект. На наш взгляд, в правильном процессе обязательны: — документация (Docstrings, Readme) — статический анализ кода (pylint, mypy, ...) — тесты — постановка задач и тракт issue — branch — merge request — code review — CI/CD — онбординг новых разработчиков Эксперименты про теорию разбитых окон интересно описаны в вики. *наши наблюдения. #edu #devfm

DevFM
3 050
О правах на код в канале ЦИФРА Мы рассказываем об IT-технологиях. Существует другой уровень абстракции с не менее интересными процессами. Высокоуровневое понимание цифрового права необходимо современному разработчику. Кому принадлежат права на разработанную программу? В посте ребята освещают спорный вопрос о праве на код. Программист обвиняет компанию в неправомерном использовании разработанной им программы. Захватывает внимание отсутствие единогласия судов разных инстанций и игнорирование очевидных разработчикам фактов. Спор дошёл до Конституционного суда, где автор доказывал свое право на судебную защиту. #edu

DevFM
3 050
Backup: сентябрь Python 1. Типовая структура python-проекта без веба 2. Вопросы для junior python developer  3. Зачем WSGI в Python? 4. Почему стоит выбрать Python 5. Возможности f-строк  6. Разработка надёжных Python-скриптов  7. Pattern Matching  Нетехнические навыки: 1. Социальная инженерия Кевина Митника 2. Хорошая и плохая прокрастинация  3. История поиска работы "Борис опять" Рассуждаем о программировании: 1. Sublime Merge — графический git-клиент 2. Магия CORS  Разбираем код: 1. Что же не так в этом коде? 2. Хитрости getattr Hardskills: 1. Брокер сообщений Apache Kafka  2. Проектируем сервис: поиск организаций по картам 3. Поиск команд в консоли с помощью ctrl+r  4. Постигаем git stash  5. Мониторинг важен. Рабочий мониторинг ещё важнее 6. Продолжаем о собеседованиях  7. Миграция БД без даунтайма #backup

DevFM
3 050
Как обмануть нейронную сеть В статье One pixel attack for fooling deep neural networks изложен метод атаки на нейросеть, когд
Как обмануть нейронную сеть В статье One pixel attack for fooling deep neural networks изложен метод атаки на нейросеть, когда в результате замены всего одного пикселя на изображении распознавание становится некорректным. Чёрным подписано исходное изображение, в скобках "уверенность" нейросети, синим — распознавание после замены пикселя. И чашка становится супницей, детская люлька — бумажным полотенцем, чайник — джойстиком, а хомяк — соской. Что это значит на практике? Дорожный знак из-за небольшой наклейки может превратиться в "кирпич" для беспилотного автомобиля, заставив машину остановиться. В современном машинном обучении многие непозволительно мало внимания уделяют злонамеренным атакам. #skills #datascience

DevFM
3 050
Кино на выходные В 2021 году в Китае полноценно развернули систему социального кредита. За нарушения у гражданина снижают рейтинг, за полезные действия вроде благотворительности рейтинг повышают. Рейтинг влияет на многие сферы жизни, в том числе на доступность перемещения внутри страны. Идея не нова. Уже в 2016 году в серии Нырок e1s3 сериала Чёрное зеркало показывалось возможное развитие событий. Как повлияет на людей возможность оценить любой поступок человека? Ещё раньше, в 2015 году в серии Ты не Иелпишь e19s4 мультсериала Южный парк рассматривался вопрос массовых рейтингов, в частности, оценки кафе и ресторанов. Велико ли влияние инфлюенсеров? Кого вообще считать инфлюенсером? Предупреждение — в целом сериал Чёрное зеркало достаточно мрачный, а Южный парк наполнен сарказмом, перегибами, матом и местами жестью. #fun #films

DevFM
3 050
Пятничное развлекательное. Среди ИТ-тусовки весьма популярны комиксы xkcd. К каждому комиксу есть интересное текстовое дополн
Пятничное развлекательное. Среди ИТ-тусовки весьма популярны комиксы xkcd. К каждому комиксу есть интересное текстовое дополнение, которое в английской версии появляется после наведения на картинку, в русской — сразу показывается под картинкой. На Дзене есть крутая статья про историю xkcd. Приготовили для вас подборку наших любимых комиксов на ИТ-тематику: Хороший код Себе из будущего (код придётся переписать) Успех (критерий успешности при сборке Linux) Усилок рок-группы (умный инженер) Руководства (man sudoers) Самоописание (изящная рекурсия) Разница (учёный vs нормальный человек) #fun #xkcd

DevFM
3 050
Pattern Matching В python 3.10 появилась долгожданная возможность использовать конструкцию match/case. На первый взгляд это классический switch, но в питоне пошли дальше. В статье Recipes and Tricks for Effective Structural Pattern Matching in Python автор рассказывает о неочевидных возможностях pattern matching: — как использовать в блоке case регулярные выражения, хотя это не предусмотрено по умолчанию — как с помощью атрибута __match_args__ сделать позиционные аргументы в клаccе и использовать их в case — как хитро проверить ключи и их значения в json-объектах — и несколько ещё менее очевидных применений Важное предупреждение: этот функционал открывает много возможностей. Первая реакция: ого, как можно! Но чрезмерно сложный case затрудняет читабельность кода и приводит к неочевидным проблемам. О неочевидных проблемах автор также не забывает: — порядок case важен, потому что какой-то case может быть недостижим — неожиданное поведение при несовпадении ни с одним из case #python

DevFM
3 050
Миграция БД без даунтайма Во время разработки несложно вносить изменения в базу данных — достаточно создать и применить миграции. В приложении с живыми пользователя так просто это не сделать. При последовательном обновлении базы и приложения легко оказаться в рассинхронизированном состоянии, например, с обновлённой базой и старой версией приложения. Старая версия приложения не умеет работать с обновлённой базой, в результате будут сбои до тех пор, пока новая версия приложения не заменит старую. В статье Migrating a production database without any downtime (перевод) рассказывается на примерах и с картинками, как пошагово решать проблему обратной совместимости базы данных и приложения. #skills

DevFM
3 050
История поиска работы "Борис опять" Недавно вышла интересная серия постов о поиске работы machine learning-инженером. Пожалуй, самое ценное в ней — личный опыт и нешаблонные советы автора. История ещё не закончена, автор продолжает рассказывать о своём опыте переезда и искренне делится эмоциями. Наши мысли по мотивам этой серии статей: 1. Всегда стоит критически подходить к таким постам. Это как книги об историях успеха — что сработало для одних, не сработает для других. Особенно аспекты, связанные с нанимающей стороной — компании разные и ситуации тоже бывают разные. 2. "Нельзя врать", — говорит автор. Врать действительно нельзя, но приукрасить можно. Грань между "приукрасить" и "врать" заслуживает отдельного поста. 3. Интересно увидеть реальное CV автора. Не будем вдаваться в нюансы составления CV, но хорошей практикой считается summary часть. В ней следует тезисно рассказать кто вы, что умеете и что хотите. Автор сетует на блок CV с перечислением технологий, которыми владеешь. И что он — инженер, готовый овладеть всеми необходимыми для решения задачи навыками. Как раз об этом и стоило бы сказать в summary. Способность осваивать новое для решения задач — скилл хорошего разработчика. А блок технологий полезен для HR, которые умеют только grep-ать резюме. 4. По этой серии постов молодой разработчик сможет приземлиться, понять, что IT это не радужное место с гарантированными 300кк/с. Найти хорошо оплачиваемую работу — это труд и дисциплина. 5. Отдельного внимания заслуживают части, где автор описывает примеры тестовых заданий, а главное — ход мыслей при решении. Именно здесь понимаешь важность широкого кругозора. Об этом у нас был отдельный пост. 6. Переговоры — важная часть собеседований. "Уметь говорить нет" выглядит простым и понятным советом, который на деле применять совсем не просто. Хорошо работает приём, будто решение принимаете не вы, и нужно обязательно посоветоваться с третьей стороной, от которой зависит финальное решение. #edu

DevFM
3 050
Хитрости __getattr__ В примере выше мы создаём класс Users, который, по сути, скрывает внутри обычный список пользователей. Для получения первого и последнего пользователя потребуется писать self.users[0] и self.users[-1]. Такие конструкции раскрывают внутреннее устройство класса, загрязняют код и делают его менее читабельным. Мы заставляем внешнего потребителя класса разбираться в его внутреннем устройстве. Один из вариантов решения — декоратор @property и создание нужных атрибутов. Но для большого количества атрибутов будет спагетти из однотипных property. Другой приём — использование динамических атрибутов. Создаём словарь, где ключом будет имя, а значением индекс в списке пользователей. Метод getattr проверяет наличие искомого атрибута среди ключей словаря, если такой есть — то возвращает пользователя по индексу из словаря. Детали решения Почему первый print выведет U1? Вся суть в том, как python ищет атрибуты. Атрибут ищется в классе. В нашем случае атрибута first нет. Далее производится поиск по иерархии наследования, и тоже безуспешно. Только в этом случае вызывается магический метод __getattr__, и параметром ему передаётся имя аргумента в виде строки "first". По словарю first превратится в нулевой индекс из self.users, что соответствует выводу U1. Почему второй print выведет new_user? В 17 строке явно создаем атрибут first и присваиваем ему значение new_user. В 18 строке в классе будет найден атрибут first и метод getattr не будет вызываться. Обратите внимание ещё на одну интересность. Вывод self.users.users[0] всё ещё даст U1. Получается некая несогласованность. Мы переопределили first, и это уже не первый пользователь. Поставьте 🔥, если интересно возможное решение такой проблемы.

DevFM
3 050
Что выведет второй print в 18 строке?
Anonymous voting

DevFM
3 050
Что выведет первый print в 16 строке?
Anonymous voting

DevFM
3 050
#codereview #quiz
#codereview #quiz

DevFM
3 050
Магия CORS При разработке веб-приложения в консоли браузера можно увидеть не очень информативную ошибку: Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at .. В результате беглого гугления глаза разбегаются от количества разных объяснений и костылей для фикса. И часто решение сводится к "забил и поставил хедер Access-Control-Allow-Origin: *". К сожалению, нельзя дать простое и быстрое решение этой проблемы. Мы рекомендуем статью Deep dive in CORS (перевод), где подробно, с картинками излагается история и причины возникновения CORS, где и как они применяются, и почему решение выше — плохое. В конце статьи приводятся практические советы по настройке CORS. #procode

DevFM
3 050
Sublime Merge — графический git-клиент Как мы писали раньше, 85% разработчиков работают с git из консоли. Но для сложного merge c конфликтами рекомендуем использовать sublime merge. На видео демонстрируем, как sublime merge представляет состояние разных веток и позволяет в один клик выбирать нужный код для слияния. Также sublime merge может быть полезен тем, кто только начинает осваивать git. Он дает наглядное представление об устройстве репозитория и взаимосвязях между ветками. #procode

DevFM
3 050
Пятничное развлекательное — Люди Икс Мстители прочно вошли в современную культуру. Но новаторами в части масштабной экранизации комиксов были Люди Икс — отличная линейка комиксов, мультфильмов и фильмов, которая осталась в сердцах многих. Интересные способности мутантов, запоминающиеся персонажи, противостояние Профессора Икс и Магнето, любимый Хью Джекман в роли Росомахи — целая вселенная. Попытка реанимировать франшизу за счёт перемещений во времени весьма негативно отразилась на логике повествования, в результате фан-база сильно пострадала. Возможно, первые три фильма нулевых стоило оставить особняком, перезапустив вселенную с нуля. Совершенно бестолковый в раннем фильме Дедпул был удачно перезапущен и полюбился зрителям в том числе за счёт высмеивания всего и вся с разрушением четвёртой стены. В часовом ролике Как убили людей Икс в кино восстанавливают хронологический порядок повествования в фильмах. Есть спойлеры. #fun

DevFM
3 050
Пятничное развлекательное — подборка В этот день вместо профильного контента у нас культурный код — рекомендации фильмов, книг и мемов. Мы отдыхаем и делимся тем прекрасным, что у нас есть. Вспомним, что мы уже обсуждали: — ужасные интерфейсы7 красных линийдудеизм Лебовски — фильмы про хакеровцыганbatmetal — фильмы про реальность происходящегочеловека (Трасса 60, я и другие) — книгу методы рационального мышлениябобров А какое пятничное развлекательное понравилось вам? #fun

DevFM
3 050
Разработка надёжных Python-скриптов В статье (оригинал) показано, что нужно не забыть в поддерживаемом проекте на python: — документацию — разбор аргументов командной строки — логгирование — тесты По каждому пункту есть вопросы. Например, для документации мы бы предложили использовать Google Docstring, для разбора аргументов — click, для логгирования — loguru. Но выбор конкретного инструмента — дискуссионный вопрос, главное — не забыть ни про один из этих элементов в своём следующем проекте, даже небольшом. #python

DevFM
3 050
Нас 2^9=512 — очередное круглое число. Все помнят, что в 512 году произошло легендарное извержение Везувия. Не то, которое ст
Нас 2^9=512 — очередное круглое число. Все помнят, что в 512 году произошло легендарное извержение Везувия. Не то, которое стёрло Помпеи с лица земли в 79 году, а одно из полусотни других извержений, но всё же событие. Сегодня читаем Как правильно задавать вопросы, если ты начинающий айтишник. #ToTheMoon

DevFM
3 050
Возможности f-строк В статье Python f-strings Are More Powerful Than You Might Think автор рассказывает об интересных возможн
Возможности f-строк В статье Python f-strings Are More Powerful Than You Might Think автор рассказывает об интересных возможностях f-строк: — форматирование даты и времени — различные форматы представления чисел — выравнивание строк по ширине — условное форматирование Особенно удобно оказалось при логгировании и отладке выводить имена и значения переменных, используя такой синтаксис: print(f"{var = }") #python