• OR запрос для Elasticsearch?

    @RidgeA
    Как-то так, но сейчас не на чем проверить
    {
      "query": {
        "bool": {
           "should": [
              {
                "bool" : {
                               "must" : [
                                                {"term": {"field": {"value": 1}}},
                                                {"term": {"field2": {"value": 2}}},
                                            ]   
                            }
               },
              {"term": {"field3": {"value": 3}}}
            ]
         }
      }
    }
    Ответ написан
    Комментировать
  • Как использовать токены для аутентификации в API?

    bigton
    @bigton
    Web-программист
    Как сделал я.

    От классических сессий при работе через API отказался.

    1. Для авторизации пользователь вводит логинпароль, устройство отправляет их по https на account/auth
    2. account/auth выдает token (token_id:token_val) и secret
    3. все дальнейшие запросы устройство отправляет по http указывая token и подписывая запросы с помощью secret

    Как работает.

    Сервер получает запрос, видит что пришел token, разбивает его через двоеточие на input_id и input_val. Выбирает из базы токен с пришедшим input_id, получает из базы значение token_val и secret. Сравнивает input_val и token_val. Если в базе нашелся токен с нужным id и значения val равны, пришло время проверить достоверность запроса.

    Клиент помимо токена передал sign (подпись), которую сформировал так (например) secret+api_path+query_param. На стороне сервера вам известно api_path и api_param, а secret выбрали из базы. Хешировать подпись принято через hmac().

    Помимо токена и подписи можно передавать time и так же класть его в sign, и на стороне сервера отсекать запросы запросы которым больше 60 сек.

    Таким образом.

    Если кто то слушает ваш канал, он не сможет подделывать запросы (а значит компроментировать), и из-за проверки времени жизни запроса не сможет вечно получать данные по однажды перехваченного запроса.

    А в базе токены можете хранить пока клиент сам не запросит их уничтожения и сохранить время последного обращения через токен, и удалять токены которые не использовались более 60 дн.
    Ответ написан
    9 комментариев
  • Правильно составить SQL запрос?

    Melkij
    @Melkij
    PostgreSQL DBA
    Выведите сгенерированный SQL-запрос, найдите в нём ошибку, перепишите код так, чтобы генерировался нужный вам запрос.
    Ответ написан
    1 комментарий
  • Как трансформировать блок, с помощью CSS, что бы он не возвращался в исходное состояние?

    @4iloveg
    Full-Stack HTML Developer
    Изменять код css в файле а не в инструментах разработчика.
    Ответ написан
    4 комментария
  • Как посчитать кол-во возможных исходов?

    wataru
    @wataru Куратор тега Математика
    Разработчик на С++, экс-олимпиадник.
    Ответ - количество сочетаний по n-1 из (n+m-2), или сколько способов выбрать n-1 объект из n+m-2.

    Это потому что нужно обязательно сделать n-1 шагов вниз и m-1 шагов вправо. Вопрос только, в каком порядке их делать. Всего будет сделано n-1+m-1 шагов и из них надо выбрать какие-то n-1 вниз, остальные будут шаги вправо. Вот и получаются сочетания.

    Можно считать треугольником Паскаля, получится в точности то же, что описал poznavaka,
    можно считать по формуле факториалов: (n+m-2)! / (n-1)! / (m-1)!

    Для вашего примера, где N=3 и M=4 ответ будет 5!/2!/3! = 120/2/6 = 10.
    Ответ написан
    Комментировать
  • Как в большой базе можно получить такую статистику?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Запрос от количества данных не зависит.
    Регулярка не нужна, есть SUBSTRING_INDEX

    Если запрос одноразовый, то просто запросить нужные данные.
    select SUBSTRING_INDEX(username, ' ' , 1), count(1) from table group by SUBSTRING_INDEX(username, ' ' , 1)
    Индекс на поле будет очень полезен

    Если надо выполнять регулярно, то поменять структуру таблицы, вынеся имя в отдельное поле.
    Ответ написан
    1 комментарий
  • Как изменить горячую клавишу смены языка на Ctrl+Shift в Ubuntu 18.04?

    Vladimir_Levadnij
    @Vladimir_Levadnij
    Генеральный разнорабочий Текнокомо
    Товарищи, убил вагон времени но нашёл как победить :-) Интернет полон инфы как при помощи gnome-tweak-tool включить переключение раскладки по Alt+Shift, но нам то с вами нужно именно чтобы по Alt+Shift работало переключение источников ввода, а это другой функционал, который очень удобен так как позволяет быстро переключаться между двумя последними языками, при этом там может быть портянка из 5 языков (как у меня). Решение вот тут, сразу предупрежу, чтобы не было конфликта, если вы включили Alt+Shift через gnome-tweak-tool, то отключите там.

    Суть:

    1. Установить пакет dconf-editor и отредактировать один или оба следующих ключа, чтобы заставить все работать:

    2. Перейти к org.gnome.desktop.wm.keybindings

    3. Измените источник входного сигнала переключателя на ['<Alt>Shift_L']

    4. Аналогично, ключевой переключатель-вход-источник-назад изменится на ['<Shift>Alt_L']

    Я привык нажимать кнопки в обратном порядке, поэтому у себя сделал на оборот и работает :-)
    Ответ написан
    7 комментариев
  • Что послушать про программирование?

    Express777
    @Express777 Автор вопроса
    UPD: Нашел, аудио подкасты про PHP конкретно:
    5minphp.ru/page/2

    blog.yandex.ru/post/25068
    Прямые ссылки на видео
    Наибольшая общая мера последние 2500 лет, 1 часть video.yandex.ru/users/ya-events/view/129
    Наибольшая общая мера последние 2500 лет, часть2 video.yandex.ru/users/ya-events/view/128/?cauthor=...
    Как раз что то подобное я имел ввиду.
    Послушал первую часть "Наибольшая общая мера: последние 2500 лет". Честное слово, просто оторваться не мог.
    Примерно 80% этого видео можно послушать, а 20% это код алгоритмов, которые надо видеть. В принципе, вытащить пару раз телефон из кармана, за часовую поездку в автобусе, не состовляет особого труда.
    Главная моя мысль, слушать учителей уровня Дональда Кнута или Александра Степанова
    К сожалению, с английским на слух у я меня очень плохо, иначе можно было бы послушать Харольда Абельсона и Джеральд Сассмана ( geektimes.ru/post/103322 ).
    Ответ написан
    1 комментарий
  • Как через API Facebook опубликовать запись на стене группы?

    @vista1x
    1) Для начала создаешь приложение. Сделать это можно тут https://developers.facebook.com
    Важные моменты: в настройках необходимо указать email и активировать приложение (раздел app review)
    2) Нужно получить ключ для работы с апи. Идешь сюда https://developers.facebook.com/tools/explorer, в правом верхнем углу жмешь Get Token -> Get Page Access Token, даешь разрешения на запрос прав доступа. Жмешь снова Get Token и выбираешь свою группу, потом жмешь Request publish_pages и снова соглашаешься. Тут мы получили временный ключ. Нужно обменять его на постоянный (ну как постоянный.. действовать он будет 60 дней, далее - нужно будет снова получать).
    Выполняешь такой запрос (в этом же приложении)
    oauth/access_token?grant_type=fb_exchange_token&client_id=[ID_ПРИЛОЖЕНИЯ]&client_secret=[КЛЮЧ_ПРИЛОЖЕНИЯ]&fb_exchange_token=[ТОКЕН]

    То, что в квадратных скобках, естественно, подставляешь своё. Токен берешь из поля "маркер доступа". Выполняешь запрос, в ответе будет твой токен. Ура.

    Теперь то, что касается программирования:
    1) Берешь Facebook SDK https://github.com/facebook/facebook-php-sdk-v4/ (ставить конечно лучше через композер, но если не имеешь представления "что это и как с этим работать", то просто скачиваешь и инклудишь себе автозагрузчик, должно работать.
    2) Сам постинг.
    $app_id = ''; // ид приложения. берешь в настройках приложения (или копируешь с адресной строки)
    $app_secret = ''; // ключ приложения. берешь в настройках приложения
    $access_token = ''; // токен, который мы получили
    $page_id = ''; // id группы
    
    $fb = new Facebook\Facebook(array(
        'app_id' => $app_id,
        'app_secret' => $app_secret,
        'default_graph_version' => 'v2.2',
    ));
    $fb->setDefaultAccessToken($access_token);
    
    // а тут мы непосредственно постим запись на стену. 
    // в этом примере запись представляет собой картинку + текст
    $data = [
        'message' => 'Текст',
        'source' => $fb->fileToUpload('/полный/путь/к/картинке'),
    ];
    $batch = [
        'photo' => $fb->request('POST', "/{$page_id}/photos", $data),
    ];
    $responses = $fb->sendBatchRequest($batch);


    Если пост не уходит, смотришь переменную $responses - в ней есть ответ сервера.
    Ну и документацию не стоит обходить стороной https://developers.facebook.com/docs/php/gettingst... Тут, кстати, описана установка SDK поподробнее
    Ответ написан
    6 комментариев
  • Можно ли подключить .aar к Unity3d средствами maven и как это можно сделать?

    BasmanovDaniil
    @BasmanovDaniil
    Геймдизайнер-телепат
    Если упаковать юнити как библиотеку и внедрить в андроидовский проект, то можно делать что угодно, но тогда вам придётся поддерживать два отдельных проекта и каким-то образом запускать юнити из своего приложения. Можно пойти с другой стороны и экспортировать андроидовский проект из юнити, а дальше постпроцессом подсасывать нужные зависимости. Ещё можно попробовать подглядеть как Google Play Services обновляет свои библиотеки внутри юнити.
    Ответ написан
    Комментировать