Продолжаем вашу(мою) любимую рубрику Ответ на вопрос
И телезрители играют против знатоков, вопрос из зала задает @Vlod_R
Вопрос:
Как у тебя происходило изучение других ЯПов/стеков? Когда уже был опыт в каком-то
Что бы посоветовал при перекате с ноды/ТС на JVM? Может уже работал с такими людьми и замечал общие ошибки?
Ответ:
Скажу честно, что такие перекаты от санитаров в изучении других ЯП у меня не то чтобы популярная история. В целом совет тут можно дать самый базовый: у любого ЯП есть его стержень (у некоторых ЯП типа как Scala их может быть несколько), так вот понять надо именно стержень этот. Например, в Java - это ООП (ОПГ) и разделение логики на всякие сервисы, контроллеры (Spring головного мозга) - поняв эти две вещи вы точно сможете на работе говорить на одном языке. Здесь важно не уходить в детали и всякие там типы данных - ну есть они и есть, вы их потом поймете. По сути этот стержень - это и есть философия языка, его главная парадигма.
У Python эта философия (как по мне) в нескольких вещах:
Это его гибкость через эти все словари у каждого объекта - что вы там в словаре объекта найдете все его возможности по сути.
Это его ООП (именно свой взгляд, не как у Java) и стиль написания (все эти генераторы).
В Java это его ООП и именно то как Java видит полиморфизм - отсюда все эти интерфейсы там и прочее. Можно полистать старую книжку (она реально чуть устарела, но плюс минус все еще будет полезна) Эккеля Thinking in Java. Даже посмотрев как в Java сделаны ФП вещи можно сформулировать вот именно ту самую философию. По сути (если коротко) Java очень любит абстракции и слои абстракций - отсюда эти все абстрактные фабрики абстрактных методов (шутка) (я не шутил)
Не советую еще читать Шилдта (это как справочник имхо он не нужен сейчас) и Блоха тебе пока не надо читать первое время, на мой взгляд это может отпугнуть
Основные ошибки же у всех одни - надо перестать писать «как вы писали» (забудьте чему вас учили в школе!), например, кто приходит с Си (студенты) - они начинают экономить сразу же байтики повсюду, это не нужно. Вторая популярная ошибка (кмк) - это уход в детали сразу, погружение слишком глубокое туда, куда еще рано. Часто бывает такое, что человек там начинает про какие-то Integer Pool-ы читать, а это ну точно не то, что ему надо сейчас. Третья ошибка - уход в теорию и мало практики (я на нее сам регулярно попадаю).
Очень важно сразу понять нейминг - по сути грамматика для ЯП, в Java принято размашисто писать, в Go нет - вот уже и первые ошибки будут, если ты начнешь как-то называть переменные или классы/методы коротко с кучей сокращений
Еще Java очень строгий и закрытый язык, в отличи от того же JS.
Это выражается и в структуре кодовой базы:
├── controller
├── service
├── repository
├── model
├── config
Даже при DDD ты что то похожее увидишь просто по другому сгруппированное чуть чуть
Пойми как и по какой логике группируют код в проекте (или ты будешь группировать) - отсюда же будет понимание той самой абстракции и интерфейсов-связей между слоями.
Еще отличие, которое замечал, что то, что смотришь на конференциях на том же Python - это все уже было вСимпсонах Java (не так давно смотрел вот про DI доклады там)
Не погружайся в детали сразу.
Если ты начнешь там копать в JVM - там и останешься, а для перехода это не требуется пока.
На правах рекламы еще посоветую JBook но я сам туда пишу и совет из разряда пользуйтесь - это круто, ведь это я делаю!
Но мне кажется там норм некоторые вещи (не все) описаны и полезны.
И я бы на твоем месте быстрее переходил бы в Spring/Ktor/Quarkus/Микронавт там - короче куда то туда, а по мере необходимости уже детали бы изучал.
Вообще популярные фреймворки языка - это тоже в том числе отражение его философии (то как ее видит большинство) - вот тебе это подойдет прямо.
И телезрители играют против знатоков, вопрос из зала задает @Vlod_R
Вопрос:
Как у тебя происходило изучение других ЯПов/стеков? Когда уже был опыт в каком-то
Что бы посоветовал при перекате с ноды/ТС на JVM? Может уже работал с такими людьми и замечал общие ошибки?
Ответ:
Скажу честно, что такие перекаты от санитаров в изучении других ЯП у меня не то чтобы популярная история. В целом совет тут можно дать самый базовый: у любого ЯП есть его стержень (у некоторых ЯП типа как Scala их может быть несколько), так вот понять надо именно стержень этот. Например, в Java - это ООП (ОПГ) и разделение логики на всякие сервисы, контроллеры (Spring головного мозга) - поняв эти две вещи вы точно сможете на работе говорить на одном языке. Здесь важно не уходить в детали и всякие там типы данных - ну есть они и есть, вы их потом поймете. По сути этот стержень - это и есть философия языка, его главная парадигма.
У Python эта философия (как по мне) в нескольких вещах:
Это его гибкость через эти все словари у каждого объекта - что вы там в словаре объекта найдете все его возможности по сути.
Это его ООП (именно свой взгляд, не как у Java) и стиль написания (все эти генераторы).
В Java это его ООП и именно то как Java видит полиморфизм - отсюда все эти интерфейсы там и прочее. Можно полистать старую книжку (она реально чуть устарела, но плюс минус все еще будет полезна) Эккеля Thinking in Java. Даже посмотрев как в Java сделаны ФП вещи можно сформулировать вот именно ту самую философию. По сути (если коротко) Java очень любит абстракции и слои абстракций - отсюда эти все абстрактные фабрики абстрактных методов (шутка) (я не шутил)
Не советую еще читать Шилдта (это как справочник имхо он не нужен сейчас) и Блоха тебе пока не надо читать первое время, на мой взгляд это может отпугнуть
Основные ошибки же у всех одни - надо перестать писать «как вы писали» (забудьте чему вас учили в школе!), например, кто приходит с Си (студенты) - они начинают экономить сразу же байтики повсюду, это не нужно. Вторая популярная ошибка (кмк) - это уход в детали сразу, погружение слишком глубокое туда, куда еще рано. Часто бывает такое, что человек там начинает про какие-то Integer Pool-ы читать, а это ну точно не то, что ему надо сейчас. Третья ошибка - уход в теорию и мало практики (я на нее сам регулярно попадаю).
Очень важно сразу понять нейминг - по сути грамматика для ЯП, в Java принято размашисто писать, в Go нет - вот уже и первые ошибки будут, если ты начнешь как-то называть переменные или классы/методы коротко с кучей сокращений
Еще Java очень строгий и закрытый язык, в отличи от того же JS.
Это выражается и в структуре кодовой базы:
├── controller
├── service
├── repository
├── model
├── config
Даже при DDD ты что то похожее увидишь просто по другому сгруппированное чуть чуть
Пойми как и по какой логике группируют код в проекте (или ты будешь группировать) - отсюда же будет понимание той самой абстракции и интерфейсов-связей между слоями.
Еще отличие, которое замечал, что то, что смотришь на конференциях на том же Python - это все уже было в
Не погружайся в детали сразу.
Если ты начнешь там копать в JVM - там и останешься, а для перехода это не требуется пока.
На правах рекламы еще посоветую JBook но я сам туда пишу и совет из разряда пользуйтесь - это круто, ведь это я делаю!
Но мне кажется там норм некоторые вещи (не все) описаны и полезны.
И я бы на твоем месте быстрее переходил бы в Spring/Ktor/Quarkus/Микронавт там - короче куда то туда, а по мере необходимости уже детали бы изучал.
Вообще популярные фреймворки языка - это тоже в том числе отражение его философии (то как ее видит большинство) - вот тебе это подойдет прямо.
GitHub
GitHub - qcha/JBook: Алгоритмы, паттерны, подготовка к собеседованиям, статьи и материалы по Java
Алгоритмы, паттерны, подготовка к собеседованиям, статьи и материалы по Java - qcha/JBook
12 апреля - день космонавтики!
В целом, я закончил ФАКИ (Факультет аэрофизики и космических исследований) в МФТИ и даже на кафедре писал чуть чуть на питоне обработчик телеметрии с космоса. К слову, делали мы программное обеспечение тогда не как сейчас, а на совесть, потому первая версия потеряла всю полученную телеметрию.
Но никто не расстроился, потому что ее принимали еще вроде в Калуге (но я точно не помню).
Тогда я впервые понял важность дублирования, репликации данных, бэкапов и по взгляду своего начальника в тот день точно уяснил - космос точно будет наш!
Поэтому, с праздником!
В целом, я закончил ФАКИ (Факультет аэрофизики и космических исследований) в МФТИ и даже на кафедре писал чуть чуть на питоне обработчик телеметрии с космоса. К слову, делали мы программное обеспечение тогда не как сейчас, а на совесть, потому первая версия потеряла всю полученную телеметрию.
Но никто не расстроился, потому что ее принимали еще вроде в Калуге (но я точно не помню).
Тогда я впервые понял важность дублирования, репликации данных, бэкапов и по взгляду своего начальника в тот день точно уяснил - космос точно будет наш!
Поэтому, с праздником!
История
Как говорится мужчина сказал - мужчина сделал (через месяц)
Итак, я на первом курсе и вот первый семестр прошел и пора сдавать зачет по информатике
Не секрет, что на первом курсе из программирования я знал только то, что программирование -это когда печатают, т.е. был достаточно подкован. Пары у нас были по C, но были в пятницу вечером - а значит пересекались с более важными делами и перед зачетом я обладал следующими знаниями: как выглядит преподаватель, знал его фамилию, знал где проходят пары и умел включить компьютер.
Вооружившись всеми этими знаниями я отправился на зачет, на котором преподаватель, посмотрев на мою посещаемость (уверенные 2 занятия из семестра) и на мой внешний вид (уверенные 10 из 10, где 10 - это расстояние в километрах от понимания предмета), предложил мне трояк и мы расходимся уже прямо сейчас без вопросов (тогда в МФТИ была еще пятибалльная система).
Вариант с тройкой был с негодованием отвергнут, так как ощущал я себя как двухметрового метросексуала 0% подкожного жира и 200+ IQ. Преподаватель еще раз посмотрел на меня и, вздохнув, предложил мне написать перемножение матриц. Почувствовав себя Избранным и не обнаружив вокруг агентов Смитов я, разумеется, согласился, поэтому приступил к делу немедленно.
Залогинившись я обнаружил некоторое количество файлов с расширением .c и .out (у нас были линуксы там - но я не помню какие, скорее всего что то типа Debian с Gnome). Довольно быстро помощью популярной в АйТи RnD жилки я обнаружил, что .out открывается в текстовом редакторе, но нечитаемы - а значит, это не наш друг. А вот расширение .c было более дружелюбно, поэтому я буквально нырнул в С. Надо отметить, что все, что было кроме «Hello World» было уже довольно душноватым, поэтому копируя прямо гигантские куски и запуская их (а я умел запускать и компилировать - это было на первом занятии, которое я посетил) я понял, что некоторые конструкции выводят на экран текст, а некоторые ожидаю ввода. Тогда я не придал важности тому, что два обратных слэша - это комментарий и копировал все вместе, потому даже «Hello World» вышел строк на 50 у меня (я там по ошибке еще и какие-то объявления скопировал). Как с помощью scanf что то куда то записать я понимал смутно и примерно, но сложнее было даже не записать в переменную - а использовать ее.
На этом моменте я обнаружил, что мы уже почти час сидим в аудитории и у нас осталось 30 минут.Успокоив учителя, тем, что разгадка уже близка и я буквально играюсь со шрифтами, я продолжил. За оставшиеся 25 минут я не смог продвинуться к матрице (о существовании массивов я не знал - эти инопланетяне технологии были за гранью моего разума). В итоге, понимая безвыходность ситуации я накопировал кусками: предложение ввести матрицу 1 и 2, плюс вывод ответа.
Разумеется, так как матрицы могли быть разными по размерам я не разобрался как их сохранять и я просто предлагал что-то ввести и это просто никуда не сохранялось. Понимая, что мы идем ВА-БАНК, я выбрал пример посложнее (не 1 1 1 1 на 1 1 1 1 грубо говоря), после чего запустив и прогнав happy path (а там другого и не было) я подозвал преподавателя и объявил, что СкайНЕТ 2.0 готов и человечество обречено.
Преподаватель подошел и попросил продемонстрировать работу ИИ в деле, на что я, сказав, что единичная матрица это хуже чем очень слабо и надо сразу на хардкор идти ввел единственно верную комбинацию цифр (на самом деле они ни на что не влияли). Увидев результат, я на бумажке уже в реалтайме показал, что перемножил я верно на что мне поставили таки четыре с минусом.
Пообещав продемонстрировать в следующем семестре еще большие знания, я взял зачетку и пошел пить пиво. В целом, удивлены были в тот вечер два человека: учитель - так как я как-то перемножил матрицы, а я - что компьютеры эти как то работают и это в целом интересно.
P.S. Уже после, через пару лет, когда я действительно увлекся программированием, я таки взял книжку Кренигана и Ритчи, прорешал ее. Ну а преподавателя того уже, к сожалению, нет в живых - так как старый состав в МФТИ уже сменился. Хороший был мужик.
Как говорится мужчина сказал - мужчина сделал (через месяц)
Итак, я на первом курсе и вот первый семестр прошел и пора сдавать зачет по информатике
Не секрет, что на первом курсе из программирования я знал только то, что программирование -это когда печатают, т.е. был достаточно подкован. Пары у нас были по C, но были в пятницу вечером - а значит пересекались с более важными делами и перед зачетом я обладал следующими знаниями: как выглядит преподаватель, знал его фамилию, знал где проходят пары и умел включить компьютер.
Вооружившись всеми этими знаниями я отправился на зачет, на котором преподаватель, посмотрев на мою посещаемость (уверенные 2 занятия из семестра) и на мой внешний вид (уверенные 10 из 10, где 10 - это расстояние в километрах от понимания предмета), предложил мне трояк и мы расходимся уже прямо сейчас без вопросов (тогда в МФТИ была еще пятибалльная система).
Вариант с тройкой был с негодованием отвергнут, так как ощущал я себя как двухметрового метросексуала 0% подкожного жира и 200+ IQ. Преподаватель еще раз посмотрел на меня и, вздохнув, предложил мне написать перемножение матриц. Почувствовав себя Избранным и не обнаружив вокруг агентов Смитов я, разумеется, согласился, поэтому приступил к делу немедленно.
Залогинившись я обнаружил некоторое количество файлов с расширением .c и .out (у нас были линуксы там - но я не помню какие, скорее всего что то типа Debian с Gnome). Довольно быстро помощью популярной в АйТи RnD жилки я обнаружил, что .out открывается в текстовом редакторе, но нечитаемы - а значит, это не наш друг. А вот расширение .c было более дружелюбно, поэтому я буквально нырнул в С. Надо отметить, что все, что было кроме «Hello World» было уже довольно душноватым, поэтому копируя прямо гигантские куски и запуская их (а я умел запускать и компилировать - это было на первом занятии, которое я посетил) я понял, что некоторые конструкции выводят на экран текст, а некоторые ожидаю ввода. Тогда я не придал важности тому, что два обратных слэша - это комментарий и копировал все вместе, потому даже «Hello World» вышел строк на 50 у меня (я там по ошибке еще и какие-то объявления скопировал). Как с помощью scanf что то куда то записать я понимал смутно и примерно, но сложнее было даже не записать в переменную - а использовать ее.
На этом моменте я обнаружил, что мы уже почти час сидим в аудитории и у нас осталось 30 минут.Успокоив учителя, тем, что разгадка уже близка и я буквально играюсь со шрифтами, я продолжил. За оставшиеся 25 минут я не смог продвинуться к матрице (о существовании массивов я не знал - эти инопланетяне технологии были за гранью моего разума). В итоге, понимая безвыходность ситуации я накопировал кусками: предложение ввести матрицу 1 и 2, плюс вывод ответа.
Разумеется, так как матрицы могли быть разными по размерам я не разобрался как их сохранять и я просто предлагал что-то ввести и это просто никуда не сохранялось. Понимая, что мы идем ВА-БАНК, я выбрал пример посложнее (не 1 1 1 1 на 1 1 1 1 грубо говоря), после чего запустив и прогнав happy path (а там другого и не было) я подозвал преподавателя и объявил, что СкайНЕТ 2.0 готов и человечество обречено.
Преподаватель подошел и попросил продемонстрировать работу ИИ в деле, на что я, сказав, что единичная матрица это хуже чем очень слабо и надо сразу на хардкор идти ввел единственно верную комбинацию цифр (на самом деле они ни на что не влияли). Увидев результат, я на бумажке уже в реалтайме показал, что перемножил я верно на что мне поставили таки четыре с минусом.
Пообещав продемонстрировать в следующем семестре еще большие знания, я взял зачетку и пошел пить пиво. В целом, удивлены были в тот вечер два человека: учитель - так как я как-то перемножил матрицы, а я - что компьютеры эти как то работают и это в целом интересно.
P.S. Уже после, через пару лет, когда я действительно увлекся программированием, я таки взял книжку Кренигана и Ритчи, прорешал ее. Ну а преподавателя того уже, к сожалению, нет в живых - так как старый состав в МФТИ уже сменился. Хороший был мужик.
Forwarded from Организованное программирование | Кирилл Мокевнин (Kirill Mokevnin)
Выпуск про тимлидов уже доступен для просмотра. Вы узнаете, как устроена настоящая командная динамика, что делать, если «всё рушится», и почему работа тимлида — это не про власть, а про ответственность. Не пропустите — разговор откровенный, местами жёсткий, но крайне полезный для всех, кто хочет расти в IT.
https://www.youtube.com/watch?v=_qJ_rU8-S90
Альтернативные ссылки: Аудио | vk
https://www.youtube.com/watch?v=_qJ_rU8-S90
Альтернативные ссылки: Аудио | vk
YouTube
Тимлидерство от А до Я: влияние, управление, делегирование | Александр Кучук #41
В этом выпуске мы поговорили с Сашей Кучуком — тимлидом с 11-летним опытом, который последние шесть лет работает в крупных и малых компаниях, включая топовые бигтехи. Обсудили, как на самом деле устроена жизнь тимлида, почему программирование — не стрессовая…
Итак, кажется, что меня засосало в Dota 2, но на самом деле я пытался сформулировать мысли по такому событию как System Design Interview
Как обычно, статья - это лонг рид и делал я ее с точки зрения как к этому подготовиться, как проходить и что это такое
Вы спросите (нет) - а зачем я это делал? А я отвечу вам, что я решил структурировать информацию и разобрать как именно проходить лучше это все
На базе чего я это делал? На базе своего опыта (сходил на такой собес даже), на базе кучи статей, ютуба и даже на митап сходил про это
В общем, как обычно - буду рад критике, найденным ошибкам и советам!
Ну и еще больше рад буду если вам пригодится!
Ну и сама заметка: https://github.com/qcha/JBook/blob/master/interview/design_interview/help.md
Как обычно, статья - это лонг рид и делал я ее с точки зрения как к этому подготовиться, как проходить и что это такое
Вы спросите (нет) - а зачем я это делал? А я отвечу вам, что я решил структурировать информацию и разобрать как именно проходить лучше это все
На базе чего я это делал? На базе своего опыта (сходил на такой собес даже), на базе кучи статей, ютуба и даже на митап сходил про это
В общем, как обычно - буду рад критике, найденным ошибкам и советам!
Ну и еще больше рад буду если вам пригодится!
Ну и сама заметка: https://github.com/qcha/JBook/blob/master/interview/design_interview/help.md
Итак, с утра в субботу мне приятель пишет Go в Доту
Я такой, о, Go!
И решил с chatGpt задачку разобрать на Go:
Он мне честно отвечает, дескать, Александр! Хороший пример с классической ловушкой Go при использовании range с адресами переменных.
Будет 40 40 (и 40 будет во всех second[i], если распечатать дальше) - не подловишь меня, дурачок!
На что я ему свою коронку "А в новых версиях Go?"
А он мне, на голубом глазу: Отличный вопрос. Даже в новых версиях Go (включая 1.22 и выше) — поведение с range и переменной v остаётся прежним. Это осознанное решение дизайнеров языка.
И даже доказательство пример привел!
Я говорю "А в Go 1.24?"
Бездушная машина стоит на своем: В Go 1.24 поведение цикла for с использованием переменной v в конструкции range не изменилось.
На что я ему уже открыто говорю: Но это не так же
И тут-то он и покаялся во грехе: Извините за прежнюю неточность. В версии Go 1.22 было введено изменение, которое решает проблему с переиспользованием переменной цикла v в конструкции for range. С этого момента Go создает новую переменную на каждой итерации цикла и бла бла бла. Ответ 10 20, прошу простить!
Создается впечатление, что это не ИИ, а просто специально обученный китаец сидит и отвечает на вопросы и с утра не выспался еще, не проснулся.
Я такой, о, Go!
И решил с chatGpt задачку разобрать на Go:
func main() {
first := []int{10, 20, 30, 40}
second := make([]*int, len(first))
for i, v := range first {
second[i] = &v
}
fmt.Println(*second[0], *second[1])
}
Что будет?
Он мне честно отвечает, дескать, Александр! Хороший пример с классической ловушкой Go при использовании range с адресами переменных.
Будет 40 40 (и 40 будет во всех second[i], если распечатать дальше) - не подловишь меня, дурачок!
На что я ему свою коронку "А в новых версиях Go?"
А он мне, на голубом глазу: Отличный вопрос. Даже в новых версиях Go (включая 1.22 и выше) — поведение с range и переменной v остаётся прежним. Это осознанное решение дизайнеров языка.
И даже доказательство пример привел!
Я говорю "А в Go 1.24?"
Бездушная машина стоит на своем: В Go 1.24 поведение цикла for с использованием переменной v в конструкции range не изменилось.
На что я ему уже открыто говорю: Но это не так же
И тут-то он и покаялся во грехе: Извините за прежнюю неточность. В версии Go 1.22 было введено изменение, которое решает проблему с переиспользованием переменной цикла v в конструкции for range. С этого момента Go создает новую переменную на каждой итерации цикла и бла бла бла. Ответ 10 20, прошу простить!
Создается впечатление, что это не ИИ, а просто специально обученный китаец сидит и отвечает на вопросы и с утра не выспался еще, не проснулся.
Открыл тут свое интервью (зашел посмотреть что там еще появилось в ютубе) и увидел коммент. Не люблю, конечно, хвастаться, но хочу все таки запомнить и вам тоже показать - комментарий к вот моему интервью про тимлидов. Не знаю кто написал, где работали, но очень приятно такое прочитать мне.
Вообще, очень правильно говорить спасибо и хвалить, поэтому если ваш тимлид (и не только он, но тимлидов реально редко хвалят) молодец - то скажите ему об этом на 1-1 разочек-другой! Не надо частить с похвалой, но иногда можно!
Спасибо, старина!
Вообще, очень правильно говорить спасибо и хвалить, поэтому если ваш тимлид (и не только он, но тимлидов реально редко хвалят) молодец - то скажите ему об этом на 1-1 разочек-другой! Не надо частить с похвалой, но иногда можно!
Спасибо, старина!
С помощью диплома смог достать телефон из щели между кроватью и стеной, а вы и дальше говорите, что высшее образование не нужно
Итак, друзья, сегодня встал с утра и сильно ударился о край двери, от чего потемнело в глазах и вселенная начала анигилировать в червоточину. Привело это к тому, что я прочитал вот такую вот статью, где предрекается эра менеджеров-гиков
Некто Кларк (не Кент, а Джек) считает (до 10 видимо):
Ну что тут сказать, начинаем учиться ставить ван-ту-ван для нейросети, записывать их проблемы и дискомфорт (например, вон тот ИИ пишет лютый говнокод, скажи ему!), также нам нужно будет не забывать смотреть на то, чтобы нейросети регулярно ходили в отпуск, учились еще на чем-то, кроме рабочего кода (отдыхали) и не выгорали, а иначе нейро-HR бизнес ИИ партнер будет недоволен!
Ждем опросы ИИ по вовлеченности еще (у чатЖПТ интереснее проекты! Я только изображения генерирую, хочу новое что то!) и заживем!
Некто Кларк (не Кент, а Джек) считает (до 10 видимо):
Мы увидим появление менеджера-гика, у которого есть свои 'люди', но эти 'люди' — на самом деле экземпляры ИИ-агентов, выполняющих огромный объем работы для них
Ну что тут сказать, начинаем учиться ставить ван-ту-ван для нейросети, записывать их проблемы и дискомфорт (например, вон тот ИИ пишет лютый говнокод, скажи ему!), также нам нужно будет не забывать смотреть на то, чтобы нейросети регулярно ходили в отпуск, учились еще на чем-то, кроме рабочего кода (отдыхали) и не выгорали, а иначе нейро-HR бизнес ИИ партнер будет недоволен!
Ждем опросы ИИ по вовлеченности еще (у чатЖПТ интереснее проекты! Я только изображения генерирую, хочу новое что то!) и заживем!