• Бесплатный курс по AngularJS от Codeschool



      Всем привет!

      Пару дней назад мне на почту пришло письмо от Codeschool.com, в котором очень красочно (как можно заметить из картинки в шапке поста) представлялся новый курс по AngularJS. Т.к. платной подписки у меня сейчас нет, я решил отложить просмотр до лучших времён, а сегодня случайно узнал, что курс оказывается «Sponsored by Google», а соответственно бесплатный. Закончив работу над первым уровнем, я поспешил проверить наличие заметки об этом чудном событии на Хабре, но с удивлением обнаружил, что никто до сих пор не поделился этой новостью. Значит придётся взять всё в свои руки.
      Читать дальше →
    • Рубин на рельсах: продакшен и деплой для чайников

      • Tutorial
      Год назад я довел свое первое рельсовое приложение до приемлемого вида. Вопрос использования готового кода в продакшене ранее меня не заинтересовал. С чего вдруг? Несложный язык, лаконичный фреймворк — уж деплой-то явно не сложнее, чем преодоление ментального тормоза после PHP.

      Команда разработчиков Rails рекомендует использовать Phusion Passenger, он что-то вроде mod_php — установил, разместил файлы и полетел. На момент изучения вопроса на форумах хватало баталий о производительности решений; Passenger в них фаворитом не значился.

      Совета относительно альтернативы я спросил у техдиректора сайта с миллионом уников в сутки — тот отправил меня гуглить на тему Nginx и Unicorn. Инструкция по настройке продакшена, найденная на Хабре, датировалась 2009 годом. Помимо прочего, ее просто переполняли изъяны уроков «Как нарисовать сову».

      Отдельные составляющие процесса кое-где разжеваны по-английский, но монолитный tutorial на глаза так и не попался. В традициях рельсового сообщества лежит принцип, предписывающий делиться результатами и опытом решения проблем.
      Делюсь
    • CSS3-генераторы. Лучшее









        Доброго времени суток! Сразу объяснюсь по поводу оформления поста: однажды, наткнувшись на статью о CSS-генераторах, меня не сильно порадовало безмерное количество информации и навигационных элементов в представленных генераторах, и еще больше — их пользовательский интерфейс! Возмутило то, что инструменты для работы со стилями — сами не выдержаны в рамках возможностей, которые они представляют… как так?!

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

        Надеюсь, для многих ноу-хау станет хорошим помощником в процессе веб-разработки.
        Читать дальше →
      • Назад, к технологиям верхнего палеолита, от любимых всеми REST, STATEless, CRUD, CGI, FastСGI и MVC

          «Только со смертью догмы начинается наука.»
          // Галилео Галилей


          «Я начал завидовать рабам. Они всё знают заранее. У них твёрдые убеждения.»
          // х/ф Марка Захарова «Убить дракона» по мотивам пьесы Евгения Шварца


          Уже пару лет и дня не проходит, чтобы я не услышал (или не прочитал) от людей, начинающих новые проекты, фразу типа «Возьмем серверный движок для REST API и MVC, и погнали». Сначала я думал, что у этих слов есть один источник, может книжку какую завезли во все магазины или где-то в топе поисковиков лежит статья, зомбирующая разработчиков. Если же выяснять у них, что они понимают под REST и MVC, то можно повредиться умом. Ну с MVC уже все ясно, об этом я уже давно писал, ничего не изменилось, только усугубилось, стоит набрать в Google Images «mvc» и мы увидим страшное, стрелочки в любые стороны. Ну а про REST отвечают следующее: ну как же, нам нужно из браузерного GUI и мобильного приложения вызывать серверные методы, например: setUserCity(userId, cityId) или calculateMatrix(data) или startVideoConverter(options, source, destination) а потом мы столкнемся с большой нагрузкой и архитектура REST все решит. Дальше я задаю вопросы, от которых глаза округляются уже у тех, кто недавно еще горел праведной верой, рвался в бой и точно знал, что к чему в этом мире. Теперь можно перейти к рассмотрению терминологической катастрофы, в эпицентре которой мы с вами пребываем.
          Читать дальше →
        • HTML-импорт — include для веба: часть 1

          • Translation
          • Tutorial
          Перевод статьи «HTML Imports #include for the web», Eric Bidelman.

          От переводчика

          Недавно я перевел статью по основам HTML Import. Я обещал, что если эта тема заинтересует хабра-сообщество, то переведу более подробную статью. Я решил разбить перевод на две одинаковые по размеру части, так как, по моему, на одну часть слишком много буков. Вторая часть выйдет спустя несколько дней после публикации этой части. Если, конечно, эта часть более-менее понравится хабра-сообществу.

          Для чего нужен HTML-импорт?


          Давайте поговорим о том, как мы загружаем различные ресурсы. JavaScript мы загружаем при помощи
          <script src>
          . Для CSS у нас есть
          <link rel="stylesheet">
          . Для изображений
          <img>
          . Для видео есть
          <video>
          . Для аудио —
          <audio>
          … Давайте ближе к сути! Для большинства видов контента есть простые способы его подгрузки. Но не для HTML. Для HTML у нас есть следующие варианты:
          1. <iframe>
            — испробованный и рабочий, но тяжеловесный способ. Контент iframe'а живет в отдельном от главной страницы контексте. Хоть это и хорошая особенность, она также создает дополнительные трудности: подгонка размера айфрейма к его содержимому, работа с внутренними скриптами и стилями.
          2. AJAX — мне нравится
            xhr.responseType="document"
            , но загрузка HTML при помощи JS выглядит как-то неправильно.
          3. КривыеКостылиTM — html код в виде JS строк или комментариев, например
            <script type="text/html">
            .

          HTML код, это самый простой тип контента, но в этом плане, он требует наибольших усилий. Хорошо, что у нас есть Web Components, они помогут нам справиться с этой и другими проблемами.
          Читать дальше →
        • Защищаем сеть L2 коммутаторами

          • Tutorial


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

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

          Рассматриваться будут:

          • Rogue DHCP Server
          • DHCP starvation
          • CAM-table overflow
          • VLAN hopping
          • MAC-spoofing

          За основу взят видеоурок CBT nuggets из цикла CCNA security.
          Читать дальше →
        • Шпаргалка по пробросу IP во внутреннюю сеть без моста и iptables в 4 команды

          • Tutorial
          В статье будет рассмотрена маршрутизация внешнего IP-адреса внутрь локальной без пробрасывания ethernet-шлюза и переписывания адресов в iptables. В итоге на сетевой карте внутреннего сервера будет один правильный внешний IP-адрес, внутренние IP-адреса будут отсутствовать.
          Читать дальше →
        • Как улучшить свой стиль программирования?

          Исповедь 1


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

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

            Рано или поздно у тех, кто связан с деятельностью в интернете возникает потребность в своём сервере, перенести развитой сайт на более производительную площадку (или просто 1C-Bitrix запустить), запустить свой интернет-сервис, игровой сервер с Counter-Strike или внеочередной RPG. Да мало ли этих целей в современном вебе.

            Вот и у меня недавно возникла потребность в переходе с моего древного shared хостинга на что-то более быстрое и функциональное. Держать домашний сервер я утомился и решил, что можно остановиться на VPS (Virtual Private Server) сервере, как вполне доступном и удобном решении моих задач.

            Задачи на сейчас – совместная разработка (и обучение) на RoR и перенос пары клиентов с их сайтами на одну площадку, для удобства управления. Столкнувшись со сложностями в выборе (VPS нынче многие дают) решил, что может быть мой опыт сэкономит кому то время или подскажет критерий и метод оценки.

            Приступим.
            Читать дальше →
          • Maximum Transmission Unit (MTU). Мифы и рифы

              Maximum transmission unit (MTU) это максимальный объём данных, который может быть передан протоколом за одну итерацию. К примеру, Ethernet MTU равняется 1500, что означает, что максимальный объём данных, переносимый Ethernet фреймом не может превышать 1500 байт (без учёта Ethernet заголовка и FCS — Рис. 1).

              image
              Рис. 1

              Давайте пробежимся с MTU по уровням OSI:
              Читать дальше →
            • Прекратите скручивать — 2. О способах крепления кабеля

              • Tutorial
              По заявкам слушателей, так сказать. Правильно соединить кабель — половина дела, но если он будет свободно болтаться, то долго он не проживет — или заденут, или порвут, или откусят(необязательно со злыми намерениями). А может просто под своим весом выскользнуть из соединения. А может не выскользнуть, что еще хуже — поди-ка найди место пропадания контакта. Так что эта статья расскажет о том, какими способами можно закрепить кабель так, чтоб он никуда не делся.
              Да и вот такие крепления некрасивы, неудобны, и выдают непрофессионала:

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



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

                Однако я верю в то, что их можно избежать, если знать в какие ловушки можно попасть и как из них выбираться. Возможно эта вера — очередная ловушка.
                Читать дальше →
              • Процессоры ARM? Практика. Marvel Armada XP

                  Прежде всего хочу выразить благодарность компании Rikor и Олегу лично за предоставленные платформы для тестирования. По прежнему вы можете взять на тест Marvell Armada XP для себя и в дальнейшем, как тестер, оставить их у себя в пользовании за символическую плату. Как и обещал в прошлой статье Сервер на ARM? Made in Russia! — привожу тесты производительности серверов на процессорах ARM. Так как ARM это процессор сделанный по технологии System-On-Chip, то заострим наше внимание на производительности процессора.
                  На просторах всемирной паутины много тестов, но все они для нас, как фантастическое путешествие на Марс — как проводились, какой именно ревизии процессор (или просто другого производителя), какой софт использовался не ясно. А тут — сервера перед нами, остается только протестировать.

                  Переходим к тестам
                • SoftEther VPN — продвинутый мультипротокольный VPN-сервер и клиент

                    Как скоро я смогу вас заинтересовать, если скажу, что в этой статье речь пойдет о VPN-сервере, который может поднимать L2TP/IPsec, OpenVPN, MS-SSTP, L2TPv3, EtherIP-серверы, а также имеет свой собственный протокол «SSL-VPN», который неотличим от обычного HTTPS-трафика (чего не скажешь про OpenVPN handshake, например), может работать не только через TCP/UDP, но и через ICMP (подобно pingtunnel, hanstunnel) и DNS (подобно iodine), работает быстрее (по заверению разработчиков) текущих имплементаций, строит L2 и L3 туннели, имеет встроенный DHCP-сервер, поддерживает как kernel-mode, так и user-mode NAT, IPv6, шейпинг, QoS, кластеризацию, load balancing и fault tolerance, может быть запущен под Windows, Linux, Mac OS, FreeBSD и Solaris и является Open-Source проектом под GPLv2?

                    То-то и оно. Такое пропустить нельзя.
                    Читать дальше →
                  • Вы до сих пор не любите JavaScript?

                    С началом эпохи HTML5, рынку понадобилось большое количество JavaScript программистов. Многие специалисты по другим языкам, начали массово переориентироваться на JavaScript. Я много раз видел, как программисты с большим опытом ругали этот, один из самых гибких и могучих, язык, не понимая его принципов. В этой статье я постараюсь рассказать суть и философию JavaScript. Здесь будет всего 4 строчки кода и много-много того, что не напишут в учебниках. Обещаю, что вы полюбите этот язык, или по крайней мере, станете эффективнее в нём. Итак, поехали!
                    Читать дальше →
                  • Бан по континентам



                      В одно прекрасное утро я просматривал логи и задал себе ряд вопросов:

                      1. А жду ли я письма из Юго-Восточной Азии? (когда смотрел логи почты)
                      2. И с какого перепугу ко мне стучатся ssh брутфорсеры из Штатов?
                      3. Мне надо терпеть сетевые сканеры из Австралии?
                      4. Кто мне звонит из Африки? (когда разглядывал логи asterisk)
                      5. С какой стати к моему POP-серверу обращаются из Латинской Америки?


                      Почему бы не забанить по континентам? Оставив только нужный континент(ы)?


                      Под катом bash скрипт, который этим занимается
                    • Блок дистанционный сервисный многофункциональный БДС-М

                        На этой радостной ноте я завершаю рассказ о текущей конфигурации «Удобного дома». Последняя часть системы в моих секретных планах всегда проходила под шифром «медиаконтроллер». И, что закономерно, предназначалась для управления ТВ, медиаплеером и кондиционером со смартфона или вообще любого компьютера с интернетом и браузером. Функционал, как всегда, дополнялся и развивался на ходу — у меня, кажется, просто какая-то пагубная страсть к импровизациям.

                        Поэтому из простого ретранслятора ИК-команд медиаконтроллер превратился в не совсем простой. Сначала я добавил туда датчик атмосферного давления, чтобы завершить картину метеоданных. А потом — ретранслятор радиосигналов от беспроводных датчиков, что несколько упростило жизнь и использование некоторых функций центрального контроллера. Если точнее, то получилось практически безотказное управление кормушкой для котов.

                        Чтобы не было недопонимания: особой цели или необходимости в этом контроллере я не видел. Просто было интересно его сделать и заодно занять длинные зимние вечера чем-нибудь, кроме как задумчиво смотреть в окно, пить кофе и размышлять о вечном, обязательно под теплым клетчатым пледом.

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

                        Наверное, лучше обо всем по порядку.

                        Читать дальше →
                      • Авторизация клиентов в nginx посредством SSL сертификатов

                          Введение:


                          Потребовалось мне тут как-то написать небольшой API, в котором необходимо было помимо обычных запросов принимать запросы с «высокой степенью секретности».
                          Не я первый с этим столкнулся и мир давно уже использует для таких вещей SSL.

                          Поскольку на моём сервере используется nginx, то был установлен модуль SSL
                          Гугл не выдал ни одного работоспособного howto, но информация в сети есть по частям.

                          Итак, пошаговое руководство по настройке nginx на авторизацию клиентов через SSL-сертификаты.
                          Читать дальше →
                        • Об особенностях внедрения СПО в малом бизнесе

                            Добрый день, уважаемое сообщество!

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

                            image


                            Слепок типичного заказчика



                            Обычно существовавшее изначально положение вещей характеризовалось следующим:

                            1. Организации с количеством компьютеров от 1 до 50 предпочитали использовать проприетарные решения для ОС одной хорошо всем известной заатлантической конторы.
                            2. Денег на покупку лицензий всегда не было. Предпочитали использовать «пиратчину».
                            Читать дальше →
                          • Как вынудить процесс использовать новый адрес DNS-сервера из обновлённого resolv.conf без перезапуска самого процесса

                              Я работаю системным администратором Unix. Однажды к нам в отдел эксплуатации сервисов упал тикет от программиста с выдержой из лога application-сервера в заголовке: "pgbouncer cannot connect to server". Посмотрев логи pgbouncer'ов, я увидел, что периодически возникают lookup fail'ы при обращении к нашим DNS. Было установленно, что это связано не с работой наших DNS-серверов, а с ненадёжностью самого протокола UDP: иногда возникают потери пакетов по разным причинам.
                              image
                              В результате, было решено установить на каждом сервере с pgbouncer'ами по кэширующему BIND. И тут возникла интересная проблема: pgbouncer не перечитывал по сигналу HUP файл /etc/resolv.conf и продолжал обращаться к старым DNS-серверам. А перезагружать баунсеры категорически нельзя: есть проблемные проекты, которые очень болезненно относятся к разрывом сессий с базой.

                              В данной статье я расскажу как можно pgbouncer или любую другую программу, использующую библиотечный вызов getaddrinfo(), заставить перечитать resolv.conf и начать использовать новый DNS-сервер совершенно безболезненно для клиентов (без даунтайма).
                              Читать дальше →