• Как найти попутные маршруты?

    freeExec
    @freeExec
    Участник OpenStreetMap
    Использовать пространственные функции в расширении вашей БД, которые умеют в пространственный индекс, а не перебирать точку вручную.
    Ответ написан
    3 комментария
  • Почему метод не определяется?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Подменяете экземпляр класса другим объектом. Вот это вот из конструктора следует убрать:

    return this.data();
    Ответ написан
    1 комментарий
  • Как решить следующую задачу?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    А в чём проблема?
    количество_разных_пар_мужчин * количество_женщин + количество_разных_пар_женщин * количество_мужчин
    (m * (m - 1) / 2) * w + (w * (w - 1) / 2) * m =
    = (m * w * (m + w - 2)) / 2
    Ответ написан
    Комментировать
  • Порядок обучения с нуля при известном конечном результате. Соответствие ЯП к этапам реализации?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    1. Любой.
    2. Любую.
    3. Ответ на этот вопрос потребует учебника средней толщины, а потому не влезет в лимит символов для ответа на Тостере.

    Может вам просто использовать 1С?
    Ответ написан
    Комментировать
  • Зачем тут в методе setState name обернут в массив?

    RomReed
    @RomReed
    JavaScript, Flutter, ReactNative, Redux, Firebase
    для того что бы положить ключ в state не name а его значение
    Ответ написан
    7 комментариев
  • Как сделать сложный sql запрос?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    JOIN и UNION
    Ответ написан
    Комментировать
  • Каким должен быть путь к файлу?

    ThunderCat
    @ThunderCat Куратор тега Веб-разработка
    {PHP, MySql, HTML, JS, CSS} developer
    <img src="/im/image/fom/file.png">
    <link rel="stylesheet" href="/im/css/fom/main.css">


    Влияет ли его длина на скорость загрузки?

    Конечно влияет, в зависимости от кодировки каждый символ в описании пути до файла занимает от 8 до 32 бит. И все это надо загрузить.
    Ответ написан
    Комментировать
  • Можно-ли скачать видео с YouTube используя DevTools?

    Есть такая «секретная» ссылка: www.youtube.com/get_video_info?video_id=XXXXXX
    Вместо XXXXXX подставьте хэш видео, который в ссылке на ролик, типа youtu.be/BWCiWZtrWXU после слеша.

    По этой (первой) ссылке вернутся URL-encoded данные. Распакуйте их и возьмите параметр url_encoded_fmt_stream_map. Его значение опять надо распаковать как URL-параметры. И из результата вытащить параметр url – это ссылка на единый скачивабельный видеофайл.

    Например, в консоли браузера:
    function getUrlParams(search) {
        let hashes = search.slice(search.indexOf('?') + 1).split('&')
        let params = {}
        hashes.map(hash => {
            let [key, val] = hash.split('=')
            params[key] = decodeURIComponent(val)
        })
    
        return params
    }
    var s = '------'; // здесь длиннющая строка из ответа /get_video_info
    var a = getUrlParams(s);
    var b = getUrlParams(a.url_encoded_fmt_stream_map);
    console.log(b.url); // эту ссылку открываем в браузере - это скачиваемый видеофайл


    Очень надеюсь, что вы покопаетесь в этих данных более подробно, разберётесь, как получать прямые ссылки на скачиваемые файлы во всех форматах и размерах, которые предлагает YouTube, и напишете короткий материал на Хабр по результатам, а также опубликуете gist с рабочим кодом для консоли браузера.
    Ответ написан
    3 комментария
  • Как соединить линиями блоки div?

    arsenty
    @arsenty
    Full Stack Designer
    Без JS и с описанной адаптивностью: https://codepen.io/arsenty/pen/mYxXoQ
    Ответ написан
    1 комментарий
  • Как работает воспроизведение и загрузка аудио в браузерах?

    @BorisKorobkov
    Web developer
    По вашей ссылке в первом же абзаце есть ответ на ваш вопрос:
    It defaults to Web Audio API and falls back to HTML5 Audio.


    Включая эту настройку, вы принудительно используете HTML5 Audio, лишаясь дополнительных возможностей Web Audio API. Если они вам не нужны, то можете использовать эту настройку. А можете и просто использовать тег <audio> без всяких библиотек.
    Подробнее см. https://github.com/yandex/audio-js/blob/master/tut...
    Ответ написан
    5 комментариев
  • Каким образом можно сделать вращение svg circle?

    NeiroNx
    @NeiroNx
    Программист
    у SVG-объектов есть параметр transform, который позволяет задавать угол поворота отностительно какой-то точки(rotate)
    Ответ написан
    Комментировать
  • Какой монитор для кодинга 2019?

    @pibidipi
    1.imac 5k 27”.
    2.eizo ev2450 и выше
    3.dell серия ultrasharp u2410 и выше.
    4.lg ultrafine/ultrawide
    5.benq/nec
    Можно ещё посмотреть:
    Iiyama/Aoc/viewsonic/fujitsu-siemens
    Главное диагональ от 24, обычно в мониторах меньшей диагонали нет fullhd (lg ultrafine исключение). соотношение сторон 16:10 удобнее чем 16:9, оно больше процентов на 20. Также мониторы dell и еizo за счкт удобной ноги легко поворачиваются в портретный режим (на 90 градусов.) и имеют доп юсб. Разрешение 2560 конечно лучше чем fullhd, но это пока вы не попробуете iMac 5k.
    А вот в других мониторах с 4к может быть неудобная масшатабищация и все будет очень мелким, а если увеличить масштаб на 200% то иконки будут деформироваться и растягиваться.( исключение lg ultrafine)
    Если бюджет совсем ограничен, лучше взять старый dell на ips. Они на ccfl лампах. Это мягче и теплее чем led. Глаза уставать будут меньше. И вообще обращайте внимание на подсветку монитора и глянцевость/матовость покрытия. Попробуйте то и то в магазинах и посмотрите как вам лучше. Есть мониторы ccfl, led, rgb led. Есть те которые светят по яркости на 200кд, а есть те, что на 600кд. Одним лучше яркие и наоборот, другим матовые и наоборот. в мониторах от ейзо, нек и фуджитсу сименс есть датчик яркости и датчик присутствия. монитор сам гаснет когда вас нет и сам настраивает яркость. некоторые мониторы 10 битные, подключение через дисплейпорт лучший вариант, чем dvi, vga, hdmi.
    Ответ написан
  • Что может находиться на карте с таким покрытием?

    Moskus
    @Moskus
    Удаление от базовой станции ограничено не только рельефом, но и величиной параметра timing advance для базовой станции. Который, если объяснять на пальцах, указывает, какова может быть максимальная задержка сигнала, проходящего от абонентского устройства до БС. Потому, даже если уровень сигнала достаточен (скажем, у вас телефон приделан к направленной антенне), но TA превышен (например, до БС - 80 километров), никакой связи не будет.
    Вот потому и ровный круг.
    Ответ написан
    Комментировать
  • Простой векторный графический редактор?

    Vlad_IT
    @Vlad_IT
    Front-end разработчик
    Ну, если бы на все задачи можно было найти точные инструкции, было бы скучно.
    Пробуйте написать начиная с малого, например:
    1) Создайте холст, просто объект, который будет помещать в себя фигуры. Это будет некий viewport.
    2) Сделайте скролл этого холста мышкой, во все стороны.
    3) Сделайте возможность динамически добавлять объекты на холст, сначала определите базовый объект, например прямоугольник или линию. Легче на этом моменте сразу определить интерфейс IShape, таким образом дальше будет легче унифицировать все объекты при добавлении их на холст, да и холст ничего не должен знать об этих объектах, только об интерфейсе.
    4) Сделайте drag&drop добавленных объектов, чтобы их можно было тащить.
    5) Добавьте зум, это не простой шаг, тут нужно многое учитывать, особенно часто на этой задаче ломается позиционирование drag&drop объектов.
    6) Сделайте трансформатор объектов, который будет изменять их размер (для прямоугольников и.т.д.), менять точки (для линий), вращать и.т.д.
    7) Сделайте редактор свойств, через который будете назначать атрибуты вашим объектам, такие как цвет заливки, цвет рамки, ширина рамки, непрозрачность и.т.д.
    8) Добавляйте потихоньку различные объекты. Можете подглядывать в другие редакторы, например inkscape.
    9) Реализуйте сохранение и загрузку холста. Тут лучше не изобретать свой формат данных, а использовать открытый, например svg.
    10) Буфер обмена. Тут либо свой формат в бинарник, либо тот же самый svg в текстовом виде (что куда лучше, так сделано в фигме).
    11) Отменить/вернуть - важная штука, и на первый взгляд простая. Но простая она только в том случае, если запоминать шаги путем снимка всех текущих объектов, но этот способ плохой. По нормальному нужно при любой операции над объектами на холсте делать снимок изменений. Например подвинули кубик на 10px влево, и записали в память значение
    { id: 'id кубика', x: -10 }
    и потом при нажатии отмена, будете просто делать обратную операцию, добавлять эти 10px. Тут у вас возникнут сложность с операцией "возврат", но думаю, если вы дошли до этого шага, упорство у вас уже есть. Пригодятся паттерны: command и memento
    12) Ну, тут уже по мелочи, различные киллер фичи, новые объекты, свойства, различные меню и.т.д.
    Ответ написан
    1 комментарий
  • Напишите функцию sum, которая работает так: sum(a)(b) = a+b,как понять 2 ретурна?

    edli007
    @edli007
    full stack, team lead
    Это значит что функция sum вернет еще одну функцию
    function sum() {
      return function() {
      }
    }
    Ответ написан
    4 комментария
  • Можно ли написать функцию, которая проверяет существует ли переменная или нет (js)?

    @Interface
    Дисклеймер: так как вопрос скорее теоретический, я не стараюсь предоставить "адекватное" решение.
    Конечно, все это нельзя использовать в реальном проекте!


    Интересный вопрос.

    Начнем с того, что определимся насколько критично сохранить сигнатуру функции? В зависимости от этого, решения можно поделить на 2 категории:
    - где допускается изменение сигнатуры
    - где сигнатура должна быть строго такой и никакой иначе

    Также есть ряд решений, подразумевающий предобработку кода тем или иным путем.

    Стоит оговориться, что строго говоря такую функцию в данном виде написать нельзя, потому как при вызове функции переменная уже должна быть "разименована", а значит мы так или иначе будем работать с ее значением или с какими-то косвенными сайд эффектами вызванными обращением к ней.


    Сначала рассмотрим несколько решений с изменением сигнатуры: они попроще и в каком-то смысле более логичны.

    есть как минимум 2 категории решений с изменением сигнатуры:
    - функция будет принимать строку
    - функция будет принимать функцию

    При этом проблема того, что все падает до попадания в функцию, пропадает сама собой.

    вот несколько решений:

    1) класс решений построенный на анализе кода в рантайме:
    решение заключается в том, что вызываемая функция анализирует свой код (а также код функции которая вызвала ее и т.д.)
    https://stackoverflow.com/questions/2051678/gettin... вот тут есть частчный разбор такого решения.
    Приводить его в виде кода я не буду :)

    Плюсы:
    - вроде как решает задачу
    - сигнатура изменилась не сильно
    Минусы:
    - крайне жирное решение с точки зрения производительности
    - сигнатура не та, что просили
    - нельзя использовать 'use strict', так как решения возможно будут завязаны на arguments.callee.caller

    Уровень безумия: достаточно безумное

    2) решение построенное на том, что приниматься будет функция:
    isExists(() => someVar); // такая будет сигнатура

    Это решение хоть и меняет сигнатуру, но ее возможно сохранить максимально подобной желаемой

    Одна из возможных реализаций:
    function isExists(someVarFn){
        try {
            someVarFn();
        } catch(e) {
            if (e instanceof ReferenceError) {
                return false;
            }
            throw e;
        }
        return true;
    }

    Примеры использования:
    function f1() {
        let x;
        console.log(isExists(() => x)); //  => true
        console.log(isExists(() => y)); //  => false
    }
    
    function f2() {
        let x;
        console.log(isExists(() => x)); //  =>  true
        console.log(isExists(() => y)); //  => false
    }
    
    f1();
    f2();


    Плюсы:
    - плюс-минус адекватная производительность
    - довольно компактно
    Минусы:
    - несильно меняется сигнатура функции
    - api получается несколько не очевидным

    Уровень безумия: почти адекватное

    3) решения с использованием eval:
    Суть похожа на решение #2, но с другим api:
    function isExists(varName, fn){
        return fn(`(()=>{
            try {
                const nop = ${varName};
            } catch(e) {
                if (e instanceof ReferenceError) {
                    return false;
                }
                throw e;
            }
            return true;
        })()`);
    }
    
    function f1() {
        let x;
        console.log( isExists('x', c => eval(c)) ); //  => true
        console.log( isExists('y', c => eval(c)) ); //  => false
    }
    
    function f2() {
        let y;
        console.log( isExists('x', c => eval(c)) ); //  =>  false
        console.log( isExists('y', c => eval(c)) ); //  => true
    }
    
    f1();
    f2();


    Плюсы:
    - сложнее чем в №2 передать какую-то фигню
    Минусы:
    - сигнатура отлиается сильнее и уродливей
    - сложнее / жирнее / больше чем №2

    Уровень безумия: безумненько

    Решения с сохранением сигнатуры:

    4) магия es6 Proxies + with
    класс решений строится на стратегии: слушать доступ к глобальному объекту и если он происходит и в нем нет переменной с таким именем - такой переменной нет:
    const pseudoUndefined = {};
    
    const scopeTrap = new Proxy(window, {
        has() {return true},
    
        get(target, prop) {
            if (prop in window) {
                return window[prop];
            } else {
                return pseudoUndefined;
            }
        }
    })
    
    function isExists(someVar) {
        return someVar !== pseudoUndefined;
    }
    
    // весь код использующий функцию должен быть обернут в такой with :(
    with (scopeTrap) {
    
        let y;
        console.log( isExists(x) ); //  =>  false
        console.log( isExists(y) ); //  => true
    
    }


    Плюсы:
    - мы сохранили желаемую сигнатуру! Ура!
    Минусы:
    - теперь вместо исключения будет получаться что-то совсем левое. Хорошего дебагга! :D
    - накладные расходы производительности
    - все нужно обернуть в with
    - необходима поддержка es6+

    Уровень безумия: с точки зрения реализации - задача подъемная. использовать в бою - а вы знаете толк!

    Решения с предобработкой:

    Первые две категории решений исходят из того, код (включая код вызовов функции) будет исполняться без изменений напряму интерпретатором. Если развязать себе руки, то открывается целый спектр новых решений:

    5) первое, что приходит в голову с приобретением такой свободы - это, очевидно... написание своего языка программирования компилируемого в js / своего интерпретатора js и т.д.
    В рамках этого решения особого труда (относительно всего прочего) не составит реализовать такую функцию нативно.

    Плюсы: ...
    Минусы: ...
    (Без комментариев)

    Уровень безумия: я думаю все понятно
    ...

    есть и более сдержанные решения, например, используя compile-time можно оптимизировать предыдущие решения:

    6) можно используя парсер составить дерево областей видимости (хэш-таблица [функция <-> список переменных]), привязать каждую область к функции, через позицию в исходном коде (возможно придется сохранять дополнительную информацию). А дальше все это интегрировать с решением №1.

    В итоге:

    Плюсы относительно (#1):
    - относительно хорошая производительность
    Минусы:
    - сложно
    - дорого
    - требует compile-time

    Уровень безумия: стало еще безумнее, чем было :)

    7) написать (или найти) плагин для babel'я (или чего-то другого), который будет трансформировать доступ к переменным в особую функцию

    Плюсы относительно (#1):
    - достигнут результат
    Минусы:
    - требует поддержки
    - требует compile-time
    - упадет производительность (вероятнее всего существенно)

    Уровень безумия: буднечно безумное
    Ответ написан
    3 комментария
  • Как реализовать Drag-and-drop?

    profesor08
    @profesor08 Куратор тега JavaScript
    Ну смотри, когда ты тащишь какой-то элемент, мышка двигается, и продолжает создавать события. Так вот когда при перетаскивании она войдет в зону карточки, сдвигай ее вниз (margin-top). При отпускании клика убирай сдвиг и вставляй элемент перед карточкой. Все.
    Ответ написан
    4 комментария