C# и Unity
Доброго времени суток. С ребенком решили изучать С# и Unity для создания простенькой игрушки и так сказать войти в it сферу. Он хочет там работать. В связи этим есть вопросы и может знающие люди подскажут. Видео и гайдов по С# много и мы проходим курс на ютубе канал https://youtube.com/playlist?list=PLQOaTSbfxUtD6kMmAYc8Fooqy....
По Unity немного сложнее и каналов подобных нет или еще не попались. Но это позже, сначала С#.
Вопрос вот в чем. Какие книги по С# читать в перспективе. И есть ли книги по Unity и как их объединить С# и Unity. Вот ознакомились мы с этим, дальше что? Я понимаю, что C# в Unity для скриптов, но как с ними работать? Вот прям подробно для чайников.
Знаний в этой области нет вообще.
Почему С# и Unity? Доступность и простота (как мне кажется). Ну и С# универсальный язык, не только для игр. В общем, поможет любой совет и помощь.
Спасибо.
Обновление проги мониторинга ковров Artisan. Практически 2.0
Продолжаю программировать)
Ссылка на первую часть: https://zalipaka.icu/story/monitoring_dostupnosti_geymerskikh_kovrikov_artisan_11613910
Переписал своего бота мониторинга ковров практически с нуля.
Если раньше это была обычная программа, которую раз в полчаса запускал планировщик, то теперь это служба, которая работает круглосуточно, мониторит ковры нонстоп, а также отвечает на команды подписчиков в телеге.
Новые функции:
- Команды телеграм-бота. То есть они в принципе появились и ими можно пользоваться.
- Команда /get. Основное нововведение. Если вам не нужно постоянно получать уведомления о том какие ковры появились, а какие закончились, можно отписаться от уведомлений через /stop, но при этом по команде /get получать все доступные на данный момент ковры или только интересные вам.
То есть "/get 99" вернёт только ковры у которых в коде продукта есть 99, а "/get 99 xxl" - только те у которых в коде есть и 99 и xxl.
Кстати, сегодня вышел новый ковёр (キ83) . На сайте появился, а больше нигде никаких анонсов пока нет.
- Индивидуальные фильтры уведомлений. Если лично вам не нужны уведомления о том, что в продаже появились классические ковры размера S - это можно организовать. Пока фильтр настраивается только с моей стороны.
Немного технической информации для любителей программирования:
- Это всё ещё приложение на NET8.
- Пишу и собираю всё в линуксе в VS Code.
- Для основы сервиса использовал шаблон Worker, но так как кода не особо много и он не сложный, дополнительно на микросервисы внутри ихней HostedService инфраструктуры не стал дробить. Просто в пределах одного воркера на функциональные классы поделил и всё.
- Конфиги и данные храню в JSON. Сериализую периодически в файл встроенным сериализатором (System.Text.Json.JsonSerializer)
Прочая обвязка
- Для телеграм-бота использую `Telegram.Bot`
- Для логгирования `log4net`
- Для прикручивания к линуксовому диспетчеру служб Systemd - `Microsoft.Extensions.Hosting.Systemd`
- Для отображения таблички у себя на сайте использую `DataTables` (офигенная штука). И снова планировщик cron, который с бэкенда во фронтенд копирует периодически файлик с данными.
- Для персональных фильтров изпользовал `Dynamic.Linq` - тоже классная вещь, не надо самому мутить свой контракт и парсер для него.
Вроде всё... Программа простая, но так приятно смотреть как оно всё само работает)
Проблема решена
Немного подучив основы C# для Unity, я всё же смог решить для себя проблему, которую раньше не мог решить. Я не мог добавить замедленный счёт и ускорять его.
Фреймворк для онлайн игр
Всем привет! Запушил на гитхаб свой пет-проект. Это фреймворк для онлайн игр и приложений написанный на Node.js и Typescript, клиентская часть на Unity и C#.
Для чего это всё?
Можно делать многопользовательские онлайн игры и билдить под Android, iOS и WebGL, бесплатно, без регистрации и смс. Сейчас расскажу подробнее.
Давным-давно был такой проект на гитхабе Pomelo. По меркам интернета – реально древний, ему больше 10 лет. Он и сейчас там есть, но уже заархивирован и не поддерживается, но форки вроде пилятся. Кто первый раз слышит, это фреймворк для создания игровых серверов на JavaScript и Node.js. Проект довольно большой, куча модулей, клиенты под разные платформы, хорошая дока. Наткнулся я на него несколько лет назад и начал ковырять, запускать, что-то пробовать. В итоге, многие вещи в нём мне понравились, но показалось всё как-то замудрёно что ли. Наверно потому что китайцы писали, а может я в ноду не сильно мог 😅 В общем, оттуда я потягал какие-то скрипты, интересные решения, потом переписал, упростил и, получился у меня такой лайтовый сервер из нескольких файлов, на котором я тестил всякие свои проекты, изучал Node.js, JavaScript и TypeScript позднее.
Когда что-то стало получаться, переписал всю серверную часть на TypeScript и всё это дело стало обретать какой-то полезный вид. И вот, в результате n-ой итерации, архитектура устоялась, протестировалась и получился Shardy.
Shardy – это фреймворк для онлайн игр и приложений на Node.js. Он даёт базовую функциональность для построения микросервисных решений: мобильных, социальных, веб, многопользовательских игр, приложений реального времени, чатов, middleware сервисов и т.п. Есть клиент на TS встроенный в фреймворк, а также пакет для Unity, который поддерживает сборки под iOS, Android и WebGL.
Основные фичи:
- микросервисная парадигма
- простой API: RPC, команды, подписки и т.п.
- транспорт данных через сокеты и вебсокеты
- легкость и быстрота: Node.js и TypeScript
- поддержка пользовательской сериализации
- поддержка пользовательской валидации рукопожатий (handshake)
- продвинутый логгер: теги, фильтры, области
- справочные материалы: документация, сниппеты, примеры
- почти нулевая конфигурация
Есть демка с примерами работы API и простенькая онлайн игра "Крестики-Нолики": как серверная часть, так и клиентская. Всё можно посмотреть, поковырять, запустить у себя и попробовать поиграть. Весь код старался комментировать, иногда даже излишне. Также есть документация с описанием всех компонентов и методов. Это всё в процессе наполнения и улучшения.
Ниже, пример WebGL билда с игрой "Крестики-Нолики".
В примере реализовано:
старт/остановка поиска свободных игр
простой матчмейкинг
отправка команды хода игрока
отправка команды выхода из игры
обнаружение ничьей и конца раунда
сохранение текущего счёта
Основная цель Shardy – предоставить простое бесплатное решение для создания многопользовательских онлайн игр. Вот так вот громко 😅 На это будет обращено основное внимание при дальнейшей разработке новых функций, сервисов и туторов (было бы время...).
Да, пока это голый фреймворк без полезной нагрузки в виде готовых каких-то решений, модулей, примеров игр и т.п. И да, входной порог есть, нужно уметь в Node.js и Typescript, чтобы делать серверную часть. Поэтому буду добавлять полезности по мере возможностей.
Приглашаю всех заинтересованных инди и не только, посмотреть, покрутить, примерить, потестить на своих каких-то задачах, играх, проектах, прототипах. Если будут вопросы, отвечу тут в комментах или на почту mail@mopsicus.ru.
Курс С# для новичка
Здравствуйте!
Работаю с SQL Server, в интерфейсе, которым пользуюсь, есть возможность упростить работу скриптами С#.
Ищу онлайн курс для новичка по С#.
В гугле есть просто море всего, хотелось бы найти хороший курс.
Лучше всего, если он не только хороший, но и бесплатный :)
Буду благодарна вашим советам
Мониторинг доступности геймерских ковриков Artisan
Может кому пригодится.
По просьбе одного хорошего человека написал программу и сделал удобную табличку с информацией о японских геймерских ковриках для мыши от компании Artisan.
Информация тянется с официального японского сайта (https://www.artisan-jp.com/) каждые полчаса. Есть возможность слать уведомления в телеграм.
Табличка выглядит так:
Уведомления — так:
UPD:
Писал полностью в Linux. В качестве IDE использовал VS Code. Фреймворк — Net8.
Если интересны подробности, пишите в комментах - добавлю немного кода.
Затем закинул программу себе на сервер и добавил её периодическое выполнение в cron.
Из недостатков — для отправки уведомлений в Telegram использовал самый популярный пакет — Telegram.Bot. Так вот, в текущей версии этот пакет не поддерживает тримминг. Соответственно, собранное приложение вместо ~18МБ весит почти 100!
На сервере места достаточно, так что это не проблема. Но… 100МБ на очень скромное по функциям приложение! У моего внутреннего программиста-перфекциониска глаз дёргается от этого.
Инженер машинного обучения — кто это, чем занимается и как им стать
Машинное обучение — технология, которая позволяет компьютеру самообучаться и распознавать закономерности. А помогают ему инженеры машинного обучения. Рассказываем, чем они занимаются, какие навыки им нужны и как войти в эту профессию.
Кто такой инженер машинного обучения
Инженер машинного обучения (ML-инженер — от англ. Machine Learning Engineer) — это специалист, который разрабатывает и внедряет алгоритмы, позволяющие программам обучаться на данных и принимать решения без явного программирования. Скажем, специалист по Data Science анализирует данные и строит модели, а ML-инженер оптимизирует их и интегрирует в реальные приложения.
Профессия находится на пересечении программирования, математики, статистики и прикладного машинного обучения. ML-инженер не просто строит модель, а делает так, чтобы она эффективно работала в продакшене, обрабатывала большие объемы данных, быстро реагировала на запросы пользователей и корректно обновлялась по мере поступления новых данных.
Чем занимается ML-инженер на практике
Работа ML-инженера включает сразу несколько направлений. В первую очередь это сбор и подготовка данных. Реальный мир далек от идеала, и данные часто приходят в сыром виде: с пропусками, ошибками и несоответствиями. Инженер должен очистить их, привести к единому формату и расширить с помощью внешних источников.
Следующий этап — выбор и обучение модели. Здесь инженер выбирает один или несколько алгоритмов, проводит эксперименты, настраивает параметры, оценивает качество. Он должен понимать, как работают линейные регрессии, деревья решений, градиентный бустинг, нейронные сети и уметь выбрать нужный инструмент под задачу.
Самое сложное и ответственное начинается после того, как модель готова. ML-инженер превращает ее в часть работающего приложения. Это означает упаковку модели в API, написание серверного кода, оптимизацию по скорости и памяти, мониторинг качества в реальном времени и повторное обучение по мере необходимости. Он также работает над масштабируемостью и надежностью, так как в реальных условиях модели должны обрабатывать тысячи или миллионы запросов ежедневно.
Кроме того, инженер взаимодействует с другими специалистами: аналитиками, продукт-менеджерами, разработчиками. Он объясняет, как работает модель, какие у нее ограничения, как интерпретировать результаты. Коммуникация — неотъемлемая часть его работы.
Какие навыки и знания нужны
Чтобы стать инженером машинного обучения, нужно сочетание теоретической базы и практических навыков:
Уверенное владение языками программирования, прежде всего Python. Большинство библиотек машинного обучения, таких как scikit-learn, TensorFlow, PyTorch, написаны именно на нем.
Знания математики, особенно линейной алгебры, теории вероятностей и математической статистики тоже играют важную роль. Без них невозможно понять, как и почему работает та или иная модель, как интерпретировать ее поведение и где могут возникнуть ошибки. Для повторения основ у нас есть отдельный бесплатный курс базовой математики.
Алгоритмы машинного обучения важно понимать на уровне реализаций: что такое переобучение, как работает регуляризация, какие метрики применимы для классификации, регрессии, кластеризации.
Также важно уметь работать с базами данных (SQL, NoSQL), системами хранения и обработки больших данных (Hadoop, Spark), знать основы DevOps и MLOps (Docker, CI/CD, Kubernetes, автоматизация моделей).
Плюсы и минусы профессии
➕ Востребованность и высокая оплата труда. Инженеры по машинному обучению — одни из самых востребованных специалистов в IT-сфере. Зарплаты выше среднего по рынку, особенно при наличии успешных проектов и глубоких знаний.
➕ Перспективность. ML активно применяется в медицине, финансах, ритейле, науке и других отраслях. Это дает широкие возможности для карьерного роста.
➕ Интеллектуальная работа. Работа подходит тем, кто любит решать сложные задачи и работать с данными.
➕ Богатая образовательная экосистема. По теме ML иного курсов, open-source инструментов, конференций и сообществ. Есть возможность постоянно учиться и обмениваться опытом.
➖ Высокий порог входа. Нужны глубокие знания математики, программирования, а также баз данных, алгоритмов и архитектур моделей.
➖ Работа бывает рутинной. Большую часть времени занимает обработка и подготовка данных, отладка моделей, а не изобретение революционных алгоритмов.
➖ Трудности с внедрением моделей. Не всегда удается успешно интегрировать модель в продукт. Требуются усилия по адаптации под инфраструктуру, масштабированию, мониторингу и учету бизнес-ограничений.
➖ Конкуренция. Растущая популярность профессии означает, что в крупных городах конкуренция среди кандидатов может быть высокой.
Зарплаты ML-инженеров
По данным Dream Job, средняя зарплата ML-инженеров в России за 2025 год составляет 165 000 рублей. Чаще всего зарплаты находятся в диапазоне от 100 000 до 230 000 рублей. Минимальная зафиксированная зарплата — 87 000 рублей, максимальная — 360 000.
Вилки джуниоров в машинном обучении, по данным HH Карьера, составляют от 70 000 до 110 000 рублей. Мидлов — от 220 000 до 250 000 рублей, а сеньоров — от 348 000 до 350 000 рублей.
Вот так выглядят зарплаты в профессии ML-инженер летом 2025 года.


Перспективы профессии
Машинное обучение используется в самых разных сферах: от финансов и медицины до логистики, маркетинга и развлечений. ML-инженеры разрабатывают алгоритмы для прогнозирования спроса, распознавания лиц, антифрод-систем и рекомендательных алгоритмов.
Спрос на таких специалистов продолжает расти, а уровень доходов остается одним из самых высоких на рынке. По данным исследования, наибольший спрос в сфере анализа данных и ML пришелся на последние четыре года — число предложений выросло в 2,5 раза.
Конечно, вход в профессию требует знаний, самообразования и реальных кейсов. Но те, кто готов учиться и двигаться вперед, найдут в этой области интересную работу с постоянными интеллектуальными вызовами и большими карьерными перспективами.
Как стать ML-инженером
Многие специалисты приходят в машинное обучение из смежных областей: математики, физики, программирования, аналитики. Часто у них есть техническое образование, хотя это необязательно. Важнее — желание учиться и практиковаться.
Один из самых надежных способов — пройти профильное обучение. Это может быть вуз, где есть направления по ИИ и анализу данных, или курсы, ориентированные на практику. Онлайн-платформы предлагают мощные программы, которые можно проходить параллельно с работой или учебой.
Например, стартовать в профессии поможет онлайн-курс «Инженер машинного обучения» Практикума — за 4 месяца вы изучите полный жизненный цикл модели машинного обучения и сможете строить продвинутые ML‑модели. Вы освоите Docker, FastAPI, Airflow, MLflow, Yandex Cloud и другие инструменты, добавите 7 ML-проектов в портфолио и получите диплом о профессиональной переподготовке.
Реклама ООО «Яндекс», ИНН: 7736207543
Как я обычно узнаю о новых фичах в C#
О новых фичах в C# я обычно узнаю с помощью подсказок Райдера — IDE для C# от JetBrains.
В общем, обновился, пишу код, и Райдер предлагает что-то исправить там, где раньше все было окей. Думаю — ну ок, давай исправим. Но ощущение, что он перепутал C# c JavaScript.
- string[] array = new [] { “a”, “b”, } предлагает заменить на string[] array = ["a", "b"]
- Array.Empty<string>() на []
- List<string> list = new (vowels) на List<string> list = [.. vowels]
Особенно интересен последний пример, очень уж напоминающий spread оператор из JS. И действительно, в C# его тоже завезли, правда по пути потеряли одну точку и назвали spread element.
int[] row0 = [1, 2, 3];
int[] row1 = [4, 5, 6];
int[] row2 = [7, 8, 9];
int[] example1 = [..row0, ..row1, ..row2];
List<int> example2 = [..row0, row1[0]];
В общем, в C# 12 поднасыпали синтаксического сахара для работы с коллекциями. А ещё прихватили Primary конструктор из Scala. Это когда конструктор объявляется сразу после имени класса.
public class BankAccount(string accountID, string owner)
{
public string AccountID { get; } = accountID;
public string Owner { get; } = owner;
public override string ToString() => $"Account ID: {AccountID}, Owner: {Owner}";
}
Подробнее о релизе C# 12 здесь.
А о том, как добавить поддержку спред оператора для кастомных коллекций описывается тут.