ch
Feedback
Panic! At the 0xC0D3

Panic! At the 0xC0D3

前往频道在 Telegram

Пишу что-то про разработку

显示更多
未指定国家未指定类别
205
订阅者
无数据24 小时
-17
-130
帖子存档
photo content
+1

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 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х элементов двумя инициализируешь ему норм ууу сссука У вас вся информация в системе типов есть, почему нельзя быть как раст: (у раста при этом эти переменные не constexpr даже!)
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