• Flux для глупых людей
    +2
    Из-за декларативности компонент/шаблонов React выигрыш огромен. Вам не нужно определять все состояния компонента и переходы между ними. При увеличении сложности это значительно упрощает поддержку.
  • Flux для глупых людей
    +4
    Вся суть React в декларативности шаблонов. Компонент при каждом изменении полностью перерисовывается (но виртуально), затем React вычисляет минимально дешевую мутацию состояний из А в Б. В императивном подходе все мутации состояний нужно определять руками. При увеличесии сложности компонента возрастает сложности определения всех состояний и переходов. Соответсвенно возрастает риск ошибки и сложность понимания.
  • Мультикоптер с грузом наркотиков упал на границе США и Мексики
    +6
  • Все способы перебора массива в JavaScript
    +7
    Ну и ряд функциональных подходов
    • Tail optimized recursion
      function loop(fn) {
          var index = 0;
          
          return function over(array) {
              if (index >= array.length) {
                  return;
              }
              fn(array[index], index, array);
              index++;
              over(array);
          };
      }
      
      var consoleLog = loop(function (item, index, array) {
          console.log(item, index, array);
      });
      
      consoleLog([1, 2, 3, 4]);
      

      jsbin.com/rimabu/3/edit?js

    • Y Combinator
      function Y(le) {
          return function(f) {
              return f(f);
          }(function(f) {
              return le(function(x) {
                  return (f(f))(x);
              });
          });
      }
      
      function loop(fn) {
          var index = index || 0;
          return function (over) {
              return function (array) {
                  if (index >= array.length) {
                      return;
                  }
                  fn(array[index], index, array);
                  index++;
                  over(array);
              };
          };
      }
      
      var consoleLog = Y(loop(function (item, index, array) {
          console.log(item, index, array);
      }));
      
      consoleLog([1, 2, 3, 4]);
      
      

      jsbin.com/ligawa/2/edit?js
  • Использование AWS Lambda для создания архива определённых файлов с AWS S3
    0
    Спасибо. По крайней мере судя по времени берут по полной. Нода стартует с нуля.
  • Использование AWS Lambda для создания архива определённых файлов с AWS S3
    0
    Отличная статья, спасибо!

    Есть ли какие-то данные по тому какую память считает AWS Lambda: память занятая бинарем node + память занятая после запуска модуля или только память занятая модулем?

    И еще есть ли данные по Startup latency: заводят ли они ноду с нуля каждый раз или реиспользуют пул процессов?

    Просто нода сама по себе хорошо отъедает памяти и может долго стартовать.
  • HP показала 4K, 5K и изогнутые дисплеи на CES2015
    0
    LG 34UM95-P: IPS и 3440 x 1440 x 60Hz за $999 был уже где-то в середине прошлого года. Только как вы написали проблема в DisplayPort 1.2,1.3 и HDMI 1.4, которые есть только в топовых видеокартах и ноутах.
    Например смешная ситуация с DisplayPort 1.1, который стоит сейчас почти в каждом более-менее свежем яблочном ноуте, с помощью которого можно подключить два 2560 x 1600 x 60Hz монитора, но нельзя один 3440 x 1440 x 60Hz… нужно либо развертку уменьшать либо разрешение.
  • Наступают тёмные времена: тема HabraDarkAge
    +3
    html {
        filter: hue-rotate(180deg) invert(0.9);
    }
    // Keep images untouched (invert back)
    img {
        filter: hue-rotate(180deg) invert(0.9);
    }
    

    Close enough ;)
  • Выравниваем блок по центру страницы
    +3
    Самый badass способ :)
    <button>
        <h1 contenteditable>Pewpew</h1>
    </button>
    

    jsfiddle.net/m8kr4o8w/
  • Как оно? Leapmotion
    +6
    Поигравшись с девайсом полчаса, он был убран обратно в коробочку, вместе с желанием пользоваться или что-то девелопить с его участием.
    Я, к сожалению, поступил аналогично. Надеюсь продолжить пользование с выходом Oculus VR.
  • Autopolyfiller — Precise polyfills
    0
    Вопрос думать о зависимостях или нет. Если не использовать eval, то я могу гарантировать, что нет никаких подводных булыжников. Просто потыкайте в демку ;)
  • Autopolyfiller — Precise polyfills
    +2
    Нет, при генерации кода Autopolyfiller их обернет в if () {}. Репозиторий же хранит полифилы в чистом виде (да это может смущать).
  • Разгоняем JavaScript вместе (Внимание, конкурс!)
    0
    Набрать базу лояльных разработчиков :)
  • Новый офис-«космический корабль» Apple в процессе строительства
    +10
    Еще бегать по утрам прикольно. Пара кругов вокруг дома :)
  • Разгоняем JavaScript вместе (Внимание, конкурс!)
    +4
    Короткий кэш из 5 итемов, к примеру, по ключу {format, timestamp[, locale]}. Lookup итема происходит без «Хэш-индекса» ака var index = {}; те просто for-ом по массиву, иначе будут тормоза с удалением добавлением итема в «индекс». Потом есть pointer который указывает в какую ячейку кэша нужно положит будущий результат. Всей этой структурой мы добиваемся того, чтобы не было GC на объектах кэша и не тратим время на конструирование составного ключа.

    Большие кэши не нужны тк эта функция зависит от времени и каждый раз на вход могут подаваться разные знаения -> много промахов+тормоза.

    var cache = [{
        value: null,
        format: null,
        ts: null
    }, ...];
    var pointer = 0;
    
    var ts = date.getTime();
    
    // lookup
    for (var i = 0; i < cache.length; t++) {
        if (cache[i].format === format && cache[i].ts === ts) return cache[i].value;
    }
    
    // put
    var value = strftime(format, date);
    if (pointer > cache.length) pointer = 0;
    
    cache[pointer].format = format;
    cache[pointer].value = value;
    cache[pointer].ts = ts;
    
    pointer++;
    return value;
    
  • Разгоняем JavaScript вместе (Внимание, конкурс!)
    +3
    Максимум выжал 21х без кэша — 3.3kk op/sec для %Y-%m-%dT%H:%M:%S%z. С FIFO кэшом x200 — 33kk op/sec. При 100% промахе кэша производительность деградирует до 18х.

    Буст в 50 раз даже ручным кодом не удалось получить для паттерна выше. Для получения 50x без кэша/тредов точно не обойтись.

    Заводилось в 1 ядро: Node v0.10.28 @ V8 3.14.5.9.
  • Разгоняем JavaScript вместе (Внимание, конкурс!)
    –2
    И скомпилит emscripten в asm.js
  • Новая навигация и другие изменения на Хабре
    +8
    Там будет отлично смотреться реклама
  • Компания Lytro представила пленоптическую камеру второго поколения
    0
    Вторая по сравнению с первой огромная. Не знаю будет ли она выполнять свой прежний use-case.
  • JSCS: JavaScript Code Style
    +1
    Я ответил вполне на конкретный вопрос: «Не могу понять, в чем разница между вашим кодом и моим?». Не знаю стало ли проще если я бы ответил, что в JS область видимости через var создает только функция, поэтому в следующем тике event loop значение переменной будет 3 и эта переменная будет общая для всех безымянных «замыканий» аргумента setTimeout.
  • JSCS: JavaScript Code Style
    –2
    Ваш код синхронный. Мой асинхронный.
  • JSCS: JavaScript Code Style
    +1
    Классика:
    for (var i = 0; i < 3; i++) {
        setTimeout(function () {
            alert(i);
        }, 100);
    }
    
  • JSCS: JavaScript Code Style
    +3
    Поэтому не стоит делать из языка элитарное сообщество, ограниченное трехметровым порогом входа. Не забывайте, что есть ряд людей, которые не пишут фуллтайм на JS, но им приходится с ним работать.
  • JSCS: JavaScript Code Style
    +4
    Мне как и вам прочитать не сложно. Любой не посвященный в JS скажет, что !!x — читается как магия; Boolean(x) — все понятно ;)
  • JSCS: JavaScript Code Style
    +5
    Не знаю как вы, но я пишу код для людей, мучаться должны роботы и переделать код как им нужно при минификации ;)
  • Сервер очередей
    +1
    Фейсбучный beanstalkd? (pевью на Quora)
  • Вещи, которые должен делать каждый: Code Review
    0
    IDE многое пропускают и они могут быть разные. В моей команде, например, используется минимум 3 различных IDE/текстовых редакторов и нам приходится использовать инструменты jshint + jscs + editorconfig + csscomb, чтобы уровнять редакторы.
    У многих IDE, конечно, есть интеграция с jshint, но он отловит только часть проблем, да и ничего не мешает забыть/не заметить/проигнорировать замечание IDE.
    Я предпочитаю максимально минимизировать потенциальную проблему всеми возможными средствами. С текущим workflow это прекрасно получается. За последний год я не видел ни одного комента вида «а ты тут пробел забыл».
  • Вещи, которые должен делать каждый: Code Review
    +2
    Зато избавляют от кучи треш-коментов вида «а ты тут пробел забыл» и позволяет полностью сосредоточиться на чтении и понимании кода и внесении значимых корректировок. Функциональные особенности это уже не Code-Style, IMO ;)
  • Вещи, которые должен делать каждый: Code Review
    +5
    Можно навязать единый code style и реально проверять, что он соблюдается, а не просто на бумажке закреплен
    И это должен делать софт, а то Code Review превратится в Code-Style Review. Благо сегодня каждый ЯП обзавелся дюжиной статический анализаторов.
  • Продвинутая работа с подписками в еvent-driven архитектуре в JavaScript
    0
    Кстати, с одной стороны песочница это крутая штука, но она может превратиться в большой слой бюрократии если постоянно все везде ограничивать. Те когда нужно получать какие-то новые данные приложения приходится добавить этот модуль в песочницу, а потом вызвать его в Модуле. Похоже на антипаттерн Павлик Морозов.

    В свою очередь интерфейс CommonJS модулей так же является своеобразной песочницей и эта песочница положительно сказывается на качестве продукта и не вставляет палок в колеса.
  • Продвинутая работа с подписками в еvent-driven архитектуре в JavaScript
    0
    Штука крутая! Только заголовок статьи очень смущает :) Читаешь его и думашь, что статья будет про кодописание, а не инструмент/документацию.
  • 10+ полезных jQuery сниппетов на каждый день
    +24
  • Web Components — это единственное светлое будущее веба. Смиритесь
    +1
    Веб Компоненты могут убрать эту фрагментированность: все компоненты будут совместимы друг с другом, потому что это будет просто HTML.
    Я согласен, что они будут работать. Однако вы не будете использовать компоненты написанные на «чужом языке» и сделанные «чужим инструментом» потому как эти компоненты могут тянуть какие-то тяжелые зависимости (платформу), вы не будете понимать как они устроены и напишете свой. Да они будут скомпилированы в CSS, HTML и JS но сорцы их будут на Stylus, Jade и например TypеScript с примесью React.
  • Web Components — это единственное светлое будущее веба. Смиритесь
    +6
    Сегодня WebComponents это buzzword как раньше был HTML5. Это прекрасная идея кастомного HTML элемента (которая существовала с эпохи Web 2.0) и несколько API, которые делают жизнь чуть-чуть проще. Я думаю, что для вас не секрет, что каждый первый web-UI-движок так или иначе позволяет создавать такой элемент, что BEM Tools, что React, что jQueryUI. Совсем другое дело это какой интерфейс будет на выходе и на сколько сложно в него вникнуть.

    Не думаю, что тут стоит употреблять «закостылять». Сегодня эти «костыли» помогают создавать приложения под все платформы, позволяют писать компоненты, которые можно реиспользовать в рамках ваших договоренностей. Просто нужно их понять как и любой другой API в том числе Web Components.

    Я считаю, что утверждение «стандарт построения кастомного HTML элемента спасет мир» — это миф. Опять будет тасяча галерей, просто написанных на WebComponents API. И, я уверен, что вы напишете свою потому как чужие галереи несут такой невероятные оверхэд по количеству поддерживаемых фичей из-за того, что их создатель не понимает KISS.

    «Прописал импорт компоненты с CDN и вуаля» — так не будет. Мы и через 10 лет будем пытаться сокращать количество запросов. Как обычно скачаем все компоненты и будем использовать инструменты для сборки этих компонент.

    Shadow DOM и Scoped CSS поможет избежать конфликтов «Встраиваемым приложениям» (Disqus например). В прочем, мы можем и так можем свести количество конфликтов к 0, используя кастомные теги (как делают API Яндекс Карт) и методологию BEM.

    W3C молодцы, что выделили эту часть HTML5 в отдельное понятие Web Components. По крайней мере теперь разработчики будут копаться в этом слове (Components) и начнут осознавать, что жирные библиотеки вроде jQuery нужно заменять маленькими компонентами(модулями), которые будут использоваться на 100%.

    Начните пользоваться Компонентами (без Web-) и начните забывать слово Библиотека, например, попробуйте выкинуть jQuery и заменить его на что-то более изящное.
  • Облачная платформа Яндекса: подробнее про Elliptics
    +1
    Отличное название! Сравните с каким-нибудь «Blob Business Storage Enterprise Solution» ;)
  • Назад, к технологиям верхнего палеолита, от любимых всеми REST, STATEless, CRUD, CGI, FastСGI и MVC
    +5
    на сервере MVC может быть только если у нас пользовательский интерфейс полностью реализован на сервере, т.е. нет браузерного кода, интерфейс генерируется на сервере, а браузер просто показывает его.
    V будет, но мнимая. Должен же кто-то словари и массивы отрисовать в JSON ;)
  • О логгировании в Node.js
    –1
    Есть еще одна библиотека — debug (npm debug). Ее очень удобно использовать как в процессе написания библиотек, так и для логирования. Она не имеет привычных уровней логирования, вместо этого вводятся id типа логов, кооторые можно гибко включать, используя wildcard.

    var debug = require('debug')('worker');
    
    setInterval(function(){
      debug('doing some work');
    }, 1000);
    


    $ DEBUG=http,worker node server.js
    


    image

    Рекомендую ;)
  • Как сделать социальные «лайки» полезными в работе программиста?
    +1
    Часть моих лайков все еще приходится на статьи из RSS. Реквестирую возможность подключить Feedly!
  • В Photoshop добавили поддержку 3D-печати и Perspective Warp
    +1
    Это так называемое 2.5D С одного кадра такое автоматически сделать сложно. Софт по кадру не сможет построить правильную глубину. Руками это делается не так долго.
  • Обфускация JavaScript
    +1
    Насчет PHP не знаю. Можно распарсить код в AST на JS, а потом нарисовать его в читаемом виде.