Ajax Chat treibt Cpu last hoch!!

bunker81

Member
Hallo ich habe bei Strato einen Dedizierten Server.
Mit Ubuntu 12.0.4.3

ICh habe ein Phpbb Forum mit einem Ajax Chat
Sobald User im Chat sind geht im Plesk meine Apache Cpu auslastung teilweise auf 100%

Ich habe das hier im netz gefunden:

https://github.com/Frug/AJAX-Chat/wiki/Socket-server

Ich habe das im Chat alles so ausgeführt jedoch ist die last nicht runter gegangen.

Muss ich Server seitig also im Linux per SSH noch etwas machen damit der Socket Server geht??
 
Sobald User im Chat sind geht im Plesk meine Apache Cpu auslastung teilweise auf 100%
PHP ist denkbar ungeeignet für Chats. Es ist möglich rein mit normalen Webserver einen gut verträglichen Chat zu bauen indem (fast) alles in statische Dateien ausgelagert wird aber das würde einen Komplettumbau verlangen.
Generell wäre eine IRC-Brücke oder ein event-orientierter Application Server (NodeJS ist aktuell in Mode) bedeutend empfehlenswerter. Mit socket.io ist die Chat-Entwicklung sogar sehr unkompliziert und plattformübergreifend kompatibel.

Muss ich Server seitig also im Linux per SSH noch etwas machen damit der Socket Server geht??
Nur Ruby installieren, Apache durch den Ruby-basierten SocketServer installieren und deinen ganzen Chat runter werfen und durch den Verlinkten ersetzen. Aber das wärs auch schon :rolleyes:
 
Danke für deine Antwort.

Viellicht kannst du mir was empfehlen.
Bin mit Linux nicht so warm das ich das alleine Hinkriege vielleicht kann mir jemand Helfen?
 
Generell würde ich in dem Fall empfehlen Webspace zu verwenden und den Chat an einen externen Anbieter wie Mibbit aus zu lagern.
Nicht nur dass es billiger und performanter ist, aber ohne Linux Kenntnisse wird der Punkt kommen wo durch technische Probleme oder -aufgrund mangelnder Wartung- Sicherheitslöcher dir massive Probleme bereiten.

Hier zB die Implementierung von Mibbit in PhpBB
http://wiki.mibbit.com/index.php/PhpBB_integration
 
Nur als Alternative (die aber vermutlich hier overkill wäre), ich habe das damals so realisiert, dass ich einen eigenen IRC server habe laufen lassen, auf einem winzigen vServer (256 MB RAM, 1 CPU, 10 GB Platte).
Als IRCD habe ich den Inspircd verwendet (mit mysql Modul).

Das ganze dann per Flashapplet (ja, ich weiß, würde ich heutzutage wohl nicht mehr machen) im Forum bereitgestellt. Vorteil: Bei weniger als 1000 Benutzern muss man den Ressourcenverbrauch des IRCDs mit der Lupe suchen, ein Forum erreicht das also nie im Leben.

Performanter geht es eigentlich nicht und man kann sehr effizient gegen Missbrauch vorgehen.

Bevor ich es vergesse: ich wollte keinem externen Anbieter vertrauen, da ich für den Datenschutz meiner User garantieren wollte.
 
Last edited by a moderator:
Fullquote entfernt.

Das Hört sich gut an.
Geht das auch auf meinem Root ?
 
Last edited by a moderator:
Das Stichwort ist Flash. Flash wird auf immer weniger Plattformen unterstützt und wegen massiver wiederkehrenden Sicherheitslöcher genau wie Java von immer mehr Rechnern verbannt.

Theoretisch würde es mit deinem Root funktionieren, praktisch solltest du aber einen IRC<->Javascript Application Server verwenden um die Anfragen und Antworten in Websocket's respektiv comet long polling zu wandeln.
Beides setzt aber zur Einbindung in dein Forum wie beschrieben massiven Aufwand und somit Erfahrung voraus.
 
Jetzt muss das ganze noch so möglich sein das der Chat die User erkennt also die Daten aus dem Forum verwendet.

Wenn hier jemand sowas bauen kann darf er sich gerne melden.
 
Inspircd beherrscht mit Modul (das kann man mit kompilieren) ohne Probleme den Zugriff auf eine Mysql Datenbank.
Das bringt natürlich die üblichen Risiken mit sich, dessen muss man sich bewusst sein.

Zum Thema Flash: wie gesagt, heutzutage würde ich das nicht mehr verwenden.
Aber es gibt, wie d4f schon schrieb, ja auch Javaapplets.

Tipps zum IRC Server kann ich Dir gerne geben, also prinzipielle Einrichtung, ggfls. welche Services sinnvoll sind, wie man mit z:lines und Co umgeht, etc...
Aber d4f hat definitiv Recht: da ist eine Menge Erfahrung notwendig, denn IRC Server sind enorm mächtig und haben einen riesigen Funktionsumfang. Die Konfiguration ist auch nicht unbedingt trivial.
 
Last edited by a moderator:
Aber es gibt, wie d4f schon schrieb, ja auch Javaapplets.
Ähm nein =) Ich sprach von Javascript im Browser mit Ajax-Verbindungen auf einen Application Server. Java im Client zu verwenden wäre noch schlimmer als Flash. Generell würde ich für den App-Server auch eine modernere Sprache, zB Javascript via NodeJS, denn Java anraten.

Inspircd beherrscht mit Modul (das kann man mit kompilieren) ohne Probleme den Zugriff auf eine Mysql Datenbank.
PHPBB3 verwendet das PHPass Framework für Hashing welches standardmässig Blowfish anwendet. Für Passwort-Validierungen könnte das eins der Hauptprobleme werden. Details: http://stackoverflow.com/questions/5288844/how-to-convert-text-to-phpbb-hash
 
Das komische ist das unter Top die cpu nie über 40% geht und im Plesk die Apache CPU Auslastung über 100% wenn viel los ist.

PHP:
PRC | sys    1.45s  | user  10.96s |               |              | #proc    148  | #trun      2 | #tslpi   311  | #tslpu     0 |  #zombie    0 |              |  clones     1 |              |  #exit      1 |
CPU | sys      13%  | user    110% | irq       1%  |              |               | idle    269% | wait      6%  |              |  steal     0% |              |  guest     0% | avgf 1.30GHz |  avgscal  48% |
cpu | sys       3%  | user     37% | irq       0%  |              |               | idle     59% | cpu000 w  1%  |              |  steal     0% |              |  guest     0% | avgf 1.46GHz |  avgscal  53% |
cpu | sys       4%  | user     29% | irq       0%  |              |               | idle     66% | cpu002 w  1%  |              |  steal     0% |              |  guest     0% | avgf 1.39GHz |  avgscal  51% |
cpu | sys       3%  | user     26% | irq       0%  |              |               | idle     69% | cpu001 w  2%  |              |  steal     0% |              |  guest     0% | avgf 1.28GHz |  avgscal  47% |
cpu | sys       3%  | user     18% | irq       1%  |              |               | idle     75% | cpu003 w  3%  |              |  steal     0% |              |  guest     0% | avgf 1.07GHz |  avgscal  39% |
CPL | avg1    1.27  |              | avg5    1.34  | avg15   1.26 |               |              |               | csw    40153 |               | intr   25892 |               |              |  numcpu     4 |
MEM | tot     3.8G  | free  113.1M |               | cache   2.6G | dirty   0.5M  | buff  254.0M |               | slab  132.0M |               |              |               |              |               |
SWP | tot     7.6G  | free    7.5G |               |              |               |              |               |              |               |              |               | vmcom   2.3G |  vmlim   9.5G |
MDD |          md1  | busy      0% |               | read       1 | write    259  | KiB/r      4 |               | KiB/w      5 |  MBr/s   0.00 | MBw/s   0.14 |               | avq     0.00 |  avio 0.00 ms |
DSK |          sda  | busy     11% |               | read       1 | write    138  | KiB/r      4 |               | KiB/w     10 |  MBr/s   0.00 | MBw/s   0.14 |               | avq     1.58 |  avio 7.74 ms |
DSK |          sdb  | busy     10% |               | read       0 | write    138  | KiB/r      0 |               | KiB/w     10 |  MBr/s   0.00 | MBw/s   0.14 |               | avq     1.63 |  avio 7.19 ms |
NET | transport     | tcpi    9116 | tcpo    9795  | udpi     531 | udpo     531  | tcpao    363 |               | tcppo    382 |  tcprs      0 | tcpie      0 |  tcpor      6 | udpnp      0 |  udpip      0 |
NET | network       | ipi     9647 |               | ipo     9093 | ipfrw      0  | deliv   9647 |               |              |               |              |               | icmpi      0 |  icmpo      0 |
NET | eth0      1%  | pcki    1791 | pcko    2457  |              | si  324 Kbps  | so 1877 Kbps | coll       0  | mlti       0 |  erri       0 |              |  erro       0 | drpi       0 |  drpo       0 |
NET | lo      ----  | pcki    7869 | pcko    7869  |              | si 3208 Kbps  | so 3208 Kbps | coll       0  | mlti       0 |  erri       0 |              |  erro       0 | drpi       0 |  drpo       0 |

  PID       RUID            EUID             THR        SYSCPU         USRCPU         VGROW        RGROW         RDDSK         WRDSK       ST        EXC        S       CPUNR         CPU        CMD        1/1
31272       www-data        www-data           2         0.13s          1.19s        -3880K       -3484K            0K            8K       --          -        S           3         13%        /usr/sbin/apac
30806       www-data        www-data           2         0.11s          1.18s         3072K        2428K            0K           12K       --          -        S           2         13%        /usr/sbin/apac
30922       www-data        www-data           2         0.10s          1.07s            0K           0K            0K            4K       --          -        S           1         12%        /usr/sbin/apac
30497       www-data        www-data           2         0.08s          1.08s          272K         248K            0K           16K       --          -        S           3         12%        /usr/sbin/apac
31099       www-data        www-data           2         0.09s          1.06s            0K           0K            0K           12K       --          -        S           1         12%        /usr/sbin/apac
31367       www-data        www-data           2         0.11s          1.04s            0K           0K            0K            4K       --          -        S           3         12%        /usr/sbin/apac
30163       www-data        www-data           2         0.11s          1.02s            0K           0K            0K            8K       --          -        S           3         11%        /usr/sbin/apac
30888       www-data        www-data           2         0.09s          1.03s            0K           0K            0K           16K       --          -        S           0         11%        /usr/sbin/apac
30993       www-data        www-data           2         0.08s          0.95s            0K          20K            0K           12K       --          -        S           1         10%        /usr/sbin/apac
29195       www-data        www-data           2         0.08s          0.94s           20K           0K            0K            8K       --          -        R           0         10%        /usr/sbin/apac
 1047       mysql           mysql             24         0.18s          0.27s            0K           0K            4K          644K       --          -        S           0          5%        mysqld
 3559       root            root              25         0.12s          0.03s            0K           0K            0K            0K       --          -        S           3          2%        ts3server_linu
27655       nginx           nginx              1         0.07s          0.04s            0K           0K            0K            8K       --          -        S           3          1%        nginx
 3047       root            root               1         0.01s          0.03s            0K           0K            0K            4K       --          -        S           2          0%        sw-engine
31394       root            root               1         0.02s          0.01s            0K           0K            0K            0K       --          -        R           2          0%        atop
   11       root            root               1         0.02s          0.00s            0K           0K            0K            0K       --          -        S           0          0%        kworker/0:1
   56       root            root               1         0.02s          0.00s            0K           0K            0K            0K       --          -        S           1          0%        kworker/1:1
19766       root            root               1         0.02s          0.00s            0K           0K            0K            0K       --          -        S           3          0%        kworker/3:1
 3215       tomcat6         tomcat6           22         0.00s          0.01s            0K           0K            0K           12K       --          -        S           3          0%        java
   14       root            root               1         0.01s          0.00s            0K           0K            0K            0K       --          -        S           2          0%        kworker/2:0
31447       root            -                  0         0.00s          0.01s            0K           0K             -             -       NE          0        E           -          0%        <sw-rrdtool>
27811       root            root               1         0.00s          0.00s            0K           0K            0K            0K       --          -        S           0          0%        /usr/sbin/apac
 2766       root            root               1         0.00s          0.00s            0K           0K            0K            0K       --          -        S           2          0%        /usr/sbin/spam
31397       psaadm          psaadm             1         0.00s          0.00s            0K           0K            0K            0K       --          -        S           2          0%        sw-engine-cgi
27813       root            www-data           1         0.00s          0.00s            0K           0K            0K            0K       --          -        S           2          0%        /usr/sbin/apac
  539       sw-cp-se        sw-cp-se           1         0.00s          0.00s            0K           0K            0K            0K       --          -        S           1          0%        sw-cp-serverd
 2563       postfix         postfix            7         0.00s          0.00s            0K           0K            0K            0K       --          -        S           1          0%        psa-pc-remote
 2697       postfix         postfix            1         0.00s          0.00s            0K           0K            0K            0K       --          -        S           0          0%        qmgr
 1284       ntp             ntp                1         0.00s          0.00s            0K           0K            0K            0K       --          -        S           2          0%        ntpd
 1166       postgres        postgres           1         0.00s          0.00s            0K           0K            0K            0K       --          -        S           1          0%        postgres
 1164       postgres        postgres           1         0.00s          0.00s            0K           0K            0K            0K       --          -        S           0          0%        postgres
 1165       postgres        postgres           1         0.00s          0.00s            0K           0K            0K            0K       --          -        S           2          0%        postgres
   26       root            root               1         0.00s          0.00s            0K           0K            0K            0K       --          -        S           0          0%        sync_supers
  344       root            root               1         0.00s          0.00s            0K           0K            0K           92K       --          -        S           3          0%        jbd2/md1-8
  490       root            root               1         0.00s          0.00s            0K           0K            0K            0K       --          -        S           0          0%        flush-9:1

PHP:
top - 20:30:02 up 12 days,  2:48,  1 user,  load average: 1.14, 1.30, 1.25
Tasks: 144 total,   4 running, 140 sleeping,   0 stopped,   0 zombie
Cpu(s): 25.3%us,  3.0%sy,  0.0%ni, 70.4%id,  0.9%wa,  0.0%hi,  0.3%si,  0.0%st
Mem:   4017048k total,  3820108k used,   196940k free,   260104k buffers
Swap:  7999480k total,   166504k used,  7832976k free,  2708956k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
30806 www-data  20   0  396m  27m 5548 S   12  0.7   5:49.43 /usr/sbin/apach
31367 www-data  20   0  393m  26m 5188 S   11  0.7   1:00.82 /usr/sbin/apach
30922 www-data  20   0  401m  32m 5488 S   11  0.8   4:58.32 /usr/sbin/apach
29195 www-data  20   0  402m  33m 5808 S   10  0.9  11:46.32 /usr/sbin/apach
30163 www-data  20   0  396m  27m 5752 S   10  0.7   9:03.53 /usr/sbin/apach
30888 www-data  20   0  399m  30m 5736 R   10  0.8   5:00.96 /usr/sbin/apach
30993 www-data  20   0  398m  31m 5716 R   10  0.8   3:44.51 /usr/sbin/apach
31099 www-data  20   0  394m  27m 5596 S   10  0.7   2:59.26 /usr/sbin/apach
30497 www-data  20   0  400m  31m 5556 S    8  0.8   7:04.66 /usr/sbin/apach
31272 www-data  20   0  394m  27m 5396 R    8  0.7   1:33.05 /usr/sbin/apach
 1047 mysql     20   0 2355m  82m 4912 S    3  2.1 944:15.43 mysqld
31484 drweb     20   0 67480  10m 2628 S    3  0.3   0:00.09 perl
 3559 root      20   0  651m 2204 1628 S    1  0.1 249:23.68 ts3server_linux
27655 nginx     20   0 32492 3856 1668 S    1  0.1   1:39.09 nginx
  818 syslog    20   0  244m 4852  940 S    0  0.1   4:19.34 rsyslogd
 3215 tomcat6   20   0 1859m  58m 3668 S    0  1.5  18:49.48 java
 5379 root      20   0     0    0    0 S    0  0.0   0:37.62 kworker/3:0
    1 root      20   0 24328 1604  964 S    0  0.0   0:16.80 init
    2 root      20   0     0    0    0 S    0  0.0   0:00.00 kthreadd
    3 root      20   0     0    0    0 S    0  0.0   0:21.82 ksoftirqd/0
    5 root      20   0     0    0    0 S    0  0.0   0:00.30 kworker/u:0
    6 root      RT   0     0    0    0 S    0  0.0   0:00.00 migration/0
    7 root      RT   0     0    0    0 S    0  0.0   0:04.63 watchdog/0
    8 root      RT   0     0    0    0 S    0  0.0  14449:01 migration/1
    9 root      20   0     0    0    0 S    0  0.0   4:47.50 kworker/1:0

Zu der zeit war Plesk bei:
Apache CPU-Auslastung 99.5 % (?)
 
Wir haben einen ejabberd mit jwchat im Einsatz. Ca. 200 User gleichzeitig, zero Problems.
Facebook benutzt z.b. auch eine veränderte Variante des xmpp protokolls
 
Keine Ahnung wie perfomant diese Programme sind, aber da auch wirklich keiner mal was von Python erwähnt hatte, tu ich das mal.

Hier beschreibt jemand wie man mit Python einen Webchat programmiert: http://blog.pythonisito.com/2012/07/realtime-web-chat-with-socketio-and.html

Hier ein Django-Modul (Webframework in Python): https://github.com/ckreutzer/eventlet-django-webchat

Was für eine Umgebung im LAN: http://code.google.com/p/pywebchat/

Die Sprache ist auf jeden Fall sauberer als PHP und gerade auch in der Webentwicklung ist Python stark am kommen.
 
Die Sprache ist auf jeden Fall sauberer als PHP
Let's agree to disagree. Ich habe in dem letzten Jahr gezwungenermaßen mehr als mir lieb ist mit Python verbracht. Verdikt? Mehr kann eine Sprache imho nicht falsch machen, von Sauberkeit ist in der Struktur und internen Logik auch keine Spur.

Hier beschreibt jemand wie man mit Python einen Webchat programmiert:
Eher einen Webchat-Server da auf den ersten Blick schon socket.io zum Einsatz kommt. Also nichts was man "mal so" auf einem Python-tauglichen Webspace/Webserver ausführt...

Aber ihr wisst schon dass der Thread von Febuar ist, also der Autor recht sicher schon eine Lösung für sein Problem hat?
 
Let's agree to disagree. Ich habe in dem letzten Jahr gezwungenermaßen mehr als mir lieb ist mit Python verbracht. Verdikt? Mehr kann eine Sprache imho nicht falsch machen, von Sauberkeit ist in der Struktur und internen Logik auch keine Spur.

Dann machst du irgendwas falsch oder hattest den falschen Code vorliegen. Auch in Python kann man unverständlichen Code schreiben. Ich hab mich zu sehr an diese Sprache gewöhnt und bin immer begeistert mit welcher Einfachheit Probleme gelöst werden.

Wenn wir schon beim Thema sind, dann poste doch mal ein paar schlecht Beispiele, die dir wirklich gegen den Strich gehen. Sicherlich gibt es das ein oder andere, was man vermeiden könnte.
 
Wir rutschen jetzt kräftig ins OT, aber hier mal ein paar Beispiele die mir direkt einfallen:

Python ist schwach typisiert.... außer wenn es ihm grade passt:
Code:
i = 10
#Geht nicht da Integer nicht implizit nach String casted werden kann
print("Wert ist "+i)

Die Sprache ist extrem instabil zwischen Major-Versionen:
Code:
#Python 2: print ist ein Sprach-Konstrukt
print "Hallo Welt"
#Python 3: print ist eine Methode
print("Hallo Welt")

Python2 lässt keine Sonderzeichen wie äöü in den Kommentaren(!) oder hardcoded-Strings zu ausser man aktiviert explizit am Anfang der Datei UTF-8
Code:
# -*- encoding: utf-8 -*-

Einer der Vorteile - keine Klammern - wird schnell ein Nachteil bei copy/paste oder Text-Verkehr wenn auch nur ein einziges Leerzeichen verrutscht.

Die Sprache mischt OOP stark mit prozedural:
Code:
#Existiert nicht
Wert = "hallo"
print("Länge: ",Wert.length)
#Sondern es geht über eine globale Funktion die man entsprechend nicht verändern kann
Wert = "hallo"
print("Länge: ",len(Wert))

Das Nächste was es an einem einfachen Objekt-Handler gibt muss man sich selber bauen:
Code:
class Object(object):
    def __init__(self, dict={}):
        super().__init__()
        self.__dict__.update(dict)

Es fehlen Basis-Funktionen wie bspw zur Feststellung ob eine Eingabe ein Integer ist, Eigenbau notwendig...
Code:
def is_int(a):
    try:
        int(a)
        return True
    except ValueError:
        return False

Ich könnte noch viel weiterfahren, zusammengefasst fühlt sich Python viel zu sehr nach einer Lernsprache an als nach einer echten Programmiersprache. Klar, die Basis-Ideen sind gut aber sie werden absolut nicht konsequent verfolgt, auf Python's Syntax aufbauende (Pseudo)sprachen wie Coffeescript sind da doch imho bedeutend übersichtlicher.
 
Last edited by a moderator:
Wir rutschen jetzt kräftig ins OT, aber hier mal ein paar Beispiele die mir direkt einfallen:
Ja, spielt aber eh keine Rolle mehr..

Python ist schwach typisiert.... außer wenn es ihm grade passt:
Code:
i = 10
#Geht nicht da Integer nicht implizit nach String casted werden kann
print("Wert ist "+i)

Ach jetzt kapiere ich das, habs gerade nochmal gelesen.
Ja, so macht man das ganz sicher nicht. Addierst du in C++ auch Stings mit Integer, Real oder sonst anderen Datentypen? Welche Sprache lässt sich denn so vergewaltigen? Python ist stark und dynamisch Typisiert. Ich weiß nicht wo du her hast, dass Python schwach typisiert wäre.

Ginge aber so:
Code:
print("Wer ist {}".format(i))
print('Wer ist',i)
print('Wer ist %s' % i)
print('Wer ist %d' % i)

#Mit Gettext
print(_("Hello {}.").format(name))


Die Sprache ist extrem instabil zwischen Major-Versionen:
Code:
#Python 2: print ist ein Sprach-Konstrukt
print "Hallo Welt"
#Python 3: print ist eine Methode
print("Hallo Welt")
Ja, das stimmt. Es hat seine Gründe. z.B. ist xrange jetzt range. Das print jetzt eine Funktion ist, finde ich auch gut.

Python2 lässt keine Sonderzeichen wie äöü in den Kommentaren(!) oder hardcoded-Strings zu ausser man aktiviert explizit am Anfang der Datei UTF-8
Code:
# -*- encoding: utf-8 -*-
Jap, ich habe mir angewöhnt Englisch in meinen Programmen zu nutzen. Hardcoded Stings mit u'sting'. Wenn es andere verstehen sollen, führt eh kein Weg dran vorbei. i18n mit gettext...

Einer der Vorteile - keine Klammern - wird schnell ein Nachteil bei copy/paste oder Text-Verkehr wenn auch nur ein einziges Leerzeichen verrutscht.

Haha, ja das passiert immer mir.. Grundsätzlich!


Die Sprache mischt OOP stark mit prozedural:
Code:
#Existiert nicht
Wert = "hallo"
print("Länge: ",Wert.length)
#Sondern es geht über eine globale Funktion die man entsprechend nicht verändern kann
Wert = "hallo"
print("Länge: ",len(Wert))
Doch kannst du:

Code:
#Python 2.7
>>> class str2(str):
	def __len__(self):
		return 42

	
>>> s = str2('Hallo')
>>> len(s)
42

Wenns dir nicht passt, packst du halt noch die Methode length mit rein.


Das Nächste was es an einem einfachen Objekt-Handler gibt muss man sich selber bauen:
Code:
class Object(object):
    def __init__(self, dict={}):
        super().__init__()
        self.__dict__.update(dict)
Ih, sieht ja hässlich aus :-D
Hab ich bisher zum Glück nicht gebraucht... Bis jetzt


Es fehlen Basis-Funktionen wie bspw zur Feststellung ob eine Eingabe ein Integer ist, Eigenbau notwendig...
Code:
def is_int(a):
    try:
        int(a)
        return True
    except ValueError:
        return False
Oha :-D
Wie wär es mit a.isdigit() bei einem String? raw_input == string
Und an anderer Stelle: isinstance(a, int)
Für die ganz Harten halt regex.

Ich könnte noch viel weiterfahren, zusammengefasst fühlt sich Python viel zu sehr nach einer Lernsprache an als nach einer echten Programmiersprache. Klar, die Basis-Ideen sind gut aber sie werden absolut nicht konsequent verfolgt, auf Python's Syntax aufbauende (Pseudo)sprachen wie Coffeescript sind da doch imho bedeutend übersichtlicher.

Ja, ich hab erst mit ShellScripting angefangen, wobei mich dort das Escapen ziemlich genervt hat. Dann hab ich Python gelernt und ehrlich gesagt könnte ich mich übergeben, wenn ich C-Code lese. Ein Teil verstehe ich, aber irgendwann schalte ich ab und sage mir, dass ich das nicht verstehen will. Nein, es nervt mich sogar, lieber Programmiere ich einen Roboter in irgendeiner Sprache, der ich zuvor noch nie begegnet bin...
Die Sprachen an sich sind nur ein Werkzeug. Wie man sie einsetzt, ist eine ganz andere Sache.Viele Sachen werden in Python falsch gemacht, weil die man aus anderen Sprachen Konstrukte übernimmt. Entweder man liebt oder man hasst python. Es wundert mich, dass du nicht die Einrückung bemängelt hast (außer Copy&Paste)

Zuletzt kann ich noch dieses Video empfehlen:
http://www.youtube.com/watch?v=OSGv2VnC0go

Da werden so einige Dinge gezeigt, die eigentlich alle falsch machen.

Achja, noch was: http://docopt.org/
Programmiere das mal in C/C++ nach :-D
Hab es ausprobiert und es funktioniert wie vorgesehen. Da lernt man gleichzeitig noch ein bisschen was über IEEE 1003.1
 
Last edited by a moderator:
Back
Top