List split
Долго валялось в закладках на SO - и пригодилось, наконец. Обычно - или уже была "в коробке" Guava с Lists.partition(), или - Apache Commons и его ListUtils.partition().
Деление на подмножества (каплю доработано относительно исходника на SO):
Несколько тестов тут.
#java
@panykey | dimio.org
Долго валялось в закладках на SO - и пригодилось, наконец. Обычно - или уже была "в коробке" Guava с Lists.partition(), или - Apache Commons и его ListUtils.partition().
Деление на подмножества (каплю доработано относительно исходника на SO):
// https://stackoverflow.com/a/30072617
public static <T> Stream<List<T>> listPartition(@NotNull List<T> source, @Positive int length) {
requireNonNull(source, "Source list must not be null");
if (length <= 0) {
throw new IllegalArgumentException("Partitions length must be greater than zero");
}
int size = source.size();
if (size == 0) {
return Stream.empty();
}
if (size <= length) {
return Stream.of(source);
}
int fullChunks = (size - 1) / length;
return IntStream.range(0, fullChunks + 1)
.mapToObj(n -> source.subList(n * length, n == fullChunks ? size : (n + 1) * length));
}
Несколько тестов тут.
#java
@panykey | dimio.org
Друзья, хочу всех вас искренне поздравить с наступающими праздниками! 🥳
Здоровья и счастья, успехов, и всего наилучшего!🎆
Здоровья и счастья, успехов, и всего наилучшего!
Please open Telegram to view this post
VIEW IN TELEGRAM
🎉1
Хабр
Разбираемся с MavenGate, новой атакой на цепочку поставок для Java и Android-приложений
Всем привет! Сегодня с вами Юрий Шабалин, генеральный директор «Стингрей Технолоджиз», и я хотел бы разобрать в этой статье новый тип атаки на цепочку поставок под названием «MavenGate». А что в ней,...
Забавная история описана на Хабре.
Стоит сказать, что за прошедшую неделю многие из свободных ранее доменов были куплены. И далеко не факт, что приобрели их владельцы библиотек. К примеру, домен ini4j.org куплен 23 января, а домен jdesktop.org зарегистрирован 19 января. Кто и для чего покупает домены, пока непонятно. Это могут быть как владельцы библиотек, так и злоумышленники, которые нацелены на реализацию данной атаки.
——
Таким образом, мы понимаем, что безумно важно правильно указывать порядок репозиториев и конкретные версии, с которыми работает приложение, чтобы избежать «сюрпризов» с репозиторием, из которого будет загружена библиотека.
Если по поводу использования фиксированных версий зависимостей — неожиданностей нет, то вот про порядок определения репозиториев - впервые читаю. "Автоматически" (читай - копипастно) везде стоит первым central. Но это не было осознанным решением 😞
Ну и дополнительный аргумент в пользу применения "корпоративного" BOM для всех проектов.
#java
@panykey | dimio.org
Стоит сказать, что за прошедшую неделю многие из свободных ранее доменов были куплены. И далеко не факт, что приобрели их владельцы библиотек. К примеру, домен ini4j.org куплен 23 января, а домен jdesktop.org зарегистрирован 19 января. Кто и для чего покупает домены, пока непонятно. Это могут быть как владельцы библиотек, так и злоумышленники, которые нацелены на реализацию данной атаки.
——
Таким образом, мы понимаем, что безумно важно правильно указывать порядок репозиториев и конкретные версии, с которыми работает приложение, чтобы избежать «сюрпризов» с репозиторием, из которого будет загружена библиотека.
Если по поводу использования фиксированных версий зависимостей — неожиданностей нет, то вот про порядок определения репозиториев - впервые читаю. "Автоматически" (читай - копипастно) везде стоит первым central. Но это не было осознанным решением 😞
Ну и дополнительный аргумент в пользу применения "корпоративного" BOM для всех проектов.
#java
@panykey | dimio.org
Платон - мне друг?
Почти два месяца в Тиньке! Конечно, не было времени что-то писать :) Резюмируя: - в продуктовой конторе интересно, нравится, процессы нацелены на результат, а не на "работу ради работы". Оперативно решают и общие, и узкие технические вопросы. На всех этапах собеседования был диалог
двух заинтересованных сторон. Пока все нравится!
Из мелких недочетов: здесь тоже в ходу AnyConnect.
В целом - всё приятно. Так что вброшу рефералку на вакансии🐣
Толков - го в Тиньков🫡
Upd: тут можно полезного поискать, я для этапа сисдиза с успехом воспользовался: https://github.com/Tinkoff/career/tree/main/interview
@panykey | Искусство реализации идей
Почти два месяца в Тиньке! Конечно, не было времени что-то писать :) Резюмируя: - в продуктовой конторе интересно, нравится, процессы нацелены на результат, а не на "работу ради работы". Оперативно решают и общие, и узкие технические вопросы. На всех этапах собеседования был диалог
двух заинтересованных сторон. Пока все нравится!
Из мелких недочетов: здесь тоже в ходу AnyConnect.
В целом - всё приятно. Так что вброшу рефералку на вакансии
Толков - го в Тиньков
Upd: тут можно полезного поискать, я для этапа сисдиза с успехом воспользовался: https://github.com/Tinkoff/career/tree/main/interview
@panykey | Искусство реализации идей
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
Forwarded from GlyshAlkash
Открываем настройки демона докера
И добавляем рабочее зеркало, например gcr.io
И рестарт
У вас также может быть заблокирован gcr, если вы подключаетесь по IPv6.
Еще парочка зеркал:
– https://docker.mirrors.ustc.edu.cn
– https://registry.docker-cn.com
– https://cr.yandex/mirror/ (нельзя добавить в daemon.json; не все образы)
Полюбился сообществу, прокси до docker-hub
- https://huecker.io
Также, вы можете реализовать собственный docker-registry proxy на Sonatype Nexus
- https://help.sonatype.com/en/proxy-repository-for-docker.html
Непроверенные, но возможные зеркала
На свой страх и риск
- https://mirror.gcr.io
- https://ghcr.io
- https://mcr.microsoft.com
- https://public.ecr.aws
- https://daocloud.io
- https://registry.docker-cn.com
- https://c.163.com
- https://er-central-1.mirror.aliunc.com
- https://docker.mirrors.ustc.edu.cn
Добавление всех в одну строку
На свой страх, риск и ментальное здоровье
Второй вариант добавления зеркала:
nano /etc/docker/daemon.json
{
"registry-mirrors": ["https://mirror.gcr.io"]
}service docker restart
У вас также может быть заблокирован gcr, если вы подключаетесь по IPv6.
Еще парочка зеркал:
– https://docker.mirrors.ustc.edu.cn
– https://registry.docker-cn.com
– https://cr.yandex/mirror/ (нельзя добавить в daemon.json; не все образы)
Полюбился сообществу, прокси до docker-hub
- https://huecker.io
Также, вы можете реализовать собственный docker-registry proxy на Sonatype Nexus
- https://help.sonatype.com/en/proxy-repository-for-docker.html
Непроверенные, но возможные зеркала
На свой страх и риск
- https://mirror.gcr.io
- https://ghcr.io
- https://mcr.microsoft.com
- https://public.ecr.aws
- https://daocloud.io
- https://registry.docker-cn.com
- https://c.163.com
- https://er-central-1.mirror.aliunc.com
- https://docker.mirrors.ustc.edu.cn
Добавление всех в одну строку
На свой страх, риск и ментальное здоровье
{
"registry-mirrors" : ["https://huecker.io", "https://yandex.cr/mirror/", "https://mirror.gcr.io", "https://ghcr.io", "https://gcr.io", "https://mcr.microsoft.com", "https://public.ecr.aws", "https://daocloud.io", "https://registry.docker-cn.com", "https://c.163.com", "https://eu-central-1.mirror.aliyuncs.com", "https://docker.mirrors.ustc.edu.cn"]
}Второй вариант добавления зеркала:
nano /etc/sysconfig/docker
OPTIONS='--selinux-enabled --log-driver=journald --registry-mirror=<MIRROR>'
Магия финтеха - эта жёлтая пневматическая сосиска проводила Zumba-групповуху 😁 И научила отлично делать ХОБА! 🐈
Пятнично по мотивам минувшего корпоратива :)
#TSummerPartySpb #repose
@panykey | Искусство реализации идей
Пятнично по мотивам минувшего корпоратива :)
#TSummerPartySpb #repose
@panykey | Искусство реализации идей
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
План -- закон!
Выбирал тут планировщик для периодических заданий по обслуживанию приложения.
С Quartz что-то все устали возиться, ленились отдельную схему под его таблички выделять и кончили тем,
что возжелалисвежих проблем нового, неизведанного.
И, в том числе:
* Поддержки работы со множеством узлов в кластере;
* Поддержки персистентности заданий;
* Простоты использования;
* Простоты развертывания.
Конечно - open source с подходящей лицензией. И
Первым в гонку влезает Quartz - он здесь ужé и у́же применяться не желает!
Вторым идёт истиннобезликий средний JobRunr - откуда-то вынырнул и смылся куда-то.
А против всего недостаточно хорошего у нас, как пелось, есть третий путь:
молодёжный и свежий, только из-под клавиатуры -- db-scheduler!
(Если не заглядывать в
Таблички все же любят? Кто нет - можно без любви, она суха и беспристрастна при любом отношении (но ориентацию предпочитает альбомную):
Quartz
По Кварцу понятно - он остановился в развитии (Достиг нирваны? Ждёт тепловой смерти вселенной?).
Делает много табличек - делает больно глазкам (да-да, можно и так исправить, но лень же). В поставке нет ретраев.
Создание заданий смотрится очень энтерпрайзно, если вы в Индии - хватайте Кварц!
JobRunr
У JobRunr есть UI-панелька, Healthcheck из коробки, API-шка для работы с задачами, поддержка NoSQL хранилищ - и совсем нет совести!
Хочет много денег за такие пустячки, как: автоматический рестарт собственного служебного сервера при падениях; использование открытой Spring-транзакции в заданиях; интервал опроса задач менее 5 секунд. Всё это решается усердной ручной работой, но - без приятных ощущений.
А ещё у него тяжелые запросы во вьюшке для дашборда и построения метрик. И умирание сервера вместе с liveness пробами при потере коннекта к БД, после чего отстреливается под. И название - из семи символов! И...Ладно, не буду придираться.
db-scheduler
О, от db-scheduler веет ветром перемен! Самим свои существованием он, как будто, подбивает впасть
в грех починки исправного!😳 Соблазняет, как в истории про змею и яблоко.
Ну и кое-что полезное имеет и умеет тоже: мало (очень) сторонних зависимостей, код понятный и простой,
Healthcheck в поставке, метрики - тоже, заявляет высокую производительность, умеет создавать задания в одном сервисе и выполнять в другом, создает впечатление просты перехода на него.
При этом - из коробки в нём нет истории выполнений задания (есть плагин) и UI-панели (тоже плагин).
И id-шник заданию при запуске надо вручную создавать. Не выглядит особо опасным занятием, если честно.
Что делать?
Простыня выше ⬆️ совершенно точно не является индивидуальной инвестиционной рекомендацией, если только вы не инвестируете в таблицы БД и строчки в редакторе (снова поприветствуем Индию!). Никакой другой рекомендацией
она не является тоже☝
Личный выбор каждого -TITS or GTFO , а подбор планировщика - не так уж, в сущности, важен 😎
#db #scheduler
@panykey | Искусство реализации идей
Выбирал тут планировщик для периодических заданий по обслуживанию приложения.
С Quartz что-то все устали возиться, ленились отдельную схему под его таблички выделять и кончили тем,
что возжелали
И, в том числе:
* Поддержки работы со множеством узлов в кластере;
* Поддержки персистентности заданий;
* Простоты использования;
* Простоты развертывания.
Конечно - open source с подходящей лицензией. И
spring-boot-starter в комплекте - для максимального удовольствия.Первым в гонку влезает Quartz - он здесь ужé и у́же применяться не желает!
Вторым идёт истинно
А против всего недостаточно хорошего у нас, как пелось, есть третий путь:
молодёжный и свежий, только из-под клавиатуры -- db-scheduler!
(Если не заглядывать в
git log, а мы и не будем).Таблички все же любят? Кто нет - можно без любви, она суха и беспристрастна при любом отношении (но ориентацию предпочитает альбомную):
| Критерий | Quartz | JobRunr | db-scheduler |
|:-----------------------|:------------:|:------------:|:------------:|
| Cluster-friendly | + | + | + |
| Персистентные задачи | + | + | + |
| История запусков | + | + | +/- |
| Простота использования | +/- | +/- | + |
| Простота развертывания | +/- | + | + |
| Служебных таблиц в БД | 11 (-) | 5 (+/-) | 1 (+) |
| Ретраи | Вручную (-) | Поставка (+) | Поставка (+) |
| Звёзд в GitHub | 6,2k | 2,3k | 1,2k |
| Дата последнего релиза | Окт 2019 (-) | Июл 2024 (+) | Июл 2024 (+) |
| Лицензия | Apache 2.0 | LGPL v3 | Apache 2.0 |
Quartz
По Кварцу понятно - он остановился в развитии (Достиг нирваны? Ждёт тепловой смерти вселенной?).
Делает много табличек - делает больно глазкам (да-да, можно и так исправить, но лень же). В поставке нет ретраев.
Создание заданий смотрится очень энтерпрайзно, если вы в Индии - хватайте Кварц!
JobRunr
У JobRunr есть UI-панелька, Healthcheck из коробки, API-шка для работы с задачами, поддержка NoSQL хранилищ - и совсем нет совести!
Нет и не было... 🧘♀️
Хочет много денег за такие пустячки, как: автоматический рестарт собственного служебного сервера при падениях; использование открытой Spring-транзакции в заданиях; интервал опроса задач менее 5 секунд. Всё это решается усердной ручной работой, но - без приятных ощущений.
А ещё у него тяжелые запросы во вьюшке для дашборда и построения метрик. И умирание сервера вместе с liveness пробами при потере коннекта к БД, после чего отстреливается под. И название - из семи символов! И...
db-scheduler
О, от db-scheduler веет ветром перемен! Самим свои существованием он, как будто, подбивает впасть
в грех починки исправного!
Ну и кое-что полезное имеет и умеет тоже: мало (очень) сторонних зависимостей, код понятный и простой,
Healthcheck в поставке, метрики - тоже, заявляет высокую производительность, умеет создавать задания в одном сервисе и выполнять в другом, создает впечатление просты перехода на него.
При этом - из коробки в нём нет истории выполнений задания (есть плагин) и UI-панели (тоже плагин).
И id-шник заданию при запуске надо вручную создавать. Не выглядит особо опасным занятием, если честно.
Что делать?
Простыня выше ⬆️ совершенно точно не является индивидуальной инвестиционной рекомендацией, если только вы не инвестируете в таблицы БД и строчки в редакторе (снова поприветствуем Индию!). Никакой другой рекомендацией
она не является тоже
Личный выбор каждого -
#db #scheduler
@panykey | Искусство реализации идей
Please open Telegram to view this post
VIEW IN TELEGRAM
Увлёкся азартной игрой с государством корпорацией 🤑
Успел выиграть каплю знания —
И получается очень удобно, когда словарный запас иссяк:
Легче писать и проще читать, чем комбинацию привычного
Затем — немного "угадайки" (гостя можно было тоже отфильтровать), попыток на которую остаётся достаточно:
Базу существительных где-то в интернетах стянул давно, импорт был инсертами под
Пришлось её чистить, чтобы в👇
#sql #db
@panykey | Искусство реализации идей
Успел выиграть каплю знания —
PostgreSQL умеет нативно оперировать множествами, в т.ч. — символов.И получается очень удобно, когда словарный запас иссяк:
select word
from public.nouns
where
char_length(word) = 5
and string_to_array(word, null) @> '{с,о}'
and not string_to_array(word, null) && '{а,к,ц,и,я}'
and word like '____ь'
Легче писать и проще читать, чем комбинацию привычного
like с кучей отдельных сравнений типаand strpos(word, 'а') = 0
and strpos(word, 'к') = 0
and strpos(word, 'ц') = 0
-- ...
and strpos(word, 'о') > 0
Затем — немного "угадайки" (гостя можно было тоже отфильтровать), попыток на которую остаётся достаточно:
word |
-----+
гость|
осень|
особь|
осыпь|
смоль|
Базу существительных где-то в интернетах стянул давно, импорт был инсертами под
MySQL и с каким-то мусором.Пришлось её чистить, чтобы в
PG присунуть. Цепляю в комментарий, если кому понадобится #sql #db
@panykey | Искусство реализации идей
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Путеводитель по базам данных (Владимир Комаров)
Отличное дополнение к PostgreSQL изнутри — ещё одна годная и бесплатная книга по СУБД на сайте PostgresPro — Путеводитель по базам данных.
Хороший учебник/справочник по базе баз 😜 с примерами на актуальных системах. И, сверх того, ещё и с указанием конкретных вендорских названий для реализаций тех или иных аспектов СУБД.
Есть отличный предметный указатель, с которого можно и начать - по нему хорошо прослеживаются релевантные темы и термины, т.е. можно прям "укрупнённо" быстро охватить некую предметную область.
Нет заныривания в глубины глубин и погружения в детали, не влияющие на практическое использование, но уж по приведённым примерам - будет дано и сравнение, и описание альтернатив.
#sql
@panykey
Отличное дополнение к PostgreSQL изнутри — ещё одна годная и бесплатная книга по СУБД на сайте PostgresPro — Путеводитель по базам данных.
Хороший учебник/справочник по базе баз 😜 с примерами на актуальных системах. И, сверх того, ещё и с указанием конкретных вендорских названий для реализаций тех или иных аспектов СУБД.
Есть отличный предметный указатель, с которого можно и начать - по нему хорошо прослеживаются релевантные темы и термины, т.е. можно прям "укрупнённо" быстро охватить некую предметную область.
Нет заныривания в глубины глубин и погружения в детали, не влияющие на практическое использование, но уж по приведённым примерам - будет дано и сравнение, и описание альтернатив.
Книга рассказывает об архитектурных принципах, на которых базируются все современные системы управления базами данных, а также об алгоритмах и структурах данных, которые в них используются. Особое внимание уделено сравнению реализаций одних и тех же подходов в близких по функциональности платформах.
#sql
@panykey
Итоги года - вспомнить всё
Не всё же поквартально подытоживать.
Мои итоги просты и понятны, год показал - чуть лучше, чем "на отлично 💯", я:
▪️ пою, и ещё лучше - когда молчу😭
▪️ плаваю: вниз, вбок - ок, прямо - не ок 📐
▪️ пляшу😕 — просто потенциал "дедушки Запорожца" роскошного олдтаймера 🧐 ещё не полностью раскрыт
И пара менее значительных вещей 🤭, речь о которых пойдёт ниже.
Перешёл в ТБанк, где участвую в создании и запуске прикольного продукта практически с нуля. Это забавно - не так давно поймали незапланированное НТ на
Успел провести пяток интервью, из них одно успешное. И проникся смыслом наличия тех самых "тупых шаблонных вопросов, которые все знают и от которых все страдают". А за их границы и выходить-то почти не приходится - таков печальный итог 🤦🏼♂️🤷🏼♂️
Ещё здесь узнал, что тру-DBA читают🤔 — и такой фразы достаточно для успешного прохождения DBA-собеса! (Но это не точно).
А, да - курил лет двадцать, и лет двадцать же не летал самолётами (совпадение?). По-кайфу катнул на мотике по горам в Дагестане 🏍 Лишился зуба глупости - тоже не повседневная рутина (к счастью!). Были и иные утраты.
В целом - жить можно🧘♀️ 🏄♂️ 🤯 😁
И всех с наступающим Новым годом!🌟 🌟 Достижения квартальных целей! 🤦♂️
@panykey | dimio.org
Не всё же поквартально подытоживать.
Мои итоги просты и понятны, год показал - чуть лучше, чем "на отлично 💯", я:
▪️ пою, и ещё лучше - когда молчу
▪️ плаваю: вниз, вбок - ок, прямо - не ок 📐
▪️ пляшу
И пара менее значительных вещей 🤭, речь о которых пойдёт ниже.
Перешёл в ТБанк, где участвую в создании и запуске прикольного продукта практически с нуля. Это забавно - не так давно поймали незапланированное НТ на
2,50К req/s, доблестно залогировав каждый из них! И запарно - даже не было времени в очередной #adventofcode поиграть.Успел провести пяток интервью, из них одно успешное. И проникся смыслом наличия тех самых "тупых шаблонных вопросов, которые все знают и от которых все страдают". А за их границы и выходить-то почти не приходится - таков печальный итог 🤦🏼♂️🤷🏼♂️
Ещё здесь узнал, что тру-DBA читают
select * — примерно как "селектить ежика" А, да - курил лет двадцать, и лет двадцать же не летал самолётами (совпадение?). По-кайфу катнул на мотике по горам в Дагестане 🏍 Лишился зуба глупости - тоже не повседневная рутина (к счастью!). Были и иные утраты.
В целом - жить можно
И всех с наступающим Новым годом!
@panykey | dimio.org
Please open Telegram to view this post
VIEW IN TELEGRAM
👏3
AI курильщика в завязке 😮💨
Утёнок Му запустил свой агрегатор доступа к LLM: https://duck.ai
Менее красноглазый💻 , чем какой-нибудь jan - интерфейс здорового человека, дающий, кстати, и http апишку к запущенным локально моделям. Ну так и ресурсов локальных не требует.
И явно менее агрегатор курильщика, чем куча расплодившихся проксей к OpenAI и подобным. Claude весьма неплоха - теперь можно без приседаний с доступом её покрутить.
Слава роботам!🖕 (на всякий случай)
#chatgpt #AI
@panykey | dimio.org
Утёнок Му запустил свой агрегатор доступа к LLM: https://duck.ai
Менее красноглазый
И явно менее агрегатор курильщика, чем куча расплодившихся проксей к OpenAI и подобным. Claude весьма неплоха - теперь можно без приседаний с доступом её покрутить.
Слава роботам!
#chatgpt #AI
@panykey | dimio.org
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Лень нарезать, да и необрезанные интересней кмк