Кодовая Библиотека
170 subscribers
185 photos
54 videos
20 files
110 links
Мы публикуем лекции и книги по программированию, видеоуроки, доклады с IT конференций.
Download Telegram
Ему не место на помойке: хакаем 15-летний электронный переводчик и пишем под него приложения

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

Я всегда любил находить новые применения стареньким девайсам, даже если обход защиты и разработка для них чего-то полезного занимала у меня некоторое время. И если с прошлыми моими статьями, где я привносил новую жизнь смартфонам на Android 2.3, а затем и на Android 1.5, всё понятно - девайсы получили возможность не только быть звонилками, но и вполне полноценными смартфонами, то в случае таких необычных девайсов, как электронные переводчики - всё гораздо интереснее, ведь по сути, это дешёвые альтернативы таким легендарным устройствам, как HP Jornada! Недавно я купил переводчик Ectaco за 1.500 рублей на Windows CE, обошел встроенную оболочку, написал программ...
Media is too big
VIEW IN TELEGRAM
Реальное Собеседование на Junior Backend разработчика

0:00 - Какие вопросы задавали
1:58 - Как работает Интернет
4:10 - Как браузер формирует запрос
5:05 - Как передать файл
5:55 - Как безопасно передать банковскую транзакцию
7:14 - Что возвращает сервер
9:46 - Вопрос про авторизацию со звездочкой*
11:06 - Зачем нужна пара access и refresh токены
12:55 - JWT или сессии — что лучше?
14:11 - Проектирование авторизации (практический пример)
16:20 - Как улучшить Dockerfile
19:50 - Какую зарплату мне предложили

источник
Логирование, трассировка и метрики — это три столпа наблюдаемости системы.

На диаграмме выше представлены их определения и типичные архитектуры.

🔹 Логирование
Логирование записывает дискретные события в системе. Например, можно зафиксировать входящий запрос или обращение к базе данных как события. Логирование имеет наибольший объем данных. Стек ELK (Elastic-Logstash-Kibana) часто используется для построения платформы анализа логов. Обычно мы определяем стандартизированный формат логирования для различных команд, чтобы можно было использовать ключевые слова при поиске среди большого количества логов.

🔹 Трассировка
Трассировка обычно ориентирована на запросы. Например, пользовательский запрос проходит через API-шлюз, балансировщик нагрузки, сервис A, сервис B и базу данных, что может быть визуализировано в системах трассировки. Это полезно при попытках выявить узкие места в системе. Мы используем OpenTelemetry для демонстрации типичной архитектуры, объединяющей три столпа в единую структуру.

🔹 Метри...
Зачем в iPhone чип, который убивает FaceID

Начнём с начала: как система FaceID выглядит, и как она работает:

Аппаратно эта система состоит из пары камер - ИК и RGB, и двух видов ИК-излучателей - обычной подсветки, и специализированного прожектора точек.

Снимаем с iPhone X шкурку, убираем всё лишнее, и видим блок фронтальных камер в голом виде. ИК подсветка существует отдельно, но все остальные компоненты у нас в руках — они надёжно закреплены в этой металлической рамке.

Тут мы видим ИК камеру и прожектор ИК точек. Именно на этой инфракрасной парочке держится работа систем TrueDepth и FaceID. И главный герой сегодняшнего

https://habr.com/ru/articles/841708/
Кривые Безье

Кривые Безье были постоянной темой в моей карьере фронтенд-инженера. Я широко использовал их в своей работе - в анимации и SVG-путях иллюстраций и иконок. Однако только недавно я заинтересовался пониманием логики, лежащей в основе их поведения. Эта статья раскрыла для меня тайны, связанные с использованием команд кривых путей, и дала мне более глубокое понимание веб-анимации. В этой статье я поделюсь своими интересными открытиями в области кривых Безье.

В CSS-анимации функции смягчения задают скорость изменения свойства с течением времени. Существует 3 типа функций смягчения - линейная, ступенчатая и кубическая кривая Безье.

https://blog.richardekwonye.com/bezier-curves
Как компании доставляют код в продакшн?

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

Шаг 1: Владелец продукта создает требования и пользовательские истории.

Шаг 2: Команда разработчиков определяет приоритеты для историй и организует спринты.

Шаг 3: Разработчики коммитят код в систему контроля версий.

Шаг 4: Сервер автоматизации собирает код и запускает тесты. Проводятся проверки покрытия кода и качества.

Шаг 5: Если сборка успешна, артефакты сохраняются в репозитории артефактов. Сборка затем разворачивается в среде разработчиков.

Шаг 6: Функции тестируются независимо в нескольких изолированных средах.

Шаг 7: Команда QA тестирует функции в средах для контроля качества. Проводятся различные виды тестирования.

...
Как поделить не деля или оптимизация деления компиляторам(и)

Если вы никогда не пробовали смотреть как код на C++ разворачивается компилятором в код Assembly – вас ждёт много сюрпризов, причём, не нужно смотреть какой-то замудренный исходный код полный templates или других сложных конструкций: рассмотрите следующий snippet:

uint8_t div10(uint8_t x)
{
return x/10;
}

https://habr.com/ru/articles/833470/
Шпаргалка по SQL
Микросервисы для тех, кто прикидывается разработчиком. Часть 1

«Скажите, какие основные преимущества микросервисов и почему?». Вероятно, это самый популярный вопрос последних 6–10 лет на любом собеседовании для бэкенд разработчика. Каким‑то чудом он даже обогнал: «Назовите три принципа ООП» и «Чем отличается класс от объекта?»

https://habr.com/ru/articles/833544/
Media is too big
VIEW IN TELEGRAM
Пытаюсь пройти System Design интервью / Такое спрашивают в MAANG? / Mock собеседование

❗️ВАЖНО! Данное собеседование является тестовым (mock) и несет в себе образовательную цель.

00:00 - НАЧАЛО
01:30 - условие задачи
02:26 - начинаю решать
47:40 - понял, что упустил из вида
53:40 - рисую диаграмму
01:25:11 - ФИДБЕК Марка

источник
Поведенческие паттерны

Согласно Википедии, поведенческие шаблоны (behavioral patterns) — шаблоны проектирования, определяющие алгоритмы и способы реализации взаимодействия различных объектов и классов.

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

К ним относятся:

⚫️Template Method, или Шаблонный метод;
⚫️Iterator, или Итератор;
⚫️Observer, или Наблюдатель;
⚫️Chain of Responsibility, или Цепочка обязанностей;
⚫️Command, или Команда;
⚫️Mediator, или Посредник;
⚫️Memento, или Хранитель;
⚫️Visitor, или Посетитель;
⚫️Strategy, или Стратегия;
⚫️State, или Состояние.
Облачные базы данных: Шпаргалка

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

Структурированные базы данных📌

Структурированные базы данных организуют данные в предопределенные схемы и модели.

Реляционные базы данных, такие как MySQL и PostgreSQL, хранят данные в таблицах со строками и столбцами.

Колоночные базы данных, такие как Amazon Redshift и Google BigQuery, также имеют структурированную модель данных, но хранят их по-другому, оптимизируя для аналитических запросов.

Преимущества:
- Эффективные SQL-запросы
- Возможность применения ограничений и валидации
- Последовательность там, где это необходимо

Примеры использования: CRM-системы, управление запасами, бухгалтерский учет, аналитика


Полуструктурированные базы данных📌

...
Regular expressions library (since C++11)

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

#include <iostream>
#include <iterator>
#include <regex>
#include <string>

int main()
{
std::string s = "Some people, when confronted with a problem, think "
"\"I know, I'll use regular expressions.\" "
"Now they have two problems.";

std::regex self_regex("REGULAR EXPRESSIONS",
std::regex_constants::ECMAScript | std::regex_constants::icase);
if (std::regex_search(s, self_regex))
std::cout « "Text contains the phrase 'regular expressions'\n";

std::regex word_regex("(\\w+)");
auto words_begin =
std::sregex_iterator(s.begin(), s.end(), word_regex);
auto words_end = std::sregex_iterator();

std::cout « "Found "
« std::distance(words_begin, words_end)
« " words\n";

const int N = 6;
std::cout « "Words longer than " « N « " characters:\n";
for (std::sregex_iterator i = words_begin; i != words_end; ++i)
{
std::smatch match = *i;
std::string match_str = match.str();
if (match_str.size() > N)
std::cout « " " « match_str « '\n';
}

std::regex long_word_regex("(\\w{7,})");
std::string new_s = std::regex_replace(s, long_word_regex, "[$&]");
std::cout « new_s « '\n';
}

https://en.cppreference.com/w/cpp/regex
Как Grafanalib помогает управлять дашбордами в масштабе

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

https://www.contino.io/insights/grafanalib
Объединение PDF-файлов с помощью PyPDF2

Установите библиотеку с помощью pip.

pip install PyPDF2

Вы можете легко объединить PDF-файлы, используя приведенный ниже код. Просто замените имена в списке pdf-файлов на имена pdf-файлов, которые вы хотите объединить (если они находятся в том же каталоге, что и ваш Python-скрипт), или на ссылки на pdf-файлы.


import PyPDF2

def merge files (pdf files: list):
# Create a PDF merger obiect
pdf merger = PyPDF2.PdfFileMerger ()
# Loop through the list and append each PDF to the merger
for pdf_file in pdf_files:
pdf_merger.append(pdf_file)
# Output file for the merged PDF
output_pdf = "merged_file.pdf"
pdf_merger.write(output_pdf)
pdf_merger.close()

# List of PDF files to merge
pdf_files = ["file_1", "files_2"]

if name == " main
merge_files (pdf_files)
print("PDFs merged successfully.")
Что происходит внутри HashMap.put()?

1. Вычисляется хэш ключа. Если ключ null, хэш считается равным 0. Чтобы достичь лучшего распределения, результат вызова hashCode() «перемешивается»: его старшие биты XOR-ятся на младшие.

2. Значения внутри хэш-таблицы хранятся в специальных структурах данных – нодах, в массиве. Из хэша высчитывается номер бакета – индекс для значения в этом массиве. Полученный хэш обрезается по текущей длине массива. Длина – всегда степень двойки, так что для скорости используется битовая операция &.

3. В бакете ищется нода. В ячейке массива лежит не просто одна нода, а связка всех нод, которые туда попали. Исполнение проходит по этой связке (цепочке или дереву), и ищет ноду с таким же ключом. Ключ сравнивается с имеющимися сначала на ==, затем на equals.

4. Если нода найдена – её значение просто заменяется новым. Работа метода на этом завершается.

5. Если ноды с таким же ключом в бакете пока нет – добавляемая пара ключ-значение запаковывается в новый объект типа Node, и прикрепляется к структуре существующих нод бакета. Ноды составляют структуру за счет того, что в ноде хранится ссылка на следующий элемент (для дерева – следующие элементы). Кроме самой пары и ссылок, чтобы потом не считать заново, записывается и хэш ключа.

6. В случае, когда структурой была цепочка а не дерево, и длина цепочки превысила 7 элементов – происходит процедура treeification – превращение списка в самобалансирующееся дерево. В случае коллизии это ускоряет доступ к элементам на чтение с O(n) до O(log(n)). У comparable-ключей для балансировки используется их естественный порядок. Другие ключи балансируются по порядку имен их классов и значениям identityHashCode-ов. Для маленьких хэш-таблиц (< 64 бакетов) «одеревенение» заменяется увеличением (см. п.8).

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

8. Когда количество занятых бакетов массива превысило пороговое (capacity * load factor), внутренний массив увеличивается вдвое, а для всего содержимого выполняется рехэш – все имеющиеся ноды перераспределяются по бакетам по тем же правилам, но уже с учетом нового размера.

#java
4 основных вида механизмов аутентификации
Университет Сириус объявляет набор на программу «Современные методы робототехники и теории управления»

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

Кроме того, это отличная возможность стать частью комьюнити, которое разделяет твою страсть к робототехнике!

Сроки проведения: 11-16 ноября 2024.
Успей подать заявку до 13 октября 2024.

Если ты задался вопросами: «А как я поеду в Сириус?  Где я буду там жить?» 
У нас есть ответ:
Проживание, проезд/перелет по территории РФ и питание для участников программы осуществляется за счет средств партнера ГК «Росатом».  
Плата за обучение на программе не взимается.

Более подробная информация: https://siriusuniversity.ru/admission/educational-modules-and-activities/informatsionnie-te...
Шардинг как паттерн архитектуры базы данных

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

https://lab.scub.net/architecture-patterns-sharding-09f759150d3d

#db
This media is not supported in your browser
VIEW IN TELEGRAM
Copycolors

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

Он построен на Rust и по сути основан на реализации алгоритма Colors Thief.

https://github.com/AbdoulMa/copycolors