• Ещё 8 правил проектирования API
    +1

    Спасибо вам за статью! Хоть и не совсем согласен как и остальные комментаторы (например для работы с проверкой на null во всех мне известных языках есть удобные инструменты), но очень рад что вы делитесь опытом и мотивируете на изучение проектирования API и (в большинстве) позитивные дискуссии. Пожалуйста продолжайте и далее.

  • Работаем в IntelliJ IDEA на слабом железе
    0

    Спасибо, а что насчет конфликтующих шорткатов таких как ctrl+f, который в браузере обычно поиск выдает?

  • Lenovo YogaBook C930: устройство, которое заменяет сразу четыре гаджета
    0

    Спасибо! Вот откопал видео, вроде еще в ноябре прошлого года выкатили "clone mode". Скажи а оно сильно тормозит? На видео при скроле сайта похоже что достаточно медленно все обновляется но мне все равно кажется что жить можно.


    Я подумываю пробрести эту модель в качестве второстепенного лаптопа, комфортно ли на нем работать с Remote Desktop?


    И еще вопрос — работает ли ручка с e-ink экраном в таком clone mode?


    Заранее спасибо!

  • Lenovo YogaBook C930: устройство, которое заменяет сразу четыре гаджета
    0

    Привет, подскажи пожалуйста где про прошивку можно почитать и как она улучшила использование. Спасибо.

  • Chrome расширение для скрытия отвлекающих рекомендации на YouTube
    0

    Если использовать habr фиды через какую-нибудь rss читалку, то можно добавить свои фильтры достаточно легко подняв простой сервер. Вот решение на коленке.

  • Школа магии TypeScript: дженерики и расширение типов
    0

    Я так понимаю нужно прописать что-то вроде и контролировать такие моменты "вручную".


    function isValid(value): boolean {
      return 'age' in value;
    }
    
    if (isValid(result)) {
      console.log(result.age.toFixed(2));
    } else {
      console.error('Oh-oh');
    }
  • Школа магии TypeScript: дженерики и расширение типов
    0

    Подскажите пожалуйста как правильно проверять типы на примере TS чтобы не было ошибки в runtime как в примере ниже:


    type Student = {
      name: string;
      age: number;
      hasScar: boolean;
    };
    
    const students: Student[] = [
      { name: "Harry", age: 17, hasScar: true },
      { name: "Ron", age: 17, hasScar: false },
      { name: "Hermione", age: 16, hasScar: false }
    ];
    
    function getBy<T, P extends keyof T>(model: T[], prop: P, value: T[P]): T | null {
        return model.filter(item => item[prop] === value)[0] || null
    }
    
    const runTimeContent: Student[] = JSON.parse('[{"name": "Baby"}]');
    const result = getBy(runTimeContent, 'name', 'Baby');
    console.log(result && result.age.toFixed(2));

    Спасибо

  • Микросервисный фронтенд — современный подход к разделению фронта
    0

    А у вас может есть ссылка на информацию как яндекс делает сборку на сервере? Спасибо.

  • Микросервисный фронтенд — современный подход к разделению фронта
    0

    Спасибо за статью. Где можно посмотреть как все это работает в продакшн? Еще интересно как решаете вопрос с SEO. Спасибо.

  • nginx, memcached и SSI
    0

    С прошествием лет как поменялось ваше мнение по этому вопросу? Сейчас тема вашей статьи очень актуальна, поэтому интересно узнать как сейчас народ делает.

  • nginx, memcached и SSI
    0

    10 лет спустя этот комментарий навевает следующие чувства:


    image


    Как сделать бронебойную конструкцию? =)

  • CSS в JavaScript: будущее компонентных стилей
    0
  • Mockанье зависимостей в node.js приложениях
    0

    Отправил вам PR. А как rewiremock будет работать с паралельными тестами (как в jest/ava)? Если я правильно понимаю то так же как и другие, т.е. лучше так не делать.

  • Mockанье зависимостей в node.js приложениях
    0

    Я так понимаю вот это мораль истории:


    У нормальных людей — нормальный DI.

    Но когда не до этого, то rewiremock может выручить. Правильно?

  • Как мы оптимизировали Twitter Lite
    0

    Спасибо вам

  • Невероятный JavaScript — трюки, недоразумения и необычные возможности
    +1

    А так же все те кто пошел в коментарии искать не написал ли кто-то то что у всех на языке вертиться.

  • Почему программисты не могут программировать
    0

    Думаю не особо и просили, но раз надо, значит надо:


    (async function () {
      for (let i of Array(100).keys()) {
        await new Promise(res => {setTimeout(res, 50)});
        const val = i + 1;
        const mod3 = val % 3;
        const mod5 = val % 5;
        let out = '';
        if (mod3 && mod5) out = i + 1;
        else {
          if (!mod3) {out += 'Miss';}
          if (!mod5) {out += 'Kiss';}
        }
        console.log(out);
      }
    }())
  • Почему программисты не могут программировать
    0

    Кстати да, разница в мелочах, нужно было быть внимательнее.
    При делении на 15 у меня же выводит и Miss и Kiss? Или не нравится что в разных строчках?

  • Почему программисты не могут программировать
    –1

    Менее 10 минут:


    Array(30).fill().forEach((x, i) => {
    const val = i + 1;
    const log = val => setTimeout(() => {
      console.log(val);
    }, i * 1000);
    if (val % 3 == 0 && val % 5 == 0) {
      return log('FizzBuzz');
    } else if (val % 3 == 0) {
      return log('Fizz');
    } else if (val % 5 == 0) {
      return log('Buzz');
    }
    return log(val);
    })

    Ещё вот такого варианта не видел в ответах:


    (async function () {
      for (let i of Array(100).keys()) {
        await new Promise(res => {setTimeout(res, 50)});
        const val = i + 1;
        const mod3 = val % 3;
        const mod5 = val % 5;
        if (mod3 && mod5) console.log(val);
        else {
          if (!mod3) {console.log('Miss');}
          if (!mod5) {console.log('Kiss');}
        }
        console.log('----');
      }
    }())
  • Комментарий из публикации, перенесённой в черновики.
  • The State of Reactive in JS: практический обзор FRP библиотек
    0

    Судя по видео ниже, в MobX изпользуют observables, но по коментариям от выступающей она зачислила его в OO мир а не в FP


    MobX vs Redux: Comparing the Opposing Paradigms - React Conf 2017
  • The State of Reactive in JS: практический обзор FRP библиотек
    0

    Фанкторы (извиняюсь за произношениe) или композиция для улучшения читаемости кода:


    //italian-pasta style
    
    function updateUrl(url) {
      return addParam(
        addParam(
          removeParam(
            updateParam(url, 'x', 1),
            'y'
          ),
          'z', 2
        ),
        'hello', 'world'
      );
    }
    
    //vs multiple re-assignments
    
    function updateUrl(url) {
      url = updateParam(url, 'x', 1);
      url = removeParam(url, 'y');
      url = addParam(url, 'z', 2);
      url = addParam(url, 'hello', 'world');
      return url;
    }
    
    //vs Functor
    
    function updateUrl(url) {
      return [url]
        .map(x => updateParam(x, 'x', 1))
        .map(x => removeParam(x, 'y'))
        .map(x => addParam(x, 'z', 2))
        .map(x => addParam(x, 'hello', 'world'))
        .reduce(x => x);
    }
    
    //vs Functor with curried functions
    
    function updateUrl(url) {
      return [url]
        .map(updateParam('x', 1))
        .map(removeParam('y'))
        .map(addParam('z', 2))
        .map(addParam('hello', 'world'))
        .reduce(x => x);
    }
    
    //vs composition with curried functions
    
    const updateUrl = compose(
      addParam('hello', 'world'),
      addParam('z', 2),
      removeParam('y'),
      updateParam('x', 1)
    );
  • Функциональные компоненты
    +1

    Для себя пока решил использовать напрямую классы с PureComponent, вместо обертки — не нужно конвертировать если нужны life-cycle методы, мой редактор (WebStorm) хорошо работает с классами (auto-complete), но не с функциональными компонентами. Хотя конечно синтаксис раздут по сравнению с фунциональными компонентами, что можно вылечить снипетами, но лучше я дождусь оптимизаций со стороны реакта.

  • Оптимизируем redux хранилище для более производительных изменений
    0

    Вопрос от новичка — почему нельзя заменить объект внутри массива на новый? Могу предположить что могут быть проблемы с time travel, но точно объяснить что в таком случае сломается не могу. Спасибо.

  • Runtyper — инструмент для проверки типов при выполнении JavaScript кода
    +1

    Ещё есть http://objectmodel.js.org/, но без babel плагина

  • Прокрутка в вебе: букварь
    0

    Спасибо за перевод.


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


    Быстрый поиск нашел eslint плагин, заточенный под delegated-events библиотеку и он предупреждает об использовании input, keydown, keypress, keyup, mouseout, mouseover, mousemove, scroll для document. Думаю можно взять его за основу чтобы сделать плагины под другие библиотеки.


    Насчет react, вот пример в обход проблемы.

  • JavaScript без циклов
    +1
  • Async/await это шаг назад для JavaScript'a?
    0

    Ура, нашелся оптимистично настроенный человек наконец-то =) Спасибо, подняли настроение.

  • Неизменяемый JavaScript: как это делается с ES6 и выше
    +1

    Согласен. Насчет примера выше, имеет ли смысл каждый раз создавать объект? Mожет лучше сразу:


    const obj2 = keys.reduce((o, key) => 
      Object.assign(o, { [key]: key }), {});
  • Неизменяемый JavaScript: как это делается с ES6 и выше
    +1

    Копирование объектов может быть быстрее: https://habrahabr.ru/post/283090/

  • Неизменяемый JavaScript: как это делается с ES6 и выше
    +1

    Насчет клонирования можно (и скорее всего нужно) применить оптимизацию: https://habrahabr.ru/post/283090/. Про freeze лучше забыть, слишком медленно.

  • Комментарий из публикации, перенесённой в черновики.
  • Плохой код убивает
    +1

    Очень понравилось ваше вступление про Джона, перевел для коллег =)


    Перевод

    A bad programmer John made a mistake in the code, due to which every user of the program was forced to spend an average of 15 minutes to find a work around the problem. There were 10 million members. In total they wasted 150 million minutes = 2.5 million hours. If a person sleeps 8 hours a day, then 16 hours are left for the conscious activity. That is, John has destroyed 156,250 man-days ≈ 427.8 person-years. The average man lives 64 years, so John had killed as many as 6.68 people.


    Are you sleeping well, John — serial programmer?

  • Путь к HTTP/2
    0

    Можно, все работает.

  • Стоит ли Typescript усилий?
    0

    Добавлю про преимущества flow. На этом слайде демонстрируется один из наглядных примеров, хоть и надуманный немного. Так же babel может убирать типы из кода чтобы затем трасформировать надстройки вроде object spread или другие новшества которые могут появиться в языке. Если нужно использовать что-то вроде https://github.com/lodash/babel-plugin-lodash то придется компилировать 2 раза. Из минусов большая задержка была с поддержкой windows.


    Но это не умоляет достоинств typescript. Он тоже очень хорош.

  • JavaScript: где мы сейчас и куда двигаться
    0

    В плагинах и библиотеках, такое часто бывает. Нужно чтобы человек понимал что происходит перед тем как использовать библиотеку, а если уже слишком поздно, мог починить или обойти проблему.

  • JavaScript: где мы сейчас и куда двигаться
    0

    Уважаемый TheShock вам по-любому виднее! Я только разбираюсь c ФП и считаю что хорошо понимать где его нужно использовать, где не нужно. Тоже самое и с class, closure, и т.п. Особенно в свете последих статей от Eric Elliot, а также материалов от Brian Lonsdorf. Хотелось бы материалов без предпочтения сравнивающих разные подходы, рассматривая где и когда их использовать. Но раз такого нету, приходится через комментарии (ну и в личных проектах) вот так узнавать мнение =) Простите мне мое лукавство.


    П.с. спасибо вам за ваши статьи и комментарии на хабре, всегда очень интересно вас читать!

  • JavaScript: где мы сейчас и куда двигаться
    0

    Спасибо за ответ!


    будет очень больно

    Да, та же проблема что и у multiple inheritance. Хорошо что в js её не так сложно решить как в java, c#.

  • JavaScript: где мы сейчас и куда двигаться
    0
    1. Признаюсь тут я дилетант, но даже мои дилетантские тесты показывают что для большого количества объектов постоянное клонирование приводит к задержкам, так что я согласен. Интересно, есть ли материалы по решению этой проблемы для ФП...
    2. :) Не до такой степени pure конечно. Примерно как в Redux.
  • JavaScript: где мы сейчас и куда двигаться
    0

    ФП тут не причем. Я говорю о прототипном программировании учитывая что прототип это объект и в js объекты динамически расширяемы. Посмотрите пожалуйста на мои ссылки ещё раз, особенно на первую. Как вы на одних лишь классах решите проблему из видео?