FileManager #

Das Verwalten von Dateienen die eine verteilte Datenbank nutzen. MyPeerDB

Dieses Projekt ist auf BerliOs gehostet. Hier, auf dieser Wiki kann man sich über einige zum Projekt bezogene Dinge unterhalten. Die Entwicklung ist Vorzugsweise auf Linux da es sich aber um ein Java basiertes Projekt handelt, sollte es in den Grundzügen überall laufen.

  Das Projekt wird später in den Desktop integriert,
  der dabei entstehende C Code ist nicht protierbar,
  auf andere Systeme als Vorgesehen. 

Kurz zum Projekt #

Mir schwebt es vor ein Programm zu schreiben, dass den mc, nautilus, Xfce-Dateibrowsxer und Windows-Explorer vereint. Alle haben toole Funktionen und auch eine gute Integration in den Desktop. Diese Projekt versucht ersteinmal einen einfachen Dateibrowser zu ersetzen und eine brauchbare Schnittstelle für die jeweiligen Desktops zu bieten. In einem zweiten Schritt wird die Integration in den Desktop versucht. Das Projekt soll weiter zumindest folgenndes können.

  • GUI Anzeige
    • Anzeige vollständig über XML änderbar
    • Aktionen können auch selber definiert werden und den Menüs angefügt werden.
    • Konfigurationsdialoge, die einfache Dinge tuen sollen aus Konfigurationen (XML) erstellt bzw. definiert werden können
  • Consolen Anzeige
  • Rein(e) Tastaturbedinung
  • Mount von Virtuellen Dateisystemen
    • Unter Linux: mount unterstüzen
    • Unter Windows: net use unterstüzen

Bibliotheken #

Name Bemerkung
inotify Ermöglicht den Zugriff auf mehr Dateiattribute.
fuse Nutzen von FUSE
VFS Verschiedene Dateisysteme

Menu #

Die meisten GUI-Anwendungen haben ein Menu, hier soll eine Grobe stüze sein, was zumindes bedacht werden sollte. Eine Mögliche aufteilung (standard) ist unten zu sehen.

Datei #

Neuer Tab (Reiter) Ein neues Tab anlegen
Neues Fenster Ein neues Fenster öffnen
Öffnen --> Vorschläge zum wählen des Programmes das für das Öffnen der markierten Datei verwendet werden soll.
Ordner anlegen Ordner anlegen
Datei anlegen Datei anlegen
Verknüpfung anlegen Linux ln oder in Windows eine Datei (NTFS kann auch sym-links)
Mit Server/Service verbinden VFS auf ein anderes Ziel einstellen oder mit einem Service verbinden (Jabber Bot)
Datei Eigenschaften Eigenschaften der markierten Datei
Müll anzeigen/leeren Dateien die als gelöscht markiert sind Löschen
Alle Fenster/Anzeigen schließen Alle Kinder (Fenster) schließen. (Wenn Aufrufer selbs Kind ist wird er zum Elternelement)
Einstellungen Konfiguration des Programmes
Beenden Anwendung beenden

Bearbeiten #

Ausschneiden Eine Datei zum bewegen markieren
Kopieren Eine Datei zum duplizieren markieren
Einfügen Eine markierte Datei verschieben/kopieren.
Alles auswählen Dateien in der Ansicht markieren
Nach Muster auswählen Dateien in der Ansicht, die auf die Regel passen, markieren
Auswahl umkehren Datei markierung invertieren
Duplizieren Aktion Kopieren und Einfügen
Umbenennen Eine Datei mit neuem Namen versehen
Zum löschen markierern Nur markieren und nicht bewegen (FS kann RO-Mouted sein)
Direkt löschen Lösche eine Datei aus dem System (FS muss schreibbar sein)
Senden an Datei versenden Via Mail, an Programm (STDOUT) oder Server
Sync Dateien abgleichen
Verschlüsseln Datei verschlüsseln mit AES, ... (GPG).
Signieren Datei signieren mit PGP
Archiv anlegen Markierte Dateien zu einem Zip, Jar, Tar, 7zip, ... zusammenstellen

Ansicht #

Symbolleisten --> Alle möglichen Symbolleisten
Vollbild Keine Popupmeldungen mehr
Dateiansicht --> Baum, Liste, Normal, ...
Verborgene Datein Dateien Anzeigen? (Linux und Windows haben andere Regeln.)
Geschützte Datein Dateien Anzeigen? (Kann durch eine XML Datei festgelegt werden.)
Anordnung --> Sortiertung der aktiven Anzeige, Willkür, Datum, ...
Icons --> Bilder (Vorschau) Vergrössern, Verkleinern, normal

Lesezeichen (Gehe zu) #

Ebene auf Eine Ebene hochgehen
Zurück in der History Eine Ansicht zuvor
Vor in der History Eine Ansicht danach
Verlauf leeren Zurück und Vor geht nicht mehr
Eintrag einfügen Einen Sprungeitrag anlegen (XML Datei muss schreibbar sein)
Einträge verwalten Die XML Datei editieren (Seperater Editor?)
Home Home Verzeichnis (auch unter Windows)
root unter Windows C: unterLinux /

Hilfe #

Hilfe Unter Windows sollte die Windowshilfe angezeigt werden oder ein ähnlicher gut übersichtlicher ersatz. Linux Hilfesysteme unterstüzen?
About Ein paar Informationen zum Programm und Entwicklung

Modus #

Zu Consolenmodus In den Consolenmodus
Zu GUI-Modus In die GUI-Anzeige
Tastaturmodus Maus abstellen (Tastenkürzel navigation oder FXX Tasten)

GUI Konfiguration #

Die GUI soll komplett durch eine XML Datei erstellt werden. So dass jeder die Möglichkeit hat die GUI nach seinen Anforderungen anzupassen. Ähnlich wie bei Firefox und Co. Soll jeder seine Anzeige selber in die Hand nehmen können. Dazu kommt, das einbinden von fremden Programmen - Programm Pipe wird integriert -, das ändern der Anzeige nicht nur wegblenden der Eintäge sonder auch das Verschieben dieser in den Kategorien. Weiter muss auch das auslösen von Aktionen unter bestimmten Bedingungen ermöglicht werden.


XML Beispiel #

<!DOCTYPE xgui SYSTEM "xgui.dtd">
<window name="">
	<!-- Die Hauptklasse -->
	<class name="" />
	<!-- Dieser Test muss wahr sein um das Fenster anzuzeigen. -->
	<test class="" />
	<!--
		Wir haben die Möglichkeit auf Ereignisse zu reagieren. Ein scope vom
		Wert public ermöglicht es auch Events, von auserhalb abzufangen,
		private Events hingegen werden nur von der Klasse selbst bearbeitet
		und nicht global Regestriert. Ist ein Event private, wird es bei einer
		Zusammengesetzten Anzeige nur auf vom Container erzeugte Events
		reagieren, nicht aber auf Events, der Unteranzeigen.
	-->
	<actions scope="public" name="">
		<action name="" command="" event="" />
		<!-- Dieser Test gilt für alle actions -->
		<test class="" />
	</actions>
	<!-- Das normale Menu -->
	<menubar name="">
		<menu name="">
			<!--
				jeder Eintrag ist einer Klasse zugeteilt, die sich um die Anzeige
				und Events kümmert!
			-->
			<item name="" command="" class="" />
		</menu>
	</menubar>

	<!--
		Wir definieren eine Anzeige, die wir bei Anwendungsstart auch
		anzeigen?
	-->
	<views>
		<view name="">
			<!-- Die Klasse übernimmt die Anzeige -->
			<class name="" />
			<!-- wir können auf Events reagieren und etwas machen -->
			<actions scope="private">
				<action name="" command="" event="">
					<!-- Ein Test muss Wahr sein, um 
				eine Action durchzuführen. -->
					<test class="" />
				</action>
			</actions>
			<!-- das Menu lässt sich erweitern oder verdecken -->
			<menubar>
				<menu name="" overlay="true">
					<item name="" command="" class="" />
					<!--
						mit ref kann man ein Objekt wieder verwenden. Dabei wird von der
						Wurzel aus der name zusamengesetzt. z.b Menu1.SubMenu2
					-->
					<ref name="" />
				</menu>
			</menubar>
		</view>
		<!-- Alle möglichen Anzeigen können hier definiert werden -->
		<view name="">
			<class name="" />
		</view>
	</views>
</window>

DTD #

Eine DTD sollte für den Anfang reichen und ermöglicht es uns mit XPATH und XQUERY zu arbeiten. Da eine ID immer eine Zahl sein muss, ist das Attribut name eingeführt. NAME ist einfacher TEXT und muss es muss eindeutig sein um auch den ref Tag zu verwenden.

<!ELEMENT window (class?,test*,actions?,menubar,views)>
<!ATTLIST window name CDATA #REQUIRED>

<!ELEMENT views (view+,actions?,test*,ref*)>
<!ELEMENT view (class?,actions?,test*,menubar?,ref*)> 				
<!ATTLIST view 
	name CDATA #REQUIRED
	default (true|false) "false">

<!ELEMENT menubar (menu+,test*,ref*)>
<!ATTLIST menubar name CDATA #IMPLIED>

<!ELEMENT menu (item*,actions?,test*,ref*)>
<!ATTLIST menu 
	name CDATA #REQUIRED
	visible (true|false) "true"
	overlay (true|false) "true">

<!ELEMENT actions (action+,test*,ref*)>
<!ATTLIST actions
	scope (private|protected|public) "public"
	name CDATA #IMPLIED>

<!ELEMENT action (test*)>
<!ATTLIST action 
	name CDATA #REQUIRED
	command CDATA #REQUIRED
	event CDATA #REQUIRED>

<!ELEMENT class (test*)>
<!ATTLIST class name CDATA #REQUIRED>

<!ELEMENT test EMPTY>
<!ATTLIST test class CDATA #REQUIRED>

<!ELEMENT item (test*)>
<!ATTLIST item
	name CDATA #REQUIRED
	command CDATA #REQUIRED
	class CDATA #REQUIRED>

<!ELEMENT ref EMPTY>
<!ATTLIST ref name CDATA #REQUIRED>

--JensKapitza, 22-Mar-2009 13:34


Nachtrag Shortcuts #

In meinen bisherigen Überlegungen fehlte die Möglichkeit von Tastencodes, das will ich hier nun Nachholen.

DTD

action Elemente sollten diese key Tags nun aber auch erlauben.

  <!ELEMENT key EMPTY>
  <!ATTLST key code CDATA #REQUIRED>

XML Der code ist durch eine Codemap (angelehnt an den XServer) hinterlegt. So dass bestimmte Codes auf verschiedenste Tasten und kombinationen aus Ihnen abgebildet werden.

  <action ...>
     <key code="132" />
  </action>

--JensKapitza, 23-Mar-2009 22:20


Interaktion und Ideee #

Ersteinmal viel mir gerade auf, dass es nicht mal eben so einfach ist, das System mit den Diagrammen die in UML vorhanden sind mal eben zu beschreiben. Es liegt eventuell an den vielen Verscheidenen Konzepten, die Andere verwenden. Damit das Projekt nicht sofort in die Falsche oder in eine ungewisse Richtung wandert, hier eine kurze Einführung, welche Idee Ich bei verschiedenen Teilen des Projektes habe.

Das FileSystem #

Ersteinmal so viel mir im gespräch mit KaiEhlers auf, sollte man das Wort definieren. Was ist eine FileSystem eigentlich.

  Unter Filesystem verstehe ich eine Abstraktion auf Speichermedien,
  die es ermöglicht Blöcke oder auch komplette Daten auf verschiedene
  vorgegebene Medien abzulegen. Dabei kümmert sich das Filesystem um
  Latenzen und Fehler die bei der Speicherung auf das Medium entstehen.
  Bietet eine einfache API für den Zugriff grundlegender Sachen. Wie
  Öffnen und Schreiben. Zudem besitzt ein Filesystem möglichkeiten
  für Rechtevergabe, Indexierung und hat eine feste Sortierung.

Soviel ersteinmal zur Definition. Dahingehend angelehnt, ist nun folglich das Projekt in mehrere Teile gegliedert.

FileSystem Add-In

Um möglichst Plattform übergreifend zu sein ist es Ziel ganze Implementationen von FileSystemen wie ext3,ext4,ntfs,jfs,... zur Verfügung zu stellen. Und mit der Anwendung auszuliefern. Das kommt dem Wunschkonzept des Linuxkernel nahe, wo ein FileSystem auch nur noch ein Programm sein soll. Da es nicht notwendig ist.

Interface GUI

Swing ist eine tolle Umgebung um Anwendungen zu Programmieren und bietet schon etliche Möglichkeiten bestimmte Sachen anzugehen. Zudem ist das MFC Pattern einfach erweiterbar und man kann eigene Events einfach am System anmelden und werfen (feuern).

Interface Konsole

Die Konsole ist meist Text gebunden ohne Maus. Jedoch muss man darauf achten, dass eine Maus hinzukommt, oder Teil der Konsoleneingabegeräte ist. Auch hier muss es einfach sein die Bedienung über die Tastatur durchzuführen. Sieht man sich den mc an, so sind einige nette Ansätze vorhanden. Zudem wäre es toll teile von ncdu oder dem vim mit einzubauen, da hier bestimmte Konzepte praktischen Nutzen haben.

Interface Allgemein

Konzept von verschidenen Modi ist bestimmt eine gute nützliche Sache. Das lässt sich aber nicht überall einbauen.

Interface Integration

Es ist bestimmt super, wenn man es schaft den mount Befehlt oder auch net use zu unterstüzen. Das würde auch ermöglichen, dass andere Programme mit unserer Anwendung interagieren können. Eine Implementation wird hier aber leider C erfordern.

--JensKapitza, 23-Mar-2009 23:31


Einteilung im Projekt #

Für das Projekt wird nun Maven verwendet. Hier wird einem die Arbeit der Verwaltung von Abhängigkeiten erleichtert. Es ermöglicht, wenn man sich an die vorgabe gewöhnt hat auch durch zahlreiche Plugins eine ganze Menge mehr.

Konsole

Hier wird der Teil implementiert, der sich auf die Konsole bezieht. D.h. es müssen Interfaces implementiert werden, die für die Bereitstellung einer GUI ala XML sorgen. Im XML File sollte in den class Eigenschaften also nur ein Interface Name stehen und eventuelle Kontrolleigenschaften wie

  -console -help -gui ...

sollte über den Aufruf mitgeteilt werden.

GUI

Eine Implementation hier muss auch die einfache Nutzung der Maus auffassen. Diese GUIs können mehr als einmal aufgerufen werden. Es gibt nicht nur ein Fenster, dass muss berücksichtigt werden!

==== MetaSchicht ===

Im moment fällt mir kein geeignetter Name ein (Deutscher) um sowas wie commons abzubilden. Aber hier werden die Interfaces bereitgestellt, die verwendung finden sollten.

FileSystem

Hier werden Interfaces bereitgestellt, die es ermöglichen Dateien und Ordner Abzubilden und einige Grundlegende Rechte mitverwalten. So soll es auch möglich sein, mit hilfe von einem Overlay(Überdeckung) andere Vorteile in RO-Systemen zu nutzen oder auch Rechte für einen eventuellen mount anzugeben, selbst wenn das System nur lesend ist.

= AndereFileSysteme

--JensKapitza, 28-Mar-2009 13:15

Für den Zugriff auf verschiedene Filesysteme sollte man sich Apache Commons VFS ansehen. Da braucht man nicht alles neu zu erfinden. -- ThomasBayen


SSH für Java #

Während eines ausfluges, in ein anderes Projekt hatte ich mich mit dem Nutzen von SSH unter Java beschäftigt. Hier nun meine Kurze zusammenfassung. Es gibt einige SSH Bibliotheken, die von verschiedenen Seiten beforzugt werden. SSH ist in Eclipse und in Netbeans vorhanden. Das Eclipse Lager hat seine eigene, so weit ich dies ersehen konnte. Netbeans scheint JSCH zu nutzen. Die Lizenz ist an BSD angepasst und somit sehr offen. Wer noch interessante andere Implementierungen kennt, kann sie gerne posten. Kurz noch, ich habe noch keine implementation in Java >=1.5 gesehen/gefunden.

--JensKapitza, 04-Apr-2009 11:58


Das RFC 959 ist machbar und nicht all zu schwer, dass kann man auch easy integrieren. an einem simplen Server arbeite ich im Moment.

--JensKapitza, 10-Dec-2009 23:03

Add new attachment

Only authorized users are allowed to upload new attachments.
« This page (revision-16) was last changed on 10-Mar-2010 00:19 by JensKapitza