Минутка просвещения

Читать в телеге. Когда-то там были посты не только от меня.

Канал о безопасности сильного ИИ

Кому интересна тема ИИ и машиного обучения — рекомендую посмотреть канал Robert Miles. Он рассказывает простым языком о текущих проблемах, с которыми сталкиваются исследователи ИИ и сильного ИИ. Основные темы: почему сложно сделать роботов, которые не поубивают всех человеков, проблема адекватных вознаграждений, проблема человеческих ценностей. Иногда есть философские вставки, но на мой взгляд они все к месту.

Лайтовое видео, с которого начинал я:

СсылкаКомментировать

Монтирование файловой системы через ssh

Если часто приходится копировать файлы туда-сюда на серваки или хочется использовать графические приложения для редактирования чего-либо, то можно подключить удаленную директорию локально с помощью sshfs:

sshfs user@remotehost:/remotedir localdir

А дальше с ней работать как обычно — большинство программ не заметит разницы.

СсылкаКомментировать

Поиск источника SQL-запроса

Слоями абстракций сейчас никого не удивишь и иногда 90% километрового стректрейса — кишки фреймворка. Отлаживать в таких условиях что-то довольно муторно. Кроме того, фреймворк может скрывать детали реализации.

Если ради оптимизации надо найти, где в большом приложении выполняется конкретный SQL-запрос, особенно с учетом всяких ORM и entity-менеджеров, то можно включить отладочные логи для самой нижележащей штуки в этом всем (например, hibernate). А потом поставить conditional breakpoint на строчке, которая выводит сырой SQL-запрос. Ее обычно легко найти поиском по области видимости и/или по названию класса из лога. Затем запустить тесты (у вас же хорошее покрытие, да?), словить запрос на строчке с логом, идти вверх по стеку вызовов и смотреть, кто же такой запрос генерирует и в каких случаях.

СсылкаКомментировать

Tcpdump

Для того, чтобы “по-быренькому” посмотреть трафик на порту, можно использовать команду

tcpdump -n port 8125 -X

Флаг -n настраивает показ IP-адресов вместо хостов, а -X — показ содержимого в hex и ASCII. По умолчаю используется основной интерфейс, если нужен localhost — надо добавить -i lo.

Ну а для продвинутого анализа возможно лучше подойдет Wireshark.

СсылкаКомментировать

Proxy auto config

Для того, чтобы выйти за пределы “безопасного” интернета, иногда надо использовать прокси. И хочется это делать удобно. Для браузеров есть куча расширений, которые это вроде как предлагают, некоторые даже включают прокси только на заблокированные сайты. Однако эти расширения работают не очень качественно и/или запрашивают разрешения к очень многим вещам (например, почти все просят доступ ко всем данным всех сайтов).

Чтобы шапочка из фольги не жала, можно воспользоваться встроенными настройками браузера, чтобы он ходил на нужные сайты через прокси, а на остальные — без нее. Поможет нам в этом механизм Proxy auto config. Идея его заключается в том, что создается pac-файл, который по сути является скриптом на javascript, реализующим одну функцию: получить адрес прокси для url. Выглядит он примерно так:

function FindProxyForURL(url, host) {
    host = host.toLowerCase();
    if (shExpMatch(host,     "*telegram.org")
        || dnsDomainIs(host, "t.me")
        || dnsDomainIs(host, "telegra.ph")
        || shExpMatch(host,  "*media.tumblr.com")
        || dnsDomainIs(host, "httpbin.org")
    ){
        return "SOCKS localhost:9050";
    } else {
        return "DIRECT";
    }
}

Готовые можно найти в интернете. Протестировать самописное можно здесь. А дальше — прописываем в настройке браузера “Automatic proxy configuration URL” путь к файлу, например file:///home/ov7a/proxy_config.pac.

СсылкаКомментировать

Отключение "удобств" journalctl

Чтобы заставить journalctl показывать строки без запихивания в less (например, чтобы скопировать из лога длинную строку), можно использовать флаг no-pager:

journalctl --no-pager

Ох уж этот systemd, который специально делает тебе “удобнее”. Если покопаться в исходниках, то всплывает интересная вещь: запихивать все в какой-нибудь less — это изначальная функциональность journalctl, которая появилась одновременно с парсингом аргументов командной строки в коммите “journalctl: add command line parsing”. Еще один повод для нелюбви к Поттерингу, который делает 2 фичи в одном коммите и вдобавок описания плохие делает.

СсылкаКомментировать

Опрос про баги

В канале админа профунктора был такой опрос. Результаты меня немного опечалили.

Я думаю, что ответ на него в первую очередь зависит от продукта. А еще не хватает варианта(ов) между первым и вторым ответом (или спектра вариантов). Считаю, что да, без багов никуда, но любой баг — это либо непредсказуемые условия (с этим ничего не поделаешь), либо повод улучшать процесс (чтобы подобные баги не могли произойти), либо комбо двух вариантов. Первый вариант в опросе звучит для меня как «баги есть да и хуй с ними». И я думаю, что люди, которые так считают — это рак отрасли.

СсылкаКомментировать

Почему функциональное программирование не распространено

Отличный доклад про историю популярных сегодня языков и как мы пришли к тому, что в топе ООП-языки, а функциональное программирование — не мейнстрим. Кто хочет сразу суть и ответы — можно начать смотреть с 40:00.

СсылкаКомментировать

Права и символические ссылки

Если вы хотите сменить права на символическую ссылку, то надо использовать флаг -h для chown:

$ mkdir target
$ ln -s target symlink
$ stat -c "%U %F %N" *
ov7a symbolic link 'symlink' -> 'target'
ov7a directory 'target'
$ chown nobody symlink
$ stat -c "%U %F %N" *
ov7a symbolic link 'symlink' -> 'target'
nobody directory 'target'
$ chown ov7a symlink # ops, lets rollback
$ chown -h nobody symlink # retry with -h flag
$ stat -c "%U %F %N" * 
nobody symbolic link 'symlink' -> 'target'
ov7a directory 'target'
СсылкаКомментировать