Метка «c++» - 29

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

Я не нашел простого пути, как с помощью Visual Studio и ReSharperа ввести синоним в уже написанном классе. В связи с чем я решил реализовать свое дополнение к ReSharper которое позволило бы решить эту проблему. В этой статье я бы хотел рассказать о подводных камнях, с которыми пришлось столкнуться, реализуя, на первый взгляд, такой простой рефакторинг. (исходный код и реализация в конце статьи)
Читать полностью »

Решение транспортной задачи при помощи генетического алгоритма как часть SOA

Приветствую уважаемое читатели!

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

Формулировка задачи

Википедия формулирует задачу следующим образом — задача об оптимальном плане перевозок однородного продукта из однородных пунктов наличия в однородные пункты потребления на однородных транспортных средствах (предопределённом количестве) со статичными данными и линеарном подходе.

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

Читать полностью »

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

Например, помимо стандартных групп диагностик вроде General Analysis, 64-bit analysis или Optimization у нас в PVS-Studio есть группа под названием Customer's Specific. Туда попадают диагностики, которые нужны нашим клиентам, но которые не подходят под прочие группы диагностик. Выражаясь более художественно можно сказать так. Группа диагностик Customer's Specific является эрогенной зонной нашего продукта. Если ее потрогать (добавить туда какую-то диагностику), то клиенту станет очень приятно. Естественно такой подход к развитию продукта и продаже надо применять очень осторожно, так как конечный клиент не обладает полным видением продукта и не имеет представления о том, куда продукт развивается.

Еще нам нравится, как работает предпродажная команда в компании Coverity. Мы конечно не уверены в этом на 100%, но нам кажется, что они работают примерно так. Если появляется потенциальный клиент, то к нему вылетает спецназ на вертолете, который на месте настраивает окружение, запускает анализатор, внимательно работает со списком диагностических сообщений и т.п. В завершении всего этого для потенциального клиента делается ПРЕЗЕНТАЦИЯ (!), в которой клиенту рассказывают про ошибки, найденные в его проекте, и говорят, что нужно делать, чтобы их не было (купить инструмент, ага). Почему они так делают? Хороший вопрос! Наверное, они считают, что разработчик инструмента может намного более качественно им пользоваться. У него больше опыта, он легче определяет ложные срабатывания и умеет их отсеивать, у него набит глаз на реальные ошибки и он их не пропустит. Это значит, что потенциальные клиенты получат намного больше ярких впечатлений от первого знакомства с продуктом, чем если бы они сами потыкали в нём кнопки.

И мы подумали – а что если нам действовать также как Coverity? К сожалению, спецназ на вертолете мы пока выслать не можем. Но что если мы попробуем проверить код потенциальных клиентов и сами найдем реальные программные ошибки в их проектах? Да еще и сделаем презентацию ну или хотя бы отчет о найденных проблемах? Наверняка тогда больше потенциальных пользователей захочет купить наш инструмент! Но, естественно, никто нам чужой код на сторону не даст, поэтому решили попробовать проверять код потенциальных клиентов в удаленном режиме, подключаясь к их компьютерам из своего офиса. Кому такое интересно – читаем далее.

Читать полностью »

Предыстория

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

image
Не задалось у меня общение с DynDNS сервисами буквально с первого дня знакомства. Грабли попадались на каждом шагу: регистрация, скачивание и запуск клиента, настройка клиента или роутера – везде были какие-то мелкие нюансы, недоговорки, недоделки или просто баги, что приводило к неработоспособности сервиса. В довесок ко всему, через время «эти ребята» вдруг перестают быть белыми, пушистыми и бесплатными — начинают слать спам, раз в месяц требовать разгадать капчу или заставляют проделывать еще какие-либо телодвижения, чтобы доказать что ты еще жив. Всё это привело к общей неприязни ко всем сервисам подобного рода. Так и возникла идея создать что-то своё, и чтоб обязательно «белое и пушистое».
Читать полностью »

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

Я расскажу о следующем:

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

Читать полностью »

Boost and PVS-Studio

Мы уже давно хотели проверить библиотеку Boost. У нас не было уверенности, что результатов проверки хватит на статью. Однако, желание не пропадало. Два раза мы пытались сделать это, но отступали, не разобравшись, как заменить вызов компилятора на вызов PVS-Studio.exe. Теперь мы вооружились новым инструментарием, и третья попытка оказалась удачной. Итак, возможно ли найти в Boost ошибки?

Читать полностью »

Добрый день.

В ходе разработки своего проекта под Android, столкнулся с задачей делать обновление (update) большого количества строк в SQLite базе, прямо на устройстве.

Изначальное решение в лоб дало жутко медленные результаты, т.к. обновлять предстояло более 40 000 строк. О том, как я улучшал производительности данных обновлений строк в базе, и пойдёт рассказ.
Читать полностью »

Парсер CSS для .NET, написанный на C# (зачёркнуто) регулярных выражениях Понадобилось мне однажды распарсить CSS, чтобы вынуть @import, url(). Но для .NET были только разной степени кривоты поделки. Лучшей библиотекой была ExCSS, но она загибалась на таких тривиальных вещах, как медиа-запросы. Поэтому я решил заполнить пробел.

Были варианты: расковырять Chrome, расковырять Firefox, расковырять левую библиотеку. Нужно было гарантированное качество и регулярное обновление, поэтому последний вариант отпадал. В Chrome парсинг CSS и HTML генерировался на основе грамматик, и беглое изучение разнообразия инструментов для .NET повергло в уныние, что уж говорить о совместимости инструментов, поэтому Chrome отпал. Остался Firefox с вручную написанными парсерами.

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

Я вижу косые взгляды. У кого-то уже тянется рука набирать 03…

Читать полностью »

Пролог

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

  1. Сложность внедрения в существующий проект.
  2. Отсутствие средств форматирования локализованных сообщений (за исключением стандартного string.Format).
  3. Невозможность встраивания культурно-зависимых функций. Например, типичную задачу, — подстановку нужной формы слова в зависимости от значения числа, — одними словарями значений не разрешить.

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

Состав библиотеки

Ссылка на проект SourceForge: https://sourceforge.net/projects/open-genesis/?source=navbar

В сборку входят следующие проекты:

  • Genesis.Localization — основная библиотека локализации.
  • Ru — реализация русской локализации (пример).
  • En — реализация английской локализации (пример).
  • LocalizationViewer — программа для демонстрации возможностей библиотеки с возможностью редактирования локализаций.

    image
    Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js