Задать вопрос
  • Как именовать два метода один из которых выбрасывает исключение?

    @gsaw
    "find" как бы подразумевает, что можно и не найти, а "get" имхо звучит жёстче.
    getById (Checked)
    findById (Optional)
    Ответ написан
    Комментировать
  • Как правильно настроить типизацию Comporator класса?

    @gsaw Автор вопроса
    Все дело было в "safeCompare". Он вносил сумятицу. Без него все выходит норм

    return Objects.compare(o1, o2,
                    Comparator.<Worker, String>comparing(key -> key.fio().surname())
                            .thenComparing(key -> key.fio().name())
                            .thenComparing(Worker::salary)
                            .thenComparing(Worker::hiredOn));


    Но так как у меня null значения, приходится делать так. Лучшего ничего не придумал.

    class WorkerComparator implements Comparator<Worker> {
        final static Comparator<String> safeString = Comparator.nullsFirst(Comparator.naturalOrder());
        final static Comparator<Integer> safeInteger = Comparator.nullsFirst(Comparator.naturalOrder());
        final static Comparator<LocalDateTime> safeLocalDateTime = Comparator.nullsFirst(Comparator.naturalOrder());
    
        @Override
        public int compare(Worker o1, Worker o2) {
    
            return Objects.compare(o1, o2,
                    Comparator.<Worker, String>comparing(key -> key.fio().surname(), safeString)
                            .thenComparing(key -> key.fio().name(), safeString)
                            .thenComparing(Worker::salary, safeInteger)
                            .thenComparing(Worker::hiredOn, safeLocalDateTime));
        }
    }


    Сделал под разные типы свой Comparator
    Ответ написан
  • Почему некорректно работает округление?

    @gsaw
    Все верно сделано, просто потом использовать toFixed(8) что бы конвертировать в строку. И эту строку уже использовать в API и в UI.
    Ответ написан
    Комментировать
  • Как в bat файле передать несколько команд через pipe?

    @gsaw Автор вопроса
    Ах, перерисал как

    psql -h %DBHOST% -p %DBPORT% -U %USERNAME% -d %DBNAME% -a -n ^
        -c "\copy (select * from part_manager.deltaresultstart) to '%CSVDIR%\part_manager.deltaresultstart.dump' with (format binary);" ^
        -c "\copy (select * from part_manager.vehicledataresult) to '%CSVDIR%\part_manager.vehicledataresult.dump' with (format binary);"


    Так тоже работает
    Ответ написан
    Комментировать
  • Почему sql-оператор IN (в WHERE) плох с точки зрения оптимизации?

    @gsaw
    IN(1, 2, 4) не плох, если он постоянен. А если он от запроса к запросу меняется. В одном 3 значения к примеру, IN(A, B, C) а потом в следующем 2 значения IN(Z,V) то это разные запросы и оптимизатору надо под каждый такой запрос создавать свой план выполнения. Что может притормаживать выполнение запроса.

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

    @gsaw
    Конечно смысл есть, sqllite потом и называется lite, потому что там фич кот наплакал. Цель была изначально сделать что то легковесное и встраиваемое. Короче не по назначению используется, думается мне.

    Postgresql конечно будет сложнее, но там и фич больше. Можно шардинг настроить, да и само engine может лучше запросы оптимизировать.
    Ответ написан
  • Возможно ли учить два языка программирования одновременно?

    @gsaw
    Возможно все, если есть достаточно времени.

    Сам язык познать не трудно. Трудно разобраться во все, что вокруг. Библиотеки, методики, среды. Чистый javascript и С++ никому не нужны, нужны практические навыки применения. Для этого надо много практики, теоретически это все не усвоишь. А для практики нужно время.

    Лучше сконцентрироваться для начала на чем то одном.
    Ответ написан
    Комментировать
  • Что лучше использовать Long polling или SSE?

    @gsaw
    Если данные меняются с определенным, относительно редким интервалом в 20сек. То может лучше short polling использовать. То-есть клиент в фоне опрашивает каждые 20 секунд новое местоположение? Long polling имхо лучше, когда интервалы между обновлениями данных нерегулярные. Ответ получаешь сразу как только обновились данные. А в вашем случае так ли важно знать ответ сразу. Потом выяснится еще, что пользователи будут обновлять страницу руками, так как привыкли, что надо так делать. .
    Ответ написан
  • Как сгенерировать мету для spring jpa?

    @gsaw Автор вопроса
    Поменял версию 6.0.1.Final на 5.4.33.Final и все заработало.
    Ответ написан
    Комментировать
  • Как добиться от ModelMapper-а, что бы он не обновлял аттрибуты entity-класса, которых нет в модели?

    @gsaw Автор вопроса
    Вот так, как в коде ниже все заработало. Почему то вариант приведенный в вопросе не работал и Ноды не игнорировались.
    modelMapper.addMappings(new PropertyMap<Segment, SegmentEntity>() {
                @Override
                protected void configure() {
                    skip(destination.getStartNode());
                    skip(destination.getTargetNode());
                }
            });
    Ответ написан
    Комментировать
  • Роут сразу на страницу?

    @gsaw
    Вот навскидку примеры как конфигурировать nginx и apache под SPA

    https://gist.github.com/rambabusaravanan/578df6d24...

    Идея в том, что надо все "/*" перенаправлять на само приложение. На тот же index.html с приложением. Иначе apache будет сначала проверять, есть ли файл index.html по пути /page
    Ответ написан
    Комментировать
  • Как заполнить массив числами?

    @gsaw
    ar10.filter(el => !isNaN(el)).forEach(n => ar10_res.push(n));
    Ответ написан
    Комментировать
  • Почему так странно работает basePath в next.js?

    @gsaw Автор вопроса
    Дело было в ingress контроллере и кривом конфиге. Я у себя тестировало с ingress-nginx, а на сервере был traefik. А в конфиге был установлен PrefixStrip, то-есть до бэкенда /app/v1/vamos-client не доходил, тот получал только /

    Убрал этот Strip и все заработало как и ожидалось.
    Ответ написан
    Комментировать
  • Найти работу java без опыта и образовния - невозможно?

    @gsaw
    Знаниие java малая часть того, что хочется видеть в программисте. Это и опыт, и знание теории программирования. Чистый кодописатель мало кому нужен. В проектах реальных ты зачастую по паре строчек в день пишешь.

    Попробовать сделать проект, веб приложение, с базой данных. Настроить автоматическую сборку проекта. Положить код на гитхабе и ссылаться на него. Чаще всего резюме отфутболивают "секретарши" которые в программировании не разбираются. Если написано, что нету опыта, а им требуется с опытом. То резюме сразу в корзину. Так что проект за душой иметь помогло бы. Плюс проект на гитхабе может посмотреть и технарь и оценить. Если конечно все так красиво. Spring стандарт практически, его надо знать в любом случае.
    Ответ написан
    1 комментарий
  • Почему могут не сохраняться сущности в базе данных?

    @gsaw Автор вопроса
    Моя ошибка была

    @Bean(name = "dwhTransactionManager")
        @Primary
        public PlatformTransactionManager dwhTransactionManager(@Qualifier("dwhDatasource") DataSource ds) {
            return new DataSourceTransactionManager(ds);
        }


    Вместо DataSourceTransactionManager надо было JpaTransactionManager использовать. Получалось, что JpaRepository не работали как надо. Данные запрашивать можно было, а запись в нирвану уходила. Поменял на JpaTransactionManager и все заработало.
    Ответ написан
    Комментировать
  • Можно ли подключиться через pgAdmin к openserver?

    @gsaw
    Вы видимо не совсем понимаете как работает клиент серверная архитектура. База данных это сервер, а phpAdmin это клиент. Обычно к серверу базы данных подключаются по сети. Тоесть теоретически можно подключиться и со своего компьютера к базе данных на сервере. Если вы знаете как. Но обычно, серевер базы данных конфигурируется так, что вы только можете подключится клиентом, который работает на том же хосте. Судя по вашему описанию, вы не сами его настраивали и лучше пока вам это самому не делать.

    Самое простое в вашем случае и дальше использовать phppgAdmin предоставляемым хостером.

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


    Вы учитесь работать с базой данных не мышкой, а набирая команды. Разберитесь, что такое DDL и DML и тогда вам откроется чудесный мир баз данных. Где вы сможете делать что угодно в каком угодно клиенте. Если нет каких то типов данных, то наверняка есть их аналоги, которые просто по другому зовутся.

    primary и foreign keys это вообще стандарт и есть в любой базе данных. Для автоинкримента вам возможно понадобится sequence.

    https://info-comp.ru/what-is-ddl-dml-dcl-tcl
    https://postgrespro.ru/docs/postgrespro/10/datatype
    mech.math.msu.su/~shvetz/54/inf/databases/chSerial...
    Ответ написан
    1 комментарий
  • Как сделать смену тёмной темы плавно?

    @gsaw
    Imho, что бы не моргало, надо уже сервером отдавать правильный вариант. Service Side Rendering. Либо весь <div class="content"> готовить скриптом и добавлять на страницу целиком.
    Ответ написан
  • Какие есть готовые компоненты для таличного отображения данных в react приложении?

    @gsaw Автор вопроса
    Я решил использовать DateTable из primereact библиотеки. Немного все странно, но много всяких других компонентов. Как альтернатива bootstrap, но я все смешал.
    Ответ написан
    Комментировать
  • Как правильно изменять value в input с помощью React?

    @gsaw
    import { useEffect, useState } from "react";
    
    export default function MyComponent() {
        const  [val1, setVal1]  = useState();
        const  [val2, setVal2]  = useState();
        
        useEffect(() => setVal2(val1),[val1]);
    
       return <>
                 <input type="text" value={val1} onChange={(ev) => setVal1(ev.target.value)} />
                 <input type="text" value={val2} onChange={(ev) => setVal2(ev.target.value)}/>
                 <div>{val2}</div>
       </>
    }
    Ответ написан
    4 комментария
  • Как выполнить действие только после dispatch-а асинхронной функции?

    @gsaw
    Если этот dispatch из useReducer, то она только планирует какие то изменения в данных, которые будут применены только в следующем цикле отрисовки. Игра с async не поможет. Вам надо использовать useEffect, что бы если какая то переменная в стейте изменится, useEffect-ом выполнить очистку переменных.

    К примеру

    useEffect(() => { 
          setIsOpen(false);
          setUpImg(null);
          setCompletedCrop(null);
    },[uploaded])
    Ответ написан
    Комментировать