Як всрати жовтень, або 20+к рядків коду заради ⌘C і ⌘V

Здається, за цей жовтень я разів із десять чув від штучкі-інтєлєкт та Codex, що моя програма нарешті готова(врунішка).

Спочатку програмулінка була готова до першого запуску. Потім до реального використання. Потім до коміту, до релізу, до контрольованого тестування, знову до коміту, і ще там до чогось. Кожного клятого разу я отримував красівий довжелезний звіт із переліком реалізованих функцій, виправлених багів та успішних перевірок. А потім відкривав програму, пробував щось зробити, знаходив, що чергова вже начебто готова функція працює криво, і знову відправляв Codex усе це виправляти, і хере ві го егеін.

І так майже три тижні.

26 жовтня я отримав черговий звіт, у якому вже фігурували 807 успішних тестів, 19 перевірених статей, 24 пробні формування дописів для Buffer і статус READY FOR CONTROLLED LIVE TEST. Тобто після майже трьох тижнів дурмної роботи ми знову були готові. Цього разу — до контрольованого тестування того, чи зможе програма нарешті робити те, заради чого я її створював.

І от сиджу я красівий перед цим звітом, відкриваю програму, пробую зробити задумане і вуаля(див. гіф вище). Десь тут нарешті думаю своєю мудрою головою: а нахіба мені взагалі все це?

Бо програма, над якою я вовтузився майже весь жовтень, мала допомагати мені переносити цікаві шматочки власних статей у соцмережі. Відкрити блог, знайти абзац, скопіювати, вставити в Buffer, запланувати публікацію.

Хвилин п’ять роботи, може, десять, якщо залипнути на перечитуванні давнішніх приколів про які я вже й забув.

Але ж ми живемо в прекрасну епоху штучного інтелекту, коли можна автоматизувати майже будь-що. Тому я вирішив автоматизувати копіпаст.

І, чорд, як же далеко я провалився в цю кролічью нору (на гіфкі тупо я з кожною новою спробою).

А як все ж красіво і багатобіцяюче починалося

У мене є блог «Галерея21»(несподівано, ми ж зараз не в цьому блогі, да?), де за кілька років назбиралося чимало текстів: есеї, різні цікаві знахідки, 30+ випусків “Куда я жмав”, якісь мої дрібні спостереження, переклади, книжки, кіно, інтернети й усіляке інше, що мені захотілося колись записати.

Частина цих матеріалів давно загубилася десь в архіві, хоча там досі є купа цікавого, що можна було б повторно використати. Ну типу витягнути якийсь прикольний абзац, думку чи спостереження й запостити в Threads, X або ще кудись, де люди не дуже люблять читати довгі тексти, а от пару абзаців — залюбки.

От тільки треба було ще розібратися, як нормально публікувати все це на різних платформах.

І тут мені прийшла в голову брілліант ідея: а що як зробити невеличку програму, яка сама переглядатиме архів, знаходитиме цікаві фрагменти, пропонуватиме варіанти дописів, а мені залишиться тільки обрати, за потреби щось підправити й відправити все це діло в Buffer?

До речі, про Buffer варто розповісти окремо, бо до всієї цієї історії я про нього навіть не знав. Як почав розбиратися, як мені взагалі організувати публікації для «Галереї21» в різних соцмережах, запитав поради в ChatGPT. Серед запропонованих варіантів був Buffer(зараз не реклама) — готовий сервіс, у якому можна підключити кілька соцмереж, підготувати дописи, поставити їх у чергу й запланувати публікації.

Загалом саме те, що мені було потрібно. Не треба писати власний планувальник, розбиратися з API кожної соцмережі, думати, як і коли публікувати дописи. Цим уже займається Buffer. Навіть безкоштовного тарифу з трьома каналами цілком достатньо для моїх цілей.

І власне тут можна було б зупинитися і жити собі щасливо.

Ну а далі ви вже приблизно розумієте, до чого був сіджей на початку.

Але я б був не я, якби мені не захотілося автоматизувати ще й підготовку цих дописів. Бо якщо вже є сервіс, який публікує, то чому б не зробити програму, яка сама знаходитиме, що саме публікувати?

Загалом ІДЕЯ мені сподобалася ще й тому, що не хотілося робити якусь контент-ферму, де ШІ цілодобово генерує пости заради постів(слоп харам, не нада так робить). Навпаки, у мене ж вже є написані тексти, якими я загалом задоволений. Треба було лише навчити машину знаходити в них цікаве.

Ну й з розвитком Codex та інших ШІ-інструментів програмування стало настільки доступним, що навіть не обов’язково вміти самостійно написати все, що тобі хочеться зробити. Достатньо пояснити штучкі-інтєлєкт, чого ти хочеш, а далі вже питання часу, терпіння та кількості повідомлень із проханням виправити чергову геніальність.

Тож 8 жовтня 2026 року я створив репозиторій gallery21-social і почав будувати свого маленького чудо-гноміка.

Хотілося, щоб усе працювало локально на моєму Mac, без окремих серверів, додаткових підписок та іншої інфраструктури. Комп’ютер заснув — ну й нехай спить. Прокинувся — продовжимо.

Здавалося, нічого надзвичайного.(ох, світ саммер чайлд)

Спочатку ми навчили програму завантажувати статті з WordPress і шукати в них цікаві фрагменти. У першій версії вона проіндексувала 187 статей, розбивши їх на 2155 секцій. Потім виявилося, що деякі окремі знахідки неправильно зливаються в один великий шматок, тож ми переробили алгоритм і отримали вже 2380 актуальних секцій.

Далі додали генерацію дописів для Threads і X. Потім Instagram. Потім редактор постів, щоб можна було правити результати. Потім збереження чернеток, схвалення, історію змін, інтеграцію з Buffer, перевірку посилань, роботу із зображеннями.

А ще я захотів, щоб уже використані фрагменти підсвічувалися сірим, щоб не доводилося постійно скролити сторінку до кнопок, щоб усе нормально вміщувалося на екрані MacBook, щоб були зручні прев’ю, лічильники символів і можливість відновити результат, якщо десь щось зламалося.

image

Зробили.

Я хотів, щоб програма дозволяла відкрити статтю, отримати хороші пропозиції для кількох соцмереж, за потреби відредагувати їх і передати в Buffer. Бажано без потреби щоразу розбиратися, на якому етапі процесу щось зламалося.

Але зручного наскрізного процесу все не виходило.

Спочатку були окремі екрани для вибору матеріалів, генерації, перегляду результатів, схвалення та публікації. Потім усе це об’єднували в один інтерфейс. Потім доводилося виправляти навігацію, бо було незрозуміло, де знайти вже створену чернетку або як повернутися до попередньої роботи.

Потім виявилося, що після передавання допису в Buffer він усе ще висить серед активних задач, ніби його нікуди не відправляли. Або що кілька різних підготовок виглядають однаково й незрозуміло, яка з них яка. Або що після помилки програма не дозволяє нормально відновити вже оплачений результат.

І кожного разу це була не якась фантастична нова функція, яку мені раптом захотілося додати. Я просто намагався користуватися програмою й натикався на речі, які заважали виконати основну задачу. Я ж просто хотів, щоб вона нарешті нормально працювала.

Проблема в тому, що кожне наступне виправлення обростало новими перевірками, станами, налаштуваннями й механізмами відновлення. Так із невеличкого помічника поступово виросла повноцінна локальна редакційна система з вебінтерфейсом, власною базою даних, історією редакцій, контролем витрат, окремими станами публікацій і купою інших речей. У якийсь момент у базі було вже 55 таблиць, включно зі службовими, а з архіву сформувалися понад три тисячі підготовчих записів із потенційними матеріалами для дописів.

Ну нормально так упоровся в оверінженірінг для копіпасту.

І найбісячіше, що зі збільшенням кількості ітерацій і реалізованих функцій я не відчував, що до нормального використання залишається дедалі менше роботи. Навпаки, кожен наступний звіт обіцяв, що тепер усе виправлено, а наступна спроба показувала, що попереду ще один раунд.

Тож я не дуже помічав, що замість роботи над «Галереєю21» дедалі більше часу займаюся розробкою дурмного інструмента для роботи над «Галереєю21».

І все б нічого, але але дописи виходять якісь такі собі

Коли дійшло до реальних текстів, виявилося, що це трошки складніше, ніж просто попросити ШІ вибрати щось цікаве.

Спочатку програма мала читати статтю й пропонувати готові адаптації для різних соцмереж. Іноді виходило справді непогано, але часто ШІ губив контекст, вирізав важливі уточнення, змішував кілька думок або переписував усе в такий впізнаваний аі-слоп. Знаєте ці мощні дописи, де абсолютно будь-яка думка перетворюється на велике відкриття, за яким неодмінно має стояти якась глибока мудрість? От виходило приблизно таке (такий собі лінкедін стайл з “я покакав і от чого мене це навчило в запуску b2b saas ai платформ”).

Но блін, це ж не те, шо я хтів. Я просто хотів використовувати свої тексти, які вже написав так, як хотів. Нащо їх переписувати?

Тож міняємо підхід. Нехай ШІ нічого не вигадує, а тільки вибирає цікаві фрагменти з оригінальних статей. Програма сама збере їх у допис, зберігаючи мої формулювання.

Штош, все звучить логічно і красіво (на піксельному папері).

Але й тут сіджей. Якщо передавати моделі всю статтю — багато тексту, зайві токени, зайві витрати, алібідерчі ліміти. Якщо передавати тільки невеликий шматок — модель не викупає, про що йдеться, і вибирає речення, яке саме по собі ніби норм, але без попередніх трьох абзаців в молоко.

Це була вже чергова суттєва переробка. А я й далі весь цей час продовжував отримувати красіві звіти про успішну реалізацію, виправлені помилки та готовність до наступного етапу.

Генеральне прибирання

Паралельно з усією цією красою з мільярдом переробок це падло ще й забило мені наглухо всю доступну памʼять на маку настільки, що він почав тупити як отой перший ноут який купуєш в універ і де програма відкривається зі шворки і хвилинним підвисанням.

Виявилося, що після всіх цих запусків, перевірок і нескінченних виправлень залишалася купа тимчасового сміття: кеші, тестові бази даних, скриншоти, зображення, журнали роботи й ще бог зна що. Я попросив Codex із цим розібратися, бо мені хотілося, щоб програма не тільки працювала, а ще й не перетворювала мій Mac на цеглину.

Тому замість того, щоб нарешті зайнятися дописами, я поставив Codex ще одну повноцінну задачу: розібратися, звідки все це береться, навчити програму прибирати за собою після запусків і тестів, не накопичувати зайвого, відновлюватися після перерваних процесів і, головне, не чіпати нічого, що не належить самому проєкту.

Після цього я отримав окрему реалізацію для прибирання та черговий звіт із перевірками. Тобто тепер у мене з’явився цілий шмат програмного забезпечення, потрібний для того, щоб прибирати наслідки розробки іншого програмного забезпечення.

І Codex знову повідомив, що все готово.

Власне, саме тоді я вже почав потроху підозрювати, що займаюся якоюсь фігньою.

Скільки коштують п’ять хвилин?

26 жовтня я отримав черговий фінальний фінальний ну вже зовсім ну прям зовсім фінальний звіт. За 19 календарних днів у GitHub назбиралося 27 комітів, 22 оформлені задачі й понад 25 тисяч доданих рядків коду, тестів та документації. І це ще без останніх локальних переробок, які я навіть не встиг запушити.

А програма тим часом знову була готова до контрольованого тестування.

І тут врешті вирішив прикинути і порахувати, скільки часу вона взагалі мала б мені економити.

За моїми прикидками, на всю цю розробку я витратив близько 40 годин власного часу. Припустимо, що автоматизація ідеально працює й економить мені п’ять хвилин на кожній публікації. Тоді, щоб просто повернути ці 40 годин, мені треба опублікувати 480 дописів.

Якщо публікувати по три на тиждень, це трохи більше трьох років. І це за умови, що програма більше ніколи не зламається, не потребуватиме виправлень, а я взагалі не витрачатиму часу на перевірку її результатів.

ЛОЛ!(великими літерами)

Тутки мені нарешті дійшло, що я можу просто відкрити власну статтю, знайти абзац, який мені подобається, скопіювати його й вставити в Buffer. За потреби трошки відредагувати, додати посилання, вибрати дату публікації — і все.

До того ж я, швидше за все, зроблю це якісніше, бо сам знаю, чому мені подобається конкретний шматок тексту. А якщо захочеться допомоги ШІ, то завжди можна просто закинути статтю в штучку-інтєлєкт.

Виходить, що за 40 всраних годин, майже три тижні й усі ці приколи з тягни толкай я отримав програму, яка мала економити мені п’ять хвилин копіпасту.

Причому ця програмка-гномік так і не навчилася стабільно економити обіцяний час.

А шо тепер?

Я правда не думаю, що сама ідея зробити такий інструмент була поганою. Мені й досі здається цікавою можливість автоматично знаходити в архіві хороші уривки, які можна повторно використати. І починати працювати з Codex було справді цікаво — усе-таки можливість придумати програму, описати, як вона має працювати, і досить швидко отримати реалізацію ще донедавна здавалася чимось доволі фантастичним.

Я не планував витрачати три тижні на виправлення помилок, переробки інтерфейсу й перевірку всіх можливих сценаріїв. Не хотів нескінченно вигадувати нові функції. Хотів один раз довести програму до нормального стану, почати нею користуватися й повернутися до того, що справді люблю, до писанини своїх текстів.

І щоразу, коли Codex повідомляв, що все готово, мені здавалося, що ну от же вже готово. А потім я запускав програму, натрапляв на чергову проблему й знову писав задачу на виправлення.

Тож я вчергове повертав задачі на переробку, бо хотів отримати той результат, заради якого все починав.

І з кожною ітерацією в програму було вкладено ще більше часу. У якийсь момент стало психологічно складно навіть подумати про те, щоб просто відмовитися від неї. Бо ж стільки вже зроблено, усе майже працює, треба тільки ще трохи виправити — і нарешті можна буде користуватися.

От тільки це «ще трохи» повторювалося знову й знову.(прівєт сіджей, сам тут отдихаєш?)

І от зараз у мене є репозиторій із купою коду, документацією, базою даних, історією нескінченних виправлень і сотнями автоматизованих тестів. Ціла програмка-гномік, яку я намагався довести до нормального стану майже три тижні.

І знаєте що? Після публікації цього тексту я все це просто видалю і забуду як поганий сон.

Не залишу на потім, не відкладу до кращих часів, не спробую ще раз допиляти, бо «там же зовсім трошки залишилося». Досить. Я вже витратив на це близько 40 годин свого життя й не хочу витрачати ще стільки ж, щоб нарешті почати економити по п’ять хвилин.

Фенсі конєшно, що готовий інструмент для публікацій мені на самому початку порадив той самий ChatGPT. Buffer як працював, так і працює. І далі буду просто ним користуватися!

Такшо красіво підсумовуємо красівою англійською фразою, яка красіво це все закриває:

We don’t owe the system continued development just because we’ve already invested so much in it.

🟠 Донат? Донат!

Доки ми тут, то принагідно нагадую, що задонатити це не тільки чудова ідея, що береже сон, покращує травлення і робить волосся блискучим, а ще й наш обовʼязок, бо в нас є тільки ми.

Ну, а вдруг ти вже задонатив, то завжди можеш закинути кілька грибнів на підтримку проекту


Відкрийте більше з gallery21

Підпишіться, щоб отримувати найсвіжіші записи на вашу електронну пошту.

Залишити відповідь