Fernbedienungspräsentation von einem Smartphone

    Ich habe kürzlich einen Bericht erstellt (über Percona Live ). Und eines Nachts (immerhin Jetlag) dachte ich, es wäre schön, meine Kommentare auf den Folien - Tipps - zu sehen und die Folien zu wechseln, ohne zum Laptop zu gehen. Ich hatte keine Wundergeräte, um Folien zu wechseln und Kommentare anzuzeigen. Aber es gab ein Smartphone mit Android. Google Market hat enttäuscht. Die meisten dieser Anwendungen funktionierten nur mit PowerPoint, für LibreOffice fand ich nur eine, bezahlte und es sah irgendwie falsch aus.

    Aber es gibt eine einfache Lösung - einen Browser. Sie können den http-Server auf einem Laptop anheben, sich vom Telefon aus anmelden und die Folien über die Links wechseln. Und es funktioniert nicht nur mit Android, sondern auch mit Apple und mit Windows-Handys. Ja, im Allgemeinen wird kein Smartphone benötigt, Sie können sogar WAP oder einen anderen Laptop verwenden.

    Es stellte sich als ziemlich einfach heraus. Etwa 70 Zeilen in Python, keine externen Abhängigkeiten (fast).

    Kommentare werden aus der Datei gelesen (ich habe mich nicht darum gekümmert, sie aus der Präsentation herauszuziehen). Wir erhöhen BaseHTTPServer an einem Port. Ich versuche alles von 8000 bis 9000 in zufälliger Reihenfolge, bis es funktioniert. Gemäß den Anweisungen mit StackOverflow bestimmen wir unsere IP. Außerdem generieren wir eine große Zufallszahl - diese ist Teil der URL, sodass niemand im Publikum die Folien zu uns wechselt. Als kleine Annehmlichkeit öffne ich den Browser, um einen QR-Code für den Zugriff auf den Server anzuzeigen. Wenn Sie während der Konferenz keinen Internetzugang haben, spielt es keine Rolle, dass Sie die URL manuell eingeben müssen. Und für die Arbeit genug internes WiFi.

    Gemäß den Anweisungen für BaseHTTPServerUm GET-Anforderungen zu verarbeiten, müssen Sie eine do_GET- Methode erstellen . Wir schaffen. Das erste, was Sie überprüfen müssen, ist unsere Zufallszahl. Wenn dies der Fall ist und die URL mit next oder prev endet, simulieren wir ein Leerzeichen bzw. ein Backspace und geben die Seite mit Kommentaren für die nächste oder vorherige Seite zurück.

    Ich habe fvwm , daher gab es keine Probleme beim Simulieren von Klicks. Für andere Fenstermanager können Sie ein separates Programm oder sogar ein spezielles Modul für Python verwenden, es gibt solche - ich habe es überprüft.

    Nun, eigentlich ist das alles. Nur die Schriftart in den Einstellungen des mobilen Browsers muss vergrößert werden. Und um Kommentare kürzer zu schreiben, sonst um sie lange zu lesen - es kommt zu unangenehmen Pausen während des Berichts. Ja, und entfernen Sie das Zeitlimit zum Ausschalten des Bildschirms auf dem Smartphone und Laptop.

    Der Test unter Kampfbedingungen war erfolgreich.

    #!/usr/bin/python
    import sys
    import os
    import random
    import socket
    import BaseHTTPServer
    import re
    handler_class=BaseHTTPServer.BaseHTTPRequestHandler
    token="/" + str(random.randint(0, sys.maxint)) + "/"
    page = 1
    validate = re.compile(token + "(prev|next)$")
    def send_key(key):
      os.system("FvwmCommand 'All (VCLSalFrame) FakeKeypress press {}'".format(key))
    class Handler(BaseHTTPServer.BaseHTTPRequestHandler):
      def link(self,s,n):
        if n < 0 or n >= len(data):
          return " "
        return '{}'.format(token,s,s)
      def do_GET(self):
        cmd = validate.match(self.path)
        if cmd is None:
          self.send_response(404)
          self.send_header("Content-type", 'text/html')
          self.end_headers()
          self.wfile.write('

    OK

    ') return global page if cmd.group(1) == 'prev' and page > 0: page = page - 1 send_key('BackSpace') elif cmd.group(1) == 'next' and page < len(data)-1: page = page + 1 send_key('space') self.send_response(200) self.send_header("Content-type", 'text/html; charset=utf-8') self.end_headers() self.wfile.write(""" {pagenum} - {next}
    {data}
    {prev} - {pagenum} """.format(prev = self.link('prev', page - 1), pagenum = page + 1, next = self.link('next', page + 1), data = data[page])) def read_file(s): with open(s) as f: return re.split('--- *\n?', f.read()) def ip(): s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s.connect(('192.168.1.1', 0)) # fake, but nobody cares return s.getsockname()[0] def make_url(port): url="http://{}:{}{}prev".format(ip(), port, token) print url os.system("firefox 'http://chart.apis.google.com/chart?cht=qr&chs=200x200&chl={}' &".format(url)) def run(): for port in random.sample(xrange(8000, 9000),1000): try: httpd = BaseHTTPServer.HTTPServer(('',port), Handler) httpd.server_activate() make_url(port) httpd.serve_forever() except socket.error, e: if e.errno not in (98,): print e exit() except KeyboardInterrupt: print "\nExiting" exit() data = read_file('notes.txt') print "Got {} slides".format(len(data)) run()

    Jetzt auch beliebt: