Coder Social home page Coder Social logo

devstarter / ii Goto Github PK

View Code? Open in Web Editor NEW
15.0 8.0 50.0 282.3 MB

Интерактивная Ииссиидиология

Java 16.30% CSS 1.11% HTML 53.47% JavaScript 26.18% Awk 0.01% Shell 0.01% Kotlin 2.93%
java javascript angularjs spring-boot java-se

ii's People

Contributors

dmytrr avatar drgremlin avatar ekvi avatar enginer avatar felexey777 avatar linya avatar maxsemen avatar pas8sion avatar ruav avatar sabfir avatar yuriikyiv avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ii's Issues

Содержание

Нужно создать содержание по подобию

Нужно реализовать всё что касается серверной части, то есть спроектировать интерфейс обмена данными. Данные для формирования содержания хранятся в org.ayfaar.app.model.Category. Содержание ссылки выше сформировано этим классом org.ayfaar.app.synchronization.mediawiki.CategorySync (может служить примером)

Keepalive script

Нужно написать java клас, который бы запускался по крону с сервера и проверял работает ли http://ii.ayfaar.org. Если нет то выполнял бы команду rhc app restart

Очистить пункты от сносок

В текстах пунктов иногда встречаются служебные символы означающие ссылки на сноски, например http://ii.ayfaar.org/#11.13017 ††††††††††. Нужно их все убрать, то есть почистить базу данных с помощью java. Задача подобна #2 и #3.

Этапы выполнения:

  1. Найти все пункты с символами: *, †, ‡, §
  2. Убрать их из текста с лишним пробелом
  3. Сохранить исправленный вариант в базу данных

Тесты https://github.com/devstarter/ii/tree/issue11/src/test/java/issues/issue11

Тегирование терминов

Всё Пространство в каждой из своих бесчисленных «резонационных зон» структурировано множеством разнокачественных стоячих волн, которые, как бы накладываясь друг на друга и тем самым либо подавляясь, либо модулируясь, образуют в каждом из частотных Уровней возможного Восприятия абсолютно всю качественную динамику видимой и субъективно переживаемой нами «картинки» окружающей нас в каждый момент действительности.

Превратить в

Всё <term id="Пространство">Пространство</term> в каждой из своих бесчисленных «<term id="Резонационная зона">резонационных зон</term>» структурировано множеством разнокачественных стоячих волн, которые, как бы накладываясь друг на друга и тем самым либо подавляясь, либо модулируясь, образуют в каждом из частотных Уровней возможного Восприятия абсолютно всю качественную динамику видимой и субъективно переживаемой нами «картинки» окружающей нас в каждый момент действительности.

Пример из http://ii.ayfaar.org/#10.10176. За основу взять org.ayfaar.app.synchronization.mediawiki.TermSync#markTerms. Тест: TermsMarkerIntegrationTest

Подготовить тесты для рефакторинга поиска

Подготовить интеграционные тесты для поиска. Предлагаю преобразовать результат метода SearchController.searchInContent из List<ModelMap> в List<ContentSearchResult> или что-то аналогичное, и тестировать уже ContentSearchResult, чтобы зафиксировать сигнатуру результата поиска для тестирования.

Поиск на сайте для вдохновения на тесты :) http://ii.ayfaar.org/#?время

Список абзацев для параграфа

Сейчас для параграфа не возвращаются дочерние объекты. На пример
image

А нужно вернуть список абзацев как для запроса главы:
image

Изменния делать в org.ayfaar.app.utils.contents.ContentsHelper, перед началом изменений реккомендую написать тесты в org.ayfaar.app.utils.contents.ContentsHelperTest и показать их мне, чтоб я подтвердил, что задача понята верно :)

Страничка для содержания

Нужна страничка для содержания (например).

Страница категории должна быть вида http://ii.ayfaar.org/new/#/cat/{название-категории} (также как сейчас термины, например http://ii.ayfaar.org/new/term/ра.
Данные для странички запрашивать по адресу http://ii.ayfaar.org/api/category?name={название-категории} (например) (плагин для хрома для отображения json)

Для разработки, в файле src\main\webapp\new\js\app.js var apiUrl = "/api/"; заменить на var apiUrl = "http://ii.ayfaar.org/api/";
Для получения данных используй $api (пример в src\main\webapp\new\js\controllers\term.js $api.get("v2/suggestions/"+$scope.name)) в твоём случает это будет $api.get('category/'+$stateParams.name)
Для отрисовки повторяющихся элементов используй ngReapat (там есть пример)

Понимаю, что по началу сложно, это нормально, ты не отчаивайся задавай вопросы, всё решаемо :)

Добавить возможность очищать кеш

Нужны такие опции очистки кеша (org.ayfaar.app.controllers.search.cache.DBCache):

  • весь кеш в БД (если есть) и/или в памяти
  • только для всех категорий или только для всего поиска
  • только для конкретного uri

Валидация базы данных

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

Например код, аббривиатура и синонми не должны быть основными терминами.

Ошибки собирать в отчёт и отправлять уведомлением #89

Или сделать урл по которому буду возвращены все подобные ситуации

Search suggestions

Нужно переделать аутокомплит для нового UI (задача #1). В этой задаче нужно сделать серверную сторону. Текущий вариант http://ii.ayfaar.org/api/term/autocomplete?filter%5Bfilters%5D%5B0%5D%5Bvalue%5D=%D0%B2, SearchController.

Нужно переделать так, что-бы url был http://ii.ayfaar.org/api/v2/search/suggestions?q=%D0%B2
И возвращал:

[
   "Значение 1",
   "Значение 2",
   "И так далее..."
]

Поиск подходящих вариантов должен производится по принципу сначала совпадения в начале фразы, затем в начале слова в середине фразы, затем где угодно в середине фразы.

Максимум резултатов - 7.

SuggestionsController order issue

В результате работы SuggestionsController сначала должны быть самые короткие слова (фразы).
В живую проблему можно посмотреть на сайте проекта http://ii.ayfaar.org. Набрав в поиске например "вр" самое короткое слово "Время" появляется предпоследним:
http://c2n.me/iG9dF7

Задача состоит в том, чтобы исправить метод SuggestionsController#suggestions(..) чтобы тест SuggestionsController#testOrder() выполнялся успешно. Для этого НЕ нужен томкет и база данных.

Возвращать параграф для пункта

При отображении одного пункта (абзаца) например, нужно также показать параграф / главу / раздел / том из содержания, которым он относится.

Метод, где возвращается пункт: org.ayfaar.app.controllers.ItemController#get. Класс для работы с содержанием: org.ayfaar.app.utils.contents.ContentsHelper

Autocomplete on angularjs

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

Первый вариант аутокомплита можно увидеть по ссылке http://ii.ayfaar.org/new/#/home, но он далёк от совершенства. За эталон предлагаю взять аутокомплит на этой странице http://ii.ayfaar.org/#main

Требования:

  • если человек выбрал термин из списка предложенных, то переходим сразу на описание этого термина сейчас (это реализовано не верно - если нажать стрелочку вниз на клавиатуре, то происходит автоматический переход на первое значение)
  • если человек проигнорировал предложения и просто нажал ентер или поиск - переходим на поиск по введённому слову или фразе
  • Аутокомплит должен срабатывать после ввода более 2х символов.

Сам список желательно стилизовать (длина, подстветка выделения) по аналогии с http://ii.ayfaar.org

Изменения производить в ветке issue1 https://github.com/devstarter/ii/tree/issue1/src/main/webapp/new

Рисунки

Добавить возможность прикреплять рисунки (схемы) встречающиеся в текстах

Периодическое обновление кеша

Так как в базу данных иногда вносятся изменения то и кеш нужно обновлять.
Обновления запускать каждые сутки в 3 часа ночи и по вызову через url.

Поисковый кеш хранить в базе данных

Нужно написать альтернативный кеш имплеминтирующий org.ayfaar.app.controllers.search.SearchCache и расширить его возможности для хранения привязки результата поиска к термину, в том случае если поиск был связан с термином. Это делается для того, чтобы при добавлении синонимов к термину автоматически обновлять результат поиска, так как старый результат не учитывает новой связи...

Также из-за того, что поиск выполняется относительно долго, а при перезапуске приложения весь кеш в памяти стирается.

Кеш в памяти нужно оставить для ускорения работы, тоесть проверяем есть ли кеш в памяти затем есть ли кеш в базе данных, если нигде нет - выполняем поиск и сохраняем в ОБА кеша.

Удалить все UID без имплиментаций

Бывает попадаются такие записи в таблице UID, которые больше нигде не фигурируют кроме как в Link. Когда система пытается создать объект связки (Link) с такими uid, то возникает ошибка системы.

То есть нужно пройтись по всем UID и найти те которые нигде больше не упоминаются или упоминаются только в Link и удалить их.

Рефакторинг AliasMap

Идея состоит в том, чтобы оптимизировать процесс получения информации о термине.

Основные принципы: минимум информации загружать в память из базы данных и только по требованию.

Предлагаю такой алгоритм:

  1. Загружаем все данные из TermMorph, так как без них никак.
  2. Загружаем из Term только названия терминов и флаги (0 или 1) сообщающие о присутствии или нет shortDescription
  3. Загружаем информацию о синонимах, то есть Link с типами Link.ABBREVIATION, Link.ALIAS, Link.CODE.
  4. Объединяем это всё в одну мапу Map<String (название термина и в любом падеже), TermProvider>

TermProvider содержит в себе:

  • ссылку на объект Term готорые будет загружен только при запросе к нему
  • ссылку на главнй термин (тоже нужно загружать по требованю), например если это провайдер для аббривиатуры ("РА"), то в ссылке на основной термин будет полное его название ("Резонационно активный"), тоже самое и с синонимами и кодами.
  • флаг о том, есть ли короткое описание

Нужны следующие методы:

  • метод который возвращает TermProvider по имени термина
  • метод который возвращает всю мапу провайдеров
  • метод который загружает реальный объект термина из базы данных
  • метод для получения провайдера основного термина
  • метод возвращающий тип термина (аббривиатура или синоним или код)

Ошибка в цитировании

При поиске по Декогерентность

image

Цитата

Другими словами, декогерентность означает, что в каждый конкретный миг вы способны сделать лишь тот – единственный!

Обрывается в не верном месте, так как далее по тексту следует продолжение мысли. Весь текст пункта:

Другими словами, декогерентность означает, что в каждый конкретный миг вы способны сделать лишь тот – единственный! – выбор, который уже «изначально» определён теми узкоспецифическими взаимосвязями, которые в этот момент структурируют фокусируемую вами НУУ-ВВУ-Конфигурацию. Все остальные потенциальные возможности и разнообразные результаты других выборов фокусной мультиполяризации, осуществлённых как бы «в тот же самый миг» всем множеством иных «личностных» Интерпретаций вашей Стерео-Формы (во всём многообразии других сценариев вашего развития), «лично» для вас как бы не существуют вовсе, поскольку ни один из них никак не отражается в системе вашего субъективного Восприятия. Но это кажущееся отсутствие активных энергоинформационных взаимосвязей между «личностью» и всем множеством остальных её «личностных» Интерпретаций или любыми иными двойниками виртуальных объектов, проявленными в окружающей действительности, является ложным.

То есть нужно учесть этот кейс и закончить цитату в конце предложения или ... после прквышения максимума слов.

Убрать из текстов пунктов Главы

Иногда в текстах пунктов появляются названия глав и разделов, вот пример:
3.0089 :

[...] данной ЛЛУУ-ВВУ-Сущности.

Глава 4. Конкретизация окружающей нас субъективной Реальности осуществляется благодаря генерациям Форм Самосознаний элементарных частиц

Переход на новую строку (\n) и Глава 4. Конкретизация окружающей нас субъективной Реальности осуществляется благодаря генерациям Форм Самосознаний элементарных частиц нужно убрать.

Нужно провести единоразовую очистку базы данных.

Создание цитат в результатах поиска

Пример работающего поиска, который мы рефакторим http://ii.ayfaar.org/#?Время. В результатах вы видете не весь пункт, а только предложение в котром найдена искомая фраза.

Старый поиск на строке, на который сейчас реализован похожий функционал: SearchController.java:135. Вам нужно скопировать этот функционал и доработать, согласно требованиям прописаным в коде в комментарии и тестам.

Новый поиск (пока только структура) - NewSearchController.java. Клас, в котором нужно делать правки: SearchQuotesHelper.java, тест: SearchQuotesHelperUnitTest.java

Документация по RegExp

Логирование пути ошибки

Стек трейс не показывает с какими параметрами был вызван метод. Нужна кастумная реализация логера. Возможной свой лог таргет или ресивер. Чтобы в случае ошибки пуш ивентом отправлять параметры для повторения ошибки и исправления.

Предлагаю такой вариант... создать спринг бин со скопом request то есть для каждого реквеста свой инстанс... и в этот бин постить лог сообщения. При возникновении ошибки брать из этого лога все сообщения и отправлять пуш ивентом

Уведомления на PushBullet

Идея состоит в том чтобы генерировать NotificationEvent'ы (наследуемые от org.springframework.context.ApplicationEvent) в разных участках кода и слушать их в одном NotificationListener'е и отправлять в этот канал https://www.pushbullet.com/channel?tag=ii. Библиотеку для работы с PushBullet можно взять эту https://github.com/shakethat/jpushbullet

Начать предлагаю с сообщения о ошибке в рантайме. Смотреть в DefaultRestErrorResolver

Ключ для доступа к API Pushbullet вынести в .property файл

Родительские категории

При запросе категории для содержания помимо подкатегорий возвратить список родителских категорий.

org.ayfaar.app.utils.contents.CategoryPresentation добавить поле parents со списком родителей.

ТОЛЬКО ДЛЯ ОСНОВНОЙ КАТЕГОРИИ. То есть той которую запросили, для подкатегорий parents оставлять пустым

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.