xmms2 collections
play

XMMS2 Collections Sbastien Cevey <seb@cine7.net> - PowerPoint PPT Presentation

XMMS2 Collections Sbastien Cevey <seb@cine7.net> http://bytes.inso.cc/ Metaweb presentation (October 22, 2009) Swiss Federal Institute XMMS2 Music Player Playlouder MSP of Technology, Lausanne Outline 1. Introduction 2. Concept 3.


  1. XMMS2 Collections Sébastien Cevey <seb@cine7.net> http://bytes.inso.cc/ Metaweb presentation (October 22, 2009) Swiss Federal Institute XMMS2 Music Player Playlouder MSP of Technology, Lausanne

  2. Outline 1. Introduction 2. Concept 3. Usage 4. Future 5. Conclusion 2

  3. 1. Introduction “why all the fuss?” 3

  4. Personal Interests The project initially comes from personal interest in: • Software engineering design smart abstractions to build powerful things • Information architecture exploit computers to manage large collections of structure information 4

  5. XMMS2 Land Server Clients Unix Domain Socket IPC IPC Ruby/Qt TCP IPC playlists CLI IPC Media last.fm scrobbler Library (SQLite) Interface: CLI, GUI, headless playback Language: C, C++, Python, Ruby, Perl, etc. 5

  6. XMMS2 Media Library • SQLite database • Store of objects (“media”, typically songs) with arbitrary properties • Denormalized schema, with unique (id, key) id key value 42 artist Britney Spears 42 title Toxic 42 duration 245497 43 artist Beyonce • SQL queries require lots of JOINs 6

  7. UI Requirements • Browse • Search • Organize 7

  8. UI Requirements • Browse • Search • Organize 8

  9. UI Requirements • Browse • Search • Organize 9

  10. UI Requirements • Browse • Search • Organize 10

  11. UI Requirements • Browse • Search • Organize i.e. view & manipulate subsets of the media library 11

  12. The Problem • Abstract the structure of the media library • Simplify querying of subsets of the media library • Share abstraction of such subsets among clients • Allow refining, editing, composing the subsets 12

  13. The Problem Old API user input abstract client representation SQL query API server set of media 13

  14. The Solution New API Old API user input client abstract API client representation SQL query server API server set of media 14

  15. The Solution user input client abstract = Collections API representation server set of media 15

  16. 2. Concept “what are you on about?” 16

  17. Collection: Definition “A collection is a representation of a subset of the media library, structured as a Directed Acyclic Graph (DAG) of operators.” 17

  18. Collection: Definition “A collection is a representation of a subset of the media library, structured as a Directed Acyclic Graph (DAG) of operators.” Universe 18

  19. Collection: Definition “A collection is a representation of a subset of the media library, structured as a Directed Acyclic Graph (DAG) of operators.” Universe Compare artist=“Pink Floyd” 19

  20. Collection: Definition “A collection is a representation of a subset of the media library, structured as a Directed Acyclic Graph (DAG) of operators.” Universe Compare Compare artist=“Pink Floyd” year<=1975 20

  21. Collection: Definition “A collection is a representation of a subset of the media library, structured as a Directed Acyclic Graph (DAG) of operators.” Universe Compare Compare artist=“Pink Floyd” year<=1975 Intersection 21

  22. Collection: Definition “A collection is a representation of a subset of the media library, structured as a Directed Acyclic Graph (DAG) of operators.” Universe Compare Compare artist=“Pink Floyd” year<=1975 Intersection Idlist 22

  23. Collection: Definition “A collection is a representation of a subset of the media library, structured as a Directed Acyclic Graph (DAG) of operators.” Universe Compare Compare artist=“Pink Floyd” year<1975 Intersection Idlist Union 23

  24. Source Operators All media in the Media Library Universe Static list of media (by id) Idlist Reference All media in the saved collection $name in $name $namespace $namespace 24

  25. Saved Collections Playlists Collections ... ... Idlist Intersection ... “Default” “70’s favourites” ... Idlist “Chillout tracks” Idlist ... “DJ Mix” ... Compare year<=1975 Idlist “Early stuff” “Cool playlist” 25

  26. Set Operators 1..N All media present in all the operands Intersection 1..N All media present in any of the operands Union 1 All media not present in the operand Complement 26

  27. Filter Operators 1 All media where $field satisfies the Compare comparison $operation with $value $field $operation $value ($operation: <, <=, =, =>, >) 1 Similar to Compare, but takes a $pattern Match $field with wildcards ( * , ? ) instead of an exact value $pattern 1 Has All media that have $field set $field 27

  28. Example Structures Universe 28

  29. Example Structures Universe Compare artist=“The XX” 29

  30. Example Structures Universe Compare Idlist artist=“The XX” 30

  31. Example Structures Universe Compare Idlist artist=“The XX” Organize Union “Hipster Songs” 31

  32. Example Structures Universe Compare Idlist artist=“The XX” Union “Hipster Songs” Reference “Hipster Songs” in ”Collections” 32

  33. Example Structures Universe Compare Idlist artist=“The XX” Union “Hipster Songs” Reference “Hipster Songs” in ”Collections” Compare Browse lastplayed<3days 33

  34. Example Structures Universe Compare Idlist artist=“The XX” Union “Hipster Songs” Reference “Hipster Songs” in ”Collections” Compare lastplayed<3days Match Search title=”Crystal*” 34

  35. Remarks • Used to organize, browse, search, or any combination of those • Can use different UI approaches to combine them, but all using the collection API • Dynamic sets but allows manual edits 35

  36. Collections 2.0 Google Summer of Code 2008 project by Erik Massop (nesciens) • Support for sources: id key value 42 artist Britney Spears 42 title Toxic 42 url file:///home/... • Support “medialists” (ordered, with duplicates, as opposed to “mediasets”) in the DAG • Token matching operator • Fix, improve and optimize querying (more later) 36

  37. Collections 2.0 Google Summer of Code 2008 project by Erik Massop (nesciens) • Support for sources: id key source value 42 artist plugins/id3v2 Britny Spaers 42 artist clients/nycli Britney Spears 42 title plugins/id3v2 Toxic 42 url server file:///home/... • Support “medialists” (ordered, with duplicates, as opposed to “mediasets”) in the DAG • Token matching operator • Fix, improve and optimize querying (more later) 37

  38. Collections 2.0 Operators 1 Order Returns a medialist ordered by $order $type $order 1 Returns $length entries from the operand, Limit starting at $start $start $length 1 Returns the mediaset of the operand (no Mediaset ordering, no duplicate) 1 All media where $property token-matches Token $property $value (e.g. “Floyd” matches “Pink Floyd”) $value 38

  39. 3. Usage “how, then?” 39

  40. Command-line Interface Collections are exposed in nycli (the new XMMS2 CLI) through collection patterns e.g.: • Idioteque • Pink Floyd Echoes • artist:“Sufjan Stevens” l:Illinois • (genre:Rock OR genre:Pop/Rock) date<1980 • title~usa url:*ogg +tag.favourite in:Awesome 40

  41. Collection Patterns • API helper function to parse patterns into collection structures • Supported in multiple nycli commands: • search <pattern> • add <pattern> • jump <pattern> • coll create <name> <pattern> • etc. • More generally: share a common syntax across clients (GUI, CLI, etc) Note: NOT a bijection with collection structures 41

  42. Collection Patterns nycli (new official CLI) http://xmms2.sf.net/ 42

  43. Collection Patterns abraca http://abraca.xmms.se/ 43

  44. Collection Structure API all = coll_universe() m_floyd = coll_match(all, field=”artist”, operation=”=” value=”Pink Floyd”) m_early = coll_match(m_floyd, field=”year”, operation=”<“, value=”1975”) m_static = coll_idlist([42,1337,666]) m_join = coll_union(m_early, m_static) 44

  45. Collection (1.0) Query API coll_query_ids(conn, coll, order[], limit_start, limit_len); => List of object ids matched by coll , ordered by the list of properties order , optionally restricted to a range. coll_query_infos(conn, coll, order[], limit_start, limit_len, fetch[], group[]); => Dict of properties (selected by fetch ) of objects matched by coll , ordered by the list of properties order , optionally restricted to a range and grouped. 45

  46. Collection Query Example coll_query_ids(conn, m_join, [‘artist’,‘album’,‘tracknr’]); => [412, 413, 414, 323, 5454, 4234, ...] coll_query_infos(conn, m_join, [‘artist’,‘album’,‘tracknr’], 0, 50, [‘artist’, ‘title’]); => [{artist: ‘Pink Floyd’, title: ‘Eclipse’}, {artist: ‘Pink Floyd’, title: ‘Echoes’}, {artist: ‘Britney Spears’, title: ‘Toxic’}, ...] 46

  47. Collection Query Example coll_query_infos(conn, m_join, [‘artist’,‘album’], 0, 50, [‘artist’,‘album’], [‘album’]); => [{artist: ‘Pink Floyd’, album: ‘Meddle’}, {artist: ‘Britney Spears’, album: ‘Foo’}, ...] 47

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend