• Что каждый программист на C должен знать об Undefined Behavior. Часть 1/3

    • Перевод
    Часть 1
    Часть 2
    Часть 3

    Люди иногда спрашивают, почему код, скомпиливанный в LLVM иногда генерирует сигналы SIGTRAP, когда оптимизация была включена. Покопавшись, они обнаруживают, что Clang сгенерировал инструкцию «ud2» (подразумевается код X86) — то же, что генерируется __builtin_trap(). В этой статье рассматривается несколько вопросов, касающихся неопределённого поведения кода на C и того, как LLVM его обрабатывает.

    image

    В этой статье (первой из трёх) мы попытаемся объяснить некоторые из этих вопросов, чтобы вы могли лучше понять связанные с ними компромиссы и сложности, и возможно, изучить немного больше тёмные стороны С. Мы выясним, что C не является «высокоуровневым ассемблером», как многие опытные программисты на C (особенно те, кто сфокусирован на низком уровне) предпочитают думать, и что C++ и Objective-C напрямую унаследовали множество таких проблем.
    Читать дальше →
  • Как правильно оформить Open Source проект

    • Tutorial

    В свободное и не свободное время[1] я развиваю несколько своих проектов на github, а также, по мере сил, участвую в жизни интересных для меня, как программиста, проектах.


    Недавно один из коллег попросил консультацию: как выложить разработанную им библиотеку на github. Библиотека никак не связана с бизнес-логикой приложения компании, по сути это адаптер к некоему API, реализующему определённый стандарт. Помогая ему, я понял что вещи, интуитивно понятные и давно очевидные для меня, в этой области, совершенно неизвестны человеку делающему это впервые и далёкому от Open Source.


    Я провел небольшое исследование и обнаружил что большинство публикаций по этой теме на habrahabr освещают тему участия (contributing), либо просто мотивируют каким-нибудь образом примкнуть к Open Source, но не дают исчерпывающей инструкции как правильно оформить свой проект. В целом в рунете, если верить Яндекс, тема освещена со стороны мотивации, этикета контрибуции и основ пользования github. Но не с точки зрения конкретных шагов, которые следует предпринять.


    Так что из себя представляет стильный, модный, молодёжный Open Source проект в 201* году?

    Читать дальше →
  • Как рендерит кадр движок Unreal Engine

    • Перевод


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

    Поскольку у нас есть доступ к исходному коду, мы можем изучить исходники рендерера, чтобы понять, что он делает, однако это довольно объёмная часть движка, а пути рендеринга сильно зависят от контекста, поэтому проще будет исследовать чистый низкоуровневный API (иногда заглядывая в код, чтобы заполнить пробелы).
    Читать дальше →
  • Качественное уменьшение изображений за константное время

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


      Для начала давайте порассуждаем логически. Если вы делаете ресайз изображения, наверное вы хотите чтобы результат хотя бы отдаленно напоминал оригинал. Для этого нужно учесть как можно больше информации из исходного изображения. Вы слышали о методе «ближайшего соседа»? В этом методе для каждой точки конечного изображения просто берется какая-то одна точка из исходного изображения в неизменном виде.



      Уменьшение изображения 4928×3280 до 256×170 ближайшим соседом.


      Рекомендую смотреть примеры из статьи в браузере в масштабе 100% и без ретины. То есть по максимуму исключить ресайз при просмотре.

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



      Точки, которые попадут в конечное изображение размером 20×13.
      Читать дальше →
    • Дюжина приемов в Linux, которые действительно сэкономят уйму времени



        Эта статья также есть на английском.

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

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

        Под катом — дюжина приемов в командной строке — из личного опыта.
        Читать дальше →
      • Создание 3D-моделей при помощи дронов DJI и Agisoft Photoscan

        • Перевод
        Это руководство написано для новичков, но я постараюсь поделиться всеми советами и трюками, которые я узнал за последние 5 лет полетов и фотомоделирования.

        image

        Вступление


        Меня зовут Matthew Brennam, я аспирант факультета информатики в Индианском университете. У меня есть опыт в архитектуром дизайне, но я работал археологом и дизайнером мультимедиа.

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

        Недавняя потребительская доступность современных беспилотных летательных аппаратов (UAV / UAS) в сочетании с легкими камерами с высоким разрешением и повышенной вычислительной мощностью для фотомоделирования означает, что в настоящее время на долю времени и денег, которые она когда-то занимала, мы способны создавать высокоточные модели больших структур и ландшафтов, которые могут использоваться для приложений AR и VR, а также отображаться в реальном времени в Интернете.
        Читать дальше →
      • Ардуино головного мозга: импульсный датчик положения

        • Tutorial

        Задача на сегодня: как определить угол поворота инкрементального энкодера?


        Сегодня в серии публикаций про ардуино головного мозга коротенькая статья с небольшим экспериментом и парой рецептов. В комментариях к одной из моих прошлых статей меня обвинили в том, что ардуиной подсчитывать импульсы энкодера — фу так делать:
        Оптически энкодер 1000/оборот и ATMega не имеющая аппаратной схемы работы с энкодером (как у серий STM32, например) — это тупик.
        Дальше в комментариях было много теоретизирования, которое лучше пропустить. Давайте лучше попробуем протестировать в железе, насколько это тупик. Для начала, что такое инкрементальный энкодер? Тот, кто помнит эпоху до-оптических мышек, ответ знает точно. Внутри энкодера есть диск с прорезями, вот для наглядности я сделал фотографию диска с пятьюстами прорезями:


        Читать дальше →
      • Книга «Теория струн и скрытые измерения Вселенной»

          image Всем привет! В минувшую субботу мы получили Беляевкую премию за издание научной серии «New Science». В честь этого у нас скидка 30% на данную серию, а ниже представлен отрывок из книги Шинтана Яу и Стива Надиса «Теория струн и скрытые измерения Вселенной» — «Петли в пространстве-времени».

          Зигмунд Фрейд считал, что, для того чтобы понять природу человеческого разума, необходимо изучать людей, чье поведение не укладывается в общепринятые нормы, то есть является аномальным, — людей, одержимых странными, навязчивыми идеями: например, в число его знаменитых пациентов входили «человек-крыса» (у которого были сумасшедшие фантазии, в которых дорогих ему людей привязывают ягодицами к горшку с крысами) и «человек-волк» (который часто видел сон, как его заживо съедают белые волки, сидящие на дереве перед окном его спальни). Фрейд считал, что больше всего мы узнаем о типичном поведении, изучая самые необычные, патологические случаи. С помощью таких исследований, по его словам, мы могли бы в конечном итоге прийти к пониманию как норм, так и отклонений от них.
          Читать дальше →
          • +16
          • 8,6k
          • 6
        • Передаем радиосигналы с помощью Raspberry Pi: тестирование

            Привет geektimes.

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

            Исправим этот момент.



            Тестирование того, как это работает, под катом.
            Читать дальше →
          • Выбираем и собираем 60% клавиатуру


            В этой статье я не буду описывать преимущества и недостатки механических клавиатур. Одной единственной идеальной клавиатуры для всех не существует. Многие считают вершиной развития «островные» клавиатуры с ножничным механизмом, кто-то может комфортно печатать лишь на Topre, другие запаслись парой-тройкой IBM Model M на всю оставшуюся жизнь. Вокруг переключателей Cherry MX и их клонов диапазон предпочтений тоже весьма широк — одним подавай лёгкие линейные переключатели, другим нужны жёсткие MX Green с кликом. Речь пойдёт о компактной разновидности, так называемых «шестидесятипроцентных клавиатурах».
            Читать дальше →
          • Пишем драйвер для графического планшета

              Немного занимаюсь рисованием, и вот купил себе Huion Q11K — качество на уровне такого же Интоуса Про, но ценник ниже чуть ли не в 3 раза. Подключил, порисовал даже, на Windows 10 всё работает. Перезагрузился в линукс, и началось…

              image
              Читать дальше →
            • Если вы планируете или уже получаете оплату в валюте, вам в любом случае предстоит валютный контроль. Мы не знаем, какая часть предпринимателей отказывается от работы с иностранными клиентами или работает по-черному, лишь бы не связываться с валютным контролем. Но кажется, что его не любят многие. Мы подготовили инструкцию, которая поможет вам разобраться с валютным контролем. Мы не будем рассказывать обо всех трудностях - проговорим только те, которые чаще встречаются в сфере IT.
              Подробная инструкция – под катом.
            • Kinect ради дистанционного управления

                Мы в компании Redmadrobot в перерывах между игрой в Xbox с интересом наблюдаем за тем, что уже делается и что ещё можно сделать с помощью Microsoft Kinect. Ну и свои эксперименты, разумеется, тоже проводим — об одном таком я и расскажу.

                Проблема с взаимодействием

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



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

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

                  Я ни в коем разе не принуждаю сразу выливать ваше хлорное железо / перекись водорода, оставьте их для макетирования. Я лишь хочу показать, что заказать платы на производстве в наше время совсем не сложно, как может показаться начинающему радиолюбителю. Есть в этом что-то магическое — подержать в руках красивую плату собственного изготовления.
                  Читать дальше →
                • Руководство по материалам электротехники для всех. Часть 1

                  • Tutorial
                  Привет гиктаймс! Я решил опубликовать по частям свое руководство по материалам, используемым не только в электротехнике, но и вообще в технике, в том числе самодельщиками. С описанием, примерами применения, заметками по работе. Руководство написано максимально просто, и будет понятно всем, от школьника до пенсионера.

                  В этой части начинаем разбирать проводники — Серебро, Медь, Алюминий.

                  image

                  Добро пожаловать под кат (ТРАФИК)
                  узнать о материалах
                • Многозадачная Ардуина: таймеры без боли

                  • Tutorial
                  Не каждый ардуинщик знает о том, что помимо стартового кода в setup и бесконечного цикла в loop, в прошивку робота можно добавлять такие кусочки кода, которые будут останавливать ход основного цикла в строго определенное заранее запланированное время, выполнять свои дела, затем аккуратно передавать управление в основную программу так, что она вообще ничего не заметит. Такая возможность обеспечена механизмом прерываний по таймеру (обычное дело для любого микроконтроллера), с её помощью в прошивку можно вносить элементы реального времени и многозадачности.

                  Еще меньше используют такую возможность на практике, т.к. в стандартном не слишком богатом API Arduino она не предусмотрена. И, хотя, доступ ко всем богатствам внутренних возможностей микроконтроллера лежит на расстоянии вытянутой руки через подключение одного-двух системных заголовочных файлов, не каждый пожелает добавить в свой аккуратный маленький скетч пару-тройку экранов довольно специфического настроечного кода (попутно потеряв с ним остатки переносимости между разными платами). Совсем единицы (тем более, среди аудитории Ардуино) решатся и смогут в нем разобраться.

                  Сегодня я избавлю вас от страданий.
                  Читать дальше →
                • Не рычите на фрилансера

                  Вводная


                  У многих, кто заказывал что-либо на фрилансе (дизайн, код или текст) или на аутсорсе, негативное отношение к такому сотрудничеству. Уж очень много недобросовестных работников, которые постоянно задерживают сдачу, подолгу не отвечают и уходят в игнор. Сроки горят, приходиться обращаться к другому фрилансеру, который может быть не лучше.

                  Я не буду никого оправдывать в статье. Я сам не занимаюсь фрилансом и аутсорсом уже давно, все наблюдения за коллегами. Моя задача рассказать как и почему это происходит с психологической точки зрения у обеих сторон. Что влияет на такое поведение и как его в дальнейшем избежать или исправить. Для примера я буду описывать упрощенное взаимодействие с дизайнером на фрилансе.
                  Читать дальше →
                • Настраиваем интернет шлюз с прозрачным обходом блокировок (а рекламу таки будем блокировать)

                  • Tutorial


                  У вас есть старенький (или не очень) компьютер с двумя сетевыми картами? Вам надоела реклама и лишние телодвижения для обхода блокировок? Вы не хотите с этим мириться? Тогда добро пожаловать под кат.
                  Читать дальше →
                • Нестандартный способ подружиться с STM32: не Ардуино и не Discovery

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


                  И на Хабре, и на geektimes уже достаточно много статей, посвящённых микроконтроллерам серии STM32F, например: Дешевая STM32 плата + Arduino IDE, Попытка подружиться с STM32 и ответ на неё Как надо дружиться с STM32 и многие другие. В совокупности они очень хорошо освещают эту тему, но есть одно но… Во всех этих статьях рассматриваются готовые платы и один конкретный контроллер, что на этой плате. А что делать тем, кто хочет поиграться с разными контроллерами, да ещё и на макетной плате? Например, многие известные мне платы с контроллером STM32F4 (та же STM32F4-Discovery) в макетную плату не воткнуть. Но мне лично хочется что-то типа такого (внимание, все картинки кликабельны):



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

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