Tag Archives: django

SuTeCo: Suchfunktion und virtuelle Gruppen

30 Jan

Das Problem mit der Suchfunktion unter Solr, das ich in meinem letzten Beitrag erwähnt habe, wurde erfolgreich gelöst, obwohl es entsprechend viel Zeit in Anspruch genommen hat.

Um die Suche nach Tags, mit denen Personen und Gruppen getagt wurden zu ermöglichen, sollten zwei separate SearchQuerySets erstellt werden (für PeopleTagging und GroupTagging), die viele redundante Einträge hatten. Diese Redundanz entstand durch das mehrmalige Taggen einer Person bzw. Gruppe mit ein und demselben Schlagwort. Dafür wurde eine Funktion geschrieben, die diese Redundanz in eine Art Ranking umwandelt, mit dem man feststellen kann, welche Person oder Gruppe am häufigsten mit einem der gesuchten Begriffe getagt wurde. Weiterlesen

Advertisements

SuTeCo – People- und Gruppentagging, Activity Liste

12 Dez

Wie ich in meiner letzten Post erwähne, habe ich mich in den letzten mit Konzept People Tagging beschäftigt. Es wurde ein Modell angelegt, das zum Tagging von Personen und Gruppen verwendet sollte. Im Modell zeigten sich Schwachstellen, die während der Implementierung als große Problemen herausstellen.

Nach eingehender Überlegung habe ich mich dafür entschieden, die bestehende Lösung für Tagging in Form eines Plug-Ins namens „Django-Tagging“ zu verwenden. Dieses Plug-In stellt ein bereit fertiges Tagging-Modell als auch umfangreiche Funktionalität zum Erstellen, Verwalten und Darstellen von Tags zur Verfügung. Weiterlesen

SuTeCo – Gruppenverwaltung

8 Nov

Im nächsten Schritt wird die Implementierung der Schnittstelle für das Gruppenmanagement umgesetzt. Diese Seite ermöglicht dem Benutzer die Verwaltung von eigenen Gruppen sowie von Gruppen, denen er folgt. Es werden folgende Grundfunktionen realisiert:

  • Anzeige von eigenen Gruppen und Followed-Gruppen sowie deren Beschreibungen
  • Erstellen / Löschen eigener Gruppen
  • Folgen / Entfolgen von Gruppen
  • Einfügen / Löschen neuer Benutzer
  • Taggen von Gruppen

Wie in Abbildung 1 zu sehen, soll die Seite des Gruppenmanagements alle eigenen und Follow-Gruppen in Kreisform darstellen. Im rechten Seitenbereich werden detaillierte Informationen über die jeweils ausgewählte Gruppe dargestellt. Das Steuerungspanel mit den Buttons „Gruppe anlegen“ oder „Gruppe löschen“ wird nach vielen Überlegungen nicht hier platziert, da es aus Usability-Gründen nicht hierher passt. Die anderen Elemente der Benutzeroberfläche bleiben an der Stelle, wo sie geplant war. Weiterlesen

Unit-Tests – ELISMA Datenzugriffsschicht

28 Sep Daten für die Unit-Tests

Die Implementierung der Datenstruktur in Python ist verhältnismäßig weit fortgeschritten. Zeit für Tests, um bei Anpassungen der Implementierung schnell die korrekte Funktionsweise überprüfen zu können. ELISMA speichert die Daten in einer Baum-Datenstruktur. Zum Testen habe ich drei Bäume zusammengestellt, die es ermöglichen, die Operationen auf der Datenstruktur auf Korrektheit zu überprüfen. Die drei Bäume werden bei Ausführung der Tests gemäß der Grafik erstellt. Weiterlesen

Unterstützung Team-basierter Kommunikation durch visuelle Hierarchien, innovative Gruppenbildung und People Tagging

24 Sep

Wie schon in meinem ersten Blog bereits erwähnt wurde, soll die von mir zu entwickelnde Web-Applikation die Organisationsstruktur eines Unternehmens grafisch abbilden. Da fast jede Organisationsstruktur hierarchisch aufgebaut ist, ist es sinnvoll, die Datenstruktur eines Verzeichnisdienstes wie OpenLDAP zu nutzen, um die Organisationsstruktur abzubilden.

Im Rahmen dieser Masterarbeit wird beispielweise die Organisationsstruktur einzelner Arbeitsgruppen des Heinz Nixdorf Institut (HNI) abgebildet. Da aber die einzelnen Organisationseinheiten der Organisationsstruktur des HNI ziemlich viele Attribute haben (z. B. HNIStatus, HNI-ID), die im Rahmen dieser Masterarbeit nicht benutzt werden, wird ein „abgespeckte“ Schema der bestehenden Organisationsstruktur angelegt.
Ein Beispiel dieser Struktur ist:

Abbildung 1. LDAP-Struktur eines Benutzers

Da die bestehende LDAP-Struktur des HNI hauptsächlich zum Verteilen von Zugriffsrechten gedacht wurde, ist sie für die hierarchische Abbildung der Organisationsstruktur nicht gut geeignet und muss durch bestimmte Attribute erweitert werden:

  • „owner“ – dadurch definiert man den Leiter einer Arbeitsgruppe bzw. eines Teams. Das Attribut wird nur einer Gruppe, bzw. einem Team zugewiesen, das einen Leiter hat (Abbildung 2).
  • „businessCategory“ – gibt an, zu welcher Kategorie der Tätigkeit eine Person gehört (Abbildung 1). Dieses Attribut wird gebraucht, um die Mitarbeiter auf mehrere Ebenen zu gliedern.
  • „employeeType“ – bezeichnet die Tätigkeit einer Person, wie Leiter, wissenschaftlicher Mitarbeiter, nicht wissenschaftlicher Mitarbeiter, etc. (Abbildung 1).

Abbildung 2. LDAP-Struktur einer Gruppe

Die Erweiterbarkeit des vorhandenen LDAP-Schemas durch eigene Attribute, macht den Einsatz vom LDAP sehr attraktiv.

LDAP-Module in Django
Um die Authentifizierung und Aufbau der Organigramm in der zu entwickelnden Web-Anwendung zu implementieren, werden zwei Module eingesetzt. Das erste Modul ist „django-auth-ldap“ und ermöglicht es, das Django-Projekt gegen einen beliebigen LDAP-Server zu authentifizieren. Das zweite Modul „ldap“ wird für die Abfrage der hierarchischen Struktur des LDAP-Servers benutzt.
Die beiden Module sind in der Standardinstallation von Django nicht verfügbar und sollten extra installiert werden.

Userinterface der Web-Anwendung
Um das User Interface zu gestalten wird CSS-Framework Bootstrap eingesetzt. Das Framework existiert schon als ein Toolkits für Django „django-bootstrap-toolkit“ und lässt sich ziemlich einfach einsetzen. Eine Sammlung von schon fertigen Form-Widgets erleichtert und beschleunigt die Entwicklung einer Benutzeroberfläche.
Darüber hinaus  ermöglicht Bootstrap Kompatibilität für die meist benutzten Browser, was dem Entwickler viel Arbeit abnimmt.

Visuelle Hierarchie (Organigramm)
Um das Organigramm im Browser abzubilden, ist der Einsatz vom jQuery Org Chart geplant. Da das PlugIn aber nicht allen Anforderungen entspricht, wird es weiterentwickelt.

Falls jemand andere PlugIns mit ähnlichen Funktionen kennt, wäre ich sehr dankbar!