Make. Build. Break. Reflect.
1.22K subscribers
135 photos
2 videos
1 file
145 links
Полезные советы, всратые истории, странные шутки и заметки на полях от @kruchkov_alexandr
Download Telegram
#бытовое #AI #всратость

Либо мои промпты не ок, либо IA как зумеры 🤣
Не умеет рисовать циферблат часов с указанным временем🤣

Потратил некоторое время, чтобы нарисовать изображение с циферблатом часов, показывающими 19:30 для презентации, но в итоге просто спёр изображение со стоков без вотермарки.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
😁6
#AI #мысли

Больше года активно использую AI в работе.
Не скрываю, пробовал почти все, от локальных до платных(писал выше и не раз).
Генерация документации, кодогенерация, написание тестов всех типов, авторевью, просто чат и поиск решений.

Все новости "нас заменят AI" читаю пока со скепсисом.
Умные работодатели об AI знают не хуже нашего и они просто начинают оплачивать подписку на AI-tools(CodeRabbit, Cursor IDE etc). Руководители знают, что AI умеют.

Нас, инженеров, не скоро заменят.
У нас появится больше работы, так как привычную/простую работу мы выполняем теперь заметно быстрее.
💯13👍2👏1
#пятница #мысли #AI

Самоё ужасное, что могло произойти с появлением AI, это мириады статей, сгенерированных нейросетями, содержавших в себе непроверенный "мусор" и сбивающие с толку людей, кому приходится это читать.
Вероятно мы должны прийти к тому, что читать технические статьи нужно на популярных площадках с модерацией текста.
👍19💯2
#aws #vanta #ai #azure

На этом моём скриншоте прекрасно всё.
Добро пожаловать в 2025 год.

Vanta, компания, которая за огромные деньги позволяет проходить аудит от SOC2 до PCIDSS, при помощи AI генерирует рекомендации с несуществующими ресурсами терраформ.

У меня всё.
😁41👏4🤡1
#AI #opensearch #всратость


Прилетает алерт - "нет места на опенсёрче".

По ссылке в алерте захожу в Grafana - да, места почти нет, трешхолд в 20 гигабайт остатка.
Как так-то, там илонмасколлион стораджа, как он может закончится + ретеншн полиси 14 дней?
Захожу в UI OpenSearch в индекс менеджмент.
Последние дни индексы по 100-300 гигабайт в день.😬
Мысленно кричу "ВЫ ТУДА СРЁТЕ ЧТОЛИ????" ах, какая досадность".

Ок, логов много, дискавери мне ничем не поможет в идентификации аппликейшн сорса.
Иду в Visualizations, выстраиваю фильтры, ставлю top сообщений по имени апп.
Вижу какой-то новый сервис. Назовём его chatbot.
Естественно он в топе, отрыв в 220 раз от второго места. Неплохо.
Отлично, негодяя мы нашли.
Что же ты пишешь, чудо ты наше.
Discovery по фильтру appname=chatbot у меня подвис от количества сообщений, окно браузера само аннигилируется от потока, плюю на зависшее, иду в сам Kubernetes POD, смотреть по k logs -f podname.
А там ВСЁ. Ребята, там, бл, вообще ВСЁ. Вселенная текстов и диалогов!
Ленинская библиотека не содержит в себе столько информации, как в логах этих подов.

Сразу же прилетает алёрт "места осталось 0.0001%", а в Spotify играет припев песни Final Countdown.
Гиеной ржу с трека и ситуации, но не расслабляюсь, а бегу в developer console и удаляю индекс самый старый.
А затем сразу же ещё один. Та они всего по 85 гигабайт были. Каждый.
С такой скоростью, пока буду траблшутить, снова места не станет.

Смотрю в git репозитории этого проекта, выбираю топ 2 коммитящих, а значит шарящих, инженеров.
Иду в oncall чат, вызываю обоих, пришёл только один, спрашиваю вежливо что за сервис, что делает, кхто начальник штаба?
Получаю детальное пояснение.

Вернемся двумя неделями ранее.

Разработчики запилили некий агент. Чат бот. Чат-ассистент. Не важно.
Кастомерам этого продукта понравилось, они начали своим саб-кастомерам впаривать это.
Честно говоря, я не знал и не знаю всю бизнес-структуру и как вообще проект зарабатывает с этого, но это и не важно.
В общем процесс идёт, все всем довольны.
Фича работает и развивается.
Денежки идут в карман владельцам.

Однако всё(!) общение в чат ботах пишется в stdout
То есть не логи самого приложения, а логи общения внутри чатбота попадает в stdout.🤡
И в нашу систему логирования.
Вся переписка, приватные данные, вообще всё.
Даже специально искал киворды типа token/password/phone - там есть всё!

Итоги:
- все, даже я, получили по шапке, логи общения выключили(пока не сделают фичу на фильтр того, что надо).
- разработчикам всё равно на все PCI-DSS, SOC2 и прочий аудит. Срать в логи приватными данными? Изи!
- я добавил Europe - Final Countdown в любимые треки, буду включать при повторах ситуации 😁

* История давнишняя, просто вспомнил сейчас.
Please open Telegram to view this post
VIEW IN TELEGRAM
😁34🔥4🤡3
#ocr #ats #cv #ai #ASCII #PDF

Возможно кто-то из инженеров сейчас сидит и не может найти работу, потому что его CV в PDF файле не могут распарсить AI боты и ATS. Банальный баг и невнимательность.

Внезапно узнал, что если вы, как и я, создаёте шаблон CV в MS Word, а потом сохраняете как PDF, то есть бага.

Word -> print as PDF = non-ASCII characters
Word -> save as PDF = всё ок (кроме сраных длинных типографских тире)

С печатью в PDF, например, вместо сочетания TI/ti будет спецсимвол.
documenta�on, suppor�ng, GitHub Ac�ons

Ровно как и все типы минусов/дефис/тире (их вроде около 5-6 типов).

Быстро советы:
- НЕ используйте печать как PDF для сохранения документа
- сделал PDF(любым способом) - открыл PDF - выделил всё ctrl+A - скопировал ctrl+c - вставил на странице https://pages.cs.wisc.edu/~markm/ascii.html - и так до тех пор, пока не будет спецсимволов.

Сейчас всё обрабатывают роботы при первичном скрининге.
Дайте роботам шанс дотащить ваш CV хотя бы до HR, сделайте его читаемым.❤️

Ссылки на почитать(опционально):
- https://pages.cs.wisc.edu/~markm/ascii.html
- https://my.onu.edu/sites/default/files/applicant_tracking_system_resume_guide.pdf
- https://careerservices.uic.edu/wp-content/uploads/sites/26/2017/08/Ensure-Your-Resume-Is-Read-ATS.pdf
- https://drive.google.com/file/d/1X5pOmi-s_ZIKPkKsVVElWhSjv80ihyS5/view
515👍7👾3🔥2
#ai #kubernetes

Удивительно, как быстро развивается мир моделек.

Понадобилось, внезапно, по работе посмотреть большое количество логов.
Да-да, есть под рукой VMui/OpenSearch/Grafana и так далее, но логов много и подов много, веб не поможет в моем дотошном осмотре. Немного специфичная задача была.
Надо было прям в моменте глянуть чо там чо там на нескольких десятках подов, да ещё и с дебаг левелом.

Думаю "блин, ну я вроде сам это относительно недавно делал через node proxy, даже заметку писал, дай повторю".
https://xn--r1a.website/makebreakreflect/205
Нашёл, зашёл, а там уныло - много команд, мне лень.
Не, ну там десяток нод, десятка 4 подов, не буду же я на каждую ноду по SSH/SSM залезать, это тупо.
В общем скормил мой же текст поста нейронке, говорю дай мне универсальный скрипт/команду, чтобы выкачать все файлы по фильтру неймспейса/пода, чтобы локально это исследовать.

Та-да! Пару минут и у меня есть готовый скрипт.
На самом деле их два - выбирайте под задачу.
Мне нужен был первый вариант файлов с диска без ротации.

Вариант 1: через файловую систему ноды
Этот вариант ходит напрямую в /var/log/containers/ через Node Proxy API и выкачивает raw-файлы логов.
Полезен, если нужно получить именно файлы с диска (например, для анализа ротации или когда нужен точный формат файла).
NAMESPACE="kube-system"
POD_PATTERN="kube-proxy"

for POD in $(kubectl get pods -n $NAMESPACE | grep $POD_PATTERN | awk '{print $1}'); do
NODE=$(kubectl get pod $POD -n $NAMESPACE -o jsonpath='{.spec.nodeName}')
CONTAINER_ID=$(kubectl get pod $POD -n $NAMESPACE -o jsonpath='{.status.containerStatuses[0].containerID}' | sed 's|containerd://||')
CONTAINER_NAME=$(kubectl get pod $POD -n $NAMESPACE -o jsonpath='{.spec.containers[0].name}')
LOG_FILE="${POD}_${NAMESPACE}_${CONTAINER_NAME}-${CONTAINER_ID}.log"

echo "⬇️ Downloading: $POD → $NODE"
kubectl get --raw "/api/v1/nodes/${NODE}/proxy/logs/containers/${LOG_FILE}" > "./${POD}.log"
echo "✓ Saved: ./${POD}.log"
done


Вариант 2: Через официальный API containerLogs
Этот вариант использует документированный endpoint kubelet API.
Работает с namespace/pod/container напрямую, не требует знания внутренней структуры файловой системы ноды.
NAMESPACE="kube-system"
POD_PATTERN="kube-proxy"

for POD in $(kubectl get pods -n $NAMESPACE | grep $POD_PATTERN | awk '{print $1}'); do
NODE=$(kubectl get pod $POD -n $NAMESPACE -o jsonpath='{.spec.nodeName}')

CONTAINERS=$(kubectl get pod $POD -n $NAMESPACE -o jsonpath='{range .spec.containers[*]}{.name}{"\n"}{end}')

for CONTAINER in $CONTAINERS; do
OUTPUT_FILE="./${POD}_${CONTAINER}.log"

echo "⬇️ Downloading: $POD/$CONTAINER from $NODE"
kubectl get --raw "/api/v1/nodes/${NODE}/proxy/containerLogs/${NAMESPACE}/${POD}/${CONTAINER}" > "$OUTPUT_FILE"
echo "✓ Saved: $OUTPUT_FILE"
done
done

аутпут
⬇️ Downloading: kube-proxy-brpfm → aks-1
✓ Saved: ./kube-proxy-brpfm.log
⬇️ Downloading: kube-proxy-bt6fp → aks-2
✓ Saved: ./kube-proxy-bt6fp.log


Ограничения обоих вариантов
Это не стандартный документированный способ получения логов контейнеров (хотя второй вариант использует документированный endpoint kubelet, это всё равно обходной путь через nodes/proxy).
Оба скрипта только для первого (индекс [0]) контейнера в поде, но мне ок по задаче.

Не заработает, если:
- у вашего пользователя нет прав nodes/proxy
- кластер имеет ограничения на node proxy access
- используется нестандартный путь для логов контейнеров (для варианта 1)
- для варианта 1, если у вас не containerd, а cri-o, поправьте sed на нечто типа:
sed -E 's/^(containerd:\/\/|cri-o:\/\/)//'

У меня крио нет, так что я хз сработает ли эта регулярка.

Получилась заметка по заметке, но зато у меня есть под рукой оба скрипта - выбираю в зависимости от задачи.
Файловая система, когда нужно покопаться в истории логов, официальный API - когда нужно быстро выкачать актуальное состояние (скорее всего не пригодится никогда).

Забавно обучать/получать ответы от нейронки по своей же заметке. 😅
👍16👎31
#devops #ai #mcp #skills #troubleshooting

MCP, скиллы, ИИ, *уи.


Последние месяцы отказываюсь от MCP серверов.
Прям вот по минимуму оставляю и только от безысходности.
Slack, Linear, Jira, Grafana, VM (Victoria metrics), VL (victoria logs) и так далее.
Им замены мало, без них сложно.

Все MCP для Kubernetes, GitHub, GitLab - все это очень плохо работает в боевых условиях.

Распишу основные минусы из моего опыта:

- трата токенов
Вопреки описанию "да просто мсп сервер ничего не жрет в фоне", это лукавство.
Жрет токены и это видно по логу и трате их по обычным запросам.
Постоянно включать/выключать их я пробовал, но это банально неудобно даже если повесить скиллы/алиасы на это.

- они навайбкожены
Давайте быть честными - больше половины этих серверов это вайбкод вайбкода и работает он ровно так же.
Никаких гарантий, что ИИ агент идет четко по REST API/gRPC, из моей практики они просто хаотично по всем ендпойнтам лезут в надежде найти ответ на вопрос/задачу.

- функционал обрезан. Самый главный и основной минус.
Очень часто натыкался на то, что CLI утилита продукта имеет 99.9% функционала UI, а MCP от силы 60-70% по моим наблюдениям и оценке.
Пример на скриншоте.
Контекст скриншота: обучаю скилл/агента трабшутить упавшие пайплайны гитлаба, и mcp тут не подходит, он даже не может смотреть лог джобы, лол. 😬 Пришлось переписать на glab cli.

- происхождение сомнительное
Большинство MCP‑реализаций сейчас - сторонние, не от официальных вендоров, и часто не строго следуют контракту API или gRPC.
Я пробовал делать "доверительные списки", даже обращался к https://archestra.ai/mcp-catalog, но результат все равно для меня сомнительный.

Мне этого хватило, чтобы со временем отключить почти все MCP сервера там, где есть альтернатива - CLI tool + Skills.
Тут нет речи о том, что MCP - говно.
Тут речь лишь о том, что если есть CLI tool, то MCP не нужен.

Есть glab + TOKEN? MCP GitLab не нужен.
Есть gh + TOKEN? MCP GitHub не нужен.
Есть kubectl + auth? MCP Kubernetes не нужен.
И так далее.

Из плюсов подхода Skills +CLI tool:
- трата меньше токенов
- больший функционал, чем у MCP

Я пробовал заменить MCP VM/VL на "cURL + Skills", это работает и работает отлично, но трата токенов выше примерно на 18-22% по моим графикам и данным. Нерационально, поэтому оставил MCP MV/VL.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍143
#ai #devops

Совершенно ожидаемо и неожиданно одновременно Nvidia выпустила бесплатные эндпойнты к популярным LLM моделям.
https://build.nvidia.com/models?filters=nimType%3Anim_type_preview&orderBy=weightPopular%3ADESC

А давайте-ка глянем, так ли оно.

- прошел регистрацию (мой gmail аккаунт)
- прошел верификацию (номер телефона НЕ РФ, другие страны не проверял само собой)
- выбрал рандомную модель
https://build.nvidia.com/moonshotai/kimi-k2-instruct
- нажал view code
- нажал в окошке generate API key
- скопировал код к себе локально в файл 1.py , добавил context простой вопрос про хокку
from openai import OpenAI

client = OpenAI(
base_url = "https://integrate.api.nvidia.com/v1",
api_key = "nvapi-m3_bqO98rY-а-зачем-вам-мой-токен-BAMIGI-tLbz3VQ20MpwyTbU-"
)

completion = client.chat.completions.create(
model="moonshotai/kimi-k2-instruct",
messages=[{"role":"user","content":"Write a haiku about infrastructure as code."}],
temperature=0.6,
top_p=0.9,
max_tokens=4096,
stream=True
)

for chunk in completion:
if not getattr(chunk, "choices", None):
continue
if chunk.choices and chunk.choices[0].delta.content is not None:
print(chunk.choices[0].delta.content, end="")

- установил пакет опенаи (если нет)
pip3 install openai

- сохранил код и запустил его
python3 1.py

Lines of code define
bridges spun from pure intent—
infrastructure breathes.


Работает! 🎉

Забирайте себе и тренируйтесь с разными моделями бесплатно. ❤️

- - -
Update для самых быстрых и невнимательных.

Не забывайте, что там:
"Privacy. Your input and output will be recorded to provide you with this trial experience and to improve NVIDIA products and services, including AI models, in accordance with our Privacy Policy.
Do not upload any confidential information or personal data unless expressly permitted. Your use is logged for security, fraud or abuse monitoring and shared with third party service providers for this purpose. If the demo necessarily requires the input of personal data, logging for product development purposes will be turned off."
8