Update home authored by Leindecker Ingo's avatar Leindecker Ingo
RSS Requirements for Ingestion: https://cloud.servus.at/s/iH8x27gmHJH26Tj
REPCO Requirements for Display EU: https://hackmd.io/LDGoiG7WQEOC7-KozhPLDw
Data model: https://hackmd.io/MCDTLRa-RViNbcxl6D7sog?view#Data-modeling
Protokolle Meetings arso/WareTec: https://board.net/p/repco
# displ.eu repco project
## required features
### language support
* all entities have a content language header
* translations are regular entities that have a header `IsTranslationOf` that links back to the entity in the original language entity
* queries support either listing entities in a particular language (originals and translations), or all originals (in all languages)
* relations between entities (e.g. from ContentItem to Concepts) always link to the original. translations are then resolved in a second step.
* translations may be marked as user- or auto-generated including metadata about their origin
* open question: how to deal with the graphql api for nested entites?
* ingest translation and language info from cba datasource has to be fully supported
* open question: translation of metadata, concepts, etc
### subtitles
* repco has to support subtitles per media asset
* subtitles have to support translations
### activitypub import
* repco can import channels from activitypub servers
* must support mastodon and peertube feeds
* must support media attachements
### full-text search
* all content in a repco repo is (optionally) indexed into a full-text search engine
* special consideration has to be put to support multilingual search, approach is tbd (index per language vs multi-language indexes)
* the repco server provides a GraphQL interface to perform search queries
### minimal management UI
* create and sync repos
* manage datasources
* view status of ingest tasks
## non-feature tasks
repco needs development in these fields independent of the mentioned features to become a production-ready tool:
### seperate core from domain data model
currently, the domain data model and the lower data model are not properly seperated in the codebase. this is needed to better support schema evolution
### schema evolution for domain data model
* add more flexible schema definition to e.g. include indexing properties
* develop and test a way to perform schema migrations
* have a good developer and devops experience for schema evolution over time
### monitoring and error handling
* better way to surface errors during ingest (which can always happen because external data sources may be nonconfirming)
* monitoring, e.g. via a prometheus endpoint
### testing and devops
* write more unit and integration tests
* devops guides for deployment and updates
## potential later features
### job queues and bots
* have APIs for bots/workers to pull and push content from/to repco
* support different authentication methods
### user content
* support storing user-generated content in repco repos
* support different authentication methods
## User Stories
* Besucherin Madeleine aus Frankreich steigt auf displ.eu zum ersten Mal ein. Sie bekommt alle Inhalte (Texte und Audio- bzw. Videountertitelungen) automatisch in der im Browser eingestellten Sprache auf Französisch ausgeliefert.
* Besucher Pablo ist interessiert an Inhalten zu einem ähnlichen Thema, zu dem er auf displ.eu gerade einen Artikel liest. Als Empfehlung erhält er einen Artikel, der zwar ursprünglich in einer anderen Originalsprache verfasst wurde, dank einer Übersetzung und einer entsprechenden Suchfunktion aber für ihn in der gerade ausgewählten Sprache als Suchergebnis angezeigt wird
* Besucherin Waltraud sucht auf displ.eu nach einem bestimmten Thema mit einem deutschen Begriff. Da sie auch Spanisch spricht, klickt sie als Zielsprache neben Deutsch auch Spanisch an. Als Suchergebnisse werden ihr Beiträge aus beiden Sprachen angezeigt
* Uploader Harald lädt Videos über cba.media hoch. Dort übersetzt er ein sein zugehöriges Post auf English und Polnisch. Zusätzlich lässt er Untertitel für diese beide Sprachen erstellen. Die Videos werden sowohl auf cba.media, als auch unter displ.eu untertitelt mit Möglichkeit zur Auswahl angezeigt. Der Beschreibungstext kann von Personen, die Englisch oder Polnisch als Sprache eingestellt haben, direkt in diesen rezipiert werden. Auch mit der Suche über REPCO kann sein Video gefunden werden.
* Userin Britta betreibt für das Projekt Display EU einen Mastodon Channel, den sie auf einem dedicated Space auf der displ.eu Startseite angezeigt haben möchte. Ihre Toots enthalten neben Textnachrichten auch Bilder oder Videos. In REPCO fügt der:die Admin den Channel als Datasource hinzu. Mithilfe der CMS-Tools von displ.eu kann der Channel inkl. aller Medieninhalte automatisiert über REPCO eingebunden und auch durchsucht werden.
* Uploader Emre lädt Videos auf eine PeerTube-Instanz hoch, die mit REPCO indiziert wird. Dort stellt er auch verschiedene Untertitelversionen bereit. Auf displ.eu kann dank einer Unterstützung für ActivityPub das Video inklusive der Untertitel angezeigt werden.
* Besucherin Magdalena gibt einen Suchbegriff auf displ.eu ein. Die Daten werden über das Frontend an REPCO weitergegeben, das wiederum einen ElasticSearch Index abfragt und die Suchergebnisse über die GraphQL API per JSON an das CMS zur Anzeige zurückgibt. Die Suchergebnisse werden auf der displ.eu Suchergebnisseite angezeigt und verlinken dort auf die originalen URLs der Data Sources.
* Uploaderin Reka verfasst auf eurozine.com einen Artikel auf Englisch. REPCO kann den RSS Feed als Data Source indizieren
* Das Entwicklerteam wird beauftragt, zusätzliche Metadatenfelder für die Ingestion hinzuzufügen. REPCO kann das Datenmodell erweitern und sich die fehlenden Daten in das bestehende Dataset holen, ohne den ganzen Ingestion-Prozess komplett neu wiederholen zu müssen
**Monitoring Tools**
* Übersicht über den Datenpool
* Status einzelner Data Sources und Ingestionprozesse
* Fehlermeldungsprotokoll
* Möglichkeit, neue Data Source zu erstellen, neu zu ingesten oder zu löschen
**Weiteres Vorgehen**
Kriterien für Abnahme definieren: \
bspw. Skalierbarkeit bei Planung miteinbeziehen. Muss nicht nur bei 100 ContentItems, sondern auch mit Millionen funktionieren.
Erstes Stundenkontingent vereinbaren, enge Feedbackloops alle zwei Wochen.
Ingo macht Issues aus User Stories im GIT Repo.
WareTec macht Schätzungsaufschlag und trifft sich mit arso, um dann die Details zu klären und bessere Schätzung zu kriegen.\
Anschließend nochmal Treffen mit Ingo, danach schauen, dass wir Schritt für Schritt zu Arbeitspaketen und erste Stundenkontingenten kommen.
Nächster Termin: Freitag, 14.7., 12 Uhr
- specified fields in database schema will contain up to 15 different translations
- texts will be tagged as original language, translation or auto-generated
- revisions will have a new field containing all translation language codes
- graphql api will be extended to allow queries to filter by language code
- mapping for cba datasource will be adjusted for these changes
For later:
List of GraphQL queries: [https://git.fairkom.net/emb/displ.eu/repco/-/wikis/GraphQL-Queries](https://git.fairkom.net/emb/displ.eu/repco/-/wikis/GraphQL-Queries)
RSS Requirements for Ingestion: https://cloud.servus.at/s/iH8x27gmHJH26Tj
REPCO Requirements for Display EU: https://hackmd.io/LDGoiG7WQEOC7-KozhPLDw
Data model: https://hackmd.io/MCDTLRa-RViNbcxl6D7sog?view#Data-modeling
Protokolle Meetings arso/WareTec: https://board.net/p/repco
# displ.eu repco project
## required features
### language support
* all entities have a content language header
* translations are regular entities that have a header `IsTranslationOf` that links back to the entity in the original language entity
* queries support either listing entities in a particular language (originals and translations), or all originals (in all languages)
* relations between entities (e.g. from ContentItem to Concepts) always link to the original. translations are then resolved in a second step.
* translations may be marked as user- or auto-generated including metadata about their origin
* open question: how to deal with the graphql api for nested entites?
* ingest translation and language info from cba datasource has to be fully supported
* open question: translation of metadata, concepts, etc
### subtitles
* repco has to support subtitles per media asset
* subtitles have to support translations
### activitypub import
* repco can import channels from activitypub servers
* must support mastodon and peertube feeds
* must support media attachements
### full-text search
* all content in a repco repo is (optionally) indexed into a full-text search engine
* special consideration has to be put to support multilingual search, approach is tbd (index per language vs multi-language indexes)
* the repco server provides a GraphQL interface to perform search queries
### minimal management UI
* create and sync repos
* manage datasources
* view status of ingest tasks
## non-feature tasks
repco needs development in these fields independent of the mentioned features to become a production-ready tool:
### seperate core from domain data model
currently, the domain data model and the lower data model are not properly seperated in the codebase. this is needed to better support schema evolution
### schema evolution for domain data model
* add more flexible schema definition to e.g. include indexing properties
* develop and test a way to perform schema migrations
* have a good developer and devops experience for schema evolution over time
### monitoring and error handling
* better way to surface errors during ingest (which can always happen because external data sources may be nonconfirming)
* monitoring, e.g. via a prometheus endpoint
### testing and devops
* write more unit and integration tests
* devops guides for deployment and updates
## potential later features
### job queues and bots
* have APIs for bots/workers to pull and push content from/to repco
* support different authentication methods
### user content
* support storing user-generated content in repco repos
* support different authentication methods
## User Stories
* Besucherin Madeleine aus Frankreich steigt auf displ.eu zum ersten Mal ein. Sie bekommt alle Inhalte (Texte und Audio- bzw. Videountertitelungen) automatisch in der im Browser eingestellten Sprache auf Französisch ausgeliefert.
* Besucher Pablo ist interessiert an Inhalten zu einem ähnlichen Thema, zu dem er auf displ.eu gerade einen Artikel liest. Als Empfehlung erhält er einen Artikel, der zwar ursprünglich in einer anderen Originalsprache verfasst wurde, dank einer Übersetzung und einer entsprechenden Suchfunktion aber für ihn in der gerade ausgewählten Sprache als Suchergebnis angezeigt wird
* Besucherin Waltraud sucht auf displ.eu nach einem bestimmten Thema mit einem deutschen Begriff. Da sie auch Spanisch spricht, klickt sie als Zielsprache neben Deutsch auch Spanisch an. Als Suchergebnisse werden ihr Beiträge aus beiden Sprachen angezeigt
* Uploader Harald lädt Videos über cba.media hoch. Dort übersetzt er ein sein zugehöriges Post auf English und Polnisch. Zusätzlich lässt er Untertitel für diese beide Sprachen erstellen. Die Videos werden sowohl auf cba.media, als auch unter displ.eu untertitelt mit Möglichkeit zur Auswahl angezeigt. Der Beschreibungstext kann von Personen, die Englisch oder Polnisch als Sprache eingestellt haben, direkt in diesen rezipiert werden. Auch mit der Suche über REPCO kann sein Video gefunden werden.
* Userin Britta betreibt für das Projekt Display EU einen Mastodon Channel, den sie auf einem dedicated Space auf der displ.eu Startseite angezeigt haben möchte. Ihre Toots enthalten neben Textnachrichten auch Bilder oder Videos. In REPCO fügt der:die Admin den Channel als Datasource hinzu. Mithilfe der CMS-Tools von displ.eu kann der Channel inkl. aller Medieninhalte automatisiert über REPCO eingebunden und auch durchsucht werden.
* Uploader Emre lädt Videos auf eine PeerTube-Instanz hoch, die mit REPCO indiziert wird. Dort stellt er auch verschiedene Untertitelversionen bereit. Auf displ.eu kann dank einer Unterstützung für ActivityPub das Video inklusive der Untertitel angezeigt werden.
* Besucherin Magdalena gibt einen Suchbegriff auf displ.eu ein. Die Daten werden über das Frontend an REPCO weitergegeben, das wiederum einen ElasticSearch Index abfragt und die Suchergebnisse über die GraphQL API per JSON an das CMS zur Anzeige zurückgibt. Die Suchergebnisse werden auf der displ.eu Suchergebnisseite angezeigt und verlinken dort auf die originalen URLs der Data Sources.
* Uploaderin Reka verfasst auf eurozine.com einen Artikel auf Englisch. REPCO kann den RSS Feed als Data Source indizieren
* Das Entwicklerteam wird beauftragt, zusätzliche Metadatenfelder für die Ingestion hinzuzufügen. REPCO kann das Datenmodell erweitern und sich die fehlenden Daten in das bestehende Dataset holen, ohne den ganzen Ingestion-Prozess komplett neu wiederholen zu müssen
**Monitoring Tools**
* Übersicht über den Datenpool
* Status einzelner Data Sources und Ingestionprozesse
* Fehlermeldungsprotokoll
* Möglichkeit, neue Data Source zu erstellen, neu zu ingesten oder zu löschen
**Weiteres Vorgehen**
Kriterien für Abnahme definieren: \
bspw. Skalierbarkeit bei Planung miteinbeziehen. Muss nicht nur bei 100 ContentItems, sondern auch mit Millionen funktionieren.
Erstes Stundenkontingent vereinbaren, enge Feedbackloops alle zwei Wochen.
Ingo macht Issues aus User Stories im GIT Repo.
WareTec macht Schätzungsaufschlag und trifft sich mit arso, um dann die Details zu klären und bessere Schätzung zu kriegen.\
Anschließend nochmal Treffen mit Ingo, danach schauen, dass wir Schritt für Schritt zu Arbeitspaketen und erste Stundenkontingenten kommen.
Nächster Termin: Freitag, 14.7., 12 Uhr
- specified fields in database schema will contain up to 15 different translations
- texts will be tagged as original language, translation or auto-generated
- revisions will have a new field containing all translation language codes
- graphql api will be extended to allow queries to filter by language code
- mapping for cba datasource will be adjusted for these changes
For later:
Licenses: only ingest cc licensed content (or public domain?)
\ No newline at end of file