• VHD Native Boot снаружи и внутри

      Цель настоящей статьи — рассказать о моем опыте работы с весьма полезной и не слишком хорошо известной функцией Windows, которая называется VHD Native Boot, то есть способности загружаться с виртуального жесткого диска формата VHD/VHDx.

      Начиная с 7-й версии, в Windows появилась возможность создавать виртуальные диски VHD/VHDx (далее просто VHD), а также подсоединять и отсоединять их через графический интерфейс «Управление дисками» и утилиту командной строки diskpart. Кроме этого, Windows научилась с таких дисков загружаться, и все бы ничего, но этот самый Native Boot был доступен только обладателям старших версий, то есть от Pro и выше. Очевидно, что это было лишь маркетинговое ограничение, потому что с появлением Windows 10, а я проверял Anniversary Update (1607) и Creators Update (1703), никаких ограничений больше нет. Это работает и в Windows 10 Home, причем она может выступать как в роли хоста, так и в роли гостя. О том, как это выглядит и как это можно использовать, вы узнаете ниже.
      Читать дальше →
      • +12
      • 29.8k
      • 8
    • Push уведомления в Android с помощью Firebase Cloud Messaging для начинающих

      Не так давно Google купили Firebase и теперь на странице с описанием GCM нас встречает радостная новость о том, что пора бы мигрировать на Firebase.
      ...GCM users are strongly recommended to upgrade to FCM, in order to benefit from new FCM features today and in the future.

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

      Нам понадобится:

      • Android Studio
      • Код демо-проекта с github
      • 20 минут свободного времени
      Читать дальше →
    • 7 советов начинающему ИП, чтобы избежать проблем (что-то вы точно из этого не знаете)



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


        А для тех, кто открыл ООО, мы подготовили: 10 вещей, которые обязательно нужно сделать после регистрации ООО
        Читать дальше →
      • Sparrowdo — простой инструмент управления конфигурациями

        • Tutorial

        Здравствуйте! В данной статье хотел бы рассказать о простом инструменте управления конфигурациями — Sparrowdo. Скажу сразу, что система Sparrowdo базируется на использовании так называемых Sparrow плагинов, o которых мною был уже написан ряд статей на habrahabr.ru


        image image


        Читать дальше →
      • 3 типа продаж, которыми вы можете заниматься

          Простая табличка, которая поможет разложить продажи по трем типам

          У каждого типа продаж есть свои особенности и правила их организации.

          В зависимости от того, какими продажами вы занимаетесь это будет определять вашу:
          1) организационную структуру
          2) систему мотивации
          3) бизнес-процессы продаж
          4) целевую аудиторию
          5) команду продаж

          Смотрите данное видео, что узнать о трех типах продаж:
        • 50+ лучших дополнений к Bootstrap



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

            Для статьи я подобрал наиболее полезные дополнения «на все случаи жизни».
            Читать дальше →
          • Вы неправильно пишете животных

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


              Уязвимость рекурсивных алгоритмов навигации муравья: спираль смерти

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

              Но пойдём далее. Я не знаю, кто разрабатывал архитектуру ящериц, но они бегают в одном процессе, а дышат в другом. При этом платформа не поддерживает многозадачность, поэтому костыль с максимальной длиной бега в 4-6 секунд просто эпичен.
              Читать дальше →
            • Нескучные выходные или «тачка на прокачку»

                Некоторое время назад я сказал: "«Тюнить» авто лично мне как-то не интересно...", но «никогда не говори „никогда“». Звезды встали в таком порядке, что пришлось экстренно сменить машину Peugeot 307sw на Mazda5.

                Машина ездит, все хорошо, но некоторые «плюшки», которые были в прежней машине штатно, почему-то отсутствовали в текущей.

                Одна из таких полезных вещей — парктроник. Установка парктроника не является проблемой, но вот как-то «неродной» дисплей парктроника меня в салоне не устраивал. Внутренний перфекционист был жутко против «чужеродного тела».
                Заводи, поехали!
              • Rivulet — аудио плеер для торрентов

                • Translation

                Что такое rivulet.audio?


                rivulet.audio – новый способ скачивания и прослушивания музыки. Вы создаёте плейлисты, а программа автоматически находит музыкальные файлы в торрентах. Этими плейлистами можно делиться с другими и публиковать где угодно, потому что они не содержат нелегального контента сами по себе, и в них нет информации о том, где можно нелегально скачать песни. Когда кто-либо импортирует ваш плейлист, его клиент автоматически начинает поиск торрентов и проигрывает песни. Исходный код проекта открыт.

                Демо


                (эти сайты не имеют отношения к авторам проекта rivulet.audio)

                http://178.62.36.48:9074
                http://104.236.128.155:9074
                http://107.170.89.163:9074
                Читать дальше →
              • Как легко расшифровать TLS-трафик от браузера в Wireshark

                • Translation
                Многим из вас знаком Wireshark — анализатор трафика, который помогает понять работу сети, диагностировать проблемы, и вообще умеет кучу вещей.

                image

                Одна из проблем с тем, как работает Wireshark, заключается в невозможности легко проанализировать зашифрованный трафик, вроде TLS. Раньше вы могли указать Wireshark приватные ключи, если они у вас были, и расшифровывать трафик на лету, но это работало только в том случае, если использовался исключительно RSA. Эта функциональность сломалась из-за того, что люди начали продвигать совершенную прямую секретность (Perfect Forward Secrecy), и приватного ключа стало недостаточно, чтобы получить сессионный ключ, который используется для расшифровки данных. Вторая проблема заключается в том, что приватный ключ не должен или не может быть выгружен с клиента, сервера или HSM (Hardware Security Module), в котором находится. Из-за этого, мне приходилось прибегать к сомнительным ухищрениям с расшифровкой трафика через man-in-the-middle (например, через sslstrip).

                Логгирование сессионных ключей спешит на помощь!


                Что ж, друзья, сегодня я вам расскажу о способе проще! Оказалось, что Firefox и Development-версия Chrome поддерживают логгирование симметричных сессионных ключей, которые используются для зашифровки трафика, в файл. Вы можете указать этот файл в Wireshark, и (вуаля!) трафик расшифровался. Давайте-ка настроим это дело.
                Читать дальше →
              • Подборка библиотек для бекенда

                  Мы пишем свои бекенды на Go. Собираем метрики кода и балансируем запросы на шарды.
                  Шифруем RPC. Общаемся с Монгой. За год разработки сформировался стек проверенных библиотек.
                  Например, goagain сэкономил кучу времени и дебага после обрыва клиентов внутреннего RPC.

                  Делимся подборкой библиотек, проверенных и работающих в бою.
                  Читать дальше →
                  • +26
                  • 11.1k
                  • 1
                • Полезное и приятное для разработчика в Mojolicious

                  Про Mojolicious на Хабре уже несколько раз писали. Фреймворк успешно развивается и, на мой взгляд, становится удобнее для быстрой разработки с каждым днем.

                  Под катом я собрал несколько приемов работы с фреймворком, которые серьезно упрощают жизнь мне и, быть может, будут полезны для кого-то еще.
                  Читать дальше →
                  • +11
                  • 6.2k
                  • 5
                • Как я с компьютера на Android планшете потоковое торрент видео смотрел



                  Здравствуйте уважаемые Хабрачане!
                  Небольшая предыстория:
                  Меня давно интересовала возможность стриминга видео с домашнего компьютера на мой андроид планшет.
                  Не долго лазя по маркету нашел такое приложение как VLC Direct Pro Free, которое прекрасно справлялось с поставленой задачей (хоть и были косяки, но не смертельные), теперь я мог находясь даже далеко от дома, с относительно быстрым WI-FI соединением просматривать свою домашнюю медиатеку. (Компьютер включал благодаря WOL и управлял им с помощью PhoneMyPC) Пересмотря все что у меня было на жестком диске начал задумываться, а можно ли передавать torrent-поток на планшет? Разумеется, можно было просто удаленно поставить фильм на загрузку и подождать, но такой вариант меня совершенно не устраивал. Не найдя в интернете ничего по этой теме начал самостоятельно искать такой способ, и нашел, возможно, не совсем элегантный, но тем не менее рабочий, быть может кому-то еще пригодиться.
                  Читать дальше →
                • Великая речь великого человека

                    Это был его первый звуковой фильм. Его личный протест, никто не соглашался дать ему денег на картину, разоблачающую Гитлера как сумасшедшего тирана. Гитлер по мнению журнала «The Times», был Человеком года и великим политиком.
                    Тогда Чаплин снял фильм «Великий Диктатор» на свои личные средства.
                    Фильм, послужившей одной из причин его изгнаия из США.
                    Фильм, который посмотрел Гитлер и объявил Чаплина своим личным врагом.

                    И речь, которая остается актуальной и по сей день, не смотря на то, что уже прошло больше 70-ти лет.
                    3.809.000 — просмотров у оригинального ролика, который уже перевели на 22 различных языка.
                    Вот русские субтитры к этому ролику:


                    Почему этот ролик на хабре? Это первое, что пришло к вам в голову после просмотра?
                    Upd. Огромное спасибо всем, кто гадит мне в карму и угрожает в личке.
                    Upd2. Это первый случай на хабре, пост не по it? Нет.
                    *пруф1 freetonik Doug 'QualiaSoup' Непредубежденность
                    *пруф2 муравьи зомби
                    Читать дальше →
                  • ownCloud, делаем своё собственное защищённое облако

                    ownCloud представляет собой Open Source решение для организации своего собственного dropbox-подобного хранилища файлов. Кроме, собственно, синхронизации файлов доступны так же дополнительные возможности, как то: синхронизация контактов, календарей (наличествует поддержка CalDAV) и задач, фотогалерея, проигрыватель аудио (с поддержкой протокола Ampache). Сервис работает в многопользовательском режиме, есть функционал общих папок.

                    Клиенты синхронизации доступны для Windows / Mac / Linux / Android, версия для iOS, по заверениям разработчиков, в финальной стадии. Наличествует достаточно интересная, но пока экспериментальная функция External Storage, позволяющая монтировать Dropbox и GDrive в папку с ownCloud.

                    Важной для меня функцией в Android-клиенте является Instant Upload, автоматически загружающий видео и фотографии в облако сразу после съёмки, аналогично клиенту Dropbox.

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

                    В качестве хостинга можно выбрать VDS или домашний сервер на антресоли.

                    Рассмотрим вариант с «домашним сервером».
                    Читать дальше →
                  • Асинхронный многопоточный пул воркеров на Perl

                    image

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

                    Понятное дело, хорошо, когда все задачи выполняются быстро и без проволочек.

                    Для ускорения выполнения задач желательно решить две проблемы:

                    • Научить воркер не ждать выполнения каждого отдельного этапа задачи (асинхронность)
                    • Научить воркер выполнять одновременно несколько задач (многопоточность) (disclaimer: на самом деле термин «многопоточность» тут используется в значении «многопроцессность»)

                    В этой статье мы рассмотрим вариант реализации воркера, который будет одновременно асинхронным и многопоточным.
                    Читать дальше →
                    • +17
                    • 12.2k
                    • 9
                  • Документация Mojolicious: Потерянные Главы

                    • Tutorial
                    Update: статья обновлена для соответствия Mojolicious 6.0.

                    Mojolicious — восхитительный современный веб-фреймворк для Perl. Из недостатков я могу назвать только два: политика в отношении обратной совместимости и документация.

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

                    Содержание


                    1. Недостатки
                    2. Роутинг: внутреннее устройство
                    3. Роутинг: настройка
                    4. Параметры HTTP-запроса
                    5. Парсинг
                    6. Tips & Tricks
                      1. Поддержка неблокирующих приложений в режиме CGI
                      2. Как работает Mojo::UserAgent при тестировании своего приложения
                      3. ojo и Mojolicious::Lite
                      4. Переменные окружения


                    Другие статьи в этой серии



                    Недостатки


                    В официальном FAQ написано: "… we will always deprecate a feature before removing or changing it in incompatible ways between major releases … as long as you are not using anything marked experimental, untested or undocumented, you can always count on backwards compatibility …". Для начала, вторая фраза противоречит первой. Далее, вот цитата из Guides::Contributing «Features may only be changed in a major release or after being deprecated for at least 3 months.». Честно говоря, 3 месяца это и так смешной срок когда речь идёт об обратной совместимости, но похоже что даже этот срок соблюдается не всегда (поддержку «X-Forwarded-HTTPS» сделали deprecated два месяца назад, а удалили месяц назад — да, это был «major release» поэтому формально правила не нарушены, но общее отношение к обратной совместимости вполне показательно). Как много разработчиков обновляет фреймворк чаще чем раз в 3 месяца, да ещё и при этом тщательно вычитывает Changes или логи своего приложения на предмет deprecated-предупреждений? При этом, в течении последнего года было deprecated примерно 20 функций/фич. На практике, конечно, всё не так плохо, как это звучит — что-то ломается не так уж часто (лично меня за последний год коснулась только замена $app->secret() на $app->secrets()). Но факт остаётся фактом — обратную совместимость ломают, ломают часто, причём без по-настоящему веских причин: например, в случае с secret() абсолютно ничего не мешало добавить в код
                    sub secret { shift->secrets([shift]) }
                    
                    либо просто добавить поддержку дополнительных параметров в secret() вместо добавления новой функции secrets() реализовав нужную фичу вообще не ломая совместимость.

                    Что касается документации, то многие считают её отличной, даже одним из серьёзных достоинств Mojolicious, но никак не недостатком. Проблема с документацией в том, что она вся сосредоточена на примерах. Это реально круто, когда ты начинаешь изучать фреймворк. Это экономит кучу времени, когда тебе нужно сделать фичу и ты быстро гуглишь пример аналогичной фичи в официальных guides. Но как только ты выходишь за рамки стандартных задач и возникает необходимость понять, как что-то устроено идеологически или архитектурно, какие конкретно параметры может принимать эта функция и что конкретно она может возвращать в разных ситуациях — выясняется, что для многих модулей Mojolicious такая документация отсутствует в принципе. И не потому, что эта информация относится к «недокументированным возможностям» — почти всё это мельком упоминается здесь и там в разных примерах, а значит считается «документированным». Нередко есть несколько способов получить доступ к определённым данным (параметры запроса, тело ответа, etc.) но не описано чем они друг от друга отличаются и в каких ситуациях правильнее пользоваться какими способами. И последнее — алфавитный порядок функций в доке, серьёзно?! Нет, я понимаю, все люди разные и кому-то наверняка это удобно, но многим всё-таки на порядок проще воспринимать документацию в которой функции сгруппированы по задачам. (Хотя в коде, особенно при чтении его через браузер, где не так удобно пользоваться поиском как в Vim, алфавитный порядок функций неожиданно оказался довольно удобным — кроме new/DESTROY/AUTOLOAD — их всё-таки лучше размещать в начале.) В результате, чтобы разобраться приходится вычитывать код (некоторые предпочитают вместо этого смотреть тесты!), что не так просто — во-первых он не является эталоном читабельности: автор любит использовать фишки перла, которые позволяют писать код компактно (и нередко такой код быстрее работает), но читабельность это ухудшает; во-вторых активное использование и наследования и обмена событиями между объектами усложняет понимание того, что и как происходит внутри 104 классов, из которых состоит Mojolicious-5.

                    С проблемой обратной совместимости мы мало что можем сделать (хотя, наверное, можно сделать плагин к Mojolicious, который будет её эмулировать по мере возможности). Зато вторую проблему решить не сложно — недостающую документацию можно написать самостоятельно. По мере изучения Mojolicious я планирую описывать некоторые вещи, которые, по-хорошему, должны быть в официальной документации, отсюда и название этой статьи.
                    Читать дальше →
                  • BitTorrent Sync: скорость до 90 мегабайт/с и открытые API

                      Вчера состоялся выпуск новой версии программы для синхронизации файлов через торренты BitTorrent Sync 1.2. Разработчики сообщили несколько приятных новостей. Во-первых, популярность BitTorrent Sync растёт высокими темпами, что гарантирует успешное развитие проекта в будущем. Количество пользователей превысило 1 млн человек (месячная активная аудитория), а объём синхронизированных файлов — 30 петабайт.

                      Во-вторых, в новой версии произведена оптимизация протокола синхронизации, так что максимальная скорость в локальной сети увеличена до 90 МБ/c. Это значит, что 10-гигабайтный файл автоматически синхронизируется между компьютерами в локалке быстрее, чем за две минуты.

                      И самое главное — наконец-то выпущены открытые API для добавления синхронизации через торренты в любой сторонний софт.
                      Читать дальше →
                    • Petrovich просклоняет русские имена

                        Вам часто приходится иметь дело со склонением имён пользователей на русском языке? При рассылке писем, при отображении страниц и упоминаний, при генерации рекламных объявлений? Скорее всего, приходится изворачиваться и писать все сообщения в именительном падеже — Иванов Пётр Сергеевич.

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

                        Для решения этой проблемы при использовании Ruby существует Petrovich — удобная легковесная библиотека для автомагического склонения русскоязычных имён, фамилий и отчеств.


                        Склоняй меня полностью!
                      • Ускоряем сервис с клиентской стороны в несколько раз. Ajax + предзагрузка в фоне + при наведении курсора

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


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