LINUX.ORG.RU

Сообщения KivApple

 

Сборка buildroot для Orange Pi PC

Хочу собрать buildroot для Orange Pi PC. Скачал версию RC1 (сначала пробовал LTS-версию с абсолютно тем же результатом).

Распаковываю, выполняю:

$ make orangepi_pc_defconfig
$ make

Оно собирается какое-то время, а потом выдаёт ошибку:

freadahead.c: In function 'freadahead':
freadahead.c:92:3: error: #error "Please port gnulib freadahead.c to your platform! Look at the definition of fflush, fread, ungetc on your system, then report this to bug-gnulib."
  #error "Please port gnulib freadahead.c to your platform! Look at the definition of fflush, fread, ungetc on your system, then report this to bug-gnulib."
   ^~~~~
make[4]: *** [Makefile:1915: freadahead.o] Error 1
make[4]: *** Waiting for unfinished jobs....
fseeko.c: In function 'rpl_fseeko':
fseeko.c:110:4: error: #error "Please port gnulib fseeko.c to your platform! Look at the code in fseeko.c, then report this to bug-gnulib."
   #error "Please port gnulib fseeko.c to your platform! Look at the code in fseeko.c, then report this to bug-gnulib."
    ^~~~~
make[4]: *** [Makefile:1915: fseeko.o] Error 1

Хост-система: Arch Linux.

В чём может быть проблема?

 ,

KivApple
()

Передача видео по сети с низкой задержкой

Имеется вебкамера, одноплатник orange pi (сначала был raspberry pi, но один аппаратный USB на всё приводит к куче проблем) и wifi-свисток. Требуется передавать видео 640х480 30fps на смартфон под управлением ОС Android. Важный момент - минимальная задержка (не больше 200 миллисекунд), пока это физически возможно (потом можно терять кадры). Со стороны одноплатника может быть как стандартное ПО (какой-нибудь ffmpeg), так и самописное, со стороны Android самописное (передача видео не единственная функция), но, конечно же, можно использовать библиотеки.

В какую сторону копать?

Пока сделал свой велосипед - захватываю кадры с камеры с помощью V4L2, жму с помощью libjpeg-turbo, разбиваю на части по несколько сотен байт, шлю по UDP (при этом шлю куски JPEG по мере их появления по мере сжатия). С другого конца принимаю пакеты, собираю JPEG (в каждом пакете передаётся его порядковый номер, полный размер JPEG и смещение - каждый кадр собирается в независимом буфере, как только собирается целый кадр, он отображается, а все несобранные кадры с меньшим порядковым номером отбрасываются и в будущем игнорируются), распаковываю и вывожу через OpenGL.

Между одноплатником и ноутбуком работает отлично и задержка низкая. А вот между одноплатником и смартфоном работает очень нестабильно. Изредка бывает 30fps, но обычно чуть ли не половина кадров теряется. Пробовал как подключать одноплатник и смартфон к готовой точке доступа (и даже подключать одноплатник к точке доступа по кабелю), так и делать точку доступа из одноплатника. Смартфон спокойно играет через Интернет Full HD YouTube, так что ресурсов у него и сети хватает (конечно, YouTube пожат лучше, чем JPEG, но сильно большее разрешение компенсирует и битрейт должен быть не меньше).

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

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

Я не прошу готового решения, только направление.

 , , ,

KivApple
()

Plasma и монтирование устройств

Поставил на чистый Arch Linux плазму. Всё хорошо, но ни соответствующий плазмоид, ни Dolphin не показывают и не монтируют флешки. Пользователь добавлен в группу wheel:

$ id
uid=1000(kiv) gid=985(users) группы=985(users),3(sys),50(games),987(uucp),998(wheel)

В чём может быть проблема?

UPD: Обнаружилось, что с другими флешками проблем нет (они отображаются и монтируются). А особенность этой была в том, что единственный раздел на ней имел тип EFI System. KDE посчитал, что такие разделы надо скрывать по дефолту.

 , ,

KivApple
()

Двустронняя связь приложений

В bash (и не только) есть конвейеры. Например, можно написать что-нибудь вроде (пример немного притянутый за уши):

ls | grep foo | less

А можно ли как-то средствами шелла связать два процесса двунаправленно? Чтобы stdout первого уходил на stdin второго, а stdout второго уходил на stdin первого.

 ,

KivApple
()

Android и геймпад

Имеется смартфон на Android и Bluetooth геймпад с 4 аналоговыми осями (2 стика) и 2 цифровыми (кнопки вверх-вниз-вправо-влево, «крестовина») + ещё кнопки.

Я считываю кнопки с помощью переопределения dispatchKeyEvent и оси с помощью dispatchGenericMotionEvent у Activity. И у меня 2 проблемы:

1) Мне удалось считать только 2 аналоговых оси из 4 с помощью ev.getAxisValue(MotionEvent.AXIS_X) и ev.getAxisValue(MotionEvent.AXIS_Y). Я не могу разобраться, как считать ещё две оси, хотя ОС их точно чувствует - движения второго стика тоже вызывают dispatchGenericMotionEvent.

2) Движения первого стика эмулирует «крестовину». То есть я получаю события о нажатии кнопок вверх-вниз-вправо-влево и при их реальном нажатии, и при движении первого стика. А я так не хочу. Я хочу иметь возможность различать эти события. Как?

 ,

KivApple
()

Ищу одноплатник

Требования:

1) Хотя бы один USB-порт. Но такой, чтобы он был полноценным и к нему не было подключена куча устройств через хаб (как у малины через один USB заведён Wi-Fi, Ehternet и ещё 4 порта через хаб). К этому порту будет подключена одна специфическая железка, которая требует высокую пропускную способность и практически не работает, если через этот же порт идёт активный обмен с другими устройствами (например, Wi-Fi).

2) Wi-Fi. Можно без него, но тогда +1 USB порт, удовлетворяющий пункту 1 (то есть Wi-Fi и специфическая железа должны быть подключены к физически разным портам).

3) Хотя бы один UART. Можно без него, но тогда +1 USB порт, удовлетворяющий пункту 1. Возможно, нормально будет совместить USB-UART и Wi-Fi через хаб, ибо поток по UART идёт достаточно слабый.

4) Очень приветствуется поддержка mainline kernel, потому что чем новее ядро, тем допиленнее там драйвера на железку из пункта 1. При этом поддержка всего кроме вышеперечисленного не интересует (то есть неработающий звук, графика, GPIO кроме UART - не волнуют).

5) Производительность. Тут могу только относительные цифры предоставить. Cubieboard2 (Allwinner A20) немного не дотягивает по производительности до нужной. Raspberry Pi 3 имеет запас по производительности раза в 2 (но там огромные проблемы из-за того, что его упоротые разработчики подключили почти всю периферию через один USB порт).

6) Доступность в РФ (AliExpress не подойдёт, потому что в будущем этот проект будет тиражировать фирма-заказчик проекта и ей нужно будет делать закупки с чеками, договорами и т. д.). Цена не более 5к. В экстренном случае можно подумать о 7-8к.

Что может посоветовать ЛОР? Подойдут не только ARM-одноплатники, но и компьютеры-стики на x86. Лишь бы удовлетворяло вышеуказанным условиям.

 

KivApple
()

Передача данных по сети с низкой задержкой

Допустим, необходимо передавать поток данных примерно на 700 кбайт/сек по Wi-Fi между двумя устройствами (условия более-менее благоприятные в виде отсутствия обилия сетей вокруг и использования не самых китайских Wi-Fi модулей). При этом допускается иногда терять часть данных, зато первоочередным моментом является низкая задержка (менее 100 мс).

Как следует подходить к данной задаче? Вероятно, использовать UDP. А какой размер пакета? Ограничиться безопасными с точки зрения MTU 1200 байтами? Или передавать больше, забив на фрагментацию? Может быть есть какие-то особые настройки ядра (передающая система полностью под моим контролем, принимающая нет) и конкретных сокетов для уменьшения задержки?

Я кое-что сделал и у меня получилась задержка 150-200 мс в сети (то есть от первого send до последнего recv). Хочу её уменьшить и мне интересно в какую сторону копать.

 ,

KivApple
()

Где Gnome Shell хранит свои внутренние JS?

Не знаю, проявляется ли это у всех или только у меня, но в какой-то момент Gnome Shell начинает сильно тормозить и спамит в логи ошибкой в модуле tweener.js. Я загуглил полный текст ошибки и обнаружил, что она уже давно известна.

Более того, есть два Pull Request вроде как исправляющие её:

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/4

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/11

Второй PR является предельно простым (тупо меняет 2 строчки в одном скрипте местами) и по комментариям решает мою проблему, но его закрыли в пользу первого, поскольку первый теоретически должен решать больше проблем, а не только один частный случай. Только вот с тем более сложным патчем они уже больше 5 месяцев не могут договориться, что с ним делать «а вдруг он вызовет другие регрессии» и т. д.

То есть простой патч они не приняли, потому что «есть патч лучше», а «патч лучше» они не приняли, потому что у них никак не дойдут руки в нём разобраться. А пользователи как обычно страдают, да. Раз у них нет сил/времени/желания разбираться сейчас со сложным патчем, могли бы принять простой, с учётом того, что какого-то явного быдло-кода он не содержит, а потом бы уже разбираться со сложным. Но нет, у них же интерпрайз, так нельзя ни в коем случае!

В общем, мне лениво пересобирать gnome-shell. Не могу ли я найти в уже установленном в системе заветный файлик и пропатчить его ручками? JS по идее не должен компилироваться, так что должен лежать на ФС в исходном виде. Да, мне придётся вносить изменения после каждого обновления пакета, но я это автоматизирую скриптом, так что меня вполне это устраивает. Главное чтобы работало.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/11/diffs

Куда попадает при установке файл js/ui/tweener.js?

 ,

KivApple
()

Plymouth висит в фоне и жрёт CPU

Arch Linux. Gnome 3. GDM. Plymouth.

После входа в систему в top видно процесс:

@usr/bin/plymouthd --mode=boot --pid-file=/run/plymouth/pid --attach-to-session

Который жрёт стабильно 2% CPU. Это не так много, но не даёт уснуть процессору при бездействии и влияет на энергопотребление.

Если не следовать арчевики и не включать сервис gdm-plymouth вместо gdm, то процесс висеть не остаётся. Однако тогда gdm категорически не хочет стартовать в wayland-режиме (и не только сам не стартует, но и запустить основной сеанс в этом режиме не даёт), а при старте самого gdm происходит смена видеорежима (при запуске через gdm-plymouth такого не происходит и происходит плавный переход от анимации загрузки к gdm).

В чём может быть проблема?

 , ,

KivApple
()

Linux и Bluetooth-мышь

Имеется трекбол Logitech MX Ergo. Хочется завести его в режиме Bluetooth, чтобы не занимать порт ноутбука ресивером. Он вполне нормально заводится, но через какое-то время начинаются лаги - курсор двигается дёрганно, либо может вообще не двигаться какое-то время после долгого неиспользования. Bluetooth-адаптер:

Bus 001 Device 002: ID 0a5c:6412 Broadcom Corp.

Что я уже сделал?

1) Включил в /etc/default/tlp USB_BLACKLIST_BTUSB=1 (отключение usb auto-suspend для Bluetooth-адаптеров).

2) Создал файл /etc/bluetooth/input.conf следующего содержания:

# Configuration file for the input service
# This section contains options which are not specific to any
# particular interface
[General]

# Set idle timeout (in minutes) before the connection will
# be disconnect (defaults to 0 for no timeout)
IdleTimeout=0

#Enable HID protocol handling in userspace input profile
#Defaults to false(hidp handled in hidp kernel module)
UserspaceHID=true

После данных манипуляций Bluetooth стал работать стабильнее (до этого мог вообще уснуть и не проснуться до перезагрузки), но проблемы сохранились.

На другом ноутбуке с Windows всё отлично работает, даже после долго бездействия нет ни малейшего лага при начале движения. Так что проблема именно в настройках/драйверах.

Ах да, если что проблема не зависит от того, работает ли ноутбук от батареи или от сети.

 ,

KivApple
()

Особая разметка диска

Вопрос на грани между офтопиком и онтопиком. Хочу запилить себе загрузочную флешку с Linux. Проблема в том, что помимо этого хочется таскать на ней файлы между самыми разными машинами, включая Windows. Соответственно, на ней будет два раздела - один в FAT для таскания файликов и один в ext4 с корнем Linux.

Офтопик, разумеется, ext4 не поддерживает и поэтому при обнаружении предлагает форматировать. Конечно же, это окошко можно закрыть, но раздражает + эту флешку могут втыкать в свои компьютеры другие люди и кто-нибудь да решит нажать дефолтный выбранный вариант с печальными для меня последствиями.

Задача: оформить таблицу разделов таким образом, чтобы Linux видел 2 раздела, а Windows только один. Устраивает вариант с намеренным внесением ошибок в таблицу разделов, чтобы вызвать двоякую интерпретацию её содержимого разными ОС.

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

 , ,

KivApple
()

Сохранение/загрузка вещественных чисел в файл

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

С целыми числами всё понятно - используем типы фиксированной разрядности (типа int32_t), также при сохранении переводим к фиксированному порядку байт (либо всегда в little-endian, либо всегда в big-endian) как это делает htonl и аналоги. По идее этого должно быть достаточно.

А что насчёт float/double? Насколько их внутреннее представление может отличаться между платформами, поддерживающими стандарт Си? Как можно максимально эффективно преобразовать их в единую форму для сохранения и обратно? (может быть есть какие-то стандартные функции или хотя бы хорошие библиотеки, либо вовсе достаточно 2-3 строчек без всяких библиотек).

 

KivApple
()

О трекболах

У меня сломалась мышь и теперь надо покупать новую. И тут я такой подумал «а не попробовать ли что-нибудь новенькое».

Что думает о трекболах lor?

Если что для меня не проблема попривыкать какое-то время, главное чтобы в итоге было нормально.

Стоит ли пробовать (реквестируются истории успеха и истории неуспеха, мнения теоретиков не очень интересны)? Насколько важно крутится ли шар большим пальцем или указательным? Просто приглянулся Logitech MX ergo, а там шар крутится большим пальцем, а некоторые пишут это не Ъ.

Ну и да, кончено же выбранный трекбол должен хорошо работать под linux.

 ,

KivApple
()

Рейтинг в игре - персональные данные?

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

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

Нужна ли мне политика конфиденциальности (кстати, приложение будет выложено на Google Play)?

 

KivApple
()

Хранение локализованных данных в базе данных

Рассмотрим игрушечный пример. Допустим, я разрабатываю онлайн-магазин автомобилей (нет). У каждой марки машины есть название, мощность двигателя и описание. При этом название и мощность двигателя интернациональны, а описание должно быть разное для разных языков. И мне надо всё это сохранить в SQL базу данных (скажем, MySQL).

Я придумал такую конструкцию:

Таблица автомобилей:
    id (число)
    name (строка)
    power (число)
    description_id (число)

Таблица переводов:
    id (число)
    lang_code (строка)
    text (строка)

Соответственно, чтобы получить локализованное описание автомобиля, мы можем сделать запрос к таблице переводов, где id будет равен description_id, а lang_code будет равен нужному языку.

Особенности моей схемы: 1 таблица на все локализованные данные вообще. Можно добавить в таблицу автомобилей колонку localized_name_id, которая будет ссылаться на ту же таблицу переводов (но другую запись). Удалять автомобили тоже легко - нужно просто удалить все записи из таблицы переводов с соответствующим id. Также таблица переводов будет использоваться не только для таблицы автомобилей, но и, скажем, для таблицы кофеварок (у которых могут быть совсем другие наборы локализованных полей).

Таблица переводов, разумеется, имеет составной первичный ключ - id и lang_code (причём сначала идёт id).

А теперь два вопроса:

1) Насколько адекватно такое решение?

2) Как это уложить на ORM SQLAlchemy и Python? Если нет, то, возможно, ORM для других языков умеют такое (например, JPA в Java)? Или я хочу совсем странного?

UPD: Небольшая иллюстрация моего решения:

class Translation(db.Model):
	id = db.Column(db.Integer, primary_key=True)
	code = db.Column(db.String(2), primary_key=True)
	text = db.Column(db.Text, nullable=False)


class Car(db.Model):
	id = db.Column(db.String(64), primary_key=True)
	name_id = db.Column(db.Integer)
	name = db.relationship('Translation', primaryjoin=name_id == Translation.id, cascade='all, delete-orphan')
	description_id = db.Column(db.Integer)
	description = db.relationship('Translation', primaryjoin=description_id == Translation.id, cascade='all, delete-orphan')
	power = db.Column(db.Integer)

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

 , , ,

KivApple
()

Простейшая авторизация

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

Можно ли забить на авторизацию в самом приложении и просто включить авторизацию типа http basic auth в nginx, который будет выступать в роли реверс прокси для приложения? Разумеется, https настроен тоже будет.

Насколько такой вариант безопасен? Или это не Ъ и надо обязательно городить свою систему авторизации в самом приложении?

 ,

KivApple
()

Найти старый компьютерный журнал

Помню много лет назад читал несколько выпусков какого-то журнала про компьютеры. Из примечательных вещей, что там было:

1) Обзор какого-то Linux

2) Описание технических деталей съёмок отечественных фильмов вроде «Ночного дозора», «Мастер и Маргарита» с акцентом на то, какие передовые технологии трёхмерной графики использовались и с какими проблемами в этом плане они сталкивались

3) Описание эксперимента с изготовлением батареи питания из картошки и какой-то кислоты и последующее запитывание от этой штуки какой-то раритетной материнки (потому что она требовала гораздо меньше питания, чем современные на тот момент - всяких атомов с TDP 5 ватт ещё не завезли тогда). Там ещё использовалось несколько сотен монеток в качестве электродов. Предлагалось сходить в банк и разменять несколько рублей по однокопеечным монетам (мол, они, конечно офигеют, но по закону отказать не смогут), которые потом предстоит прожарить на сковородке для разрушения оксидной плёнки.

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

Кажется, журнал назывался «Подводная лодка». Однако, он давно перестал выходить (и, поговаривают, перед этим скатился, но вышеперечисленные вещи ИМХО годнота), сайта больше нет. На торрентах смог найти только выпуски до 2000 года, но они совсем уж древние, а хочется чего-то поактуальнее, вроде того, что перечислено выше.

Может быть, у кого-то сохранилось что-нибудь? А то хочется немного понастальгировать, я тогда был школьником и только начинал тыкать компьютеры.

Тема не совсем варез, потому что:

1) Вроде как выпуски в PDF выкладывались на официальном сайте для свободной загрузки (но этого сайта больше нет)

2) Журнал уже много лет как сдох и его в любом случае уже нельзя купить у авторов, поэтому упущенной выгоды они от копирования понести не могут, да и нет уже заинтересованного юрлица претензии предъявлять.

 

KivApple
()

Проблема с подключением к OpenVPN

Имеется OpenVPN сервер. Всё нормально работало и я к нему мог подключаться из любого места. Однако затем начались проблемы с одним из публичных Wi-Fi - при подключении к VPN с него подключиться не удаётся. Через мобильный интернет или через другой Wi-Fi всё нормально получается.

Логи со стороны сервера:

Apr 07 08:08:09 suigintou-0 openvpn[361]: 77.158.188.58:60878 TLS Error: TLS key negotiation failed to occur within 60 seconds (check your network connectivity)
Apr 07 08:08:09 suigintou-0 openvpn[361]: 77.158.188.58:60878 TLS Error: TLS handshake failed                                                                                                                                     
Apr 07 08:08:09 suigintou-0 openvpn[361]: 77.158.188.58:60878 Fatal TLS error (check_tls_errors_co), restarting                                                                                                                   
Apr 07 08:08:09 suigintou-0 openvpn[361]: 77.158.188.58:60878 SIGUSR1[soft,tls-error] received, client-instance restarting  
Apr 07 08:08:09 suigintou-0 openvpn[361]: 77.158.188.58:60878 TLS Error: TLS key negotiation failed to occur within 60 seconds (check your network connectivity)
Apr 07 08:08:09 suigintou-0 openvpn[361]: 77.158.188.58:60878 TLS Error: TLS handshake failed                                                                                                                                     
Apr 07 08:08:09 suigintou-0 openvpn[361]: 77.158.188.58:60878 Fatal TLS error (check_tls_errors_co), restarting                                                                                                                   
Apr 07 08:08:09 suigintou-0 openvpn[361]: 77.158.188.58:60878 SIGUSR1[soft,tls-error] received, client-instance restarting  

Логи со стороны клиента:

Apr 07 10:06:24 dell-xps-13-9350 nm-openvpn[27319]: OpenVPN 2.4.5 x86_64-pc-linux-gnu [SSL (OpenSSL)] [LZO] [LZ4] [EPOLL] [PKCS11] [MH/PKTINFO] [AEAD] built on Mar  1 2018
Apr 07 10:06:24 dell-xps-13-9350 nm-openvpn[27319]: library versions: OpenSSL 1.1.0h  27 Mar 2018, LZO 2.10
Apr 07 10:06:24 dell-xps-13-9350 nm-openvpn[27319]: WARNING: No server certificate verification method has been enabled.  See http://openvpn.net/howto.html#mitm for more info.
Apr 07 10:06:24 dell-xps-13-9350 nm-openvpn[27319]: NOTE: the current --script-security setting may allow this configuration to call user-defined scripts
Apr 07 10:06:24 dell-xps-13-9350 nm-openvpn[27319]: TCP/UDP: Preserving recently used remote address: [AF_INET]XXX.XXX.XXX.XXX:443
Apr 07 10:06:24 dell-xps-13-9350 nm-openvpn[27319]: Attempting to establish TCP connection with [AF_INET]XXX.XXX.XXX.XXX:443 [nonblock]
Apr 07 10:06:27 dell-xps-13-9350 nm-openvpn[27319]: TCP connection established with [AF_INET]XXX.XXX.XXX.XXX:443
Apr 07 10:06:27 dell-xps-13-9350 nm-openvpn[27319]: TCP_CLIENT link local: (not bound)
Apr 07 10:06:27 dell-xps-13-9350 nm-openvpn[27319]: TCP_CLIENT link remote: [AF_INET]XXX.XXX.XXX.XXX:443
Apr 07 10:06:27 dell-xps-13-9350 nm-openvpn[27319]: NOTE: UID/GID downgrade will be delayed because of --client, --pull, or --up-delay
Apr 07 10:07:25 dell-xps-13-9350 NetworkManager[528]: <warn>  [1523088445.5044] vpn-connection[0x55b2d4eb2730,e5d91e4c-8e5a-4b31-b44c-f378ba636888,"suigintou-0",0]: VPN connection: connect timeout exceeded.
Apr 07 10:07:25 dell-xps-13-9350 nm-openvpn-serv[27316]: Connect timer expired, disconnecting.
Apr 07 10:07:25 dell-xps-13-9350 NetworkManager[528]: <warn>  [1523088445.5149] vpn-connection[0x55b2d4eb2730,e5d91e4c-8e5a-4b31-b44c-f378ba636888,"suigintou-0",0]: VPN plugin: failed: connect-failed (1)
Apr 07 10:07:25 dell-xps-13-9350 nm-openvpn[27319]: SIGTERM[hard,] received, process exiting

OpenVPN сервер висит на 443 TCP порту, чтобы быть доступным даже из тех сетей, где разрешён только 80 и 443 порты.

Что случилось? Администраторы публичного Wi-Fi прикрутили некий DPI для того, чтобы резать VPN (конфиги ничего не менялись, всё по-прежнему работает, если использовать другие выходы в сеть)? Можно ли с этим как-то бороться?

 

KivApple
()

Qt for Android

Хотелось бы услышать мнение о сабже от людей, которые его тыкали более глубоко, чем простой запуск Hello world (это я уже сделал). Раньше тыкал его пару лет назад и помню, что он был сыроват (в том плане, что некоторые базовые вещи работали не совсем хорошо, вплоть до каких-то проблем с кнопкой «Назад»), но уже не помню, что мне не понравилось, чтобы проверить. Как оно сегодня? Production ready или нет?

С ходу могу назвать два преимущества - Qt API куда продуманней графической библиотеки Android, которая состоит из кучи прослоек совместимости, которые при этом не дают идентичного поведения на разных версиях ОС («прослойка совместимости» даёт лишь заглушки, либо простейшие реализации нужных функций, чтобы приложение просто не упало из-за ненайденных классов на старых версиях ОС). А второе - возможность легче поддерживать несколько платформ (например, Desktop + iOS + Android, бизнес-логику и немалую часть интерфейса можно делать общими).

Пока знаю и как минимум один недостаток - приложение будет весить не меньше около 20 мегабайт, потому что Qt жирный (дефолтные библиотеки Android включены в ОС, это не значит, что они менее жирные).

Помимо общих впечатлений интересуют и конкретные вопросы:

1) Qt достаточно допилен для Android, чтобы пришлось писать свой Java-код только для каких-нибудь специфических вещей типа виджетов?

2) Qt обеспечивает не худшую производительность (в теории C++ быстрее жабы, но на практике многое зависит от качества кода и того, и другого)?

3) Ситуация с лицензией аналогична десктопной версии? То есть, несмотря на активное навязывание платной версии на официальном сайте, на самом деле имеется лишь обязанность раскрывать в OpenSource правки в сам Qt (что для большинства проектов не является критичным, либо вовсе не требуется), а прикладное приложение по-прежнему может быть закрытым.

Ну и да. QWidget или QML? Первое я хорошо знаю, но когда-то где-то слышал, мол сейчас в основном разработчиками Qt пилится второе.

 ,

KivApple
()

Инициализация std::map

Хочу иметь map, задающий связь между std::type_info и функцией. Выглядит так:

std::map<std::type_info, std::function<std::string(const std::any&)>> serializers;

Я могу добавлять в него элементы так:

serializers.emplace(typeid(void), [] (const std::any&) -> std::string {
	return "null";
});

А я хочу сразу задать содержимое при объявлении:

std::map<std::type_info, std::function<std::string(const std::any&)>> serializers = {
	{ typeid(void), [] (const std::any&) -> std::string {
		return "null";
	} }
};

В итоге получаю ошибку, что не наден подходящий конструктор.

Разумеется, стандарт C++17 включен. Пробовал GCC и Clang актуальных версий.

Что я делаю не так?

 

KivApple
()

RSS подписка на новые темы