Задать вопрос
  • Как правильно скрестить 3 массива в один?

    0xD34F
    @0xD34F Куратор тега JavaScript
    const merge = (key, ...arrs) =>
      Object.values(arrs.flat().reduce((acc, n) => (
        Object.assign(acc[n[key]] ??= {}, n),
        acc
      ), {}));
    
    
    const result = merge('id', arr1, arr2, arr3);
    Ответ написан
    Комментировать
  • С чего начать новичку в изучении c# для gamedev?

    Casper-SC
    @Casper-SC
    Программист (.NET)
    Для C# (пишется с большой буквы) установи cреду разработки Visual Studio Community (ссылка).

    В первую очередь тебе нужно выучить C#. Чтобы у тебя дошло до автоматизма написание кода. Первое время ты будешь сильно подвисать на каждой мелочи. Простейшие ошибки будут ставить в тупик. Наверняка, сюда задавать вопросы, что нормально. Это дело не быстрое, невозможно с полного нуля за неделю всё выучить, уйдёт от полугода. И нужно на это будет тратить много времени, желательно даже каждый день. Без знания языка и умения писать в стиле ООП простые приложения я уверен, что в Unity делать нечего.

    Рекомендую создать Решение (Solution) на C# в Visual Studio и в него добавлять проекты по темам из книги.
    Пример проектов в решении:
    Изучение C# (.sln)
    1. Переменные, циклы (.csproj)
    2. Классы (.csproj)
    3. Наследование (.csproj)
    4. Делегаты и события (.csproj)
    Только проекты называй по-английски.
    Прочитал главу, сделал примеры из книги, написал везде комментарии с пояснениями. Делай так, чтобы потом можно было вернуться к этим проектам и быстро вспомнить, что забылось. После того как ты будешь много времени тратить на обучение и чтение книги, у тебя всё лучше и лучше будут запоминаться детали языка. Именно за счёт траты большого кол-ва времени и обучения на длительном промежутке времени всё и выучится само. Я не зубрил ничего почти.

    Очень хорошее объяснение по C# здесь. Сразу скажу, уроки очень старые, но очень хорошие (там про платформу .NET Framework, но ничего нет про .NET Core, а теперь уже просто .NET (начиная с 5) и многого другого). Можно посмотреть эти уроки, после них начать читать книгу по C#, пусть из уроков много будет знакомо, но, скорее всего, в книге ты узнаешь новые детали и учить будет легче.

    Ещё такой курс более современный, его не смотрел.

    Кстати, чтобы не терять интерес, ты конечно можешь установить себе Unity, найти уроки по созданию 2D платформера, даже начать делать по урокам первую игру, но я тебе советую периодически как посидел над Unity возвращаться к книге и читать её дальше и так пока всю не прочитаешь. Я так и учил C#. Писал приложение, так как именно это было интересно, и периодически возвращался к книге.

    Алгоритмы. Можешь почитать хотя бы что-то простое для начала. Например,
    Алгоритмы. Вводный курс | Кормен Томас Х.

    https://qna.habr.com/q/848533#answer_1745621

    Книги есть такие:
    C# 9.0. Справочник. Полное описание языка (ссылка)
    Язык программирования C# 7 и платформы .NET и .NET Core | Джепикс Филипп, Троелсен Эндрю (ссылка)

    Возможно даже
    C# для чайников | Мюллер Джон Поль, Семпф Билл (здесь C# 7.0). ISBN: 978-5-907144-43-9
    Ответ написан
    7 комментариев
  • Как сделать что бы при нажатие backspace происходила запись в файл?

    var key = Console.ReadKey();
    if(key == ConsoleKey.Backspace)
      WriteDataToFile();
    Ответ написан
    Комментировать
  • Как оптимизировать сайт для PageSpeed?

    Судя по данным GPS, на что лично я бы обратил внимание в первую очередь:

    1) включите кэш браузера.
    Это делается в htaccess + на стороне хостинга должно быть включено. Проще всего если ISP панель используется. Ставьте срок 365 дней. Если лень разбираться просто напишите хостеру: прошу поставить кеш браузера для всех статических элементов (картинки, шрифты, стили и т.п.) на 365 дней. Нормальный хостер сделает бесплатно или подскажет где сделать. Если хостер ненормальный, то попробуйте сами всунуть правила в htaccess (они если погуглить - найдутся, просто их много разных вариаций, надо пробовать какие подойдут к конкретному хостингу)

    вообще это самый простой пункт обычно.

    2) Настройте подходящий размер изображений
    Тут тоже все просто - у вас фотка большая, а стоит она в мелком квадрате. Зачем? Поставьте туда мелкие фото. То есть просто сохраните их в редакторе с меньшей шириной и высотой.

    3) Удалите неиспользуемый код JavaScript - ничего вы тут толком не сделаете.
    скрин i.imgur.com/qEbmxsh.png - все скрипты что можно укажите async - вот как в первом сделано. И проверьте чтобы страница норм отображалась.

    4) рекомендую выкинуть шаринг, скрин i.imgur.com/6z5kK1d.png - им обычно уже не пользуются, а он влияет на page speed

    Хотя бы так, думаю, баллов 10-15 может дать такая штука.
    Ответ написан
    1 комментарий
  • Для каких целей используется C# на Web сайтах?

    В основном бэкенд на asp net и asp net core.
    Кто-то ещё делает фронтенд на Blazor
    Ну и ещё есть шаблонизатор - Razor

    Ну и ещё есть легаси - WebForms
    Ответ написан
    Комментировать
  • Виснет программа при зписи на диск много мелких файлов?

    @maxcad Автор вопроса
    Можно удалять тему.
    Запись производилась на диск, зашифрованный VeraCrypt. На обычные диски пишется без проблем.
    Виснет VeraCrypt, это у нее проблемы. Множественная запись мелких файлов она такая.

    Тут походу надо делать паузы , чтобы шифрованный контейнер мог отдышаться .
    Ответ написан
    1 комментарий
  • Как узнать с какими параметрами запущена програмам?

    hottabxp
    @hottabxp
    Сначала мы жили бедно, а потом нас обокрали..
    1) Звоним в спортлото, чтобы вам подключили бесплатную услугу google;
    2) Заходим в https://google.com и пишем простой запрос "c# узнать параметры запущенного приложения"
    3) Переходим по первой ссылке: Получение информации из столбца "Командная строка"...
    4) ctrl+c и ctrl+v:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Diagnostics;
    using System.Management;
     
    namespace ConsoleApplication7 {
        class Program {
            static void Main(string[] args) {
                Process[] processList = Process.GetProcesses();
                Process p = processList.Where(temp => temp.Id == 844).FirstOrDefault();
                if (p != null) {
                    GetCommandLine(p.Id);
                }
                Console.ReadLine();
            }
            public static void GetCommandLine(int id) {
                using (ManagementObjectSearcher mos = new ManagementObjectSearcher("SELECT CommandLine FROM Win32_Process WHERE ProcessId = " + id)) {
                    foreach (ManagementObject mo in mos.Get()) {
                        Console.WriteLine(mo["CommandLine"]);
                    }
     
                }
            }
        }
    }
    Ответ написан
    Комментировать
  • Насколько обширен SQL и сколько времени нужно для изучения SQL?

    Adamos
    @Adamos
    Понятно что нужна ещё и практика

    Нет. Нужна еще и теория. Но никаких глубоких экспертов от зазубривания теории вы не получите.
    А ответ ждет вас на форуме авиамоделистов:
    - Сколько нужно времени, чтобы научиться управлять самолетом так, чтобы он не разбивался при посадке?
    - Пять-шесть.
    - Чего? Дней? Недель? Месяцев?
    - Самолетов...
    Ответ написан
    Комментировать
  • CSS flex gap, откуда дополнительные px и как с ними бороться?

    Get-Web
    @Get-Web Куратор тега CSS
    Front-End Developer
    Вроде очевидно.. 200px * 5 = 1000px, ваши блоки занимают все доступное пространство, но при этом вы добавляете gap = 10px и получается 200px * 5 + 10px * 4, что в итоге больше 1000px и происходит перенос, если бы перенос был запрещен, то блоки ужались бы в случае отсутствия жадности..
    Ответ написан
    Комментировать
  • Как скомпилировать проект на C# в один .exe файл?

    Single File Application - фича современных дотнетов со времён .net Core 3
    Буквально при помощи одной опции в файле проекта или одной строкой в консоли собирает ваш проект в единый екзешник, в который ещё может быть опционально встроен рантайм.
    Вот пример csproj:
    <Project Sdk="Microsoft.NET.Sdk">
      <PropertyGroup>
        <OutputType>Exe</OutputType>
        <TargetFramework>net6.0</TargetFramework>
        <Nullable>enable</Nullable>
      </PropertyGroup>
    
      <PropertyGroup>
        <!-- Вот это самое главное -->
        <PublishSingleFile>true</PublishSingleFile>
        <!-- Это чтобы тащить за собой рантайм До .NET 6 будут рядом лежать нативные библиотеки jit-а и сборщика мусора-->
        <SelfContained>true</SelfContained>
        <!-- Это необходимо, чтобы сборщик понимал, для какой ОС нужен экзешник -->
        <RuntimeIdentifier>win-x64</RuntimeIdentifier>
        <!-- Это чтобы ускорить запуск -->
        <PublishReadyToRun>true</PublishReadyToRun>
        <!-- Эти две строки, чтобы уменьшить размер бинарника -->
        <PublishTrimmed>true</PublishTrimmed>
        <TrimMode>link</TrimMode>
      </PropertyGroup>
    </Project>

    В результате получается единственный exe, который реально можно запустить где угодно, вне зависимости от установленной версии .NET

    Для старых версий дотнета есть ILMerge и Costura.Fody, но в .net 5+ они не нужны, и я крайне советую использовать именно .NET 8, тк он сейчас самый актуальный
    Ответ написан
  • Для чего нужен атрибут aria-hidden?

    LenovoId
    @LenovoId
    svg, css,js
    Атрибут aria-hidden используется для скрытия контента для пользователей с нарушениями зрения, которые перемещаются по приложению с помощью программ чтения с экрана (JAWS, NVDA,...).

    Источник информации
    Ответ написан
    Комментировать
  • Как вывести всех родителей у подкатегории до главной категории?

    @Akina
    Сетевой и системный админ, SQL-программист.
    WITH RECURSIVE
    cte AS ( SELECT *, 1 level
             FROM category 
             WHERE id = $category_id
             UNION ALL
             SELECT cat.*, cte.level + 1
             FROM category cat
             JOIN cte ON cat.id = cte.parent_id )
    SELECT *
    FROM cte
    ORDER BY level;

    Для древних версий:
    SELECT CONCAT_WS('=>', c1.id, c2.id, c3.id, c4.id, c5.id) path
    FROM category c1
    LEFT JOIN category c2 ON c1.parent_id = c2.id
    LEFT JOIN category c3 ON c2.parent_id = c3.id
    LEFT JOIN category c4 ON c3.parent_id = c4.id
    LEFT JOIN category c5 ON c4.parent_id = c5.id
    WHERE c1.id = $category_id

    Ну соответственно подрихтовать до нужного вида выходного набора.
    Ответ написан
    4 комментария
  • Как интерпретировать информацию с TechEmpower Framework Benchmarks?

    kotomyava
    @kotomyava
    Системный администратор
    Это тесты не каких-то приложений, а ряда типичных действий реализуемых фреймворками. Вклад действий оцениваемых этими метриками в реальных приложениях не так уж велик. Т.е. выборка данных, и другая подобная работа, например, будет занимать намного больше времени в любом запросе, и будет примерно одинаковой для всех фреймворков, при реализации одинакового функционала. И эта разница, казалось бы в разы, превратится в величину близкую к погрешности измерений.
    В реальном приложении, всё будет куда больше зависеть не от фреймворка как такового, а от квалификации разработчиков, в итоге.

    К тому же, там довольно сложная методика оценки пачкой тестов и разными весами каждого из них. Это всё можно принимать в расчёт, но уж точно не стоит придавать этой информации очень уж большое значение, и тем более, делать такие прямолинейные выводы.
    Ответ написан
    1 комментарий
  • Как интерпретировать информацию с TechEmpower Framework Benchmarks?

    @deliro
    Как интерпретировать информацию с TechEmpower Framework Benchmarks?

    Никак, это почти бесполезная информация. Посмотри доклад автора fasthttp (самый быстрый на сегодня http фреймворк на golang), как они ухищряются, чтобы на этом писькометре набрать больше балов. Фактически же эти баллы мало коррелируют с тем, как на самом деле будет работать твоё приложение на фреймворке X. И уж тем более ни в коем случае нельзя думать о том, что "X быстрее Y в N раз".

    Да, в среднем на CPU задачах код фреймворка на го будет работать быстрее кода фреймворка на питоне. Но кроме CPU задач есть ещё IO задачи, которых в вебе намного больше (я бы сказал, что IO задачи занимают до 90% времени работы кода). Кроме кода фреймворка есть код библиотек и твой код, который выполняет бизнес-задачи. И это, пожалуй, единственное полезное, что может сказать этот писькометр.
    Ответ написан
    1 комментарий
  • Как создавать несколько объектов класса в цикле?

    Casper-SC
    @Casper-SC
    Программист (.NET)
    Program.cs
    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Text;
    using System.Text.Encodings.Web;
    using System.Text.Json;
    using System.Text.Unicode;
    
    namespace ConsoleApp
    {
        class Program
        {
            static void Main(string[] args)
            {
                // Чтение JSON из файла и десериализация.
                string pathToFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "PartnerData.json");
                string jsonText = File.ReadAllText(pathToFile, Encoding.UTF8);
                var parterAddressesFromFile = JsonSerializer.Deserialize<TriggerData>(jsonText);
    
                // Вывод на консоль.
                Display(parterAddressesFromFile);
    
                // Создание нового экземпляра класса TriggerData и его заполнение данными.
                var data = new TriggerData()
                {
                    PartnerAddresses = new List<PartnerAddress>()
                    {
                        new PartnerAddress()
                        {
                            Type = "Тип 0001",
                            Country = "Страна 0001",
                            Region = "Регион 0001",
                            City = "Город 0001",
                            Presentation = "Представление 0001",
                        },
                        new PartnerAddress()
                        {
                            Type = "Тип 0002",
                            Country = "Страна 0002",
                            Region = "Регион 00021",
                            City = "Город 0002",
                            Presentation = "Представление 0002",
                        }
                    }
                };
    
                // Сериализация.
                var options = new JsonSerializerOptions
                {
                    Encoder = JavaScriptEncoder.Create(UnicodeRanges.BasicLatin, UnicodeRanges.Cyrillic),
                    WriteIndented = true,
                };
                var newJsonText = JsonSerializer.Serialize(data, options);
    
                // Вывод на консоль.
                Console.WriteLine(newJsonText);
            }
    
            private static void Display(TriggerData data)
            {
                // Способ 1.
                foreach (var address in data.PartnerAddresses)
                {
                    // Внутри Console.WriteLine будет вызван метод ToString для
                    // экземпляра класса PartnerAddress, у которого этот метод переопределён.
                    // https://source.dot.net/#System.Private.CoreLib/TextWriter.cs,09da57c2c21a3a44
                    Console.WriteLine(address);
                }
    
                // Способ 2.
                //for (int i = 0; i < data.PartnerAddresses.Count; i++)
                //{
                //    Console.WriteLine(data.PartnerAddresses[i]);
                //}
            }
        }
    }


    TriggerData.cs
    using System.Collections.Generic;
    using System.Text.Json.Serialization;
    
    namespace ConsoleApp
    {
        public class TriggerData
        {
            [JsonPropertyName("партнерАдреса")]
            public List<PartnerAddress> PartnerAddresses { get; set; }
        }
    }


    PartnerAddress.cs
    using System.Text.Json.Serialization;
    
    namespace ConsoleApp
    {
        public class PartnerAddress
        {
            [JsonPropertyName("тип")]
            public string Type { get; set; }
    
            [JsonPropertyName("страна")]
            public string Country { get; set; }
    
            [JsonPropertyName("регион")]
            public string Region { get; set; }
    
            [JsonPropertyName("город")]
            public string City { get; set; }
    
            [JsonPropertyName("представление")]
            public string Presentation { get; set; }
    
            public override string ToString()
            {
                return $"{Type}, {Country}, {Region}, {City}, {Presentation}";
            }
        }
    }


    PartnerData.json файл должен быть сохранён в UTF-8 кодировке
    {
      "партнерАдреса": [
        {
          "тип": "тип1",
          "страна": "страна1",
          "регион": "регион1",
          "город": "город1",
          "представление": "представление1"
        },
        {
          "тип": "тип2",
          "страна": "страна2",
          "регион": "регион2",
          "город": "город2",
          "представление": "представление2"
        },
        {
          "тип": "null",
          "страна": "null",
          "регион": "null",
          "город": "null",
          "представление": "null"
        },
        {
          "тип": "тип3",
          "страна": "страна3",
          "регион": "регион3",
          "город": "город3",
          "представление": "представление3"
        }
    ]
    }


    ConsoleApp.csproj (.NET 5 проект)
    <Project Sdk="Microsoft.NET.Sdk">
    
      <PropertyGroup>
        <OutputType>Exe</OutputType>
        <TargetFramework>net5</TargetFramework>
      </PropertyGroup>
    
      <ItemGroup>
        <None Update="PartnerData.json">
          <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
        </None>
      </ItemGroup>
    
    </Project>


    61284df6cbd4b767243491.png
    Ответ написан
    Комментировать
  • Как взаимодействовать с iframe google captcha?

    @Ilya12345
    Через селениум случайно получилось так одну из пикч ткнуть, пока делал другую таску, копай в этом направлении или колхозь из ProBrowser.
    $iframe = $driver->findElement(WebDriverBy::xpath('//iframe[@title=\'проверка recaptcha\']'));
    $driver->switchTo()->frame($iframe);
    $driver->findElement(WebDriverBy::xpath('//div[@class=\'rc-image-tile-wrapper\']'))->click();
    Ответ написан
    3 комментария
  • Насколько актуальна информация о производительности данного бенчмарка C# vs Go?

    @12rbah
    Вот само по себе "сравнение производительности" не совсем корректная постановка вопроса,т.к. в некоторых тестах там не самые производительные языки на первом месте, поэтому нужно уточнить контекст сравнения, в какой области, допустимо ли использование стандартных общих функций и т.д.
    По нормальному нужно проверять, что код оптимизирован под определенный язык, если вы напишите похожий на разных языках, не факт, что он будет одинаково оптимизирован. Вот в нескольких тестах я нашел прямой вывод в консоль во время выполнения теста, хоть я не занимаюсь обычно написанием тестов производительности, но такие вещи в тестах это плохо, т.к. фукции вывода в консоль сильно по разному реализованы в каждом языке(//go fmt.Println(prime) //c# Console.WriteLine(prime)). И обычно они разной степени тяжести.
    UPD: в общем я хотел сказать, что в одном языке могут лучше оптимизированы одни функции лучше других, и если вы пишете приложение с использованием определенных стандартных функций, то практически есть смысл сравнивать только эти функции/модули в языках
    Ответ написан
    Комментировать
  • Насколько актуальна информация о производительности данного бенчмарка C# vs Go?

    Оценить сложно, тк для решения задач вполне могут использоваться разные алгоритмы.
    Также я не нашёл настроек рантайма для C#, так что может использоваться не самый производительный профиль.
    Также сам код выглядит подозрительно.

    Рекомендую ориентироваться на techempower - там решаются в основном задачи приближенные к реальным в веб-разработке.
    (Правда там код для .NET, который в топе, очень далёк от того что будет писаться в реальной ситуации)

    В целом C# и Go тут идут почти на равных, с разницей только в потреблении памяти.
    Ответ написан
    2 комментария
  • Как узнать, достиг ли я уровня Junior Unity Developer?

    zenikode
    @zenikode
    Unity developer
    На позицию джуна этого может и хватить в некоторых командах. Но только в некоторых. Обычно должно быть неплохое теоретическое знание программирования. алгоритмы, структуры данных, то, как работает c#, сборка мусора, система типов. Человек, по примерам людей из интернета что-то собравший, можно считать, ничего и не умеет. Это заслуга разработчиков движков, создавших интуитивно понятный продукт, которым могут пользоваться даже дети. Но пользование движком не имеет никакого отношения к разработке игр, там важны совершенно другие вещи. В некоторых командах, обычно или довольно слабых или наоборот, способных и желающих вырастить себе разработчика с ~~полного нуля~~чистого листа. Джун может тупить, делать не лучшим образом, но ДОЛЖЕН уметь слушать и непрерывно работать над собой. Учиться как надо делать и не спорить. И если не получил до этого, получать теоретические знания, без которых полноценным разработчиком не стать, даже разобрав саму юнити вдоль и поперек. Обычно джун забирает время старших коллег на свое обучение. В ГК обычно джуны не нужны, там предпочтительны люди с опытом от middle, способные взять проект (Обычно, с нетривиальной механикой. Все таки, ГК не первый год существует, и игрока уже надо чем-то удивлять и цеплять. Многие ГК игры сейчас это сложнореализуемая фича в минималистичном окруженим) и выполнить его самостоятельно в короткие сроки.
    Ответ написан
  • Как работают статические поля в C#?

    insighter
    @insighter
    -First time? - Huh? (C#, React, JS)
    У вас, что dial-up интернет или паталогическая лень? :))

    1. Значения констант применимы только на этапе компиляции сборки.
    2. Любые статические поля класса доступны (конечно, если позволяет видимость) всегда
    3. Любые не статические поля класса доступны после создании экземпляра класса

    https://ru.stackoverflow.com/questions/651231/c-%D...

    В чём польза readonly полей в C#?
    https://metanit.com/sharp/tutorial/3.3.php
    Ответ написан
    Комментировать