Задать вопрос
  • Как найти "стабильность/колебание" последовательности?

    sergiks
    @sergiks Куратор тега Алгоритмы
    ♬♬
    «Стабильностью» считаем точное попадание данных в одну из предопределённых функций - линейную, периодическую? Могут ли быть другие варианты «стабильности» ?

    Можно проверять каждую из гипотез [ a*x + b, a*sin(b*x) + c] на данных, подбирая коэффициенты, минимизируя отклонения. Посчитать сумму квадратов отклонений данных от теории, сделать вывод, попадает идеально или нет.

    См. Регрессионный анализ
    Ответ написан
    Комментировать
  • Как скачать переписку вконтакте?

    sergiks
    @sergiks Куратор тега ВКонтакте
    ♬♬
    ВК недавно выкатили раздел «Защита данных», где пишут, в том числе, что пользователь может запросить у них копию всех своих данных тут: vk.cc/transparency Не пробовал, но, может, там и все переписки?

    Другой способ – написать JS приложение. Cоздать в ВК Standalone приложение, авторизоваться в нём с правами messages и вызывать метод messages.getHistory() с указанием id нужной беседы.
    Ответ написан
    Комментировать
  • Небольшой вопрос по javascript?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    textareaContent и coursorPosition задаются однажды при выполнении скрипта. На тот момент, наверное, textarea пуста, курсор в ней не находится.
    Ответ написан
  • Почему [] < {} сравниваются как строки? А [] < 1 как числа?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Во втором случае потому, что один из аргументов имеет примитивный тип Number, объект приводится к нему же.

    В первом сравниваются два объекта. При попытке привести их к числу сначала вызывается метод valueOf(), который для обоих возвращает не примитив (тогда бы сравнивали эти примитивы) а this, себя же, объект. Поэтому во вторую очередь вызывается метод toString(), который возвращает примитивы: пустую строку для массива и "[object Object]" для объекта.

    Upd. вот статья, раскрывающая глубины: Преобразование типов в JavaScript

    отрывок
    В общих чертах алгоритм выглядит следующим образом:
    • Если входящее значение уже является примитивом, ничего не делать и просто вернуть его.
    • Вызвать input.toString(), если результат примитив — вернуть его.
    • Вызвать input.valueOf(), если результат примитив — вернуть его.
    • Если ни один из методов не вернул примитив — бросить ошибку TypeError.

    При численном преобразовании сначала вызывается метод valueOf(), а уже затем toString(). При строковом преобразовании наоборот — сначала происходит вызов toString(), а уже потом valueOf().

    Большинство встроенных типов не имеют метода valueOf или же имеют valueOf, который возвращает свой собственный объект this, который игнорируется, так как this не является примитивом. Вот почему численное и строковое преобразование в большинстве случаев работает одинаково — оба в конечном итоге вызывают метод toString().

     
    Мало инфы в MDN
    См. правила преобразования типов:
    Когда происходит преобразование типов (т.е в случаях использования нестрогого сравнения), JavaScript преобразует типы String, Number, Boolean и Object, следующим образом:

    • При сравнении числа (Number) и строки (String), JavaScript пытается преобразовать числовой литерал строки в число. Затем полученное число округляется до ближайшего возможного значения типа Number.
    • Если один из операндов является логическим (Boolean), то он преобразуется в значение типа (Number). Если значение логического операнда равняется истине (true), то значение этого операнда преобразуется в 1. Иначе - в 0 (ложь / false).
    • Если объект сравнивается с числом или строкой, JavaScript пытается получить значение по умолчанию для данного объекта. Полученное значение преобразуется в примитив, посредством методов valueOf() и toString(). Если преобразовать объект не удается, генерируется ошибка времени выполнения.
    • Обратите внимание на то, что объект преобразуется в примитив, если, и только если, второй операнд является примитивом. В ином случае, операнды сравниваются как объекты, соответственно, операция сравнения вернет истину в том случае, если внутренние ссылки обоих объектов ссылаются на один и тот же объект в памяти.



    Там же рассматривают особобый случай объекта строки new String('foo'); по сравнению с простой строкой.
    Ответ написан
    2 комментария
  • Как сделать чтоб при клик на кнопку, должен открывать свой блок(должно работать без id и тк)?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Лучше без отрыва от разметки прямо в html записать, какая кнопка чем рулит. Например, в data-атрибутах:


    Не рекомендуется использовать атрибут hidden для скрытия/отображения табов. Лучше для этого задействовать класс, который временно прячет элемент. Например, Bootstrap'овский .d-none
    Ответ написан
    Комментировать
  • Выбор варианта из условия, с двойной переменной?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Надо хранить где-то выбранные значения. Например, в объекте, назовём его «состояние» state. При изменении select'а записывать выбранное значение и смотреть, если уже выбраны оба, можно обновить сумму.
    Ответ написан
    3 комментария
  • Связный список (или нет), как правильно в этом случае?

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

    Можно описать всё дерево структурой с множеством уровней вложенности. Или придумать подобие адресации и добавлять / извлекать очередной вопрос с вариантами по «адресу»; тогда список будет без вложенностей, плоский.

    Тут не предусмотрел повторные клики по более высоким элементам в иерархии. По хорошему, они должны удалять все нижестоящие выборки.
    фиддл
    Ответ написан
    Комментировать
  • Как получить число и месяц, преобразов переменную на php?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    Можно получить время, скажем, понедельника на этой неделе через относительный формат времени strtotime('monday this week'); (только на англ.)
    $rusdate='ПТ 18:00';
    list($dow, $hours, $minutes) = sscanf($rusdate, "%s %d:%d");
    
    $rusweek = explode(',','ВС,ПН,ВТ,СР,ЧТ,ПТ,СБ');
    $ndow = array_search($dow, $rusweek);
    
    date_default_timezone_set('Europe/Moscow'); // если не настроен PHP
    $time = strtotime('monday this week') + 86400 * $ndow + 3600 * $hours + 60 * $minutes;
    echo date('Y-m-d H:i:s', $time);
    // 2018-10-13 18:00:00
    Ответ написан
  • Почему разные разрешения при изменении 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 комментария