Задать вопрос
  • Навигация по pgAdmin 4, просмотр записей таблиц?

    @mezhuev
    Системный администратор
    Через контекстное меню таблицы:
    4038b3f76392a2db5481262932949bcf.png
    Ответ написан
    5 комментариев
  • C# и OutOfmemoryExtension - как перейти на полноценные 64х?

    Ну без кода сказать в чём конкретно проблема нельзя, но вот пара советов:

    1. Убедись что Target platform у тебя x64 (Но вообще, если у тебя dotnet core, то он и так и так не будет упираться в 4гб)
    2. Убедись, что где-то в недрах у тебя не выделяется массив более чем на int.MaxValue элементов (внутри словарей массив, если мне память не изменяет)
    3. Убедись, что это ошибка именно из рантайма приходит, а не выкинуто где-то явно
    4. Попробуй как-нибудь разделить свои данные, чтобы для их хранения не требовался непрерывный кусок памяти.
    5. Если ты используешь net framework, а не net core, то тебе нужно в конфиге явно указать, что ты хочешь создавать объекты более 2гб размером.
    https://docs.microsoft.com/en-us/dotnet/framework/...

    VS2022 и так x64, да и даже если бы была х32, как в 2019 - это бы не повлияло на само приложение.
    Ну и возьми dotMemory, чтобы продиагностировать проблемы в работе с памятью.
    Ответ написан
    7 комментариев
  • (Вопрос для андроид гуру)Почему не сворачивается шторка при нажатии на кнопку в кастомной нотификации?

    twobomb
    @twobomb Автор вопроса
    Разобрался! Отвечу сам на свой вопрос, может кому понадобится.
    Чтобы установить событие на свои кнопки в своей кастомной Big Notification. Следует использовать такую конструкцию.
    Intent tt = new Intent(this, SettingsActivity.class);
                        TaskStackBuilder ss = TaskStackBuilder.create(this);
                        stackBuilder.addParentStack(MainActivity.class);
                        stackBuilder.addNextIntent(tt);
                        PendingIntent rr = stackBuilder.getPendingIntent(
                                0, PendingIntent.FLAG_UPDATE_CURRENT);
                        expandedView.setOnClickPendingIntent(R.id.notif_btn_settings, rr);
    //notif_btn_settings - ид Кнопки, expandedView это мой RemoteViews

    Обязательно стоит использовать TaskStackBuilder иначе активити будет открыватся, но шторка не закроется сама!
    Так же не нужен класс ресивер MyButtonListener, флаг FLAG_ACTIVITY_NEW_TASK и прочее...
    Ответ написан
    Комментировать
  • Почему не работает System.Text.Encoding? Ошибается на 1 символ?

    twobomb
    @twobomb
    Ну потому-что ваш генератор тупо генерирует рандомные числа от 0 до FFFF, а в UTF16 там есть определенные правила. Почитайте например в вики

    Я не вникал ну вики говорит что там есть диапазон для суррогатных пар тоесть символы которые кодируются двумя 16битными словами, тоесть 4 байтами. Крч как вариант или тупо добавить проверку в генератор чтобы если рандомное число входит в диапазон исключений D80016..DFFF16 то пропускать и генерировать другое. Или замарачиваться с этими парами, ну это будет сложнее.

    Принцип кодирования
    В UTF-16 символы кодируются двухбайтовыми словами с использованием всех возможных диапазонов значений (от 0 до FFFF16). При этом можно кодировать символы Unicode в диапазонах 000016..D7FF16 и E00016..FFFF16. Исключенный отсюда диапазон D80016..DFFF16 используется как раз для кодирования так называемых суррогатных пар — символов, которые кодируются двумя 16-битными словами.

    Символы Unicode до FFFF16 включительно (исключая диапазон для суррогатов) записываются как есть 16-битным словом.

    Символы же в диапазоне 1000016..10FFFF16 (больше 16 бит) кодируются по следующей схеме:

    Из кода символа вычитается 1000016. В результате получится значение от нуля до FFFFF16, которое помещается в разрядную сетку 20 бит.
    Старшие 10 бит (число в диапазоне 000016..03FF16) суммируются с D80016, и результат идёт в ведущее (первое) слово, которое входит в диапазон D80016..DBFF16.
    Младшие 10 бит (тоже число в диапазоне 000016..03FF16) суммируются с DC0016, и результат идёт в последующее (второе) слово, которое входит в диапазон DC0016..DFFF16.
    Ответ написан
    Комментировать
  • Можно ли подменить экземпляр сервиса в DI?

    Тебе нужно ещё отдельно зарегистрировать
    FakeConsumerHostedServiceLogger
    Как самого себя
    Ответ написан
    Комментировать
  • Что это такое, и как его убрать?

    SilenceOfWinter
    @SilenceOfWinter
    та еще зажигалка...
    color: #fff !important;
    Ответ написан
    Комментировать
  • Как отслеживать изменение класса Jquery?

    MutationObserver вам в помощь
    Ответ написан
    Комментировать
  • Как скопировать статическое поле класса?

    Griboks
    @Griboks Куратор тега C#
    А где код самого теста? Почему он не может получить доступ? Что вы подразумеваете под копированием? Копия ссылки, списка или его элементов?
    Ответ написан
    4 комментария
  • Откуда берется новая таблица после переопределения IdentityRole?

    @oleg_ods
    У ApplicationUser и ApplicationRole связь many-to-many. Для ее обслуживания создается дополнительная таблица.

    Если хотите использовать для связи таблицу UserRoles это надо указать явно.

    Пример из документации:

    internal class MyContext : DbContext
    {
        public MyContext(DbContextOptions<MyContext> options)
            : base(options)
        {
        }
    
        public DbSet<Post> Posts { get; set; }
        public DbSet<Tag> Tags { get; set; }
    
        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Post>()
                .HasMany(p => p.Tags)
                .WithMany(p => p.Posts)
                .UsingEntity<PostTag>(
                    j => j
                        .HasOne(pt => pt.Tag)
                        .WithMany(t => t.PostTags)
                        .HasForeignKey(pt => pt.TagId),
                    j => j
                        .HasOne(pt => pt.Post)
                        .WithMany(p => p.PostTags)
                        .HasForeignKey(pt => pt.PostId),
                    j =>
                    {
                        j.Property(pt => pt.PublicationDate).HasDefaultValueSql("CURRENT_TIMESTAMP");
                        j.HasKey(t => new { t.PostId, t.TagId });
                    });
        }
    }
    
    public class Post
    {
        public int PostId { get; set; }
        public string Title { get; set; }
        public string Content { get; set; }
    
        public ICollection<Tag> Tags { get; set; }
        public List<PostTag> PostTags { get; set; }
    }
    
    public class Tag
    {
        public string TagId { get; set; }
    
        public ICollection<Post> Posts { get; set; }
        public List<PostTag> PostTags { get; set; }
    }
    
    public class PostTag
    {
        public DateTime PublicationDate { get; set; }
    
        public int PostId { get; set; }
        public Post Post { get; set; }
    
        public string TagId { get; set; }
        public Tag Tag { get; set; }
    }
    Ответ написан
    2 комментария
  • Можно ли в тернарной операции во втором операнде присваивать одной переменной значение другой?

    Сказано же по русски, что только выражения могут быть в тернарном операторе.
    Операция присваивания выражением не является.

    И вообще за подобный код, как у вас в примере, по рукам бить надо.
    Вот это лучше будет гораздо:
    countOfIteration = Math.Min(width, height);
    А если так сильно хочется тернарник, то вот:
    countOfIteration = width > height
      ? height
      : width;
    Ответ написан
    Комментировать
  • Как освободить память? Вызвать сборку мусора?

    Griboks
    @Griboks Куратор тега C#
    Да, есть неочевидный нюанс. Тело цикла или условия не считается сборщиком мусора за отдельную область видимости, поэтому не собирается после каждой итерации. Для решения этой проблемы нужно вынести тело в отдельный метод. Ручной запуск сборки не работает.

    P. S.
    Ну и держать глобальный указатель на буфер не следует, иначе сборка не сработает по понятным причинам.
    Ответ написан
    Комментировать
  • Как исправить баг при скролле?

    @dragonesis
    Это, судя по всему, кастомный скролл. Соответственно, вариант один, блокировать скролл на windows. Можно воспользоваться плагином https://www.npmjs.com/package/body-scroll-lock
    Ответ написан
    Комментировать
  • В какой последовательности правильно подключать скрипты и стили?

    wapster92
    @wapster92 Куратор тега CSS
    Сначала корневую библиотеку, потом плагин. Относительно как подключать конфигурацию, обычно в документации к такому плагину есть описание и нет однозначного ответа, так как это зависит как написан плагин.
    Стили: сначала общие потом твои. Зависимость от того, что ты подключаешь допустим, если ты используешь bootstrap сначала его, потом в сети нашел какую-то тему для bootstrap, то ее уже после основной. Все что ниже перезаписывает верхние грубо говоря.
    Ответ написан
    6 комментариев
  • В какой последовательности правильно подключать скрипты и стили?

    suffix_ixbt
    @suffix_ixbt
    https://www.babai.ru/
    Я у себя собрал все (вообще все) скрипты и стили в all-script.js и all-css.css и мало того что поместил в head - я ещё по preload засылаю их http/2 server push-ем.

    Плюсы - у пользователя один раз закачалось / закешировалось и затем весь сайт "летает"
    Минусы - в сжатом виде эти два файла относительно большие получились - 80 и 90 Кb, PageSpeed от Гугла ругается что часть скриптов и стилей не используются в видимой области и якобы это ай-яй-яй - но учитывая общую оценку в 95 мобильный / 100 декстоп я на эту ругань и внимание не обращаю.
    Ответ написан
    Комментировать
  • Зачем задавать приватный модификатор доступа для свойств класса?

    Maksclub
    @Maksclub Куратор тега PHP
    maksfedorov.ru
    У вас очень логичный вопрос на счет сеттера: сеттер полностью уничтожает задумку с инкапсуляцией. Правильно это называется "семантическое нарушение инкапсуляции" — то есть как-бы мы инкапсулировали, но по факту назад открыли прямую запись в свойство напрямую. Все доводы "ну мы можем в сеттере валидировать" не корректны

    Правильным способом будет не использовать сеттеры. Вот моя статья на эту тему:
    https://habr.com/ru/post/469323/

    Более подробно: каждый класс нужно проектирвовать так, чтобы данные внутри были максимально связаны. Например каждый метод работать должен в хорошем случае с максимальным числом полей класса, тогда у него высокий cohesion... В тоже время снаружи наужно работать с максимальн омалым числом метода, тогда будет низкая связанность (coupling). Это пара принципов из GRASP.
    Когда вы делаете сеттеры и геттеры, то у вас данные внутри между собой почти никак не взаимодействут: с геттером работают снаружи, с сеттером работаю снаружи — весь класс нараспашку, а в нем в 100% случаев появляются данные, которые вместе не должны находиться и никак не связаны — анрушена и абстракция и инвариант и много чего еще...

    Про инвариант отдельно: например есть платеж, у него есть значение, с которым платеж инициирвоан (initValue), есть значение холда (holdAmount) и есть значение чарджа на списание (chargeAmount)
    Когда вы работаете с платежом, контролируя ивнариант в самом классе, то ваш каждый метод првоеряет др значения и позволяет перейти к др состоянию... методов будет 2-3, все инкапсулировано и безопасно.

    Например:
    class Payment {
         pub func charge(amount int) void {
              if (this.holdAmount < amount && this.initAmount < amount) {
                   throw new PaymentException('Unavailable charge amount')
              }
    
               if (this.status === PaymentStatus:finish) {
                   throw new PaymentException('Payment already fisnished')
              }
    
              this.chargeAmount = amount
              this.holdAmount -= amount
              this.status = PaymentStatus:finish
         }
    }


    Тут в одном методе полные проверки и класс сам контролирует все состояние внутри, также соблюдается закон Деметры. У даннго кода высокий cohesion (из GRASP), тк внутри идет плотная работа с внутр данными (значит они корректно тут закроекны) и низкий coupling ( с теми данными для данного кейса только один метод работы, все внутри)

    Когда вы раскроете сеттерами и геттерами, то ваше состояние становится непредсказуемо и полагается только на то, что снаружи точно подумали об инварианте (нет)
    Ответ написан
    18 комментариев
  • Как правильно поместить JS в html.push?

    @FKV
    Просто добавтье в конец вашего js файла строку
    document.addEventListener('DOMContentLoaded',function(){let a=document.querySelector('[value="4285958269"]'),b=document.querySelector('[value="56132132"]');a.addEventListener("change",function(){b.checked=a.checked})})
    Ответ написан
  • Файл .sln visual code как используеться?


    Visual Code

    Что это вообще такое? Впервые слышу.
    Может Visual Studio?

    Вообще по моему опыту - sln сейчас используется исключительно в dotnet - там он позволяет с группировать несколько единиц компиляции (проектов) в одном "решении".
    Сами проекты могут быть написаны на C#, F#, VB.NET, или C++/CLI (не путать с обычным C++), и в теории могут быть прикручены любые проекты, которые собираются через msbuild.

    Ну и в контексте дотнета такой sln файл может потребляться не только большой студией, но и Rider-ом и VSC (с соответствующим плагином), и различными инструментами командной строки (в частности - dotnet SDK)
    Ответ написан
    9 комментариев
  • Как в Javascript сравнить две даты?

    SPAHI4
    @SPAHI4
    реактовцы - это не девы, а прокидыватели пропсов
    Если даты в формате ISO, то
    new Date('2011-10-10T14:48:00') > new Date('2011-10-10T10:48:00'); // true
    Ответ написан
    1 комментарий
  • Как посчитать префиксные суммы для определённого свойства в массиве объектов?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Собрать новый массив:

    const newArr = arr.reduce((acc, n) => (
      acc.push({ ...n, fractionTotal: n.fraction + (acc.at(-1)?.fractionTotal ?? 0) }),
      acc
    ), []);
    
    // или
    
    const newArr = arr.map(function({ ...n }) {
      n.fractionTotal = this[0] += n.fraction;
      return n;
    }, [ 0 ]);

    Изменить существующий:

    arr.forEach((n, i, a) => n.fractionTotal = n.fraction + (i && a[i - 1].fractionTotal));
    
    // или
    
    arr.reduce((acc, n) => n.fractionTotal = acc + n.fraction, 0);
    Ответ написан
    1 комментарий
  • Какой оптимальный вариант вставки значений в форму?

    @ildar-meyker
    Ну если это какой-то обычный проект не на React или т.п., то ваше решение вполне себе годное и типичное. Если полей много, ну в целом это можно сделать так:

    const form1 = document.getElementById('form-1');
    const form2 = document.getElementById('form-2');
    
    const formData = new FormData(form1);
    for (const [key, value] of formData) {
      form2.querySelector(`[name="${key}"]`).value = value;
    }


    + правки для чекбоксов там и прочего, что требуется.
    Ответ написан
    1 комментарий