• TypeScript 3.0

    • Перевод
    TypeScript 3.0! Да, он вышел, и в нем по-настоящему много нововведений. Под катом вы найдете подробное описание всех новинок последней версии, среди которых режим build, новый тип unknown, значительные изменения в API, улучшения производительности и многое другое. Присоединяйтесь!

    Читать дальше →
  • Основы Redux (текстовый учебник, 2-е издание)

    • Tutorial

    Прошло 2.5 года после публикации первой версии подробного туториала по основам Redux. За это время gitbook насчитал 200 000+ уникальных посетителей.


    redux cover


    Под катом подробнее об учебнике и список изменений.

    Читать дальше →
    • +20
    • 14,9k
    • 8
  • Jsqry — библиотека для запросов к JS объектам и массивам

      Представляю вашему вниманию небольшую js-библиотеку Jsqry.
      Проще всего проиллюстрировать её назначение следующим примером.


      До:


      var name;
      for (var i = 0; i < users.length; i++) {
          if (users[i].id == 123) {
              name = users[i].name;
              break;
          }
      }

      После:


      var name = one(users, '[_.id==?].name', 123);

      Библиотечка позволяет извлекать информацию из объектов/массивов в одну строку, используя несложный язык запросов, вместо написания циклов (подчас вложенных).

      Читать дальше →
    • Jii: Полноценное приложение с архитектурой Yii2 в браузере

        Привет всем хабровчанам, любителям Yii и Node.js. Продолжаю серию статей про Jii, на сей раз настала очередь рассказать о том, что Jii можно использовать в браузере.


        Представьте, уже сейчас все структуры фреймворка, такие как приложения, компоненты, контроллеры, модули, модели, представления доступны в браузере!
        Читать дальше →
      • Почему я выбрал Yii2

        Перевод некоторых глав из книги Bill Keck. Yii 2 For Beginners.

        Предисловие


        Добро пожаловать в Yii2 для начинающих. Эта книга проведёт вас шаг за шагом сквозь установку и развёртывание, а затем программирование на сегодняшний день самом увлекательном фреймворке Yii2.

        Yii2 поставляется в двух вариантах, basic и advanced, и может показаться неестественно, использовать для начинающих шаблон advanced(продвинутый), но этот шаблон, по иронии судьбы, облегчает работу с приложением, если оно использует модели, которые хранятся в базе данных. Современные веб-приложения нуждаются в этой функциональности и шаблон advanced имеет в своём распоряжении для этого готовые решения.

        Другое большое преимущество у шаблона advanced, это то, что приложение делится на frontend(пользовательская часть) и backend(модуль управления), который дает исчерпывающий ответ на постоянно возникающий вопрос: «куда же поместить модуль управления?»
        Я бы хотел не только ввести вас в удивительный мир php фреймворка, но и так, же дать вам точку опоры, включающую все, в чем нуждается надежное веб-приложение управляемое базой данных. Хотя advanced шаблон содержит чрезвычайно полезные возможности, в нем, конечно же, отсутствуют важные части, которые мы будем пополнять с помощью этой книги.

        Цель — предоставить вам модель шаблона, которую вы сможете использовать для всех ваших будущих проектов.

        Возможности


        С инсталляцией advanced шаблона вы получите некоторые возможности веб-приложения, включающие в себя:

        • предопределённую схему таблицы пользователей
        • форму входа и регистрации пользователей
        • функциональность восстановления забытого пароля
        • разделённые области пользователей (frontend) и администраторов(backend)
        • автоматическую генерацию кода для моделей, контроллеров и представлений
        • встроенную интеграцию с Twitter Bootstrap и приоритетную верстку для мобильных устройств
        • надежные виджеты и помощники для представления данных

        Читать дальше →
      • Jii: Active Record для Node.js с API от Yii 2

          Jii

          Вступление


          Привет всем хабровчанам, любителям Yii и Node.js.
          Это вторая статья про фреймворк Jii (GitHub), в предыдущей статье мы рассматривали Объекты доступа к данным и конструктор запросов (Query Builder).
          Как и обещал, в этой статье я расскажу про использовании Active Record.

          Active Record


          Читать дальше →
        • NGINX изнутри: рожден для производительности и масштабирования

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

          Инфографика Inside NGINX сверху вниз проведет вас по азам устройства процессов к иллюстрации того, как NGINX обрабатывает множество соединений в одном процессе. Данная статья рассмотрит всё это чуть более детально.
          Поехали!
        • node.js для Java-разработчиков: первые шаги

          • Tutorial


          У опытного программиста, сталкивающегося с новой технологией для решения конкретной прикладной задачи, сразу возникает множество практических вопросов. Как правильно установить платформу? Где и что будет лежать после установки? Как создать каркас проекта, как он будет структурирован? Как разбивать код на модули? Как добавить библиотеку в проект? Где вообще взять готовую библиотеку, которая делает то, что нужно? Как и в чём отлаживать код? Как написать модульный тест?

          Ответы на эти вопросы можно при желании легко найти в сети, но придётся перечитать дюжину статей, и на каждый вопрос ответов будет, скорее всего, несколько. Некоторое время назад мне понадобилось написать небольшой туториал по node.js, который бы позволил быстро запустить разработку и познакомить новых программистов в проекте с этой технологией. Рассчитан он на опытных Java-разработчиков, которые и язык JavaScript хорошо знают, но node.js как платформа для бэкэнда для них в новинку.

          Думаю, что данная статья будет полезна не только разработчикам из мира Java, но и всем, кто начинает работу с платформой node.js.


          Читать дальше →
        • Гибкое управление событиями в jQuery — плагин jquery-behavior

            Привет, Хабр!

            Меня зовут Вячеслав Гримальский, я работаю над конструктором посадочных страниц, в котором страница собирается перетаскиванием блоков.

            Я расскажу об инструменте для работы с событиями, который изначально являлся частью конструктора, но затем был вынесен в отдельный плагин для jQuery — jquery-behavior.

            Плагин использует функционал jQuery, дополняя его следующими возможностями:

            • Работа с раздельными группами обработчиков событий. Для этого используются контроллеры событий.
            • Можно отключить все обработчики событий контроллера разом, не перечисляя их.
            • Слежение за срабатываниями обработчиков событий.
            • Можно узнать точное количество вызовов каждого из них.
            • Можно приостанавливать работу отдельных обработчиков событий, или всего контроллера разом.
            • Возможность получить полный перечень обработчиков событий конкретного элемента, обработчиков событий с определенным пространством имен или просто всех обработчиков событий контроллера.
            Читать дальше →
            • +18
            • 19,1k
            • 6
          • Шаблон Excel для домашней бухгалтерии

            image

            Когда три года назад возникла необходимость вести учет доходов и расходов семейного бюджета, я перепробовал массу специализированных программ. В каждой находились какие-то изъяны, недочеты, и даже дизайнерские недоделки. После долгих и безуспешных поисков того, что мне было нужно, было решено организовать требуемое на базе шаблона Excel. Его функционал позволяет покрыть большую часть основных требований по ведению домашней бухгалтерии, а при необходимости – строить наглядные графики и дописывать собственные модули анализа.

            Данный шаблон не претендует на 100% охват всей задачи, но может послужить хорошей базой для тех, кто решит пойти данным путем.
            Читать дальше →
          • Youtube

              Приходится ждать загрузки видео >360p по несколько секунд, обрывы на середине просмотра стало уже обыденным делом и это с достаточно широким каналом.

              image

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

              Для того чтобы запрос шел мимо cdn серверов ютуба надо заблокировать диапазон ip адресов (в роутере или на компьютере).

              173.194.55.0/24 и 206.111.0.0/16
              Читать дальше →
            • Заземление. Что это такое и как его сделать (часть 1)



                Мой рассказ будет состоять из трёх частей.

                1 часть. Заземление
                (общая информация, термины и определения)


                2 часть. Традиционные способы строительства заземляющих устройств
                (описание, расчёт, монтаж)


                3 часть. Современные способы строительства заземляющих устройств
                (описание, расчёт, монтаж)


                В первой части (теория) я опишу терминологию, основные виды заземления (назначение) и предъявляемые к заземлению требования.
                Во второй части (практика) будет рассказ про традиционные решения, применяемые при строительстве заземляющих устройств, с перечислением достоинств и недостатков этих решений.
                Третья часть (практика) в некотором смысле продолжит вторую. В ней будет содержаться описание новых технологий, используемых при строительстве заземляющих устройств. Как и во второй части, с перечислением достоинств и недостатков этих технологий.

                Если читатель обладает теоретическими знаниями и интересуется только практической реализацией — ему лучше пропустить первую часть и начать чтение со второй части.

                Если читатель обладает необходимыми знаниями и хочет познакомиться только с новинками — лучше пропустить первые две части и сразу перейти к чтению третьей.

                Мой взгляд на описанные методы и решения в какой-то степени однобокий. Прошу читателя понимать, что я не выдвигаю свой материал за всеобъемлющий объективный труд и выражаю в нём свою точку зрения, свой опыт.

                Некоторая часть текста является компромиссом между точностью и желанием объяснить “человеческим языком”, поэтому допущены упрощения, могущие “резать слух” технически подкованного читателя.

                Читать дальше →
              • «Воскрешаем» HDD

                Хочу поделиться опытом восстановления жесткого диска Seagate Barracuda 7200.11 ST3500320AS после сбоя. Короткая предыстория: один мой друг решил сделать полное форматирование своему жесткому диску, после чего тот больше не определялся в BIOS. Выкидывать 500-гигабайтный винчестер было жалко, и он отдал жесткий диск мне на растерзание. Забегая наперед, скажу, что прокачанные навыки «гугление» и «очумелые ручки» позволили добиться отличных результатов.
                Читать дальше →
              • Замыкания в Javascript [Часть 1]

                Перевод статьи Ричарда Корнфорда Javascript Closures.

                • Введение
                • Разрешение имен свойств объектов
                  • Присваивание значений
                  • Чтение значений

                • Разрешение имен идентификаторов, контексты исполнения и цепь областей видимости
                  • Контекст исполнения
                  • Цепь областей видимости и свойство [[scope]]
                  • Разрешение имен идентификаторов

                • ...

                Введение


                Замыкание
                Замыкание — это выражение (обычно функция), которое может иметь свободные переменные, вместе со средой, которая привязывает эти переменные (т.е. “замыкает” это выражение).

                Замыкания относятся к наиболее мощным особенностям ECMAScript (javascript), но они не могут быть применены должным образом без понимания. Несмотря на то, что их легко создать, даже случайно, их создание может иметь пагубные последствия, в частности, в некоторых относительно распространенных окружениях браузеров. Чтобы избежать случайных столкновений с недостатками и использовать преимущества замыканий, необходимо понимать их механизм. Это сильно зависит от роли цепи областей видимости в разрешении имен идентификаторов (identifier resolution) и от разрешения имен свойств в объектах.

                Самое простое объяснение замыкания в том, что ECMAScript допускает вложенные функции, определения функций и функции-выражения (function expressions) внутри тел других функций. И эти вложенные функции имеют доступ ко всем локальным переменным, параметрам и функциям, находящихся внутри их внешней функции (внешних функций). Замыкание образуется, когда одна из этих вложенных функций становится доступной вне той функции, в которую она была включена, таким образом, она может быть выполнена после завершения внешней функции. В этот момент она все еще имеет доступ к локальным переменным, параметрам и внутренним декларациям функций (function declarations) своей внешней функции. Эти локальные переменные, параметры и декларации функций (изначально) имеют те же значения, которые были во время завершения внешней функции и могут взаимодействовать с внутренней функцией.

                К сожалению, правильное понимание замыканий требует понимания механизмов, которые стоят за ними, и немало технических подробностей. Хотя некоторые из алгоритмов, определенных в ECMA 262, затронуты в начале последующего объяснения, большинство не могут быть опущены или просто приведены к упрощенному виду. Если вы знакомы с разрешением имен свойств объектов, то можете пропустить этот раздел, но только люди, уже знакомые с замыканиями, могут позволить себе пропустить последующие разделы и прямо сейчас перестать читать и вернуться к их использованию.
                Читать дальше →
              • URL.js или дружим JavaScript с обработкой ссылок

                image

                Доброго времени суток, уважаемые хабравчане!

                Возникла передо мной сегодня задача генерации GET-параметров и всего URL в целом, на стороне клиента, прям вот щас, без возможности «поговорить» с сервером. Сразу оговорюсь, про этот пост я узнал вот прям перед написанием данной статьи ибо сначала закончил писать, а потом уже прибег к поиску, да и пост тот — не со всем про то же самое, что у меня.

                Итак, к делу.

                Задача и проблемы


                Проблемы — те же что и в посте, который я привел выше:
                • Невозможность использовать window.location для «приготовления» URL;
                • Нельзя работать сразу с несколькими window.location в силу политики безопасности браузеров;
                • Отсутствие известных готовых решений ( да и сейчас, уже апосля, я не нашел подобного кода )

                Задачи которые я поставил перед собой:
                • Удобный синтаксис
                • Возможность как читать части URL так и изменять их
                • Работа с GET-параметрами
                • Кроссбраузерность и универсальность


                Писал я на чистейшем JavaScript, причем без использования prototype.__defineGetter__ или prototype.__defineSetter__ в угоду кроссбраузерности ибо IE < 9 такого не умеет. Более подробно про getters/setters написано в этом посте.

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

                Приступим! Раньше сядем — раньше выйдем.
                Читать дальше →
              • Как улучшить свой стиль программирования?

                Исповедь 1


                Я — разработчик. От своих работодателей я постоянно слышу, что работаю медленно и часто всё усложняю без веской причины. И что мне пора бы что-то с этим сделать. Во избежание.

                Весь мой опыт программирования складывается из университетских работ и пары лет пребывания в различных компаниях. Критикующие меня люди неоднократно говорили мне, что в целом я разбираюсь в теме, так что я далеко не клинический случай, как можно было подумать. Однако, очевидно, я выработал совсем не те программистские привычки (как минимум, на взгляд работодателя) и мне нужно срочно изменить их. Везде, где бы я ни работал, мои решения, использующие иерархии мелких классов с делегированием поведения, признавались плохими. Говорят, будто так и надо писать, но это не так. Потому что всё это «как надо» может стоить мне работы.
                Читать дальше →
              • Что не нужно кодить самостоятельно

                  Недавно написал свой велосипед и выложил его на хабре. Вот он: «Простейший Connection pool без DataSource в Java». Статья не из самых удачных, только прошу больше не минусовать. Итак, чтобы не повторять такие ошибки самому и, возможно, предостеречь кого-то от таких ошибок, решил перевести статью «Seven Things You Should Never Code Yourself» достаточно известного в среде open-source деятеля IT-области — Andy Lester'а. Итак, кому интересно, прошу под кат.
                  Читать дальше →
                • Функциональный JavaScript, Часть 1: Введение

                  • Перевод

                  Введение


                  JavaScript мощный, но недопонятый язык программирования. Людям нравится говорить, что он является объектно-ориентированным языком программирования или является функциональным языком. Другим нравится говорить, что он не является объектно ориентированным или не является функциональным языком программирования. Некоторые скажут что он относится к обеим парадигмам или ни к одной из них — но, давайте отложим на пока этот спор в сторонку.
                  Читать дальше →
                • Эффективный или эффектный? Мастер-класс по созданию дизайна сайта



                  Эффективный или эффектный?

                  Понятное дело, от любого сайта хочется и первого, и второго. Некоторым удается этого достичь, некоторым нет. В формате некого мастер-класса я постараюсь объяснить как получить и то самое первое, и второе, и даже кое-что на десерт для некоторого усредненного проекта. В нашем случае этим проектом станет редизайн nginx.org.

                  Какой сайт можно назвать эффективным? Для меня это тот, который решает поставленные задачи, способствует достижению поставленных целей. Несмотря на то, что звучит это крайне шаблонно и бюрократично — применимо это абсолютно к любому проекту. Во многом, эффективность сайта закладывается на этапе анализа и прототипирования. Об этом я и расскажу в первой части.
                  Читать дальше →
                • Рендеринг WEB-страницы: что об этом должен знать front-end разработчик

                  Приветствую вас, уважаемые хабравчане! Сегодня я бы хотел осветить вопрос рендеринга в веб-разработке. Конечно, на эту тему уже написано много статей, но, как мне показалась, вся информация довольно разрознена и отрывочна. По крайней мере, чтобы собрать всю картину в своей голове и осмыслить её, мне пришлось проанализировать немало информации (в основном — англоязычной). Именно поэтому я решил формализовать свои знания в статью, и поделиться результатом с сообществом Хабра. Думаю, информация будет полезна как начинающим веб-разработчикам, так и более опытным, чтобы освежить и структурировать свои знания.

                  Данное направление можно и нужно оптимизировать на этапе вёрстки/frontend-разработки, поскольку, очевидно, что разметка, стили и скрипты принимают в рендеринге непосредственное участие. Для этого соответствующие специалисты должны знать некоторые тонкости.
                  Читать дальше →