• Как удалить объект по ссылке?

    Vlad_IT
    @Vlad_IT Куратор тега JavaScript
    Front-end разработчик
    Проще всего получить новый массив через функцию filter, отобрав только те элементы, которые не равняются искомому элементу. Если сравнивается ссылка, то можно даже получить индекс через indexOf, и удалить элемент по полученному индексу через функцию splice
    Ответ написан
    5 комментариев
  • Как узнать, кто занимает localhost:3000?

    dimovich85
    @dimovich85 Автор вопроса
    https://u-academy.net/
    Всем спасибо, за подсказки! Нет ни одного процесса связанного с локалхост:3000. НО! Я разобрался, тут все запутаннее оказалось. Расскажу, может кому поможет.
    Проблема оказалась в браузере. Помогла полная очистка куков, истории и данных от приложений.
    Я скачал с гитхаба исходники PWA - progressive web app, скачал, чтобы изучить эту технологию. PWA основывается на объекте web worker (js), который как бы "живет" в браузере, как отдельный процесс и позволяет веб приложению работать на базе веб технологий, но при этом выглядеть как нативное. Так как это было приложение-пример, то разработчики сделали web worker, который перехватывает запросы на локалхост:3000 и обрабатывает его сам. Если бы это было реальное приложение, оно бы перехватывало запросы на адреса своих серверов, а другие адреса не трогало, а тут приложение было настроенно на локалхост. Так как это приложение я установил с помощью хрома, который по умолчанию, то проблема была только в хроме, я попробовал перед очисткой истории зайти через ИЕ на локалхост и не получил ответа, тогда как хром по прежнему показывал мне то самое приложение. Очистив куки, кеш и данные приложений все вернулось на места.
    Ответ написан
    2 комментария
  • На каком языке написан движок CSS?

    @Vvnvplg
    Веб-разработчик
    Css парсит браузер. Из этого можно сделать вывод, что чем хотят разработчики браузера его парсить, тем и парсят.
    Подозреваю, что в основном это C.
    Ответ написан
    Комментировать
  • Как изогнуть input?

    JRK_DV
    @JRK_DV
    Рецепты https://codepen.io/jrkdv/full/LKLXdq
    Хотелось бы сделать из этой палки изогнутую палку

    Боюсь спросить на сколько изогнутую, как пример не?
    https://jsfiddle.net/vtLn0596/1/
    Ответ написан
    10 комментариев
  • Почему при добавлении обертке свойства filter уходит вверх фиксированный header (внутри пример на codepen)?

    JRK_DV
    @JRK_DV
    Рецепты https://codepen.io/jrkdv/full/LKLXdq
    Попробуйте воспользоваться position: sticky; для блока ".header.header--fix"
    Ещё как вариант, замените селектор ".wrap--filter" на ".wrap--filter > *", чтобы фильтр применялся только к дочерним элементам. Фильтр и в вашем варианте применяется к дочерним, но лишь с той разницей, что блок .wrap--filter останется без фильтра

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

    potapchino
    @potapchino
    Надеюсь дальше сами додумаете
    Ответ написан
    Комментировать
  • Почему свойство length массива неперечисляемое, но метод .propertyIsEnumerable(length) возвращает true?

    Stalker_RED
    @Stalker_RED
    let arr = ['a', 'b', 'c'];
    arr.propertyIsEnumerable('length'); // -> false

    Выдыхаем, расходимся.
    Ответ написан
    Комментировать
  • Почему свойство length массива неперечисляемое, но метод .propertyIsEnumerable(length) возвращает true?

    0xD34F
    @0xD34F Куратор тега JavaScript
    arr.propertyIsEnumerable(length)
    // => true

    Вы тут не свойство length проверяете, а свойство, чьё имя совпадает со значением переменной length - и что у вас в ней лежит, да хрен его знает. Может быть число, соответствующее какому-то индексу массива - тогда неудивительно, что получаете true.

    UPD. Могу предположить, что за length там у вас - если вы сами её не объявляли, это window.length.
    Ответ написан
    Комментировать
  • Изменение размера fancybox. Как?

    Get-Web
    @Get-Web
    Front-End Developer
    Используйте 100% ширину и максимальную:
    width: '100%',
    maxWidth: 900

    При размере больше 900 ваше окно будет всегда 900, а при размере меньше 900, будет сжиматься и занимать 100% ширины экрана
    Ответ написан
    Комментировать
  • Стоит ли "дёргать" HR-компании?

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

    dimonchik2013
    @dimonchik2013
    non progredi est regredi
    см. Крестный Отец, диалог Майкла с Томом Хагеном после покушения на Майкла, там где он о сторонниках (насчет тайминга диалога могу ошибаться)
    Ответ написан
    1 комментарий
  • Как сделать такой бэкграунд футеру?

    Robur
    @Robur
    Знаю больше чем это необходимо
    Вам кажется. Период массовых отказов от картинок в пользу новых и молодежных возможностей CSS давно прошел, если картинка маленькая и удобная - почему нет? Вряд ли она у вас займет половину трафика страницы.
    Ответ написан
    3 комментария
  • Нормальная ли ситуация на работе (описание внутри)?

    @AnneSmith
    самая ленивая
    я в похожее место как-то попала, польстилась на близость к дому
    так не могла уговорить "проектного менеджера" даже на то, чтобы тратить на разработку меньше времени :))

    на вопросы HR-ов про почему так быстро ищу другое место, я отвечала так: были обещаны интересные проекты и профессиональный рост, но по факту приходится заниматься рутиной, и лучше я сейчас позабочусь о карьере, чем через год не смогу объяснить тем же HR-ам чем я занималась целый год

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

    не забудьте себе в резюме записать тренинг вновь прибывших джунов и организацию перехода на жиру плюс документацию :) но на остальных жаловаться на интервью не надо

    это действительно токсичная обстановка с низким уровнем организации, и вы совершенно не обязаны там находиться
    Ответ написан
    Комментировать
  • Карьера программиста после 30+. Миф или реальность?

    max-kuznetsov
    @max-kuznetsov
    Главный IT-архитектор
    Боже, сколько страшилок понаписали!

    Дай-ка и я своё слово вставлю.

    Я начинал свою профессиональную карьеру дважды. Первый раз в 2002-м году. На тот момент мне было 26. Работал с Delphi. Дослужился до ведущего разработчика. Но пришлось сменить направление деятельности. И второй раз снова начал с простого программиста, осваивающего Java и .NET. Это было уже в 35. Сейчас работаю архитектором.

    От одного хорошего человека слышал, что главный инструмент разработчика - его голова и опыт. Я бы ещё добавил сюда интуицию и кругозор. Опыт в начале пути стремится к нулю, но голова в 35 работает лучше, чем в 20, интуиция и кругозор значительно более развиты.

    Что до сил, то да, их в 20 лет больше. Но вот внутренней мотивации и простой мудрости не хватает, так что силы транжирятся почём зря. Нет ещё опыта в том, чтобы ставить перед собой цели и добиваться их. Наличие семьи - тоже важный мотиватор.

    Юность имеет свои преимущества, но они не решающие. И недостатков у молодых программистов тоже много. Так что я бы не стал говорить, что у Вас всё плохо. В 30+ жизнь только начинается. Это я точно знаю!

    P.S. У нас в проектах работают люди разного возраста и пола. Программисты в 30 и старше - хорошее ядро команды. Они вносят стабильность. В том числе и в код. Но иногда нужно их мотивировать на то, чтобы пробовать что-то новое. И тут важно присутствие молодёжи.
    Ответ написан
    2 комментария
  • На какой курс в институте пойти для карьеры frontend-End developerа?

    sfi0zy
    @sfi0zy
    Creative frontend developer
    Нормального фронтенда в институтах нет и быть не может (у нас тут каждый год все меняется, а программы пишут на 10 лет вперед). Фундаментальные вещи могут дать на любой специальности, связанной с IT (хотя могут и не дать - в стране с образованием нынче все плохо), но остальное будет зависеть только от вас. Так что идите на любую специальность, хоть как-то относящуюся к разработке, и занимайтесь самообразованием.
    Ответ написан
    Комментировать
  • Как отправить HTML письмо?

    SeregaSPb
    @SeregaSPb
    На примере Google Chrome
    1) Нажмите [правый клик]>[Просмотр кода элемента] или F12
    2) В открывшемся инструменте разработчика в коде текущей страницы (gmail) найдите куда вставить код письма и нажмите [правый клик]>[Edit as HTML]
    3) Вставьте Ваш HTML код и нажмите Ctrl+Enter
    Ответ написан
    3 комментария
  • Можно ли написать функцию, которая проверяет существует ли переменная или нет (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 комментария