Entwicklung eines persönlichen Managementsystems

Motivation


Die moderne Technologieentwicklung tendiert dazu, menschliches Verhalten auf der Grundlage der Verfolgung des gesamten Spektrums seiner Aktivitäten in der virtuellen und physischen Realität (Big Data) vorherzusagen. Dies ist ein positiver Punkt, denn wenn Sie sehen, wohin eine Person geht, können Sie ihr den kürzesten und effektivsten Weg zeigen. Nach dem Gesetz der Einheit und des Kampfes der Gegensätze ergibt sich hier jedoch die folgende Gefahr (für Vermarkter ist das Gegenteil die Aussicht), wie ich es sehe - dies ist eine Gelegenheit, Verhalten nicht vorherzusagen, sondern vorhersehbares Verhalten zu formen.

Wenn Sie interessiert sind, was eine Person dagegen tun kann, heißen Sie cat willkommen.

Wenn Sie noch weiter schauen, bildet die Gesellschaft selbst mit Hilfe der Kultur und anderer sozialer Instrumente natürlich ein vorhersehbares Verhalten des Einzelnen, aber dies ist zu weit gefasst, weil kultur gibt eine unvergleichlich größere meinungsfreiheit im gegensatz zu einem fokussierten informationsband, daher schränke ich sie ein.

Was kann ein einzelner Kunde tun, um die Aufgabe, sein eigenes vorhersehbares Verhalten zu erzeugen, zu erschweren? Für mich lautet die Antwort wie folgt: Um zu lernen, wie man mit etwas umgeht, muss man lernen, wie man es misst.

Aber was kann ein Mensch alleine messen und wie kann er es analysieren? Die Lösung wurde vor langer Zeit erfunden - sie führt ein persönliches Tagebuch (meine eigenen / meine kleinen Daten) und die anschließende Analyse der aufgezeichneten Ereignisse.

Aber wenn ich ein Tagebuch führe, ergibt sich zumindest für mich die folgende Schwierigkeit: Es ist fast unmöglich, Ereignisse / Objekte effektiv zu kategorisieren (ich bin durch objektorientiertes Denken verunreinigt). Zum Beispiel möchte ich Aufgaben, Gedanken, Fragen, Fehler usw. separat betrachten, die Verbindungen zwischen ihnen sehen, Analysen erhalten. Es ist anzumerken, dass teilweise Beispiele für wirksame Lösungen für dieses Problem in zahlreichen Büchern zum Zeitmanagement zu finden sind. Aber ich habe versucht, mein Fahrrad zu machen.

Also, welche Eigenschaften können ein ideales Tagebuch haben:
  • Dateninstitut und seine schnelle (im Grenzfall automatische) Klassifizierung nach verschiedenen Objekttypen wie Gedanken, Aufgaben, Erinnerungen, Kontakte, Schlaf, Notizen usw. Aufrechterhaltung von Beziehungen zwischen Objekten;
  • Herunterladen von Daten aus externen Quellen (soziale Netzwerke, Bankkonten, Tracker für körperliche Aktivität);
  • Automatische Erstellung von Analysen anhand verschiedener Informationsabschnitte;
  • Ausgabe von Tipps zu aktuellen Aktivitäten (Aufgaben mit hoher Priorität, Geburtstage usw. usw.);
  • Möglichkeit, Algorithmen für die individuelle Bearbeitung von Objekten zu konfigurieren;
  • Das System muss eine Auswahl geben, welche Informationen zur Veröffentlichung in einem externen Netzwerk verfügbar sind und welche personenbezogen bleiben (die Implementierung muss diesbezüglich Ehrlichkeit gewährleisten). Daten in dem externen Netzwerk werden ebenfalls klassifiziert und in Komponenten zerlegt.
  • Im Endeffekt sollten alle Informationen, auf die eine Person trifft, und alle Informationen, die von dieser Person generiert werden, klassifiziert und in ein solches Tagebuch eingepasst werden.

Und jetzt, nachdem wir mit den Träumen fertig sind, kehren wir vom platonischen Ideal zu unserem sündigen zurück und nachdem wir viele krumme Spiegel und nicht nur Spiegel durchlaufen haben, erhalten wir die Umsetzung des Konzepts:



Herausforderung


Anfangs habe ich mir folgende Ziele gesetzt:
  1. Erstellung von Objekten jeglicher Art ohne Entwicklung;
  2. Abschluss identischer Objekte auf einer separaten Seite mit Anzeige in Tabellenform sowie der Möglichkeit, zu einem separaten Objekt zu wechseln und eine Referenz in Form einer Karte anzuzeigen;
  3. Die Fähigkeit, Beziehungen zwischen Objekten herzustellen;
  4. Festlegen von Status und Kategorien für Objekte;
  5. Durchführung von Analysen \ Erinnerungen \ Prognosen.

Ergebnisse


Es stellte sich heraus:
  • Schaffung neuer Objekte;
  • Erstellung von Statusschemata, die an beliebige Objekttypen gebunden sind;
  • Es ist möglich, Verknüpfungen zwischen Objekten zu erstellen. Verknüpfungen werden in einer separaten Registerkarte angezeigt. Im Wesentlichen lösen Verknüpfungen das Problem der Vererbung und sind Verknüpfungen zwischen Objekten.
  • Hyperlinks zu Objekten - Es ist möglich, einen direkten Link zu einem Objekt zu erstellen.
  • Für Aufgaben ist es möglich, separate Ordner für die einfache Verarbeitung zu erstellen.

Die Probleme:
  • Keine Analyse;
  • Kein kaskadierendes Löschen von untergeordneten Objekten;
  • Es gibt keine Möglichkeit, nach Objekten zu suchen.
  • Es gibt keine Möglichkeit auf einer Seite mehrere Objekte zu bearbeiten;
  • Die Komplexität der Erstellung neuer Objekttypen (die Beschreibung des Objekts dauert etwa eine halbe Stunde, auch für mich als Autor)
  • Mehr oder weniger klare Architektur hat sich in eine Reihe von Hacks verwandelt

Lösung


Haftungsausschluss! Der Autor ist kein professioneller Programmierer und Spezialist auf dem Gebiet der Entwicklung von Python, sondern nur ein Amateur. Ideen zur richtigen Organisation der verwendeten Architektur und Technologien sind daher willkommen, und ich bin für diese Tipps sehr dankbar.

Github-Code

Toolkit verwendet


Backend:
  • Python 3.2.5 - Serverseite
  • SQLite 3.5.1 - Datenbank

Frontend:
  • Bootstrap 3.3.6 - Datenzuordnung
  • JQuery 2.2.0 - Logik
  • TinyMCE 4.3.2 - Texteditor. Zusätzlich wurde das Syntaxhighlighter-Plugin verwendet, um den Code zu formatieren.
  • Datatables 1.10.10 - Daten in tabellarischer Form anzeigen.

Lösungsarchitektur


Bild

Allgemeine Architekturbeschreibung


  1. In Python ist ein Dienst geschrieben, der auf localhost ausgeführt wird und Anforderungen von HTML-Seiten verarbeitet.
  2. Objekte sind HTML-Seiten mit einer bestimmten Beschriftung, in der die Namen der Felder angegeben sind, die den Feldern in der Datenbank entsprechen (es werden keine ORM-Lösungen verwendet, die Bearbeitung erfolgt mit Ihrem Fahrrad)
  3. Die Kommunikation mit dem Server erfolgt über JSON-Nachrichten.
  4. Alle Objekte vom Server werden beim ersten Laden der Seite geladen, später wird nur das Delta ausgetauscht.
  5. Es gibt eingebaute Objekte, dies sind Status und Beziehungen, andere Objekte werden separat beschrieben (siehe unten)

Mit zunehmender Funktionalität und dem Wunsch, so schnell wie möglich eine vollständige Lösung zu finden, begann sich die Architektur zu schleichen und es war nicht möglich, Objekte vollständig einzukapseln. In der Praxis gibt es also verschiedene Hacks und Momente, in denen die Einkapselung durchbrochen wird, aber im Allgemeinen ist das Schema relevant.

Frontend:
  • Main.js - Ein Einstiegspunkt für die Behandlung von Frontend-Ereignissen. Die Initialisierung der Anfangsdaten, die Verarbeitung von Ereignissen von der HTML-Seite und der Aufruf anderer Objekte zur Arbeit werden durchgeführt.
  • datatype.js - Interne Konvertierung von Daten in das für die Verarbeitung erforderliche Format, abhängig vom Szenario.
  • card.js - Verarbeiten der Karte eines Objekts, Anzeigen der Kartendaten zum Bearbeiten, Anzeigen, Verknüpfen und Speichern von Daten.
  • main_view.js - Steuert die Anzeige der Karte \ Tabelle auf der Seite
  • myajax.js - Wrap für Ajax-Anfrage
  • mydatatables.js - Ein Wrapper für die Arbeit mit datatables.net.
  • mytinymce.js - TinyMCE-Wrapper
  • % ObjectName% - Parameter für jeden Objekttyp.
  • all_relations.js - Alle möglichen Objekttypen, die beim Anzeigen von Beziehungen verfügbar sind.
  • object_state.js - Eine Klasse, die das Erscheinungsbild eines Objekts behandelt
  • rel.js - Umgang mit Beziehungen zwischen Objekten.
  • requester.js - Konvertiert Daten in ein Format zur Übertragung an den Server.
  • settings.js - Konstanten.

Backend:
  1. server.py - Verarbeitet Anforderungen.
  2. json2sql.py - Konvertiert eine json-Abfrage vom Frontend in eine SQL-Abfrage für DB
  3. dbserver.py - Ausführen einer SQL-Abfrage.
  4. settings.py - Optionen.
  5. object2db.py - Parameter der Objekttypen auf dem Server.
  6. actionfile.py - Erstellt Verzeichnisse für Aufgaben.


Datenbankschema:
  • % object_name% - Eine separate Tabelle für jedes erstellte Objekt.
  • sys_status - Mögliche Status, gruppiert nach Statusschemata .
  • Sys_rel2obj_items - Beziehungsdaten zwischen Objekten
  • Sys_rel_object2object - Konfiguration der Beziehung zwischen Objekten
  • object_type - Beschreibung der Typen
  • Sys_rel - Beschreibung der Beziehung


Beispiele für JSON-Nachrichten:
  • Status nach Objekt abrufen - {"Objekt": "Status", "Aktion": "Auswählen", "Elemente": [{"ID": 1, "Nachricht": {"Felder": [{"Spalte": " id ”,“ op ”:”> = ”,“ value ”:” 0 ″}]}}]}
  • Beziehungen nach Objekt abrufen - {"Objekt": "rel_items", "Aktion": "auswählen", "Elemente": [{"ID": 1, "Nachricht": {"Felder": [{"Spalte": " obj1_type ”,“ op ”:” = ”,“ value ”:” project ”}, {“ column ”:” id1 ″, “op”: ”=”, “value”: ”22 ″}]}}}
  • Erhalten Sie die möglichen Beziehungen von Objekten - {"Objekt": "sys_rel_object2object", "Aktion": "auswählen", "Elemente": [{"ID": 1, "Nachricht": {"Felder": [{"Spalte": " id ”,“ op ”:”> = ”,“ value ”:” 0 ″}]}}]}
  • Holen Sie sich alle Objekte - {"Objekt": "Projekt", "Aktion": "auswählen", "Elemente": [{"ID": 1, "Nachricht": {"Felder": [{"Spalte": "ID ”,“ Op ”:”> = ”,“ value ”:” 0 ″}}}]}}
  • Erstellen Sie ein Objekt - {"Objekt": "Projekt", "Aktion": "Einfügen", "Elemente": [{"ID": 0, "Nachricht": {"Felder": {"Titel": "123", ”Hinweis”: ”123”}}}]}
  • Ändern Sie das Objekt - {"Objekt": "Projekt", "Aktion": "Aktualisieren", "Elemente": [{"ID": 0, "Nachricht": {"Felder_Set": {"Titel": "1234", ”Note”: ”123”}, “fields_where”: {“id”: ”22 ″}}}]}


Wo:
  • Objekt - Objekttyp (z. B. Projekt, Aufgabe usw.)
  • Aktion - Art der Aktion (erstellen, löschen, ändern, löschen, holen)
  • Die Einzelteile - innerhalb einer einzigen Nachricht, können Sie mehrere Elemente, zum Beispiel verlangen, etwas zu tun Einsatz.
  • Msg - Nachricht in einem Paket
  • Felder - Felder für dieses Objekt


Einige der erstellten Objekte sind:
  • Projekt - Projektmanagement.
  • Aufgabe - Aufgabenverwaltung
  • Frage - Fragen aufrechterhalten
  • Denken - Leitgedanken, Ideen usw.
  • Timing - Zeitmanagement ()
  • Kontakt - Kontaktverwaltung
  • Tagebuch - Ein persönliches Tagebuch führen
  • Snippet - Snippet

Algorithmus zum Erstellen eines neuen Objekts


  1. Erstellen Sie eine Tabelle in der Datenbank
  2. Erstellen Sie die Datei% object_name% .html
  3. Erstellen Sie die Datei% object_name% .js
  4. Beschreiben Sie ein Objekt in object2db.py
  5. Wenn Sie den Status hinzufügen müssen, geben Sie die Daten in die Tabellen ein (sys_status)
  6. Wenn Sie neue Beziehungen erstellen müssen, geben Sie die Daten in die Tabellen ein (sys_rel_object2object).

Ich habe die Kreation nicht detaillierter beschrieben (und kein Video aufgenommen, obwohl die Idee ursprünglich war), weil Es war ein ziemlich langer und langwieriger Prozess. Der Designer hat es nicht getan, weil Es stellte sich heraus, dass es für das Konzept redundant ist, aber dies ist das erste, mit dem ich bei der Entwicklung von Version 2.0 beginnen werde (siehe unten).

Zukunftspläne für Version 2.0


Ideal ist es, mit einem Minimum an Aktionen mit der Maus mit beliebigen Objekten in einem einzigen Fenster zu arbeiten. Übersetzen Sie das Maximum in eine Beschreibung in der Befehlszeile.

Ideen:

  • Objekt-Editor. - Erstellen von Objekten, ohne dass HTML-Seiten manuell erstellt werden müssen, mit einer separaten JS-Datei für das Objekt und separatem Einrichten in Python.
  • Statuserstellung.
  • Erstellung \ Aufbau von Beziehungen.
  • Zeigen Sie auf einer Seite eine Reihe von Objekten an. - Derzeit ist die Architektur so aufgebaut, dass auf einer Seite nur ein Objekttyp angezeigt werden kann (ohne Links zu anderen Objekten).
  • Befehlszeile - Die Befehlszeile zum Reduzieren der Anzahl der Aktionen, die Vorgänge ausführen sollen.
  • Wenn Sie sich beispielsweise im Objekt "Projekt" befinden, wird "Task" in die Befehlszeile eingegeben und das Objekt "Task" wird automatisch mit Bezug auf dieses Projekt erstellt. Weil Derzeit müssen Sie auf die Registerkarte gehen
  • Verschlüsselung - Datenbankverschlüsselung hinzufügen.
  • Analytics - Möglichkeit der grundlegenden Analyse von Objekten mit Anzeige der Anzahl nach Status, Wichtigkeit usw.
  • Hinzufügen eines Objekts Begriffe (Daten) - Ein separates Objekt, das zu jedem Objekt hinzugefügt werden kann, mit der Möglichkeit, Abflüsse hinzuzufügen
  • Aktivitäten - Fähigkeit, bestimmte Aktionen auszuführen
  • Auf Duplizierung prüfen - Beim Erstellen einer Instanz eines Objekts wird auf Duplizierung geprüft
  • Pflichtfelder - Definition der Pflichtfelder.

Fazit


Ich habe versucht, einen Artikel so kurz wie möglich zu schreiben, damit ich die Hauptidee und Beschreibung der Implementierung schnell verstehen kann, ohne viele unnötige Informationen zu ertrinken.

Ich benutze dieses System, etwa 3 Monate, gleichzeitig Fehler zu korrigieren, der Flug ist ± gerade.

Danke für deine Zeit.

Jetzt auch beliebt: