• Linux Kernel EFI Boot Stub или «Сам себе загрузчик»

    UEFI Tux Logo

    Введение


    Прочитав недавнюю статью Загрузка ОС Linux без загрузчика, понял две вещи: многим интересна «новинка», датируемая аж 2011 годом; автор не описал самого основного, без чего, собственно, и работать ничего не будет в некоторых случаях. Также была ещё одна статья, но либо она уже устарела, либо там опять таки много лишнего и недосказанного одновременно.

    А конкретно, был упущен основной момент — сборочная опция ядра CONFIG_EFI_STUB. Так как в последних версиях U(lu/ku/edu/*etc*)buntu эта опция по умолчанию уже включена, никаких подозрений у автора не появилось.
    Насколько мне известно, на текущий момент она включена в дистрибутивах указанных версий и выше: Arch Linux, Fedora 17, OpenSUSE 12.2 и Ubuntu 12.10. В комментах ещё упомянули, что Debian с ядром 2.6 умеет, но это не более, чем бэкпорт с последних версий. На этих дистрибутивах пересобирать вообще ничего не нужно! А ведь на других CONFIG_EFI_STUB, скорее всего, либо вообще отсутствует, т. к. опция доступна только с ядра версии 3.3.0 и выше, либо выключена по умолчанию. Соответственно, всё, описанное ниже, справедливо для ядра, собранного с опцией CONFIG_EFI_STUB.

    Итак, что же такое Linux Kernel EFI Boot Stub?


    Общая информация

    А ни что иное, как… «exe-файл»!
    Читать дальше →
  • Эффективное кеширование. От теории к практике

      image

      Как правило, статьи о кешировании начинаются за здравие, а заканчиваются LRU кешем. Попробуем переломить эту тенденцию? Начнем с того, чем LRU плох, а закончим за здравие. Я надеюсь.

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

      • Перевод

      Рад представить дополнение оригинального списка из 300 потрясающих бесплатных сервисов. Автор оригинальной статьи Ali Mese добавил ещё +100 новых сервисов, которые помогут найти все — от источников вдохновения и редакторов фотографий до создания опросов и бесплатных иконок.

      И еще подборку +500 инструментов от 10 марта 2017 г. смотрите здесь.



      A. Бесплатные веб-сайты

      • HTML5 UP: Адаптивные шаблоны HTML5 и CSS3.
      • Bootswatch: Бесплатные темы для Bootstrap.
      • Templated: Коллекция 845 бесплатных шаблонов CSS и HTML5.
      • Wordpress.org | Wordpress.com: Бесплатное создание веб-сайта.
      • Strikingly: Конструктор веб-сайтов.
      • Layers: Создание сайтов на WordPress (new).
      • Bootstrap Zero: Самая большая коллекция бесплатных шаблонов Bootstrap (new).
      • Landing Harbor:  Продвижение мобильного приложения c помощью бесплатного лендинга (new).
      Читать дальше →
    • Еще один способ отключения сбора телеметрии в OC Windows 10

        Микрософт с помощью пасьянса и косынки учила пользователей пользоваться мышью,
        теперь с помощью windows 10 учит читать лицензионное соглашение.

        После выхода windows 10 сразу появились сообщения о сборе информации о действиях пользователей и много обсуждений, что делать. Достаточно быстро пользователи составили список основных серверов, собирающих информацию и попытались их заблокировать через файл hosts. Но скептики сразу выдвинули здравое предположение, что MS мог предусмотреть этот метод и некоторые адреса прописать в коде. Тем более, что MS всегда может актуализировать адреса серверов через windows update.

        В нашей компании начали появляться первые пользователи windows 10, и мы решили опробовать блокировку передачи телеметрии через встроенный windows firewall.
        Читать дальше →
      • Как написать пост с формулами: markdown + LaTeX

        • Tutorial
        Привет! На Хабре периодически появляются статьи, где авторы хотят вставить математические формулы: inline_formula, inline_formula или даже


        У некоторых это получается, у некоторых — с трудом. parpalak сделал web-сервис для вставки svg формул, и это очень круто. Я хочу дополнить его небольшим скриптом, с которым вставка многих формул сведется к одной команде.

        Читать дальше →
      • Механизмы профилирования Linux



          Последние пару лет я пишу под ядро Linux и часто вижу, как люди страдают от незнания давнишних, общепринятых и (почти) удобных инструментов. Например, как-то раз мы отлаживали сеть на очередной реинкарнации нашего прибора и пытались понять, что за чудеса происходят с обработкой пакетов. Первым нашим позывом было открыть исходники ядра и вставить в нужные места printk, собрать логи, обработать их каким-нибудь питоном и потом долго думать. Но не зря я читал lwn.net. Я вспомнил, что в ядре есть готовые и прекрасно работающие механизмы трассировки и профилирования ядра: те базовые механизмы, с помощью которых вы сможете собирать какие-то показания из ядра, а затем анализировать их.
          Читать дальше →
        • Простое суффиксное дерево

          • Tutorial
          ДеревоСуффиксное дерево – мощная структура, позволяющая неожиданно эффективно решать мириады сложных поисковых задач на неструктурированных массивах данных. К сожалению, известные алгоритмы построения суффиксного дерева (главным образом алгоритм, предложенный Эско Укконеном (Esko Ukkonen)) достаточно сложны для понимания и трудоёмки в реализации. Лишь относительно недавно, в 2011 году, стараниями Дэни Бреслауэра (Dany Breslauer) и Джузеппе Италиано (Giuseppe Italiano) был придуман сравнительно несложный метод построения, который фактически является упрощённым вариантом алгоритма Питера Вейнера (Peter Weiner) – человека, придумавшего суффиксные деревья в 1973 году. Если вы не знаете, что такое суффиксное дерево или всегда его боялись, то это ваш шанс изучить его и заодно овладеть относительно простым способом построения.
          Читать дальше →
        • Использование технологии Microsoft Active Accessibility для доступа к содержимому браузера

          • Tutorial
          Давайте придумаем решение вот такой-вот простенькой задачи.
          Имеется: браузер (IE, Chrome или Firefox), уже запущенный пользователем.
          Требуется: написать программу, которая получит URL, который в данный момент введён в адресной строке.

          Давайте подумаем, каким образом эту простенькую задачу решить НЕ получится:

          1. FindWindow + GetWindowText
          Почему не получится
          Первая идея — найти окно браузера, в нём дочернее окно адресной строки и взять URL оттуда. Практика показывает, что отдельное дочернее окно для адресной строки имеет только IE. FF и Chrome кросплатформенны, поэтому предпочитают весь свой контент отрисовывать самостоятельно.

          2. Браузерное расширение, которое отдаст URL нашей программе (например, через запрос к localhost)
          Почему не получится
          Можно. Но во-первых, для трёх браузеров нужно будет написать 3 разных расширения, а во-вторых, для FF и Chrome мы будем вынуждены распространять его только через их магазины расширений. Писать программу, работоспособность которой зависит от того, зачешется ли сегодня левая пятка модератора — нет уж, увольте.

          3. Давайте напишем сниффер и посмотрим что там пользователь открывал
          Почему не получится
          А давайте! Но что дальше? Даже если из потока трафика мы выделим данные, полученные именно браузером и расшифруем HTTP-протокол, мы всё-равно не узнаем именно текущий URL (ссылок в потоке будет много). Кроме того, сразу идут в сад HTTPS-соединения, HTTP/2, ссылки на локально открытые файлы, ссылки на внутренние страницы (типа chrome://settings) и т.д.

          4. Давайте воспользуемся Remote Debugging Protocol ну или каким-нибудь Selenium-ом
          Почему не получится
          Не подходит из-за ограничения условий исходной задачи: браузер уже запущен, мы не можем запустить новый подконтрольный экземпляр, нам нужно взаимодействовать с уже имеющимся.

          5. Может быть, хуки?
          Почему не получится
          Ну, внедриться-то мы в браузер сможем. А на что вешать хуки? Для IE всё ясно — SetWindowText для окна адресной строки (но с ним и более простой способ №1 проходил). А в FF и Chrome у нас нет каких-то чётко определённых объектов и интерфейсов, на которые мы можем завязаться. Можно что-то сделать с конкретной версией браузера, но универсального решения не получится.

          6. Скриншот окна браузера, определение положения адресной строки, распознавание текста с картинки!
          Почему не получится
          Уже как-то начинает смахивать на отчаяние, правда? Прикинем все варианты цветовых схем ОС, разрешений, масштабов, учтём наличие в браузере плагинов, цветовых схем, нестандартного расположения элементов, right-to-left языковых локалей ну и закончим случаем, когда окно адресной строки слишком узкое, чтобы вместить URL полностью.

          7. Ваш вариант
          А напишите в комментариях, какие ещё решения вам приходят в голову и мы подумаем, получится или нет.

          А теперь один из правильных ответов: мы воспользуемся уже старенькой, но весьма стабильной и поддерживаемой всеми браузерами во всех ОС с Win95 до Win10 технологией Microsoft Active Accessibility, которая даст нам возможность не только получить текущий URL (при чём одинаковым образом для всех браузеров), но и вообще дать доступ ко всему контенту браузера — от самого родительского окна с его заголовком, меню, тулбаром, вкладками и до содержимого открытой веб-страницы вплоть до самого последнего её элемента.
          Читать дальше →
        • Загрузочный сервер — как загрузочная флешка, только сервер и по сети

            Загрузочная флешка с набором нужного софта — замечательный инструмент системного администратора. Казалось бы, что может быть лучше? А лучше может быть загрузочный сервер!

            Представьте, вы выбрали в BIOS загрузку по сети и можете установить ОС/вылечить компьютер от вирусов/реанимировать диски/протестировать ОЗУ/etc с PXE Boot сервера, ведь это куда удобнее, нежели бегать с флешкой от машины к машине.
            А в случае большого компьютерного парка, такой инструмент и вовсе незаменим.

            Вот такое меню встречает нашу команду инженеров при загрузке с PXE



            Под катом вас ждет описание всех настроек, а так же небольшой сюрприз.
            Поехали!
          • Восстанавливаем локальные и доменные пароли из hiberfil.sys

            Утилита mimikatz, позволяющая извлекать учётные данные Windows из LSA в открытом виде, существует с 2012 года, однако помимо хорошо освещённого функционала восстановления паролей из памяти работающей ОС у неё есть ещё одна довольно интересная возможность. Далее я приведу пошаговую инструкцию, как при помощи нехитрых действий извлечь учётные данные из файла hiberfil.sys.

            Подготовка


            Для осуществления задуманного нам понадобятся следующие утилиты:
            Читать дальше →
          • Построение графиков в LaTeX/PGFPlots

            image

            Данная статья посвящена описанию работы с пакетом PGFPlots, разработанного для популярной настольной издательской системы LaTeX. Однако, если вы даже не знакомы с последней, это не повод расстраиваться и бросать чтение этой статьи, ведь, возможно, те замечательные примеры, которые будут далее приведены, и необычайная мощность и удобство PGFPlots вдохновят вас на изучение LaTeX.
            Читать дальше →
          • Особенности работы с виртуальными дискaми VirtualBox

            image Статья рассматривает особенности использования виртуальных дисков в VirtualBox, применение разных режимов чтения-записи, принцип и организацию работы snapshot-ов, кэширование ввода/вывода данных, а также некоторые аспекты использования виртуальных дисков с точки зрения информационной безопасности. Для тех, кому интересен пример с безопасностью, можете сразу переходить по якорю к разделу об особых режимах записи.
            Читать дальше →
          • Использование WPP Software Tracing в системном программировании

            Уважаемый читатель,
            в своем проекте ты наверняка написал инструмент логирования и с успехом применяешь его для анализа трудно-диагностируемых багов. Но ты всегда сталкивался с ситуацией:
            • когда запись в файл — консоль драматически сказывалось на воспроизодимости бага;
            • когда мульти(процессорное/поточное) приложение часто обращается к драйверу и ты не можешь сопоставить временные метки и потоки;
            • когда баг воспроизводится на стороне кастомера, сеанс teamviewer бесполезен, да к тому же версия с отладочными символами private;
            • когда системное приложение падает до того, как система успеет скинуть логирование на диск;
            • или когда макрос для логирования выглядит в лучшем случае как
              #define TraceDbg(format, ...) \
                  printf( "(p %d, t %d) - (%s,%d) %s(): " format, GetCurrentProcessId(), GetCurrentThreadId(), __FILE__, __LINE__,__FUNCTION__, __VA_ARGS__ );
              
            • когда придумываешь очередной способ вывести на экран ipaddr или UUID

            В статье я представлю быстрый, надежный и универсальный для отладки с минимальным оверхедом инструмент диагностики, предлагаемой MS для системных приложений — WPP, рассмотренный частично в публикации «EventTrace for Windows. Высокоскоростная передача отладочных сообщений драйвера по сети».
            Читать дальше →
          • Here be dragons: Управление памятью в Windows как оно есть [1/3]


              Каталог:
              Один
              Два
              Три

              Менеджер памяти (и связанные с ним вопросы контроллера кеша, менеджера ввода/вывода и пр) — одна из вещей, в которой (наряду с медициной и политикой) «разбираются все». Но даже люди «изучившие винду досконально» нет-нет, да и начинают писать чепуху вроде (не говоря уже о другой чепухе, написанной там же):
              Грамотная работа с памятью!!! За все время использования у меня своп файл не увеличился ни на Килобайт. По этому Фаерфокс с 10-20 окнами сворачивается / разворачивается в/из трея как пуля. Такого эффекта я на винде добивался с отключенным свопом и с переносом tmp файлов на RAM диск.

              Или к примеру μTorrent — у меня нет никаких оснований сомневаться в компетентности его авторов, но вот про работу памяти в Windows они со всей очевидностью знают мало. Не забываем и товарищей, производящих софт для слежения за производительностью и не имеющих ни малейшего понятия об управлении памятью в Windows (и поднявших по этому поводу истерику на пол интернета, на Ars-е даже был разбор полетов). Но самое потрясающее, что я видел всвязи с управлением памятью — это совет переместить pagefile на RAM-диск:
              Из моих трех гигабайт под RAM disk был выделен один (на тот момент, когда на лаптопе еще была установлена XP), на котором я создал своп на 768МБ ...

              Цель данной статьи — не полное описание работы менеджера памяти (не хватит ни места ни опыта), а попытка пролить хоть немного света на темное царство мифов и суеверий, окружающих вопросы управления памятью в Windows.
              Читать дальше →
            • Ускорение загрузки Windows for fun and profit

                image Пожалуй, начну с того, что если перегружаться 15 раз в год, то любой «тюнинг» процесса загрузки отнимает больше времени, чем будет выиграно на перезагрузках за все время жизни системы. Однако, спортивный интерес берет свое, тем более, что люди интересуется процессом оптимизации быстродействия. А загрузка оказалась самым очевидным кандидатом в примеры того, как на мой взгляд должен выглядеть этот самый процесс. Сразу скажу, что грузиться будем с 5400 rpm винта, грузиться будем в «рабочую» систему: помимо недобитой вендорской крапвари там стоит еще куча всякого типа вижуал студии, антивируса, скайпа, стима, гуглапдейтера и пр…

                Про то, почему отключение pagefile-а скорее вредно, чем полезно — как нибудь в другой раз, а пока…
                Под катом много однообразных картинок и немножко унылого текста
              • Байки о несовместимых приложениях

                • Перевод
                Это отрывки из бесплатной главы из бумажной книги «The Old New Thing». Они ничему не пытаются научить; это просто короткие забавные эпизоды из будней борцов за совместимость новых версий Windows со старыми приложениями.

                Изменяем номер версии Windows


                Изменить номер версии, который Windows сообщает программам, не просто, как кажется. Например, некоторые программы проверяют номер версии так:
                UINT Ver = GetVersion();
                UINT MajorVersion = LOBYTE(uVer);
                UINT MinorVersion = HIBYTE(uVer);
                if (MajorVersion < 3 || MinorVersion < 10) {
                    Error("This program requires Windows 3.1");
                }
                

                Представьте себе, как этот код отработает на Windows 95, у которой номер версии 4.0. Вторая проверка срабатывает из-за того, что 0 меньше 10.
                И ладно бы программа просто выводила сообщение об ошибке и завершалась. Многие рушились: очевидно было, что их поведение на «неподдерживаемых» версиях Windows никогда не тестировалось.

                Таких программ оказалось настолько много, что мы перестали исправлять их по одной, и просто изменили возвращаемый номер версии с 4.0 на 3.95.

                Программы для MS-DOS тоже не все гладко реагировали на изменение версии ОС. Это удивительно потому, что к тому времени у MS-DOS уже были десятки выпущенных версий и под-версий, и разработчикам пора было бы уже научиться проверять номер версии. Но например, один пакет программ использовал номер версии DOS как индекс в таблице функций: по собственной функции для каждой вышедшей версии. В таблице было пять функций: от MS-DOS 1.x до 5.x. Когда программа запускалась под MS-DOS 6.0, она вызывала адрес за пределами таблицы, и рушилась.

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

                Читать дальше →
              • Автоматическая оптимизация алгоритмов с помощью быстрого возведения матриц в степень

                  Пусть мы хотим вычислить десятимиллионное число Фибоначчи программой на Python. Функция, использующая тривиальный алгоритм, на моём компьютере будет производить вычисления более 25 минут. Но если применить к функции специальный оптимизирующий декоратор, функция вычислит ответ всего за 18 секунд (в 85 раз быстрее):


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

                  Эта статья расскажет о том, в каких случаях и каким образом декоратору удаётся делать подобные оптимизации. Также вы сможете сами скачать и протестировать библиотеку cpmoptimize, содержащую данный декоратор.
                  Читать дальше →
                • Wi-Fi сети: проникновение и защита. 2) Kali. Скрытие SSID. MAC-фильтрация. WPS



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

                    В этой статье мы поговорим о том, как можно обнаружить «скрытые» сети, обойти MAC-фильтрацию на точке доступа и почему же WPS (QSS в терминологии TP-LINK) — это «бэкдор в каждом доме». А перед этим разберёмся, как работает беспроводной адаптер и антенна и как Kali Linux (ex. Backtrack) поможет нам в тестах на проникновение в беспроводные сети.

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

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

                    Оглавление:
                    1) Матчасть
                    2) Kali. Скрытие SSID. MAC-фильтрация. WPS
                    3) WPA. OpenCL/CUDA. Статистика подбора
                    Много текста. Очень.
                  • Потрясающая, но невидимая глубина

                    • Перевод


                    Вы только что зашли на страницу Google.

                    Просто, не так ли?

                    Что же на самом деле произошло?

                    Ну, если вы немного понимаете, как работают браузеры, то все не так просто. Вы только что задействовали HTTP, HTML, CSS, ECMAscript и прочее. В действительности, это такие невероятно сложные технологии, что от них у любого инженера голова пойдет кругом, стоит лишь попробовать поглубже вникнуть в них. И нет ни одной компании, которая могла бы справиться с ними в одиночку.

                    Давайте упростим.

                    Вы только что установили соединение с www.google.com.

                    Просто, не так ли?

                    Что же на самом деле произошло?
                    Читать дальше →
                  • Несколько бесплатных книг по программированию на русском языке

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


                      Александр Круглов — Ruby — Эту книгу можно использовать как справочник и как отдельный учебник по Ruby. Для изучающих Rails считаю исчерпывающим руководством по языку. Версия языка изучаемая в этой книге — 2.0.0p247.

                      Слова автора: Не думайте, что прочитав эту книгу вы сразу станете писать высоконагруженные приложения. Максимум чему вы научились — это программирование небольших скриптов, способных немного облегчить вашу повседневную работу. Еще множество необходимых знаний о стиле кода, тестировании и отладке, архитектуре и оптимизации (и т.д.) отделяет вас от гордого звания программиста. Могу лишь надеяться, что удовольствия от работы с Ruby поможет преодолеть все эти препятствия и сообщество получит еще одного единомышленника. Github репозиторий

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