Loskir's @loskirs Channel on Telegram

Loskir's

@loskirs


Пишу про айти, технологии и не только
Лайв канал: @LoskirsLive
Я: @Loskir

Loskir's (Russian)

Loskir's - канал о фронт-енд разработке от пользователя с ником @loskirs. На этом канале вы найдете интересные статьи и обзоры по темам IT и технологий. Подписчики смогут узнавать о последних тенденциях в мире веб-разработки и получать полезные советы от опытного специалиста. Кроме того, автор регулярно проводит лайв трансляции на канале @LoskirsLive, где вы сможете участвовать в обсуждениях и получать ответы на свои вопросы. Loskir's - это не только информационный ресурс, но и возможность общения и обмена опытом для всех, кто интересуется разработкой веб-приложений. Присоединяйтесь к каналу и расширьте свои знания в сфере IT!

Loskir's

11 Feb, 12:48


FOSDEM-2025

В начале февраля съездил в Брюссель на FOSDEM — ежегодную бесплатную конференцию, посвящённую опенсорсу во всех его проявлениях. Мне очень понравилось, но не по тем причинам, что я предполагал.

Конференция была очень оживлённая: 2 дня, тысячи людей, 1055 докладов (по 30 штук одновременно), под конференцию оккупировали почти целый кампус университета. Темы докладов варьировались от компиляции Си до EU Legislation, действительно супер широкий спектр интересов.

Изначально мы составили довольно плотное расписание, планировали посетить пару десятков докладов за два дня. Но наш план не сработал. Некоторые аудитории оказались в разных концах кампуса, и дорога между ними занимала минут 10. Поэтому на back-to-back доклады успеть было физически невозможно, пришлось прореживать расписание, оставляя промежутки между докладами. Плюс на особо интересные доклады даже выстраивалась очередь перед аудиторией, и на пару из них мы вообще не попали, так как закончились места.

Но не докладами едиными живёт фосдем. Вторая, не менее крутая, часть конференции — стенды. Это такие брендированные уголочки, организованные компаниями или просто проектами. На них стоят амбассадоры, у которых можно спросить что-то про проект или просто ухватить мерча. Стендов было 88 штук, я уверен, что до некоторых мы просто не добрались. Были стенды дистрибутивов линукса (Fedora, Debian, Canonical), СУБД (MySQL, PostgreSQL, FerretDB), опенсорс приложений (VLC, Joplin, Matrix, Mastodon), CERN, OpenStreetMap, каких-то опенсорсных космических спутников и кучи других. Но особенно мне понравилась зона, посвящённая AOSP и линуксу на мобилках. Там были стенды CalyxOS, SailfishOS, AsteroidOS и в частности postmarketOS.

postmarketOS — это один из проектов, посвящённый запуску полноценного линукса на телефонах и планшетах. Сама ОС — это «ядро», поверх него устанавливается графическая оболочка, например phosh, Ubuntu Touch или Gnome. У ребят был очень прикольный стенд, они выставили с десяток девайсов, все на postmarketOS, которые можно было взять и потыкать. Это было моё первое знакомство с такими системами, и это было очень круто! Заодно позадалбывал ребят вопросами, что это вообще и как оно работает. Теперь мне даже захотелось поиграться с этим у себя! И это, наверное, главный хайлайт всей конференции.

В общем, было круто. Добраться из Нидерландов в Брюссель оказалось на удивление легко, всего около 4 часов в одну сторону на поезде или автобусе и ~40€ с человека. Ночевали мы в очень уютном хостеле всего за ~33€ с человека. То есть получилось ещё и гораздо бюджетнее, чем я предполагал. Вообще ощущения от расстояний в Европе совсем другие. От Девентера до Брюсселя аккурат 200км, что всего лишь почти равно расстоянию от Москвы до Владимира, Рязани или Тулы, хотя ощущается масштабнее.

Loskir's

23 Jan, 16:12


Моя любимая находка последних недель — команда Expand Selection в IDE.

У JetBrains это Alt/Option+↑↓, у VSCode — Ctrl+Shift+←→, у вима — ценители и без меня знают

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

Loskir's

21 Jan, 09:04


Вчера сдавал экзамен по нидерландскому на A1. Пока все части кроме Speaking, он будет в четверг.

Экзамен был очень интересный, мне понравился. Собственно, было три части: Listening, Reading и Writing.

На Listening было в районе 20 коротких аудиозаписей секунд по 20-30, к каждой аудиозаписи вопрос с выбором ответа. Аудиозаписи были очень разные и очень забавные. От "что от тебя хочет соседка?" до "вы позвонили в администрацию Амстердама, на какую кнопку нажать чтобы задать вопрос насчёт паспорта?". Причем во втором случае качество звука соответствующее реальным автоответчикам

На Reading было что-то похожее, но с короткими текстами/листовками/имейлами/табличками. Например, была какая-то табличка с информацией о какой-то муниципальной приёмной и к ней вопросы типа "в какие дни можно прийти вечером?", "сколько идти от ЖД станции?" или "где найти бесплатную парковку?"

На Writing были даны разные ситуации, для которых надо написать короткие тексты. Например:
- Соседка сходила тебе за продуктами, ты хочешь ее поблагодарить. Напиши текст для открытки.
- Дан имейл вида "Привет коллеги, кто хочет помочь с организацией корпоратива — напишите мне". Напишите ответное письмо.
- Вы хотите поступить в языковую школу. Заполните вступительную форму (имя/фамилия/др/адрес/мотивация)
- Вы хотите продать свой старый стол на маркетплейсе. Придумайте для него объявление (какого стол цвета? размера? насколько он старый? сколько стоит?)

Короче, экзамен мне реально понравился. По ощущениям сдал я его хорошо, какие-то сомнения есть буквально в паре вопросов из всего теста. Очень круто, что буквально за 4 месяца я прошел от практически нулевой proficiency в языке до такого.

Loskir's

20 Jan, 15:01


Попробовал использовать git submodules, прикольная штука. Раньше вообще боялся их трогать.

Я пользуюсь Firefox с кастомной темой поверх (UserChrome). Она основана на EdgyArc-fr (для которой я кстати тоже поддерживаю публичный форк), но также включает в себя некоторые изменения, которые я не хочу заливать в апстрим. Поэтому я долго задавался вопросом, как лучше хранить, версионировать и синхронизировать этот конфиг между несколькими устройствами. Иметь полностью отдельную репу — муторно, делать ещё один форк EdgyArc-fr — тоже (а если захотеть сделать его приватным, то и вообще небезопасно). В итоге остановился на submodules.

Собственно, в паре слов, git submodules позволяет внутри одного репозитория иметь ссылку на определенный коммит в другом репозитории. Для моего случая подошло идеально: я добавил EdgyArc-fr как сабмодуль, а рядом положил оставшиеся кастомные файлы. Теперь при клонировании репозитория я буду получать и базовые стили, и то, что я навертел поверх них. А если в EdgyArc-fr выйдет новая версия, то мне всего лишь останется обновить хеш коммита в корневом репозитории.

Больше всего я был удивлен тем, насколько нативный получился экспириенс. С внутренним репозиторием можно работать так же как и с обычным, просто перейдя в его папку. Git Fork (GUI-клиент) показывает диффы при изменении указателя на коммит и даже предлагает открыть саб-репу в отдельной вкладке. Короче, мне очень понравилось, фича совсем не такая страшная, как мне казалось

А вот ссылка на репу, если кому интересная моя тема: https://github.com/Loskir/firefoxcss

Loskir's

16 Jan, 14:25


жспобеда.рф 🙏

Loskir's

11 Jan, 20:09


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

Главная причина почему я не хотел писать пост — потому что я пока не успел поиграться с ним как следует. Напечатал на нем только с десяток готовых моделек, в основном брелочки-безделушки. В планах поставить CAD-софт и задизайнить хотя бы что-нибудь полезное, но времени и мотивации катастрофически не хватает.

Теперь про сам принтер. Это BambuLab A1 mini, самый базовый и компактный из их линейки. Доступное пространство для печати — 180×180×180 mm³, чуть поменьше чем 256×256×256 mm³ у старших моделей, но всё равно более чем достаточно.

Ещё до покупки начал замечать огромное медийное присутствие bambulab, казалось что у половины ютюберов есть принтер от них. Видимо, не зря: экспириенс печати показался мне супер юзер френдли. Всевозможные калибровки, автоматическое выравнивание подложки, сенсорный экранчик с прогрессом печати, даже какое-то шумоподавление звуков моторов. У них есть какой-то свой облачный сервис управления устройством, но я побоялся отдаваться в рабство китайцам и не стал его настраивать. И даже так флешки с файликами остались в прошлом, отправлять принты можно по сети. Там даже есть встроенная камера для таймлапсов, правда я так и не добрался вытащить их с карты памяти.

В общем, пока как-то так. А самое главное, что обошёлся он мне всего в ~€250 вместе с пачкой расходников. Кажется, еще пару лет назад за такие деньги можно было собрать только DIY за гаражами

Loskir's

25 Dec, 13:32


Итоги 2024

Это был очень интересный год с огромной положительной динамикой. После дикого стресса от переезда в Нидерланды во второй половине 2023 я наконец оправился и неплохо обустроился. В первую очередь, конечно, прокачался в социальном плане. До переезда у меня не было ни одного знакомого из Нидерландов, и первые несколько месяцев мне было очень не по себе из-за этого. Но в 2024 я смог построить комфортный круг общения. Могу даже смело заявить, что в Нидерландах у меня теперь социалочка не хуже, чем была в Москве (не в укор моим московским друзьям, скучаю)

В первую половину года как будто не происходило ничего особо примечательного, кроме обычной работы и учёбы. Параллельно с этим я прикладывал осознанные усилия для расширения круга общения. Сначала казалось, что я прикладываю усилия вникуда, но постепенно это стало давать свои плоды. Мне кажется, важно отметить это как свою заслугу.

В августе сделал лазерную коррекцию зрения. Только сейчас вспомнил, что совсем никак не освещал это в публичном поле. Делал в России по ДМС от Яндекса, 10/10 всем советую. У меня была близорукость -4.5, сейчас чёткая единица. Не то чтобы какое-то life-changing улучшение, но определенно прикольно!

В сентябре пошёл на курсы нидерландского. До этого целый год прожил вообще без знания языка, в Нидерландах это более чем окей. Уровень у меня сейчас чуть меньше, чем A1, но уже развилась неплохая интуиция на произношение и какие-то несложные грамматические структуры. Но самое главное, что язык начал мне нравиться! Сначала была какая-то неприязнь, но теперь кажется, что очень даже миленький язык.

В ноябре вышел на новую работу в нидерландской компании. Ещё в 2022 мне было сложно представить, что я буду официально работать в другой стране, но теперь это стало реальностью. Большую роль в этом сыграла удача (на самом деле я не хотел менять работу и наткнулся на вакансию совсем случайно), но и моя заслуга в этом есть. Очень рад что так получилось, посмотрим что будет дальше.

За этот год я побывал в 8 странах: 🇳🇱 Нидерланды, 🇷🇺 Россия, 🇦🇲 Армения, 🇷🇸 Сербия, 🇰🇿 Казахстан, 🇧🇬 Болгария, 🇩🇪 Германия и 🇧🇪 Бельгия. Особенно рад, что я не просто побывал там, но и повстречался с огромным количеством замечательных людей. Для меня это очень важно, путешествия в одиночку мне абсолютно не доставляют.

Loskir's

18 Dec, 12:30


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

На андроиде я не встречал полного аналога такого виджета, самое близкое, что нашёл — Your Calendar Widget. Программа даёт много возможностей для кастомизации, и одна из фич — мини-таймлайн сверху

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

Loskir's

17 Dec, 17:15


🗓️ Календари на Андроиде

Я обожаю календари, в них удобно хранить свои планы и оценивать время. Особенно удобно, когда события из всех источников можно собрать в одном приложении. У меня их обычно три: рабочий (google), личный (icloud) и учебный (подписной календарь).

На эпловских устройствах приложение календаря поддерживает любые CalDAV/iCal источники, поэтому с ними никаких проблем не возникает. А вот на Андроиде история другая: из коробки в систему можно добавить только ограниченный список аккаунтов (google, exchange, мб еще какие-то). Нужных мне в этом списке не оказалось. Я долго искал обходные пути и в итоге нашёл.

ICSx5 и DAVx5 — маленькие опенсорс программки, интегрирующие iCal и CalDAV календари в систему. Насколько я понимаю, у Андроида есть системная апишка, через которую сторонние приложения могут афишировать свои события и предоставлять обработчики некоторых действий с ними (перенос времени, accept/decline etc) для других приложений, которые эти события могу читать. После настройки аккаунтов в этих приложениях они появятся в гугл календаре и других календарных клиентах, использующих эту системную апишку.

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

Loskir's

03 Dec, 18:21


🚇 🔁🚆 Зацените: кроссплатформенная пересадка метро <-> поезд на Amsterdam Amstel.

На одной платформе останавливаются метро из центра и поезда из центра, на другой, соответственно, в обратную сторону. В итоге для большинства маршрутов не надо даже менять платформы, просто пройти с одного края на другой (не забыв при этом сделать чекаут поездки из GVB и чекин в NS)

Loskir's

28 Nov, 18:30


🇩🇪 Интересности из Берлина

1-5. Ампельман — так называют человечка, которого изображали на пешеходных светофорах в Восточной Германии. Кстати, до сих пор встречается на многих светофорах в Берлине. Так вот, у него есть свой фирменный магазин, полностью состоящий из мерча, ему посвященному. Мармеладки, уточки, футболки, рюкзаки, брелочки и ещё куча всего. Я был просто в восторге (но ничего не купил). Почитать про Ампельмана можно тут у Аркадия Гершмана

6-7. Невероятно прелестная кафешка Witch Garden недалеко от центра, понравившаяся не только вкусным рафом и выпечкой, но и интерьером. Кстати, бариста говорила по-русски (по моим наблюдениям корреляция между наличием рафа в меню и русскими почти 100%-я)

8. Велодорожка «откусывает» кусочек тротуара, чтобы сделать поворотную полосу

9. Просто красивое здание (Дом Марии Элизабет Людерс)

Loskir's

19 Nov, 15:45


Зацените какая миленькая трёхмерная схема в Амстердаме

Loskir's

17 Nov, 23:10


Занятная карта, показывающая, насколько время на часах отличается от астрономического. Синий цвет означает, что время на часах отстаёт от астрономического, красный — что опережает.

Тут изображена ситуация зимой (без летнего времени), но в википедии я нашёл очень показательную цитатку: «Летом в испанском городе Виго (на самом западе страны) астрономический полдень наступает в 14:41 по местному времени»

И ведь с какой-то стороны это является таким же свойством местности, как, например, климат. Часовой пояс, конечно, можно поменять, но это происходит исключительно редко. Чем в более красной зоне вы находитесь, тем позже зимой садится солнце. Например, в Минске закат почти на час позже, чем в Москве.

Ещё один интересный факт про часовые пояса — Daylight Saving Time, оказывается, подразумевает лето, а не зиму (по-русски это называется «Летнее время», но я никогда не воспринимал его в отрыве от Зимнего времени, поэтому рассматриваю английский термин). Его ввели для того, чтобы летом солнце вставало не в 4 утра, когда все спят, а на час позже, когда уже можно работать, и светило допоздна. У меня в голове почему-то всегда была мысль, что это зимнее время должно что-то там сохранять, и недоумевал, как закат в пять дня этому поможет.

Loskir's

09 Nov, 16:01


🍏 Написал мини-гайд по возможностям drag-n-drop в макоси. Drag-n-drop прочно интегрирован в мои воркфлоу и экономит мне порядочно времени. Но отнюдь не все используют его на полную, и я надеюсь это исправить.

Лайк, шер, пишите в комменты если забыл какие-то интересные юзкейсы

https://loskir.notion.site/Drag-n-drop-macOS-13972defa598805ab8d3fe2275fdd0ae

Loskir's

06 Nov, 16:52


😱 Карьерные новости

Последние полтора года я проработал фронтенд-разработчиком в Яндексе — успел поработать над Яндекс Бизнесом, Директом и даже немного над Поиском. Было супер интересно, первый опыт работы в крупной компании над масштабными проектами. Культура тоже была на высоте, работалось поразительно комфортно (в первую очередь благодаря замечательной команде). Почти весь этот период я провел на удаленке из Нидерландов, совмещая работу с учебой, за что им отдельное спасибо. Но всему приходит конец, неделю назад я ушёл из Яндекса.

Но есть и хорошие новости! На следующей неделе я выхожу на работу в маленький нидерландский стартап под названием Teero. Скорее всего вы о них ничего не слышали, ребята делают медтех платформу для американского рынка. Весь код у них написан на Typescript, я буду этаким фулстек-инженером. Интересное возвращение к истокам, олды наверное помнят, что до Яндекса я больше занимался бэкендом на nodejs и телеграм-ботами. Компания действительно небольшая, примерно 10 человек в сумме. Очень рад своей новой роли, давно назревала мысль уйти из большого проекта куда-нибудь в стартапчик.

У них есть офис в Амстердаме, и я буду туда иногда ездить (гибрид). Это тоже скорее плюс, потому что в Амстердаме, я надеюсь, будет проще влиться в эмигрантскую и «деловую» тусовку, которой мне так не хватает в моей глубинке. Оформление официальное — прямо сейчас получаю рабочую визу (kennismigrant), так как по учебной нельзя работать больше чем на полставки. При этом учёбу бросать не планирую, в компании не против.

Это событие действительно ощущается как «новая глава». Впереди ещё много трудностей (новая компания, англоязычная рабочая среда, продолжение учёбы), но никогда до этого у меня не было такого набора возможностей. Будем смотреть, что из этого выйдет!

Loskir's

12 Oct, 17:34


Сегодня я узнал, что в JavaScript свойство length у функций отвечает за то, сколько параметров эта функция ожидает

Например, для function f(a, b, c) {} оно будет равно 3
И на это теоретически можно завязать некоторую логику (например, express таким образом отличает обычные мидлвари от хендлеров ошибок).

И что самое противное, это никак нельзя описать в терминах тайпскрипта. То есть даже если описать тип

type FunctionWithTwoParameters = (a: number, b: number) => void

то

const functionWithOneParameter: FunctionWithTwoParameters = (a) => {}

будет валидным кодом, но при этом зафейлит логику в том месте, где ожидается length === 2

Loskir's

11 Oct, 21:52


👨‍🎓 Если в конце прошлого года у нас был курс web basics, где нас учили чистому html+js+css+node, то сейчас у нас идёт web advanced. Главное отличие — svelte на фронте, настоящий реактивный фреймворк!

Хоть я и недолюбливаю svelte за его рандомный нелогичный синтаксис и single-file components, мне кажется, что он вполне неплохо подходит для обучения благодаря обширности встроенных quality of life штук. Я считаю, что если научить человека мыслить в реактивной-компонентной парадигме, то дальше можно легко пересесть с одного фреймворка на другой (разумеется, если не лезть достаточно глубоко во внутреннее устройство)

Хотя typescript не преподавался вообще (с чем я так-то согласен, в начале обучения студенты абсолютно точно будут отстреливать себе ноги чаще, чем ловить несоответствия типов), я в начале курса спросил у препода, можно ли использовать typescript. Он ответил что-то типа «well in my experience svelte doesnt go well with typescript but sure, go on», что меня полностью устроило.

Loskir's

06 Oct, 20:45


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

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

Помимо всего прочего, он оснащён ещё и маленькой камерой на задней части! Для подтверждения платежа нужно вставить в девайс свою карточку, просканировать QR-код на сайте оплаты, и только после этого он выдаст некий TOTP-код, который надо ввести на сайте.

Loskir's

27 Sep, 21:09


Купил Quest 3 (но есть нюанс)

У моего второго квеста сломался usb-порт. Я не смог его починить, и поэтому решил, что пришла пора купить новый

Первые впечатления:
- Мощности стало ощутимо больше, в standalone режиме не тормозит запись в 60fps (на втором было неиграбельно)
- Он стал реально тоньше, если снять накладку на лицо, то в толщину будет максимум сантиметра два
- Новые контроллеры непривычные. Так и хочется схватиться за колечко или поставить вертикально на стол
- Цветной passthrough прикольный, но никак не полное погружение. Он всё так же как и старые модели (емнип, в т.ч. квест1) строит 3д сцену в низком разрешении и натягивает на нее текстуры. Из-за этого искажения геометрии заметны. Интересно было бы сравнить с apple vision pro
- Ремешок на голову такой же дурацкий, как и дефолтный у к2. После bobovr заметный даунгрейд. Надо будет докупить
- В комплекте к второму квесту шел силиконовый чехол на накладку для лица. Благодаря этому она вообще не намокала после потной игры. Здесь такой можно докупить отдельно
- Обновили механизм открытия крышки у контроллеров. В первой версии были магнитные крепления (которые иногда открывались во время игры), во второй — обычные сдвижные защёлки, а тут сделали защёлку с кнопкой
- Обновили пружинки удерживающие батарейку (в первой версии при резких взмахах она могла отсоединяться)
- Сделали first-party аккумуляторы, с которыми контроллеры можно заряжать на специальной док-станции (насколько понимаю, три контакта внутри это для них)

А нюанс в том, что буквально через день после того, как я получил посылку, мета выпустила новую ревизию 3S и снизила цену на к3 на €70. Поэтому свой квест я решил вернуть в магазин (я покупал прямо на сайте меты). Скорее всего куплю такую же тройку, но по низкой цене. 3S хоть и стоит €330 вместо €480, но имеет такую же оптическую систему, как и в к2 (а мне кажется, за более продвинутую стоит переплатить, хоть и не то чтобы обязательно)

Loskir's

10 Sep, 21:27


Galaxy Tab S9

Купил планшет. Основной юзкейс для него у меня — просмотр контента с периодическим серфингом веба, ничего особенного. Заметки стилусом я на планшетах не веду, хоть и пробовал на несколько лет назад. Поэтому основной фокус был на экран и чуть-чуть динамики. Очень хотелось амолед экран, потому что на айпадах в темноте серые рамки вокруг видоса раздражали. И от 120 герц тоже отказываться не хотелось, потому что на планшетах герцовка особенно заметна, а вообще 2024 год на дворе, камон.

Откинув бюджетные модели по одному из параметров выше, я пришёл к трём вариантам: айпады, Huawei MatePad Pro 11 и Samsung Galaxy Tab S9. Айпады быстро отвалились, потому что за адекватную цену там либо IPS экран, либо 60 герц, либо и то и то, а новые прошки стоят раза в два дороже. Между хуавеем и самсунгом я таки выбрал самсунг, потому что стоили они примерно одинаково, характеристики у них сопоставимые, но у самсунга новее проц (плюс у меня было больше доверия самсунговской оболочке).

Купил я его в одном из серых магазов, обошёлся он в 51к₽ и ещё за 6к₽ купил оригинальный чехол-обложку. Стилус был в комплекте.

Планшетом я крайне доволен. По железу всё как и ожидалось: ярко, плавно, быстро. А вот софт меня приятно удивил: в One UI пофиксили почти все недочёты, которые бесили меня в AOSP / гугловской оболочке. Остановка записи экрана без залезания в шторку, приятный календарь, продвинутая многозадачность. До режима Slide Over на айпаде по удобству не дотягивает, но как будто это самое близкое к iPadOS, что можно получить на андроиде. One UI мне настолько понравился, что подумываю следующим андроид-телефоном взять именно самсунг

Чехольчик сомнительный, но окэй. Бока не совсем защищает, впрочем как и Smart Folio для айпада. На задней части есть смешно раскладывающаяся подставка (можно ставить как горизонтально, так и вертикально) и откидная крышка для стилуса. Зарядка для стилуса на задней панели выглядит странно, но я уже привык; разве что корпус становится чуть толще. Передняя панелька совсем дурацкая, я её вообще снял. Она выполнена в виде сплошного плоского листа (в отличие от айпадной, которая складывается в двух местах). Более того, на задней панели она никуда не примагничивается, и просто болтается туда-сюда.

Про стилус мне особо нечего сказать. Есть ховер эффект (когда планшет замечает стилус в паре сантиметров от экрана, а не только при касании) и кнопка (в разных приложениях можно выполнять разные действия по нажатиям или жестам в стороны). За счёт прорезиненного наконечника возникает больше трения об экран по сравнению с айпадом, что на мой субъективный взгляд ощущается даже приятнее. Но опять же, я стилусом почти не пользуюсь.

Loskir's

30 Aug, 14:25


🍕 Додо-аналитика 2024 edition

Больше двух лет назад я анализировал додокоины и комбо в Додо Пицце. Время прошло, цены изменились, пора актуализировать таблички.

• Бруслетики больше не самый выгодный товар за додокоины! Теперь на первом месте с большим отрывом средняя пицца Цыпленок барбекю
• С комбо ситуация почти не изменилась. 2×30 всё так же стабильно выгоднее, чем 3×30. Также добавил в табличку комбо 3×25
• Цены слегка отличаются по регионам, но общая картинка сохраняется. Зато цены в додокоинах от региона не зависят. Это значит, что в дорогих регионах тратить додокоины выгоднее!

Кому интересно, вот ссылки на таблички: додокоины и комбо

Loskir's

29 Aug, 09:50


🤭 Babe wake up, new browser just dropped

Zen Browser — очередной необраузер, на этот раз на базе Firefox. Разрабатывается не VC-backed стартапом, а чуть ли не в одиночку. А код, кстати, открыт.

Среди фич — нативные вертикальные вкладки, split view, кастомизация, магазин тем. Пока что браузер находится в альфа-стадии, поэтому иногда встречаются кривоватые моменты и недоработки. По удобству, конечно, не дотягивает до моего закастомленного Firefox-а (хотя в Zen в теории можно реализовать штуки, которые нельзя закастомить в самой лисе), но из коробки очень даже приятен.

Кстати, доступен не только под макось, но и под винду с линуксом. Скачать-потыкать можно тут

Loskir's

13 Aug, 09:47


Смотрите, какую багофичу нашёл на Яндекс картах

Строящийся небоскрёб в Сити имеет полупрозрачную текстуру, но 3д здания за ним превращаются в 2д.

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

Посмотреть можно тут: https://yandex.ru/maps/213/moscow/?ll=37.543459,55.754281&tilt=0.8726646259971648&z=17.52

Loskir's

11 Aug, 18:52


🏴‍☠️ Поднимаем свой VPN в Docker

У меня уже пару лет как поднят свой сервер Wireguard в docker-compose. Всё это время он отлично выполнял свою задачу, но недавно в России начали блокировать протокол Wireguard, и VPN отвалился на большинстве операторов связи.

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

1. Marzban
Это all-in-one решение для селф-хостинга VPN. Работает на базе xray, обещает быть устойчивым к блокировкам. Для подключения к нему нужно использовать специальные клиенты, сравнение можно посмотреть на сайте VPN от вастрик.клуба. Я советую Streisand для iOS и v2rayNG для Android. На мак пока не настраивал.
Поднимается легко, нужно только прокинуть несколько портов. Сервер выдаёт общую ссылку-подписку, которую можно добавить в клиент, и туда автоматически подтянутся все актуальные способы подключения к серверам. Поднял в том числе и ноду у себя дома в России, чтобы из-за границы можно было иметь российский IP.
Можно делиться VPN с друзьями, создав каждому по собственной учётке. При желании можно даже ограничить количество трафика или время действия.

2. AmneziaWG Easy
Это сборка, аналогичная wg-easy (который у был поднят у меня), но с AmneziaWG под капотом. AmneziaWG — это форк протокола WireGuard, созданный русскими умельцами специально для обхода блокировок. Здесь тоже есть веб-админка, позволяющая создавать отдельные данные для входа каждому пользователю VPN. Правда, для подключения придётся использовать другие приложения: Amnezia или AmneziaWG. С мобильных устройств пользоваться нормально, а вот на мак, кажется, адекватных приложений нет (только мобильная версия, пересобранная под десктоп).

Loskir's

25 Jul, 20:15


Опенсорсная замена Bartender

Ice — программа для macOS, позволяющая временно прятать иконки в меню-баре, если их становится слишком много. Но таких программ куча, эта примечательна тем, что это первая на моей памяти опенсорсная, умеющая рендерить скрытые иконки на отдельной строчке.

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

Плюс недавно слышал новость, что Bartender продался компании со спорной историей, от которой непонятно что можно ожидать в будущем. Поэтому вдвойне приятно выбросить Bartender и перейти на опенсорсное решение. Скачать можно тут.

Loskir's

03 Jul, 16:23


🌇 Immich — селфхост хранилище фотографий здорового человека

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

Я был удивлён тем, насколько он хорошо работает. Сервер разворачивается через docker compose в пару команд, подключиться к нему можно через веб-интерфейс или мобильное приложение. Клиенты довольно удобные, иногда даже забываешь, что это FOSS.

В приложениях можно настроить автоматическую загрузку новых фото на сервер (хотя я пока не тестировал, насколько хорошо это работает на iOS).

Есть поддержка геопозиций, нескольких пользователей, live photos, альбомов, распознавания лиц и даже публичного шаринга. И всё это полностью на своём сервере!

Так что всем селфхост энтузиастам советую обратить внимание на этот проект. А сам я, наверное, так и буду разрываться между GPhotos, iCloud и Immich.

Loskir's

29 Jun, 17:19


Выложил на гитхаб свою тему для Sidebery, вдохновлённую дизайном Arc

Потвикал паддинги, добавил побольше скруглений, пофиксил неконсистентности в стилях, добавил отступы по бокам, поменял дизайн цветных вкладок и ещё пара мелочей. Конечно, осталось ещё много нестилизованных мест, но мне кажется уже выглядит гораздо лучше чем из коробки.

Кроме того, добавил и quality of life твики вроде мультистрочных названий вкладок. Хоть смотрится не очень чисто, но для меня очень полезная фича. За это мне и нравится кастомизация — можно найти свой баланс дизайна и пользы, и никакие дизайнеры со своим видением прекрасного не могут мне помешать 😈

Использовать очень просто — копируете style.css и вставляете в специальное поле в настройках Sidebery. На самом деле я даже не ожидаю что эти стили подойдут вам из коробки, скорее что их можно использовать как образец или просто скопировать какие-то решения себе.

https://github.com/Loskir/sidebery-theme-arc

Loskir's

28 Jun, 21:20


👨‍🎓 Университетские хроники: Web Basics

Одним из предметов в последней четверти этого года были Web Basics. Как можно понять из названия, там нас учили основам веб-разработки, а именно фронтенду (чистый html+js+css) и бэкенду (nodejs+express+sqlite)

На пары я почти не ходил. Во-первых, потому что там объясняли такие основы, которые я уже и так знал. Во-вторых, потому что одна из пар была в 8:30, а я в такую рань вставать не хочу. А хотя наверное надо было бы, хотя бы чтобы подискутировать с преподавателем на тему глупых требований, которые почему-то они решили добавить.

Как и у многих других предметов, у Web Basics не было никаких промежуточных элементов контроля, только один главный дедлайн, к которому надо написать своё фулстек-приложение (в одиночку, не группой).

Проект состоял из трёх основных частей: бэкенд, фронтенд и документация.
Бэкенд должен быть написан на nodejs, использовать express и sqlite в качестве БД, иметь минимум 3 сущности с отношениями между ними, REST-compliant апи для взаимодействия с CRUD операциями. ESM обязателен, CJS харам. Typescript нельзя 😨
Фронтенд должен быть написан на html+js+css без js-фреймворков и библиотек, без этапа сборки, с использованием флексов/гридов и медиа выражений (oddly specific but ok). Server-side рендеринг нельзя, для подгрузки данных только fetch.
В документации надо было сделать спецификацию апи (с помощью swagger или в goofy ahh docx template который нам предоставили), пару sequence diagram, wireframes (это как макеты, только ещё более на минималках) и обоснования для нестандартных решений (я там похвастался что затащил kysely для работы с БД, valibot для валидации и prettier для форматирования)

Предметную область можно было взять любую, я выбрал максимально дефолтную: таск-трекер с тегами и комментариями (не спрашивайте). Проект, на который нам давалось 7 недель, я начал за 2.5 дня до дедлайна. Темп был весьма ударный, как на тех видосах с потным спидраннером. Но, в принципе, успел сделать всё что требовалось. Конечно, некоторые углы пришлось срезать (например, нигде не было написано что все CRUD-операции должны быть доступны с фронта, поэтому редактирование тегов и комментариев я не реализовал). Сложнее всего было писать код без тайпскрипта и реактивного фреймворка. К хорошему быстро привыкаешь, и поэтому написание небезопасного и императивного кода казалось просто пыткой.

За проект я получил 9/10. Часть баллов сняли не потому что что-то не успел, а потому что прикопались к коду (например, им не очень понравилось как я разделил бэкенд на слои). Хотя я бы и поспорил с некоторыми фидбеками, в общем и целом я доволен оценкой.

Сложность: 1/10
Приятность: 7/10
Польза: 2/10. С нуля скорее всего полезнее, но лично я не узнал чего-то нового.

Интересный факт: в начале следующего года у нас будет предмет Web Advanced, где на фронте можно будет использовать реактивщину. Получается, что страдания первогодок с document.createElement оказались напрасны.

В комментах выложу мини демку и кусочки документации (выкладывать весь код на github мне стыдно)

Loskir's

24 Jun, 17:16


Делать одно и то же дважды

Замечаю за собой, что часто вместо того, чтобы фокусироваться на каком-то одном решении проблемы, поддерживаю параллельно два варианта. Например:
- У меня на маке сейчас настроен и zsh, и fish. Оба шелла настроены примерно одинаково, но я никак не могу выбрать один вместо другого. Сейчас пользуюсь fish, но за пару месяцев несколько раз переключался туда-обратно.
- Хоть в основном я пользуюсь Arc, сейчас пытаюсь настроить Firefox (см. предыдущий пост). У каждого браузера есть свои уникальные фичи, и я никак не могу выбрать один из них.
- То же самое с iPhone и Android. У меня на руках iPhone 14 Pro и Nothing Phone (2). Я устраивал тестовую неделю «если бы я перешел на андроид», но в итоге вернулся обратно на айфон. За последние три года я три раза метался между андроидом и яблоком.

И тут я задумался: а стоит ли оно того? С одной стороны, я трачу вдвое больше сил вместо того, чтобы отдаться одной стороне и получать удовольствие. А с другой стороны, у этого есть свои преимущества.
Во-первых, мне нравится этим заниматься. Если бы мне не нравилось, я бы не занимался 🤷‍♂️.
Во-вторых, это понижает степень моей вендорлокнутости. Благодаря тому, что оба решения примерно равны по удобству, я точно знаю, что, если моё текущее решение загнётся, я легко смогу перейти на другое.
Ну и в-третьих, что если это ошибка выжившего? Если в этих случаях у меня не получилось занять одну из сторон, не стоит переставать инвестировать в альтернативы. Может быть, в другой раз победитель нарисуется сам по себе, и мой экспириенс только выиграет.

Что думаете? Встречались с таким?

Loskir's

18 Jun, 19:54


Полтора года назад я попробовал Arc и влюбился в вертикальные вкладки, спейсы и Mini Arc.

Пару месяцев назад я попробовал Firefox+Sidebery и понял, что древовидные вкладки ещё удобнее, чем просто вертикальные. Но одних только древовидных вкладок оказалось недостаточно, чтобы перебраться с Arc на Firefox.

Последние несколько дней я усиленно копался во внутренностях лисы, чтобы слепить себе идеальный браузер. Я перебрал все настройки Sidebery, попробовал несколько userChrome кастомов и даже научился кастомить интерфейс самостоятельно.

Свои находки я документирую в этой статье, прошу любить и жаловать. Дисклеймер: изложение там довольно хаотичное. Контент будет дополняться в процессе моих дальнейших приключений. Жду ваших комментариев!

Loskir's

13 Jun, 10:08


Меня всё никак не покидает идея сделать свой настоящий блог (может даже переводить какие-то посты на английский?), но руки не доходят уже наверное год как.

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

Из плюсов: запускается в две строчки и из коробки весьма хорошо смотрится и работает. Для простенького блога набросать за 15 минут — самое то. И RSS из коробки есть.

Теперь к недостаткам:
- Нет SSG, то есть блог не билдится в статику, а требует рантайма. Более того, нет даже этапа сборки. Это значит, что .md файлы компилируются в html на лету (может быть кешируются, не знаю). С одной стороны ожидаемо от команды Deno, которым выгодно продвигать свой serverless сервис Deno Deploy, но совсем не то, что я бы хотел в своем блоге.
- Из фич есть только сааамые базовые. Нет поддержки мультиязычности, нет подсветки синтаксиса в коде. Наверняка ещё кучи всего нет, я копал не так глубоко.

В общем, поигрался полчасика и понял, что это не моё. Ждите ещё постов.