• Как получить атрибуты элементов при десериализации Excel XML файла?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    У Worksheet - нет неймспейса. В свойстве Namespace атрибута XmlRoot для соответствующего класса поставь пустую строку (null не работает)

    [XmlRoot(ElementName = "Worksheet", Namespace = "")] /* Вот тут */
    public class Worksheet
    {
        [XmlAttribute(AttributeName = "Name", Namespace = "urn:schemas-microsoft-com:office:spreadsheet")]
        public string Name { get; set; }
    }
    Ответ написан
    1 комментарий
  • Как исправить ошибку NullReferenceException в Unity3D?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Где инициализация moneyText?
    Ответ написан
    1 комментарий
  • В чем проблема плагинов "раскрашивания" скобок для IDE?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Слишком много разноцветных побрекушек только отвлекают.
    А если тебе нужно раскрашивать скобочки, чтобы понимать где ты находишься, то их раскрашивание это только маскирование симптомов - проблема уже в архитектуре кода
    Ответ написан
    4 комментария
  • Как правильно удалить эти коммиты?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    git revert

    1. Получаешь изменения
    2. Выполняешь git revert последовательно для каждого коммита в обратном порядке (т.е. с конца к началу), либо git revert --no-commit HEAD~10..
    3. Коммитишь это
    4. Пушишь


    т.е. примерно так

    git pull
    git revert HEAD~10..
    git commit -m "revert: newbie master push"
    git push


    Вот тут есть подробнее
    Ответ написан
    Комментировать
  • Как правильно проводить функциональное тестирование, если всё завязано через сторонний API/SOAP сервер?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    1. То что ты сейчас сделал называется инверсия зависимостей. В данном случае, ты для каждого внешнего сервиса выделил интерфейс и дополнительно к нему реализацию.
    Когда идешь таким путем, то да - получается много компонентов (в данном случае классов/файлов).

    2. У меня вопрос к разделению ответственности: зачем в свою сущность передать логин и пароль? (Далее, из предположений пишу) Причем, это пароль именно для сервисной шины, которую ты мокаешь.
    Для этого случая, предлагаю вынести все зависимости шины именно в класс реализующий интерфейс этой шины.
    В частности:
    - login и password (возможно url) станут полями EnterpriseDispatcherService - реализации твоего интерфейса шины
    - эти поля из сущности уйдут, т.к. это просто инфраструктурные вопросы и к функциональности (которую надо протестировать) не имеют отношения

    P.S. Под функциональным ты имеешь ввиду юнит-тестирование (скорее всего)
    Ответ написан
  • Почему NSFW каналы в Telegram приватны?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    На такой контент обычно не подписываются - заходят, смотрят и уходят. Сиюминутное желание удовлетворяют, т.е. воронка слабо работает.

    Для этого делают их приватными + бот который эти подписки принимает сразу же.
    А когда кто-то подписался, то не факт что отпишется (сразу), а это доп. подписчики, трафик, просмотры и проч.

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

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Форма отправляется в теле, а ты хочешь ее передать через путь.
    Тег action у form - статический, он не меняется (js тут нет), поэтому он должен быть известен с самого начала.

    Тут 2 решения:
    1. Переделывай все под js (сам все вставляй и прописывай)
    2. Измени способ передачи формы: путь статический (без параметров пути подставляемых), а форма через [FromForm]
    Ответ написан
    Комментировать
  • Есть ли вероятность, что провайдер МТС намеренно урезает скорость интернета?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Немного поискал по интернетам (раз, два, три) и, видимо, - да, урезают.
    Причем, урезают после определенного кол-ва потребленного трафика (200 Гб в примерах).
    Что касается теста скорости, то слышал, что некоторые провайдеры специально подкручивают трафик для сайтов замера скорости, по типу speedtest, поэтому разница с другим сайтом имеется (пруфов нет)
    Ответ написан
    1 комментарий
  • Как собрать такое количество интернет-магазинов в каталог?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Почему так много.
    Это агрегатор. Агрегаторы как правило используют готовый API, либо находят хаки как получить доступ к приложениям. Вот так и парсят/находят. Самих магазинов много - это не Российский рынок, а интернациональный. Грубо говоря, возьми все магазины мира и вот получишь этот рынок.

    Как собрать так много - искать и исследовать.

    Терпение и труд все перетрут, как говорится
    Ответ написан
    Комментировать
  • Как исправить ошибку no matching function to call, в чем может быть ошибка?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    В строке Matrix matr; в main неявно вызывается конструктор без аргументов. Но ты определил только конструкторы перемещения/копирования - пустого у тебя нет.
    Ответ написан
    1 комментарий
  • Видеокарта не работает без драйверов, что делать?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Судя по похожему вопросу на форуме это проблема видеокарты - биос видеокарты неправильно работает.

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

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Появилась идея алгоритма (по-моему у Кнута видел нечто подобное).
    Идея следующая:
    - Нужно сгенерировать N чисел
    - В диапазоне от L до R

    Тогда запускаем рекурсивную функцию:
    - Вход: начало диапазона (Start), конец диапазона (End), оставшееся кол-во чисел (Left)

    Тело функции:
    1. Берем следующее число из указанного диапазона = Current
    2. Уменьшаем оставшееся число на 1
    3. Вызываем эту же функцию, но с аргументами: начало диапазона = Current + 1, конец диапзона = End - Left, оставшееся число аргументов = Left - 1

    Изначально запускаем с аргументами: L, R - N, N.

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

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Используй директории для вложенности и названия будут соответствовать каталогу.

    • Attributes
      • Attributes

      • Attribute groups




    Станет

    • attributes
      • attributes

      • attribute_groups




    И в коде будешь обращаться как-то так:
    from attributes.attributes import AdminPage
    
    admin_page = AdminPage()


    Таким образом, структура проекта будет отражать структуру страниц и будет проще понять контекст
    Ответ написан
  • Как исправить запрос без агрегатной функции в Where?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Условие задачи понял так: надо найти индексы записей, которые образуют окно в котором b04 равны тем, что указаны в массиве.
    Записи могут идти в любом порядке, поэтому предположил (из примера), что они должны сравниваться в порядке indx
    with window_table as (
            select array_agg(indx) over prev_rows as indexes, 
                       array_agg(b04)  over prev_rows as vals 
            from tb 
            window prev_rows as (order by indx rows between 2 preceding and current row)
    ) 
    select unnest(indexes) 
    from window_table 
    where vals = ARRAY[60, 119, 58];
    Ответ написан
  • Как правильно тестировать базу данных в .NET?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    Решение простое - создаешь мок БД для тестов.
    1. Тест начинается - запускаешь БД и заполняешь данными необходимыми (как сказал Василий Банников можно сделать дамп с удаленными чувствительными данными)
    2. После каждого теста необходимо выполнить откат - если какие-то данные были добавлены/удалены/изменены
    3. При завершении тестирования удаляешь БД

    На мой взгляд, здесь просто много инфраструктурной работы. Полезные инструменты:
    1. Testcontainers - запускаешь БД в контейнере. Сам ей пользовался, есть много шаблонов для разных БД, чтобы с нуля не писать все. Можно также скрипт инициализации (схема, дамп) добавить - вот тебе и настройка
    2. В зависимости от фреймворка есть разные механизмы запуска кода после каждого тест-кейса. Если про xUnit, то:
      1. Тестовый класс реализует IDisposable - выполняется после каждого тест-кейса. Можно тут реализовать логику отката БД
      2. Для инициализации самого контейнера (чтобы каждый раз не запускать заново) - IClassFixture



    Также никто не отменял внешний инстанс БД использовать - просишь дба создать отдельную БД специально для тестов, просто запускать теперь параллельно не получится
    Ответ написан
    Комментировать
  • Как подружить MVC с реляционной базой данных?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    Сложные объекты, как раз могут передаваться, просто надо сделать формы другим образом. Скорее всего ты в этот asp-form передаешь всю модель. Предполагаю, что вся модель - это Address.
    Да, из вложенных сложных структур плохо создаются формы. Для решения тебе надо будет форму вручную: все поля и их связь с моделью прописывать самому. Есть шаблонные помощники (Html.EditorFor и другие) - используй их.
    Например, так (внимание, написал по воспоминаниям, может даже не компилироваться)
    @Html.BeginForm() 
    {
          <label>Страна</label>
          @Html.EditorForModel(x => x.Country)
          <label>Город</label>
          @Html.EditorForModel(x => x.City)
    }


    Кроме этого, есть пара других советов:
    1. Создай специальные DTO классы, которые будут потом отображаться в эти объекты БД.
    2. Раз ты делаешь через asp-form, то лушче добавь специальные атрибуты валидации: EmailAddress, Range и т.д.

    P.S. в 1 пункте проблема глубже, чем простой маппинг. Если делать такой подход, который показан:
    - Изменения схемы БД потребуют изменения UI
    - Клиент может передать данные, о которых он знать не должен (например, добавишь новое поле куда-нибудь и оно случайно обновится)
    Ответ написан
    2 комментария
  • Как можно сделать линию(нитку) удочки, как в майнкрафте?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Почитай про кривые безье
    Ответ написан
    Комментировать
  • Можно ли с нуля обучится программированию, используя только интернет и не тратив деньги?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Это в хабр эксперты - https://career.habr.com/experts?rid=1
    Ответ написан
    Комментировать
  • Как изменить исходный код Яндекс браузера?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Короткий ответ - никак.
    Длинный - с большими усилиями, да

    Объяснение:
    Тебе надо получить его (браузера) исходный код, но он закрыт. Движок открытый, но это не означает, что и код самого браузера открыт.
    В любом случае, всегда можно провести реверс инжинирг, декомпилировать бинарь, посмотреть ассемблер, понять что происходит, и создать свой патч.
    Ответ написан
    1 комментарий
  • Как снять частотность запроса C++ и C# в yandex wordstat?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Кода нет, но проблема возможно в URL кодирование: + и # если не кодировать будут восприниматься как ключевые/управляющие символы. На вики отдельная секция под это есть - https://ru.wikipedia.org/wiki/URL#Кодирование_URL

    ЯП, который используется не указан, поэтому просто приложу готовые строки, которые надо использовать:
    - C++ - C%2B%2B
    - C# - C%23

    Это все можно в браузере проделать: инструменты разработчика (ctrl + shift + i) -> Консоль -> encodeURIComponent('C++') -> C%2B%2B
    Ответ написан
    1 комментарий