• Хорошая ли стратегия разбивать монолит джанго на микросервисы джанго?

    @romaro
    Касательно дублирования моделей.

    В свое время я сталкивался с такой же проблемой: одни и те же модели описаны в реляционной БД, в серверном коде и даже на клиенте. Соответственно, если меняем БД, нужно вносить изменения в остальные части проекта.

    В итоге остановился на том, что моделей вообще не должно быть нигде, кроме как в БД. Сейчас БД содержит метаданные, в которых описаны таблицы бизнес-логики (доменная область) и по этим метаданным клиент и сервер создают объекты, для которых раньше приходилось вручную декларировать классы моделей.

    То есть мне комфортнее работать с database first архитектурой. Но часто наоборот: модели описываются в серверном коде и переносятся в базу при помощи ORM.
    Ответ написан
    Комментировать
  • Почему не удается загрузить сборку с библиотекой контролов?

    @romaro Автор вопроса
    В общем-то проблема решается правильной настройкой платформ (они должны совпадать у библиотеки и UI-приложения):
    64e01809d79c0927205749.jpeg

    Причем в моем случае запись Platforms в манифесте не помогала до тех пор, пока я не отредактировал через окно менеджера. Файл манифеста не поменялся, но все заработало:
    <PropertyGroup>
        <OutputType>WinExe</OutputType>
        <TargetFramework>net7.0-windows</TargetFramework>
        <Nullable>enable</Nullable>
        <UseWindowsForms>true</UseWindowsForms>
        <ImplicitUsings>enable</ImplicitUsings>
        <Platforms>AnyCPU;x86</Platforms>
        <EnablePreviewFeatures>true</EnablePreviewFeatures>
      </PropertyGroup>


    Интересно понять, с чем это связано.
    Ответ написан
    Комментировать
  • Возможно ли на C# выполнить перевод криптовалюты и её трату?

    @romaro
    Вообще учет денежных транзакций — это задача бэкенда, который вы можете писать на C#. Хотя лично я сторонник того, что биллинг нужно реализовывать средствами СУБД (например, хранимыми процедурами), т.к. СУБД уже из коробки реализуют принципы ACID, без соблюдения которых работа с деньгами черевата...
    Ответ написан
    Комментировать
  • Как в Postgres запустить выражение, которое существует в виде строки?

    @romaro Автор вопроса
    Работает:
    DECLARE
        l_table_name	varchar(30) := lower(p_table_name);
    BEGIN
    	EXECUTE 'ALTER TYPE obj_name_tp ADD VALUE IF NOT EXISTS '||quote_literal(l_table_name);


    Во-первых, не было никакого смысла передавать значение переменной в качестве плейсхолдера, т.к. EXECUTE находится в области видимости блока BEGIN, в котором эта переменная задекларирована.

    Во-вторых, я пытался использовать функцию quote_ident(), которая оборачивает текст в двойные кавычки. Однако двойные кавычки (наряду с символами $$) используются для "прерывания" самого plpgsql-кода. Получалось, что я пытался вызвать ALTER TYPE без параметра, т.к. значение после EXISTS отсекалось.
    Ответ написан
    Комментировать
  • Почему не удается подключиться к Postgres(VirtualBox) из хостовой машины?

    @romaro Автор вопроса
    Проблема решилась одной строкой:
    firewall-cmd --add-port=5432/tcp --permanent

    Когда я пытался открыть порт через iptables, видимо, допустил ошибку в настройке корректного адреса. Наверное, сработало бы что-то вроде:
    iptables -A INPUT -p tcp -s 0.0.0.0/0 --dport 5432 -j ACCEPT


    В любом случае, предустановленный на Oracle Linux демон firewalld более дружелюбен для простых операций с настройкой сети, поэтому в моем случае не было особого смысла использовать iptables/nftables
    Ответ написан
  • Почему система не видит реальный размер томов после увеличения диска vdi?

    @romaro Автор вопроса
    Как подсказал Drno , необходимо увеличить размер файловой системы. Этого можно было бы добиться сразу, если бы я использовал опцию --resizefs у команды увеличения логического тома lvextend.

    Поскольку я этого не сделал, увеличить размер можно через утилиту fsadm (последним аргументом указывается новый размер, а не размер увеличения):
    fsadm resize /dev/mapper/ol_oel91-root 49G

    На самом деле --resizefs под капотом вызывает fsadm.

    Если файловая система относится к группе ext, то можно использовать более специализированную утилиту resize2fs.

    Вот здесь объяснение, почему приходится увеличивать размер фс отдельно.
    Ответ написан
  • Как правильно подтягивать данные и хранить их при переходе на страницу товара?

    @romaro
    Попробуйте посмотреть на MobX, если вам близок ООП-подход. Стейт вашей страницы товара можно оформить в виде отдельного класса, который передается в пропс компонента-обертки вашей страницы и все вложенные компоненты могут быть так же завязаны на этот стейт. При переходе на другую страницу выполняете новый запрос и обновляете поля этого класса, которые помечены как отслеживаемые для библиотеки MobX.

    Вот здесь есть примеры кода.
    Ответ написан
    Комментировать
  • Можно ли запатентовать ЯП?

    @romaro
    Я думаю, вы сможете запатентовать не язык программирования, а его компилятор.
    Ответ написан
    Комментировать
  • Насколько обременительно для кодера содержать ООО (вместо ИП или самозанятого)?

    @romaro
    Стоить будет примерно 10 тысяч в год за сервис сдачи отчетности в электронном виде + налоги, если будет доход.

    Регистрируете ООО с уставным капиталом 10 тысяч рублей. Желательно сразу взять айтишные ОКВЭДы. Назначаете себя директором и сразу уходите в не оплачиваемый административный отпуск.

    Покупаете тот же КонтурЭкстерн для сдачи отчетности. Получаете бесплатный сертификат в налоговой, чтобы эти отчетности подписывать. И вырабатываете привычку хотя бы раз в неделю заходить в личный кабинет Контура, чтобы не пропустить сроки подачи всяких СЗВ-М (там все удобно подсвечивается в таблице).

    Большинство отчетов вы будете сдавать нулевые и они легко готовятся по шаблонам.

    В общем, не так страшен черт, как его малюют.
    Ответ написан
    5 комментариев
  • Нужно ли в Dockerfile прописывать конкретные версии пакетов?

    @romaro
    Вы на самом деле сами ответили на свой вопрос:
    Через время какой-то пакет, например, libpng-dev, обновится и сломает обратную совместимость. Мы соберем контейнер ещё раз - и он работать уже не будет


    Имхо, неуправляемое обновление плохо даже в dev-версии.
    Ответ написан
    5 комментариев
  • Как отследить появление autofill-подсказок к полям формы?

    @romaro Автор вопроса
    В общем, я пока вышел из положения способом, который порекомендовал один из ответивших в этом топике:
    const onFocus = (ev: FocusEvent) => {
      (ev.currentTarget as HTMLInputElement)?.removeAttribute('readonly');
    };
    
    <input
      ...
      onFocus={onFocus}
      readOnly
     />


    То есть все мои инпуты по умолчанию readonly. Это позволяет отсекать автоподсказки при загрузке страницы, но не лишаться их при помещении курсора в поле ввода.
    Ответ написан
    Комментировать
  • Как подключить такой шрифт к проекту на WPF?

    @romaro Автор вопроса
    Установил проблемный шрифт на винду, установил его в качестве свойства для TextBlock, чтобы посмотреть, как правильно называется гарнитура. Таким образом заработало:
    <FontFamily x:Key="BR">pack://application:,,,/Resources/#Overpass Mono Medium</FontFamily>
    Ответ написан
    Комментировать
  • Почему не удается сменить слушающий порт в контейнеризированном Postgres?

    @romaro Автор вопроса
    Решение было на поверхности. При установке Постгреса на Винду его драйвер занял порт 5433 (видимо я в момент установки уже использовал 5432 для подключения):
    62f424d551d68071028505.jpeg
    62f4250711b39620833364.jpeg

    Поэтому ошибка пароля была честной: я тупо ломился в базу на хостовой машине.
    Ответ написан
    Комментировать
  • Почему могут не подгружаться шрифты?

    @romaro Автор вопроса
    Причина все-таки в некорректном объявлении @font-face. Вместо:
    font-family: "Overpass Mono", monospace;

    Нужно указать одно семейство:
    font-family: "Overpass Mono";

    Я не знаю, является ли мой вариант синтаксически корректным, но, видимо, он обрабатывается браузером в пользу уже имеющегося на компьютере пользователя шрифта.

    P.S. Мой вариант без ведущего слеша (так генерирует вебпак по умолчанию), работает исправно.
    Ответ написан
  • Какие требования к Партнеру(Посреднику), для приема платежей, от моих Клиентов внутри РФ?

    @romaro
    В РФ есть спец. налоговый режим для самозанятых, налог всего 4%, но есть лимиты (общая сумма поступлений не более 2,4 млн рублей в год). То есть принимать ваши платежи от физиков не проблема. Вывод чуть сложнее, но если делать через крипту, то не намного.

    О каких примерно суммах идет речь?
    Ответ написан
    1 комментарий
  • Как достать из массива определенные ячейки, к примеру по ID?

    @romaro
    Может так?
    select price form prices where id in (1, 2, 3 ...)

    Или подзапросом:
    select price form prices where id in (select id ...)
    Ответ написан
    Комментировать
  • Как можно удалить запись из Postgres через некоторое время?

    @romaro
    Если вы хотите обойтись средствами Пайтона, то вроде есть аналоги setInterval. Вы просто пишите функцию, которая срабатывает, например, раз в 10 минут и удаляет по выборке:
    cursor.execute('DELETE FROM user_info WHERE <Ваше условие>)
        connection.commit()


    Либо установите расширение для Постгрес вроде этого (у PG нет встроенного планировщика).

    Вам так же будет полезна эта статья.
    Ответ написан
    Комментировать
  • Sequence postgres?

    @romaro
    Вам, скорее всего, нужно в Постгресе поменять тип колонки id с int на serial (это аналог оракловых последовательностей). И не передавать при создании новой записи id, пусть его генерацией занимается субд.

    Или попробуйте обновить модель:
    /**
         * @var null
         * @ORM\Id()
         * @ORM\GeneratedValue()
         * @ORM\Column(name="id", type="serial", nullable=false)
         */
    Ответ написан
  • Как повернуть даные?

    @romaro
    Может так?

    interface ILaska {
        genres: {}[];
        '<prototype>': {};
    }
    Ответ написан
    Комментировать
  • Что такое Pipe и Guard в Nest JS?

    Комментировать