• ReactOS 0.4.13 CE (Coronavirus Edition)

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

      К нашему стыду, во время самоизоляции мы настолько приуныли, что забыли опубликовать новость об очередном релизе под номером 0.4.13, который состоялся еще в апреле 2020 года. Исправляемся.

      image
      Скачать образы системы | Пресс–релиз | Список изменений | TL;DR | Тесты и список регрессий
      Читать дальше →
    • Совершенный цикл for

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


        Я довольно давно пишу код, и так вышло, что практически всегда на C++. Даже и не могу прикинуть, сколько раз я написал подобную конструкцию:


        for (int i=0; i<size; i++) {
            [...]
        }

        Хотя почему не могу, очень даже могу:


        find . \( -name \*.h -o -name \*.cpp \) -exec grep -H "for (" {} \; | wc -l
        43641

        Наш текущий проект содержит 43 тысячи циклов. Проект пилю не я один, но команда маленькая и проект у меня не первый (и, надеюсь, не последний), так что в качестве грубой оценки пойдёт. А насколько такая запись цикла for хороша? Ведь на самом деле, важно даже не то количество раз, когда я цикл написал, а то количество раз, когда я цикл прочитал (см. отладка и code review). А тут речь очевидно идёт уже о миллионах.


        На КПДВ узел под названием «совершенная петля» (perfection loop).


        image


        Так каков он, совершенный цикл?

        Читать дальше →
      • Заставляем любой процесс работать с транзакционной NTFS: мой первый шаг к созданию песочницы для Windows

          TransactionMaster В ядре Windows есть модуль, отвечающий за поддержку группировки файловых операций в некоторую сущность, называемую транзакцией. Действия над этой сущностью изолированы и атомарны: её можно применить, сделав перманентной, или откатить. Очень удобно при установке программ, согласитесь? Мы всегда переходим от одного согласованного состояния к другому, и если что-то идёт не так, все изменения откатываются.


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


          Давайте разберёмся, как же это работает, поэкспериментируем с моей программой, и поймём, при чём тут вообще песочницы.

          Читать дальше →
        • Карма — это приглашение на вечеринку

            Рискуя кармой (хе-хе), хочу принять участие в дискуссии и ответить автору этого поста. В принципе, можно было бы ограничиться заголовком, но поскольку у нас тут Хабр, а не Твиттер, я растекусь мысию по древу, серым волком по земле, сизым орлом под облаками.

            image
            Читать дальше →
          • Методы наименьших квадратов: текст, написанный программистом для программистов

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

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


            Читать дальше →
          • ReactOS 0.4.12: 华为, 你认为这个怎么样?

              Нихао, Хабражители!

              Чувствую, что в этот раз вы реально заскучали по весточкам от нашего проекта! Целых семь месяцев мы работали, не покладая клавиатур, чтобы вы могли скачать и протестировать очередную версию нашей операционной системы. В ней было исправлено 226 багов, сделано 1140 изменений в исходном коде и специально для вашего удовольствия добавлены новые нескучные темы оформления



              Скачать образы системы | Пресс–релиз | Список изменений | TL;DR | Тесты и список регрессий

              Несмотря на заявленный оперативный график формирования релизов раз в 3 месяца, окончательная подготовка выпуска 0.4.12, которая по традиции велась в отдельной ветке, заняла на этот раз немногим больше полугода. Причиной столь длительного процесса подготовки было желание нашего перфекциониста и релиз–инженера по совместительству, Иоахима Хензе, исправить как можно больше регрессий, накопившихся за последние несколько лет. В результате Иоахим добился устранения не менее 33 регрессий, что можно назвать впечатляющим результатом.

              Читать дальше →
            • Процедурная генерация планет

              • Translation

              От переводчика:
              Представляю вашему вниманию статью авторства Andy Gainey, в прошлом независимого разработчика игровых инструментов, ныне сотрудника Paradox Development Studio. На мой взгляд, автор играючи создал один из лучших процедурных генераторов планет с открытым исходным кодом.

              Читать дальше →
            • Представляем Windows Terminal

              • Translation
              Windows Terminal — это новое, современное, быстрое, эффективное, мощное и производительное терминальное приложение для пользователей инструментов и оболочек командной строки, таких как Command Prompt, PowerShell и WSL.



              Windows Terminal будет поставляться через Microsoft Store в Windows 10 и будет регулярно обновляться, гарантируя, что вы всегда будете идти в ногу со временем и сможете пользоваться новейшими функциями и последними улучшениями с минимальными усилиями.

              image
              Читать дальше →
            • Фибоначчи на собеседовании

                Вычисление ряда Фибоначчи — это классическая алгоритмическая задача, потому её нередко дают на собеседованиях, когда хотят проверить, что кандидат в принципе хоть как-то умеет в алгоритмы. Предположим, вы тот самый кандидат. Вам дали задание: на языке JavaScript написать функцию fib(n), возвращающую энное число Фибоначчи. Считаем, что нулевое число Фибоначчи — это нуль. Проверка корректности аргумента не требуется. Какие у вас есть варианты?

                image
                Выбирай мудро
              • Разработка электроники. О микроконтроллерах на пальцах



                  Задумывая технологический стартап, вы совсем не обязаны быть асом в электронике, гораздо больше шансов на хорошую идею имеет узкий специалист со знанием основ маркетинга, но, даже заказывая кому-то разработку, ориентироваться в возможностях современной элементной базы и представлять цену решения необходимо обязательно. Иначе можно потребовать невозможного, либо получить устройство с завышенной себестоимостью на устаревшей элементной базе.
                  Под катом попытка кратко и просто рассказать о возможностях современных микроконтроллеров людям от них далёким. Для тех, у кого есть идея нового электронного устройства, но отсутствует представление о том, что такое микроконтроллер. Те, кто хочет сделать первый шаг от занимательных экспериментов с платформой ардуино к проектированию собственных устройств, также могут найти в ней простые, но полезные советы. Я старался, не останавливаясь на технических подробностях, для этого и книги не достаточно изложить суть и дать несколько простейших, но полезных советов по схемотехнике, чтобы предостеречь от элементарных ошибок начинающих.
                  Микроконтроллеры - это просто!
                • Установка ReactOS с USB-флешки

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

                    Эцново мы! В новости о выходе релиза 0.4.11 мы рассказали, что благодаря обновленному драйверу RAM-диска ReactOS можно не только запустить, но установить по сети при помощи протокола PXE.

                    Однако, волонтер проекта под ником Illen выяснил, что используя тот же самый новый драйвер RAM-диска, ReactOS можно установить и с обычной USB-флешки. Таким образом, релиз 0.4.11 стал первым выпуском, поддерживающим установку ReactOS на компьютеры без оптических приводов. Illen написал подробную инструкцию и записал демонстрационное видео.

                    Читать дальше →
                  • ReactOS 0.4.11 — на сотню приложений больше

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

                      Уверен, что вы уже успели соскучиться по новостям от нашего проекта! И мы не теряли времени даром. Прошлый релиз ReactOS вышел всего каких-то три с половиной месяца назад, а сегодня вы уже сможете скачать и протестировать следующую версию нашей операционной системы. В ней исправлено 135 багов, сделано 984 изменения в исходном коде и красивая анимация загрузочного экрана.

                      Скачать образы системы | Пресс–релиз | Список изменений | TL;DR | Тесты и список регрессий

                      image

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

                      Читать дальше →
                    • Delta Chat — децентрализованный мессенджер поверх электронной почты

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

                        Некоторые гениальные идеи настолько просты, что впоследствии всегда возникает недоумение, почему же что-то такое очевидное не вошло в обиход раньше? Ну а если этого не случилось до сих пор, то сейчас — в эпоху новой волны цензуры, правительственных блокировок интернет-ресурсов и постоянной угрозы слежки — наверное самое время вновь переосмыслить подход к электронной переписке…

                        Представляю вашему вниманию проект DeltaChat




                        Delta Chat — свободный децентрализованный мессенджер для Android, iOS, Linux, Mac, функционирующий поверх древнейшего стека протоколов E-mail. Версия для Windows находится в разработке.
                        Читать дальше →
                      • Введение в программирование: простой 3D-шутер с нуля за выходные, часть 2

                        • Tutorial
                        Продолжаем разговор про 3Д шутер за выходные. Если что, то напоминаю, что это вторая половина:


                        Как я и говорил, я всеми силами поддерживаю желание в студентах делать что-то своими руками. В частности, когда я читаю курс лекций по введению в программирование, то в качестве практических занятий я оставляю им практически полную свободу. Ограничений только два: язык программирования (С++) и тема проекта, это должна быть видеоигра. Вот пример одной из сотен игр, которые сделали мои студенты-первокурсники:


                        К сожалению, большинство студентов выбирает простые игры типа 2Д платформеров. Я пишу эту статью для того, чтобы показать, что создание иллюзии трёхмерного мира ничуть не сложнее клонирования марио броз.
                        Читать дальше →
                      • Введение в программирование: простой 3D-шутер с нуля за выходные, часть 1

                        • Tutorial
                        Этот текст предназначен для тех, кто только осваивает программирование. Основная идея в том, чтобы показать этап за этапом, как можно самостоятельно сделать игру à la Wolfenstein 3D. Внимание, я совершенно не собираюсь соревноваться с Кармаком, он гений и его код прекрасен. Я же целюсь совсем в другое место: я использую огромную вычислительную мощность современных компьютеров для того, чтобы студенты могли создавать забавные проекты за несколько дней, не погрязая в дебрях оптимизации. Я специально пишу медленный код, так как он существенно короче и просто понятнее. Кармак пишет 0x5f3759df, я же пишу 1/sqrt(x). Мы преследуем разные цели.

                        Я убеждён, что хороший программист получается только из того, кто кодит дома в своё удовольствие, а не только просиживает штаны на парах в университете. В нашем университете программистов учат на бесконечной череде всяких библиотечных каталогов и прочей скукоте. Брр. Моя цель — показать примеры проектов, которые интересно программировать. Это замкнутый круг: если интересно делать проект, то человек проводит над ним немало времени, набирается опыта, и видит вокруг ещё больше интересного (оно же стало доступнее!), и снова погружается в новый проект. Это называется проектное обучение, вокруг сплошной профит.

                        Простыня получилась длинная, поэтому я разбил текст на две части:


                        Выполнение кода из моего репозитория выглядит вот так:


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

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

                          Почитал я некоторые ранее опубликованные статьи о том, как жить славному молодцу, перед которым встала задача спаять 10-50-100 устройств из резисторов и микросхем, и взгрустнул, ибо во всех в них советы были даны если не вредные, то и не сильно полезные.


                          А вот, например, совет держать включённый паяльник за ручку — полезный!

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

                          • регулярно надо делать 5-10-50-100 плат с SMD-компонентами
                          • по возможности быстро
                          • по возможности дёшево

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

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

                          • Tutorial
                          Пришли очередные выходные, надо написать пару десятков строк кода и нарисовать картинку, да лучше не одну. Итак, на прошлых и позапрошлых выходных я показал, как делать трассировку лучей и даже взрывать всякое. Это многих удивляет, но комьпютерная графика — очень простая вещь, пары сотен строк голого C++ вполне хватает на создание интересных картинок.

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


                          Читать дальше →
                        • Баг в FaceTime позволил подслушивать и подсматривать за владельцами iPhone

                            image
                            Изображение buzzfeednews.com

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

                            Читать дальше →
                            • +31
                            • 9.6k
                            • 7
                          • Рисуем мультяшный взрыв за 180 строчек голого C++

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

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

                            Итого, как в таких условиях нарисовать вот такую картинку за 180 строчек кода?


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