• Почему разработчики на Java более востребованы, чем разработчики на C#?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    Шарпы и ява где то на уровне , подколки с обоих сторон насчёт ущербности языка есть . Например скачайте оракл jdk. Ява субъективно жрет память шарпы сейчас подтянулись причём это сейчас около 5 лет. Тут и Юнити и хамарин и нет коре 3 который скоро станет 5. Хорошую поддержку кстати сделал джетбраин вычистил эти конюшни и сделал Котлин. В общем разница невелика.
    Ответ написан
    Комментировать
  • Почему разработчики на Java более востребованы, чем разработчики на C#?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Java
    Седой и строгий
    Чем вам так понравилась Java

    До этого я писал на Ассемблере и С. В этом сравнении Java - очень уютный и дружелюбный язык.

    Почему энтерпрайз пишется в основном на Java?

    Потому что к тому времени, как .NET стал действительно кроссплатформенным, Java уже давно захватила рынок. А корпоративный сектор перемен не любит.

    Почему джавистам больше платят?

    Потому что Java уже давно захватила рынок.
    Ответ написан
  • Почему разработчики на Java более востребованы, чем разработчики на C#?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    3. Платят больше не джавистам, а специалистам

    2. Java на текущий момент более популярный инструмент, чем C#. Думаю это так и останется в ближайшие лет 5, что будет лет через 10 - неизвестно. C# более заточен на Microsoft инфраструктуру, сервисы, менталитет. Он проприетарный. Java вроде как чуть более свободна, есть большое комьюнити которое может влиять. Правда после покупки Oracle немного подзакрутили гайки, а MS сейчас наоборот весь такой летит в опенсорс. Посмотрим.

    1. Какая разница, у каждого могут быть свои личные причины.
    Ответ написан
    1 комментарий
  • Перегрузка методов - это не более, чем синтаксический сахар?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    это точно не сахар, а чистой воды полиформизм ООП
    ваш вопрос скорее в плоскости стоит ли использовать полиформизм?
    можно нагуглить море инфы к примеру сразу на русском https://habr.com/ru/post/37576/
    ps чем пользуюсь сам, чуть ли не ежедневно
    static void print(this string s, string pfx = "", string sfx = "") => Console.WriteLine(pfx + s + sfx);
    static void print(this IEnumerable<string> sa, string pfx = "", string sfx = "") => sa.ToList().ForEach(s => s.print(pfx, sfx));
    pps ну или упрощенно
    static void print(this string s) => Console.WriteLine(s);
    static void print(this IEnumerable<string> sa) => sa.ToList().ForEach(s => s.print());
    ppps очень удобно
    using System;
    using System.Diagnostics;
    using System.Linq;
    
    namespace ff.links
    {
        static partial class Program
        {
            static void Main(string[] args)
            {
                var sw = new Stopwatch();
                sw.Start();
                "let's begin...".print();
    
                var finds = fromTypical().scan();
                "find targets is ".print(pfx, finds.Count().ToString());
                //finds.print();
                var bro = finds.Where(b => b.Contains(ffBinary));
                "find browsers is ".print(pfx, bro.Count().ToString());
                bro.print(pfx);
                var cfg = finds.Where(b => b.Contains(fflConfig));
                "find configs is ".print(pfx, cfg.Count().ToString());
                cfg.print(pfx);
                var profiles = finds.Where(b => b.Contains(ffProfileSign));
                "find profiles is ".print(pfx, profiles.Count().ToString());
                //profiles.print();
    
                profiles.buildLinks(bro.First());
                //profiles.prefsApplay();
    
                //links2start();
                sw.Stop();
                var ts = sw.Elapsed;
                $"RunTime {ts.Hours:00}:{ts.Minutes:00}:{ts.Seconds:00}.{ts.Milliseconds:000}".print();
    //#if DEBUG
    //            "press any key to continue...".print();
    //            Console.ReadKey();
    //#endif
            }
            const string pfx = "  ::> ";
        }
    }
    Ответ написан
    6 комментариев
  • Статические методы вызываются быстрее?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    Если статические методы вызываются быстрее, то, наверное, лучше всегда поля класса помечать как статик?
    боже упаси!!!
    .. ну или все таки разберитесь для начала:
    - все что статик - один экземпляр на время работы одного экземпляра программы
    - см пункт выше и включаем мозги
    Ответ написан
    1 комментарий
  • Стоит ли использовать здесь перечисления?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    программирование интересная штука - работает? не трогай!
    Мне кажется, что вместо классов здесь должны быть интерфейсы?
    в тексте вопроса
    Стоит ли использовать здесь перечисления?
    вы уж определитесь в хотелках:
    - перечисления?
    - интерфейсы?
    - и то и другое?
    .. а зачем? (с) из хорошего анекдота
    а мораль простая - если понимаете зачем? выпиливайте, тестируйте, пользуйтесь!

    ps со стороны, все это невозможно оценить без детально расписанных сценариев использования
    Ответ написан
    Комментировать
  • Стоит ли использовать здесь перечисления?

    Collin
    @Collin
    Стоит, так будет удобнее и понятнее.
    namespace TryEnum
    {
        enum DownloadType
        {
            Video, Audio, Custom, Unknown, Default
        }
        enum ForceIpProtocol
        {
            IPv4, IPv6
        }
        enum ProxyProtocol
        {
            HTTPS, HTTP, SOCKS4, SOCKS5
        }
    }


    А использовать вот так:
    5ed7670d68591771166057.png

    А по поводу интерфейсов... Интерфейсы не должны быть вместо классов; класс реализует интерфейс (выглядит синтаксис как наследование class ClassName : IClassName, но это не совсем наследование, там немножко другая реализация). И интерфейс нужен в том случае, если нужно реализовать полиморфизм в коде и/или что бы упростить доступ к публичным полям в классах, которые реализуют этот интерфейс.
    Например: у нас есть много классов с разными реализациями, но их всех объединяют одни и те же свойства (к приеру свойства public string Name ( get; set; ); public int Age( get; set; ); и тд...). Интерфейс в данном случае нужен для того, что бы через него мы получали доступ ко множественному поведению, при помощи разных классов, содержащих одноименные свойства, не плодя при этом код.

    Для наглядности:

    у нас есть метод Create(); в котором мы хотим создавать новых людей

    static void Create()
            {
                // empty...
            }


    Есть разные классы, которые создают Human и реализуют интерфейс IHuman

    class SimpleHuman : IHuman
        {
            public string Name { get; set; }
            public int Age { get; set; }
            public SimpleHuman()
            {
                Name = "Generic human...";
                Age = 20;
            }
            public SimpleHuman(string name) : this()
            {
                Name = name;
            }
            public SimpleHuman(string name, int age) : this()
            {
                Name = name;
                Age = age;
            }
        }


    class CoolHuman : IHuman
        {
            public string Name { get; set; }
            public int Age { get; set; }
            public CoolHuman()
            {
                Name = "BOB!";
                Age = 20;
            }
            public CoolHuman(string name) : this()
            {
                Name = name;
            }
            public CoolHuman(string name, int age) : this()
            {
                Name = name;
                Age = age;
            }
        }


    interface IHuman
        {
            string Name { get; set; }
            int Age { get; set; }
        }


    И теперь, благодаря реализации интерфейса в этих классах мы можем удобно использовать этот самый интерфейс, например:
    class Create
        {
            public IHuman Human { get; set; }
            public Create()
            {
                Human = new CoolHuman();
            }
            public void Hello()
            {
                Console.WriteLine("Hello, {0}. Today you are {1} years old", Human.Name, Human.Age);
            }
        }


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

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    вопрос довольно интересный. вы можете загружать синхронно, но придется дольше ждать
    загружать асинхронно очень логично. но тогда вам надо изучать доки на api
    вы часом не вот это используете?
    https://developers.google.com/api-client-library/d...

    если да, то логика примерно такая
    https://developers.google.com/api-client-library/d...
    по IDownloadProgress.Status вы узнаете когда будет 100%, но надо читать доки, возможно есть калбэк сообщающий конкретно о завершении

    если другой api, все равно - у вас в коде, для видеопотока, указан progressHandler, сделайте такой же и для аудио. когда оба отловят 100%, тогда время и объединять..
    .. еще точнее можно начинать. хотя может оказаться что какие то тайм ауты потребуются, если дисковая система не очень быстрая + загрузка в tmp, а потом копирование в целевую папку. об этом тоже надо искать инфу в доках на api. но когда отловите окончания загрузок, тайм ауты при необходимости, можно и экспериментально подбирать
    .. или там изучить подписку на файловые события https://docs.microsoft.com/ru-ru/dotnet/api/system...
    Ответ написан
    Комментировать
  • Как узнать, что асинхронный метод выполнил свою работу?

    freeExec
    @freeExec
    Участник OpenStreetMap
    Убрать await, вернуть таски и ждать их завершения - https://docs.microsoft.com/ru-ru/dotnet/api/system...

    Надо понимать, что асинхронный метод возвращает управление назад как только встретит await. Поэтому проста так вызвать два ваших метода подряд и надеяться на лучшее нельзя.
    Ответ написан
    Комментировать
  • Как узнать, что асинхронный метод выполнил свою работу?

    ayazer
    @ayazer
    Sr. Software Engineer
    async void
    вернет управление обратно, не дожидаясь выполнения асинхронного кода внутри. вам же нужно возвращать таску

    public async Task DownloadVideo1080PAsync(string path, ProgressBar progressBar, string link)
    {
        await ytClient.Videos.Streams.DownloadAsync(audioInfo, Path.Combine(newLink, $"audio.wav"));
        await ytClient.Videos.Streams.DownloadAsync(videoInfo, Path.Combine(newLink, $"video.mp4"), progressHandler);
    }
    
    public Task MergeAudioVideoAsync(string link)
    {
        return ffmpeg.ExecuteAsync($@"-i video.mp4  -i audio.wav -c:v copy -c:a aac newVideo.mp4");
    }


    ....
      await DownloadVideo1080PAsync(....);
      await MergeAudioVideoAsync(...);
    ....
    Ответ написан
    Комментировать
  • Почему в Linux приложение может удалить само себя, а в Windows нет?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer
    Когда процесс открывает файл, он открывает дескриптор на определенную структуру данных. Эта структура содержит аттрибуты файла, права доступа, информацию о том, где хранятся данные файла и так далее.

    В Win и *nix эта информация хранится в разных местах, и соответственно лок происходит по-разному.

    В POSIX системах (unix, linux, etc.) информация о файле хранится iNode, а имя файла уже ссылается на iNode.

    В Windows и DOS изначально информация о файле хранилась в структуре которая называется Directory Entry. В NTFS это немного изменилось, но подход они не меняли либо для обратной совместимости, либо не видели в этом нужды.

    Собственно отсюда исторически и выросло, что в *nix при открытии файла дескриптор указывает на iNode, а само имя файла можно при этом свободно удалять, или делать несколько имен ссылающихся на одну iNode (hard link), которые можно произвольно менять, пока "файл открыт".

    В Windows лочится непосредственно Directory Entry (или ее аналог в NTFS), следовательно его модифицировать в этот момент нельзя.

    У обоих подходов есть свои плюсы и минусы и история. Пока нет предпосылок к тому, что на Windows захотят изменить подход.
    Ответ написан
    Комментировать
  • Как объединить аудио и видео без сжатия?

    15432
    @15432
    Системный программист ^_^
    Поставьте "-c:v copy" между "-i video.mp4" и "-i audio.waw", параметр применяется на последний указанный источник.
    await ffmpeg.ExecuteAsync($@"-i video.mp4 -c:v copy -i audio.wav -c:a aac newVideo.mp4");
    Ответ написан
    Комментировать
  • Как создать экземпляр класса?

    freeExec
    @freeExec
    Участник OpenStreetMap
    Удобно рассматривать на примере массива. Вот вы пишите
    int[] buffer
    И какой же тут размер массива у нас? А никакой, массива то ещё нет, только место для его ссылки.
    И только после buffer = new int[10050000000] у вас выделяться гигабайты памяти на него, и можно будет что-то в него сохранить.
    Ответ написан
    Комментировать
  • Как создать экземпляр класса?

    DanielMcRon
    @DanielMcRon
    C# && Unity
    Adress считай пустая ссылка, а с new под неё выделяется место в памяти для дальнейшей работы
    Ответ написан
    2 комментария
  • Как сравниваются числа?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Первый различающийся бит при следовании со стороны старших разрядов (предварительно сравняв разрядность сравниваемых чисел).
    Ответ написан
    Комментировать
  • Как поменять элементы массива местами?

    Collin
    @Collin
    Вы описали алгоритм сортировки пузырьком.

    Его реализация:

    int[] array = new[] { 1, 2, 3, 4, 5 };
    int temp;
                for (int i = 0; i < array.Length-1; i++)
                {
                    for (int j = i + 1; j < array.Length; j++)
                    {
                        if (array[i] > array[j])
                        {
                            temp = array[i];
                            array[i] = array[j];
                            array[j] = temp;
                        }
                    }
                }


    Теперь просто примените этот алгоритм к своей конкретной задаче.
    Ответ написан
    4 комментария
  • Как поменять элементы массива местами?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    для начала - у вас в коде нет ни одного изменения самого массива ))

    далее.. в чем трудности?
    допустим мы хотим поменять пару элементов местами
    int[] array = new[] { 1, 2, 3, 4, 5 };
    var tmp = array[0];
    array[0] = array[1];
    array[1] = tmp;

    про поиск
    int[] array = new[] { 1, 2, 3, 4, 5 };
    var maxindex  = 0;
    var max = array[maxindex];
    for(var i = maxindex; i<array.Length; i++)
        if (array[i] > max)
        {
           maxindex  = i;
           max = array[i];
        }

    бонус (функциональный синтаксический сахар)
    var array = new[] { 1, 2, 3, 4, 5 };
    (array[0], array[1]) = (array[1], array[0]);
    .. и поиск
    var array = new[] { 1, 2, 3, 4, 5 };
    var (maxindex, max)  = (0, array[0]);
    for(var i = maxindex; i<array.Length; i++)
        if (array[i] > max)
           (maxindex, max) = (i, array[i]);
    Ответ написан
    6 комментариев
  • Как использовать прогресс бар?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    // предполагается что ваш сервис скачивает асинхронно, и после скачивания части файла вызывает это событие
    service.DownloadChunk += ChunkProcess;
    private void ChunkProcess(object sender, int size)
    {
        // обязательно проверьте в каком потоке обновляете UI
       // https://docs.microsoft.com/ru-ru/dotnet/framework/winforms/controls/how-to-make-thread-safe-calls-to-windows-forms-controls?view=netcore-3.1
        progressBar1.Value += size;
    }
    Ответ написан
    Комментировать
  • Как спарсить определенные элементы в xml документе?

    freeExec
    @freeExec
    Участник OpenStreetMap
    Тег sequence, не sequence name. А название и число нужно читать как его атрибуты.
    Ответ написан
    Комментировать
  • Чем пропарсить формат fb2?

    @d-stream
    Готовые решения - не подаю, но...
    Сложно в два шага пользования поисковиком попасть на официальное описание формата?
    Совершу эту магию бесплатно: http://fictionbook.org/index.php/Описание_Fictionbook
    Ответ написан
    Комментировать