В данной статье мы рассмотрим простую реализацию связки алгоритма согласования ключей Диффи-Хеллман на элиптических кривых и алгоритма симметричного шифрования AES 256 с использованием библиотеки OpenSSL для организации защищённого соединения.
User
Neovim для full stack программиста
Я немного расскажу, как использую vim в работе full stack программиста, со своей колокольни, но для начала отвечу на некоторые вопросы, которые задают мне, когда узнают, что я использую vim при разработке проектов:
Зачем?
Хороший вопрос. Стоит для себя лично на него ответить. Зачем валандаться с vim, изучать кучу комбинаций клавиш и плагинов? Какой смысл, если есть vscode или pycharm или phpstorm? Жизнь коротка, стоит ли ее тратить на все это? Чтобы впечатлить кого-то, как на картинке в начале статьи? Да кого этим удивишь?
Ускоряем pow
В этой статье я хочу поделиться несколькими нестандартными алгоритмами для быстрого возведения числа в степень, а также продемонстрировать их реализацию и сравнить их быстродействие в C++, C# и Java.
Сравнить точность алгоритмов можно прямо сейчас на этой странице.
В конце будет краткая памятка по тому, где и когда лучше применять какой из методов. При правильном выборе можно добиться увеличения скорости вычислений в 5 раз при погрешности ~1%, а иногда и вовсе без неё.
Шифры замены и табличного гаммирования
В данной работе рассматриваются шифры замены и табличного гаммирования. Читателю предлагается решить несколько задач из области защиты информации.
Допустим, что устройства читателя подвергаются атаке со стороны неизвестного хакера.
Нарушитель, хакер, злоумышленник не ограничивается выводом из строя устройств. Он их перепрограммирует с целью принудить владельца выполнять какие-то требования либо банального вымогательства у владельца устройств некоторой денежной суммы. Объявляет о требованиях, например, звонком по сотовому телефону и диктует условия (цену) за восстановление работоспособного состояния устройства. Информационная подсистема приборов защищена шифрами разной сложности. Нарушитель использует свои параметры этих разных шифров для затруднения владельцу самостоятельно восстановить работоспособность устройств.
Вкладки браузера разрушают ваш мозг
Состояние вашего браузера — это как состояние кухни: если на столах валяются кастрюли, сковородки и грязные тарелки, то будет гораздо сложнее приготовить обед, чем в чистом и опрятном пространстве.
Исследование показало, что браузер с большим количеством вкладок — это стрессовая, убивающая продуктивность потеря времени. В одном исследовании 2014 года анализировалось, как плохо упорядоченные элементы на экранах компьютеров влияют на время реакции и продуктивность врачей в реанимационных отделениях. Выяснилось, что замусоренные экраны увеличивают время поиска медицинских записей, а также поиск необходимой информации в этих записях. Если врач уже находится в ситуации стресса, то отрицательные эффекты становятся ещё более выраженными.
Разумеется, большинство из нас не работает врачами или медсёстрами, отчаянно пытающимися просматривать электронные медицинские записи, пока ждёт пациент. Но у нас всё равно есть беспорядочный режим работы, при котором актуальность критически важна, даже если это просто отчёт, который нужно подготовить к 14 часам, а поиск среди пятидесяти вкладок нужного для завершения работы веб-сайта это, честно говоря, пустая трата времени.
Но как и ваша кухня или ваш стол, браузер не обязан быть неряшливым. Различные инструменты и методики помогут вам обеспечить порядок в браузере и избежать информационной перегрузки.
Книги с оригинальным подходом к теме первого контакта
Глядя на бескрайнюю россыпь звезд в ночном небе, почти любой человек хоть раз задавался вопросом: интересно, мы одни во вселенной? Тема контакта с внеземным разумом давно стала классической для научной фантастики. Многих авторов интересует именно момент первой встречи, тревожная новизна и неизвестность. Чем именно они будут отличаться от нас? Сможем ли мы вообще понять друг друга?
За долгие годы на эту тему было сказано, снято и написано, мягко говоря, немало. Иногда кажется, что тема «первого контакта» и вовсе исчерпала себя. Но раз за разом находятся авторы, которые находят свежий подход и удивляют своими идеями. Вот несколько тому примеров — от классики до современных книг.
Как работает наш разум в мозге?
Привет, Хабр! Когда я читаю статьи про исследования мозга или нейроинтерфейсы, смотрю научно-познавательное видео про мозг, у меня возникает вопрос, почему никто еще не нашел одну простую идею. Ведь она лежит на поверхности и я искренне не понимаю, как ее все еще не заметили.
Сжатие данных LZW
Если бы вы взглянули почти на любой файл данных в компьютере, просматривая символ за символом, то наверняка обратили бы внимание на множество повторяющихся элементов. LZW — это метод сжатия данных, который воспользовался этим повторением. Оригинальная версия метода была создана Лемпелем и Зивом в 1978 году (LZ78) и доработана Уэлчем в 1984 году, отсюда и аббревиатура LZW (Lempel, Ziv and Welch). Как и в любом адаптивном/динамическом методе сжатия, идея заключается в том, чтобы (1) начать с исходной модели, (2) читать данные по частям, (3) обновлять модель и кодировать данные по мере продвижения. LZW — алгоритм сжатия на основе "словаря".
Это означает, что вместо сведения в таблицу количества символов и построения деревьев (как при кодировании по Хаффману), LZW кодирует данные, обращаясь к словарю. Таким образом, чтобы закодировать подстроку, в выходной файл нужно записать только одно кодовое число, соответствующее индексу этой подстроки в словаре. Хотя LZW часто рассматривается в контексте сжатия текстовых файлов, его можно использовать для любого типа файлов. Однако, как правило, он лучше всего справляется с файлами где есть повторяющиеся подстроки, например, с текстовыми файлами.
Уроки по SDL 2: Урок 13 ввод текста и прокрутка экрана
В этом уроке мы научимся создавать миникарту, прокручивать экран по ней, и писать текст с клавиатуры на экран.
код:
Уроки по SDL 2: Урок 10 изменение цвета и прозрачность текстуры
изменение цвета у спрайтов, позволяет получить нам новый спрайт, а благодаря аппаратному ускорению, прозрачность создается гораздо быстрее чем в первом SDL
приступим к коду:
Работа с СОМ-портом на Си в linux
Каждый, кто постоянно занимается электроникой и программирует встраиваемые устройства, неизбежно сталкивается с необходимостью работы с СОМ-портом под линуксом. Недаром, моя статья "UART и с чем его едят" спустя 11 лет после выпуска набирает просмотры и комментарии.
Для разработчиков чаще всего появляется задача сопрячь какой-то датчик, либо удалённое устройство с одноплатником. Да что греха таить, сейчас в 2021 году UART, наверное, самый распространённый интерфейс для обмена данными, несмотря на всю его архаичность. Далеко за примером ходить не надо, внутри смартфона, лежащего у вас в кармане, будет с десяток UART интерфейсов, самый известный из которых — это подключение SIM-карты.
Поэтому умение работать с СОМ-портами в linux особенно важно. И вот, казалось бы, UART, древнейший интерфейс, всё должно быть известно и понятно, и даже опытные программисты ломают зубы, работая с ним в линуксе. Особенный цирк с конями начинается при работе с передачей сырых данных по RS-485. Не знаю ни одного программиста, который бы не хватил горя при разработке ПО для таких решений. Самое забавное, что с более новомодным i2c работать в линуксе куда проще и понятнее, чем с ортодоксальным UART. Чтобы не было путаницы дальше, всё семейство UART (RS-232, RS-485, UART 5V, UART 3,3 и т.д.) по тексту я буду называть COM-порт или UART. Мы говорим в статье не о физическом интерфейсе, а о программной стороне вопроса.
В этой статье я хочу показать, как писать свои программы, работающие с UART в ОС Linux. И неважно на каком языке вы пишете программу для работы с UART (python, c, c++, bash, php, perl и т.д.), принцип работы и грабли будут одни и те же, так как всё равно всё упирается в системные вызовы к ядру. А непонимание того, что там происходит и приводит к различным трудноуловимым багам.
Новые мини-ПК, на которые стоит обратить внимание: системы из Китая и не только
Мы регулярно пишем про одноплатники и микроконтроллеры. Но уже давно ничего не писали про мини-ПК, а ведь эти устройства могут быть весьма полезными как для дома, так для офиса. Сегодня это недоразумение будет исправлено — в подборку попали сразу 6 мини-ПК и 1 UPMС в качестве бонуса. Все эти системы заслуживают нашего с вами внимания.
К сожалению, не все можно приобрести прямо сейчас — некоторые появятся в продаже в ближайшие месяцы. Но большинство — да. И если вы хотели бы предложить свой вариант мини-ПК, пишите об этом в комментариях. Ну а пока начнем.
Быстрое знакомство с «портативкой» — обзоры примечательных ЦАПов и компактной колонки
В прошлый раз мы представили вашему вниманию пару «полочников» и «напольников» от Arslab и Triangle, плюс — поделились экспертными обзорами данных моделей акустики. Сегодня смотрим на портативную колонку и ЦАПы.
Скучные числа
1 / 0
При освоении программирования встречается один смешной спор, начинать адресацию элементов в массиве с единицы или с нуля. С одной стороны, если у тебя один элемент в массиве, то и номер у него должен быть равен единице. С другой стороны, когда выбираешь куда поместить первый элемент, то надо подыскать место, равное количеству элементов до помещения — нулевое. То есть, чему равен адрес последнего элемента — количеству элементов до помещения или после? — Вот в чём здесь вопрос.
Но, как бы то ни было, для себя я просто разделили на два понятия: индекс и номер. Индекс относится уже не к элементу, а к его месту, к величине отступа, которая для элемента номер один равна нулю. Элемент с индексом ноль — первый. Всё просто.
Соревнование между нулём и единицей может быть описано более детально.
Зря-зря
Спуск
Простые числа
Золотая середина
Предыдущее и следующее
Уровни
Что было до нуля
Вообще без нуля
Часть вторая:
Двойные функции
Двойные числа
Биномиальная свёртка
Происхождение чисел Бернулли
Откатная функция
Пи
Функция состоит не только из нулей
Суммируя
Умножая
Симметрия Дзеты
Ось
Откуда там вообще нули?
Исторически счёт принято начинать с единицы, и это оправдано, так как отводит нулю его место — то что было в самом начале, до начала счёта. И этим указывает, что такое сам счёт. Это нахождение элемента между предыдущим и предстоящим. «Предыдущий» в начале счёта ноль, «предстоящий» элемент тоже вполне определён. Основное действие — то что понимается под «предыдущим» меняется на то что получено, и счёт можно продолжать.
Уроки по SDL 2: Урок 9 — Отрисовка части изображений
Иногда нам нужно отрисовывать только часть текстуры, или иметь несколько изображений. В большинстве случаев подгружать одну картинку со множеством спрайтов экономически целесообразнее, чем подгружать множество изображений.
Объем, центр масс, моменты инерции тела, имея только mesh поверхности
Для начала нужно обзавестись этим самым "mesh"-ем поверхности, или триангуляцией поверхности, полигональной сеткой, разбиением двумерного многообразия. В данном случае работа будет вестись именно с треугольной сеткой, но все ниже представленные формулы и код (если немного модифицировать), будет работать с сеткой состоящей из любых полигонов. Главное, чтобы они были малые, от этого зависит точность, чем меньше - тем лучше.
Введение в программирование: заготовка игры-платформера на SDL в 300 строк C++
Этот текст предназначен для тех, кто только осваивает программирование. Я читаю лекции по C++ на первом курсе местного университета, и в качестве практикума предлагаю запрограммировать любую игру (не выношу проектов типа "софт бронирования книг в местной библиотеке"). Соответственно, чтобы помочь начинающим, я сделал некоторое количество заготовок, с которых можно стартовать свой проект. Например, заготовку олдскульного 3д шутера в 486 строк C++ я уже описывал, а вот тут можно посмотреть, что из неё сделали первокурсники.
В этот раз всё будет ещё проще, я хочу сделать заготовку под простейший платформер, вот так выглядит результат:
На данный момент проект содержит менее трёхсот строчек цпп:
ssloy@khronos:~/sdl2-demo/src$ cat *.cpp *.h | wc -l
296
Мой опыт показывает, что просто выложить код заготовки недостаточно. Нужно детально описать, как именно я пришёл к такому коду, ведь самый главный навык программиста — это суметь разбить сложную задачу на некоторое количество более простых подзадач, каждая из которых решается легко.
Итак, поехали!
Information
- Rating
- Does not participate
- Registered
- Activity