Как стать автором
Обновить
11
0
Дмитрий @redf1sh

Аспирант МФТИ. Пишу компилятор для Эльбруса.

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

Plymouth: делаем загрузку Linux веселее

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

Или ещё один способ показать своё превосходство над "average Windows fan".

Дружим современный мем со старым и почти забытым инструментом.

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

NumPy для самых маленьких

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

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

Самая новичковая "библиотека" с примочками в виде SciPy и Matplotlib предназначена для работы с многомерными массивами. NumPy – основа для многих других библиотек для машинного обучения, таких как SciPy, Pandas, Scikit-learn и TensorFlow. 

Pandas, например, строится поверх NumPy и позволяет работать со структурами данных высокого уровня по типу DataFrame и Series. При помощи NumPy можно проводить преобразование категориальных данных в числовой формат, например, с использованием кодирования one-hot.

Читать далее
Всего голосов 18: ↑17 и ↓1+16
Комментарии2

Вы все еще пишете многопоточку на C++ с ошибками синхронизации?

Уровень сложностиСредний
Время на прочтение11 мин
Количество просмотров21K
Привет, коллеги! В этой статье я покажу свой подход к написанию многопоточного кода, который помогает избежать типовых ошибок, связанных с использованием базовых примитивов синхронизации.

Демонстрация идеи будет проходить на живых примерах кода на современном C++. Большинство описанных решений я применял сначала на собственных проектах, а теперь часть этих подходов уже используется в нашей собственной микроядерной операционной системе «Лаборатории Касперского» (KasperskyOS).

Сразу хочу оговориться, что тема многопоточности — очень большая и серьезная. И эта статья — не полноценный анализ проблем многопоточки, а только частНЫе (но довольно частЫе) кейсы, когда мы вынуждены использовать мьютексы.
Читать дальше →
Всего голосов 50: ↑51.5 и ↓-1.5+53
Комментарии138

Разработка и производство троичных микросхем на обычном техпроцессе CMOS

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


Многие утверждали, что строят троичный компьютер из дискретных компонентов, однако некоторые разрабатывают и заказывают троичные микросхемы уже прямо сейчас :)
Читать дальше →
Всего голосов 119: ↑119 и ↓0+119
Комментарии120

Смысл жизни с точки зрения программиста-буддиста

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

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

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

Читать далее
Всего голосов 69: ↑60 и ↓9+51
Комментарии129

Укрощение примитивов синхронизации: сравниваем решения задачи с построением пула потоков на С и Go

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

Эта статья основана на истории об одном личном челлендже. Задача звучала так: помочь с реализацией взаимодействия компонентов в программном комплексе заказчика. Иными словами, понадобилось IPC для дальнейшего развития продукта. Вызов заключался в том, что в обязательных требованиях стояло использование чистого С. Другие языки, включая С++ и Go, не рассматривались. 

В итоге я получил интересный опыт в рамках системного и параллельного программирования. Меня зовут Алексей Буреев, я работаю старшим инженером по разработке ПО в YADRO, сейчас мой основной рабочий язык программирования — Golang. В этой статье я проведу небольшой эксперимент: покажу, как можно решить одну задачу с помощью разных языков программирования. Языку С я противопоставлю Go, в основе которого есть исторические наработки проектирования языка С. Для этого немного заглянем «под капот» стандартных типов данных, которые уже были заботливо созданы для нас разработчиками языка.

Всех заинтересованных прошу под кат.

Читать далее
Всего голосов 21: ↑19 и ↓2+17
Комментарии16

SectorC: компилятор Си в пределах 512 байт

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

SectorC (github) – это компилятор Си, написанный на ассемблере x86-16 и умещающийся в загрузочный сектор 512 байт машины x86. Он поддерживает достаточно обширную функциональность Си для создания реальных и интересных программ, являясь при этом, пожалуй, самым миниатюрным компилятором Си из когда-либо написанных.
Читать дальше →
Всего голосов 152: ↑150 и ↓2+148
Комментарии45

Корутины C++ для чайников: пишем асинхронный веб-клиент

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

Написать этот материал меня побудило... отсутствие хороших статей по корутинам в C++ в русскоязычном интернете, как бы странно это не звучало. Ну серьезно, C++20 существует уже несколько лет как, но до сих пор почти все статьи про корутины, что встречаются в рунете, относятся к одному из двух типов. Или обзор начинается с самых глубин и мелочей, пересказывая cppreference, а потом автор выдыхается и все сводится к "ну а дальше все понятно, возьмите и примените это в своем коде", что напоминает известную картинку с совой. Либо иногда в статьях рассматривается применение корутин на примере генераторов, и этим все и ограничивается. Но, давайте будем честны, генераторы — это замечательно, но за все время моей многолетней карьеры разработчика я, вероятно, делал что‑то подобное генераторам разве что разок, в то время как асинхронный ввод‑вывод приходится использовать почти в каждом проекте. И поэтому меня гораздо больше интересует реализация асинхронного ввода‑вывода с использованием корутин, а не генераторы. Поэтому пришлось разбираться во всем самому.

Читать далее
Всего голосов 68: ↑66 и ↓2+64
Комментарии34

RVO и NRVO в C++17

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

Предположим, что в программе на C++ вы возвращаете из функции локальную переменную. Что происходит при вызове оператора return: копирование, перемещение или ни то, ни другое? От этого зависит длительность вызова функции и эффективность наших программ. Я постарался разобраться с этим вопросом и дам рекомендации по написанию функций так, чтобы повысить шансы на применение этой оптимизации компиляторами. Ну, а сокращения в названии статьи — это Return Value Optimization (RVO) и Named Return Value Optimization (NRVO).

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

Инструмент подбора оттенков для покраски миниатюр. Часть 1: теория

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

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

Инструмент предназначен для виртуального смешения красок, он содержит солвер, генерирующий рецепты для создания цвета из имеющихся красок. Инструмент поставляется с замеренными мной данными для красок Kimera. Он написан на Python 3; в репозитории есть все исходники, и если у вас есть дистрибутив Python, то его можно просто запустить. Также в репозитории есть исполняемый файл Windows, созданный при помощи PyInstaller (см. раздел Releases справа). Ещё я добавил версию для Mac; это файл .dmg и в нём что-то есть, а если нажать на него, инструмент запустится, так что, кажется, всё работает. Но, честно говоря, я редко пользуюсь Mac, поэтому мне сложно сказать, есть ли там всё нужное, или требуется что-то ещё...

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

Ниже представлено более-менее полное описание его работы (и условия, при которых он не работает).

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

Интерпретатор Brainfuck на Brainfuck

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

Когда-то давно, году в 2013-м, на глаза мне попался следующий код:

>>>+[[-]>>[-]++>+>+++++++[<++++>>++<-]++>>+>+>+++++[>++>++++
++<<-]+>>>,<++[[>[->>]<[>>]<<-]<[<]<+>>[>]>[<+>-[[<+>-]>]<[[
[-]<]++<-[<+++++++++>[<->-]>>]>>]]<<]<]<[[<]>[[>]>>[>>]+[<<]
<[<]<+>>-]>[>]+[->>]<<<<[[<<]<[<]+<<[+>+<<-[>-->+<<-[>+<[>>+
<<-]]]>[<+>-]<]++>>-->[>]>>[>>]]<<[>>+<[[<]<]>[[<<]<[<]+[-<+
>>-[<<+>++>-[<->[<<+>>-]]]<[>+<-]>]>[>]>]>[>>]>>]<<[>>+>>+>>
]<<[->>>>>>>>]<<[>.>>>>>>>]<<[>->>>>>]<<[>,>>>]<<[>+>]<<[+<<
]<]

Это интерпретатор языка Brainfuck, написанный на самом Brainfuck. Ссылки на оригинал у меня не осталось, только код, так что автора я назвать не смогу.

Мне всегда было безумно интересно узнать, как он работает. И теперь я решил наконец-то это сделать!

Читать далее
Всего голосов 120: ↑118 и ↓2+116
Комментарии20

Как я устроился в Амазон и перестал переживать за свой английский

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

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

Меня зовут Андрей Столбовский, последние 5 лет я работал в Яндексе, а в прошлом году перешёл в Амазон и теперь работаю Software Development Manager в AWS Redshift – это мой первый полноценный опыт работы в международной компании. 

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

Итак, поехали. 

Поехали!
Всего голосов 282: ↑279 и ↓3+276
Комментарии160

Устройство GPIO-драйверов в Linux

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

Рассмотрим, как устроены GPIO-драйверы в Linux, и почему это сделано именно так. Поймем, почему для простого мигания светодиодом в этой операционной системе надо пройти через N слоев абстракции.

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

Электроника для начинающих: собираем датчик направления магнитного поля. Пробуем лазерный метод изготовления

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

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

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

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

Пайка компонентов в корпусе 0201. Придвиньтесь ближе к монитору – будет мелко

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

Приветствую, Хабр!

Сказать, что было сложно – это не сказать ничего грустный смайл… Много фото и много слез.

Наслаждаемся
Всего голосов 162: ↑159 и ↓3+156
Комментарии169

Multithreading

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

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

Читать далее
Всего голосов 22: ↑20 и ↓2+18
Комментарии3

Дефекты рельсов. Найти, используя IT

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

Цель данной работы – оценить возможность создания эффективной системы распознавания дефектов рельсов по дефектограммам ультразвукового контроля методами ML

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

Компилятор за выходные: таблицы символов

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

Как водится воскресным вечером, снова я с моим компилятором. На этот раз я расскажу, как работают области видимости переменных и как перегружать функции. Это позволит нам скомпилировать демку про́клятого огня, а также я накидал фантазию на тему игрушки арканоид (скриншот на КПДВ, видео в конце статьи). Я на удивление сам долго залипал на эту анимацию :)

На всякий случай я даю код и на wend, и на C, поскольку понимаю, что код на моём языке вряд ли интересен кому-то помимо того, кто реально возьмётся за компилятор. А вот мелкий код с интересными эффектами всегда найдёт свою публику. Кстати, если у вас есть идеи на тему чего-то интересного, что можно запрограммировать в полста строчек кода, делитесь в комментариях, я внимательно слушаю!

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

Механизм перезапускаемых последовательностей (Rseq) при работе с TCMalloc

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


Кэши для отдельных ядер процессора


В TCMalloc кэши для отдельных ядер процессора реализуются при помощи перезапускаемых последовательностей (man rseq(2)) под Linux. Эту возможность ядра разработали Пол Тёрнер и Эндрю Хантер из Google, а также Мэтью Дезнойерс из EfficiOS. При помощи перезапускаемых последовательностей можно вплоть до завершения выполнять область памяти (атомарно, относительно других потоков, выполняющихся на том же ядре процессора), либо выходить из этого процесса, если ядро прервёт этот процесс, например, вытеснив его или прервавшись на обработку сигнала.

Если вы хотите организовать перезапуск системы при миграции с ядра на ядро или при вытеснении процесса, то наиболее общий случай такой операции можно оптимизировать (не переносить с ядра на ядро тот процесс, который уже выполняется), избегая атомарных операций. Можно оптимизировать и более редкий случай – вытеснение как таковое. В результате такого компромисса нужно обеспечить, чтобы на всех путях выполнения нашего кода поддерживались такие операции перезапуска. Вся последовательность, кроме окончательного сохранения в памяти, когда изменение фиксируется, должна быть приспособлена к перезапуску.
Читать дальше →
Всего голосов 23: ↑19 и ↓4+15
Комментарии1

Об изучении компиляторов и создании языков программирования

Уровень сложностиСредний
Время на прочтение7 мин
Количество просмотров7.3K
Когда я только начинал изучать компиляторы, я не понимал одного важного момента: Разработка языка программирования и написание компилятора — это два почти совершенно разных навыка. Конечно, между ними есть некоторое пересечение, но меньшее, чем может показаться на первый взгляд!

Я думаю, что это важно знать, потому что обе эти задачи очень сложны! Легче овладеть этими навыками, если решать их по очереди. Ваше первое решение сложной задачи, скорее всего, будет… ну, не таким хорошим, как десятое! Однако довольно часто разработчики создают игрушечный язык, когда пишут свой первый компилятор, а это значит, что они совершают ошибки и учатся сразу на двух сложных проблемах. Хуже того, эти две проблемы взаимосвязаны: Ошибка в одной из них усложняет жизнь в другой. Кроме того, как мы увидим, хотя компиляторы и сложны на первых порах, они, по сути, являются решенной проблемой, в то время как разработка языка программирования — это, скажем так, область продолжающихся исследований.
Читать дальше →
Всего голосов 18: ↑18 и ↓0+18
Комментарии5
1
23 ...

Информация

В рейтинге
Не участвует
Откуда
Ивантеевка (Московская обл.), Москва и Московская обл., Россия
Дата рождения
Зарегистрирован
Активность

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

System Software Engineer