• Как запустить приложение из терминала в текущем графическом сеансе?

    @rPman
    в окружении, в котором запускаешь приложение должна быть определена переменная DISPLAY, ее значение можешь смотреть в терминале, запущенном из графического окружения, скорее всего это будет :0
    Однократно можно это использовать так:
    DISPLAY=:0.0 xclock

    Так же пользователю, если он отличен от того, для которого запущено графическое окружение, необходимо выдать права на подключение к xserver, это делается xhost (еще есть xauth):
    xhost +local:root
    Даст права root авторизованного локально работать с графической оболочкой.

    Если подключаешься удаленно с помощью ssh можно указать ключ -Y и тогда все будет настроено автоматически (это могут отключать в настройках sshd.conf), т.е. имеется в виду из терминала, запущенного в графической оболочке xserver (например xwin идущий с пакетом cygwin для windows) подключаешься к удаленному серверу ssh -Y user@server и запускаешь там приложения, окна которого будут отображаться локально. Не очень эффективный метод, но будет работать даже 3d графика (если локальный сервер умеет). Эффективнее использовать x2go для таких вещей.
    Ответ написан
    Комментировать
  • UWP Javascript как скачать и назначит Background?

    @f_ban
    Вы можете воспользоваться тем, что для свойства background-img, как и для background, можно указывать несколько слоев фонов, таким образом, дефолтовый фон должен быть в самом нижнем слое. Обратите внимание, что если в качестве дефолтового слоя указать изображение, то опять же может происходить временной лаг, поэтому, в качестве уж совсем нижнего слоя укажите либо градиент/цвет, либо простенькую svg через data-url.

    Затем, когда получите актуальный URL фоновой картинки, поставите его в свойство спереди, отделив от предыдущего значения запятой.

    Вот mdn по теме https://developer.mozilla.org/en-US/docs/Web/CSS/C...
    Ответ написан
    2 комментария
  • Пароли пользователей после переноса с yii?

    @xfg
    Yii использует алгоритм хеширования blowfish. Чтобы в php получить хеш по этому алгоритму, нужно просто взять функцию crypt и вторым аргументом передать соль в формате$2a$13$6abRKtrd12bvkltrfsorbd

    где
    $2a$ (также может быть $2x$ или $2y$) - указывает на алгоритм блоуфиш.
    13 - сложность алгоритма, может быть от 04 до 31. Чем больше число, тем дольше будет вычисляться хеш.
    6abRKtrd12bvkltrfsorbd - 22 символа для соли.

    Проверить хеш против пароля можно функцией password_verify. Берете хеши, которые вам нагенерил Yii и передаете в функцию password_verify и всё у вас заработает, без проблем. Я с Yii на node.js уезжал с этими хешами, никаких проблем :)

    Все что ниже можно не читать. Там для тех, кому интересно откуда взялось 3 разных префикса ($2a$, $2x$, $2y$).

    Префиксы $2y$ и $2x$ существуют только в PHP, так как они налажали в алгоритме блоуфиш в версиях до 5.3.7. Префикс $2x$ был добавлен для обратной совместимости, т.е. если вы генерили хеши $2a$ в версии PHP до 5.3.7 и теперь обновились до или выше этой версии и хотите, чтобы ваши уже существующие уязвимые хеши продолжали правильно работать, то нужно было заменить у таких хешей префикс с $2a$ на $2x$. Префикс $2y$ это уже исправленный алгоритм хеширования и ничем не отличается от $2a$ в версиях PHP 5.3.7 и выше. Подробнее обо всем этом можно прочитать php.net/security/crypt_blowfish.php

    Yii использует префикс $2y$. Но в спецификации из всех этих префиксов есть только $2a$ и его и нужно использовать, если у вас версия выше или эквивалентна PHP 5.3.7. Так что, если вы избавились от Yii, то можете поменять и префикс у ваших хешей. Потому что, когда я мигрировал на node.js библиотека для блоуфиш хеширования естественно не поддерживала никаких $2y$ и $2x$ и не собиралась этого делать в дальнейшем, так как это не их баги, а PHP, вот пусть PHP с этими префиксами и живет :)
    Ответ написан
    1 комментарий
  • Как включить/отключить нужный javascript код?

    @vanyaseverin
    Здравствуйте, можно воспользоваться быстрым способом - использование jQuery плагина https://github.com/matthewhudson/device.js
    1) Определяете тип устройства
    2) В зависимости от устройства присваиваете необходимые параметры

    Также можно воспользоваться небольшим кодом
    <script>
      if (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)) {
        // код для мобильных устройств
      } else {
        // код для обычных устройств
      }
    </script>
    Ответ написан
    Комментировать
  • Python как параллельно выполнять GET запросы с получением ответа?

    @deliro
    Недавно делал обёртку для SteamAPI. Так как он очень лагающий, использовал такой класс-декоратор:
    class Retry(object):
        """
        Retries function with exponential delay if it's releasing exception.
        """
        def __init__(self, tries, exceptions=None, delay=1, exponent=1.5):
            self.tries = tries
            if exceptions:
                self.exceptions = tuple(exceptions)
            else:
                self.exceptions = (Exception,)
            self.delay = delay
            self.exponent = exponent
    
        def __call__(self, f):
            def fn(*args, **kwargs):
                exception = None
                for i in range(self.tries):
                    try:
                        return f(*args, **kwargs)
                    except self.exceptions as e:
                        delay = self.delay * self.exponent ** i
                        if i + 1 == self.tries:
                            raise exception
                        sleep(delay)
                        exception = e
                raise exception
            return fn


    Ну и использование такое:
    @Retry(3)
    def f():
        ...


    Повторяет функцию ещё раз (заданное кол-во раз), если функция вернула exception. Каждый раз время увеличивается экспоненциально.

    Что касается асинхронности - копайте в сторону asyncio и aiohttp.
    Ответ написан
    Комментировать