• Самая сложная программа
    +2

    Сколько секретных ядерных программ Ирана нужно, чтобы вкрутить лампочку :)

  • JavaScript. Работаем с исключениями и данными в конструкциях async/await без блоков try-catch
    0
    Число 20 появилось из традиционной для русского языка гиперболы.

    Про исключения не знал. Тогда всё становится понятнее, окей.
  • JavaScript. Работаем с исключениями и данными в конструкциях async/await без блоков try-catch
    0
    Тем, что не нужно создавать 20 вложенных друг в друга функций.
    Лично мне наоборот сложнее, когда функций больше. У них ещё разные контексты исполнения, разные this (arrow functions не везде), где-то его нужно передавать, где-то нет… опять callback hell, в общем.
  • Задачи с собеседований (front-end)
    0
    Йеп.
  • JavaScript. Работаем с исключениями и данными в конструкциях async/await без блоков try-catch
    0
    Я заодно оставлю здесь более удобный способ создавать промисы.
    Код
    function Defer(){
        var status;
        this.resolve = function(value){
            status = {
                type: 'resolved',
                value: value
            };
        };
        this.reject = function(value){
            status = {
                type: 'rejected',
                value: value
            };
        };
    
        var that = this;
    
        this.promise = function(){
            return promise = new Promise((resolve, reject) => {
                if(status){
                    if(status.type === 'resolved'){
                        resolve(status.value);
                    } else {
                        reject(status.value);
                    }
                } else {
                    that.resolve = function(value){
                        resolve(value);
                    }
                    that.reject = function(value){
                        reject(value);
                    }
                }
            });
        };
    }


    С ним можно делать более читаемый код:
    const fetchData = (duration, rejectPromise) => {
        var defer = new Defer();
    
        setTimeout(() => {
            if(rejectPromise){
                defer.reject({
                    error: 'Error Encountered',
                    status: 'error'
                });
            } else {
                defer.resolve({
                    version: 1,
                    hello: 'world',
                });
            }
        }, duration);
    
        return defer.promise();
    }
  • Задачи с собеседований (front-end)
    0
    Можно даже просто создать тег style, записать туда всё, что надо, и вставить на страницу. А там вполне можно перекрыть before/after.
  • Я сделал API для скриншотов сайтов, а какой-то парень начал майнить через него криптовалюту
    +1
    Вы не о вот этой? Странно, я читаемее капчи не видел.
  • Роскомнадзор снимает блокаду. Пострадавшие могут подавать в суд
    0

    Заблокировать 17 млн телефонных номеров, да-да :)

  • Релиз Node.js 10 и NPM 6
    0
    И в этом модуле будет много зависимостей :)
  • Вводим систему достижений на Тостере
    +2
    Недавно вспоминал про заговор 8 троллей и нашёл ради этого старый хабраqa в интернет-архиве: web.archive.org/web/20120107192053/http://habrahabr.ru/qa/14541

    Раньше совершенно точно было лучше. Можно было набрать для всего хабра кармы и рейтинга за хорошие ответы (или даже за хорошие вопросы!). Раньше можно было понизить человеку карму или рейтинг за то, что он творит фигню в qa. Раньше… да много чего раньше было хорошего, чего нет сейчас.
  • Четвёртый день блокады. В реестр добавили подсети DigitalOcean. Давление на облачные сервисы пока не приносит результата
    0
    Это не так работает.
  • РКН заблокировал несколько КРУПНЫХ подсетей Amazon и Google (UPD.: и продолжает блокировать новые!)
    +3
    Заблокируют зарубежный интернет, и тогда IPv4 на всех хватит.
  • Операционная система на JavaScript? JsOS
    0
    Интересно, а какие врожденные недостатки С и ассемблера возможно исправить, переписав/написав с нуля операционную систему на одном из более современных языков

    Такие ошибки, как переполнение стека, там будут невозможны (в предположении, что у V8 их нет), например.
    Но вообще мне не кажется, что основной смысл именно в исправлении недостатков C / Asm.
  • Firefox Gecko, «который мы потеряли»
    0
    Тут вроде бы достаточно дать какой-то доступ к файлам / сети, нет? А в архитектуру браузера можно и не лезть.
  • Firefox Gecko, «который мы потеряли»
    0
    А где конкретно плагины FF лезли внутрь архитектуры и прочее-прочее, чего нельзя сделать с сохранением совместимости?

    Есть ощущение, что, если просто написать весь UI браузера на html/css/js, то получится примерно вся мощь XUL, а тормозить будет не очень сильно (примерно как одна дополнительная вкладка, что сегодня не очень много).
  • Firefox Gecko, «который мы потеряли»
    0
    Яндекс браузер пытается. Или, как у меня сложилось мнение, пытался до недавнего времени.
  • Firefox Gecko, «который мы потеряли»
    +1
    Забавно, что на десктопе наоборот. Хром всё держит в фоне, а фф нет.
  • Firefox Gecko, «который мы потеряли»
    0
    Кажется, кто-то где-то пытался создать ui браузера полностью на html, что было бы неплохой заменой для xul.
  • Жаров «фантазирует», что Telegram может изменить архитектуру и передать в ФСБ ключи от открытых чатов
    +1
    Можно ещё выпустить специальный диктофон, передающий всё сказанное сразу в ФСБ, и запретить говорить без него.
  • Знакомство с новым элементом dialog
    +3
    А в статье написано
  • Осторожнее с копипастом: фингерпринтинг текста непечатаемыми символами
    +1
    Можно использовать разные типы кавычек, разные виды тире / дефисов / дефисоминусов / разделителей в телефонном номере / etc. Это ещё незаметнее.

    И можно даже пойти ещё дальше и заменять слова на синонимы.
  • Осторожнее с копипастом: фингерпринтинг текста непечатаемыми символами
    +1
    Кстати, стоило бы делать так:

    const zeroWidthSpace = '​';
    const zeroWidthNonJoiner = '‌';
    const zeroWidthJoiner = '‍';
    const zeroWidthNoBreakSpace = '';
    
    const binaryToZeroWidth = binary => (
      binary.split('').map((binaryNum) => {
        const num = parseInt(binaryNum, 10);
        if (num === 1) {
          return zeroWidthSpace;
        } else if (num === 0) {
          return zeroWidthNonJoiner;
        }
        return zeroWidthJoiner;
      }).join(zeroWidthNoBreakSpace);
    );
    
  • ES6: полезные советы и неочевидные приёмы
    –2
    Опыт показывает что часто при дебаге чужого кода приходится перелистывать весь код, чтобы понять не изменили ли где-то по пути такую-то переменную. А если начать использовать const — то вы удивитесь, как редко, на самом деле, вам нужны изменяемые переменные кроме как в циклах да в аргументах функций.

    Вы удивитесь, но у меня ровно противоположный опыт. Смотреть, не изменилась ли переменная, приходится примерно никогда (да и зачем, если можно исполнить код и вывести её в консоль?), зато почти каждый день приходится лезть выше по коду и исправлять const на let, потому что модифицирую код, и внезапно теперь какую-то переменную нужно менять.
    А уж в консоли вообще весело. Объявишь какую-нибудь переменную по привычке через const, а потом чертыхаешься, потому что её понадобилось поменять, а уже никак.

    Если это не говнокод на кучке глобальных переменных — то зачем ему может понадобится var?

    ться.
    Для того, чтобы объявлять переменные. Ещё раз: от замены let на var в коде почти всегда не меняется примерно ничего. Хотя можете привести какой-нибудь пример, когда у вас реальный настоящий код, скажем, от замены var на let, стал в 2 раза чище и короче. Есть такие примеры?
    Никаких багов не будет, если вы знаете, как работает var.
  • ES6: полезные советы и неочевидные приёмы
    –2
    Так товарищи выше не символы экономят. Не-не. Они строчки экономят. Дескать чем меньше строк, тем больше на экран влезет. Ну и тем меньше глазами бегать искать чего-то.

    Зачем вы продолжаете пытаться читать чужие мысли, если вам уже сказали, что у вас не получается?
  • ES6: полезные советы и неочевидные приёмы
    0
    Любое подобное утверждение (в том числе и «всегда используйте let») — это в немалой степени вкусовщина. Ну потому что по сути ничего не меняется кроме «мне кажется, что так красивее».

    Моё имхо насчёт использования следующее:

    1. const для любых констант, которые вряд ли может понадобиться менять. Например, число пи. Не могу представить адекватной ситуации, когда бы мне захотелось изменить значение этой константы.
    Но при этом не использовать для всех-всех значений, которые не меняются конкретно в этом коде (мы можем что-нибудь захотеть изменить в коде, и нам придётся менять определение переменной).
    2. let — когда видимость внутри блока существенно важна. Например, в цикле for, если внутри setTimeout.
    3. var — во всех остальных случаях.
  • ES6: полезные советы и неочевидные приёмы
    –1
    Эмм, раз уж вы взялись предсказывать мой ответ, почему тогда try-catch, а не if-else?
  • ES6: полезные советы и неочевидные приёмы
    –2
    Вы зачем-то расширили моё утверждение. Я разве где-то утверждал, что он в чём-то лучше? Я скорее не понимаю, почему все стремятся использовать let вместо var везде, где нужно и где не нужно, если ошибки, связанные с var, попадаются очень редко, очень легко ловятся, и вообще достигаются, в основном, новичками в языке, не потрудившимися прочитать, как оно тут работает.
    Это примерно как возмутиться, что у массивов могут быть повторяющиеся значения, и поэтому рекомендовать всегда вместо него использовать Set.

    Моё мнение: они вполне равноправны. Да, где-то let бывает писать удобнее. Но ведь где-то и с var такая же ситуация! (а вот теперь утверждаю, да: всплытие на уровне функции действительно бывает удобным)
  • ES6: полезные советы и неочевидные приёмы
    –1

    Чем вам var помешало?

  • ES6: полезные советы и неочевидные приёмы
    +1

    Можно ещё и хитро маппить один объект в другой.
    Например, хотим из


    { catName: 'Alex', fur: { color: 'black', length: 3 }, catAge: 8 }

    Получить


    { type: 'cat', name: 'Alex', furColor: 'black', furLength: 3, age: 3 }

    И при этом чтобы в случае отсутствия какого-то из полей в итоговом объекте не было полей, содержащих undefined.


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


    function mapAnimal(source){
      return {
        type: 'cat',
        ...(source.catName && {
          name: source.catName
        }),
        // и так далее
      };
    }

    Или даже как-то так:


    function mapAnimal(source){
      let {undefined, ...result} = {
        type: 'cat',
        [source.catName && 'name']: source.catName,
        [source.fur && source.fur.color && 'furColor']: source.fur.color
      };
      return result;
    }

    Можно ещё деструктурировать source прям в записи аргументов.

  • ES6: полезные советы и неочевидные приёмы
    +1

    А перед этой функцией стоит async. Такая функция всегда возвращает промис.

  • ES6: полезные советы и неочевидные приёмы
    0

    Почему бы и да?


    const required = varName => throw new Error(`Variable ${varName} shouldnt be undefined`);
    
    function myFunc(a = required('a')){...}
  • Самые распространённые вопросы на собеседовании программиста графики
    +1
    Ну так-то на собеседованиях вполне себе спрашивают, что там внутри движка. Например, чем отличаются следующие две конструкции?:

    function Class1(){}
    Class1.prototype.func1 = function(){};
    Class1.prototype.func2 = function(){};
    
    function Class2(){}
    Class2.prototype = {
      func1: function(){},
      func2: function(){}
    };
    
  • И так сойдёт… или как данные 14 миллионов россиян оказались у меня в руках
    0
    Такой скрипт вроде уже есть. По крайней мере, у меня стоял, а откуда взял, не помню.
  • Может ли в JavaScript конструкция (a==1 && a==2 && a==3) оказаться равной true?
    0
    И часто вы вычитаете число из строки?
    Нет, ну правда. За годы, что я пишу на js, у меня сформировалась в голове ide, которая следит за всеми типами и предупреждает, если я складываю или вычитаю что-то, что может быть строкой.
    А писать явное преобразование в Number / String везде, где может быть ошибка, вам вообще ничего не мешает. Как вы делаете это на других языках. Разве что тут вы это можете проигнорировать, а там — нет.
  • Нужно ли пытаться полюбить математику?
    +1
    Как говаривал Харди (тот самый, занимавшийся теорией чисел, и привезший Рамануджана в Англию), «Теория чисел — королева математики. Столь же красива и бесполезна».
    Собственно, это мне и вспомнилось, когда я писал свой комментарий.
  • Нужно ли пытаться полюбить математику?
    +1
    А поймёте без математики, как работает джипег? :)
  • Нужно ли пытаться полюбить математику?
    +1
    Математику стоит учить ради переноса навыков, а не ради умения считать интегралы.
  • Нужно ли пытаться полюбить математику?
    +2
    А математика без приложений, следовательно, бесполезна? А занимавшиеся теорией чисел сто лет назад делали совершенно бессмысленную вещь?
  • Немного об арифметике
    +1
    Ну это совсем элементарно для любого человека, у которого был курс ТФКП. Я сам же на самой первой паре по нему эту задачу придумал и предложил.
    Спойлер
    i = cos(pi/2) + isin(pi/2) = e^(i * pi/2)
    i ^ i = (e^(i * pi/2))^i = e^(-pi/2),
    если не брать в расчёт, что решений не одно

    кстати, (i^i)^i = -i
  • Долой таблички! Как выучить английские времена
    +1
    Как мне объяснял мой преподаватель (американец), Present Perfect — подразумевает наличие связи с настоящим временем.

    Связь в виде результата. Я тут чуть ниже в комментах это рассказал.
    В русском раньше тоже был перфект. В чём отличие «я поел» и «я поемши»? В том, что ты мог поесть и не наесться, и это поел. А если есть некий результат в виде сытости, то ты можешь сказать, что ты поемши.
    У меня ощущение, что я немножко искажаю, но по сути — работает примерно вот так.

    Perfect это вообще всегда наличие связи (в виде результата) между двумя моментами во времени. Если второй момент в настоящем, то это Present Perfect. Если в прошлом — Past Perfect. И т.п.