Задать вопрос
  • Как дотянуться до метода в этом случае?

    Seasle
    @Seasle Куратор тега JavaScript
    const foo = {
        bar: t => t * 2,
        baz: {
            biz(a) { return this.bar(a) }
        }
    };

    и
    foo.baz.biz.bind(foo)(4)
    или
    foo.baz.biz.call(foo, 4)
    или
    foo.baz.biz.apply(foo, [4])
    Ответ написан
    Комментировать
  • Как составить запрос по разным строкам, где значение одного из столбцов одинаковое?

    rozhnev
    @rozhnev Куратор тега MySQL
    Fullstack programmer, DBA, медленно, дорого
    select user_id
    from tbl 
    where entity_id in (24, 25)
    group by user_id
    having count(distinct entity_id) = 2;


    sqllize
    Ответ написан
    Комментировать
  • Как создать файл используя js?

    Sect0R
    @Sect0R
    Full Stack Developer
    function downloadTextAsFile(text, filename) {
      const blob = new Blob([text], {type: 'text/plain;charset=UTF-8'});
      const link = document.createElement('a');
    
      link.setAttribute('download', filename);
      link.setAttribute('type', 'hidden');
      link.setAttribute('href', window.URL.createObjectURL(blob));
    
      document.body.appendChild(link);
      link.click();
    
      setTimeout(() => {
        window.URL.revokeObjectURL(link.href);
        document.body.removeChild(link);
      }, 100);
    }
    
    downloadTextAsFile('Hello world', 'hellofile.txt');
    Ответ написан
    Комментировать
  • Каррирование... Что здесь происходит?

    MrDecoy
    @MrDecoy Куратор тега JavaScript
    Верставший фронтендер
    Константин, карирование оно не в вызове функции. А в том, что после вызова функции возвращается другая функция, внутри которой есть замыкание на аргумент, переданный в предыдущий вызов.

    Правильно ли я понимаю, что curriedSum(1)(2,3) - здесь в качества a - цифра 1, а в качестве b - (2,3) ? А как же c?

    Eсли смотреть относительно функции sum, то:
    В первых круглых скобка только a = 1.
    Во вторых круглых скобках b = 2 и c = 3.

    А здесь тогда как? curriedSum(1)(2)(3) - где здесь каррирование?

    Первый вызов вернёт функцию, которая "помнит" 1, второй вызов вернёт функцию, которая "помнит" 1+2, ну и третий вызов вернёт сумму 1+2+3.

    То есть эта запись: curriedSum(1)(2)(3)
    Эквивалентна этой:
    let curriedSum = curry(sum); // сделали функцию sum карируемой.
    
    var one = curriedSum(1) // так как sum ожидает 3 аргумента, то этот вызов вернёт функццию, которая помнит 1 и ожидает ещё 2 аргумента.
    var onePlusTwo = one(2) // так как sum ожидает 3 аргумента, то этот вызов вернёт функццию, которая помнит 1 и 2 и ожидает ещё 1 аргумент.
    var result = onePlusTwo(3) // так как sum ожидает 3 аргумента, два аргумента уже помнит функция onePlusTwo и мы передаём третий аргумент, то вернёт результат sum(1,2,3)
    result == 6 // true
    
    // При этом, мы можем в данном случае снова вызвать onePlusTwo, но уже с другим аргументом,
    // и получим соответствующий результат:
    onePlusTwo(7) // вернёт 10, так как onePlusTwo помнит 1+2, то есть получим sum(1,2,7) // 10.

    Вот в чём и состоит смысл карирования. Иметь функцию, которая помнит какое-то значение и не требует каждый раз это значение в аргументах.
    Ответ написан
    Комментировать
  • Как наложить цвет на png с помощью CSS, JS?

    Get-Web
    @Get-Web Куратор тега CSS
    Front-End Developer
    Как вариант использовать изображение как маску:
    Ответ написан
    1 комментарий
  • Сколько всего ip адресов в глобальном интернете?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Реально можно использовать чуть меньше 2 млрд адресов
    IPv4. Фактически последние IP-blocks были распределены много лет назад.
    Сейчас только за счет NAT и серых адресов в ротации абоненты и получают в аренду
    ардеса.

    Новые адреса можно добыть только забрав их номера у корпораций которые в свое время
    нахватали много.
    Самой большой долей адресов владеет США.

    По IPv6 не скажу. Не знаю.
    Ответ написан
    3 комментария
  • Перспективно ли изучения GO для начинающих?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Я не собираюсь переквалифицироваться в джуны и пытаться устроиться в компанию, возраст уже не тот для этого да и организация иная - нет привязки к единому месту географически к тому-же я всегда худо-ли бедно, но работал на себя, не в компании.


    Письмо, полное сомнений и множества вопросов. Я не совсем понял что требуется от нас. Если отвечать на главный вопрос - то да. Перспективно. Go драйвит Google как основной язык для микросервисов. Но учитывая возраст кандидата я-бы спросил следующее.
    - как с английским?
    - как быстро обучаешся чему-то новому?
    - согласен ли на релокацию?

    Какие перспективы в РФ - понятия не имею но перспективы в зарубежных конторах - есть.

    Хочу предупредить автора об ошибках которые я сам совершал. Я думал что дело в языках и технологиях. Но это не так. Дело в коммуникациях. Я работал минимум с 5 зарубежными компаниями и я своими глазами видел что мои знания просто нивелировались на фоне например моего не очень сильного английского. А другие teammates в силу широких коммуникатиционных скилов могли очень быстро найти контакт с нужными людьми и обходили
    меня в карьере достаточно быстро.

    По сути когда тебе за 40 - вообще не имеет значения какой язык ты знаешь. У тебя за плечами должен быть уже
    такой багаж что тебя можно просто брать как опытного советника в технических вопросах. Язык можно подучить но если речь идет просто о распределенных системах и микро-сервисах то больше знаний требуется в части например анализа узких мест системы. Кеширования. Грамотного дизайна безопасности и репликаций и бекапов и восстановления от сбоев. Этот пласт знаний вообще лежит вне языка. И поэтому джун даже очень хорошо выучивший Go или Python не может решать такие вопросы. А автор - скорее всего может. Барьером может быть
    какая-то банальность. Например язык. Поэтому я и спрашиваю.
    Ответ написан
    4 комментария
  • Как валидировать картинку?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Загрузить файл через FileReader, прочитать первые байты и проверить сигнатуру.
    Для PNG должно быть 0x89 0x50 0x4e 0x47 0x0d 0x0a 0x1a 0x0a или\x89PNG\r\n\x1a\n
    Ответ написан
    Комментировать
  • Как перевести ВЕСЬ текст в кривые в adobe illustrator?

    c0nt0rti0m
    @c0nt0rti0m
    Препресс для флексы и офсетной печати.
    Все слои разлочить (палитра слоев снять замочки)
    Ctrl+Alt+2 - Unlock All (разлочить все объекты)
    Ctrl+A - Выделить всё
    Ctrl+Shift+O - Все шрифты в кривые
    Ответ написан
    1 комментарий
  • Как экспортировать файл в svg из photoshop?

    anoraak
    @anoraak
    UI/UX designer
    1. Выделяешь нужные слои с фигурами, далее Слои → Смарт-объект → Преобразовать в смарт-объект.
    2. Заходишь в смарт-объект
    3. Файл →Экспортировать → Экспортировать как... → svg
    Ответ написан
    3 комментария
  • Что действительно пишут на Python как правило в бизнесе?

    AlexNest
    @AlexNest Куратор тега Python
    Работаю с Python/Django
    • Нейронные сети
    • Инструменты для работы с BIG DATA
    • Скрипты для автоматизации
    • Серверные части веб-сайтов (то, что вы описали - клиентская часть).
    • Боты для соц.сетей.
    Ответ написан
  • Как парсить с wildberries?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Начнём с того, что 500 шт. каждые 5 с - это 100 запросов в секунду. Прокси будут баниться очень быстро при подобном трафике.

    Далее, получение данных мегабыстро имеет смысл в автоматизированных системах торгов на фондовой бирже, а если это в телеграм человеку сливать, то он в любом случае будет реагировать намного медленнее этих 5 секунд. И зачем тогда так часто опрашивать? Если опрашивать с интервалом в 3 секунды, то товары будут приходить с опозданием в среднем 13 минут, максимум 25 минут, что для многих задач вполне приемлемо.

    Советую поговорить с заказчиком ещё раз на тему того, что именно ему нужно.
    Ответ написан
    15 комментариев
  • Как отсортировать объекты по id?

    Seasle
    @Seasle Куратор тега JavaScript
    const mapOptions = (options, values) => option.map(({ option }) => {
        const usedValues = new Set();
        return {
            id: option.id,
            name: option.name,
            slug: option.slug,
            values: values.reduce((acc, { id, value }) => {
                if (id === option.id && !usedValues.has(value)) {
                    usedValues.add(value);
                    acc.push({ id, value });
                }
    
                return acc;
            }, [])
        };
    });
    
    console.log(mapOptions(options, option_values));
    Ответ написан
    7 комментариев
  • Как ускорить работу кода?

    Для таких целей отлично подходит паттерн "worker pool"
    https://gobyexample.com/worker-pools

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

    @micronull
    Go умеет самостоятельно разименовывать указатели при вызове метода.

    Т.е. так как у нас по факту переменная `second` является указателем на структуру `firstStruct`, то мы должны были бы предварительно разименовать, перед вызовом метода `init`:
    var second *firstStruct = &firstStruct{} 
    (*second).init()

    Но Go знает что это указатель и в синтаксисе можно производить вызов метода напрямую, а Go самостоятельно разименует указатель на структуру.
    second.init()

    У конструкции `&secondStruct{}` нет ошибки, так как сигнатура метода описывает работу с указателем на структуру:
    func (f *secondStruct) init() {...}
    Поэтому такая консрукция в данном случае не доступна: var f ifRealization = secondStruct{}
    Ответ написан
    1 комментарий
  • Зачем нужны скобки в данном случае?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    ({a, b, c} = {a:1, b:2, c:3 }) // вези меня браузер! Ну если внутри ничего нет то попытаемся


    let {a, b, c} = {a:1, b:2, c:3 } // слева переменная, справа значения которые в нее нужно положить. Да Повелитель!
    Ответ написан
    3 комментария
  • Стоит ли закрывать сайт от индексации на время разработки?

    Sanes
    @Sanes
    Разрабатывать надо на отдельной копии, потом заливать.
    Ответ написан
    1 комментарий
  • Как метод filter работает с includes в этом коде?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    arr.filter() будет передавать по очереди каждое из чисел массива arr в функцию,
    и оставит в выходном массиве только те числа, для которых функция вернула true. См. документацию Array.prototype.filter()

    Функция должна вернуть true для чисел, у которых первая цифра 1, 2 или 5.

    Один из способов – сделать из числа текстовую строку, и взять её первый символ. Т.е. первую цифру, тоже как текст.

    К строке текста в JavaScript можно обращаться как к массиву – забирая по индексу одну из букв:
    "Habr"[0] // "H" вот тут такой вариант и используют.

    Метод startsWith() — метод строки. Есть только у строки. Тоже годится для получения из строки текста первого символа. Но [0] короче.
    Ответ написан
    3 комментария