Кодовая Библиотека
170 subscribers
185 photos
54 videos
20 files
110 links
Мы публикуем лекции и книги по программированию, видеоуроки, доклады с IT конференций.
Download Telegram
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
Челлендж по обработке миллиарда строк на Go: от 1 минуты 45 секунд до 4 секунд

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

Я немного опоздал, соревнования проводились в январе. И на Java. Меня не особо интересует Java, зато давно интересует оптимизация кода на Go.

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

https://habr.com/ru/articles/798215/

#golang
Чем синхронный сервер отличается от асинхронного?

Вопрос может быть сформулирован как «сравните Jetty и Netty», или «зачем нужен Spring WebFlux».

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

Таким образом, если каждый запрос выполняется одну секунду, то при всего лишь 2000 запросов в секунду сервер расходует 2000 потоков. Потоки в ОС – ограниченный ресурс, и не важно как сконфигурирован ваш сервер – в какой-то момент производительность резко просядет.

Альтернативное решение – асинхронные сервера. В них для потоков обработки HTTP-запросов используется work stealing. В широком смысле, вызовы асинхронных функций не блокируют выполнение, а их результат вместо return value возвращается параметром коллбэка. В Java этот результат зачастую возвращается в виде объекта Future.

Чтобы вся обработка запроса стала действительно асинхронной, необходимо также избавиться от блокирующих операций. Иначе преимущество подхода с work stealing выродится в простой пул потоков. Блокирующая работа с файлами и сетью должна быть заменена на NIO, а для БД должен быть использован асинхронный драйвер.

#Java
Под капотом Python. Тонкости популярных конструкций with и contextmanager

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

https://habr.com/ru/companies/beeline_cloud/articles/749580/

#Python
Примеры исходного кода C++

Эта страница содержит примеры исходного кода функций стандартной библиотеки программирования C++.

https://www.sourcecodeexamples.net/p/cpp-source-code-examples.html

#cpp
MS-DOS v1.25, v2.0, v4.0 Source Code

Оригинальные исходники MS-DOS 1.25, 2.0 и 4.0 для справочных целей

Это репо содержит оригинальные исходные коды и скомпилированные двоичные файлы для MS-DOS v1.25 и MS-DOS v2.0, а также исходные коды для MS-DOS v4.00, совместно разработанной IBM и Microsoft.

Файлы MS-DOS v1.25 и v2.0 были первоначально выложены в общий доступ в Музее компьютерной истории 25 марта 2014 года и (пере)публикуются в этом репо, чтобы облегчить их поиск, ссылки на них в других работах, а также чтобы дать возможность исследовать и экспериментировать тем, кто интересуется ранними операционными системами для ПК.

https://github.com/microsoft/MS-DOS/
Konf

Простейший загрузчик конфигураций для Go, который читает/смотрит из файла, env, флага и облаков (AWS, Azure, GCP).

Основные возможности:

konf.Unmarshal для чтения конфигурации в любой тип объекта.
konf.OnChange для регистрации колбэков при изменении конфигурации.
konf.Explain для понимания, откуда загружается конфигурация.
Различные провайдеры для загрузки конфигурации из облаков (AWS, Azure и GCP).
Zero dependencies в core модуле, который поддерживает загрузку конфигурации из переменных окружения, флагов и встроенной файловой системы.

https://github.com/nil-go/konf

#golang