Сорок шестой урок курса по Go. Хостинг решает за вас три вещи: порт приходит в переменной PORT, слушать надо все адреса машины, а не себя одного, и диск бесплатного тарифа исчезает при каждом деплое — измерено: вход тем же паролем даёт 303 до и 401 после. Плюс сборка в один статический файл.
Шестой урок курса по Python. Цены по названию: get вместо ошибки, in вместо перебора, items() как готовая таблица. Измерено: обращение к несуществующему ключу — это KeyError, а не пустота; Counter считает корзину одной строкой, а defaultdict сам подставляет ноль там, где обычный словарь падает.
Пятый урок курса по Python. Цены в списке: индексы, срезы, изменение, сумма и максимум — без единого цикла. Измерена разница, на которой спотыкаются все: sorted() возвращает новый список, .sort() меняет исходный и отдаёт None. И кортеж, который меняться отказывается: TypeError.
Четвёртый урок курса по Python. Данные из чужого файла приходят текстом, и пока текст не стал числом, складывать его бессмысленно: «260» + «260» даёт 260260. Измерено и главное денежное правило: 0.1 + 0.2 не равно 0.3, а Decimal — равно. Плюс None, истинность строки «0» и разница между == и is.
Второй бесплатный курс площадки — 55 уроков: от данных до сводки, которая обновляется сама. Почему Python, почему уклон в данные и ИИ, а не в веб, и что читатель будет считать: цены выросли в 3,48 раза, и то, что стоило тысячу тенге, стоит 3481. Без регистрации и без оплаты, на трёх языках.
Третий урок курса по Python. Считаем на магазинном чеке: два деления вместо одного, остаток, степень, а потом строки — обрезать, заменить, разрезать, склеить. И f-строки, которые кладут число внутрь текста: 52 751 740 084 727 ₸ с разрядами и 11,4% с одним знаком после запятой.
Второй урок курса по Python. Ставим язык, заводим окружение проекта и переносим в него вчерашнюю программу. Измерено: пакет, поставленный в окружение, снаружи не виден — `ModuleNotFoundError`, — и это ровно то, ради чего окружение заводят. Папка `.venv` весит 17 МБ и в репозиторий не едет.
Первый урок курса по Python. Библиотеки ставить не нужно: готовая программа сама берёт официальные числа и считает по ним. Цены в Казахстане выросли в 3,48 раза с 2010 года: то, что стоило тысячу тенге, стоит 3481. А в других странах региона после того же шока инфляция втрое ниже, и это первый повод считать самому.
Пятидесятый, последний урок курса по Go. Дженерики — одна функция вместо трёх, и условие на тип проверяет компилятор: измерено, что `string` не проходит до запуска. Измерено и чем они лучше `any`: 534 наносекунды против 1801. А ещё — куда идти дальше и что теперь умеет ваш блог.
Сорок девятый урок курса по Go. Сервер без таймаутов держит соединение бесконечно — измерено: медленный клиент занял его, и первыми сдались мы. Плюс копия базы, снятая на работающем блоге, описание страниц для поиска и список из тринадцати пунктов перед тем, как дать ссылку людям.
Сорок восьмой урок курса по Go. Программу останавливают не кнопкой, а сигналом, и разница измерена: при обрыве читатель получает EOF, при аккуратной остановке — ответ 200 через 270 мс. Плюс файл службы, который проверил настоящий systemd, автозапуск после перезагрузки.
Сорок седьмой урок курса по Go. Домен — это одна запись в DNS, которая ведёт на ваш адрес, а HTTPS — не галочка, а необходимость: измерено, что в открытом канале пароль читателя виден целиком, все 222 байта, а в TLS его в этих байтах нет. Плюс прокси спереди и заголовок, которому нельзя верить.
Сорок пятый урок курса по Go. Блог носит чужое имя, чужой знак и чужие цвета — до этого урока. Имя переезжает из одиннадцати шаблонов в одну настройку, логотип становится вашим файлом, палитра — девятью строками, а иконка — вашей. Заодно посчитан контраст, и две наши ошибки исправлены.
Сорок четвёртый урок курса по Go. Теги структуры решают, как поле называется снаружи и что скрыто совсем; лишнее поле в чужом JSON молчит, если не попросить обратного; число без типа становится float64. И ответ обработчика, у которого ошибка — тоже JSON.