#Программирование #AI
Ну, вот и я дозрел до полноценного вайбкодинга.
Вайбкодинг, если что - это процесс написания кода без написания кода, с помощью искусственного интеллекта, промптов и лишь внешнего контроля на этапе техзадания и тестирования.
Есть мод для игры Rim World. Сам мод активно разрабатывается с помощью ИИ, и я подумал: "у меня есть дешёвый и неплохой DeepSeek. На тестирование антиспам-бота и разработку пары фич для кардпьютера ушло меньше доллара. Почему бы мне не улучшить мод для игры, в которой я сам провожу каждый день по паре часов минимум".
В общем, за качество кода ручаться не буду, не читал, страшно. Но то, что делает DeepSeek через Cline в VSCode, это очень и очень интересно.
За полчаса я добавил полезную лично для меня фичу, которую, возможно, примут и в основной репозиторий. Ещё за 10 минут исправил пару неточностей в её поведении, а сейчас доделываю финальные штрихи, чтобы протестировать и с чистой душой делать merge request в основной репозиторий.
Ну, вернее, доделывает AI, а я сижу, пью чай, болтаю с друзьями и слушаю, как VSCode что-то там сохраняет, форматирует и сравнивает файлы (судя по звукам самой IDE).
И пусть хоть кто-то попробует сказать, что это сделал не я! Знаете, как было лениво настраивать Cline? Да и всё же полдоллара, потраченные на эту задачу, взяты из моего кармана 😀
Всем добра и поменьше багов!
Ну, вот и я дозрел до полноценного вайбкодинга.
Вайбкодинг, если что - это процесс написания кода без написания кода, с помощью искусственного интеллекта, промптов и лишь внешнего контроля на этапе техзадания и тестирования.
Есть мод для игры Rim World. Сам мод активно разрабатывается с помощью ИИ, и я подумал: "у меня есть дешёвый и неплохой DeepSeek. На тестирование антиспам-бота и разработку пары фич для кардпьютера ушло меньше доллара. Почему бы мне не улучшить мод для игры, в которой я сам провожу каждый день по паре часов минимум".
В общем, за качество кода ручаться не буду, не читал, страшно. Но то, что делает DeepSeek через Cline в VSCode, это очень и очень интересно.
За полчаса я добавил полезную лично для меня фичу, которую, возможно, примут и в основной репозиторий. Ещё за 10 минут исправил пару неточностей в её поведении, а сейчас доделываю финальные штрихи, чтобы протестировать и с чистой душой делать merge request в основной репозиторий.
Ну, вернее, доделывает AI, а я сижу, пью чай, болтаю с друзьями и слушаю, как VSCode что-то там сохраняет, форматирует и сравнивает файлы (судя по звукам самой IDE).
И пусть хоть кто-то попробует сказать, что это сделал не я! Знаете, как было лениво настраивать Cline? Да и всё же полдоллара, потраченные на эту задачу, взяты из моего кармана 😀
Всем добра и поменьше багов!
👍1
#Программирование #Python
Сегодня ночью написал свою первую в жизни нейросеть.
Это, конечно, громко сказано: один нейрон и простейшая логика, но я это делал ради понимания принципа, а не с целью зафигачить свой искусственный интеллект за пару часов.
Сначала сделал это на чистой математике, без всяких ваших pytorch и прочих.
Затем переписал на torch, ибо серьёзные нейронки вручную никто нынче не пишет. Тем более у torch многое уже написано за нас, и можно описывать логику, а не возиться с формулами расчётов ошибок, градиентов для обучения и обновлением весов и смещений.
Теперь есть парочка идей для саморазвития в этой области: для одной идеи нужно, чтобы один хороший человек накодил на своей стороне интерфейс для внешнего софта; другие же идеи нужно просто сесть и написать.
Одна из них, кстати, напрямую связана с уже так полюбившейся мне темой лингвистики в программировании, обработкой текстов и преобразованием слов и их частей.
ps: Долго думал, написать об этом сюда или в основной канал, ибо пост не так что бы и сильно технический, да и короткий. В итоге решил, что просто сделаю репост 🙂
Сегодня ночью написал свою первую в жизни нейросеть.
Это, конечно, громко сказано: один нейрон и простейшая логика, но я это делал ради понимания принципа, а не с целью зафигачить свой искусственный интеллект за пару часов.
Сначала сделал это на чистой математике, без всяких ваших pytorch и прочих.
Затем переписал на torch, ибо серьёзные нейронки вручную никто нынче не пишет. Тем более у torch многое уже написано за нас, и можно описывать логику, а не возиться с формулами расчётов ошибок, градиентов для обучения и обновлением весов и смещений.
Теперь есть парочка идей для саморазвития в этой области: для одной идеи нужно, чтобы один хороший человек накодил на своей стороне интерфейс для внешнего софта; другие же идеи нужно просто сесть и написать.
Одна из них, кстати, напрямую связана с уже так полюбившейся мне темой лингвистики в программировании, обработкой текстов и преобразованием слов и их частей.
ps: Долго думал, написать об этом сюда или в основной канал, ибо пост не так что бы и сильно технический, да и короткий. В итоге решил, что просто сделаю репост 🙂
И от этих невнимательных рукожопов зависит наша карьера!
Прохожу тест на hh.ru, Golang, средний уровень, практика.
Перед началом написано, что мол наши тесты проверены компанией "Магнит чё-то там". Типа пафосно!
Первая же задача:
реализуйте алгоритм фильтрации.
На вход подаётся первой строкой тип фильтра, один из перечисленных:
capital - вернуть "да" для строк, начинающихся с заглавной буквы;
digits - вернуть "да" для строк только из цифр;
long - вернуть "да" для строк строго длиннее 5 символов.
Иначе вернуть "Ошибка. Неизвестный фильтр".
Примеры входных данных:
capital
Hello
Вернуть строку Hello.
unique
hello go go go is fun 123
Вернуть "уникальных слов столько-то"...
Продолжать нет смысла.
Какой, нахрен, unique?!!
Вы двумя абзацами выше пишете про три фильтра, среди которых такого не существует. При этом в примерах и, что самое страшное, в тестах, фильтр есть, и без него всё падает.
При этом в требованиях описывается одно, а в структуре кода ожидается имплементация самих структур фильтров, без возврата текстовых ответов в принципе.
При этом ваши же тесты на абсолютно верном вводе падают с невнятной ошибкой в стиле "ой, оно не собралось". И ошибка торчит куда-то в ту область кода, которая мне неподконтрольна. Тот кусок, который собирает и использует мой пакет с фильтрами на их стороне в тестовом запуске.
Российский бигтех: безжалостный и беспощадный.
Видимо в таком стиле предполагается и работать дальше: сделать вчера! Как? Не ебёт. Сделать, иначе казнить! Не работает, разбирайся сам. Документация? Нууу, её писал наш бывший коллега 5 лет назад, мы хз чё там вообще. Сам как-нибудь. Иначе будешь уволен задним числом.
Походу именно к такому нас и готовят на ХХ.
Прохожу тест на hh.ru, Golang, средний уровень, практика.
Перед началом написано, что мол наши тесты проверены компанией "Магнит чё-то там". Типа пафосно!
Первая же задача:
реализуйте алгоритм фильтрации.
На вход подаётся первой строкой тип фильтра, один из перечисленных:
capital - вернуть "да" для строк, начинающихся с заглавной буквы;
digits - вернуть "да" для строк только из цифр;
long - вернуть "да" для строк строго длиннее 5 символов.
Иначе вернуть "Ошибка. Неизвестный фильтр".
Примеры входных данных:
capital
Hello
Вернуть строку Hello.
unique
hello go go go is fun 123
Вернуть "уникальных слов столько-то"...
Продолжать нет смысла.
Какой, нахрен, unique?!!
Вы двумя абзацами выше пишете про три фильтра, среди которых такого не существует. При этом в примерах и, что самое страшное, в тестах, фильтр есть, и без него всё падает.
При этом в требованиях описывается одно, а в структуре кода ожидается имплементация самих структур фильтров, без возврата текстовых ответов в принципе.
При этом ваши же тесты на абсолютно верном вводе падают с невнятной ошибкой в стиле "ой, оно не собралось". И ошибка торчит куда-то в ту область кода, которая мне неподконтрольна. Тот кусок, который собирает и использует мой пакет с фильтрами на их стороне в тестовом запуске.
Российский бигтех: безжалостный и беспощадный.
Видимо в таком стиле предполагается и работать дальше: сделать вчера! Как? Не ебёт. Сделать, иначе казнить! Не работает, разбирайся сам. Документация? Нууу, её писал наш бывший коллега 5 лет назад, мы хз чё там вообще. Сам как-нибудь. Иначе будешь уволен задним числом.
Походу именно к такому нас и готовят на ХХ.
🔥1
Code with Cyrmax
И от этих невнимательных рукожопов зависит наша карьера! Прохожу тест на hh.ru, Golang, средний уровень, практика. Перед началом написано, что мол наши тесты проверены компанией "Магнит чё-то там". Типа пафосно! Первая же задача: реализуйте алгоритм фильтрации.…
upd: И по результатам этой невнятной ссанины предлагается получать "сертификат Минцифры на ГосУслугах", да?
#Администрирование #Linux
По следам трёхдневного ярого совокупления с поломавшимся домашним сервером.
Расписывать подробно уже нет сил, поэтому пост будет в формате коротких советов и можно сказать чеклистов.
Если сервер ведёт себя странно, то принимает подключения, то не принимает; то пинги по 20 секунд, а попытка запустить обновление системы выливается в часовое ожидание в подключении к внешним адресам.
Ясно, что дело в сетевой конфигурации.
Первым делом проверь dns.
Смотри на содержимое
Если там обычное содержимое без предупреждений, прочитай его и убедись вручную пингом, что до каждого или хотя бы до первого сервера имён есть доступ. В условиях нашей цензуры лишним не будет.
Ещё один способ изолировать проблему с dns - это пропинговать сайт с доменом, например
Помни, что dns кэшируется. После изменений в конфиге пробуй не только старый домен, но и что-то новое. Имей в голове список из пары десятков сайтов для проверки без участия кэша.
Если проблема не в dns, тогда смотри маршруты через
Как минимум должен быть маршрут по умолчанию, причём верный и рабочий.
Обычно этим занимается dhcp-клиент, служба сетевых интерфейсов (ifupdown или systemd-networkd). Их можно подёргать в надежде на чудо. Ну или читай логи.
Кстати, настройки dns тоже могут прилетать по dhcp, имей это в виду, если выяснил, что проблема в dns.
Если всё изложенное выше не дало наводок на корень проблемы, проверь mtu.
Особенно актуально, если одни пакеты проходят, другие - нет, а закономерность непонятна.
Командой
У основного интерфейса посмотри параметр mtu. Он может быть 1500, 1492, 1280 или изредка другое необычное значение.
От значения mtu отними 28 байт и запомни получившееся число.
Дальше подставь его в команду пинга с большим размером пакета:
Если пакет пролезает без фрагментации, значит всё окей. Если же нет, начинаются непредсказуемые приколы.
Размер пакета можно уменьшать или увеличивать, пока не найдёте потолок.
А далее к этому безопасному размеру пакета добавляем 28. Это и будет наш эффективный mtu.
У меня из-за pppoe на роутере максимальный mtu не 1500 как позволяет стандарт ethernet, а 1492 (pppoe требует 8 байт на свои служебные заголовки).
Выставить mtu временно -
Имя интерфейса может быть другим вместо eth0.
А вот как сохранить эти изменения - зависит от того, используете вы systemd-networkd, ifupdown, или ваши интерфейсы всецело под контролем NetworkManager.
И это тема для отдельного поста, в котором я пожалуй ещё и разберу различия этих трёх утилит в деталях. Заодно и сам разберусь.
Надеюсь эти торопливые заметки мамкиного сисадмина кому-то помогут.
По следам трёхдневного ярого совокупления с поломавшимся домашним сервером.
Расписывать подробно уже нет сил, поэтому пост будет в формате коротких советов и можно сказать чеклистов.
Если сервер ведёт себя странно, то принимает подключения, то не принимает; то пинги по 20 секунд, а попытка запустить обновление системы выливается в часовое ожидание в подключении к внешним адресам.
Ясно, что дело в сетевой конфигурации.
Первым делом проверь dns.
Смотри на содержимое
/etc/resolv.conf. Если там написано, что это заглушка от systemd-resolved, тогда проверяй статус через команду resolvectl status.Если там обычное содержимое без предупреждений, прочитай его и убедись вручную пингом, что до каждого или хотя бы до первого сервера имён есть доступ. В условиях нашей цензуры лишним не будет.
Ещё один способ изолировать проблему с dns - это пропинговать сайт с доменом, например
ping ifconfig.me, а затем пинговать просто ip-адрес, например ping 77.88.8.8 (dns Яндекса).Помни, что dns кэшируется. После изменений в конфиге пробуй не только старый домен, но и что-то новое. Имей в голове список из пары десятков сайтов для проверки без участия кэша.
Если проблема не в dns, тогда смотри маршруты через
ip route show.Как минимум должен быть маршрут по умолчанию, причём верный и рабочий.
Обычно этим занимается dhcp-клиент, служба сетевых интерфейсов (ifupdown или systemd-networkd). Их можно подёргать в надежде на чудо. Ну или читай логи.
Кстати, настройки dns тоже могут прилетать по dhcp, имей это в виду, если выяснил, что проблема в dns.
Если всё изложенное выше не дало наводок на корень проблемы, проверь mtu.
Особенно актуально, если одни пакеты проходят, другие - нет, а закономерность непонятна.
Командой
ip link show или ip addr show выведи список интерфейсов, найди свой основной, у которого получен публичный ip (или локальный от роутера).У основного интерфейса посмотри параметр mtu. Он может быть 1500, 1492, 1280 или изредка другое необычное значение.
От значения mtu отними 28 байт и запомни получившееся число.
Дальше подставь его в команду пинга с большим размером пакета:
ping -M do -c 4 -s 1472 8.8.8.8-c 4 - пинговать не бесконечно, а всего 4 раза.-s 1472 - указать размер пакета (1472 это 1500 минус 28 байт заголовков пакета).-M do - помечать пакет как "Do not fragment" (не фрагментировать).Если пакет пролезает без фрагментации, значит всё окей. Если же нет, начинаются непредсказуемые приколы.
Размер пакета можно уменьшать или увеличивать, пока не найдёте потолок.
А далее к этому безопасному размеру пакета добавляем 28. Это и будет наш эффективный mtu.
У меня из-за pppoe на роутере максимальный mtu не 1500 как позволяет стандарт ethernet, а 1492 (pppoe требует 8 байт на свои служебные заголовки).
Выставить mtu временно -
sudo ip link set dev eth0 mtu 1492.Имя интерфейса может быть другим вместо eth0.
А вот как сохранить эти изменения - зависит от того, используете вы systemd-networkd, ifupdown, или ваши интерфейсы всецело под контролем NetworkManager.
И это тема для отдельного поста, в котором я пожалуй ещё и разберу различия этих трёх утилит в деталях. Заодно и сам разберусь.
Надеюсь эти торопливые заметки мамкиного сисадмина кому-то помогут.
❤🔥1🤝1
#Администрирование #Windows
Многие знают про менеджер пакетов для Windows под названием WinGet.
И если уж вы им пользуетесь не только для установки, но и для обновления пакетов, наверняка вас бесила невозможность обновить всё разом или быстро указать конкретный список пакетов для обновления без прописывания ID каждой программы вручную.
Меня тоже это достало, и я, попутно изучая возможности языка PowerShell, накидал маленький скрипт под это дело.
Он получает список всех доступных обновлений, а дальше для каждого пакета спрашивает, либо обновить, либо пропустить, либо пропустить все оставшиеся и приступить к обновлению.
Ещё я лично для себя добавил действие "удалить прямо сейчас", ибо как раз после обновления винды чистил её от мусора. Вы эту ветку можете убрать, если она вам не нужна. Лично мне не мешает.
Скрипт корректно работает на PowerShell 7 и требует установленного модуля для взаимодействия с WinGet.
Поэтому сначала пишем
Кода получилось очень мало, так что вставлю его прямо сюда. Кому надо, забирайте.
Многие знают про менеджер пакетов для Windows под названием WinGet.
И если уж вы им пользуетесь не только для установки, но и для обновления пакетов, наверняка вас бесила невозможность обновить всё разом или быстро указать конкретный список пакетов для обновления без прописывания ID каждой программы вручную.
Меня тоже это достало, и я, попутно изучая возможности языка PowerShell, накидал маленький скрипт под это дело.
Он получает список всех доступных обновлений, а дальше для каждого пакета спрашивает, либо обновить, либо пропустить, либо пропустить все оставшиеся и приступить к обновлению.
Ещё я лично для себя добавил действие "удалить прямо сейчас", ибо как раз после обновления винды чистил её от мусора. Вы эту ветку можете убрать, если она вам не нужна. Лично мне не мешает.
Скрипт корректно работает на PowerShell 7 и требует установленного модуля для взаимодействия с WinGet.
Поэтому сначала пишем
Install-Module -Name 'Microsoft.Winget.Client", а лишь затем используем скрипт.Кода получилось очень мало, так что вставлю его прямо сюда. Кому надо, забирайте.
$ErrorActionPreference = "Stop"
Set-StrictMode -Version Latest
Write-Host "Looking for available WinGet updates..."
$allUpdates = Get-WingetPackage | Where-Object { $_.IsUpdateAvailable }
if (-Not $allUpdates) {
Write-Host "No available WinGet updates found"
exit
}
Write-Host "$($allUpdates.Count) updatable packages found."
$packagesToUpgrade = @()
$skipRemaining = $false
foreach ($pkg in $allUpdates) {
if ($skipRemaining) { break }
Write-Host "Package: $($pkg.Name)"
Write-Host "$($pkg.Id)"
Write-Host "Installed version: $($pkg.InstalledVersion)"
Write-Host "Available version: $($pkg.AvailableVersions[0])"
$choices = @(
New-Object System.Management.Automation.Host.ChoiceDescription "&Update", "Add to upgrade queue"
New-Object System.Management.Automation.Host.ChoiceDescription "&Skip", "Skip this package"
New-Object System.Management.Automation.Host.ChoiceDescription "Skip &All", "Skip all remaining packages"
New-Object System.Management.Automation.Host.ChoiceDescription "&Remove", "Queue this package for removal"
)
$answer = $host.UI.PromptForChoice("Action for $($pkg.Name)", "Choose an action", $choices, 0)
switch ($answer) {
0 {
$packagesToUpgrade += $pkg
}
1 {
Write-Host "Skipping"
}
2 {
Write-Host "Skipping all remaining packages"
$skipRemaining = $true
}
3 {
Uninstall-WinGetPackage -Id $pkg.Id
}
}
}
if ($packagesToUpgrade.Count -eq 0) {
Write-Host "No packages were selected for upgrade"
exit
}
Write-Host "Upgrading $($packagesToUpgrade.Count) packages..."
foreach ($pkg in $packagesToUpgrade) {
Write-Host "Upgrading $($pkg.Name)"
try {
Update-WinGetPackage -Id $pkg.Id -ErrorAction Stop
}
catch {
Write-Host "Upgrade for $($pkg.Id) failed"
Write-Host "Reason: $($_.Exception.Message)"
}
}
#Администрирование #Блокировки
Нет, речь не пойдёт про обход цензуры.
Недавно у меня на одном из московских серверов начали с завидной регулярностью падать ежедневные бэкапы.
Нашлось немного времени, пошёл разбираться. Выяснил, что сами бэкапы проходят, а падать их заставляет неработающий скрипт уведомлений в Telegram.
Всё, походу серверы теперь тоже местами отрезают от API мессенджера.
Грустно, но будем приспосабливаться.
Кстати, второй сервер в этом же датацентре почему-то ходит к боту без проблем и ещё ни разу не падал по таймауту.
Нет, речь не пойдёт про обход цензуры.
Недавно у меня на одном из московских серверов начали с завидной регулярностью падать ежедневные бэкапы.
Нашлось немного времени, пошёл разбираться. Выяснил, что сами бэкапы проходят, а падать их заставляет неработающий скрипт уведомлений в Telegram.
Всё, походу серверы теперь тоже местами отрезают от API мессенджера.
Грустно, но будем приспосабливаться.
Кстати, второй сервер в этом же датацентре почему-то ходит к боту без проблем и ещё ни разу не падал по таймауту.
#Администрирование #Linux #nftables
Я наконец-таки сдался под напором прогресса и пересадил сервисы на одном из серверов в Docker.
У Docker вроде всё стало лучше с nftables, да и опыта я поднабрался, чтобы какие-то сетевые нестыковки диагностировать и лечить вручную.
В общем, этим и занимался вчера почти весь день.
Но речь не об этом.
На заметку тем, кто не знал:
команда
Час времени я потратил на совокупление в попытках подружить докер со своим набором сетевых правил, пока не догадался сделать
В итоге опыт получен, цена за опыт уплачена нервными клетками, как всегда, а в личную коллекцию админских заметок улетело нечто вроде:
***
Не использовать
Использовать только
Restart nftables сносит runtime-правила Docker из-за
***
Да да, TailScale отваливается по тому же принципу и как и докер, лечиться рестартом сервиса.
А ещё вдогонку полезное вам про nftables:
Если на сервере крутится выше описанный зоопарк, то делать
А накладывать новые правила поверх старых и вообще смешивать - ещё хуже.
В современных nftables появилась прикольная команда.
Теперь начало моего скрипта выглядит так:
В отличие от
Идеально для идемпотентного применения конфигурации: удалил при наличии и тут же создал в нужном виде.
А, учитывая то, что весь скрипт nftables применяет в рамках одной транзакции и откатывает изменения при любом падении, вы либо примените скрипт целиком, либо у вас ничего не удалится, а старые сущности останутся на своих местах.
p.s. Пользуйтесь и не тупите, как я предыдущие 6 часов.
Я наконец-таки сдался под напором прогресса и пересадил сервисы на одном из серверов в Docker.
У Docker вроде всё стало лучше с nftables, да и опыта я поднабрался, чтобы какие-то сетевые нестыковки диагностировать и лечить вручную.
В общем, этим и занимался вчера почти весь день.
Но речь не об этом.
На заметку тем, кто не знал:
команда
systemctl restart nftables перед применением новых правил из /etc/nftables.conf сначала очищает напрочь весь рулсет, затирая и правила Docker, и настройки TailScale (у меня он тоже поднят).Час времени я потратил на совокупление в попытках подружить докер со своим набором сетевых правил, пока не догадался сделать
systemctl cat nftables и не заметил строчку вида ExecStop=/usr/sbin/nft ..... flush ruleset.В итоге опыт получен, цена за опыт уплачена нервными клетками, как всегда, а в личную коллекцию админских заметок улетело нечто вроде:
***
Не использовать
systemctl restart nftables на сервере с Docker/Tailscale.Использовать только
reload или nft -f /etc/nftables.conf.Restart nftables сносит runtime-правила Docker из-за
ExecStop=flush ruleset.***
Да да, TailScale отваливается по тому же принципу и как и докер, лечиться рестартом сервиса.
А ещё вдогонку полезное вам про nftables:
Если на сервере крутится выше описанный зоопарк, то делать
flush ruleset в начале вашего скрипта с правилами очевидно плохо.А накладывать новые правила поверх старых и вообще смешивать - ещё хуже.
В современных nftables появилась прикольная команда.
Теперь начало моего скрипта выглядит так:
destroy table inet custom_filter
destroy table ip vpn_nat
destroy chain inet lupa pupa zalupa
В отличие от
delete table или flush table destroy либо удалит сущность, либо промолчит, если её не было.Идеально для идемпотентного применения конфигурации: удалил при наличии и тут же создал в нужном виде.
А, учитывая то, что весь скрипт nftables применяет в рамках одной транзакции и откатывает изменения при любом падении, вы либо примените скрипт целиком, либо у вас ничего не удалится, а старые сущности останутся на своих местах.
p.s. Пользуйтесь и не тупите, как я предыдущие 6 часов.
❤1
#Администрирование #Linux
Когда очень быстро нужен одноразовый пароль, например после аренды нового сервера у FirstVDS (мать его), самое простое, что можно сделать -
На выходе получаем строку вида
Только вот проблема: FirstVDS такие пароли не принимает без объяснения причин. Просто "Ошибка при задании пароля. Попробуйте ещё раз или обратитесь в поддержку".
В итоге опытным путём выяснилось, что пароль не должен быть длиннее 12 символов. Бред же?!!
Когда очень быстро нужен одноразовый пароль, например после аренды нового сервера у FirstVDS (мать его), самое простое, что можно сделать -
openssl rand -hex 64.На выходе получаем строку вида
2dcad818d431ecf35e6656179481ff1f52cd2915020fde2dfe7031b0098ecbb26de2d0c810b6e70371546f0d66cadc27836dc407d59b12b6dd6d26ac08018efd, спокойно копируем и пользуемся.Только вот проблема: FirstVDS такие пароли не принимает без объяснения причин. Просто "Ошибка при задании пароля. Попробуйте ещё раз или обратитесь в поддержку".
В итоге опытным путём выяснилось, что пароль не должен быть длиннее 12 символов. Бред же?!!
👍1
Кто пользуется Total Commander: коротко без дополнительной воды:
команда shift+f4 позволяет создать новый текстовый файл в текущей директории и сразу открыть его в редакторе по умолчанию.
Несколько лет страдал и только сегодня догадался загуглить.
команда shift+f4 позволяет создать новый текстовый файл в текущей директории и сразу открыть его в редакторе по умолчанию.
Несколько лет страдал и только сегодня догадался загуглить.
👍1
#Программирование #cpp
ВОзможно, опытные разработчики меня сейчас заклюют за очевидность, но для меня было сюрпризом.
Пишу код на C++ в блокноте без IDE.
Собирается без ошибок.
Использую clang-format со включённой сортировкой include.
Код не собирается.
Выяснилось, что был у меня такой кусок кода:
И он собирался корректно до тех пор, пока clang-format в другом файле, подключающем этот заголовок, не поменял местами два инклюда.
оказалось выше, чем
и всё сломалось.
Понятно, что я сам дурак: забыл включить cstdint для использования uint8_t. Но отлавливать такие ошибки как-то надо.
Единственный убийственно надёжный способ - на каждый хедер из проекта создавать
Далее это собирается как object library, и уже на этапе сборки проблемы точно вылезут, если они есть.
Но писать такой тест руками на каждый хедер в проекте - та ещё головная боль.
Сейчас ищу инструмент, который умеет такое сам. Проблема, очевидно, не новая, и её наверное как-то решают.
Идея: генерировать такие cpp файлы на этапе конфигурации, чтобы сборка их подхватила.
Да, мы ещё более замедляем и так неспешную компиляцию проектов на C++, но хотя бы избавляемся от сюрпризов в будущем.
ВОзможно, опытные разработчики меня сейчас заклюют за очевидность, но для меня было сюрпризом.
Пишу код на C++ в блокноте без IDE.
Собирается без ошибок.
Использую clang-format со включённой сортировкой include.
Код не собирается.
Выяснилось, что был у меня такой кусок кода:
#pragma once
enum class PathScope : std::uint8_t {
Unknown,
Process,
User,
System
};
И он собирался корректно до тех пор, пока clang-format в другом файле, подключающем этот заголовок, не поменял местами два инклюда.
#include "myheader.hpp"оказалось выше, чем
#include <cstddef>и всё сломалось.
Понятно, что я сам дурак: забыл включить cstdint для использования uint8_t. Но отлавливать такие ошибки как-то надо.
Единственный убийственно надёжный способ - на каждый хедер из проекта создавать
myheader_self-containment_test.cpp, в котором подключается этот заголовок, больше ничего, а дальше создаётся одна простая функция.Далее это собирается как object library, и уже на этапе сборки проблемы точно вылезут, если они есть.
Но писать такой тест руками на каждый хедер в проекте - та ещё головная боль.
Сейчас ищу инструмент, который умеет такое сам. Проблема, очевидно, не новая, и её наверное как-то решают.
Идея: генерировать такие cpp файлы на этапе конфигурации, чтобы сборка их подхватила.
Да, мы ещё более замедляем и так неспешную компиляцию проектов на C++, но хотя бы избавляемся от сюрпризов в будущем.
🔥1
#Инцидент
У GitHub сегодня официально проблемы с Actions и Pages.
Официальное заявление компании об инциденте опубликовано в 10:57 UTC.
Actions отмечены как Major Outage (по-русски: почти не работает), а Pages - как Degraded Performance (то есть работает, но медленно и нестабильно).
Так что не пугаемся, это не нас заблокировали, это Гитхаб страдает.
У GitHub сегодня официально проблемы с Actions и Pages.
Официальное заявление компании об инциденте опубликовано в 10:57 UTC.
Actions отмечены как Major Outage (по-русски: почти не работает), а Pages - как Degraded Performance (то есть работает, но медленно и нестабильно).
Так что не пугаемся, это не нас заблокировали, это Гитхаб страдает.
#Администрирование #Windows #PowerShell
Я активно пользуюсь командной строкой с 15 лет. Но это всё в Linux.
Cmd в винде всегда казался мне морально устаревшим, отвратным на вид, плохо читаемым и слабо предсказуемым.
А вот PowerShell, конечно, чуток многословный, но за то много что умеет из коробки.
Про него, а точнее про его команды и возможности, я и решил написать статью.
Я периодически буду обновлять её, дополняя новыми командами, разделами и примечаниями.
Так что сохраняйте в закладки и пользуйтесь.
https://cyrmax.ru/posts/powershell-cheatsheet/
Я активно пользуюсь командной строкой с 15 лет. Но это всё в Linux.
Cmd в винде всегда казался мне морально устаревшим, отвратным на вид, плохо читаемым и слабо предсказуемым.
А вот PowerShell, конечно, чуток многословный, но за то много что умеет из коробки.
Про него, а точнее про его команды и возможности, я и решил написать статью.
Я периодически буду обновлять её, дополняя новыми командами, разделами и примечаниями.
Так что сохраняйте в закладки и пользуйтесь.
https://cyrmax.ru/posts/powershell-cheatsheet/
👍4❤1🔥1
#Windows #Заметка
После переустановки Windows нужно было на всю папку с проектами сменить владельца и права (иначе git возмущается и не хочет работать).
Проектов много, подпапок и файлов сотни тысяч (из-за виртуальных окружений и папок типа node_modules).
При смене владельца и прав на каждый файл консоль пишет об успешности операции отдельной строкой. Получается поток примерно в 5 экранов текста в секунду.
И либо Windows Terminal, либо PowerShell 7, либо NVDA обновилась таким образом, что теперь выдерживает такие потоки текста без зависаний и лагов.
Даже Orca и fenrir на Linux захлёбываются, а тут вообще полная стабильность.
Ниже для справки мои версии участвующего софта:
- NVDA 2025.3.3
- Windows 11 25H2 (AMD64) build 26200.8524
- Windows terminal 1.24.11321.0
- PowerShell 7.6.2
В NVDA настройки, касающиеся UIA-событий, такие:
Копировал вывод скринридера, ибо так быстрее.
- Registration for UI Automation events and property changes: combo box Automatic (prefer selective) collapsed Alt+ s
- Windows Console support: combo box Automatic (prefer UIA) collapsed Alt+ o
- Use enhanced event processing (requires restart) combo box Default (Enabled) collapsed Alt+ h
- Speak passwords in all enhanced terminals (may improve performance) check box checked Alt+ p
- Use enhanced typed character support in legacy Windows Console when available check box checked Alt+ y
- Diff algorithm: combo box Automatic (prefer Diff Match Patch) collapsed Alt+ d
- Speak new text in Windows Terminal via: combo box UIA notifications collapsed
- Attempt to cancel speech for expired focus events: combo box Default (Yes) collapsed
После переустановки Windows нужно было на всю папку с проектами сменить владельца и права (иначе git возмущается и не хочет работать).
Проектов много, подпапок и файлов сотни тысяч (из-за виртуальных окружений и папок типа node_modules).
При смене владельца и прав на каждый файл консоль пишет об успешности операции отдельной строкой. Получается поток примерно в 5 экранов текста в секунду.
И либо Windows Terminal, либо PowerShell 7, либо NVDA обновилась таким образом, что теперь выдерживает такие потоки текста без зависаний и лагов.
Даже Orca и fenrir на Linux захлёбываются, а тут вообще полная стабильность.
Ниже для справки мои версии участвующего софта:
- NVDA 2025.3.3
- Windows 11 25H2 (AMD64) build 26200.8524
- Windows terminal 1.24.11321.0
- PowerShell 7.6.2
В NVDA настройки, касающиеся UIA-событий, такие:
Копировал вывод скринридера, ибо так быстрее.
- Registration for UI Automation events and property changes: combo box Automatic (prefer selective) collapsed Alt+ s
- Windows Console support: combo box Automatic (prefer UIA) collapsed Alt+ o
- Use enhanced event processing (requires restart) combo box Default (Enabled) collapsed Alt+ h
- Speak passwords in all enhanced terminals (may improve performance) check box checked Alt+ p
- Use enhanced typed character support in legacy Windows Console when available check box checked Alt+ y
- Diff algorithm: combo box Automatic (prefer Diff Match Patch) collapsed Alt+ d
- Speak new text in Windows Terminal via: combo box UIA notifications collapsed
- Attempt to cancel speech for expired focus events: combo box Default (Yes) collapsed
👍4❤1🔥1
#Администрирование
Короткая заметка о надёжности почтовых спам-фильтров.
Настраиваю себе почтовый сервер.
Сервер только поднят, не настроены ни dkim, ни dmarc, ни spf. Конфиги пришиты белыми нитками, а кастомные параметры вообще прописываются в консоли ради теста.
Отправляю письмо с test@cyrmax.ru на свой основной ящик от ВК:
отправитель: test@cyrmax.ru
Имя отправителя: dms tester
Тема: this is an awesome email test
Тело письма пустое
Письмо доходит мгновенно и не попадает в спам.
И это при том, что реальный домен cyrmax.ru добавлен в vk workspace и пока что управляется им, а я по сути сейчас вмешался в его работу как самый настоящий проклятый спамер.
Интересно,у Яндекса и гугла результаты будут такие же?
Короткая заметка о надёжности почтовых спам-фильтров.
Настраиваю себе почтовый сервер.
Сервер только поднят, не настроены ни dkim, ни dmarc, ни spf. Конфиги пришиты белыми нитками, а кастомные параметры вообще прописываются в консоли ради теста.
Отправляю письмо с test@cyrmax.ru на свой основной ящик от ВК:
отправитель: test@cyrmax.ru
Имя отправителя: dms tester
Тема: this is an awesome email test
Тело письма пустое
Письмо доходит мгновенно и не попадает в спам.
И это при том, что реальный домен cyrmax.ru добавлен в vk workspace и пока что управляется им, а я по сути сейчас вмешался в его работу как самый настоящий проклятый спамер.
Интересно,у Яндекса и гугла результаты будут такие же?
🔥2❤1👍1
#Администрирование #Почта
Вести с полей self-hosted почты без экосистем и подписок.
Уже пару недель как работает моя вручную настроенная почта на своём сервере.
Особенно горжусь тем, что настроил её полностью при помощи Ansible, не делая никаких правок в конфигах на сервере по ssh. Написал роль, запустил для выбранных серверов - профит.
Конфигурация полностью повторяемая, все изменения, будь то новые почтовые ящики, удаление старых адресов, изменения квот - всё документируется через коммиты в репозиторий.
Для меня Ansible - очень новая штука, с которой раньше работать не было надобности, так что считаю микроэкзамен пройденным успешно.
На админский ящик уже поступают регулярные отчёты от различных крупных почтовых провайдеров, в их числе Google и mail.ru.
Я впервые такое вижу и сначала очень испугался, думал меня все решили массово забанить за кривые настройки и подозрение на спам.
Оказывается, такие отчёты - норма, и сыпаться они будут со всех серверов, с которыми мой сервер взаимодействовал.
Один вопрос: где отчёты от Яндекса? Хотя, может они таких и не шлют.
У всех отчитавшихся провайдеров я пока что прохожу все проверки на отлично, подозрительных маркеров нет.
Доставка почты тоже работает отлично, за одним неприятным исключением, которое вероятно исчезнет через сутки.
Для нескольких сайтов я уже сменил основную почту на новую и продолжаю потихоньку это делать, проверяя сервер под нагрузкой рекламных буклетов, сомнительной срани из бесплатных курсов и "очень выгодных бизнес-предложений".
Несколько игровых профилей для вновь купленных игр вообще сразу зарегистрировал на новую почту. Вот такой я рисковый.
Проблемы вижу пока что только две.
Первая - это опять же грёбаный mail.ru с его таймаутом в 14 дней. Долгое время, с пару лет наверное, почта для домена cyrmax.ru была вверена biz.mail.ru, он же vk workspace.
Как только я запустил свой сервер и всё перенастроил, я инициировал процедуру удаления домена из их экосистемы. Но по их же правилам должно пройти 14 дней перед окончательным удалением.
На это время ВК отказывается присылать что-либо на мою почту, потому что их инфра думает, что мой домен всё ещё обслуживается у них, и сообщения, отправленные с адресов экосистемы ВК даже не покидают их сервера. А внутри-то моего домена уже нет. В итоге "ваше сообщение недоставлено".
Вторая проблема - скорее даже опасение, которое потенциально может вылезти в проблему в далёком будущем.
Это нагрузка и масштабируемость.
Для пары реальных и десятка служебных ящиков одного сервера хватит ещё на десятки лет. А вот если нагрузка вырастет раз в 20, то может понадобиться масштабируемость.
Да и держать всю почту на одном сервере очень очень плохо, как и любой production-ready сервис.
Как масштабировать систему в текущем виде я не знаю. Возможно придётся в лучшем случае постигать kubernetes и прочее интересное, а в худшем - искать систему, которая масштабируется горизонтально, поддерживает всё вот это модное high availability и отказоустойчивость через реплики и прочие страшные девопсерские штуки.
Одно хорошо: резервное копирование у меня уже давно настроено, восстановление из бэкапов я репетирую раз в пару месяцев, а копии лежат на географически удалённых друг от друга серверах от разных провайдеров. Плюс одна копия всегда живёт у меня дома.
Возможно, если найду не совсем говнистое s3-хранилище по адекватной цене, буду лить копии ещё и туда. Всё же большие дяди с большими... датацентрами явно имеют больше серверов и меньше точек отказа при хранении данных.
p.s. Интересно, если я - единственный настоящий пользователь моей почты, должен ли я соблюдать 152-фз в отношении себя и хранить свои персональные данные только в юрисдикции РФ или это работает только для юридических лиц?
Вести с полей self-hosted почты без экосистем и подписок.
Уже пару недель как работает моя вручную настроенная почта на своём сервере.
Особенно горжусь тем, что настроил её полностью при помощи Ansible, не делая никаких правок в конфигах на сервере по ssh. Написал роль, запустил для выбранных серверов - профит.
Конфигурация полностью повторяемая, все изменения, будь то новые почтовые ящики, удаление старых адресов, изменения квот - всё документируется через коммиты в репозиторий.
Для меня Ansible - очень новая штука, с которой раньше работать не было надобности, так что считаю микроэкзамен пройденным успешно.
На админский ящик уже поступают регулярные отчёты от различных крупных почтовых провайдеров, в их числе Google и mail.ru.
Я впервые такое вижу и сначала очень испугался, думал меня все решили массово забанить за кривые настройки и подозрение на спам.
Оказывается, такие отчёты - норма, и сыпаться они будут со всех серверов, с которыми мой сервер взаимодействовал.
Один вопрос: где отчёты от Яндекса? Хотя, может они таких и не шлют.
У всех отчитавшихся провайдеров я пока что прохожу все проверки на отлично, подозрительных маркеров нет.
Доставка почты тоже работает отлично, за одним неприятным исключением, которое вероятно исчезнет через сутки.
Для нескольких сайтов я уже сменил основную почту на новую и продолжаю потихоньку это делать, проверяя сервер под нагрузкой рекламных буклетов, сомнительной срани из бесплатных курсов и "очень выгодных бизнес-предложений".
Несколько игровых профилей для вновь купленных игр вообще сразу зарегистрировал на новую почту. Вот такой я рисковый.
Проблемы вижу пока что только две.
Первая - это опять же грёбаный mail.ru с его таймаутом в 14 дней. Долгое время, с пару лет наверное, почта для домена cyrmax.ru была вверена biz.mail.ru, он же vk workspace.
Как только я запустил свой сервер и всё перенастроил, я инициировал процедуру удаления домена из их экосистемы. Но по их же правилам должно пройти 14 дней перед окончательным удалением.
На это время ВК отказывается присылать что-либо на мою почту, потому что их инфра думает, что мой домен всё ещё обслуживается у них, и сообщения, отправленные с адресов экосистемы ВК даже не покидают их сервера. А внутри-то моего домена уже нет. В итоге "ваше сообщение недоставлено".
Вторая проблема - скорее даже опасение, которое потенциально может вылезти в проблему в далёком будущем.
Это нагрузка и масштабируемость.
Для пары реальных и десятка служебных ящиков одного сервера хватит ещё на десятки лет. А вот если нагрузка вырастет раз в 20, то может понадобиться масштабируемость.
Да и держать всю почту на одном сервере очень очень плохо, как и любой production-ready сервис.
Как масштабировать систему в текущем виде я не знаю. Возможно придётся в лучшем случае постигать kubernetes и прочее интересное, а в худшем - искать систему, которая масштабируется горизонтально, поддерживает всё вот это модное high availability и отказоустойчивость через реплики и прочие страшные девопсерские штуки.
Одно хорошо: резервное копирование у меня уже давно настроено, восстановление из бэкапов я репетирую раз в пару месяцев, а копии лежат на географически удалённых друг от друга серверах от разных провайдеров. Плюс одна копия всегда живёт у меня дома.
Возможно, если найду не совсем говнистое s3-хранилище по адекватной цене, буду лить копии ещё и туда. Всё же большие дяди с большими... датацентрами явно имеют больше серверов и меньше точек отказа при хранении данных.
p.s. Интересно, если я - единственный настоящий пользователь моей почты, должен ли я соблюдать 152-фз в отношении себя и хранить свои персональные данные только в юрисдикции РФ или это работает только для юридических лиц?
👍2🔥2❤1
#Работа
Я же тут в поиске новой работы, и не только активно прокачиваюсь в различных навыках, но и много размышляю о том, что ещё мог бы вписать себе в резюме, дабы повысить свои шансы.
И вот о чём задумался.
Вот приходишь ты весь такой замотивированный и с кучей денег на "крутой курс по разработке на (подставить любой популярный стек)".
Тебе в программе курса обещают изучение самого стека, что очевидно, а ещё часто технический английский, что тоже нужно для чтения документации, и тот же git, без которого не делается ни один проект в мире.
А вот чего тебе никто не даёт, так это знаний, которые упростят твои первые месяцы в компании и снизят уровень головной боли у тебя и твоего HR на это время.
Я говорю про знание о том, как устроены типичные процессы в разработке: какой путь проходит задача от мысли в голове директора или топ-менеджера до продукта на устройствах пользователей, что такое agile, scrum, что входит в задачи тимлида, чем отличается продакт от проджект менеджера и может ли это быть один и тот же человек, зачем в конце концов нужны такие поруганные в разработческом фольклоре дейлики, ретро, груминги, как пользоваться всеми этими статусами в Jira, какие ещё есть системы отслеживания задач, как чаще всего устроены спринты, как принято формировать релизы, зачем нужны кодфризы и чем отличается мягкий кодфриз от жёсткого...
Вопросов можно напридумывать больше сотни, а ответов в одном конкретном месте, увы, хрен найдёшь.
Остаётся только гуглить или отчаянно топтать кнопки в диалогах с нейронкой, дабы овладеть хотя бы примерной контурной картой всего этого безобразия.
Если я найду полезные материалы по этой обширной теме, обязательно поделюсь с вами.
А когда знаний накопится больше пары страниц, обязательно сделаю страничку с ними на своём сайте.
Кстати, если кто ещё не видел, я перенёс сайт на Hugo, теперь он быстрый как понос, почти невзламываемый из-за своей статической природы, а статьи на него я наконец-таки пишу в своём любимом markdown, а не вот эти все визуальные редакторы.
Ну и если сервер упадёт, я могу поднять сайт на любом другом за пару минут, из которых минуту буду материться на упавший сервер.
Я же тут в поиске новой работы, и не только активно прокачиваюсь в различных навыках, но и много размышляю о том, что ещё мог бы вписать себе в резюме, дабы повысить свои шансы.
И вот о чём задумался.
Вот приходишь ты весь такой замотивированный и с кучей денег на "крутой курс по разработке на (подставить любой популярный стек)".
Тебе в программе курса обещают изучение самого стека, что очевидно, а ещё часто технический английский, что тоже нужно для чтения документации, и тот же git, без которого не делается ни один проект в мире.
А вот чего тебе никто не даёт, так это знаний, которые упростят твои первые месяцы в компании и снизят уровень головной боли у тебя и твоего HR на это время.
Я говорю про знание о том, как устроены типичные процессы в разработке: какой путь проходит задача от мысли в голове директора или топ-менеджера до продукта на устройствах пользователей, что такое agile, scrum, что входит в задачи тимлида, чем отличается продакт от проджект менеджера и может ли это быть один и тот же человек, зачем в конце концов нужны такие поруганные в разработческом фольклоре дейлики, ретро, груминги, как пользоваться всеми этими статусами в Jira, какие ещё есть системы отслеживания задач, как чаще всего устроены спринты, как принято формировать релизы, зачем нужны кодфризы и чем отличается мягкий кодфриз от жёсткого...
Вопросов можно напридумывать больше сотни, а ответов в одном конкретном месте, увы, хрен найдёшь.
Остаётся только гуглить или отчаянно топтать кнопки в диалогах с нейронкой, дабы овладеть хотя бы примерной контурной картой всего этого безобразия.
Если я найду полезные материалы по этой обширной теме, обязательно поделюсь с вами.
А когда знаний накопится больше пары страниц, обязательно сделаю страничку с ними на своём сайте.
Кстати, если кто ещё не видел, я перенёс сайт на Hugo, теперь он быстрый как понос, почти невзламываемый из-за своей статической природы, а статьи на него я наконец-таки пишу в своём любимом markdown, а не вот эти все визуальные редакторы.
Ну и если сервер упадёт, я могу поднять сайт на любом другом за пару минут, из которых минуту буду материться на упавший сервер.
❤2👍2🔥2
Code with Cyrmax
#Администрирование #Почта Вести с полей self-hosted почты без экосистем и подписок. Уже пару недель как работает моя вручную настроенная почта на своём сервере. Особенно горжусь тем, что настроил её полностью при помощи Ansible, не делая никаких правок…
Обожаю, когда большие компании делают из рутинного процесса достижение.
Помните мою проблему с доменом в VK Workspace? Так вот прошли сутки, домен штатно удалился из панели, на почту пришло соответствующее письмо, а ко мне в комментарии пришёл человек от ВК и сообщил, что "ситуацию с моим доменом исправили".
Это наверное нечто вроде "оформляешь перевод в банке по реквизитам счёта, он идёт до трёх дней, по завершению тебе звонит менеджер банка и радостно сообщает, что у них всё получилось, и перевод о боже радость какая доставлен получателю!"
Но, ради правды, теперь проблема действительно устранена: два тестовых письма, одно на реальную почту, а другое - на нечто вроде nonexistentverylongemailaddress@cyrmax.ru были доставлены в течение 5 секунд, учитывая лагучесть Thunderbird.
Так или иначе спасибо, что пришли в комментарии. Не ожидал, правда.
p.s. Теперь могу с гордостью заявить, что self-hosted почта работает и обслуживает как минимум одного реального пользователя, 4 служебных ящика для моих же сервисов, а также ловит сообщения на несуществующие адреса (на случай, если кто-то опечатался при отправке).
Помните мою проблему с доменом в VK Workspace? Так вот прошли сутки, домен штатно удалился из панели, на почту пришло соответствующее письмо, а ко мне в комментарии пришёл человек от ВК и сообщил, что "ситуацию с моим доменом исправили".
Это наверное нечто вроде "оформляешь перевод в банке по реквизитам счёта, он идёт до трёх дней, по завершению тебе звонит менеджер банка и радостно сообщает, что у них всё получилось, и перевод о боже радость какая доставлен получателю!"
Но, ради правды, теперь проблема действительно устранена: два тестовых письма, одно на реальную почту, а другое - на нечто вроде nonexistentverylongemailaddress@cyrmax.ru были доставлены в течение 5 секунд, учитывая лагучесть Thunderbird.
Так или иначе спасибо, что пришли в комментарии. Не ожидал, правда.
p.s. Теперь могу с гордостью заявить, что self-hosted почта работает и обслуживает как минимум одного реального пользователя, 4 служебных ящика для моих же сервисов, а также ловит сообщения на несуществующие адреса (на случай, если кто-то опечатался при отправке).
❤1👍1🔥1
#Разработка #AI
Ну что ж, кажется, мы эволюционировали, и теперь "вайбкодинг" звучит не пренебрежительно, а так же привычно, как "пишу на питоне".
Понятно, что ИИ всё ещё ошибается, и его работу всё ещё надо проверять; хотя работу человека тоже стоило бы проверять тщательнее.
ИИ во всяком случае не допускает ошибок в продакшен-коде типа
Но сейчас немножко не об этом. Сейчас о том, что именно люди делают с помощью искусственного интеллекта.
Писать код - окей, тестировать - окей, если наладишь правильные тесты и дашь возможность ИИ корректно получать результаты тестов; делать за тебя коммиты и более сложные манипуляции с контролем версий - окей, если ты ну совсем не готов потратить два дня на изучение основных принципов git.
Но...
"Найди вот этот проект pupa-project на гитхабе и скачай для меня последний релиз для винды"...
Это уже просто клиника. Люди в упоении искусственным интеллектом забыли, что есть обычные поисковые системы, что печатать запросы можно не только в чат, но и в строку поиска.
А токены-то не бесконечные вообще-то.
Но лень, видимо, бесконечна.
А ведь, если ты заранее найдёшь документацию по вопросу и положишь её в папку проекта, ИИ потратит меньше времени и токенов на поиск в интернете.
Если ты научишься базовым командам git, ИИ не придётся заниматься ещё и этим.
Если ты заранее посмотришь пару видео на ютубе о том, какие технологии сейчас считаются более надёжными, ты сможешь дать ИИ исходное направление размышлений и не страдать через полгода от неправильной архитектуры или кривых оптимизаций.
Короче, народ, поймите пожалуйста: ИИ - это не волшебная палочка типа "хочу сделай быстро хорошо эффективно", а инструмент, которым надо учиться пользоваться. Инструмент сложный, многогранный, но не магически автоматический.
p.s. А что вы делаете с помощью ИИ? Каким сервисом пользуетесь? Общаетесь ли в вашей IDE, в консоли или в отдельном GUI-приложении?
Ну что ж, кажется, мы эволюционировали, и теперь "вайбкодинг" звучит не пренебрежительно, а так же привычно, как "пишу на питоне".
Понятно, что ИИ всё ещё ошибается, и его работу всё ещё надо проверять; хотя работу человека тоже стоило бы проверять тщательнее.
ИИ во всяком случае не допускает ошибок в продакшен-коде типа
for symbol in very_long_string: pass.Но сейчас немножко не об этом. Сейчас о том, что именно люди делают с помощью искусственного интеллекта.
Писать код - окей, тестировать - окей, если наладишь правильные тесты и дашь возможность ИИ корректно получать результаты тестов; делать за тебя коммиты и более сложные манипуляции с контролем версий - окей, если ты ну совсем не готов потратить два дня на изучение основных принципов git.
Но...
"Найди вот этот проект pupa-project на гитхабе и скачай для меня последний релиз для винды"...
Это уже просто клиника. Люди в упоении искусственным интеллектом забыли, что есть обычные поисковые системы, что печатать запросы можно не только в чат, но и в строку поиска.
А токены-то не бесконечные вообще-то.
Но лень, видимо, бесконечна.
А ведь, если ты заранее найдёшь документацию по вопросу и положишь её в папку проекта, ИИ потратит меньше времени и токенов на поиск в интернете.
Если ты научишься базовым командам git, ИИ не придётся заниматься ещё и этим.
Если ты заранее посмотришь пару видео на ютубе о том, какие технологии сейчас считаются более надёжными, ты сможешь дать ИИ исходное направление размышлений и не страдать через полгода от неправильной архитектуры или кривых оптимизаций.
Короче, народ, поймите пожалуйста: ИИ - это не волшебная палочка типа "хочу сделай быстро хорошо эффективно", а инструмент, которым надо учиться пользоваться. Инструмент сложный, многогранный, но не магически автоматический.
p.s. А что вы делаете с помощью ИИ? Каким сервисом пользуетесь? Общаетесь ли в вашей IDE, в консоли или в отдельном GUI-приложении?
🔥2❤1👍1
#Linux #Администрирование
На одном из серверов сломался ssh.
При попытке входа на сервер соединение обрывается даже до первичного обмена данными.
При сыром подключении с помощью netcat сервер не отдаёт даже стандартного ssh-приветствия, а соединение разывается сразу же, до первого пакета.
При этом:
- сам порт 22 прослушивается, на нём кто-то принимает соединения, а уже потом активно их разрывает;
- tailscale работает, сервер не вывалился из сети;
- node-exporter и smartctl-exporter продолжают отдавать данные;
- правила фаервола не менялись уже около года;
- запущенные на сервере приложения продолжают работать без проблем;
- последний бэкап сегодня ночью прошёл без ошибок;
- по бэкапу изменений в конфигурации sshd не было никаких (спасибо diff за эту уверенность).
Остановитесь читать на пару секунд и подумайте, что делать. Ну или просто представьте себя в моей ситуации.
Починить сервер удалось только при помощи перезагрузки; причём перезагружать пришлось через провайдера, ибо доступа-то нет.
А теперь диагностика и решение.
После перезагрузки смотрим журналы sshd за прошлую загрузку (у меня настроено сохранение журналов на диск):
Видим множество строк типа
Недолгое гугление проблемы даёт понимание: родительский процесс sshd прочитал с диска и из конфигурации 3 хост-ключа, а дочерние процессы почему-то считали, что в конфиге имеется 4 ключа.
Родительский процесс передавал дочерним свои 3 ключа, а дочерние ждали 4 и жёстко разрывали соединение при несоответствии.
Но почему возникла такая ситуация?
Первая мысль: конфиг изменился, а родительский процесс его не перечитал.
Почему? Наверное обновление.
Ищем в логе pacman /var/log/pacman.log строчки про openssh и находим такую за 26 июля 20:29:44.
А первое сообщение о найденной ошибке как раз 26 июля в 20:29:46, то есть через две секунды после обновления openssh.
Значит было запущено обновление, пакет обновился, а сервис никто не перезапустил.
Да, почему-то в ArchLinux не принято автоматически перезапускать сервисы хуком после обновлений.
Я понимаю, почему было принято такое решение, но и сделать перезапуск безопасным было можно, тем более что в данном случае обновление без перезапуска оставляет компонент в неконсистентном состоянии, что ещё опаснее.
Но видимо у мейнтейнера arch openssh было другое мнение относительно вопроса.
Ладно, проблема решилась сама собой: ребут естественно перезапустил все сервисы, и теперь состояние стабильное.
Но тут другой вопрос: я этого обновления не помню. Совершенно.
Первая мысль: меня взломали.
Но долгое тщательное изучение журналов показало: это был я, с домашнего компа, с моим обычным ключом, вошёл с первого раза, сразу запустил обновление, дождался его завершения, дополнительно поставил pacman-contrib, почистил старые версии через paccache и вышел.
В тот день я обновлял Debian на нескольких серверах, и эти обновления записаны в моём журнале обслуживания: причины, почему обновление, результаты этого обновления для каждого сервера, найденные проблемы и их решения.
А вот то, что я трогал archlinux-сервер и что-то там делал, я и сам не помню, и в журнале этого нет.
Но это уже другая история для моего основного блога. Пойду туда жаловаться на свою память.
На одном из серверов сломался ssh.
При попытке входа на сервер соединение обрывается даже до первичного обмена данными.
При сыром подключении с помощью netcat сервер не отдаёт даже стандартного ssh-приветствия, а соединение разывается сразу же, до первого пакета.
При этом:
- сам порт 22 прослушивается, на нём кто-то принимает соединения, а уже потом активно их разрывает;
- tailscale работает, сервер не вывалился из сети;
- node-exporter и smartctl-exporter продолжают отдавать данные;
- правила фаервола не менялись уже около года;
- запущенные на сервере приложения продолжают работать без проблем;
- последний бэкап сегодня ночью прошёл без ошибок;
- по бэкапу изменений в конфигурации sshd не было никаких (спасибо diff за эту уверенность).
Остановитесь читать на пару секунд и подумайте, что делать. Ну или просто представьте себя в моей ситуации.
Починить сервер удалось только при помощи перезагрузки; причём перезагружать пришлось через провайдера, ибо доступа-то нет.
А теперь диагностика и решение.
После перезагрузки смотрим журналы sshd за прошлую загрузку (у меня настроено сохранение журналов на диск):
sudo journalctl -b -1 -e -u sshd --no-pagerВидим множество строк типа
Jul 28 17:55:34 tiflohost sshd[2363265]: internal error: hostkeys confused (config 4 recvd 3).Недолгое гугление проблемы даёт понимание: родительский процесс sshd прочитал с диска и из конфигурации 3 хост-ключа, а дочерние процессы почему-то считали, что в конфиге имеется 4 ключа.
Родительский процесс передавал дочерним свои 3 ключа, а дочерние ждали 4 и жёстко разрывали соединение при несоответствии.
Но почему возникла такая ситуация?
Первая мысль: конфиг изменился, а родительский процесс его не перечитал.
Почему? Наверное обновление.
Ищем в логе pacman /var/log/pacman.log строчки про openssh и находим такую за 26 июля 20:29:44.
А первое сообщение о найденной ошибке как раз 26 июля в 20:29:46, то есть через две секунды после обновления openssh.
Значит было запущено обновление, пакет обновился, а сервис никто не перезапустил.
Да, почему-то в ArchLinux не принято автоматически перезапускать сервисы хуком после обновлений.
Я понимаю, почему было принято такое решение, но и сделать перезапуск безопасным было можно, тем более что в данном случае обновление без перезапуска оставляет компонент в неконсистентном состоянии, что ещё опаснее.
Но видимо у мейнтейнера arch openssh было другое мнение относительно вопроса.
Ладно, проблема решилась сама собой: ребут естественно перезапустил все сервисы, и теперь состояние стабильное.
Но тут другой вопрос: я этого обновления не помню. Совершенно.
Первая мысль: меня взломали.
Но долгое тщательное изучение журналов показало: это был я, с домашнего компа, с моим обычным ключом, вошёл с первого раза, сразу запустил обновление, дождался его завершения, дополнительно поставил pacman-contrib, почистил старые версии через paccache и вышел.
В тот день я обновлял Debian на нескольких серверах, и эти обновления записаны в моём журнале обслуживания: причины, почему обновление, результаты этого обновления для каждого сервера, найденные проблемы и их решения.
А вот то, что я трогал archlinux-сервер и что-то там делал, я и сам не помню, и в журнале этого нет.
Но это уже другая история для моего основного блога. Пойду туда жаловаться на свою память.