<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>Paperless</title> <meta name="description" content="A breakdown of what's different and why Django is amazeballs"> <meta name="author" content="Daniel Quinn"> <meta name="apple-mobile-web-app-capable" content="yes" /> <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" /> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, minimal-ui"> <link rel="stylesheet" href="css/reveal.css"> <link rel="stylesheet" href="css/theme/league.css" id="theme"> <!-- Code syntax highlighting --> <link rel="stylesheet" href="lib/css/zenburn.css"> <!-- Printing and PDF exports --> <script> var link = document.createElement('link'); link.rel = 'stylesheet'; link.type = 'text/css'; link.href = window.location.search.match(/print-pdf/gi) ? 'css/print/pdf.css' : 'css/print/paper.css'; document.getElementsByTagName('head')[0].appendChild( link ); </script> <!--[if lt IE 9]> <script src="lib/js/html5shiv.js"></script> <![endif]--> <style> .reveal pre code { background-color: rgba(63,63,63,0.8); } li, p { text-shadow: 3px 3px 3px rgb(0, 0, 0); } a.nocolour { color: rgb(255, 255, 255); } </style> <link rel="stylesheet" href="contrib/font-awesome-4.3.0/css/font-awesome.min.css"> </head> <body> <div class="reveal"> <!-- Any section element inside of this container is displayed as a slide --> <div class="slides"> <section> <br /> <br /> <h1>Paperless</h1> <p><small> <i class="fa fa-twitter"></i> <a class="nocolour" href="https://twitter.com/searchingfortao">@searchingfortao</a> | <i class="fa fa-github"></i> <a class="nocolour" href="https://github.com/danielquinn">danielquinn</a> | <i class="fa fa-globe"></i> <a class="nocolour" href="http://danielquinn.org/">danielquinn.org</a> </small></p> <br /> </section> <section> <h2>My Inspiration</h2> <img src="img/stack.jpg" style="width: 50%;" /><br /> </section> <section> <section> <h2>Paper Sucks</h2> </section> <section> <h2>Paper Loves Being Mysterious</h2> <p>There's No Ctrl+F</p> </section> <section> <h2>Paper Hates Your Spine</h2> <p>It's heavy and takes up space</p> </section> <section> <h2>Paper Wants to Breed</h2> <p>Backups? More Paper!</p> </section> <section> <h2>Paper Hates the Planet</h2> </section> </section> <section> <h2>It's 2016</h2> <p>We shouldn't even need to use this stuff anymore</p> <p>So I made Paperless</p> </section> <section> <h2>What's it Do?</h2> <ul> <li>Consumes documents from a directory, API, or mailbox</li> <li>OCRs them and puts the text in a database</li> <li>Automatically tags the db record based on user-rules</li> <li>Encrypts and stores the original</li> </ul> </section> <section> <h2>It's Just a Wrapper</h2> <ul> <li>ImageMagick</li> <li>Tesseract</li> <li>GnuPG</li> <li>Python3/Django</li> </ul> </section> <section> <h2>How's it Work?</h2> <section> </section> <section> <h3>1: The Consumer</h3> <p style="padding: 1em;">(Imports documents)</p> <ul> <li>Runs in a loop</li> <li>Reads from a directory</li> <li>Occasionally checking a mailbox</li> </ul> </section> <section> <h3>2: The Webserver</h3> <p style="padding: 1em;">(Lets you find stuff)</p> <ul> <li>Currently the Django Admin (I know)</li> <li>Provides a DRF API</li> <li>Users are building proper UIs</li> </ul> </section> </section> <section data-background="img/pony.png"> <h2>Demo!</h2> <img src="img/kitten.jpg" style="width: 50%;" /> </section> <section> <h2>TODO</h2> <p>It works, but it needs polish</p> <ul> <li>The UI is the Django admin</li> <li>Mail consumption is really raw</li> <li>Some sort of plugin architecture?</li> <li>OMG Tests</li> </ul> <aside class="notes"> <ul> <li> <strong>Plugin architecture</strong>: there've been requests for some overly custom stuff to happen before and after consumption, but in the UNIX spirit of "do one job well", I think this sort of thing is better written as a plugin -- which means I need to figure out a best practise for that. </li> </ul> </aside> </section> <section> <h2>Fork Me</h2> <p> <i class="fa fa-github"></i> <a class="nocolour" href="https://github.com/danielquinn/paperless">https://github.com/danielquinn/paperless</a> </p> <img src="img/repo.svg" style="width: 300px;" /><br /> </section> </div> </div> <script src="lib/js/head.min.js"></script> <script src="js/reveal.js"></script> <script> // Full list of configuration options available at: // https://github.com/hakimel/reveal.js#configuration Reveal.initialize({ controls: true, progress: true, history: true, center: true, transition: 'convex', // none/fade/slide/convex/concave/zoom backgroundTransition: 'zoom', loop: true, // Optional reveal.js plugins dependencies: [ { src: 'lib/js/classList.js', condition: function() { return !document.body.classList; } }, { src: 'plugin/markdown/marked.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, condition: function() { return !!document.querySelector( 'pre code' ); }, callback: function() { hljs.initHighlightingOnLoad(); } }, { src: 'plugin/zoom-js/zoom.js', async: true }, { src: 'plugin/notes/notes.js', async: true } ] }); </script> </body> </html>