Как стать автором
Обновить
4
0

Разработчик баз данных

«Отучаем» WinFXNet от жадности (часть 1)

Уровень сложности Простой
Время на прочтение 18 мин
Количество просмотров 8.6K

Предыстория

В сфере АСУ ТП инженерам по работе приходится не только писать ПО, но и использовать готовое ПО от производителей оборудования. В связи с санкциями, многие поставщики покинули РФ, а оборудование и ПО необходимо продолжать эксплуатировать дальше.

В данной статье будет расмотрена WinFXNet - программа производителя Schneider Electric (ESMI) для конфигурирования станций пожарной сигнализации серии Esmi FX. К сожалению, из-за санкций, ключ USB Esmi FX FFS00393016 приобрести нельзя, а он, в свою очередь, имеет встроенный таймер, который настроен на 4-летний период. У многих данный ключ по времени уже закончился, плюс скоро закончится и лицензия на само ПО (файл формата lic). Поэтому достаем дизассемблеры и посмотрим, можно ли обойти данную защиту.

Disclaimer: Данная заметка написана в ознакомительных целях и не является руководством к действиям. Хотя, понимая всю безвыходность данной ситуации, как временное решение имеет право на жизнь, но решать только вам. Статья написана как туториал, поэтому постараюсь детально описать все шаги поиска нужных мест в программе.

Приступить к анализу
Всего голосов 101: ↑96 и ↓5 +91
Комментарии 30

Краткий курс компьютерной графики: пишем упрощённый OpenGL своими руками, статья 1 из 6

Время на прочтение 7 мин
Количество просмотров 396K

Содержание курса



Улучшение кода






Official translation (with a bit of polishing) is available here.




Постановка задачи


Цель этого цикла статей — показать, как работает OpenGL, написав его (сильно упрощённый!) клон самостоятельно. На удивление часто сталкиваюсь с людьми, которые не могут преодолеть первоначальный барьер обучения OpenGL/DirectX. Таким образом, я подготовил краткий цикл из шести лекций, после которого мои студенты выдают неплохие рендеры.

Итак, задача ставится следующим образом: не используя никаких сторонних библиотек (особенно графических) получить примерно такие картинки:



Внимание, это обучающий материал, который в целом повторит структуру библиотеки OpenGL. Это будет софтверный рендер, я не ставлю целью показать, как писать приложения под OpenGL. Я ставлю целью показать, как сам OpenGL устроен. По моему глубокому убеждению, без понимания этого написание эффективных приложений с использованием 3D библиотек невозможно.
Читать дальше →
Всего голосов 198: ↑196 и ↓2 +194
Комментарии 120

Почему B-деревья быстрые?

Уровень сложности Простой
Время на прочтение 7 мин
Количество просмотров 43K

B-дерево — это структура, помогающая выполнять поиск в больших объёмах данных. Она была изобретена более сорока лет назад, однако по-прежнему используется в большинстве современных баз данных. Хотя существуют и более новые структуры индексов, например, LSM-деревья, B-дерево пока никто не победил в обработке большинства запросов баз данных.

После прочтения этого поста вы будете знать, как B-дерево упорядочивает данные и выполняет поисковые запросы.

Читать далее
Всего голосов 185: ↑184 и ↓1 +183
Комментарии 13

Моя любимая задача для собеседований по программированию

Уровень сложности Средний
Время на прочтение 9 мин
Количество просмотров 95K

В сети есть уйма постов и видео, где разбираются ответы на вопросы LeetCode. Но обычно рассмотрение в них происходит с позиции соискателя, а не работодателя. В этой же статье я приведу разбор собственной задачи по программированию, которую использовал при приёме людей на работу в Amazon, Google и Microsoft.
Читать дальше →
Всего голосов 131: ↑126 и ↓5 +121
Комментарии 170

Сложность алгоритмов. Разбор Big O

Уровень сложности Средний
Время на прочтение 14 мин
Количество просмотров 23K

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

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

Читать далее
Всего голосов 27: ↑25 и ↓2 +23
Комментарии 17

Инженерный калькулятор на C++. Часть 1: Токенизатор математических выражений

Уровень сложности Простой
Время на прочтение 10 мин
Количество просмотров 14K

Всем привет! Сегодня хочу поделиться опытом написания консольного инженерного калькулятора, который может посчитать выражение вроде (log2(18)/3.14)*sqrt(0.1*10^(-3)/0.02)

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

Читать далее
Всего голосов 26: ↑26 и ↓0 +26
Комментарии 7

Где искать достоверную информацию о здоровье: тайничок медицинского копирайтера

Уровень сложности Средний
Время на прочтение 4 мин
Количество просмотров 4.4K

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

Привет! Меня зовут Артем, и в медицинской среде я известен как первый копирайтер рунета с красным дипломом врача. Но мало быть первым – нужно всегда поддерживать высокую планку качества. Без источников актуальной и достоверной информации в моей профессии – никуда. Сегодня приоткрою свой тайничок – для коллег и для всех, кто хочет получать качественную информацию о здоровье.

Читать далее
Всего голосов 7: ↑6 и ↓1 +5
Комментарии 6

Книги для Golang-разработчиков: подборка для программистов с опытом

Время на прочтение 4 мин
Количество просмотров 5.1K

Привет, Хабр! Относительно недавно мы уже публиковали подборку книг по Go для начинающих разработчиков. Теперь пришёл черёд изданий для специалистов с опытом. В этой статье рассказываем о книгах для программистов, у которых уже есть опыт работы с Golang и кто готов двигаться дальше. Книги актуальные, написаны как на русском, так и на английском языке. Как всегда, просьба: если у вас есть собственные предпочтения, расскажите о них в комментариях.

Читать далее
Всего голосов 13: ↑12 и ↓1 +11
Комментарии 4

Конкурентность — это не параллелизм

Уровень сложности Простой
Время на прочтение 11 мин
Количество просмотров 11K

Это полное изложение замечательного доклада Роба Пайка "Concurrency is Not Parallelism". Иллюстрации и диаграммы воссозданы, исходный код взят дословно со слайдов, за исключением комментариев, которые в некоторых местах были расширены.

Читать далее
Всего голосов 10: ↑8 и ↓2 +6
Комментарии 9

«Чистый» код, ужасная производительность

Уровень сложности Простой
Время на прочтение 17 мин
Количество просмотров 67K

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

Читать далее
Всего голосов 115: ↑89 и ↓26 +63
Комментарии 219

7 аргументов почему UUID лучше, чем автоинкрементные идентификаторы

Уровень сложности Средний
Время на прочтение 3 мин
Количество просмотров 22K

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

Читать далее
Всего голосов 34: ↑22 и ↓12 +10
Комментарии 90

Потратили $50'000 на создание интерактивного QA-учебника, перевели на русский и выложили бесплатно

Уровень сложности Простой
Время на прочтение 8 мин
Количество просмотров 10K

В январе пять международных QA-менторов с суммарным опытом 100+ лет опубликовали первую часть бесплатного интерактивного QA-учебника на английском языке, состоящего из 500+ страниц, 42 модулей, 42+ наборов тестов с 150+ вопросами. Про этот релиз 0.0.5 мы писали в Хабр-статье "Зачем появился бесплатный интерактивный «100-years QA-textbook» на 500+ страниц для обучающихся тестированию".

С тех пор вышел полный англоязычный релиз 0.0.9 всего учебника и выяснилось, что в результате его объем - 700 страниц (без учета изображений и тестов).

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

Читать далее
Всего голосов 20: ↑16 и ↓4 +12
Комментарии 9

Лучшая задача по программированию для собеседования

Время на прочтение 7 мин
Количество просмотров 61K

Готовиться к собеседованию можно по-разному: смотреть ролики на YouTube, читать документацию, положиться на судьбу и тд. В большинстве случаев кандидатам предложат решить одну или несколько задач. В этой статье вас ждет подробный разбор реальной задачки, рекомендации к ее решению и объяснение ожиданий интервьюера от кандидатов.

Читать далее
Всего голосов 68: ↑45 и ↓23 +22
Комментарии 271

Умные указатели в современном C++ с точки зрения новичка

Время на прочтение 10 мин
Количество просмотров 46K

Новые (?) пути управления памятью


Указатели в языках C и C++ — те еще штучки. Они чрезвычайно мощные, но в то же время такие опасные: достаточно небольшого недосмотра, чтобы сломать все ваше приложение. Проблема в том, что управление указателями полностью зависит от вас. За каждым динамическим выделением объекта (например, new T) должно следовать ручное удаление (например, delete T). Забудете это сделать, и в итоге получите хорошенькую утечку памяти.

Более того, динамически выделяемые массивы (например, new T[N]) необходимо удалять с помощью другого оператора (например, delete[]). Поэтому приходится мысленно отслеживать, что вы выделили, и соответственно вызывать нужный оператор. Ошибки с выбором формы приводят к неопределенному поведению, чего при работе на C++ нужно избегать любой ценой.

Другая деликатная проблема заключается во владении. Сторонняя функция возвращает указатель: а не динамически ли были выделены эти данные? Если да, то кто отвечает за очистку? Невозможно получить такую информацию, просто посмотрев на возвращаемый тип.
Читать дальше →
Всего голосов 28: ↑27 и ↓1 +26
Комментарии 28

Точка, точка… запятая?

Время на прочтение 4 мин
Количество просмотров 8.5K

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


Вот, например, у меня на компьютере сегодняшняя дата пишется так — 06.01.2023, а на одном из моих серверов в уголке экрана светится 01/06/23. Это американский формат, и я каждый раз мучительно вспоминаю, 01/06 это первое июня или всё таки шестое января.


Ещё одно национальное отличие — символ отделения целой и дробной части в числах. В России по традиции и в соответствии со стандартами надо отделять дробную часть запятой (Пи = 3,14), а американцы (и вслед за ними программисты) используют десятичную точку (Pi = 3.14). Из-за этого различия иногда случаются разные казусы.

Читать дальше →
Всего голосов 23: ↑22 и ↓1 +21
Комментарии 51

Основы Entity Framework Core. Часть [0]

Время на прочтение 2 мин
Количество просмотров 8.5K

Всем привет!

В этой части будет кратко рассказано о технологии Entity Framework Core, а также её установки в свой проект.

Кратко о технологии

Общая цель EF — предоставить возможность взаимодействия с данными из реляционных баз данных с использованием объектной модели, которая отображается напрямую на бизнес-объекты в создаваемых приложениях. Например, вместо того, чтобы трактовать пакет данных как коллекцию строк и столбцов, вы можете оперировать с коллекцией строго типизированных объектов, называемых сущностями. Такие сущности хранятся в специализированных классах коллекций, поддерживающих LINQ, что позволяет выполнять операции доступа к данным в коде С#.

Entity Framework Core (также известная как EF Core) пред­ставляет собой пакет объектно-реляционного отображения (object-relational mapping - ОRМ) производства Microsoft, который позволяет приложениям .NET Core хранить данные в реляционных базах данных. Entity Framework Core решает одну основную задачу: сохранение объектов .NET в базе данных (БД) и извлечение их в более позднее время.

Читать далее
Всего голосов 22: ↑4 и ↓18 -14
Комментарии 12

Резервное копирование и восстановление «1С»-баз на PostgreSQL в Windows c помощью pgAdmin, bat-файлов и планировщика

Время на прочтение 5 мин
Количество просмотров 25K

Автор статьи: технический руководитель проектов внедрения 1С:ERP Внедренческого центра «Раздолье» Дмитрий Малышев.

Читать далее
Всего голосов 5: ↑4 и ↓1 +3
Комментарии 13

Разбираемся с концепцией аутентификации в HTTP

Время на прочтение 20 мин
Количество просмотров 35K

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

Хотелось создать статью, которая поэтапно раскроет базовые концепции аутентификации и авторизации на практике, после чего можно применять эти знания, чтобы реализовать свою кастомную аутентификацию и примерно понимать, как она работает в очередном пакете для django-rest-framework, flask или fastapi. А вообще в целом эти концептуальные знания должны пригодиться(надеюсь) и для реализации аутентификации в других экосистемах. В статье есть упрощения, код для учебных целей.

Читать далее
Всего голосов 23: ↑21 и ↓2 +19
Комментарии 4

Загрузка ленивых полей

Время на прочтение 8 мин
Количество просмотров 9K

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

Читать далее
Всего голосов 6: ↑3 и ↓3 0
Комментарии 9

Нормали и обратное транспонирование, часть 3: внешняя алгебра над сопряжённым пространством

Время на прочтение 12 мин
Количество просмотров 3.1K

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

В третьей и окончательной части мы отойдём от нормалей и рассмотрим некоторые другие содержательные векторные величины. Мы видели как бивекторы и тривекторы из внешней алгебры выражают ориентированные площади и объёмы соответственно. Так же мы изучили двойственные векторы, которые действуют как ориентированные плотности линий в единицах обратных к длине. Теперь мы объединим эти геометрические концепции и посмотрим в какой степени они могут быть полезны. В какой степени? Прямо как степень масштабного коэффициента? Ладно, продолжим.

Читать далее
Всего голосов 7: ↑7 и ↓0 +7
Комментарии 7
1

Информация

В рейтинге
Не участвует
Откуда
Москва, Москва и Московская обл., Россия
Зарегистрирован
Активность

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

Database Developer, ERP Developer
От 300 000 ₽