Задать вопрос
  • Как решить проблему зависания проводника?

    VoidVolker
    @VoidVolker Куратор тега Windows
    Dark side eye. А у нас печеньки! А у вас?
    Использовать адекватный файл-менеджер типа TotalCommander, DoubleCommander и прочие коммандеры. Ибо в МС пришло молодое поколение программистов для которых норма минутные запуски приложений и отклик от них в секунды и десятки секунд. Поэтому они решили переписать проводник на браузерный движок - поэтому проводник умер окончательно и пора всем переезжать на более адекватные файловые менеджеры.
    UPD: возможная причина тормозов может быть вызвана банальным индексированием и/или созданием превьюшек файлов или парсингом проводником тегов треков из-за того, что данный каталог представлен как музыкальная коллекция. Имеет смысл попробовать изменить в свойствах тип каталога на обычный и вид задать табличный или что-то без иконок. Так же можно попробовать отключить индексирование данного диска (но это может занять время) либо вообще отключить службу индексирования.
    Ответ написан
  • Как реализовать констуктор "сайтов" (не совсем) на C# WPF?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?

    И далее по мере необходимости.
    Ответ написан
    Комментировать
  • Почему в мак ос, после перезагрузки компа, программы запускаються дольше, чем если ты их полностью закрываешь (cmd + q)?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Различные кэши: дисковый, в ОЗУ, кэши процессора и прочее. Есть такая оптимизация "ускорение часто используемых приложений" - вот это она и есть.
    Ответ написан
    Комментировать
  • Какое бесплатное решение для учёта времени лучшее в ubuntu?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Это называется "таск-менеджер" или "система управления задачами", а не логирование. Отношения к ОС это отношения не имеет. Вам в идеале нужно что-то вроде Jira/Redmine/trello и прочее. Если хотите только какое-то приложение для трекинга времени выполнения задач, то это называется "тайм-трекер" или "программа учёта рабочего времени": hubstaff, time doctor и прочее. Обычно, тайм-трекер интегрируется с таск-менеджером для удобства выбора текущей задачи.
    Ответ написан
    3 комментария
  • Взаимодействие приложения такси с сервером в реальном времени, какие протоколы и технологии использовать?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Веб-сокеты плюс любой бинарный сериализатор плюс какое-нибудь шифрование поверх в рамках ваших требований: bson, protobuf и прочее что-то популярное (непопулярное - устанете искать адекватную либу). Гнать текстовый трафик через мобильные сети не самое лучше решение, а шифрование надо просто чтобы осложнить жизнь любителям всяких манипуляций и взломов.
    Ответ написан
    2 комментария
  • Как организовать систему обновлений БД?

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

    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 и смотреть что там. Самый простой вариант - в локально установленном пакете исправить зависимость ручками. Чуть более правильно сделать цепочку форков сломанных пакетов и внести поправки в код, а уже в своём проекте поставить зависимость от этой цепочки.
    Ответ написан