Pull to refresh
4
0

Пользователь

Send message

Путешествие в мир эмуляторов микропроцессоров

Level of difficultyMedium
Reading time24 min
Views14K

Всем привет!

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

Тема разработки эмуляторов олдскульных микропроцессоров типа того же Intel 8080 не нова. Если вы уже разбираетесь в вопросе, то для вас этот пост не будет чем-то новым, разве что вы увидите еще один подход к реализации такого проекта. Для тех, кто ничего об этом не слышал – прошу под кат.

Читать далее

Физика + нейросети: суть алгоритма, который принёс Хинтону и Хопфилду Нобелевскую премию

Level of difficultyMedium
Reading time6 min
Views16K

Аналитический центр red_mad_robot собрал для вас главное, что нужно знать о Нобелевской премии 2024 по физике.

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

Читать далее

Некоторые малоизвестные фичи, фокусы и причуды языка C

Reading time19 min
Views35K

В этом посте разобраны некоторые фокусы, причуды и фичи языка C (некоторые из них – весьма фундаментальные!), которые, казалось бы, могут сбить с толку даже опытного разработчика. Поэтому я потрудился сделать за вас грязную работу и (в произвольном порядке) собрал некоторые из них в этом посте. Примеры сопровождаются ещё более вольными краткими пояснениями и/или листингами (некоторые из них цитируются).

Конечно же, здесь я не берусь перечислять абсолютно всё, так как факты из разряда «функция nan() не может устанавливать errno, поскольку в определённых ситуациях поведёт себя как strtod()» не слишком интересны.

ВНИМАНИЕ: сам факт попадания тех или иных вещей в эту подборку  не означает автоматически, что я рекомендую или, наоборот, не рекомендую ими пользоваться! Некоторые из приведённых примеров никогда не должны просачиваться за пределы списков наподобие этого, тогда как другие примеры невероятно полезны! Уверен, что могу положиться на ваш здравый смысл, дорогие читатели.

Читать далее

Zero-cost Property в С++

Level of difficultyMedium
Reading time7 min
Views2.3K

Расскажу об одном решении которое имеет больше смысла в качестве упражнения а не практической пользы. Постановка задачи звучит так: Хочу получить в C++ семантику property как в C# и без накладных расходов.

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

К слову, компиляторы Microsoft имеют способ описать property но это не является частью стандарта C++.

Сразу отмечу что property получились с значительными ограничениями и больше подходят для имитации Swizzling из GLSL. По этому буду воспроизводить маленький кусочек vec2 а именно property yx которое должно возвращать исходный вектор с свапнутыми полями. Далее vec2 буду иногда называть контейнером, как более общий случай. Когда упоминаю property, буду подразумевать поле внутри контейнера, то есть yx в конкретном примере. Использую стандарт С++11

Желаемое поведение:

Далее примеры кода и все остальное

Простая нейронная сеть на C++

Level of difficultyEasy
Reading time5 min
Views25K

Всем привет!

При помощи нейронной сети решил проблему классификации фигур на изображениях размера 7 на 7 пикселей. Задача решалась в рамках студенческой лабораторной работы. Статья приводится в качестве руководства для решения подобных академических задач.

Читать далее

Прологику и ИИ

Level of difficultyEasy
Reading time3 min
Views4.1K

Демо выразительной мощи математики. Эта наука предлагает экстремально компактный способ для представления мыслей. И картинка это подтверждает: всего в двух абзацах определена вся суть аристотелевской логики (силлогистики, Ὄργανον), которая в оригинале занимает несколько книг.Формальная логика развилась к эпохе ЭВМ настолько, что стала основой одних из первых систем ИИ, в первую очередь экспертных систем и баз знаний.

Читать далее

Ассемблер для программистов на языках высокого уровня: Hello World

Level of difficultyMedium
Reading time6 min
Views35K

Если вы начинали изучение программирования с JavaScript, Rust, C или любого другого высокоуровневого языка, то ассемблерный код может показаться вам непонятным или даже пугающим.

Рассмотрим следующий код:

section .data
  msg db "Hello, World!"

section .text
  global _start

_start:
  mov rax, 1
  mov rdi, 1
  mov rsi, msg
  mov rdx, 13
  syscall

  mov rax, 60
  mov rdi, 0
  syscall

К счастью, по второй строке мы можем понять, что он делает.

Здесь нет ничего привычного нам: мы не видим ни условных операторов, ни циклов, нет никакого способа создавать функции… Да даже у переменных нет имён!

С чего же вообще начать?

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

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

Телеграм бот на С++ сложно? Давайте развеем этот миф

Level of difficultyEasy
Reading time7 min
Views9.3K

Небольшая статья по настройке серверной части для телеграм бота, на базе языка программирования С++ и библиотек TgBot и sqlite3.

Продолжить чтение...

CodeChecker: анализируем большой проект на С++ быстро, эффективно и бесплатно

Reading time8 min
Views11K

Привет, Хабр! Меня зовут Давид, еще недавно я был стажером YADRO, а сейчас работаю в отделе разработки ПО поддержки сетевой аппаратной части. У нас в команде есть большой проект на более 100 000 строк, написан на C++ (и частично на С). Код переписывался много раз, а за самим проектом на правах легаси особо никто не следил: работает — не трогай. Когда я пришел в команду, у меня была задача: привести код в порядок и отловить ошибки, которые пропускает компилятор — например, возможное разыменование нулевого указателя, неинициализированные переменные или простые опечатки. 

Одним из очевидных решений было использование статического анализатора. Выбрали довольно известное коммерческое решение, но долгие прогоны не привели ни к чему дельному. Решили поэкспериментировать с другими вариантами статических анализаторов, сделав ставку на open source. Поиски привели к инфраструктуре CodeCheсker, которая предоставляет удобный интерфейс запуска и настройки статических анализаторов через аргументы командной строки. С помощью инструмента удалось достичь результатов, которые значительно превысили значения, полученные на коммерческом решении.  

Под катом расскажу, что же такое CodeCheсker, как с ним работать и почему его точно стоит попробовать на большом проекте.

Читать далее

Программирование на C в Linux на примере создания командной оболочки: часть 2

Level of difficultyMedium
Reading time55 min
Views10K

Я решил недавно улучшить свой навык владения C, путем написания проектов. Самая первая мысль, которая пришла мне на ум — это командный интерпретатор, командная оболочка, shell проще говоря. А также я расскажу о системе сборки make, и о том, как правильно писать и документировать C-код.

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

Да-да, мы превратим наш велосипед в мопед! Я вынес из прошлой статьи итоги, и попытался решить все проблемы и замечания. Продолжаем погружение в пучины разработки под Linux!

Читать далее

Книга: «Алгоритмы? Аха!»

Reading time6 min
Views11K
image Привет, Хаброжители!

Зачем читать скучные описания алгоритмов и продираться через нагромождение формул? Практические примеры и забавные объяснения позволят моментально разобраться с самыми сложными задачами, а юмор и прекрасные иллюстрации не дадут вам «заснуть» над книгой. Вы словно читаете короткие истории или пытаетесь справиться с головоломкой, постигая при этом суть алгоритмов и ощущая их красоту.

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

Реверс-инжиниринг ресурсов игры LHX. Часть 1

Level of difficultyEasy
Reading time7 min
Views4.3K

В этом цикле статей я расскажу о том, как занимался реверсом данных из DOS-игры LHX Attack Chopper - симулятора боевых вертолетов от EA и одной из самых любимых игр моего детства (как оказалось, не я один такой - вот современный оммаж играм такого жанра той эпохи).

Это повествование не претендует ни на художественную, ни на, скорее всего, техническую ценность. Единственная изюминка описываемого мероприятия - это то, что я так до сих пор толком и не знаю ни ассемблера (гуглеж не в счет), ни архитектуры самого DOS (таблицы векторов прерываний, модели памяти - вот это вот все). То есть, это как нормальный реверс, только без реверса. 

Будет парочка картинок

Obsidian+Github вместо Notion: синхронизация, бекап и версионность (3-в-1)

Level of difficultyEasy
Reading time9 min
Views105K

О том, как сделать прозрачную синхронизацию заметок Obsidian между устройствами (Desktop, Android, iOS) через GitHub:

1. Без сторонних приложений (вроде iCloud, SyncThing, Termux и пр)
2. Бесплатно
3. Бонусом — резервная копия: как самих заметок, так и истории изменений.

В результате получается полноценная замена Notion: структурированные заметки с автоматической синхронизацией между устройствами.

Инструкция:

Руководство Google по стилю в C++: 2019 — 2024

Level of difficultyEasy
Reading time6 min
Views14K

Все мы при написании кода пользуемся правилами оформления кода. Иногда изобретаются свои правила, в других случаях используются готовые стайлгайды. Однако, любой стайлгайд со временем корректируется и дорабатывается: иногда этому способствуют обновление стандартов языка, иногда меняются тенденции.
В статье приведены изменения Руководства Google по стилю в C++ за 5 лет: с 2019 по 2024.
Краткое содержание изменений:
+ C++20
- NULL
+ концепты 
- #pragma
+ constinit
- std:hash
+ consteval
- u8
+ аргументы-ссылки
- ENUM_VALUE_NAME
+ повесточка и "they" в единственном числе
- здравый смысл

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

Программирование на C в Linux на примере создания своей командной оболочки

Level of difficultyMedium
Reading time27 min
Views21K

Привет, хабр! Язык программирования C — основополагающий, как я считаю. И его знать, нет, не обходимо, но довольно желательно. Большинство языков отсылают к C, и зная C (или C++) другой язык будет даваться намного легче.

Я решил недавно улучшить свой навык владения C, путем написания проектов. Самая первая мысль, которая пришла мне на ум — это командный интерпретатор, командная оболочка, shell проще говоря. А также я расскажу о системе сборки make, и о том, как правильно писать и документировать C-код.

В этом туториале я буду использовать компилятор CLANG, а не GCC, и расскажу его преимущества

Итак, для создания своего шелла на C для Linux вам понадобится простой советский копеечный...

Узнать

Поделить нельзя — умножить или алгоритм быстрого деления по методу Ньютона-Рафсона

Level of difficultyMedium
Reading time9 min
Views14K


Все мы в школе проходили деление «столбиком» — простой алгоритм, который несложно реализовать, вот только не очень быстрый. В прошлый раз мы рассматривали, как компилятор оптимизирует деление в случаях, когда делитель известен во время компиляции, но применение его напрямую, чтоб оптимизировать деление для делителей, определямых в run-time, невозможно: вычисление констант сдвига и умножения само по себе требует деления.

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

Как неожиданный мюон произвёл революцию в физике частиц

Level of difficultyEasy
Reading time11 min
Views7.6K

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

У более тяжёлых элементов также и заряд был больше, но аргон и калий были исключениями: заряд у аргона был всего +18 единиц, а масса ~40 атомных единиц массы, а у калия был заряд +19 единиц, и масса ~39 единиц. Открытие нейтрона в 1932 году решило эту проблему, и мы узнали, что периодическую таблицу стоит отсортировать по количеству протонов в атомном ядре. Оказалось, что некоторые виды радиоактивного распада — бета-распады — не сохраняют энергию и импульс, что привело к гипотезе Паули 1930 года о нейтрино, которое не было открыто ещё 26 лет. А уравнение Дирака предсказывало отрицательные энергетические состояния, которые соответствовали аналогам антиматерии для таких частиц, как электрон: позитрону.

Читать далее

Сущностный анализ манускрипта Войнича с инженерной точки зрения

Level of difficultyEasy
Reading time18 min
Views20K

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

 Возраст книги

По результатам радиоуглеродного анализа фрагментов манускрипта, химик и археометрист Аризонского университета Грег Ходжинс установил, что пергамент для манускрипта был выделан между 1404 и 1438 годами в эпоху раннего Возрождения [2]. Очевидно, что сама книга могла быть написана и позже.

Читать далее

Создание приложения под Мурмулятор ОС (1)

Level of difficultyHard
Reading time4 min
Views3.9K

Как я писал ранее (https://habr.com/ru/articles/839976/), Murmulator - одноплатный ультрадешевый микрокомпьютер на основе платы Raspberry Pi Pico (пика), которая, в свою очередь, основана на микроконтроллере - RP2040.

RP2040 - одна из наиболее известных двухъядерных реализаций ARM Cortex-M0+ с 264 КБ встроенной SRAM памяти и от 2-ух до 16-ти МБ flash-памяти подключаемых по QSPI интерфейсу, распаянной на плате пики.

Отдельную статью-тутуриал я посвятил использованию Мурмулятор ОС (МОС): https://habr.com/ru/articles/840052/ с точки зрения пользователя. Теперь имеет смысл описать процесс создания приложений под МОС.

МОС (рассматриваем текущую версию 0.2.7) поддерживает три вида приложений:

Читать далее

Симкод — современный язык ассемблера

Reading time33 min
Views17K

Начну с определений.

Симкод — это последовательность симкоманд.

Симкоманда — это символьная машинная макрокоманда с Си-подобным синтаксисом.

Например, ассемблерной команде add rax, rbx соответствует симкоманда rax += rbx.

Симкод позволяет выразить любой ассемблерный код [и как следствие машинный], только в более человекочитаемом виде. Однако, симкод не пытается назначить символьное обозначение для абсолютно каждой ассемблерной команды — те команды ассемблера, которые не имеют символьной записи, оставляются как есть. Таким образом, симкод является надмножеством ассемблера.
Читать дальше →

Information

Rating
7,205-th
Registered
Activity