Стендап Сьогодні 📢 Канал в Telegram @stendap_sogodni

🤖🚫 AI-free content. This post is 100% written by a human, as is everything on my blog. Enjoy!

Пости з тегом #Інструменти

21.01.2025

Tabby - доповнення коду на основі LLM, але локально

…Я вже багато років користуюся Tab9 для доповнення коду. В мене вимоги прості: хочу закінчення рядків. А ні, ще одна вимога: я хочу, щоб модель працювала локально. На жаль, як буває з багатьма продуктами, TabNine пішов в бік хмари та корпоративних клієнтів.Та локальне доповнення хоч і працює, але без кінця просить залогуватись кудись… в той час, коли в мене “дідівська” ліцензія ще з тої пори, коли ніяких облікових записів не було.

Отже, нещодавно натрапив на Tabby. Це обгортка для запуску великих мовних моделей та інтеграції в редактор (в моєму випадку - VSCode.) Хороша — можна запускати не тільки локально, а й будь-де, налаштувати декілька користувачів та обирати ту модель, яку заманеться. Рекомендую, якщо вам таке цікаво.

Про практичний бік. Звісно, доведеться обрати модель (а точніше, її розмір — кількість параметрів), на яку вистачить памʼяті та обчислювальних потужностей. У Tabby є топ моделей, щоб далеко не ходити.

На M2 Macbook Air навіть 1B-моделі відпрацьовують дуже повільно, більше ніж десять секунд. Замислився — а як же ж тоді TabNine? Виявилося, що ті використовують 400M-моделі, але наче по моделі на кожну мову програмування. Та TabNine був швидким навіть на макбуці з 2015-го.

Але в мене були інші плани: поки я працюю, стоїть без діла ігровий компʼютер — чом би його не долучити? З Tabby це надзвичайно просто — вся різниця буде в адресі сервера. В мене наразі в наявності NVIDIA 4060M; на ній 1B-модель відпрацьовує в межах секунди, а 3B-модель десь трьох. Більше немає сенсу дивитися, бо 3 секунди вже занадто для моїх потреб — якщо доповнення не миттєве, швидше самому написати. Здивувало, що для цієї потреби я упираюся не в памʼять, а в обчислювальні потужності.

Ось такі поки результати.


23.01.2025

Комбінації клавіш під себе на macOS

Дійшов висновку, що коригування комбінацій клавіш повинно бути звичкою. Причому такою, що не потребує зусиль. Так само як скорочення в терміналі — система повинна робити часті дії простими. Зокрема, мені важливо, щоб в різних застосунках комбінації були однакові.

Наприклад. Коли працюю з проєктами для iOS, а редагую в VSCode, то в мене є три вікна: VSCode, XCode, та симулятор. Щоб запустити збірку, доводиться переходити в XCode та натискати Cmd+R. Особливою образою є те, що в симуляторі Cmd+R починає записувати відео, що мені ніколи не було потрібно.

Ну то й що? Зробив за допомогою BetterTouchTool, щоб як в симуляторі, так і у VSCode - якщо назва вікна містить назву мого проєкту — комбінація Cmd+R перемикалася б спочатку на вікно XCode. Тепер більше не потрібно думати, в якому з вікон я знаходжуся. Якщо піти далі, для вебпроєкту Cmd+R може так само перемикати на вікно браузера, або запускати тести.

Або інший приклад - Cmd+P/Cmd+Shift+P для навігації по файлах та командах, до якої звик ще з Sublime Text. Тут допомагає Paletro та локальні налаштування застосунків. (Бо інакше Cmd+P зазвичай починає друк — майже атавістичну нині операцію.)

BetterTouchTool зручний тим, що відразу працює в контексті конкретного застосунку, а більшість комбінацій як раз не є глобальними. Та й можливістю задати складу поведінку. А ще в macOS можна дуже багато всього призначити стандартними засобами, в Settings -> Keyboard -> Keyboard shortcuts.


26.01.2025

SearXNG - локальний метарушій для пошуку в інтернеті

Встановив собі сьогодні SearXNG. Це такий вебзастосунок, який збирає результати пошуку з всіляких рушіїв та показує в типовому інтерфейсі. Щось на кшталт DuckDuckGo чи Kagi, тільки відкрите. Ось, при написанні цього поста тільки ним та й користувався.

В нього є готовий до використання образ Docker та ніяких обовʼязкових залежностей, тож випробувати дуже легко. Можна встановити його на сервер (та і є багато публічних серверів), але мене цікавив саме локальний запуск — так я більше впевнений, що його не заблокують. Ресурсів витрачає небагато (600 Мб памʼяті.) Відпрацьовує в межах пари секунд.

Мені, головним чином, потрібні налаштування пошуку під себе. В SearXNG можна: обирати набір рушіїв за замовчуванням та підіймати чи опускати домени у видачі.

Можна й створювати власні рушії; як повноцінно на Python, так і через конфігурацію (ось, спробував зробити для Прому). Що відрізняє SearXNG від того ж DDG - вибір рушія з !prom видає результати в інтерфейсі SearXNG, а для переходу безпосередньо на пошук на сайті потрібно писати !!prom.

А ще, теоретично, із запуском локально можна зробити рушій, який буде шукати в моїй базі Obsidian, та частково закрити питання згадування минулих досліджень - тобто щоб результати з Obsidian зʼявлялися прямо на сторінці пошуку.


27.01.2025

Віддалений Docker (та ще й на Windows)

Для продовження моїх експериментів з нейронними мережами доведеться запускати багато всього на компʼютері з Windows. Згадав, що в Docker є “віддалений контекст” роботи, та розібрався з ним.

В мене так склалося, що Docker або на локальній машині, або десь в хмарі прихований за абстракцією. Ну або як мінімум десь на віддаленій машині, куди я заходжу по SSH. А віддалений контекст — то коли локальна команда docker керує рушієм, що запущений на іншій машині.

Якщо нічого не боятися, то можна просто відкрити підключення до Docker мережею. Але в такого рішення немає ніякої авторизації взагалі. Для автентифікації можна нагенерувати сертифікатів TLS. Проте то нудно.

Найпростішим буде тунелювати до Docker через SSH. У Windows є сервер OpenSSH - як додатковий компонент, який потрібно встановити, а потім увімкнути його сервіс. Далі можна підʼєднуватися до компʼютера за паролем — або додати SSH-ключ - майже як вдома!

Вдома, але не зовсім… З оболонкою Windows не хочеться мати справи. На щастя, для віддаленого контексту Docker це не перешкода, та працює він чудово. Спочатку створюємо конфігурацію командою docker context create, обираємо командою docker context use, та всі команди Docker будуть передані із локального середовища на виконання віддаленій машині. Для мене це просто магія! 🧙‍♂️

Єдиний нюанс — монтувати теки можна тільки ті, що на віддаленій машині. Що логічно, але трохи незручно. А контекст збірки береться з локальної машини (тобто можна копіювати потрібні файли в образ.)