• Почему разные разрешения при изменении redirect_uri при получении токена VK?

    sergiks
    @sergiks Куратор тега ВКонтакте
    ♬♬
    Наверное, уже разобрались, что серверный токен с правом wall можно получить только с редиректом на https://oauth.vk.com/blank.html. Так ВК борется со спамом, когда у пользователя один раз получают разрешение, и потом спамят от имени его аккаунта.
    Если не разобрались.
    Права доступа:
    Данное право доступа по умолчанию недоступно для сайтов (игнорируется при попытке авторизации для приложений с типом «Веб-сайт» или по схеме Authorization Code Flow).


    Решить проблему можно несколькими не очень приятными способами. Все они сводятся к тому, чтобы заполучить полную адресную строку после редиректа на blank.html:
    1. ⚠️не делайте так! Попросить у пользователя скопировать адресную строку окна и вставить в форму на вашем сайте
    2. Написать расширение для браузера и просить пользователей установить его – не все согласятся так заморачиваться
    3. Оформить веб-клиент как скачиваемое приложение. Electron, nwjs, вот это всё.. Внутри него будет веб-компонент, в котором откроется сайт ВК и пользователь авторизуется с тем же редиректом. Разница в том, что такой «браузер» полностью контролируется вашим кодом – заберёте URI, перешлете в фоне на свой сервер. Но скачивать такое тяжелое приложение будут еще меньше, чем плагин в браузер. И у вас должна быть отличная репутация, чтобы в вашем приложении люди вводили свой логин/пароль от ВК.


    Может, опишите подробнее задуманный функционал? Его, вероятно, можно реализовать и другими способами. Например, постинг в сообщества можно делать от вашего (запасного) аккаунта. Пусть админы, желающие пользоваться вашим приложением, добавляют тот аккаунт в Редакторы своего сообщества – так он сможет создавать посты на стене. А уж один ваш аккаунт вы сумеете авторизовать и забрать его токен любым из выше описанных способов.
    Ответ написан
  • Что внутри base64?

    Символы -_ не могут встречаться в base64. Может, это разделитель?
    Если брать только часть строки после подчеркивания, знаки равенства лишние, т.к. с ними длина 62, а должно делиться на 4, т.е. 60.

    Длина всей строки 888 символов. Красивое число )

    Есть какие-то еще сведения об этой строке?
    Ответ написан
    Комментировать
  • Как трансформировать object Object?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    var object = [
      {0:{text: "Abbeville", value: "230"}},
      {1:{text: "Abernant", value: "231"}}
    ];
    
    const option = object.reduce((p,c) => {
      const e = Object.values(c)[0];
      p.push({text: e.text, value: parseInt(e.value)});
      return p;
    }, []);
    Ответ написан
    Комментировать
  • Обращение к элементу константы находясь внутри этой константы?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Создаётся объект без имени. У объекта есть свойство src и потом вы добавляете свойство srcAssets.

    В форме const X = {...} сначала правая часть – создаётся объект без имени с указанными свойствами; потом ссылка на этот объект записыватся в константу X. Поэтому в правой части рано использовать X – он ещё не определён.

    Хорошие и правильные варианты уже предложили в ответах. Ещё можно создать X с известными и независимыми свойствами, а позже задать ему ещё свойства:
    const PATHS = {
      src: 'src'
    };
    PATHS.srcAssets = PATHS.src + '/assets';


    Это никак не противоречит «константности».
    Ответ написан
    Комментировать
  • This в JavaScript?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Полно видео, выбирайте
    Ответ написан
    Комментировать
  • Как правильно получать токен VK?

    sergiks
    @sergiks Куратор тега ВКонтакте
    ♬♬
    После авторизации и переброски на http://oauth.vk.com/blank.html c токеном в хэше, вытащить его вы сможете только, будучи «над» браузером пользователя. Web extension, установленный в браузере пользователя или целиком ваше приложение на каком-нибудь Electron с компонентом браузера смогут получить такие данные. В обычном браузере этого никак не сделать: чужой домен.

    По второму вопросу. Имея токен получить id пользователя можно вызвав метод users.get() с этим токеном: вернёт данные пользователя, выдавшего токен.
    Ответ написан
  • Как рассчитать полет снаряда в двумерном пространстве под наклоном?

    Две подзадачи:
    1. траектория полёта
    2. проекция на матрицу камеры
     

    1. Траектория
    • Вертикальная составляющая скорости снаряда линейно падает. Снаряд вернется на плоскую Землю, когда верхний зуб скорость станет равна начальной со знаком минус:
      график скорости и траектория
      5bbbaf41abc02901256019.png

    • Горизонтальная составляющая скорости снаряда остаётся неизменной, считаем, что пальба в вакууме.

    Разложили начальный вектор пальбы на верт. и гор. составляющие и получаете положение снаряда в любой момент времени в виде координат (x, y, z).

    2. Проекция
    Теперь надо любую точку в этом вашем мире спроецировать на экран, который под 45° к горизонтали. Не считаем, что объекты становятся меньше с удалением, что параллельные прямые сходятся в одной точке и т.п. Просто бросаем любую точку на экран, чтобы упала под прямым углом к плоскости экрана.

    Центр экрана будем считать, имеет координаты (0, 0) и смотрит точно на (0, 0, 0) трехмерного мирка. У экрана ось X вправо, ось Y вверх. В мирке ось x влево, ось y вверх, ось z вдаль.

    Смещение в мирке по x точно так же добавит X'у экранному.
    Смещение в 3D по y добавит экранном Y чуть меньше из-за угла в 45°. Т.е. y домножим на корень-из-2 пополам.
    То же со смещением по z.

    X = x;
    Y = (y + z) * 0.7071;


    Предлагаю вам самостоятельно объединить эти два откровения в работающий код.
    Ответ написан
    1 комментарий
  • Куда залить телеграм бота на Node.js?

    Telegram бота можно бесплатно развернуть на основе Google Spreadsheets (в качестве БД) и Google Apps Script на JS. Делал простенький проект с поиском инфы в таблице и выводом остальных полей. А также приёмом аплоада фотографий с сохранением на Google Drive.
    Ответ написан
  • Как сгенерировать ссылки в div?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Вторым параметром можно передать объект свойств-событий-методов:
    $("<a>", {
        href: "#",
        onclick: () => addPrice(ui.item.valueX),
        title: "add"
    }).prependTo( "#hintPrice" );
    Ответ написан
  • Как сделать плавное хаотичное движение блоков?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Ответ написан
    Комментировать
  • Какой использовать генератор случайных чисел?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Наверное, вам подойдёт шум Перлина.

    Например, josephg/noisejs. Функции возвращают в диапазоне -1..1. Одинаковые seed и x, y всегда вернут одинаковое значение.
    Ответ написан
    1 комментарий
  • ООП ли фреймворк miniPHP?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    Там в исходниках вовсю определения классов – так что можно сказать, что да, объектно-ориентированный.
    Ответ написан
    2 комментария
  • Какие существуют стили написания кода и как выбрать свой?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Читайте чужой код. Работайте в команде над проектом.
    Стиль кода как язык общения – нужен, чтобы быть понятным и удобным в группе людей.

    Вы как музыкант, умейте играть и блюз и джент и блатняк и джаз. А в каком стиле играть сейчас, выбирайте в контексте группы / песни.

    в каких случаях использовать тернарные операторы

    Если общая длина получается короткой, умещается в одну строку, не требует вложенности. См. примеры.
    Ответ написан
    Комментировать
  • Как по 2-мерной матрице вычислить представляющую ее функцию f(x,y)?

    Можно пытаться приближенно найти функцию, заранее предположив её порядок – методом градиентного спуска. Но это будет «размытое» приближение.

    Представьте, у вас в исходном изображении четкие нули и единицы, по диагонали:
    0 1
    1 0

    Найдётся функция, которая, с некой выпуклостью проходит через оба квадрата. Но она также заденет один из «нулевых» соседей:
    spoiler
    5bb9f5689d074148626831.png


    Идеально опишет некая ломаная линия из прямых отрезков. Да и то, по пути из (1, 1) в (2, 4) заденет непричастные клетки.
    Ответ написан
  • Не могу разобраться с конструкторами ООП. Почему они не работают?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    У driver нет метода autoInfo()
    В function driver() {...} отсутствует определение this.autoInfo.

    Учитесь смотреть в консоль браузера на ошибки JavaScript.
    Ответ написан
    1 комментарий
  • Получить адрес?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Для безопасности пользователей нет возможности получить title страницы на чужом сайте, если сайт явно не прописал такую возможность для вашего домена. Google не прописал, поэтому title вы не получите.

    Чтобы это таки сделать, вам надо на вашем сервере настроить проксирование запросов. Т.е. скрипт ваш будет образаться именно к вашему сайту, например: https://vash-site.com/proxy/google.com – а все запросы к /proxy/* будут проксироваться на указанный после слеша домен.

    А проверку, что там ввёл пользователь, сделайте на регулярных выражениях.
    Ответ написан
    Комментировать
  • Как поменять элементы в массиве?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    // меняет два элемента массива in-place
    function swap(arr, a, b) {
      arr[a] = arr.splice(b, 1, arr[a])[0];
    }
    
    const Twelve = [1, 2, 3, 4, 5, 6, 7, 8 ,9 ,10 ,11 ,12];
    swap( Twelve, 2, 5); // индексы считаются от 0
    swap( Twelve, 7, 11);
    swap( Twelve, 9, 4);
    
    Twelve //  [1,2,6,4,10,3,7,12,9,5,11,8]
    Ответ написан
    Комментировать
  • Существует ли быстрый алгоритм проверки пересечения линии полигона с собой?

    sergiks
    @sergiks Куратор тега Алгоритмы
    ♬♬
    Известны ли какие-то особенности полигона, или каждая следующая вершина может оказаться где угодно?

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

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Попытаться найти первый элемент, меньший предыдущего (если сортировка по возрастанию).

    spoiler
    function isAscending(arr) {
      if (arr.length < 2) return true;
      let prev = arr[0];
      for (let i = 1; i < arr.length; i++) {
        if (arr[i] < prev) return false;
        prev = arr[i];
      }
      return true;
    }
    
    isAscending([1,2,3,4,5]) // true
    isAscending([1,2,1,4,5]) // false
    Ответ написан
    Комментировать
  • Как сделать переадресацию поддоменов на отдельные страницы Вконтаке?

    Если подключить домен на CloudFlare, можно там прописать Page Rules для нужных вам редиректов. В бесплатном режиме можно три правила, кажется.
    Ответ написан
    3 комментария