Я в интернете

РСС    Джейсон-фид

Есть автоматические трансляции в Тумблер и Же-же. Если не работает, напишите мне: ilyabirman@ilyabirman.ru.

Как я навайбкодил «Колокол Тарта» за 10 минут

Колокол Тарта я придумал сделать зимой в качестве первого эксперимента в вайб-кодинге. Сначала я создал новый пустой проект в Икскоде. Первую рабочую версию я получил минут за десять с «Кодексом» ЧатаГПТ, о чём рассказывал в подкасте.

Поскольку я вообще не понимаю, что к чему в структуре проекта Икскода, я решил начать с вопроса (на ответ мне оказалось наплевать), и дальше у меня были вот такие обращения к Кодексу со всеми опечатками как есть:

  1. This is a new project created in XCode. Explain to me its folder structure and files.
  1. How to add a system menu item for this app? I mean the right area menu area with icons. What is it called in Apple world? Where Wi-Fi, control center etc live?

Как видите, тут я ещё осторожничал и не решался просто сказать, мол, сделай — пытался сначала выяснить, как именно сделать. Он рассказал.

  1. Let’s add this to the actual code
  1. Now let’s remove the main window and Dock icon from this app. When the app runs, it add the bell status bar item, and the only option in the menu is Quit. There must be nothing else in this app so far.
  1. Why do we need if os(macOS)? This app is Mac only and is not intended to run on any other OS. Can we remove any meantion os other OSes from it?

Это я ещё читал код и пытался разобраться, что и зачем он пишет. В это время он ещё был совсем маленький, и его смысл было нетрудно понять.

  1. Now let’s add a menu item «Ring’ and a separator before Quit in our menu extra. When the “Ring” item is selected, the app should play some system sound that sounds like a bell

Тут стоит обратить внимание на то, как я последовательно строю функциональность по кирпичиками, а не пытаюсь запихать всё сразу. Это потому, что я именно так думаю, а не потому, что пытаюсь как-то переформулировать для нейросети. Я не смог бы сразу сформулировать всё цельно в один запрос.

  1. Now lets add another function. The app should ring the bell automatically every X seconds, where X varies between 3 and 30 (make it easily adjustable constants in code). So when the app launches, it sets lastBell to the current time, sets the first randomInterval, and starts a timer that fires every second. When the timer fires, the app checks if randomInterval has elapsed, and if yes, it plays the bell sound, remembers the current time as lastBell and comes up with a new randomInterval. So in the end it just plays the bell sound every now and then until I press quit.
  1. Add another menu item under Ring that shows how long ago was the previous ring in a human-readable form i.e. “Rang 5 seconds ago”, “Rang about an hour ago”. The wording should not be exactly like this. Just use any existing system formatters for relative time with minumum code.

Обратите внимание, что тут я по опыту предположил, что нейросеть может захотеть нагородить своего кода для генерации текстовых формулировок, и специально прошу её этого не делать. Нейросети ничего не стоит написать гору кода, а вот мне его читать неохота. Поэтому я прошу не писать тот код, который можно не пистаь. Кроме того, использование системого форматтера дальновиднее. Мало ли, захочу я локализовать программу на разные языки. Не буду же я писать генератор этого текста на всех языках? Это Эпл явно давно сделал за меня.

  1. When I build the app in XCode, where does the executable go? How to run the app without XCode?

Тот факт, что этот вопрос приходится задавать, говорит об Икскоде плохо.

После этого были разные другие доработки, но об этом как-нибудь в другой раз. Самым сложным было сделать аккуратный интерфейс настройки. Но главное, что задачу я решил за несколько реплик и всё реально заработало без проблем.

Подписаться на блог
Отправить
Мои книги