• Вводим систему достижений на Тостере
    +1
    Недавно вспоминал про заговор 8 троллей и нашёл ради этого старый хабраqa в интернет-архиве: web.archive.org/web/20120107192053/http://habrahabr.ru/qa/14541

    Раньше совершенно точно было лучше. Можно было набрать для всего хабра кармы и рейтинга за хорошие ответы (или даже за хорошие вопросы!). Раньше можно было понизить человеку карму или рейтинг за то, что он творит фигню в qa. Раньше… да много чего раньше было хорошего, чего нет сейчас.
  • РКН заблокировал несколько КРУПНЫХ подсетей 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.
  • Знакомство с новым элементом 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. И т.п.
  • Долой таблички! Как выучить английские времена
    0
    Мы намеренно упрощали текст, избавляя его от лишних деталей

    Да это понятно. Разница в том, что мне это детали не кажутся лишними, которые можно выбросить, они очень важны. Если хочется составить первое впечатление о грамматике — да, возможно. Но статья выглядит скорее не как первое впечатление, а чуть дальше. Мне так показалось.

    они постигаются практикой, и при изучении языка только путают

    Вот с этим не согласен. Вообще — да, но в данном случае нет.
    Практикой нужно постигать такие вещи, как фразовые глаголы, например (но и в них логику никогда искать не вредно).

    Можно и вообще без грамматики общаться, разве из этого что-то следует?

    P. S. а ещё в первом комментарии забыл важное. В русском языке был раньше перфект. Сейчас он до сих пор есть в некоторых диалектах, и всеми русскоязычными отлично понимается.
    Это мне кажется немаловажным моментом в понимании перфекта.
  • Долой таблички! Как выучить английские времена
    –1
    Так себе.

    Не рассказали про то, что Continuous может употребляться про постоянные действия, которые рано или поздно закончатся. Например, «я учусь в школе» — казалось бы, Simple, но на самом деле Continuous. Варианты I live in Moscow и I am living in Moscow вообще вроде бы равноправны.
    Пришёл в голову диалог даже:
    — Do you do drugs?
    — I am doing them.
    (не знаю, насколько верен, ибо мой английский не очень хорош)

    Не рассказали, что Perfect всегда употребляется при наличии результата. И вот от того, косвенный результат или прямой, зависит на самом деле и выбор Perfect Simple / Perfect Continuous. Например, я пришёл, вижу: стены покрашены (а вчера не были!). Так и говорю: Somebody has painted the walls. Результат прямой. А вот я пришёл в повязке и чувствую, что краской пахнет. Видимо, тут кто-то стены красил. Не знаю даже, покрасил ли. Результат косвенный. Somebody has been painting the walls.
    Тут ещё и есть типичная ошибка начинающих: have been это не всегда Perf. Cont., это запросто может быть to be в Perf. Simp. Например, вот: I have been a waiter several years ago. А вот вам пассив: The wall has been painted. Потому что to be это не только Continuous — можно ещё и to be beautiful или to be a waiter или to be broken и куча всего остального.

    Не рассказали и про важный лайфхак запоминания грамматики — практически всё будущее время можно получить из настоящего, впихнув туда will как модальный глагол.
    А если чуть-чуть расширить, кстати, то по простым правилам обобщаются и все пассивы (to be + V3), и весь Perfect (to have + V3), и весь Continuous (to be + Ving), и во всей схеме остаётся два времени.

    Shall употребляется в гораздо большем количестве случаев (например, при желании изобразить стереотипного британца), хотя это уже тонкости.
  • Новогодний пост добра
    +31
    Рекламные посты от компаний.
  • Разработка игры на основе физической симуляции (для реалистичной разрушаемости игрового мира)
    0
    Это называется игра-песочница
  • Как программисты-самоучки в реальности получают работу
    0
    Посещение классов

    Серьёзно?
  • [Опрос] Ваш самый нелегальный/неэтичный проект
    +1
    Вот так и появляется рефлекс через символ жать Ctrl+S
  • [Опрос] Ваш самый нелегальный/неэтичный проект
    +1
    В детстве у меня не было своего компьютера, и я юзал компы родителей. Однако, поскольку им не очень нравилось, сколько я за ними провожу времени, они были запаролены, и мне разрешалось использовать их строго отведённое количество времени в присутствии родителей дома.

    Иногда случалось так, что я каким-то образом узнавал пароль, и, когда я на этом попадался, его меняли. Был у меня ещё Puppy Linux LiveCD, но на нём не хватало дров для интернета.

    Чуть позже, лет где-то в 13-14 я наткнулся на AutoIt, написал (и закинул в автозапуск) на нём простую программку, которая сидела в фоне, ждала открытия окошка с заголовком «Изменить пароль пользователя» (или какой там был заголовок в WinXP) и сразу же его закрывала.

    Она мне так и не пригодилась. Вскоре она сама меня начала раздражать висением в фоне (ничего особо из-за неё не тормозило, просто неприятно), и я её удалил. А ещё чуть позже мне и вовсе подарили тот ноутбук.
  • Весь веб на 60+ FPS: как новый рендерер в Firefox избавился от рывков и подтормаживаний
    0
    Интересно, кэшируются ли пиксели каждого слоя.
  • Великолепные придурки в разработке
    +2
    Немножко оффтоп, но…

    Имхо, переводчик не очень хорошо чувствует разницу между русским «придурок» и английским jerk. От текста прямо-таки веет тем, что это перевод. А это обычно не говорит о том, что перевод хороший.
    Разница не смысловая и не грубая, это просто тонкость, которая, однако, портит всё. Степень приемлемости разных слов в разных языках отличается, но переводчик, не заметив этого, просто переводит, не потрудившись поискать более подходящее слово.

    Так, ass или fuck гораздо приемлемее, чем у нас их эквиваленты. Соответственно, и употребляются чаще. И когда вы каждое ass, fuck или hell переводите дословно, можно с одного взгляда определить, что это перевод — просто потому что на русском так не говорят.

    Так и слово jerk гораздо безобиднее, чем русское «придурок». Первым вы можете просто за глаза величать странного или тупого человека, второе скорее подходит, когда вы на него в чём-то злы прямо сейчас, и хотите выплеснуть эмоции. Или же человек совершил что-то настолько глупое, что никакое другое слово не подходит.
    В общем, слабое слово заменили сильным словом.

    ^ имхо; и да, я не являюсь экспертом в данной области, так что если вы им являетесь, не стесняйтесь меня поправить, если я в чём-то ошибся.
  • Список лучших инструментов для web-анимации
    0
    ЯБро на маке — нет
  • Список лучших инструментов для web-анимации
    +2
    Имхо, немножко странная подборка, всё в одну кучу.
    Кстати, в paperjs нет возможностей для анимации кроме обычного таймаута. Хотя демки у них и очень впечатляющие, конечно.

    Добавлю свою библиотеку.

    DeltaJS

    3 года назад (3 года и 3 дня, кстати; почти круглая дата) представил её на хабре под названием Graphics2D.js. Ко второй мажорной версии решил переименовать, но пока там бета, и много где фигурирует старое название.

    Реализует векторную графику поверх Canvas с событиями мыши и тачей, анимацией и всем остальным. Сейчас в Core очень много разных дополнительных модулей, которые позже будут перенесены в часть More (а-ля Mootools). Например, умеет рисовать плавные кривые через множество точек, анимировать движение объекта вдоль пути, анимировать превращение одной кривой в другую (в том числе и разных видов — например, кривую Лагранжа в кривую Безье), есть Draggable и много разных классных вещей.
    В планах WebGL и SVG.