Я в интернете

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

Есть автоматические трансляции в Тумблер и Же-же. Если не работает, напишите мне: 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?

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

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

Архив вакансий не может быть подразделом создания вакансии

Обсуждаем интерфейс по работе — сервис, где руководитель управляет вакансиями. В нём есть разделы «Вакансии», «Отклики», а также кнопка создания вакансии.

Дизайнер показывает страницу создания вакансии. В ней вкладки «Новая вакансия» и «Архив». В первой, понятно, форма, а во второй — список ранее опубликованных, но уже закрытых вакансий.

Я спрашиваю: почему архив находится вдруг на странице создания вакансий? Он же должен быть в разделе «Вакансии». Дизайнер объясняет, что частый сценарий — перепубликация ранее закрытых вакансий. То есть руководитель хочет создать вакансию, а мы ему удобно прямо под рукой даём архив, чтобы он мог старую вакансию перепубликовать.

Ну уж нет, это неудобно и непонятно. Даже если предположить, что такой сценарий частый и руководитель так хочет, в голове этого руководителя неоткуда взяться мысли, что архив вакансий будет поджидать его в форме создания. Он пойдёт искать вакансию в разделе «Вакансии».

В навигации должна быть логика, отражающая структуру продукта и связей сущностей внутри него, чтобы человек представлял, что где искать. А если мы хотим подсказать какой-то сценарий, то можно всегда предусмотреть кроссссылку (любимое слово). Например, в начале формы новой вакансии можно написать: «Чтобы повторить ранее опубликованную вакансию, вот вам в архив» — и ссылочку. Кликов столько же, зато всё понятно. А главное, если человек не прочитает это, он всё равно сможет всё найти.

Юридическая туфта на странице Айфона

Я зашёл на страницу Айфона и заметил, что юридическая туфта занимает половину её высоты:

Я считаю, что нужно внедрить новую правоприменительную практику, согласно которой весь этот текст не считается и не может быть использован в качестве доказательства или обоснования чего бы то ни было. Там ведь написаны какие-то слова, чтобы защититься в суде в случае чего? Ну вот суды должны будут проходить так:

Пользователь: Я купил Айфон, прочитав о нём на странице, но оказалось, что он работает иначе. Эпл ввёл меня в заблуждение.

Защитник Эпла: Однако на странице снизу под сноской 64 указано, что он работает иначе.

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

И всё. Пусть включают все свои уточнения в основное повествование или пишут так, чтобы двусмысленности не возникало.

Колокол Тарта для Мака

Держите мою программу-колокол для Мака, которую я сделал зимой.

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

Выпускать её официально по эпловским понятиям я пока не готов — это намного сложнее, чем делать программы. Так что инструкция по установке такая: скачать (в комментариях), распаковать, перенести в /Applications, по правой кнопке Open и подтвердить, что доверяете мне. На последних версиях Макоса может потребоваться ещё и зайти в System Settings → Privacy & Security, и там нажать Open Anyway.

Не мешайте детям хотеть

Что-то тема хотения в эпоху ИИ меня не отпускает. Я подумал, что над людьми, которые явно выражают собственные желания, иногда посмеиваются в духе «хотеть не вредно», «много хочешь — мало получишь» и прочее «хотелка отвалится». Особенно часто это встречается в разговорах не очень хороших родителей с детьми. Ну и исторически можно было понять такой подход, ведь большинство людей были полезны способностью исполнять чужие желания. Но всё вот-вот перевернётся. Не мешайте детям хотеть, ведь это единственное, чем они будут полезны в будущем.

Ну, наверное.

См. также:

Думаем дальше № 65 — «Никто не пользуется стеклянными сферами» с Никитой Прокоповым

С Никитой Прокоповым обсуждаем ВВДЦ 2026 и дизайн программ для ЭВМ.

Все выпуски подкаста:
Эпл · Ютюб · Я.Музыка · Спотифай · Мейв · РСС для подкастного приложения

0:00 Какой сигнал мы получили на ВВДЦ 2026 и чего ждём через год
4:38 Предзаписанные и живые презентации
6:26 Полировка и скучающие журналисты
11:08 Золотые ворота: иконки в меню и в Доке
17:33 Скругления углов окон. Историческая справка
26:27 Выбеление интерфейса, возвращение тулбаров и наведение резкости
32:52 Мнение Никиты о прозрачности в интерфейсе и теория Ильи о прозрачности в реальной жизни
40:03 Двигунок жидкости стекла
44:38 Пружинистые кнопки
48:25 Тулбары и группы кнопок на них
51:49 Синхронизация фоток
54:45 Всё не так тормозит, но зачем оно вообще тормозит?
1:06:54 Ощущение качества и надёжности от софта
1:10:32 Каким должен быть редизайн и путь к эталонному решению
1:15:34 Красота и привлекательность интерфейса. Ортопедический дизайн
1:17:56 Все хотят оторвать боковые панели, а зря

Теорема о тормозах

Поговорим о ситуациях, когда компьютер тормозит.

Под тормозами понимается медлительность, мешающая свободному взаимодействию и тем самым вызывающая фрустрацию и раздражение. Если компьютер скачивает пять гигабайт данных, компилирует сложный проект или рендерит видео, это занимает ощутимое время, но это не тормоза: мы дали компьютеру задачу, и он работает, выполняет. Теперь допустим, что видео рендерилось час, потом отобразился статус «Завершено», а через секунду готовый файл отобразился на рабочем столе. Первый час компьютер не тормозил, но следующую секунду — тормозил.

Теорема: все тормоза являются ошибками и исправимы.

Технически даже своевременное отображение статуса или реакции не действие пользователя — это такая же «работа», как и рендеринг видео. Однако такая работа должна быть выполнена за время, которое человек не способен ощутить. Будем называть это «мгновенно».

Примеры тормозов в современно софте:

  • при запуске программы нельзя сразу же начать ей пользоваться, а нужно ждать загрузки;
  • после загрузки часть интерфейса дорисовывается на глазах у пользователя;
  • при нажатии на кнопку нет мгновенной реакции;
  • при вводе с клавиатуры символы появляются не мгновенно;
  • при прокрутке страница едет не плавно или с отставанием от пользователя;
  • при прокрутке часть содержимого догружается на глазах у пользователя, а не приезжает уже готовым из-за края окна;
  • при изменении размеров окна разные части интерфейса перерисовываются на глазах у пользователя с разной скоростью или в несколько «прыжков»;
  • при перетаскивании объекта программа понимает, что может «принять» его, не мгновенно;
  • после открытия меню, на глазах у пользователя в нём добавляются пункты или меняется их порядок;
  • разные части интерфейса реагируют на действия пользователя через разное время.

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

Если программа тормозит, это лишь значит, что в тот момент, когда она должна мгновенно отобразить данные или отреагировать на действие пользователя, она занята чем-то другим. Это что-то другое — ненужная в данный момент, лишняя работа. Это ошибка в программе, и она должна быть исправлена. Лишняя работа должна перестать делаться и мешать пользователю пользоваться компьютером.

Таким образом, тормоза нельзя списать на слабое железо; это слабость исключительно её автора.

ИИ, хотение и Джон Голт

Ещё в продолжение мысли о том, что важно чего-то хотеть — вспомнил про Джона Голта, у которого государство в конце начинает спрашивать, что же теперь делать, а он отказывается отвечать.

Вот есть всемогущее государство, которое может заставить любого человека, в том числе Джона Голта, делать что угодно. Но государство дозаставлялось до того, что всё развалилось. От Голта оно уже не хочет подчинения; государство хочет, чтобы он сам начал командовать. И Голт отказывается.

Это точно такая же ситуация, как у нас будет с ИИ. Все, кто сам ничего не хочет делать, будут в той же беспомощной роли, в которой оказалось государство: у тебя вообще все ресурсы, но от них никакой пользы. Польза есть только от свободных людей, которые знают, что хотят.

В эпоху ИИ самое важное — чего-то хотеть

Все обсуждают, кого заменит ИИ, какие специалисты станут ненужными.

Кажется, в перспективе все специалисты станут ненужными, потому что все знания человечества буду доступны любому человеку. Единственное, чем уникален человек — это то, что он чего-то необъяснимо хочет. Я уже писал, что если вы в основном делаете то, что хотят другие, то вам стоит бояться нейросетей.

Кто-то настолько привык действовать по команде, что даже не знает, чего хочет сам. Некоторые обнаруживают это у психотерапевта. Так вот, кажется, наступает то время, когда разобраться в себе становится карьерным советом. Если в вас нет очевидного постоянного собственного желания, то стоит начать его искать, чтобы остаться востребованным.

Ранее Ctrl + ↓