• Как при регистрации через facebook получить имя на кирилице?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Использовать параметр locale.

    $request = new FacebookRequest(
      $session,
      'GET',
      '/me',
      array(
        'fields' => 'id,name',
        'locale' => 'ru'
      )
    );
    
    $response = $request->execute();
    $graphObject = $response->getGraphObject();
    /* handle the result */
    Ответ написан
    Комментировать
  • Как вывести количество share facebook?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Используя множественные идентификаторы:
    http://graph.facebook.com/?ids=http://test.test,http://ya.ru
    Ответ написан
    Комментировать
  • Как получить подписчиков страницы на ФБ?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Через API нельзя. Можно получить только полное количество подписчиков через свойство fan_count на странице.

    Спарсить тоже не получится, т.к. Фейсбук не выдает полный список.

    Какую задачу вы пытаетесь решить?
    Ответ написан
    3 комментария
  • Для чего класс Stream в PSR-7?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    www.php-fig.org/psr/psr-7/#13-streams

    Стримы нужны для работы с потоками. Например тогда, когда вы не знаете размер ответа или ответ настолько велик, что не умещается в ОЗУ.
    Ответ написан
    Комментировать
  • FaceBook me/picture?type=large. Как вернуть JSON?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Чтобы вернуть JSON, нужно передать параметр redirect установленый в значение false.
    $request = new FacebookRequest(
      $session,
      'GET',
      '/me/picture',
      array(
        'type' => 'large',
        'redirect' => 'false'
      )
    );
    
    $response = $request->execute();
    $graphObject = $response->getGraphObject();
    /* handle the result */
    Ответ написан
    Комментировать
  • Go или PHP как язык влияет на развертывание приложения?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Язык никак не влияет на развертывание приложения. Влияют зависимости.
    Например, если вы собираетесь создавать Debian-пакет, то вам так или иначе прийдется прописать зависимости от других пакетов. Если какой-то пакет уже установлен, то нет никаких проблем.

    Прописывание в крон или создание vhost для Nginx задачи тривиального характера и не должны вас смущать. Это стандартные вещи, как и настройка ротации логов или синхронизация времени на сервере.

    Как и Go, PHP тоже можно собрать в один файл. Например так работает Composer.

    Единственный плюс Go - это возможность получения готового исполняемого файла без доступа к исходникам. Если для PHP нужен обфускатор или что-нибудь такое, то Go просто исполняемый файл и точка.
    Ответ написан
    Комментировать
  • Выделенный сервер работает быстрее vps?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    В плане производительности должно быть так. Но есть ньюансы.
    VPS обычно работает в кластере и при выходе из строя одного из серверов кластера кластер не падает, но падает производительность.
    При физике, если сервер падает, то все дохнет сразу и безвозвратно. Т.е. при переезде вы должны позаботиться о резервных копиях и осознавать риски.
    Ответ написан
    Комментировать
  • В каких случаях использование фреймворка(например express.js) для nodejs не оправдано?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Неоправдано в следующих случаях:
    • Вы только начали изучать Node.JS и практически ноль в нем. В данном случае лучше сразу разобраться с основами и только затем браться за изучение фреймворков.
    • Когда нужно сделать что-то очень простое и очень быстрое. Например у вас 2-3 функции, которые просто работают с базой. Например счетчик визитов на сайте.
    • Когда фреймворк не вписывается в архитектуру вашего приложения. Например у вас повсюду веб-сокеты и к ним сбоку пытаются прилепить еще и фреймворк.
    • Когда приложение написано для стриминга данных, например мультиплексор какой-нибудь. Тут обычные фреймворки курят в сторонке.
    Ответ написан
    Комментировать
  • FaceBook API авторизация, как узнать ID?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Вам нужно получить информацию о себе

    GET https://graph.facebook.com/v2.10/me?fields=id,name&token=....

    Тут показано, как это сделать правильно https://developers.facebook.com/docs/php/howto/exa...

    Вам поможет https://developers.facebook.com/tools/explorer/145...

    Если непонятно, как устанавливать пакеты через Composer, то вам сюда getjump.me/ru-php-the-right-way
    Ответ написан
  • Какой ноутбук выбрать для детей за до 400$?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    www.ebay.com/itm/Apple-2010-MacBook-Pro-13-2-4GHz-...

    Если HDD заменить на SSD вообще будет вещь.
    Ответ написан
    Комментировать
  • Валидация данных в GO?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    В го используют валидатор https://github.com/asaskevich/govalidator
    Предполагаю, вот это вам тоже будет полезно https://github.com/avelino/awesome-go
    Ответ написан
    Комментировать
  • Стабильно ли работает windows 10 на macbook pro 13(2016-2017)?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Винда будет работать на макбуке с такой же стабильностью, с которой она работает на остальных ноутбуках. Может даже лучше, поскольку железо на маках качественнее.

    Если очень хочется юзать винду на маке, используй BootCamp, это когда стоят обе ОСи. https://support.apple.com/en-gb/HT201468
    Ответ написан
    Комментировать
  • Как отслеживать эффективность рекламы в инстаграме?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Не работайте с блогерами. Покупайте рекламу непосредственно у Facebook с настроенным пикселем и оплатой за результат.
    Блогеры не умеют таргетировать рекламу на потенциально заинтересованного человека.
    https://www.facebook.com/business/help/31207886583...
    Ответ написан
    3 комментария
  • Какие best practices по защите API?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Обычные практики описаны тут https://www.owasp.org/index.php/REST_Security_Chea...

    Подлинность запроса проверить возможно лишь при передаче данных через сервер.
    В противном случае можно полагаться на стандартные механизмы защиты от кросс-сайт скриптинга или банальные проверки referrer. Однако такие мелочи подделываются на раз.
    Ответ написан
    1 комментарий
  • Какое техническое решение подобрать для создания сайта?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Поскольку я сталкивался с подобными задачами, сразу скажу, что нужно писать систему готовую к горизонтальному масштабированию.
    Сразу выкиньте из головы готовые CMS и прочую шелуху, когда вы засунуте в базу под лям объектов, вы начнете топить печь деньгами, чтобы обеспечить должный уровень отклика.
    Базу следует брать SQL, начинать с mysql и изначальной настройкой мультимастер шардинга+репликации+failover. Здесь очень долго посидеть над анализом документации, поиска по параметрам и т.д. На первичном этапе это не требуется, но потом часто выливается в гемор.
    На бэкэнд следует брать Go (Gorm для работы с базой). Он легко деплоится и просто масштабируется c помощью примитивной балансировки.
    Строительную документацию и картинки сразу хранить в S3-подобном хранилище.
    На фронтэнд берите последний AngularJS. Можете поиграться с Vue, но потом вам все равно прийдется это переписывать.

    Для такой работы вам потребуются следующие специалисты: дизайнер (фринлансер), devops-чел (проверенный, на удаленке), 2 программиста (frontend + backend) на полный рабочий день (они тоже могут работать удаленно) и руководитель проекта (технический директор).

    Не экономьте на специалистах, иначе получится неюзабельное говно.

    Не думайте о такой системе, как о сайте. Вам нужно веб-приложение.
    Ответ написан
  • Какие существуют подходы для парсинга больших данных?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Обычно большие объёмы парсятся посредством map/reduce. На PHP лучше всего использовать консольные скрипты и сразу отводить побольше памяти. Алгоритмы парсинга очень зависят от формата файлов. Например csv парсить очень легко. Обычно такие файлы парсят сразу в несколько потоков.
    Разного рода xml парсят либо через simple xml либо через domparser. Иногда парсят с помощью ручного построения дерева. Т.е. Читают файл посимвольно и формируют дерево тегов. Этот подход работает, когда файлы очень большие, а глубина вложенности небольшая и формат предсказуем.
    Разного рода xls парсятся через Phpexcel, он даже картинки умеет доставать.
    Плюс парсинги делаются через механизм очередей. Например загружается файл на сервер, ставится задача распарсить файл, далее файл парсится через консольный скрипт. В особо извращенных случаях, вроде xls файлов с адскими макросами внутри, доходит до инстанцирования OLE объектов на отдельной виндовой машине и выдёргивания данных через vbs.
    Ответ написан
    Комментировать
  • В чем смысл нейронных сетей / машинного обучения?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Смысл нейронной сети в ее адаптации и экстраполяции результатов.
    Приведу пример. Пусть это будет система проверки писем на спам.
    Вначале вы обучили систему определенному набору сообщений. Часть из них нормальные, часть из них спам.
    Затем стали попадаться новые сообщения. Люди могут переобучить модель и улучшить модель.

    По сути однослойная НС и есть статистика. Грубо говоря слова и их веса в результате.
    Но все меняется, когда вы переходите от однослойной модель к многослойной. Получается статистика от статистики.
    А теперь самое интересное.
    Статистика на то и статистика, что она рассматривается с позиции того, что ее результат постоянен и потом используется для каких-то выводов. ИИ и НС подразумевают адаптацию к изменениями, т.е. живую статистику, адаптирующуюся к результатам.
    Ответ написан
    Комментировать
  • Git - как добавить вложенные папки в репозиторий?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Положите этот файл в обе вложенные директории и добавьте его в трекинг.
    Во вложенной директории вам нужно добавить .gitignore через форсирование добавления.

    git add -f path/to/results/graphs/.gitignore
    Ответ написан
    Комментировать
  • Почему я получаю проблему нарушения уникальности в MongoDB?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Потому что MongoDB при построении текстового индекса разбивает строку на слова, затем удаляет так называемые стоп-слова и может их нормализовывать.
    Допустим у вас есть следующие 2 документа.
    {text: "Два красивых яблока" }
    {text: "Много яблок" }


    Когда будет сформирован текстовый индекс, произойдет следующее. На самом деле все происходит немного иначе, в целом процесс таков.

    Строка токенизируется на слова:
    "Два красивых яблока" → ["Два", "красивых", "яблока"]
    "Много яблок" →  ["Много", "яблок"]


    Далее слова нормализуются

    ["Два", "красивых", "яблока"] → ["два", "красивый", "яблоко"]
    ["Много", "яблок"] →  ["много", "яблоко"]


    Теперь начинается формирование словаря. Каждому слову начинаем присваивать номера.

    ["два", "красивый", "яблоко"] → [1, 2, 3], и словарь [1↔"два", 2↔"красивый", 3↔"яблоко"]
    ["много", "яблоко"]  →  [4, 3], и в словарь [1↔"два", 2↔"красивый", 3↔"яблоко", 4↔"много"]


    Т.е. получаем следующий набор в индексе
    [1→1, 2→1, 3→1]
    [4→2, 3→2]

    Т.к. это индекс, то разбиения объединяются в общий указатель
    1→1, 
    2→1, 
    3→1, 
    4→2 
    3→2


    А теперь смотрите, у нас индес объявлен уникальным, но указатели на записи повторяются, значит указатель не уникальный.
    Поэтому и возникает ошибка.

    Чтобы решить проблему, нужно создать 2 индекса.
    Первый - текстовый, но без требования уникальности.
    Второй - уникальный, на основе бинарного дерева.
    Ответ написан
    2 комментария
  • Junior PHP, что бы вы спросили на собеседовании?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    1. Написать простейшее API для формы обратной связи. От фронта через POST приходят поля email и text. Ответ в JSON, булев параметр success. От руки, прямо на доске. Если через php_filter завалидирует поля, жирный плюс.
    2. Зачем нужены интерфейсы?
    3. Что делать, если отображаются крякозябры на экране вместо сайта?
    4. Есть база, в ней 2 таблицы: пользователи и фотографии, напишите запрос, который будет выводить список пользователей с их первой (самой старой) и последней (самой новой) фотографиями.
    5. Работали ли вы с git ранее?
    Ответ написан
    Комментировать