Обновить
-3
0

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

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

Концепция умного указателя static_ptr<T> в C++

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

В C++ есть несколько "умных указателей" - std::unique_ptr, std::shared_ptr, std::weak_ptr. Также есть более нестандартные умные указатели, например в boost: intrusive_ptr, local_shared_ptr.

В этой статье мы рассмотрим новый вид умного указателя, который можно назвать static_ptr. Больше всего он похож на std::unique_ptr без динамической аллокации памяти.

Читать далее

Как делать devOps «снизу»: лидерство изменений

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

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

Я знаю, как НЕ стоит продавать идеи коллегам и менять работу коллектива – один раз попробовал, не получилось - об этом статья “Как начать делать непрерывную поставку «снизу»: теория ограничений”. А потом в трех книгах нашел описание совершенных ошибок. И каждая книга описывала ранее неизвестные ошибки!

Читать далее

С++17 wrapper для OpenSSL: ECDH и AES 256

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

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

Читать далее

Возможности QR-кодов

Время на прочтение6 мин
Охват и читатели34K
image

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


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


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


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

Фото из Android смартфона в Qt Widgets

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

Получение изображения из камеры Android-смартфона в кросс-платформенном приложении Qt Widgets с помощью Android-приложения по-умолчанию для фотографирования.

Читать далее

Проверка орфографии в приложениях Qt

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

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

Читать далее

Всё, о чём должен знать разработчик Телеграм-ботов

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

Вы вряд ли найдете в интернете что-то про разработку ботов, кроме документаций к библиотекам, историй "как я создал такого-то бота" и туториалов вроде "как создать бота, который будет говорить hello world". При этом многие неочевидные моменты просто нигде не описаны.

Как вообще устроены боты? Как они взаимодействуют с пользователями? Что с их помощью можно реализовать, а что нельзя?

Подробный гайд о том, как работать с ботами — под катом.

Читать далее

Стивен Вольфрам: кажется, мы близки к пониманию фундаментальной теории физики, и она прекрасна

Время на прочтение70 мин
Охват и читатели403K
В продолжение моего поста про вычислимую Вселенную я хочу представить вам свой перевод статьи Стивена Вольфрама, созданной в рамках его проекта The Wolfram Physics Project.


Неожиданное открытие


За прошедшие несколько веков произошел настоящий прорыв в наших знаниях о принципах работы окружающего нас мира. Но несмотря на это, у нас все еще нет фундаментальной теории физики, и мы все так же не имеем ответа на вопрос о том, как именно работает наша Вселенная. Я занимаюсь этой темой уже порядка 50-и лет, но только в последние несколько месяцев все кусочки пазла наконец-то начали складываться вместе. И получающаяся картина оказалась гораздо прекрасней, чем все, что я только мог себе представить.
Читать дальше →

Чествуем игривое волшебство Джона Хортона Конвея

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

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

Читать далее

В одной лодке с «ублюдком»: 11 продвинутых советов по использованию Git

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

*"ублюдок" — вольный перевод слова "git" — "an unpleasant or contemptible person", "неприятный или презренный человек".



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


Давайте посмотрим, что можно использовать, чтобы улучшить себе жизнь. Статья предполагает, что читатель умеет пользоваться основными возможностями git и понимает что делает, когда, скажем, вводит в консоль git rebase --merge --autostash.

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

Game of Life с битовой магией, многопоточностью и на GPU

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

Всем привет!


Недавняя статья на Хабре в очередной раз показала неостывающий интерес к игре «Жизнь» в частности и всевозможным оптимизациям в общем. Статья и комментарии к ней, особенно любопытство к вычислениям на GPU, вдохновили меня на то, чтобы поделиться своими изысканиями на данном поприще и, забегая вперёд, скажу, что повествование пойдёт о расчётах на GPU, битовой магии, многопоточности и огромных полях для игры «Жизнь», порядка миллиарда клеток.


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

Многопоточный линейный список: проблема существования элемента, повышение производительности и соотношение с STL

Время на прочтение57 мин
Охват и читатели8.1K
Здравствуйте, уважаемые посетители Хабра!

В этой статье речь пойдёт о связном списке, многопоточности и С++. Сразу отмечу, что были все шансы положить эту работу «на полочку» и использовать в небольшом количестве личных проектов. Вместо этого я всё-таки решил выложить её на суд общественности – вдруг это действительно покажется кому-нибудь полезным или интересным. Более того, если окажется, что кто-нибудь когда-нибудь уже успел сделать что-нибудь подобное, укажите мне эти материалы, пожалуйста. Однако сколько я ни пытался гуглить на эту тему, все попытки были безуспешны.

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

Этот проект, которым я занимался на правах хобби и саморазвития, по ряду причин растянулся на весьма длительный срок. Кроме того, по мере работы над ним я интенсивно учился: проект начинался без знания и понимания STL и проектировался соответственно, используя только внутренние средства собственно языка С++. Однако потом я весьма серьёзно его модифицировал с учётом STL и даже под STL. Что у меня из этого получилось, судить вам, уважаемые читатели.
Читать дальше →

Бесплатные вещи за карму — история белорусского стартапа, который меняет принцип потребления

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


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

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

Но недавно я узнал, что в Беларуси, где я прожил несколько лет, стал очень популярен сервис, где люди раздают друг другу вещи просто так. Тогда я созвонился с одним из трех его основателей Сергеем Лепченковым. Это бывший программист, который бросил программирование как только смог себе это позволить. Оказалось, за проектом кроется гораздо больше, чем «очередная удобная приложенька в смартфоне». Кажется, я впервые лично поговорил с тем мифическим видом стартапера, который искренне верит, что знает, как сделать мир лучше.
Читать дальше →

БД мессенджера (ч.1): проектируем каркас базы

Время на прочтение5 мин
Охват и читатели23K
Как можно перевести бизнес-требования в конкретные структуры данных на примере проектирования «с нуля» базы для мессенджера.



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

Поэтому не будем затрагивать вопросы шардинга, репликации и геораспределенных систем, а сосредоточимся на схемных решениях внутри БД.
Читать дальше →

Разработка интерфейсных классов на С++

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

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



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

Как мы перевели 10 миллионов строк кода C++ на стандарт C++14 (а потом и на C++17)

Время на прочтение7 мин
Охват и читатели51K
Некоторое время назад (осенью 2016), при разработке очередной версии технологической платформы 1С:Предприятие внутри команды разработки встал вопрос о поддержке нового стандарта C++14 в нашем коде. Переход на новый стандарт, как мы предполагали, позволил бы нам писать многие вещи элегантней, проще и надежней, упрощал поддержку и сопровождение кода. И в переводе вроде бы нет ничего экстраординарного, если бы не масштабы кодовой базы и специфические особенности нашего кода.

Для тех кто не знает, 1С:Предприятие – это среда для быстрой разработки кросс-платформенных бизнес-приложений и runtime для их выполнения в разных ОС и СУБД. В общих чертах в состав продукта входят:


Мы стараемся по максимуму писать один код для разных ОС — кодовая база сервера общая на 99%, клиента — примерно на 95%. Технологическая платформа 1С:Предприятие преимущественно написана на C++ и ниже приведены приблизительные характеристики кода:

  • 10 миллионов строк С++ кода,
  • 14 тысяч файлов,
  • 60 тысяч классов,
  • полмиллиона методов.

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

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

Клеточные автоматы в браузере

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

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

Клеточные автоматы имеют различные формы, виды и размерности. Наверно, самым знаменитым клеточным автоматом является конвеевская игра «Жизнь» (Conway's Game of Life, GOL). Она состоит из двухмерной сетки, в которой каждая клетка содержит двоичное значение (живая или мёртвая). Сопутствующие правила на основании состояния соседних клеток определяют, должна ли клетка быть мёртвой или живой. Правила гласят, что живая клетка умирает от одиночества, если вокруг неё меньше 2 живых клеток. Если живы больше трёх соседних клеток, она погибает от перенаселённости. Другими словами, клетка «выживает», если вокруг неё ровно 2 или 3 живых соседних клеток. Чтобы мёртвая клетка ожила, у неё должно быть ровно 3 живых соседних клеток, в противном случае она остаётся мёртвой. Пример автомата GoL, итеративно проходящий несколько состояний, показан ниже.

Game of Life

Ещё один знаменитый вариант клеточного автомата одномерен; он называется элементарным клеточным автоматом (Elementary Cellular Automaton, ECA). Именно его мы реализуем в этом посте.
Читать дальше →

О коте Шредингера

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

Зачем


О ситуации с котом Шредингера, наверно, имеет представление большинство хабровцев, интересующихся физикой. Поэтому я не буду ее излагать. Дискуссия ведется вокруг интерпретации состояния кота. Вот альтернативы:

  1. Кот “И жив И мертв”. Это описывается в квантовой механике как суперпозиция состояний “жив” и “мертв” и, значит, возможны какие-то интерференционные эффекты, подобно случаю рассеяния света на двух щелях.
  2. Кот “ИЛИ жив ИЛИ мертв”. Эта трактовка запрещает вышеуказанную суперпозицию и, значит, запрещает интерференционные эффекты.

Моя задача изложить точку зрения, вытекающую, как мне кажется, из чтения книги “Квантовая механика” Фейнмана.
Дальше

Для усиления внимания наш мозг не повышает концентрацию, а использует информационные фильтры

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

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



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

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

Процессы переключения внимания помогают мозгу включить «прожектор», связанный с нужным стимулом, и отфильтровать всё остальное. Нейробиологи хотят определить нейросети, направляющие и подпитывающие этот прожектор. Десятилетия их исследования были связаны с корой, волнистой структурой на поверхности мозга, обычно связываемой с интеллектом и работой разума. Стало ясно, что активность коры усиливает обработку сигналов для концентрации на интересующих нас вещах.

Информация

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

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

C++ Разработчик
Средний