• Как логгировать в EntityFramework штатными средствами net core?

    byte916
    @byte916 Автор вопроса
    Если кратко, то логгер, судя по всему, синглтон, а БД по умолчанию не синглтон, и из-за этого возникает описанная проблема.
    В общем, вот решение задачи.
    Вместо контекста бд пробрасываем ServiceProvider
    Startup.cs

    loggerFactory.AddProvider(new DbLoggerProvider(app.ApplicationServices));


    В логгере создаем scope и получаем из сервиспровайдера экземпляр БД
    DbLogger.cs

    using (var scope = _serviceProvider.CreateScope())
    {
       var db = scope.ServiceProvider.GetRequiredService<CuDb>();
    
       db.Logs.Add(new CheckUpDb.Log() { Date = DateTime.UtcNow, LogLevel = logLevel, Message = formatter(state, exception) });
       db.SaveChanges();
    }

    Ответ написан
    Комментировать
  • Как правильно хранить секреты C# на линуксе?

    byte916
    @byte916 Автор вопроса
    В общем, оказалось это просто
    В файле сервиса просто прописать
    Environment=KEY=VALUE
    При этом, вложенные поля отделяются двойным подчёркиванием
    К примеру, ConnectionString превращается из
    {
      "ConnectionStrings": {
        "DefaultConnection": "SomeString"
      }
    }

    в
    Environment=ConnectionStrings__DefaultConnection='SomeString'


    Либо, использовать файл с переменными EnvironmentFile
    Ответ написан
    2 комментария
  • Как связать Angular и яндекс карты?

    byte916
    @byte916 Автор вопроса
    Косяк в том, что привязанные к карте события
    this.myMap.events.add('click' function(e){...}.bind(this))

    выполнялись вне ангулара, и, хоть значение переменных изменялось, ангулар не производил ChangeDetection (и принудительный вызов
    this.changeDetection.detectChanges()
    так же не приводил к обновлению View.
    И, как я уже писал, вынесение карты в отдельный компонент, а так же попытка хранить адрес внутри объекта, и попытка менять ссылку на объект, менять стратегию на OnPush - ничего не приводило к желаемому (кажется, от безысходности я перепробовал все возможные комбинации). То ли лыжи не едут, то ли со мной что-то не так)

    Моё решение
    1. Добавить в импорт и в конструктор ссылку на ngZone
    import { ... NgZone ... } from '@angular/core';
    constructor(... public zone: NgZone ...) { ... }

    2. Выполнять функцию внутри клика внутри этой самой zone
    this.myMap.events.add('click', function (e) {
      this.zone.run(() => {
    ... // <- всё что будет написано тут выполнится внутри ангулара и его контекста, и вызовет ожидаемое изменение view
    }.bind(this));

    Подробнее можно почитать в документации, на хабре, и вообще есть миллион статей на тему ngZone.

    p.s. Angular 9.1.7, Yandex Maps на текущий момент 2.1.79
    Ответ написан
    Комментировать
  • Как исправить ошибку прыжка в этом коде?

    byte916
    @byte916
    Большая буква Т
    Time.deltaTime
    Ответ написан
    Комментировать
  • Почему компьютер не работает после сборки?

    byte916
    @byte916
    Попробовать pci post card чтобы узнать точно в каком месте зависание
    Но вообще 99% что оперативка. Нет в списке совместимой оперативы HyperX
    Ответ написан
  • Как найти в строке слово и удалить его?

    byte916
    @byte916
    Вот пять способов, как это можно сделать. Компилируется ли код - не проверял

    Возможно, самый медленный способ
    foreach (var punctuationMark in punctuation_marks)
                {
                    str = str.Replace(punctuationMark, "");
                }


    Способ через string.Split/Join
    str = string.Join("", str.Split(punctuation_marks, StringSplitOptions.RemoveEmptyEntries));


    Через StringBuilder. Проверка что это знак пунктуации идёт через char.IsPunctuation, возможно, это не то, что надо
    StringBuilder sb = new StringBuilder();
                foreach (var c in str.ToCharArray())
                {
                    if (!char.IsPunctuation(c)) sb.Append(c);
                }


    Еще через StringBuilder. Тут проверка идёт по вашему массиву
    StringBuilder sb = new StringBuilder();
                foreach (var c in str.ToArray())
                {
                    if (punctuation_marks.All(p=>p != c.ToString())) sb.Append(c);
                }


    С помощью регулярного выражения
    var regexp = new Regex(@"/\.,;:]\[<>\{}\|!\?");
                regexp.Replace(str, "");
    Ответ написан
    1 комментарий
  • Какие библиотеки есть для работы с PDF в .Net Core?

    byte916
    @byte916 Автор вопроса
    Попробовал следующие варианты

    PDFSharp – не совместим с .Net Core
    Aspose.PDF – платная
    Nreco PdfGenerator — лицензионные ограничения
    DinkToPdf – библиотека трехлетней давности, не поддерживается
    Select.HtmlToPdf — хороший вариант, но работает только под виндой и не работает под линуксом
    IronPDF - платная
    EvoPDF - платная
    EO.Pdf - платная
    Spire.Pdf - есть бесплатная версия, но не совместима с core
    OpenHtmlToPdf - старая, не совместима с core
    ExpertPdfHtmlToPdf - платная

    Продолжаю поиски
    Ответ написан
    4 комментария
  • Почему Visual studio не выдает подсказки?

    byte916
    @byte916
    Добавлением снипетов вроде как занимается решарпер. Возможно, вы его не установили или, если он установлен, требуется переустановка.
    Ответ написан
    Комментировать
  • Как моментально остановить вертикальную прокрутку страницы?

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

    byte916
    @byte916
    Если минимально изменять ваш код, то вам нужно при повторном нажатии на кнопку и до выхода из .notice each перезапускать таймер. Сделать это можно с помощью метода stop(), очистки ширины полоски и нового запуска анимации. Вот пример. Обратите внимание на строку 20-21 скрипта.
    Но вообще, я бы вам посоветовал создание полоски загрузки вынести в отдельную функцию, и вызывать её для создания и перезапуска анимации.
    А еще, я полагаю, вы пытаетесь сделать что-то вроде этого (нажмите синюю кнопку show toastr). Можете поставить там галочку Progress Bar чтобы увидеть полоску загрузки.
    Ответ написан
  • Какую взять беспроводную гарнитуру для ПК (Windows10)?

    byte916
    @byte916
    "Насколько понимаю, с bluetooth гарнитурами так или иначе такое будет " - неправильно понимаете.
    Они могут не подключиться если вы используете наушники со вторым устройством (с телефоном, например).
    Т.е. если вы поработали за компом, выключили его, подключили уши к телефону, потом отключили уши от телефона, включили компьютер. Тогда ваши наушники скорее всего к компьютеру сами не подключатся.

    Чтобы решить эту проблему - просто купите отдельные наушники для компьютера. Канал связи в переподключении после ребута роли не играет.
    Ответ написан
    Комментировать
  • Как суммировать значения из getElementById и getElementsByClassName?

    byte916
    @byte916
    Во-первых, для выкладывания кода можно пользоваться такими сервисами, как jsfiddle.net
    Во-вторых, если вы точно значете что у вас только каждого элемента только по одному экземпляру, то не обязательно проходить циклом по ним.
    В-третьих, чтобы ваши цифры были цифрами с точки зрения javascript, нужно конвертировать их в цифры (например, parseFloat)
    И тогда всё получится. Вот рабочий пример (последние две строчки - чтобы функция срабатывала при вводе текста)

    update: решение для нескольких выводимых элементов
    Ответ написан
    2 комментария
  • Нужно ли преобразовывать ссылки к валидному виду, если ссылка будет в href?

    byte916
    @byte916
    С кириллическими символами нынче проблем нет, разве что, может быть какие-нибудь старые браузеры или серверы могут некорректно с ними работать.
    А вообще эта функция в первую очередь нужна для кодирования специальных символов, например амперсанд (&), равно (=), слеш (/) итд. Их вы не передадите напрямую.
    Ответ написан
  • Сборка домашнего сервера. не понятно какой корпус выбрать?

    byte916
    @byte916
    Лучше взять такой корпус, чтобы влезли все диски.
    Кулер лучше взять подходящий под задачи сервера. Если высоконагруженный, то можно взять помощнее, если слабонагруженный, то можно взять послабее или вообще без вентилятора (если файлопомойка, например).
    Если сервер будет стоять дома, то лучше взять что-то потише, можно даже воду.
    Ответ написан
    Комментировать
  • Почему тормозят браузер и Visual Studio 2008?

    byte916
    @byte916
    Самое узкое место - оперативка, на втором месте ЦПУ.
    99% что с таким процессором у вас по материнке ограничение оперативной памяти в 4гб - жить можно, но это тоже не фонтан.
    Если денег нет, можно просто докупить памяти, но в перспективе нужно будет его апгрейдить.
    Ответ написан
    Комментировать
  • Как задать цвет числу?

    byte916
    @byte916
    Вот, например, заполнение PictureBox пикселями в один ряд
    var str = "hello world";
                var sb = new StringBuilder();
                foreach (var c in str)
                {
                    sb.Append(Convert.ToString(c, 2));
                }
    
                str = sb.ToString();
    
                var image = new Bitmap(str.Length, 1);
                
                for (var index = 0; index < str.Length; index++)
                {
                    var c = str[index];
                    switch (c)
                    {
                        case '1':
                            image.SetPixel(index,0, Color.Black);
                            break;
                        case '0':
                            image.SetPixel(index,0, Color.White);
                            break;
                    }
                }
                pictureBox1.Image = image;
    Ответ написан
    Комментировать
  • Наследование private полей?

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

    byte916
    @byte916 Автор вопроса
    В общем нашёл решение
    Поменять компонент на
    @Component({
      selector: '[app-my-component]'
    })

    И использовать
    ///some html code
    <div app-my-component>/* Some component code */</div>
    ///some other html code

    Не совсем то что надо, но подходит.
    Ответ написан
    3 комментария
  • Фильтр массива объектов?

    byte916
    @byte916
    var code = "159859";
    var name;
    var position;
    var isBreak = false;
    
    for (var arrProp in arr) {
      for (var posProp in arrProperty.positions) {
        for (var wares in posProp.wares) {
          for (var waresProp in wares) {
            if (waresProp.code ==code) {
              name = waresProp.name;
              position = posProp.position;
              isBreak = true;
              break;
            }
          }
          if (isBreak) break;
        }
        if (isBreak) break;
      }
      if (isBreak) break;
    }


    Работает везде, проблем с совместимостью не имеет.
    Ответ написан
    Комментировать