Изучаем Python, Rust, Swift, Kotlin и JS: всё в одном приложении
Наткнулся на шикарное приложение, в котором можно изучать сразу пять языков программирования в одном месте. Если хотите стать уверенным профи в Python, Rust, Swift, Kotlin или JavaScript — очень рекомендую. Заодно подтянете сопутствующие технологии, фреймворки и библиотеки.



Что крутого внутри:
Собраны абсолютно все важнейшие концепции, правила, стили программирования и нужные инструменты.
Целых пять языков на борту — отличный шанс протестировать разный стек, выбрать свое направление и найти работу мечты.
Внутри лежат курсы по Git, Docker, базам данных и алгоритмам. Это база, которая делает из вас настоящего инженера с крепким фундаментом, а не кодера-однодневку.
Весь материал грамотно разбит по уровням сложности. После каждой главы идут контрольные вопросы и десятки практических задач. Авторы разбирают концепции на конкретных примерах и разжевывают всё буквально до последней строчки кода.
Доступно на Windows, macOS, iOS и Android. Учиться можно в дороге, на обеде или даже в отпуске, не прерывая прогресс.
Забрать инструмент и начать путь к званию гуру кодинга можно по этой ссылке. Пользуйтесь!
Мой телеграм канал Хак Так: https://t.me/Xak_Tak/92
Как sealed class в Kotlin заставили меня признаться: "Дружище, да ты всю жизнь неправильно код писал"
Всем привет, пикабушники! Наверно этот поток сознание уместнее смотрелся бы на хабре, но эта площадка мне нравится решительно больше. Хочу поделиться историей своего просветления. Я адепт старой школы, лет семь назад я писал на Java под Android и свято верил в святость enum'ов и священные ритуалы проверок if (state != null && state == STATE_LOADING && !error). Я не работаю программистом и разработка для меня - хобби. Некоторые крестиком шьют, а я вот буквы в код складываю. Так вот, писал я когда-то на Java и казалось, что я владею миром, пока не сел изучать Kotlin. Ну а что, синтаксис похож, лямбды есть — за неделю освоусь, думал я.
Сегодня я натыкаюсь на одну статью на mobilab про sealed class. Начинаю читать и чувствую, как мое самолюбие джависта начинает медленно и верно трещать по швам. Оказывается, я не просто писал код. Я строил хрупкие карточные домики из boolean-флагов и надеялся, что их не сдует ветром нового требования от продукт-менеджера. Раньше я жил в аду ловли состояний. Мой типичный код управления состоянием экрана аутентификации выглядел как памятник человеческой глупости:
var isLoading: Boolean = false
var errorMessage: String? = null
var isTwoFactorRequired: Boolean = false
var authToken: String? = null
И где-то в глубине onCreateView сидел монстр на 100 строк с вложенными if/else, который пытался угадать, что же сейчас нужно показать пользователю. Добавляем двухфакторку? Легко. Просто добавляем еще один флаг и на 20% увеличиваем энтропию этого блока. Уверен, вы знаете, чем это заканчивается: «Ой, а почему у нас при ошибке показывается индикатор загрузки?».
И теперь, когда я узнал про sealed class, мир перевернулся.
В статье показали, как эта проблема решается элегантно и с невозмутимым спокойствием. Вместо этого зоопарка флагов ты объявляешь одно понятное состояние:
sealed class AuthState {
object Idle : AuthState()
object Loading : AuthState()
data class Success(val token: String) : AuthState()
data class Error(val message: String) : AuthState()
data class TwoFactorRequired(val sessionId: String) : AuthState()
}
И как же это гениально просто. Состояние может быть только одно. Не может быть Success и Error одновременно. Компилятор физически не даст. Это как если бы раньше твоя машина могла быть одновременно и красной, и синей, а теперь ты просто выбираешь один цвет. И все.
Самое волшебное это when.
Когда в коде UI у тебя появляется when (state), компилятор Kotlin превращается в строгого, но заботливого наставника. Он тебя заставляет обработать все возможные варианты. Добавил TwoFactorRequired в sealed class? Поздравляю, проект не соберётся, пока ты не добавишь ветку для его отображения в этом самом when. Это не «ой, надо бы не забыть». Это «забудь и умри (в смысле, не запустишь приложение)». После лет надежд на свою память и на тестировщиков это ощущение будто тебе выдали бронежилет.
Теперь, когда я возвращаюсь к своему старому Java-коду, то смотрю на него с тихой грустью и мысленно прошу у него прощения. Kotlin с его sealed class — это не просто «более приятная Java». Это другой уровень мышления. Это переход от тактики «надеюсь, я ничего не упустил» к стратегии «я не могу это упустить по определению».
P.S. А самый большой кайф это писать unit-тест для такой логики. Подсовываешь Idle и действие Login, получаешь Loading. Подтверждаешь двухфакторку - получаешь Success. Красота, которая даже мне, закоренелому цинику, приносит эстетическое удовольствие.
Как я себе приложение для работы писал
Ну ладно, не буду лукавить, ИИ писал)) Да-да, сомбреро подставил, можете накидывать. Но все не так однозначно.
Пожалуй, стоит начать с того, что я ничего не смыслю в кодинге. Мой максимум - пятерки за Паскаль в школе на уроках информатики. Но вот с тех пор я вырос, устроился на работу, и меня огорчала необходимость таскать с собой бумажный блокнот и ручку, либо записывать данные в блокнот телефона, и нигде они не были систематизированы. Все вписанное приходилось переписывать после работы в компьютер. А в процессе самой работы - держать в голове кучу информации и параллельно вести расчёты на калькуляторе. Заебало - подумал я, когда открыл бутылку коньяку после долгого рабочего дня, и попробовал углубиться в матчасть. Выбор пал на Kotlin, как основной язык для Android. Почитав, посмотрев туториалы, я ужаснулся - для непосвященного это все выглядело как инопланетные рукописи. Поэтому, раскопав в памяти что-то о том, как сейчас код пишут нейросети, я обратился к китайскому нейроботу. И тут-то блять дело пошло! Проведя первую неделю в бессонных ночах, у меня появился вполне рабочий прототип, пусть и не с первой попытки. Со второй недели у меня получилось пофиксить часть ошибок, недоработок и багов (хотя некоторые все еще продолжают меня преследовать). К этому же времени я стал совсем капельку разбираться в котлине и в своем коде, и уже мог местами сам что-то добавить или поменять. Но все равно, я не представляю, как программисты пишут программы сами с нуля целиком)) Это же тысячи строк кода, взаимосвязанных между собой. В общем, снимаю шляпу
Работа над приложением продолжается, но мне кажется, что я уперся в предел ии-кодинга (ну или я в конец заебал китайцев в подвале со своей хуйней) - дипсик начал хромать. Еще одна проблема - узконаправленность приложения. То есть, вкладывать туда какие-то реальные средства я не готов, зная, что они никогда не окупятся. По крайней мере, в моих руках - я ни разу не маркетолог, скинул .апк файл всем знакомым коллегам по работе, бескорыстно, просто чтобы пользовались. Короче, сам не знаю, что мне с этим добром делать)) Очень хотелось бы найти знающего человека, обладающего котлином, чтобы иногда просить у него совета. Ладно, чёт начали за здравие, кончили за упокой, пора перейти к сути:
Главный экран
Экран новой отгрузки. Три режима (один порт - один транспорт; один порт - несколько транспортов; несколько портов - один транспорт). Из фич - проверка номеров контейнеров и вагонов по контрольной цифре, и режим двойного контроля (позволяет отдельно контролировать, какие поддоны вывезли со склада на эстакаду, и какие из них завезли в транспорт)






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




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




На этом все. Файл .апк получился на 20,5 мегабайтов, хз, много или мало. Но сдается мне, если бы кодил спец, то получилось бы раза в два меньше)). Приложуха работает офлайн, никаких разрешений не требует (окромя уведомлений), майнеры писать не умею, поэтому их нет))
Хз, можно тут ссылки на гитхаб вставлять или нет, если кому-то интересно, скину в комменты. Всем добра, посоны
Кронштадт: хронотоп распада в обрамлении бутафории
Ветер здесь — время, выветривающее смыслы. Кронштадт дышит ржавчиной эпох: имперский гранит крошится под тяжестью забытых побед, советская сталь сдалась без боя энтропии безвременья. Остров — манифестация русского регресса: пространство, где цивилизация не развивается, а свёртывается, как исписанный чертёж, обнажая субстрат запустения. Подлинность здесь измеряется не мощью доков или грохотом арсеналов, а тишиной забвения, густой, как мазут в обмелевших гаванях.
А вокруг — безумие роста. Питер, этот ненасытный спрут, расползается уродливыми щупальцами новостроек, пожирая горизонт бетонной жадностью. Его экспансия — слепая, лишённая метафизического вектора, чистая аккумуляция пустоты. И на фоне этого шизофренического роста Кронштадт кажется особенно хрупким, скукоженным до размеров музейного экспоната. Но и это — обман. Его угасание не тихо — под аккомпанемент фанфар показушного возрождения. На руинах подлинной истории — той, что дышала потом, металлом и огнём, — вырастает бутафория возрождения. Как грибы после дождя, появляются музейно-парковые фасады, лакированные до неестественного блеска. Это не храмы памяти, а витрины ностальгии, где прошлое упаковано в билеты и сувенирные магниты.
Туристические тропы, как нервные окончания, пронизывают заброшенные форты, превращая трагедию мятежей и войн в развлекательные квесты — аттракционы исторического безвременья. А на землях, где решалась судьба рубежей, множатся кристаллы элитных рестаранов — голограммы роскоши над пропастью распада.
Это и есть наш главный симулякр: показушный ренессанс. Подмена плоти жизни — экономикой впечатлений. Замена воли к обороне — игрой в героическое прошлое.
Превращение инженерного гения в фон для селфи. Кронштадт — кривое зеркало нашей апатии: мы больше не созидаем державную ткань — мы ткём её лакированную муляжную копию. Его "ревитализация" — тщательно отрежиссированный спектакль ухода, где новая краска лишь подчёркивает глубину онтологической трещины.
Суть не в контрасте, а в единой болезни пространства. В неспособности опекать ландшафт, вверенный историей. Топос теряет статус места-события, становясь то зоной отчуждения, покрытой ржавчиной и травой, то гиперреалистичной декорацией. Кронштадт — не прошлое. Он — сгущённое настоящее, диагноз эпохи, где подлинное выветривается, а эфемерное торжествует под праздничные салюты!
Ветер свистит сквозь щели этой бутафории, выстукивая по ржавым якорям истину: всё, что не коренится в смысле — рассыплется. Останутся лишь море, гранит и вечный вопрос: зачем мы притворялись?
Игра Bloom tales
Всем привет! Делаем совместно с @Dettdiva. Давно хотел реализовать что то подобное да руки не доходили и, плюс ко всему, рисовать фон и все остальное - вообще никакого желания, рисовать я не умею, да и не люблю, сам процесс рисования или редактирования, или те же работы с нейросетями с изображениями видятся мне такими тягомотными...... Вот прям фу. Дайте мне рисунки, скажите что вы хотите получить в финале и я сделаю. Собственно, @Dettdiva и вызвалась пойти на это.
А теперь перейдем к самой игре, давай сразу про движок - и, думаю вы не угадали, это нативная разработка. Никаких unity, хрюнити и прочей гадости, только нативная разработка на kotlin. По скольку игра более чем статичная, без 3D элементов, без каких то там сложных процессов то и нет смысла использовать язык C++, будет обычный, классический kotlin, а экран на XML.
В игре будет аж два активити. Первое - экран загрузки, на данный момент он ничего ниоткуда не подгружает, кроме инициализации базы данных, то там стоит статичная задержка на 5 секунд. После открывается второе активити на котором располагается фрагмент с цветочком. По мере разработки на этом первом активити будет запускаться воркер и будет подгружать элементы с сервера, ну допустим какие то сезонные элементы.
Что примечательно, капельки и кристалики подгружаются из базы данных. На них шрифт еще никакой не накладывал, это будет. Снизу, и скорее всего сбоку тоже будут, клавиши для взаимодействия.
Так же меняется фон. На данный момент фон меняется каждые 10 секунд. Но, делать резкое изменение не хотелось, хотелось плавный переход, который пользователь особо не заметит.
Для этого на фрагменте расположил два imageView, на "верхнем" текущая, на "нижнем" следующая. В определенное время дня верхняя картинка будет "растворяться" , то бишь, параметр альфа у картинки будет уменьшаться и постепенно становиться видно будет нижнею картинку.
а вот так выглядит в android studio:
да, все остальные элементы это отдельные imageView.
В базе данных абсолютно все зашифровано, пользователь не сможет вот так вот просто взять и поменять или посмотреть значение. Нужно было спроектировать базу, продумать, желательно по максимуму все столбцы. Я пока продумал следующую архитектуру:
Общие пользовательские данные. А что у нас в общих данных? Единственное что я посчитал общим - капельки и кристалики. В будущем планируется несколько цветочков, а капельки и кристалики будут одни на всех.
следующая связанная таблица -
планируется обратная связь от цветочка, думаю нужно хранить имя пользователя, и, возможно, гендер, а гендеров будет только два.
Данные по цветочку,
и последняя:
Да, я накосячил немного в названиях первых двух таблиц, ну да ладно.
Но, как вы могли заметить, все параметры типа String, как раз из за того что все захешировано.
Ну и самое интересное в конце, видео работы приложения:
И, как всегда, адептам запятых и точек насыпал тут: ,,,,,,,,,,,,............ расставляйте по своему усмотрению и что бы демон орфографии, синтаксиса и пунктуации не загубил вас.
Всем спасибо за внимание!
О чем говорить с людьми: написал приложение для Android нейросетью за неделю
Всем привет!
Знакомая ситуация: собрались компанией, поели, обсудили работу, погоду, общих знакомых... и повисла тишина. Кто-то уже лезет в телефон проверять ленту, кто-то неловко смотрит в стену.
Я люблю настолки разговорного жанра (где тянешь карточку и отвечаешь на вопрос), они отлично ломают этот лёд. Но таскать с собой коробки неудобно, а в маркетах найти что-то прикольное непростая задача.




Скриншоты приложения
Решил, что мне нужно своё приложение. Простое, красивое и бесплатное.
Проблема была одна: писать код с нуля долго и лень.
Поэтому я решил провести эксперимент: сможет ли Google AI Studio написать полноценное Android-приложение за меня?
Как это было
Я выступил в роли "архитектора" и заказчика, а нейросеть — в роли программиста. Я скармливал ей запросы: "Хочу экран с карточками", "Сделай свайп вверх для нового вопроса", "Добавь темную тему".
Честно скажу, это было прикольно. За неделю по вечерам мы с ИИ собрали полноценный проект:
Написали логику на Kotlin + Jetpack Compose (современный стек).
Сверстали дизайн: добавили анимации, живые фоны (сердечки, елочки, геометрия).
Прикрутили базу данных для хранения прогресса и Избранного.
Отладили баги: например, долго разбирались с тем, чтобы счетчик просмотренных вопросов не сбрасывался криво.
Что получилось в итоге
Приложение называется «Диалоги».
Суть простая: кладете телефон на стол, выбираете категорию и по очереди отвечаете на вопросы. Узнаете друг о друге кучу нового!
Что есть внутри:
3 категории: «Общие» (для любой компании), «Блиц» (быстрые ответы) и «HOT» (18+, есть фильтр в настройках).
Кастомизация: Можно менять цвета карточек, включать "залипательные" анимированные фоны.
Офлайн: Интернет не нужен.
Бэкап: Сделали экспорт/импорт прогресса, чтобы можно было перекинуть настройки другу.
Горизонтальный режим: Текст поворачивается, чтобы удобно было читать соседу сбоку.
Где скачать
Выложил в RuStore, так как это сейчас самый простой способ для РФ.
Приложение полностью бесплатное, без рекламы и подписок. Делал для себя и друзей, делюсь с вами.
👉 Ссылка на RuStore:https://www.rustore.ru/catalog/app/com.martem000.dialogs_1
Буду рад, если скачаете и потестите. Если найдете баги — пишите в комменты, я передам своему "нейро-программисту"! :)























































