Thin client as web server

I bought a Fujitsu FUTRO S550-2, it cost about 160€(used with upgrades) I graded the ram from 512 to 2GB and the HDD from 1GB to 32GB.Its completely passive cooled and needs less space.


CPU AMD Sempron 200U 1 GHz


Overview:2015-03-27 13.47.16Back:

2015-03-27 13.46.51Inside:

2015-03-27 13.45.07Upgrade:

2015-03-27 13.41.42

RAM: Samsung M470T5663QZ3-CF7 – 2 GB – DDR2 (30€)

HDD: Kingston CF/32GB-U3 CompactFlash-Card Ultimate 600x – 32 GB (55€)



The Power usage is 15-18W, that’s sounds less but newer hardware needs the same for much more power.



All together its a nice PC for projects or web space, but if you need a little bite more power look at Silent PC for 260€ its a bite more expensive end needs more space but it have more power at the same power usage.If you just need webspace and a backup solution just take a look at  NAS Server Synology ds415+.

NAS Server Synology ds415+

I searched a long time for the right NAS, because it should need some things that important for me :

  1. Terminal SSH
  2. DNLA
  3. 4 HDDs with 4TB
  4. apache
  5. very fast connection
  6. encryption

And I choosed the ds415+ for 513€ because it seems the best solution for me.Because its have a very fast XOR(for RAID5) and AES(for encryption) performance, is based on Linux Kernel and seems one of the best NAS Systems on the market.After some days I got it and here it is:


  • INTEL Atom C2538(4×2.4GHz)
  • 2 GB DDR31600 CL11
  • 4GB internal store


2015-03-16 17.09.51 2015-03-16 17.10.122015-03-16 17.09.07 2015-03-16 17.11.392015-03-16 17.11.57


Then I upgraded the RAM with a “Kingston 8GB DDR3 1600MHz Non-ECC CL11 SODIMM” for 70€, that is not really necessary but I need a big cache for my database.This is the ram usage just with some apps running:

Bildschirmfoto vom 2015-03-26 08:42:47

Hard disk

I created a RAID5 with 4 WD40EFRX.One of them cost about 170€ that’s not cheap but for 4TB at this good quality it is okay.I chose the RAID5 over RAID10 because so i get the size of 3 disks and not only 2, the performance is more than the network can handle.

Here we see that volume1 has a size about 10.8T that’s very much space.

SNAS> df -h
Filesystem                Size      Used Available Use% Mounted on
/dev/md0                  2.3G    727.5M      1.5G  32% /
/tmp                      3.9G    236.0K      3.9G   0% /tmp
/run                      3.9G      1.7M      3.9G   0% /run
/dev/shm                  3.9G         0      3.9G   0% /dev/shm
/dev/md2                 10.8T      1.2T      9.6T  11% /volume1

Here we get a little Benchmark about the Hard disk, we see reading is more than enough, and the most of the time i read from the disk.

SNAS> hdparm -Tt /dev/md2

 Timing cached reads:   2962 MB in  2.00 seconds = 1481.56 MB/sec
 Timing buffered disk reads: 1018 MB in  3.01 seconds = 338.72 MB/sec

For more Information about Benchmarks see Benchmark Your System.

This is the Writing, we could see the network is the bottle neck, I use only one LAN Port because my main board cant handle I moved a file via FTP to my NAS its only writing:

Bildschirmfoto vom 2015-03-26 08:55:05

Its about 75MB/s what’s a good value is for a RAID5.



I have the problem that every connect to my homepage lets my HDDs spin up, so I tried to mount a USB into the File system to host my Page and MySQL on it.

At first we need a USB stick and change the File system, make 2 Partitions.One of them for the database one for the Web page, I choose 1/3 to 2/3 of the Stick size.And its better if the USB supports USB 3.0, now we connect to our NAS via SSH and look what’s the name of our Stick:

df -h
/dev/sdq1                 7.4G    144.8M      6.8G   2% /volumeUSB1/usbshare1-1
/dev/sdq2                21.6G    171.9M     20.3G   1% /volumeUSB1/usbshare1-2

Before we make some changes shut down your word press, phpmyadmin and database !

Okay now we copy our web and mysql folder to our USB stick.Importand is to only move the mysql database and not the postgress because the postgress is needed in the start-up and your NAS would crash.

cp -r -p ./web/ /volumeUSB1/usbshare1-2/web
cp -r -p ./@database/mysql /volumeUSB1/usbshare1-1/@database/mysql

Now we make a copy about our Directory’s, if it crash we could move it back.

mv web web_BACKUP
mv @database/mysql @database/mysql_BACKUP

Okay now we need a folder to mount our new files from the stick.

mkdir web
mkdir @database/mysql

Now we could mount the Stick, its important to mount it after every reboot.

mount -o bind /volumeUSB1/usbshare1-2/web/ /volume1/web
mount -o bind /volumeUSB1/usbshare1-1/@database/mysql /volume1/@database/mysql

Now we could turn on our web services.If you use phpmyadmin and MariaDB it could be useful to take a look at phpMyAdmin and Mysql Cache tuning.



If you have it in a room where you work its no problem, if its completely silent you can hear it a little bit.I turned it on silent mode.



The Power usage is between 12W and 40W.

working 30-50W
 start up 38W
 waiting  32W
 sleeping  20W



All together its a very good NAS and I would buy it again.But if you look at a cheap solution for backup and web space look at Silent PC for 260€ it also need less power.

Silent PC for 260€

I build my own silent PC, and I mean realy silent so no fan no HDDs.The Price is about 260€(without chassis) and really cheap for a silent PC with this specs:

CPU  4x2GHz
 SSD  64GB

I used it for hosting hompages and as NAS.

I chooses this components:


Mainboard – ASRock Q1900DC-ITX

MainboardCPU: Intel Celeron J1900, 4x 2.00GHz, 2MB Cache, 10W TDP •
RAM: 2x DDR3 SO-DIMM, dual PC3L-10667S/DDR3L-1333, max. 16GB (UDIMM) •
1x VGA, 1x DVI-D, 1x HDMI 1.4, 2x USB 3.0 (J1900), 2x USB 2.0, 1x Gb LAN (Realtek RTL8111GR), 6x Klinke
2x SATA 6Gb/s (ASM1061), 2x SATA 3Gb/s, 1x CPU-Fan 3-Pin, 1x Fan 3-Pin, Audio: 7.1 (Realtek ALC892) • RAID-Level: N/A • Multi-GPU: N/A
Grafik: Intel HD Graphics (IGP)
Power: 1x DC-Stecker (9-19V)
Mini-ITX, UEFI, All solid capacitors, passiv cooling

Price: 100€


RAM – Kingston KVR13S9S8/4

Ram4GB (1333MHz, 204-pin, CL9) DDR3-RAM

Price per 4GB :35€ (I choose 2)


SSD – SanDisk SDSSDP-064G-G25

ssd64GB SATA III 2.5 Zoll
Read:490 MB/s
Write:240 MB/s



Power – Vanson SMP-70W

Power0 Power1

Input Voltage: AC 100 – 240 V
Frequency: 50/60 Hz
Output Voltage: 15 / 16 / 18 / 19 / 20 / 22 / 24 V




Its absolutely not hearable but you can add some silent fans to cool it down a bit for the summer, so it comes about 40°C, better take a look at CPU Temperature.



The Power usage is 12-15W.



All together its a real nice PC for small projects but for a NAS its not really nice because of the I/O.If you look for a NAS look at NAS Server Synology ds415+.

Programmier-Einleitung in C/C++

Diese Einleitung ist auf Grund eines Wunsches entstanden und soll die Basics beim Programmieren von C und C++ zeigen, es soll nur Basics in den sprachen zeigen keine OOP, Klassen, FileHandler oder Ausgabe Formatierung.



Bevor wir beginnen können brauchen wir einen C Compiler und C++ Compiler…..

Wer unter Linux ist ist klar im Vorteil und sollte den gcc und g++ bereits besitzen notfalls installieren mit:

apt-get install gcc g++

unter Windows und Linux kann ich auch den Online C Compiler bzw. den Online C++ Compiler empfehlen!

Beide können das gleiche nur wenn ich den Compiler lokal habe kann ich meine Programme auch lokal nutzen, bei beiden speichere ich mein Programm unter “main.c”, um es zu übersetzen tippe ich:

gcc -o main *.c

nun können wir es auch starten mit:


(Der Online Compiler hat links oben einen Compile-Button der das für uns automatisch macht !)



Kommentare sind Notizen für mich oder andere Programmierer und sollten den Code gut dokumentieren, es gibt zwei arten von Kommentaren Einzeilige und Mehrzeilige.


// Ich bin ein Einzeiliges Kommentar


Ich bin ein Mehrzeiliges Kommentar,
und habe mehr Platz zur Verfügung!



variablen sind Platzhalter für werte mit denen unser Programm arbeiten kann.Variablen liegen auf Grund der Geschwindigkeit im Arbeitsspeicher insofern genug zu Verfügung steht und das System nicht ins swap(GNU/Linux) oder Auslagerungsdatei(Windows) schreiben muss und sich das Programm verlangsamt mehr dazu hier.Um Ressourcen zu schonen und aus dem vorhin genannten Bereich ist es notwendig sich zu überlegen wie viel Speicherplatz ich benötige, sinvoll kann es hier auch sein auf negative Zahlen zu verzichten und nur Vorzeichenlose oder unsigned Typen zu verenden.


TYP Größe Wertebereich
char 1 Byte = 8 Bit -128…+127
unsigned char 1 Byte = 8 Bit 0…255
short 2 Byte = 16 Bit -32768…+32767
unsigned short 2 Byte = 16 Bit 0…65535
int 4 Byte = 32 Bit -2147483648…+2147483648
unsigned int 4 Byte = 32 Bit 0…4294967295
long 4 Byte = 32 Bit -2147483648…+2147483648
unsigned long 4 Byte = 32 Bit 0…4294967295
float 4 Byte = 32 Bit 3.4*10-38…3.4*1038
double 8 Byte = 64 Bit 1.7*10-308…1.7*10308
long double 10 Byte = 80 Bit 3.4*10-4932…3.4*104932


Die Tabelle sollte man in etwa wissen da sie sehr wichtig ist !

Eine einfache Variable anzulegen sieht in etwa so aus :



int mein_int;// normales int
unsigned int mein_unsigned_int;// unsigned int
long double x;

Möglich ist es auch mehre Variablen des gleichen Datentyps gleichzeitig anzulegen oder auch gleich einen Wert zuzuweisen da die Variable sonst undefiniert ist!

int x = 0;// Variable x Wert zuweisen
int a,b,c;// mehrere Variablen anlegen
int d=0,e=1,f=2;// mehrere Variablen anlegen und Werte zuweisen

(Es empfiehlt sich den Variablen gleich Werte zu geben um nicht zu vergessen, sprechende Namen wie “Port”, “Zeit” oder “Ort” im Gegensatz zu x, y oder z! )



Um unseren Programm den Ablauf zu regeln müssen wir ihm sagen was passieren muss damit ein gewisser Ablauf gestartet wird.Angenommen in unserem Programm dürfen nur positive Zahlen verwendet werden, dafür müssen wir das auch prüfen damit keine Fehler auftreten.Zu beachten wenn ein logischer Ausdruck bestehend aus Operatoren ausgewertet wird ist das Ergebnis immer wahr oder falsch sein, auch mit 1 oder 0 gleichzusetzen.

Relationale Opeatoren
Größer als 10 > 5 //wahr
Größer oder gleich 1 >= 1 //wahr
Kleiner als 10 < 1 //falsch
Kleiner oder gleich 10 <= 1 //falsch
= =
Gleich 1 == 1    // wahr
Nicht gleich; ungleich  1 != 1 //falsch
Logische Opeatoren
AND (1 == 1) && (2 == 6) //falsch
OR (1 == 1) || (2 == 6) //wahr
NOT ! (1==7) //wahr


So nun aufgepasst! Die Relationalen Operatoren sollten klar sein, unklar wird es dann bei den logischen im ersten Beispiel haben wir folgendes: “(1 == 1) && (2 == 6)” wir wenden immer die Klammerregel an zuerst die klammern lösen dann geht es weiter, also ganz klar sollte sein das 1 gleich 1 ist, und auch das 2 nicht 6 ist womit wir nun folgendes Resultat haben “1 && 0” oder auch für noch nicht Programmierer “wahr && falsch”, für das logische && müssen beide Seiten wahr sein, sonst liefert es hier wieder falsch zurück!

So nochmal aufgepasst, nun haben wir folgendes “(1 == 1) || (2 == 6)” wir lösen wieder die Klammern auf, nun haben wir folgendes Ergebnis “1 || 0”, dem oder Operator reicht es wenn eines der beiden 1 zurück gibt egal ob links, rechts oder beide Seiten.

Nun zum Letzten, ganz klar klammern auflösen das können wir ja und haben nun “!(0)” das entspricht “nicht falsch” somit wahr, es macht aus wahr falsch und umgekehrt, ein “!(!(1))” wäre eine doppelte Verneinung wie ich mache keine Pause also mache ich eh weiter.Eher Theoretisch aber zum Verständnis noch Wichtig.

Zu sagen ist noch das Verschachtelten beliebig möglich sind und Zahlen auch durch Variablen zu ersetzen sind.



Es kann durchaus sinnvoll sein sich Informationen oder Variablen ausgeben zu lassen um den Verlauf des Programms oder auch das Ergebnis zusehen.Hier unterschieden sich C und C++ deutlich, ich behandle den Bereich nur kurz da er sehr spezifisch ist und ich es eher generell halten möchte.

In C:

printf("Wert: %dn",  30);

In C habe ich einen String welchen ich durch Steuerzeichen sage wo meine übergebenen Werte hingehören, mein Steuerzeichen ist hier “%d” und mein Wert “30”, mit “n” mache ich einen Zeilenumbruch.

In C++:

cout << "Wert: " << 30 <<  "n" << endl;

In C++ muss ich die Werte zusammenfügen mittels “<<“, Steuerzeichen benötige ich hier nicht genauso wie oben ist hier mein Wert 30 und mit “n” mache ich eine neue Zeile.

Beide Ausgaben sind:

Wert: 30

Weitere Beispiele finden sich in den Erklärungen weiter unten.



Natürlich kann es auch sinnvoll sein Werte einzulesen und hier unterscheiden sich C und C++ wieder voneinander, auch hier beschreibe ich es nur kurz.

In C:

int x = 0;
printf ("Bitte Wert eingeben:");
scanf ("%i", &x);//Integer wert an X Adresse übergeben
printf("Wert: %dn",  x);

In C++:

int x = 0;
cout << "Bitte Wert eingeben:";
cin >> x;
cout << "Wert: " << x <<  "n" << endl;

Beide Programme ergeben das selbe Resultat.

Zeile 1: Variable anlegen.

Zeile 2: Aufforderung an den Nutzer etwas einzugeben.

Zeile 3: Eingabe vom Nutzer abfangen und in x speichern.

Zeile 4: Ausgabe wie bereits gewohnt.



Nun kommen wir zu einem der wichtigsten Befehle überhaupt dem IF zu deutsch “Wenn”.Das IF wird mit dem Wort IF eingeleitet, in Klammern kommt die Bedingung anschließend in geschwungenen Klammern der Codeblock falls das Ergebnis wahr ist.Optional kann ein else Zweig kommen mit einem Codeblock in geschwungenen Klammern falls das Ergebnis falsch war.Das hört sich jetzt kompliziert an aber mit einer Symbol Aufschlüsselung und Beispielen geht es bestimmt.

Code wird nur ausgeführt wenn Bedingung wahr ist:

if( [BEDINGUNG] ){ [CODE] }


CODE1 wird ausgeführt wenn Bedingung wahr ist, falls nicht CODE2:

if( [BEDINGUNG] ){ [CODE1] }else{ [CODE2] }


// wenn x kleiner als 0, also negativ ist setze x auf 0
if(x < 0){x=0;}

// wenn x größer oder gleich ist setze x auf x mal 10
if(x >= 1){x=x*10;}

// wenn x gleich 0 setze x auf 1 ansonsten rechte das Quadrat aus.
if(x != 0){
x = 1;
x = x * x;



Bei Schleifen unterscheiden wir unter zwei verschiedenen Schleifen Typen, den Kopf und den Fuß gesteuerten.Der unterschied zwischen den Typen ist das bei kopfgesteuerten Schleifen wie For und While die Bedingung vor dem durchlaufen geprüft wird und bei fußgesteuerten erst nachher, das heißt das fußgesteuerte mindestens einmal durchlaufen werden und kopfgesteuerte gar nicht.Was mich zum nächsten Punkt bringt hier sind die Logikoperatoren wieder sehr wichtig wer falsche setzt verhindert ein durchlaufen oder sogar eine Endlosschleife und das Programm hängt.Einen besonderen Fall stellt die kopfgesteuerte For schleife dar sie kann mehr als ihr Partner die While Schleife, in der For Schleife ist es am besten möglich zu zählen und das Programm eine bestimmte Anzahl zu durchlaufen.


while schleife:

int x=0,i=0;

    x = x + 10;
while(i <= 10){//true bis i gleich 10 ist
    i = 1 + i;
printf("x ist: %d und i ist: %d n",x,i);//Ausgabe in C!

Unsere Ausgabe:

x ist: 0 und i ist: 11

Wie erwartet wird die Bedingung für x nicht erfüllt uns es bleibt 0,hingegen bei i wird i solange erhöht bis es 11 ist !


do while:

int x=0,i=0;

    x = x + 10;
    i = 1 + i;
}while(i <= 10);//true bis i gleich 10 ist
printf("x ist: %d und i ist: %d n",x,i);//Ausgabe in C!


Unsere Ausgabe:

x ist: 10 und i ist: 11

Wie auch hier erwartet wird die Schleife durchlaufen obwohl die Bedingung falsch ist,im Zweiten Teil macht die Schleife keinen Unterschied.


for schleife:

int x=0,i=0;

for(i=0;i <= 10;i= i + 1){
	x = x + i;
printf("x ist: %d und i ist: %d n",x,i);

Unsere Ausgabe:

x ist: 55 und i ist: 11

In C ist es nicht möglich eine Variable in dem Kopf der Schleife anzulegen wie in C++. Aber nun zu unserer schleife sie sieht im prinzip so aus:


in der INITIALISIERUNG kann man eine Variable auf 0 setzen um zB. von einer anderen For schleife hochgezählte werte wieder zurück zu setzen, genauso können wir den Wert auch auf 2 oder einen anderen gewünschten Wert setzen. Dann kommt unsere BEDINGUNG sie sagt wie lange unsere Schleife läuft, zuletzt kommt die REINITIALISIERUNG nach jedem Durchlauf wird sie ausgeführt um in unserem Beispiel etwas hochzuzählen, würde das nicht passieren würde sie endlos laufen weil i immer kleiner als 10 ist!


int x=0;

for(int i =0;i<=10;i++){
    x = x + i;
cout << "Summe x: " << x << "n" << endl;

Unsere Ausgabe:

Summe x: 55

In C++ ist es möglich in in der Schleife anzulegen, das hat den Nachteil ich kann i nach der letzten geschwungenen Klammer und somit in der Ausgabe nicht verwenden! Der Vorteil ist aber ich kann i nicht versehentlich wo anders ausgeben oder verändern dazu braucht i nachher keinen Speicherplatz mehr.Ich habe hier die Kurzschreibweise “i++” verwendet die werdet Ihr öfters sehen sie ist das gleiche wie “i = i +1”.


for(int i =0;i<=10;i++){
    x = i;
cout << "Summe x: " << x << "n" << endl;

int i =0;
    x = i;
cout << "Summe x: " << x << "n" << endl;

Beide geben 10 aus, dieses Beispiel zeigt das die zweite Schleife wie eine While schleife arbeitet.

int x=10,i=10;

for(i =0,x=0;i<=100;i++,x+=2){
   if(x >= 140){break;} 
cout << "Summe i: " << i << " und x:" << x << "n" << endl;

Unsere Ausgabe:

Summe i: 70 und x:140

Hier habe ich gleich mehre Tricks benutzt zum einen Variablen draußen anlegt um sie auszugeben, beide in der INITIALISIERUNG zurück gesetzt.Dann in der REINITIALISIERUNG zähle ich i um eins höher und x um 2 (Kurzschreibweise!), und dann habe ich ein IF genutzt um zu verhindern das x weiter als 140 zählt, das IF war dann wahr und hat mit “break” die Schleife verlassen.



Funktionen sind wichtig wenn eine Aufgabe mehrmals gebraucht wird, es spart damit Platz und macht ein Programm übersichtlich es gibt zwei arten von Funktionen mit und ohne Rückgabewert.



int addiere(int zahl1, int zahl2) {
	return (zahl1 + zahl2);

int main() {
	int summe = addiere(12, 8);
	printf("Summe von 12 und 8 ist %d!n", summe);
	return 0;

Unsere Ausgabe:

Summe von 12 und 8 ist 20!

Von Zeile 5 bis 9 haben wir unser Main Programm es wird beim Ausführen als erstes gestartet, in Zeile 1 bis 3 habe ich eine eiserne Funktion erstellt, das sieht im Prinzip so aus:


Zu sagen ist hier das der Rückgabe wert ein Datentyp sein muss wie oben oder void, void bedeutet das nichts zurück kommt dann gibt es aber auch kein return! Der Name sollte selbsterklärend sein, die Parameter sind optional und können beliebig erweitert werden, zuletzt wird das Ergebnis mit return an das Hauptprogramm zurück gegeben.


void addieredazu(int *zahl1, int *zahl2) {// übernehmen von Adressen
	*zahl1 = *zahl1 + *zahl2;

int main() {
	int x = 12,y = 8;
	addieredazu(&x, &y);// Adressen übergeben
	printf("Summe von 12 und 8 ist %d!n", x);
	return 0;

Das Ergebnis ist identisch mit dem vorherigen Beispiel, hier übergebe ich die Adressen und meine Funktion übernimmt diese und Arbeitet direkt mit den Variablen das Spart etwas Zeit ist aber schwieriger und für den Anfang nicht zu empfehlen darum erläutere ich es nur kurz.Man kann sich das ganze vorstellen als würde ich eine Verknüpfung übergeben er arbeitet aber mit den Original Werten.Referenzen sind praktisch wenn ich große Datenmengen habe aber nicht jedes mal alles in eine Funktion und wieder zurück schaufeln möchte, so übergebe ich nur die Speicheradresse und fertig.



Felder oder Arrays gehören zu den Datentypen jedoch benötigt man etwas Vorkenntnis um zu verstehen was sie können und auch um sie einsetzen zu können darum stehen sie hier unten.Angenommen wir brauchen mehre Variablen um zB. mehre Werte eingeben zu lassen und dann damit zu rechnen wie zB. Rundenzeiten, Preisverläufe oder auch Optionen in Form von Adressen abzulegen, das hört sich jetzt vielleicht komisch an aber beim Entwickeln werdet Ihr euch dann daran Erinnern.Das anlegen sieht so aus:


siehe Beispiel:

int i, wertedefault[5] = { 0, 1, 2, 3, 4 };// werte setzen
int i, werte[5];

for(i=0; i<5; i++) { // werte selbst setzen
	werte[i] = i;
	printf("Index: %d und Wert: %dn",  werte[i], i);

Unsere Ausgabe:

Index: 0 und Wert: 0
Index: 1 und Wert: 1
Index: 2 und Wert: 2
Index: 3 und Wert: 3
Index: 4 und Wert: 4

In Zeile 1 setzen wir die Werte gleich, in Zeile 2 hat das Array noch keine Werte, zu beachten ist das mein Index eine durchlaufende Nummer von 0 bis länge-1 ist, das hat den Grund das Arrays mit 0 beginnen. Der Grund ist folgender damit der Computer die Position der Werte findet muss er die Position berechnen im Speicher sieht das bei 4Bit Datein so aus:


er findet sie mit DatentypBit x Index, unser erster wert ist 4 mal 0 also ganz links, der zweite ist 4 mal 1 also muss er 4 stellen von links zum zweiten wert in unserem Fall hat er den Wert 1. Um den letzten wert zu finden muss er 4 mal 3 rechnen (3 = länge-1) das ist 12 und wenn wir nun 12 stellen von links gehen ist unser letzter wert 4 (Binär gesehen!).

Aber genug dazu in der schleife setzen wie die Werte nun selbst mit dem Namen des Arrays und den eckigen klammern kann ich den Index ansprechen und ihm einen wert zuweisen(Zeile 6) genauso kann ich aber auch den wert verwenden (Zeile 7).



Vielen Dank fürs lesen, bei Fragen,Anregungen oder Tipp/Rechtschreibfehlern bitte Kommentieren.


P-Project is a Porn Video Crawl Engine IN PHP AND PERL. Watch here new collected videos from different sites. You can register to our site to like and dislike videos and use the playlist feature.
We are currently searching for partner for Backlink change,Video share or traffic sharing.If you want to add a site,give feedback or have a question to our page, please support to our Administrator.

Start screen:

Bildschirmfoto vom 2014-11-25 20:26:11

Random Videos:

Bildschirmfoto vom 2014-11-17 21:23:14

Video Editor: Bildschirmfoto vom 2014-11-25 20:40:07

Amazone Store:Bildschirmfoto vom 2014-11-25 20:43:21

Web cams:Bildschirmfoto vom 2014-11-25 20:44:51

Mobile Site:index

Things from this project:

Generate Preview Jpeg/gif from Video

Sitemap Generator


 P-Project CSS