Задать вопрос
  • Как оптимальней органзиовать хранение изображений в мобильном приложении?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Оптимальнее и лучше для чего именно?
    писать их в таблицу под base64

    Таблицу БД? И зачем? Изображения - это бинарный формат данных. Смысла конвертировать их туда-сюда в текстовый и обратно нет никакого. В БД бинарные данные не хранятся, только ссылка на них, а сами данные хранятся в локальной ФС или любом другом хранилище.
    Ответ написан
    Комментировать
  • Что такое Root права на Android?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Ответ написан
    Комментировать
  • Какой сейчас есть "нормальный" роутер?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Альтернативное решение класса "хочу любые фичи и полный контроль": покупаете любой мини-пк на х86 с пачкой портов и вай-фаем или материнскую плату nano/mini ITX со встроенным процессором и собираете себе сами коробочку. Ставите туда pfSense и далее настраиваете его как вам угодно. Там есть вот вообще всё, а чего нет - ставите либо из плагинов либо на хостовую фряху (хоть виртуалбокс с линуксом или виндой, но тогда лучше сразу хостом ставить гипервизор нормальный, а уже в него pfSense и отдельно другие оси). Пару дней на почитать маны и потихоньку всё настроить - зато один раз.
    Ответ написан
    6 комментариев
  • Какой выбрать мини ПК для умного дома?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Малинку или апельсинку брать имеет смысл в максимальной конфигурации в рамках вашего бюджета - дабы не было мучительно больно при добавлении новых сервисов/фич из-за нехватки ресурсов. А в случае апельсинки, если нет возможности подключить кабелем, то с поддержкой WiFi - это версия 5b, а без вайфая - просто версия 5. У 5 версии и 5 pro есть NVME порт, а у 5B - нету. Систему ставьте только на SSD - либо на SATA USB коробочку либо на NVME в случае апельсинки. На флешку или emmc систему не ставьте - оно так очень быстро кони двинет.
    В качестве хостовой ОС ставьте дебиан стабильный, а Home Assistant ставьте в режиме Home Assistant Supervised.
    Из недорогих систем умного дома для старта могу посоветовать sonoff. Либо самостоятельно недорогие варианты и с али заказывайте. Для ZigBee вам потребуется шлюз и их есть два варианта. Отдельный и USB донгл. Отдельный брать надо только в одном случае: малинка/апельсинка в железном ящике или в другом неудобном для вай-фая месте, т.к. его надо будет перепрошивать с паяльником и программатором на кастомную прошивку для отвязки от Китая. Первую версию точно, но во второй, возможно, исправили - я точно не помню и надо гуглить. В остальных случаях USB донгл лучший вариант - HA его спокойно подхватывает, плюс USB легко пробрасывается в виртуалки практически везде. В целом соноф за свои деньги норм, шлюзы, реле и датчики - точно. Кнопки тоже в целом норм - можно прилепить куда угодна на стену, но классические выключатели всё же удобнее. Я так и не нашел недорогих вариантов таких выключателей - поэтому пока кнопки использую. Да, иногда попадаются глючные девайсы: но 500-700 рублей не так жалко, как купить пачку девайсов по 2-3к каждый от каких-нибудь сяоми и получить вендор-лок или еще что.
    Next(Own)cloud / SeaFile и другие сервисы ставьте так же в докере. Диски - в USB коробки. Только учитывайте объем энергопотребления дисков и лучше используйте один мощный блок питания для всех девайсов. Ну и ящик сразу берите по-больше, куда всё это дело упаковать - сантиметров 30х30х15 хотя бы.

    В общем же, при текущих ценах на малинки/апельсинки рекомендую взять мини-ПК - это более универсальное решение. Там, где нужен только HA и малое энергопотребление - малинка/апельсинка. Если же таких требований нет и хочется ещё что-то поставить или поиграться - то однозначно мини-ПК на селероне или чём-то таком х86.
    Ответ написан
  • Как правильно установить vue-cli?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    У пользователя от имени которого запущен терминал нет прав на запись в целевой каталог. Проверяйте права целевого каталога и запускайте терминал от имени правильного пользователя.
    Ответ написан
    1 комментарий
  • Питание ESP32, как решить проблему с питанием от розетки?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Надо "втыкать" не в зарядку, а в блок питания. Это хоть и похожие устройства, но всё же отличающиеся и особенно по качеству выдаваемого напряжения. Например.
    Ответ написан
  • Существует ли FPGA сопроцессор, который можно было бы подключить как видеокарту?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Кажется, я находил нечто подобное, но стоила такая штука дороже, чем мощная видеокарта.
    Нет ли чего-то дешового, может быть, даже подключаемого по USB.

    FGPA вычислительной мощности сравнимой с готовым специализированным решением в кремнии будет стоить всегда намного дороже этого самого специализированного решения просто в силу того, что FPGA для той же задачи надо намного больше ячеек и транзисторов, а так же она будет занимать больший объем в силу разных техпроцессов. FPGA - это гибкость за счёт объёмов, сложности, стоимости и других параметров микросхемы, а вот готовый вычислительный блок в кремнии - это уже оптимизированное по стоимости, размерам и эффективности решение.
    Ответ написан
  • Как снимали в 4K в 2001 году?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Точно так же как и в 1977:
    676dca1872319932512271.png
    Ответ написан
    Комментировать
  • Как остановить весь скрипт js при выполнении условия tampermonkey?

    VoidVolker
    @VoidVolker Куратор тега JavaScript
    Dark side eye. А у нас печеньки! А у вас?
    RTFM: setInterval
    Ответ написан
    Комментировать
  • Как расположить TabControl, чтобы она не перекрывалась MenuStrip?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Control.Margin для табов либо Control.Padding для его контейнера размером в соответствии с меню.
    Ответ написан
  • Может ли такое быть, что менее продвинутый алгоритм сортировки выполняется быстрее?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Да, конечно может. Почему нет-то? "Продвинутость" алгоритма - понятие довольно абстрактное. Обычно алгоритмы сортировки характеризуются несколькими параметрами: сложность сортировки, скорость, потребляемая память.
    Ответ написан
    Комментировать
  • Как настроить оконный менеджер?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Собственно, примерно так и делаете: настраиваете режим киоска и далее в автозапуск ставите терминал. Пример готового скрипта:
    linux_kiosk_init.sh
    #!/bin/bash
    echo Installling kiosk mode...
    # Kiosk configuration
    userName="kiosk"
    kioskRunName="kiosk.sh"
    kioskRunPath="/home/$userName/$kioskRunName"
    kioskAppPath="/home/kiosk/kiosk/app"
    
    # SSH configuration
    localPort="5000"
    tunnelPort="5001"
    server="192.168.1.190"
    serverUser="me"
    # ssh -N -g -R 192.168.1.190:5555:127.0.0.1:22 me@192.168.1.190
    # autossh -f -o TCPKeepAlive=yes -o ServerAliveInterval=300 -o ServerAliveCountMax=3 -N -g -R 192.168.1.190:5555:127.0.0.1:22 me@192.168.1.190
    # autossh -f -o TCPKeepAlive=yes -o ServerAliveInterval=300 -o ServerAliveCountMax=3 -N -g -R $server:$serverPort:127.0.0.1:$tunnelPort $serverUser@$server
    
    # Configuring autossh
    export AUTOSSH_DEBUG=1
    export AUTOSSH_GATETIME=0
    export AUTOSSH_PORT=5100
    
    # Scripts configuration
    sessionName="kiosk.desktop"
    sessionPath="/usr/share/xsessions/$sessionName"
    defSesPath="/etc/lightdm/lightdm.conf.d/10-xubuntu.conf"
    defSesKey="user-session"
    defSesSection="[SeatDefaults]"
    # tunnelName="tunnel.sh"
    autorunPath="/etc/rc.local"
    
    
    # Internal variables
    kioskRunContent=''
    sessionContent=''
    # tunnelContent=""
    
    # Adding kiosk user
    echo Adding user: $userName
    adduser -m $userName
    
    # Installing simplest window manager, autossh and openssh-server
    echo Installing window manager...
    apt-get install ratpoison autossh openssh-server
    
    # Creating kioskRun sh script
    kioskRunContent+='#!/bin/bash\n'
    kioskRunContent+='/usr/bin/ratpoison &\n\n'
    kioskRunContent+="TERMINAL=`who | awk '{print $2}'`\n\n"
    kioskRunContent+='if test -z "$DBUS_SESSION_BUS_ADDRESS" ; then\n'
    kioskRunContent+="\x20\x20\x20\x20eval 'dbus-launch --sh-syntax --exit-with-session'\n"
    kioskRunContent+='fi\n\n'
    kioskRunContent+='dbus-launch /home/kiosk/kiosk/app\n\n'
    kioskRunContent+="kill `ps | grep dbus-launch | grep -v grep | awk '{print $1}'`\n"
    
    # Saving script to file
    echo Creating $kioskRunPath...
    echo -e $kioskRunContent > $kioskRunPath
    echo Setting chmod +x
    chmod +x $kioskRunPath
    
    # Creating session file
    sessionContent+='[Desktop Entry]\n'
    sessionContent+='Version=1.0\n'
    sessionContent+='Name=Kiosk session\n'
    sessionContent+='Comment=Kiosk session\n'
    sessionContent+="Exec=$kioskRunPath\n"
    sessionContent+='Icon=\n'
    sessionContent+='Type=Application\n'
    
    # Saving script to file
    echo Creating $sessionPath
    echo -e $sessionContent > $sessionPath
    # chmod +x $sessionPath
    
    # Settining kiosk as default session
    echo Setting key $defSesKey=$userName in file $defSesPath
    sed -i "s/\($defSesKey *= *\).*/\1$userName/" $defSesPath
    # [SeatDefaults]
    # user-session=kiosk
    
    # Configuring ssh-server
    echo Configuring local ssh-server to port $localPort
    sed -i 's/^#?Port .*/Port $localPort/g' /etc/ssh/sshd_config
    sed -i 's/^#?PasswordAuthentication .*/PasswordAuthentication no/g' /etc/ssh/sshd_config
    
    if grep -q -e 'GatewayPorts' /etc/ssh/sshd_config
    then
        sed -i 's/^#?GatewayPorts .*/GatewayPorts clientspecified/g' /etc/ssh/sshd_config
    else
        echo "GatewayPorts clientspecified" >> /etc/ssh/sshd_config
    fi
    
    # Configuring ssh-client
    sshCmd="autossh -f -o TCPKeepAlive=yes -o ServerAliveInterval=300 -o ServerAliveCountMax=3 -N -g -R $server:$tunnelPort:127.0.0.1:$localPort $serverUser@$server"
    
    # Autorun configuring
    # grep -q -e 'autossh' || sed -i -e "\x24i \$sshCmd" /etc/rc.local
    echo Tunnel autorun configuring in file $autorunPath
    if grep -q -e 'autossh' $autorunPath
    then
        sed -i "s/^autossh .*/$sshCmd/g" $autorunPath
    else
        sed -i -e "\$i \\$sshCmd\n" $autorunPath
    fi
    
    echo kiosk mode complete
    echo "Don't forget:"
    echo -- 1. Set for user $userName permissions
    echo -- 2. Create key on server with command: ssh-keygen
    echo -- 3. Create key on client with command: ssh-keygen
    echo -- 4. Add local key to server with command: ssh-copy-id $serverUser@$server
    echo -- 5. Add your own key to server and to client(on user PC):
    echo     ssh-copy-id $serverUser@$server
    echo     ssh-copy-id $userName@client
    echo -- 6. On server in /etc/ssh/sshd_config set 'PasswordAuthentication no' and 'GatewayPorts clientspecified'
    Линк.
    А вот со вторым чуть сложнее: быстро найти терминал с режимом киоска не получилось, поэтому самым простым решением видится написать на си простейшее графическое приложение-консоль - примеров в сети должно быть куча.
    Ответ написан
    Комментировать
  • Как зная только тип вызвать у него статическую функцию?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    RTFM: Type.GetMethod
    public class Foo
    {
        public static string Bar() => "Bar() is called";
    }

    var type = typeof(Foo);
    var mi = type.GetMethod("Bar", BindingFlags.Static | BindingFlags.Public);
    var r = mi.Invoke(null, []);
    Console.WriteLine($"Result: {r}");
    
    >> Result: Bar() is called
    Ответ написан
    2 комментария
  • Как скомпилировать github проект с помощью npm?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    npm ERR! 404 'vvo/tzdb' is not in the npm registry.

    Это называется "Сломанные зависимости". Пакет вроде в реестре: https://www.npmjs.com/package/@vvo/tzdb
    В данном случае надо искать пакет, который зависит от пакета vvo/tzdb и смотреть что там. Самый простой вариант - в локально установленном пакете исправить зависимость ручками. Чуть более правильно сделать цепочку форков сломанных пакетов и внести поправки в код, а уже в своём проекте поставить зависимость от этой цепочки.
    Ответ написан
  • Процессор i5 vs i7. Когда надо и надо ли?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Берите максимальный в рамках вашего бюджета. Чем быстрее проц и чем больше у него ядер - тем комфортнее работается за ПК. В общем под задачи разработки приоритет следующий: объем памяти, число ядер проца, модель/поколение проца, скорость SSD, объем SSD (само собой только M2).
    Ответ написан
    2 комментария
  • Вентили видеокарты сильно шумят, 4500 оборотов в минуту. Как выключить это?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    1. Обслужить видеокарту - заменить термопасту/термопрокладки
    2. Найти и заменить кулеры на аналогичные или купить стандартные тихие тонкие кулеры 80мм и приколхозить их - алюминиевый уголок, плюс несколько болтиков и плюс любой кусок пластика/картона; да видеокарта станет толще - при наличии места в корпусе вообще не проблема, в крайнем случае райзеры есть
    Ответ написан
    1 комментарий
  • Клавиатура не работает через юсб хаб как сделать так чтобы заработало?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Заменить хаб. Либо не хватает питания хабу, либо хаб кривой/глючный или клавиатура.
    Ответ написан
    Комментировать
  • Возможно ли реализовать TCP на Delphi?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Ставьте виртуалку в VirtualBox и не парьтесь с импортом сишных заголовков в дельфи.
    Ответ написан
    3 комментария
  • Адаптер питания AC и адаптер питания AC/DC - это разное?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Чисто технически - да, это разные. Вот только китайцы могут и лепят любую маркировку и спокойно могли часть просто пропустить. Смотрите на характеристики входного и выходного напряжения - на самом адаптере обычно написано всё. AC - переменное, DC - постоянное напряжение. Скорее всего у вас там что-то типа 220 переменных в 12 вольт постоянных.
    Ответ написан
  • Как правильно настроить режим киоска?

    VoidVolker
    @VoidVolker Куратор тега Windows
    Dark side eye. А у нас печеньки! А у вас?
    Не использовать виндовый режим киоска и эдж.
    1. Создать пользователя "kiosk"
    2. Заменить ему оболочку на ваше приложение
    3. Настроить автоматический вход для данного пользователя

    Windows XP/7/10 IoT Enterprise:
    Windows Registry Editor Version 5.00
    
    [HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Winlogon]
    "Shell"="C:\\full\\path\\to\\your\\application.exe>"

    Windows 8/8.1:
    Windows Registry Editor Version 5.00
    
    [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System]
    "Shell"="C:\\full\\path\\to\\your\\application.exe>"

    Windows 10:
    Windows Registry Editor Version 5.00
    
    [HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\System]
    "Shell"="C:\\full\\path\\to\\your\\application.exe>"

    Автоматический логин пользователя:
    Windows Registry Editor Version 5.00
    
    [HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon] 
    "AutoAdminLogon"="1"
    "ForceAutoLogon"="1"
    "DefaultUserName"="kiosk"
    "DefaultDomainName"="<place here pc hostname>"
    "DefaultPassword"=""

    Опционально можно отключить Ctrl+Alt+Del:
    Windows Registry Editor Version 5.00
    
    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\taskmgr.exe]
    "Debugger"="\"\""


    Для веб-приложения следует использовать хром/фф с опциями киоска или NWJS с минимальным конфигом с вашим урлом.
    Ответ написан
    Комментировать