Skip to main content

Evgeny Kuznetsov

Жизнь курьера и опасна и трудна

1 min read

Когда курьер, который везёт тебе еду, застревает в лифте на твоём этаже, обидно не только курьеру, но и тебе: из лифта же вкусно пахнет, а еда остывает…

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

Я поэтому всегда стараюсь еду заказывать там, где курьеры толковые.

курьер в застрявшем лифте

Evgeny Kuznetsov

МегаФон: как заставить VoLTE работать

6 min read

Лет восемь назад, когда я впервые прочёл о технологии Voice over LTE (VoLTE), у меня возникло только два вопроса: почему оно не прикручено к 4G по умолчанию и когда же уже, наконец. Уже тогда было понятно, что связь — это интернет, что вшитые в стандарт GSM способы звонить и передавать текст безнадёжно устарели и никому не нужны, и что вот этот многофункциональный компьютер-коммуникатор, который мы по старинке  называем «мобильным телефоном», должен просто иметь доступ в Сеть — всё равно, через оператора или через WiFi — и уже посредством Сети обеспечивать весь остальной функционал. Тяжёлое наследие первых версий GSM, когда голосовой звонок занимает весь канал и отключает доступ в интернет, не говоря уже об SMS как технологии — это именно тяжёлое наследие тех времён, когда по-другому сделать не получалось, и от этого всего надо избавляться. В стандарте 4G/LTE голосовой связи не предусмотрено вовсе; для того, чтобы совершить звонок, телефону надо переключиться в один из «старых» режимов (3G, 2G)… Или — Voice over LTE, голос в виде интернет-трафика. А в идеале — ещё и Voice over WiFi, когда тот же звонок можно вообще без сети оператора совершить.

Кстати, этот самый Voice over WiFi в исполнении МТС я не так давно наблюдал вживую. Любимая жена, не желая тратить денег на роуминг и желая в кои-то веки действительно отдохнуть, как включила авиарежим в Домодедово, так и не отключала его всё путешествие, но WiFi, конечно, включала — куда ж без интернета-то. Видели б вы наши лица, когда в номере отеля её телефон вдруг зазвонил — с «самолётиком» на экране! Быстрый гуглёж помог удостовериться, что лишних денег это стоить не будет, с точки зрения МТС телефон всё равно что в Москве, так что там, где был доступ к WiFi, жена спокойно разговаривала по телефону при необходимости. А я, увидев будущее в действии, осерчал на МегаФон и решил разбираться…

Кажется, первым моим телефоном, который поддерживал VoLTE, был Sony Xperia Z3, и было это уже довольно давно. Помню, я сразу столкнулся с проблемой: телефон ждёт звонка через VoLTE, сеть же пытается «пропихнуть» звонок в 3G, но телефон именно в этот момент что-то шлёт через интернет — в общем, примерно в половине случаев (а при активном пользовании телефоном — так и чаще) звонок до меня просто не доходил, а доходила — секундой позже — SMSка: мол, вам вот только что звонили. Поддержка МегаФона тут же объяснила, что в VoLTE МегаФон не умеет, и неизвестно когда будет, а в 4G — активно, поэтому телефону в настройках надо этот самый VoLTE запретить, иначе в сети 4G он становится аналогом телефонной будки: позвонить куда — пожалуйста, а вот принять звонок — проблема. Ну, нет — так нет, тогда из наших операторов в VoLTE не умел никто, отключаем, ждём.

Телефон я с тех пор сменил не раз и не два, и всякий раз, получая первую SMSку про «вам секунду назад не дозвонились», хлопал себя по лбу и лез в настройки, отключать VoLTE. С телефоном, который у меня сейчас, тоже так было. И вот теперь, после наглядной демонстрации даже не VoLTE, а VoWiFi от МТС, я заглядываю в интернет и с удивлением обнаруживаю, что VoLTE-то у МегаФона (хотя бы и только в Москве) — есть! Причём уже некоторое время есть. Причём на момент появления у меня этого телефона тоже уже было. Больше того, знающие люди пишут, что с запуском VoLTE по Москве МегаФон стал активнее деприоритизировать голосовой трафик (освобождая каналы под интернет) — так вот отчего в последний год так часто вспоминаются слова Тимака:

Странное название для сотовой компании: «мегафон» — это ведь когда очень громко и ни хрена не разберёшь. Впрочем, их-то связь название оправдывает полностью.

Почему же VoLTE нет у меня?! Прямо на сайте предлагают код для проверки, годятся ли аппарат и SIM — пробуем…

SMS от Мегафона: с картой и телефоном всё хорошо

Гм. Нет, так-то у меня этот их 4G+ работает беспроблемно (я, помнится, как раз SIM менял тогда, чтобы у меня 4G завелось), но где же VoLTE? Звоню в поддержку: ну да, должно работать, попробуйте поменять SIM, она у вас несколько лет уже, могла размагнититься со временем… Кажется, я на этого деятеля матом огрызнулся даже; я когда слышу про «SIM размагничивается», у меня забрало падает моментально — я вообще некомпетеность в рамках должностных обязанностей болезненно воспринимаю, а уж когда микросхемы размагничиваются или, к примеру, «эффект памяти» в литиевых аккумуляторах возникает — вообще неадекватный становлюсь.

Как только вернулись на денёк в Москву, иду в салон. В салоне очередь на час, стойка «VIP-клиентов» вообще не работает — ну, МегаФон, представляете, бывали наверняка. В салоне тоже полчаса пытались понять, в чём проблема, даже на телефон спихнуть пытались, в итоге, опять же, ничего умнее, чем поменять SIM, не придумали. Ладно, меняем, чего уж, раз всё равно пришёл.

С заменой SIM, кстати, у МегаФона тонкость: ровно сутки SMS ходить не будут. Никакие, вообще. И не ждите, что через сутки они все скопом дойдут — нет, не дойдут, никогда, они сразу в /dev/null отправились. Сделано это, вероятно, для того, чтобы в случае неавторизованной замены успеть добежать до салона и откатить всё в исходное, пока злодеи через SMS доступ к банкам и прочим аккаунтам не получили. Такой себе выход, честно говоря, но лучше, чем ничего. Вообще SMS как фактор аутентификации — очень плохая идея, но, к несчастью, частенько — безальтернативная. Ничего, голосовую связь по GSM окончательно похороним — и до SMS доберёмся; вот уж технология, которую заждались на свалке истории!

В салоне МегаФон, кстати, тонкого предмета или даже скрепки для замены SIM не нашлось — собственно, чего мы хотели, крупный оператор, «большая тройка», откуда бы?.. Благо, как раз до дома старая SIM ещё дотянула, а дома воткнул новую. Что бы вы думали?!

индикатор работающего режима VoLTE

Бинго! Всё завелось сразу, всё работает, в самом деле в SIM было дело. Правда, как видно из SMS выше, понять это был не в состоянии даже сам МегаФон. И улучшение качества голосовой связи заметно мгновенно, что есть — то есть.

Конечно, за МКАДом этот VoLTE мгновенно превращается в тыкву. Конечно, никаким Voice over WiFi, как у МТС, в МегаФоне и не пахнет. Хотя…

Хотя чего, собственно, ждать от могучего оператора с самым быстрым интернетом, который в 2019 году никак не научится сведения о часовом поясе в GSM-сеть передавать?! Кстати, вот сколько езжу по миру, во всех остальных сетях это делается, всеми операторами, только в России приходится часовой пояс вручную выставлять. А куда деваться: будущее зависит от тебя, вот и засучи рукава…

Evgeny Kuznetsov

Суслик, suka, — личность…

4 min read

Ни для кого не секрет, что я пишу и поддерживаю апплет для панели уведомлений (или как вы там system tray переводите), управляющий MateBook-специфичными функциями. Ну, то есть если вы этим интересовались — вы в курсе. Но вам пофиг, поэтому — нет. Это нормально.

Вот тоже загадка: апплет работает (ну, должен работать… вроде бы…) на любых MateBook'ах, где есть Linux. При этом звёзд на GitHub у него почти на порядок меньше, чем у моего же гайда по установке Linux на MateBook 13! Это с учётом того, что на апплет есть ссылки и со страницы гайда, и даже со страницы драйвера для MateBook'ов. Да что там, у гайда больше звёзд, чем у драйвера! На секудночку: гайд по одной модели, драйвер поддерживает не меньше четырёх; драйвер для полноценной жизни на MateBook необходим, при этом у гайда звёзд больше… Это к вопросу о смысле кармадрочерства как концепции и логике «лайкающих» на гитхабе, да.

Ладно, Тьма с ними, со звёздами. Апплет у меня.

Я его, кстати, на Go пишу. Не, я в курсе, что Go для этого не очень предназначен, но мне нравится писать на Go. Работает, опять же… В конце концов, простите за откровенность, на Цэ-плюс-плюсе я бы такое не осилил. А так — вот, есть апплет. Работает даже. Ну, такое…

Мне Go очень нравится. Я как раз пока такие вещи пишу, заодно язык изучаю. На той неделе, вот, окончательно интерфейсы вкурил. Страшная сила — эти интерфейсы в Go, не вдруг въедешь, если до этого почти исключительно на bash да на basic (да, у меня тяжёлое детство было). Зато как врубишься — ну прямо восемь стволов и всё небо в попугаях! Сколько раз в ООП тыкался — нет, от лукавого все эти ихние наследования! А тут прям именно такой полиморфизм, как надо. Шоб работало, и шоб голову не сломать при проектировании простой программки на сотню строк. Вот прям нравится!

А ещё мне очень Test Driven Development заходит, в который Go хорошо умеет. Ну, то есть как — хорошо… Умеет, из коробки, очень прилично. Но у меня вот тут затык вышел.

Апплет мой, он же с драйвером непосредственно через файловую систему взаимодействует; и даже не только через os, а прям вот таки через ioutil. И никак не возьму я в толк: вот как мне это тестить?!

Не, afero — отличная вещь, согласен, но мне не нужна абстракция файловой системы насмерть, у меня область применения — как раз только и исключительно локальная ФС. Ну и если без зависимости не обойтись — я бы предпочёл что попроще, у меня маленький апплет для трея, а не промышленная CRM же. А делать mock файловой системы, да со всеми нужными ответами и поддержкой ioutil — я ж нарушусь, разве нет?

Понимаете, у меня задача-то — проще некуда! Апплет при инициализации должен потыкать в разные места в /sys/ и понять, с какой конфигурацией он работает, и там куча вариантов (и будет ещё больше), и очень хочется под это запилить нормальный table-driven test. Потому что

если тебе вдруг захотелось отладочной информации в консоли — здесь нужен тест, а не дебаг!

Это очень правильная мысль. Верная даже, только не помню, чья. Поэтому мне всего только надо — сделать так, чтобы для тестов симулировались разные варианты состояний в /sys/. Мне не нужно в кросс-платформенность, всё равно у меня чисто линуксовая заморочка. Мне не нужны возможности в перспективе заменить файловую систему на облако. Мне просто нужно для go test получить «песочницу» файловой системы с абсолютными путями — хоть в памяти, хоть в tmpFS, хоть на диске, хоть как.

Я реально себе сегодня всё правое полушарие об это сломал, и полинтерета обгуглил. То ли лыжи не едут…

очень озадаченный суслик

Картинка хамски попячена из презентации Francesc Campoy Flores.

Evgeny Kuznetsov

Ох, покатаемся завтра…

1 min read

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

винтажный SchnauffОщущения от пробного заезда до родительского дома оч-чень интересные. Как на нём ехать в толпе, пока представление имею смутное, но весело будет точно! Ох, не разложиться бы завтра на этой штуке по мокрому-то — дождь ведь обещают…

Evgeny Kuznetsov

Раньше как-то получалось уходить в отпуск без «хвостов» по работе; что называется, «на свободу — с чистой совестью». Сейчас, за день с небольшим до отпуска, никак не могу взять в толк: как же это у меня выходило?!

Evgeny Kuznetsov

O'zbekiston

2 min read

Если соберётесь в Узбекистан, стоит иметь в виду несколько вещей.

Берите с собой Visa или наличные доллары. Про существование евро здесь в целом знают, но больше теоретически. MasterCard обслуживает единственный банк во всей стране, и банкомат вы будете искать очень долго.

Не меняйте на местную валюту (и не снимайте в банкомате) больше денег, чем реально планируете потратить. Обменять местные деньги обратно на сколько-нибудь конвертируемую валюту — целая история, и сделать её успешной у нас, например, так и не вышло.

Плов надо есть около полудня, а то и раньше. К часу-двум дня в популярных местах (там, где плов вкусный, и его едят местные) плов уже кончается.

На внутренних авиарейсах нельзя возить зажигалки — вообще никакие. Вообще, досмотр при посадке на общественный транспорт дальнего следования (что наземный, что воздушный) очень дотошный и не всегда логичный в смысле запрета отдельных предметов. Аэропорт имени Бен-Гуриона отдыхает…

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

Ну и главное: почитайте заранее хоть что-нибудь (чем больше — тем лучше) по истории Средней Азии, причём не только древней. Знание основных исторических вех поможет понять, почему надо пробовать кухню разных регионов, почему не надо искать в Ташкенте исторические здания, а в Самарканде — дух древнего города, и вообще поможет осознанно смотреть вокруг.

внутри мавзолея Тимура (Тамерлана)

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

Evgeny Kuznetsov

Google Library API — отличная штука! (Нет.)

2 min read

Чем дальше в лес, тем злее дятлы…

Мало того, что Google Library API не желает отдавать файлы с фотографиями в исходном виде (о чём я уже писал); там вообще весь API работает, как Ктулху на душу положит, в зависимости от фазы Луны, положения планет и настроения Дискордии.

Вот, например mediaItems.list — в документации всё чётко, просто и понятно: вкидываем token страницы и желаемый размер, получаем список с описаниями объектов; если объектов больше, чем наш желаемый размер страницы, получаем ещё token для следующей страницы. Нормально? Более чем!

Вот только в реальности при запросе с указанным размером страницы в 100 можно запросто получить ответ с тремя (!!!) объектами и token'ом следующей страницы. На которой будет 62 объекта. А на следующей — 15. Да, чаще будут страницы по сотне (если библиотека достаточно большая), но далеко не всегда. Бывают страницы вообще без объектов, в смысле в JSON вообще не будет поля "mediaItems"

Но это-то ладно, на то и программист, чтобы предусмотреть и обработать любой мусор на входе. Но некоторые объекты вообще не попадают в выдачу… Ну, то есть в документации написано, что в выдаче будут все объекты, кроме тех, что в архиве или в корзине. Вот есть в веб-интерфейсе Google Фото фотография, не в архиве, не в корзине — а в выдаче её нет. Вообще нет как объекта. И ошибок нет. Ну, потому что нефиг, не нужна тебе через API эта фотография.

Шоб у вас в Google такая система доступа в туалеты для сотрудников была, какой вы API состряпали!

визуализация работоспособности Google Library APIPhoto by Alistair MacRobert on Unsplash

Evgeny Kuznetsov

Go — очень клёвый и удобный язык, но иногда его молодость всё-таки даёт о себе знать… 33 строки конфига для Travis CI, из них 30 реально выстраданы… https://github.com/nekr0z/gphotosync/blob/master/.travis.yml

Evgeny Kuznetsov

gphotosync

1 min read

Сам себя не похвалишь — так и будешь ходить, как оплёванный…

Я всё-таки сделал то, о чём писал, причём и библиотеку форкнул, и приложение починил, доработал и выложил на GitHub. Вроде даже под OS X и Windows должно работать (хотя я не проверял).

Вот я молодец! (Произносится с интонацией Хлудова в исполнении Виктора Добронравова).

Evgeny Kuznetsov

Мишель Уэльбек: «Покорность»

2 min read

Французских авторов я читаю очень мало: всё-таки недолюбливаю переводную литературу, а языком этим не владею совсем. Тем больше впечатлений; «Soumission» («Покорность» в переводе Марии Зониной) Мишеля Уэльбека (Michel Houellebecq).

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

Я, пожалуй, этого автора ещё почитаю. Хорошие литераторы — вообще редкость, а уж среди фантастов… А уж среди авторов социальной фантастики ближнего прицела… А литератор он действительно прекрасный, настолько, что само фантдопущение отходит далеко на десятый план, и набрасывается на читателя уже после переворота последней страницы. Кстати, если у вас есть друг, который ценит литературу но не любит фантастики, а вы давно мечтали найти фантастическую книжку, которая ему понравится — так вот это именно она.

Настоятельно рекомендую!

Обложка книги

Мне немного неловко открыто признаваться, что я только что прочёл эту книгу: подарили мне её уже некоторое время тому назад, но книги на бумаге настолько неудобны, что добрался я до неё только вот. Но даже рискуя навлечь на себя праведный гнев и обиду дарителя, молчать не могу: отличная книга!