Как стать автором
Обновить
19
0
Александр Третьяков @Story-teller

Пользователь

Отправить сообщение

Проблемы накапливаются. Софт тормозит. Везде некомпетентность и хаос

Уровень сложностиПростой
Время на прочтение6 мин
Количество просмотров53K


Закон Старджона гласит: «Ничто не может всегда идти правильно». Рано или поздно всё ломается.

Это естественная причина, почему софт ухудшается с каждым годом. Иначе и быть не могло. Кодовая база растёт, количество ошибок увеличивается, проекты просто тонут в багах.

Взять недавний случай с багом в Windows Defender, который вызывал тормоза Windows. Крайне показательная история. Да, этот баг обнаружили, но в кодовой базе остались такие же. Мы этого не знаем наверняка, но вполне логично предположить, что количество скрытых багов растёт пропорционально кодовой базе. Поэтому софт всё больше тормозит со временем. Это естественный процесс, почти как закон природы.
Читать дальше →
Всего голосов 148: ↑106 и ↓42+91
Комментарии396

DNS записи для почтовых серверов

Время на прочтение6 мин
Количество просмотров83K


Представьте, что вы в реальной жизни получили конверт, где в поле “Отправитель” написано имя вашего старого друга. Можете ли вы, не открыв и не прочитав письма, точно сказать – это конверт от вашего старого друга или какого-то злоумышленника?

Именно эта задача стоит перед почтовыми серверами — просто взглянув на конверт определить, не врёт ли поле отправитель. Для этого почтовый сервер обращается к тому механизму, который в интернете служит для подтверждения владения доменом – DNS серверу.
Всего голосов 6: ↑4 и ↓2+4
Комментарии19

Ловля исключений с минимумом усилий

Время на прочтение7 мин
Количество просмотров2.3K
(Для начинающих)

Обрабатывать исключения — хорошая привычка, но если писать на все случаи деревья try-except, эти конструкции начинают повторяться, а код становится сложным и трудночитаемым. А ещё писать все обработки просот лень.

Чтобы обработка исключений не была болезненной, и чтобы уменьшить повторяемость кода, нужно пользоваться мощью и гибкостью Питона.
Читать дальше →
Всего голосов 19: ↑12 и ↓7+5
Комментарии15

Логирование в Python: руководство разработчика

Время на прочтение13 мин
Количество просмотров188K

Сталкивались ли вы с трудностями при отладке Python-кода? Если это так — то изучение того, как наладить логирование (журналирование, logging) в Python, способно помочь вам упростить задачи, решаемые при отладке.

Если вы — новичок, то вы, наверняка, привыкли пользоваться командой print(), выводя с её помощью определённые значения в ходе работы программы, проверяя, работает ли код так, как от него ожидается. Использование print() вполне может оправдать себя при отладке маленьких Python-программ. Но, когда вы перейдёте к более крупным и сложным проектам, вам понадобится постоянный журнал, содержащий больше информации о поведении вашего кода, помогающий вам планомерно отлаживать и отслеживать ошибки.

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

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

Читать далее
Всего голосов 17: ↑15 и ↓2+20
Комментарии9

Настраиваем домашний почтовый сервер и уходим с «бесплатной» почты

Время на прочтение15 мин
Количество просмотров322K

С каждым годом рекламы в интернете становится все больше, а подают ее с каждым разом все навязчивее. Дошло уже до почты: реклама в интерфейсе почтового ящика выглядит как первое непрочитанное письмо, которое машинально хочется открыть. Я не против рекламы, особенно когда она в тему и не сбивает с толку. Но маскировать её под непрочитанное письмо ‒ это перебор. Чувствуется, что следующим шагом рекламу начнут вставлять прямо в тело письма.

Читать далее
Всего голосов 87: ↑79 и ↓8+92
Комментарии338

Асинхронность как основной подход к разработке высоконагруженных приложений

Уровень сложностиПростой
Время на прочтение8 мин
Количество просмотров13K

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

Читать далее
Всего голосов 8: ↑5 и ↓3+7
Комментарии4

Девять способов выстрелить себе в ногу с PostgreSQL

Уровень сложностиСредний
Время на прочтение8 мин
Количество просмотров26K

Большинство этих проблем связано с масштабируемостью. Это то, что не повлияет на вас, пока база данных мала. Но если когда-нибудь вам захочется, чтобы база данных перестала быть маленькой, о таких вещах стоит подумать заранее. В противном случае они нанесут вам удар исподтишка, возможно, в самый неудобный момент. Плюс во многих случаях работы потребуется меньше, если делать всё правильно с самого начала, чем менять уже работающую систему.
Читать дальше →
Всего голосов 26: ↑24 и ↓2+26
Комментарии2

Распознаём изображение с токена при помощи камеры

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

и сказали: жмёшь кнопку, смотришь цифры, вводишь пароль и радуешься. «Безопасность, конечно, превыше всего, но и о комфорте забывать не следует» — примерно так подумал я и провёл ревизию имеющегося у меня электронного хлама.
Читать дальше →
Всего голосов 178: ↑172 и ↓6+166
Комментарии60

Raspberry Pi Pico на МК RP2040: начало и первые шаги. Что есть поесть за $4

Время на прочтение8 мин
Количество просмотров100K

Начало


Raspberry Pi Foundation всегда знает чем порадовать или удивить нас, а так же как подталкивать других производителей на интересные шаги и решения для хорошей конкуренции.
В четверг (рыбный день, кстати) 21-ого января 2021 года был анонсирован выпуск нового микроконтроллера RP2040 и небольшой платы с его применением, которая получила название Raspberry Pi Pico.



Честно говоря, я прочитал эту новость и не планировал ничего делать по этому поводу. Но потом случайно заметил несколько особенностей этого микроконтроллера, что разбудило любопытство во мне и подтолкнуло к покупке пары плат для дальнейших экспериментов. Очень привлекло наличие PIO блоков и множество PWM. Справедливости ради, PWM можно как-то решить, а вот с PIO есть смысл поиграться.

После пары дней занимательной возни я решил поделиться своим небольшим опытом с Хабром и его гостями.

К сожалению, с PIO я недостаточно освоился и поэтому возможности PIO выходят за рамки этой статьи. Но если будет очень интересно сообществу, то возможно продолжение после того, как будет чем поделиться.
Читать дальше →
Всего голосов 43: ↑43 и ↓0+43
Комментарии60

Теория графов. Термины и определения в картинках

Время на прочтение5 мин
Количество просмотров185K

В этой статье мы познакомимся с основными терминами и определениями Теории графов. Каждый термин схематично показан на картинках.

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

Теория графов
Всего голосов 17: ↑15 и ↓2+16
Комментарии8

Решение задачи коммивояжёра методом ближайшего соседа на Python

Время на прочтение7 мин
Количество просмотров44K

Быстрый и простой алгоритм требующий модификации


Среди методов решения задачи коммивояжёра метод ближайшего соседа привлекает простотой алгоритма. Метод ближайшего соседа в исходной формулировке заключается в нахождении замкнутой кривой минимальной длины, соединяющей заданный набор точек на плоскости [1]. Моё внимание привлекла наиболее распространённая реализация данного алгоритма в пакете Mathcad, размещённая в сети на ресурсе [2]. Сама реализация не совсем удобна, например, нельзя вывести матрицу расстояний между пунктами или проанализировать альтернативные маршруты.

На ресурсе [2] приведена следующая вполне справедливая критика данного метода. «Маршрут не оптимальный (не самый короткий) и сильно зависит от выбора первого города. Фактически не решена задача коммивояжера, а найдена одна гамильтонова цепь графа». Там же предложен путь некоторого усовершенствования метода ближайшего соседа. «Следующий возможный шаг оптимизации — «развязывание петель» (ликвидация перекрестий). Другое решение — перебор всех городов (вершин графа) в качестве начала маршрута и выбор наикратчайшего из всех маршрутов». Однако реализация последнего предложения не приведена. Учитывая все перечисленные обстоятельства, я решил реализовать приведенный алгоритм на Python и при этом предусмотреть возможность выбора начального пункта по критерию минимальной длины маршрута.
Читать дальше →
Всего голосов 14: ↑12 и ↓2+10
Комментарии1

Простой способ развернуть телеграмм бота с Aiogram + Webhook на хостинг

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров20K

Расскажу самый простой и бесплатный способ развернуть на хостинге телеграмм бота, написанного на aiogram и перевести на webhook. Посмотреть видео-версию, которую я разместил, можно на https://youtu.be/Gw-cVvsaOGE .

Бот будет работать 24/7 пожизненно.

Без использования VPS, фреймворка (django, flask, fastapi,..), pythonanywhere и heroku.

Краткое содержание действий:

Пункт 1. Сохранить пример к себе, регистрация на хостинге.

Пункт 2. Через FTP поместить наш файл бота на хостинге.

Пункт 3. Через SSH установить библиотеку aiogram.

Пункт 4. Настроить сервис бота на хостинге.

Пункт 5. Настроить веб-сайт на переадресацию всех запросов на сервис бота.

Пункт 6. Отредактировать файл запуска бота с учетом наших настроек.

Пункт 7. Перезапуск сервиса бота, проверка бота. Просмотр логов.

________________________________________________________

Пункт 1. Сохранить пример к себе, регистрация на хостинге.

Идем на страницу официальной документации:

https://docs.aiogram.dev/en/v2.25.1/examples/webhook_example.html

Копируем содержимое webhook_example.py к себе в файл webhook.py и сохраняем.

Читать далее
Всего голосов 5: ↑4 и ↓1+6
Комментарии10

Визуализация пересечений и перекрытий с помощью Python

Время на прочтение6 мин
Количество просмотров12K

Изучение вариантов решения одной из самых сложных задач визуализации данных


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

В этой статье воспользуемся Python для изучения способов визуализации перекрытий и пересечений множеств, наших возможностей, а также их преимуществ и недостатков.


Диаграмма Венна
Приятного чтения!
Всего голосов 28: ↑28 и ↓0+28
Комментарии0

Бинарные деревья поиска и рекурсия – это просто

Время на прочтение8 мин
Количество просмотров605K
Существует множество книг и статей по данной теме. В этой статье я попробую понятно рассказать самое основное.

Бинарное дерево — это иерархическая структура данных, в которой каждый узел имеет значение (оно же является в данном случае и ключом) и ссылки на левого и правого потомка. Узел, находящийся на самом верхнем уровне (не являющийся чьим либо потомком) называется корнем. Узлы, не имеющие потомков (оба потомка которых равны NULL) называются листьями.

image
Рис. 1 Бинарное дерево
Читать дальше →
Всего голосов 43: ↑32 и ↓11+21
Комментарии9

Руководство по CI/CD в GitLab для (почти) абсолютного новичка

Время на прочтение13 мин
Количество просмотров354K

Или как обзавестись красивыми бейджиками для своего проекта за один вечер ненапряжного кодинга


Наверное, у каждого разработчика, имеющего хотя бы один пет-проект, в определённый момент возникает зуд на тему красивых бейджиков со статусами, покрытием кода, версиями пакетов в nuget… И меня этот зуд привёл к написанию этой статьи. В процессе подготовки к её написанию я обзавёлся вот такой красотой в одном из своих проектов:


результаты


В статье будет рассмотрена базовая настройка непрерывной интеграции и поставки для проекта библиотеки классов на .Net Core в GitLab, с публикацией документации в GitLab Pages и отправкой собранных пакетов в приватный фид в Azure DevOps.


В качестве среды разработки использовалась VS Code c расширением GitLab Workflow (для валидации файла настроек прямо из среды разработки).

Читать дальше →
Всего голосов 15: ↑15 и ↓0+15
Комментарии9

Как перестать беспокоиться и установить Python-проект другу под Windows

Уровень сложностиСредний
Время на прочтение4 мин
Количество просмотров9.6K

Итак, вы закончили свою первую версию опенсорс проекта на Питоне, выложили её на Гитхаб, и даже написали честный ридми: "Требуется Python 3.10, поставьте зависимости через pip install -r requirements.txt"

И... через какое-то время вам звонит пользователь друг с вопросом: "Слушай, интересный проект, а как его под Windows поставить?"

Собственно, с этого момента у вас есть 3 варианта:

1. Попытаться сэкономить всем время и попробовать упаковать ваш проект в EXE-файл через утилиты типа pyinstaller или Auto PY to EXE. Минус: при сколь-нибудь сложных зависимостях нужно будет ковыряться довольно долго, чтобы заставить EXE заработать. Второй минус: как вы думаете, на кого ляжет почетная обязанность собирать EXE-шники после каждого апдейта кода?

2. Попытаться объяснить другу, что такое python, GIT и как всё это поставить. Минус: возможны проблемы в отношениях с другом :))) (Вариант: поставить всё самому через дистанционный доступ, но он требует слишком много времени если пользователей друзей больше 5)

3. Дописать под себя набор BAT-файлов, о которых пойдет речь в статье, и которые:

ставят сами Python и GIT в локальную папку проекта (в стиле conda);

выкачивают свежую версию вашего проекта с Гитхаба (а также апдейтят её при необходимости);

ставят нужные зависимости;

можно прописать несколько сценариев запуска приложения;

установленный проект можно перемещать в другие папки и между компами.

Читать далее
Всего голосов 12: ↑10 и ↓2+10
Комментарии32

Самый научный гайд по сну

Уровень сложностиПростой
Время на прочтение12 мин
Количество просмотров135K

Я решил написать эту статью, потому что сам испытывал потребность в улучшении сна. Мне не нравилось, что по утрам я просыпался вялым и немотивированным. Я хотел быть тем самым парнем, который встаёт бодрым, делает зарядку, завтракает и с удовольствием принимается за свои цели. И я им стал.

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

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

Читать далее
Всего голосов 103: ↑97 и ↓6+121
Комментарии134

Плохие практики разработки, которые до сих пор встречаю в стартапах

Уровень сложностиСредний
Время на прочтение5 мин
Количество просмотров53K

Привет, я Виктор. Двенадцать лет назад я пришел в веб-студию в Самаре. Так начался мой путь в разработке. У нас не было гита, CI/CD, тестовых стендов и много чего еще. Я видел, как это мешало развитию команды и бизнеса. Приходилось на ощупь собирать грабли, открывать для себя хорошие практики и внедрять их. С тех пор я поработал старшим разработчиком в российском финансовом холдинге и немецком b2b-стартапе. Был тимлидом в фудтех-проекте, СTO в образовательных стартапах для российского и латиноамериканского рынка — и почти везде поначалу натыкался на похожие проблемы. Недавно переехал в Израиль, стал консультировать стартап. И что бы вы думали…

Читать далее 👉
Всего голосов 92: ↑88 и ↓4+102
Комментарии126

Пишем GPT в 60 строк NumPy (часть 1 из 2)

Уровень сложностиСредний
Время на прочтение16 мин
Количество просмотров73K

В этом посте мы начнём реализацию с нуля GPT всего в 60 строках numpy. Во второй части статьи мы загрузим в нашу реализацию опубликованные OpenAI веса обученной модели GPT-2 и сгенерируем текст.
Читать дальше →
Всего голосов 73: ↑71 и ↓2+92
Комментарии33

Регулярные выражения для самых маленьких

Время на прочтение11 мин
Количество просмотров226K
Привет, Хабр.

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

Некоторые из них для наглядности будут показаны на примере языков программирования PHP или JavaScript, но в целом они работают независимо от ЯП.

Из названия понятно, что статья ориентирована на самый начальный уровень — тех, кто еще ни разу не использовал регулярные выражения в своих программах или делал это без должного понимания.

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

Поехали!


Читать дальше →
Всего голосов 67: ↑64 и ↓3+61
Комментарии55

Информация

В рейтинге
Не участвует
Откуда
Казань, Татарстан, Россия
Зарегистрирован
Активность