Beiträge von Georg Kraml

    Zitat von leviathan

    Ich benutze eher windows aber die übung ist auf UNIX. Ist da der unterschied groß oder nur klein.

    Microsofts Distributionen haben keinen bzw. nur sehr mangelhaften POSIX-Support, es werden also sehr viele Standardfunktionen und -systemaufrufe auf Windows nicht funktionieren. Anders ausgedrückt: die Sprache selbst ist dieselbe, aber ausgerechnet das UE-relevante OS-Interface sieht deutlich anders aus.


    Zitat

    macht es sinn sich C auf win anzuschauen und dann die ue auf unix zu machen oder ist es ein problem wenn man es auf win kann es auf unix umzulernen?

    Wenn du dich wirklich nur mit C beschäftigst, also dich zum Beispiel im Developer Studio auf "console application" beschränkst, solltest du keine zu großen Probleme haben.

    Du darfst dich halt nicht auf nichtportable Spielereien einlassen, und du musst aufpassen, dass du wirklich C programmierst und dich Microsofts berüchtigt besserwisserische Umgebungen nicht kommentarlos C++ programmieren lassen. Sonst kommst du nachher aus dem Staunen nicht mehr heraus, was plötzlich alles nicht mehr geht.

    Am Besten ist es, du verwendest keine Windows-spezifische Dokumentation, sondern halt ein Buch oder irgendwas Gegoogeltes, und benutzt Funktionen und Systemaufrufe gleich wie unter Unix. Dann können dir eventuelle Abweichungen später nicht auf den Kopf fallen.

    .

    Zitat von michi204

    dh IMO, dass emule (mit vernünftigen einstellungen) automatisch illegal ist, sobald du urheberrechtlich geschützte werke herunterlädst,

    Das ist zwar sehr vereinfacht ausgedrückt, aber im Kern richtig.

    .

    Zitat von Lord Binary

    Angeblich haben sie ziemlich hohe Lizenzgebühren für ihre PS Interpreter and Fonts verlangt.

    Ja. Es gab eine Zeit, in der war Adobe aufgrund seiner brutalen Lizenzpolitik verhasster als Microsoft, besonders unter Typographen und Graphikdesignern. Sie hatten gewisse Zeit lang ein Quasimonopol auf Fonts, so wie Netscape eine Zeit lang ein Quasimonopol auf Browser hatte, und so wie Netscape wäre Abdobe nach dem Auftauchen adäquater Konkurrenzprodukte beinahe völlig untergangen.


    Zitat

    Soweit ich das verstanden hab, kann man seinen eigene PS Inpterpreter schreiben, ohne Lizenzgebühren zahlen zu müssen.

    Ja. PS ist so frei wie mehr oder weniger jede andere Programmiersprache auch.


    Zitat

    Das sagt Adobe zu PDF vrs PS.

    Was Adobe über PDF vs. Postscript sagt, ist ziemlich klar, schließlich wollen sie ja ihr PDF-Zeug verkaufen. Schau mal, das sagt Microsoft zu Windows vs. Linux.

    Ok, im Ernst: die Behauptung, PDF wäre "more advanced" als Postscript ist unbefähr so sinnvoll wie die Behauptung, der Ferrari Testarossa wäre "more advanced" als der Mercedes LAK 1624 Allradpritschenkipper, nur weil er neuer ist, schneller fährt und die Spur besser hält - das stimmt zwar alles, ist aber beides enorm uninteressant, wenn du's mit wirklicher Arbeit zu hast. ;)

    .

    Zitat von daff

    keine wirklich haltbaren Argumente mehr gegen PDF, außer, dass es halt schon irgendwie ein proprietäres Format ist.

    Das reicht ja auch schon: warum soll ich ein proprietäres Format verwenden, wenn ich ein technisch unanzweifelbar besseres und abgesehen davon mindestens genau so gutes freies Format haben?


    Zitat

    (heute interessierts glaub ich kaum mehr jemanden, ob ein Dokument 10kB mehr hat oder weniger hat)

    Eben. Wozu also dann PDF? :D


    Zitat

    Und inzwischen ist es doch eh ziemlich gut möglich, zwischen PS und PDF herumzukonvertieren, zumindest meiner Erfahrung nach.

    Stimmt schon, aber ziemlich gut != wirklich gut. Ich habe immer noch regelmäßig mit PDFs zu tun, die unsere Drucker abstürzen lassen. Und wenn ich zum Drucken nach PS konvertieren muss - zum Veröffentlichen sowieso, kaum ein Journal oder Lichtsatzstudio akzeptiert PDF - ist PDF für mich einfach nur ein ärgerlicher Umweg.

    .

    Zitat von max1005

    wie kann ich feststellen, ob ich mittels der php-funktion time() sommer/winterzeit bekomme, d.h., dass der unterschied zur unserer zeitzone immer konstant ist, egal ob sommer oder winderzeit?

    Konfigurationsabhängig. Die Funktion localtime() verrät dir die für dich aktuelle Zeit, das Element "tm_isdst" in der von ihr zurückgelieferten Hashtabelle verrät dir, ob jetzt gerade Sommerzeit gilt, und die Umgebungsvariable "PHP_TZ" verrät dir möglicherweise noch mehr.

    Einen wirklich portablen Weg, im Winter festzustellen, ob im Sommer Sommerzeit gilt, gibt es leider nicht.

    .

    Zitat von jeuneS2

    Doch: der gcc (3.3.2) compilierts anstandslos,

    Ihr habt beide halb recht - in C89/90 ist sowas absolut verboten, in C99 ist es unter bestimmten Umständen erlaubt. Ältere oder auf Wachsamkeit konfigurierte gccs melden "y.c:4: error: ISO C90 forbids variable-size array `positions'".


    Zitat

    und Segfaults hab ich auch keine bekommen.

    Reines Glück. 11 MB auf dem Stack sind nicht unbedingt stabilitätsfördernd.

    Der Code von Plantschkuh! ist übrigens bis auf ein paar kosmetische Kleinigkeiten sauber.

    .

    Zitat von hal

    Also für mich hat HÄLT offensichtlich JA gesagt in dem Fall. Ich vermute, das sollte "= NEIN" heißen, net "= JA". Dann ergibt alles einen Sinn.

    Hast recht. Ist gefixt.

    .

    Zitat von SweetnSour

    Meine Frage bezieht sich auf das "Halteproblem" was euch sicher allen ein Begriff ist. Kann mir das jemand so erklären, dass auch Informatikunbegabte es verstehen?

    Ich kann's versuchen...

    Frage: Kann man eine Funktion HÄLT(F,A) formulieren, die zuverlässig ermittelt, ob die Funktion F bei einem Aufruf mit dem Argument A terminiert?

    Antwort: Nein.

    Beweis: Durch Widerspruch. Wir nehmen an, dass die gefragte Funktion HÄLT tatsächlich existiert. Wir basteln uns davon ausgehend eine Funktion AUTSCH(A), die ungefähr wie folgt aussieht:

    AUTSCH(A):
    falls HÄLT(A,A) = NEIN: retourniere JA;
    sonst: Endlosschleife;

    Wir überlegen uns nun, ob AUTSCH(AUTSCH) terminiert:

    Möglichkeit 1: AUTSCH(AUTSCH) terminiert. Dann muss offensichtlich HÄLT(AUTSCH,AUTSCH) die Antwort NEIN geliefert haben. HÄLT(AUTSCH,AUTSCH) tut aber laut Voraussetzung nichts anderes, als zu ermitteln, ob AUTSCH(AUTSCH) hält. AUTSCH(AUTSCH) hätte also eigentlich nicht terminieren dürfen. Widerspruch.

    Möglichkeit 2: AUTSCH(AUTSCH) terminiert nicht. Da der Algorithmus HÄLT aber laut Voraussetzung immer terminiert, kann das aber nur daran liegen, dass HÄLT(AUTSCH,AUTSCH) die Antwort JA geliefert hat. HÄLT(AUTSCH,AUTSCH) tut aber laut Voraussetzung nichts anderes, als zu ermitteln, ob AUTSCH(AUTSCH) hält. AUTSCH(AUTSCH) müsste also eigentlich terminiert haben. Widerspruch.

    Da die Annahme, HÄLT würde existieren, unmittelbar ins Paradoxe führt, kann es HÄLT offenbar nicht geben.

    .

    Zitat von hal

    Alleine dieses Systemkonzept ist ja schon ein Wahnsinn :)

    Jo, absolut.


    Zitat

    Passiert der SMS-Versand seriell, oder gibts ab und zu ein bisschen Chaos in diesem logfile?

    Da war IIRC so eine Art Vorserialisierung vorgeschaltet. Das Logfile hat auch immer sauber ausgesehen. War übrigens zeitweise sehr unterhaltsame Lektüre. Har har har.


    Zitat

    Wär ein daemon á la syslog vom Programmierer zu viel verlangt gewesen?

    Sagen wir so: du liegst sicher richtig mit der Implikation, dass die printf-Panne nicht die einzige Fehlleistung in diesem Projekt gewesen sein dürfte. ;) Aber sie war eben die ausschlaggebende Fehlleistung, die unmittelbar viel Geld gekostet und den Kollegen den Job gekostet hat.

    Wird wohl damit zu tun gehabt haben, dass man sich in Sachen Überprüfung von Rückgabewerten - im Gegensatz zu architektonischen Fragen - nicht auf "Geschmackssache" rausreden kann. Aber ich versteh ja genau gar nichts von HRM; vielleicht war das alles damals auch ganz anders.


    Zitat

    Ah ja, bitte keine Beleidigungen Georg, das ist nicht notwendig.

    OK, kein M-Wort in diesem Post.

    .

    Zitat von marX

    na ja...ich programmiere nun schon seit ca. 6 jahren c/c++ und hatte noch nie das bedürfniss (durch einen void-cast) zu zeigen, dass ich einen rückgabewert absichtlich ignoriere

    Das macht nichts, du brauchst dich nicht dafür zu genieren - es ist nie zu spät, etwas doch noch ordentlich lernen zu wollen.

    OK, bösartige Scherze beiseite: Es ist schön für dich, dass deine bisherigen Programme in so barmherzigen Umgebungen gelaufen sind, und dir deine Nachlässigkeit bisher nicht auf den Kopf gefallen ist. In der Real World [tm] wirst du dir mit der Attitüde freilich früher oder später die Nase blutig hauen. Fallbeispiel aus einer bekannten österreichischen Telekommunikationsfirma, anno ca. 2000:

    • Ein SMS-Zustellprogramm gibt Statusreports auf stdout aus.
    • Der stdout des Zustellprogrammes wird - für die Abrechnung - allerdings in eine Datei auf der Festplatte einer Sun redirected.
    • Die Festplatte ist voll.
    • Da der verantwortliche Programmierer sich zu gut dazu war, den Rückgabewert des fraglichen printf zu testen, gibt es keine Fehlermeldungen, sondern eine halbe Nacht an SMS-Traffic verschwindet kommentarlos und unabrechenbar im Nirwana. (Unabrechenbar, weil die verlorenen Daten zwar rekonstruierbar gewesen wären, diese Rekonstruktion aber mehr gekostet als nachher wieder eingebracht hätte.)
    • Der Projektleiter ist blöderweise Informatiker, hat also Sysprog gemacht und weiss daher, dass das Ignorieren des Rückgabewerts von printf eine nicht nur provokante, sondern dank Sysprog auch unentschuldbare Verantwortungslosigkeit ist. Der Programmierer fliegt raus.


    Zitat

    da würde ich es sogar gerne zu einer diskussion mit dem prof. kommen lassen :)

    Schick mir aber rechtzeitig ein Mail, damit ich mir vorher noch Cola und Popcorn holen kann.

    .

    Zitat von marX

    an den bösen wolf:
    warum einfach wenns auch kompliziert geht ?!!

    Ich bilde mir ein, dass meine Lösung halt ein bisschen allgemeiner und portabler ist. :)

    Abgesehen davon funktioniert deine Lösung einfach nicht. Hint: der erste Fehler ist in Zeile 1. Und für das "(val>>--shift)&1" gehörst du offen gesagt grün und blau gedroschen, sofern das nicht ironisch gemeint war.

    .

    Zitat von hal

    Wie ich in Übersetzerbau vor kurzem gelernt habe ist ein Compiler nur ein Übersetzer von einer Sprache in die andere, und damit ist er eigentlich nur ein besseres sed, grep oder X11. Nur von RMS ist mir bekannt, dass er dieses für Teil einer "Plattform" hält.

    Cool, wieder was gelernt. War bisher der Ansicht, "Plattform" wäre nicht wirklich strikt definiert und könnte ohne Weiteres auch den Compiler und insbesondere seine Runtimes mitumfassen.


    Zitat

    Wie sinnvoll ist das in diesem Fall? Wenn der output nicht funktioniert ist es doch sch***egal, tut das Programm halt nix.

    Wäre meiner Meinung nach halt cool für den Anwender, zu wissen, warum es nix tut, besonders bei Vorliegen irgendwelcher Redirects. Ausserdem bekomme ich einfach nicht gerne die Schuld für Seltsamkeiten in die Schuhe geschoben, für die ich nichts kann. ;)

    .

    Zitat von hal

    Nicht unbedingt. Eigentlich ist es Compilerabhängig.

    Und der Compiler ist kein Teil der Plattform? ;)


    Zitat

    Er kann nichts dafür, das ist in uns in Sysprog so eingetrichtert worden. Damit soll ausgedrückt werden, dass der Programmierer weiß, dass die Funktion einen Wert zurückliefert und er explizit drauf furzt.

    Alles klar... nur sollte man halt strenggenommen nicht drauf furzen. Rückgabewerte, mit genau zwei Ausnahmen, gehören überprüft. Aber gut, ihr vom Mediaclan überprüft ja nicht einmal den von malloc. :)

    .

    Zitat von laborg

    Was für Vorteile bringt die "normale" Date(ei)enverarbeitung?

    Sie ist einfacher, portabler, wird auch von den Minderbegabteren unter den Maintainance-Programmierern verstanden und funktioniert auch ohne Installation eines Datenbanksystems. Und so als Draufgabe ist sie vermutlich auch noch schneller.

    Solange du die Mächtigkeit von SQL nicht wirklich brauchst, lass die Finger davon. Hint: wenn du nicht beweisen kannst, dass du es wirklich brauchst, brauchst du es nicht wirklich.

    Das klingt vielleicht puristisch, aber ich habe schon einige Webprojekte gesehen, die genau daran gescheitert sind, dass ein unerfahrener (überbegeisterter, technikverliebter, verspielter) Programmierer (Marketroid, Management-Idiot) geglaubt hat, dass SQL (Java, JavaScript, Flash, ASP, Servlets) "einfach dazugehören".

    .

    Zitat von buechsengustel

    ein unsigned long ist ja 32 bit.

    Nicht unbedingt. Das ist plattformabhängig.


    Zitat

    also zb unisgned long x = 12;
    ist als 00000000000000000000000000001100 gespeichert. (ich hoff das ist soweit richtig?)

    Auch nicht unbedingt. C trifft IIRC keine Annahmen über die interne Repräsentation seiner Datentypen, insbesondere zum Beispiel hat ein NULL-Pointer auf manchen Architekturen nicht "0....0" als Bitmuster, obwohl das Makro NULL tatsächlich einfach zur Integralzahl "0" expandiert. Es liegt in der Verantwortung des Compilers, ohne dein Wissen die notwendigen typabhängigen Umrechnungen zu veranlassen.


    Zitat

    wie krieg ich jetzt mein programm dazu, mir genau das, die 32 bit, auszugeben?

    Hab dir auf die schnelle was gebastelt:

    Viel einfacher dürfte es tatsächlich nicht gehen.


    Zitat

    ich mein mit
    (void) printf ("x ist: %lu", x);
    krieg ich die zahl im zehnersystem ausgegeben, also 12
    mit
    (void) printf ("x ist: %lo", x);
    als oktalzahl, also 14

    Ja. Abgesehen davon, dass es Pfusch ist, printf nach (void) zu casten, und davon, dass du den Zeilenvorschub vergessen hast.


    Zitat

    jetzt gibt's denn da wirklich nichts, womit ich die zahl im binärsystem kriege? und am liebsten eben die ganzen 32 bit, so wie das ding gespeichert ist.

    Nicht mit Hilfe von printf und seinen Geschwistern - ausser, deine Entwicklungsumgebung/dein Runtime unterstützt irgendeine nicht standardkonforme Erweiterung. Wenn du eine solche verwenden würdest, hättest du aber auch keine Portabilität mehr, also versuch's besser gar nicht erst.

    .

    Zitat von izemann

    Lohnt es sich bei dieser Datenmenge eine Datenbank anzulegen?

    Ich verstehe dich wie folgt:

    • Mit "Datenbank" meinst du "relationale Datenbank" bzw. "SQL-Datenbank".
    • Deine Schreibzugriffe bestehen vor allem in Anhängen von Hits an eine oder mehrere flache, chronologisch geordnete Liste von Hits.
    • Deine Lesezugriffe erfolgen hauptsächlich zum Anzeigen von irgendwelchen Statistiken auf einer Webseite.
    • Deine Tabellentypen, graphisch dargestellt, bilden einen einfachen Baum mit nur zwei oder drei Ebenen.

    Wenn ich richtig liege, solltest du wahrscheinlich einfache Dateien verwenden, also von SQL die Finger lassen.

    Ich bin im Lauf der Zeit zu der Ansicht gelangt, dass ca. neunzig Prozent der eingesetzten SQL-Datenbanken überflüssige Spielereien sind und dass es sich mit SQL-Datenbanken so verhält wie mit schmutzigen Optimiertricks und allen anderen Arten künstlicher Komplikation: ein guter Programmierer verwendet sie nur, wenn er klar beweisen kann, dass sie notwendig sind.

    .