• Библиотечка datef — форматирование дат

      Разрешите представить datef — мини-JS-библиотеку вывода даты в разных форматах.
      Вкратце опишу имеющиеся фичи:
      • Выполняет одну и только одну задачу: вывод дат в разных, потребных юзеру форматах;
      • Работает в nodejs и в браузерах. В браузерах может работать как requirejs/amd-модуль;
      • Не мусорит в прототипах встроенных объектов;
      • Написана в strict mode;
      • Обильно аннотирована в js-doc-формате;
      • Не имеет внешних зависимостей.

      Примеры использования:
      datef('dd.MM.YY', new Date()); // "13.08.12"
      datef('dd.MM.YY'); // второй аргумент необязателен — берется «сейчас»
      
      var d = new Date();
      d.setFullYear(2045);
      datef('dd.MM.YYYY', d); // "13.08.2045"
      
      // есть несколько заранее заданных форматов:
      datef.formatters.ISODateTimeTZ(); // "2012-08-13T15:01:29 -04:00"
      
      // можно определить и сохранить свой…
      datef.register('myFormat', 'd.M.YY');
      datef.formatters.myFormat(); // "13.8.12"
      
      // или просто получить его как отдельную функцию
      var myFormat = datef.createFormatter('d.M.YY');

      Копание во внутренностях и лирические отступления
    • Свежий взгляд на примеси в JavaScript

      • Перевод
      В этой статье я детально исследую примеси в JavaScript, и покажу менее общепринятую, но, на мой взгляд, более естественную стратегию «примешивания», которую, надеюсь, вы найдете полезной. Закончу я матрицей результатов профилирования, подводящей итог влиянию на производительность каждой техники. (Большое спасибо блистательному @kitcambridge за ревью и улучшение кода, на котором основан этот пост!)

      Повторное использование функций

      В JavaScript каждый объект ссылается на объект-прототип, из которого он может наследовать свойства. Прототипы — отличные инструменты для повторного использования кода: один экземпляр прототипа может определять свойства бесконечного числа зависимых сущностей. Прототипы могут так же наследоваться от других прототипов, формируя, таким образом, цепочки прототипов, которые более-менее повторяют иерархии наследования «классовых» языков типа Java and C++. Многоэтажные иерархии наследования иногда бывают полезны при описании природного порядка вещей, но, если первичным мотивом служит повторное использование кода, такие иерархии могут быстро стать искривленными лабиринтами бессмысленных субклассов, утомительных избыточностей и неуправлямой логики («кнопка — это прямоугольник или контрол? Вот что, давайте унаследуем Button от Rectangle, а Rectangle может наследоваться от Control… так, стоп…»).
      Читать дальше →
    • Открытое письмо лидерам JS касательно точек с запятой

      • Перевод
      Такое письмо я получил от Шона Сильвы прошлой ночью:
      Я просматривал ваш код для проекта npm.js (в частности, вот этот файл: https://github.com/isaacs/npm/blob/master/lib/npm.js), и заметил, что вы выравниваете запятые под ‘r’ в выражениях var, и под [ и { в литералах массивов/объектов. Мне очень нравится такой способ форматирования, но я не решаюсь его использовать, так как большинство ресурсов о js насаждают страх перед хаосом, который воцарится в коде из-за автоматической расстановки точек с запятой, если вы не будете заканчивать строки чем-нибудь, что предполагает продолжение.
      Безопасно ли располагать запятые таким образом в «браузерном» коде, или это только в node возможно?

      Я написал несколько абзацев, и решил сократить их до следующего ответа:
      Да, это полностью безопасно, и это совершенно валидный JS, понимаемый каждым браузером. Closure compiler, yuicompressor, packer, и jsmin — все могут правильно минифицировать его. Производительность нигде не просядет.
      Мне жаль, что вместо того, чтобы обучать вас, лидеры сообщества этого языка прививали вам ложь и страхи. Это позор. Я рекомендую изучить, как на самом деле терминируются инструкции в JS (и в каких случаях они нетерминируемы) — и вы сможете писать код, который сочтете прекрасным.

      Читать дальше →
    • Как питонистам читать Haskell

      • Перевод
      Сталкивались ли вы с тем, что иногда надо быстро понять, что делает кусок кода на неком незнакомом языке? Если язык похож на то, к чему вы привыкли, как правило, можно догадаться о назначении большей части кода — даже если вы не очень хорошо знакомы со всеми фичами языка.
      С Haskell все по-другому, так как его синтаксис выглядит совсем иначе, нежели синтаксис традиционных языков. Но, на самом деле, разница не так велика — нужно просто взглянуть под правильным углом. Здесь приводится быстрое, по большей части некорректное, и, надеюсь, полезное руководство по интерпретации питонистами (автор использует слово «Pythonista» — прим. переводчика) кода на Haskell. К концу вы будете способны понять следующий кусок (часть кода опущена за троеточиями):
      runCommand env cmd state = ...
      retrieveState = ...
      saveState state = ...
      
      main :: IO ()
      main = do
          args <- getArgs
          let (actions, nonOptions, errors) = getOpt Permute options args
          opts <- foldl (>>=) (return startOptions) actions
          when (null nonOptions) $ printHelp >> throw NotEnoughArguments
          command <- fromError $ parseCommand nonOptions
          currentTerm <- getCurrentTerm
          let env = Environment
                  { envCurrentTerm = currentTerm
                  , envOpts = opts
                  }
          saveState =<< runCommand env command =<< retrieveState

      Читать дальше →
      • +46
      • 4,5k
      • 6
    • jQuery UI как инфраструктура для плагинов

        Введение


        jQuery UI больше всего известен как набор готовых виджетов. Главное их преимущество, на мой взгляд, — консистентное API: каждый виджет управляется одинаково. Второе их преимущество — они хранят свое состояние: если повторно навесить виджет на элемент, то результатом будет уже существующий инстанс виджета.
        Но jQuery UI — это не только набор окошечек и табов (далеко не всеми любимых). Это еще целая инфраструктура для создания своих виджетов: с удобным консистентным API, с хранением состояния и с возможностью наследования. Как ни странно, это для многих новость, в результате чего и появилась эта статья — так же, как это было новостью для меня всего несколько месяцев назад.
        Все, что вы хотели узнать о jQuery UI, но стеснялись спросить