LINUX.ORG.RU

Сообщения emcode

 

Параметры ядра для сокетов

Есть приложение на Java, которое собирает условные логи. Приложение слушает TCP порт. К нему подключаются клиенты (совсем немного, от 3 до 5) и после подключения больше не отключаются (логи же). Все клиенты находятся в одном сетевом сегменте (свич, vlan, подсеть - всё одинаковое). Сервер клиенту ничего не пишет в ответ (и не должен), он просто читает с него TCP поток, разбивает на отдельные сообщения и скидывает в очередь для обработки (0 логики и задержек при чтении сообщений).

Проблема:

Спустя какое-то непродолжительное время, примерно 10 мин. с одного (и только одного) из клиентов начинают идти потери. Предположительно, это происходит во время кратковременных всплесков нагрузки. В дампе это видно как множественные Dup ACK и «previous segment not captured». Ну то есть, TCP нам говорит забейте на проверку ошибок на стороне приложения, я ГАРАНТИРУЮ доставку и … не гарантирует.

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

Отличие проблемного клиента от не проблемных только в том, что с него payload пожирнее (там XML на ~1Kb внутри, а в других нет) и пакеты бегут почаще. Соответственно, подозрение падает на TCP стек линукса (Centos 7) и параметры сокета, в частности.

Выкручивал параметры net.core.rmem_max и net.core.wmem_max до 1MB, что достаточно много. Контролировал, что и ОС и приложение увидели эти настройки. Не помогло.

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

 , , ,

emcode
()

Кернинг в Java приложениях

Помогите, пожалуйста, разобраться со шрифтами.

Дано: Fedora 37, KDE 5.27.4, X11. В Java приложениях некоторые буквы в шрифте липнут друг к другу.

Беглый гуглеж дал такую же проблему на SO. Цитата решения:

It is not a problem of JavaFX but a configuration issue on my Linux system. JavaFX needs subpixel rendering to position the glyphs correctly.

JavaFX like CoreText + DirectWrite, and unlike GDI + Swing uses unhinted glyphs with floating point accumulation of the positions. But the raster problem is that you need to align the glyph to discrete pixels In the subpixel case you have 3x the resolution to play with and the rounding to the raster grid is not obvious. If your linux system were configured to support LCD subpixel text I’d expect it to be similar to Mac .. modulo the fact that retina is hi-res and that the fonts will be different. So it is probably not something FX has control over .. you need to look at your settings. If freetype from your vendor is configured without LCD text support you may be out of luck

Я в шрифтах вообще на шарю, поэтому единственное что уловил из всего этого, что счастье наступит при включении LCD subpixel rendering.

В настройках шрифта KDE такой опции нет.

Попробовал сходить на арчевики и добавить вручную в ~/.config/fontconfig/fonts.conf

<match target="font">
  <edit name="lcdfilter" mode="assign">
    <const>lcddefault</const>
  </edit>
</match>

Также пробовал создать файлик ~/.Xresources с содержимым:

Xft.lcdfilter: lcddefault

Ни то, ни другое не помогло.

Из freetype удалось вытащить только это:

❯ freetype-config --cflags
-I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/harfbuzz -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -I/usr/include/sysprof-4 -pthread

~
❯ freetype-config --version
24.3.18

 , , , ,

emcode
()

Нет доступа к guest с KVM хоста

Наблюдаю непонятную хрень, которой по всем параметрам не должно быть, но она есть.

  • На домашнем ПК c KVM (Fedora) есть виртуалка с Windows 10.
  • Два дня назад все работало. Не обновлялся, автоматические обновления отключены.
  • VM работает через NetworkManager bridge.
NAME          UUID                                  TYPE      DEVICE  
br0           2a2c5aba-8c93-4024-98af-95b803aa18ee  bridge    br0     
virbr0        ad7eab32-be6d-4beb-bcfb-9ba4eaae4cff  bridge    virbr0  
br0-slave     a3235426-33f2-4bd5-a2ec-90bffcd3ee38  ethernet  enp30s0 

С VM пингуется все - локалка, DNS запросы, интернет есть, но… VM не пингуется с хоста, ну и RDP тоже нет. В этом заключается проблема.

Дальше начинается полтергейст:

  • В таблице MAC адресов и хосте и на VM нужные записи есть, адреса правильный. По Wireshark вижу что ARP проходит в обе стороны.
  • В Wireshark на хосте вижу что ICMP уходит на нужный MAC, ответа нет. В Wireshark на VM вижу что ICMP не приходит.
  • VM восстановлена со снапшота и пересоздана с бэкапа (define/undefine), на котором 100% все работало. Я же как-то раньше подключался по RDP.
  • В VM отключал все что можно: firewall, defender. Пересоздал сетевой адаптер.
  • Разные драйвера: virtio, e100.
  • На хосте пересоздал bridge, вырубил firewalld и selinux. Лог последнего пустой.
  • IP и MAC тоже пробовал менять с обоих сторон.
# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp30s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master br0 state UP group default qlen 1000
    link/ether 30:9c:23:05:c0:12 brd ff:ff:ff:ff:ff:ff
3: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 62:7e:5e:88:c7:8e brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.7/24 brd 192.168.1.255 scope global noprefixroute br0
       valid_lft forever preferred_lft forever
    inet6 fe80::dfc:2192:2a51:4bcf/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
4: ip_vti0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN group default qlen 1000
    link/ipip 0.0.0.0 brd 0.0.0.0
5: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    link/ether 52:54:00:cd:58:09 brd ff:ff:ff:ff:ff:ff
    inet 192.168.124.1/24 brd 192.168.124.255 scope global virbr0
       valid_lft forever preferred_lft forever

# ip r
default via 192.168.1.1 dev br0 proto static metric 425 
192.168.1.0/24 dev br0 proto kernel scope link src 192.168.1.7 metric 425 
192.168.124.0/24 dev virbr0 proto kernel scope link src 192.168.124.1 linkdown 

# sudo nft list ruleset
table ip filter {
}
table ip nat {
}
table ip mangle {
}
table ip6 filter {
}
table ip6 nat {
}
table ip6 mangle {
}

# getenforce 
Permissive

# journalctl -t setroubleshoot
-- No entries --

# arp
Address                  HWtype  HWaddress           Flags Mask            Iface
192.168.1.48             ether   52:54:00:8b:6a:f8   C                     br0   <<< VM
_gateway                 ether   28:28:5d:65:3d:1a   C                     br0

Если проблема в VM я должен видеть в Wireshark пакеты c хоста (https://serverfault.com/a/624954) а их нет. Кто-то дропает пакеты в VM c хоста, но при отключенном fw непонятно кто бы это мог быть. Грешу на ядро/qemu и не понимаю в какую сторону дебажить дальше.

 , , ,

emcode
()

Помогите осознать смысл delay_pools

Вот есть такой параметр, который указывает общее количество ведер. Зачем его явно указывать? Количество ведер равно количеству директив delay_class, имеющих уникальный номер. Это разрабы так сделали, чтобы им массив было легче инициализировать, или еще какой смысл есть?

 

emcode
()

Как вы мониторите SMART на дектопе?

На оффтопике есть CrystalDiskInfo, живет в трее, показывает температуру. При наличии проблем кидает уведомление, пару раз выручало. А еще он для ленивых сразу показывает какой параметр вызвал ахтунг. Хотел бы что-то аналогичное под Linux, но в наличии только smartmontools.

Вот курю его наркоманский smartd.conf и не понимаю как сделать, чтобы все диски проверялись только один раз - при загрузке, и при обнаружении проблем выполнялся notify-send. Там вообще никакого упоминания о том, в какое время будет выполняться тест без указания schedule нет. Есть только строка, например /dev/sda -a, а когда она выполняется - непонятно.

Ну, ок, допустим проверка выполняется один раз (эта кака даже в лог написать не может, что она там проверила и когда):

Jun 13 10:58:55 hydra systemd[1]: Starting Self Monitoring and Reporting Technology (SMART) Daemon...
Jun 13 10:58:58 hydra smartd[785]: smartd 7.1 2019-12-30 r5022 [x86_64-linux-5.6.16-300.fc32.x86_64] (local build)
Jun 13 10:58:58 hydra smartd[785]: Copyright (C) 2002-19, Bruce Allen, Christian Franke, www.smartmontools.org
Jun 13 10:58:58 hydra smartd[785]: Opened configuration file /etc/smartmontools/smartd.conf
Jun 13 10:58:58 hydra smartd[785]: Configuration file /etc/smartmontools/smartd.conf was parsed, found DEVICESCAN, scan>
Jun 13 10:58:58 hydra smartd[785]: Device: /dev/sda, type changed from 'scsi' to 'sat'
Jun 13 10:58:58 hydra smartd[785]: Device: /dev/sda [SAT], opened
Jun 13 10:58:58 hydra smartd[785]: Device: /dev/sda [SAT], WDC WD10EZEX-60WN4A1, S/N:WD-WCC6Y5SXYPS7, WWN:5-0014ee-2bcf>
Jun 13 10:58:58 hydra smartd[785]: Device: /dev/sda [SAT], found in smartd database: Western Digital Blue
Jun 13 10:58:59 hydra smartd[785]: Device: /dev/sda [SAT], is SMART capable. Adding to "monitor" list.
Jun 13 10:58:59 hydra smartd[785]: Device: /dev/sdb, type changed from 'scsi' to 'sat'
Jun 13 10:58:59 hydra smartd[785]: Device: /dev/sdb [SAT], opened
Jun 13 10:58:59 hydra smartd[785]: Device: /dev/sdb [SAT], WDC WD10EARX-00N0YB0, S/N:WD-WMC0S0579846, WWN:5-0014ee-25c1>
Jun 13 10:58:59 hydra smartd[785]: Device: /dev/sdb [SAT], found in smartd database: Western Digital Green
Jun 13 10:58:59 hydra smartd[785]: Device: /dev/sdb [SAT], is SMART capable. Adding to "monitor" list.
Jun 13 10:58:59 hydra smartd[785]: Monitoring 2 ATA/SATA, 0 SCSI/SAS and 0 NVMe devices
Jun 13 10:58:59 hydra systemd[1]: Started Self Monitoring and Reporting Technology (SMART) Daemon.

Если я, как советуют, напишу DEVICESCAN -m @smartdnotify. Это значит, что демон который ловит notify-send должен стартануть до smartd. А как узнать, кто в Гноме ловит notify, если этот сервис вообще управляется systemd?

 , ,

emcode
()

Где зарегистировать бесплатный домен, чтобы поиграться с почтовым сервером?

Хочется поиграться с postfix, платить за домен только из-за этого - не хочется. Какой TLD пофиг, hostname любой, главное - нахаляву. Где можно взять бесплатный домен с поддержкой MX записей. Потыкал Dynamic DNS провайдеров, они или ничего не пишут про MX или он платный.

 , ,

emcode
()

Вывести результат fzf в bash prompt

По дефолту fzf печатает результат в stdout, т.е. он выводится в отдельной строке:

$ cat /mnt/e/Tmp/test/* | fzf
foo

Подскажите, как сделать так, чтобы результат выводился в prompt, т.е. как уже готовая ко вводу команда, также как это происходит при CTRL+R?

Цель: быстро выбрать в шпаргалке нужную команду и подставить ее в prompt.

 ,

emcode
()

Поясните по правам в KVM

При инсталляции создается вот это:

$ sudo cat /etc/group | egrep "qemu|virt|kvm"
kvm:x:36:qemu
qemu:x:107:
libvirt:x:983:mlinx

Собственно, с libvirt более-менее понятно. Это группа, которая дает пользователям обращаться к сокету libvirtd. И она не имеет смысла для судоера, потому что wheel и так все разрешено через Polkit, который юзается по дефолту.

$ sudo cat /etc/polkit-1/rules.d/50-default.rules
polkit.addAdminRule(function(action, subject) {
    return ["unix-group:wheel"];
});

Группа kvm, вроде как исключительно для доступа к /dev/kvm, а qemu - это просто primary группа для пользователя qemu. Все правильно изложил?

В связи с эти вопрос, какие права доступа должен иметь storage pool и его содержимое? Да, все манипуляции происходят в qemu:///system, естественно.

 

emcode
()

Bridge + Gnome 3 NM applet

На компе с одним сетевым интерфейсом нужно иметь бридж для виртуалок, и NM апплет для VPN (тупо удобнее через него). Проблема в том, что апплет бриджи нормально не поддерживает. Т.е. можно создать бридж через nmcli, и апплет даже покажет его статус, правда неправильно. Но если случайно сделать вкл/выкл, то апплет поднимет не бридж, а айпишник на физическом интерфейсе параллельно с бриджом.

Кто-нибудь пользует апплет параллельно с ручной настройкой? Поделитесь опытом, пожалуйста. Может бридж сделать через networkd, а в NM его заигнорить? Конфликта при этом не будет?

 ,

emcode
()

Wireshark сегфолтится если запускать не от рута

Fedora 32, от рута запускается, от обычно пользователя - нет. Все нужные права вроде есть.

[mlinx@hydra ~]$ groups
mlinx wheel wireshark
[mlinx@hydra ~]$ ll /usr/bin/wireshark /usr/bin/dumpcap 
-rwxr-x---. 1 root wireshark 123K Apr 13 20:26 /usr/bin/dumpcap
-rwxr-xr-x. 1 root root      8.0M Apr 13 20:26 /usr/bin/wireshark
[mlinx@hydra ~]$ sudo getcap /usr/bin/dumpcap
/usr/bin/dumpcap = cap_net_admin,cap_net_raw+eip
[mlinx@hydra ~]$ wireshark 
Segmentation fault (core dumped)

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

 ,

emcode
()

Grub2 EFI поддерживает загрузку Windows с MBR диска?

Есть два диска:

sda = GPT >> Fedora
sdb = MBR >> Ubuntu, Windows 10

Прошивка загружается в режиме Legacy + UEFI. Собственно, Grub (а конкретнее os-prober) из Fedora детектирует только Ubuntu, причем даже если диск не смонтирован. Оффтопик видеть не хочет, никак. Можно это как-то настроить или это такое ограничение Grub? В упор не понимаю почему он бунту видит, а винду - нет.

 , ,

emcode
()

В iptables сломали TRACE?

Модуль загружен.

# cat /proc/net/netfilter/nf_log
 0 NONE ()
 1 NONE ()
 2 nf_log_ipv4 (nf_log_ipv4)
 3 NONE ()
 4 NONE ()
 5 NONE ()
 6 NONE ()
 7 NONE ()
 8 NONE ()
 9 NONE ()
10 NONE ()
11 NONE ()
12 NONE ()

# lsmod | grep -i log
xt_LOG                 16384  0
nf_log_ipv4            16384  0
nf_log_common          16384  1 nf_log_ipv4
x_tables               45056  7 xt_conntrack,nft_compat,xt_TRACE,xt_LOG,xt_tcpudp,ip_tables,xt_limit

Счетчик наполняется.

# iptables -t raw -n -L -v
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
  756 63504 TRACE      all  --  *      *       192.168.56.211       0.0.0.0/0

С rsyslog все в норме. Ставишь -j LOG - работает, ставишь -j TRACE - в логах пусто.

Система такая:

# cat /etc/*-release
PRETTY_NAME="Debian GNU/Linux 10 (buster)"
NAME="Debian GNU/Linux"
VERSION_ID="10"
VERSION="10 (buster)"
VERSION_CODENAME=buster
ID=debian

# uname -r
4.19.0-8-amd64

Вроде накосячить негде, а не работает.

 

emcode
()

В Qt взяли на работу блондинок?

Вяло пытаюсь разобраться с Qt Designer, думал у меня крыша поехала. Смотрим иконку Column (Layout) - показывает расположение элементов в строку, Row (Layout) - показывает расположение элементов в столбец.

v4.9.2

https://ibb.co/yNtRJNq

Ради интереса откопал старый скрин, раньше было правильно.

https://doc.qt.io/QtSafeRenderer/images/qtsr-qmltypes.png

 

emcode
()

Что сейчас есть из легковесных DE / WM с минимумом настройки?

Нужна тестовая VM, поиграться в различных конфигурациях с онтопиком. Параллельно еще куча виртуалок, поэтому памяти на это дело не очень много. Скажем лимит 512M, лучше меньше, так что хотелось бы что-то с легковесным графическим интерфейсом (а он таки нужен).

Я в курсе про разные тайловые VM, но желания тратить время за изучение малопонятных конфигов и хоткеев просто нет. Раньше был относительно «изкоробочный» Openbox, но он вроде все, хотя кто-то еще пользуется. Есть ли сейчас что-то похожее, простое в настройке, и не слишком маргинальное (читать как относительно популярное)?

 ,

emcode
()

LibreOffice: редактирование файла на Samba шаре

После обновления, LO не сохраняет файлы открытые на SMB шаре. Стандартный пакет из Ubuntu 18.04. Тыкаешь Save, индикатор несохраненных изменений пропадает, закрываешь файл, открываешь его еще раз - изменения не сохранились. Сначала косил на Dolphin, но с текстовыми файлами все нормально работает, проблема именно в LO.

Похоже на это https://bugs.documentfoundation.org/show_bug.cgi?id=115747#c9 ...но у меня никаких сообщений нет.

Подскажите, пжл, кто-нибудь сталкивался с подобной проблемой?

 ,

emcode
()

Ищется браузер для работы со старыми железками

В связи с тем, что разрабы браузеров не щадя живота своего пекутся о безопасности пользователей, ищется браузер из которого еще не успели выпилить поддержку SSL 2/3. Желательно, Webkit или Blink. Не Gecko, потому что одна нужная железка палит user agent и обругивается. Кто-то скажет что можно и подменить, но нет, там это не просто так сделано, реально разметка съезжает.

Желательно, чтобы еще этот браузер понимал, что HTTP сервер некоторых железок может отдавать HTML с заголовком Content-Type=text/plain и его надо отображать как HTML, а не как текст (в старых браузерах так и было). Ну вот просто разрабы некоторых железок такие криворукие дебилы, а жить как-то надо.

Дистр - бунту 18.04. Нужен deb или ppa.

 ,

emcode
()

Проц и видеокарта до 15к

Собираю сетап до 30к без HDD (уже есть). Хочется, как обычно, лет на 5. Выходит примерно 30к - 4.5к(корпус+БП) - 6к(8ГБ RAM) - 4.5к(материнка, 4 слота RAM + HDMI) = 15к остается на проц и видео. Могу еще 2-3к докинуть, если оно действительно будет того стоить.

Оперативы еще 2х8 докину через полгода/год. Может к тому времени на нее цены немного скинут, хоть и маловероятно.

Комп нужен для: - полуркать по лорчику в б-гомерзком Google Chrome; - поговнокодить в Java и JS; - посмотреть порнушку в FullHD на телевизоре в качестве второго монитора; - немножко поиграть: Dark Souls 1-3, New Vegas и RPG под Unity (PoE, Torment:ToN, Tyranny, Wasteland2...)

Собственно по платформе и видео самые большие вопросы. CoffeeLake отпадает, очень дорогие материнки. Остается Ryzen3 или i3, к которым можно взять что-то типа GT1030/GT1050/RX550. Или можно взять i5 7400 (со скидкой под ЧП), и GT1030. Собственно, я склоняюсь к сетапу на амуде, т.е. R3-1200 + RX550, но до этого юзал только штеуд и зеленых, поэтому особой уверенности нет. Реально ли R3-1200 тащит как 4 ядра i5? Есть ли смысл ждать дешевых материнок на CoffeLake и сколько ждать то. Может для моих задач вообще хватит G4600+GT1050 и прокачает ли он эту карту?

 , , ,

emcode
()

БЭМ. Помогите уверовать

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

.block {
  .elem1 {}
  .elem2 {}
  //...
}

Вот тут, например, приводятся аргументы:

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

Кто мешает писать селекторы так, чтобы они не совпадали?

CSS сложно понять без разметки, к которой он применен.

Зачем его вообще понимать без разметки то?

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

Обычный code smell. Просто не делай так, если есть другие варианты.

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

// вот так
.nav-menu {}
.nav-menu__item {}
.nav-menu__item-icon {}
.nav-menu__item-title {}
.nav-menu__item-inner {}

// или так
.nav-menu {}
.nav-menu-item {}
.nav-menu-item__icon {}
.nav-menu-item__title {}
.nav-menu-item__inner {}

И как бы тут нет другого выхода, потому что у какого-нибудь «item icon» нет и никогда не будет никакого семантического названия (и это еще простой пример), а таких элементов на странице over 90%. Тогда чем БЭМ принципиально лучше простого

.nav-menu .item .icon {}
или даже
.nav-menu .item-icon {}
...

Про bemjson вообще молчу, он просто нечитаемый.

 

emcode
()

Есть в природе дистр где нормально заработает ноут с Оптимус?

Последние год-два постоянно наблюдаю на убунте проблемы с установкой блоба нвидиа. Собственно вот этот баг https://bugs.launchpad.net/ubuntu/ source/gnome-shell/ bug/1559576 Чаще всего проявляется как черный экран, иногда не стартует GDM, иногда он не дает логиниться, а сегодня вот первый раз увидел и сегфолт.

Точно помню что-то до 16.04 проблем с нвидиа не было. Где что поломали и есть ли какой-то дистр/DE, где реально завести Оптимус (арч не предлагать)?

Вот такая у меня старушка, если что:

01:00.0 VGA compatible controller [0300]: NVIDIA Corporation GT215M [GeForce GT 335M] [10de:0caf] (rev a2) (prog-if 00 [VGA controller])
	Subsystem: ASUSTeK Computer Inc. GT215M [GeForce GT 335M] [1043:1462]
	Flags: fast devsel, IRQ 11
	Memory at d2000000 (32-bit, non-prefetchable) [disabled] [size=16M]
	Memory at c0000000 (64-bit, prefetchable) [disabled] [size=256M]
	Memory at d0000000 (64-bit, prefetchable) [disabled] [size=32M]
	I/O ports at d000 [disabled] [size=128]
	Expansion ROM at d3000000 [disabled] [size=512K]
	Capabilities: [60] Power Management version 3
	Capabilities: [68] MSI: Enable- Count=1/1 Maskable- 64bit+
	Capabilities: [78] Express Endpoint, MSI 00
	Capabilities: [b4] Vendor Specific Information: Len=14 <?>
	Capabilities: [100] Virtual Channel

Так-то меня и убунта и гном более чем устраивают, но жить без дискретки тоже надоело. Чувствую моим следущим линуксом будет WSL :)

 

emcode
()

На чем сейчас можно писать современный кроссплатформенный GUI?

Дано:

  • программер 1шт, хорошо знаю Java, неплохо JS, совсем немного Python;
  • десктопный проект, планируется длительная поддержка;
  • кроссплатформенность обязательна;
  • наличие современного LaF обязательно;
  • наличие готовой RCP приветствуется;


Варианты:

QT/C++ - точно нет. Я не планирую учить C++, писать кучу велосипедов, и компилировать отдельно под каждую target платформу;

PyQT/Python и wxPython/Python - не нравится. Python не нравится тем, что у него часть библиотек до сих пор только под 2.x и что-то может всплыть когда я уже начну проект. Не нравится тем, что когда я последний пробовал его под десктоп, были проблемы с созданием бандла под pyinstaller. wxPython не устраивает убогим LaF, PyQT - лицензией. Хотя проект Open Source я не хочу брать в него библиотеку с двойным лицензированием.

Swing/Java - Отсутствие достойных LaF (JetBrains не делятся). В GTK+ LaF куча артефактов под Linux. Желающие проверить могут запустить NetBeans.

JavaFX/Java - крайне сомнительное будущее технологии, учитывая что Oracle от нее в общем отказался. Жрет память как не в себя.

Все MS технологии - нет. Потому что MS;


Финалисты:

  • Eclipse RCP;
  • Electron;

В Eclipse RCP по причине OSGI сломали модель подключения зависимостей Java, и этот компонент там делается через ж, но зато из коробки идет интерфейс и поддержка плагинов. Electron требователен к ресурсам, но судя по всему это тренд ближайшего времени.

Оказывается, что десктоп сейчас мало кому нужен и кроссплатформенных вариантов не так много. Кто что думает?

 ,

emcode
()

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