Как стать автором
Обновить
89
-0.6

Программист

Отправить сообщение

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

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

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

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

Читать далее
Всего голосов 9: ↑11 и ↓-2+13
Комментарии6

16-битная операционная система на коленках

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

В мире компьютерных наук мало что может сравниться с созданием собственной операционной системы. В этой статье мы погрузимся в увлекательный мир разработки операционных систем, создав 16-битную ОС с помощью языка ассемблера NASM под архитектуру процессоров Intel x86-64. Мы рассмотрим каждый этап разработки, начиная с основ и заканчивая реализацией ключевых компонентов.

Заменит Windows?
Всего голосов 34: ↑37.5 и ↓-3.5+41
Комментарии32

Калибровка магнитометра с помощью обобщённого фильтра Калмана

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


В настоящее время широко доступны датчики на основе магнитометров. Они позволяют легко получить направление на магнитный север (или истинный, если, конечно, вы учтёте магнитное склонение в вашей местности). Это может быть полезно для определения ориентации оси рысканья/курса беспилотных аппаратов. Одна из проблем магнитометров связана с их калибровкой, поскольку на магнитометр влияют находящиеся рядом с ним магнитотвёрдые (имеют собственное магнитное поле) и магнитомягкие (легко намагничиваются от внешнего магнитного поля, в том числе от поля Земли) материалы. Ниже я расскажу, как избавиться от влияния этих материалов и откалибровать магнитометр.
Читать дальше →
Всего голосов 17: ↑16.5 и ↓0.5+16
Комментарии17

О спинорах человеческим языком

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

Одной из самых больших сложностей в осознании квантовой механики для меня стали спиноры. Действительно, откройте любое популярное изложение, и вам навешают лапшу на уши о то что "спинор - это такой объект, который при повороте на 360 градусов превращается в свою противоположность". Полезное определение? Кажется не очень.

Ну хорошо, черт с ними с популярными изложениями. Откроем учебник физики. Представление векторов как матриц (почему, откуда?), их разложения по столбцам и строкам, какие-то стрелочки \left| \uparrow \right>, \left| \downarrow \right>, матрицы Паули, Гамма-матрицы, вся эта дичь вроде работает и ее можно использовать для решения уравнения Дирака, но выглядит ли это разумным человеческим языком?

Дело в том, что матрицы очень хорошо выполняют одну роль - роль представления разнообразных геометрических структур. Линейные операторы? Пожалуйста. Элементы алгебры Ли? Вот вам матрицы! Графы - матрицы смежности! Веса соединений нейросетей, и так далее, тысячи применений им! Однако же, глядя на матрицу вы ровным счетом ничего не можете сказать о той структуре, которую она представляет. И именно поэтому изложение спиноров в подавляющем большинстве литературы для меня выглядело какой-то взятой с потолка чепухой.

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

Читать далее
Всего голосов 26: ↑24 и ↓2+22
Комментарии17

Варим кашу из нечеткой логики и вариационных автоэнкодеров

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

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

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

Читать далее
Всего голосов 15: ↑15 и ↓0+15
Комментарии8

Attention is Not All You Need: как менялась архитектура трансформера

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

С момента выхода оригинальной статьи про трансформер прошло уже больше 7 лет, и эта архитектура перевернула весь DL: начав с NLP архитектура теперь применяется везде, включая генерацию картинок. Но та ли это архитектура или уже нет? В этой статье я хотел сделать краткий обзор основных изменений, которые используются в текущих версиях моделей Mistral, Llama и им подобным.

Читать далее
Всего голосов 21: ↑21 и ↓0+21
Комментарии4

Магия тензорной алгебры: Часть 1 — что такое тензор и для чего он нужен?

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

Содержание


  1. Что такое тензор и для чего он нужен?
  2. Векторные и тензорные операции. Ранги тензоров
  3. Криволинейные координаты
  4. Динамика точки в тензорном изложении
  5. Действия над тензорами и некоторые другие теоретические вопросы
  6. Кинематика свободного твердого тела. Природа угловой скорости
  7. Конечный поворот твердого тела. Свойства тензора поворота и способ его вычисления
  8. О свертках тензора Леви-Чивиты
  9. Вывод тензора угловой скорости через параметры конечного поворота. Применяем голову и Maxima
  10. Получаем вектор угловой скорости. Работаем над недочетами
  11. Ускорение точки тела при свободном движении. Угловое ускорение твердого тела
  12. Параметры Родрига-Гамильтона в кинематике твердого тела
  13. СКА Maxima в задачах преобразования тензорных выражений. Угловые скорость и ускорения в параметрах Родрига-Гамильтона
  14. Нестандартное введение в динамику твердого тела
  15. Движение несвободного твердого тела
  16. Свойства тензора инерции твердого тела
  17. Зарисовка о гайке Джанибекова
  18. Математическое моделирование эффекта Джанибекова


Введение



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



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



Читать дальше →
Всего голосов 60: ↑58 и ↓2+56
Комментарии89

It is Wednesday, my java dudes, или насколько сложно сделать свою JVM

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

Что делать, если накануне переезда повысилась тревожность, а привычные методы не приносят успокоения?

Конечно же вырабатывать дофамин через решение упоротых инженерных задач!

Мне стало интересно - насколько тяжко было бы сделать свой интерпретатор байт-кода Java? И насколько сложно было бы научить его “новым трюкам”?

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

Читать далее
Всего голосов 67: ↑66 и ↓1+65
Комментарии26

Как работает физика в играх

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

В мире видеоигр игровая физика играет важную роль, определяя реалистичность и взаимодействие игрового мира с игроком. Что же происходит под капотом? Какие алгоритмы и подходы используются в современных движках? И что же значит «застрять в текстурах»? (спойлер: чушь полнейшая)

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

Читать далее
Всего голосов 74: ↑74 и ↓0+74
Комментарии36

Proxmox 8. Настраиваем проброс видеокарты (GPU Passthrough). Выбор материнской платы на AM5 сокете

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


Уже прошел год как вышел Debian 12 Bookworm и, основанный на нем, Proxmox 8. Несмотря на тот факт, что мои предыдущие статьи по пробросу дискретной Видеокарты в виртуальную машину, в кол-ве 4-х на Хабре, частично все еще актуальны для последней версии Proxmox, в тематических чатах регулярно поступали обращения обновить статью, а так же выяснилось что, у тех кто пользуется такими инструкциями, есть определенное непонимание в нюансах, из-за чего приходится проходить вместе с ними всю цепочку действий заново.
Читать дальше →
Всего голосов 27: ↑26 и ↓1+25
Комментарии15

Современные команды и фичи Git, которыми стоит пользоваться

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

Мы, разработчики ПО, пользуемся git каждый день, однако большинство из нас применяет только самые основные команды, например, addcommitpush и pull, как будто на дворе по-прежнему 2005 год.

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

Читать далее
Всего голосов 75: ↑73 и ↓2+71
Комментарии29

Как написать свою маленькую ОС

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


Большое начинается с малого. Например, ядро Linux 0.0.1 состояло всего из 10 239 строк кода, из них 20% комментарии. Такой проект вполне может осилить студент в качестве курсовой или дипломной работы, программируя по вечерам на домашнем ПК (собственно, Линус и написал его во время учёбы в университете, когда вернулся из армии).

Если один студент смог это сделать тогда, то почему нельзя повторить? И действительно, в интернете есть даже специальные обучающие ресурсы для написания новых ОС и целые сообщества энтузиастов, которые помогают друг другу в этом непростом деле.
Читать дальше →
Всего голосов 108: ↑103 и ↓5+98
Комментарии25

Самое понятное объяснение Специальной теории относительности

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

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

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

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

Для иллюстраций я написал интерактивный визуализатор СТО, работающий в браузере. Ссылка на него и исходники проекта в конце статьи.

Читать далее
Всего голосов 386: ↑386 и ↓0+386
Комментарии388

Обмани меня, если сможешь

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

Первый игровой автомат Atari Pong, был выпущен в 1972 году. Это игра для двух игроков, основанная на настольном теннисе, где каждый игрок управляет ракеткой и должен отбить мяч на другую сторону. Если игрок промахивается, соперник набирает очки. Первый кто наберет 11 очков становится победителем. Kent Steven в своей книге "The Ultimate History of Video Games" (Вся история видеоигр) описывает, что проект был отдан инженеру Aлану Алькорну (Alan Alcorn), который до этого не занимался играми и игровыми автоматами. Учитывая, что в кармане основателя Atari было немногим больше 500$, и привлечь опытных разработчиков для работы над неизвестным проектом шансы были минимальные, то Нолан Бушелл представил это как выполнение контракта для General Electric.

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

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

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

Осторожно, много картинок
Всего голосов 26: ↑24 и ↓2+22
Комментарии15

Настоящее предназначение OpenAI SORA: как и зачем симулировать «Матрицу» для ChatGPT

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

Ну что, уже успели прочитать восхищения небывалым качеством видео от нейросетки SORA у всех блогеров и новостных изданий? А теперь мы вам расскажем то, о чем не написал никто: чего на самом деле пытается добиться OpenAI с помощью этой модели, как связана генерация видео с самоездящими машинами и AGI, а также при чем здесь культовая «Матрица».

Войти в симуляцию →
Всего голосов 289: ↑285 и ↓4+281
Комментарии120

Зачем в Scala трамплины и как их использовать

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

В этой статье директор департамента разработки российской компании «Криптонит» и «скалист» Алексей Шуксто рассказывает о специфической технике функционального программирования, которая называется «трамплин» (trampoline).

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

Достигается это следующим образом: когда функция вызывает саму себя, то вместо этого вызова управление передаётся другой функции — трамплину. Эта функция-трамплин вызывает исходную функцию с нужными параметрами и, если нужно, передаёт управление другой функции-трамплину. Таким образом, при рекурсивных вызовах функций никакая информация не сохраняется на стеке, а управление всегда передаётся между функциями-трамплинами.

Чтобы вникнуть в детали, поясним ещё несколько моментов:

Читать далее
Всего голосов 16: ↑16 и ↓0+16
Комментарии6

Константность в C++

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


Продолжаем серию «C++, копаем вглубь». Цель этой серии — рассказать максимально подробно о разных особенностях языка, возможно довольно специальных. Это седьмая статья из серии, список предыдущих статей приведен в конце в разделе 10. Серия ориентирована на программистов, имеющих определенный опыт работы на C++. Данная статья посвящена концепции константности в C++.


Переменные являются основой любого языка программирования. Если значение переменной нельзя изменить после инициализации, то такие переменные называются неизменяемыми (immutable) переменными или константными переменными или просто константами. Константные переменные в том или ином виде поддерживаются во всех языках программирования и играют в них важную роль. Такие переменные помогают компилятору оптимизировать код, улучшают читаемость и надежность кода, позволяют выявлять бОльшее количество ошибок на стадии компиляции. Константы помогают решать проблемы, связанные с многопоточным доступом к переменным. Использование константных переменных влияет на проектные решения в объектно-ориентированном программировании, а функциональное программирование изначально исходит из неизменяемости используемых переменных.


В C++ концепции константности уделяется значительное место. Для переменных используется два вида константности, имеются ссылки и указатели на константу, константные функции-члены, константные итераторы. Попробуем разобраться во всех этих понятиях.

Читать дальше →
Всего голосов 16: ↑16 и ↓0+16
Комментарии24

DIY клавиатура из фанеры

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

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

Читать далее
Всего голосов 72: ↑71 и ↓1+70
Комментарии33

SimulIDE: открытый симулятор цифровых схем и микроконтроллеров

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

В этой заметке я решил рассказать о SimulIDE. Это относительно новое программное средство с открытым исходном кодом, предназначенное для моделирования 8-битных микроконтроллеров семейств AVR и PIC, а также прочих электронных схем. По интерфейсу SimulIDE напоминает Proteus. SimulIDE кроссплатформенный и работает под Linux, Windows и Mac. Далее будут рассмотрены основные возможности этого симулятора и рассказано о моих личных впечатлениях от работы с данной программой.

Читать далее
Всего голосов 57: ↑57 и ↓0+57
Комментарии35

Lily58 спустя месяц

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

На Новый год в подарок я получил детали для сплит-клавиатуры. Спустя полторы недели мне удалось её собрать, и начался мой интересный путь в мире кастомных клавиатур. Подробнее о процессе сборки и первых впечатлениях я рассказывал в предыдущей статье. Теперь представляю вам опыт использования спустя месяц.

Читать далее
Всего голосов 13: ↑13 и ↓0+13
Комментарии21
1
23 ...

Информация

В рейтинге
Не участвует
Откуда
Белград, Сербия
Зарегистрирован
Активность

Специализация

Software Developer, ML Engineer
Kotlin
Scala
Java
Python
Neural networks
Algorithms and data structures
Android development
OpenGL