Читать в телеге. Когда-то там были посты не только от меня.
Генерация пароля
Для сайтов пароли генерируются браузером, а вот сгенерировать пароль для доступа к базе иногда нужно.
tr -dc 'A-Za-z0-9!@#$%^&*()_+' </dev/urandom | head -c 13 ; echo
Флаг -dc
говорит о том, что нужно взять только выбранные символы из входного потока.
Pattern matching в Python
Если вы не слышали новость, которая лезет из каждого утюга, этим утюгом побуду я.
В питоне появится паттерн-матчинг! Примеры можно посмотреть в репозитории Гвидо ван Россума. Причем это не просто switch с добавками, а вполне полноценная штука с поддержкой литералов, захвата в переменную, поддержкой списков/словарей, деструктуризацией, паттерн-гардами и вложенными паттернами. Даже моржовый оператор туда пихнули. До скаловской мощи не дотягивает, но этих фич более чем достаточно для бытовых нужд.
GUI для kafka
Официального UI, как, например, у RabbitMQ, для Kafka нет, но есть довольно много вариантов от сообщества.
Пожалуй, самый распространенный ‒ Kafka Tool, в котором можно сделать довольно базовые вещи вроде просмотра оффсетов и создания/удаления топиков. На прошлой работе в основном использовал kafka-manager, который вдобавок к этому умел позволял управлять партициями и перекидывать их с брокера на брокер. Однако, с момента, когда я в последний раз занимался этим вопросом, появились и новые варианты: платный Conduktor, Kafka-ui от Provectus, AKHQ …
Кажется, пока Confluent не выберет что-то или не сделает что-то свое, будут продолжать плодиться новые варианты интерфейса.
RISC
Говорят, одним из факторов успеха нового процессора от Apple было использование RISC, хотя все современные “CISC” x86-процессоры на самом деле внутри работают как RISC. Интересно, будет ли в будущем движение в сторону уменьшения числа операций или увеличение специализации продолжится без этого? Если покопаться, то у RISC есть куча вариаций:
- minimal MISC, который был у древних компов, но там были проблемы с параллелизмом на уровне команд.
- one OISC, теоретический вариант с одной инструкцией (чтобы править ими всеми) ‒ привет машине Тьюринга:)
- и даже zero ZISC, который попахивает какими-то спекуляциями.
Плюс еще миллион наборов инструкций, среди которых SPARC, RISC-V, MIPS и ARM.
Пост стыда
Когда искал примерчик кода к предыдущей заметке, обнаружил, что у меня в гитхабе висит нерабочее тестовое задание, которое я делал год назад при смене работы.
https://github.com/ov7a/orders-matching
Причем оно настолько не рабочее, что там даже кусков кода нет. Я отчетливо помню, как я писал логику в теле этих методов, что тестов было больше, что я вообще-то локально все запускал и проверял. Косвенно об этом readme говорит.
Причем, что забавно, это тестовое я даже посылал рекрутеру и мне пришел ответ, что все хорошо, даже звали на собес (если текущий фаворит откажется от оффера).
А сейчас уже и не вспомню, что там было — надо будет выделить выходной, чтобы это оформить прилично.
В общем, не будьте как я — перепроверяйте то, что выкладываете как пет-проекты на гитхаб и делайте бэкапы:)
Иерархии в IntelliJ
Когда читаешь cheat-sheet по горячим клавишам, в голове ничего толком не откладывается: много скучной информации. Когда по уши в коде — не до изучения этого (разве что какую-то очень тупую дичь повторяешь из раза в раз). А когда не в коде — особо об этом не задумываешься.
Поэтому изучение новой комбинации клавиш для меня событие :)
А продемонтрировали мне на прошлой неделе Ctrl+Alt+H, который показывает все места вызова метода (в т.ч. косвенные).
И еще есть Ctrl+Shift+H, который показывает иерархию наследования для конкретного метода.
Вроде это довольно очевидно, если знаешь Ctrl+H, который выдает иерархию классов, но прикольно же!
Передаю привет Косте, благодаря которому появился этот пост:)
Перепрошивка флешки
Друзья подкинули флешку на 32Гб, которая определялась на винде как 8Мб. Несколько часов с ней ковырялся, что только не делал: и форматировал, и таблицу разделов перетирал, и с помощью dd
в нули все переписывал, клонировал таблицу разделов с рабочей флешки, перепробовал кучу утилит, которые на самом деле делали одно и то же, даже использовал фирменную утилиту от производителя для “восстановления” флешки. Ничего не помогало, даже на самом низком уровне размер флешки определялся как 8 Мб.
Потом я решил сделать ход конем: включить мозги. Как определяется размер флешки? Есть два возможных способа — либо по VID/PID, либо флешка говорит о нем сама. Поскольку моделей флешек миллиард, то верен второй вариант. Значит, надо что-то сделать с контроллером на самой флешке. В общем, мозги иногда полезно включать, всем рекомендую:)
После этого я смог сделать правильный запрос и найти программу по перепрошивке по VID/PID. Набор приложений, сделанных под MFC (эх, помню лабу на первом курсе про такое), ноль UX, и ничего не понятно, благо, хоть инструкцию можно найти. После нескольких тыков флешка перепрошита и работает как надо. А потом и статья на Хабре нашлась про это.
Работает программа перепрошивки только на винде — шах и мат, линуксоиды!
Настройка kafka
Понял, что тут ничего нет про настройку кафки. Так-то есть очень подробная документация, но кто ж ее в наши дни читает.
Почти каждый доклад про кафку на любой конференции начинается про описание ее архитектуры.
По настройке обычно истории очень похожи: жили — не тужили с настройками по умолчанию, потом что-то сломалось, прод упал, начали бегать, что-то поднастроили и стало все хорошо. Более-менее цельно подобная история рассказана в этом докладе. Там, конечно, веселые ребята с тестами на проде и с cron-скриптами на PHP, но про настройки брокеров хотя бы более-менее дельно рассказали.
Инструкция по отмене почти всего в git
Никаких откровений там опытный пользователь не найдет, но хорошо иметь под рукой, как шпаргалку.
Ограничение запросов ElasticSearch со стороны клиента
ElasticSearch — классная штука, но он не всемогущ. Некоторые запросы могут привести к OOM в кластере. Это может случиться по разным причинам, но в основном связано с дополнительными функциями: подсветка (создает мини-индекс в памяти), агрегации и т.п. — сам по себе поисковый запрос ничего не положит, если только настройки кластера не совсем убогие. Однако есть способы ограничить поисковый запрос на стороне клиента:
timeout
— по умолчанию его нет, но это можно изменить.terminate_after
— ограничивает максимальное число документов, возвращаемое с одной шарды. Хорош в тех случаях, когда поиск подразумевает небольшое число результатов.
UPD: однако с этими настройками стоит быть аккуратнее: они могут вести себя не очень предсказуемо при наличии сортировки: не факт, что будут выданы именно первые результаты.