• ah — лучше, чем history

      Так получается, что я провожу в консоли (терминале) достаточно времени, порой даже больше, чем хотелось бы. Порой даже исполняю там какие-то команды и внимательно изучаю их вывод. Часто случается, что к выводу той или иной команды приходится возвращаться, а он постоянно теряется: то терминалы захлопываются, то в tmux окно закрываешь, то выводы прочих команд уже давным-давно забили и похоронили ту самую полезную строчку.

      Для того, чтобы сохранить вывод какой-либо утилиты я, как и многие, пользовался tee. Это работало, но постоянная суета среди бесконечных error.log, out.log, output.log, err.log log.log, lll.txt и тп если не сводила с ума, то безумно раздражала; вместо того, чтобы вести какой-то порядок, постоянно подмывало создать Новую Папку (1), где и похоронить эти самые логи, периодически бэкапя могильничек: порядок предполагал какую-то систематизацию, а в разгаре работы вспоминать как назвать свой файл крайне не хотелось.

      Тогда я написал ah, крохотную утилитку, которая сильно-сильно улучшила мою жизнь.
      Читать дальше →
    • ZeroMQ: сокеты по-новому

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

      Многие разработчики решают идти по пути наименьшего сопротивления, возложив эту задачу, например, на СУБД. Скажем, один процесс положил данные в БД, второй прочитал, обработал — положил еще и так далее.
      Про обмен через файлы в наши годы уже стыдно говорить, но и такое случается.
      Другие же программисты пытаются создать какое-то свое, специализированное решение и, как правило, выбирают сокеты.

      Задача проектирования и разработки архитектуры приложения крайне интересная, но это отдельная тема. В данном посте хотел бы поделиться своим первым впечатлением от знакомства с библиотекой ZeroMQ.

      ZeroMQ предлагает разработчику некий высокий уровень абстракции при работе с «сокетами». Библиотека берет на себя часть забот по буферизации данных, обслуживанию очередей, установлению и восстановлению соединений, и прочие вещи. Вместо того, чтобы заниматься такими глупостями, вы можете сосредоточиться на главном — архитектуре и логике приложения.

      Однако, в этом мире бесплатный сыр только в мышеловке. Поэтому я постарался по мере сил и опыта выяснить, чем придется поплатиться за удобство, какие я нашел плюсы и минусы при применении данной библиотеки.
      Читать дальше →
    • Graphics2D.js — объекты, интерактивность, анимация на canvas… И ничего лишнего

        Доброго new Date().getTimeOfDay();




        HTML5 Canvas незаменим, когда нужно что-то динамически нарисовать. Но если мы захотим что-то динамически изменять — нам придётся хранить состояние элементов и перерисовывать при необходимости.
        Если мы захотим реагировать на события — нам придётся ловить координаты мыши и определять, находятся ли они внутри нужной фигуры.
        И т.д.

        Частые повторяющиеся задачи. Так и появляются фреймворки и библиотеки.

        Впрочем, случай с Graphics2D.js немного другой: мне просто захотелось порисовать. С объектной моделью, анимацией и событиями. И — ничего лишнего.
        Но максимально расширяемо: идей много, и всё можно вынести в плагины.
        Читать дальше →
      • Продвинутый Gulp и Browserify: интересные трюки

        Пару недель назад я начал цикл о том, как делал некоммерческий музыкальный проект (первый пост есть в «я пиарюсь», не буду ставить ссылок), но, к сожалению, в первой же статье увлекся, и вместо того, чтобы рассказывать о том, как делал конкретно его, начал вспоминать эффективные трюки из других проектов. Видимо, именно это вкупе с прописанным акцентом на сам проект привело к тому, что за мной и постом прилетело НЛО.

        Однако все то, что было в статье, было по крайней мере малоизвестно, а половина ее была вообще уникальна, как я уверен, и каждый из этих советов может ощутимо облегчить работу с gulp, поэтому мне действительно было бы жаль, если этот материал безвозвратно пропал бы.

        Поэтому я постарался убрать все упоминания проекта и повторно публикую (с доработками и правками) статью, которую по сути никто еще не видел. Если вы фанат grunt — почитайте хотя бы вторую часть: то, что вы не любите gulp, не значит, что вы не любите browserify.

        Краткое содержание:
        1. Простой способ обработки ошибок;
        2. Универсальная структура для хранения исходных файлов;
        3. Объединение нескольких потоков (например, скомпилированный coffee и js) в один;
        4. Создание потока из текста;
        5. создание собственных плагинов для Browserify;
        6. создание плагинов из плагинов Gulp для Browserify.

        Читать дальше →
      • ActiveRecord немного про грабли, Relations и индексы

          Хочу рассказать Вам о наболевшем: о работе с AR в целом и с Relation в частности; предостеречь от стандартных садовых изделий, которые легко могут испортить жизнь и сделать код медленным и прожорливым. Повествование будет основываться на Rails 3.2 и ActiveRecord того же разлива. В Rails 4, конечно же, много чего нового и полезного, но на него ещё перейти нужно, да и фундамент в любом случае один и тот же.

          Сей материал, по большей части, предназначен для начинающих, ибо автору очень больно смотреть на извлечение содержимого целых таблиц в память в виде ActiveRecord объектов и на прочие отстрелы конечностей при использовании AR. Разработчикам, познавшим дзен, топик вряд ли принесёт пользу, они могут лишь Помочь, дополнив его своими примерами и назиданиями.
          Читать дальше →
        • Как мы делали аналитику для высоконагруженного сайта

          image

          Недавно на хабре была публикация о том, как реализована аналитика на ivi.ru. После прочтения захотелось рассказать об аналитике, которую мы делали для одного крупного сайта. Заказчик, к сожалению, не разрешил публиковать в статье ссылку на сайт. Если верить Alexa Rank, то трафик на сайте, для которого мы делали аналитику, раз в 10 больше, чем на ivi.ru.
          Читать дальше →
        • Тестирование производительности форков Mysql на реальных данных

          Введение


          Назрел апгрейд системы web сервера, на котором с 2007 года крутился сайт интернет-магазина на самописном движке mysql 5.1 + perl + apache + nginx.

          Как обычно, при росте посещаемости все стало упираться в базу данных. Стал выбирать новую базу данных, совместимую с текущей. Выбирал из Mysql 5.5, Mysql 5.6, MariaDB 10, Percona Sever 5.6.

          После длительного изучения бенчмарков стало понятно, что нужно тестировать производительность на реальных данных. Во-первых, в большинстве случаев сравнивали InnoDB и XtraDB, во-вторых — тестировали в основном бешеные нагрузки на монстр-серверах, интересные мне показатели находились на узеньком участке графика, где обычно ничего не было понятно.
          Читать дальше →
        • Подводная укладка кабелей. Как это делается

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


            Вперед, на дно!
          • Семь принципов создания современных веб-приложений

            • Translation
            • Tutorial
            Эта статья основана на моей презентации с конференции BrazilJS в августе 2014 года. Она базируется на идеях, о которых я писал в блоге недавно, в основном, в связи с UX и производительностью.

            Я хочу представить 7 действенных принципов для веб-сайтов, которые хотят применить JavaScript для управления UI. Эти принципы являются результатом моей работы как веб-дизайнера, но также как давнего пользователя WWW.

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

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

            • Должен ли JavaScript использоваться как замена функциям браузера: история, навигация, рендеринг?
            • Умирает ли бэкенд? Нужно ли вообще рендерить HTML?
            • Правда ли, что будущее за приложениями на одной странице (Single Page Applications, SPA)?
            • Должен ли JS генерировать страницы на веб-сайте и рендерить страницы в веб-приложениях?
            • Нужно ли использовать техники вроде PJAX или TurboLinks?
            • Каково точное отличие между веб-сайтом и веб-приложением? Должно ли остаться что-то одно?
            Читать дальше →
          • Интерактивный сайт с post-hawk? Легко!

              Здравствуй, %habrauser%!

              Время бежит вперёд и мы должны успевать за ним. Статичные сайты остались где-то далеко позади, возможно, через какое-то время устареет и ajax, придёт эпоха web sockets во всех браузерах и настанет всеобщее счастье, утопия, конечно… Сегодня я хочу представить вам сервис, который позволит с минимальными усилиями внедрить на ваш сайт элемент полной интерактивности. Вы хотели бы отправлять информацию клиентам не тогда, когда попросит пользователь или сработает таймер в js, а тогда, когда это нужно серверу, при этом ограничившись минимальным количеством кода и без использования ajax? Тогда сервис Post Hawk для вас!
              Читать дальше →
            • Обновление timezone в logstash

              Всем привет! Уже как пару месяцев наша компания успешно использует в продакшене связку logstash-elasticsearch-kibana для сбора и обработки достаточно большого объема логов. Заглянув в kibana после перевода часов обнаружилось, что все логи идут с отставанием по времени в 1 час. Под катом хочу поделиться решением проблемы с timezones в связке logstash-elasticsearch-kibana и готовой сборкой logstash с обновленными timezones.
              Читать дальше →
            • jQuery 3.0: будущие поколения

              • Translation


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

              Один из лучших способов это сделать — семантическое версионирование (semver). В практическом плане, для разработчиков и инструментов разработки, SemVer дает представление о рисках, связанных с переходом на новую версию программного обеспечения. Номера версий представлены в формате MAJOR.MINOR.PATCH, где каждый из трёх компонентов – целое число. Согласно SemVer, если меняется номер MAJOR, это указывает на существенные изменения API, с которыми разработчикам нужно быть очень осторожными.

              Эта концепция версионирования обрастает нюансами, если говорить о jQuery, ведь совместимость с браузерами может быть так же важна, как совместимость API. В попытке создать более изящную jQuery, команда выпустила две версии в 2013 году. Первая осталась в линейке 1.* (сегодня это 1.11.1) и обеспечивает совместимость с максимальным количеством браузеров. Вторая версия, начиная с 2.0.0 и до сегодняшней 2.1.1, исключает поддержку ряда браузеров типа IE8 и ниже, чтобы оптимизировать код. Как 1.*, так и 2.* версии jQuery имеют одинаковый публичный API, хотя в их внутренней реализации есть некоторые различия.

              Наши будущие релизы будут использовать другую номенклатуру. Как прежде, речь идет о двух разных пакетах. Преемником сегодняшней версии 1.11.1 будет jQuery Compat 3.0. Преемником jQuery 2.1.1 станет jQuery 3.0. Речь идет о двух разных пакетах на npm и Bower, но при этом они будут иметь одинаковую версию, чтобы обозначить тот факт, что их API одинаков.
              Читать дальше →
            • Локализованное форматирование даты в Laravel

              Сейчас я приведу очень простой способ того, как можно сделать в проекте локализованное форматирование даты на фреймворке Laravel. В конечном итоге мы получим результат, при котором получая свойство модели, к примеру, created_at (timestamp формат: 2015-10-20 19:45:56) — преобразуется в «20 Октября в 19:45». Форматирование можно будет настроить по вкусу или исходя из нужд.
              Читать дальше →
            • Работа веб-проекта в условиях нестабильного подключения

                Здравствуйте, меня зовут Александр Зеленин, я веб разработчик. Сегодня хочу рассказать, как могут работать сайты в условиях нестабильного подключения как и обещал. Проще говоря, что делать если отключили интернет, а деньги зарабатывать надо.

                Рассмотрим 3 примера: интернет-магазин, кинотеатр и онлайн-плеер. Для магазина и кинотеатра так же идет разделение на 2 части — что делать на стороне пользователя и на стороне оператора/продавца.
                Так что делать при потере коннекта?
              • Звоним на мобильные телефоны из браузера с записью разговоров

                • Tutorial


                В сегодняшнем мире тонких клиентов, Интернета, продвинутых веб-интерфейсов появляется все больше задач, связанных с необходимостью совершения звонков из браузера/принятия звонков в браузер. Это, черт возьми, удобно! Сидит сотрудник перед монитором, выбирает клиента, нажимает позвонить — и, пока идет дозвон, на этой же странице просматривает его карточку, освежает в памяти последние договоренности и намеченные шаги.

                Или другой сценарий — входящий в компанию звонок. Как здорово, когда ты в качестве клиента звонишь на безликий 8800 и девушка на том конце телефона отвечает тебе приятным голосом — здравствуйте, Алексей (подставить_свое_имя)! Это производит потрясающий эффект. Когда вместо «назовите себя, номер паспорта и имя кота, информация грузится — послушайте шестую симфонию Моцарта» оператор уже поднимая трубку знает, как вас зовут и видит по вам всю информацию. Сервис, что и говорить.

                Но есть ли возможность реализовать такую систему без погружения в дебри настройки АТС — максимально быстро и минимальной кровью? Желательно еще, чтобы все разговоры записывались для целей контроля и обучения сотрудников. Ответ — конечно, погнали под кат.
                Читать дальше →
              • О Meteor подробно: почему это будущее веб-разработки

                Что такое Meteor?


                Это не очередной javascript фреймворк. Ставить его в один ряд с derby, sails, angular или backbone некорректно. Meteor — это платформа для создания модульных высокоинтерактивных клиент-серверных приложений. Пусть это звучит слегка напыщенно и напоминает маркетинговый булщит слоган, но зато по сути очень точно отражает миссию и текущее состояние Meteor. Буквально несколько дней назад Meteor API выпустил первую стабильную версию (1.0).

                Официальную информацию можете почитать на портале www.meteor.com, а я же хочу рассказать об особо горячо любимых мной фичах.
                Что же хорошего предлагает Meteor?
              • По дорогам Германии проехался робот-грузовик от Mercedes



                  Сейчас многие автопроизводители, и не только они, создают автоматические системы управления для своих легковых автомобилей. Эта сфера стала настолько развитой за короткое время, что некоторые страны/штаты узаконили появление автономных легковушек на своих дорогах (наиболее известный пример — Калифорния, США).

                  Но что насчет грузовиков? В этой сфере автоматическая система управления для авто не менее, а возможно, и более востребована, чем в случае легковушек.

                  Следуя тренду, концерн Daimler продемонстрировал работу своего грузовика с автономной системой управления, причем в полевых условиях, на реальной дороге Германии, близ Магдебурга. Грузовик получил собственное название — Mercedes-Benz Future Truck 2025.
                  Читать дальше →
                • Обзор механической клавиатуры CODE Keyboard


                    Приветствую всех!
                    После приобретения очередной клавиатуры решил сделать её обзор, не найдя оного как на хабре, так и вообще в рунете. Речь в данном обзоре пойдет о механической клавиатуре CODE Keyboard, 87 клавиш (при желании можно купить и стандартную 104-клавишную). В отличии от стандартной клавиатуры у данной модели CODE Keyboard отсутствует цифровой блок, поэтому она занимает значительно меньше места на столе и не сильно притесняет “грызуна”. В то же время все необходимые клавиши для навигации присутсвуют (в отличии, например, от Happy Hacking Keyboard): “стрелки”, Home, End, PgUp, PgDn и т.п.



                    Читать дальше →
                  • Больше SSD практичных и разных: AMD запускает собственную линейку твердотельных накопителей



                      Компания AMD уже подготовила к выпуску собственные SSD, предназначенные для установки в высокопроизводительные системы, включая игровые ПК. Линейка SSD от AMD получила название Radeon R7.

                      Первыми представителями линейки будут модели Radeon R7 120G, Radeon R7 240G и Radeon R7 480G с емкостью 120 ГБ, 240 ГБ и 480 ГБ соответственно. Технология производства — 19 нм чипы от Toshiba (A19nm Toshiba Multi Level Cell (MLC)) и контроллер Indilinx Barefoot 3 M00.

                      Читать дальше →
                    • Работа в Google: Ложка дегтя

                        image

                        Disclaimer: Я работаю в Google на позиции инженера уже почти 4 года.

                        По тому, что я пишу про Google, может создаться впечатление, что работа в Google – это предел мечтаний, идеальное место для работы, куда стоит стремиться попасть любой ценой. Google реально очень хорошая компания для программистов, даже отличная. Но идеалов не бывает, и у нее тоже есть некоторые минусы. О них сегодня и пойдет речь.

                        Думаю, все ниже написанное почти в полной мере справедливо и для других похожих компаний. Поэтому я буду писать “компания” вместо Google. Не ручаюсь, но подозреваю (и подозрения подтверждаются большим количеством знакомых), что примерно то же самое можно сказать и о Microsoft, и о Facebook, и об Amazon, и о других приличных больших компаниях.
                        Читать дальше →