• Смелый стайлгайд по AngularJS для командной разработки [2/2]

    • Translation
    Первая часть перевода тут.

    После прочтения Google's AngularJS Guidelines, у меня создалось впечатление о его незавершённости, а ещё в нём часто намекали на профит от использования библиотеки Closure. Ещё они заявили, «Мы не думаем, что эти рекомендации одинаково хорошо применимы для всех проектов, использующих AngularJS. Мы будем рады видеть инициативу от сообщества за более общий стайлгайд, применимый как для небольших так и крупных проектов».

    Отталкиваясь от личного опыта работы с Angular, нескольких выступлений, а также имеющемуся опыту командной разработки, представляю Вашему вниманию этот смелый стайлгайд по синтаксису, написанию кода и структуре приложений на AngularJS.
    Читать дальше →
  • Смелый стайлгайд по AngularJS для командной разработки [1/2]

    • Translation
    После прочтения Google's AngularJS Guidelines у меня создалось впечатление о его незавершённости, а ещё в нём часто намекали на профит от использования библиотеки Closure. Ещё они заявили, «Мы не думаем, что эти рекомендации одинаково хорошо применимы для всех проектов, использующих AngularJS. Мы будем рады видеть инициативу от сообщества за более общий стайлгайд, применимый как для небольших так и крупных проектов».

    Отталкиваясь от личного опыта работы с Angular, нескольких выступлений, а также имеющемуся опыту командной разработки, представляю Вашему вниманию этот смелый стайлгайд по синтаксису, написанию кода и структуре приложений на AngularJS.
    Читать дальше →
  • Аудио-ботанам: Скробблинг (Last.fm) проигрываемой в SoundCloud музыки из расширения Google Chrome

      В последнее время привычный формат прослушивания музыки на десктопе для меня трансформировался. Теперь я всё реже слушаю MP3 из foobar2000, и всё чаще ленту SoundCloud'а. При этом столь давно любимые персональные чарты и рекомендации от Last.fm в связи с этим становились всё менее и менее актуальными. Так мне пришла идея сделать скробблер SoundCloud'а для Google Chrome…

      Читать дальше →
      • +2
      • 14.8k
      • 7
    • Google Chrome отказывает пользователям Windows в возможности установки расширений не из Chrome Web Store

      • Translation


      Некоторое время назад Google заявил, что планирует отменить возможность устанавливать расширения для Chrome, которые не находятся в Web Store.
      Читать дальше →
    • AniJS – библиотека для декларативного описания CSS-анимации

        На днях занимался созданием лэндинга с приличным набором анимации, возникающей во время взаимодействия со страницей. Прям чувствовал, что должна быть какая-нибудь крутая библиотека для решения задачи. И тут я нашёл AniJS, которая меня совершенно покорила!

        Читать дальше →
      • Лёгкие контроллеры с Angular Classy

          Нашёл любопытный инструмент для облегчения структуры контроллеров — Angular Classy. Он представляет из себя модуль, размером в 1 килобайт (gzipped and minified), и помимо представления контроллера в виде объекта даёт ряд полезных плюшек, рассказ о которых под катом.

          Читать дальше →
        • Не заставляйте (не)равенства в JavaScript выглядеть хуже, чем они есть

          • Translation
          Время от времени я встречаю публикации, где рассказывается о том, какие из значений оператора == эквивалентны (как, например, здесь). Часто при этом оговаривается, что приведённые в таблице данные не очень хорошо организованы.

          Я согласен, такие таблицы нужны, чтобы лучше ориентироваться в несовершенствах оператора… вот только несовершенства в организации данных в самих таких таблицах, на мой взгляд ещё больше усложняют ситуацию. Вот, к примеру, таблица из ссылки, приведённой выше:



          Кошмар, товарищи!.. Как по мне, так здесь бóльший беспорядок в очерёдности строк/столбцов.
          Читать дальше →
        • Node.js, Require и Exports

          • Translation
          Когда я только-только начал играться с Node.js, для меня существовала лишь одна вещь, которая доставляла мне дискомфорт. Занятно, но я говорю сейчас о module.exports. Говоря занятно, я намекаю на то, что это, всё-таки, одна из фундаментальных частей Node.js и она достаточно проста. Сейчас же, оглядываясь назад, я не могу объяснить почему меня это так стопорило… Просто помню, что этот момент был для меня не очевиден. Ну и, полагаю, что я один из тех многих, кто встретив его разок-другой, сначала только путался, прежде чем написал что-либо применив его.

          В Node, все штуки видны друг другу только в рамках одного и того же файла. Под штуками я подразумеваю переменные, функции, классы и их члены. Например у нас есть файл misc.js следующего содержания:

          var x = 5;
          var addX = function(value) {
            return value + x;
          };
          

          Привычный доступ к переменной x и функции addX из другого файла невозможен. Это никак не связано с использованием var. Дело в том, что Node состоит из блоков называемых модулями, и каждый отдельный файл по своей сути — отдельный блок, чья область видимости изолирована от других таких же блоков.
          Читать дальше →
        • Даты в JavaScript: количество дней в месяце и некоторые особенности Safari

          Собственно, сам сниппет


          Не так давно столкнулся с задачей, которая позволила бы получить количество дней в указанном месяце в JavaScript. Штатной функции для этого в языке к сожалению нет.

          На эту тему был нагуглен один изящный механизм, использующий одну известную особенность многих языков программирования. Если установить несуществующую дату для какого-либо месяца (например 31 апреля), то в результате нашем объекте будет сохранено соответствующее число следующего месяца (в данном случае — 1 мая).

          Таким образом, для того, чтобы получить количество дней в указанном месяце, необходимо отнять результат вышеописанной операции из числа 32. То есть, если задать в качестве даты 32 апреля, в результате мы получим 2 мая. Проверим: 32-2=30 — такое количество дней будет в апреле.

          	var days_in_april = 32 - new Date(2013, 3, 32).getDate();
          

          Читать дальше →