
 ###########################################################################################################################
 ################################### TODO				##################################################
 ###########################################################################################################################

- port range einstellbar machen!!!! 
- query server programmieren und in spider integrieren	(35h)
- easymirror support so einstellen, das der hostname automatisch geholt wird und in easymirror.cfg eingetragen wird
- grafisches frontend mit Perl::TK; programmieren   (25h)
- use Memoize; 
  memoize 'fib';	# memorize &fib();
  { bringt nur was, wenn man oft mit zahlen/werten hantiert }
- testen ob, eine seite schon gescannt wurde: mit hilfe einer externen datei -> rest ist zu unzuverlässig

 ###########################################################################################################################
 ################################### Changelog                                   ###########################################
 ###########################################################################################################################

- Arbeitszeit bis jetzt: 630 h

25.07.2005:
- erster versuch der realisierung von object oriented programming in perl
- Easyspider.pm enthält erste wichtige Routinen 
- easyspider.cfg enthält alle parameter aus konzept 0.3
- easyspider.pl benutzt modul Easyspider.pm um erste objekte zu generieren und gibt content der url wieder 

26.07.2005:
- Linkextractor (extrahiere alle http links aus datenstrom)
- dateityp bestimmmung der url (einfache version, noch nicht final)
- metakeys, title extrahieren
- body und head extrahieren (als html/ als text)
- verzeichnistiefe bestimmung der url (einfache version, wenn mir nix besseres mehr einfällt bleibt es so)

28.07.2005:
- linktiefe scan implementiert (mit unterscheidung ob externe links folgen oder nicht )

02.08.2005:
 - TODO: linktiefe scanner mittels fork realisieren
 - linktiefe scanner mittels fork funktioniert nur unter linux
 - windows version des spider scannt nur sequentiell -> keine funktionierende andere lösung
 
09.08.2005
 - Linktiefe scanner routinen abgeschlossen und in finaler version
 - windows: nur sequentiell scannen
 - linux: sequentiell und multithreading
 - Implmentiert, das dateien lokal gespeichert werden, neben dem scannen - Funktionalität liegt in Routine: CLIENT_get_links
 - verzeichnisstrukturen werden beim lokalen speichern berücksichtiget
 
 10.08.2005
 - Easyspider.pm -> &get_links(): frame support, realativ zu absolute fix eingebaut
 - entfernt: threads aus config und Easyspider.pm
 - linktiefe_scanner mittels fork vorerst nicht benutzen, kann in art dos ausarten, erst noch begrenzung einbauen!
 
 11.08.2005
 - Entscheidung multihtreading support erst für spätere versionen anzubieten- code zu fehleranfällig -> multhitreading code entfernt
 - Einbau des Language Flags, Meldungen werden dem Flag entsprechend in dieser Landessprache ausgegeben
 - Eingebaut, dass programm sich beendet, wenn mehr als in der Config angegebene Seiten gescannt wurden
 - TODO: abfrage einbauen, die a.)anzeigt, wieviel links gescannt wurden und fragt, ob trotz der grenze weitergescannt werden soll 
 	-> was meint der rest dazu? (problem gibts nur wenn später alles automatisch ablaufen soll, dann ist das eine bremse )
 - Geplant: Parser Modul das XX nach ascii portiert, welche files sollen wie portiert werden? / soll dies in memory oder via file passieren

16.08.2005:
- integriert pdf to text (Module: Spider::Parser.pm)
- integriert doc to text
- TODO: installer schreiben der die benötigten programme zum convertieren von doc/pdf installiert (dies für linux und windows seperat)
- Linux test bei umwandlung von pdf / doc -> text funktioniert

18.08.2005:
- optimierungsversuch am spider

24.08.2005:
- vollständig kommentiert

27.08.2005:
- anpassung der Parser.pm und Easyspider.pm sodass die gemachten einstellungen in easyspider.cfg übernommen werden
- Easyspider paket für asim auf windows angepasst

28.08.2005:
- xls to text parser eingebaut
- ppt to text parser eingebaut
- rtf to text parser eingebaut
- test aller parser unter windows erfolgreich

22.09.2005:
 - scanlist und blacklist support eingebaut: hauptfunktionen befinden sind in der routine linktiefe_scanner()

16.10.2005:
 - whitelist support eingebaut
 - html_to_ascii_parser() leicht modifiziert

17.10.2005:
 - code cleanup
 - region tag support eingebaut

18.10.2005:
 - html parser geschrieben
 - neuer htmlparser in spider integriet
 - output funktion für text geschrieben und integriert (not tested)

19.10.2005:
 - output funktionen entfernt und black/white und scanlist entfernt -> buggy 

 26.10.2005:
 - verzeichnistiefe/pfadtiefe implementiert

 27.10: 
 - Spider::Compression fertiggestellt (packen/entpacken von dateien)
 - erste funktionierende Version der Client/Server Modells für den Spider

 28.10:
 - C/S Modell für EasySpider erweitert
 - Client modell als OO-Perl umgesetzt

 29.10.2005:
 - HtmlParser umgeschrieben, referenzbasierende werteübergabe
 - erste Version des EasySpider Servers als OO-Perl

 30.10.2005:
 - HtmlParser.pl im Verzeichnis modules/Spider ist nun finale Htmlparser, objektorientiert hat es nicht richtig funktioniert
 - Compression.pm = zuständig für das komprimieren der daten mit rar
 - Client.pm = clientfunktionen zum austauschen von daten mittels tcp server   ; clientfunktionen
 - Server.pm = serverfunktionen zum austauschen von informationen mittels tcp ; serverfunktionen
 - ResultParser.pm: zuständig für das erstellen der outputdateien in txt, sql, xml
 - ResultParser.pm: output generator für txt und xml erstellt / basierend auf template : bisher nur xml
 - Client / Server modell für Easyspider funktionsfähig / implementiert in OO-Perl

 31.10.2005:

 - HtmlParser.pl angepasst: Algorithmus zum umwandeln des Inhaltes des Strings $content in formatierten Text, Zeilenumbrüche bei . ! ? 
 - alpha version des servers: EasySpiderTCPServer.pl mit grundlegensten funktionen implementiert
 - EasySpiderTCPServer.pl: scanlist support eingebaut, liest aus scanlist und markiert den eintrag anschließend als WORKING

 01.11.2005:
 - Parser.pm angepasst - jetzt mit referenzen programmiert -> speicherschonender

 02.11.2005:
 - is_filetype(): verbessert
 - HtmlParser.pl: leicht verbessert!

 03.11.2005:
 - Funktion, die vor beginn testet, ob alle Verzeichnisse bestehen, und ob alle externen Programme exsistieren	: erledigt
 - Funktion, die vor beginn alle wichtigen output verzeichnisse erstellt : erledigt
 - todo: htmlparser.pl anpassen, dass nach 80 zeichen automatisch ein zeilenumbruch kommt

 04.11.2005:
 
 - Parser.pm - alle Funktionen angepasst auf Referenzen und auf Funktionalität unter Windows erfolgreich getestet
 - erste versuch der reübertragung bei falscher CRC Prüfsumme

 04.11.2005: 
 - MILESTONE: CRC CHECK EINGEBAUT - BEI FEHLERHAFTER ÜBERTRAGUNG -> NEUÜBERTRAGUNG

 07.11.2005:
 - server entpackt empfangene daten in das Verzeichnis, das in der server config unter STOREPATH angegeben wurde

 10.11.2005:
 - minor code cleanup

 18.11.2005:
 - code zum entfernen doppelter einträge eingebaut: nocht nicht getestet
 "	push (@working_links, @$LINK_ARRAYREF_SUB);
	my @tmp = @working_links;
	undef @working_links;
	@working_links = sort keys %{ { map { $_, 1 } @tmp } };
	undef @tmp;
"

09.02.2006:

- code zum entfernen doppelter einträge siehe oben - entfernt
- einfache robotrules parser eingebaut: WWW::RobotRules
- es werden keine doppelten einträge mehr gescannt -> jedoch bei vielen gescannten einträgen wir speicherverbrauch größer!!! (eventuell alles in ein file auslagern)

24.02.2006:

- xml writer eingebaut

26.02.2006:

- major code cleanup ( 5h ) results:
	- deutlich schnellerer scannen
	- übersichtlicherer code

27.02.2006:

- rss parser eingebaut
- test aller vorhandener parser
- angefangen den config parser auszulagern -> Spider::Config und aus EasySpider.pm ausgelagert
- crypt::ssleay für windows / linux installieren dann klappt https support 
- https für windows: http://johnbokma.com/perl/https.html

28.02.2006:

- funktion mit der geprüft wird, ob $tmp_url ein http, https oder ftp link ist, wenn nicht wird http vorgesetzt
- ParseXML: xml parser eingebaut und getestet

2.3.2006:

- bugfixing
- einstellung ob robots.txt beachtet werden soll oder nicht
- proxy support beim scannen eingebaut ( noch nicht getestet )

3.3.2006:

- if ( lc( $OS ) eq "linux" ) {} - als standartauswahl für das OS eingefügt

########################################

- todo:  + parsen der config file aus dem modul easyspider.pm/server.pm auslagern
	 
############
### zusammenfassung
############

Noch ca 5-10h arbeit am spider und die version 1 liegt vor