AlseCode | Краткость и раскопки по разработке
79 subscribers
3 photos
1 video
19 links
Краткость — сестра разработки

Опыт инженерных изысканий и опасных экспериментов в сфере Kotlin/Java и прочего.

Блог: https://alse-code.ru

Менторю: https://solvery.io/ru/mentor/alexey_stepanov

Связь: @arsennikum
Download Telegram
Computer Vision & Kotlin

Обычно всяческие CV, ML, AI проекты делаются на Python или C++, но есть возможность работать с этим из Java и, соответственно, Kotlin. Рассмотрим использование OpenCV из Kotlin на примере matchTemplate — операции поиска объекта по шаблону.

---
Найдём ли нужную кошку в толпе кошек?

#bytedeco #ComputerVision #kotlin #OpenCV #быстрыйСтарт
Что можно сделать с GitLab API

Gitlab предоставляет достаточно мощное REST API, с помощью которого можно делать множество рутинных действий. Расскажу о его подключении и нескольких типичных задачах, которые им можно решить, с примерами.

---
Как настроить, какие доки смотреть, примеры задач, исходник решения

#gitlab #kotlin #быстрыйСтарт
Gitlab CI основы

Замечательная штука, чтобы настроить свои CI/CD процессы. Думаю, по популярности идёт на втором месте, сразу после Jenkins’а и постепенно вытесняет его.

gitlab-ci.yaml - сгруппированный по стадиям набор задач, запускающий скрипты в докер контейнере. Если кратко, то это и есть вся суть

---
Примерчик для быстрого старта, со скриншотами где че тыкать. И обязательно погружение - куда копать дальше, где доки, где примеры, где че искать

#devops #gitlab #быстрыйСтарт
Синьор: Откуда ты взял этот код?
Джуниор: На Stack Overflow
Синьор: Из ответа или из вопроса?
Микросервисы. Послевкусие

- устали от темы микросервисов? Посмотрим на них с непопулярной стороны
- сбиваем спесь и разгребаем последствия одного из мощнейших хайпов десятилетия
- относятся ли плюсы микросервисов действительно к микросервисам?
- может не надо или когда-нибудь может и надо и что происходит? монорепы, модули, soa, unix-пайпы, FaaS? Спокойствие, только спокойствие

---
Запись с конференции

Ссылки из презентации:
Мартин Фаулер 1 2
Сэм Ньюмен. Создание микросервисов
Microservices - Not a free lunch!
Остановитесь! Вам не нужны микросервисы
Модули вместо микросервисов
Микросервисы. Закат хайпа?

#concept #погружение #микросервисы
Kotlin log VS Lombok

Скучаете по аннотации @Slf4j из Lombok? Забываете, как там пишется это всё вручную? Решение есть!

Всего несколько движений мышкой и корень…

Preferences -> Editor -> Live Templates -> Kotlin -> + -> Live Template:

Abbreviation: log
Description: insert slf4j log
Template Text: private val log = LoggerFactory.getLogger(this::class.java)
Applicable context->Define: Kotlin: class
(см.картинку)

И теперь — всё просто. Пишете log, нажимаете tab — и готово!

Вы скажете: лучше объявлять логгер статической переменной — и будете правы! Ничего сложного, просто надо добавить одну переменную и изменить ApplicableContext:
private val log = LoggerFactory.getLogger($CLASS$::class.java)
(см.картинку)

Только не забывайте, что для котлина есть специальный kotlin-logging. В прочем, для него алгоритм тот же, только template text немного другой:
private val logger = KotlinLogging.logger {}

И-ес!

Достижение получено:
Мастер объявления логов в Котлин🥇

---
#лайфхаки
This media is not supported in your browser
VIEW IN TELEGRAM
Если ты ещё не знаешь, как выглядит карьерная лестница программистов..
Как достигается изоляция транзакций в PostgreSQL? Разве блокировками?

Очень интересный вопрос для собеса, но я ничего подобного не слышал ни разу и сам не спрашивал. Но теперь запишу и буду задавать😎

Первое, что приходит на ум, когда читаешь про ACID и конкретно про Isolation, - "да ведь это всё на блокировках, всё ясно!"

Отнюдь - инженерная мысль ушла далеко.

В Postgres'е реализован механизм многоверсионности: хранятся сразу несколько версий строк для разных транзакций. То есть строки в одной транзакции могут не совпадать со строками другой. С помощью этого механизма всё работает практически без блокировок - просто, в случае чего, транзакция откатится!
И ещё один плюс этого подхода - меньшие уровни изоляции обеспечивают большую защиту от проблем изоляции без дополнительных накладных расходов!

Цитата:
В PostgreSQL реализован многоверсионный вариант такого протокола. Идея многоверсионности состоит в том, что в СУБД могут сосуществовать несколько версий одной и той же строки. Это позволяет строить снимок данных, используя имеющиеся версии, и обходиться минимумом блокировок. Фактически блокируется только повторное изменение одной и той же строки. Все остальные операции выполняются одновременно: пишущие транзакции никогда не блокируют читающих транзакций, а читающие никогда не блокируют никого.


См. статью от Postgres Pro про изоляцию
и про внутреннее устройство памяти Postgres
Выступаю завтра на конференции в Бишкеке с темой
SQL vs NoSQL vs NewSQL. Ориентиры в мире БД.
Также будет много других крутейших докладов и классных спикеров, подключайтесь к трансляции или лично!

Пост от коллеги с подробным описанием:
https://t.me/mikrotikninja/1357

Или от одних из организаторов в инсте:
https://www.instagram.com/p/CdplKb_oLYO

Запись выступления
https://youtube.com/watch?v=Yxu-AHXGJMM&t=21790s
Отличные размышления по поводу собесов.

Нестандартный взгляд, новые мысли и логическое обоснование рисков найма, которые видны чаще интуитивно
Forwarded from Russian Association of Software Architects (Ivan Zakrevsky)
🔷 "Обязан ли разработчик развиваться?" - статья на Хабре полностью подтверждает актуальность целей нашего объединения архитекторов.

Мы уже не раз обсуждали в чате сообщества @ru_arc_chat о том, что требуются новые способы разрешения противоречия между трудоемкостью освоения перегруженной области знаний и стесненностью ресурсов времени практикующего специалиста.

Именно этим фактором вызван взрывной рост интереса на рынке к reference applications/architectures, которые, по сути, решают одну проблему - быструю навигацию на основе схожести решаемой проблемы и демонстрацию решения на основе примера. Это позволяет легко отыскивать решения в условиях недостаточной полноты знаний. Но еще большего результата могут дать графы принятия решений и СППР.

Мы также обращали внимание на огромное количество когнитивных искажений, действующих в процессе собеседования, которые, по сути, превращают его в лотерею.

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

Т.е. чтобы уровень экспертности соискателя определяло бы не случайное лицо на основе получасового диалога, а саморегулируемое экспертное сообщество, на основе степени владения его участником теорией, выраженной практическим опытом.

Ведь если соискателю сложно освоить всю полноту перегруженной и переусложненной области знаний в силу конструктивных ограничений физиологии человека, то ведь интервьюер - тоже человек, на которого распространяются те же ограничения. А значит, единственное, что он может оценить - это уровень схожести знаний соискателя с отдельными сегментами своих знаний (именно сегментами, превалирующими в силу когнитивных искажений "эффекта недавнего", "эффекта края памяти", "кривой забывания" и т.д.) И чем обширней становится область знаний отрасли, тем меньше область вероятного пересечения освоенных ими подмножеств этих знаний.

Далее в дело включается "эффект неоднозначности" и предпочтение отдается не тому соискателю, кто более перспективен и мог бы обогатить компанию новыми знаниями, а тому, кто оказался максимально похожим на интервьюера и вызвал меньше неопределенности и рисков.

И все это, разумеется, через призму "психологической защиты", оберегая свое социальное положение от потенциальных угроз личной конкуренции. Я уже не говорю про "Искажение в восприятии сделанного выбора", "Склонность к подтверждению своей точки зрения", "Селективное восприятие", потребность в самоутверждении и пр.

Как мы и говорили, статья заканчивается признаками психологической защиты (отторжением раздражителя зоны комфорта) - "специалист не обязан развиваться", тем самым в очередной подчеркивая важность психологического аспекта планирования самообучения.

Интересное противоречие возникает из статьи - чтобы избавиться от чувства вины, возникает желание исключить трудоемкое развитие из своих обязанностей, но отторгая развитие специалист изолирует себя от обретения тех знаний, которые могли бы изменить его условия труда, и добровольно превращает себя в легкую добычу психологических манипуляций, вынужденную принимать всю вину на свой счет, и непонимающую, как выйти из замкнутого круга. Не отказ от развития, а переориентация развития в соответствии с причинно-следственными циклами системного мышления способно разорвать этот замкнутый круг, формируя благоприятные условия для самого развития. Как говорится, "есть только один правильный путь - свой".

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

А еще - объединяться в организованную силу, способную изменять и улучшать профессиональную среду специалиста на рынке. Эта организованная сила и есть то самое, что отличает практическое применение знания от пустого мечтательства.

#Goal
Провожу сегодня вебинар для общественной организации "Общее Дело" по профориентации в ИТ.

Для аудитории моего канала основная тема возможно будет слишком проста, но кто сейчас в ситуации "прошёл обучение, всё знаю, но как теперь найти первую работу?" - вы те, кто мне нужен на этом вебинаре! Поделюсь секретами и предложу варианты 😏

Сегодня в 19:00 Мск, регистрация по ссылке

https://obchee-delo.ru/it
Как починить IntelliJ IDEA

Недавно мой менти (ученик) обратился с такой проблемой. При работе с проектом любимый продукт JetBrains начинает тупить.
Проблема достаточно частая: всё подсвечивается красным, хотя все зависимости есть. Что делать?

Продиагностируем:
Запустите из консоли mvn compile test или ./gradlew build.
Если не собирается, значит проблема не в IntelliJ. Если собирается, а в IDEA нет, значит

Решаем проблему:
- Закройте IntelliJ полностью
- Зайдите в директорию проекта и удалите папку .idea
- Откройте IntelliJ и откройте в ней проект

IntelliJ IDEA заново всё импортирует и настроит, применив свою магию.

Больше подробностей и другие способы решения в статье на сайте.

#IntelliJ #Idea #лайфхаки
Немного о методах решения конфликтов в разработке. Proof Of Work.

При возникновении конфликта, например, на код-ревью (дальше рассмотрим и другие примеры) - хорошим решением для руководителя будет организация следующего процесса: кто напишет тесты на свой вариант с бОльшим покрытием, то решение и принимается.

Плюсы/минусы:
+ хорошее покрытие говорит о хорошей архитектуре. На практике подверждается как минимум жизнеспособность и долговечность предложенного подхода
- "проигравшему" таким образом может быть обидно, особенно когда такой способ возник неожиданно. Поэтому лучше заранее обсуждать этот подход (либо просто с обоими одновременно, чтобы сравнять шансы)
+ когда все в команде знают о таком подходе - конфликтов будет возникать меньше, т.к. мало кто хочет себе лишнюю работу. Но если уверен в результате, то сделает его
+ формальный и от того достаточно справедливый подход, взамен возникающим странным решениям, когда руководитель принимает решение лишь бы просто закончить дискуссию, переросшую в спор (что часто бывает)

Аналогичный подход PoW применим и при других контекстах возникновения. На архитектурном ревью можно запилить Proof Of Concept (mvp) решений и посмотреть, что получилось (а ещё лучше провести (нагрузочные) тесты этого mvp). Известный эффект синдрома самозванца - критика решений коллег без предложения лучшего решения (~для самоутверждения). Такой подход может сглаживать и этот эффект тоже.

+ зная об этом подходе в компании, участники команды заранее стараются пойти на мировую и не достигать точки кипения, в которой необходимо будет подтверждать своё мнение тестами или PoC

#softskills #лайфхаки #leading