Blog: Latest Entries (15):


Warum Spalten-Prefixes nicht immer gut sind

Lange Zeit habe ich auch immer bei Columns von Datenbank-Tabellen immer ein Prefix verwendet. Die Tabelle TESTS hatte dann z.B. die Spalte TEST_ID. Daran ist ja auch erstmal nichts verkehrt. Probleme gab es mit Oracle und der Beschränkung auf 30 Zeichen für den Spaltennamen in einigen Fällen.


$entity->setId($data["TEST_ID"]);


Der Code oben funktioniert auch super, wenn man jedes Value "per Hand" in das Object schreibt.

Wenn wir aber nun ein automatisches Mapping über Annotationen nutzen kann es in einigen Fällen schnell umständlich werden.
Wenn wir keine Ableitung und Vererbung benutzen, ist auch hier kein Problem zu erwarten. Wenn wir aber eine Basic-Klasse verwenden, von der alle anderen Klassen ableiten, haben wir schnell ein Problem, weil wir in der Basic-Klasse in den Annotationen einen Platzhalter für den Prefix verwenden müssten. Ohne Prefix geht es hier sehr viel einfacher.


/**
* @dbcolumn=ID
*/
private $id=0;



/**
* @dbcolumn={prefix}_ID
*/
private $id=0;


Deswegen sollten Prefixe nur bei FKs verwendet werden, um ein automatisches Mapping unkompliziert nutzen zu können. Wenn man es jetzt nicht nutzt, will man es später vielleicht und kann dann jetzt schon alles so bauen, um später keine Probleme zu bekommen. Platzhalter funktionieren natürlich auch.. gehen aber zur Lasten der Performance.

TXT2Links-Update

Früher war es nur möglich URL zu finden, die am Anfang einer Zeile standen und die Zeile für sich allein hatten. Das war für einfache Listen vollkommen ausreichend. Nun wurde es so erweitert, dass auch URLs innerhalb eines Textes gefunden werden könnten. Man kann nun also eine *.txt-Datei laden und die Web-App versucht alle enthaltenen Links zu finden und darzustellen.

CSS Frameworks

In der letzten Zeit habe ich mit CSS-Frameworks zu tun gehabt. Bootstrap, Foundation und UIKit. Mit Bootstrap hatte ich ja schon etwas länger Kontakt. Foundation jetzt so 3 Wochen und UIKit 2 Tage. Bootstrap gefällt mir von der standard Optik aber immer noch am Besten. Bei UIKit gefallen mir die mitgelieferten Icons. Foundation macht was es soll, aber sieht mir an einigen Stellen doch zu sehr nach plain-HTML aus und die Dokumentation sagt mir am wenigsten von den Dreien zu.

Aber am Ende machen doch alle drei genau das Selbe und das auch sehr ähnliche Weise. Was ich mit dem einen hinbekomme, kann ich ohne große Probleme auch mit den anderen erledigen. Oft muss man nur die CSS-Class's austauschen.

Ob man nun soviele ähnliche Frameworks braucht lasse ich mal dahin gestellt und versuche erstmal für mich heraus zu finden, welches ich nun als primäres verwenden sollte.

Microsoft Lumia 640

Viele haben ja etwas gegen die Lumias... ich mag aber mein Lumia 640.

Kamera ist gut. Der Akku hält extrem lange und raus nehmbar ist. Oberfläche lässt sich wirklich gut bedienen und ist schnell. Auch alle wichtigen Apps sind vorhanden. Endlose Versorgung mit Updates. Selbst alte Lumia 1020 bekommen immer noch alle Windows Updates.

Und im Gegensatz zu meinen alten Smartphones mit Bada 2.0 oder Firefox OS kann ich jetzt meinen Eltern auch von Unterwegs aus helfen dank des Teamviewer-Clients.

bbcode-image

bbcode-image


Also ich kann die Lumias nur empfehlen! (Das Lumia 1020 hat eine wirklich geniale Kamera)

bbcode-image
Microsoft Lumia 640


jQuery einfaches DataBinding

Es muss nicht immer AngularJS sein, um ein einiger Massen automatisches Databinding zu haben. Auch mit jQuery kann sich schnell kleine Lösungen basteln. Hier wir eine Liste von Items aus gegeben (<ul><li>...), die <li>'s sind per Drag and Drop sortiertbar und werden später wieder eingelesen und die Items der Reihenfolge der <li>'s entsprechend sortiert. Das wird schon ganz klassisch über die DOM-Elemente gemacht. Aber ich hatte keine Lust darauf auch die Checkboxen dannausdem <li> über das DOM zusuchen und auszulesen.

Hier zeigen sich die Vorteile von Closures mal wieder. Wenn man eine CheckBox ändert wird sofort über das onChange-Event getriggert auch das Feld des Objekts im Array angepasst. Ohne das Array oder DOM-Elemente durchlaufen zu müssen. Alles ganz automatisch.


//bind checkbox to item.visible of the current item
var func=function(item){
return function(){
item.visible=!item.visible;
}
};
check.change(func(items[j]));


Ich kann immer noch nicht verstehen, wie manche JavaScript-Entwickler ohne Closures auskommen und einige.. wenige.. ok.. einer.. sogar mal meinte Closures bräuchte man überhaupt und man komme immer gut ohne aus.

Zend Engine Interna

Was haben PHP und Java gemeinsam? Deren unterste Schicht der VM/Engine ist in C geschrieben. Aber was interessiert die VM oder Engine? Irgendwann kommt man an den Punkt wo man Performance-Probleme hat und dann muss man verstehen warum etwas Langsam ist. Die Frage dann sollte auch nicht lauten: "Wie bekomme ich die Anwendung schnell?" Sondern eher: "Wie habe ich sie langsam bekommen?" Denn erstmal muss man die Gründe kennen, um dann Lösungen zu finden. Lösungen sind nicht immer so einfach zu finden, weil manche Dinge sind einfach langsam und manchmal muss man sein ganzes Vorgehen ändern. Assoc-Arrays sind toll, aber es sind eigentlich keine Array sondern Hash-Maps und die sind nun mal nicht ganz so performant.
Aber warum das so ist und warum die in PHP7 viel besser implementiert sind, erschließt sich aber nicht einfach so, wenn man nicht weiß, wie die Engine arbeitet. Auch einen Garbage-Collector gibt es in PHP, der genau wie in Java zu 98% super läuft. Aber wenn er Probleme macht, muss man wissen wie er arbeitet um ansatzweise überhaupt das Problem zu verstehen. Zirkel bei Referenzen sind ein großes Problem, wenn er die Objekte zum freigeben markieren will. Reference-Count gibt es auch dort.

Jedem der sich auch für die Interna der Zend Engine 5.x und 7 interessiert und sich etwas über Performance informieren möchte kann ich diese Artikel empfehlen:

Internal value representation in PHP 7 - Part 1
Internal value representation in PHP 7 - Part 2

PHPs new hashtable implementation

Bewerben und Bewerber

Heute bin ich über diesen Artikel bei jaxenter.de gestolpert. Da ich ja auch vor paar Monaten auf Jobsuche war, habe ich einige der im Artikel beschriebenen Dinge auch gesehen und erlebt. Da kann ich dem Autor des Artikel auch sehr Recht geben mit seinen Kritik-Punkten.

Besonders ist mir bei einigen Stellenangeboten die extreme Anzahl an sehr konkreten Technologien und Frameworks, die man alle beherrschen soll. Wenn man im Java EE gearbeitet hat, weil man dass es viele redundante Technologien gibt. So wäre heute eine konkrete Anforderung Hibernate zu beherrschen meiner Meinung nach gar nicht nötig, da sowie so am Ende JPA verwendet wird. Oder auch 5 verschieden PHP-Frameworks. Am Ende wird man nie mit all diesen Dingen auf einmal konfrontiert werden. Wenn es auch ein eine relativ kleine Firma ist, kann man fast davon ausgehen, dass auch allgemein nur Grundwissen von Nöten ist, weil man einfach nicht alle paar Tage mit einem anderen Framework arbeitet.
Bei solchen Fällen habe ich dann auch erlebt, dass einige Firmen einen Profi in allen Bereichen wollen und andere auch ganz klar erkannt haben, dass man kein Profi sein muss und auch sagen, dass vieles in alten Projekten verwendet wurde und man nur für Content-Änderungen und kleine Bugfixes ran muss. Für so etwas reichen aber bessere Erfahrungen in der Programmiersprache und ein Grundverständnis des Frameworks.

Auch die Angabe von Jahren ist immer sehr schlecht. Ich habe sehr konkrete Erfahrungen mit einem Projekt das Jahre JBoss und Hibernate als JPA-Implementierung einsetzte, aber man am Ende mit einigen Schulungen und viel Eigeninitiative in wenigen Monaten mehr richtig machte und erkannte dass man die Jahre davor mehr falsch als richtig gemacht hatte. Ich kann auch Jahre mit einem Framework arbeiten und nur die grundlegenden Dinge davon verwenden und nie auf eine moderne Version updaten. Das sind dann Fähigkeiten wo jeder nach einem Monat ist, die man eben aber über Jahre konstant gehalten hat und nie vertieft hat. 2 Monate intensiver Beschäftigung kann also mehr Wert sein, als Jahr der oberflächlichen Nutzung. Und Nutzung und richtige korrekte Nutzung einer Technologie sind auch Unterschiede.

Als jemand der einen Mitarbeiter sucht würde ich, vielleicht kommt es ja mal soweit, eher mir Dinge angucken, die der Bewerber schon mal gemacht und welche Grundlegenden Erfahrungen und Wissen er mitbringt. Ob es die eine konkrete Technologie ist, ist oft sehr egal. Ich durfte mal mit die Bewerber begutachten, die ein Projekt weiter führen sollten, an dem ich längere Zeit in der Planung und Realisierung involviert war.. aka.. ich hate das Grundsystem entwickelt.

Antworten Bewerber #1:
* "Damit konnte ich schon mal Erfahrungen sammeln"
* "Das ist mir ein Begriff"
* "Damit hatte ich mich schon mal beschäftigt"
* "Ist mir bekannt"

Antworten Bewerber #2:
* "Wir haben mit XXX gearbeitet"
* "Die Probleme hatten wir auch"
* "Was tut die Lib genau? ... aha.. nein dafür hatten wir XXX"
* "Da müsste ich mich noch dann einarbeiten"

Wir Entwickler waren am Ende sehr für Bewerber #2. Die Grundlagen waren da und da war es egal ob die eine konkrete Technologie schon mal benutzt worden ist. Bewerber #1 schien von allem schon mal was gehört zu haben, und hatte Erfahrungen gesammelt.. aber er hatte wie sich dann heraus stellte nie ein komplettes größeres Projekt realisieren müssen und in der Uni mal ein Cluster aus 2 App-Servern mit einem primitiven Service aufzubauen, bringt oft weniger als jemand der noch nie ein Cluster gebaut hat, aber dafür schon etwas mehr mit einem App-Server gearbeitet hat.

Das ist auch ein Tipp an Berufseinsteiger aus Uni oder so. Einfach zu geben, dass man kaum reale Erfahrung hat und dafür mehr auf die Grundkonzepte setzen, die man beherrscht. Nicht so tun als könnte man sofort alles und extrem produktiv damit umgehen, sondern einfach, zeigen was man schon kann und dann etwas darauf setzen, dass man sich schnell weiterbilden kann.

Ende der Geschichte war natürlich, dass Bewerber #1 eingestellt wurde und er lernen musste, was jeder von uns gelernt hat: In Java programmieren zu können und mit J2EE-Umgebungen zu arbeiten ist noch mal eine ganz andere Stufe, die man nicht einfach durch das betrachten kurzer Beispiele lernt.
Und auch wenn wir Entwickler für Bewerber #2 waren, das was an Bewerber #1 uns am meisten störte war, dass er versuchte so zu tun, als würde alle dieser kleinen konkreten Technologien zu beherrschen. Das war unrealistisch und man wir haben es ihm auch schnell nicht mehr geglaubt, wenn er meinte dass er auch damit mal "Kontakt hatte".

Am Ende habe ich bei meinen Bewerbungen nicht mehr darauf geachtet, möglichst viele der Punkte zu erfüllen. Ich wollte PHP oder Java, am besten im Webbereich. Ich kenne Oracle und MySQL.. also reicht es wohl für jede SQL-fähige Datenbank. Wenn mehr als ein Framework aufgezählt wurde und ich eines davon besser kannte, reichte mir es auch. Am Ende stellte sich eben heraus, dass auch der Großteil an sich irrelevant war und bei der Pflege der Altsystem es wichtiger ist eine Exception lesen zu können als das gesamte Framework zu kennen. Es gibt am Ende ja immer noch Google!

HHVM und PHP7

Der erste Release Candidate von PHP 7 ist verfügbar und der auch von HHVM gibt es eine neue Version. Ich würde mir beides gerne mal ansehen. Aber ich habe nicht die Zeit mir alles komplet einzurichten und mir noch extra ein Linux zu installieren. Ich benutze Windows und werde auch erstmal dabei bleiben. Also fällt leider HHVM schon mal für einen kurzen Test raus. Aber PHP7 ist für Windows verfügbar und auch Bitnami bietet schon ein WAMP-Paket mit PHP7 an. Also werde ich mir das in den nächsten Tagen mal ansehen. Einmal kurz gucken, ob aoop darauf funktioniert oder nicht. Ich bin mal gespannt.

Zend Framework 2 und Injections

Meine erste Reallife-Erfahrung mit dem ZF2 und Models war eine eher weniger positive. Das TableGateway braucht unbedingt den Service-Manager bzw den DB-Adapter daraus. Meine Vorgängerin hat sich dazu entschlossen eine Basis-Entität zu bauen, die wiederum von TableGateway ableitet und man so relativ einfach save() und
load()-Methoden in die Model-Klasse einbauen konnte. Der Service-Manager wurde dann durch den Constructor der Model-Klasse durch gereicht bis man den Constructor des TableGateways mit dem DB-Adapter aufrufen konnte. Auch zwischen durch wurde der Service-Manager immer mal benötigt. Weil.. man ohne ihn keine Instanz einer Model-Klasse bekommen konnte.
Um so eine Instanz zu bekommen wurde eine Factory verwendet:


'service_manager' => array(
'factories' => array(
/** Modelle laden */
'sModel' => function($sm) {
$model = new S\Model\S($sm);
return $model;
}
),

/**
* By default, the ServiceManager assumes all services are shared (= single instantiation),
* but you may specify a boolean false value here to indicate a new instance should be returned.
*/
'shared' => array(
'sModel' => false
)
)


Jedes mal aber die Factory zu bemühen eine neue Instanz zu erzeugen ist nicht gerade performant und mit den ganzen Ableitungen ist es auch sehr unübersichtlich. Ich wollte einfach schnell eine Instanz einer Model-Klasse haben und nicht ein riesiges Object bekommen. Also sowas wie in POPO .. eine POJO in PHP eben.
Ein Cosntructor ohne Argumente und eine Klasse nur mit Attributen ohne Logik. Also find ich an mir zu überlegen, ob diese ganzen Ableitungen überhaupt nötig sind oder man mit der Dependency-Injection nicht was viel besseres bauen könnte.

Ich bin dann schnell zu DAOs gwechselt. Die Factory injeziert einmal den Service-Manager und kann immer die selbe Instanz des DAOs liefern. Die DTO/Model-Klasse ist schön klein und beim Befüllen in Schleifen viel schneller als eine Intanz über die Factory anfordern zu müssen.

Meine Lösung ist momentan:


'service_manager' => array(
'factories' => array(
'sDAO' => function($sm) {
return new S\Model\DAO\SDAO($sm);
}
),
)



class SDAO extends TableGateway{
private $_tableName="s";
private $_sm=null;

public function __construct($serviceManager){
$this->_sm=$serviceManager;

parent::__construct(
$this->_tableName,
$serviceManager->get('dbAdapter')
);
}

.........
}


Man kann nun so damit Arbeiten:

echo "name: ".$this->getServiceLocator()->get('sDAO')->loadS($id)->getName();


Das ist eine der Stellen wo Konzepte aus de Java-Welt perfekt mit PHP und dem ZF2 zusammen arbeiten und einen großen Vorteil bringen.

MP4 to Gif Update

So.. nach ich gelesen habe, dass Facebook GIFs zulassen will und man für MP4 bald zahlen muss und WebM damit vielleicht interessanter wird, habe ich MP4 to Gif mal geupdatet. Das Ergebnis wird jetzt nicht mehr in einem neuen Fenster geöffnet (was man ja immer extra bestätigen mußte, damit das Fenster geöffnet werden durfte) sondern in einem eigenen Dialog.


Canvas Bilder rotieren

Vor dem Upload ist es oft wünschenwerts ein Bild drehen/rotieren zu können.

Ich hatte mich damals doch sehr damit rumgeärgert, um den richtigen Mittelpunkt bei Rotationen heraus zu bekommen.
Hier ist meine Lösung für Rotationen um 90,180,270 Grad (select oder durch Auf- und Abrunden kann man das sicher stellen,
dass keine anderen Werte eingegeben werden).


var rotate=parseInt(this.rotate);

if(rotate>0){
if(rotate!=180){
ctx.canvas.width=height;
ctx.canvas.height=width;
}
else{
ctx.canvas.width=width;
ctx.canvas.height=height;
}

ctx.save();
ctx.translate(ctx.canvas.width/2,ctx.canvas.height/2);
ctx.rotate(((Math.PI / 180)*rotate));
ctx.drawImage(this.img.image,0-(width/2),0-(height/2),width,height);
ctx.restore();
}
else{
ctx.canvas.width=width;
ctx.canvas.height=height;
ctx.drawImage(this.img.image,0,0,width,height);
}

Multi-Threading in PHP (Thread-Pool)

Gerade beim Laden großer Datenmengen wie Lagerstrukturen oder bei Exporten ganzer Datenbestände, kommt man schnell in Bereiche, wo das Laden und Aufbereiten mehr als ein paar Minuten dauern kann. Bei normalen Desktop-Programmen und Skripten ist das nicht ganz so relevant. Wenn man aber im Web-Bereich arbeitet, kann es schnell zu Problemen mit Timeouts kommen. 3 Minuten können hier schon ein extremes Problem sein. Asynchrone Client helfen hier, aber keiner Wartet gerne und Zeit ist Geld.

Es gibt dann einen Punkt, wo die Zeit pro zu ladenen Element sich nicht mehr weiter verringern lässt. Hier hilft dann nur noch die Verarbeitung der einzelnen Elemente zu parallelisieren. Bei Java gibt es den ExecutorService, in JavaScript die WebWorker und in PHP gibt es pthreads. Es ist nichts für Leute mit einem Shared-Hosted Webspace, weil man eine Extension nach installieren muss.

Installation:
http://php.net/manual/de/pthreads.installation.php

(es sollte die erste DLL reichen)

Hier ist ein kleines Beispiel wo eine Liste von MD5-Hashes erzeugt werden soll. Die Threaded-Variante lief bei mir meistens fast doppelt so schnell
wie die einfache Variante mit der Schleife.

<?php
$files=scandir("c:/xampp/htdocs/files");
$start=microtime();
$cnt=count($files);
$result=array();
for($i=0;$i<$cnt;$i++){
$file=$files[$i];
if($file!="." && $file!=".."){
$result[count($result)]=md5(file_get_contents("c:/xampp/htdocs/files/".$file));
}
}
echo "bench (loop): ".(microtime()-$start)."<br>";

class PWorker extends Collectable{
public $workload;

public function __construct($work){
$this->workload=$work;
}

public function run(){
$this->workload=md5(file_get_contents("c:/xampp/htdocs/files/".$this->workload));
$this->setGarbage();
}
}

$result=array();
$start=microtime();
$p = new Pool(4);
for($i=0;$i<$cnt;$i++){
$file=$files[$i];
if($file!="." && $file!=".."){
$p->submit(new PWorker($file));
}
}
$p->shutdown();

$p->collect(function($checkingTask){
global $result;
$result[count($result)]=$checkingTask->workload;
return $checkingTask->isGarbage();
});
echo "bench (4 threads): ".(microtime()-$start)."<br>";
?>


Man kann also auch in PHP moderne Anwendungen schrieben die Multi-Core CPUs auch wirklich ausnutzen können und muss sich hinter Java in den meisten Bereichen nicht mehr verstecken.

Kleine Firmen und IT - Eine Hilfestellung

Nicht jede Firma die gegründet wird ist eine IT-Firma oder ist in dem Bereich Bereich bewandert. Oft haben diese Firmen ganz andere Aufgaben, Sorgen und Probleme am Anfang als sich über IT-Infrastrukturen, Server und ihre Daten Gedanken zu machen. Meistens reichen die Überlegungen dahin, dass man eine Homepage, Email-Adressen und PC braucht.
Für Firmen mit 2-3 Mitarbeitern reichen diese Überlegungen auch meistens und weiter IT-Themen und -Probleme erledigt man einfach neben her. Bei einer Person reicht ein Standard PC mit DSL, ein kleines Homepage-Paket bei einem der üblichen Hoster (1und1 oder Strato) und die übliche Software (Libre- oder MS Office, ein Browser und ein Email-Programm wie Exchange oder Thunderbird).

Wenn man jetzt aber doch gleich am Anfang 10 Mitarbeiter hat, sieht die Welt wieder ganz anders aus. Aus dem Wunsch nach einer Homepage entwickelt sich dann die Frage: "Kann ich mich dann auf der Homepage auch einloggen und meinem Kalender und eine Emails einsehen?". In der alten Firma lief die Groupware im Browser und alles was im Browser läuft ist eben für viele eine Homepage.
Eine Groupware im Browser hat extreme Vorteile und wenn alles direkt über eine öffentliche URL zu erreichen ist (also so zu sagen in der Cloud liegt) löst es schon mal viele Probleme bei den Mitarbeitern, die bei Kunden sind, von Zuhause aus arbeiten oder auch alles immer auf ihrem Smartphone im Zugriff haben möchten. Auch ist die Administration einfacher, da auf den Client PCs nichts installiert werden muss und man somit nicht auf Betriebssystem, Updates, Laufzeitumgebungen und so achten muss. Ein relativ aktueller Webbrowser reicht.

Das erste Problem kommt direkt mit dem Wunsch nach einer Groupware. Ein kleines Homepage-Paket mit Shared-Hosting für ein paar Euro im Monat reicht hier meistens nicht aus, weil die Groupware-Lösungen gerne noch zusätzliche PHP-Erweiterungen hätten, was anderes als PHP benötigen oder auch der Hoster keinen direkten SMTP-Versand für Emails anbietet und ein Fallback auf die email-Funktion von PHP nicht wirklich den Anforderungen genügt. HTTPS ist dann auch nochmal ein anderes Thema...

Das ist kein so großes Problem, wenn nicht schon ein Paket und Domains geschafft wurden und nun weiterhin davon ausgegangen wird, dass der günstige Preis gehalten werden kann. Es ist schwer klar zu machen, dass Email-Adressen und alles für eine einfache Homepage vorhanden ist, aber man um beides zusammen zu bringen mehr Geld ausgeben müsse.
Außerdem ist mir auf gefallen, dass bei den günstigen Angeboten gerne auch mal Ausfälle mit zu berücksichtigen sind. Einmal eine halber Tage Emails weg, dann noch mal an einem anderen Tag ist die Homepage nicht zu erreichen. Wenn die Groupware nicht verwendet wird (weil Thunderbird auf den Desktops angenehmer ist) oder mal die Kalender nicht synchronisiert werden können, ist es nicht ganz so wild. Aber für eine Firma die mit Kunden kommuniziert oder wichtige Unterlagen per Email erhält, ist ein halber Tag ohne Email schon nicht wirklich schön.

Tine 2.0 hat sich da als relativ gute Groupware heraus gestellt, wenn man nur einen einfachen Webspace mit MySQL-DB hat. Man sollte keine Wunder bei der Leistung erwarten und es dauert teilweise bis z.B. CalDAV zum Laufen bekommen hat, aber es ist eine brauchbare Lösung für solch ein Problem und in der freien Variante auch wirklich noch sehr leistungsfähig, wenn man hauptsächlich Email und Kalender verwenden möchte.

Wenn wir nun den Teil erledigt haben geht es in die Firma und die dort vorhandene Infrastruktur. Auch hier fangen die Probleme an, wenn schon PCs,Notebooks und ähnliches gekauft wurden.
Denn auch hier wird aus der Sicht des normalen Anwenders gekauft. Ein Notebook gilt als cool, PCs kauft wo gerade mal einer günstig ist, weil am Ende sehen die zwar unterschiedlich aus sind aber ja an sich gleich. Es gibt sehr verlockende Angebote von gebrauchten Rechnern bei EBay, die kommen dann vorinstalliert mit Windows bei einem an. Spätestens hier sollte man sich als unbedarfter Anwender/Firmen-Chef/Verantwortlicher Hilfe holen. Das erspart einen später viel Stress und Kosten. Man muss immer davon aus gehen, wenn man am Anfang etwas mehr Geld investiert, spart man es in späteren Zeit wieder ein.

Bei solchen PCs gilt es zu beachten:
* ist Windows nur installiert oder ist wirklich eine Lizenz dabei? Wenn ja, sollte man etwas in der Hand haben, dass es auch beweist! (Ebay-Verkäufer muss Unterlagen und Rechnungen unbedingt mitliefern)
* ist der Admin-Account aktiviert und ist ein Passwort vergeben, dass der IT-Verantwortliche und eine Person vor Ort (falls IT von Extern kommt) kennt und sonst niemand?
* hat jeder Benutzer einen eigenen Account mit einem Passwort, dass nur er kennt? Wütende Ex-Mitarbeiter können bei kleinen Firmen schon einen großen Schaden anrichten, wenn sie bei nicht geschützten PCs einfach mal eine unbekanntes Passwort setzen! (Hier hätte zur Not der Admin-Account geholfen, wenn er aktiviert worden wäre)
* einmal feststellen, ob die Rechner reparierbar sind. Also ob Festplatten im Notfall einfach entnommen werden können und es normale Netzteile sind, falls mal eins ausgetauscht werden muss.

Wenn vor dem Bestellen geplant wird:
* baugleiche PCs und baugleiche Notebooks kaufen.
* pro Standort mindestens einen Ersatz-PC haben, damit in Falle eines Ausfalls die Person schnell weiter arbeiten kann.
* ein einheitliches Festplatten-Image aufsetzen (Betriebssystem mit Admin-Account, VNC, Benutzer-Programmen, etc.)
* und auch gleich dann Werkzeug, Kabel, USB-Stick und Rohlinge mit bestellen, wenn man schon mal dabei ist

Nun hat jeder Mitarbeiter seinen PC. Bei mehr als 2 PCs kommt jetzt das Problem mit dem Datenaustausch. Emails zu verwenden (am Besten noch über den Hoster der Homepage) kann mit dem Datenschutz Konflikte verursachen (Verschlüsselung und so). Also wird es am Besten über das LAN getauscht. Wenn man nun Außenstellen hat, müssen diese per VPN angebunden werden. Also muss es auf jeden Fall ein DSL-Anschluss für Firmen sein.. nichts was sonst für private Kunden gedacht ist.
Meistens hat man dann auch WLAN. Das ist für Smartphones (man will ja nicht zu viel Telefonkosten darauf verursachen) und Tablets praktisch bis notwendig. Notebooks, PCs und Drucker sollten, wenn sie am Arbeitsplatz stehen immer mit Kabel angeschlossen sein. Kabel ist weniger fehleranfällig und schneller auch bei vielen Geräten. Wenn man keine riesigen Dateien wie Filme oder CAD-Files kopieren muss oder VLANs möchte, reicht 100Mbit vollkommen aus und 8-fach Switches gibt es ab 10 Euro. Auch bessere 16-fach Switches sind nicht ganz so teuer. Wichtig ist auch hier ein paar Ports in Reserve zu haben. Wenn WLAN nicht bis in die letzte Ecke reicht einfach einen günstigen WLAN-Repeater kaufen. Die funktionieren wirklich gut und erhöhen den Radius enorm.

Wenn man an den Arbeitsplatz-PC sparen möchte, dann lieber überlegen, ob man nicht Libre-Office an Stelle von MS Office verwendet oder ob ein Linux-System wie Ubuntu nicht auch für die Mitarbeiter geeignet ist. Aber das hängt auch sehr von der anderen Software ab, die verwendet werden soll. (In 90% aller Fälle würde so ein Linux-System aber ausreichen, gerade wenn die Software in der Cloud oder anderweitig im Browser läuft).

Jetzt kommt das harte Thema. Da wird man den Firmen-Chef schocken. Es geht um einen Server und seine Kosten. Der Server soll als Fileserver agieren und am Besten noch die Anwender-Profile speichern. Eigener Email-Server und Homepage und Groupware von dort aus zu betreiben ist erst einmal nicht so wichtig. Aber falls mal ein Email-Archiv benötigt wird kommt es auch noch auf einen zu und da kann man ja schon mal zukunftssicher Planen. Mehrere physikalische Server in einer kleinen Firma sind einfach nicht nötig, da die Server sich die meiste Zeit langweilen werden. Also VMs verwenden. Da braucht man ein System das 3-4 VMs laufen lassen kann, genug Festplattenspeicher hat, wo man remote die VMs überwachen kann und dann am Ende noch einfach Sicherungskopien erstellen kann. So etwas wäre ideal.
So etwas gibt es auch von QNAP. Mit Festplatten kommt man schnell auf über 3000 Euro. Das ist im Grunde nicht viel, für das was es leistet (und für eine kleine Firma wird es reichen). Außerdem braucht man nicht zwingend ein 19"-Rack oder komplexe Kühlungen. Auch die Administration scheint so einfach zu sein, dass man in Notfällen für kleine Dinge wie eine VM neu zu starten, auch einen der Mitarbeiter anlernen kann. 4TB würde am Ende auch reichen.

Linux mit Samba kann einen kleinen Windows-Server ersetzen (wenn man kein Exchange braucht). Aber auch sonst sind Windows-Serverversionen nicht mehr so teuer. Turnkey-Linux bietet für solche Zwecke auch VM-Images direkt an. Nichts für den normalen Anwender auch wenn es eine Web-GUI gibt. Hier muss einfach jemand sein, der sich mit sowas auskennt (Linux und/bzw. Firmennetzwerke an sich).
Da hilft ein jugendlicher Sohn eines Mitarbeiters oder so. Da muss jemand bezahlt werden. Soll Datenschutz gewährleistet sein, dann muss auch entsprechend bezahlt werden. Da es aber kein Vollzeitjob ist, ist >100 Euro/h auch nicht ganz so schlimm, auch wenn er sich erst einmal nach sehr viel Geld anhört. Gute Dienstleistungen kosten und Probleme mit Arbeitsausfall kosten am Ende immer mehr.
Ist wie mit einem Raid-System. 2 Festplatten sind teuer als eine, aber die 2. Festplatte ist günstiger als wenn da jemand 4h versucht Daten zu retten oder noch eine Firma dafür beauftragt werden muss.

Am Ende ist noch die Frage nach der Datensicherung. Hardware, Strategie und Lagerung. Ich mag BD-Rohlinge. Bänder sind auch super, aber etwas komplexer in der Handhabung. Archiv-Lösungen von Sony sehen auch gut aus sind aber sehr teuer. Aber auch hier immer ein zweites Laufwerk vorhalten (das ist bei BluRay sehr günstig). Gut zu erklären ist das Problem der Lagerung mit Feuer und Überschwemmungen. Natürlich abhängig vom Ort. Aber Feuer kann immer ausbrechen, egal wie gut alles abgesichert ist. Auch wenn alles versichert ist, will man ja keine Daten verlieren.
Hier kommen noch mehr Kosten hinzu, aber auch hier sollte man sich vorher Gedanken machen und planen und nicht erst reagieren, wenn was passiert ist.
Es ist auch absolut keine Lösung die Mitarbeiter ihre Daten vom PC auf einen USB-Stick sichern zu lassen. Alles im Profil ablegen und das auf dem Server speichern und dann Sicherungskopien vom Server erstellen. Auch wenn mal ein PC kaputt geht, kann er einfach ausgetauscht werden und der Mitarbeiter meldet sich wieder an und arbeitet im idealen Fall da weiter wo er aufgehört hat.
Ausfälle von PCs und Notebook werden dadurch sehr viel weniger schlimm und verursachen nicht mehr als die Reperaturkosten (kein Arbeitsausfall, niemand der Daten von defekten System retten muss).

Wenn man nun mit so einer Aufgabe betraut wird, konnte ich hoffentlich etwas helfen, dass man eine kleine Liste hat, auf was man achten muss. Wenn man selbst eine Firma gegründet hat und das alle eigentlich selbst machen wollte, weil es erst einmal nicht so komplex aussah, sieht man jetzt hoffentlich, dass man sich wenigstens einmal mit einer kompetenten Person aus dem Bereich unterhalten sollte, bevor man etwas in Angriff nimmt.
Ich musste vieles hier erst einmal lernen, im Besonderen, dass solche Probleme auch wirklich auf treten, wie sie hier teilweise beschrieben sind. Man darf den Leuten, die so etwas machen, auch keinen Vorwurf machen, da sie aus ihrer Sicht das Beste tun. Ihnen fehlt die Erfahrung in solchen Komplexen Systemen, um solche möglichen Probleme zu erkennen.

Older posts:

Möchtest Du AdSense-Werbung erlauben und mir damit helfen die laufenden Kosten des Blogs tragen zu können?