Рубрика «Программирование» - 62

Как я исправлял Tiobe index - 1Эта история случилась в 2015 году. Тогда я написал статью для своего сайта на болгарском языке. А в прошлом году, я решил подтянуть свои знания в русском языке. И сделал этот перевод в качестве упражнения.

Ну и решил опубликовать. Конечно осовременил и укомплектовал картинками.

Надеюсь, эта почти детективная история вам понравится.

Рассказ о том, как работает Tiobe index, как это связано с ассемблером и о моей маленькой роли во всем этом.

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

Транзакционное юнит-тестирование приложений с БД - 1

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

В этой статье я хочу провести обзор разных способов юнит-тестирования приложения с БД и рассказать о способе, который я не видел в русскоязычном сегменте интернета. Статья будет посвящена Python 3, pytest и ORM-фреймворку SQLAlchemy, но методы переносимы на другие инструменты.
Читать полностью »

Рефлексия в C++Next на практике - 1

Определение понятия "рефлексия" из Википедии:

In computer science, reflective programming or reflection is the ability of a process to examine, introspect, and modify its own structure and behavior.

В последние годы разрабатываются варианты ввода рефлексии в стандарт C++.

В этой статье мы напишем код на C++ с рефлексией для решения разных задач, скомпилируем и запустимЧитать полностью »

Прим. Wunder Fund: не спешите минусовать эту публикацию — её перевода на Хабре ещё не было :)

Это — продолжение моей предыдущей публикации (вот — перваявторая и третья части перевода), посвящённой тому, как я создал алгоритм сортировки, который быстрее std::sortЧитать полностью »

Сумма целых чисел — что может быть проще? Сумма есть в SQL, в Java Stream API… в крайнем случае напишем сами. Как и всякая абстракция, она расходится с реальностью.

Вот счёт клиента в банке, по нему движения — положительные пополнения и отрицательные списания — в сумме дают текущий баланс. Так сумма работает в идеальном мире. А в реальности при большом минусе банк с отсрочкой, но предпримет нетривиальные действия вплоть до обращения в суд, чтобы закрыть финансовую брешь.

static long usualSum(LongStream changes) {
    return changes.reduce(0, (a, b) -> a + b);
}

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

Они вам не string-и!
Они вам не string-и!

У Билла Гейтса (или не у него) есть высказывание:

«Я всегда буду искать ленивого человека — он найдёт лёгкий путь решить задачу».

И вроде бы с нею можно согласиться, но тут стоит чётко понимать, что значит здесь «ленивый».

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

Идея

В Java каждый объект - это заголовок и данные. В случае 64 битной машины заголовок равен 16 байтам. Также Java использует выравнивание объектов в памяти по 8 байт, следовательно размер объекта кратен 8 байтам. Поэтому обёртки примитивных типов такие как Integer, Double занимают по 24 байта, что весьма затратно для примитивных типов.

Проблема

Объекты в Java располагаются в куче, ссылки на них лежат в List<?>, в результате для int мы получаем 28 байт (если используется сокращение ссылок) вместо 4 и возможный разброс адресов объектов по памяти.

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

Новогодний детектив, или странный хайзенбаг в «питоньих» часах - 1

Давненько я не писал на Хабр, да и тема интересная появилась, так что пора поправить это постыдное упущение.

Далее собственно детектив как оно есть, "расследование" которого ещё не окончено, можно присоединиться кстати… Пост будет обновляться, по окончанию (я надеюсь что баг таки найдётся) пост изменит название получив префикс "[SOLVED]"...

Постучался тут человечек на GH, с ошибкой типа "Fail2ban ведет себя как-будто он временами в будущем". Первой мыслью было — что опять! ну снова кто-то во временных зонах потерялся.
Но нет, всё оказалось несколько хуже — иногда, редко, Fail2ban пишет в логи дату из 2023-го года.
И не только пишет, а по всей видимости действительно начинает считать что он где-то в 2023-м, со всеми вытекающими — снятием бана для блокированных адресов по истечению срока действия и т.д. и т.п.
Причем делает это для всех потоков, а чуть позже возвращается в 2021-й, чтобы позднее снова на короткое время прыгнуть в 2023-й и так снова и снова.

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

Нельзя копировать код с помощью memcpy, всё намного сложнее - 1

В своё время один из клиентов сообщил нам, что на Itanium его программа завершалась аварийно.

Постойте, не закрывайте статью!

На Itanium клиент выявил проблему, но она свойственна и всем остальным архитектурам, так что продолжайте чтение.
Читать полностью »

ATSHA204A: маленький гигант большого крипто. Часть 1: ой, какой он у вас маленький - 1

Рано или поздно, занимаясь DIY-разработкой, проектированием IoT устройств и тому подобным творчеством (или работой), вы приходите к необходимости защищать свои устройства и их коммуникации от взлома, кражи и подделки хранимых и передаваемых данных. Особенно это актуально в популярной области «интернета вещей», где вся система является распределённой и между её частями, хабами, датчиками и прочими элементами, происходит постоянный обмен информацией.

Первое, что приходит в голову — это реализация криптографической защиты программными средствами, например, защита передаваемых данных при помощи связки SHA-256/AES. Для большинства современных микроконтроллеров существуют соответствующие библиотеки, которые успешно работают даже на таких слабых MCU как ATmega328.

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

Что же делать?Читать полностью »


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