Search
Write a publication
Pull to refresh
0
Roman Surkoff @s-rbread⁠-⁠only

Java-developer

Send message

Заезжаем в Kotlin Multiplatform. Но какой ценой?

Reading time14 min
Views6.9K

Привет! Меня зовут Денис, я занимаюсь коммерческим программированием уже более 15 лет, управляю командами с 2017 года, работал в Яндексе, TradingView, Skillbox, Arcadia. В статье вы узнаете историю, как написать целый проект на Kotlin Multiplatform, сколько это стоит и сколько обойдется интеграция с точки зрения цифр.

Этот доклад - текстовая версия моего выступления с осеннего Мобиуса 2024 года. Обязательно приложу видео с выступлением после выхода.

Что в статье?

Делаем сервер из Android-телефона

Reading time8 min
Views136K

Некоторое время назад мне пришла в голову интересная идея — превратить свои старые телефоны (их скопилось немало за десять лет) в серверы, в качестве альтернативы покупке Raspberry Pi.


image


На то было несколько причин: во-первых, у телефонов есть батарея, что для сервера практически бесплатный мини-UPS, во-вторых, внутренняя память смартфона (UFS) работает быстрее и надёжнее, чем SD-карта. В-третьих, у телефонов имеется экран, по которому можно отслеживать состояние сервера.


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


TL;DR: в этом посте будут разобраны вопросы установки PostmarketOS на смартфон,
поднятия на нём в качестве примера Docker и веб-приложения в нём.

За длинной версией под кат

Превращаем старый телефон на Android в резервный сервер с помощью UrBackup/Linux Deploy. Часть 1

Reading time15 min
Views34K


Сегодня я покажу вам, как запустить полноценный резервный сервер на рутованном телефоне Android с помощью UrBackup и Linux Deploy. Пластиковый мусор уже заполонил все вокруг, а в добавок к нему очередной глобальной эко-проблемой становятся еще и электронные отходы. Так зачем выбрасывать прекрасный, пусть даже потрескавшийся и поношенный, телефон?
Читать дальше →

Текстовая обработка в PostgreSQL: grep, sed, awk

Level of difficultyEasy
Reading time6 min
Views5.9K

Привет, Хабр. Всё, что пишет PostgreSQL в /var/log/postgresql/, можно разбирать, фильтровать, анализировать и автоматизировать. Не нужно вручную листать гигабайты логов — научимся вытягивать полезные данные и работать с конфигами в пару команд. О чём поговорим в статье:

grep — быстро ищем ошибки, медленные запросы, аномалии;
sed — редактируем конфиги PostgreSQL, комментируем, заменяем настройки;
awk — превращаем сырые логи в отчёты.

Читать далее

Как нейросети всё делают за меня, а я за них

Level of difficultyEasy
Reading time2 min
Views24K

Ремар’очка: это не туториал, а просто подробный разбор процесса.

Допустим, моя задача — генерация “фотосессии“ с разными людьми в разных ситуациях. Например, мать обнимает ребёнка и держит в руках пасхальное яйцо. Обстановка домашняя, светлая.

С чего начинаю?

С разбора ТЗ и похода в ChatGPT за промптами. Потом в Midjourney — там генерирую серию картинок в едином стиле, с разными людьми и сюжетами. Минимум 30 штук: бегущие дети, объятия и т. д. — чтобы потом собрать из них датасет.

Читать далее

Плагины: автоматизация разработки в продуктах JetBrains (на примере Android Studio)

Level of difficultyEasy
Reading time8 min
Views3.2K

Замечали, что при написании кода, очень часто приходится выполнять одни и те же действия, например, создавать одни и те же файлы, проводить одну и ту же настройку для разных проектов и тд? Это натолкнуло меня на мысль: «Можно ли упростить процесс за счёт автоматизации?».

Изначально была идея создать десктопное приложение для упрощения настройки и выполнения рутинных задач, однако возникло ограничение — Android Studio не предоставляет открытого API. Это очень усложнило бы работу, т.к. пришлось бы вручную прописывать работу с файлами, использование горячих клавиш и тд, поэтому следующим вопросом было: «Как автоматизировать разработку непосредственно внутри самого Android Studio?» Ответ пришел сам собой — использовать плагины.

Читать далее

Как жить без IntelliJ IDEA? Часть №1. Собери сам

Level of difficultyEasy
Reading time9 min
Views56K

На российском рынке сложилась сложная ситуация с IDE для Java-разработчиков. Новости, связанные с ограничением скачивания IntelliJ IDEA Ultimate, недоступностью JetBrains маркетплейса и блокировкой лицензий, которые использовались на территории РФ порождают огромное количество вопросов, на которые не у всех есть ответы.

Команда Spring АйО подготовила цикл статей, в которых постарается ответить на все вопросы, связанные с уходом IntelliJ IDEA из России.

Читать далее

Инструкция по публикации iOS-приложения в App Store

Reading time6 min
Views129K
Однажды менеджеры Лайв Тайпинг подумали: «Как хорошо было бы иметь инструкцию-чеклист, чтобы ничего не забыть перед публикацией приложения в стор. С ней можно перестать носить всё в голове и не объяснять вновь пришедшим менеджерам, что к чему, а просто скинуть гуглдок». Подумали и написали — для себя. Но потом поняли, что нехорошо скрывать полезную информацию от общественности. Поэтому мы надеемся, что инструкция поможет менеджерам всех остальных студий так же, как помогает нам.

Тема этой заметки — публикация приложения в App Store. Чуть позже мы опишем порядок действий для публикации в Google Play.

Что же нужно сделать PM`y в ходе публикации:

  1. создать аккаунт в App Store для заказчика, если у заказчика его нет, или предложить
  2. опубликовать приложение с нашего аккаунта;
  3. подготовить маркетинговые материалы (иконка, скриншоты, текст, видео для предпросмотра приложения);
  4. приложить к сборке сертификат цифровой подписи;
  5. настроить оплату за пользование приложения;
  6. Отправить сборку в App Store.

Идём под кат и разбираем по порядку.


Читать дальше →

Мне удалили аденому простаты: как это было

Level of difficultyEasy
Reading time19 min
Views47K

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

Дисклеймер: я не врач и не даю здесь рекомендаций. Названия лекарств привожу не для рекламы, а потому, что мне их выписывал доктор. Основная часть данных получена из личного опыта, консультаций с четырьмя докторами, медицинской литературы и ChatGPT 4o. Лично мои мнения помечены как «думаю, что...».

Итак, что произошло

Десятого декабря у меня был юбилей. Через три дня, в пятницу 13-го (я не верю в приметы) пошли с коллегами в ресторан отмечать событие. Было хорошее настроение и хороший коньяк. Через два часа захотелось в туалет. Струя оказалась тоненькой. Через 15 минут пошел еще раз – она стала еще тоньше, а в очередной поход через еще 15 минут исчезла вовсе. Я подумал, что пора прекращать пить и надо идти домой, ждать когда алкоголь выйдет из крови. Но дома лучше не стало, хотя отрезвел полностью. Я не спал  всю ночь, искал решение в интернете и пробовал что-нибудь сделать – ничто не помогало. Утром в девять я был в больнице, в очереди к урологу. Было уже страшно, что лопнет мочевой пузырь или откажут почки. Когда вошел в кабинет доктора, не смог даже самостоятельно лечь на кушетку из-за резкой боли внизу живота. Доктор быстро вставил мне катетер в уретру и я наконец понял, что такое настоящее счастье, когда услышал звук бурного потока мочи в рядом стоящий тазик.

Читать далее

LangChain vs LlamaIndex: проектируем RAG и разбираемся, что выбрать для вашего проекта

Level of difficultyEasy
Reading time14 min
Views11K

Сегодня it-сообщество предлагает большое количество любопытных инструментов для создания RAG-систем. Среди них особенно выделяются два фреймворка —  LangChain и LlamaIndex. Как понять, какой из них подходит лучше для вашего проекта? Давайте разбираться вместе!

Читать далее

CSS Grid Layout: Асимметричная резиновая сетка

Reading time2 min
Views11K

В веб-дизайны сетки, как в Pinterest уже давно не являются чем-то новым. Но что, если нужно сделать блоки различной высоты, при этом сохранив адаптивность. Оказывается, это можно сделать, используя только стандартные возможности CSS Grid Layout.

Читать далее

Как R облегчает мою жизнь разработчика

Level of difficultyMedium
Reading time23 min
Views12K

Как разработчик я ежедневно сталкиваюсь с большим количеством данных, которые нужны для принятия каких‑либо решений. Логи, конфиги, данные профилирования, аналитические выгрузки из БД и даже сведения о том, когда был написан данный код — это всё данные. Иногда бывает достаточно посмотреть глазами, и картина станет ясной. Но чем больше данных, тем меньше помогает «метод пристального взгляда», и тем нужнее какие‑то инструменты анализа.

Иногда можно собрать нужную информацию, просто скомбинировав несколько линуксовых команд пайпом (cat data.log | grep … | awk … | sort | uniq -c | sort -r | head), иногда пригодятся электронные таблицы, иногда проще написать небольшую программку для анализа данных. Но когда я освоился с языком R и его экосистемой, то всё это стало ненужным.

Читать далее

Spring Cloud Gateway + Keycloak: полноценный пример

Level of difficultyHard
Reading time7 min
Views8.8K

Всем привет! Сегодня мы посмотрим, как сделать полноценную интеграцию api шлюза spring cloud gateway и keycloak, так как мне показалось, что тема недостаточно раскрыта. С небольшими оговорками этот пример можно использовать в реальных продакшн условиях.

Читать далее

Кто «ест» трафик в организации? Готовим пользовательский экспортер для Prometheus, мониторим сеть

Level of difficultyEasy
Reading time14 min
Views9.1K

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

Просмотреть кейс

Про импортозамещение

Reading time15 min
Views254K

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

Читать далее

Дефицит есть, а денег не дают. Почему?

Reading time27 min
Views301K

Мы уже выяснили, что у нас есть дефицит рабочих рук во всех отраслях. На примере СССР увидели, что дефицит легко закрывается деньгами и плюшками, что сейчас и происходит в IT. Однако при дефиците рабочих рук в остальных отраслях зарплаты остаются на уровне Румынии и никак не подтягиваются. Почему?

Читать далее

Решаем проблему устаревания кэширующих серверов. Смотрим на телевизоре. Не VPN

Reading time3 min
Views106K

Не так давно всех потрясла новость об устаревании оборудования популярного видеохостинга, в результате чего сервис перестал нормально работать и началось замедление. Сначала в замедлении сервиса пытались обвинить Роскомнадзор, но до сих пор нет внятных нормативно-правовых актов (поправьте меня в комментариях, если я ошибаюсь), которые бы позволяли данному органу применять методы блокировки в отношении сервиса. Я не верю, что государственный орган может нарушать закон, поэтому будем исправлять проблему самостоятельно и поднимем свой «кэширующий» сервер.

В качестве нашего «кэширующего» сервера будем использовать дешевый одноплатный компьютер MangoPi MQ-Quad (или другой аналогичный), стоимостью не более $29.

Читать далее

В Испании все программисты сеньоры

Level of difficultyEasy
Reading time14 min
Views54K

Моя текущая позиция и аутсорсы последних пяти лет на 90% были в западных gamedev студиях, соответственно и общение было преимущественно с не‑ру коллегами. А когда надолго отрываешься от славянских коллективов разработки, то отличия начинают проявляться очень четко, начиная от модели управления командой и заканчивая культурой разработки. Хотя вот культурой я бы это не назвал, скорее плясками варваров‑полуиндусов на останках штатовской империи софтостроения. Индийцы тут ни при чем, а вот практики и сам процесс написания кода очень попахивает этими жителями полумифической страны Индустана. Есть немало книг по истории развития игровой индустрии и истории успехов и провалов разных студий, в основном западных, оставлю в статье список самых интересных и захватывающих, если решите углубиться в историю (кому интересно, будет под спойлером).

Одна из последних — «Not All Fairy Tales Have Happy Endings» (Ken Williams), мемуары одного из основателей Sierra On‑Line, прочитана была около года назад и понравилась больше других, наверное потому, что читая книгу — я, наконец, понимал большинство решений и причин которые привели к тому или иному результату. Этого понимания точно не было десять лет назад, это сложно объяснить, если не работал непосредственно сам долгое время с людьми с иным образом мыслей, культурным кодом, как сейчас принято говорить. Нынешняя команда на 95% франко‑испано‑английская — австралийцы, немного европейцев и американцы. В студии по‑русски говорят трое, включая меня. До этого в карьере были по большей части все же ру‑студии с привычным менталитетом, пускай и под управлением все тех же американцев, но менеджмент скрадывал все огрехи и брал «разговоры как надо» на себя, а нам доставались только технические задачи, грамоты и иногда премии. Десять лет назад, придя в индустрию создания игр, я не задавался вопросом — чем отличаются мои таски, мой код, мои идеи от тасок, кода и идей Джона из Кемпбеловки под Сан‑Хосе, потому что вокруг были все «свои». Сейчас уже тоже все «свои», но те «свои», от этих «своих» отличаются примерно — всем.

Читать далее

Как я создал Vanilla Calendar Pro — легкий и гибкий календарь на JavaScript с использованием TypeScript

Level of difficultyEasy
Reading time3 min
Views19K

Привет, Habr!

Честно говоря, долго сомневался, стоит ли писать эту статью. Я понимаю, что среди комментариев наверняка будут такие, кто скажет: «Очередной никому не нужный датапикер». Но сегодня, когда Vanilla Calendar Pro собрал больше 480 звезд на GitHub и получает 17 тысяч скачиваний в месяц, я решил поделиться своей историей.

Хочу сразу отметить: я не претендую на лавры лучшего разработчика календарей и датапикеров. Эта статья о моем первом опыте в open source, о том, как я создавал проект с нуля и как он стал полезен другим разработчикам.

Читать далее

Создание плагина для IntelliJ IDE с подключением GigaChat для проверки качества кода

Level of difficultyEasy
Reading time5 min
Views4K

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

Читать далее

Information

Rating
Does not participate
Registered
Activity

Specialization

Backend Developer, Web Developer
Lead
From 6,000 $
Git
Java Spring Framework
English
SQL
Java
Spring Boot
Junit
Restful WebServices
Docker
PostgreSQL