• Как реализовать страницу для тестирования учеников?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Здравствуйте!
    Во-первых, непонятно в каком объеме у вас на данный момент реализовано текущее приложение на Spring.

    Сайт на подобие визитки.

    И вообще странно, что если это просто сайт-визитка, то зачем она писалась на Spring + VueJS. Там банально CMS WordPress хватит с лихвой. Ну в крайнем случае можно было взять рнр фреймворк (Yii2, Laravel) - обошлось бы дешевле для школы)

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


    1) Эндпоинты для ЛК учителя и ученика должны быть разными.
    2) Эндпоинты аутентификации учителя и ученика тоже можно сделать разными.
    3) Тестирование бывает разным. Нужно для начала разобраться с тем, какое тестирование вам нужно и как его можно реализовать.

    Например, есть тестирование при котором проверяется правильность выбранного ответа. Т.е. пользователь выбрал ответ "а" и соответственно, проверяем корректный ответ, хранимый в БД. Этот тест можно усложнить тем, что каждый раз при прохождении теста изменять местами варианты ответов, чтобы ученики не запоминали ответы по буквам.

    Другой вид тестирования, когда каждому ответу присваивается определенный балл. Далее высчитывается набранная сумма и выдается ему некий результат (часто встречается в психологических тестах).
    Иной вид тестирования, когда проверяется количество выбранных ответов варианта "А", "В" и т.д. Т.е. пользователь выбрал "А" - 5 раз, "В" - 2 раза. И если например, А < 5 и B >2, то отдаем один результат, иначе другой и т.д.

    4)
    Особенно как лучше сделать саму логику обработки ответов и последующую их проверку?

    Например, по мере прохождения теста формируем массив ответов и записываем их в LS, чтобы в случае чего не потерять данные. Затем по сабмиту "отправить на проверку" отправляем массив на сервер и перебирая ответы сравниваем их со значениями в БД. Если предусматривается возможность изменение варианта ответа для того или иного вопроса, то при изменении ответа, вносим правки в массив и сохраняем LS.

    Как реализовать страницу для тестирования учеников?

    Вообще, как по мне тут больше работы с фронтом, нежели с бэком.
    На самом деле тут много нюансов, которые нужно уточнить. Например, должны ли тесты делиться по темам или по каким-то категориями? Сколько тестов всего бывает и сколько из них отдается на клиент? Как корректно сфорировать сущности пользователей, тестов, тематик и т.д.?

    Либо попробуйте поискать готовые решения, которые потом можете встроить в сайт. Правда, не самое лучшее решение.
    Например, https://www.classmarker.com/online-testing/how-to-...
    https://quiz.proprofs.com/how-do-i-embed-a-quiz-on...
    https://www.riddle.com/blog/embed-online-quizzes-site/
    Google

    В общем, все зависит от ваших навыков программирования, от бюджета, от сроков и т.д.
    Самое быстрое решение возможно, использование CMS с готовыми плагинами.
    Например, WordPress + плагины
    https://ru.wordpress.org/plugins/quiz-master-next/
    https://ru.wordpress.org/plugins/wp-quiz/
    https://www.wpbeginner.com/showcase/best-quiz-plug...
    https://ru.wordpress.org/plugins/hd-quiz/
    https://ru.wordpress.org/plugins/quiz-maker/
    Google

    Для более объективного ответа нужно больше данных.
    Ответ написан
    2 комментария
  • Как решить ошибку Process finished with exit code 1 в Java Selenium?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    java.lang.IllegalStateException: The driver executable must exist: c:\tools\chromedriver

    Проверьте, лежит ли драйвер chromedriver для браузера Chrome по пути c:\tools\chromedriver
    Если нет, то загрузите
    Также было бы неплохо исходный код предоставить или посмотрите есть ли в вашем коде:
    System.setProperty("webdriver.chrome.driver",
                "c:\\tools\\chromedriver");
    Ответ написан
    Комментировать
  • Почему maven не находит ApiContextInitializer из Telegram bots api?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Ну судя по всему этот класс был удален в указанной вами версии.

    Вот, подробная информация:
    https://github.com/rubenlagus/TelegramBots/wiki/Ho...

    ApiContextInitializer.init(); has been removed and is not required anymore, instead:

    TelegramBotsApi telegramBotsApi = new TelegramBotsApi(DefaultBotSession.class);
    
    // When using webhook, create your own version of DefaultWebhook with all your parameters set.
    TelegramBotsApi telegramBotsApi = new TelegramBotsApi(DefaultBotSession.class, defaultWebhookInstance);
    Ответ написан
    2 комментария
  • Можно ли написать бэкенд на Java а фронтенд на Swift для Apple?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Backend можно написать на чем угодно. Java тоже подойдет.

    Будет ли это работать на Apple ?

    Даже не сомневайтесь. Вообще все равно что крутится на фронте, будь то приложение на swift или react native или js фреймворк для веб-приложения и т.д.
    Ответ написан
    Комментировать
  • Какие два класса не наследуются от Object?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Ответ действительно быстрее находится поисковиком.
    1) Класс Object не наследуется от себя же, так как он является суперклассом. От него наследуются другие классы.

    А точно ли вопрос звучал именно так?
    Какие два класса не наследуются от Object?

    Просто например, тип данных enum тоже не наследуется от Object, потому что наследуется от Enum.
    Ответ написан
    1 комментарий
  • Как вставить видео в android-приложение?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день!
    Совсем недавно понадобилось написать нечто похожее. Я не являюсь андроид разработчиком, но я написал бекенд для приложения и примерно знаю, как устроена клиентская часть.
    Так вот:
    1) Важно понять, как именно вы планируете доставлять контент до клиента, т.е. как видео будет поставляться в приложение. Если в приложении периодически должны добавляться видео, то понятное дело, что запаковывать их в приложение не имеет смысла. Тогда есть смысл либо создавать zip архив, который после установки приложения будет скачан, распакован и размещен где-то в internal storage, либо (а еще лучше) написать полноценный бекенд (REST сервис), который позволяет получать список ссылок на скачивание видео, информацию о видео (медиаданные) и т.д.
    2) Если вы не планируете периодически публиковать новые видео, то есть смысл запаковать его в приложение.

    В моем случае это было реализовано следующим образом. Был REST сервис, откуда можно было получать ссылку на скачивание видео и других данных (миниатюра к видео и т.д.).
    А также допонительно была доступна ссылка на стриминг видео. Соответственно, пользователь мог посмотреть видео онлайн, а в случае, если в настройках он включил офлайн режим, то видео по REST скачивалось на телефон и было доступным в офлайн режиме.

    Соответственно, в зависимости от ваших целей может понадобится разработчик, которому потребуется поднять бекенд
    Ответ написан
    Комментировать
  • В чем тут проблема может быть(Selenium WebDriver + JAVA)?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день!
    Во-первых, при написании вопроса выкладывайте код ошибки и сам код обернув его соответствующим тегом. Скриншоты не самая лучшая идея, ибо они ухудшают читабельность + сложно комментировать тот или иной код, а копировать ваш код со скриншота, затея так себе.

    Что касается вашей проблемы, то вы столкнулись с сайтом, который формирует контент динамически (т.е. это некий js фреймворк - angular, svelte, vue, react etc.). Формируя контент динамически некоторые селекторы класса формируются тоже динамически. Соответственно, выбор элемента по CSS классу не сработает. или же сработает не всегда А так как не у каждого элемента есть ID, то использовать его тоже не получится.
    Что можно сделать?
    - Использовать XPATH, но не привязывайтесь к классу.
    Хотя по своему опыту скажу, что как-то раз попался сайт, который к тому же при каждом обновлении страницы изменял структуру виртуального DOM и соответственно, выборка по XPATH тоже не работала.
    С другой стороны, если вы используете Selenium для разработки некоего парсера, то лучше изучить АПИ Яндекс Маркета и работать с ним.
    https://yandex.ru/dev/market/content-data/
    https://yandex.ru/dev/market/index/
    Ответ написан
  • Как сохранить сессию логина в selenium?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Вот, например:
    https://sqa.stackexchange.com/questions/15594/sele...
    Set<Cookie> allCookies = driver.manage().getCookies();


    driver = new FirefoxDriver();
    for(Cookie cookie : allCookies)
    {
        driver.manage().addCookie(cookie);
    }
    Ответ написан
  • Как взять данные из ответа apache CloseableHttpClient?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день!
    Из ответа видно, что вы получаете ответ в формате JSON. Далее вам необходимо десериализовать JSON в pojo.
    Существуют различные либы для этого. Можете взять Jackson или GSON.
    Вот, аналогичный вопрос:
    https://stackoverflow.com/questions/6949329/how-de...
    Ответ написан
    Комментировать
  • Exception in Application start method при включении JavaFX-приложения на IntelijIdea, в чем проблема?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день!
    Чувствую, что буду ванговать, но на 82-й строке у вас ClearBut.setOnAction()
    А вы прописали fx:id для ClearBut в sample.fxml? Если нет, то пропишите.

    Так как вы используете IDEA, то можете попробовать следующее:
    Зайдите в режим дебага.
    В нижней панели слева выберите add breakpoint
    Далее выберите add exception breakpoint (введите в поиск NullPointerException).
    Затем запустите приложение заново и посмотрите почему на строке 82 выбрасывается NPE.

    P.S. переменные в коде у вас названы с большой буквы, а должны начинаться с маленькой согласно naming convention (это для общего развития).
    Ответ написан
    Комментировать
  • Как организовать зависимость связей SQL?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день!
    Правильно ли я понимаю что связывание таблиц по внешним ключам мне в данном случае не нужно, так как постоянных связей в данном случае нет?

    Предположу, что да. Хотя для более точного ответа было бы неплохо увидеть полную задачу.
    В данном случае вы ищете строку с конкретным id и производите ту или иную операцию. Притом у вас, насколько я понял, хим. элементы разбросаны по 3-м таблицам. Если вы не можете логически связать эти таблицы между собой, то скорее всего связи через FK и не нужны.
    И этот вопрос касается больше тега SQL, нежели тега Java
    Ответ написан
    2 комментария
  • Почему выдает ошибку 302?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Замените ссылку на эту:

    https://opendata.fssp.gov.ru/opendata.php?path=/opendata//7709576929-iplegallist/data-20210327-structure-20200401.csv


    302 это временный редирект на другой урл.
    Ответ написан
    6 комментариев
  • Какой плагин регистрации для Wordpress посоветуете?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Попробуйте следующие плагины.
    Ultimate Member
    https://ru.wordpress.org/plugins/ultimate-member/
    Очень хороший плагин. Много чего есть.
    Можете попробовать комбинировать несколько плагинов. Мне как-то приходилось такое делать.
    Например, для кастомизации формы регистрации выбрать - User Registration
    https://wordpress.org/plugins/user-registration/
    Для всего остального использовать WP-Recall. Там есть возможность смены аватарки.
    https://ru.wordpress.org/plugins/wp-recall/
    Ответ написан
    Комментировать
  • Как генерируется JWT?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Для наглядности гляньте на оф. сайт
    https://jwt.io/
    Увидите, что jwt состоит из 3-х частей.
    Обратите внимание на эту часть
    https://i.imgur.com/cZLrN7Y.png
    Ответ написан
    Комментировать
  • Создание и правильный перенос Spring?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день!
    1) Как вы знаете, можно проект запаковать в jar или war. Притом, если запаковать в jar, то в Spring есть встроенный Tomcat (внутри Spring Web), который позволяет быстро деплоить проект на сервере. Если собираете WAR, то исключите из проекта встроенный Tomcat. Соответственно, сам проект нужно будет запускать в уже установленном Tomcat на сервере. Можно пойти чуть дальше и создать образ для Docker, где прописать все необходимые для деплоя конфигурации (например, скачать Tomcat, Maven и т.д.). Все зависит от того, как именно вы хотите развернуть приложение. Конечно же наличие Maven || Gradle Wrapper Будет плюсом. Не забудьте также завести отдельные профили конфигураций (yml или properties) для режима разработки и продакшна.
    2) Принципиальная разница есть. Версии java 8, 11, 17 являются LTS.
    Я слышал, что в версиях Java выше 11 иногда могут быть проблемы со Spring, но сам лично не сталкивался. Обычно рекомендуют использовать java 8 & 11. Но конечно же в более новых версиях Spring тоже должен работать.
    https://www.infoq.com/news/2018/09/spring-51-java-11/
    3)
    Может вы что посоветуете, а то я только начинаю работать с JAVA.

    Сложно что-либо советовать не зная уровня ваших познаний в Java. Если вкратце, то у вас должны быть знания на уровне Java Junior, чтобы вы могли начать разработку на Spring. Укрепите знания в Java SE (jcf, jdbc) & EE (orm, hibernate, jpa, servlet, jsp, jstl). Изучите Spring Framework, а затем Spring Boot и т.д.
    Ответ на ваш вопрос на Хабре давался не один раз. Просто поищите и увидите, что необходимо изучить.
    Ответ написан
  • Автоматизация в webview?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Знаю что код написанный на этом языке можно выполнить в webview и что с помощью него автоматизируют действия

    Собственно говоря, вы сами и ответили на ваш вопрос. Да, при помощи JavaScript вы можете взаимодействовать со страницей.
    Если вкратце, то вам нужно дождаться полной загрузки страницы, затем кликнуть на кнопке открытия фильтра (найти эту кнопку по ее id или xpath), выбрать соответствующий фильтр и значение фильтра. Затем найти инпут, куда нужно ввести цену и добавить туда стоимость. Ну и потом найти кнопку поиска и нажать на нее.
    Для поиска элементов DOM вы можете использовать классы, идентификаторы и xpath. Вам необходимо изучить основы JS. Вот, например - https://www.w3schools.com/js/default.asp

    С другой стороны я бы рекомендовал поискать API того или иного сервиса (как например, booking.com hotelbeds.com и т.д.) или если проект поиска жилья является вашим проектом, то стоит задуматься о релизации REST. Так вы сможете без JS обращаться к другому приложению и получать необходимые для вас данные.
    Ответ написан
  • Что нужно чтобы сделать чат на spring?

    azerphoenix
    @azerphoenix Куратор тега Spring
    Java Software Engineer
    Ну если вам нужено простой чат, то можете использовать Spring Websockets
    Вот, в этой статье подробно написано, как это реализовать:
    https://habr.com/ru/company/otus/blog/516702/

    А дальше можете посмотреть в сторону RabbitMQ
    https://spring.io/guides/gs/messaging-rabbitmq/
    https://habr.com/ru/company/otus/blog/500936/
    https://habr.com/ru/post/262069/
    или же ActiveMQ
    activemq.apache.org/spring-support.html
    Ответ написан
    Комментировать
  • Как правильно сделать взаимодействия между модулями в Java Spring?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Предположу, что у вас все-таки реализован не микросервисный монолит, а монолитная архитектура. Вы лишь разделили монолитное приложение на модули и подключили их в gradle. С другой стороны - а нужен ли вам микросервисный монолит или микросервис вообще, если приложение довольно маленькое и им пользуются всего 40 человек.
    Если речь идет просто о взаимодействии модулей монолитного приложения, то в соответствующем gradle файле модуля подключаете нужный модуль и импортируете нужные сервисы, классы и т.д.
    Главное обратите внимание, чтобы не было циклической зависимости, которая у вас указана тут:
    Circular dependency between the following tasks:
    :amocrm:compileJava
    \--- :datadeal:compileJava
         \--- :amocrm:compileJava (*)

    Информация по теме -
    https://reflectoring.io/spring-boot-gradle-multi-m...
    https://spring.io/guides/gs/multi-module/
    Циклическая зависимость возникает, когда модуль А ссылается на модуль В, а модул В ссылается на модуль А. Ни gradle, ни maven не могут решить эту проблему, так как для сборки одного модуля нужен другой модуль, а для другого первый. Также это говорит о том, что возможно проект был несовсем корректно разделен на модули. Можно попробовать создать модуль C, и вынести общие для модулей A & B классы в него. А затем добавить зависимость модуля A от C, а модуля B тоже от C. Таким образом циклической зависимости не будет. Также обратите внимание на рекомендации по организации структуры Spring приложения, которая указана в оф. документации на их сайте.

    Если речь идет о взаимодействии модулей микросервисного монолита, как его выделяют в некоторых источниках, то модули должны сообщаться через различные асинхронные и синхронные интеграции.

    Если уж вам понадобилось делить проект на микросервисы, то как по мне лучше реализовать полноценную микросервисную архитектуру через API Gateway. Соответственно, связать модули через REST. Тут уже понадобится Spring Cloud API Gateway, Spring Cloud Netflix Eureka Client & Server и т.д.

    Возможно, что есть подводные камни, о которых я не знаю. Надеюсь, что коллеги поопытнее более подробно ответят на данный вопрос.
    А так вот, небольшая статья по данной тематике: https://habr.com/ru/post/496934/
    Вдруг, вам будет интересно - небольшой вводный курс по Spring Cloud, Eureka, Zulu и т.д. - https://www.udemy.com/course/spring-boot-microserv...
    Ответ написан
    1 комментарий
  • Как в админ панели, в списке постов выделить цветом посты с определенным значением поля ACF?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Добрый день
    Вы хотите кастомизировать admin columns.

    Для начала вам стоит прочитать статьи про кастомизацию admin columns.
    Вот, например -
    https://www.sitepoint.com/extending-post-columns-a...
    https://www.smashingmagazine.com/2017/12/customizi...

    Получаем пост по $post_id, затем получаем значение мета поля ACF и применяем нужный класс.

    Далее вам нужно загрузить css файл для админки, где будут прописаны стили для классов - https://davidwalsh.name/add-custom-css-wordpress-admin

    К примеру есть поле "text" - если в нем есть текст "ColorRed" то окрасим этот пост в админке.
    Планирую использовать решение в паре с select acf.

    Да, вы можете при помощи ACF (select) задавать класс. А затем в admin columns применить выбранный класс и тем самым задать цвет.

    Возможно, что можно кастомизировать колонки при помощи плагина WP Admin Columns Pro? но точно не подскажу - https://www.admincolumns.com/
    Ответ написан
    Комментировать
  • Persistable или AbstractPersistable?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Interface Persistable<ID>
    Persistable - это интерфейс.

    Class AbstractPersistable<PK extends Serializable>
    AbstractPersistable - это абстрактный класс, который имплементирует интерфейс Persistable. В силу того, что это класс, то методы equals() & hashcode() уже реализованы в нем.

    По поводу того, что нужно использовать, вот, выдержка из документации Spring:

    AbstractPersistable is a one-stop shop for very basic use cases. The only thing it actually does is setting up default id generation. If you want to customize that, there's nothing you gain from extending the class. So we generally recommend to neither extend the class nor implement Persistable unless you really need to customize when Spring Data shall consider the entity new.


    https://docs.spring.io/spring-data/data-jpa/docs/c...
    https://docs.spring.io/spring-data/commons/docs/cu...
    Ответ написан