Как стать автором
Обновить
22
@d1gital_loveread⁠-⁠only

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

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

Насколько медленны iostreams?

Время на прочтение7 мин
Количество просмотров79K
Потоки ввода-вывода в стандартной библиотеке C++ просты в использовании, типобезопасны, устойчивы к утечке ресурсов, и позволяют простую обработку ошибок. Однако, за ними закрепилась репутация «медленных». Этому есть несколько причин, таких как широкое использование динамической аллокации и виртуальных функций. Вообще, потоки — одна из самых древних частей стандартной библиотеки (они начали использоваться примерно в 1988 году), и многие решения в них сейчас воспринимаются как «спорные». Тем не менее, они широко используются, особенно когда надо написать какую-то простую программу, работающую с текстовыми данными.

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

Сегодня в комментариях у посту возникло обсуждение о медленности iostreams. В частности, freopen пишет
Забавно смотреть на ваши оптимизации, расположенные по соседству со считыванием через cin :)

а aesamson даёт такую рекомендацию
Можно заменить на getchar_unlocked() для *nix или getchar() для всех остальных.
getchar_unlocked > getchar > scanf > cin, где ">" означает быстрее.


В этом посте я развею и подтвержу некоторые мифы и дам пару рекомендаций.
Читать дальше →
Всего голосов 90: ↑88 и ↓2+86
Комментарии80

Простая программная генерация видео и картинок без стороннего API

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

В этой статье я покажу простой способ генерации видео программами на Python и C/C++ без использования стороннего API. Вам так же потребуется ffmpeg, без него вы не сможете конвертировать файлы в читаемые форматы!

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

Circuit Breaker — новая программа поиска уязвимостей в продуктах Intel

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


Как и большинство крупных игроков на рынке, Intel исторически всячески поддерживала желающих взломать продукты компании — естественно, только с добрыми намерениями, в число которых можно включить и желание себя показать и немного заработать. Устроена существовавшая ранее программа Intel Bug Bounty была в целом так же, как и любая Bug Bounty: вы нам баги, мы вам плюшки. К слову сказать, эта тема вовсе не отменяется, а переезжает на специализированный сайт Intigriti — крупнейшую в Европе платформу легального взлома. А вот собственная новая программа Intel теперь будет немного не о том.
А о чем именно?
Всего голосов 6: ↑4 и ↓2+2
Комментарии2

Война с компилятором и собой: об оптимизациях вещественной арифметики на Эльбрусе

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

Недавно в процессе выполнения учебного задания мне потребовалось реализовать метод конечных разностей для нахождения приближённого решения краевой задачи. По сути, я впервые столкнулся с вычислениями с плавающей точкой и не мог не попробовать запустить свою программу на Эльбрусе, зная о его больших возможностях и заточенности под вычисления такого рода. Хотите удивиться? Отправляйтесь со мной в увлекательное путешествие!

Читать дале
Всего голосов 185: ↑183 и ↓2+181
Комментарии114

Программирование необычных шахмат

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

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

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

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

Я запрограммировал 15 шахматных вариаций - для каждой опишу неожиданные ходы и результаты партий компьютера друг с другом.

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

CSS @layer — полное руководство по каскадным слоям

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

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

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

О сложностях мониторинга работающих процессов в Linux

Время на прочтение9 мин
Количество просмотров11K
Все знают о том, как наблюдать за работающими процессами в Linux-системе. Но почти никто не добивается в подобных наблюдениях высокой точности. На самом деле, всем методам мониторинга процессов, о которых пойдёт речь в этом материале, чего-то не хватает.



Давайте, прежде чем приступить к экспериментам, определим требования к системе наблюдения за процессами:

  1. Логироваться должны сведения обо всех процессах, даже о короткоживущих.
  2. У нас должны быть сведения о полном пути к исполняемому файлу для всех запущенных процессов.
  3. У нас, в пределах разумного, не должно возникать необходимости в модификации или перекомпиляции нашего кода для разных версий ядра.
  4. Дополнительное требование: если хост-система является узлом Kubernetes или использует Docker, то у нас должна быть возможность определить то, к какому именно поду/контейнеру принадлежит процесс. Для этого обычно достаточно знать cgroup ID процесса. Дело в том, что с точки зрения ядра нет такого понятия, как «контейнер» или «идентификатор контейнера». Ядро оперирует лишь такими понятиями, как «контрольные группы», «сетевые пространства имён», «пространства имён процессов», оно работает с различными независимыми API, с помощью которых средства контейнеризации вроде Docker реализуют механизмы контейнеризации. Если попытаться идентифицировать контейнеры посредством ID уровня ядра, нужен уникальный идентификатор контейнера. В случае с Docker данному требованию удовлетворяют идентификаторы контрольных групп.

Поговорим об обычных API Linux, которые могут помочь в решении этой задачи. Мы, чтобы не усложнять повествование, уделим особое внимание процессам, создаваемым с помощью системных вызовов execve. Если же говорить о более полном решении задачи, то при его реализации нужно, кроме того, мониторить процессы, созданные с помощью системных вызовов fork/clone и их вариантов, а так же — результаты работы вызовов execveat.
Читать дальше →
Всего голосов 37: ↑35 и ↓2+33
Комментарии0

История создания первого по настоящему open-source Brain-computer interface устройства (DIY)

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

Crowdsupply - История создания интерфейса мозг-компьютер (Open-source DIY).

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

Под капотом сортировок в STL

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


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


При написании статьи я использовал стандарт C++17. В качестве реализаций рассматривал GCC 10.1.0 (май 2020) и LLVM/Clang 10.0.0 (март 2020). В каждой и них есть своя реализация STL, а значит и std алгоритмов.

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

Paragon открыла свой драйвер NTFS для Linux, предложив включить его в ядро

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


Компания Paragon Software опубликовала набор патчей с полноценной реализаций файловой системы NTFS, открыв код драйвера под лицензией GPL. Драйвер поддерживает работу как в режиме чтения, так и в режиме записи.

По словам разработчиков, эта реализация поддерживает все возможности версии NTFS 3.1.Сейчас в драйвере используется урезанная реализация журнала NTFS. Но в будущем Paragon Software добавит поддержку полного журналирования поверх уже встроенного в ядро универсального блочного устройства JBD, на базе которого организовано журналирование в ext3, ext4, OCFS2.
Читать дальше →
Всего голосов 101: ↑99 и ↓2+97
Комментарии62

Triton vs Kao’s Toy Project. Продолжаем хорошую традицию

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


В данной статье речь пойдет про SMT-решатели. Так сложилось, что в исследовательских материалах, посвященных данной теме, появилась хорошая традиция. Уже несколько раз в качестве подопытного алгоритма для SMT-решателей разные исследователи выбирали один и тот же пример – крякми, придуманное некогда человеком с ником kao. Что ж, продолжим эту традицию и попробуем использовать для решения этого крякми еще один инструмент для символьных вычислений – Triton.

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

Как мы отказались от JPEG, JSON, TCP и ускорили ВКонтакте в два раза

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

На протяжении всей жизни мне приходится экономить вычислительные и сетевые ресурсы: сначала были компьютеры с 300 кГц (кило — не гига!) и 32 Кбайт RAM, интернет по dial-up. Потом я решал олимпиадные задачки. Теперь имею дело с терабайтами трафика и 50 млрд событий в сутки. И хотя современные телефоны в 1 000 раз мощнее любого оборудования двадцатилетней давности, я до сих пор оптимизирую. Думал даже, что это со мной что-то не так. Но потом понял, что все постоянно что-нибудь оптимизируют. 

Эта статья в меньшей степени о том, почему нужно бороться за производительность, и в большей о том, на что сейчас стоит заменить устаревший стек из JPEG, JSON, gzip и TCP — и как это сделать. 

Спойлер: у нас есть решение и мы его не только показываем — ссылки на open source в конце статьи.

Читать далее
Всего голосов 435: ↑423 и ↓12+411
Комментарии300

Youtube Timestamps — расширение для показа временных меток из комментариев

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

У YouTube есть возможность оставлять в комментариях временные метки для видео. Просто пишем в комментарии время в формате hh:mm:ss и YouTube сам превратит это в ссылку. Небезызвестный музыкальный сервис Soundcloud позволяет показывать комментарии к трэкам прямо на таймлайне. Так почему бы не сделать такое же в YouTube?!

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

SIM, microSIM, nano SIM, eSIM, iSIM: что собой представляет новая технология связи Qualcomm, интегрированная в SoC

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

На днях компания Qualcomm, один из крупнейших поставщиков чипов связи на рынок электроники, совместно с оператором Vodafone и промышленной группой Thales продемонстрировала в работе новый стандарт SIM, который получил название iSIM.

По словам авторов проекта, этот стандарт является новым этапом эволюции SIM. Предыдущим была технология eSIM, которая давала возможность получить доступ к услугам связи операторов без установки карточки SIM. Но для eSIM все же требовался отдельный модуль связи, а вот iSIM встраивается прямо в SoC. Ранее компания рассказывала о iSIM, но очень кратко, теперь же показано работающее устройство на базе этой технологии с раскрытием особенностей новинки.
Читать дальше →
Всего голосов 56: ↑55 и ↓1+54
Комментарии23

CWE Top 25 2021. Что такое, с чем едят и чем полезен при статическом анализе?

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

Впервые поддержка классификации CWE появилась в PVS-Studio с релизом 6.21, который состоялся 15 января 2018 года. С тех пор прошло уже очень много времени, и хотелось бы рассказать об улучшениях, связанных с поддержкой этой классификации в последних версиях анализатора.


https://import.viva64.com/docx/blog/0869_CWE_status_ru/image1.png


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

Семантическая разметка: LaTeX, DocBook или ???

Время на прочтение4 мин
Количество просмотров18K
Писал комментарий к статье и понял, что надо выносить в отдельный пост.
Как многие отмечают там в комментариях статья отстой, человек не разбирается и смешал всё в кучу, попробую поделиться своими выводами от использования разных разметок.
Читать дальше →
Всего голосов 15: ↑13 и ↓2+11
Комментарии55

High-Quality Text-to-Speech Made Accessible, Simple and Fast

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

image


There is a lot of commotion in text-to-speech now. There is a great variety of toolkits, a plethora of commercial APIs from GAFA companies (based both on new and older technologies). There are also a lot of Silicon Valley startups trying to ship products akin to "deep fakes" in speech.


But despite all this ruckus we have not yet seen open solutions that would fulfill all of these criteria:


  • Naturally sounding speech;
  • A large library of voices in many languages;
  • Support for 16kHz and 8kHz out of the box;
  • No GPUs / ML engineering team / training required;
  • Unique voices not infringing upon third-party licenses;
  • High throughput on slow hardware. Decent performance on one CPU thread;
  • Minimalism and lack of dependencies. One-line usage, no builds or coding in C++ required;
  • Positioned as a solution, not yet another toolkit / compilation of models developed by other people;
  • Not affiliated by any means with ecosystems of Google / Yandex / Sberbank;

We decided to share our open non-commercial solution that fits all of these criteria with the community. Since we have published the whole pipeline we do not focus much on cherry picked examples and we encourage you to visit our project GitHub repo to test our TTS for yourself.

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

Краеугольные камни уничтожения медленного кода в Wolfram Language: ускоряем код в десятки, сотни и тысячи раз

Время на прочтение77 мин
Количество просмотров12K
Скачать файл с кодом и данные можно в оригинале поста в моем блоге

Картинка к вебинару и посту взята не просто так: в определенном смысле символьное ядро Wolfram Language можно сравнить с Таносом — если бы его мощь была бы направлена в правильное русло, он мог бы стать самым мощным и полезным «добряком». Так же и с символьным ядром Wolfram — его чудовищную мощь нужно правильно использовать, а если это делать не так, оно может стать настоящим «злом», замедляющим все очень сильно. Начинающие разработчики не знают многих важнейших парадигм, идей и принципов языка Wolfram Language, пишут код, который на самом деле дико неэффективен и после этого разочаровываются, хотя тут нет вины Wolfram Language. Эту ситуацию призвана исправить эта статья.

Мне довелось работать с Wolfram Language начиная с (уже довольно далекого) 2005 года (тогда еще была версия Mathematica 5.2, сейчас уже 12-я). За эти почти 15 лет произошло очень много: добавились тысячи новых встроенных функций и областей, в которых они работают (машинное обучение, точная геометрия, работа с аудио, работа в вебе, облачные возможности, глубокая поддержка единиц измерения, интеграция с базами данных Wolfram|Alpha, географические вычисления, поддержка работы с CUDA, Python, распараллеливание операций и многое многое другое), появились новые сервисы — облако Wolfram Cloud, широко известная система вычислительных значeний Wolfram|Alpha, репозиторий функций, репозиторий нейросетей и пр.
Всего голосов 22: ↑21 и ↓1+20
Комментарии20

Сам себе Гутенберг. Делаем многоязычные параллельные книги

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

Lingtrain parallel books article cover


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


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


Семь книг


Проделаем все на примере романа Булгакова "Мастер и Маргарита", потому что он очень популярен в мире и был переведен на множество языков. Я нашел его версии на английском и немецком (германские языки); белорусском, чешском и украинском (славянские языки); а также на венгерском и китайском языках. Все семь текстов мы выровняем с русским оригиналом, получим семь книг. Затем выровняем их между собой и получим возможность выбирать любые комбинации языков для своей книги в любом порядке. Полные версии книг можно будет скачать в формате pdf в конце статьи.


Начнем с пары венгерский-русский.

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

ЭТТ, или когда в резюме можно написать, что профессионально моргаю светодиодом

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

ЭлектроТермоТренировка (ЭТТ) один из самых действенных производственных методов технологической тренировки и отбраковки изделий электроники и микроэлектроники. На картинке приведена классическая зависимость интенсивности отказов любого устройства во времени.

Что бы не допустить что бы первый всплеск большого числа отказов в начальный период времени произошел у конечного покупателя (потребителя) производители стараются "не выносить мусор из избы" и "убить" потенциально слабые или бракованные изделия непосредственно в цикле производства. Для разного вида техники могут применяться разные виды тренировки - обкатка, старение, притирка и так далее. Для изделий микроэлектроники (микросхем) наиболее действенным, но в тоже время и очень дорогим является ЭлектроТермоТренировка.

Как это работает?
Всего голосов 36: ↑36 и ↓0+36
Комментарии14

Информация

В рейтинге
Не участвует
Откуда
Россия
Дата рождения
Зарегистрирован
Активность