• Асинхронность в программировании

      В области разработки высоконагруженных многопоточных или распределенных приложений часто возникают дискуссии об асинхронном программировании. Сегодня мы подробно погрузимся в асинхронность и изучим, что это такое, когда она возникает, как влияет на код и язык программирования, которым мы пользуемся. Разберемся, зачем нужны Futures и Promises и затронем корутины и операционные системы. Это сделает компромиссы, возникающие во время разработки ПО, более явными.


      В основе материала — расшифровка доклада Ивана Пузыревского, преподавателя школы анализа данных Яндекса.


      Читать дальше →
    • Асинхронность 3: Субъекторная модель

        Двое из ларца

        Предисловие


        Эта статья является продолжением цикла статей про асинхронность:

        1. Асинхронность: назад в будущее.
        2. Асинхронность 2: телепортация сквозь порталы.

        Спустя 3 года я решил расширить и обобщить имеющийся спектр асинхронного взаимодействия с использованием сопрограмм. Помимо этих статей также рекомендуется ознакомиться с универсальным адаптером:

        1. Универсальный адаптер

        Введение


        Рассмотрим электрон. Что он из себя представляет? Отрицательно заряженная элементарная частица, лептон, обладающий некоторой массой. Это означает, что он может участвовать по меньшей мере в электромагнитных и гравитационных взаимодействиях.
        Читать дальше →
      • Современный CMake: 10 советов по улучшению скриптов сборки

        CMake — это система сборки для C/C++, которая с каждым годом становится всё популярнее. Он практически стал решением по умолчанию для новых проектов. Однако, множество примеров выполнения какой-либо задачи на CMake содержат архаичные, ненадёжные, раздутые действия. Мы выясним, как писать скрипты сборки на CMake лаконичнее.

        Читать дальше →
      • Расширение Visual C++ for Linux Development

        • Translation
        Расширение Visual C++ for Linux Development позволяет создавать решения на C++ для серверов, настольных ПК и устройств под управлением Linux. Управлять подключениями к ним можно непосредственно в Visual Studio. VS будет автоматически копировать и удалённо собирать исходный код программ. Также среда позволяет запустить ваше приложение в режиме отладки. Система управления проектами поддерживает создание решений для конкретных архитектур, в том числе APM. Под катом мы расскажем, как начать работу с новыми проектами для Linux.


        Читать дальше →
      • SObjectizer: что это, для чего это и почему это выглядит именно так?

        Разработка многопоточных программ на C++ — это не просто. Разработка больших многопоточных программ на C++ — это очень не просто. Но, как это обычно бывает в C++, жизнь сильно упрощается, если удается подобрать или сделать «заточенный» под конкретную задачу инструмент. Четырнадцать лет назад выбирать было особенно не из чего, поэтому мы сами для себя сделали такой «заточенный» инструмент и назвали его SObjectizer. Опыт повседневного использования SObjectizer-а в коммерческом софтостроении пока не позволяет жалеть о содеянном. А раз так, то почему бы не попробовать рассказать о том, что это, для чего это и почему у нас получилось именно так, а не иначе…
        Читать дальше →
      • Анализ потокобезопасности в С++

        • Translation
        Писать многопоточные приложения нелегко. Некоторые средства статического анализа кода позволяют помочь разработчикам, давая возможность чётко определить политики поведения потоков и обеспечить автоматическую проверку выполнения этих политик. Благодаря этому появляется возможность отлавливать состояния гонки потоков или их взаимной блокировки. Эта статья описывает инструмент анализа потокобезопасности С++ кода, встроенный в компилятор Clang. Его можно включить с помощью опции командной строки −Wthread−safety. Данный подход широко распространён в компании Google — полученные от его применения преимущества привели к повсеместному добровольному использованию данной технологии различными командами. Вопреки популярному мнению, необходимость в дополнительных аннотациях кода не стала бременем, а наоборот, дала свои плоды выражающиеся в упрощении поддержки и развития кода.

        Предисловие

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

        Средства статического анализа кода помогают разработчикам определить политики потокобезопасности и проверять их при сборке проекта. Примером таких политик могут быть утверждения «мьютекс mu всегда должен использоваться при доступе к переменной accountBalance» или «метод draw() должен вызываться только из GUI-потока». Формальное определение политик даёт два основных преимущества:

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


        Данная статья рассказывает о применении данного подхода в Clang, хотя изначально он был разработан для GCC, однако версия для GCC более не поддерживается. В Clang данная возможность реализована как предупреждение компилятора. В Google на данный момент вся кодовая база C++ компилируется с включенным по умолчанию анализом потокобезопасности.
        Читать дальше →
        • +21
        • 12.1k
        • 2
      • Асинхронность 2: телепортация сквозь порталы



          Не прошло и года, как я добрался до продолжения статьи про асинхронность. Эта статья развивает идеи той, самой первой статьи про асинхронность [1]. В ней обсуждается достаточно сложная задача, на примере которой будет раскрыта мощь и гибкость использования сопрограмм в различных нетривиальных сценариях. В заключение будут рассмотрены две задачи на состояние гонки (race-condition), а также небольшой, но очень приятный бонус.
          Читать дальше →
        • Отладка C++ программ в ОС GNU/Linux

          Так уж случилось, что по долгу работы очень много времени провожу с операционными системами семейства GNU/Linux. Основным видом моей деятельности является разработка программного обеспечения на С++.

          Так вот, основной проблемой при использовании отладчика – это отображение сложных контейнеров, например, stl-контейнеров.

          Решение, которое я предлагаю, актуально для gdb. Этот отладчик поддерживает скрипты, написанные на языке python, а механизмы отображения сложных объектов, называются pretty printers. Т.е. чтобы отладчик отображал нам все правильно, необходимо указать ему где находятся скрипты с этими самыми pretty printers. Для указания отладчику дополнительных команд необходим файл .gdbinit.

          Итак, попробую оформить все, как инструкцию, так и читать удобней, и сам не забуду.
          Читать дальше →
        • Всё, что вы хотели знать о Ethernet фреймах, но боялись спросить, и не зря

            Статья получилась довольно объёмная, рассмотренные темы — форматы Ethenet фреймов, границы размеров L3 Payload, эволюция размеров Ethernet заголовков, Jumbo Frame, Baby-Giant, и много чего задето вскользь. Что-то вы уже встречали в обзорной литературе по сетям передачи данных, но со многим, однозначно, не сталкивались, если глубоко не занимались изысканиями.

            Начнём с рассмотрения форматов заголовков Ethernet фреймов в очереди их появления на свет.

            Форматы Ehternet фреймов.


            1) Ethernet II



            Рис. 1
            Читать дальше →
          • Wi-Fi сети: проникновение и защита. 3) WPA. OpenCL/CUDA. Статистика подбора



              Баста карапузики, кончилися танцы.

              В предыдущей части мы детально рассмотрели «читерские» приёмы обхода «защит» (скрытие SSID, MAC-фильтрация) и защит (WPS) беспроводных сетей. И хотя работает это в половине случаев, а иногда и чаще — когда-то игры заканчиваются и приходится браться за тяжёлую артиллерию. Вот тут-то между вашей личной жизнью и взломщиком и оказывается самое слабое звено: пароль от WPA-сети.

              В статье будет показан перехват рукопожатия клиент-точка доступа, перебор паролей как с помощью ЦП, так и ГП, а кроме этого — сводная статистика по скоростям на обычных одиночных системах, кластерах EC2 и данные по разным типам современных GPU. Почти все они подкреплены моими собственным опытом.

              К концу статьи вы поймёте, почему ленивый 20-значный пароль из букв a-z на пару солнц более стоек, чем зубодробительный 8-значный, даже использующий все 256 значений диапазона.

              Оглавление:
              1) Матчасть
              2) Kali. Скрытие SSID. MAC-фильтрация. WPS
              3) WPA. OpenCL/CUDA. Статистика подбора
              По традиции, под катом ещё 15 страниц
            • 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. Статистика подбора
                Много текста. Очень.
              • Кросскомпиляция библиотек под iOS, делаем это правильно

                  Во время разработки большого проекта наступает такой момент, когда надо встроить в приложение библиотеку из мира open source с подходящей лицензией. Например, вам захотелось ускорить декодирование картинок, или понадобился sqlite3 с fts4, или нужны какие-то плюшки из libicu, которых нету в системной libicucore.

                  Для этого библиотеку, которая понадобилась, нужно будет собрать для 5 архитектур: armv7, armv7s, arm64, i386, x86_64. С кросскомпиляцией есть много подводных камней, на которые не хотелось бы наткнуться, когда есть уже проверенные решения. В этом коротком посте я расскажу об автоматизации сборки библиотек на примере protobuf и sqlite3.
                  Читать дальше →
                  • +32
                  • 9.9k
                  • 4
                • Пишем файловую систему в ядре Linux

                  • Tutorial

                  Для кого эта статья


                  image

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

                  Весь материал разбит на несколько частей, в данной статье будет описана вводная часть. Я коротко расскажу о том, что понадобится для разработки в ядре Linux, затем мы напишем простейший загружаемый модуль ядра, и наконец напишем каркас будущей файловой системы — модуль, который зарегистрирует довольно бесполезную (пока) файловую систему в ядре. Люди уже знакомые (пусть и поверхностно) с разработкой в ядре Linux не найдут здесь ничего интересного.
                  Читать дальше →
                  • +107
                  • 53.2k
                  • 9
                • Сети для самых маленьких. Часть девятая. Мультикаст

                  • Tutorial

                  Наш умозрительный провайдер linkmeup взрослеет и обрастает по-тихоньку всеми услугами обычных операторов связи. Теперь мы доросли до IPTV.
                  Отсюда вытекает необходимость настройки мультикастовой маршрутизации и в первую очередь понимание того, что вообще такое мультикаст.
                  Это первое отклонение от привычных нам принципов работы IP-сетей. Всё-таки парадигма многоадресной рассылки в корне отличается от тёплого лампового юникаста.
                  Можно даже сказать, это в некоторой степени бросает вызов гибкости вашего разума в понимании новых подходов.

                  В этой статье сосредоточимся на следующем:




                  Читать дальше →
                • Использование Audio API для создания вокодера

                  • Tutorial
                  В прошлой статье мы немного познакомились с возможностями Audio API и написали простенький визуализатор сигнала. Теперь настало время копнуть поглубже и распробовать новые фишки API. Но нам нужна цель, к которой мы будем стремиться, и в данном случае нашей целью будет как следует поиздеваться над входящим сигналом и его характеристиками. Другими словами, мы напишем маленький вокодер.

                  Так как итоговый код получился довольно-таки большим, то в статье будет рассмотрены наиболее важные и интересные с точки зрения Audio API фрагменты. Итоговый результат вы конечно же сможете посмотреть на демке.

                  Читать дальше →
                  • +34
                  • 16k
                  • 3
                • Вышел непривязанный jailbreak для iOS 7.x

                  image

                  Сегодня, в качестве подарка к рождеству, команда хакеров evasi0n выпустила непривязанный jailbreak для устройств на iOS 7.x, включая iPad Air, iPhone 5s и iPad Mini with Retina Display.

                  Работоспособность подтверждена автором. Ждем твика Back to Skeumorphism или что-то в этом духе.

                  Скачать можно с официального сайта.

                  Перед джейлбриком хакеры рекомендуют:

                  * Сделать бэкап устройства.
                  * Отключить пароль на разблокировку устройства.
                  * Не делать никаких операций на компьютере во время джейлбрика, которые так или иначе связанны с iTunes и iOS.

                  Если во время установки программа зависла, ребут устройства и самого приложения безопасен.
                  Если Вы не можете открыть приложение на OS X 10.8, щелкните правой кнопкой мыши на файле и выберете «Открыть».
                  Читать дальше →
                • Отладка native-кода под Android: ручное и автоматизированное тестирование

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

                  image


                  Читать дальше →
                  • +31
                  • 15k
                  • 3
                • iOS Console App — пишем программу для iOS без GUI

                  • Tutorial
                  Доброго дня всем хабравчанам!

                  Сегодня я расскажу вам о том, как можно легко, быстро и просто написать консольную программку для запуска на iOS-девайсе. Разумеется, нам потребуется для этого jailbreak-нутый девайс, без него, увы, никак: iOS AppStore (он же iTunesStore) не позволяет распространять консольные утилиты.



                  Писать HelloWorld — дело не особо интересное. Поэтому, мы будем писать полезную утилиту, позволяющую просмотреть некоторую информацию о системе, полученную через приватные API.

                  К примеру, информацию об установленных программах и их версиях.

                  В принципе, можно ещё поворовать пароли и прочие персональные данные, но это оставлю как факультативное задание.

                  Итак, под катом — описание процесса создания консольной программки прямо в Xcode.
                  Поехали
                  • +25
                  • 16.4k
                  • 7