igrishaev
Відкрити в Telegram
685
Підписники
Немає даних24 години
+17 днів
+1530 день
Триває завантаження даних...
Схожі канали
Хмара тегів
Вхідні та вихідні згадування
---
---
---
---
---
---
Залучення підписників
липень '26
липень '26
+23
в 0 каналах
червень '26
+12
в 0 каналах
Get PRO
травень '26
+24
в 1 каналах
Get PRO
квітень '26
+7
в 0 каналах
Get PRO
березень '26
+7
в 0 каналах
Get PRO
лютий '26
+13
в 0 каналах
Get PRO
січень '26
+20
в 0 каналах
Get PRO
грудень '25
+17
в 0 каналах
Get PRO
листопад '25
+13
в 0 каналах
Get PRO
жовтень '25
+21
в 0 каналах
Get PRO
вересень '25
+8
в 0 каналах
Get PRO
серпень '25
+14
в 0 каналах
Get PRO
липень '25
+18
в 0 каналах
Get PRO
червень '25
+26
в 1 каналах
Get PRO
травень '25
+66
в 1 каналах
Get PRO
квітень '25
+64
в 0 каналах
Get PRO
березень '25
+15
в 0 каналах
Get PRO
лютий '25
+21
в 0 каналах
Get PRO
січень '25
+105
в 0 каналах
Get PRO
грудень '24
+14
в 0 каналах
Get PRO
листопад '24
+16
в 0 каналах
Get PRO
жовтень '24
+15
в 0 каналах
Get PRO
вересень '24
+15
в 0 каналах
Get PRO
серпень '24
+20
в 0 каналах
Get PRO
липень '24
+60
в 1 каналах
Get PRO
червень '24
+37
в 2 каналах
Get PRO
травень '24
+7
в 0 каналах
Get PRO
квітень '24
+6
в 0 каналах
Get PRO
березень '24
+39
в 0 каналах
Get PRO
лютий '24
+9
в 0 каналах
Get PRO
січень '24
+18
в 1 каналах
Get PRO
грудень '23
+12
в 0 каналах
Get PRO
листопад '23
+5
в 0 каналах
Get PRO
жовтень '23
+8
в 0 каналах
Get PRO
вересень '23
+8
в 0 каналах
Get PRO
серпень '23
+7
в 0 каналах
Get PRO
липень '23
+6
в 0 каналах
Get PRO
червень '23
+3
в 0 каналах
Get PRO
травень '23
+3
в 0 каналах
Get PRO
квітень '23
+2
в 0 каналах
Get PRO
березень '23
+13
в 0 каналах
Get PRO
лютий '23
+4
в 0 каналах
Get PRO
січень '23
+4
в 0 каналах
Get PRO
грудень '22
+6
в 0 каналах
Get PRO
листопад '22
+4
в 0 каналах
Get PRO
жовтень '22
+1
в 0 каналах
Get PRO
вересень '22
+15
в 0 каналах
Get PRO
серпень '22
+12
в 0 каналах
Get PRO
липень '22
+5
в 0 каналах
Get PRO
червень '22
+8
в 0 каналах
Get PRO
травень '22
+2
в 0 каналах
Get PRO
квітень '22
+5
в 0 каналах
Get PRO
березень '22
+17
в 0 каналах
Get PRO
лютий '22
+7
в 0 каналах
Get PRO
січень '22
+7
в 0 каналах
Get PRO
грудень '21
+8
в 0 каналах
Get PRO
листопад '21
+8
в 0 каналах
Get PRO
жовтень '21
+20
в 0 каналах
Get PRO
вересень '21
+11
в 0 каналах
Get PRO
серпень '21
+6
в 0 каналах
Get PRO
липень '21
+11
в 0 каналах
Get PRO
червень '210
в 0 каналах
Get PRO
травень '21
+193
в 0 каналах
| Дата | Залучення підписників | Згадування | Канали | |
| 26 липня | 0 | |||
| 25 липня | +2 | |||
| 24 липня | 0 | |||
| 23 липня | 0 | |||
| 22 липня | +2 | |||
| 21 липня | +1 | |||
| 20 липня | +2 | |||
| 19 липня | +1 | |||
| 18 липня | 0 | |||
| 17 липня | +3 | |||
| 16 липня | +8 | |||
| 15 липня | 0 | |||
| 14 липня | +1 | |||
| 13 липня | +1 | |||
| 12 липня | 0 | |||
| 11 липня | 0 | |||
| 10 липня | 0 | |||
| 09 липня | +1 | |||
| 08 липня | 0 | |||
| 07 липня | +1 | |||
| 06 липня | 0 | |||
| 05 липня | 0 | |||
| 04 липня | 0 | |||
| 03 липня | 0 | |||
| 02 липня | 0 | |||
| 01 липня | 0 |
Дописи каналу
| 2 | Немає тексту... | 423 |
| 3 | Долгое время в Телеграме нельзя было постить текст с картинками. То есть было можно, но со скрипом. К обычному тексту нельзя добавить картинку, а если это сделать, то сообщение становится типом "медиа", и его текстовая часть сильно меньше. Премиум закрывает этот недостаток, но появляется другая беда: текст выравнивается по ширине картинки. Если картинка маленькая, текст превращается в мышиный хвост.
В результате народ постит текст и картинки отдельно, чтобы не страдало ни то, ни другое. Но получается два сообщения, и если хочешь поделиться ими, приходится пересылать пару. Словом, бред.
Со временем Телеграм стал полноценной медиаплощадкой; есть даже проекты, у которых единственный канал – месаджеры. При публикации картинок каждый извращался как умел: выносил их в галереи, объединял в коллажи и так далее.
И вот в Телеграм завезли полноценный визивиг-редактор. Это когда картинки и текст чередуются, и нет смысла делить публикацию на текстовый блок и медиа. Также сделали заголовки, списки и редактор таблиц – этакий Ворд.
Что ж, на словах все прекрасно, а вот на деле… ради интереса я сверстал небольшую статью: три абзаца, а между ними картинки. Сбросил в сохраненные сообщения и проверил на ноутбуке и телефоне. Оказалось, что шрифт статьи на один-два пункта меньше, чем обычный текст (см. картинку). Получается, тот, кто читает с ноута, будет напрягать глаза. Проверил настройки: шрифт выкручен на максимум, отдельной опции для шрифтов статьи нет.
На телефоне оба шрифта – обычной публикации и статьи – одинаковы, и это хорошо. Но блок статьи срезан слева на один сантиметр. Почему? Зачем его срезать? Для чего пустота слева? Там ни одной кнопки, просто щель шириной в сантиметр, и через нее сквозит фон.
На обоих устройствах клиенты последних версий.
Надеюсь, что в будущем шрифты подтянут. Увы, пока что я не готов оформлять текст с картинками в виде статей: щурить глаза ради чередования картинок – так себе удовольствие. | 410 |
| 4 | a.set(b.get() + c.get())
Или, если речь идет об x = x + 1:
x.set(x.get() + 1)
Другой дело, что на тот момент, когда на доске впервые записано x = x + 1, ученик еще не знает об объектах. Поэтому в ход идут коробочки, из которых достали сто рублей, добавили и положили обратно.
Повторюсь: кому-то сказанное покажется банальным, но я считаю, о присваивании говорят мало – а тема очень интересная и сложная. | 448 |
| 5 | Небольшая добавка к заметке про x += 5.
В жизни каждого программиста был момент, когда учитель информатики писал на доске:
x = x + 1,
после чего смотрел в класс – поймут или нет? Класс, разумеется, не понимал и смотрел на учителя: что он несет? В школьной математике переменные неизменяемы: если взялся решать квадратное уравнение или систему уравнений, x не может по ходу дела переобуться во что-то другое. Да, можно подать на вход разные иксы и получишь разные игреки. Но одно дело входные данные, а другое – их мутация в полете.
Учитель начинал рассказывать про коробочку, из которой достали сто рублей, прибавили рубль и положили обратно в коробочку. Что ж, какое-то объяснение это давало. Чувствуя наше сомнение, учитель откровенно продавливал свою аргументацию: если написать в Паскале x := x + 1, то икс увеличится. Видите?
Спорить с этим было нельзя, но ясности не добавляло. Класс принимал объяснение как данность, но знаете что? Где-то глубоко во мне сидела мысль, что учитель и сам не понимает, как это работает. Да, он знает, какой получится результат, но не понимает истинных причин. Просто потому, что когда точно что-то знаешь, объяснение простое.
Если бы меня попросили объяснить, как работает x = x + 5, я бы ответил так.
В языках высокого уровня мы работаем с переменными: x, y и так далее. Этот код становится машинными командами, а в них никаких переменных нет. Лучше всего это видно на примере ассемблера. В ассемблере нет переменных – только адреса. Для удобства некоторым адресам можно сопоставить метку – логическое имя. Меткой может быть что угодно: переменная, точка входа в процедуру, место, куда нужно совершить условный переход и так далее.
Выше я написал "переменная", но это не совсем верно: в ассемблере нет переменных. Мы резервируем память и одновременно добавляем к ней метку. Если метку убрать, программа скомпилируется и будет работать, просто мы не сможем сослаться на эту память – или сможем, но косвенно, отталкиваясь от других меток.
Таким образом, метка – это адрес, просто именованный. Метка представляет собой число, и к нему можно что-то прибавить, чтобы сместиться в памяти. Если же взять метку в квадратные скобки, получим значение по указанному адресу. В этом и состоит двойственная природа метки: это адрес (число), однако можно либо взять ее значение по адресу, либо поместить значение по этому адресу.
Если предположить, что в ассемблерном коде есть метки a, b и c, то выражение a = b + c выглядит так (пишу по памяти):
mov eax [b] ; поместить в eax ЗНАЧЕНИЕ b
add eax [c] ; добавить к eax ЗНАЧЕНИЕ c
move a eax ; поместить ПО АДРЕСУ a значение eax
Видим, что в случае с "переменными" b и c мы использовали оператор [], чтобы получить значение. А когда мы "присваиваем" результат в a, квадратные скобки не требуются – метка используется как адрес.
Вот почему выражение a = b + c следует читать так: в адрес a заносится выражение, полученное как.... Важно, что в первой части: не "a становится" чем то, а именно "в адрес a" заносится то-то и то-то. Большая разница.
Язык Си предлагает указатели – считай, именованные адреса с той же семантикой. Мы вправе работать с ними как вздумается: использовать их как числа для адресной арифметики или получать из них значения. Указатели – непростая тема, но по крайней мере здесь есть какой-то контроль. В выражении x = x + 5 этого контроля нет. Как я уже говорил, слева от присваивания стоит адрес, а если это что-то сложное вроде items[get_index(foo)], оно вычисляется, чтобы получить этот адрес.
Таким образом, переменная в Си — это тоже указатель (метка), и компилятор трактует ее по ситуации: иногда как значение, а иногда как адрес. Единственный язык, где адрес и значение не перемешиваются — это ассемблер. В нем foo — это всегда адрес, а [foo] — значение по адресу.
Как ни странно, присваивание неплохо ложится на объектную модель. Как мы выяснили, переменная – это пара адрес-значение. Ее операции: дай адрес, дай значение по адресу, помести значение по адресу. Можно представить переменную объектом с методами get и set. В этом случае выражение a = b + c мы бы записали так: | 398 |
| 6 | Оказывается, на 11 винде нельзя открыть блокнот (notepad.exe), если нет получения к интернету. Причем как и все у микрософта, даже это ограничение сделано через задницу. По нажатию на иконку 20 секунд ничего не происходит. После чего вылезает плашка:
"Я не могу запустить это на этом устройстве. Чтобы запустить это, идите туда-то...".
Ту ран зыс он зыс, ран зыс. Господи, какие же беспросветные уроды!
Честно говоря, не знаю, как можно пользоваться операционкой, где даже блокнот не запустишь без приключений. Яблочные софт в последнее время тоже не сахар, но такого там нет: блокнот все еще открывается.
Кстати, недавно на работе была драма: люди обновили Edge и потеряли закладки, куки, историю. Взамен получили нулевый браузер с приветствием. Добро пожаловать в Edge!
Недаром Микрософт в последнее время называют Микрослопом. Все сходится. | 526 |
| 7 | Слушайте, ребят: уж если вы взялись набирать таблицы в маркдауне, то делайте не так:
| id | title | comment |
|---------|----------------|--------------------|
| 1 | some title one | a long comment one |
| 1001 | some | small commant |
| 5551312 | - | foo |
а вот так:
| id | title | comment |
|---------|----------------|--------------------|
| 1 | some title one | a long comment one |
| 1001 | some | small commant |
| 5551312 | - | foo |
Как я эту кашу буду читать на ревью?
В емаксе это делается ОДНОЙ клавишей — TAB. Для других редакторов ест ьплагины. Вы и так все сгенерили нейронкой, неужели нельзя хоть чуть-чуть причесать? | 447 |
| 8 | Глава 7. Отчеты, функции, расписание | 455 |
| 9 | Предположим, у нас следующий код:
x += 5
Если спросить программиста, как он устроен, то скорее всего, ответ будет таким: это то же самое, что
x = x + 5
Во-первых, это не верно, а во-вторых, такой ответ все равно ничего не объясняет.
Ошибка кроется в следующем. Если предположить, что x += 5 означает x = x + 5, то из этого можно сделать вывод: любое выражение <whatever> += 5 под капотом становится
<whatever> = <whatever> + 5
Представим теперь, что есть массив m, и нужно увеличить его элемент на пять. Индекс этого элемента дает функция f без параметров. Таким образом, я запишу:
m[f()] += 5
Если следовать ошибочному предположению выше, это выражение становится следующим:
m[f()] = m[f()] + 5
Видим, что функция f() вызывается дважды: сначала справа, чтобы посчитать значение, затем слева, чтобы присвоить его. Предположим теперь, функция f() возвращает индекс случайно: в первый раз 2, а во второй — 7. Итоговое выражение станет таким:
m[7] = m[2] + 5
что совершенно неправильно. Так что тезис о том, что x += 5 равносильно x = x + 5 — ошибочный.
Если рассмотреть выражение x = x + 5 внимательней, станет ясно: у символа x в зависимости от положения слева или справа равенства разная семантика. Справа он используется для того, чтобы получить значение, а справа — адрес, по которому нужно его записать.
В стандартах языков Си и Си++ для этого служат термины lvalue и rvalue, что переводится как "лево-" и "праводопустимые значения". Так, на месте lvalue (слева от равенства) может быть любое выражение, от которого можно взять адрес. У правого выражения требования другие, и взятие адреса не требуется. Именно поэтому запись x = 5 верная: от x можно взять адрес. По той же причине 5 = x не пройдет компиляцию: от литерала 5 взять адрес нельзя.
Даже если упростить выражение до предела и оставить x = x, у обоих иксов будет разная семантика. Тот, что слева означает адрес, а справа — значение.
Имея все это в виду, посмотрим, что происходит с выражением m[f()] += 5. Его левая часть вычисляется, чтобы получить адрес, куда позже поместится результат. Если бы мы написали просто x += 5, то адрес x вычислять не надо — компилятор уже его знает. Однако для m[f()] понадобится вычислить f() и за счет адресной арифметики получить конечный адрес.
Далее: значение по этому адрес помещается отдельный регистр для вычислений, например EAX. К этому регистру добавляется пятерка командой ADD EAX 5. После этого значение EAX перемещается в тот адрес, что был вычислен в левом выражении. Функция f(), таким образом, была вычислена один раз.
Вывод таков, что даже если выражение записывается кратко, оно занимает несколько (порой много) машинных команд. Может, кому-то это очевидно, но не мешает лишний раз проговорить. | 476 |
| 10 | Искренне интересно: кто эти люди, которые предпочитают открывать ссылки из терминала не в родном браузере, в неком плагине? Представьте себе: у человека установлен Хром, возможно, Фаерфокс, еще есть системные браузеры: Edge или Сафари. И человек такой: нет, это не подойдет, открою-ка я ссылку в ПЛАГИНЕ. И кто-то сидел, писал этот плагин, настраивал интеграцию, добавлял модальное окошко, чтобы при первом клике по ссылке спросить: родной браузер или плагин?
Апофеоз подобного дурдома поражает. Этот ваш браузер из плагина, где он хранит куки? Как долго? Как он настраивается? Очевидно же, что никак. Зачем писать барахло и засорять когда-то хорошую программу? Неужели все проблемы уже решили? Но самое интересное — тезис из начала заметки: что было в голове у тех, кто решил написать этот плагин? А также у тех, кто добавил эту функциональность в релиз. | 670 |
| 11 | Забыл написать: проект unix pass активно развивается, что подтверждается статистикой на картинке.
https://git.zx2c4.com/password-store/stats/?period=y&ofs=-1 | 597 |
| 12 | Вы, наверное, хотите узнать, как я перенес пароли из 1Password в pass? В интернете полно Питон-скриптов, которые обходят экспорт 1Password и вставляют куда надо. Но сказано же: "страданье принять". Я все сделал вручную. Примерно год я жил в режиме hit or miss: когда был нужен пароль, искал его в pass, и если не находил, переносил руками из 1Password. Со временем все нужное переехало в pass, а в старой системе остался хлам, который мне не нужен. У меня и сейчас установлен 1Password со старой базой, но я не открывал его уже много лет.
В этой статье я не буду описывать все детали установки. Предлагаю вам замечательный сайт-одностраничник, посвященный программа. Также есть достойная статья на Хабре "Знакомьтесь, pass", где все подробно описано (но к некоторым вещам я пришел сам). Если у вас будут вопросы, задавайте: я отвечу и дополню заметку. | 644 |
| 13 | Расскажу, как я храню пароли.
Когда-то давно я, как и все, пользовался 1Password. В те времена это была казуальная программка, легкая и незаменимая. Я купил ее долларов за 50, когда она была версии 4 или 5, и счастливо ей пользовался.
Как это часто бывает, программа прошла зенит своего удобства. Фирма, которая ей занималась, возомнила себя центром мира по безопасности. Штат раздули, программа все больше усложнялась, фирма вышла на корпоративный рынок… В какой-то момент 1Password развернул облачную инфраструктуру и ввел подписку. Вдобавок программу переписали на электрон и Node.js, так что еще одним процессом Хрома стало больше.
Я начал искать замену, нагуглил различные Bitwarden и аналоги. Программы хорошие, не спорю. Но вышло так, что мне, как Раскольнику, захотелось "страданье на душу принять". Другими словами, я выбрал самый сложный способ хранить пароли – утилиту Unix pass. Вообще-то программа называется просто pass, но к ней добавляют Unix, чтобы было понятно – та самая.
Программа pass – это попытка передать философию ранней эпохи Unix. Pass написана даже не Си, а на шелле. Это скрипт на шесть экранов, который ничего не делает сам, а только командует следующими утилитами:
• gpg для (де)шифрования файлов;
• git для истории хранения и репликации;
• редактором для ввода данных;
• pinentry для безопасной передачи пароля от GPG-ключа.
Просто же, да?
Хранилище паролей выглядит как обычный гит-репозиторий с деревом папок и файлов. Никакой жесткой структуры, все определят пользователь. Единица хранения – файл. В файле может быть что угодно, однако со временем устоялись следующие соглашения:
• первая строка файла содержит пароль;
• другие строки хранят пары поле: значение в качестве метаданных.
Пример файла с паролем:
1dAfs@#sh_t335
email: ivan@grishaev.me
username: igrishaev
url: https://some.site/login
Команда pass path/to/file дешифрует этот файл и выплюнет в консоль. Команда path path/to/file -c прочитает первую строку (пароль) и поместит в буфер обмена. Pass generate создает случайный пароль с разными параметрами (длина, алфавит), pass edit открывает редактор, чтобы изменить существующий файл и так далее. Команда pass git … совершает любое действие с репозиторием; чаще всего понадобится push и pull. Коммиты на каждое действие программа создает сама.
На маке вместо pinentry понадобится pinentry-mac – порт этой утилиты под яблочные устройства. Пропишите к ней путь в этом файлике:
# ~/.gnupg/gpg-agent.conf
pinentry-program /opt/homebrew/bin/pinentry-mac
Чтобы хранить все это добро, вам понадобится две пары ключей. Первая пара – публичный и закрытый ключи GPG. Вторая пара – SSH для репозитория. Дополнительно каждый приватный ключ должен быть зашифрован кодовым словом.
Все эти ключи следует распечатать на бумаге и хранить в разных местах: на работе и дома. Кодовые слова – в голове.
Поскольку unix pass – консольная утилита, для нее написана тьма графических оберток. Как и сам pass, выглядят они ужасно: поделки на C++, Tcl/Tk и прочее. В том числе есть плагины для Емакса и Вима. Попробовав пару оберток, я принял верное решение – предпочел консольную версию. Ее вполне достаточно.
Для Андроида написано несколько программ, для айфона – одна, которой я ей пользуюсь. Обновляется она примерно раз в пять лет; топорная, местами странная, но работает. Первичная настройка тяжела: нужно перетащить GPG- и SSH-ключи на телефон, а они, как вы помните, занимают лист А4. В идеале вы копируете ключ на яблочном ноуте и телефон подхватывает буфер обмена — конечно, при соблюдении с десятка условий.
Серьезный недостаток приложения в том, что оно не умеет решать конфликты Git. Если вы поправили файл одновременно на компе и телефоне, то при синхронизации программа скажет "конфликт", и все – даже нет кнопки "принять своё" или "принять чужое". Решается повторным скачиванием всего репозитория. | 535 |
| 14 | HugSQL vs HoneySQL | 711 |
| 15 | Через третьи руки я получил интересную ссылку: What ORMs have taught me: just learn SQL. Статья интересная и в целом повторяет все то, что я говорил на страницах своего блога. ORM – это игра, в которую невозможно выиграть. Она завязана на том противоречии, что продвинутые средства SQL в ORM недоступны. Если пользоваться только доступными средствами, то либо их недостаточно, либо возникает лишний код в приложении.
Хотя все это очевидно, находятся те, кто не верят. Однако не обязательно верить мне или автору – можно обратиться к нейтральным источникам, не заинтересованным в подтасовках.
Напомню, в Clojure есть два подхода работы с SQL. Первый – библиотека Hugsql с очень простым принципом. Вы пишете сырой SQL, который позже становится функцией Clojure. В эту функцию передают подключение и параметры, а внутри выполняется тот SQL, что вы написали. Он может быть сколь угодно сложным и относиться к какому угодно диалекту: библиотека просто передает его драйверу и возвращает результат.
Второй вариант – библиотека HoneySQL для построения SQL из данных. Это еще не ORM, но уже шаг в данном направлении. Например, передаешь в библиотеку словарь в вектором векторов словарей, и получается SQL. Болванку запроса легко строить по условиям или на базе каких-то других данных.
Так вот, интересен следующий факт. В библиотеке Hugsql последний коммит был два года назад и касался документации. Всего коммитов около 200. В отношении кода изменения были четыре-пять лет назад. Активных фаз у проекта всего две: в 2016 и 2022 годах, при этом число коммитов в это время измеряется десятками.
С HoneySQL ситуация другая: коммиты и релизы выходят постоянно. Всегод коммитов около 1400. Шон Корфилд (автор проекта) уже давно лет развивает HoneySQL, при этом динамика проекта противоположная: коммиты и релизы выходят все чаще. В Слаке регулярно приходит народ и просит добавить ту или иную фичу какого-то диалекта: хитрую агрегацию этой базы, приведение типа другой базы и так далее.
Доходит до того, что один диалект ворует возможности другого. Например, я использовал недокументированные возможности HoneySQL, чтобы строить JSON Path в Postgres, например, что-то вроде
where doc @@ '$.path.to.attribute == "some-value" '
В одном из релизов все отвалилось. Оказалось, к Шону пришел какой-то тип и сказал: давай сделаем пути JSON для SnowflakeDB. В этой самой Snowflake другие кавычки и разделители, которые не дружат с Postgres. Мои решения превратились в тыкву, и пришлось экстренно исправлять.
К чему это все: выразить SQL на языке, отличном от SQL, в целом невозможно. Проект HoneySQL это подтверждает: даже не смотря на активную разработку, найдутся такие потребности, которые нельзя выразить списком словарей – а если и можно, то это долго непонятно. У библиотеки Hugsql такой проблемы нет: пиши что считаешь нужным, она только передает запрос драйверу – то самое "just learn SQL" из заголовка статьи.
Конечно, для удобной работы нужны оба средства, однако важно понимать приоритеты. Чтобы выразить SQL в виде чего-то – ORM или DSL – нужно понимать SQL. При этом часто оказывается, что знания первого достаточно. | 649 |
| 16 | Шестая глава: Язык JSON Path
https://grishaev.me/pg-book-json-ch06/ | 832 |
| 17 | Уже писал: у ребят, подсевших на AI, со временем пропадает всякая эмпатия. Можете спорить, доказывать обратное, но я вижу все больше этому подтверждений.
Например, есть внутренняя система, которая уведомляет об ошибках. Сообщение об ошибке выглядит примерно так: "что-то сломалось". Никаких деталей, стектрейса, вообще ничего, за что можно зацепиться. Смотрю исходник – все эти данные есть, нужно их только показать.
Спрашиваю: ребят, ну вот получили вы фразу "что-то сломалось". Какие ваши действия? Ответ просто убил. Они копируют ее в форму на внутреннем сайте, а там агент или какая-то модель, я не разбираюсь. Агент сканирует те самые логи, которые были под рукой у скрипта и пишет, в чем ошибка.
Потрясающе, да? Все данные в контексте, но мы их не покажем. Сходи к агенту, и он криво-косо вытащит те же логи, что были у нас.
Никто не видит проблемы. Оказывается, поправить питон-скрипт сложнее, чем дергать агента, жечь токены и тупить в монитор.
Буквально в тот же день аналогичная проблема: плохо сделанная работа, ничего не понятно. Спрашиваю: как с этим работать? Разработчик шарит экран и показывает: вот у меня тут Клод, здесь такой агент, сякой агент и три плагина в редакторе. Вбиваю сообщение об ошибке, и агенты мне все подсказывают.
Рад за тебя! Но беда в том, что не у всех такой сетап. У меня лично нет клодов-агентов. Неужели в голову не пришла мысль, что нужно сделать удобно всем, а на расчитывать, что каждый полезет в AI?
И такого становится все больше: зачем делать работу хорошо, если всегда есть AI?
Подсевший на AI разработчик напоминает хорька в норе: главное, чтобы мне было удобно, а остальное неважно. Иногда от подобных ответов накатывает такое отчаяние, что хочется кататься по полу – а собеседник даже не понимает, что происходит. Ну и что, что соощение непонятно? Можно ведь спросить у агента, так что какая разница?
Это обескураживает. | 888 |
| 18 | how_to_deal_with_these_keyboard_marks_on_my_macbook_screen_v0_s59rqo0nawvc1.webp | 761 |
| 19 | how_can_i_get_rid_of_keyboard_marks_please_tell_me_screen_v0_kb3nqpun4tyf1.webp | 788 |
| 20 | how-to-prevent-keyboard-marks-on-macbooks-v0-j7rsfhzscn3e1.jpg | 787 |
