Обновить
4
0

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

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

Мой первый pet-проект: процесс-менеджер synd3

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

Всем привет!

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

Мне 22 года, я из Латвии. По образованию я судовой механик, но уже около 4 лет увлекаюсь программированием. Долгое время это оставалось хобби: пробовал сайты, простые игры — но они не приносили настоящего удовольствия. Я считал, что в программировании нужно было разбираться ещё со школы, и долго не верил, что могу найти себя в этой сфере.

Переломный момент наступил, когда я заинтересовался системным программированием. Каждый раз, когда узнаю, как работает низкоуровневая часть ОС, у меня будто открывается новый мир. Особенно зацепила тема процессорного планирования: все говорят «железо, CPU, видеокарта», но на практике даже реализация планировщика процессов может заметно влиять на производительность.

Читать далее

Задачи по алгоритмам: избавляемся от анаграмм

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

Задача с LeetCode.

Дан массив слов words. Слово содержит латинские буквы в нижнем регистре a-z. Проверить пары смежных слов (w_i, w_{i+1}) и удалить w_{i+1}, когда w_i и w_{i+1} - анаграммы.

Найдем группы смежных анаграмм и оставим в массиве первую строку каждой группы.

Читать далее

RL (RLM): Разбираемся вместе

Уровень сложностиСредний
Время на прочтение12 мин
Охват и читатели7.1K

Всем привет! Недавно я познакомился с курсом по глубокому обучению с подкреплением от HuggingFace Deep Reinforcement Learning Course и захотел сделать выжимку самого интересного. Эта статья — своего рода шпаргалка по основам Reinforcement Learning (RL) и одному из ключевых алгоритмов — PPO, который лежит в основе тонкой настройки современных LLM (Large Language Models).

Читать далее

Категории типов. Часть 4. Монады

Уровень сложностиСредний
Время на прочтение25 мин
Охват и читатели9.4K

И вот, в четвёртой части обзора мы наконец-то встретимся с главным героем! Мы рассмотрим анатомию и морфологию монад и попробуем выяснить, почему их бывает сложно композировать. Попутно познакомимся с аппликативными функторами и комонадами.

Читать далее

Реализация DOM-подобных структур данных на C++

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

Это третья статья в серии про DOM-подобные модели данных в различных языках программирования.

Ранее мы рассмотрели что такое DOM-подобные структуры данных и как оценить их поддержку языках программирования и препарировали JavaScript.

Сегодня мы проверим как с Card DOM справится С++.

Читать далее

Настоящий тест для языков программирования — как они справляются с DOM-подобными структурами данных

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

Большинство тестов языков программирования — это синтетика. Мы сравниваем скорость сортировки массивов, подсчёт аллокаций и другие упражнения, которые почти не встречаются в реальной жизни.

А вот настоящие приложения — редакторы, движки, интерфейсы, базы данных — живут совсем в другом мире. Они управляют не числами, а сложными структурами объектов. И если присмотреться, почти все эти структуры сводятся к одной универсальной модели: DOM-подобному графу.

Читать далее

Новый сезон «Битовых масок» — подкаста о системном программировании и разработке процессоров

Уровень сложностиПростой
Время на прочтение2 мин
Охват и читатели11K

В «Битовых масках» — подкасте «Истового инженера» — ведущие знакомят слушателей с инженерами, преподавателями и энтузиастами, которые делают железо и низкоуровневое ПО понятнее, ближе и интереснее.

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

Читать далее

Как я с помощью LLM писал эмулятор ZX Spectrum

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

... или может ли ИИ заменить программиста? Сейчас со всех сторон долбят про то, как ИИ помогает в жизни и вообще, если ты не используешь ИИ, то ты в отстающих и лузер. Я к этому отношусь спокойно, ибо мои занятия совершенно не допускают использование ИИ из-за очень большой цены ошибки, но долбежка все-таки делает свое дело. Плюс как-то внезапно обнаружил, что у (не реклама) cloud.ru доступны Foundation Models (они же БЯМ, они же LLM) без оплаты. Понятное дело, тестовый период и прочее, но использовать можно. Но просто мучать модельки вопросами уровня «сколько цифр в слове» смысла мало, поэтому решил попробовать сделать что-то хоть капельку полезного и получить собственный ответ на вопрос пригодности БЯМ. Результат для нетерпеливых тут https://github.com/kiltum/zxgo

Далее несколько абзацев истории, чтобы просто было понятно, каким путем я шел до результата. Скажу честно, выбор места приложения сил БЯМки был сделан довольно быстро: напиши мне много кода. Раз пока все бесплатно, выбрал самый большой Qwen и предложил ему написать эмулятор КР580ВМ80А (он же Intel 8080), причем на питоне. И внезапно, он с первой попытки сгенерил что-то очень похожее на правду. Хмыкнув, я нашел образ ПЗУ от Радио-86 и зарядил еще пару десятков запросов. Вскоре я с глубоким удовлетворением увидел в окошке заветное «РАДИО 86-РК» и следом «-->». 

Немного порадовавшись результату, я преисполнился энтузиазма и решил поднять ставки. Z80 и ZX Spectrum! Культовая машина, все нюансы которой разложены по полочкам и по которой документации на порядки больше, чем для «радио»,«микроши» и «специалиста» вместе взятых. А чтобы было совсем хардкорно, основным языком я выбрал С++.

Читать далее

Подробно о неопределённом поведении в С и C++

Время на прочтение24 мин
Охват и читатели14K

При работе с C или C++ необходимо в какой-то степени разбираться в неопределённом поведении (UB): что это такое, каковы его эффекты, и как о него не споткнуться. Для простоты картины я буду в этой статье рассказывать только о C, но всё изложенное здесь также применимо и к C++, если явно не указано иное.

Читать далее

XEH — редактор с живым кодом и путешествиями во времени

Время на прочтение4 мин
Охват и читатели12K

Заметка про экспериментальный редактор кода. Создавался для исследования бинарных данных. Графический клиент, консольный интерфейс и встраиваемая библиотека.

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

Примечательные возможности: Живой кодинг. Создание контрольных точек. Отладка с перемещением во времени. Смещения, адреса и размеры в битах (да, если в байте 7 или 9 бит). Тэгирование данных.

Читать далее

Платотерапия: как я собрал свои Arduino UNO и Digispark с нуля

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

В последнее время поймал себя на том, что меня успокаивает процесс создания плат, от разводки, до пайки и я какое-то время вынашивал идею, что неплохо было бы сделать какую-то свою отладочную плату, например, с программированием по USB. Но зачем что-то придумывать без веской причины, тогда как можно взять готовый проект, например, Arduino UNO или Digispark и заодно подсмотреть, как там все устроено. Поэтому я ухватился за эту идею.

Эта статья — рассказ о том, как я собрал клоны Arduino UNO и Digispark, сделал три разные платы расширения своими руками и протестировал две из них, купленные в магазине.

Попробуем сделать Arduino UNO DIY — свой ответ Arduino UNO Q.

Читать далее

Как работает система владений и ссылок в Rust на низком уровне

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

Привет Хабр! В этой статье я хотел поговорить о теме вечных конфликтов разработчиков на C++ и Rust. Стоит ли того система управления памятью в Rust или все-же это бестолковый механизм стремящийся составить конкуренцию родному методу?

Систему управления памятью я разберу, а вот выводы остаются уже за вами.

Читать далее

Мы решили задачу омографов и ударений в русском языке

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

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

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

Также мы опубликовали наше продуктовое решение для простановки ударений (в омографах в том числе) в рамках репозитория silero-stress и также напрямую через pypi. В ближайшее время добавим эту модель и обновим наши публичные модели синтеза и раскатим более мощную "большую" (тоже маленькую по современным меркам) версию модели в приватные сервисы и для клиентов. Также мы опубликовали бенчмарки качества и скорости публичных академических решений … и там всё очень неоднозначно.

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

Сели, налили, читаем

Лучшие задачи о взвешиваниях монет (шаров, таблеток)

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

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

Для начала немного теории:

Из книги Д.А. Михалин, И.М. Никонов, Одна задача о нахождении фальшивой монеты, Матем. просв., 2007, выпуск 11, 149–158:

Максимальное число монет Q1, среди которых можно найти фальшивую и определить ее относительный вес за k взвешиваний определяется по формуле:

Q1 = (3k – 3)/2

Максимальное число монет Q2, среди которых можно найти фальшивую, не определяя ее относительный вес за k взвешиваний определяется по формуле:

Q2 = (3k – 1)/2

Максимальное число монет Q3, среди которых можно найти фальшивую, не определяя ее относительный вес за k взвешиваний, когда в распоряжении есть одна настоящая монета определяется по формуле:

Q3 = (3k + 1)/2

Таким образом, Q1, Q2 и Q3 для двух взвешиваний равно, соответственно, 3, 4 и 5 монет. Q1, Q2 и Q3 для трех взвешиваний равно, соответственно, 12, 13 и 14 монет.

Читать далее

Слёзы, баги и C++: как Isaac стал легендарной игрой

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

Привет, Хабр!

Помню, как впервые запустил The Binding of Isaac: стартовая комната без подсказок, закрытые двери, на миникарте пусто. Пара забегов и у меня уже список технических вопросов по генерации этажей, приоритетам предметов, поведению врагов, рендеру и производительности. В тот момент я решил написать эту статью.

Сегодня я расскажу о разработке культовой инди-игры The Binding of Isaac и разберу технические нюансы: путь от Flash к C++, как собирается план этажа, как устроены большие комнаты и секретки, по каким правилам живут эффекты предметов и их синергии, как Lua-скрипты встраиваются в движок для модов, где в архитектуре сделаны осознанные компромиссы.

Читать полную историю

Руководство по Rust для посредственного программиста

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

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

По этой причине я всегда избегал более академических языков вроде OCaml, Haskell, Clojure и тому подобных. Я знаю, что это хорошие языки — люди намного умнее меня строят с их помощью потрясающие вещи, — но к тому моменту, когда я слышу слово «эндофунктор», я теряю всё внимание (и большую часть интереса к вопросу). Мои любимые языки — те, что требуют меньше интеллектуальных усилий: C, PHP, Python и Ruby.

Так что довольно занятно, что я с большим рвением принялся за Rust. Это, безусловно, самый сложный язык, с которым я чувствую себя хотя бы отдалённо комфортно «в бою». Отчасти потому, что я собрал набор принципов, позволяющих почти полностью избегать ссор с ужасающим механизмом контроля заимствования, временем жизни и прочими тёмными, пугающими уголками Rust. А ещё потому, что Rust помогает мне писать лучшее ПО, и я это чувствую (почти) всё время.

В духе помощи моим товарищам‑посредственным программистам, которые пытаются освоить Rust, ниже я представляю принципы, которые я собрал на данный момент. Поехали!

Читать далее

Нейросети «на пальцах». Часть 1. От формулы простой линии к искусственному нейрону

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

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

Эта ситуация подтолкнула автора к идее: при помощи ChatGPT, Википедии и ряда других источников постепенно, шаг за шагом, разобрать ключевые математические формулы и принципы работы нейросетей. Результатом станет пошаговый «гайд», который проведёт читателя от самых простых понятий школьной математики к пониманию основ современных нейросетей, а в перспективе — к их программированию.

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

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

Читать далее

Эволюция подходов к написанию корутин от Си до С++20. Часть 1. Функция+макросы=корутина

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

Когда речь заходит о корутинах (сопрограммах) на С++, большинство программистов вспоминает фреймворк coroutine_ts, появившийся в стандарте С++20. Многие даже не догадываются о том, что писать корутины можно было задолго до появления упомянутого стандарта. При этом можно было использовать не только С++, но и Си. Данной статьей я открываю серию, в которой хочу описать свой личный опыт изучения корутин и привести примеры их использования. Надеюсь мои статьи помогут начинающим разобраться в этой сложной и интересной теме.

Читать далее

Operation MOONLIGHT: интерактивный курс по C с детективным сюжетом

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

Признайтесь, сколько раз вы начинали учить новый язык программирования, открывали очередной учебник с заголовком "Hello World" и... забрасывали через неделю?

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

Особенно это касается языка C:
-- Сложный синтаксис
-- Указатели, которые пугают новичков
-- Управление памятью вручную
-- Отсутствие "красивых" фреймворков для быстрого результата

И вот вы сидите, компилируете очередную программу, которая выводит факториал числа, и думаете...

Когда же будет что-то интересное?

Работа с RISC-V контроллерами на примере CH32V303. Часть 9. Многозадачность

Уровень сложностиСредний
Время на прочтение12 мин
Охват и читатели6.8K

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

Читать далее

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность