• Vulkan-tutorial. Урок 1.1 — Вступление

    • Translation
    • Tutorial

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


    Автор оригинала дал свое согласие на перевод. Также, когда я доперевожу все статьи и у меня будет время отформатировать их для github, он добавит русский перевод на свой сайт.

    Читать дальше →
  • Посадите программиста в поток. Защищайте. Не мешайте. Наслаждайтесь

      Нужна справка на каждого ребенка. Да, и согласие на обработку персональных данных. От каждого из родителей. Пусть и анкету каждый заполнит. Статистический отчет о том, сколько мальчиков и девочек. Да, и по возрастам. И по районам прописки. Ну и по школам. Разделите там, пожалуйста, обычные школы, лицеи и гимназии. Нет, педсовет пропускать нельзя. Это всего 4 часа. Раз в неделю. Да, всем педагогам надо прийти. Конечно, вам нужно работать еще и в детских садах. Каждому из вас. Трижды в неделю. И костюмы ваши нам не нравятся, нужно меньше красок – чего как попугаи-то?

      Так, а почему новых постановок нет? Где победы на конкурсах? Что значит два месяца бегаете бумажки собираете? Какое еще творчество? И почему у вас на него времени нет? Какого еще секретаря вам нанять? Что значит «я ухожу»? Вы серьёзно думаете, что справитесь без нас? Что ж, удачи.

      Примерно так описал один очень хороший руководитель одного очень хорошего танцевального коллектива жизнь «под крылом» государственного учреждения, когда объяснял, почему ушёл «из-под крыла».

      Случай запал в душу, т.к. я как раз проводил эксперимент (в очередной раз) по избавлению других творческих людей – программистов – от непрофильной, но «такой важной, нужной и обязательной работы» — успеванию в срок.
      Читать дальше →
    • Беспроводной DIY датчик температуры и влажности с e-paper дисплеем

        Всем привет! Сегодня хочу рассказать читателям о своем DIY проекте датчика температуры и влажности с e-ink дисплеем. Это будет некая обзорная статья об этапах создания устройства, будет много картинок. Идея этого проекта родилась около двух лет назад, примерно тогда я увлекся беспроводными автономными устройствами. Целью проекта было создание небольшого девайса для знакомства и изучения дисплеев на электронных чернилах. Было решено на плату добавить датчик температуры, что бы можно было выводить какие то полезные данные на экран, ну и передавать данные далее в систему умного дома.


        Читать дальше →
      • Анатомия моего домашнего кластера Kubernetes

        • Translation
        Год назад я понял, что хочу создать собственный кластер Kubernetes. Я — разработчик программного обеспечения. Обычно я либо использую локальный кластер, состоящий из одного узла, либо применяю удалённый многоузловой кластер для тестирования своих проектов. В случае работы с кластером, состоящим из одного узла, я обычно полагаюсь на Minikube, хотя тут есть и другие решения, вроде проекта Kind, который может эмулировать наличие в кластере нескольких узлов. Поддержка нескольких узлов может появиться и в Minikube.

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



        Уже написано множество замечательных руководств, посвящённых созданию многоузловых кластеров Kubernetes с использованием одноплатных компьютеров. Во многих из таких руководств в роли SBC применяется Raspberry Pi. Я, видя это, решил пойти по пути наименьшего сопротивления и тоже остановил свой выбор на этом компьютере. Платформа Raspberry Pi зарекомендовала себя как недорогое и доступное решение.

        Надо отметить, что выбор этой платформы предусматривает некоторые компромиссы. Например, Broadcom и Raspberry Pi Foundation не лицензировали криптографические расширения ARMv8 (это нужно для аппаратного ускорения поддержки AES). Ещё одним неоднозначным решением является использование microSD-карт в виде стандартного носителя информации, с которого загружается операционная система.

        Анализируя существующие руководства по созданию кластеров на одноплатных компьютерах, я не нашёл ни одного, в котором описывалось бы решение, удовлетворяющее моим требованиям. Рассказ о созданном мной кластере я начну именно с них.
        Читать дальше →
      • Расширяем Laravel за счет собственных компонентов

        • Tutorial

        Задача


        Добавить в приложение систему оповещения пользователей через СМС-сообщения с возможностью выбора провайдера.

        Решение


        Оптимальным решением, на мой взгляд, является добавление собственного компонента.
        Компонент — это блок программы с четко определенным набором действий (контрактом), способный решать возложенные на него задачи посредством различных драйверов. Так, например, встроенный компонент Cache может использовать драйвера: file, memcached или redis.

        При построении нашего компонента, мы применим принцип проектирования Мост, тот же принцип, на котором построены компоненты Laravel.

        Итак, приступим.
        Читать дальше →
      • Разработка и тестирование Ansible-ролей с использованием Molecule и Podman

          Одно из основных преимуществ Red Hat Ansible Automation Platform заключается в том, что ее язык описания автоматизаций читабелен не только для пары-тройки гуру, но и почти для всех, кто имеет отношение к ИТ. Поэтому вносить свой вклад в автоматизацию могут любые специалисты, что сильно облегчает организацию межкомандного взаимодействия и внедрение автоматизации на уровне корпоративной культуры.



          Однако, когда делом занимается такая масса народа, очень важно все тщательно тестировать. При разработке Ansible-контента, вроде плейбуков, ролей или коллекций, мы очень рекомендуем предварительно проверять все в тестовой среде, прежде чем выкатывать в продакшн. Цель такого тестирования – удостовериться, что все работает как надо, чтобы избежать неприятных сюрпризов на «боевых» системах.
          Читать дальше: Разработка и тестирование Ansible-ролей с использованием Molecule и Podman
        • Использование HAProxy и Docker на машине разработчика при разработке сайтов

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


          Использование HAProxy и Docker на машине разработчика

          Читать дальше →
        • Очередная статья: STM32 для начинающих

            Всех приветствую!

            Это моя первая статья на Хабре, поэтому прошу не кидаться тяжелыми предметами. Заранее спасибо.

            Начнем с предыстории. Когда-то мне пришлось перейти на микроконтроллеры ARM фирмы ST. Это было связано с тем, что PIC и AVR уже не хватало и хотелось новых приключений. Из доступного в хлебобулочных магазинах и большого количества статей о «быстром старте» выбор пал именно на STM32F100.

            Я привык работать в IAR. Да, есть другие IDE, но мне хватает возможности IAR: относительно удобный редактор, не плохой отладчик и достаточно удобно работать с регистрами во время отладки.

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

              Предыдущая публикация: «Очередная статья — STM32 для начинающих»

              И как этим пользоваться?


              В предыдущей статье создали класс для работы с портами ввода-вывода, проверили. И что дальше? Зачем это все запихивать в класс?

              Возьмем для примера простенький опрос кнопок:


              Для этой схемы в простейшем случае опрос будет выглядеть так:

              int GetKey()
              {
                volatile uint32_t* addr = reinterpret_cast<uint32_t*>(GPIOA_IDR);
                uint32_t ret_val = *addr;
                return ret_val & 0x0F;
              }
              Читать дальше →
            • 8 продвинутых возможностей модуля logging в Python, которые вы не должны пропустить

              • Translation

              Понимайте свою программу без ущерба для производительности


              image


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


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

              Читать дальше →
              • +15
              • 9.9k
              • 6
            • Пишем веб сервис на Python с помощью FastAPI

              • Tutorial
              image

              Знаю, знаю, наверное вы сейчас думаете «что, опять?!».

              Да, на Хабре уже неоднократно писали о фреймворке FastAPI. Но я предлагаю рассмотреть этот инструмент немного подробнее и написать API своего собственного мини Хабра без кармы и рейтингов, зато с блэкджеком и с тестами, аутентификацией, миграциями и асинхронной работой с БД.
              Читать дальше →
            • Jira против хаоса в разработке: как не терять задачи



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

                Дано:

                • вы разрабатываете и поддерживает сложный программный продукт, работающий на нескольких клиентах;
                • у вас несколько инженерных команд (бекенд, IT Ops, iOS, Android, веб и т. д.), которые работают независимо друг от друга с отдельными беклогами;
                • у вас несколько продуктовых направлений, то есть, грубо говоря, один продуктовый менеджер ведёт несколько проектов по своему направлению, другой менеджер — по своему;
                • ваши инженерные команды функциональны, то есть они не выделены на отдельные продуктовые направления, а решают задачи всех юнитов сразу, обслуживая определённую часть технологического стека;
                • и, конечно, вы используете Jira!
                Читать дальше →
              • Как мы обрабатываем жалобы пользователей с помощью JIRA (REST API)

                • Tutorial


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


                Все жалобы пользователей должны где-то храниться, быть приоритезированы, удобно отслеживаться, и, более того, должны быть вовремя обработаны. Но не всегда есть возможность выделить достаточно ресурсов на разработку и поддержание подобной системы, ведь всегда найдется задача в бэклоге с более высоким приоритетом. Ниже я расскажу, как мы достаточно эффективно и быстро решили эту задачу в Uxcel используя JIRA REST API.

                Читать дальше →
              • Vue.js для начинающих, урок 2: привязка атрибутов

                • Translation
                • Tutorial
                Это второй урок учебного курса по Vue.js для начинающих, который рекомендует Наталья Теплухина, Staff Engineer в Gitlab и Core Team Member фреймворка Vue (Q/A сессия с Наташей прошла в нашем инстаграм, а расшифровку можно прочитать здесь)

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



                Vue.js для начинающих, урок 1: экземпляр Vue
                Vue.js для начинающих, урок 2: привязка атрибутов
                Vue.js для начинающих, урок 3: условный рендеринг
                Vue.js для начинающих, урок 4: рендеринг списков
                Vue.js для начинающих, урок 5: обработка событий
                Vue.js для начинающих, урок 6: привязка классов и стилей
                Vue.js для начинающих, урок 7: вычисляемые свойства
                Vue.js для начинающих, урок 8: компоненты
                Читать дальше →
              • Собираем недорогой 9.7" E-Ink дисплей для отображения чего угодно

                Всем привет. Давно хотел собрать большой E-Ink дисплей, который можно поставить на стол и отображать на нем полезную информацию (погоду, календарь и т.д.) В этой статье расскажу, как можно собрать такое устройство на базе ESP32 и дисплея от Kindle DX значительно дешевле, чем Waveshare.


                Читать дальше →
              • Что бы я хотел знать когда начинал изучать Django? — очень общий взгляд

                • Tutorial
                Здесь на Хабре много различных инструкций по использованию Django. Эти инструкции часто включают много кода и представляют последовательность шагов, которые нужно сделать, чтобы создать проект.

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

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

                image
                Читать дальше →
              • Аэродромное обеспечение: большой пост про то, что там, на земле, делают самолёту


                  Как правильно паковать самолёты в конверт

                  Привет!
                  Давным-давно вы просили продолжить рассказывать про те службы в авиации, которые пассажир не видит. Мы при неоценимой помощи сотрудника аэропортового обеспечения aerodromer решили описать вообще основные виды работ. Например, зачем нужно часто-часто косить траву.

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

                  Очень важной вехой в становлении правил аэродромного обеспечения стала катастрофа самолёта Ту-154 в аэропорту Омска в 1984 году. Тогда в условиях плохой видимости самолёт получил разрешение на посадку при работающих на полосе уборочных машинах (без радиостанций прослушки эфира и без проблесковых маячков). На двух из них были ёмкости с керосином по 7,5 тонны каждая. 178 погибших. Потом были выработаны основные правила при работе на ВПП, требования к автомобилям, выполняющим работы, ведению радиосвязи, взаимодействию между службами, обеспечивающими полёты. Но человеческий фактор остаётся основной причиной авиационных происшествий, и катастрофа Falcon 50 во Внуково в 2014 году лишь подтверждает эту избитую истину.
                  Читать дальше →
                  • +28
                  • 10.4k
                  • 8
                • OCR-конвейер для обработки документов

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



                    Первичным переводом документа в электронную форму является его сканирование или фотографирование, в результате которого получается графический файл в виде фотографии или скана. Однако такие файлы, особенно высокого разрешения, занимают много места на диске, и текст в них невозможно редактировать. В связи с этим, целесообразно извлекать текст из графических файлов, что успешно делается с применением OCR.
                    Читать дальше →
                  • Панорама-FM или как увидеть все радиостанции сразу с помощью SDR

                    • Tutorial
                    Привет, Хабр.

                    Наверное все, хоть немного интересующиеся радиосвязью, знают что с помощью SDR-приемника возможно принимать и обрабатывать широкую полосу спектра радиодиапазона. Собственно, отображением спектра в таких программах как HDSDR или SDR# никого не удивить. Я покажу как построить псевдо-3D спектр принимаемых станций с помощью RTL-SDR, GNU Radio и примерно 100 строк кода на языке Python.



                    Также мы возьмем приемник посерьезнее, и посмотрим на весь FM спектр 88-108МГц.
                    Продолжение под катом.
                    Читать дальше →