• Почему не работает метод request_contact в Telegram X?

    Тоже сталкивался с данной проблемой. Насколько я понял данный функционал еще не реализован в Telegram X как и отправка координат.

    Решал эту проблему костылем. Если данную кнопку пользователь нажимает в Telegram X, то на сервер приходит просто текст "Отправить номер телефона". На такой текст висит обработчик, и если он пришел, прошу пользователя ввести номер телефона руками, после чего высылаю ему смс с кодом, которое он должен отправить боту для подтверждения номера.
    Ответ написан
    Комментировать
  • Где взять список зарезервированных страниц?

    ximik777
    @ximik777 Автор вопроса
    Изучив практику крупных проектов, пришел к следующему выводу, чтобы реализовать задуманную структуру, требуется:
    1. Запретить использование точки в логине. Например, на GitHub, Twitter, VK.com и д.р. в логине/домене запрещена точка. VK.com только спустя какое-то время запретил использование точки, и видимо это не просто так. Отсюда следует, что головная боль, с файлами в корне проекта, устранена.
    2. Запретить логины короче 3-х символов. Это позволит оставить большой карман под страницы и директории в корне.
    3. Создать списки исключений. Помимо тех страниц что уже предусмотрены ТЗ, потребуется на этапе создания прототипа немного пофантазировать и продумать возможный функционал в будущем и зарезервировать страницы под него. Так же потребуются изучить крупные ресурсы и собрать списки страниц в ручном или полуавтоматическом режиме.
    4. Запретить использование спец. символов(если таковые имеются) в начале и в конце логина, а также при повторении одного и того же спец. символа 2 раза подряд.

    В своем проекте, из спец. символов разрешу использовать только знак "тире". Примерно такое регулярное выражение отвечает необходимым условиям:
    /^(?=.{4,32}$)(?![-])(?!.*[-]{2})[a-zA-Z0-9-]+([^-])$/
      |__________||_____||__________||__________| |____|
            |        |        |           |         |_ запрет «-» в конце логина
            |        |        |           |_ разрешенные символы 
            |        |        |_ запрет «-» 2 раза подряд
            |        |_ запрет «-» в начале логина
            |_ длина логина от 4 до 32 символов

    Помогли принять данное решение: Алексей Ярков, Алексей, Roman Kitaev.
    Спасибо!
    Ответ написан
    Комментировать
  • Как с помощью JS изменить фон блока при наведении сразу в html коде?

    <div style="background-color: red">
        <div class="asd" onmouseover="this.parentNode.style.backgroundColor = 'green'">123123</div>
    </div>
    Ответ написан
    1 комментарий
  • Как собрать статический бинарник с libcurl?

    ximik777
    @ximik777 Автор вопроса
    libcurl нужно конфигурировать с ключем "--enable-ares".
    ./configure --disable-shared --enable-static --prefix=/tmp/curl --disable-ldap --disable-sspi --without-librtmp --disable-ftp --disable-file --disable-dict --disable-telnet --disable-tftp --disable-rtsp --disable-pop3 --disable-imap --disable-smtp --disable-gopher --disable-smb --without-libidn --enable-ares

    Тогда программа получит функцию gethostbyname и сможет разрешить доменное имя.
    Ответ написан
    Комментировать
  • Как правильно посчитать время пользователя online?

    ximik777
    @ximik777 Автор вопроса
    На ум приходит что то типа такого решения.
    $mc = new Memcache;
        $mc->connect('127.0.0.1', 11211);
    
        $period = 30;   // longpoll reconnect
        $delay = 1;     // reconnect delay
        $uid = 1;
    
        if(!$last_active = $mc->get("last_active_{$uid}")){
            $mc->set("last_active_{$uid}", time());
            die();
        }
    
        $now = time();
        $online_time = $now - $last_active;
        $counter = $mc->get("online_counter_{$uid}") ?: 0;
    
        if($online_time < $period+$delay){
            $counter += $online_time;
        } else {
            $counter += $period;
        }
        $mc->set("online_counter_{$uid}", $counter);
        $mc->set("last_active_{$uid}", time());
    
        echo "User ({$uid}) online time: {$counter}";
    Ответ написан
    2 комментария
  • KPHP - обмен опытом, кто работал?

    А вообще, го сюда https://vk.com/kitphp - я создал.
    Ответ написан
    Комментировать
  • KPHP - обмен опытом, кто работал?

    Настройка Engine

    При условии что kphp-kdb здесь: /usr/local/src/kphp-kdb/

    cd /usr/local/src/kphp-kdb/
    make all

    mkdir /usr/share/engine/
    mkdir /usr/share/engine/bin/
    mkdir /var/log/engine/
    mkdir /etc/engine

    cp /usr/local/src/kphp-kdb/objs/bin/* /usr/share/engine/bin/
    cp /usr/local/src/kphp-kdb/scripts/debian-init.d-engine /etc/init.d/engine
    cp /usr/local/src/kphp-kdb/scripts/_etc_logrotate.d_engine /etc/logrotate.d/engine
    cp /usr/local/src/kphp-kdb/scripts/start-engine /usr/share/engine/bin/

    logrotate -d /etc/logrotate.d/engine
    logrotate -v -f /etc/logrotate.d/engine

    Теперь можно запускать KDB движки.

    Для примера запуск lists-engine:

    touch /etc/engine/engine.1.conf
    Вставляем содержимое:
    execute lists-engine
    arg1 groups23
    -p 11200
    -vvv

    touch /var/lib/engine/groups23.bin
    /usr/local/src/kphp-kdb/scripts/create_binlog.sh 0x6ef20101 128 98 > /var/lib/engine/groups23.bin
    hexdump -C /var/lib/engine/groups23.bin
    Выдаст такое:

    00000000 4b 64 4c 04 01 01 f2 6e 00 00 00 00 80 00 00 00 |KdL....n........|
    00000010 62 00 00 00 63 00 00 00 |b...c...|
    00000018

    chown -R kitten:kitten /var/lib/engine/

    echo 1 > /proc/sys/vm/overcommit_memory

    service engine start 1
    service engine status

    Если fail смотрим логи

    cat /var/log/engine/engine-1.log
    Ответ написан
    Комментировать
  • KPHP - обмен опытом, кто работал?

    Запуск Web-Сервера

    Пример с учетом установки по инструкции выше.

    KPHP работает под юзером "kitten"
    Нужно его создать:

    mkdir /var/lib/engine - лучше всего здесь, потом пригодится.
    sudo useradd kitten -b /var/lib/engine -u 239
    chown -R kitten:kitten /var/lib/engine/

    cd /var/www/testkphp/
    Создаем файлик:
    touch index.php
    Вставляем тестовое содержимое:
    <?
    print_r($_GET);
    print_r($_SERVER);
    ?>

    Компилим наш файлик в бинарник с ключом -n:
    python /usr/local/src/kphp-kdb/KPHP/tests/kphp.py index.php -o server -n

    На выходе получаем исполняемый файл "server"
    Запускаем ./server -H 8080

    Идем на 127.0.0.1:8080
    Ответ написан
    Комментировать
  • KPHP - обмен опытом, кто работал?

    Сборка KPHP
    Ubuntu 12.04.4 LTS

    sudo apt-get install git-core openssl zlib1g-dev libcg libprcre3-dev

    Ставим libre2:
    wget re2.googlecode.com/files/re2-20140304.tgz
    tar -zxvf re2-20140304.tgz
    cd re2/
    make
    make test (Не обращаем внимание на ошибку)
    make install
    make testinstall

    cd /usr/local/src/
    git clone https://github.com/vk-com/kphp-kdb
    cd /usr/local/src/kphp-kdb/

    make kphp

    Проверяем сборку: /usr/local/src/kphp-kdb/objs/bin/kphp2cpp
    Если все ок:

    export KPHP_PATH=/usr/local/src/kphp-kdb

    Пример компиляции php в kphp:

    Для примера возмем файл bench.php
    Лежит он здесь: https://gist.github.com/anonymous/9391146
    Скачиваем, кладем.
    mkdir /var/www/testkphp
    cd /var/www/testkphp/
    Компилируем bench.php в kphp
    python /usr/local/src/kphp-kdb/KPHP/tests/kphp.py bench.php -o bench
    После компиляции запускаем
    ./bench
    Увидим таблицу тестов.

    Сравниваем с php:
    php bench.php

    Радуемся!
    Ответ написан
    Комментировать
  • Как запустить KPHP?

    Ставил на Ubuntu 12.04.4 LTS

    sudo apt-get install git-core openssl zlib1g-dev libcg libprcre3-dev

    Ставим libre2:
    wget re2.googlecode.com/files/re2-20140304.tgz
    tar -zxvf re2-20140304.tgz
    cd re2/
    make
    make test (Не обращаем внимание на ошибку)
    make install
    make testinstall

    cd /usr/local/src/
    git clone https://github.com/vk-com/kphp-kdb
    cd /usr/local/src/kphp-kdb/

    make kphp

    Проверяем сборку: /usr/local/src/kphp-kdb/objs/bin/kphp2cpp
    Если все ок:

    export KPHP_PATH=/usr/local/src/kphp-kdb

    Пример компиляции php в kphp:

    Для примера возмем файл bench.php
    Лежит он здесь: https://gist.github.com/anonymous/9391146
    Скачиваем, кладем.
    mkdir /var/www/testkphp
    cd /var/www/testkphp/
    Компилируем bench.php в kphp
    python /usr/local/src/kphp-kdb/KPHP/tests/kphp.py bench.php -o bench
    После компиляции запускаем
    ./bench
    Увидим таблицу тестов.

    Сравниваем с php:
    php bench.php

    Радуемся!
    Ответ написан
    2 комментария