Заметки

Categories: Компьютеры, Linux, Железо, Игры, Программирование

Сниппет для сэмплинга пользователей или A/B тестирования (Java)

Допустим, у нас есть стабильный идентификатор пользователя userId. С помощью этой функции мы превращаем строковый идентификатор в псевдослучайное число:

int userNumber = stringIdToSamplingMillis(userId);

Теперь мы можем использовать это число так:

if (userNumber < 50) ... // Пользователь попал в 5% тестовую выборку
if (userNumber < 500) ... // Пользователь попал в категорию A
else ... // Пользователь попал в категорию B

Функция:

    // Генерирует по строке псевдослучайное число от 0 до 999 включительно.
    private static int stringIdToSamplingMillis(final String str) {
        // Используем MD5 в качестве генератора псевдослучайного числа на базе строки
        final MessageDigest hasher = MessageDigest.getInstance("MD5");
        final byte[] data = str.getBytes();
        hasher.update(data, 0, data.length);
        // Получим MD5 в виде длинного целого числа
        final BigInteger bigInt = (new BigInteger(hasher.digest())).abs();
        // Получим хвост длинного целого в виде обычного int-а [0..999]
        return bigInt.mod(BigInteger.valueOf(1000)).intValue();
    }

Linux + 4K + Firefox & Chrome - размер шрифтов в меню и на вкладках

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

Инструкция основана на настройке Ubuntu 20.04.

1) Вычисляем коэффициент, на который нужно умножить разрешение. У моего нового монитора 162x161 PPI (xdpyinfo | grep dots), а проги считают, что 96 PPI. Делим ((162+161)/2)/96 = 1.6822916(6). То есть примерно 1.68. Можно не округлять, можно округлить до 1.7, по вкусу. Далее я использую 1.68, для вашего монитора число будет немного другим.

2) Google Chrome. Добавляем в ярлык параметр запуска:
sudo gedit /usr/share/applications/google-chrome.desktop
Находим строчку:
Exec=/usr/bin/google-chrome-stable %U
Меняем на:
exec=/usr/bin/google-chrome-stable --force-device-scale-factor=1.68 %U
Если есть копия ярлыка на панели запуска или рабочем столе то её правим аналогично.
Перезапускаем Chrome поправленным ярлыком.
Минус - если Chrome не был запущен и запускается из командной строки без этого параметра, то чуда опять не произойдёт. Впрочем, он почти всегда висит запущенный, поэтому и ладно.

3) Firefox, Thunderbird и другие GTK-приложения. Добавляем в ~/.bash_profile или ~/.profile (какой у вас используется, или в оба):
export GDK_DPI_SCALE=1.68
Перелогиниваемся.

P.S. Почему в 2020 году ведущие мировые приложения не умеют читать реальный PPI экрана мне неведомо.

P.P.S. Фикс для Zoom: в ~/.config/zoomus.conf - исправляем значение scaleFactor.
Sweet Home 3D: в /usr/share/sweethome3d/sweethome3d.sh - добавляем параметр -Dcom.eteks.sweethome3d.resolutionScale=1.68.

P.P.P.S. Wine: wine regedit -> HKEY_CURRENT_CONFIG > Software > Fonts, там создаём LogPixels (типа DWORD) с разрешением экрана, например, 162 (decimal) или просто запускаем winecfg и ставим разрешение на вкладке "Графика". Чтобы создать эффект использования увеличенных шрифтов нужно поставить разрешение на 25-30% больше реального.

Добавление: отличия для Ubuntu 22.04

Теперь через штатную конфигурационную программу можно задать правильный DPI экрана в настройках шрифтов и множитель в настройках для монитора, и многие приложения это подхватывают (нужно указать и то и то, в разных местах работает разное).
Этого теперь делать не нужно: export GDK_DPI_SCALE=1.68 - более того, оно приводит к двойному применению коэффициента увеличения в некоторых местах (системный коэффициент на основе DPI умножается ещё и на этот множитель).
Для Steam, меняем ярлык запуска приложения: /usr/games/steam -forcedesktopscaling=1.68 %U
Также, для Ubuntu 22.04 в KDE существует (и случайным образом проявляется?) проблема маленького шрифта в GTK-диалогах открытия/сохранения файла (Firefox, Яндекс Браузер). Если она выскакивает, то нужно выполнить:
systemctl --user restart plasma-xdg-desktop-portal-kde
Действует, естественно, только в текущей сессии.

Шпаргалка по настройке Octoprint / OctoPi + TouchUI

  • Берём кит Raspberry Pi 3 B+ с 3.5" тачскрином, например.
  • Скачиваем и прошиваем на microSD образ OctoPi. Согласно инструкции настраиваем сетевое подключение. Вставляем карту в Pi. В принципе, OctoPi уже работает и можно подключать принтер, заходить на веб-интерфейс и пользоваться.
  • Заходим на Пирожок по SSH и устанавливаем драйвер дисплея и тачскрина. Сначала стоит апнуть всё с помощью apt. Для поиска драйвера нужно использовать информацию, написанную на задней стороне экрана, т.к. много производителей делают аналогичные экраны и драйвера от не того экрана скорее всего не подойдут. В приведённом выше случае, нужен вот этот драйвер (см. SPI_128M_60Hz). На Пирожке распаковываем архив и выполняем sudo ./LCD35_show. После перезагрузки дисплей должен начать работать.
  • Устанавливаем плагин TouchUI в веб-интерфейсе OctoPi.
  • Чтобы на экране Pi после загрузки сразу показывался TouchUI, настраиваем boot to browser. После этого шага, у меня перестали запускаться Иксы, как выяснилось, проблема в конфигурационном файле для тача 99-..., который скрипт установки TouchUI создал в /usr/share/X11 на этом шаге. Его нужно удалить и снова перезагрузить Pi.
  • Отключаем гашение экрана (оно всё равно бесполезно с этим экраном, т.к. он не умеет отключать подсветку), в /etc/xdg/lxsession/LXDE-pi/autostart:
    @lxpanel --profile LXDE-pi
    @pcmanfm --desktop --profile LXDE-pi
    # Эту строчку нужно закомментировать:
    # @xscreensaver -no-splash
    # Эти строчки нужно добавить:
    @xset s off
    @xset -dpms
    @xset s noblank
    @unclutter

Примечание: есть странный баг - иногда случайным образом блокировка скринсейвера не отрабатывает и экран всё же гаснет.
Полезное видео по установке TouchUI.

OSS + PulseAudio = запись звука и работающий голос в Steam, Skype под Linux

Немного обычной пингвинской магии для того, чтобы на компьютере с драйверами Open Sound System в Steam заработал ввод звука.
1) Устанавливаем pulseaudio, так как у ALSA проблемы с записью через OSS.
2) Копируем /etc/pulse/default.pa в ~/.config/pulse/default.pa и добавляем туда примерно такие строки (номера устройств подскажет ossinfo):

# Подключаем DSP-устройство для воспроизведения звука
load-module module-oss device="/dev/dsp0" sink_name=output mmap=0
# Подключаем DSP-устройство для записи звука
load-module module-oss device="/dev/dsp2" source_name=input mmap=0

# Можно настроить USB-карточки примерно так, но после подключения надо будет делать:
# sudo /usr/lib/oss/scripts/oss_usb-create-devices
# pulseudio --kill && pulseaudio --start
.ifexists /dev/oss/usb046d0a29-2/pcm0
load-module module-oss device="/dev/oss/usb046d0a29-2/pcm0" sink_name=h800 mmap=0
load-module module-oss device="/dev/oss/usb046d0a29-1/pcmin0" source_name=h800_mic mmap=0
.endif

set-default-sink output
set-default-source input

Перезапускаем Pulse:
$ pulseudio --kill && pulseaudio --start
Если всё сделано правильно, то после этого приложения, работающие через Pulseaudio, смогут выводить и записывать звук через OSS-драйвера, например, в Steam заработает голос (например, тимспик в Counter-Strike). Возможно, даже заработает Skype (но я пока не проверял).
Можно добавить несколько звуковых карт и переключать их, например, с помощью pavucontrol. Из неприятных мелочей, PA отображает все устройства с одним и тем же именем (которое, кажется, берёт от /dev/dsp), так что угадать, где какое, можно только по порядку.

UPD: Проверил Скайп - тоже нормально работает.

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

#!/bin/bash
sudo killall pulseaudio
sudo killall -s KILL pulseaudio
sudo /etc/init.d/oss restart
pulseaudio -D

Скрипт для циклической записи видео на веб-камеру для Линукса

С помощью обычного линуксового софта можно легко превратить вебкамеру в видеокамеру для записи каких-нибудь блогов или в "видеорегистратор", что я для разминки и сделал. Проверено на Ubuntu 14.04.

·· [Read more · Читать дальше] ·· »»»

Archives

                                                                                                                                                                                                                                                                   


© Sergey A. Galin, 1998-2021 sageshome.net/blog/