Search
Write a publication
Pull to refresh
22
0.6
Даниил Солопов @dan_sw

Software Engineer, Bachelor of Computer Science

Send message

Написание собственной работоспособной ОС за полгода

Reading time4 min
Views90K
image

Предыстория


Здравствуйте! Всех категорически приветствую, сегодня хотел бы рассказать Вам о своём опыте написание работоспособной ОС под архитектуру x86.

Как-то весенней ночью у меня родилась гениальная идея — попробовать себя в написании собственной ОС, которая может позволить запускать программы, работать с устройствами, да и в общем выжимать всю мощь из Intel'овской архитектуры в своих нуждах: к примеру, для своей фабрики или чего-либо иного. Моей целью было и есть написание такой ОС, которая могла бы позволить максимальную производительность для каких-то конкретных задач, не тратя процессорное время на всяческие излишества. В основном я преследую лишь спортивный интерес, получение опыта для себя в системном программировании и написания драйверов для устройств, которые используются повсеместно. Что из этого вышло — решать вам, сразу говорю, что не надо писать комментарии про создание собственного дистрибутива линукса, и преследовал интерес написать всё «From scratch» — с нуля, дабы хорошо погрузиться в тему ОСдева. Сразу хочу выразить огромную благодарность Бенджамину Лунту и форуму OSDev, так же как их Вики. Бен помог мне разобраться с EHCI, что несомненно внесло огромный вклад в мою ОС — USB устройства, они везде! Так же передо мной стояла задача создать собственную архитектуру, удобную мне, не исключая использование стандартов ELF-файлов.
Читать дальше →

Написание ОС: Многозадачность

Reading time3 min
Views11K
image
Доброго времени суток, дорогой читатель, скорее всего, ты видел мою предыдущую статью о том, что самому можно написать работоспособную ОС за достаточно короткий срок. Что же, сегодня мы поговорим о реализации многозадачности в моей ОС.
Читать дальше →

Написание собственного неплохого менеджера памяти

Reading time4 min
Views16K
Доброе время суток, читатель. Возможно, вы уже читали мои предыдущие статьи, и знаете, что я занимаюсь написанием собственной ОС. Сегодня мы поговорим, и рассмотрим несложный и достаточно быстрый алгоритм для управления памятью — менеджер памяти — критически важная часть ОС, ведь быстрая, надежная и нерастратная работа с памятью залог хорошей ОС.
Искал я несложные и адекватные идеи для менеджера и в рунете, и на англоязычных сайтах — всё никак не мог найти никаких хороших статей про адекватный, работающий не за O(N) аллокатор. Что же, сегодня мы рассмотрим более хорошую идею для менеджера памяти, продолжение помещаю под кат.
Читать дальше →

Вирт, Кормен и диалекты Basic: что изучить про алгоритмы и структуры данных разработчикам на С++

Level of difficultyEasy
Reading time3 min
Views5K

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

Статьи, лекции и курсы из подборки помогут опытным специалистам «вспомнить все» перед собеседованием или погрузиться в тему алгоритмов, если вы пока в ней не сильны. 

Читать далее

Решаем задачу асинхронного ввода-вывода с библиотекой Asio

Level of difficultyMedium
Reading time10 min
Views9.9K

Привет, Хабр! Меня зовут Илья Казаков, я C++ разработчик в команде систем хранения данных  компании YADRO, одна из моих задач — реализация эффективных IO-bound программ под Linux. 

На одном из проектов мы с командой использовали Asio — библиотеку C++ для сетевого и низкоуровневого программирования ввода-вывода. Она предлагает свою асинхронную модель. Технология отлично справилась с нашей задачей, и я хочу поделиться с вами опытом ее использования. Под катом расскажу, какие решения я рассматривал для асинхронного ввода-вывода и почему остановился на Asio.

Узнать больше →

Чем опасен чистый RSA? Разбираем подводные камни

Level of difficultyHard
Reading time9 min
Views16K

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

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

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

Читать далее

Как работают веб-приложения

Reading time6 min
Views245K
Это статья для начинающих разработчиков и тех, кто хочет немного ориентироваться в терминах и технологиях современных веб-приложений. В статье написано о том, чем веб-приложения отличаются от сайтов, какие бывают веб-приложения, из чего они состоят и как работают.
Читать дальше →

Обзор новых Open Source LLM. Или как локально запустить аналог ChatGPT

Level of difficultyEasy
Reading time5 min
Views69K

На прошедшей неделе вышло сразу несколько новых Open Source LLM. Разбираемся, что в них особенного, а также как и зачем их запускать локально.

Читать далее

Поиск секретов в программном коде (по энтропии)

Reading time3 min
Views3.5K
Недавно в открытом доступе появился новый инструмент для поиска приватной информации в открытом коде. Это Entropy — утилита командной строки, которая сканирует кодовую базу на предмет строк с высокой энтропией. Предположительно, такие строки могут содержать секретную информацию: токены, пароли и др.

Подход логичный. Пароли и токены — это по определению строки с высокой энтропией, поскольку они создаются с помощью генераторов случайных или псевдослучайных чисел. Символы в такой последовательности в идеале непредсказуемы.
Читать дальше →

Ахиллесова пята ИИ: простая задача, обнажившая слабости всех языковых моделей

Level of difficultyEasy
Reading time5 min
Views60K

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

Читать далее

Управляем роботами из VR

Level of difficultyMedium
Reading time17 min
Views3.5K

Удаленная работа уже давно шагает по миру и сильнейшее влияние оказывает все же на ИТ и около ИТ индустрию, а что же ждет сотрудников, которые не могут перейти на «удаленку» из-за специфики задач? А ждет их все то же самое – они (почти) все так же отправлятся на «удаленку», и поможет этому событию робототехника и VR!

За последнее десятилетие прогресс в робототехнике и иммерсивных технологиях(VR в частности) просто невероятен. Многие компании уже давно работают в этой области – OhmniLabs, Double Robotics, GITAI, Telexistence и т.д., а такие акции как ANA Avatar XPRIZE еще сильнее стимулируют развитие направления.

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

Пощупать

Как языковая модель предсказывает следующий токен (часть 1)

Reading time27 min
Views8.4K

Я обучил небольшой (порядка 10 миллионов параметров) трансформер по превосходному туториалу Let’s build GPT: from scratch, in code, spelled out Андрея Карпати. После того, как он заработал, я захотел максимально глубоко понять, как он устроен внутри и как создаёт свои результаты.

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

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

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

Читать далее

Квадрокоптер как метод быстрого развёртывания Wi-Fi сетей

Reading time5 min
Views16K
image

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

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

Передача данных между фрагментом и BottomSheetDialogFragment с использованием Dagger и Navigation Component

Level of difficultyMedium
Reading time2 min
Views1.4K

Передача данных между фрагментом и BottomSheetDialogFragment может быть эффективно организована с использованием Dagger и Navigation Component, избегая использования передачи данных чрез конструктор или интерфейс, а также SharedViewModel и Hilt. Данный подход позволяет сосредоточиться на интеграции зависимостей и управлении состоянием через стандартные инструменты.

Читать далее

Асинхронный веб: WebSocket, Server-Sent Events, Long Polling и Short Polling

Level of difficultyMedium
Reading time13 min
Views28K

Веб-разработка часто требует реализации механизмов обновления контента на странице в реальном времени. Существуют различные сценарии, где это необходимо, например, отображение прогресса выполнения тяжелых задач на бекенде, обновление каких-либо часто меняющихся данных, будь то курсы валют или мониторинг какой-то активности, чаты, различные уведомления. Эти сценарии объединяет одна общая особенность: источник события необходимости обновления данных находится не на клиентской стороне, поэтому мы хотим получать события с бекенда. В данной статье мы рассмотрим четыре популярных подхода к реализации этой функциональности: WebSocket, Server-Sent Events (SSE), Long Polling и Short Polling.
Мы проанализируем каждый метод, выявим их плюсы, минусы и сложность реализации.

Читать далее

Руководство по программированию сокетов на Python. От введения до работающего примера

Reading time10 min
Views88K


К концу руководства вы освоите основные функции и методы модуля Python socket, научитесь применять пользовательский класс для отправки сообщений и данных между конечными точками и работать со всем этим в собственных клиент-серверных приложениях. Материалом делимся к старту курса по Fullstack-разработке на Python.
Посмотреть первую часть

Книга: «Алгоритмы и структуры данных на Python»

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

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

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

«Range-based for»: что интересного лежит на поверхности

Level of difficultyMedium
Reading time8 min
Views6.9K

Новый синтаксис для циклов for в C++ появился уже давно - более десяти лет назад в стандарте C++11. Идея, скрывающаяся за этим синтаксисом, не является сколь-нибудь запутанной, и практически все, кто интересуются новыми свойствами языка, быстро разобрались с тем, как этим синтаксисом пользоваться и, что важнее, как создавать свои типы, совместимые с синтаксисом range-based for. Однако, как мне кажется, именно в вопросах взаимодействия с пользовательскими типами спецификация range-based for содержит несколько интересных деталей, лежащих практически на поверхности, которые остаются незамеченными просто потому, что идиоматические подходы прекрасно обходятся и без них. Возможно, кому-то будет интересно взглянуть на них повнимательнее.

Читать далее

Вам следует написать новый (ужасный) язык программирования

Level of difficultyEasy
Reading time5 min
Views15K

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

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

Сетевые протоколы и модели OSI: как всё устроено

Level of difficultyEasy
Reading time12 min
Views25K

Как всё на самом деле работает в этом вашем TCP/IP и зачем ему столько уровней. Разбираем на простых примерах.

Пётр Емельянов — эксперт по информационным технологиям в Skillbox. Для комьюнити Skillbox Code Experts он провёл эфир о сетевых протоколах и моделях OSI или Open Systems Interconnection model. Речь про модель взаимодействия открытых систем, которая описывает, по каким правилам взаимодействуют разные устройства в компьютерных сетях. Основные мысли и объяснения из эфира Пётр рассказал в этой статье. До карьеры в машинном обучении Пётр около 10 лет проработал системным программистом в компании, которая специализировалась на анализе сетевого трафика. Занимался тарификацией и разводил потоки трафика. В статье Пётр рассмотрит, как появилась модель OSI, кому и зачем она нужна, какие у неё уровни и как ей пользоваться.

Читать далее

Information

Rating
3,294-th
Location
Иркутск, Иркутская обл., Россия
Date of birth
Registered
Activity

Specialization

Software Engineer, ML Engineer
Middle
C++
Python
TENSORFLOW
Pytorch
Cmake
Linux
Deep Learning
Cuda
Computer Science
Keras