• Работа большой распределенной команды: преимущества удаленки, решения проблем, полезные инструменты


      Всем привет! Меня зовут Алексей, я тимлид команды Vimbox (платформа для обучения в Skyeng). Не так давно я выступал на конференции с докладом об удаленной работе и особенностях распределенной команды. Неожиданно темой заинтересовалось много людей, хотя я думал, что хайп уже прошел и никого не удивить. Поэтому я решил поделиться и с вами наработками, полученными за четыре года функционирования в этом формате. Поскольку у нас в компании из 55 разработчиков 51 человек постоянно работает вне офиса, да и сам я живу в Калининграде, думаю, наш опыт многим может пригодиться.

      Читать дальше →
    • 25 Android-библиотек, которыми определенно стоит воспользоваться в начале 2017 года

      • Translation
      Вот список 25 Android-библиотек, релиз которых состоялся в январе-феврале 2017 года. Все они достойны внимания, место в списке не определяется значимостью. Приступим!


      Читать дальше →
      • +23
      • 43.9k
      • 9
    • У нас проблемы с промисами

      • Translation
      Разрешите представить вам перевод статьи Нолана Лоусона «У нас проблемы с промисами», одной из лучших по теме из тех, что мне доводилось читать.

      У нас проблемы с промисами


      Дорогие JavaScript разработчики, настал момент признать это — у нас проблемы с промисами.

      Нет, не с самими промисами. Их реализация по спецификации A+ превосходна. Основная проблема, которая сама предстала передо мной за годы наблюдений за тем, как многие программисты борются с богатыми на промисы API, заключается в следующем:

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

      Если вы мне не верите, решите такую задачку:

      Вопрос: В чем разница между этими четырьмя вариантами использования промисов?

      doSomething().then(function () {
        return doSomethingElse();
      });
      
      doSomething().then(function () {
        doSomethingElse();
      });
      
      doSomething().then(doSomethingElse());
      
      doSomething().then(doSomethingElse);
      

      Узнайте решение задачи
    • Поверхностный обзор javascript-enabled BaaS платформ

      Будучи начинающим javascript разработчиком, я заинтересовался темой межплатформенной разработки мобильных приложений. В этой области, в настоящее время, балом правят Cordova (phonegap) www.phonegap.com, Appcelerator Titanium www.appcelerator.com, Mosync www.mosync.com.

      Рано или поздно, после выпуска первых мини-приложений, основанных на этих системах, разработчику захочется создать что-нибудь Большое и Светлое, и хотелось бы, чтоб в этом новом приложении/сервисе были пользователи (c аватарами и проч.), push-notifications, user-generated-content и т.д… Но при этом, не хотелось бы тратить время и деньги на написание своей серверной инфраструктуры, а хотелось бы воспользоваться чем-нибудь недорогим, вплоть до бесплатного, и простым в освоении (и ещё чтоб «в облаке»!).

      Как раз подобного рода тяжести и взяли на себя многочисленные Backend-as-a-Service (не путать с другими aaS). Я хочу кратко пробежаться по некоторым игрокам на этом рынке. Подчеркну, что меня в первую очередь интересовали те платформы, которые можно было бы легко и безопасно использовать с мобильным javascript (Phonegap/Titanium). Если платформа просто предоставляет REST API, этого мало, т.к. вопрос безопасности требует наличия некоторого специального ограничительного функционала: AccessControlList/permissions/masterKeys/etc. И вообще, желательно отдельный javascript SDK.

      (Так как это «поверхностный обзор», я не буду подробно писать кому и зачем нужен BaaS и почему вместо всего этого не использовать старый-добрый PHP/MySQL на VPS или новый-добрый node.js в облаке)

      Я начал поиск с www.programmableweb.com/apis/directory/1?apicat=Backend там перечислено почти 40 платформ, просмотрев их, я оставил для обзора те, что легко можно использовать с javascript:
      Читать дальше →
    • 30 чудных библиотек для PHP программистов

      Предлагаю читателям «Хабрахабра» перевод публикации «30 Amazing PHP Libraries for Programmers and Developers». Авторы собрали несколько удивительных PHP-библиотек, которые помогут реализовать некоторые классные вещи, не прилагая много усилий. Цель обзора состоит в том, чтобы преподнести что-то новое, поэтому список не включает популярные библиотеки.
      Читать дальше →
    • Верстка email рассылок от А до Я для чайников

      Уже 3 с лишним года занимаюсь дизайном и версткой почтовых рассылок, которые ориентированы на англоязычных пользователей. За время работы перелопатили огромную кучу информации, перепробовали много вариантов верстки, набили достаточное количество шишек. Были найдены и исправлены типичные баги, которые в той или иной мере повторялись во всех почтовых клиентах. Также нашлись проблемы с некоторыми CSS свойствами — различные почтовые клиенты интерпретировали их по разному. Каждое письмо тестировалось на самых популярных почтовых клиентах: Gmail, Outlook, Yahoo, Android, iOS, MozillaThunderbird, Microsoft Outlook, The Bat. Рассылки ходят на сотни миллионов пользователей и приносят очень хорошие результаты. Итак, приступим к изучению.
      Читать дальше →
    • Do not be evil

        Сегодня довольно непростой, но, очевидно, знаменательный день. Сегодня Яндексу пришлось пойти на шаг, который, как мне всегда хотелось верить, никогда не придётся делать.

        Мы обратились в регулирующий орган, ФАС, чтобы вернуть равноправные отношения на рынке мобильных устройств. Наше обращение — признание одного неприятного факта. У нас с вами есть все шансы попасть в мир, где только одна компания будет решать, кто получит возможность донести сервисы до людей и чем эти люди смогут пользоваться.

        Мы всегда верили в конкуренцию и право выбора пользователя. Настолько, что даже в наших поисковых результатах с первых дней существования Яндекса стоят ссылки на другие популярные поисковики. Если честно, я всегда был уверен, что и Гугл верит в то же. Что это компания инженеров, производящих крутые продукты. Увы, сейчас очевидно, что помимо технической компании, которая когда-то считала своим лозунгом «Do not be evil», теперь есть и совсем другая – компания, контролируемая юристами и бизнесменами.

        Android давно уже совсем не выглядит открытой OS. И уж точно не выглядит открытой политика конкуренции Google на этой платформе. Например, сейчас мы столкнулись с тем, что вендоры, чтобы продавать в России телефоны с сервисами Яндекса, должны отказаться от всех сервисов Google не только в России, но и во всех остальных странах. При этом правила получения GMS и Google Play для каждого из них могут измениться в любой момент.

        Мы хотим, чтобы в открытой OS условия и лицензии были открыты и прозрачны для всех.
        Читать дальше →
      • Авторизация пользователей с AngularJS и Firebase

          В прошлой статье, я рассказывал о Firebase. Сегодня я хочу рассказать как я организовал авторизацию пользователей с использованием AngularJS и Firebase.

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

          Для основы проекта я использую ngBoilerplate, так считаю его достаточно удачной сборкой не требующей каких-то особых доработок. В сборке предустановлены Twitter Bootstrap, Angular UI, Angular Bootstrap, Font Awesome и LESS. Также замечательно настроен Grunt и Bower. Для установки и запуска чистого приложения, нужно всего лишь выполнить следующие команды:
          $ git clone git://github.com/joshdmiller/ng-boilerplate
          $ cd ng-boilerplate
          $ sudo npm -g install grunt-cli karma bower
          $ npm install
          $ bower install
          $ grunt watch
          


          Читать дальше →
          • +12
          • 16.7k
          • 7
        • Вышла новая версия reCaptcha API 2.0

            На днях, занимаясь очередным внедрением reCaptcha для одного из проектов, столкнувшись с небольшой проблемой в области отображения нескольких защитных изображений на 1 странице с помощью AJAX я в очередной раз пошел на страницу официальной документации «reCaptcha» и обнаружил, что документация существенно отличается от предыдущих версий.
            Воспользовавшись поиском стало ясным — в мир вышла «recaptcha 2.0» с обновленным API и визуализацией а так же рядом других «плюшек», о чем я и расскажу в данной статье.
            Читать дальше →
          • Делаем автоматизированный обзвон для нотификаций или опросов

            • Tutorial
            В ряде случаев у компании может возникнуть необходимость обзвонить каких-то из своих клиентов и сообщить им о чем-то, или, например, провести опрос про качеству обслуживания. Данную задачу можно решать разными способами, но мы будем исходить из того, что в данном случае ее нужно решить веб-разработчику, который привык иметь дело с Javascript/веб-сервисами и не сильно хочет вникать в особенности систем IP-телефонии. К счастью для него есть подходящий инструмент, о котором подробнее под катом.
            Читать дальше →
          • Osquery выставляет ОС как реляционную СУБД

              Facebook выложил на гитхабе фреймворк OSquery, он осуществляет низкоуровневый мониторинг процессов в OS X и Linux и хранит их в виде SQL-таблиц. Такой способ по-своему удобен, ведь в запросе можно объединять разные таблицы.

              Например, если мы хотим посмотреть названия, pid и порты всех процессов, которые прослушивают порты во всех интерфейсах, то составляем запросик

              SELECT DISTINCT 
                process.name, 
                listening.port, 
                process.pid
              FROM processes AS process
              JOIN listening_ports AS listening
              ON process.pid = listening.pid
              WHERE listening.address = '0.0.0.0';
              Читать дальше →
            • Гигафабрика аккумуляторов Tesla в Неваде получит 1,3 миллиарда налоговых льгот



                На днях стало ясно, почему вместо Калифорнии фабрика аккумуляторов Tesla будет построена в Неваде. Ранее этот объект действительно собирались построить в Калифорнии, но затем поступила довольно неожиданная новость о том, что гигафабрика аккумуляторов будет построена в Неваде. А все потому, что в Неваде Tesla получит довольно значительные налоговые льготы, общая сумма которых за 20 лет составит 1,3 миллиарда долларов США.

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

                Читать дальше →
              • Что такое холакратия и почему она вам не нужна

                  Холакратия скоро станет новым модным баззвордом в мире IT-бизнеса, какими в своё время стали стартапы, аджайл и лин. Уже сейчас в Силиконовой долине поднялся невероятный хайп: компании уровня Medium, Zappos и Airbnb вовсю внедряют Конституцию 4.0, появляются форки и альтернативные системы, рождается куча мисконцепций, спекуляций и критики в адрес этой модели распределения власти. Скоро тренд доберётся до наших северных широт и вызовет ещё больше непонимания из-за трудностей перевода. Давайте опередим события и попробуем разобраться, что такое холакратия, откуда она взялась и какую пользу может принести.



                  Кнопка обслуживает предпринимателей, и так уж получается, что нам всегда нужно быть чуточку впереди, чтобы предлагать самые крутые решения. Поэтому мы обожаем пробовать всё новое. Эксперименты с холакратией мы начали несколько месяцев назад: набили первые шишки, пообщались с консультантами из США, почувствовали первые улучшения и продолжаем внедрять и изучать. В первой статье расскажем про важные для понимания базовые штуки, а в следующих поделимся собственным опытом и ответим на популярные вопросы.
                  Читать дальше →
                • Как использовать API сайта, у которого нет API?

                    У меня достаточно часто появляется задача получить данные от стороннего сайта, при этом далеко не всегда этот сайт предоставляет возможность удобно получить эти данные через API. Единственное решение в таком случае — парсить html содержимое страниц. Когда-то я писал регэкспы, потом появились библиотеки, позволяющие получить нужное содержимое по css-селектору, а сейчас и это кажется сложной задачей, которую хотелось бы упростить.

                    Сегодня я хочу рассказать вам о моей небольшой библиотеке, позволяющей описать в API-стиле http-запросы и парсить ответ сервера в нужный вам формат.
                    Читать дальше →
                  • Несколько интересностей и полезностей для веб-разработчика #30

                      Доброго времени суток, уважаемые хабравчане. За последнее время я увидел несколько интересных и полезных инструментов/библиотек/событий, которыми хочу поделиться с Хабром.

                      Cloudtunes



                      Cloudtunes один из тех проектов, глядя на которые я не понимаю мотивации разработчиков выкладывать такие наработки в открытый доступ. Не сочтите меня за сугубо меркантильную личность, но данный проект — это грубо говоря клон iTunes в облаке и это просто великолепный сервис. Cloudtunes обеспечивает единый интерфейс для вашей медиатеки, синхронизируя данные между Dropbox, Youtube, Lastfm и тд. Серверная часть написана на Python (Tornado, Celery, Mongo DB, MongoEngine, Redis), а клиентская на CoffeeScript (Backbone.js, SocketIO, Handlebars, Compass, SoundManager).

                      Читать дальше →
                    • Релиз KPHP и движков

                        Довольно часто, выступая на различных конференциях, мы делились желанием выпустить под открытой лицензией KittenPHP, согласно традиции, заложенной крупными IT-компаниями, такими как Google и Facebook.

                        Это событие несколько раз откладывалось в связи с опасением, что нам не хватит сил и времени на взаимодействие с opensource-сообществом, однако в конце концов заветный день настал, и код KPHP и некоторых других инструментов, используемых внутри проекта, был выложен в открытый доступ.

                        В связи с этим под катом вас ждет более подробный рассказ о внутреннем устройстве ВКонтакте и тех инструментах, которые сегодня стали доступны opensource-сообществу.


                        Читать дальше →
                      • Эффект неисправного монитора для текста, картинок и SVG

                        • Translation
                        • Tutorial
                        Эффект Glitch Лукаса Беббера выглядит очень круто — как будто вы смотрите на текст на старом мониторе, который слишком часто роняли на пол и у него «плавает» вертикальная синхронизация и сведение.

                        Реализация этого эффекта на CSS выглядит вполне убедительно. Мне пришлось немного поломать голову, чтобы выяснить, как он работает, и теперь я хочу объяснить это вам. Кроме того, я воспроизвёл этот эффект не только для текста, но и для растровых изображений и SVG, а так же написал несколько примесей Sass, чтобы облегчить работу с ним.


                        Читать дальше →
                      • CSS-препроцессоры против постпроцессоров

                        • Translation
                        CSS-препроцессоры прекрасны, они сделали революцию в мире интернет-вёрстки. Создание кросс-браузерного CSS стало гораздо проще, потому что все вендорные префиксы и хаки можно завернуть в примеси, заглушки или что у вас там. До сих пор этого вполне хватало, но так как мы неистово одержимы контролем, хотим большего. Всегда. БОООООЛЬШЕ. Скажи привет CSS-постпроцессорам!

                        Postprocessing? я запутался!


                        Это неудивительно, мне кажется “postprocessing” не слишком подходящим словом, но он вполне способно донести саму суть – CSS-препроцессоры (Sass, Less и т.д.) читают и собирают язык расширения в CSS, тогда как постпроцессоры читают и собирают сам CSS. Это ужасно, простите, но если было непонятно, то теперь всё должно встать на свои места.

                        Уже существует несколько постпроцессоров, например – Autoprefixer, PostCSS и rework.

                        Зачем использовать постпроцессор?


                        Что ж, давайте возьмём для примера Autoprefixer, он читает ваш CSS и добавляет вендорные префиксы, используя при этом базу данных Can I Use. Представьте, что вы пишете на Sass и хотите применить правило из CSS3, плохо поддерживаемое без префиксов, так что используете примесь:

                        @mixin box-sizing($value) {
                          -webkit-box-sizing: $value;
                             -moz-box-sizing: $value;
                                  box-sizing: $value;
                        }
                        .box {
                          @include box-sizing(border-box);
                        }
                        


                        Почему Autoprefixer лучше? Потому что можно вот так:

                        .box {
                          box-sizing: border-box;
                        }
                        
                        Читать дальше →
                      • Приводим в порядок css-код. Опыт Яндекса

                          Всем привет!

                          Я работаю над фронтендом огромного проекта — поисковой выдачи Яндекса. И у нас, как и у любого другого большого веб-проекта, есть огромное количество css-кода и немаленькая команда, которая с ним взаимодействует.

                          Когда много людей, используя разные инструменты, пишут и редактируют css, со временем этот css может получиться очень запутанным, неконсистентым и в целом начинает выглядеть плохо. Например, кому-то удобнее писать вендорные префиксы в одном порядке, кому-то — в другом, кто-то ставит кавычки вокруг url, кто-то — нет, а кто-нибудь фикся срочную багу к релизу мог бы, к примеру, написать position: relative в начале блока свойств, незаметив что где-нибудь внизу между color и box-shadow, уже есть position: absolute, и долго гадать, почему у него ничего не работает.



                          Но несмотря на то, что все пишут код по-разному, у нас в репозитории идеальный порядок: css-код полностью консистентен, и прекрасно выглядит. Весь.

                          Как мы этого добились, можно прочитать под катом.
                          Читать дальше →
                        • Электронная цифровая подпись для чайников: с чем ее есть, и как не подавиться. Часть 1

                            Итак, все чаще в кругах, работающих с документами все чаще звучат слова «электронный документ» и, связанное с ним почти неразрывно «электронная цифровая подпись», иначе — ЭЦП.

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

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

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