Записки Kotlin Developer
79 subscribers
47 photos
5 videos
5 files
30 links
Hi, я Кирилл, Kotlin разработчик👋

Тут пишу заметки и tutorial: Kotlin, алгоритмы, Functional style, инфрастуктуру, микросервисы.

Начинаем с базы и дойдем до вершин📈

Subscribe, Let's upgrade skills together🤝

Автор: @kyrillP
Download Telegram
Это я, когда записываю очередной видео урок на тему связанную с программированием
🤣9😁1
Dependency injection в Kotlin и Koin

Ух я смог! Даже если не являетесь программистом, просто зацените качество картинки и монтажа.
Это только начало, спасибо подписчикам, которые дают советы на тему: "Как делать лучше", я открыт для обратной связи... в планах и дальше развиваться и работать над качеством контента....


Урок: https://www.youtube.com/watch?v=RJ0aMfyabSM
Дока по Koin https://insert-koin.io/docs/quickstart/kotlin
Проект с Koin: github.com/twoZeros/sosial-network
🔥5
Доп образование в сфере IT с гос. поддержкой.

Если интересуетесь сферой AI, возможно заинтересует прохождение курса на эту тему за 10-20к при полной стоимости около 80к

https://ai.2035.university/?_ga=2.123019851.1524702865.1715862747-1735646360.1715749089#catalog

Многие курсы требует сильной подготовки, но есть и для новичков...

А как вы считаете нужно ли учиться на онлайн-курсах такого формата или же лучше учиться самому в своём темпе по материалам в открытом доступе, книгам....?
👍7
Forwarded from СБЕР IT Сочи
Студенты выпускных курсов бакалавриата и магистратуры, это предложение для вас 🥳

Мы запускаем конкурс на позиции стажеров по сопровождению и тестированию ⚡️

Стажировка оплачивается и длится 3-6 месяцев. При успешном прохождении у вас есть возможность устроиться в штат

В карточках рассказываем, что вас ждет на стажировке и как попасть в нашу команду
 
Ссылки на вакансии:

🟢Инженер сопровождения
🟢Стажер QA

До встречи в нашем офисе, будущие коллеги 🫱🏼‍🫲🏻
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥51
Перестань платить за менеджеры задач

Всю эту неделю был погружён в работу  с практикантами - студентами из Сириус. Я курирую backend направление и решаю задачи связанные с инфраструктурой.

Как только я узнал о "назначении", я сразу понял, что нам нужен менеджер задач (task tracker).

Поиск менеджера задач

Первая мысль была воспользоваться Яндекс. Трекером , Битрикс24 или другими отечественными решениями, но все они, как под копирку, в бесплатном тарифе имеют ограничение максимум до 5 пользователей, что неподходит, так как надо было минимум 15 учёток...
Есть Trello, там такого орграничения нет, но есть сложности с регистрацией пользователей, которые из РФ.

Решение

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

NextCloud (или NC) — это ПО с открытым исходным кодом, которое позволяет организовать собственное облачное хранилище и контролировать хранение данных. 

В Nextcloud есть собственный магазин приложений, которые устанавливаются в пару кликов и расширяют возможности Nextcloud: текстовые редакторы, конвертеры видео, видео плееры, ПО для построение интеллектуальных карт, аналог конфлюенса, чего только нет, в том числе есть Task Tracker - Deck.


Установка

Deck на GitHub:
https://github.com/nextcloud/deck

А развернуть Nextcloud можно на виртуальном выделенном сервере, есть официальный Docker image и огромное количество tutorial-ов как это сделать ..

Вот например:
https://zomro.com/rus/blog/faq/302-kak-ustanovit-nextcloud-v-docker
❤‍🔥8🔥4👀1
Засветился на итогах 2-го квартала IT офиса Сбера в Сочи.

Практиканты завершили практику, чему я и конечно же все практиканты рады..
Пришлось им помучится, но получился классный проект, который не стыдно назвать MVP)
🔥10🍾6🆒2🎉1
Секретный отдых местных в Сочи

Сегодня побывал в месте, где тусят, как мне показалось, исключительно местные. Вы врядли найдете это место на 2гис, яндексе.. При въезде нет никаких вывесок, плакатов...

Я бы никогда туда не попал, если бы не жил в Сочи долгое время и не обзавёлся новыми связями....

Не уверен, что имею право рассказывать, где я отдыхал...

Цена: 300 руб с человека на целый день!

В стоимость входит: мангал, столик на 6 человек с лавочками, есть возможность бесплатно воспользоваться холодильником и даже кинуть себе удлинитель...
На базе есть туалет, раковина с водой, магазинчик с адекватными ценами (кофе 3 в 1 стоит 100 руб, энергетик адреналин 150)

Меня сразу раскусили, что я приезжий и ничего не понимаю в приготовлении шашлыка...Хозяин комплекса был в шоке кого занесло на его базу, но был любезен и помогал мне.

Он дал мне бесплатно 3 банки жидкости для розжига...
Пожалел бедолагу😂

Я пол дня жарил шашык: 2 мешка углей, 5 кг мяса, а ещё были грибы😱😂

В общем и целом все прошло классно, я бы с удовольствием вернулся сюда, но пока ещё мне не скинули номер телефона, по которому надо бронировать...думаю, на согласование этот момент😂
8❤‍🔥3👍3🔥2
🖥 Hilla — современный веб-фреймворк Java

Hilla позволяет быстрее создавать бизнес-приложения — больше не нужно жонглировать эндпойнтами REST или расшифровывать запросы GraphQL.
Hilla объединяет Spring Boot и React, поэтому разработка приложений становится очень быстрой.

Что меня в нём удивило ?

Это возможность из TypeScript-a дергать функции написанные на java..
Например вот так выглядит взаимодействие фронта с бэком
  useEffect(() => {
CRMService.findAllContacts().then(setContacts);
}, []);

async function onContactSaved(contact: ContactRecord) {
const saved = await CRMService.save(contact)
if (contact.id) {
setContacts(contacts => contacts.map(current => current.id === saved.id ? saved : current));
} else {
setContacts(contacts => [...contacts, saved]);
}
setSelected(saved);
}

Тут CRMService - это класс на Java помеченный специальной аннотацией, но Hilla анализирует java код и автоматом генерит прослойку для вызова бэка, благодаря чему с точки зрения кода интеграция вообще безшовная (ну а в реальности вызывается http запрос).. не нужно писать модель данных для ответа, она тоже генерится на основе кода на бэке..

Ещё из классных фич - валидация, её можно описать на бэке а она будет отрабатывать и на фронте при заполнении html-формы.

Меня очень вдохновило это видео, час на одном дыхании пролетел : https://www.youtube.com/watch?v=kykdX-cUv1I&list=PLcRrh9hGNalnnotZb0HstGw_GvZBc9xZp

🖥 GitHub
🟡 Доки

p.s пока нет идей, где бы я мог его применить, но хочется собрать на нём небольшой проект....
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥4🤔2
Nerdctl - как Docker только лучше

Зачем мне это?

По заявлению самих разработчиков этой утилиты...
Цель nerdctl — облегчить экспериментирование с передовыми функциями управления контейнерами, которых нет в Docker, но которые завезут позже в Docker, и то не факт (может только в enterprise версию).

Кроме того, nerdctl может быть потенциально полезен для отладки кластеров Kubernetes, но это не основная цель.

Подробнее об этом инструменте можете почитать в доке на github

Перейдём к практике

Nerdctl обеспечивает CLI идентичный Docker.
Если вы знакомы с CLI docker вы уже знакомы с nerdctl.

Для примера, покажу команду, как используя nerdctl запустить контейнер с nginx
nerdctl run -d -p 8080:80 --name nginx-app nginx


Посмотрим другие команды?

nerdctl pull: This downloads a container image from a container registry.
nerdctl run: This starts a new container and runs a command inside it.
nerdctl ps: This lists all running containers.
nerdctl stop: This stops a running container.
nerdctl compose up: This starts all the containers defined in your Docker Compose file.

Установка

Самое сложное в деле перехода с docker на nerdctl - это установка. Ну я любезно поделюсь командами для установки на linux.
Установку выполнять необходимо с правами администратора (sudo)


Шаг 1
Для начала установим сам nerdctl, возьмём на текущий момент самую актуальную версию nerdctl из github.

Вы же хотите быть в тренде?😀
wget https://github.com/containerd/nerdctl/releases/download/v2.0.0-rc.0/nerdctl-full-2.0.0-rc.0-linux-amd64.tar.gz

mkdir nerdctl

tar -xzf nerdctl-full-2.0.0-rc.0-linux-amd64.tar.gz -C ./nerdctl

cp ./nerdctl/bin/nerdctl /usr/bin/

chmod +x /usr/bin/nerdctl


Шаг 2
Далее нам нужно установить CNI плагины (Container Networking Interface)
CNI - обеспечивает всё необходимое для стандартизированного управления сетевыми интерфейсами в Linux-контейнерах и гибкого расширения сетевых возможностей.

Тоже берём самую актуальную версию из github
wget https://github.com/containernetworking/plugins/releases/download/v1.5.1/cni-plugins-linux-amd64-v1.5.1.tgz

mkdir ./CNI

tar xzf cni-plugins-linux-amd64-v1.5.1.tgz -C ./CNI

mkdir -p /opt/cni/bin/

mv ./CNI/* /opt/cni/bin/


P.s Тут легко нарваться на ситуацию, когда nerdctl  не совместим с CNI, например у вас свежий nerdctl, но старый CNI, поэтому следим за версиями...

Те версии, которые я указал, 100% совместимы между собой

Заключение

И ах да, теперь вы можете отрубить Docker и всегда использовать вместо него nerdctl

systemctl mask docker
systemctl stop docker

Некоторые, самые отбитые, делают алиас dockernerdctl, ну я так не рекомендую, используйте докер, если так хочется, он тоже прекрасен)

Скорее всего, я не убедил попробовать nerdctl, но я рекомендую ознакомится с докой на эту утилиту и возможно какие-то фичи вызовут восторг и вы всё же попробуете...

Дублирую ссылку на доку

Ещё использование/гугление этой темы добавит вам понимание, что под капотом у docker и как он работает ..

P.S Вдохновило меня написать этот пост обучение на онлайн-курсе, я подтягиваю навык "деплой и запуск приложений в контейнерах", далее напишу ещё парочку статей на эту тему 🫡🤗
🔥5👍3
Оптимальный Docker Image для Spring Boot

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


Перейдем к практике, у меня есть проект todo list на Spring boot и я хочу его запускать в докер контейнере
Ссылка https://github.com/TwoZeros/simple-todo

Простой Dockerfile
FROM eclipse-temurin:17-jre-alpine AS app-run
WORKDIR /opt/build
COPY ./views/target/*.jar ./application.jar
ENTRYPOINT ["java","-jar","./application.jar"]


Spring Boot использует "Fat JAR" формат упаковки по умолчанию. Это значит, что все зависимости, необходимые для запуска, добавляются в один Jar файл.

В качестве базового образа используем eclipse-temurin:17-jre-alpine - минимальную JRE без всяких инструментов разработки
Итого наш образ весит 212 Мегабайт

Минусы этого способа - нам приходится руками через IDE или cli сначала собрать jar-ник, а потом уже создавать образ

mvn clean package
docker build -t simple-todo:0.0.1 -f Dockerfile.simple .


Вариант получше

Можно это оптимизировать - собирать jar файл благодаря инструкциям в Dockerfile
Тут два варианта:
Oтказаться от eclipse-temurin:17-jre-alpine и использовать в качестве базового образа какую-то JDK c maven, но тогда размер image возрастёт в 2 раза (около 400МБ)

Использовать Multi-stage builds на первом шаге создаём артефакт, а на втором его запускаем

# На этот раз нам требуется образ, содержащий maven, при помощи
# ключевого слова as мы указываем псевдоним для контейнера сборки,
# чтобы при его помощи в дальнейшем обращаться к контейнеру
FROM maven:3.9.4-eclipse-temurin-17 AS maven

# Собирать проект будем в /build
WORKDIR /build

# Теперь необходимо скопировать необходимые для сборки проекта файлы в конейнер
COPY ./repository ./repository
COPY ./service ./service
COPY ./views ./views
COPY pom.xml pom.xml

# И запустить сборку проекта. Загружаемые библиотеки желательно кэшировать между
# сборками,для этого нужно добавить --mount=type=cache,target=/root/.m2 к RUN
RUN --mount=type=cache,target=/root/.m2 mvn clean package


FROM eclipse-temurin:17-jre-alpine AS app-run
ENV RELEASE=17

WORKDIR /opt/build
# из stage maven берём jar и помещаем в текущий образ
COPY --from=maven /build/views/target/*.jar ./application.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "application.jar"]

Итог получаем все те же 212 МБ, но уже не нужно помнить про "А я уже делал пересборку?"
2👍2