Обновить
157.13

Системное программирование *

Обеспечение работы прикладного ПО

Сначала показывать
Порог рейтинга
Уровень сложности

Учимся летать: симуляция эволюции на Rust. 2/5

Уровень сложностиСредний
Время на прочтение20 мин
Количество просмотров6.1K



Это вторая часть серии статей по разработке симуляции эволюции с помощью нейронной сети и генетического алгоритма.






В этой статье мы заложим основы нашего проекта и реализуем простую FFNN (feedforward neural network — нейронная сеть прямого распространения), которая впоследствии станет мозгом. Мы также рассмотрим множество тонкостей и идиом, которые встречаются в коде Rust, включая тесты.


Готовы? Тогда поехали.

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

Изучаем freeware вирус на ПК

Уровень сложностиПростой
Время на прочтение3 мин
Количество просмотров8.4K

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

Читать далее

Коротко о «внезапном» релизе Zig версии 0.13.0

Время на прочтение3 мин
Количество просмотров2.3K

Резкий и дерзкий релиз версии 0.13.0. Очень удивил своей внезапностью. Нововведений немного, потому коротко. Но есть заметные изменения. О них чуть детальнее. Критически релиз связан с выходом LLVM версии 18. Эндрю Келли хотел скорее выпустить версию для синхронизации. Потому такой быстрый релиз. У вас может возникнуть вопрос, ведь я вроде указывал в прошлой статье, что произойдёт отказ от LLVM? Не так быстро это происходит. Повторюсь, релиз слишком «внезапный», чтобы произошли такие серьёзные изменения. По найденной информации (спасибо чатику в телеге) полного отказа всё же не произойдёт. Будет опциональная возможность подключать LLVM на тех платформах, где нет внутренней поддержки. В общем win-win ситуация.

Штош. К новостям...

Как составить функцию инициализации микроконтроллера (Топологическая сортировка графов утилитой Make)

Уровень сложностиПростой
Время на прочтение14 мин
Количество просмотров6.6K

В программировании микроконтроллеров приходится определять порядок инициализации прошивки. Порядок тут всегда имеет значение.

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

Чтобы всё это работало надо соблюдать правильный порядок инициализации.

В этом тексте я представил формальный алгоритм определения этого порядка.

По сути это топологическая сортировка ориентированного графа зависимостей программных компонентов.

Читать далее

Клеман Лефевр, создатель Linux Mint

Уровень сложностиПростой
Время на прочтение7 мин
Количество просмотров16K

Клеман Лефевр (Clement Lefebvre) — создатель Linux Mint. Долгое время это был самый популярный дистрибутив Linux, то есть по сути самая популярная в мире свободная ОС для настольных ПК.

Дистрибутив на базе Ubuntu и Debian обогнал по популярности и Ubuntu, и Debian. Хотя он не получает широкой медийной огласки, но если спросить самих линуксоидов, то многие порекомендуют Mint.
Читать дальше →

Учимся летать: симуляция эволюции на Rust. 1/5

Уровень сложностиСредний
Время на прочтение10 мин
Количество просмотров11K



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


Я расскажу вам, как работают простая нейронная сеть и генетический алгоритм, затем мы реализуем их на Rust и скомпилируем приложение в WebAssembly.


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

Эта серия состоит из нескольких статей:


  1. Введение (что мы будем симулировать, как работает нейронная сеть и генетический алгоритм).
  2. Реализация нейронной сети.
  3. Реализация генетического алгоритма.
  4. Реализация глаз, мозга и самой симуляции (в двух частях: первая, вторая).




Интересно? Тогда поехали.

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

Архитектура Xорошего Кода Прошивки (Массив-Наше Всё)

Уровень сложностиПростой
Время на прочтение10 мин
Количество просмотров8.8K

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

В этом тексте я написал о некоторых подходах к организации кода для микроконтроллеров.

Основная идея - массив наша основная скрепа.

Главные достоинства представленной архитектуры - это простота поддержки, сопровождения и масштабирования кодовой базы.

Читать далее

Туториал по Tokio. 2/2

Уровень сложностиСредний
Время на прочтение38 мин
Количество просмотров4.5K



Hello world!


Представляю вашему вниманию вторую часть туториала по Tokio.



Tokio — это асинхронная среда выполнения (runtime) кода Rust. Она предоставляет строительные блоки, необходимые для разработки сетевых приложений любого размера.

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

Туториал по Tokio. 1/2

Уровень сложностиСредний
Время на прочтение35 мин
Количество просмотров16K



Hello world!


Представляю вашему вниманию первую часть туториала по Tokio.



Tokio — это асинхронная среда выполнения (runtime) кода Rust. Она предоставляет строительные блоки, необходимые для разработки сетевых приложений любого размера.

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

7 ножей в спину web-отладки

Уровень сложностиСредний
Время на прочтение10 мин
Количество просмотров2K

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

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

Читать далее

Второе рождение DSP или запуск нейросетей на процессорах К1967ВН044 от «Миландр»

Уровень сложностиСредний
Время на прочтение7 мин
Количество просмотров6.6K
Нейросети постепенно и незаметно проникают во все уголки нашей жизни. От огромных сеток, которые могут обыгрывать в шахматы чемпионов мира или вести беседу на уровне интеллигентного человека, до совсем маленьких, реагирующих на голосовые команды или выделяющих лица на фотографии.

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

В этой статье поделюсь нашим опытом запуска нейросетей на DSP процессоре фирмы «Миландр» К1967ВН044, тем более что в новой ревизии появился Ethernet и можно организовать быстрый обмен данными, например, с ПК.


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

Все про композитинг в X11 | Linux

Уровень сложностиСредний
Время на прочтение13 мин
Количество просмотров9.5K

Приветствую, читатели хабра! Вы когда-нибудь задумывались над тем, что скрывается за красотой и динамичностью вашего рабочего стола? Какие компоненты реализовывают анимации и различные графические эффекты: блюр, тень, скругления, прозрачность? В X11 есть одна очень интересная программная единица - композитор. В этой статье мы получим общее понимание того, что это такое, как реализовано и для чего используется. Также, немного поговорим о том, как Xorg хранит информацию для отрисовки, затронем front/back буферы и узнаем, как компоненты рабочего стола обмениваются информацией между собой.

Читать далее

Rust 1.78.0: Диагностические атрибуты, проверка предусловий unsafe и детерминированное повторное выравнивание

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров2.7K

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


Если у вас есть предыдущая версия Rust, установленная через rustup, то для обновления до версии 1.78.0 вам достаточно выполнить команду:


$ rustup update stable

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


Если вы хотите помочь нам протестировать будущие выпуски, вы можете использовать канал beta (rustup default beta) или nightly (rustup default nightly). Пожалуйста, сообщайте обо всех встреченных вами ошибках.

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

Ближайшие события

Xv6: учебная Unix-подобная ОС. Заключение

Уровень сложностиСредний
Время на прочтение1 мин
Количество просмотров2.3K

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

Книга об xv6 на русском языке в формате PDF, HTML и EPUB.

Читать далее

Нововведения Zig версии 0.12.0, которые стоит упомянуть

Время на прочтение12 мин
Количество просмотров6.9K

По случаю выхода версии 0.12.0 языка Zig я снова решил написать статью об этом языке. И в этот раз о том, что изменилось в языке относительно версии 0.11.0. Сразу уточню, что я не буду описывать все изменения. Ссылка на примечания к выпуску под цифрой выше. Список изменений хоть и нетакой большой, как у версии 0.11.0, не все изменения мне интересны. Я опишу только те, что мне показались более важными для языка. Да, и если уж делать полный обзор, нужно давать подробные примеры - более детальные, чем те, что предложены в примечаниях к выпускам. Потому что не все изменения будут понятны сразу, нужно сделать сравнение. Это не претензия к авторам, просто есть детали, которые понятны только на более конкретных примерах (если прочитать между строк, то это я нифига не понял).

Читать далее

Разбираем на винтики учебный процессор TOY

Время на прочтение11 мин
Количество просмотров3.9K

А давайте возьмём простейший процессор и напишем его эмулятор на Python. Будем кормить его бинарниками и дебажить.

Статья для тех, кто всегда хотел разобраться в машинном коде, но боялся начать.

Читать далее

Xv6: учебная Unix-подобная ОС. Глава 9. Еще раз о параллельных потоках

Уровень сложностиСредний
Время на прочтение5 мин
Количество просмотров1.6K

Трудно добиться быстродействия ядра, организовать параллельную работу потоков и при этом писать ясный код. Блокировки помогают параллельным потокам работать корректно, но иногда блокировки использовать трудно. Глава расскажет о хитрых сценариях с блокировками в xv6 и о сценариях без блокировок.

Читать далее

Xv6: учебная Unix-подобная ОС. Глава 8. Файловая система

Уровень сложностиСредний
Время на прочтение21 мин
Количество просмотров3.4K

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

Файловая система xv6 предлагает Unix-подобные файлы, директории и пути и хранит данные на virtio-диске.

Глава расскажет, какие задачи решает файловая система xv6.

Читать далее

А в чем проблема работать с файлами?

Уровень сложностиСредний
Время на прочтение53 мин
Количество просмотров38K

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

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

Кто участвует в процессе записи

Ошибки, которые могут произойти

Что от нас зависит, а что нет

И самое главное - как это этого защититься

Читать далее

Rust 1.77.0: C-подобные строки, offset_of!, рекурсивные async fn, strip в release-профилях

Уровень сложностиПростой
Время на прочтение3 мин
Количество просмотров2.4K

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


Если у вас есть предыдущая версия Rust, установленная через rustup, то для обновления до версии 1.77.0 вам достаточно выполнить команду:


$ rustup update stable

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


Если вы хотите помочь нам протестировать будущие выпуски, вы можете использовать канал beta (rustup default beta) или nightly (rustup default nightly). Пожалуйста, сообщайте обо всех встреченных вами ошибках.

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

Вклад авторов