Обновить
157.16

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

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

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

Rust 1.80.0: типы LazyCell, LazyLock, проверяемые имена и значения cfg, эксклюзивные диапазоны в шаблонах

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

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


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


$ rustup update stable

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


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

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

Как я стал Сисадмином

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

Расскажу историю от своего имени, меня зовут Евгений Николаевич Рычков, и вообще я стал сначала фулстек-разработчиком. Но история именно про то, как я в итоге стал сисадмином, и даже сам не сразу это осознал.

Все очень сложно, это типичная история, когда ты нетипично закончил не только престижный ВУЗ, красующийся в рейтинге по России и миру, но и ездил по крутым грантам, таким как Eranet Mundus и Erasmus, стажировался зарубежом, получил гос. премию за вклад в развитие науки и экономики Красноярского края.

Читать далее

Xv6: увеличим размер страниц виртуальной памяти с 4Кб до 2Мб

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

Научим xv6 работать с виртуальными страницами размера 2 Мб, узнаем, как компоновщик создает образ памяти программы и научим файловую систему xv6 справляться с большими файлами.

Пример: Пусть программа занимает 4 Мб памяти. Размер страницы - 4 Кб. Программа займет (1024 * 1024 * 4) / (1024 * 4) = 1024 страницы памяти. ОС избавит процессор от лишней работы, если увеличит размер страницы до 2 Мб - тогда программа займет 2 страницы.

Читать далее

Делаем новых людей за 12 строк кода: как с Python ускорить подготовку демо-стенда по HR планированию и соблюсти закон

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

Недавно мы с командой решили проверить возможность переноса существующих решений на базе Oracle Hyperion Planning на платформу «Форсайт», чтобы примерно понимать сложность, трудозатраты и сроки такого рода проектов. Второй задачей стало создание демо‑стенда для бюджетирования HR ресурсов в максимально короткие сроки. Тут звезды сошлись идеально: у нас есть готовая реализация на Oracle Hyperion Planning, есть дедлайн, который как всегда близок, а значит пришло время делать проект.

Читать далее

Недокументированные функции загрузки DLL. Стек вызовов LoadLibrary

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

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

Читать далее

Протокол FAST: от технаря технарям

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

Внимание! Пожалуйста, уберите от экранов всех программистов в финансовой области с опытом менее 15 лет — мы будем обсуждать настоящие чудеса инженерии.

Полный газ!

История о том, как Graphviz и бор взломали шифр от Sony

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

Мою первую статью я желаю посвятить истории о том, как я решил заняться исследованием часто встречающихся в модулях PlayStation Portable непонятных байтовых строк. Никакой документации в Homebrew коммьюнити найти не удалось, так что я взялся за дело сам.

Как это было

Драйвер Ethernet для xv6

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

Xv6 - учебная ОС - рассказывает об идеях, что лежат в основе операционных систем.

Научим xv6 работать в сети, познакомимся со стандартом виртуальных устройств VirtIO, деревом устройств DeviceTree, технологией Ethernet, сетевыми протоколами, возведем сетевой мост между виртуальными машинами.

Читать далее

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

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



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





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

Послушный YubiKey

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

Подарили мне как то YubiKey 5C Nano. Попользовался пару дней и захотелось автоматизировать работу с ним.

Читать далее

Андреас Клинг, его операционная система SerenityOS и браузер Ladybird

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


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

Взять к примеру шведского программиста Андреаса Клинга (Andreas Kling). В 2018 году он вышел из государственной клиники реабилитации наркоманов после трёхмесячного курса — и в качестве хобби начал разработку операционной системы SerenityOS. Нужно было чем-то занять свободное время и избавиться от посторонних мыслей. Создание новой ОС вполне подходит для такой задачи.

За несколько лет SerenityOS стала одним из крупнейших опенсорсных проектов в мире с тысячами контрибуторов. Приятный интерфейс в стиле 90-х, Unix-подобное ядро и лучшие идеи из других ОС — вот рецепт успеха.
Читать дальше →

Firmware в Linux. Коротко и своими словами

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

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

Disclaimer:
Материал не является сборником best practices и не претендует на фундаментальный труд. Это шпаргалка. Если угодно - application note в свободной форме. Основная задача материала - "сделать короткую статью, которая помогла бы лично мне быстро разобраться, если бы я впервые столкнулся с темой". Если вы знаете что-то лучше - дополнения и замечания по существу приветствуются. Мотивацией для написания послужила недавно встреченная статья, которая как раз объясняла эти аспекты не очень хорошо.

Читать далее

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

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



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






В сегодняшнем выпуске:


Сексуальные многоугольники





Сертифицированные ISO диаграммы ASCII


------------
| \...%....|
|   \......|
|    @>....|
|      \...|
|        \.|
------------

Клевые числа




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

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

В погоне за скоростью. Оптимизация нейросетевых вычислений на процессоре К1967ВН044 компании «Миландр»

Уровень сложностиСложный
Время на прочтение11 мин
Количество просмотров3.2K
В статье «Второе рождение DSP или запуск нейросетей на процессорах К1967ВН044 от «Миландр» мы рассмотрели в целом задачу адаптации нейросетей для DSP процессора К1967ВН044. Были вкратце описаны особенности процессора и возможные методы для эффективного его использования. В этой статье мы постараемся более детально представить один из таких методов, а именно – применение библиотеки ассемблерных функций для оптимального вычисления типичных операций, встречающихся в нейросетях.



Поскольку теперь будут появляться примеры кода на ассемблере, придётся хотя бы в общих чертах его понимать. Как было совершенно справедливо отмечено, данный процессор является развитием архитектуры TigerSHARC, так что программисты, знакомые с ним, без труда узнают этот код. Для тех, кто не имел с ним дела, можно порекомендовать «Руководство по программированию» (https://ic.milandr.ru/upload/iblock/77f/77fac90e79704374aaccc4b44f3244d6.pdf), в котором дано подробное описание всех возможностей процессора, причём с учётом многочисленных доработок, выполненных фирмой «Миландр».

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

FUSE: как написать свою файловую систему

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

Меня зовут Максим, я ведущий разработчик в VK. Занимаюсь инфраструктурой доставки электронной почты в проекте Mail.ru. Наша команда разработала и довела до эксплуатации файловую систему (ФС) на FUSE в рамках проекта распределённой почтовой очереди. В проекте требовалось реализовать сетевую ФС, которая сохраняет данные в трёх копиях, в разных ЦОДах. Цель — повысить отказоустойчивость, чтобы даже полный выход из строя одного ЦОДа не приводил к нарушениям SLA. Эта статья для всех, кто интересуется файловыми системами и хранением данных. Мы обсудим:

- зачем писать свою ФС;

- как написать свою ФС с помощью фреймворка FUSE;

- какие подводные камни есть у эксплуатации FUSE в production.

Эта статья — результат трёх лет разработки ФС. Сейчас самое время заварить чай, рассказ будет долгим. 

Заварить чай и читать

Почему может не работать отладка на плате XIAO BLE

Уровень сложностиСредний
Время на прочтение9 мин
Количество просмотров1.6K
Как обычно, ничто не предвещало веселья. Шла рутинная работа. Надо было освоить работу с ОС Zephyr в контроллере NRF52 на примере забавной платы из семейства «Сяо» (а именно XIAO BLE). Вообще, с этой платой принято работать из среды Arduino, но задача была использовать именно Zephyr, а значит — среду VS Code плагином NRF Connect Plugin. Заказанная плата приехала, к точкам для доступа по SWD был припаян разъём программатора… Потом я немножко похулиганил… В итоге, содержимое флэшки в контроллере было стёрто.

Но что нам стоит восстановить загрузчик? С сайта производителя был скачан актуальный HEX-файл, он был залит в плату… Дальше был собран типовой демо проект Blinky… И вечер перестал быть томным, так как проект не запустился на отладку.

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


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

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

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



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






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


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


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

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

Rust 1.79.0: встроенные const, ограничения в ассоциированном типе, продление автоматического времени жизни

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

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


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


$ rustup update stable

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


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

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

Что такое PID 0

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

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

Вот с какого невинного вопроса всё началось:

А почему UID начинаются с 0, но PID начинаются с 1?

Если совсем коротко: в Unix PID (идентификаторы процессов) начинаются именно с 0! PID 0 просто не отображаются в пользовательском пространстве через традиционные API.  PID 0 запускает ядро, а затем практически уходит на покой, только немного участвует в работе планировщика процессов и в управлении питанием. Кроме того, на просторах Интернета доминирует заблуждение о PID 0, всё из-за одного ошибочного утверждения в Википедии, которому уже 16 лет.

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

Но, конечно же, любой желающий может просто загуглить, что такое PID 0, верно? Зачем мне вообще всё это писать?

Читать далее

Почём синтаксический сахар в графических языках программирования?

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

Графические языки программирования

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

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

Что говорят стандарты?

Обратимся к  МЭК 61131-3. Там описано два чисто графических языка программирования:

 FBD (Function Block Diagram) — графический язык программирования стандарта МЭК 61131-3. Предназначен для программирования программируемых логических контроллеров (ПЛК)

LD (Ladder diagram) — язык релейно-контактной логики.

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

Читать далее

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