• Линус Торвальдс, Бьёрн Страуструп и Брендан Грегг контрибьютят в мой хобби-проект. Зачем?

      Смотрите сами: вот проект, вот история коммитов.



      Список контрибьюторов с главной страницы репозитория:



      Ссылки на аватарках ведут на странички профилей реальных людей.


      Всё на месте. Кроме плашечки "Verified" как здесь:





      Знатоки Git и GPG, не торопитесь проматывать ленту: эта статья не про необходимость подписывать свои коммиты. Она про неявные допущения, которые мы делаем, пользуясь "интуитивно-понятными" монстрами GitHub и GitLab и доверяя им контроль доступа к нашим репозиториям.

      Читать дальше →
    • Внутренняя кухня промышленного дизайна: от эскиза до продукта в коробке



        Бывает, на первой встрече клиенты говорят «нам нужна только картинка», «сэкономим на дизайне», «нам просто накинуть идею», «ой, да что там делать». Мало кто представляет себе полную картину того, что происходит на внутренней кухне дизайнера, тем более промышленного. В этой статье мы раскроем весь процесс — от первых эскизов (а даже раньше) до запуска серийного производства — и объясним, почему промдизайн — это не просто картинка.
        Читать дальше →
      • CreateRemoteThread для Linux

        • Tutorial

        Мицуха несёт новые потокиВ WinAPI есть функция CreateRemoteThread, позволяющая запустить новый поток в адресном пространстве другого процесса. Её можно использовать для разнообразных DLL-инъекций как с нехорошими целями (читы в играх, кража паролей, и т. д.), так и для того, чтобы на лету исправить баг в работающей программе, или добавить плагины туда, где они не были предусмотрены.


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


        Я подробно расскажу о том, как с помощью спецификации ELF, некоторого знания архитектуры x86_64 и системных вызовов Linux написать свой маленький кусочек отладчика, способный загрузить и исполнить произвольный код в уже запущенном и работающем процессе.


        Для понимания текста потребуются базовые знания о системном программировании под Linux: язык Си, написание и отладка программ на нём, осознание роли машинного кода и памяти в работе компьютера, понятие системных вызовов, знакомство с основными библиотеками, навык чтения документации.

        Читать дальше →
      • Облысение: Теория и практика лечения, ч.2 «Даже у простаты есть гланды, простагландины»

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


          image

          Использование простагландинов, либо препаратов их блокирующих, является довольно новой (и экспериментальной) формой лечения в борьбе с облысением, которая может стать как альтернативой для миноксидил-финастерид терапии так и дополнении к ней.
          Читать дальше →
        • Оптимизация энергопотребления STM32: практическое руководство

            Привет, Хабр!

            В сети довольно много статей про работу микроконтроллеров STM32 в энергоэффективных устройствах — как правило, это устройства на батарейном питании — однако среди них прискорбно мало разбирающих эту тему за пределами перечисления энергосберегающих режимов и команд SPL/HAL, их включающих (впрочем, та же претензия относится к подавляющему большинству статей про работу с STM32).

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

            Восполнять данный пробел мы будем на примере STM32L1 — контроллера весьма популярного, достаточно экономичного и при этом имеющего некоторые специфические именно для этой серии проблемы. Практически всё сказанное будет также относиться к STM32L0 и STM32L4, ну и в части общих проблем и подходов — к другим контроллерам на ядрах Cortex-M.



            Практический результат должен выглядеть примерно так, как на фотографии выше (и да, о применимости мультиметров и других средств измерения к подобным задачам тоже поговорим).
            Читать дальше →
          • Антипаттерны тестирования ПО

            • Translation

            Введение


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

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

            Терминология


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


            Если не видели пирамиду тестов, настоятельно рекомендую ознакомиться с ней. Вот некоторые хорошие статьи для начала:

            Читать дальше →
          • Деловая переписка на английском языке: фразы и советы

              Елена Соловьева, менеджер проектов в компании Лаборатория Касперского, специально для блога Нетологии поделилась советами о том, как вести деловую переписку с иностранными коллегами и партнерами на английском языке. Статья участвует в конкурсе.

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

              Задача становится сложнее, если вы общаетесь на неродном английском языке с представителями других культур. В статье я поделюсь, на что в этом случае обратить внимание, как избежать ошибок и достичь взаимопонимания с иностранными коллегами и партнерами.
              Читать дальше →
            • Разработка для Sailfish OS: Тестирование QML-кода, зависящего от C++ в Sailfish OS

              • Tutorial
              Здравствуйте! Данная статья является продолжением цикла статей, посвященных разработке для мобильной платформы Sailfish OS и их тестированию. Одна из предыдущих статей была посвящена тестированию QML-компонентов приложения. Однако, часто разработчики сталкиваются с потребностью написания собственных компонентов на языке C++ для использования функционала, недоступного из QML, или для улучшения производительности. Об этом также уже было написано. Тестирование таких компонентов отличается от тестирования уже существующих. В данной статье мы расскажем, как тестировать собственные QML-компоненты, написанные на языке C++.
              Читать дальше →
            • Анализ трафика GSM сетей в Wireshark

              • Tutorial


              Вторая статья будет посвящена работе с GSM трафиком в Wireshark. Рекомендую ознакомиться с первой, если Вы хотите получить больше возможностей для практики.

              Для работы нам osmocom-bb совместимый телефон, способный принимать сигнал на частотах GSM, для России это 900 МГц и 1800 МГц и компьютер с установленным сниффером Wireshark.
              Читать дальше →
            • Лучшие доклады конференции DotNext 2015 Piter: Часть 2 (Видео внутри)

                Три дня назад я рассказал о тех докладах конференции DotNext 2015 Piter, которые, согласно опросу участников, заняли места с 6 по 10. Теперь пришло время рассказать про лучшую пятерку докладов.




                5 место


                Кирилл Скрыган, JetBrains — ReSharper vs. Roslyn
                Средняя оценка: 4.33



                Казалось бы, ReSharper — плагин к Visual Studio, который расширяет возможности IDE. Roslyn — компилятор (набор компиляторов). Что общего?

                Дело в том, что для того, чтобы делать все возможные рефакторинги, подсказки и пр., ReSharper строит собственную модель, собственное синтаксическое дерево. А значит, в нем есть, фактически, половина компилятора, компиляторный front-end. А значит, его можно сравнить с фронтэндом Roslyn, что Кирилл и сделал в этом докладе.

                Акценты Кирилл расставил не в пользу Roslyn:
                • ReSharper на 10 лет старше, в нем гораздо больше фич
                • Roslyn работает только для C# и VB, никаких JavaScript и прочих прелестей
                • синтаксическое дерево у ReSharper изменяемое и поэтому быстрое, а у Roslyn неизменяемое, генерит много memory traffic и поэтому медленное.




                Основной вывод, который сделал я — Roslyn еще пока довольно сырой продукт, а почти все описанные Кириллом болезни — «детские». Пройдет время и наверняка от всех от них Рослин избавится. Ну а что будет на самом деле — покажет время.

                Первые 4 места...
                • +22
                • 16.5k
                • 3
              • Неконстантные константные выражения

                • Translation
                // <какой-то код>
                 
                int main ()
                {
                        constexpr int a = f ();
                        constexpr int b = f ();
                 
                        static_assert (!= b, "fail");
                }

                Можно ли в приведенном выше фрагменте вместо комментария вставить такое определение f (), чтобы a получила значение, отличное от b?

                “Разумеется, нет!” — скажете вы, немного подумав. Действительно, обе переменные объявлены со спецификатором constexpr, а значит, f () тоже должна быть constexpr-функцией. Всем известно, что constexpr-функции могут выполняться во время компиляции, и, как следствие, не должны зависеть от глобального состояния программы или изменять его (иными словами, должны быть чистыми). Чистота означает, что функция при каждом вызове с одними и теми же аргументами должна возвращать одно и то же значение. f () оба раза вызывается без аргументов, поэтому должна оба раза вернуть одно и то же значение, которое и будет присвоено переменным a и b… правильно?

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

                Я ошибался.
                Увиденное под катом уже не развидеть
              • Алгоритм выбора STL-контейнера

                • Translation
                • Tutorial


                UPD: схема заменена на вариант с контейнерами из С++11, соавторы — в комментариях ниже

                Первый вариант схемы - без контейнеров из С++11

                Only registered users can participate in poll. Log in, please.

                Стоит по результатам обсуждения в комментариях расширить схему для контейнеров С++11?

                • 6.6%Нет, ты что, это же перевод, должно быть точно как в оригинале!73
                • 12.2%Надо бы, конечно, но вряд ли мы тут всё правильно придумаем135
                • 81.2%А почему бы и нет? Давай, конечно!899
              • Блок-схема для выбора STL-алгоритма



                Третьего дня, во время сортировки старых закладок, попалась мне на глаза блок-схема с алгоритмом выбора STL-контейнера. «Почему же для контейнеров есть, а для стандартных алгоритмов нет? — подумал я. — Это необходимо исправить». Подумано — сделано. Сперва планировалось за пару часов нарисовать нечто простенькое, но в дальнейшем обнаружилось, что алгоритмы никак не хотят умещаться в простенькую схему. Я слегка увлекся, и спустя два вечера схема вобрала в себя 84 алгоритма, а также немного дополнительной информации. Под катом можно увидеть, что получилось в итоге.
                Долой велосипеды!
              • Самая устаревшая инфраструктура, которую только можно купить за деньги

                • Translation
                На днях исполняется 10 лет с тех пор, как я получил самую странную свою работу.

                Шел 2005-ый год. Мой интерес к разработке системы управления контентом на Java для компании, недавно купившей наш стартап, неуклонно улетучивался, в то время как моей настоящей страстью была разработка компиляторов и инструментов языковой инфраструктуры (в основном для SBCL). Как-то раз я заметил открытую вакансию как-раз по этому направлению, что вообще-то было достаточно редким явлением. Я быстро прошел интервью — настолько быстро, что даже не задал нужных вопросов и проигнорировал несколько тревожных звоночков.

                Меня ожидало захватывающее путешествие в мир ретрокомпьютинга.
                Читать дальше →
              • Автоматический определитель электронных компонентов



                  Очень интересное и несложное устройство, которое позволит измерить сопротивление, ёмкость и индуктивность любого элемента за несколько секунд.

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



                    Доброго времени суток, всем! Кто-то умный, не помню в какой статье именно на Хабре, буквально недавно размышлял о процессе разработки с явным призывом автоматизировать все, что только можно автоматизировать. И лучше один раз потратить время на автоматизацию, чтобы потом экономить его на протяжении всего проекта.

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

                    А еще я выложил подборку на GitHub, чтобы каждый мог пополнить коллекцию.

                    Читать дальше →
                  • Jump Start в PowerShell (часть I)

                    Только автоматизация. Только PowerShell.



                    Предисловие


                    В качестве хобби и при наличии времени преподаю студентам в УКИТ (бывший Московский государственный колледж информационных технологий). На данный момент у меня мало времени, чтобы уделить его группе студентов, зато вполне достаточно, чтобы подготовить пост здесь, на Хабре.

                    Я работаю системным администратором в крупной не ИТ-компании с большой завязкой на ИТ ресурсы. По роду деятельности представляется решать большое количество однотипных задач по обслуживанию пользователей.

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

                    Внимание: PowerShell вызывает привыкание.
                    Читать дальше →
                  • Atari 800XL: Смотрим, разбираем, включаем

                      Наверняка многие читатели Хабра выросли на компьютерах ZX Spectrum и БК-0010/0011, ну или как минимум сталкивались с ними в далёких 90-х годах. Для многих эти ПК стали отправной точкой в мир ИТ. Но, как и многое другое, в нашу страну восьмибитные домашние ЭВМ пришли гораздо позже остального цивилизованного мира, да и не в полном объёме. Там же эта эра началась почти на 10 лет раньше, в конце 70-х годов, когда вышли Atari 400/800, Commodore PET и, конечно, Apple II. Массовое же распространение домашние компьютеры начали получать в начале 80-х. В 1982 году увидели свет знаменитый ZX Spectrum 48 и не менее знаменитый Commodore 64, в 1983 году вышел Atari 800XL, а в 1984 году на прилавках магазинов появился первый Macintosh. Как и большинство домашних компьютеров на тот момент, Atari 800XL был основан на процессоре 6502C с частотой 1.79 МГц, имел 64Кб памяти, умел запускать игры с кассет, трещать 5,25" дискетами, выгуливать на экране 61440 разноцветных пикселей и много чего ещё. Об этой замечательной железке я и собираюсь сегодня поговорить, впрочем, не только поговорить!


                      Читать дальше →
                    • Будущее интеллекта



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

                        Читать дальше →
                      • BOOTSTRA.386: тема для Bootstrap в духе 1980-х

                          Оказывается, некоторые темы для Bootstrap — это маленькие произведения искусства. В рамках надвигающейся пятницы хотелось бы рассказать об одной из таких тем.

                          Крис МакКензи — явно один из тех, кто скучает по старым добрым временам DOS, EGA/VGA и Turbo Vision, иначе он вряд ли бы решился сделать что-то подобное. Так что если вы успели устать от засилья плоского дизайна, то добро пожаловать в мир BOOTSTRA.386!

                          Осторожно: будьте готовы к острому приступу ностальгии. Единственное, чего не хватает для полного погружения — так это навигации с клавиатуры, ну и курсора в виде прямоугольного блока.

                          image

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