Задать вопрос
  • Брут 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
    DBA Team для вашего PostgreSQL?
    иногда есть фризы, например, если открыть пхпшторм, который я уже 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(...
    Ответ написан
    Комментировать
  • Как отражается изменения словаря на присваиваемые?

    ayazer
    @ayazer
    Sr. Software Engineer
    https://docs.microsoft.com/en-us/dotnet/csharp/lan...

    как я понимаю если я буду менять значения в Dictionary1 то они будут меняться и в 2 и 3 словарях?

    да, так как все будут ссылатся на один и тот-же объект

    но если я буду менять значения в 2 и 3 словарях они не будут затрагивать друг друга?

    будут, т.к. они будут ссылатся на один и тот-же объект

    то есть меняя значения в 2 словаре это никак не отразится на 3 словарь, я правильно понимаю?

    нет

    А то просто во недавно столкнулся с такой проблемой что присвоил один словарь другому Dictionary2 = Dictionary1 потом 1й очистил и 2й автоматом тоже оказался очищенным


    это один и тот-же словарь. просто на него ссылаются две переменные.

    те
    private Dictionary<string, ClassTest> Dictionary1  // переменная Dictionary1 типа Dictionary<> 
        = new Dictionary<string, ClassTest>(); //которая ссылается на объект Dictionary [id=1]
    private Dictionary<string, ClassTest> Dictionary2 // переменная Dictionary2 типа Dictionary<> 
        = new Dictionary<string, ClassTest>(); //которая ссылается на объект Dictionary [id=2]
    private Dictionary<string, ClassTest> Dictionary3 // переменная Dictionary3 типа Dictionary<> 
        = new Dictionary<string, ClassTest>(); //которая ссылается на объект Dictionary [id=3]
    
    //Dictionary1 -заполняем данными
    Dictionary2 = Dictionary1; //переменная Dictionary2 теперь ссылается туда-же, куда и переменная Dictionary1, 
    // т.е на Dictionary [id=1]
    
    Dictionary3 = Dictionary1; //переменная Dictionary3 теперь ссылается туда-же, куда и переменная Dictionary1, 
    // т.е на Dictionary [id=1]
    
    // a объекты Dictionary [id=2] и Dictionary [id=3] будут собраны сборщиком мусора, т.к. они больше не нужны


    UPD:

    а как мне сделать 2 словаря по типу 1го, то есть у меня есть 1й словарь шаблон, я хочу чтобы 2й и 3й словари изначально так же и выглядели (имели все те же данные), но далее данные в них менялись независимо друг от друга?


    ну например как-то так:
    var dict1 = new Dictionary<int, int>()
    {
        [1] = 2,
    };
    
    var dict2 = new Dictionary<int, int>(dict1);
    
    dict1.Add(2, 3);
    dict2.Add(2, 1);
    
    
    var log = new Action<Dictionary<int,int>>((dict) =>
    {
        Console.WriteLine(string.Join(", ", dict.Select(c => $"{c.Key}={c.Value}")));
    });
    
    log(dict1);  //1=2, 2=3
    log(dict2);  //1=2, 2=1
    Ответ написан
  • Что такого хорошего в иммутабельности?

    xez
    @xez
    TL Junior Roo
    Представьте бухгалтерскую книгу, ту что на бумаге - вот вам пример иммутабельности.
    Главные плюсы - консистентность данных и атомарность операций.
    Ответ написан
    1 комментарий
  • Фриланс: какие специальности не оккупировали "индусы"?

    @Stalinko Куратор тега Фриланс
    PHP'шник и фрилансер до мозга костей
    С таким уровнем я бы рекомендовал набраться опыта в офисе или где-то в работе по найму.
    Лезть во фриланс с нуля - это крест на своей карьере.

    Нормальные опытные люди вообще не конкурируют с индусами.
    Ответ написан
    Комментировать