Panic! At the 0xC0D3
Open in Telegram
Пишу что-то про разработку
Show moreThe country is not specifiedThe category is not specified
205
Subscribers
No data24 hours
-17 days
-130 days
Posts Archive
I use arch btw
В годы бреинрота и клодов, казалось бы, терминал должен умирать, и заменяться красивыми гуишками. Но мне кажется (тут чистая спекуляция по вайбам 2х часов ночи), что в последнее время терминал наоборот приобрел популярности. И мне кажется, что немалая заслуга в этом у Go и Rust.
Потому что для меня использование терминальной утилиты 5 лет назад выглядело как "загуглить тулзу, открыть man pages, пострадать, пойти в стаковерфлоу, скопировать что там написали", в то время как сейчас я очень часто просто нахожу ответ из
--help. Потому что UX стал лучше.
Просто сравните аутпут pip install --help и uv pip install --help на скриншотах.
Мало того, часто он мне просто не нужен: потому что fdfind json просто работает, а find . -name "*.json" надо запомнить
А заслуга Go и Rust тут в том, что у обоих есть отличные и мощные библиотеки для парсинга аргументов, поддерживающие примерно одинаковый стиль, современные фичи типа цветов и автогенерации из кода. Помимо этого, я не один раз видел комментарии вида "я хотел написать gui, но попробовал ratatui (terminal ui библиотека на расте), и теперь это моя любимая библиотека!"
Людям нравится писать терминальные утилиты с помощью библиотек, которые упрощают скучную часть, и создают приятный UX из коробки. А сами языки не мешаются под ногами, и делают эти инструменты быстрыми (кхм кхм питон кхм)
Но все эти утилиты часто надо искать самому. И тут возвращаемся к арчу.
Для незнающих, арч это такой bare minimum линукс с приятным пакетным менеджером, в котором есть около все; поэтому когда вы ставите арч, у вас ничего нет, но все ставится одной командой.Потому что когда я написал
tree в терминал и мне выдало "не найдено", у меня промелькнула мысль в голове "ачевсмысле это не встроено в линукс?" и сразу следом "хмм а может быть поставить не самый дефолтный tree, а помоднее?". И теперь у меня есть alias tree=broot. А потом я задумался, а какие новомодные команды есть еще? И теперь у меня есть
alias vim=helix
alias find=fdfind
alias cat=bat
alias tree=broot
alias grep=ripgrep
alias ls=exa
alias tmux=zellij
И со временем для меня терминал перестал быть страданием и чтением man pages, а реально удобным инструментом, в котором я могу сделать вещи быстрее, чем тыкать кнопочки в gui. Забавно, что для того, чтобы получить нормальный UX, надо было чтобы не за меня все решали, а чтобы мне стало удобно решать самому.Зачем вам типы если вы их игнорируете
Я устал поэтому просто побугурчу
Сколько ворнингов/ошибок должен выдать такой код?
ууу сссука У вас вся информация в системе типов есть, почему нельзя быть как раст:
(у раста при этом эти переменные не constexpr даже!)
constexpr std::array<int64_t, 3> a{1, 2};
std::cout << a[3];
Тут будет 0 ошибок и ворнингов с -Wall -Wextra -Wpedantic
А если так?
constexpr int64_t a[3] = {1, 2};
std::cout << a[3];
Тут компилятор догадается, что a[3] это какая-то лажа, но вот что ты массив из 3х элементов двумя инициализируешь ему норм
let a: [u32; 3] = [1, 2];
dbg!(a[3]);
error[E0308]: mismatched types
--> <source>:2:23
|
2 | let a: [u32; 3] = [1, 2];
| -------- ^^^^^^ expected an array with a size of 3, found one with a size of 2
| | |
| | help: consider specifying the actual array length: 2
| expected due to this
error: this operation will panic at runtime
--> <source>:3:10
|
3 | dbg!(a[3]);
| ^^^^ index out of bounds: the length is 3 but the index is 3
|
= note: #[deny(unconditional_panic)] on by default
Ну даже если причины это легаси, почему ворнинг то показать нельзя аааа
Че бугуртить то
Для меня главный юзкейс типов это то, что код легко рефакторить. Ты чето поменял, у тебя компиляция упала везде, где сломалось
А тут мы видим, что если у тебя был код вида
constexpr std::array<int64_t, SOME_CONST> a{1, 2};
И ты поменял константу на +1, то плюсы сожрут и ничего не скажут.jj log
Тут больше всего подходит фраза "с большой силой приходит большая ответственность". В гите есть большой плюс - в простом воркфлоу ты работаешь с понятными тебе вещами - названиями веток. Коммит хэш ты используешь довольно редко, обычно, когда что-то сломалось.
В jj, log - это твоя самая популярная команда (в том числе потому что нет интеграций с ide), и самый большой вопрос в интерфейсе у меня к ней. Все команды ты делаешь с ревизиями, где ревизия - это либо коммит хэш, либо что-то на их языке запросов (например
@- - предыдущий коммит). И блин, я привык использовать человеческий текст а не случайный набор из 4х букв для хождения по репозиторию.
Т.е. если я хочу потестить другой эксперимент, мне нужно:
1. Открыть jj log
2. Найти в нем интересующую ревизию
3. Запомнить(!!!) четыре случайных буквы
4. Выполнить jj new abcd
А если я хочу сделать мердж, то нужно запомнить 2 набора из четырех букв. И вот тут уже "ux сделанный для людей" превращается в "ux сделанный для людей с хорошей памятью на рандомные наборы букв"
Имхо это главная вещь, с которой я бы попробовал что-то сделать (но я тоже слабо понимаю как)
Прежде чем эксперты jj (лол) начнут писать комментарии, стоит сказать:
1. jj пытается тебе помочь с коммит хешами - он показывает минимальный префикс, который тебе нужен чтобы указать на эту ревизию (например, по началу надо будет запоминать 1-2 буквы, но с ростом коммитов буковок становится больше...)
2. Справедливости ради, тут скорее jj открыл мне возможность свободно ходить по ревизиям, и в гите была бы +- такая же проблема - запоминать названия веток или тех же коммит хешей
3. В jj можно указать коммит по дескрипшену: jj new "description(some text)". И это в целом помогает (меня только бесит слишком длинное название функции)
4. В jj все еще можно так же юзать "ветки" (bookmarks). Но прикол в том, что в гите ты зафоршен юзать их, а в jj они опциональны, и поэтому естественно ты в какой-то момент забудешь тегнуть коммит букмарком, и из-за этого воркфлоу не супер стабильный
5. Есть jjui - интерактивная тулза, в которой запоминать нужно сильно меньше. Но у нее опять свои кнопочки и опять чему-то учиться и я пока не успел.
В итоге, я доволен. Потому что я не страдаю, а если и страдаю, то с понятными проблемами типа "блин я потерял старый коммит в большом логе", а не "епт какую тут команду вообще использовать". Но learning curve у jj я бы сказал довольно высокий. Порекомендовать я могу это только людям, которых бесит гит и они готовы потратить время на изучение новой тулзы. К сожалению, за 5 минут ты на нее не пересядешь.jj крута
Посидел я на
jj где-то месяц, и... это офигенно.
Сначала опишу мой основной юзкейс для VCS:
* Делать много изменений на основе базового коммита, свитчится между ними и сравнивать
* Делать "снепшоты" in-development версий - т.е. условная фича еще полностью не готова, но хочется какой-то стейт аля "оно хотя бы билдится" зафиксировать
* Делать "снепшоты" экспериментов - т.е. тут вообще любой стейт от "изменил константу в конфиге" до "переписал половину кода", на котором был запущен эксперимент, и хочется этот стейт сохранить на будущее
Т.е. у меня по большей части не обычный "гит воркфлоу", где делаешь фичу, мержишь, делаешь новую, а эдакий стейт "тещу 20 фичей какая заработает"
И jj для этого идеален
Почему:
* WORKING COPY IS A PART OF A COMMIT ХОСПАДЕ НИКАКИХ СТЕШЕЙ ВСЁ ВСЕГДА СОХРАНЕНО АААА
* Свитч между двумя версиями буквально jj new -r "version"
* Коммиты не привязаны к веткам, поэтому можно их откреплять и прикреплять к друг другу как тебе вздумается. Можно фикс из рандомного места засунуть в другое рандомное место
* Интеграция с гитом - это по сути deal breaker, т.к. переводить всех на jj нет ни желания, ни смысла
* Сделать снепшот это буквально jj duplicate - ВСЕ (это отличается от коммита, т.к. working copy остается в том же стейте)
Я скажу сразу, изначально было тяжело и не так радостно:
* Спустя месяц все концепты действительно становятся логичными и простыми, но по началу твой git brain отказывается собирать их в общую картинку, и в моменте возникает ощущение что ты заменил гит на другой гит - делаешь рандомные команды и надеешься, что будет хорошо
* Интеграций почти ни с чем нет. Очень рад был, что working copy diff все еще работает в ide, т.е. ты хотя бы в своем редакторе можешь нормально дифф твоего текущего коммита посмотреть
* Интерфейс хоть и понятный, но все еще терминальный, и все еще новый. Надо было привыкать и чутка выучить новый для меня "язык" для запросов по ревизиям
* Туториалы есть, но местами разбирали вообще не мои юзкейсы. Некоторые вещи приходилось самому понимать методом научного тыка
* jj log...(📽 Камера дрожит, кусты шевелятся, кто-то осторожно пробирается вперёд)
— Тсс... Смотрите, вон он. Прямо перед нами — редчайший экземпляр. Вайбкодер маниграбер, решивший... завайбкодить библиотеку для терминального UI на Rust.
— Он не использует реактивность. Вообще. Никаких состояний, никаких подписок, ничего живого. Просто... текст. Выплюнутый один раз и навсегда. Как надпись на камне.
*пример рисует кнопку "Click me" и завершает выполнение, не дождавшись действия от юзера*
— Это всё. Он считает, что UI — это просто вывод текста. Кажется, для него “интерфейс” заканчивается после println!.
*перелистывает LICENSE*
— А вот и лицензия. Своя, уникальная. Если ты начнёшь зарабатывать деньги с проектом, использующим эту библиотеку... ты должен платить ему. Серьёзно.
— Мы были здесь. Мы это видели. Никто не поверит.
this post was generated with chatgpt due to it being fucking hilarious
Available now! Telegram Research 2025 — the year's key insights 
