DevFM
2.35K subscribers
80 photos
5 videos
492 links
О разработке: технологии, инструменты, system design, процессы, команды

Для связи @sa_bul
Download Telegram
Постигаем git stash

Переключение на другой коммит может потребоваться в тот момент, когда новая фича ещё не завершена и тесты не написаны. Например, нужно запустить код из нового merge request или сделать хот-фикс в master ветке. При попытке перейти к другому коммиту git вежливо сообщит, что переход невозможен, так как есть незакомиченные изменения: error: Your local changes to the following files would be overwritten by checkout...

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

Самое время попробовать команду git stash. В результате git временно откладывает все текущие изменения и мы получаем чистую рабочую копию. Теперь можно спокойно перемещаться по репозиторию. Чтобы вернуть наработки в рабочую копию необходимо выполнить команду git stash pop.

Подробнее почитать о команде stash можно в главе книги Pro Git (оригинал)
#skills #books
🔥14👍43
Зачем WSGI в Python?

На картинке изображён путь пользовательского http-запроса до его обработчика на питоне.

Но между ними располагаются вебсервер Nginx, WSGI-сервер Gunicorn и веб-фреймворк Django. И как это всё работает?

На видео WSGI for Web Developers Ryan Wilson-Perkin за 25 минут расскажет о всех элементах картинки, поднимет PEP3333 и покажет небольшую реализацию WSGI на сокетах.

#python #youtube
👍103🔥2
Почему стоит выбрать Python

1. Быстрая разработка. Самая сильная сторона Python — обширная стандартная библиотека и огромное число сторонних модулей на любой случай из жизни. Их применение экономит кучу времени.

2. Простая поддержка кода. Синтаксический сахар приводит к немногословным программам. Меньше кода — меньше мест для ошибок.

3. Возможность точечного ускорения кода. Изначально невысокую скорость работы можно починить разными хаками. Обычно в программе тормозит "бутылочное горлышко" . Это не вся программа, а только небольшая её часть. Зачастую профилирование позволяет найти и устранить это "бутылочное горлышко" путём переписывания кода на правильный. Если переписывание не помогло, можно использовать pypy или написать модуль на С/С++.

Конечно, нельзя забывать о низком пороге входа, развитом сообществе и кроссплатформенности.
#python #devfm
11🔥5👍2
Мониторинг важен. Рабочий мониторинг ещё важнее

Нередко систему мониторинга проекта делают в конце и кое-как. Страшно, что "кое-как" делают мониторинг даже важных вещей.

Кто-то ошибся в настройке турбины, кто-то вовремя не убрал деревья под ЛЭП, чья-то система генерации аварийных оповещений выключается (а нет оповещений — нет проблем, ведь так?), кто-то пишет код с race condition, кто-то перезапускает сервера и не проверяет их работоспособность после ребута. Это и многое другое — в статье Блэкаут в США 2003: как два сервера обвалили энергосистему⁠⁠, где расследуется случай 2003 года. В результате стечения большого количества ошибок были аварийно остановлены почти 300 электростанций и свыше 50 млн человек остались без электроэнергии.


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

#skills
🔥5👍21
Пятничное развлекательное. BadComedian — истоки

Вики насчитывает у Бэда 151 ролик. Начало творческой истории BadComedian было положено обзором индийского кошмара на улице вязов в двух частях. В этих обзорах уже можно увидеть "волшебный индийский монтаж", филигранное изменение имён персонажей и классическую озвучку экранного безумия спокойным голосом: "перед походом в школу эти тридцатилетние школьники заходят в ресторан". Думаю, зрителям Бэд полюбился за постоянные отсылки к классике современности, такие как аудио из Пилы и Mortal Kombat, филигранной вставки моментов из 300 спартанцев или Джея и Молчаливого Боба. Обзор советского Фредди продолжил высмеивать отдельные элементы фильма и положил традицию бесконечных рефренов.

"Водка внутри, а снаружи бутылка" в Невском Дрифте с Александром Курицыным был удалён с основного канала, но в целом спасён. "Губы эпичности" и македонская стрельба с двух рук положили начало истории крепкой любви Бэда к Невскому.

В Джигурде появился "золотой фонд цитат" и больше, больше, больше отсылок. Закончился 2011 год обзором После Жизни со Шматко.

Напоследок отметим достойный клип Сценарист от 55х55 про Бэда, пронизанный любовью к его творчеству. Приставучая мелодия идёт бонусом

#fun
👍8🌭421🔥1
Социальная инженерия Кевина Митника

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

Самым известным социальным инженером является Кевин Митник. Его подробная биография и противостояние с другим хакером по имени Цутомо Шимомуро изложены тут.

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

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

Митник написал книги Искусство обмана (2001, по ней сняли посредственный фильм 2019 года) и Призрак в Сети (2012) с интересными историями.

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

#edu #books
5👍3🔥21
Продолжаем о собеседованиях

В статье Как проходит собеседование Python-разработчика: вопросы для джуниоров и мидлов (2021) предложена таблица с примерами вопросов по темам.

Например, по теме "тестирование" для джуна вопрос такой:
"Что такое TDD?"
Для миддла в той же теме вопросы уже сложнее:
"Какие тесты приходилось писать? Что такое мок-объекты? Приходилось ли использовать?". Мы, кстати, писали о Mock, с этими знаниями вы теперь middle developer, поздравляю.

Часть вопросов ужасно нелепы, типа "Где в Django применяется паттерн мост?". Но важно понимать, что на собеседовании могут спрашивать самые странные вопросы. И неплохо бы научиться на такие вопросы отвечать. Иногда ответ может быть неожиданным.

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

#skills #резюме
👍632🔥1
3🔥21
🌭6👍32🔥21😁1
Что же не так в этом коде?
В первую очередь опрос был на внимательность. Но есть и о чём порассуждать.
1. Сразу начнём с PEP8. Называть переменную List нельзя, такой формат именования используется для классов
2. Многие заметили, опечатку — создался List, срез делается по list. Но тут начинается интересное. Текущая версия кода вызовет ошибку TypeError: 'type' object is not subscriptable. Связано это с тем, что list — ключевое слово для создания списка в формате list(). Но без круглых скобок list — это сам класс list, а не экземпляр. У самого класса список не определена операция получения элемента по номеру (subscription).
3. Если код был бы такой
list_a = []
print(list_b[10:])

То мы получили бы ошибку NameError: name 'list_' is not defined.

Итого — TypeError, если мы использовали ключевое слово list и NameError, если мы использовали несуществующее название переменной. И ни одно из таких названий не должно пройти code review.
👍542🔥1
Хорошая и плохая прокрастинация

Прокрастинация — это склонность откладывать дела "на потом". Пол Грэм утверждает, что самая опасная форма прокрастинации — неосознанная. Ты "сделал много дел". Просто не тех.

Люди, которым не удается написать роман, не терпят крах со своей затеей, сидя перед чистым листом бумаги несколько дней подряд. Они терпят крах, кормя кота, отправляясь купить что-нибудь для дома, встречаясь с друзьями за чашечкой кофе и проверяя почту. "У меня нет времени на работу", — говорят они. И времени действительно нет; они об этом позаботились.

В статье предлагаются ряд практических трюков для преодоления прокрастинации. Мы уже говорили о продуктивности разработчика в состоянии потока и техники помидора как один из вариантов борьбы с отвлечениями.
#edu
🔥82👍21🌭1
Возможности f-строк

В статье Python f-strings Are More Powerful Than You Might Think автор рассказывает об интересных возможностях f-строк:
— форматирование даты и времени
— различные форматы представления чисел
— выравнивание строк по ширине
— условное форматирование

Особенно удобно оказалось при логгировании и отладке выводить имена и значения переменных, используя такой синтаксис: print(f"{var = }")
#python
🔥1022
Нас 2^9=512 — очередное круглое число. Все помнят, что в 512 году произошло легендарное извержение Везувия. Не то, которое стёрло Помпеи с лица земли в 79 году, а одно из полусотни других извержений, но всё же событие.

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

#ToTheMoon
🔥8👍3🌭32
Разработка надёжных Python-скриптов

В статье (оригинал) показано, что нужно не забыть в поддерживаемом проекте на python:
— документацию
— разбор аргументов командной строки
— логгирование
— тесты

По каждому пункту есть вопросы. Например, для документации мы бы предложили использовать Google Docstring, для разбора аргументов — click, для логгирования — loguru. Но выбор конкретного инструмента — дискуссионный вопрос, главное — не забыть ни про один из этих элементов в своём следующем проекте, даже небольшом.
#python
🔥5👍32
Пятничное развлекательное — подборка

В этот день вместо профильного контента у нас культурный код — рекомендации фильмов, книг и мемов. Мы отдыхаем и делимся тем прекрасным, что у нас есть.

Вспомним, что мы уже обсуждали:
— ужасные интерфейсы
7 красных линий
дудеизм Лебовски
— фильмы про хакеров
цыган
batmetal
— фильмы про реальность происходящего
человека (Трасса 60, я и другие)
— книгу методы рационального мышления
бобров

А какое пятничное развлекательное понравилось вам?
#fun
🔥62👍1🌭1
Пятничное развлекательное — Люди Икс

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

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

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

В часовом ролике Как убили людей Икс в кино восстанавливают хронологический порядок повествования в фильмах. Есть спойлеры.
#fun
🔥63👍2
Media is too big
VIEW IN TELEGRAM
Sublime Merge — графический git-клиент

Как мы писали раньше, 85% разработчиков работают с git из консоли.

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

Также sublime merge может быть полезен тем, кто только начинает осваивать git. Он дает наглядное представление об устройстве репозитория и взаимосвязях между ветками.
#procode
👍8🔥32
Channel name was changed to «DevFM»
Channel photo updated
Магия 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
🔥8👍21🌭1
🌭821👍1