• Имеет ли смысл использовать асинхронные вызовы в консольных программах Don net core, если алгоритм обработки последователен?

    @none7
    Асинхронность в C# это кооперативная многозадачность. Если многозадачность внутри процесса не нужна, то и асинхронность тоже. Наоборот будет немного медленнее работать и жрать чуть больше памяти. Когда синхронная задача ждёт данных, она не занимает процессорное время. Поток уходит в ядро ОС и диспетчер потоков переключается на другой поток или уводит процессорное ядро в режим ожидания.
    Ответ написан
    Комментировать
  • Большая ли вероятность найти удалённую работу в SEO?

    artzolin
    @artzolin
    php, WordPress разработка сайтов artzolin.ru
    Вероятность 50/50 — или найдете или нет
    Ответ написан
    Комментировать
  • Как решить быстрое закрытие программы?

    Casper-SC
    @Casper-SC
    Программист (.NET)
    Вот так можно написать класс сканер, который получает данные асинхронно. Использовать его можно таким образом в любом типе приложений. Например, в WPF приложение не будет зависать, если, скажем, запустить сканирование по клику на кнопке.

    Обрати ещё внимание на метод с Task.Factory.StartNew и параметром TaskCreationOptions.LongRunning. Для сканирования папок, думаю использовать стоит.
    using System;
    using System.Collections.Generic;
    using System.Threading.Tasks;
    
    namespace ConsoleApp
    {
        class Program
        {
            static async Task Main(string[] args)
            {
                try
                {
                    // Создаём экземпляр класса
                    var scanner = new Scanner();
                    // Вызываем асинхронный метод Scan, метод работает
                    // какое-то время, возвращает результат.
                    var data = await scanner.Scan();
                    foreach (var item in data)
                    {
                        // Выводим на консоль.
                        Console.WriteLine(item);
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex);
                }
            }
        }
    
        public class Scanner
        {
            public Task<List<string>> Scan()
            {
                return Task.Run(async () =>
                {
                    var results = new List<string>();
    
                    for (int i = 0; i < 10; i++)
                    {
                        // Делаем правильную задержку (имитация долгой работы для примера).
                        await Task.Delay(250);
                        // Собираем данные
                        results.Add(DateTimeOffset.Now.ToLocalTime().ToString());
                    }
    
                    return results;
                });
            }
    
            public async Task<List<string>> ScanVersion2()
            {
                return await Task.Factory.StartNew(async () =>
                {
                    var results = new List<string>();
    
                    for (int i = 0; i < 10; i++)
                    {
                        // Делаем правильную задержку (имитация долгой работы для примера).
                        await Task.Delay(250);
                        // Собираем данные
                        results.Add(DateTimeOffset.Now.ToLocalTime().ToString());
                    }
    
                    return results;
                }, TaskCreationOptions.LongRunning)
                    .Unwrap() // Без этого возвращается Task<List<string>>, а не List<string>
                    .ConfigureAwait(false);
            }
        }
    }


    Стоит почитать книгу "Конкурентность в C#. Асинхронное, параллельное и многопоточное программирование"
    Скриншот сделан с видео: https://youtu.be/lh8cT6qI-nA?t=1123

    612185e7a4563153795281.jpeg
    Ответ написан
    1 комментарий
  • Брут ip. Зайти с чужого ip?

    Как вариант vps с почасовой оплатой, а так плати за прокси, других вариантов нет
    Ответ написан
    Комментировать
  • Насколько сложно создать эмулятор nes на c#?

    Смотрите сами, насколько это для вас сложно
    https://github.com/Xyene/Emulator.NES
    Ответ написан
    Комментировать
  • Почему интерпретатор php не воспринимает кириллицу?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Перед тем, как писать веб-серверы на C#, надо учиться описывать проблемы не языком домохозяек.

    Не существует такой кодировки - "кириллица". Есть конкретная кодировка, которую необходимо указать в вопросе.
    Нет такой команды в C# -"послать интерпретатору". Есть конкретная команда или действие, которое надо описать в вопросе.
    Нет такой команды - "сказать, что находится по пути". Есть конкретный код, который надо привести в вопросе.
    РНР - не посетитель в ресторане, чтобы "отказываться". Это программа. Которая либо работает, либо выдаёт сообщение об ошибке. Которое программист должен прочитать. Или по крайней мере, если не понял в нем ни одного слова, то аккуратно скопировать в свой вопрос.

    В целом РНР прекрасно работает с любыми кодировками, которые используются для отображения русских букв, даже с теми адовыми костылями, которые используются в Микрософт Виндоус с середины конца прошлого века по сей день.

    Для того чтобы убедиться в том, что РНР прекрасно работает с русскими буквами, надо создать скрипт test.php
    <?php
    header('Content-Type: text/html; charset=utf-8');
    echo hex2bin('d0bfd180d0b8d0b2d0b5d182'); 
    // текст UTF закодировн в hex чтобы избежать влияния кривых ручек тестировщика/выкрутасов Виндоус


    перейти в папку с ним
    запустить встроенный веб-сервер
    php -S localhost:8081
    и открыть в браузере адрес localhost:8081/test.php

    И после этого разбираться с тем, как своя программа на модном языке сишарп не может прочитать русские буквы.

    Судя по классической картинке, https://habr.com/en/post/147843/ где-то происходит перекодирование utf-8 -> 866(!)
    Ответ написан
    1 комментарий
  • Есть ли смысл в закупке ссылок?

    Мое имхо - нет.
    И не потому что ссылки не работают, они до сих пор являются фактором ранжирования (более заметно в google чем в яндекс), но я практически уже не закупаю ссылки вот по таким причинам:

    1. факторов ранжирования стало очень много, и роль ссылок заметно снизилась. Если раньше это был чуть ли не №1 какой важный параметр для сео, то сейчас на первых местах другие факторы. И я реально не вижу существенной отдачи от закупленных ссылок. Типа был на 10 странице - купил ссылки - стал ТОП1, такого я не наблюдаю.

    2. каталоги, форумы, профили и т.п. уже всё, почти не дают отдачи.

    3. мусорных площадок стало так много, что копание в них отнимает много времени. Да, есть сервисы, помогают массово тестировать, в блоге писал как это делать https://moytop.com/prodvizhenie-sajtov/kak-pokupat..., но всё равно каждую приходится перепроверять руками, тратится куча времени на поиск действительно толкового донора.

    4. цены на качественные ссылки поднялись, если раньше можно было покупать вечные ссылки за 200-300р с незаспамленных сайтов, то сейчас я дешевле 800-1000р найти могу только шлак, даже на известных биржах, типа GGL и Миралинкс, рейтинг бирж ссылок тут - https://moytop.com/prodvizhenie-sajtov/rejting-bir..., поэтому возникает большой вопрос - то ли вкидывать в ссылки десятки и сотни тысяч, то ли вложить их в развитие сайта, рекламу, соцсети и т.п. Ибо сейчас уже в ссылки придется вкладывать больше.


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

    AlexanderYudakov
    @AlexanderYudakov
    C#, 1С, Android, TypeScript
    Решил размяться.

    Вот шина:
    MessageBus.cs

    using System;
    using System.Collections.Generic;
    using System.Diagnostics;
    using System.Threading.Tasks;
    
    namespace SimpleMessageBus
    {
        /// <summary>
        /// Рассылает события заинтересованным подписчикам
        /// в рамках одного приложения.
        /// </summary>
        /// <remarks>Используются WeakReference, чтобы не было утечек памяти
        /// на случай, если кто-то забудет отписаться. Поэтому не рекомендуется
        /// использовать лямбда-обработчики событий.</remarks>
        public static class MessageBus
        {
            private static readonly Dictionary<string, List<WeakReference<Action<string, object>>>> Subscribers =
                new Dictionary<string, List<WeakReference<Action<string, object>>>>();
    
            /// <summary>
            /// Оформляет подписку на событие
            /// </summary>
            /// <param name="topic">Тип события</param>
            /// <param name="handler">Подписчик</param>
            public static void Subscribe(string topic,
                Action<string, object> handler)
            {
                if (String.IsNullOrEmpty(topic))
                    throw new ArgumentNullException(nameof(topic));
    
                if (handler == null)
                    throw new ArgumentNullException(nameof(handler));
    
                List<WeakReference<Action<string, object>>> handlers;
                lock (Subscribers)
                    if (!Subscribers.TryGetValue(topic, out handlers))
                        handlers = Subscribers[topic] = new List<WeakReference<Action<string, object>>>();
    
                lock (handlers)
                    handlers.Add(new WeakReference<Action<string, object>>(handler));
            }
    
            /// <summary>
            /// Отменяет подписку на событие
            /// </summary>
            /// <param name="topic">Тип события</param>
            /// <param name="handler">Подписчик</param>
            public static void Unsubscribe(string topic,
                Action<string, object> handler)
            {
                if (String.IsNullOrEmpty(topic))
                    throw new ArgumentNullException(nameof(topic));
    
                if (handler == null)
                    throw new ArgumentNullException(nameof(handler));
    
                List<WeakReference<Action<string, object>>> list;
                lock (Subscribers)
                    if (!Subscribers.TryGetValue(topic, out list))
                        return;
    
                lock (list)
                {
                    var i = 0;
                    while (i < list.Count)
                    {
                        var reference = list[i];
                        if (!reference.TryGetTarget(out var target))
                            list.RemoveAt(i); // Заодно очищаем список от мертвых подписчиков
                        else if (target == handler)
                        {
                            list.RemoveAt(i);
                            return;
                        }
                    }
                }
            }
    
            /// <summary>
            /// Оповещает подписчиков о наступлении события
            /// </summary>
            /// <param name="topic">Тип события</param>
            /// <param name="data">Данные события</param>
            public static void Publish(string topic, object data = null)
            {
                if (String.IsNullOrEmpty(topic))
                    throw new ArgumentNullException(nameof(topic));
    
                List<WeakReference<Action<string, object>>> list;
                lock (Subscribers)
                    if (!Subscribers.TryGetValue(topic, out list))
                        return;
    
                var handlers = new List<Action<string, object>>();
                lock (list)
                {
                    var i = 0;
                    while (i < list.Count)
                    {
                        var reference = list[i];
                        if (!reference.TryGetTarget(out var target))
                            list.RemoveAt(i);
                        else
                        {
                            handlers.Add(target);
                            ++i;
                        }
                    }
                }
    
                // В Unity вызывать обработчики событий, наверное,
                // нужно как-то так:
                UnityEngine.WSA.Application.InvokeOnAppThread(() =>
                // А в обычном консольном приложении так:
                // Task.Run(() =>
                {
                    foreach (var handler in handlers)
                    {
                        try
                        {
                            handler.Invoke(topic, data);
                        }
                        catch (Exception ex)
                        {
                            Debug.WriteLine(ex);
                        }
                    }
                }, false);
            }
        }
    }


    Вот пример использования:
    using System.Diagnostics;
    using System.Threading.Tasks;
    
    namespace SimpleMessageBus
    {
        public static class Program
        {
            public static async Task Main(string[] args)
            {
                Debug.WriteLine("Started.");
    
                MessageBus.Subscribe("Rain", RainHandler);
                MessageBus.Publish("Rain");
    
                await Task.Delay(100); // Ждем, пока событие поступит
                MessageBus.Unsubscribe("Rain", RainHandler);
                
                Debug.WriteLine("Finished.");
            }
    
            private static void RainHandler(string topic, object data)
            {
                Debug.WriteLine("Event: " + topic);
            }
        }
    }


    P.S. Бесплатно. Опенсорс.

    Upd. Добавил вызов UnityEngine.WSA.Application.InvokeOnAppThread() — все-таки у нас целевая платформа Unity.
    Ответ написан
    1 комментарий
  • Как работать c CSS стилями?

    AlexNest
    @AlexNest
    Работаю с Python/Django
    На продакшене обычно все хранится в одном файле, а при разработке, если нет своих предпочтений - присмотритесь к БЭМ, и его Сборка
    (К слову, он охватывает далеко не только структуру файлов, но и код в целом)
    Ответ написан
    Комментировать
  • Docker и CI/CD: как все-таки происходит этот магический деплой?

    gbg
    @gbg
    Любые ответы на любые вопросы
    Общее в CI/CD - это идея, данный набор практик закрывает вопросы 2 и 3 из теста Спольски

    То есть, в данном случае, важна идея, а не конкретный путь к ее реализации (делать это через Доскер или через развертываение VM, использовать для этого вязанку батников или монстра вроде TeamCity - это уже частности - важно, что нажатие одной кнопки приводит к появлению где-то полностью собранного с нуля и развернутого актуального билда Продукта)
    Ответ написан
    Комментировать
  • Какая панель управления лучше: Cpanel или ISPmanager?

    karabanov
    @karabanov
    Системный администратор
    Ты от этих панелей пострадаешь. Вместо того, чтобы решать возникшие проблемы, ты будешь придумывать, как это сделать с помощью панели, таким образом, решать придётся две проблемы.

    Используй Ansible - это просто, удобно, эффективно.
    Ответ написан
    2 комментария
  • Какая панель управления лучше: Cpanel или ISPmanager?

    @Drno
    Консоль)
    Ответ написан
    Комментировать
  • Какая панель управления лучше: Cpanel или ISPmanager?

    Zoominger
    @Zoominger Куратор тега Системное администрирование
    System Integrator
    Та, к которой вы привыкли.
    Если не работали с ними, то киньте монетку.
    Ответ написан
    8 комментариев
  • Почему Visual Studio не видит using?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    авто сгенерированный шаблон - 1 строка кода, над ней камент (кликабельно)
    8yY3JG0.png


    а в студии 2019 все было традиционно, что означает у вас либо текст битый, либо пути битые, либо в настройках чего перемудрили
    Ответ написан
    Комментировать
  • Можно ли подключить SSD M.2 на горячую?

    Zoominger
    @Zoominger Куратор тега Компьютеры
    System Integrator
    Да, можно. M2 - это PCI, а он предусматривает "горячее подключение".
    Поэтому на разъёме M2 контакты разной длины, приглядитесь.
    Ответ написан
    2 комментария
  • Как fps влияет на игру?

    RiseOfDeath
    @RiseOfDeath
    Диванный эксперт.
    Технически он может увидеть как вы парочкой пикселей виднеетесь из-за угла на 20мс раньше, чем вы его (сомневаюсь что это на что-то повлияет). Непосредственно на "Игровой процесс", как мне кажется, больше влияют интернет и инпут лаги.
    Тут скорее разница в том, что картинка вцелом будет выглядеть "естественнее", более плавной и т.п.

    Очень заметна разница между, например, 25 и 30 фпс, на примере разлетающихся при взрыве предметов (личное наблюдение)
    Ответ написан
    Комментировать
  • Терминология: почему контейнеры называют микросервисами?

    inoise
    @inoise
    Solution Architect, AWS Certified, Serverless
    Нет, контейнер может содержать и монолит и группу сервисов, но это «не принято в приличном обществе».

    Задача контейнеризации - повторяемость и изоляция среды исполнения

    Задача микросервисов - изоляция доступа по контракту и независимый цикл разработки/деплоймента
    Ответ написан
    Комментировать
  • AMD или Intel для программиста и (иногда) игрока?

    Melkij
    @Melkij
    PostgreSQL DBA
    иногда есть фризы, например, если открыть пхпшторм, который я уже 2 часа не открывал, или резко перейти с него на фотошоп

    Внимательно посмотрите на свой swap.

    Процессору глубоко фиолетово на переключения активных задач. У него и так постоянные смены контекста по много тысяч раз в секунду. Потому что даже системных процессов запущено больше чем существует ядер.
    Ответ написан
    4 комментария
  • AMD или Intel для программиста и (иногда) игрока?

    AMD или Intel для программиста и (иногда) игрока?

    Пофиг.

    Все меряются циферками частоты и попугаями в синтетических тестах, но все равно производительность между этими сабжами больше субъективное, если не брать в расчет конкретные модели или конкретные цены при покупке.

    P.S.
    в первом 100 вкладок, во втором 50

    А вы в этом ориентируетесь? 100 вкладок в теории можно конечно увидеть на ультраширокоформатном мониторе, но искать нужную (да, сейчас есть поиск по вкладкам, но все же) выглядит нереалистичым. Когда число открытых вкладок приближается к таким порогам, я обычно выбираю "закрыть все вкладки слева/справа" и наслаждаюсь свободной оперативкой в свое удовольствие
    Ответ написан
    2 комментария
  • C# как повесить событие mousemove на экран?

    AxisPod
    @AxisPod
    Копайте в сторону Mouse Capture и не слушайте про всякие хуки. Данный механизм позволит ловить события мыши, даже если мыша не в фокусе вашего окна.

    К примеру https://msdn.microsoft.com/ru-ru/library/ms171545(...
    Ответ написан
    Комментировать