• Strace в Linux: история, устройство и использование


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


    Следить за «интимной жизнью» программ на Linux помогает утилита strace, которой и посвящена эта статья. К примерам использования «шпионского» оборудования прилагаются краткая история strace и описание устройства подобных программ.

    Читать дальше →
  • С++, метапрограммирование и регистры микроконтроллера

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


    Вот уже несколько лет все свои проекты для линейки микроконтроллеров stm32 я делаю на C++.


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


    Во избежание лишних вопросов: я использую связку QtCreator+gcc+gdb+openocd. Как с ней работать, описано многократно, поэтому не буду на этом останавливаться, а вот о своих подходах к работе с микроконтроллерами расскажу подробнее.


    На нижнем уровне проекта, как правило, находятся драйвера периферии. С них и начнём.

    Читать дальше →
  • Дрон для любителя: устройство и принципы программирования

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


      Фото с омского «Хакатона по применению малых БПЛА»

      Под катом — из чего состоит дрон, какие бывают комплекты и как начать с ними работу.
      Читать дальше →
    • Кто такой наставник и какими гибкими навыками он должен обладать

        image

        В одном из недавних опросов Хабр Карьеры мы выяснили, что почти половина ИТ-специалистов планирует менять работу в ближайшее время. Индекс лояльности таких сотрудников был равен минус 46, в то время как у тех, кто не планировал менять работу — плюс 28. 

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

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

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

        Посмотрим, какие гибкие навыки (soft skills) считаются самыми важными для работы в ИТ, какие из них встречаются чаще, а какие реже. Уточним, кто такой наставник, какими навыками он должен обладать и насколько наставничество распространено. Увидим, каких гибких навыков ждут от джунов и как оценивают их на собеседовании. И наконец, узнаем, можно ли учиться гибким навыкам и наставничеству.
        Читать дальше →
        • +22
        • 13.1k
        • 4
      • 42 оператора расширенного поиска Google (полный список)

        • Translation
        • Tutorial
        Те, кто давно занимается поисковой оптимизацией, хорошо знают об операторах расширенного поиска Google. Например, почти все знают об операторе site:, который ограничивает поисковую выдачу одним сайтом.

        Большинство операторов легко запомнить, это короткие команды. Но уметь эффективно их использовать — совсем другая история. Многие специалисты знают основы, но немногие по-настоящему овладели этими командами.

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


          Здравствуйте, меня зовут Евгений, и мне надоело писать прошивки для микроконтроллеров. Как это это случилось и что с этим делать, давайте разберемся.

          Читать дальше →
        • Пишем свою простейшую программу для ARM Cortex-M3

            imageДобрый день! Сегодня я хочу рассказать вам как написать минимальную программу, которая запустится на ARM Cortex-M3 и при этом напечатает “Hello, World!”. Постараемся разобрать по шагам необходимый минимум, который нам для этого потребуется. Запускать будем на эмуляторе QEMU. Поэтому любой желающий может воспроизвести, даже если у него нет под рукой железки.

            Итак, поехали!
            Читать дальше →
          • Как это работает в мире java. Пул потоков

            • Tutorial

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


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


            public class Counter {
            
                public Double count(double a) {
                    for (int i = 0; i < 1000000; i++) {
                        a = a + Math.tan(a);
                    }
            
                    return a;
                }
            }
            Читать дальше →
          • Как создавать, собирать, устанавливать и использовать пакеты с программами и библиотеками для UNIX-подобных систем

            • Tutorial
            Речь пойдёт о программах и библиотеках для UNIX-подобных систем, распространяемых в виде исходного кода (в том числе в виде тарболлов), написанных обычно на C и C++ (хотя этот же порядок работы может применяться к софту на любом языке). Многие вещи в этой статье написаны применительно конкретно к GNU/Linux, хотя многое из статьи может быть обобщено и на другие UNIX-подобные ОС.

            Под словом «пакет» я понимаю в этой статье пакет с исходными текстами, причём не пакет конкретного дистрибутива GNU/Linux, а просто пакет, исходящий от оригинальных авторов софта (UPD от 2017-02-09: кроме тех случаев, где из контекста ясно, что слово «пакет» употреблено в другом смысле).

            В этой статье я разберу следующие вопросы:

            • Вот скачал программу или библиотеку. Как её собрать и установить? Как воспользоваться библиотекой?
            • Что такое префикс (prefix) установки? В чём разница между сборкой и установкой? Куда обычно устанавливают программы?

            Я разберу только совсем базовые вещи. Те, которые типичные участники сообщества свободного ПО, программирующие на C и C++ под UNIX-подобные системы, обычно уже знают. Как создавать тарболлы (на примере «голого» make) и как устанавливать чужие тарболлы. Advanced советы по созданию «хороших» пакетов я не дам. «Продвинутые» вещи читайте в документации систем сборки, в замечательной статье «Upstream guide» от Debian (в её конце есть ещё куча ссылок о создании «хороших» пакетов). Многое в этой статье можно было сделать по-другому, моя цель: дать хотя бы один способ, не пытаться объять необъятное.
            Читать дальше →
          • Головоломки TCP

            • Translation

            Говорят, что нельзя полностью понять систему, пока не поймёшь её сбои. Ещё будучи студентом я ради забавы написал реализацию TCP, а потом несколько лет проработал в IT, но до сих пор продолжаю глубже и глубже изучать работу TCP — и его ошибки. Самое удивительное, что некоторые из этих ошибок проявляются в базовых вещах. И они неочевидны. В этой статье я преподнесу их как головоломки, в стиле Car Talk или старых головоломок Java. Как и любые другие хорошие головоломки, их очень просто воспроизвести, но решения обычно удивляют. И вместо того, чтобы фокусировать наше внимание на загадочных подробностях, эти головоломки помогают изучить некоторые глубинные принципы работы TCP.
            Читать дальше →
          • Алгоритм Левенберга — Марквардта для нелинейного метода наименьших квадратов и его реализация на Python



            Нахождение экстремума(минимума или максимума) целевой функции является важной задачей в математике и её приложениях(в частности, в машинном обучении есть задача curve-fitting). Наверняка каждый слышал о методе наискорейшего спуска (МНС) и методе Ньютона (МН). К сожалению, эти методы имеют ряд существенных недостатков, в частности — метод наискорейшего спуска может очень долго сходиться в конце оптимизации, а метод Ньютона требует вычисления вторых производных, для чего требуется очень много вычислений.



            Для устранения недостатков, как это часто бывает, нужно глубже погрузиться в предметную область и добавить ограничения на входные данные. В частности: МНС и МН имеют дело с произвольными функциями. В статистике и машинном обучении часто приходится иметь дело с методом наименьших квадратов (МНК). Этот метод минимизирует сумму квадрата ошибок, т.е. целевая функция представляется в виде



            \frac{1}{2}\sum \limits_{i=1}^{N}(y_i'-y_i)^2 = \frac{1}{2}\sum \limits_{i=1}^{N}r_i^2 \tag{1}


            Алгоритм Левенберга — Марквардта является нелинейным методом наименьших квадратов. Статья содержит:


            • объяснение алгоритма
            • объяснение методов: наискорейшего спуска, Ньтона, Гаусса-Ньютона
            • приведена реализация на Python с исходниками на github
            • сравнение методов

            Читать дальше →
          • Как я повысил свою продуктивность или волшебный пинок для умных и ленивых



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

              Я тоже столкнулся с этой проблемой, но все попытки тайм менджмента практически не увенчались успехом. Не приживается у меня тайм менеджмент, но я все-таки нашел альтернативный выход.
              Читать дальше →
            • Проектируем плату в KiCad с помощью QEDA: от идеи до опытного образца

              • Tutorial

              Какое-то время назад я опубликовал статью-презентацию об инструменте под названием QEDA. Если кратко, то это утилита для облегчения процесса создания библиотеки электронных элементов.


              Были сделаны полезные выводы, проведена дальнейшая работа, проект развивался. Появился интерфейс коммандной строки (CLI). На сегодняшний день можно говорить о некотором milestone: проект достиг версии 0.1.


              В этот статье я рассмотрю типичный рабочий процесс по созданию платы в среде KiCad и использованием утилиты QEDA.


              КДПВ


              Предупреждение: будут картинки и, как следствие, трафик.

              Читать дальше →
            • Насколько отличаются доходы директоров по продажам и основателей ИТ-компаний


                Изображение сайта newsofgambling.com

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

                Тем не менее, доходы богатейших основателей и богатейших директоров по продажам существенно отличаются. Дать приблизительную оценку того, насколько они отличаются, помогают исследования.
                Читать дальше →
                • +13
                • 22.2k
                • 5
              • Топ-100 статей по машинному обучению и анализу данных

                  Этот пост построен по аналогии с постом «Хабрасливки: золотые посты «Хабрахабра» и Geektimes», но по машинному обучению и анализу данных. Выборку пришлось корректировать вручную, т.к. попали не относящиеся к теме сообщения, имеющие высокие оценки (возможно несколько осталось) и, наоборот, не попали несколько из лучших хаба «Машинное обучение». «Сливки» получились жидкие — самая высокая оценка — 312, самая низкая — 50, поэтому включены посты, не менее 80% голосов за которые положительны, а не 98%.


                  Читать дальше →
                • 8 лекций, которые помогут разобраться в машинном обучении и нейросетях




                    Мы собрали интересные лекции, которые помогут понять, как работает машинное обучение, какие задачи решает и что нам в ближайшем будущем ждать от машин, умеющих учиться. Первая лекция рассчитана скорее на тех, кто вообще не понимает, как работает machine learning, в остальных много интересных кейсов.
                    Читать дальше →
                    • +43
                    • 81.4k
                    • 5
                  • Я делаю свой квадрокоптер. Часть 1. Уравнения динамики

                      Оглавление


                      1. Уравнения динамики

                      Введение




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

                      Немного уравнений и еще меньше текста
                    • Чем PostgreSQL лучше других SQL баз данных с открытым исходным кодом. Часть 1

                      • Translation
                      Сегодня давайте поговорим о преимуществах Postgres перед другими системами с открытым кодом. Эту тему мы обязательно раскроем более подробно на PG Day'16 Russia, до которой осталось всего два месяца.

                      Возможно, вы спрашиваете себя: «Почему PostgreSQL?» Ведь есть и другие варианты реляционных баз данных с открытым исходным кодом (в рамках этой статьи мы рассматривали MySQL, MariaDB и Firebird), так что же Постгрес может предложить такого, чего нет у них? В слогане PostgreSQL заявляется, что это «Самая продвинутая база данных с открытым исходным кодом в мире». Мы приведем несколько причин, почему Постгрес делает такие заявления.

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


                      Читать дальше →
                    • Полезные трюки PostgreSQL



                        В мануале есть всё. Но чтобы его целиком прочитать и осознать, можно потратить годы. Поэтому один из самых эффективных методов обучения новым возможностям Postgres — это посмотреть, как делают коллеги. На конкретных примерах. Эта статья может быть интересна тем, кто хочет глубже использовать возможности postgres или рассматривает переход на эту СУБД.
                        Читать дальше →
                      • Масштабирование до 100 миллионов пользователей. Кэшировать или не кэшировать?

                          Это вторая часть цикла «Масштабирование Wix до 100 миллионов пользователей». Вступление читайте тут.

                          Когда мы только запускали Wix, был использован стек Tomcat, Hibernate и Ehcache c базой данных MySQL и фронтендом на Flash. Почему мы выбрали этот стек? Да просто потому, что у нашего первого бэкенд-разработчика уже был опыт работы с ним. Частью этой архитектуры был Ehcache – отличная кэш-библиотека для Hibernate и JVM, которая создавала абстракцию в виде карты для кэша памяти и которая могла также быть сконфигурирована как распределенный кэш. Ehcache, в отличие от Memcached, запускается как процесс в JVM и в точности реплицирует состояние кэша для всех узлов кластера. Обратим внимание, что в то время (около 2006–2008 гг.) Encache все еще был независимым open source проектом и не был частью Terracotta (в рамках Terracotta модель репликации и дистрибуции может быть иной, но для данной статьи это не столь важно).

                          Аспекты использования кэша




                          Поскольку у нас уже были реальные клиенты, мы установили два сервера Tomcat для обеспечения дополнительной надежности. Следуя правилам выстраивания архитектуры, мы установили распределенный Ehcache-кластер между серверами. Мы исходили из того, что MySQL работает медленно (как и любая другая SQL-система), а значит кэш оперативной памяти обеспечит гораздо более высокую скорость чтения и снизит нагрузку на базу данных.
                          Читать дальше →