• Локальный NPM репозиторий за 5 минут со своими пакетами и кэширование

    Доброго времени суток!

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

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

    Поиск бесплатных, частных npm репозиториев завел в тупик, а использование частных репозиториев на npm требует платы (а это не наш менталитет).

    Поскольку в офисе есть сервер, который работает всегда(почти), было решено развернуть локальный npm.

    image
    Читать дальше →
    • +21
    • 13.2k
    • 9
  • Книга «Site Reliability Engineering. Надежность и безотказность как в Google»

      imageВот уже почти 20 лет компания Google обеспечивает работу невообразимо сложных и масштабных систем, которые чутко реагируют на запросы пользователей. Поисковик Google находит ответ на любые вопросы за доли секунды, карты Google с высочайшей точностью отражают земной ландшафт, а почта Google доступна в режиме 365/24/7 и, в сущности, стала первым общедоступным облачным хранилищем. Неужели эти системы безупречны? Нет, они тоже отказывают, ломаются и устаревают, как любая техника. Просто мы этого не замечаем. Все дело в том, что уже более десяти лет Google нарабатывает уникальную технологию Site Reliability Engineering, обеспечивающую бесперебойную работу и поступательное развитие софтверных систем любой сложности. Эта книга — кладезь опыта, накопленного компанией Google за долгие годы, коллективный труд многих выдающихся специалистов и незаменимый ресурс для любого инженера, желающего разрабатывать и поддерживать любые продукты максимально качественно и эффективно.
      Читать дальше →
    • Злоумышленники могут получить полный удаленный доступ к Android-устройству через порт публичной USB-зарядки



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

        Но Кевин Батлер и его исследовательская группа в области информационной безопасности Университета Флориды недавно обнаружили крайне элегантный и при этом довольно опасный способ атаки на пользовательские устройства через USB-порт. При этом сам порт выступает для наблюдателя лишь как источник питания и может размещаться в любом публичном или не очень месте, например, на зараженном ПК, в кафе или точке зарядки USB-устройств в аэропорте. Для атаки должно выполняться одно условие кроме доступа к обмену данными с портом зарядки со стороны злоумышленника: выход экрана смартфона из поля зрения хозяина (чтобы он не заметил, что устройство стало «жить своей жизнью»).

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

          Эта статья — вольный пересказ моего доклада на прошедшем Хайлоаде.

          Я возглавляю компанию, в которой работает 75 человек, а начинали мы 10 лет назад впятером.


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


          Читать дальше →
        • Облачный хостинг PCI DSS: Детали предоставления услуги

            Часть компаний, деятельность которых связана с обработкой данных платежных карт клиентов, прибегают к услуге PCI DSS хостинга. Это связано с тем, что удовлетворение требований стандарта к инфраструктуре является трудоемким процессом. Например, услугами PCI DSS хостинга пользуется банк для интернет-предпринимателей «РФИ Банк», системами которого управляет «ИТ-ГРАД». Банк арендует защищенную виртуальную инфраструктуру в соответствии с требованиями стандарта PCI DSS по модели IaaS.

            Поскольку все больше компаний обращают внимание на PCI DSS Compliant Hosting, мы хотим поговорить о деталях предоставления этого типа услуги.

            Читать дальше →
            • +14
            • 3.9k
            • 7
          • Динамическая таблица поверх Google Maps

            Введение


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


            К сожалению (или к счастью?), готовых решений я не нашёл. Google Карты позволяют накладывать маркеры и фигуры на карты, но эти способы представляют слишком мало информации. С Яндекс картами оказалось не лучше. Но Карты Гугл имеют механизм пользовательских наложений с HTML-содержанием. И для инкапсуляции этой работы с картами и наложениями я создал JavaScript библиотеку GMapsTable. Возможно, кому-нибудь она окажется интересной или полезной. Рабочий пример.


            screen0

            Читать дальше →
          • Построение модульной архитектуры приложения на Forwarding-декораторах (авторский перевод)

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

            Однако есть один подход, который именно в PHP можно встретить довольно редко. Он включает использование нативного наследования и позволяет патчить код «более лучше»(с). Мы называем этот способ “Forwarding Decorator”. Нам он представляется достаточно эффективным, и, кстати, эффектным тоже, хотя последнее не так важно в продакшене.

            Как автор оригинальной англоязычной статьи "Achieving Modular Architecture with Forwarding Decorators", опубликованной на SitePoint, я представляю вам авторскую версию перевода.
            Читать дальше →
          • Стандарты и шаблоны для ТЗ на разработку ПО

              Введение


              Недавно ко мне обратились, чтобы я посоветовал стандарты для написания технического задания (ТЗ) на разработку автоматизированных систем (АС) и программного обеспечения (ПО). Вот думаю, сейчас зайду в Яндекс, найду подходящую статейку и отправлю её. Но не тут-то было! Одной статьи, где перечисляются стандарты для ТЗ, включая шаблоны и примеры готовых документов, я не нашел. Придется сделать такую статейку самому…

              И так, основные стандарты, методологии и своды знаний, где упоминается ТЗ или SRS (Software (or System) Requirements Specification):

              • ГОСТ 34
              • ГОСТ 19
              • IEEE STD 830-1998
              • ISO/IEC/ IEEE 29148-2011
              • RUP
              • SWEBOK, BABOK и пр.
              Читать дальше →
            • Разбираемся с SOLID: Инверсия зависимостей

                Давайте глянем на определение принципа инверсии зависимостей из википедии:


                Принцип инверсии зависимостей (англ. dependency inversion principle, DIP) — важный принцип объектно-ориентированного программирования, используемый для уменьшения связанности в компьютерных программах. Входит в пятёрку принципов SOLID.

                Формулировка:

                A. Модули верхних уровней не должны зависеть от модулей нижних уровней. Оба типа модулей должны зависеть от абстракций.
                B. Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций.

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

                Читать дальше →
              • Как попасть на дачу президента в пять часов утра

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


                Читать дальше →
              • Лучший Pull Request

                Относительно недавно мне посчастливилось присоединиться к команде разработки Bitbucket Server в Atlassian (до сентября он был известен как Stash). В какой-то момент мне стало любопытно, как этот продукт освещён на Хабре, и к моему удивлению, нашлось лишь несколько заметок о нём, подавляющее большинство которых на сегодняшний день уже устарело.

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

                Позвольте начать с перевода статьи Тима Петтерсена «A better pull request» о том, как должен выглядеть pull request, чтобы наиболее эффективно решать возложенную на него задачу.
                Читать дальше →
              • Развенчивание мифов про безопасные пароли

                • Translation


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

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

                Результаты их исследования, представленные на последней конференции ACM по безопасности компьютеров и коммуникаций в Денвере, показали
                Читать дальше →
              • Лёгкий блочный шифр Speck, или пылинка от агенства, которого нет

                  Устройство на КДПВ шифрует не по алгоритму Speck, но могло бы

                  В июне 2013 года АНБ опубликовало описание двух лёгких блочных шифров — Simon и Speck [1].

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

                  Прошло два года, практических атак ни на Simon, ни на Speck не появилось [2], а преимущества (простота и гибкость) — остались.

                  В отличие от своего младшего брата Simon, который оптимизирован для железа, Speck создан для программной имплементации, в том числе на устройствах с ограниченными возможностями вроде микроконтроллеров. Поскольку программистов среди читателей скорее всего больше, чем аппаратчиков, остаток статьи будет про Speck.

                  Что там внутри и зачем он нужен, когда есть AES
                  • +33
                  • 25.9k
                  • 9
                • Нейросеть в 11 строчек на Python

                  • Translation

                  О чём статья


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

                  Дайте код!


                  X = np.array([ [0,0,1],[0,1,1],[1,0,1],[1,1,1] ])
                  y = np.array([[0,1,1,0]]).T
                  syn0 = 2*np.random.random((3,4)) - 1
                  syn1 = 2*np.random.random((4,1)) - 1
                  for j in xrange(60000):
                      l1 = 1/(1+np.exp(-(np.dot(X,syn0))))
                      l2 = 1/(1+np.exp(-(np.dot(l1,syn1))))
                      l2_delta = (y - l2)*(l2*(1-l2))
                      l1_delta = l2_delta.dot(syn1.T) * (l1 * (1-l1))
                      syn1 += l1.T.dot(l2_delta)
                      syn0 += X.T.dot(l1_delta)
                  


                  Слишком сжато? Давайте разобьём его на более простые части.
                  Читать дальше →
                • Как собеседовать ИТ-специалистов

                  • Translation
                  Одна из наших основных задач — сделать IaaS простым и понятным. Для этого мы постоянно оптимизируем работу нашего провайдера и рассказываем об этом здесь. Например, мы уже писали о том, как работает API нашего IaaS-провайдера и делились опытом разработки своего DNS-менеджера.

                  Сегодня мы решили взглянуть на западный опыт и рассмотреть тему найма ИТ-специалистов. Для этого мы оттолкнулись от заметки Реджинальда Брэтуэйта (Reginald Brathwaite) из компании Page Duty и кратко проанализировали инсайты, которые он описал.

                  Читать дальше →
                • «Мой код никого не интересует» или почему хорошие веб-студии должны это оспаривать

                    Здравствуйте уважаемые обитатели Хабра. Написать это меня сподвигла статья Программисты не понимают. Это будет крик души одинокого начинающего веб-перфекциониста в уши большинства существующих веб-студий и веб-девелоперов.
                    Читать дальше →
                  • Вредоносное ПО для Android становится все более изощренным



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

                      Распространяется adware, о котором идет речь, вполне испытанным среди злоумышленников способом: перепаковываются обычные приложения от Twitter, Facebook или даже Okta (сервис двухфакторной аутентификации). Эти приложения с трояном загружаются не в каталог Google Play, а на сторонние ресурсы/каталоги, многие из которых также весьма популярны. С точки зрения пользователя, который пытается скачать какое-то из троянизированных приложений, все хорошо, при этом во многих случаях программа после установки работает, как нужно. Но во время установки на телефон жертвы устанавливается и мощное приложение-троян, которое использует эксплоиты для получения рута. Эксплоиты, найденные в трех семействах таких приложений (Shedun, Shuanet, и ShiftyBug) позволяют устанавливаться зловреду в качестве системного приложения с соответствующим статусом, который имеют только системные процессы.
                      Читать дальше →
                    • Бюджетная рассылка СМС

                        Приветствую всех хаброжителей!

                        Конечно, зализанная тема про рассылку смс сообщений, но как говориться: «много — не мало». Как-то так получилось, что именно она меня постоянно преследует: то одни, то другие добрые люди попросят принять участие (советом, например) в реализации бюджетной рассылки сообщений. И поэтому чтобы не пропадать накопленному добру, оставлю здесь, а вдруг кому-то пригодится…

                        Итак-с… Опускаем все варианты реализации на базе обычного компа и оси семейства NT. А перейдем сразу к «автономным» системам.

                        Чем может похвастаться arduino в этом направлении? Отвечу сразу, ОНО работает, но есть нюансы, о которых напишу ниже. Вообщем, имеем китайский вариант arduino 2560 (было перепробовано практически вся линейка) и два дополнительных модуля — сеть W5100 (наиболее стабильный вариант) и GSM SIM 900. Выглядит это все дело как-то так.

                        image

                        Задача была следующая:
                        — устройство должно уметь общаться по http
                        — отправлять сообщение
                        — выдавать результат в формате json

                        Гугл делится всей необходимой информацией, и на выходе получаем следующий код:

                        Читать дальше →
                      • 10 главных ошибок масштабирования систем

                        • Translation
                        Мартин Л. Эббот и Майкл Т. Фишер, авторы книги «Искусство масштабируемости», перечисляют наиболее распространенные архитектурные, организационные и технологические проблемы масштабировании в product-группах. Список был сформирован на основе их опыта, а также в ходе коммуникаций с клиентами и лег в основу первой книги.

                        Архитектурные ошибки



                        Читать дальше →
                      • HAProxy исполнилось 1.6

                          HAProxy Logo
                          Приветствую категорически.
                          Спешу сообщить радостную новость о том, что после полутора лет (а не четырёх) на свет появилась стабильная версия HAProxy 1.6 с интереснейшим функционалом.

                          Напомню, что это сверхбыстрое решение, гарантирующее отказоустойчивость и обеспечивающее балансировку и проксирование TCP и HTTP запросов.
                          Что умеет
                          Множество алгоритмов балансировки запросов
                          Маршрутизация и фильтрация запросов по многим критериям
                          SSL терминирование, с SNI/NPN/ALPN и OCSP stapling в комплекте
                          Манипуляции с HTTP заголовками и поддержка ACL
                          Мониторинг серверов бекенда HTTP и TCP проверками
                          Простота интеграции с VRRP (keepalived)
                          Сжатие (gzip,deflate)
                          Поддержка syslog, гибкий формат логов
                          Практически неограниченное количество серверов, ферм, сервисов
                          Безопасность (ни одного взлома за 13 лет)
                          Поддержка IPv6 и UNIX сокетов
                          … и множество других возможностей


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

                          В этой статье я поделюсь, чем примечателен выход версии под номером 1.6, на какие нововведения стоит обратить внимание и кратко опишу как эти новшества попробовать. Примеры в статье присутствуют для ознакомления, а их применение не освобождает от необходимости обратиться к странице постоянно обновляемой документации.
                          Читать дальше →