123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290 |
- <!doctype html>
- <html lang="en">
- <head>
- <meta charset="utf-8">
- <title>Libreant: the general purpose media archive manager</title>
- <meta name="description" content="Nasty code for nasty people!">
- <meta name="author" content="Insomnia-lab">
- <meta name="apple-mobile-web-app-capable" content="yes" />
- <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
- <link rel="stylesheet" href="css/reveal.css">
- <link rel="stylesheet" href="css/theme/sky.css" id="theme">
- <!-- For syntax highlighting -->
- <link rel="stylesheet" href="lib/css/zenburn.css">
- <!-- If the query includes 'print-pdf', use the PDF print sheet -->
- <script>
- document.write( '<link rel="stylesheet" href="css/print/' + ( window.location.search.match( /print-pdf/gi ) ? 'pdf' : 'paper' ) + '.css" type="text/css" media="print">' );
- </script>
- <!--[if lt IE 9]>
- <script src="lib/js/html5shiv.js"></script>
- <![endif]-->
- </head>
- <body>
- <div class="reveal">
- <!-- Any section element inside of this container is displayed as a slide -->
- <div class="slides">
- <section>
- <h1>Libreant: </h1>
- <h3>The general purpose media archive manager</h3>
- <p>
- <small>For more info:<a href="https://libreant.readthedocs.org/en/latest/">libreant.rtfd.org</a></small>
- </p>
- <img src="img/logo_black.png" alt="Logo" style="border-width:0; width:35%; background-color: transparent; box-shadow:0 0 0px">
- </section>
- <section>
- <section>
- <h2>Background</h2>
- <h4>Insomnialab birth</h4>
- <p>
- Two years ago some people began to meet in Rome, in a local squat, inside Sapienza university.
- There were exciting times and a new hacker space was born.
- </p>
- <br/>
- <p class="fragment">
- <code class="python">Insomnialab</code> is now two years old and is currently located inside the walls of Forte Prenestino,
- after the eviction of the squat.
- </p>
- </section>
- <section>
- <h2>Background</h2>
- <h4>Needs</h4>
- <p>
- In the Sapienza squat we contributed to the beginning of a project, called <em>Proprietà Pirata</em>. The goal was
- to overcome the limits imposed by the copyright enforcement, primarily inside the university classes.
- We realized that a lot of infoshops and in self-organized places (autonomous libraries, etc.) would benefit from
- an <u>easy-to-use and federative software</u>.
- </p>
- </section>
- <section>
- <h2>Background</h2>
- <h4>Existing software</h4>
- <p>
- We realized that there existed some FOSS solution:
- </p>
- <ul>
- <li class="fragment"><b>Calibre</b><br/><small>desktop application, not suited for web managing</small></li>
- <li class="fragment"><b>Colibrì</b><br/> <small>not ready at the time</small></li>
- <li class="fragment"><b>PeerLibrary</b><br/> <small>designed specifically for academic papers</small></li>
- </ul>
- </section>
- </section>
- <section>
- <section>
- <h2>Reinventing the wheel</h2>
- <h4>Libreant features</h4>
- <ul>
- <li class="fragment"><b>Node aggregator</b><br/><small>Give the possibility for some nodes to browse each other</small></li>
- <li class="fragment"><b>webapp</b><br/><small>The interface, both for user and admin</small></li>
- <li class="fragment"><b>Easy-to-use and customizable</b><br/><small></small></li>
- </ul>
- </section>
- <section>
- <h2>Architecture</h2>
- <h4>Tools</h4>
- <ul>
- <li class="fragment"><b>Language</b>: python</li>
- <li class="fragment"><b>Database</b>: elasticsearch + fsdb</li>
- <li class="fragment"><b>web framework</b>: Flask</li>
- </ul>
- </section>
- <section>
- <h2>Architecture</h2>
- <h4>How we built it</h4>
- <ul>
- <li><a href=./index.html#/2/3>Agherant</a> (aggregator)</li>
- <li><a href=./index.html#/2/4>Preset/Templating</a></li>
- <li><a href=./index.html#/2/5>Full text search (ES)</a></li>
- <li><a href=./index.html#/2/6>Localization</a></li>
- <li><a href=./index.html#/2/7>REST API</a></li>
- <li><a href=./index.html#/2/8>CLI</a></li>
- <li><a href=./index.html#/2/9>Modularity</a></li>
- </ul>
- </section>
- <section>
- <h2>Architecture</h2>
- <h4>Agherant</h4>
- <p>Pretty self-explanatory<br/>
- <img src="img/graph.png" alt="a mesh graph" style="width:40%"></p>
- <p><small><a href=./index.html#/2/2>Back</a></small></p>
- </section>
- <section data-markdown>
- <script type="text/template">
- ## Architecture
- #### Preset/Templating
- ```json
- {"id":"book",
- "description":"simple book",
- "properties": [{ "id": "category",
- "description": "book format",
- "required": true,
- "type": "enum",
- "values": ["scientific","novel","children"]
- },
- { "id": "title",
- "description": "a required property",
- "required": true
- },
- { "id": "actors",
- "description":"people who contributed to the creation of the work"
- }],
- "allow_upload": true}
- ```
- [Back](./index.html#/2/2)
- </script>
- </section>
- <section>
- <h2>Architecture</h2>
- <h4>Full text search</h4>
- <p>Let's try it! <p>
- <small><a href=./index.html#/2/2>Back</a></small></p>
- </section>
- <section>
- <h2>Architecture</h2>
- <h4>Localization</h4>
- <p>We use Babel to allow for localization.</p>
- <p>An example can be looked in the html skeletons</p>
- <pre><code class="hljs html">
- {%trans%}Sorry, no books matching your query{%endtrans%}
- </code></pre>
- <p><small><a href=./index.html#/2/2>Back</a></small></p>
- </section>
- <section data-markdown>
- <script type="text/template">
- ## Architecture
- #### REST API
- ```
- GET /api/v1/volumes/<volume-id>
- GET /api/v1/volumes/?q=staceppademinchia&size=2&from=5
- POST /api/v1/volumes/
- PUT /api/v1/volumes/<volume-id>/attachments/<attachments-id>
- GET /api/v1/volumes/<volume-id-id>/attachments/<attachments-id>/file
- ```
- #### [Back](./index.html#/2/2)
- </script>
- </section>
- <section>
- <h2>Architecture</h2>
- <h4>CLI</h4>
- <pre><code class="hljs bash">
- Usage: libreant [OPTIONS]
- launch libreant daemon
- Options:
- --version Show the version and exit.
- -s, --settings <path> file from wich load settings
- -d, --debug operate in debug mode
- -p, --port <port> port on which daemon will listen
- --address <address> address on which daemon will listen
- --fsdb-path <path> path used for storing binary file
- --es-indexname <name> index name to use for elasticsearch
- --es-hosts <host>.. list of elasticsearch nodes to connect to
- --preset-paths <path>.. list of paths where to look for presets
- --agherant-descriptions <url>..
- list of description urls of nodes to
- aggregate
- --help Show this message and exit.
- </code></pre>
- <p><small><a href=./index.html#/2/2>Back</a></small></p>
- </section>
- <section>
- <h2>Architecture</h2>
- <h4>Modularity</h4>
- <p>We designed libreant to be:</p>
- <ul>
- <li>Modular</li>
- <li>Easy to read</li>
- <li>Hackable</li>
- </ul>
- <p><small><a href=./index.html#/2/2>Back</a></small></p>
- </section>
- </section>
- <section>
- <section data-markdown>
- <script type="text/template">
- ## The code
- #### Fork me on github
- Easy as a fork
- ```
- git clone https://github.com/insomnia-lab/libreant
- ```
- </script>
- </section>
- <section data-markdown>
- <script type="text/template">
- ## Read the docs!
- We have been trying also to document appropriately the code!
- [libreant.rtfd.org](http://libreant.rtfd.org)
- </script>
- </section>
- <section>
- <h1 style="padding-top: 150px">THANKS</h1>
- </section>
- </section>
- </div>
- </div>
- <script src="lib/js/head.min.js"></script>
- <script src="js/reveal.min.js"></script>
- <script>
- // Full list of configuration options available here:
- // https://github.com/hakimel/reveal.js#configuration
- Reveal.initialize({
- controls: true,
- progress: true,
- history: true,
- theme: Reveal.getQueryHash().theme, // available themes are in /css/theme
- transition: Reveal.getQueryHash().transition || 'default', // default/cube/page/concave/zoom/linear/none
- // Optional libraries used to extend on reveal.js
- dependencies: [
- { src: 'lib/js/classList.js', condition: function() { return !document.body.classList; } },
- { src: 'plugin/markdown/showdown.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
- { src: 'plugin/markdown/markdown.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
- { src: 'plugin/highlight/highlight.js', async: true, callback: function() { hljs.initHighlightingOnLoad(); } },
- { src: 'plugin/zoom-js/zoom.js', async: true, condition: function() { return !!document.body.classList; } },
- { src: 'plugin/notes/notes.js', async: true, condition: function() { return !!document.body.classList; } }
- ]
- });
- </script>
- </body>
- </html>
|