Git Merge vs. Rebase vs. Squash Commit
В чем разница?
Когда мы объединяем изменения из одной ветки Git в другую, мы можем использовать «git merge» или «git rebase». Диаграмма ниже показывает, как работают эти две команды.
Git Merge
Эта команда создает новый коммит G’ в основной ветке. G’ связывает историю обеих веток: основной и функциональной.
Git merge — это недеструктивная операция. Она добавляет новый коммит в основную ветку, не изменяя существующие коммиты в обеих ветках.
Git Rebase
Git rebase переносит историю коммитов функциональной ветки на конец основной ветки. Он создает новые коммиты E’, F’ и G’ для каждого коммита в функциональной ветке.
Преимущество rebase в том, что он создает линейную историю коммитов.
Однако будьте осторожны: следуйте золотому правилу Git Rebase — никогда не используйте его на общих ветках, чтобы избежать путаницы среди ваших коллег.
Git Squash Commit
Сквошинг сжимает несколько коммитов в один, упрощая историю коммитов.
👉@Bookflow
В чем разница?
Когда мы объединяем изменения из одной ветки Git в другую, мы можем использовать «git merge» или «git rebase». Диаграмма ниже показывает, как работают эти две команды.
Git Merge
Эта команда создает новый коммит G’ в основной ветке. G’ связывает историю обеих веток: основной и функциональной.
Git merge — это недеструктивная операция. Она добавляет новый коммит в основную ветку, не изменяя существующие коммиты в обеих ветках.
Git Rebase
Git rebase переносит историю коммитов функциональной ветки на конец основной ветки. Он создает новые коммиты E’, F’ и G’ для каждого коммита в функциональной ветке.
Преимущество rebase в том, что он создает линейную историю коммитов.
Однако будьте осторожны: следуйте золотому правилу Git Rebase — никогда не используйте его на общих ветках, чтобы избежать путаницы среди ваших коллег.
Git Squash Commit
Сквошинг сжимает несколько коммитов в один, упрощая историю коммитов.
👉@Bookflow
👍13
Облачные базы данных: Шпаргалка
В современном мире, основанном на данных, выбор правильной базы данных имеет решающее значение и в то же время сложен. Сейчас облако предлагает больше возможностей для структурированных, полуструктурированных и неструктурированных баз данных, чем когда-либо. Эта шпаргалка поможет выбрать наиболее подходящую для ваших нужд.
Структурированные базы данных📌
Структурированные базы данных организуют данные в предопределенные схемы и модели.
Реляционные базы данных, такие как MySQL и PostgreSQL, хранят данные в таблицах со строками и столбцами.
Колоночные базы данных, такие как Amazon Redshift и Google BigQuery, также имеют структурированную модель данных, но хранят их по-другому, оптимизируя для аналитических запросов.
Преимущества:
- Эффективные SQL-запросы
- Возможность применения ограничений и валидации
- Последовательность там, где это необходимо
Примеры использования: CRM-системы, управление запасами, бухгалтерский учет, аналитика
Полуструктурированные базы данных📌
Полуструктурированные базы данных обеспечивают гибкость, храня данные без соблюдения формальной схемы. Данные часто хранятся в виде JSON или других гибких форматов.
Примеры включают в себя документ-базы данных, такие как MongoDB, графовые базы данных, наподобие Neptune, широкие колоночные хранилища, такие как ScyllaDB, и хранилища ключ-значение, такие как DynamoDB.
Преимущества:
- Гибкость для изменяющихся данных
- Масштабируемость на разных серверах
Примеры использования: Электронная коммерция, ленты социальных сетей, данные IoT
Неструктурированные базы данных📌
Неструктурированные базы данных оптимизированы для хранения и обработки огромных объемов разнородных данных, таких как документы, изображения, видео. Примеры: AWS S3, Azure Blob Storage.
Преимущества:
- Хранение огромных объемов данных
- Высокая масштабируемость
Примеры использования: Медиарепозитории, управление контентом, океаны данных, журнальные данные, резервное копирование.
👉 @Bookflow
В современном мире, основанном на данных, выбор правильной базы данных имеет решающее значение и в то же время сложен. Сейчас облако предлагает больше возможностей для структурированных, полуструктурированных и неструктурированных баз данных, чем когда-либо. Эта шпаргалка поможет выбрать наиболее подходящую для ваших нужд.
Структурированные базы данных📌
Структурированные базы данных организуют данные в предопределенные схемы и модели.
Реляционные базы данных, такие как MySQL и PostgreSQL, хранят данные в таблицах со строками и столбцами.
Колоночные базы данных, такие как Amazon Redshift и Google BigQuery, также имеют структурированную модель данных, но хранят их по-другому, оптимизируя для аналитических запросов.
Преимущества:
- Эффективные SQL-запросы
- Возможность применения ограничений и валидации
- Последовательность там, где это необходимо
Примеры использования: CRM-системы, управление запасами, бухгалтерский учет, аналитика
Полуструктурированные базы данных📌
Полуструктурированные базы данных обеспечивают гибкость, храня данные без соблюдения формальной схемы. Данные часто хранятся в виде JSON или других гибких форматов.
Примеры включают в себя документ-базы данных, такие как MongoDB, графовые базы данных, наподобие Neptune, широкие колоночные хранилища, такие как ScyllaDB, и хранилища ключ-значение, такие как DynamoDB.
Преимущества:
- Гибкость для изменяющихся данных
- Масштабируемость на разных серверах
Примеры использования: Электронная коммерция, ленты социальных сетей, данные IoT
Неструктурированные базы данных📌
Неструктурированные базы данных оптимизированы для хранения и обработки огромных объемов разнородных данных, таких как документы, изображения, видео. Примеры: AWS S3, Azure Blob Storage.
Преимущества:
- Хранение огромных объемов данных
- Высокая масштабируемость
Примеры использования: Медиарепозитории, управление контентом, океаны данных, журнальные данные, резервное копирование.
👉 @Bookflow
👍2❤1😁1
big Big FLOAT! Произвольная точность: сравниваем opensource-программы для научных и математических вычислений
При проведении научных или математических исследований часто оказывается, что решить аналитически (символьно, с помощью формул) невозможно или очень сложно. И в этом случае мы решаем задачу численно. Для численного решения точность имеет решающее значение.
Аппаратной точности чисел с плавающей запятой (поддерживаемых современными CPU) в 32, 64 и 80 бит может не хватить. И даже чисел четверной точности может не хватить при многочисленных итерациях, в каждой из которой может происходить потеря точности. Если операции неэлементарны, то мы не сможем применить алгоритмы коррекции ошибок по типу алгоритма Кэхэна.
В этих случаях нам приходят на помощь вещественные числа произвольной точности. В статье мы рассмотрим несколько бесплатных программ с их поддержкой и сравним их.
https://habr.com/ru/companies/ruvds/articles/845084/
👉 @Bookflow
При проведении научных или математических исследований часто оказывается, что решить аналитически (символьно, с помощью формул) невозможно или очень сложно. И в этом случае мы решаем задачу численно. Для численного решения точность имеет решающее значение.
Аппаратной точности чисел с плавающей запятой (поддерживаемых современными CPU) в 32, 64 и 80 бит может не хватить. И даже чисел четверной точности может не хватить при многочисленных итерациях, в каждой из которой может происходить потеря точности. Если операции неэлементарны, то мы не сможем применить алгоритмы коррекции ошибок по типу алгоритма Кэхэна.
В этих случаях нам приходят на помощь вещественные числа произвольной точности. В статье мы рассмотрим несколько бесплатных программ с их поддержкой и сравним их.
https://habr.com/ru/companies/ruvds/articles/845084/
👉 @Bookflow
👍4
Regular expressions library (since C++11)
Библиотека регулярных выражений предоставляет класс, представляющий регулярные выражения, которые являются своего рода мини-языком, используемым для выполнения сопоставления шаблонов в строках.
https://en.cppreference.com/w/cpp/regex
👉 @Bookflow
Библиотека регулярных выражений предоставляет класс, представляющий регулярные выражения, которые являются своего рода мини-языком, используемым для выполнения сопоставления шаблонов в строках.
#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
👉 @Bookflow
❤4👍2
Совет по Java 💡
Занимаетесь ли вы версионированием REST API в своих приложениях? Micronaut🚀 - единственный популярный фреймворк Java☕, который предоставляет очень удобный встроенный механизм для этого.
👉 @Bookflow
Занимаетесь ли вы версионированием REST API в своих приложениях? Micronaut🚀 - единственный популярный фреймворк Java☕, который предоставляет очень удобный встроенный механизм для этого.
👉 @Bookflow
👍4
Как Grafanalib помогает управлять дашбордами в масштабе
Для корпоративных организаций данные - это все, но когда им приходится вручную настраивать и переносить информационные панели между средами, данные вскоре превращаются в рутину.
https://www.contino.io/insights/grafanalib
👉 @Bookflow
Для корпоративных организаций данные - это все, но когда им приходится вручную настраивать и переносить информационные панели между средами, данные вскоре превращаются в рутину.
https://www.contino.io/insights/grafanalib
👉 @Bookflow
👍3
Как работает React
Это глубокое погружение во внутреннее устройство react с целью объяснить, какие концепции были заложены в то, чтобы сделать react тем инструментом, который вы используете уже несколько лет.
Это не курс или учебник по использованию React, а скорее объяснение кодовой базы React. Вам не нужно знать ничего из этого, чтобы стать творческим и успешным разработчиком React.
Цель этого проекта - объяснить, как все это создается, какие концепции используются и какие важные «пути кода» следует упомянуть.
https://incepter.github.io/how-react-works/docs/intro/
👉 @Bookflow
Это глубокое погружение во внутреннее устройство react с целью объяснить, какие концепции были заложены в то, чтобы сделать react тем инструментом, который вы используете уже несколько лет.
Это не курс или учебник по использованию React, а скорее объяснение кодовой базы React. Вам не нужно знать ничего из этого, чтобы стать творческим и успешным разработчиком React.
Цель этого проекта - объяснить, как все это создается, какие концепции используются и какие важные «пути кода» следует упомянуть.
https://incepter.github.io/how-react-works/docs/intro/
👉 @Bookflow
incepter.github.io
Introduction | How React Works
Hi, and welcome to this blog post series aiming to explain how react works
👍6
Объединение PDF-файлов с помощью PyPDF2
Установите библиотеку с помощью pip.
Вы можете легко объединить PDF-файлы, используя приведенный ниже код. Просто замените имена в списке pdf-файлов на имена pdf-файлов, которые вы хотите объединить (если они находятся в том же каталоге, что и ваш Python-скрипт), или на ссылки на pdf-файлы.
👉 @Bookflow
Установите библиотеку с помощью 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.")
👉 @Bookflow
❤3👍3
Что происходит внутри 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
👉 @Bookflow
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
👉 @Bookflow
👍6❤1
Университет Сириус объявляет набор на программу «Современные методы робототехники и теории управления»
На нашей программе ты изучишь:
• современные подходы и методы исследования актуальных проблем механики, робототехники и теории управления;
• познакомишься с постановками актуальных тематических задач в приложениях;
• приобретешь навыки по использованию современных аналитических и численных методов их решения.
Кроме того, это отличная возможность стать частью комьюнити, которое разделяет твою страсть к робототехнике!
Сроки проведения: 11-16 ноября 2024.
Успей подать заявку до 13 октября 2024.
Если ты задался вопросами: «А как я поеду в Сириус? Где я буду там жить?»
У нас есть ответ:
Проживание, проезд/перелет по территории РФ и питание для участников программы осуществляется за счет средств партнера ГК «Росатом».
Плата за обучение на программе не взимается.
Более подробная информация: https://siriusuniversity.ru/admission/educational-modules-and-activities/informatsionnie-tehnologii-i-iskusstvennii-intellekt/sovremennye-metody-robototekhniki-i-teorii-upravleniya/
На нашей программе ты изучишь:
• современные подходы и методы исследования актуальных проблем механики, робототехники и теории управления;
• познакомишься с постановками актуальных тематических задач в приложениях;
• приобретешь навыки по использованию современных аналитических и численных методов их решения.
Кроме того, это отличная возможность стать частью комьюнити, которое разделяет твою страсть к робототехнике!
Сроки проведения: 11-16 ноября 2024.
Успей подать заявку до 13 октября 2024.
Если ты задался вопросами: «А как я поеду в Сириус? Где я буду там жить?»
У нас есть ответ:
Проживание, проезд/перелет по территории РФ и питание для участников программы осуществляется за счет средств партнера ГК «Росатом».
Плата за обучение на программе не взимается.
Более подробная информация: https://siriusuniversity.ru/admission/educational-modules-and-activities/informatsionnie-tehnologii-i-iskusstvennii-intellekt/sovremennye-metody-robototekhniki-i-teorii-upravleniya/
🔥3
Шардинг как паттерн архитектуры базы данных
Шардинг (сегментирование) — паттерн архитектуры базы данных, предполагающий разбиение базы данных на более мелкие, быстрые и управляемые части, называемые шардами (сегментами). Каждый шард представляет собой отдельную базу данных, а в совокупности эти шарды составляют единую базу данных. Шардинг особенно полезен для управления крупными базами данных, обеспечивая значительное повышение производительности, удобство обслуживания и масштабируемость.
https://lab.scub.net/architecture-patterns-sharding-09f759150d3d
#db
👉 @Bookflow
Шардинг (сегментирование) — паттерн архитектуры базы данных, предполагающий разбиение базы данных на более мелкие, быстрые и управляемые части, называемые шардами (сегментами). Каждый шард представляет собой отдельную базу данных, а в совокупности эти шарды составляют единую базу данных. Шардинг особенно полезен для управления крупными базами данных, обеспечивая значительное повышение производительности, удобство обслуживания и масштабируемость.
https://lab.scub.net/architecture-patterns-sharding-09f759150d3d
#db
👉 @Bookflow
👏3👍2❤1🤷♂1
This media is not supported in your browser
VIEW IN TELEGRAM
Copycolors
Это интерфейс командной строки для быстрого извлечения доминирующих цветов из локальных или удаленных изображений.
Он построен на Rust и по сути основан на реализации алгоритма Colors Thief.
https://github.com/AbdoulMa/copycolors
👉 @Bookflow
Это интерфейс командной строки для быстрого извлечения доминирующих цветов из локальных или удаленных изображений.
Он построен на Rust и по сути основан на реализации алгоритма Colors Thief.
https://github.com/AbdoulMa/copycolors
👉 @Bookflow
👍3
Челлендж по обработке миллиарда строк на Go: от 1 минуты 45 секунд до 4 секунд
Пару недель назад я прочитал о запавшем мне в душу челлендже по обработке миллиарда строк, поэтому захотел решить его на Go.
Я немного опоздал, соревнования проводились в январе. И на Java. Меня не особо интересует Java, зато давно интересует оптимизация кода на Go.
Этот челлендж был очень прост: обработать текстовый файл названий метеорологических станций и температур, и для каждой станции вывести минимальное, среднее и максимальное значение. Чтобы упростить задачу, было ещё несколько ограничений, однако я проигнорировал те, что относятся только к Java.
https://habr.com/ru/articles/798215/
#golang
👉 @Bookflow
Пару недель назад я прочитал о запавшем мне в душу челлендже по обработке миллиарда строк, поэтому захотел решить его на Go.
Я немного опоздал, соревнования проводились в январе. И на Java. Меня не особо интересует Java, зато давно интересует оптимизация кода на Go.
Этот челлендж был очень прост: обработать текстовый файл названий метеорологических станций и температур, и для каждой станции вывести минимальное, среднее и максимальное значение. Чтобы упростить задачу, было ещё несколько ограничений, однако я проигнорировал те, что относятся только к Java.
https://habr.com/ru/articles/798215/
#golang
👉 @Bookflow
👍7🤝1
Чем синхронный сервер отличается от асинхронного?
Вопрос может быть сформулирован как «сравните Jetty и Netty», или «зачем нужен Spring WebFlux».
Большинство современных Java web-серверов синхронные. Это значит, что для каждого пришедшего HTTP-запроса выделяется отдельный поток. Даже если такой поток переиспользуется с помощью пула, он остается занятым до конца обработка запроса.
Таким образом, если каждый запрос выполняется одну секунду, то при всего лишь 2000 запросов в секунду сервер расходует 2000 потоков. Потоки в ОС – ограниченный ресурс, и не важно как сконфигурирован ваш сервер – в какой-то момент производительность резко просядет.
Альтернативное решение – асинхронные сервера. В них для потоков обработки HTTP-запросов используется work stealing. В широком смысле, вызовы асинхронных функций не блокируют выполнение, а их результат вместо return value возвращается параметром коллбэка. В Java этот результат зачастую возвращается в виде объекта Future.
Чтобы вся обработка запроса стала действительно асинхронной, необходимо также избавиться от блокирующих операций. Иначе преимущество подхода с work stealing выродится в простой пул потоков. Блокирующая работа с файлами и сетью должна быть заменена на NIO, а для БД должен быть использован асинхронный драйвер.
#Java
👉 @Bookflow
Вопрос может быть сформулирован как «сравните Jetty и Netty», или «зачем нужен Spring WebFlux».
Большинство современных Java web-серверов синхронные. Это значит, что для каждого пришедшего HTTP-запроса выделяется отдельный поток. Даже если такой поток переиспользуется с помощью пула, он остается занятым до конца обработка запроса.
Таким образом, если каждый запрос выполняется одну секунду, то при всего лишь 2000 запросов в секунду сервер расходует 2000 потоков. Потоки в ОС – ограниченный ресурс, и не важно как сконфигурирован ваш сервер – в какой-то момент производительность резко просядет.
Альтернативное решение – асинхронные сервера. В них для потоков обработки HTTP-запросов используется work stealing. В широком смысле, вызовы асинхронных функций не блокируют выполнение, а их результат вместо return value возвращается параметром коллбэка. В Java этот результат зачастую возвращается в виде объекта Future.
Чтобы вся обработка запроса стала действительно асинхронной, необходимо также избавиться от блокирующих операций. Иначе преимущество подхода с work stealing выродится в простой пул потоков. Блокирующая работа с файлами и сетью должна быть заменена на NIO, а для БД должен быть использован асинхронный драйвер.
#Java
👉 @Bookflow
👍5
This media is not supported in your browser
VIEW IN TELEGRAM
⚛️ Шпаргалка по UseEffect
❌ Думать об useEffect как о методе жизненного цикла.
✅ Думаем об useEffect как о механизме синхронизации данных (state/props) с системами, которые не контролируются React.
#react
✍️ @Bookflow
❌ Думать об useEffect как о методе жизненного цикла.
✅ Думаем об useEffect как о механизме синхронизации данных (state/props) с системами, которые не контролируются React.
#react
✍️ @Bookflow
👍2
Под капотом Python. Тонкости популярных конструкций with и contextmanager
В этой статье оглянемся в прошлое языка, ответим на вопросы, как написать менеджер контекста, как создать функцию генератор для декоратора contextmanager. Опытные разработчики могут узнать что-то новенькое или дополнить статью ценными комментариями.
https://habr.com/ru/companies/beeline_cloud/articles/749580/
#Python
👉 @Bookflow
В этой статье оглянемся в прошлое языка, ответим на вопросы, как написать менеджер контекста, как создать функцию генератор для декоратора contextmanager. Опытные разработчики могут узнать что-то новенькое или дополнить статью ценными комментариями.
https://habr.com/ru/companies/beeline_cloud/articles/749580/
#Python
👉 @Bookflow
👍1
Переходим на Rust — язык, который сочетает производительность и безопасность.
Почему разработчики выбирают Rust?
➡️ Высокая производительность: Создавайте быстрые приложения с минимальными затратами ресурсов, как на C и C++, но с большей безопасностью.
➡️ Безопасная работа с памятью: Забудьте о проблемах с утечками памяти и гонками данных — cистема типов, в совокупности с принципами владения и заимствования, гарантируют надёжность.
➡️ Конкурентное программирование без риска: Используйте многопоточность без страха столкнуться с гонками данных.
➡️ Широкая экосистема: Огромное сообщество и тысячи готовых библиотек помогут вам быстро внедрить Rust в ваши проекты.
➡️ Совместимость с С ABI: Улучшайте существующие проекты, добавляя участки кода на Rust для оптимизации производительности.
➡️ Будущее веба с WebAssembly: Разрабатывайте высокопроизводительные веб-приложения с помощью Rust и WebAssembly.
Практикуйтесь сразу с первого урока вместе с автором курса и опытным наставником в нашем тренажере:
Вам доступны первые 3 урока с практикой
Урок #1 | Выбор IDE, установка окружения и первый "hello world"
Соберете и запустите первый "hello world" проект.
Урок #2 | Базовый синтаксис
Научитесь писать Rust код в процедурном стиле. Изучите типы данных,встроенные и пользовательские типы, функции и переменные
Урок #3 | Владение и заимствование
Используете механизмы механизмы управления памятью и ссылками. Решите несколько задач на владение, заимствование и слайсы.
🚀 Получить демо-доступ к первым 3 урокам
Реклама. Информация о рекламодателе
Почему разработчики выбирают Rust?
Практикуйтесь сразу с первого урока вместе с автором курса и опытным наставником в нашем тренажере:
Вам доступны первые 3 урока с практикой
Урок #1 | Выбор IDE, установка окружения и первый "hello world"
Соберете и запустите первый "hello world" проект.
Урок #2 | Базовый синтаксис
Научитесь писать Rust код в процедурном стиле. Изучите типы данных,встроенные и пользовательские типы, функции и переменные
Урок #3 | Владение и заимствование
Используете механизмы механизмы управления памятью и ссылками. Решите несколько задач на владение, заимствование и слайсы.
Реклама. Информация о рекламодателе
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2💩1
Примеры исходного кода C++
Эта страница содержит примеры исходного кода функций стандартной библиотеки программирования C++.
https://www.sourcecodeexamples.net/p/cpp-source-code-examples.html
#cpp
👉 @Bookflow
Эта страница содержит примеры исходного кода функций стандартной библиотеки программирования C++.
https://www.sourcecodeexamples.net/p/cpp-source-code-examples.html
#cpp
👉 @Bookflow
👍3