• На сколько удобно писать на C# под Android?

    @SZolotov
    Asp.net core, MAUI,WPF,Qt, Avalonia
    В целом разрабатывать на Xamarin удобно.
    1. Можно открыть книгу по разработке под Android на java и копипастить примеры оттуда с минимальными доработками, с учетом языка и xamarin'a
    2. Сам язык C# более чем годен, очень активно развивается. Есть куча шарповых библиотек как платных так и бесплатных, как в репозитории пакетов так и на GitHub в виде исходников. Xamarin позволяет подцеплять нативные либы на java, если чего-то не хватает.
    3. Есть "нативный" Xamarin (Xamarin.Android, Xamarin.iOs и т.д.) - это обёртка над нативными API, UI делается привычным для нативных разработчиков способом. Есть Xamarin.Forms - там можно делать единый UI с помощью XAML. Инструмент более чем работающий, но нужно к нему привыкнуть, знать минусы, знать особенности платформ под которые разрабатывается приложение, знать что Xamarin Forms можно использовать не для всех приложений, знать как делать быстрый UI. XF - в целом готов для использования.
    4. Да, размер пакета приложения если сделать все по дефолту большой, есть куча статей по оптимизации размера приложений, но размер приложения будет больше чем у нативных.
    5. Основная проблема Xamarin Forms - не баги, размер или еще что-то. Это неправильные ожидания которые к нему предъявляются. У него своя ниша.
    Ответ написан
    4 комментария
  • Symfony3+Twig Как сделать глобальную переменную?

    @TexElless
    Backend-разработчик(преимущественно PHP и Symfony)
    Сделайте сервис, который сможет отдавать нужные вам данные по запросу нужного метода.
    И заинжектите сервис в twig.
    В config.yml:
    twig:
        globals:
            your_service: '@your_service'

    В twig можно просто дергать {{ your_service.someMethod() }}

    Немного документации.
    Ответ написан
    Комментировать
  • Как лучше спроектировать игру в Unity?

    MrMureno
    @MrMureno Куратор тега Unity
    VR for all
    [Serialized] GameObject enemy в это поле ПОДСТАВЛЯТЬ нужный префаб. Сделали 5/10/20 префабов, нужный подгрузили и подставили в поле для генерации. А вот "обертки над поведением" сделать одинаковыми. У любого врага одинаково вызывается анимация/атака/смерть.

    В чем проблема то генерить нужный префаб?)
    Ответ написан
    Комментировать
  • Как лучше реализовать клиент-серверную игру?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Как я понял: речь про баланс: контроль игрового мира <-> объём передаваемых данных по сети.
    Вопрос хороший.
    Не всегда нужно делать всё на сервере, иначе объём трафика - возрастёт дико во время игры. Но также, нельзя доверять клиентским данным.
    Поэтому, всегда делается аппроксимация: промежуточная визуализация - вычисляется на клиенте, а пришедшие на сервер данные - всегда тщательно проверяются сервером в рамках логики(модели) работы игрового мира. И если отклонения слишком велики - фиксируется "читерство", иначе - по получению новых позиций объектов, клиент плавно, но с ускорением ("параболически") устраняет расхождения с серверным игровым миром: синхронизирует актуальное состояние мира сервера с отображаемым пользователю.
    Это происходит в 99% случаев незаметно для глаз игрока за монитором.

    На сервере и на клиенте - лучше всего дублировать логику механики и синхронизировать каждые N-кадров или принудительно по каким-либо важным игровым событиям.
    Ответ написан
    Комментировать
  • Как лучше реализовать клиент-серверную игру?

    Epsiloncool
    @Epsiloncool
    Программер, веб-девелопер, гейм-девелопер
    В своих игровых проектах я использую технологию Fully Authoritative Server. В этой технологии читерство весьма затруднительно, а объём передаваемых по сети данных невелик. Вся логика выполняется на сервере, все существенные для игрового процесса решения также принимаются там. Клиент берёт на себя роль отрисовщика игрового мира (на сервере только макет игрового мира в виде данных, без графики), также на клиенте осуществляется Client Prediction (то есть предварительная симуляция), при том, что если в результате сравнения полученных данных на клиенте и сервере обнаруживается нестыковка, то используются данные, полученные с сервера.
    Ответ написан
    Комментировать
  • С чего можно начать изучение Symfony и стоит ли начинать знакомство с фреймворками именно с него?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Да, изучение фреймворков обязательно надо начинать с Симфони.
    Ларавель - попсовый фрейворк, который тоже может быть использован правильно, но рекламируется он как инструмент для "фигак-фигак - и в продакшен". Все туториалы по нему показывают, как сделать побыстрее, но этот подход выйдет боком в будущем. Ларавель для изучения - это зло.

    Симфони же сразу приучает, как делать правильно: не дает намусорить в контроллере, приучает делать хелперы без жестких зависимостей, показывает, как делать репозитории для обработки данных. Да это труднее, но избавит от больших проблем в будущем.

    При наличии готового проекта лучше всего изучать именно на этом готовом проекте. Практика в 100 раз лучше любой теории.
    Ответ написан
    2 комментария
  • Что почитать и на чем потренироваться, не могу перейти от процедурного к ооп?

    zo0m
    @zo0m
    full stack developer
    Прочтите пяток страниц из Философии Java, там вначале Эккель, на сколько я помню, граммотно разобрал этот вопрос. Помню, лет 8 назад мне помогло)
    Вот со второй страницы читайте:
    www.rulit.me/books/filosofiya-java-read-180907-2.html

    Не пугайтесь слово Java, вначале объяснения в отрыве от языков.
    Ответ написан
    Комментировать
  • Что почитать и на чем потренироваться, не могу перейти от процедурного к ооп?

    ThunderCat
    @ThunderCat
    {PHP, MySql, HTML, JS, CSS} developer
    а как доходит до объектов всё ступор. Подскажите, с чего начать?

    Для начала понять, что в объектах не так для вас?
    В целом, с точки зрения процедурщика - объект это набор функций и переменных, просто объединенный в единый код (например отдельный файл со всеми переменными и функциями обработки), относящийся к конкретному объекту реального мира. Вместо подгрузки этого файла в коде будет вызов создания объекта(например vasea = new User()), причем при создании автоматически можно что-то сделать, например вытащить из бд юзера с определенными заданными данными (например vasea = new User('vasea','pupkin')), через конструктор.
    Кроме того, т.к. код попадает в память только при создании объекта, соблюдается правило "платим только за то что используем", а не как при глобальных переменных и функциях - фигачим все, потом юзаем 1-2 функции.
    И структура - ооо, это такой кайф - все функции привязаны к конкретным объектам, если ищешь логин пользователя - идешь в пользователя и только туда, правишь 1 строку - и все сразу работает везде! Короче - нужно вникнуть и ощутить )
    Ответ написан
    Комментировать
  • Что почитать и на чем потренироваться, не могу перейти от процедурного к ооп?

    Adamos
    @Adamos
    Практика. Решайте задачи, не давая себе писать ни строчки вне объектов. Теория суха...
    Ответ написан
    3 комментария
  • Как написать структура классов платформера?

    x67
    @x67
    -взять готовый опен сорс движок и посмотреть
    -начать с чего-то попроще, постепенно усложняя задачу
    -отличать структуру классов от структуры движка, дабы не вводить себя и других в заблуждение
    Ответ написан
    Комментировать
  • Запуск Python .exe-шника с "аргументами" с помощью C#?

    GavriKos
    @GavriKos
    Я не могу никоем чудом работать с JSON на C#

    А может таки добить и начать работать? LitJSON норм, например.
    Ответ написан
    4 комментария
  • Новичок в C# / Правильно ли я написал вывод ошибки?

    arxont
    @arxont
    C# программист
    Добрый день.
    0. Блок if-else надо помещать в блок try. Так как зачем сравнивать если произошла ошибка?
    1. В вашем случае лучше использовать ReadKey, так как по условию один символ от 1 до 5.
    2. Желательно использовать блок finally, но в вашем случае не обязательно.
    3. На мой взгляд много лишних проверок

    Обработка ошибок в принципе реализована правильно, но надо помнить, что это достаточно тяжелая операция и в данном случае избыточная. В данном случае можно проверять через TryParse. Я бы решил так -

    static void Main()
    {
       int number_user1 = 0;
    
       while (true)
       {
          Console.Write("Player 1 write number from 1 to 5: ");
    
          string inputChar = Console.ReadKey().KeyChar.ToString();
    
          if(int.TryParse(inputChar, out number_user1) && number_user1 <= 5 && number_user1 > 0)
          {
             break;
           }
           else
           {
              Console.WriteLine($"\nEnter only NUMBERS from 1 to 5 (you input {inputChar})");
           }
        }
    
       Console.WriteLine($"\nYou input {number_user1}");
       Console.Write("Press any key to close"); Console.ReadKey();
    }


    Также почитайте - https://docs.microsoft.com/en-us/dotnet/standard/e...
    https://habrahabr.ru/post/221723/
    https://habrahabr.ru/post/178805/
    и
    https://stackoverflow.com/questions/14973642/how-u...
    Ответ написан
    3 комментария
  • Как в Symfony достать из Redis все ключи по тегу?

    @PapaStifflera
    Родился, вырос...
    В Redis нет типа данных "тег" из коробки. Тегирование осуществляется на уровне приложения, в Вашем случае это библиотека TagAwareAdapter. Самым простым и быстрым способом узнать как хранит связку тег-ключ эта библиотека - изучить исходный код.
    Ответ написан
    Комментировать
  • Переход с постоянки на фриланс, стоит ли игра свеч?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Русские биржи даже не рассматривайте, там для большинства заказчиков $8.5/час это уже дорого. Пробуйте мировые биржи, подтягивайте английский. Ну и готовьтесь к забегу на длинную дистанцию, прям очень быстро деньги рекой не польются.
    Ответ написан
    Комментировать
  • Можно ли написать софт для вендинг-аппарата на c#?

    EreminD
    @EreminD
    Кое-что умею
    1,5 года работал на проекте - автоматизация парковочной системы (петли, шлагбаумы, картридеры, платежные терминалы... ). Было все на .net
    Поскольку работа с самим железом напрямую у вас решена (драйвера), c# вполне подойдет
    Ответ написан
    Комментировать
  • Попросили проверить код, на что смотреть нужно?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Смотря зачем)). Я когда делаю Code Review критерии следующие:

    * Безопасность:
    - Каждый аргумент метода простого типа должен проверяться на тип в случае его проксирования и на граничные значения в случае обработки. Чуть что не так - бросается исключение. Если метод с кучкой аргументов на 80% состоит из поверки из аргументов - это вполне норм))
    - Никаких trigger_error, только исключения.
    - Исключения ДОЛЖНЫ быть человеко-понятны, всякие "Something went wrong" можно отдавать пользователю, но в лог должно попасть исключение со стектрейсом и человеко-понятным описанием, что же там пошло не так.
    - Каждый аргумент (объект) метода должен быть с тайпхинтингом на этот его класс, или интерфейс.
    - За eval как правило шлю на **й.
    - @ допускается только в безвыходных ситуациях, например проверка json_last_error.
    - Перед работой с БД - обязательная проверка данных.
    - Никаких == и !=. Со swtich - единственное исключение, по ситуации.
    - Если метод возвращает не только bool, а еще что-то - жесткая проверка с ===, или !== обязательна.
    - Никаких условий с присваиваниями внутри. while($row = ...) - тоже идет лесом.
    - Магические геттеры/сеттеры разрешаются только в безвыходных ситуациях, в остальном - запрещены.
    - Конкатенации в sql - только в безвыходных ситуациях.
    - Параметры в sql - ТОЛЬКО через плейсхолдеры.
    - Никаких глобальных переменных.
    - Даты в виде строки разрешаются только в шаблонах и в БД, в пхп коде сразу преобразуется в \DateTimeImmutable (в безвыходных ситуациях разрешено \DateTime)
    - Конечно зависит от проекта, но как приавло должно быть всего две точки входа: index.php для web и console(или как-то по другому назваться) - для консоли.

    * Кодстайл PSR-2 + PSR-5 как минимум, + еще куча более жестких требований (для начала все то что в PSR помечено как SHOULD - становится MUST)
    - В PhpStorm ни одна строчка не должна подсвечиваться (исключением является typo ошибки, например словарик не знает какой-то из аббревиатур, принятых в вашем проекте). При этом разрешается использовать /** @noinspection *** */ для безвыходных ситуаций.
    - Если кто-то говорит, что пишет в другом редакторе и у него не подсвечивается, на эти отговорки кладется ВОТ ТАКЕЕЕНЫЙ мужской половой **й и отправляется на доработку)).

    * Организация кода:
    - Никаких глобальных функций.
    - Классы без неймспейса разрешаются только в исключительно безвыходных ситуациях.

    * Тестируемость (в смысле простота тестирования) кода должна быть высокая.
    - Покрытие кода обязательно для всех возможных кейсов использования каждого публичного метода с моками зависимостей.

    * Принципы MVC:
    - Никаких обработок пользовательского ввода в моделях, от слова совсем.
    - Никаких ***ть запросов в БД из шаблонов.
    - Никаких верстки/js/css/sql-ин в контроллерах.
    - В моделях НИКАКОЙ МАГИИ, только приватные свойства + геттеры с сеттерами.
    - В моделях разрешено использовать метод save(при наличии такого разумеется) только в исключительных ситуациях. Во всех остальных - либо insert, либо update.

    * Принципы SOLD:
    - Никаких божественных объектов умеющих во все.
    - Если метод для внутреннего пользования - private, никаких public.
    - Статические методы разрешаются только в случае безвыходности.

    * Принцип DRY разрешено нарушать в случаях:
    - Явного разделения обязанностей
    - В тестах (каждый тест должен быть независимым, на сколько это возможно)

    * Работа с БД:
    - Запрос в цикле должен быть РЕАЛЬНО обоснован.
    - За ORDER BY RAND() - шлю на***й.
    - Поиск не по ключам (конечно если таблица НЕ на 5 строк) запрещен.
    - Поиск без LIMIT (опять же если таблица НЕ на 5 строк) запрещен.
    - SELECT * - запрещен.
    - Денормализация БД должна быть обоснована.
    - MyISAM не используется (так уж)) )
    - Множественные операции обязательно в транзакции, с откатом если чо пошло не так.
    - БД не должна содержать бизнес логики, только данные в целостном виде.
    - Не должно быть нецелесообразного дерганья БД там, где без этого можно обойтись.

    * Кэш должен очищаться по двум условиям (не по одному из, а именно по двум):
    - Время.
    - Протухание по бизнес логике.
    Разрешается по только времени в безвыходных ситуациях, но тогда время - короткий период.
    - При расчете ключей кэша должна использоваться переменная из конфигурации приложения (на случай обновлений кэш сбрасывается кодом, а не флашем кэш-сервера). В случае использования множества серверов - это очень удобный и гибкий инструмент при диплое.

    * О людях:
    - "Я привык писать так и буду дальше" - не вопрос, ревью пройдешь только когда поменяешь свое мнение.
    - "Я пишу в vim-е и мне так удобно" - здорово, код консолью я тоже в нем пишу)) но есть требования к коду, если в них не сможешь - не пройдешь ревью.
    - "Я скопировал этот страшный метод и поменял 2 строчки" - это конечно замечательно, но по блейму автор всего этого метода ты, так что давай без говняшек, хорошо?
    - "Оно же работает!" - вот эта фраза переводится примерно так: "да, я понимаю, что пишу полную хрень, но не могу писать нормально потому, что руки из жо", я правильно тебя понял?))
    - "У меня все работает!" - рад за тебя, а как на счет продакшна?
    - "Там все просто" - не используй слово "просто", от слова "совсем". Вот тебе кусок кода (первого попавшегося с сложной бизнес логикой), где там ошибка (не важно есть она, или нет)? Ты смотришь его уже 2 минуты, в чем проблема, там же все "просто"))

    * Всякое:
    ActiveRecord (это я вам как в прошлом фанат Yii говорю) - полное говно, примите за исходную. По факту у вас бесконтрольно по проекту гуляют модельки с подключением к БД. Не раз натыкался на то, что в тех же шаблонах вызывают save, или update (за такое надо сжигать).
    То, что используется Laravel - это печально((. Что бы выполнить требования приведенные выше, приходится "воевать" с фреймворком.

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

    UPD

    Формализировал данные критерии по ссылочке: https://github.com/index0h/php-conventions
    Ответ написан
    55 комментариев
  • Как создать общее свойство для двух классов?

    profesor08
    @profesor08
    Создать класс:
    class Entity {
       public double X = 0;
       public double Y = 0;
       public double Z = 0;
    }
    
    class Element : Entity {
      public string color = "red";
    }
    
    class Room : Entity {
      public List<Element> objects;
      public void Add(Element obj) {
        objects.Add(obj);
      }
    }
    
    class Door : Element{
      public string style = "modern";
    }
    
    class Window : Element{
      public string material = "wood";
    }
    
    Room room = new Room();
    
    room.Add(new Door());
    room.Add(new Window());
    Ответ написан
    4 комментария
  • Как сбросить Балласт создаваемый библиотекой Newtonsoft.Json c#?

    devspec
    @devspec
    Помогло? Отметь решением
    Никому она не мешает, эта dll-ка.
    Но если так уж нужно - stackoverflow.com/questions/10137937/merge-dll-into-exe
    Ответ написан
  • В чем вести проекты?

    Sanes
    @Sanes
    но нет плана

    Начните с карандаша и бумаги.
    Ответ написан
    4 комментария
  • Как правильно сделать сервис для отправки почты используя Swiftmailer?

    Austin_Powers
    @Austin_Powers
    Web developer (Symfony, Go, Vue.js)
    У Вас в конструкторе два входных параметра. При регистрации сервиса вы не передаете ни одного.
    Почитайте про arguments в сервисах. symfony.com/doc/current/service_container.html
    Ответ написан
    Комментировать