Pull to refresh
22
@d1gital_loveread⁠-⁠only

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

Send message

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

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

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

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

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


В этом посте я развею и подтвержу некоторые мифы и дам пару рекомендаций.
Читать дальше →

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

Reading time5 min
Views9K

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

Читать далее

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

Reading time2 min
Views2.6K


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

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

Reading time24 min
Views28K

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

Читать дале

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

Reading time18 min
Views20K

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

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

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

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

Читать далее

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

Reading time26 min
Views25K

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

Читать далее

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

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



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

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

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

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

Reading time7 min
Views24K


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


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

Читать дальше →

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

Reading time2 min
Views33K


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

По словам разработчиков, эта реализация поддерживает все возможности версии NTFS 3.1.Сейчас в драйвере используется урезанная реализация журнала NTFS. Но в будущем Paragon Software добавит поддержку полного журналирования поверх уже встроенного в ядро универсального блочного устройства JBD, на базе которого организовано журналирование в ext3, ext4, OCFS2.
Читать дальше →

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

Reading time12 min
Views7.7K


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

Читать дальше →

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

Reading time24 min
Views171K

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

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

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

Читать далее

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

Reading time1 min
Views5.6K

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

Читать далее

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

Reading time3 min
Views17K

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

По словам авторов проекта, этот стандарт является новым этапом эволюции SIM. Предыдущим была технология eSIM, которая давала возможность получить доступ к услугам связи операторов без установки карточки SIM. Но для eSIM все же требовался отдельный модуль связи, а вот iSIM встраивается прямо в SoC. Ранее компания рассказывала о iSIM, но очень кратко, теперь же показано работающее устройство на базе этой технологии с раскрытием особенностей новинки.
Читать дальше →

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

Reading time8 min
Views16K

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


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


Читать дальше →

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

Reading time4 min
Views19K
Писал комментарий к статье и понял, что надо выносить в отдельный пост.
Как многие отмечают там в комментариях статья отстой, человек не разбирается и смешал всё в кучу, попробую поделиться своими выводами от использования разных разметок.
Читать дальше →

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

Reading time8 min
Views11K

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.

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

Reading time77 min
Views13K
Скачать файл с кодом и данные можно в оригинале поста в моем блоге

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

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

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

Reading time14 min
Views8.3K

Lingtrain parallel books article cover


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


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


Семь книг


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


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

Читать дальше →

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

Reading time4 min
Views8.5K

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

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

Как это работает?

Information

Rating
Does not participate
Location
Россия
Date of birth
Registered
Activity