biozz.dev – Telegram
biozz.dev
87 subscribers
38 photos
88 links
Ищу простое в сложном.
Download Telegram
Маленький редактор и большие файлы

Несмотря на то, что NeoVim позиционируется как маленький и быстрый редактор, всё равно после добавления N плагинов на больших файлах или проектах появляются тормоза.

У меня два примера из практики:

- telescope и rg тормозили на Go проекте с большим vendor-ом
- treesitter медленно красит большие файлы

Проблему с rg получилось решить правильно настройкой .rgignore. И дело было, по сути, не в неовиме. https://biozz.dev/blog/neovim-telescope-lag/

А со второй я сталкиваюсь реже, но сейчас есть плагины, которые вырубают часть фичей, если файл большой:

- https://github.com/LunarVim/bigfile.nvim
- https://github.com/pteroctopus/faster.nvim

Или можно написать свою автокоманду, которая делает тоже самое:
local function disable_some_features()
    vim.cmd('TSBufDisable highlight')
    vim.opt.foldmethod = 'manual'
    vim.cmd('syntax off')
    vim.cmd('filetype off')
    vim.opt.undofile = false
    vim.opt.swapfile = false
    vim.opt.loadplugins = false
end

vim.api.nvim_create_autocmd({"BufReadPre", "FileReadPre"}, {
    pattern = "*",
    callback = function()
        local file_size = vim.fn.getfsize(vim.fn.expand("%"))
        if file_size > 512 * 1024 then
            disable_some_features()
        end
    end
})

Или вообще запускать NeoVim без плагинов, но я всегда забываю про это — nvim --clean.
👍2👾1
Need for Speed NeoVim. Переключение между файлами

Тру вимеры не пользуются вкладками и держат в голове список открытых буферов, переключаясь между ними через :bn, :ls, :b <n>.

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

Как обычно, первый — не париться и замапить TAB на следующий буфер, а S-TAB на предыдущий.

Дальше по уровню нативности — marks. Отметил несколько файлов, потом по ним прыгаешь. Я так и не пристрастился, даже с плагинами, которые делают сами ответки более визуальными, а список — красивым.

Потом пришёл Primagen и придумал Harpoon. А потом переписал его и сделал Harpoon 2. Суть одна — помечаешь файлы, потом хоткеями прыгаешь между ними. Получается как :bn и :bp, но только по отмеченным файлам. Don't worry about it © Primagen.

Кто-то не оценил гарпун и сделал свой вариант — arrow.nvim. А кто-то хотел ещё и красивый интерфейс. Так появились snipe.nvim и tide.nvim. Но олды помнят, что открытые буферы сбоку умел показывать neo-tree.

А вы чем пользуетесь?
👾2
Need for Speed NeoVim. Скорость запуска

Какое время запуска редактора приемлемо?

У меня уже где-то полгода вот так:


Startuptime: 75.59 ms
Plugins: 54 loaded / 69 installed


До этого примерно год не парился, когда было ~150 мс.

А время сократилось вдвое вот почему:

• убрал примерно ~30 плагинов
• добавил lazy loading ко многим оставшимся
• закопался в исходники некоторых плагинов

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

Интересно, что некоторые плагины перестают работать с переходом на lazy loading. И я уверен, что это чисто моя история. Например, nvim-lspconfig не может, да и зачем ему? Если пользуетесь lazy.nvim, то у вас такие варианты: event, cmd, ft, keys и магический lazy = true. Your mileage may vary ©, поэтому пробуйте.

Самый наглядный пример того, как оптимизировать время запуска плагина в исходниках — xkbswitch.nvim. Это плагин, который использует внешнюю утилиту для запоминания текущей раскладки, а потом переключает раскладку на английскую в normal режиме и обратно в последнюю выбранную в insert режиме. Утилита может "долго" (15-30 мс на моём М1 Pro 16 Gb) отрабатывать, так как при первом запуске пытается понять, какую конкретно утилиту использовать и получает из системы список доступных раскладок. По сути это и есть два изменения, которые я сделал — два новых параметра, которые можно указать в конфиге плагина, и небольшой рефакторинг, чтобы не сломалось старое поведение.

В общем, я считаю, что 70-100 мс для редактора — это приемлемо. А сколько нынче запускаются всякие там пайчармы, голэнды и вскоды?
The Everything App

AnyType в бете и такое чувство, что эта тулза сможет заменить мне Obsidian.

Где-то месяц назад я пробовал Outline, AFFiNE и другие альтернативы Notion, но в каждой не хватало dataview или какой-то мелкой фичи. Но ЭниТайп теперь умеет делать страницы, набор страниц, коллекцию наборов страниц, наборы коллекций наборов страниц, ну вы поняли. Может быть это качели в сторону «дать больше свободы» и к v1 они снова сделают что-то менее рекурсивное.

Весь контент шифруется и синкается между устройствами p2p. Но всё-таки импорт из моего Обсидиана пока что крашит ЭниТайп.

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

Они оупен-сорс, кста.
🤔1
Лепи медленно… Вари быстро 🥟
🗿3
У меня теперь модный эмоджи на канале, в который новости по RSS из Miniflux падают.
Кстати, если бы не подписки на всякие MyAnimeList и GitHub знакомых, то можно было бы и публичным этот канал сделать. 🤔
Please open Telegram to view this post
VIEW IN TELEGRAM
👾1
Разработка по SSH

В блоге моего сикретли любимого редактора Zed появилась статья про удалённую разработку —
https://zed.dev/blog/remote-development.

Похоже, что разработка по SSH сейчас де-факто в редакторах. И тут надо делить фичу на две: просто править файлики и запускать часть редактора на сервере.

NeoVim SSH-agnostic. Хотя и тут тоже были попытки сделать его похожим на VSCode с его devcontainers — https://github.com/amitds1997/remote-nvim.nvim. Про Emacs промолчу, не знаю ничего, но уверен, что там даже имплементация SSH есть на лиспе.

В VSCode уже давно из коробки и то и другое.

Для Sublime Text знаю только SFTP. Я даже в своё время покупал лицензию на этот плагин.

У JetBrains редактирование по SSH давно встроено, а с запуском на сервере настоящая шиза. Сначала был Projector, который стал JetBrains Gateway. Потом эксперименты с Fleet. Но в итоге всё какое-то костыльное и недоделанное. Хотя я знаю пару человек, кто норм живёт с проджектором.

Финальная форма разработки по SSH — это не использовать SSH напрямую, а подключаться к удалённому рабочему столу, и там уже использовать SSH (Xzibit расплывается в улыбке). Кстати, недавно наткнулся на селф-хостед утилиту, аналог TeamViewer — RustDesk.
Audio
Тизер выпуска Два Ивана №34

Только что отслушал выпуск 34 после обработки и так понравилось, что даже захотелось поделиться цитатками оттуда.

Вообще выпуск про пет-проджекты, но вот так нас снова закрутило с Ваней, что поговорили обо всём вокруг.

А релиз, думаю, уже в следующую пятницу. И дальше постараемся постабильнее выпускать. Там уже 4 выпуска записано.
🔥2
Пока, Островок!

Была давно статья про гуглера, который уволился и в цифрах описал весь свой путь. Статью не нашёл, зато сделал свои заметки про Островок:

• 2285 дней
• 6 месяцев бекендером
• 5 лет тимлидом
• 6 месяцев деврелом
• 2000+ созданных задачек, из них ~1700 закрытых (примерно)
• 3 офиса (включая удалёнку)
• 6 рабочих мест
• 3 руководителя
• 20+ человек в команде (в отдельные периоды, а так 10 большу часть времени)
• 57к+ сообщений в слаке
• 1 CEO
• 3 CTO
• 5 проектов с открытым исходным кодом
• 3 статьи на Хабре
• 8000+ коммитов в разные репозитории
• 4 ноутбука
• 5 внутренних хакатонов, как участник, в 2 победил
• 1 внешний хакатон помогал организовывать
• 2 внутренних разработческих ивента помогал организовывать

Есть ещё неподтверждённые чиселки, чисто из ощущений:

• поучаствовал в 200+ проектах (учитывая, что за последний год только около 50)
• провёл ~300 собесов (в 2023 точно 100, остальное округлил)
• нарисовал 200+ диаграм (170 только в Excalidraw с середины 2022 по 2024)

А вот на эти вопросы хотел бы получить ответы, но уже, наверное, никак:

• сколько проведено встреч по количеству?
• сколько часов проведено на встречах?
• сколько сделал релизов разных сервисов?
• какая общая сумма денежных потерь по инцидентам моей команды?

Может вам ещё что-то интересно было бы узнать?
👍7😢2
Audio
Пропеть ритм

Чтобы научиться выстукивать новый ритм на дарбуке, нужно его пропеть. Вот пример:


1---2---3---4---:
D-T---T-D---T---:


Этот ритм называется «максум» и звучит он как «дум-тэк тэк-дум тэк».

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

Когда начинаешь выходить на новые скорости и дробность ритмов, забываешь про эту технику. Врубаешь метроном на 100-120, пытаешься что-то сыграть. Получается так себе. Пробуешь спеть и понимаешь, что язык не успевает на таких скоростях. Приходится сидеть и доводить "песню" до осознанного состояния. А потом чудо — сыграть тоже получается!

Каждый раз удивляюсь, как это работает.
2
Тирлист терминалов для MacOS

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

Ответы на самые частые вопросы и комментарии:

- да, ghostty ещё не вышел, но это же МИТЧЕЛ ХАШИМОТО!
- нет, терминалы на ноде никогда не поднимутся выше D-tier
- потому что терминал, в который нужно логиниться, никогда не поднимается выше D-tier
- потому что даже дефолтный терминал на маке лучше, чем терминалы на ноде
Notes as code (NaC)

Я случайно обнаружил, что с помощью Zed могу задавать вопросы своим заметкам.

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

- код в Markdown
- fuzzy-автодоплнение для ссылок на файлы, тегов и других символов
- линтер для заполнения и обновления frontmatter при сохранении
- полнотекстовый поиск
- структура файлов и папок (по большей части PARA)

А если это фактически кодовая база, то почему бы не заюзать AI ассистента для кода, чтобы синтезировать новую информацию или идеи?

В Zed есть AI ассистент. В нём можно добавлять контексты. Есть контекст /file и, оказывается, в него можно подставлять не только файлы, но и папки с файлами рекурсивно.

На скрине то, как я добавил /file biozz_dev_tg, а Zed подставил контекст всех файликов из папки. Затем я спрашиваю о чём ещё написать.

Причём для обсидиана уже есть куча плагинов AI ассистентов. Мне же плагины не нужны и достаточно современного редактора кода, потому что живу в концепции Notes as code (NaC).
💅1
TIL. caffeinate

Сегодня узнал про встроенную утилиту на маке caffeinate которая не даёт компу засыпать. Полезная штука, так как другого способа ssh-иться на закрытый макбук я не нашёл.
Z1ON0101

Во второй части Матрицы (Перезагрузка) Тринити взламывает электростанцию и это то, как изображён процесс.

Здесь несколько интересных наблюдений:

- печально, что SSH висит на дефолтном порту
- примерно так и ищут открытые порты с помощью nmap
- прикольное название утилиты sshnuke
- SSHv1 CRC32 — это реальная уязвимость
- из логов утилиты непонятно, только ли эту уязвимость она проверяет, но выглядит именно так
- рут пароль Z1ON0101, 0101 — стилистическая деталь или отсылка к чему-то?

В любом случае, это одна из самых реалистичных сцен взлома в кино, которые я видел. Никаких свистелок и перделок с кучей летающего текста на экране.
2👍1
NeoVim и переключение раскладок

Вимерам тяжело жить с двумя раскладками клавиатуры. Когда переключаешь на русский, перестают работать маппинги, сделанные для английского.

Решений несколько:

• не париться и каждый раз переключаться при переходе из normal в insert и обратно (приемлемо, если переключаешь раскладки одной кнопкой, типа капслока)
set keymap=russian-jcukenwin, тогда русская раскладка будет немного отличаться от стандартной, зато маппинги работают
set langmap=ФИСВУАПРШОЛДЬТЩЗЙКЫЕГМЦЧНЯ;ABCDEFGHIJKLMNOPQRSTUVWXYZ,фисвуапршолдьтщзйкыегмцчня;abcdefghijklmnopqrstuvwxyz (наверное самый трушный вимерский способ, взято отсюда)
• автоматическое переключение на последнюю использованную раскладку с помощью lyokha/vim-xkbswitch и vovkasm/input-source-switcher или неовимовский вариант biozz/xkbswitch.nvim, который я форкнул и допилил, чтобы не тормозил на старте

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

А у вас есть какие-нибудь хаки для работы с несколькими раскладками?
Два Ивана №34 Пет-проджекты

Смена работы скушала много сил, но мы возвращаемся с новым выпуском. И ещё 3 выпуска сейчас в работе!

В этот раз поговорили про пет-проекты, как мы ищем идеи, подходим к разработке проектов и даже нагенерили новых идей.

Можете слушать нас на Mave, в Телеграм-плеере Мэйва и уже скоро-скоро на всех любимых платформах для подкастов.
2
Zed Extensions

Я как-то упустил, что для Zed уже можно делать свои расширения – https://zed.dev/docs/extensions.

А узнал про них из этого поста в блоге Zed про подстановку контекста для AI ассистента из разных источников — https://zed.dev/blog/mcp. В расширении уже используется недавно анонсированный протокол от Anthropic – https://www.anthropic.com/news/model-context-protocol.

Радует, как Zed и Anthropic задружились и качают теперь инструменты вместе.
Наконец-то миллениалы изобрели make на расте.
https://github.com/casey/just
А вообще я фанатею от другой разработки миллениалов — make на го.
https://taskfile.dev/
Одним словом, миллениалы — молодцы.
🔥1
Нам было мало таск-раннеров, поэтому вот ещё один — https://github.com/jdx/mise.
Этот может заменить ещё и asdf и direnv, что сильно привлекает.

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

Mac Mini M4 сейчас топ машинка за свои деньги. У меня этот мак станет новым домашним сервером. Прощай ThinkCentre!
👏2