Сообщество - Arduino & Pi

Arduino & Pi

1 493 поста 20 825 подписчиков

Популярные теги в сообществе:

Несколько интересных фактов про Динамическое программирование

Динамика - это искусство Разбивать задачи на части И решать их по порядку Сохраняя результаты.

Динамика - это мудрость Видеть оптимальность структуры И строить из подзадач путь К желанному решению.

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

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

  • Динамическое программирование может быть реализовано на C++ разными способами, в зависимости от типа задачи, структуры данных и требуемой эффективности. Например, можно использовать одномерные или многомерные массивы, векторы, хеш-таблицы, рекурсию с мемоизацией или итерацию с заполнением таблицы. Также можно применять различные техники оптимизации, такие как сжатие состояний, разбиение на подзадачи, отсечение лишних ветвей и т.д

Интересные факты и фичи языков программирования у нас в канале, заходи :)

Показать полностью 1
20

Все есть файл в Linux

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

Все есть файл в Linux

Файлы в Linux делятся на три основных типа:

  • Обыкновенные

  • Специальные

  • Директории

Обыкновенные файлы содержат данные, такие как текст, изображения, код и т.д.

Специальные файлы представляют собой интерфейсы к устройствам (блочные или символьные), к ядру (procfs или sysfs) или к другим процессам (сокеты или каналы).

Директории служат для группировки файлов по разным критериям и облегчения навигации по файловой системе.

Специальные файлы в Linux - это файлы, которые представляют собой интерфейсы к различным ресурсам системы, таким как устройства, ядро, сокеты и т.д. Они позволяют работать с этими ресурсами так же, как с обычными файлами, используя стандартные операции открытия, чтения, записи и закрытия.

Специальные файлы делятся на два основных типа:

  • Блочные

  • Символьные

Блочные файлы обеспечивают буферизованный доступ к аппаратным компонентам, таким как жесткие диски, съемные носители и т.д.

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

Некоторые интересные факты про специальные файлы в Linux:

  • Специальные файлы находятся в каталоге /dev (от англ. devices - устройства), который содержит интерфейсы работы с драйверами ядра.

  • Специальные файлы можно определить по первому символу в выводе команды ls -l. Блочные файлы обозначаются буквой b, символьные - буквой c.

  • Специальные файлы имеют два числа: основное (major) и дополнительное (minor), которые определяют тип устройства и его номер. Например, файл /dev/sda имеет основной номер 8 и дополнительный номер 0, что означает, что он представляет первый жесткий диск в системе.

  • Специальные файлы можно создавать с помощью команды mknod (от англ. make node - создать узел), которая принимает четыре аргумента: имя файла, тип файла (b или c), основной номер и дополнительный номер. Например, команда mknod /dev/mydevice c 10 20 создаст символьный файл с именем mydevice, основным номером 10 и дополнительным номером 20.

  • Специальные файлы не хранят данные на диске, а только передают их между процессами и устройствами. Поэтому размер специальных файлов всегда равен нулю.

Интересные факты и фичи языков программирования у нас в канале, заходи :)

Показать полностью 1

Здравствуй, форум!

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

16

Вспомним историю нашего любимого raspberry pi

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

История Raspberry Pi началась в 2006 году, когда группа коллег из Кембриджского университета решила создать дешевый и простой компьютер, который бы мог заинтересовать детей и подростков. Они создали несколько прототипов на основе микроконтроллеров Atmel, но они были слишком сложными и ограниченными в возможностях. Позже они нашли подходящий чип от Broadcom, который имел достаточную мощность и графические возможности для запуска Linux и других операционных систем.

В 2009 году они основали фонд Raspberry Pi Foundation, чтобы продвигать свою идею и собирать средства для производства компьютеров. Они также выбрали название Raspberry Pi, которое отражало традицию называть компьютеры по фруктам (например, Apple, Apricot, Acorn) и сокращение Pi, которое обозначало Python - один из основных языков программирования для Raspberry Pi.

В 2012 году началась продажа первой партии Raspberry Pi модели B, которая имела процессор с частотой 700 МГц, 256 МБ оперативной памяти, два порта USB, порт Ethernet, видеовыходы HDMI и RCA, аудиовыход 3.5 мм и разъем для карты памяти SD. Стоимость компьютера составляла всего 35 долларов. Спрос на него был огромным, и сайты продавцов не выдержали наплыва посетителей.

С тех пор было выпущено несколько моделей Raspberry Pi с разными характеристиками и ценами. Самой дешевой моделью является Raspberry Pi Zero, которая стоит всего 5 долларов и имеет процессор с частотой 1 ГГц, 512 МБ оперативной памяти, один порт micro USB, видеовыход mini HDMI и разъем для карты памяти micro SD. Самой мощной моделью является Raspberry Pi 4 Model B, которая стоит 35-75 долларов в зависимости от объема оперативной памяти (от 1 до 8 ГБ), имеет процессор с частотой 1.5 ГГц, четыре порта USB (два из них типа C), два порта micro HDMI, порт Ethernet, аудиовыход 3.5 мм и разъем для карты памяти micro SD.

Raspberry Pi Zero

Raspberry Pi Zero

По состоянию на конец 2019 года было продано более 30 миллионов устройств Raspberry Pi 1. Они используются для самых разных целей: обучения, развлечения, науки, искусства, робототехники, интернета вещей и многого другого. Raspberry Pi стал одним из самых известных и успешных мини-компьютеров в мире.

Интересные факты и фичи языков программирования у нас в канале, заходи :)

Показать полностью 2

Способы оптимизации кода в C++

Оптимизация кода в C++ - это процесс улучшения эффективности, скорости и качества кода, написанного на языке C++.

Способы оптимизации кода в C++

Оптимизация кода в C++ может быть выполнена на разных уровнях, таких как:

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

  • Оптимизация на уровне языка. Это означает использование возможностей и особенностей языка C++, которые могут повысить производительность кода. Например, использование константных ссылок вместо копирования объектов при передаче аргументов функциям, использование шаблонов вместо дублирования кода для разных типов данных, использование лямбда-выражений вместо обычных функций для передачи поведения в качестве параметра.

  • Оптимизация на уровне компилятора. Это означает использование параметров компилятора, которые могут изменить способ генерации исполняемого кода компилятором. Например, использование параметра /O2 для включения оптимизации по скорости выполнения, использование параметра /Ob2 для включения раскрытия функций (inline expansion), использование параметра /GL для включения оптимизации по всему программному модулю.

Оптимизация кода в C++ требует знания того, какие части программы должны выполняться быстро, какой размер и скорость выполнения кода, какие затраты на реализацию новых возможностей, какой минимальный объем работы, необходимый для выполнения задания5 Оптимизация кода в C++ также требует тестирования и профилирования кода для измерения и анализа его характеристик работы, таких как время выполнения, потребление памяти, количество вызовов функций и других. Для этого можно использовать различные инструменты, такие как Visual Studio Debugger, Visual Studio Profiler, Intel VTune Amplifier и другие.

Интересные факты и фичи языков программирования у нас в канале, заходи :)

Показать полностью

Немного про кросс-компиляцию в linux

Кросс-компиляция - это процесс создания исполняемых файлов для платформы, отличной от той, на которой происходит компиляция. Например, ты можешь кросс-компилировать программу на C++ в Linux для запуска на Windows или Android.

Немного про кросс-компиляцию в linux

Для этого тебе нужно иметь:

  • Компилятор, который может генерировать машинный код для целевого процессора. Например, clang или gcc.

  • Компоновщик, который может создавать исполняемые файлы в формате, поддерживаемом целевой операционной системой. Например, ld или lld.

  • Библиотеки и заголовочные файлы, которые соответствуют API целевой операционной системы. Например, glibc или musl для Linux и mingw-w64 для Windows3.

Для установки и настройки этих инструментов ты можешь использовать различные способы, в зависимости от твоего хоста и цели. Например, ты можешь скачать готовые пакеты кросс-компиляторов из репозиториев твоего дистрибутива Linux, собрать их самостоятельно из исходного кода или использовать специальные средства, такие как Buildroot или crosstool-NG, которые автоматизируют процесс сборки кросс-компиляционной среды.

Интересные факты и фичи языков программирования у нас в канале, заходи :)

Показать полностью
5

Про системные потоки в Linux

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

Про системные потоки в Linux

Один из стандартов для работы с системными потоками в Linux - это POSIX Threads (Pthreads), который определяет набор функций и типов данных для создания, управления и синхронизации потоков. Pthreads поддерживается большинством современных компиляторов C и C++ в Linux. Для использования Pthreads необходимо подключить заголовочный файл <pthread.h> и добавить флаг -lpthread при компиляции.

Для мониторинга системных потоков в Linux можно использовать различные инструменты, такие как top, htop, ps, pstree и другие. Эти инструменты позволяют просматривать информацию о процессах и потоках, такую как идентификаторы, приоритеты, состояния, использование ресурсов и т.д.

Несколько интересных фактов:

  • Системные потоки в Linux не отличаются от процессов с точки зрения ядра. Они имеют одинаковую структуру данных task_struct, которая хранит всю информацию о потоке или процессе. Разница между потоками и процессами заключается в том, что потоки совместно используют некоторые ресурсы, такие как адресное пространство, файловые дескрипторы и сигналы.

  • Системные потоки в Linux поддерживают модель N:1, 1:1 и M:N2. Это означает, что можно создавать многоуровневые потоки, которые сочетают в себе преимущества пользовательских и ядерных потоков. Модель N:1 означает, что несколько пользовательских потоков могут быть отображены на один ядерный поток. Модель 1:1 означает, что каждый пользовательский поток соответствует одному ядерному потоку. Модель M:N означает, что M пользовательских потоков могут быть отображены на N ядерных потоков.

  • Системные потоки в Linux могут иметь разные приоритеты и политики планирования. Приоритет - это число от 1 до 99, которое определяет, как часто поток должен получать процессорное время. Политика планирования - это алгоритм, который определяет, какой поток должен быть выбран для выполнения. Существуют три основные политики планирования для системных потоков в Linux: SCHED_OTHER, SCHED_FIFO и SCHED_RR. SCHED_OTHER - это стандартная политика для обычных процессов. SCHED_FIFO - это политика для реального времени, которая дает потоку высшего приоритета выполняться до тех пор, пока он не завершится или не заблокируется. SCHED_RR - это политика для реального времени, которая дает потоку высшего приоритета выполняться на определенный квант времени, а затем переключается на следующий поток с таким же приоритетом.

Интересные факты и фичи языков программирования у нас в канале, заходи :)

Показать полностью 1
Отличная работа, все прочитано!