Апрель 14

Статья о статическом анализе кода для менеджеров, которую не стоит читать программистам

Что нам делать с ошибками?
Если вы считаете себя хорошим программистом, ну, скажем так, вы оцениваете свой уровень выше среднего, прошу не читать эту статью. Эта статья предназначена для менеджеров программных проектов. С ними я хочу обсудить хотя и важные, но скучные для программистов вопросы, связанные с методологией статического анализа кода.
Читать дальше →

Раздел: Информационная безопасность | Комментарии к записи Статья о статическом анализе кода для менеджеров, которую не стоит читать программистам отключены
Апрель 14

[Из песочницы] Идиомы Attorney-Client и Passkey для выборочного доступа к методам класса

При проектировании приложений на C++ временами возникает необходимость предоставления доступа к закрытым методам класса другому классу или свободной функции. Для этого в языке C++ есть ключевое слово friend, которое предоставляет полный доступ не только к публичному интерфейсу класса, но и к закрытому, и всем деталям реализации. Таким образом friend работает по принципу «все или ничего» и «все» может быть слишком много. Например, когда есть класс Facade и несколько клиентов Client1, Client2, то может потребоваться предоставить каждому клиенту доступ только к определенному набору методов, причем каждому клиенту к своему набору, не предоставляя доступа к деталям реализации. Для решения такой задачи в C++ есть все возможности. В этой статье я расскажу про две идиомы Attorney-Client и Passkey и как их использовать с нулевыми накладными расходами.
Читать дальше →

Раздел: Без рубрики | Комментарии к записи [Из песочницы] Идиомы Attorney-Client и Passkey для выборочного доступа к методам класса отключены
Апрель 14

Суперсилы WinDbg для .NET-разработчиков

Продолжая серию публикаций по докладам на конференциях, мы остановились на лучшем докладе DotNext 2016 Moscow, в которой Саша goldshtn Гольдштейн рассказывает о возможностях WinDbg для отладки .NET приложений. Этот действительно мощный инструмент позволяет решать задачи, с которыми не справляется встроенный отладчик Visual Studio.

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

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

Раздел: Без рубрики | Комментарии к записи Суперсилы WinDbg для .NET-разработчиков отключены
Апрель 13

[Из песочницы] Визуализация простой геометрии в WPF

Что такое геометрия модели

Для работы с 3D моделями мы используем специальные конвейеры обработки — OpenGL и DirectX. Когда конвейеры строят картину, они используют информацию:

  • о модели — её материале, геометрии и текстурах,
  • о сцене — освещении и настройке камеры.

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

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

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

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

Раздел: Без рубрики | Комментарии к записи [Из песочницы] Визуализация простой геометрии в WPF отключены
Апрель 12

(Не) любителям protothreads посвящается: Высокоуровневые функции для работы с 1-Wire

Подразумевается, что мы будем писать прошивку под «голое железо». В противном случае применение protothreads смысла не имеет, т.к. мультизадачность должна обеспечиваться средствами ОС. Подразумевается также, что нам необходимо реализовать несколько более-менее сложных алгоритмов, связанных с операциями ввода-вывода. Ну и, как всегда в микроконтроллерах, очевидные требования по экономии RAM и энергопотребления.
Читать дальше →

Раздел: Без рубрики | Комментарии к записи (Не) любителям protothreads посвящается: Высокоуровневые функции для работы с 1-Wire отключены
Апрель 12

Немного о строках в Си, или несколько вариантов оптимизировать неоптимизируемое

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

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

Разговор о программировании под Linux медленно перешел к тому, что этот человек стал утверждать, что сложность системного программирования на самом деле сильно преувеличена. Что язык Си прост как спичка, собственно как и ядро Linux (с его слов).

У меня был с собой ноутбук с Linux, на котором присутствовал джентльменский набор утилит для разработки на языке Си (gcc, vim, make, valgrind, gdb). Я уже не помню, какую цель мы тогда перед собой поставили, но через пару минут мой оппонент оказался за этим ноутбуком, полностью готовый решать задачу.

И буквально на первых же строках он допустил серьезную ошибку при аллоцировании памяти под… строку.

char *str = (char *)malloc(sizeof(char) * strlen(buffer));

buffer — стековая переменная, в которую заносились данные с клавиатуры.

Я думаю, определенно найдутся люди, которые спросят: «Разве что-то тут может быть не так?».
Поверьте, может.

А что именно — читайте по катом.
Читать дальше →

Раздел: Без рубрики | Комментарии к записи Немного о строках в Си, или несколько вариантов оптимизировать неоптимизируемое отключены
Апрель 11

Война машин: PVS-Studio vs TensorFlow

«I’ll be back» ©. Думаю, все знают эту фразу. И хотя сегодня мы будем говорить не о возвращении терминатора, тема статьи в некотором роде схожа. Сегодня расскажем о проверке библиотеки машинного обучения TensorFlow и попробуем выяснить, можем ли мы спать спокойно, или час Skynet уже близок…
Читать дальше →

Раздел: Без рубрики | Комментарии к записи Война машин: PVS-Studio vs TensorFlow отключены
Апрель 11

Guard классы — использовать или нет?

На днях мне довелось делать довольно крупные изменения в одном C# проекте — удаление сторонней сборки. Самое "замечательное", что львиную долю времени я потратил на изменение мест, где использовались helper’ы из этой сборки (так сказать бонус к основной функциональности).

Helper’ы такого вида:

Guard.ArgumentNotNull(myobject, "myobject");

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

Раздел: Без рубрики | Комментарии к записи Guard классы — использовать или нет? отключены
Апрель 9

[Из песочницы] Функциональное программирование на Perl в примерах

В данной статье будет рассмотрено функциональное программирование на примере скрипта поиска битых ссылок с использованием AnyEvent::HTTP. Будут рассмотрены следующие темы:

  • анонимные подпрограммы;
  • замыкания (closures);
  • функции обратного вызова (callbacks);

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

Раздел: Без рубрики | Комментарии к записи [Из песочницы] Функциональное программирование на Perl в примерах отключены
Апрель 8

[Из песочницы] Разбираем квалифицированные сертификаты X.509 в поисках ИНН, СНИЛС и ОГРН

Разбираем квалифицированные сертификаты X.509 в поисках ИНН, СНИЛС и ОГРН«Коллеги, нам необходимо вести реестр выданных квалифицированных сертификатов с возможностью поиска по ИНН, СНИЛС и ОГРН. Сколько дней нужно для создания парсера сертификатов и первого макета?» — с такого вопроса начальника началась очередная летучка.

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

Когда-то я участвовал в небольшом проекте по моделированию SSL MITM, где отвечал за генерацию ключей и сертификатов для этого самого «человека посередине». Поэтому представлял, что квалифицированный сертификат ключа проверки электронной подписи (далее — квалифицированный сертификат) — это сертификат X.509, для описания внутренней структуры которого используется всеми любимый ASN.1.

Вот только не помнил я, чтобы тогда на глаза попадались эти ИННы, СНИЛСы и ОГРНы. Поэтому ответил более, чем скромно: «Босс, два дня, не меньше!», надеясь выполнить задачку за несколько часов.

Ниже рассказ о том, насколько сильно я ошибся в расчетах, а также готовое решение для парсинга сертификатов X.509 на C# с возможностью извлечения полей и их атрибутов с заданными объектными идентификаторами (OID). Читать дальше →

Раздел: Информационная безопасность | Комментарии к записи [Из песочницы] Разбираем квалифицированные сертификаты X.509 в поисках ИНН, СНИЛС и ОГРН отключены