Как стать автором
Обновить
18
0

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

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

Обнаружение наличия функциональности в C++ на этапе компиляции

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

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

Хорошо, если есть поддержка концептов или рефлексии. А что делать, если их ещё нет, или они не в полной мере поддерживаются?

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

Читать далее
Всего голосов 9: ↑8 и ↓1+10
Комментарии6

Генерируем Rust обёртку для FMOD

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

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

Это руководство содержит общий обзор и конкретные приемы написания сложной Rust обёртки для звукового движка FMOD с помощью парсера pest и квази-цитирования.

Читать далее
Всего голосов 11: ↑10 и ↓1+13
Комментарии12

Шаблоны C++: как итерировать по std::tuple — основы

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

Для большинства стандартных контейнеров перебор элементов можно осуществлять просто с помощью цикла for с диапазоном прямо во время выполнения. Но что насчет кортежей (std::tuple)? В этом случае мы не можем использовать обычный цикл, так как он не «понимает» список аргументов кортежа во время компиляции. В этой статье я покажу вам несколько приемов, которые вы можете использовать для итерации по элементам кортежа.

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

Как заходить в чужой монастырь

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

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

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

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

Итак, рассмотрим ситуацию, когда в команду разработки (или в командЫ разработки) приходит новый руководитель, о котором самим участникам команды ничего не известно. И этот руководитель — вы.

Читать далее
Всего голосов 59: ↑58 и ↓1+67
Комментарии12

Из чего состоит мировой эфир. Последняя теория Менделеева

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

В марте 1869 года была опубликована первая версия периодической системы Менделеева. Систематический вид из рядов и групп она приобрела через пару лет – вот так выглядел вариант от 1871 года. Как известно (о чем я уже упоминал в статье про пределы таблицы Менделеева и элемент фейнманий). Дмитрий Иванович Менделеев (1834-1907) принципиально превзошел своих учителей и коллег, в частности, Роберта Бунзена, Жана Лекока Буабодрана и Лотара Майера в том, что пытался не только классифицировать уже известные к тому времени химические элементы, но и расположить их в соответствии с увеличением атомного веса и периодическим паттерном химических свойств. Поэтому он не только оставил в своей таблице пустые клетки, но и сделал два исключения из периодического закона на материале известных ему элементов. Тем не менее, Менделеев весьма превратно представлял себе варианты заполнения «краев» таблицы. Ошибки Менделеева, в которых он даже упорствовал, были связаны с двумя неверными исходными посылками. Во-первых, Менделеев всерьез воспринимал концепцию мирового эфира (написал о нем серьезную аналитическую статью в 1902 году), хотя, еще в 1887 году был неоднократно поставлен эксперимент Майкельсона-Морли, фактически доказавший, что эфир не существует. Кроме того, на момент составления таблицы еще не была известна внутренняя структура атома (атом считался неделимым), а также Менделеев не предусмотрел в таблице 8-й группы, то есть, столбца с благородными газами.

Читать далее
Всего голосов 47: ↑44 и ↓3+65
Комментарии23

Unity: 8 причин отказаться от Coroutine в пользу Async

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

Когда речь заходит об асинхронных операциях в Unity, на ум первым делом приходит coroutine. И это не удивительно, так как большинство примеров в сети реализованы именно через них. Но мало кто знает, что Unity поддерживает работу с async/await еще с 2017 версии.

Так почему же большинство разработчиков до сих пор использует coroutine вместо async/await? Во первых, как я уже упомянул, большая часть примеров написана с использованием coroutine. Во вторых, async/await кажется очень сложным для начинающих разработчиков. Ну и в третьих, когда речь заходит о коммерческих проектах, где основным из критериев является стабильность, предпочтение отдается проверенному годами подходу.

Но технологии не стоят на месте и появляются библиотеки, которые делают работу с async/await в Unity удобной, стабильной и самое главное высокопроизводительной.

Читать далее
Всего голосов 10: ↑9 и ↓1+10
Комментарии25

18 февраля — День памяти Криса Касперски. Пять лет как нет Николая Лихачева

Время на прочтение14 мин
Количество просмотров22K
Не могу поверить, но уже прошло пять лет как нет Криса. За это время мир очень сильно изменился. Ему очень было бы интересно жить в этом новом мире, мире блокчейна, биткоинов, эфириума, телеграмм каналов, мире биг-даты, машинного обучения, нейронных сетей и искусственного интеллекта, программ вымогателей, АПТ группировок, новых операционных систем, а также Windows 10 и 11. Но увы его нет с нами. От него остались только его книжки и статьи в разных журналах и его отец, который помнит всю его жизнь от момента рождения и трагического падения. Несмотря на то, что Крис уже не жил в России, он постоянно переписывался с отцом по электронной почте и присылал свежие фотографии. Отец же начал работу над книгой — биографией своего сына, кусочком которой он поделился со мной, а я делюсь с Вами.
Читать дальше →
Всего голосов 59: ↑57 и ↓2+78
Комментарии44

Язык программирования C∀ (CForAll)

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

Мой интерес к дизайну языков программирования приводит меня иногда к интересным, но почти неизвестным в широких кругах проектам. Один из таких проектов - язык C∀ (CForAll), разрабатываемый Университетом Ватерлоо. C∀ является расширением ISO C и обеспечивает обратную совместимость с C. Помимо исправления некоторых недостатков Си (которые можно исправить без нарушения обратной совместимости), в C∀ есть некоторые весьма интересные и оригинальные фичи: некоторые расширения классических управляющих операторов, альтернативный синтаксис объявления квалификаторов, кортежи и множественные операции, оригинальное расширение ссылок, своя реализация полиморфизма, сопрограммы и т.д.

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

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

Лучшие альтернативы для Docker

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

Изобретение интермодальных контейнеров вызвало бум международной торговли и стало одним из основных элементов глобализации

Контейнеры от компании Docker произвели настоящую революцию в разработке, тестировании и развёртывании приложений. Хотя вовсе не она изобрела Linux-контейнеры. Ведь LXC и OpenVZ появились раньше под Linux, а до них много лет существовали Jails/Zones в BSD/Solaris.

Но именно Docker представил контейнеры в виде удобного и простого «массового продукта». Примерно как Apple позаимствовала идеи MP3-плеера и смартфона и доработала их. То же самое сделал Docker. Хотя не довёл дело до конца, то есть до получения прибыли.

Сейчас компания Docker разваливается на глазах. Однако Linux-контейнеры отлично работают и без неё, это же опенсорс.
Читать дальше →
Всего голосов 25: ↑18 и ↓7+19
Комментарии35

Kernel Queue: The Complete Guide On The Most Essential Technology For High-Performance I/O

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

When talking about high-performance software we probably think of server software (such as nginx) which processes millions requests from thousands clients in parallel. Surely, what makes server software work so fast is high-end CPU running with huge amount of memory and a very fast network link. But even then, the software must utilize these hardware resources at maximum efficiency level, otherwise it will end up wasting the most of the valuable CPU power for unnecessary kernel-user context switching or while waiting for slow I/O operations to complete.

Thankfully, the Operating Systems have a solution to this problem, and it's called kernel event queue. Server software and OS kernel use this mechanism together to achieve minimum latency and maximum scalability (when serving a very large number of clients in parallel). In this article we are going to talk about FreeBSD, macOS and kqueue, Linux and epoll, Windows and I/O Completion Ports. They all have their similarities and differences which we're going to discuss here. The goal of this article is for you to understand the whole mechanism behind kernel queues and to understand how to work with each API.

Read more
Всего голосов 7: ↑7 и ↓0+7
Комментарии1

Щ — самая упорная из православных букв

Время на прочтение5 мин
Количество просмотров30K
Прошлая статья была посвящена тому, как Щ появилась; загадкой остаётся то, как Щ сохранилась в современном алфавите. Вот, например, статья в «Литературной газете» от 16 декабря 1929 г. о готовившемся тогда под эгидой А.В. Луначарского проекте перевода русского языка на латиницу; в частности, предполагалось, что «сочетание звуков «щ» будет писаться двумя буквами».


Амбициозный проект Луначарского — далеко не первое предложение по упрощению русской орфографии, оставшееся нереализованным.
Читать дальше →
Всего голосов 57: ↑50 и ↓7+67
Комментарии349

11 советов, как говорить по-английски свободно и уверенно, чтобы преодолеть языковой барьер

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

Молчи – за умного сойдешь! Эта установка крепко сидит в голове людей, прошедших советскую школу обучения. Понимание, которое застряло внутри, что не нужно высовываться, если ты не уверен на 250% в том, что  хочешь сказать. В учебе это очень вредный совет, особенно в английском. 

Что же нам поможет заговорить на английском?

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

Самые интересные блоги и сайты для C++ программистов

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

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

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

Linq в замочную скважину…

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

Можете ли вы уверенно сказать, что будет выведено на консоль в результате выполнения следующего кода?

Читать далее
Всего голосов 45: ↑33 и ↓12+32
Комментарии119

Как простой баг повреждения памяти ядра Linux может привести к полной компрометации системы

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

Введение


В этом посте описывается простой в реализации баг блокировки ядра Linux и то, как я использовал его против ядра Debian Buster 4.19.0-13-amd64. В посте рассматриваются варианты устранения бага, препятствующие или усложняющие использование подобных проблем злоумышленниками.

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

Многие описанные здесь отдельные техники эксплойтов и варианты их устранения не новы. Однако я считаю, что стоит объединить их в одну статью, чтобы показать, как различные способы устранения взаимодействуют друг с другом на примере достаточно стандартного эксплойта с использованием освобождённой памяти.
Читать дальше →
Всего голосов 14: ↑14 и ↓0+14
Комментарии1

Спец-интервью для Хабра: Грант Сандерсон

Время на прочтение15 мин
Количество просмотров9.6K
В прошлом месяце я писал новость о том, что Грант Сандерсон, создатель одного из самых популярных YouTube каналов о высшей математике, 3blue1brown согласился ответить на вопросы Хабровчан.

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

Поехали!
Читать дальше →
Всего голосов 70: ↑70 и ↓0+70
Комментарии18

Коаны Гита

Время на прочтение3 мин
Количество просмотров38K
По мотивам «Коанов Вима».

Тишина
Что-то одно, но хорошо
Только богам
Хобгоблин
Длинное и короткое

Тишина


Python-программистка передала свой файл ~/.gitconfig мастеру Гиту. Среди строчек кода было следующее:

[alias]
; Явное лучше подразумеваемового. Если мы хотим выполнить слияние,
; нам следует сделать это самим.
pull = pull --ff-only

Мастер Гит кивнул. «git pull origin master», — сказала программистка.
Читать дальше →
Всего голосов 153: ↑130 и ↓23+107
Комментарии52

Бинарный протокол для JavaScript

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

Нативная поддержка JSON одно из преимуществ разработки full-stack JavaScript приложений. JSON является простым, не требующим схемы и человекочитаемым - качества особенно ценимые на ранней стадии разработки, когда ваша модель данных подвержена частым изменениям. Однако за все надо платить, а именно размером и скоростью обработки данных.

JSON будучи текстовым форматом кодирует все значения как UTF-8, что приводит к увеличению размера данных при работе с нетекстовыми данными. Отсутствие схемы означает, что мы должны кодировать нашу структуру данных (ключи объекта) вместе с самими данными. Мы также делаем дополнительную работу при обработке данных, поскольку нам необходимо преобразовать бинарные данные в их текстовое представление до превращения в JSON и соответственно наоборот в случае декодирования.

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

Записки юного TeamLead: Рост и эффективность команды или как не забыть о себе

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

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

Но нет, не так хорошо ты выполняешь свою работу. Спринты не закрываются, таски льются рекой, два seniora объявили друг другу войну из PR, а менеджеры решили пойти войной на тебя, объявив тебя виновником всего этого беспорядка. И вот очередное утро, дейли, и после чашки кофе ты задаешь себе вопрос: "А эффективен ли я и моя команда?"

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

DOM, который построил Chrome. Или не построил? Или не Chrome? Или не DOM?

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

Обычный, теневой, виртуальный, инкрементальный… Как получилось, что простой программный интерфейс доступа к элементам веб-страниц обзавелся таким количеством «родственников»? Чем современные фреймворки не устраивает стандартная объектная модель документа или просто DOM? Что и как на самом деле отрисовывает браузер в процессе рендера веб-страницы?

Всем привет, это Макс Кравец из Holyweb. Помните сцену из Матрицы, в которой один из юных кандидатов в Избранные наставляет Нео: «Не пытайся согнуть ложку. Первое, что ты должен понять — ложки не существует!»? Давайте переформулирую: «Не пытайся изменить DOM...». А вот о том, что прячется под многоточием, мы сегодня и поговорим.

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

Информация

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