Performance Test: Python, Perl, PHP, Java, Ruby, Bash and C

I’ve had just some time to do some performance test and compare different languages. I’ve created scripts in each language which does the following:

for 1’000’000 lines

    “line” is empty

    for 150 chars

        add char “c” to the “line”

    print out the “line”

Running the script and pipe the output to a file creates a 145MB file. And the most interesting result is the time each script took to run:

Shell$ time python createRandomFile.py --rows 1000000 --chars 150 > bigfile.py.txt
real	0m56.207s
user	0m55.348s
sys	0m0.607s
Shell$ time perl createRandomFile.pl -r 1000000 -c 150 > bigfile.pl.txt
real	0m37.742s
user	0m37.147s
sys	0m0.488s
Shell$ time php createRandomFile.php -r 1000000 -c 150 > bigfile.php.txt
real	1m9.357s
user	1m5.165s
sys	0m3.542s
Shell$ time java createRandomFile 1000000 150 > bigfile.java.txt
real	1m18.791s
user	1m0.689s
sys	0m11.133s
Shell$ time ruby createRandomFile.rb -r 1000000 -c 150 > bigfile.ruby.txt
real	1m44.118s
user	1m39.672s
sys	0m0.967s
Shell$ time ruby createRandomFile.sh 1000000 150 > bigfile.bash.txt
real	78m46.334s
user	56m30.018s
sys	3m5.280s
Shell$ time ./createRandmonFile -r 1000000 -c 150 > bigfile.c.txt
real	0m2.159s
user	0m1.339s
sys	0m0.425s

For me personally there are some unexpected new experiences:

  1. Python takes “much” longer than perl. After performance optimizing the Python script its much faster, but still slower than the perl script. Thats really sad…
  2. Not a big surprise is the fact, that the C program is the fastest. But that it is so much faster than all others is impressive.
  3. Using echo instead print in the php script gets the script one second faster.
  4. And the fact, java is one of the most slowest language of all competitors used here.
  5. Ruby is damn slow
  6. Finally, Bash IS the slowest… Damn slow! I mean, SLOOOWWW!!!

This are really interesting results!

Tagged: , , , , , , ,

Das Ding mit den eBooks

20110612-125900.jpg

Immer wie mehr kaufe ich Bücher, bis jetzt jedoch nur technische, im eBook Format. Ich hab das Buch auf all meinen mobilen Geräten immer dabei, kann nach Stichworten suchen und natürlich auch Abschnitte markieren und kommentieren. Ich bin überzeugt, dass sich mein Bücherregel immer wie mehr vernachlässigt vorkommen wird. Einzig, das Ding mit den Lesezeichen hab ich noch nicht so ganz begriffen ;)

Apple hat es leider bis jetzt noch nicht hingekriegt mit dem iBook Store in der Schweiz. Aus diesem Grund schneiden sich meine Finger am virtuellen Papier aus Büchern aus Amazons Kindle Store. Apple wird es nicht leicht haben, wenn sie irgendwann doch noch mit dem iBook Store kommen, da sich Bücher aus dem Kindle Store wohl nicht transferieren lassen werden.

Tagged: , ,

Subversion Basics

Tägliche Arbeit mit Subversion

Die tägliche Arbeit mit Subversion besteht generell nur aus Update und Commit. Dennoch gibt es ein paar interessante weitere wichtige Befehle. Hier mal eine Übersicht der wichtigsten.
Initiales Auschecken eines Repositories (Arbeitskopie erstellen)

bash$ mkdir Workingcopy 
bash$ cd Workingcopy/
bash$ svn checkout  http://svn.local.zero-one.ch/KTSI/DevEdge-tspycher/ . # Der Punkt am Ende repräsentiert das aktuelle Verzeichnis
A Playground
A Projects
A Projects/TakeAway
A Projects/TakeAway/Source
A Projects/TakeAway/Source/Class_TakeAway.h
A Projects/TakeAway/Source/main.cpp
A Projects/TakeAway/Source/Class_TakeAway.cpp
A Projects/TakeAway/TakeAway.xcodeproj
... SNIPP ...
Checked out revision 40.

Arbeite mit dem Innerhalb der Arbeitskopie lokal. Vorzugsweise alle “Änderungspakete” commiten. Das heisst nach jedem erfolgreichen abschliessen einer Tätigkeit oder eines Bugfixing die Änderungen commiten.

Hier die Regeln fürs Commiten:

  • Wenn möglich nur funktionierender und kompletter Code hochladen
  • Spätestens bei Arbeitsende commiten
  • Jeder Commit steht für eine abgeschlossene Arbeit
  • Das Commiten von Binären Files vermeiden . Z.b. Build Verzeichnisse

Änderungen übertragen (commiten)

bash$ svn commit -m "Bugs fixed in main.cpp"
Sending Projects/TakeAway/Source/main.cpp
Transmitting file data ..
Committed revision 41.

Arbeitskopie updaten (update)

bash$ svn update
U Projects/TakeAway/Source/main.cpp
Updated to revision 42.

Datei/Verzeichnis unter Versionskontrolle stellen (add)

bash$ vi test.txt
bash$ svn add test.txt
A test.txt
bash$ svn commit -m "added test.txt to the repository"
Adding Playground/test.txt
Transmitting file data .
Committed revision 43.

Properties setzen (propset)
Die angegebenen Variabeln werden innerhalb des angegebenen Files mit den entsprechenden Werten ersetzt. In der Datei oder in den Dateien müssen die Platzhalter mit $PLATZHALTER$ angegeben werden. Z.b. $Date$ $Rev$ $Author$

bash$ svn propset svn:keywords "Date Rev Author" test.txt
property 'svn:keywords' set on 'test.txt'
bash$ svn commit -m "added Date Rev Author properties to the file"
Sending Playground/test.txt
Committed revision 44.

Datei aus der Versionskontrolle entfernen (delete)
Achtung, Files in unterhalb der aktuellen Revision bleiben bestehen!

bash$ svn commit -m "removed file from repository"
Deleting Playground/test.txt
Committed revision 45.

Konflikte lösen (resolve)

bash$ svn commit -m "some minor changes"
Sending Playground/test.txt
svn: Commit failed (details follow):
svn: File or directory 'test.txt' is out of date; try updating
svn: resource out of date; try updating
bash$ svn update
Conflict discovered in 'test.txt'.
Select: (p) postpone, (df) diff-full, (e) edit,
(mc) mine-conflict, (tc) theirs-conflict,
(s) show all options: p
C test.txt
Updated to revision 47.
Summary of conflicts:
Text conflicts: 1
bash$ ls -la
total 32
drwxr-xr-x 7 tspycher staff 238 Aug 29 11:16 .
drwxr-xr-x 5 tspycher staff 170 Aug 29 10:56 ..
drwxr-xr-x 8 tspycher staff 272 Aug 29 11:16 .svn
-rw-r--r-- 1 tspycher staff 116 Aug 29 11:16 test.txt
-rw-r--r-- 1 tspycher staff 45 Aug 29 11:16 test.txt.mine
-rw-r--r-- 1 tspycher staff 17 Aug 29 11:16 test.txt.r46
-rw-r--r-- 1 tspycher staff 36 Aug 29 11:16 test.txt.r47

Die Datei test.txt steht nun in einem Konflikt und kann nicht mehr commited werden. Mit der Option p (postpone) wird die lösung des Konflikts verschoben, sodass dieser von Hand in der Arbeitskopei gelöst werden kann.
Die Original Datei enthält sämtliche Änderungen mit einer speziellen Formatierung:
<<<<<<< .mine
Ich bin ein Test, hier schreib ich was lokal
=======
Ich bin ein Test mit noch mehr text
>>>>>>> .r47
Die Dateien habe ich alle verifiziert und mich dafür entschieden, die Änderung meines Arbeitskollegen zu akzeptieren.

bash$ cp test.txt.r47 test.txt
bash$ svn resolved test.txt
Resolved conflicted state of 'test.txt'

Danach sollte man auf jedenfall commiten.

Tagged: ,

Apple, nicht nur geile Produkte…

thoughts

Der Akku des über 3 Jahre alten Macbooks meines Vaters ist regelrecht explodiert. Garantie hatte das Teil auch nur total 1 Jahr. Von dieser ist im Normalfall der Akku ausgeschlossen.

Tagged: , ,

iBank::Finanzapplikation für OSX/iPhone

Es gibt tonnenweise Finanzapplikationen auf dem Markt. Viele sind kompliziert, bieten keine Möglichkeit für die Synchronisation mit dem iPhone etc. Es ist schwer diesbezüglich eine Entscheidung zu treffen. iBank kostet zwar etwas, aber es deckt alle Needs ab…

Tagged: , , , ,

Club der Denker::Mitglieder gesucht

Wie kann man ohne grossen Aufwand äusserst schnell zu viel Geld kommen? Ok, diese Frage hat sich sicherlich schon jeder gestellt. Thomas Maurer, guter Arbeitskollege, und ich haben schon oft bei Kaffe oder Redbull darüber diskutiert. Ideen kommen viele, jedoch sind ein sehr grosser Teil davon alles andere als realistisch. ;-) Nun stellt sich aber die Frage, was passieren würde wenn man diese Diskussion etwas organisieren würde? Was würde passieren wenn man diese Ideen strukturieren und polieren würde?

Tagged: , , ,

Wutausbrüche lohnen sich nicht

Für alle Die, die es noch nicht mitbekommen haben, ich habe mir am Donnerstag 12.11 den kleinen rechten Finger gebrochen. Eine hitzige Diskussion hat mich dazu gebracht mit der Faust auf einen Tisch zu hauen. Erst habe ich nichts gemerkt. Später dann wieder an meinem Arbeitsplatz habe ich bemerkt, dass meine Hand geschwollen ist. Schlussendlich wurde ich überredet die Hand einem Arzt zu zeigen.

Tagged: ,

iPhone Hack mit Blackra1n

Habe eben mein iPhone 3G (könnt euch die Comments spaaren, JA ist noch kein 3Gs) mit blackra1n “gehackt”. Ich mag mich noch erinnern, wie komplex es noch mit den ersten iPhones war.

Tagged: , ,

Compared::Cool und Zukunftsorientiert?

Die IT ist ein so grosses Thema, dass es machmal schier unmöglich ist eine Entscheidung zu treffen, was für ein Produkt man sich kaufen möchte.

Tagged:

Server und Netzwerk Monitoring mit Icinga

Icinga LogoIn meiner Tätigkeit als System Engineer bin ich im Moment dabei ein neues Monitoring System zu implementieren. Hier ein paar Gedanken dazu…

Als System oder Netzwerk Administrator ist man sprichwörtlich blind ohne ein Monitoring System im Netzwerk, welches über den gesundheitlichen Stand aller Server und Netzwerkkomponenten informiert. Die Informationen, welche ein solches System liefern kann, sind schier unendlich. Am wichtigsten sind Daten zur aktuellen Auslastung, Status von Diensten und Informationen über die Hardware (Festplatten, Ventilatoren etc.).

Tagged: , , , , ,
Page 1 of 212