Netzwerkspeicher mit NAS-System WD Sentinel DX 4000

Es war mal wieder Zeit, ein bisschen in das Entwicklteam zu investieren. Wie ihr bereits wisst, erstellen wir für unsere Produkte Videos, Kataloge und Bilder. Da wir diese Sachen in sehr hoher Auflösung herstellen, ist wohl auch klar, dass wir eine große Menge an Daten zu verarbeiten und zu sichern haben. Mit unseren alten Speicherbüchsen (Tera Link Station Pro II) war nun auch das Ende der Fahnenstange erreicht. Lange haben sie uns gut gedient, doch jetzt sind sie einfach aus der Mode (geringer Datendurchsatz, Speicherlimit erreicht).

Dank eines sehr zuverlässigen Lieferanten (LV Kopier- Mietservice GmbH - Erfurt) sind wir auf das NAS-System von Western Digital aufmerksam geworden. Das kurze Überfliegen des Datenblattes hat gereicht, um uns neu zu verlieben. Zugegeben, der Preis schockt auf den ersten Blick, aber wir können mit Recht behaupten, dass das Geld für KMU’s an dieser Stelle sehr gut angelegt ist. Da wir besonders viel Wert auf Datensicherheit und Verfügbarkeit legen, haben wir uns auch gleich zwei dieser Geräte bestellt.

In der größten Variante kommt eine Büchse mit insgesamt 12TB HDD Kapazität, 2GB DDR3 RAM und einem Intel Atom D525 Quadcore Prozessor. Verwaltet wird das System mit einem 64Bit Windows Storage Server 2008 Essential, welches direkt mitgeliefert und vorinstalliert ist. Das hört sich doch nicht schlecht an, oder? Überraschender ist die Größe (Abmessungen) der Büchse, denn die ist verdammt klein und passt ohne Probleme auf den Schreibtisch. Vor allem das Innenleben ist echt winzig und beim bloßen Betrachten des Boards glaubt man nicht, dass das Teil überhaupt was leisten kann.

Case WD Sentinel DX 4000
Case WD Sentinel DX 4000

Wie man sieht, einfaches Board mit CPU, DUAL-Netzwerk, 2x USB, 2x Power-Anschluss. Das Einzige, was wir bei der Gelegenheit verändert haben, ist ein kleines Speicherupgrade von 2GB auf 4 GB, was bedingt durch die CPU auch die absolute Obergrenze ist. Ein zusätzlicher Speicherslot wäre auch nicht von schlechten Eltern gewesen, aber wir wollen nicht meckern.

Nun gut, wir haben uns zwei zugelegt und jetzt galt es, diese auch ins Netzwerk zu integrieren. Dank des mitgelieferten Windows Storage Server Essentials ist es auch kein Problem, die Büchse als Memberserver ins AD zu integrieren, was aus unserer Sicht auch getan werden sollte, wenn ein Domänencontroller im Netz vorhanden ist, denn so spart man sich eine Menge Arbeit mit irgendwelchen Zugriffsberechtigungen auf Freigabeebene. Wenn kein Domänencontroller im Netzwerk vorhanden ist, könnte man diese Serverrolle auch ganz einfach über den Servermanager hinzufügen. Der Assistent installiert alle notwendigen Serverfeatures und begleitet Euch Step by Step bis zu Fertigstellung. Wir kennen zwar bis dato keinen Admin der behauptet, dass sein Domänencontroller auf dem Schreibtisch steht, aber vielleicht ist einer von Euch der Erste. Ist schon irgendwie cool.

Auf die Frage, warum wir zwei WD-Sentinel DX 4000 gekauft haben, wollen wir mit folgender Grafik eine einfache Antwort geben. Nichts hat für einen Admin mehr Wert wie Verfügbarkeit und Redundanz.

WD DX4000 Failover

Wie ihr sehen könnt, wird eines der NAS-Systeme im Netzwerk aktiv verwendet, während das zweite System nur passiv im Netzwerk betrieben wird. Das hat einfach den Grund, dass wir einem eventuellen Ausfall in kürzester Zeit gegenwirken können und somit die Verfügbarkeit der Daten entsprechend erhöhen. Zwar fährt die WD Sentinel DX 4000 bei 4 Festplatten ein Raid 5 (Festplattenverbund, aus 4 mach 1), doch das ist kein Garant für einen Controllerausfall. Wenn eine Festplatte defekt geht, ist das kein Problem. Defekte Platte auswechseln und weiter geht’s. Doch wenn der Controller die Hufe reist, dann ist die Kacke am dampfen. Denn dann ist die Büchse im Eimer und an die Daten kommt erst mal keiner ran. Für den Fall, dass eine Büchse derart ausfällt, wird das passive System zum aktiven System.

Um unnötigen Konfigurationsaufwand bei einem Ausfall zu sparen greifen wir grundsätzlich über sogenannte Aliasnamen auf Freigaben zu. Das hat den enormen Vorteil, dass im Falle eines totalen Ausfalls des aktiven Systems einfach die Ziel-IP des Aliasnamen im DNS-Server angepasst und somit das passive System wie von Zauberhand zum aktiven System geändert wird. Sorry für unser Eigenlob an dieser Stelle, aber ist das nicht clever?

Damit das passive System auch immer den gleichen Datenbestand des aktiven Systems beinhaltet, müssen diese Daten auch synchronisiert werden. Diesen Sync übernimmt ein Pillepalle-Script, welcher als wiederkehrende Aufgabe (Taskjob) angelegt und ausgeführt wird. Der Script darf von Euch gerne 1:1 kopiert und verwendet werden. Ihr müsst lediglich euer Quell- und Zielordner abändern.


@echo off
REM Script zum Synchronisieren
echo "Sicherung von [NAME_DER_FREIGABE] gestartet"

REM SET SOURCE (Quelle festlegen)
set source="[NAME_DER_FREIGABE]"

REM SET DESTINATION (Ziel festlegen)
Set destination="D:\ServerFolders\[NAME_DER_FREIGABE]"

REM Ausgabe der Uhrzeit ohne Doppelpunkttrennung (23:00 -> 23.00)
FOR /F "tokens=1,2 delims=/: " %%a in ('Time/T') do set CTIME=%%a.%%b

REM Befehl zum synchroniseren der Quelle, kopierte Daten im Log anzeigen
xcopy "%source%" "%destination%" /d/c/y/h/i/e >> D:\Synclogs\[TAG_DES_SYNC]\%DATE%_%CTIME%_[NAME_DER_FREIGABE].log

REM Nach dem kopieren Ins Zielverzeichnis wechseln
cd /d "%destination%"

REM Quelle und Ziel vergleich, gelöschte Dateien und Ordner auf Ziel auch entfernen
for /f "tokens=*" %%i in ('dir /b') do if not exist "%source%\%%i" del "%%i" /Q & echo "%%i" geloescht & rd "%%i" /Q/S & echo "%%i" geloescht >> D:\Synclogs\[TAG_DES_SYNC]\%DATE%_%CTIME%_[NAME_DER_FREIGABE].log

echo "Sicherung von [NAME_DER_FREIGABE] beendet"
:end

Bitte beachtet, dass die Befehle, welche unterhalb des Kommentars geschrieben sind, unbedingt in einer Zeile stehen müssen, sonst müsst Ihr zusätzlich mit Zeilenumbruchparameter arbeiten, damit das Script sauber ausgeführt werden kann.

Da wir mit Worten nicht beschreiben können, wie schnell diese Büchsen und das Zusammenspiel zwischen dem Controller und den Netzwerkchips funktioniert, verdeutlichen wir unseren Zeitgewinn mit einer einfachen Übersicht.

Tera Link Station Pro II WD Sentinal DX 4000 Zeitgewinn

Backup: 60 Gb Backup: 60 Gb  
2 Stunden, 24 Minuten 14 Minuten 2 Stunden, 10 Minuten
     
Sync (gesamtes Array) Sync (gesamtes Array)  
3 Stdunden, 38 Minuten 41 Minuten 2 Stunden, 57 Minuten


Zum versüßen haben wir uns auch die Mühe gemacht, ein Screenshot von einem Kopiervorgang zu machen. Ein Produktvideo in HD von 15 Gb Größe.

WD Sentinel DX 4000 kopieren von Dateien

Fazit

Die Verwaltung des Servers ist dank Windows Storage Essential über Remote Desktop möglich und genauso gewöhnlich, wie bei jedem anderen Server auch. Auf das mitgelieferte Verwaltungstool von WD kann man komplett verzichten, da es für die meisten Aufgaben auch eher ungeeignet ist. Lediglich Serverfreigaben lassen sich darüber bewältigen, was die Installation dieses Tools also überflüssig macht, sei denn, mann muss den Server aus welchem Grund auch immer, wieder herstellen. Unser Backupfenster hat sich insgesamt auf 1 Std. reduziert, was ein Wartungsfenster wesentlich flexibler macht. Unser Dank geht damit noch mal an unseren Lieferanten LV Kopier- Mietservice GmbH aus Erfurt und natürlich an unser halbes Teammitglied, was die Anschaffung genehmigt hat. Die nächste Leistungssteigerung im Bereich der Speicherlösung wäre dann ein ausgeklügeltes SAN (Storage Area Network) mit Fiberchannel und allem Pipapo. Wir sind gespannt, wann wir das einführen dürfen.

Wir könnten ewig viel über Funktionen von diesen NAS-Systemen erzählen, die Frage ist nur, wer sich diesen elend langen Text überhaupt noch durchlesen will. Also sprecht uns einfach an, in dem Ihr den Beitrag kommentiert. Wir werden je nach Zeitaufwand auf alle Fragen eingehen. Sonst bleibt uns wie immer nur der Dank für das Lesen.

Euer Entwicklteam

( 2 Votes ) 
{jcomments on}

Einen Heuhaufen in einer Nadel suchen - PHP Haystack in a Needle

Habt ihr das schon mal versucht? Macht eigentlich auch kein Schwein, außer dass Entwicklteam! Wir suchen einen Heuhaufen in einer Nadel! Zugegeben, dass ist sehr schwierig aber wer auf die schlechte Grammatik von PHP stößt und diese ein bisschen versteht, kann diese Aufgabe problemlos lösen.

Wir standen heute vor einer solchen Aufgabe und sind fast ausgeflippt, eh der Mist so funktioniert hat, wie wir uns das vorgestellt haben. Am liebsten hätten wir einen Total-Blackout simmuliert, wären Heim gegangen und hätten unseren Frust bei einer Runde FIFA gegen schwächere Gegner auf der PS3 raus gelassen. Unser halbes Mitglied hatte aber was dagegen. Fuck!

Nun gut! Ihr müsst euch folgendes Vorstellen. Wir haben viele viele viele Rollenketten. Jede dieser Ketten hat eine andere Bezeichnung aber je nach Serie doch etwas gemeinsam. Allein das ist schon richtig Kacke. Nun haben wir aber auch keinen Bock für jede dieser möglichen Typen ein eigenes PHP-Scriptfile zu schreiben. Macht bei dynamischen Webseiten auch keinen Sinn. Nach ein bisschen überlegen sind wir also auf die PHP-Funktion $strpose und $haystack gestoßen. Als Heuhaufen haben wir jetzt unsere Sammlung von vielen Ketten und wollen aber eine bestimmte aus dem Haufen entnehmen, was wir die Nadel nennen.

Auf Deutsch würden wir unsere Frage an den PHP-Core wie folgt stellen: Liebes PHP, befindet sich zufällig die Nadel XY im Heuhaufen? Damit kann PHP aber nichts anfangen. PHP möchte die Frage gerne wie folgt gestellt bekommen: Liebes PHP, in diesem Heuhaufen, kann die Nadel XY dort gefunden werden? PHP ist grammatisch gesehen also sehr eigenartig. Warum das so ist? Beantworten wir nicht, das ist ein langweiliges Thema und geht uns nichts an.


Was wollen wir damit erreichen?

Also, je nachdem welche Rollenkette der Kunde auf unserer Seite betrachten möchte, soll ein Datenblatt generiert werden. Bei den Ketten mit Anbauteilen welche die Zeichen M1x1, M1x2, M2x1, M2x2, K1x1, K1x2, K2x1, K2x2 oder GU enthalten muss eine zusätzliche Tabelle eingeschoben werden, die angibt, auf welches Bauteil sich die nachfolgenden Abmessungen beziehen. Beispiel für die Anbauteile: Winkellasche, Mitnehmerlasche, vulkanisiertes Elastomerprofil oder nichts, also keine zusätzliche Maßtabelle. Die Bezeichnung 08B-1-M1x1 steht zum Beispiel dafür, dass es sich im eine Simplex-Rollenkette nach DIN 8187 mit einer schmalen Mitnehmerlasche auf einer Seite der Kette handelt. 208A-1-K1x1 beschreibt eine Simplex-Rollenkette nach DIN 8188 mit breiten Winkellaschen auf einer Seite der Kette. Und so sieht es dann aus, wenn es mit PHP umgesetzt wird.


Als erstes definieren wir die Funktion

function strposa($haystack, $needles=array(), $offset=0)
{
$stack = array();
foreach($needles as $needle)
    {
    $res = strpos($haystack, $needle, $offset);
    if ($res !== false) $stack[$needle] = $res;
    }
if(empty($stack)) return false;
return min($stack);
}

Erläuterung

$strposa Name der Funktion
   
$haystack Unser Heuhaufen (PHP Standardvariable)
   
$needles Viele Nadeln (unserer Anbauteile) als array (Bereichsvariable)
   
$offset gibt den Startpunkt an, an welcher Stelle nach der Übereinstimmung im Array gesucht werden soll (bei uns von ganz vorne). Wird der gesuchte String gefunden, ermittelt diese Variable an welcher Stelle er gefunden wurde und speichert ihn. $offset kann also keinen negativen Wert erhalten. Der kleinstmögliche ist also 0 (NULL).
   
$foreach Damit überschreiben wir die PHP-Variablenfunktion $needles mit $needle
   
$res Das zwischengespeicherte Ergebnis aus der Funktion
   
If ($res !== false) Hier setzen wir eine Negation ein, welche sagt, wenn das Ergebnis nicht falsch bzw. oder nicht falsch oder wahr ist, soll es in die Variable $Stack abgelegt werden.
   
Ergebnis: Wenn $stack leer ist wird als return Code false ausgegeben anderenfalls soll $stack ausgegeben werden.

Verwenden der Funktion:

$string = $dsatz["kbz2"];
$array = array('-M','-K','-GU');
If (strposa($string, $array, 1))
{
echo "<tr>";
echo "<td id='tablel' colspan='3'>";
    if (strpos(%string, '-M'))
    {
    echo "Abmessungen Mitnehmerlasche";
    }
            elseif (strops($string, "-GU"))
            {
            echo "Abmessungen             Elastomerprofil";
            }
    else
    {
    echo "Abmessungen Winkellasche";
    }
echo "</td>";
echo "</tr>";
}
else
{
echo "";
}

usw….

Die Variable $string wird durch die Variable $dsatz[‘‘kzb2‘‘] definiert dessen Wert aus einer Datenbank herangezogen wird welcher in einer vorangegangen Abfrage ermittelt wurde.


Nachteil unserer Lösung

Diese Lösungsvariante ist etwas schwieriger umzusetzen, benötigt etwas länger Zeit und mehr Hirnschmalz in der Umsetzung, da hierbei die Gefahr von Flüchtigkeitsfehler wesentlich höher ist. Einen Scriptfehler zu entdecken ist daher etwas aufwendiger


Vorteil unserer Lösung

Statt für jede Rollenkettenserie ein extra Scriptfile zur Verfügung zu stellen können wir unser Array beliebig erweitern und müssen nur eine weitere ifelse Anweisung hinzufügen und somit alle im unseren Sortiment angebotenen Ketten mit nur einem Scriptfile abdecken. Das erspart enorm viel Zeit und verringert den Pflegeaufwand von unseren Scriptfiles.


Wie immer darf jeder Ahnunghaber, Lobsager, Guru etc. kommentieren, egal ob Lob oder Tadel, denn uns hält jetzt nichts mehr von FIFA auf der PS3 ab. Wäre es jetzt unfair wenn wir mit FC Barcelona gegen Bradford City spielen? Wir meinen: Nö!


Euer Entwicklteam
 
( 2 Votes ) 
{jcomments on}

Sponsoring

Wir engagieren uns seit 2011 intensiv für regionale Sportvereine. Dabei liegt unser Hauptaugenmerk nicht nur darin die Aufmerksamkeit auf das Unternehmen zu lenken sondern Jugend- und Sportvereine dahingehend zu unterstützen, unserem Nachwuchs ein attraktives Freizeitangebot zu gestalten und die Region Bad Salzungen im gesamten als Wirtschaftszweig zu bewerben, damit Jugend auch hier eine Zukunft zu wissen weiß. Für einige Sportvereine oder sonstige sozialen Einrichtungsstätten ist überleben immer eine besondere Herausforderung, da Sponsoren in unserer Region eher Mangelware sind und für wohltätige Zwecke finanziell meist kein Spielraum ist. Unseren ersten Sponsorenversuch haben wir mit der B-Jugend des SV Wacker 04 in Bad Salzungen unternommen. Dem Jugendverein sponserten wir zwei komplette Profioutfits von Adidas, wie es sich für eine junge Mannschaft gehört. Den zweiten Sponsorenerfolg konnten wir mit dem Sportverein FSV Leimbach erzielen.

Auch hier haben wir der zweiten Mannschaft, als Belohnung zum gelungenen Aufstieg in die Erste Kreisklasse, einen kompletten Profisatz gesponsert. Diese zwei Mannschaften wollen wir auch in Zukunft nicht im trocknen stehen lassen. Wir sind auch weiterhin danach bestrebt unsere Jugend noch weiter zu unterstützen. So steht für das Jahr 2013/2014 unteranderem die Förderung des Handball- und Motorsports in unserer Region auf dem Programm.

Sponsoring - SV Wacker 04

Wir engagieren uns aber auch in weniger Werbewirksamen Themen. Leider ist Kriminalität bei jungen Leuten immer wieder Thema in den Nachrichten. Aus diesem Grund unterstützen wir auch dieses Jahr wieder die Polizeigewerkschaft in Ihrer Aufklärungsarbeit. Mit einer finanziellen Unterstützung tragen wir dazu bei, dass ein 32 Blatt starkes Prospekt, Polizei – Dein Partner, die Aufklärungsarbeiten der Polizei unterstützt und betroffene, sowohl Täter als auch Opfer, Lösungswege aufgezeigt um ein Leben im Abseits unserer Gesellschaft zu verhindern. In der letzten Ausgabe war das Thema Tatort Schule, was aus unserer Sicht den größten Anteil der Gewaltdelikte ausmacht.

BIND - Error: loading from master file managed-keys.bind failed: file not found

Die derzeit aktuelle Debian Distribution (6.0.5, Debian Squeeze) enthält einen kleinen Fehler in der Standardkonfiguration des DNS-Server’s BIND. Wer BIND als DNS Server in der Distribution einsetzen will, erhält folgende Fehlermeldungen im Syslog:

general: error: managed-keys-zone ./IN: loading from master file managed-keys.bind failed: file not found

Der Fehler besagt, dass ein Sicherheitsschlüssel fehlt und die Root-Zone (./IN) nicht validiert werden kann. Konkret betrifft es DNSSEC (DNS-Secure) welche über IPv6 abgefragt werden.

Falscher Lösungsansatz:

Wie wir in einigen Selbsthilfeforen lesen mussten, wurde als Lösungsansatz vorgeschlagen die Defaults „dnssec-enable“ und „dnssec-validation“ zu deaktivieren. Dies ist aber definitiv nicht der richtige Weg, da es sich hierbei um ein sehr gutes Sicherheitsfeature handelt.

Warum dieses Feature?

Da die sogenannte ROOT-Zone seit einiger Zeit signiert ist (Schweden war hier der Vorreiter und hat dies als erstes Land überhaupt umgesetzt), ist die DNSSEC-Validierung standardmäßig aktiviert. Der Sinn dahinter ist, dass es damit nicht mehr möglich ist, den Cache eines DNS-Servers mit falschen Zonendaten zu verfälschen, womit ein „Internetangreifer“ DNS-Abfragen einfach auf andere Server umleiten kann. Bestes Beispiel dafür ist das Pishing von Bankdaten, in der ein Angreifer einfach den DNS-Namen Ihrer Hausbank auf einen eigenen gefälschten Server umleitet. Angriffe dieser Art sind dafür bekannt, dass die angezeigte Seite nahezu identisch mit der originalen ist. Wer dies nicht genau prüft wird hier schnell zum Opfer. DNS-SEC kann also einen Teilnehmer damit verifizieren, dass die durch den Server übermittelten Zonendaten tatsächlich identisch mit denen sind, die der für die Zone autorisierte und signierende Server ausliefert. Dies ist ein sehr wichtiges Sicherheitsfeature und sollte daher nicht deaktiviert werden. Die Lösung von Problemen sollte auch Grundsätzlich nicht darin bestehen, Features wegen Fehler zu deaktivieren, sondern den Fehler zu beseitigen. Der Lösungsansatz ist daher auch voller Käse

Richtige Lösung

Damit BIND die Signaturprüfung auch durchführen kann, benötigt BIND auch eine verlässliche Kopie des öffentlichen Schlüssels. Diese Kopie kann aber nicht über eine DNS-Abfrage bezogen werden sondern muss auf dem Datenträger vorhanden sein. Die Kopie des öffentlichen ISC-Schlüssels wurde auch ordnungsgemäß ausgeliefert und in der Datei /etc/bind/bind.keys abgelegt. Dummerweise hat der Programmierer bei der Erstellung der Standardkonfigurationsdatei dabei vergessen, diesen auch per Default zu verlinken. Die Verlinkung wird in der Datei /etc/bind/named.conf angegeben. In der Standardkonfiguration stehen folgende Anweisungen:

include "/etc/bind/named.conf.options";
include "/etc/bind/named.conf.local";
include "/etc/bind/named.conf.default-zones";
In diese Datei muss einfach folgende Zeile an hinzugefügt werden:
include "/etc/bind/bind.keys";
Bitte daran denken, eine Leerzeile nach der letzten Zeile einzufügen, sonst erkennt BIND das Ende der Konfigurationszeile nicht. Die Konfiguration wird gespeichert und BIND danach neu gestartet und schon verschwindet die Fehlermeldung aus dem Syslog und DNSSEC-Validierung wird funktionieren.

Ergänzung zu Server, welche keine IPv6 Anbinden oder Routen.

Bei aktiviertem IPSEC wird BIND in regelmäßigen Abständen ihm bekannte Rootserver kontaktieren. Dies sind sowohl IPv4 als auch IPv6 Adressen. Wenn er diese auf Grund der fehlenden IPv6 Anbindung nicht kann oder IPv6 nicht geroutet wird, erstellt BIND für jeden dieser Server einen Eintrag im Syslog. Um dies zu verhindern kommentiert man einfach alle IPv6-Einträge in der Datei /etc/bind/db.root mit einem Semikolon am Anfang der Zeile aus. Auch wenn man es nicht möchte, aber man sollte sich langsam mit dem Gedanken abfinden, dass für IPv4 im Internet das letzte Stündlein geschlagen hat und seine Server (DNS, Router etc) IPv6 tauglich machen. Ob sie bereits Fit für IPv6 sind können Sie hier überprüfen: http://test-ipv6.de

Sollten wir vergessen haben, etwas wichtiges zu erwähnen, dann kommentiert den Beitrag einfach. Sonst bleibt uns nur der Dank für's lesen.


Euer Entwicklteam

 
( 8 Votes ) 
{jcomments on}

Mikulski lernt wieder mal dazu

Für unsere Kunden vergeben wir jedes Jahr einen Auftrag über mehrere tausend Euro für kleine „give away’s“. Dieses Jahr waren auch wieder unsere Kalender dabei. Eigentlich kein sehr großes Ding. Die Geschäftsleitung gibt die Kalenderlayouts vor und Mikulski bekommt den Auftrag entsprechende Grafiken zu gestalten. Dabei ist seine wichtigste Aufgabe die Grafik so zu gestalten, dass diese neben dem Kalenderbild ein kleiner Blickfang sind.

Für Mikulski (so wird er bei uns genannt, wenn er wach ist), ist das kein Thema, also hat er seine Aufgabe auch nach Vorstellung der Geschäftsleitung umgesetzt. Mikulski eben. Yeah!

Nach dem wir Mikulski für seine Strichzeichnungen ausreichend gefeiert haben und die Geschäftsleitung zufrieden war, haben wir die Daten an unseren Dienstleister geschickt, damit seine Druckvorstufe uns einen ersten Korrekturabzug zusenden kann. Wir bekamen den Korrekturabzug und bestätigten alles. Normal halt.



RHI&A Bildkalender


Sechs Wochen sind vergangen und es kamen die ersten Kalender. Mikulski hat sie aufgerissen und gleich einen dicken Kloß im Hals bekommen. Schaut selbst. Was auf dem Korrekturabzug keinen Rand hatte, hat auf einmal doch einen.

Ironie an....

RHI &A Bildkalender


Weil der Rand so klein ist, haben wir ihn gelb markiert

RHI&A Bildkalender


Ironie aus...

Naja, Mikulski hat sich gleich an das Telefon geschmissen und auf den Fehler hingewiesen. Der Dienstleister allerdings meinte, dass wir die Daten so bestätigt haben. Mikulski konnte natürlich vom Gegenteil überzeugen und wir warten nun weitere 6 Wochen auf hoffentlich schöne Kalender. Der Lerneffekt, welcher dabei erzielt wurde ist ganz klar. Man sollte einfach alles hinterfragen, auch wenn manche Fragen noch so dumm sind.

Euer Entwicklteam

 
( 2 Votes ) 

{jcomments on}