Этот сайт — моя персональная записная книжка. Интересны мне, по большей части, программирование, история и события из моей жизни.

Позднее Ctrl + ↑

XBM vs. Брайль

Мне в комментариях к предыдущей заметке задали в вопрос — а насколько графика, представленная шрифтом Брайля, проигрывает по размеру формату XBM? Я прикинул, что должна даже выигрывать — всё-таки XBM весьма многословный формат, предназначенный, прежде всего, для встраивания картинок в программы на языке Си.

Давайте посмотрим на какую-нибудь небольшую картинку:

#define bullet_width 7
#define bullet_height 7
static char bullet_bits[] = {
   0x1c, 0x3e, 0x5f, 0x3f, 0x5d, 0x2a, 0x14};

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

В итоге размер файла можно примерно оценить на как 77 + 7×7/(8/5) ≈ 107 байт. В реальности чуть больше из-за форматирования.

Если же перевести эту картинку в шрифт Брайля, то всё получится куда компактнее. Каждый символ шрифта занимает три байта и кодирует сразу восемь точек (2×4), плюс надо учесть в расчётах переводы строк: ceil(7/4) × (ceil(7/2) × 3 + 1) = 26 байт.

А есть ли условия, при которых XBM был бы компактнее его представления в Брайле?

Логика подсказывает, что это должны быть какие-то граничные случаи, вроде картинки в один пиксель по какому-то из измерений — в Брайле всё равно придётся завать восемь точек, как ни крути.

Я наугад выбрал разрешение 1×100 и угадал: 77 + 1×100/(8/5) ≈ 140 байт против ceil(1/4) × (ceil(100/2) × 3 + 1) = 151 байт.

Добавлено позднее: я не знаю как решить задачу нахождения этого порога аналитически, поэтому решил перебором, написав программу на языке R:

lhs <- \(w, h) ceiling(w/4) * (3 * ceiling(h/2) + 1)
rhs <- \(w, h) 77 + (5 * w * h) / 8

holds <- \(w, h) lhs(w, h) > rhs(w, h)

W <- 500
H <- 500

min_h <- \(w) { i <- which(holds(w, 1:H))[1]; if (is.na(i)) NULL else i }
min_w <- \(h) { i <- which(holds(1:W, h))[1]; if (is.na(i)) NULL else i }

for (w in 1:W) {
  if (is.null(h <- min_h(w))) break
  cat(sprintf("w = %d, h min = %d\n", w, h))
}

for (h in 1:H) {
  if (is.null(w <- min_w(h))) break
  cat(sprintf("h = %d, w min = %d\n", h, w))
}

Получились следующие значения:

w = 1, h min = 87
w = 2, h min = 299
h = 1, w min = 201

То есть картинки 1×87, 2×299 и 201×1 (бо́льшую сторону можно увеличивать, это увеличит разрыв) занимают в Брайле больше, чем в XBM. В реальности это не точные границы, так как внутри XBM указывается название картинки, которое может быть разного размера.

Рисование азбукой Брайля

Если помните, недавно я, вдохновлённый строчкой из песни «в каждой строчке — только точки», пытался выяснить что вообще можно записать точками, если использовать азбуку Морзе. Мне тогда один из комментаторов напомнил про шрифт Брайля — тактильный шрифт для слепых, состоящий из точек.

Он есть в Юникоде, поэтому на экране им можно написать что угодно и, как и требуется в песне, там будут только точки. Я тогда подумал, что «что угодно» можно трактовать и шире — если постараться, точками этого шрифта можно выводить в консоли любую графику.

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

Шрифт Брайля бывает двух систем — шеститочечный и восьмиточечный. Для целей рисования удобнее брать восьмиточечный — между символами есть зазоры, как если бы это были обычные буквы, и нам выгоднее использовать более насыщенный точками элемент.

Таким образом у нас получается блок 2×4, где мы, подбирая код символа, можем получить любое сочетание точек. Я боялся, что в расположении точек нет никакой системы, но к моему счастью оказалось, что каждая точка, которую надо закодировать, отображается на конкретный бит численного представления нужного символа.

Оставалось только решить, что я, собственно, буду выводить. Это должно быть что-то простое и одноцветное — набор из восьми точек можно покрасить только в один цвет, поэтому лучше цвета не использовать вообще. Поскольку в последнее время я много вожусь с браузером «Виола», где много однобитной графики в формате XBM, то я решил выводить картинки в этом формате — тем более, что он текстовый, что мне на руку.

Так, к примеру, выглядит картинка с логотипом «Виолы» в этом формате:

#define violaLogo_width 32
#define violaLogo_height 20
static char violaLogo_bits[] = {
   0xe0, 0x03, 0x00, 0x00, 0x18, 0x0c, 0x0f, 0x00, 0xe4, 0x8b, 0x30, 0x00,
   0xfa, 0x8f, 0x4f, 0x00, 0xfa, 0xff, 0xff, 0x00, 0xfd, 0xff, 0xff, 0x50,
   0xfd, 0x2f, 0xe9, 0xff, 0xfd, 0x07, 0x00, 0x00, 0x7d, 0xfc, 0xff, 0x50,
   0xbd, 0xfd, 0xff, 0x00, 0xba, 0x3b, 0x7f, 0x00, 0x3a, 0xdb, 0x1e, 0x00,
   0x7c, 0xd7, 0x00, 0x01, 0x78, 0xd6, 0x06, 0x19, 0xe0, 0xce, 0x00, 0x25,
   0x00, 0xcc, 0x32, 0x21, 0x00, 0xd8, 0x5a, 0x39, 0x00, 0xf0, 0x6a, 0x25,
   0x00, 0x60, 0x32, 0x79, 0x00, 0x00, 0x00, 0x00};

Алгоритм обещал получиться простым, поэтому для реализации я выбрал bash, тем более, что такую обработку там делать иногда даже проще, чем в большинстве других языков. Вот, например, вся функция чтения данных из файла картинки, получилось очень просто:

load_xbm() {
    local file="$1" hex h

    W=$(awk '/^#define.*_width/ {print $3;exit}' "$file")
    H=$(awk '/^#define.*_height/{print $3;exit}' "$file")
    BPR=$(( (W + 7) / 8 ))

    for h in $(sed -n '/{/,/}/{/{/d;s/}.*//;s/0x//g;y/,/ /;p;}' "$file"); do
        BYTES+=($[16#$h])
    done
}

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

Блокнот с моими попытками объяснить себе как будут выводиться точки

В итоге получился небольшой скрипт, в котором, если убрать все пустые строки, около полусотни строчек. Я его выложил, как водится, на «Гитхаб».

Пример вывода двух картинок, взятых из набора браузера «Виола»

«Мышастик»: ретрансляция

Как я уже писал недавно, казанская сеть «мышастика» (но, может, так везде — не слежу) была недавно реорганизована: ноды разделились на носимые, которые не пересылают чужие сообщения, и стационарные, закреплённые где-нибудь повыше — они нужны для поддержки сети.

Я тоже, следуя тренду, повесил на окно «бумагу» (Heltec Wireless Paper), которую купил с рук по случаю. Это та самая нода, которую я два месяца назад отдавал для ретрансляции на высотном здании в центре. Только у неё теперь другой корпус и антенна, сделанная одним из участников сообщества.

Время от времени я немного передвигаю антенну, чтобы выбрать лучшую позицию, но никакой особой точки найти пока не удалось: приём и передача куда больше зависят от погоды. В зависимости от того, есть осадки или нет, пинги до знакомых точек могут возрастать с 15 секунд до, например, 40 — или сигнал вообще может перестать проходить.

Если кто-то удивился таким длинным пингам, то «мышастик» не про скорость, а про дальность, поэтому скорости тут небольшие — чтобы сигнал можно было с большей вероятностью восстановить на другом конце.

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

«Виола»: тянущееся окно

Отложил пока в сторону свой проект до дописыванию браузера «Виола», поскольку исчерпал все токены на своём тарифе в «Курсоре». Там, конечно, остались бесплатные модели («Грок», например), но они годятся только для чего-то очень простого, а я таких задач пока не вижу.

Зато случилось интересное — поиск в интернете принёс видео «Viola www y Erwise dos de los navegadores web pioneros», где какой-то исследователь истории запускает оригинальную «Виолу» в виртуальной машине. Этот видеоролик, наконец, дал мне ответ на вопрос — тянулось окно «Виолы» или нет. Оказывается, тянулось.

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

Раз это не так, то после перерыва надо будет вернуться к этой задаче. Попытаюсь решить её с «Опусом 4.5», пока это умнейшая сеть для программирования.

Кадр из ролика «Viola www y Erwise dos de los navegadores web pioneros» («ViolaWWW и Erwise — два браузера-пионера»)

Не по дням, а по часам

Сегодня уникальный день — чтобы узнать примерную температуру на улице, можно смотреть не на градусник, а на часы.

Прогноз «Яндекс.Погоды»

Автостереограмма и роботы

На этой картинке я вижу четыре приподнятых участка

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

Я сделал несколько автостереограмм с рисунками, надписями и абстрактными фигурами и попробовал спросить у ЧатГПТ 5.2 что там нарисовано «в глубине». Ожидаемо, кроме галлюцинаций ничего не получил.

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

Оказалось, что если карта глубины почти плоская и пятна на ней очень абстрактные (я использовал близко расположенные буквы), то я могу сосчитать сколько таких «пятен» я вижу на картинке, а ЧатГПТ считает, что «в глубине» ничего нет, пусто.

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

Заблуждения и нейросети

Хочу собрать в одну заметку некоторые важные для меня статьи об общении с большими языковыми моделями (БЯМ).

  1. В статье «Mind Your Tone: Investigating How Prompt Politeness Affects LLM Accuracy» описывается эксперимент исследователей Университета Пенсильвании. Они обнаружили, что импульсивные и грубые формулировки приводят к более высоким показателям точности БЯМ, улучшая результат на несколько процентов;
  1. В статье «One Ruler to Measure Them All: Benchmarking Multilingual Long-Context Language Models» утверждается, что лучшим языком для промптов неожиданно оказался не английский, а польский. Английский занял лишь шестое место. Конечно, необходимо учитывать особенности эксперимента: были выбраны синтетические задачи и использовалось очень большое контекстное окно. Тем не менее, вопреки устоявшемуся мнению, возможно, в некоторых случаях английский язык для промптов — не лучший выбор;
  1. Две работы «When “A Helpful Assistant” Is Not Really Helpful: Personas in System Prompts Do Not Improve Performances of Large Language Models» и «The Impact of Role Design in In Context Learning for Large Language Models» вместе показывают, что задание структуры ответа (то есть подробная инструкция как ответить) в промпте улучшает качество ответа, но, не смотря на сложившуюся практику, задание социальной роли («ты — опытный психолог с 20-летней практикой») либо особо не влияет, либо даже ухуждает результат;
  1. Статья «Lost in the Middle: How Language Models Use Long Contexts» о том, что современные языковые модели, даже с расширенными окнами контекста, не умеют надёжно использовать длинный ввод: их точность резко зависит от позиции релевантной информации и имеет устойчивую U-образную форму — лучше всего модели работают, когда нужные сведения находятся в начале или в конце контекста, и заметно хуже, когда они расположены в середине. Это противоречит интуитивному «давайте напихаем модели побольше данных в промпт, у неё всё равно окно большое».

Дочка и шахматы

Дочка сегодня пришла расстроенная: в такси даже немного всплакнула — прошла в школе в третий тур по шахматам, но проиграла, заняла пятое или шестое место, не знает точно. Рассчитывала хотя бы на третье, но не сложилось.

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

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

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

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

Чужого ребёнка закрыл смайликом, чтобы уважить приватность

«Пол — это лава»

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

Дочка сейчас в третьем классе и один из предметов, который у них есть в программе — это «проектная деятельность». В его рамках она защищала на днях свой первый проект — игру «Пол — это лава», сделанную в среде «Роблокс».

Я попросил учителей прислать мне её игру, скачал «Роблокс Студио» и сделал несколько скриншотов.

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

Тут я из интереса свалился в лаву. Позже оказалось, что можно было специально ради этого и не стараться — все мои честные попытки дойти до конца заканчивались в ней. Первая же дорожка оказалась для меня непреодолимой. Вблизи она похожа на ксилофон, где надо перескакивать с одной пластины на следующую. Стоят «пластины» так, что рассчитать правильную длину прыжка очень сложно.

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

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

Фото кота в NanoKVM

Вчера, пока укладывал дочку, подыскивал почитать что-нибудь интересное на «Хабре» и набрёл на статью «Как я обнаружил скрытый микрофон в китайском NanoKVM». Микрофон там действительно есть и с него даже можно писать звук, но используют ли его китайцы в слежке,.. в общем, тут как в анекдоте — опять эта проклятая неизвестность!

Саму статью я читал невнимательно, потому что в самом её начале написано следующее:

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

Как я уже не раз писал — у меня такое бывает, что меня что-то начинает интересовать с такой силой, что остальное уходит на второй план. Вот и тут меня сильно заинтересовал кот. Что там за кот-то? Где на него посмотреть?

В интернете есть только миниатюра, поэтому пришлось вынуть фотографию самостоятельно. Я думал, там дел минут на пять, но возникли неожиданные препятствия.

На «Гитхабе» можно скачать бинарную прошивку, в которой, по идее, где-то лежит кот, но внутри файловая система EXT4, а она у меня на «Маке» не монтируется. Можно было бы смонтировать её на «Линуксе», — на работе их завались, но тут, как на зло, у меня почему-то перестал соединяться рабочий ВПН.

И тут я вспомнил, что Дима «DiBR» Радищев, один из блогеров первой волны, которого я читаю до сих пор, писал когда-то утилиту, которая вынимала джпеги из бинарного файла — он просто искал стандартный заголовок и сохранял сколько-то там сотен килобайт после него.

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

// Это не код для использования в серьёзном продукте, а одноразовая утилита
ini_set('memory_limit', -1);

const SIZE = 256_000;

$bin = file_get_contents($argv[1]);
$len = filesize($argv[1]);

for ($n = $offset = 0; $offset < $len; $offset += 2) {
    $offset = strpos($bin, "\xFF\xD8", $offset);
    if ($offset === false) {
        break;
    }

    $name = sprintf("%d.jpg", ++$n);

    file_put_contents($name, substr($bin, $offset, SIZE));
    @getimagesize($name) or unlink($name);
}

В общем, вот вам никому, кроме меня, не интересный кот. Я надеялся, что это некая «пасхалка», но нет — поискал его в интернете, оказалось, что это какой-то стандартный кот из клипарта. Здесь не на что смотреть, расходимся.

Фотография кота, найденная внутри бинарной прошивки NanoKVM

Украсили кафе к Новому году

Ребята на этой неделе украсили кафе к Новому году. Вчера с женой отвозили туда ёлочные украшения, напечатанные на 3Д-принтере и по случаю сфотографировали как сейчас выглядит украшенное кафе.

Ремонт нового помещения пока встал — управляющая приехала из отпуска и свалилась с какой-то импортной заразой. Что-то многие, прилетев из-за границы, чем-то болеют. Говорят сейчас некий гонконгский грипп ходит, может это он?

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

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

Программа «Parrot»

Как-то ехали с дочкой в такси и разговаривали о её программах на «Скретче». Дочка спросила — а не мог бы я показать мои детские программы. Я ответил, что они не сохранились, а сам задумался — а чего я там вообще писал-то?

Для первого компьютера, доступ к которому я получил — «Радио-86РК», я писал какой-то простенький текстовый редактор и интерпретатор машины Тьюринга. Потом, через много лет, понимание как работает эта машина пригодилась мне на курсе Дискретной математики в Университете. Больше программ под него не помню, хотя они точно были.

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

«Паррот» («Parrot» — «попугай») умела записывать в память компьютера звук с самодельного микрофона. У «Спектрума» звукового входа не было, но я его как-то подключил — я тогда довольно неплохо знал как он устроен на уровне «железа».

Сжатие, вроде бы, не использовалось — я помню, что память расходовалась очень быстро, при том, что использовалась вся доступная, даже экранная, поэтому меню было в верхней трети экрана.

Полученный звук можно было проиграть и сохранить на кассету («Спектрум» был подключен к кассетному магнитофону «Весна», программы загружались с кассет), откуда потом можно было загрузить его обратно в программу.

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

Позже у нас появился Интел-совместимый компьютер, но я уже ребёнком не был.

Очень условно изображённая программа «Parrot»

В каждой строчке — только точки…

Уверен, кто-нибудь такое уже делал, но мне было лень искать.

Я тут что-то вспомнил строку из песни «в каждой строчке — только точки» и подумал — а много ли слов можно записать азбукой Морзе, если использовать только точки? Взял первый попавшийся словарь, накидал программу на Пайтоне и проверил.

Букв, которые можно записать только точками совсем мало — «е»/«ё» (.), «и» (..), «с» (...) и «х» (....). Поэтому и слов получается очень мало.

Если выкинуть предлоги, союзы и междометия, то остаются только «её» (. .), «их» (.. ....), устаревшие «сих» (... .. ....) и «сие» (... .. .), «сиси» (... .. ... ..), «сисе» (... .. ... .) и самое длинное из найденных — «сессии» (... . ... ... .. ..).

Нейросеть помогла мне составить что-то похожее на осмысленное предложение из этих слов, но много с таким набором не сообщить: «сие — её сессии и их сессии, сии сессии — её сессии, и сии сессии — их сессии, и её сиси, и их сиси; хехе!». Что-то на церковнославянском.

Кстати, дальше в песне есть продолжение: «в каждой строчке — только точки после буквы „л“».

Если разрешить эту букву на первой позиции, то добавляется несколько новых слов — «лес», «лис», «лихие» и ещё несколько менее интересных. Нейросеть предлагает следующее: «cе лис, и сие — сессии, и сие — лихие сессии, и се — сие лес».

Сам я составил (ну) такое: «лих ИИ: их лисе — её лихие сессии и лес, хехе».

«Мышастик»: заменим интернет?

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

К сожалению, этого не случится, для этого не хватает двух вещей: скорости и покрытия.

Мышсеть в текущем её состоянии, похожа на пейджинговую — ноды разделились на носимые, которые в меш не входят, то есть они ничего не ретранслируют, и на стационарные — установленные где-нибудь на высоких этажах, которые уже и занимаются ретрансляцией. У меня тоже на окне висит «бумага» (Heltec Wireless Paper) с антенной Моксон.

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

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

В теории какое-то подобие интернета всё же можно было бы сделать — делать что-то типа сильно сжатых текстовых WAP-сайтов по протоколу DTN, но это сильно перегрузит сеть, она на такое не рассчитана.

Пример общения с одним из ботов

Почта Нидерландов

У нас как-то принято ругать «Почту России». Мне, если подумать, ругать её в последние годы совсем не хочется. Её бич только в слабой автоматизации приёма и выдачи посылок. Не знаю почему, но у конкурентов (например, в «Озоне» или «СДЕКе») я не вижу таких адских очередей.

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

На этом фоне почта Нидерландов меня очень разочаровала: у меня из Нидерландов доставляются в Китай часы, потому что только оттуда я смогу отправить их в Россию.

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

Ранее Ctrl + ↓