oleg_log
1.77K subscribers
1.86K photos
130 videos
9 files
2.78K links
Shelter for antisocial programmers "Oleg"

halp: @olegkovalov
web: https://olegk.dev
fov: @oleg_fov
chat: @oleg_log_blabla
podcast: @generictalks
Download Telegram
В этой строке прекрасно все

MultiDcRepositoryCommandExecutor multiDcRepositoryCommandExecutor(ZookeeperGroupRepositoryFactory zookeeperGroupRepositoryFactory)
Было:
stream()
.filter(some_heavy_filter() && some_easy_check())

Говорю на ревью, давай так:
stream()
.filter(some_easy_check())
.filter(some_heavy_filter())

в мастере:
stream()
.filter(some_heavy_filter())
.filter(some_easy_check())


и комент: done

Спасибо синьерам за выработку кортизола в моем теле
oleg_log
Было: stream() .filter(some_heavy_filter() && some_easy_check()) Говорю на ревью, давай так: stream() .filter(some_easy_check()) .filter(some_heavy_filter()) в мастере: stream() .filter(some_heavy_filter()) .filter(some_easy_check()) и комент: done Спасибо…
Да, там реально стоило разбить и сделать простой чек раньше.

Кроме красоты, это еще чуток узкое место, и пару десятков тыщ рпс пролетающие через фильтр это подтверждают.
1й после o̻̭d̍ͪm̴ͫe͂ͤn͐͗ ͨ̈҉̗̘ a͂͒
Сейчас я пишу одну из самых отвратительных вещей в жизни.

Если кратко, то я играюсь с ооп фабриками, спринг контекстами и перекидыванием классов между публичным и приватным проектами.

Все бы ничего, но приходится писать костыли во имя блага (иначе придется еще больше вещей переделывать)(один из основных авторов одобрил, я чист).

Офкорс можно ругать архитектуру и вообще мой дед написал бы лучше, но так уж вышло.

Често говоря меня выбешивает другое: циклические зависимости. Не явные, но все же циклические. Когда оказывается, что пакеты между собой связаны в кольцо длиной 5 (foo -> bar -> baz -> quz -> foo, wtf?)

Выстраданная мысль: спагетти начинается не с кода, а с модулей/пакетом/неймспейсов.

"he will not divide us" - звучит как лозунг херовенько организованных модулей, в которые я несу демократию и фичи👌
Дед Боб сцепился с Джеффом со стековерфлоу и испортили всем ленту в твиторе каждый раз одно и тоже...

Рандом чел - Types + tests > tests
Дед Боб - Not necessarily. Types come with significant costs.

Но ведь: Tests aren't free either

Дедуле пора на пенсию.

https://mobile.twitter.com/codinghorror/status/1141848007404425221
В копилочку к: между теоретическим и практическим программированием все же есть разница
1й билд дня начинатеся с этого:
Could not GET 'https://repo.maven.apache.org/maven2/com/fasterxml/jackson/core/jackson-annotations/2.9.4/jackson-annotations-2.9.4.pom'. Received status code 403 from server: Forbidden

Ок, допустим я превысил квоту на скачивание, теперь хороший вопрос, а почему оно не лежит в CDN?
А если и лежит, то какой же это надо иметь объем запросов, чтобы мне кидало 403 ? для CDN думаю смешной.

Космонавты архитектуры, чесслово

UPD: мавен репо живет за плечами Fastly, спасибо за уточнение (тут упоминается https://www.fastly.com/customers/sonatype)
Хорошая задачка на самом деле, да и ответ не замудренный.

Кстати, еще одна близкая и хорошая: напишите генератор строк с одинаковым хешем (жавовским к примеру)

https://xn--r1a.website/numstation/1514
ExponentiallyDecayingReservoir это такой крутой контейнер для метрик, который выжирает под 1.5гб рама и висит там очень долго (почти забирая треть рама сервиса).

А потому что внутри ConcurrentSkipListMap. А она далеко не легко весная, а метрик хочется больше. Но не такой же ценой, блин.

(резервуар из пакета com/codahale/metrics если что)
Узнал сегодня о макросе include в Rust, который парсит заданный файл как выражение на расте. В доке сразу советуют им не пользоваться лишний раз. Действительно, странно-опасная штука, контект выражения смешивается с округающим кодом. Но круто, да.

/// File 'monkeys.in':
['🙈', '🙊', '🙉']
.iter()
.cycle()
.take(6)
.collect::<String>()

/// File 'main.rs':
fn main() {
let my_string = include!("monkeys.in");
assert_eq!("🙈🙊🙉🙈🙊🙉", my_string);
println!("{}", my_string);
}

https://doc.rust-lang.org/std/macro.include.html

И более адекватные братья include_bytes & include_str. Работаю так же, ток типы байт аррей и строка соотв.

Казалось бы, причем тут префикс include, а как подсказал друг, это смахивает на include из си. Как помню в ранних версиях это просто означало: вставь этот файл сюда и компиль (хотя си далеко от этой мысли не ушел)
Штош, в го завозят try к 1.14, разрешают накладывание интерфейсов, ругаются на strings(int), улучшают криптографию. Аве

https://blog.golang.org/go2-next-steps
oleg_log
Штош, в го завозят try к 1.14, разрешают накладывание интерфейсов, ругаются на strings(int), улучшают криптографию. Аве https://blog.golang.org/go2-next-steps
Если кратко, то try работает так. Там есть одна тонкость, когда он используется с go и defer. Пользоваться можно, но смысл сомнительный.