madek / madek Goto Github PK
View Code? Open in Web Editor NEWMadek is a web-based archive for sharing and cataloging images, video, audio and documents.
Home Page: http://madek.zhdk.ch
License: GNU General Public License v3.0
Madek is a web-based archive for sharing and cataloging images, video, audio and documents.
Home Page: http://madek.zhdk.ch
License: GNU General Public License v3.0
With nanoo film it works well
feature needs more work but is not currently priotized,
so it's hidden from UI.
more info in german
Instanz-Config:
Hat Zencoder-Config Output-Optionen, genannt "profiles" (jeweils für audio und video).
Jedes Profil hat eine id, z.B. mp4
oder mp4_HD
.
DB:
MediaFiles
haben eine Liste von conversion_profiles
(z.B. {mp4, mp4_HD}
),
d.h. für welche der konfigurierten Profile ein Preview
erzeugt wurde.
Previews
haben ein conversion_profile
(die id zur config wegen der sie erzeugt wurden)
Query: "missing profiles" gibt (je für audio/video) eine Liste der fehlenden Profile.
Das sind alle Profile für die kein Preview erzeugt wurde und auch kein
Zencoder-Job läuft.
Admin-Bereich:
MediaFiles-Tabelle zeigt "with missing" Status an, und erlaubt filtern nach diesem.
Batch-Reencode Feature kann in einem (potentiell sehr lang dauernden) Prozess
alle "missing" profiles re-encodieren (die profile können ausgewählt werden).
Das Feature kann nur von einem User gleichzeitig benutzt werden (locking).
Der Prozess achtet darauf dass Jobs nicht zu schnell gesendet werden (Zencoder Rate-Limiting),
und nicht mehr als 10 Jobs gleichzeitig laufen
(sonst Performanz-Probleme durch zuviele parallele Downloads von Zencoder aus dem Server).
Nachdem der Prozess einmal erfolgreich in Produktion durchgelaufen ist,
stellte sich heraus das die "is missing" query immer noch zu einfach ist.
Nicht jeder erfolgreiche Zencoder-Job für ein Profil erzeugt ein Preview!
Daher bleibt ein gewisser Teil der Medien immer "with missing".
Wir müssen Zencoders "Conditional Outputs" benutzen, um nur HD-Versionen
für Videos zu erzeugen, die eine gewisse Mindestgröße haben.
Andernfalls würde Zencoder für ein SD-Video ein HD-Preview erzeugen,
das war HD heisst aber natürlich immer noch nur SD-groß ist
(== doppelte Kosten, Speicherplatz).
Andererseits gibt es auch ungültige Files, für die keinerlei Preview erzeugt
werden kann, wir aber davon ausgehen (z.B. .midi
, ist nicht supported).
Query muss zusätzlich "erkennen", wenn ein Profil nicht "gewünscht" ist.
Das ist nicht so einfach, weil wir nicht wissen wie groß die Original-Files sind
(Stichwort Filehandling).
Mit besserem Filehandling kann das relativ einfach DB implementiert werden
(conditional outputs logik aus der profile config anwenden).
Im aktuellen Zustand wäre es wahrscheinlich möglich aber relativ komplex,
da die Query sich nicht nur auf MediaFiles
und Previews
bezieht sondern
auch noch auf auf die zugehörigen ZencoderJobs
.
Tasks:
Problem mentioned by HSLU and ZHdK
Same name can pop up twice or more times,
For example:
Markus Meier (User 1)
Markus Meier (User 2)
Sections where these user names are shown
quickest solutions:
Needs a bit more work:
Possible future solution (project):
Check with Mischa Senn which information we are allowed to publish.
The Instance works well and all data are there! Great!
Following aspects are missing:
please install there Zencoder account. Contact them directly for their keys/tokens.
The field ISO-Ländercode can not be user. Please add the Keywordlist (same as ours, Max knows what to do) (see Screenshot)
The link in the sharing option is: https://hfg-madek-prod.ruby.zhdk.ch/entries/a79c81b2-155f-44de-9b05-c8a9ad3d9b0f . But it should be: https://madek.hfg-karlsruhe.de/entries/UUID (see screenshot)
To discuss with Rolf and Tashi
"Ich sass gestern noch mit unserer Evento-Spezialistin zusammen, damit ich die Felder, die von Evento in die Portfolio DB gelangen müssen, genauer definieren kann und die Regeln klar sind. Dabei kamen wir auf verschiedene Lösungen. Einerseits könnte man die E-Mail-Adresse weitergeben oder die Departements-Zugehörigkeit.
Damit man sich mehr vorstellen kann, habe ich dir die Tabelle mal reinkopiert. Unser Entwickler hat dies noch nicht gesehen. Von den Ressourcen her können sie das erst im Q1/2018 realisieren (Aussage vom 31.10.). Kann aber gut sein, dass sie irgendwann eine Lücke haben (vor allem wenn sie sehen, dass eure Seite bereits bereit ist). Der Entwickler wird der ersten Kontakt mit euch nicht ohne mich aufnehmen.
Bei den Dozierenden haben wir zusätzliche Einschränkungen, damit nur jene ausgewählt werden, die auch Betreuer/in einer BA- oder MA-Arbeit sein könnten.“
building on #15, adding support for video is much simpler:
generalize the work already done for audio and adapt it to use the new profile
attribute to match previews to their configurations.
Also, we'll need a simple fix to deal with the zencoder rate limit.
tasks:
implementation controller logic @michalpodlecki
(details will be written down after making the prototype, will be in form of mock methods)
some docs wtf we are doing and why
We need to trigger many jobs from the server.
This takes a long time, we can't make it faster;
but even if we could we are slowed down by the API rate limit
If we send 1 request from the browser, in a simple approach
the controller is blocking the response, waiting for the complete queue to finish.
In practice the request will time out, leaving the whole system in an
inconsistent state, because the queue started in the controller is not reliably aborted.
The request only deals with the first 100 items in the queue
and responds with the number of remaining items.
A simple JS client takes care of continously sending requests
as long as there are items in the queue.
By using a JS client the process could be made more resiliant:
Deals with rate limits imposed by Zencoder.
The server can just query the DB to check how many ZencoderJobs were sent in the last time and if we should slow down.
If this is the case, the client will receive a 420
status
and wait for 1 minute before trying further (to not overload our own server).
Global Lock:
Only 1 User can open this View in 1 Browser at the time, lock times out after 5 minutes.
(Implemented by storing the session id in special Rails.cache key)
Check if all information from Wiki-instructions are in gitbook
Communicate to users the URLs, which have changed
User --> will create a new ticket for this feature
The link in the sharing option is: https://hfg-madek-prod.ruby.zhdk.ch/entries/a79c81b2-155f-44de-9b05-c8a9ad3d9b0f . But it should be: https://madek.hfg-karlsruhe.de/entries/UUID (see screenshot)
name???
webapp
deploy
We have the the new browsing options on the bottom of a media entry detail view and as a context based action (Stöbern nach ähnlichen Inhalten).
It works only of in the Admin-Interface explicitly excludes browsing for the metakey rights:certificate. Otherwise a 500-Error is given.
How can we make sure that a Madek instance can be set up by persons who does not know this? Remark in Admin-Intface? Documentation? Automatic exclusion of this metakey?
Media (video, pdf, ...) is only accessible in paul.zhdk.ch if it's right is set to global = active.
If media can only be viewed by a closed group (any group or person), than the media is not accessible in paul.zhdk.ch.
Therefor we need a new right called "PAUL". The media is then only accessible to the users which have access to the course in PAUL.
Judith Scheiber: Responsible for the feature (requirements, testing, final approval)
Michal: Development
ask Max: Any questions to the project
Contents of project (structure, thoughts): https://github.com/Madek/madek/projects/7
Specification written by Judith Scheiber - translated and shortened by Nadja:
20180502_Summary of Requirements.docx
Personen sollen Rollen wie Regisseur, Ton, Schauspieler zugewiesen können.
MetaDatumInput
Keywords
, ::People
und ::String
! Challenge: nicht zu viel und nicht zu wenig reusen!
string
! (kommentar, spezifizierung)
$Person hatte bei $Film die Funktion $Rolle als $String
# example: http://www.imdb.com/title/tt4288182/fullcredits
# Atlanta (2016) (TV Series)
# - Directed by: Donald Glover
# - Writing Credits: Donald Glover
# - Produced by: Donald Glover
# - Cast: Donald Glover (Earnest 'Earn' Marks); Brian Tyree Henry (Alfred 'Paper Boi' Miles)
entries:
- id: 1111
meta_keys:
- id: 'credits:tv'
label: 'TV-Serien Rollen'
value_type: 'MetaDatum::Roles'
roles: # like keywords: unique terms per metakey, `#is_extensible?`
- { id: 99991, term: 'Directed by' }
- { id: 99992, term: 'Writing Credits' }
- { id: 99993, term: 'Produced by ' }
- { id: 99994, term: 'Cast' }
people:
44441:
name: Donald Glover # http://www.imdb.com/name/nm2255973
44442:
name: Brian Tyree Henry # http://www.imdb.com/name/nm3109964
meta_data:
- meta_key_id: 'credits:tv'
media_entry_id: 11111
person_id: 44441
role_id: 99991
- meta_key_id: 'credits:tv'
media_entry_id: 11111
person_id: 44441
role_id: 99992
- meta_key_id: 'credits:tv'
media_entry_id: 11111
person_id: 44441
role_id: 99993
- meta_key_id: 'credits:tv'
media_entry_id: 11111
person_id: 44441
role_id: 99994
string: Earnest 'Earn' Marks
- meta_key_id: 'credits:tv'
media_entry_id: 11111
person_id: 44442
role_id: 99994
string: Alfred 'Paper Boi' Miles
---
needed: new query/queriesfor "SQL console" (defined here)
prio 1: find People with exactly same names
prio 2: find People with same names when displayed (stringify logic here))
prio 3: same like 1 and 2 but also find "close matches", to catch typos and other variations. Only if postgres natively supports something clever like https://en.wikipedia.org/wiki/Levenshtein_distance)
for Resources: MediaEntry, Collection
As a Madek User, I am the initial "Responsible" (responsible_user
) for all Resources that I have created.
Technically, Resposibles have implicit rights for all managed Permissions and are the only Users allowed to delete a Resource. They are also "responsible" for the associated content and files in a legal sense.
Because there always has to be exactly 1 Responsible for each Resource, it can only be transfered to another User in 1 step.
Because the "old" Responsible would lose the implicit Permissions, they can select the ones they want to retain in the same step (usually at least view & download).
Students in some departments are submitting their diploma works via the Medienarchiv.
Those departments defined as their submissions process that the last step is the transferal
of the responsibitly to their designated administrator (secretary).
Form: transfer responsibility
-----------------------------------------------------------------------------------------
new responsible user: [user autocomplete]
i want to keep these permissions: [x] view [x] download [x] edit [x] manage permissions
[cancel] [SUBMIT]
-----------------------------------------------------------------------------------------
backend: Resource#transfer_responsibility
for resources MediaEntry, Collection
atomic transaction of the following steps:
responsible_user
from A to B ui: TransferResponsibilityForm
view for resources MediaEntry, Collection
sub-view of show, not in a tab
form
User
as the new responsibleRelated ticket: https://www.pivotaltracker.com/n/projects/1600743/stories/151290287
We need a way to disable sign-in etc. for existing users respectively accounts. Preventing sign-in for instances not using the ZHdK-AGW or Switch AAI the password could be reset as a workaround. This cumberson and moreover the API tokens are not controlled by this.
Technical TODOs:
account_enabled
with default true
to the users tableuser
resouce of the admin
appaccount_enabled
when signing in via password through the webapp
account_enabled
when accessing the API via an API tokenMost of this can could be implemented by @michalpodlecki ; changing the API might need support or be done by @DrTom or @nimaai
Hoi Tashi
Happy New Year, first of all!
2018 ist zwar schon nicht mehr ganz so neu, aber wir haben uns ja jetzt eine Weile nicht mehr gesehen.
Ich hoffe, du bist gut gestartet.
Darf ich dich grad mit einer MAdeK-Frage behelligen?
Es geht um die „Bereich ZHdK“.
Wir haben u.a. von Projekt-Erfassern aus dem Dpt. Musik Rückmeldungen bekommen, dass „ihr Bereich“ nicht existiert und sie folglich ihre Projekte nicht ausreichend kategorisieren können.
Das wirkt sich dann wieder auf die Darstellung auf der Website aus.
Konkret geht es u.a. um folgenden Case:
Olav Lervik möchte Projekte erfassen, die zu folgenden Studienbereichen gehören:
Dpt. Musik > BA in Musik > Vertiefung „Komposition und Musiktheorie“ > Schwerpunkt „Komposition für Film, Theater und Medien“
Dpt. Musik > MA in Composition and Theory > Vertiefung „Komposition“ > Schwerpunkt „Komposition für Film, Theater und Medien“
Für den Fall 1, Bachelor, scheint es nur einen „Bereich ZHdK“ bis zur Ebene „Vertiefung“ zu geben:
Bachelor Musik - Komposition und Musiktheorie (DMU_FMU_BMU_VKOT.alle)
Ist das korrekt?
Ist es MAdeK-seitig möglich, die Ebene „Schwerpunkt“ verfügbar zu machen als Kategorie (BA und MA)?
Wenn ja: Könnt „ihr“ das bitte machen? Oder sind diese Daten bei „euch“ nicht vorhanden?
Könntest du uns bitte informieren, was allenfalls dazu getan werden müsste und in welchem Zeithorizont das umgesetzt werden könnte?
(Ganz grob als Hausnummer... – damit wir die Anfragenden entsprechend informieren können)
Das wäre super.
Ganz herzlichen Dank im Voraus für deine Unterstützung!
Herzliche Grüsse
Yvonne
Issue from Rolf:
Ich habe es im Netzwerk jetzt nochmals mit allen Laufwerken als Zielort versucht:
das exportierte Set - https://medienarchiv.zhdk.ch/sets/c23f9850-6c9e-45bf-b59b-21fcb3591c31 mit 2 ME: Video und PDF
C: geht nicht weil der Profilspeicherplatz zu klein ist.
Ein Export auf H: (rwolfens) und S: (Rektorat_MIZ) dauert sehr lange (über 90 Minuten).
Resultat:
Das Originalvideo (.mov) und die Metadaten zum Set und den ME’s sind vollständig da, das Originalvideo ist abspielbar.
Die beiden Preview-Videos (mp4, webm) sind zwar da, es erscheint jedoch die Fehlermeldung zum Pfad (jpg ‘Preview_Video’ angehängt).
Die Standbilder, die von Zencoder generiert werden (zusätzliche ID zur UUID im Präfix) melden ebenfalls ein Pfadproblem (jpg Preview_Standbild angehängt).
Die Standbilder, die früher vom Medienarchiv generiert wurden, sind hingegen in Ordnung.
(muss die Exporter App auf dem gleichen Laufwerk liegen wie der Zielordner?)
Ich hoffe, die Erläuterungen sind verständlich.
I exported the data via Expoter to my user-folder and had no problems.
The Meta data schema should contain the defined mapping of the key to other meta keys.
for Previews with media_type
: audio
and video
currently:
# config
zencoder_audio_output_formats_defaults:
- {audio_codec: 'vorbis', skip_video: true}
- {audio_codec: 'mp3', skip_video: true}
# DB
media_files:
- id: mf1
previews:
- id: p1, codec: mp3, media_file: mf1
- id: p2, codec: vorbis, media_file: mf1
new:
# config
zencoder_audio_output_formats:
vorbis: {audio_codec: 'vorbis', skip_video: true}
mp3: {audio_codec: 'mp3', skip_video: true}
# DB
media_files:
- id: mf1
previews:
- id: p1, conversion_profile: mp3, media_file: mf1
- id: p2, conversion_profile: vorbis, media_file: mf1
There was already an attribute added which relates to the codec,
so to keep it simple we can rely on the following rules:
questions:
Name of the attribute? conversion_profile
? preview_profile
? madek_preview_profile
?
(Note that this is conceptually the same attribute as the thumbnail
attr for Previews with media_type image, but we don't have to change that)
tasks
deploy: change config for audio, video (array to map)
DB: migration audio
conversion_profile
attribute to previews
conversion_profile
attribute for existing previews
DB: migration videos
conversion_profile
attribute to previews
conversion_profile
attribute for existing previews
DB: migration zencoder_jobs ???
admin/webapp
README
s (incl. Licensing)rights
vs rightsHolder
(do it or document it)
As a Madek Admin, I want to enter the "SuperAdmin" mode.
When activated, the webapp grants me every possible Permission,
e.g. I can see and edit everything from every User.
This is needed for support and editorial tasks, for example to assess the usage of a certain Keyword in all existing content, regardless of its visibility to the public or the Admin.
Note that this is different from "Switch to User", especially in regards to recording
the editing User in the DB, like in a EditSession:
backend:
DefaultPolicy
super_admin_mode
for Admins, which will be recorded in their session
ui:
super_admin_mode
toggle@SusanneSchumacher Please adjust contract for future MaaS
I will create a ticket for Zencode HSLU. They are still using our zencoder.
Nur beim anlegen
a very common pattern:
"This Thing has that Tag, here are some other Things with the same Tag."
Madek just has more than just "Tags".
current UI is optimized for many results/many meta keys.
rows should expand if there are few if them.
simple instances that only use core keywords would just get a full size box
for each MetaDatum{Keyword,People} of the resource
for each value
select all resources of same type and with a MetaDatum of same key/value
https://medienarchiv.zhdk.ch/entries/e232dd51-6f66-4848-8dbf-eb2faaeb1533:
https://medienarchiv.zhdk.ch/entries/5ea51dda-8dc3-4438-a397-2f4dc7fc6070:
https://medienarchiv.zhdk.ch/entries/75714ae2-6542-4b9f-8840-a46d50338745:
for Resources: MediaEntry, Collection
Each Resource has a "permalink" (a UUID-based URL),
like http://madek.example.com/entries/1234-444…
.
As a Madek User, I want to give it a "nice link",
like http://madek.example.com/entries/my-artwork
.
Once set up, the permalink will be redirect
so that all users always see the "nice link" in their browser
and use it when sharing/bookmarking the link.
Later, I can also transfer the "nice link" to a new Resource,
for example an updated version of my artwork.
As a Madek User
Given I have created a MediaEntry
I visit the MediaEntry detail view
From the resource actions menu
I select "Set custom URL"
I am on the "custom_url" page for this MediaEntry
In the "custom_url" form
I set the "name" to "my-artwork"
I click on save
I am on the "custom_url" page for this MediaEntry
In the "custom_url" form
I see a success message "…"
The path of the browser address is/start_swith `/entries/my-artwork/…` # == is primary
In the "custom_url" form
I add another custom URL "something-else" and save
I am on the "custom_url" page for this MediaEntry
In the "custom_url" form
I see a success message "…"
The path of the browser address is/start_swith `/entries/my-artwork/…` # == first one is still primary
check redirects:
- canonical url (UUID), 2. custom url redirect to primary; primary does not redirect
Msg. from Judith:
Umlaute und Buchstaben wie é werden falsch dargestellt:
Ich nehme an, es braucht einfach diesen Unicode.
Ich habe noch mit einer weiteren Datei getestet und gesehen, dass im HTML-File die Umlaute korrekt sind. Das json-File wird vielleicht ja von den Maschinen dann schon korrekt interepretiert.
asss
Der Embeed Madek Player soll für Audio ausgebaut werden
videojs
for AudioIn Admin-Interface / User: Deactivated user is shown without recognition in Admin-Interfaace. It is not possible to select or identify deactivated users.
Steps:
filter needed to select deactivated users
deactivated users should be identifyable
follows ticket https://www.pivotaltracker.com/n/projects/1600743/stories/132982429
test
After the redesign of the Explore page, there is no more teaser set. -> Delete the section teaser set from admin-interface / settings.
Klick on preview should show the second biggest picture (1024 x 768) instead of the biggest.
This could be a partial solution until we finish with the file-handling feature-ticket.
Could this be a possible solution.
Problem mentioned from susanne
2 times, columns in both tables keywords
and people
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.