• Пилотируемый корабль Crew Dragon успешно приводнился у берегов Флориды



      2 августа 2020 года в 21:48 МСК спускаемая капсула пилотируемого корабля Crew Dragon успешно приводнилась у берегов Флориды. Экипаж корабля — астронавты Боб Бенкен (Bob Behnken) и Дуг Херли (Doug Hurley) вернулись на американскую землю спустя более 63-х суток нахождения в космосе.
      Читать дальше →
    • Еще раз о визуализации input типа checkbox и radio. Для тех, кто забыл как

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

      Недавно у меня была короткая работа по разработке ТЗ на модернизацию давно существующего проекта. И, в частности дело касалось стилизации пресловутых <input type="checkbox">. Выяснилось, что исполнитель, программист «на все руки» даже не понял, что я ему на словах объяснял как это сделать. Пришлось делать примеры и, как результат, появился этот текст.

      Напомню, что сейчас checkbox и radiobox разные сайты изображают по-разному. Бывает, что не отмеченный input сразу и не разглядишь – такой он «дизайнерский красивый», а у последних версий Chrome выбранные checkbox стали гнусного цвета циан.
      Читать дальше →
    • Почему оценка 4+ может оказаться плохой, а 3 хорошей?



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

        Я достаточно часто слышу вопрос о том, почему я предпочитаю работать не с «классической» оценкой (1-5) или (0-100), а с целым набором (знания-умения-навыки), а еще обязательно использую степень переноса навыков на условия работы персонала.

        Почему? Ответа будет два — один простой, другой подробный.

        Простой:

        Представьте себе ситуацию, что обучение проходит 2 человека — например оператор, который отвечает за работу целого комплекса оборудования и, например клининговый персонал.

        По результату обучения оператор получает «4+», а уборщица получает «4». Можно сделать вывод что оператор прошел обучение лучше. Если говорить только в терминах «педагогической шкалы» 1-5, то так оно и есть.

        Почему это плохо?

        Получается что оба где-то ошиблись? Причем оператор ошибся на 0,5, а уборщица на 1. А теперь зададим вопрос — «а к чему могут привести ошибки, которые стоят за этой единицей и 0,5 на реальном производстве»? Уборщица забудет поставить знак «осторожно, мокрый пол», кто-то с какой-то вероятностью подскользнется и с какой-то вероятностью получит травмы… Допустим.

        А что с оператором, с какой-то вероятностью он не сумеет (например) выполнить верные действия в случае возникновения аварийной ситуации и с некоторой вероятностью весь объект, например, взлетит на воздух. Что скрывает его «недополученная» половинка единица?
        Получается 4+ у оператора «смотрятся» хуже чем 4 или даже 3 у уборщицы.

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

        • Tutorial

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


        Для исправления этой вселенской несправедливости я решил написать введение в Ансибл для тех, кто его уже знает. Предупреждаю, это не пересказ манов, это лонгрид в котором много букв и нет картинок.


        Ожидаемый уровень читателя — уже написано несколько тысяч строк ямла, уже что-то в продакшене, но "как-то всё криво".

        Читать дальше →
      • Собеседование наоборот: вопросы соискателя к компании

          Всем привет! Хочу очередной раз поднять тему про найм. Только я собираюсь поговорить об этом с точки зрения кандидата, а не работодателя. Ведь собеседование, вопреки многим стереотипам, процесс двусторонний — вопросы может задавать не только интервьюер, но и сам соискатель. За прошлый год я провёл порядочное количество собеседований, и абсолютное большинство кандидатов огорчило меня отсутствием вопросов о компании, всего 5 человек стали меня расспрашивать о работе.

          Я же считаю, что вопросы на собеседовании должен задавать и сам кандидат, ведь ему предстоит там работать. Из стандартного описания вакансии невозможно понять, что творится в компании, да и на собеседовании принято всё немного приукрашивать. Я думаю, что соискатель должен максимально использовать собеседование для того, чтобы выяснить реальное положение дел в компании. Мало кому захочется попасть в некомфортные условия или в убыточную компанию без перспектив. Если интересно, как во время собеседования получить реальное представление о компании, то добро пожаловать под кат. Я дам список вопросов, которые обычно не ждут интервьюеры, возможно кому-то они помогут принять правильное решение при поиске работы.

          image
          Читать дальше →
        • Асинхронщина в Rust: Стандартная библиотека и async/.await

          • Tutorial


          Введение


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


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


          Сегодня мы рассмотрим API стандартной библиотеки для асинхронного программирования и сам долгожданный синтаксис async/.await.

          Читать дальше →
        • 10 советов схемотехнику

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


            Читать дальше →
          • Использование GitHub Actions с C++ и CMake

            Привет, Хабр! Предлагаю вашему вниманию перевод статьи "Using GitHub Actions with C++ and CMake" о сборке проекта на C++ с использованием GitHub Actions и CMake автора Кристиана Адама.


            Использование GitHub Actions с C++ и CMake


            В этом посте я хочу показать файл конфигурации GitHub Actions для проекта C++, использующего CMake.


            GitHub Actions это предоставляемая GitHub инфраструктура CI/CD. Сейчас GitHub Actions предлагает следующие виртуальные машины (runners):


            Виртуальное окружение Имя рабочего процесса YAML
            Windows Server 2019 windows-latest
            Ubuntu 18.04 ubuntu-latest or ubuntu-18.04
            Ubuntu 16.04 ubuntu-16.04
            macOS Catalina 10.15 macos-latest

            Каждая виртуальная машина имеет одинаковые доступные аппаратные ресурсы:


            • 2х ядерное CPU
            • 7 Гб оперативной памяти
            • 14 Гб на диске SSD

            Каждое задание рабочего процесса может выполняться до 6 часов.

            Читать дальше →
          • Аналитика для хантинга разработчиков и CTO



              Аналитика рынка разработчиков и CTO:


              • Сколько денег хотят разработчики и CTO, которые не ищут работу и как можно их замотивировать
              • 4 ключевых причины, которые могут снижать стоимость разработчиков и что может повышать их ценность;
              • 12 факторов, с помощью которых вы можете заинтересовать опытных экспертов;
              • Могут ли кандидаты стоить для вас дешевле. Что делать, если у вас проблемы с наймом. Как кризис и пандемия повлияли на хантинг. Общие рекомендации современного хантинга.
              Читать дальше →
            • Пособие по webpack

              • Translation
              • Tutorial


              Давайте сначала разберемся, зачем нужен вебпак (webpack), и какие проблемы он пытается решить, а потом научимся работать с ним. Webpack позволяет избавиться от bower и gulp/grunt в приложении, и заменить их одним инструментом. Вместо bower'а для установки и управления клиентскими зависимостями, можно использовать стандартный Node Package Manager (npm) для установки и управления всеми фронтэнд-зависимостями. Вебпак также может выполнять большинство задач grunt/gulp'а.


              Bower это пакетный менеджер для клиентской части. Его можно использовать для поиска, установки, удаления компонентов на JavaScript, HTML и CSS. GruntJS это JavaScript-утилита командной строки, помогающая разработчикам автоматизировать повторяющиеся задачи. Можно считать его JavaScript-альтернативой Make или Ant. Он занимается задачами вроде минификации, компиляции, юнит-тестирования, линтинга и пр.

              Допустим, мы пишем простую страницу профиля пользователя в веб-приложении. Там используется jQuery и библиотеки underscore. Один из способов — включить оба файла в HTML:

              Читать дальше →
            • Визуализация генеративных алгоритмов: гифа, деревья, повторяющиеся и дифференциальные линии (на Python)

              • Translation
              • Tutorial
              image

              Введение


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

              image

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

              Иногда мне удается воссоздать явление, которое я собирался создать, а иногда — нет. Чаще всего я получаю нечто интересное, даже если это не всегда то, что было задумано.
              Осторожно, тяжелые красивые картинки
              • +73
              • 11.9k
              • 6
            • Как GPU-вычисления буквально спасли меня на работе. Пример на Python

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

              Сегодня мы затрагиваем актуальнейшую тему — Python для работы с GPU. Автор рассматривает пример, тривиальный в своей монструозности, и демонстрирует решение, сопровождая его обширными листингами. Приятного чтения!


              Читать дальше →
            • Анатомия KD-Деревьев

              image

              Эта статья полностью посвящена KD-Деревьям: я описываю тонкости построения KD-Деревьев, тонкости реализации функций поиска 'ближнего' в KD-Дереве, а также возможные 'подводные камни', которые возникают в процессе решения тех или иных подзадач алгоритма. Дабы не запутывать читателя терминологией(плоскость, гипер-плоскость и т.п), да и вообще для удобства, полагается что основное действо разворачивается в трехмерном пространстве. Однако же, где нужно я отмечаю, что мы работаем в пространстве другой размерности. По моему мнению статья будет полезна как программистам, так и всем тем, кто заинтересован в изучении алгоритмов: кто-то найдет для себя что-то новое, а кто-то просто повторит материал и возможно, в комментариях дополнит статью. В любом случае, прошу всех под кат.
              Читать дальше →
            • Оптимальный путь новичка в мире C++/Qt

              Часто задаваемый начинающими программистами вопрос – какие материалы читать для повышения своего профессионального уровня? В таком, наиболее общем виде, ответить на данный вопрос невозможно. Это зависит от текущих знаний и умений человека, от его специализации, от задач, которые возникнут перед ним в будущем. Однако я попытаюсь ответить на данный вопрос для того направления программистской деятельности, в котором лучше всего разбираюсь – в создании кроссплатформенных сложных desktop-приложений. Приложений уровня и класса PhotoShop, VisualStudio, MS Word. Таких приложений, в которых с точки зрения программиста возникает больше количество разноплановых задач:

              • Отрисовка классического «офисного» GUI типа кнопок, прогресс-баров, виджетов, анимации.
              • Отрисовка любой нестандартной графики типа непрерывно движущихся графиков из миллионов точек.
              • Работа с базами данных
              • Работа с сетью
              • Работа с реестром операционной системы
              • Работа с принтером
              • Быстрое (в том числе параллельное) выполнение сложных вычислительных задач.
              • И многое, многое другое.

              Наборов платформ и фреймворков, которые позволяют эффективно строить подобные приложения, не так уж много. В свое время, попробовав разные платформы, программисты в моей организации уверенно остановились на следующей связке: язык С++ и платформа Qt. Как показало время, этот выбор не подвел. Вот именно с оглядкой на этот выбор я начну излагать тот набор материалов, которые я рекомендую к изучению начинающими программистами, если они хотят стать настоящими гуру в этом направлении.
              Читать дальше →
            • Безопасность REST API от А до ПИ

                Введение


                Умение реализовать грамотное REST API — полезный навык в наше время, т.к. все больше сервисов предоставляют свои возможности с помощью API. Но разработка REST API не ограничивается реализацией HTTP запросов в определенном стиле и формированием ответов в соответствии со спецификацией. Задача обеспечения безопасности REST API не так очевидна, как, например, обеспечение безопасности баз данных, но ее необходимость не менее важна.
                В настоящее время многие онлайн системы с помощью API передают приватные данные пользователей, такие как медицинские или финансовые. Текущая же ситуация с безопасностью в веб-приложениях весьма печальна: по данным Comnews порядка 70% содержат кри­тичес­кие уязвимости. Поэтому всем, кто участвует в проектировании, реализации и тестировании онлайн систем, важно иметь общую картину по существующим угрозам и способам обеспечения безопасности как всей системы, так и используемого REST API.

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

                image
                Читать дальше →
              • Как Linux'овский sort сортирует строки

                • Tutorial

                Введение


                Всё началось с короткого скрипта, который должен был объединить информацию об адресах e-mail сотрудников, полученных из списка пользователей почтовой рассылки, с должностями сотрудников, полученными из базы отдела кадров. Оба списка были экспортированы в текстовые файлы в кодировке Юникод UTF-8 и сохранены с юниксовскими концами строк.


                Содержимое mail.txt


                Иванов Андрей;ia@example.com

                Содержимое buhg.txt


                Иванова Алла;маляр
                Ёлкина Элла;крановщица
                Иванов Андрей;слесарь
                Абаканов Михаил;маляр

                Для объединения файлы были отсортированы юниксовской командой sort и поданы на вход юниксовской программе join, которая неожиданно завершилась с ошибкой:


                $> sort buhg.txt > buhg.srt
                $> sort mail.txt > mail.srt
                $> join buhg.srt mail.srt > result
                join: buhg.srt:4: is not sorted: Иванов Андрей;слесарь

                Просмотр результата сортировки глазами показал, что в целом сортировка правильная, но в случае совпадений мужских и женских фамилий, женские идут перед мужскими:


                $> sort buhg.txt
                Абаканов Михаил;маляр
                Ёлкина Элла;крановщица
                Иванова Алла;маляр
                Иванов Андрей;слесарь

                Выглядит как глюк сортировки в Юникоде или как проявление феминизма в алгоритме сортировки. Первое, конечно, правдоподобнее.

                Читать дальше →
              • Кто есть кто в платежной экосистеме 2020. Часть 1

                • Translation
                Знаете ли вы, как устроен мир платежей, и кто есть кто во всей этой большой экосистеме?.. Сегодня мы публикуем перевод статьи аналитиков Innopay, посвященной картированию ключевых игроков в пространстве тех, кто своей ИТ-инфраструктурой помогает покупать и продавать онлайн. Инфографика прилагается — всё как на ладони.


                Читать дальше →
              • Кроссплатформенный многопоточный TCP/IP сервер на C++

                Как-то раз встала задача по написанию простого и быстрого многопоточного TCP/IP сервера на C++ и при этом, чтобы работал из под Windows и Linux без требования как-либо изменять код за пределами класса самого сервера. Ранее, на чистом C++ без библиотек вроде Qt, Tcp-сервер не писал, и предвещал себе долгое время мучений с платформо-зависимостью. Но как оказалось всё гораздо проще чем казалось на первый взгляд, ведь в основном интерфейсы сокетов обоих систем похожи как две капли воды и различаются лишь в мелких деталях.

                Читать дальше →
              • Подготовка к собеседованиям в IT-гиганты: как я преодолела проклятье алгоритмического собеседования


                  Дисклеймер:


                  Я не программирую с трёх лет, не знаю наизусть Кнута, не являюсь призёром олимпиад по информатике и чемпионатов по спортивному программированию, не училась в MIT. У меня за плечами образование по информатике и 6 лет опыта в коммерческой разработке. И до недавнего времени я не могла пройти дальше первого технического скрининга в IT-гиганты из FAANG (Facebook, Amazon, Apple, Netflix, Google и подобные), хотя предпринимала несколько попыток. 

                  Но теперь всё изменилось, я получила несколько офферов и хочу поделиться опытом, как можно к этому прийти. Речь пойдёт о позиции Software Engineer в европейских офисах перечисленных компаний.
                  Читать дальше →
                • О [[trivial_abi]] в Clang-е

                  • Translation
                  Наконец-то я написал пост про [[trivial_abi]]!

                  Это новая фирменная фича в транке Clang-а, новая по состоянию на февраль 2018. Это вендорское расширение языка C++, это не стандартный C++, она не поддерживается транком GCC, и нет активных предложений WG21 включить её в стандарт C++, насколько мне известно.



                  Я не принимал участие в реализации этой фичи. Я просто просматривал патчи в списке рассылки cfe-commits и тихо аплодировал про себя. Но это такая крутая фича, что я считаю, каждый должен про неё знать.
                  Читать дальше →