Ро́берт Ха́тчингс Го́ддард (англ. Robert Hutchings Goddard, 5 октября 1882 года — 10 августа 1945 года) — американский учёный, один из пионеров современной ракетной техники, создатель первого жидкостного ракетного двигателя.
2021 — состоялся релиз OC Windows 11.
#Biography #Birth_Date #Events #05Октября
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
А сколько вы жмете от груди?
Хотите парадокс?😨
И сегодня (как понятно наверно из заголовка) я хочу поговорить с Вами о спорте и поддержании нашего мешка с костями в надлежащем состоянии.
Раньше, когда у меня практически не было свободного времени, я мечтал, что как только оно появится - я начну постоянно заниматься (возможно даже в спортзале) и поддерживать себя в форме.💪
Теперь когда я работаю на удаленке, заставить себя заниматься оказалось неожиданно сложной задачей.
Ведь хоть работа и удаленная - она все равно есть. А так же всегда есть очередное видео, по новой, неизученной технологии, которое уже долго ждет своего часа.
И по-любому надо делать выбор.
Что мы получаем от сидячей работы.
Тут наверно стоит предупредить молодых людей - вы не бессмертны.
Увы и ах🤷♀️
Поэтому, чем раньше вы задумаетесь о том в каком состоянии будет ваш организм к 40-50 годам, тем лучше (любители энергетиков привет!).
Но и тем кто сейчас вкатывается в IT стоит знать - если вы меняете активный, физический труд, на сидячий образ жизни - изменения в организме не заставят себя ждать (дружно машем геморрою и варикозу, ожирению и остаткам зрения😂 ).
И многие с пренебрежением относятся к этом, мол, "я вон худой как палка, какое ожирение, какой геморрой?"
В целом они правы, но уж точно поверьте - болячка от застоя организма найдется для каждого, если об этом не заботиться.
Что делать?
Двигаться.
Одно слово реально поможет вам не задумываться о негативных последствиях 12-часового, сидячего рабочего дня.
Как двигаться и куда - это зависит от индивидуального состояния организма.
Кто-то может 90 минут гонять по полю мяч, без особого напряжения, а кому-то 3-х километровая прогулка по парку кажется вызовом.
Поэтому по настоящему выбирать Вам.
Нужно помнить только одно - двигаться необходимо.
Цифры конечно отличаются, сколько в среднем, в зависимости от возраста и так далее. Я не собираюсь тут рассказывать КАК и СКОЛЬКО. Я просто хочу по дружески предупредить, а в остальном Вам поможет интернет, тренер или не дай бог, доктор.
Как себя заставить?
Тут вам пригодятся мои советы из предыдущих воскресных мотивационных статей по изучению Java.
Ведь это очень похоже.
Вы заставляете себя выйти из зоны комфорта, заставляете свое тело и мозг работать, чего они не хотят.
Самое главное - сделать первый шаг.
И в целом, эта статья - не попытка напугать. Я знаю множество людей которые столкнулись с проблемами при сидячем образе жизни. Добавить к этому вкусную и жирную пищу, алкоголь и сигареты - и вот кандидат к получению хронических заболеваний.
Ну и надеюсь, вы понимаете - ни одному бизнесу не нужен хронически больной работник, который регулярно ходит на больничные, не выполняет свою работу в полном объеме из-за регулярно плохого состояния и так далее.
И это относится не только к IT.
Поэтому - а сколько вы жмете от груди?💪
Берегите себя. На этом извольте откланяться - ваш @Oleborn
😎 Пишите вашем мнение в комментарии.
#мои_мысли
Хотите парадокс?
Чем больше у Вас свободного времени, тем больше интересных занятий которые пожирают все свободное время, которое вы хотели потратить на "полезные" дела.
И сегодня (как понятно наверно из заголовка) я хочу поговорить с Вами о спорте и поддержании нашего мешка с костями в надлежащем состоянии.
Раньше, когда у меня практически не было свободного времени, я мечтал, что как только оно появится - я начну постоянно заниматься (возможно даже в спортзале) и поддерживать себя в форме.
Теперь когда я работаю на удаленке, заставить себя заниматься оказалось неожиданно сложной задачей.
Ведь хоть работа и удаленная - она все равно есть. А так же всегда есть очередное видео, по новой, неизученной технологии, которое уже долго ждет своего часа.
И по-любому надо делать выбор.
Что мы получаем от сидячей работы.
Тут наверно стоит предупредить молодых людей - вы не бессмертны.
Увы и ах
Поэтому, чем раньше вы задумаетесь о том в каком состоянии будет ваш организм к 40-50 годам, тем лучше (любители энергетиков привет!).
Но и тем кто сейчас вкатывается в IT стоит знать - если вы меняете активный, физический труд, на сидячий образ жизни - изменения в организме не заставят себя ждать (дружно машем геморрою и варикозу, ожирению и остаткам зрения
И многие с пренебрежением относятся к этом, мол, "я вон худой как палка, какое ожирение, какой геморрой?"
В целом они правы, но уж точно поверьте - болячка от застоя организма найдется для каждого, если об этом не заботиться.
Что делать?
Двигаться.
Одно слово реально поможет вам не задумываться о негативных последствиях 12-часового, сидячего рабочего дня.
Как двигаться и куда - это зависит от индивидуального состояния организма.
Кто-то может 90 минут гонять по полю мяч, без особого напряжения, а кому-то 3-х километровая прогулка по парку кажется вызовом.
Поэтому по настоящему выбирать Вам.
Нужно помнить только одно - двигаться необходимо.
Цифры конечно отличаются, сколько в среднем, в зависимости от возраста и так далее. Я не собираюсь тут рассказывать КАК и СКОЛЬКО. Я просто хочу по дружески предупредить, а в остальном Вам поможет интернет, тренер или не дай бог, доктор.
Как себя заставить?
Тут вам пригодятся мои советы из предыдущих воскресных мотивационных статей по изучению Java.
Ведь это очень похоже.
Вы заставляете себя выйти из зоны комфорта, заставляете свое тело и мозг работать, чего они не хотят.
Самое главное - сделать первый шаг.
И в целом, эта статья - не попытка напугать. Я знаю множество людей которые столкнулись с проблемами при сидячем образе жизни. Добавить к этому вкусную и жирную пищу, алкоголь и сигареты - и вот кандидат к получению хронических заболеваний.
Ну и надеюсь, вы понимаете - ни одному бизнесу не нужен хронически больной работник, который регулярно ходит на больничные, не выполняет свою работу в полном объеме из-за регулярно плохого состояния и так далее.
И это относится не только к IT.
Поэтому - а сколько вы жмете от груди?
Берегите себя. На этом извольте откланяться - ваш @Oleborn
😎 Пишите вашем мнение в комментарии.
#мои_мысли
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
Серге́й Льво́вич Со́болев (23 сентября [6 октября] 1908, Санкт-Петербург — 3 января 1989, Москва) — советский математик, занимавшийся математическим анализом и дифференциальными уравнениями в частных производных. Академик АН СССР (1939). Герой Социалистического Труда (1951). Лауреат трёх Сталинских премий и Государственной премии СССР.
1995 — Открыта 51 Пегаса b — первая экзопланета у звезды главной последовательности.
2000 — согласно сообщению британской компании «NetNames», зарегистрировано 30-миллионное доменное имя.
2010 — начало работу приложение по обмену фотографиями Instagram.
#Biography #Birth_Date #Events #06Октября
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥1
Вы умеете вайбкодить?
Anonymous Poll
44%
Да, я занимаюсь этим каждый день! ☺️
41%
Я не знаю что это 🤷♀️
15%
Я против этого! Vim forever 😈
Реактивное программирование
Базовые операторы в Reactor: map, filter, flatMap
Операторы — это методы на Mono/Flux, которые позволяют строить конвейеры: преобразовывать, фильтровать и комбинировать данные асинхронно. Представьте их как звенья в цепи: каждый берёт входной поток, меняет его и передаёт дальше. Сегодня разберём три фундаментальных: map (преобразование элементов), filter (фильтрация) и flatMap (плоское преобразование, для слияния подпотоков). Эти операторы — основа для сложных сценариев, они решают проблемы из первого поста, позволяя писать декларативный код вместо ручных циклов и ожиданий.
Операторы в Reactor — декларативные: вы описываете, что делать с данными, а библиотека заботится об асинхронности, backpressure и ошибках. Они не меняют исходный поток (иммутабельны), а создают новый. Это делает код читаемым и тестируемым.
Map: простое преобразование элементов
Map — оператор для изменения каждого элемента потока. Он берёт входной элемент, применяет функцию и выдаёт результат. Синхронный: функция должна быть быстрой и без блокировок. Идеален для конвертации типов, вычислений или форматирования.
Пример на Flux:
На Mono:
Почему map полезен? В традиционных подходах (как в CompletableFuture.thenApply) вы строите цепочки, но рискуете вложенностью. В Reactor map делает конвейер линейным: читается как последовательный код, но работает асинхронно. Поддерживает backpressure: если подписчик запрашивает n, map передаёт запрос upstream (источнику).
Filter: отбор элементов по условию
Filter — для пропуска только нужных элементов. Принимает предикат (функцию, возвращающую true/false) и пропускает те, для которых true. Остальные игнорируются — поток "сужается".
Пример на Flux:
На Mono:
Filter экономит ресурсы: ненужные элементы не обрабатываются дальше в цепи. В отличие от императивных циклов (где вы фильтруете в for с if), здесь всё асинхронно и с backpressure — запросы передаются источнику только для прошедших элементов.
Комбинация с map: numbers.filter(num -> num > 5).map(num -> num * 10).subscribe(); // 60, 70, 80, 90, 100
Это строит конвейер: фильтр → преобразование, без ручных переменных.
#Java #middle #Reactor #map #filter #flatMap
Базовые операторы в Reactor: map, filter, flatMap
Операторы — это методы на Mono/Flux, которые позволяют строить конвейеры: преобразовывать, фильтровать и комбинировать данные асинхронно. Представьте их как звенья в цепи: каждый берёт входной поток, меняет его и передаёт дальше. Сегодня разберём три фундаментальных: map (преобразование элементов), filter (фильтрация) и flatMap (плоское преобразование, для слияния подпотоков). Эти операторы — основа для сложных сценариев, они решают проблемы из первого поста, позволяя писать декларативный код вместо ручных циклов и ожиданий.
Операторы в Reactor — декларативные: вы описываете, что делать с данными, а библиотека заботится об асинхронности, backpressure и ошибках. Они не меняют исходный поток (иммутабельны), а создают новый. Это делает код читаемым и тестируемым.
Map: простое преобразование элементов
Map — оператор для изменения каждого элемента потока. Он берёт входной элемент, применяет функцию и выдаёт результат. Синхронный: функция должна быть быстрой и без блокировок. Идеален для конвертации типов, вычислений или форматирования.
Пример на Flux:
import reactor.core.publisher.Flux;
Flux<String> originalFlux = Flux.just("яблоко", "банан", "вишня");
Flux<String> transformed = originalFlux.map(fruit -> fruit.toUpperCase()); // Преобразование в верхний регистр
transformed.subscribe(System.out::println); // Вывод: "ЯБЛОКО", "БАНАН", "ВИШНЯ"
Здесь map применяет лямбду к каждому элементу последовательно. Если ошибка в функции — сработает onError.
На Mono:
Mono<Integer> num = Mono.just(5).map(x -> x * 2); // Результат: 10
Почему map полезен? В традиционных подходах (как в CompletableFuture.thenApply) вы строите цепочки, но рискуете вложенностью. В Reactor map делает конвейер линейным: читается как последовательный код, но работает асинхронно. Поддерживает backpressure: если подписчик запрашивает n, map передаёт запрос upstream (источнику).
Filter: отбор элементов по условию
Filter — для пропуска только нужных элементов. Принимает предикат (функцию, возвращающую true/false) и пропускает те, для которых true. Остальные игнорируются — поток "сужается".
Пример на Flux:
Flux<Integer> numbers = Flux.range(1, 10);
Flux<Integer> evenNumbers = numbers.filter(num -> num % 2 == 0); // Только чётные
evenNumbers.subscribe(System.out::println); // Вывод: 2, 4, 6, 8, 10
Если поток пустой или ничего не проходит — onComplete сработает без onNext.
На Mono:
Mono<String> word = Mono.just("привет").filter(w -> w.length() > 7); // Не пройдёт — пустой Mono
Filter экономит ресурсы: ненужные элементы не обрабатываются дальше в цепи. В отличие от императивных циклов (где вы фильтруете в for с if), здесь всё асинхронно и с backpressure — запросы передаются источнику только для прошедших элементов.
Комбинация с map: numbers.filter(num -> num > 5).map(num -> num * 10).subscribe(); // 60, 70, 80, 90, 100
Это строит конвейер: фильтр → преобразование, без ручных переменных.
#Java #middle #Reactor #map #filter #flatMap
👍1
FlatMap: плоское преобразование для асинхронных подпотоков
FlatMap — мощный оператор для случаев, когда из одного элемента нужно создать подпоток (Publisher), и слить их в плоский результат. Это как map, но для асинхронных или множественных выходов: он "разворачивает" вложенные потоки. Полезен для запросов в цикле: например, для каждого пользователя — асинхронно запросить данные.
Пример на Flux:
Асинхронный пример: симулируем API-запросы.
Почему flatMap решает проблемы? В традиционных подходах (циклы с Future) вы ждёте каждый запрос, блокируя. Здесь — асинхронное слияние, без ожиданий и callback-ада: цепочка читаема.
Практические советы и подводные камни
Читаемость: цепочки операторов пишите по строкам для ясности: flux.filter(...).map(...).flatMap(...);
Ошибки: если в map/flatMap исключение — onError. Используйте handle() для условной обработки.
Производительность: в flatMap устанавливайте concurrency (default 256) для контроля параллелизма: flatMap(func, 4) — max 4 подпотока одновременно.
Камень: блокирующий код в лямбдах — сломает асинхронность. Для IO — используйте flatMap с Mono.fromCallable и publishOn(Schedulers.boundedElastic()).
Тестирование: StepVerifier.create(flux.map(...)).expectNext("ЯБЛОКО").verifyComplete();
#Java #middle #Reactor #map #filter #flatMap
FlatMap — мощный оператор для случаев, когда из одного элемента нужно создать подпоток (Publisher), и слить их в плоский результат. Это как map, но для асинхронных или множественных выходов: он "разворачивает" вложенные потоки. Полезен для запросов в цикле: например, для каждого пользователя — асинхронно запросить данные.
Пример на Flux:
Flux<String> fruits = Flux.just("яблоко", "банан");
Flux<Character> letters = fruits.flatMap(fruit -> Flux.fromArray(fruit.toCharArray())); // Из строки — поток символов
letters.subscribe(System.out::println); // Вывод: я, б, л, о, к, о, б, а, н, а, н (в возможном перемешанном порядке, если асинхронно)
Здесь flatMap берёт строку, создаёт Flux из символов и сливает всё в один поток. В отличие от map (который вернул бы Flux<Flux<Character>> — вложенный), flatMap "сплющивает".
Асинхронный пример: симулируем API-запросы.
import java.time.Duration;
Flux<String> users = Flux.just("user1", "user2");
Flux<String> data = users.flatMap(user -> Mono.just("Данные для " + user).delayElement(Duration.ofSeconds(1))); // Асинхронный подпоток с задержкой
data.subscribe(System.out::println); // Вывод через секунды: "Данные для user1", "Данные для user2" (параллельно, если scheduler позволяет)
FlatMap уважает backpressure: запрашивает у подпотоков по мере нужды. Но осторожно: если подпотоки бесконечные — рискуете перегрузкой. Параметр concurrency (flatMap(func, concurrency)) ограничивает параллелизм.
Почему flatMap решает проблемы? В традиционных подходах (циклы с Future) вы ждёте каждый запрос, блокируя. Здесь — асинхронное слияние, без ожиданий и callback-ада: цепочка читаема.
Практические советы и подводные камни
Читаемость: цепочки операторов пишите по строкам для ясности: flux.filter(...).map(...).flatMap(...);
Ошибки: если в map/flatMap исключение — onError. Используйте handle() для условной обработки.
Производительность: в flatMap устанавливайте concurrency (default 256) для контроля параллелизма: flatMap(func, 4) — max 4 подпотока одновременно.
Камень: блокирующий код в лямбдах — сломает асинхронность. Для IO — используйте flatMap с Mono.fromCallable и publishOn(Schedulers.boundedElastic()).
Тестирование: StepVerifier.create(flux.map(...)).expectNext("ЯБЛОКО").verifyComplete();
#Java #middle #Reactor #map #filter #flatMap
👍2
Что выведет код?
#Tasks
import java.util.*;
public class Task061025 {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>(Arrays.asList(1, 2, 3));
for (Integer num : list) {
if (num == 3) {
list.remove(num);
}
}
System.out.println(list);
}
}
#Tasks
Варианты ответа:
Anonymous Quiz
25%
[1, 2]
8%
[1, 3]
17%
[1, 2, 3]
50%
ConcurrentModificationException
👍1