Archiv verlassen und diese Seite im Standarddesign anzeigen : while(true) {write();} - Der Programmierer-Spamthread #1
Kann doch nicht angehen, dass wir hier keinen OffTopic-Thread haben. Das könnte erklären, warum hier so wenig los ist.
Die Regeln:
Eigentlich ganz simpel:
Nicht gegen die Netikette verstoßen
Auch wenn das ein OT-Thread ist, heißt das nicht, dass man hier 100 Einzeiler posten sollte
Sig darf gerne an bleiben
this.next()
_______________________________________________
Jetzt brauch ich nur noch ein erstes Thema :p
Ahja, C++0x. Die neuen Features sehen wirklich nützlich aus, aber ich fürchte, dass viele davon ziemlich der Übersicht schaden. Beispielsweise decltype und auto. Diese Notation für den nachgestellten Return Type ist auch irgendwie arg gewöhnungsbedürftig. Trotzdem freu ich mich drauf und hoffe, dass das bald von möglichst vielen Compilern unterstützt wird und sich auch als Standard gegenüber dem klassischen C++ durchsetzt. Vielleicht ist das dann auch mal ein Ansatz für Microsoft, bisher veräumte Standards nachzuholen. Beispielsweise einige Elemente von C99.
Ich denke nicht, dass C++0x der Sprache in irgendeiner Weise schaden wird, sie ist von Natur aus schon unübersichtlich und erfordert viel Einarbeitungszeit.
Für die Profis ist C++0x ein nützlicher Fortschritt, für die Anfänger ein weiteres Hindernis.
Ich persönlich werde C++ sowieso in Zukunft meiden, wenn möglich und wechsle zu D, das übrigens alles hat, was C++ (inklusive C++0x) hat und mehr.
Ja, D ist toll, nur leider wird es wohl noch dauern, bis man für alle Plattformen einen funktionierenden D Compiler per Paketmanager kriegt. Das ist eigentlich momentan der Hauptgrund, warum ich mich noch nicht näher mit D befasst hab. Außerdem soll die Standardbibliothek nicht sooo toll sein.
Gerade auf decltype und auto freue ich mich (neben den lambdafunktionen) am meissten. Wer auch nur rudimentaer mit Templates arbeitet, wird decltype und auto zu lieben lernen, denn ohne das muss man manchmal so derbe seltsame Konstruktionen betreiben, dass man Traenen in den Augen hat.
Und Lambda-Funktionen haben C++ schon LANGE gefehlt, und die Variante ueber Boost ist auch gewoehnungsbeduerftig.
Um ehrlich zu sein, erwarte ich C++0x seit dem ich das erste Mal davon gelesen habe sehnsuechtig. (!!!)
Allerdings rechne ich ehr, dass aus C++0x ehr sowas wie C++Ax oder C++Fx wird. Lange Zeit haben sie ja sonst nicht mehr. Und wenn man bedenkt, dass Stroustrup auto seit 1982 durchdruecken will, sieht man, wie arschlangsam das Standardisierungskommitee ist. C++ ist zur Zeit leider eine der am wenigsten weiterentwickelten Sprache ueberhaupt, was ich sehr schade finde, denn immerhin war sie ja mal DIE Programmiersprache #1. Langsam hab ich aber das Gefuehl, sie rutscht wie Forth, Fortran und Pascal ziehmlich ab, und verschwindet irgendwann in dem Nieschensegment, wie COBOL.
@Kyuu ... kannst du mal etwas ausfuehrlicher zu D werden ? Vielleicht in einem separaten Thread. Viel hab ich noch nicht von D gehoehrt, und du bist iirc der erste, den ich kenne, der damit ernsthaft arbeitet. Und ein persoenlicher Erfahrungsbericht ist 1000x besser und unterhaltsamer, als sich z.B. die Wikipediaseite dazu durchzulesen.
@DFYX ... nun ja .. die Standardbibliothek von C++ ist auch nicht soo toll (wenn man boost nicht dazu zaehlt als defaktostandard). Ich denke da nur an das Fehlen einfacher regexp- und Stringroutinen, wie z.B. in PHP seit Jahren ueblich.
@DFYX ... nun ja .. die Standardbibliothek von C++ ist auch nicht soo toll (wenn man boost nicht dazu zaehlt als defaktostandard). Ich denke da nur an das Fehlen einfacher regexp- und Stringroutinen, wie z.B. in PHP seit Jahren ueblich.
Mit dem Unterschied, dass die D Standardbibliothek noch keine 2 Jahre alt ist und Digital Mars zu niemandem abwärtskompatibel sein musste. Deshalb find ichs schade, dass sie wohl einige Chancen verpasst haben. Details weiß ich aber nicht, hab mich mit D nur mal kurz beschäftigt und das am Rande erfahren. Iirc hat da sogar schon jemand eine alternative Standardbibliothek entwickelt und jetzt darf sich der Entwickler mit inkompatiblen Standards quälen. Allerdings hab ich das wie gesagt nur gehört. Kyuu weiß da sicher mehr.
@Ineluki: Klar. Habe zwar schon eine Weile nichts in D gemacht, da ich im Moment mit einem C++-Projekt beschäftigt bin, aber ich werde es trotzdem gerne tun und der ein oder andere kann mich ja ergänzen/berichtigen.
@DFYX: Mit Standardbibliothek meinst du wahrscheinlich Phobos, die in der Tat relativ mager ist. Glücklicherweise gibt es ja Tango (http://www.dsource.org/projects/tango), die ich fast schon auch als Standardbibliothek bezeichnen würde, vor allem da IIRC darauf hingearbeitet wird, dass beide Seite an Seite funktionieren und eventuell irgendwann in der Zukunft fusionieren können, wobei ich mir mit dem Fusionieren nicht sicher bin.
Phobos hat doch nicht wirklich etwas, was Tango brauchen koennte .... sonst finde ich D recht nett, allerdings hat mich Vala D ausgespannt, da ich eher im G-Universum heimisch bin. Tango hat zwar grosse Vortschritte gemacht (wobei man dazu sagen muss, dass ich bereits Tango verwendet habe, bevor Tango fuer die Massen zugaenglich war), aber gio und Co ersetzt es schlichtweg noch lange nicht.
Ja, D ist toll, nur leider wird es wohl noch dauern, bis man für alle Plattformen einen funktionierenden D Compiler per Paketmanager kriegt. Das ist eigentlich momentan der Hauptgrund, warum ich mich noch nicht näher mit D befasst hab. Außerdem soll die Standardbibliothek nicht sooo toll sein.
Das liegt daran, dass sich der gdc-Entwickler weigert, sein Copyright zu uebertragen. Finde ich eigentlich auch richtig so. Dadurch wandert gdc nicht in den gcc Hauptzweig.
Und was ist der Vorteil, wenn gdc nicht in den gcc Hauptzweig wandert ?
Und was ist der Vorteil, wenn gdc nicht in den gcc Hauptzweig wandert ?
Der Entwickler muss nicht sein Copyright nicht ueberschreiben.
Man kann sein Copyright ohnehin nicht abgeben. Nur Nutzungsrechte. Was genau wird denn gefordert, um in den gcc Hauptzweig zu kommen?
Man kann sein Copyright ohnehin nicht abgeben. Nur Nutzungsrechte. Was genau wird denn gefordert, um in den gcc Hauptzweig zu kommen?
Das sieht das angloamerikanisches Rechtssystem aber nicht so. Du verwechselst da wohl gerade das Urheberrecht, mit dem Copyright.
Ach ja... ich weiß schon, warum ich Urheberrechtsfragen nicht wirklich mag. Jedes Land hat seine eigene Regelung und kein Mensch überblickt alle.
Du hast btw. meine Frage nicht beantwortet.
nudelsalat
23.09.2009, 18:29
Langsam hab ich aber das Gefuehl, sie rutscht wie Forth, Fortran und Pascal ziehmlich ab, und verschwindet irgendwann in dem Nieschensegment, wie COBOL.
Was bei COBOL aber auch nicht wirklich schade ist. Ich hab in der Arbeit sehr viel mit Zig Tausend Zeilen COBOL Code verschiedenster Firmen zu tun und gerademal eine einzige davon hat es geschafft, den Code, zumindest in ihren kleineren Programmen, auf eine einigermaßen verständliche Weise zu Strukturieren. Das einzige das mich in positiver Art und weise fasziniert hat war wie die Records definiert werden. Ich wünschte man könnte in anderen Programmiersprachen dermaßen einfach und übersichtlich Baumstrukturen anlegen.
Gibts für COBOL eigentlich auch noch andere GUI Systeme als diese 3270 Terminals?
Ich kenn mich mit COBOL nicht sonderlich aus. Ist fuer mich nur ein paradebeispiel einer untergegangenen Nieschenprogrammiersprache. Was ist denn am COBOL-Baumkonzept so interessant ?
nudelsalat
23.09.2009, 18:42
Beispiel einer Recorddefinition. Code ist von http://www.3480-3590-data-conversion.com/article-reading-cobol-layouts-1.html
01 MAILING-RECORD.
05 COMPANY-NAME PIC X(30).
05 CONTACTS.
10 PRESIDENT.
15 LAST-NAME PIC X(15).
15 FIRST-NAME PIC X(8).
10 VP-MARKETING.
15 LAST-NAME PIC X(15).
15 FIRST-NAME PIC X(8).
10 ALTERNATE-CONTACT.
15 TITLE PIC X(10).
15 LAST-NAME PIC X(15).
15 FIRST-NAME PIC X(8).
05 ADDRESS PIC X(15).
05 CITY PIC X(15).
05 STATE PIC XX.
05 ZIP PIC 9(5).
Die erste Zahl gibt den Level des Records an, gefolgt vom Recordnamen. PIC **** ist der Datentyp und die Länge. Im Grunde hast du damit schon deinen Baum. Du kannst damit nicht so viel machen wie in anderen Programmiersprachen aber rein vom Prinzip her ist die Definition des Baumes sehr einfach und übersichtlich.
Wenn du jetzt den Record PRESIDENT hernimmst, dann hast du eine Variable die 23 Zeichen(15+8) lang ist und aus dem Last-Name und dem First-Name besteht. Du kannst entweder den String "MUELLER________MANN____" direkt mit einem Move in President schreiben und dann mit Last-Name oder First-Name auf die entsprechenden Stellen zugreifen, oder du schreibst beides extra in ihre jeweiligen Records hinein. Aber das war dann auch schon die ganze Magie. Mit Cobol kann man nicht die ganze genialität dieser Syntax geniesen.
Das ist doch mit C(++) Unions doch praktisch genau so.
Ich sehe da im Moment keinen wirklichen Unterschied. O_o
nudelsalat
23.09.2009, 18:50
unions sind mir neu. Wie würde das mit denen aussehen?
Ich glaube kaum, dass da unions geeignet wären. Würde das nicht eher Unter-Strukturen/Klassen entsprechen?
Beispiel einer union:
union {
int i;
char bytes[4];
}
ï und bytes verwenden den selben Speicher,
union u;
u.i = 5;
würde auch u.bytes[0..3] verändern. (in etwa u.bytes[0] = 0, u.bytes[1] = 0, u.bytes[2] = 0, u.bytes[3] = 5)
nudelsalat
23.09.2009, 19:13
Achso, das mit dem Ansprechen der Variablen war eher als Beispiel was man dann in COBOL damit anstellen kann gedacht. Was ich hauptsächlich vermisse ist die Möglichkeit, durch irgendwelche Node Objekte auf ähnlich übersichtliche Art und Weise einen Baum zu erstellen.
Das ähnlichste was mir für Java einfallen würde wäre das hier:
public class Node(String name, Node... children);
new Node("MAILING-RECORD",
new Node("COMPANY-NAME",
new Node("CONTACTS"),
new Node("PRESIDENT",
new Node("LAST-NAME"),
new Node("FIRST-NAME")
),
new Node("VP-MARKETING"
new Node("LAST-NAME"),
new Node("FIRST-NAME")
)
)
)
);
Aber gut lesbar ist das nicht und wenn man nen Formatter vorgesetzt bekommt stehen die Chancen gut, dass der die eigene Formattierung über den Haufen wirft.
Ich kenn mich mit COBOL nicht sonderlich aus. Ist fuer mich nur ein paradebeispiel einer untergegangenen Nieschenprogrammiersprache.
Untergegangen? Nische? Dir scheint entgangen zu sein, dass heute noch 200 Milliarden Zeilen Cobol Code in Action sind. In Großbritannien hat laut einer Studie ein Bürger am Tag typischerweise 10 mal mit Cobol zu tun... 90% der Finanztransaktionen laufen in Cobol.
Cobol ist vielleicht nicht mehr cool, aber von untergegangen kann kaum eine Rede sein - und selbst über die Nische kann man streiten :-)
Ach ja... ich weiß schon, warum ich Urheberrechtsfragen nicht wirklich mag. Jedes Land hat seine eigene Regelung und kein Mensch überblickt alle.
Du hast btw. meine Frage nicht beantwortet.
Neben der Copyright-Uebertragung und der passenden Lizenz muss man eigentlich nur noch etwas brauchbares entwickelt haben, was ich weiss. Da ich gcc aber in der Regel nur noch als Backend verwende, bin ich auch nicht so interessiert, als das ich mehr weiss, als was man so nebenbei erfaehrt. Wenn du dir also sicher sein moechtest, schlage ich dir lieber vor selber nachzulesen.
Wenn Cobols Nische der Buehne des Kolloseums entspricht, dann ist Java im Vergleich wahrscheinlich so gross, wie das Eingangstor ...
nudelsalat
23.09.2009, 19:33
Es sind einfach teilweise Jahrzehntelang gewachsene Cobolprojekte im Umlauf die die Firmen brauchen und nicht mal eben in eine andere Sprache umgeschrieben werden können. Die müssen halt weiterhin mit Cobol Code erweitert werden, warum auch nicht, aber erste wahl bei neuen Projekten wird COBOL wohl kaum noch sein.
Ich glaube, du hasst meinen Hinweis nicht verstanden.
struct MailingRecord{
std::string CompanyName;
struct {
struct {
std::string LastName;
std::string FirstName;
} President, VPMarketing; // muhaha
struct {
std::string Title;
std::string LastName;
std::string FirstName;
} AlternateContact;
} Contacts;
std::string Address;
std::string City;
char State[2];
int Zip;
};
MailingRecord Record1;
Record1.Contacts.President.FirstName = "Klaus";
Bin mir jetzt nicht mal ganz sicher, ob das mit 'struct' so geht, aber mit 'class' würde es bestimmt gehen.
Bin mir jetzt nicht mal ganz sicher, ob das mit 'struct' so geht, aber mit 'class' würde es bestimmt gehen.
Soweit ich mich erinnere, sind struct und class in der Zwischenzeit synonym, mit dem Unterschied, dass struct Member ohne weitere Angabe public sind und class Member private. Structs können in C++ genau so Memberfunktionen haben und vererbt werden, wie Klassen.
@Drakes .. ja, so hab ich das gemeint, nur dass man nen struct aus 2 char-arrays und ein groesseres Chararray vereinigen koennte, damit man den String Praesident und den struct Vorname Nachname gleichzeitig fuellen kann.
@COBOL
Ich weiss, dass COBOL noch viel in gebrauch ist. Ist in etwa das selbe mit FORTRAN in den Naturwissenschaften. Allerdings werden mit COBOL praktisch keine neuen Codes geschrieben, sofern nicht direkte Kompatibilitaet zwingend erforderlich ist. Meistens wird nur in den alten Codes editiert oder angestueckelt. Ergo kann man nicht davon sprechen, dass COBOL eine aktuelle Programmiersprache waere. Fast niemand verwendet COBOL, wenn er nicht muss.
@Drakes .. ja, so hab ich das gemeint, nur dass man nen struct aus 2 char-arrays und ein groesseres Chararray vereinigen koennte, damit man den String Praesident und den struct Vorname Nachname gleichzeitig fuellen kann.
Ich bin mir grade nicht sicher, ob das funktioniert. Wie sollte das aussehen?
union
{
char[32] name;
struct
{
char[16] vorname;
char[16] nachname;
} name_struct;
};
Dann könnte man die einzelnen Namensbestandteile ja nicht ohne Umweg über name_struct ansprechen.
Edit: zumal Strings in C nullterminiert sind...
Genau so meinte ich das.
Was meinst du damit, dass man die Namensbestandteile nicht separat ueber name_struct ansprechen koennte ? Ggf braeuchte man das Struct auch nicht sondern koennte alle drei Eintraege auch direkt ins Union schreiben.
Natuerlich ist das mit der Nullterminierung unschoen. Andererseits ist die nicht Pflicht. Gerade bei Chararrays mit konstanter Groesse, wie hier, wird die Nullterminierung oefters weggelassen. Ich sagte ja nicht, dass es schoen ist, ich sagte, es ist relativ einfach machbar.
Das Problem ist halt, dass die meisten Funktionen nullterminierte Strings haben wollen. Das heißt, du müsstest jedes Mal vor der Verwendung konvertieren.
Das ist mir bewusst, auch wenn gerade aeltere C Funktionen oftmals noch einen Paramerter der maximalen Buffergroesse verwenden. Aber lassen wir das. Es ist moeglich, das so wie in COBOL zu machen, und die definition von Strukturen ist auch nicht soo viel schwieriger in C. Und in C++ ist es noch eleganter zu loesen, wenn man einfach in die Praesident-Structur einen Castingoperator nach const Sting einfuegt, der einfach Nachname + ", " + Vorname zurueck gibt.
Natuerlich ist das mit der Nullterminierung unschoen. Andererseits ist die nicht Pflicht. Gerade bei Chararrays mit konstanter Groesse, wie hier, wird die Nullterminierung oefters weggelassen. Ich sagte ja nicht, dass es schoen ist, ich sagte, es ist relativ einfach machbar.
Wo ist das Abseits von Buffern ueblich? Ich lese /extrem/ viel C-Code und habe so etwas noch nie in meinem Leben gesehen, wenn man nicht gerade irgendwo etwas einliest und die genaue Groesse mit gereicht bekommt. Und da wird der Buffer, insofern Text, auch gleich in einen String zusammen geklebt ...
C schreibt dir nicht vor, dass deine Stringdefinition Nullbasiert sein muss. Dass die meisten Funktionen das benutzen ist sinnvoll, aber du koenntest trotzdem auf Basis der Pufferfunktionen dein eigenes Stringformat verwenden. Nur sehr sinnvoll ist es nicht. *schulterzuck*
C schreibt dir nicht vor, dass deine Stringdefinition Nullbasiert sein muss. Dass die meisten Funktionen das benutzen ist sinnvoll, aber du koenntest trotzdem auf Basis der Pufferfunktionen dein eigenes Stringformat verwenden. Nur sehr sinnvoll ist es nicht. *schulterzuck*
Das kann ich aber auch in anderen Sprachen machen, wenn mir fad ist. Dein Beitrag beantwortet nicht wirklich meine Frage.
Ausserdem sehe ich, das 0byte am Ende eines mit " eingeschlossenen Literals bereits als Stringdefinition.
Ich hab auch nie behauptet, dass man das in anderen Sprachen nicht koennte. Es ging doch nur darum, ein COBOL-Typisches Konstrukt in einer anderen Sprache umzusetzen. Ich gebe ja zu, dass sich sowas in COBOL leichter machen laesst. Aber gerade durch Castingoperatorueberladungen in C++ halte ich das nicht besonders schwierig in C++ umzusetzen. Und dass es, wenn auch umstaendlich, auch mit C geht, hab ich demonstriert.
Ich schage vor, wir gehen zum naechsten Thema, das bringt nichts.
Ich möchte nochmal einen älteren Gedankengang aufgreifen. Auch wenn ich persönlich nie freiwillig COBOL anrühren würde, hat es doch irgendwie was nostalgisches. Ich meine, es ist eine der Sprachen, die am stärksten zur Entwicklung moderner Programmiersprachen beigetragen haben. Neben den Vorgängern A-0 und FLOW-MATIC.
Totally unrelated fact: ich halte Grace Hopper (die unter anderem A-0 und FLOW-MATIC entwickelt hat) für eine äußerst weise Frau. Viele ihrer Lebensweisheiten sollten sich meiner Meinung nach deutlich mehr Leute zu Herzen nehmen.
drunken monkey
28.09.2009, 02:21
Totally unrelated fact: ich halte Grace Hopper (die unter anderem A-0 und FLOW-MATIC entwickelt hat) für eine äußerst weise Frau. Viele ihrer Lebensweisheiten sollten sich meiner Meinung nach deutlich mehr Leute zu Herzen nehmen.
Welche wären das denn zum Beispiel – "Gute Sprachen oder Namen zu erfinden sind zwei komplett verschiedene Dinge"? ^^"
(Frage ernst gemeint. ;))
The most dangerous phrase in the language is, "We've always done it this way."
Einer meiner Lieblinge, wenn auch in dem Wortlaut nicht als authentisch bestätigt. Mehr gibts bei Wikiquote (http://en.wikiquote.org/wiki/Grace_Hopper)
Programmierer sind oft überkorrekt, wenn es um das Schreiben von Code geht und sind besorgt um Lesbarkeit und Qualität. Aber was tun, wenn der Zeitplan drängt und es nur noch um Schadensbegrenzung geht?
Dirty Coding Tricks (http://www.gamasutra.com/view/feature/4111/dirty_coding_tricks.php) erzählt aus dem Alltag professioneller Spieleprogrammierer und wie ihnen in manchen Situationen alle Mittel recht waren um das Produkt endlich aus dem Haus zu haben.
Ich hoffe es wird euch genauso unterhalten, wie es bei mir der Fall war. :)
Back on Wing Commander 1 we were getting an exception from our EMM386 memory manager when we exited the game. We'd clear the screen and a single line would print out, something like "EMM386 Memory manager error. Blah blah blah." We had to ship ASAP. So I hex edited the error in the memory manager itself to read "Thank you for playing Wing Commander."
Oh ja, ein sehr vertrautes Gefühl. In dem Code von dem DS Spiel, an dem ich gearbeitet hab, gibts so Sachen auch. Werd bei Gelegenheit mal ein paar schöne raussuchen.
Ja was is los Leute, haben wir uns nichts mehr zu sagen?
Ich arbeite momentan an einer kleinen Netzwerkbibliothek, die einen Viewer für CAD-Modelle mit einem Headtracking Server verbinden soll, aber irgendwie komm ich nicht voran. Obwohl das eigentlich richtig Spaß macht.
Ich bin wohl heute abend und morgen damit beschäftigt, mir mit Python irgendwie Objektorientierte Programmierung anzueignen. Theoretisch hab ichs verstanden, praktisch aber habe ich schonmal den halben Code für ein Projekt geschrieben, bis ich gemerkt habe, dass eine wichtige Klasse vollkommen zum Wegwerfen ist^^.
Wofuer brauchst du das denn ? Und was ist das Problem ?
Naja, mir fehlt einfach "nur" praktische Erfahrung im Umgang mit OOP... das wars schon. Nachdem ich die meiste Zeit beim Coden mit Prozeduraler Programmierung verbracht habe, fehlt mir jetzt (noch) ein Stück weit das "Denken" in objektorientierten Strukturen... Ich weiß nicht wie ichs genauer beschreiben soll^^. Aber ich schätze mal, das wird sich nach einigen kleineren Projekten schnell legen ;) . Momentan steht das Projekt selbst noch nicht fest (programmiere just4fun), bei konkreten Problemen werde ich mich schon melden :) .
Ich bin grad dabei ein Hello World-Programm in Java __VOLLständig__ zu hintergreifen. Grundsätzlich habe ich das verstanden (zum Glück lese ich gerne), allerdings will ich auch verstehen was ich da überhaupt schreibe und was es im Compoler tut.
drunken monkey
10.10.2009, 23:57
Ich bin grad dabei ein Hello World-Programm in Java __VOLLständig__ zu hintergreifen. Grundsätzlich habe ich das verstanden (zum Glück lese ich gerne), allerdings will ich auch verstehen was ich da überhaupt schreibe und was es im Compoler tut.
Was genau meinst du damit, Java Bytecode, oder einfach nur, wie die Klassen/Objekte aufgelöst werden?
Oder wie in der VM der Zugriff durchgeführt wird? (OK, Letzteres wäre nichts mehr vom Compiler…)
Java Bytecode würde mich nämlich auch interessieren, gibt ja schon viel mehr damit als "bloß" Java. Habe aber bisher aus Zeit- und Anreizmangel bloß Grundkenntnisse, größtenteils aus dem Eclipse-Disassembler.
Genau besagter byte-code intressiert mich. Obwohl mich das was danach folgt auch intressiert, also der Interpreter (JVM). Mit Eclipse arbeiten wir hier noch nicht, nur mit der JDK. Eclipse habe ich aber dennoch hier schon rum liegen, sollte es mal demnächst installen^^
Intressiert mich halt, was public static void main(string[]) nun für mich heißt.
Public ist ne Klasse, das weiß ich soweit , aber was heißt nun static void main? (string kann ich mir denken)
public bedeutet, dass die Funktion von außen aufgerufen werden kann - entgegen private oder protected
static heißt, dass das eine Klassenmethode ist, für die also kein Objekt gebraucht wird
void heißt, dass die Funktion nichts zurückgibt
main ist wie schon die wörtliche Übersetzung sagt, die Hauptmethode, die aufgerufen wird, wenn das Programm ausgeführt wird.
Genau besagter byte-code intressiert mich.
Sicher ? Bytecode ist das, was der Java-Compiler produziert.
Und Eclipse ist einfach nur eine Entwicklungsumgebung, mehr oder weniger ein aufgemotzter Texteditor.
drunken monkey
11.10.2009, 10:17
Klingt eher so, als würdest du noch die absoluten Java-Grundlagen lernen. ^^" Bytecode ist dann doch was deutlich mehr in die Tiefe gehendes – bzw. eigentlich was komplett anderes, was man beim normalen Java-Programmieren überhaupt nicht braucht.
Ahja, und zur Sicherheit: der Ausdruck lautet public static void main(S[U]tring[] [U]args). "String" ist ein Klassenname und muss daher groß geschrieben werden, um vom Compiler erkannt zu werden. Und einen Variablennamen braucht das Argument der Methode auch – "args" ist hier üblich, kann aber durch jeden anderen gültigen Variablennamen ersetzt werden.
(Der Teil in den Klammern bedeutet dann eben, dass die Methode ein einzelnes Argument erwartet, das den Typ "Array von Strings" (String[]) hat und dem der Name "args" zugewiesen wird. Dort landen dann zusätzliche Argumente – falls du das Programm z.B. mit java Test foo startest, und in der Klasse Test die main-Methode ist, ist dann args[0] gleich "foo".)
public bedeutet, dass die Funktion von außen aufgerufen werden kann - entgegen private oder protected
static heißt, dass das eine Klassenmethode ist, für die also kein Objekt gebraucht wird
void heißt, dass die Funktion nichts zurückgibt
main ist wie schon die wörtliche Übersetzung sagt, die Hauptmethode, die aufgerufen wird, wenn das Programm ausgeführt wird.
Ah vielen Dank!
Sicher ? Bytecode ist das, was der Java-Compiler produziert.
Jupp, soweit bin ich auch schon.
Und Eclipse ist einfach nur eine Entwicklungsumgebung, mehr oder weniger ein aufgemotzter Texteditor.
Jo, das weiß ich. Deswegen sagte ich ja, das wir vorerst nicht damit arbeiten.
Wobei ich sagen muss, das mir die Oberfläche etwas "zu" aufgemotzt ist O_°
Klingt eher so, als würdest du noch die absoluten Java-Grundlagen lernen. ^^" Bytecode ist dann doch was deutlich mehr in die Tiefe gehendes – bzw. eigentlich was komplett anderes, was man beim normalen Java-Programmieren überhaupt nicht braucht.
Genau so ist es. Mit Java habe ich mich noch nie voher in keiner Weise auseinander gesetzt und lerne jetzt von Null. Mein Vorteil ist halt, das ich sowas mehr oder weniger verdammt spannend finde. Mal sehen ob Java wirklich so schlimm ist wie alle sagen 8D Ich hoffe nur wir kommen schnell von diesen einfachen Dingen ab und wenden uns an etwas komplexeres.
Ahja, und zur Sicherheit: der Ausdruck lautet public static void main(S[U]tring[] [U]args). "String" ist ein Klassenname und muss daher groß geschrieben werden, um vom Compiler erkannt zu werden. Und einen Variablennamen braucht das Argument der Methode auch – "args" ist hier üblich, kann aber durch jeden anderen gültigen Variablennamen ersetzt werden.
(Der Teil in den Klammern bedeutet dann eben, dass die Methode ein einzelnes Argument erwartet, das den Typ "Array von Strings" (String[]) hat und dem der Name "args" zugewiesen wird. Dort landen dann zusätzliche Argumente – falls du das Programm z.B. mit java Test foo startest, und in der Klasse Test die main-Methode ist, ist dann args[0] gleich "foo".)
Auch dir Danke, für die Erklärung. Wird wahrscheinlich öfters vorkommen, das ich bei Problemen mich hier melde^^°
drunken monkey
11.10.2009, 16:12
Mal sehen ob Java wirklich so schlimm ist wie alle sagen 8D
Sagen vielleicht einige, aber sicher nicht alle. ;) Ich zum Beispiel mag Java ziemlich. ^^ Es ist natürlich nicht perfekt – aber welche Sprache könnte das schon sein. ;) Und besser als alle Alternativen (in ihrem Gebiet) gefällt sie mir allemal.
Auch dir Danke, für die Erklärung. Wird wahrscheinlich öfters vorkommen, das ich bei Problemen mich hier melde^^°
Ist gut, mach' das! ^^
"String" ist ein Klassenname und muss daher groß geschrieben werden, um vom Compiler erkannt zu werden.
Klassennamen müssen nicht unbedingt groß geschrieben werden (auch wenn das die Konvention ist), so wie auch alle anderen Bezeichner. Was du wohl meintest ist, dass der Compiler case-sensitive ist, d.h. er unterscheidet zwischen Groß- und Kleinschreibung und erkennt in "string" und "String" zwei unterschiedliche Bezeichner, wobei nur der letztere in der Standardbibliothek definiert ist. ;)
Mal sehen ob Java wirklich so schlimm ist wie alle sagen 8D
Lass dir so einen Unsinn nicht aufschwatzen. Ich bin zwar auch kein Java-Enthusiast, würde die Sprache aber dennoch nicht grundsätzlich verteufeln. Programmiersprachen werden mit einer bestimmten Philosophie entwickelt. Dementsprechend haben sie je nach Problemstellung Vor- und Nachteile, die man als Programmierer abwägen muss. Es lohnt sich in jedem Fall, ob du jetzt in deiner Karrire als Programmierer eher zu Java tendieren wirst, oder zu einer beliebigen anderen Sprache, Java kennenzulernen. Gute Programmierer kennen und können in der Regel viele verschiedene Sprachen und legen sich nicht auf eine einzige fest.
------------------------------------------
Wie wäre es, wenn sich die Java-Leute hier an einem Anfängerkurs versuchen? Dabei sollte nicht wie in vielen der Online-Tutorien nur stur die Sprachreferenz runtergegaukelt, sondern die anfängerrelevanten Themen aufgegriffen und ohne Fachchinesisch anfängerfreundlich erläutert werden. Offenbar besteht momentan Bedarf.
Wie wäre es, wenn sich die Java-Leute hier an einem Anfängerkurs versuchen? Dabei sollte nicht wie in vielen der Online-Tutorien nur stur die Sprachreferenz runtergegaukelt, sondern die anfängerrelevanten Themen aufgegriffen und ohne Fachchinesisch anfängerfreundlich erläutert werden. Offenbar besteht momentan Bedarf.
Wäre echt cool. =)
Ich kann mich bei Gelegenheit mal ransetzen. Meine Javakenntnisse sind zwar nicht so furchtbar gut, aber ich geb mir Mühe.
Edit: evtl. könnte man sowas auch immer abwechselnd schreiben. Also jeder eine Lektion und vielleicht eine Übungsaufgabe. Das richtet sich dann natürlich primär an diejenigen, die schon ein bisschen Erfahrung haben, aber natürlich könnten auch Anfänger, die aus anderen Tutorials ein paar neue Tricks gelernt haben, ihr Wissen direkt einbringen. Beim Schreiben lernt man auch.
Klingt gut, aber welche Themen sind wirklich anfängerrelevant? An meiner "Karriere" kann ich das nicht nachvollziehen, weil ich selbst nicht weiß, wie's bis hier hin gekommen ist :D.
Ja, das wäre sehr gut! Zwar habe ich auch Fachliteratur hier zu liegen, trotzdem wäre es mir so lieber.
@Kyuu
Job, hab ich nicht vor, man hört nur viel von 3-5 Semestlern^^ Ich jedenfalls freu mich drauf =3
Das Problem bei Java ist, dass man ein bisschen Ahnung von Objektorientierung haben muss, um zu verstehen, was passiert. Ich muss nochmal schaun, wie ich das strukturier. So wie bei uns in der Uni jedenfalls nicht. Da wurde erst groß erklärt, wie Objektorientierung funktioniert, aber nach nem halben Jahr wussten die meisten immer noch nicht, wie eine simple Schleife funktioniert.
@Owly:
Ich kann mich zwar auch nur sehr vage an meine Anfängerzeit und die Probleme damals erinnern, aber grundsätzlich kann man davon ausgehen, dass einem blutigen Anfänger jegliche Basis fehlt und die gilt es erst aufzubauen. Da fängt es schon beim obligatorischen Hello World-Beispiel an, das jeden Anfänger mit seinen Kennzeichnern überfordert (wtf ist "public static void main", was bedeutet jeder einzelne Kennzeichner, welcher Klasse gehören sie an und explodiert mein Computer, wenn ich die Reihenfolge ändere, oder einen weglasse? usw).
Vielleicht könnte R.D. und andere Java-Anfänger konkret die Themen aufzeigen, die ihnen Probleme bereiten und an diesen kann man sich dann zusätzlich orientieren.
BTW:
Falls mehrere Leute an dem Kurs arbeiten sollen, wäre ein Wiki wahrscheinlich optimal.
Eventuell würde ich auch etwas beisteuern um meinen Kenntnisstand etwas aufzufrischen. :)
Das passt soweit ganz gut, da wir bereits an einem C++ Anfaengerkurs Kurs arbeiten. Sollts da noch jemand interesse haben, etwas beizusteuern, kann er sich ja melden.
Bei C++ ist es besonders wichtig von Anfang an sauberen Stil zu propagieren und den Teilnehmer während des Kurses auf die Tücken hinzuweisen, die beim jeweiligen Thema auftreten können und zwar so, dass es auch verinnerlicht wird. Das fehlt eigentlich allen Online-Tutorien über C++, die ich bisher gelesen habe. Einige gehen zwar darauf ein, aber dann nur ungenügend und lückenhaft. Es würde mich durchaus interessieren, wie ihr da vorgeht und beisteuern kann ich bei Gelegenheit auch. *meld* Allerdings würde ich für sowas wirklich ein öffentliches Wiki empfehlen. Kann der Staff da nichts auf die Beine stellen?
drunken monkey
11.10.2009, 19:30
Nichts gegen Community-Projekte, aber bei sicher hunderten Tutorials zu Java im Internet, sollte eigentlich doch eins dabei sein, das auch diese Anforderungen erfüllt…o_O'
Ich fand Java ist auch eine Insel (http://openbook.galileocomputing.de/javainsel8/) eigentlich ziemlich gut. Wobei ich gerade sehe, dass es sich in den letzten Auflagen entweder stark geändert hat, oder doch lang nicht so einsteigerfreundlich ist…*kratz* Naja, notfalls muss man den ersten Abschnitt einfach überspringen. Wobei die Kenntnis einer anderen imperativen wohl trotzdem ratsam ist.
Nichts gegen Community-Projekte, aber bei sicher hunderten Tutorials zu Java im Internet, sollte eigentlich doch eins dabei sein, das auch diese Anforderungen erfüllt…o_O'
Es ist einfach der lokale Faktor, der ausschlaggebend ist. Ein foreneigenes Tutorial ist um Weiten näher am Leser, als ein beliebiges anderes aus dem Internet. Wenn man den Verfasser kennt, mit ihm bereits etwas zu tun hatte, gestaltet sich das Lesen viel angenehmer und man nimmt mehr mit. Auch der Support ist hier weit besser. Findet man einen Fehler, kann man direkt im Thread oder in einer PN an den Verfasser darauf aufmerksam machen. Sollte der Verfasser auf ein bestimmtes Thema detaillierter eingehen, oder gibt es andere inhaltsbezogene Wünsche, kann man auch hier den Kontakt aufnehmen. Viele andere Tutorien untersagen es den Verfasser zu kontaktieren, was aber gerade für Anfänger wichtig wäre.
Es gewinnt aber nicht nur der Leser, sondern auch der Verfasser. Man kann in der Regel erst dann von sich behaupten etwas verstanden zu haben, wenn man es jemandem anderen erklären kann. Du ahnst gar nicht wieviel man während des Schreibens noch mitnehmen kann. Das ist der Grund, wieso es heute so viele Tutorien gibt und es gibt keinen Grund, nicht noch mehr zu schreiben. ^^
Ich bin dafür xD Ganz einfach, weil es wie Kyuu sagt extrem praktisch wäre, da ich hier im Forum ja einige kennen und weiß das sie posten wenn ich eine Frage stelle. Ab nächste Wochen könnte zb schon die testate beginnen, die unsere Dozentin ind "Programmieren I" aufgibt (zum Punkte sammeln für die Prüfung).
Was dabei allerdings meiner Meinung nach etwas dumm ist, ist das sie uns verboten hat Notebooks mitzubringen. Vornehmlich soll das die treffen, die im Unterricht nichts besseres zu tun haben, als im I-net zu surfen. Ich finde das ehrlich gesagt etwas schade, da ich der Meinung bin, das Code eintippen/verändern/einrücken auf Computer besser funktioniert als auf einem Stück Papier (Ja, wie schreiben ECHT Code auf Papier, nicht nur das Strutogramm).
Whiz-zarD
11.10.2009, 23:43
Es hat schon seine guten Gründe, warum man sein Laptop nicht mitnehmen sollte. Auch hat es seine guten Gründe, warum man vermeiden sollte, eine Programmieren-Klausur auf einem Rechner zu schreiben.
Der wichtigste Grund, bei Klausuren, ist der, dass man sich an kleinigkeiten festbeißt, die nicht viel mit der eigentlichen Problemstellung zu tun hat. Bei den klausuren geht es einzig darum die Gedankengänge eines Schülers zu erkennen. Ob seine Algorithmen schnell und schlüssig sind oder kompliziert und unübersichtlich. Da spielen diverse Sytaxfehler nicht so eine entscheidene Rolle. Wenn der Schüler aber die Möglichkeit erhält, sein Programm auch noch während der Klausur zu testen, dann muss auch das Programm fehlerfrei laufen und wer hat sowas schonmal nicht erlebt, dass ein kleiner, simpler Fehler einen zur Verzweiflung gebracht hat?
Bei uns auf der Schule, die sich auf Informatik und Physik spezialisiert hat, sind Laptops in Vorlesungen grundsätzlich verboten. (einige Dozenten sehen das aber nicht so ernst)
Zum einen nervt das Tippgeräusch und zum Anderen werden nicht nur die abgelenkt, die nur im Web serven, sondern auch die jenigen, die neben und hinter ihm sitzen, da die Neugierde siegt und man ständig auf den Bildschirm schaut, anstatt nach vorne.
Zu den Tippgeräuschen kann ich sagen, dass es echt nervt, wenn alle wild auf die Tastatur hacken. In meiner Office-Software Veranstaltung war es so extrem, dass man den Dozent fast nicht verstanden hat.
Code auf Papier fand ich nie besonders schlimm. Im Gegenteil, Pseudocode schreib ich immer auf Papier. Struktogramme sind mir zu aufwendig ^^
Also ich empfinde es eigentlich als ganz angenehm, in den Vorlesungen im Zweifelsfall einen Laptop dabei zu haben. Ganz ehrlich, in einem Hörsaal mit 400 Leuten sind Tippgeräusche das kleinste Problem und mit einem Laptop kann man mal schnell im Skript nachschlagen, wenn man was vergessen hat oder auch mal ein Stück Code direkt ausprobieren.
Code auf Papier zu schreiben, halte ich für absolut unsinnig. Code ist dazu da, ausgeführt zu werden. Außerdem passieren auf Papier wesentlich schneller Fehler, die einem auffallen würden, wenn man einfach mal den Compiler anwerfen würde.
drunken monkey
12.10.2009, 11:23
Ich bin auch eindeutig gegen Code auf Papier, das ist einfach ungewohnt, (i.A.) langsamer, unübersichtlicher und für später eigentlich auch unnötig.
Falls sich jemand bei Pesudo-Code, oder auch allgemein so leichter tut, soll er natürlich, aber obligatorisch in der VO ist's ein Blödsinn, und bei Tests zwar (wegen logistischen Schwierigkeiten) verständlich, aber doch immer ein Krampf. <__<'
Zum Glück hat bei uns noch nie ein Professor versucht, Laptops in der Vorlesung zu verbieten. ^^' Manche bauen sie sogar extra ein, z.B. hatten wir mal einen, der sich während der VO Fragen über Twitter u.ä. stellen hat lassen. :A
Jopp, so seh ich das auch so^^ Für Pseudocode mag das ja ganz toll sein, aber wir sollten ein Applet schreiben, dass 4 Vierecke zeichnen, ein Dreieck un ein Haus vom Nikolaus (Und das ganze in eigener Syntax @_@). DAS ist nervig und völlig überflüssig. Mittlerweile schreibe ich die Codes nicht mehr mit sondern notiere mir auf mein Papier, das ich das Zuhause in einem Ordner aufschreibe und gleich teste (Wobei ich nun zusätzlich DFYX Tut lese^^).
In Klausuren kann ich das auch durchaus verstehen, da man da echt leicht cheaten kann (Unsere Dozentin erlaubt und trotzdem ein DIN A4 Blatt voll mit eigenen Kommentaren etc.)
@Whiz-zarD
Also auf ein Tippgeräusch, habe ich ehrlich gesagt noch nie bemerkt 8'D
In der Regel habe ich die Möglichkeit, alles zu tippen.
Daher verzichte ich meistens darauf, mit Papier zu hantieren. =)
@R.D. :
Ihr solltet das ohne jegliche Vorkenntnisse sofort auf die Beine stellen?
Wir haben dazu ein eigene Syntax bekommen un einige Zeilen Code vorgeschrieben.
Man hatte dann folgende Befehle:
go()
rotate()
color(Color,FARBE)
setStart(x,y)
JumpTo(x,y)
Nun sollten wir die halt umher gehen lassen^^ alos weitaus weniger schwer als es sich anhört, es war nur nervig das auf Papier zu bringen.
Der Rest des Applets war eigentlich auch schon fertig da (es fehlten nur einige Codezeilen).
Achso, ich dachte ihr müsstet als erste Übung gleich mal 'ne grafische Oberfläche entwerfen. ;D
yay, ich liebe solche Momente. 4 Uhr morgens, gute Musik auf den Ohren und im IRC Channel wird über die Unendlichkeit des Universums und die Frage, ob man aus der Unendlichkeit des Universums (sofern man sie beweisen könnte) die Existenz von außerirdischem Leben ableiten könnte, philosophiert. Sollte es öfter geben.
(P.S.: Das hier ist ein Spamthread, niemand hat gesagt, dass wir hier nur über Programmierthemen reden können)
yay, ich liebe solche Momente. 4 Uhr morgens, gute Musik auf den Ohren und im IRC Channel wird über die Unendlichkeit des Universums und die Frage, ob man aus der Unendlichkeit des Universums (sofern man sie beweisen könnte) die Existenz von außerirdischem Leben ableiten könnte, philosophiert. Sollte es öfter geben.
(P.S.: Das hier ist ein Spamthread, niemand hat gesagt, dass wir hier nur über Programmierthemen reden können)
Dito. Ich liebe das Morpheussyndrom.
BTW: Wir (GSandSDS und ich) sind ausgehend von obigem Thema auf eine interessante mathematische Diskussion gekommen.
Nehmen wir an, wir haben einen Pi-Fanclub und einen e-Fanclub. Beide Clubs sind ueberabzaehlbar maechtig und jeder (durchnummerrierte) Fan traegt die seiner Mitgliedernummer entsprechende Ziffer seiner Zahl auf dem T-Shirt. Nun treten beide Fanclubs in ehrlichem Zweikampf gegeneinander an, Ziffer 1 gegen Ziffer 1, usw. Derjenige, der die groessere Ziffer auf dem Trikot hat, schlaegt den Gegner nieder. Sind die Ziffern gleich gross, gehen beide zu Boden. Welcher Fanclub stellt am Ende den groesseren Prozentsatz stehender Leute ?
Also bei Pi gegen 3+Pi (beides transzendent) ist klar, wer gewinnt. Aber was ist mit Pi gegen e .. oder Pi gegen (3+pi/10) ?
Niemand kann gewinnen, denn ein Gewinner würde Endlichkeit implizieren, da beides aber unedliche Mengen sind, würde die Auswertung unendlich lange dauern und folglich kann es auch keinen Gewinner geben. :O
drunken monkey
14.10.2009, 09:15
@ Luki: Ich nehme an (IANAM), durchschnittlich werden die Ziffern bei beiden Zahlen gleichmäßig verteilt sein, daher Unentschieden. Unendlich viele Stellen kann man ja sowieso nicht genau auswerten, also käme es darauf an, dass bei einer der beiden Zahlen wirklich asymptotisch manche Ziffern häufiger vorkommen.
Und das mathematisch für ein komplett willkürlich gewähltes Darstellungssystem (dezimal) zu beweisen, halte ich für kaum möglich.
(Wobei zusätzlich natürlich "am Ende" auch eine schlechte Formulierung ist, wie Kyuu schon anmerkt. ;))
@ DFYX: Nein, weil das Universum, egal ob endlich oder unendlich, nur eine endliche Masse (= endliche Zahl an Galaxien => Sonnen => Planeten) beinhaltet?
Niemand kann gewinnen, denn ein Gewinner würde Endlichkeit implizieren, da beides aber unedliche Mengen sind, würde die Auswertung unendlich lange dauern und folglich kann es auch keinen Gewinner geben. :O
Das ist eben nicht so einfach gesagt, wie man z.B. an pi und 3+pi merkt. Die Mathematiker haben ja noch nicht einmal bewiesen, dass pi+e ueberhaupt transzendent oder ueberhaupt irrational ist. Und selbst wenn alles transzendent ist, heisst das nicht, dass es nicht gewisse "Phasen"korrelationen zwischen den beiden Zahlen geben kann, die transzendenz fordert ja nur, dass die wahrscheinlichkeit jeder Ziffer innerhalb der Zahl gleich gross ist. Ein Unentschieden ist wahrscheinlich, aber den Beweis stell ich mir verdammt schwer vor.
drunken monkey
14.10.2009, 15:09
Ein Unentschieden ist wahrscheinlich, aber den Beweis stell ich mir verdammt schwer vor.
Ich mir eigentlich nicht. Wie gesagt, ich bin kein Mathematiker, und ein gelernter würde in der Schlussfolgerung vielleicht einige Fehler finden (und er ist natürlich nicht in Formeln ausgedrückt), aber mir erscheint das eigentlich recht logisch/stichhaltig:
Pi (und exakt das selbe gilt wohl jeweils für e) ist irrational, das heißt sie hat unendlich viele Stellen. Da das Dezimalsystem ein komplett willkürlich gewähltes ist, kann ich mir nicht vorstellen, dass die Verteilung der einzelnen Ziffern irgendeiner Regelmäßigkeit abseits einer Gleichverteilung auf die zehn möglichen Ziffern folgt. Ergo kommt jede Ziffer mit der gleichen Wahrscheinlichkeit vor, und daher bei unendlich vielen Stellen aufgrund des Gesetzes der großen Zahl genauso oft wie alle anderen Ziffern, in 10% der Fälle.
Naja, und wenn das bei beiden Zahlen so ist, lässt sich aus dem GdgZ ebenfalls schließen, dass es insgesamt Unentschieden ausgehen wird, da auf lange Sicht keine Zahl einen Vorteil hat.
Zu "Phasenkorrelationen": Die würden ja wenn nur stellenweise auftreten (wie gesagt kann ich mir bei einer willkürlichen Darstellung nicht vorstellen, dass das System hätte, bzw. auch nur haben könnte), und sich dann insgesamt auch sicher ausgleichen. Die Statistik lässt sich nicht bescheißen. ;O
@Ineluki:
Ist es denn bewiesen, dass sich zwei irrationale Zahlen, die im Endlichen gleich sind, es auch im Unendlichen sind?
@DFYX:
Wie drunken monkey schon sagte, ist die Materie nicht unendlich. Der Beweis ist, dass es in einem Universum mit unendlich Materie (und damit Sternen) überall hell wäre.
@DFYX:
Wie drunken monkey schon sagte, ist die Materie nicht unendlich. Der Beweis ist, dass es in einem Universum mit unendlich Materie (und damit Sternen) überall hell wäre.
Unendlich Materie != unendlich viele Sterne. Nur weil es im für uns sichtbaren Bereich des Universums sehr viele, etwa gleichmäßig verteilte lichtproduzierende Körper gibt, muss das nicht überall so sein.
Würde es unendlich Materie geben, so würde es auch unendlich Sterne geben. Oder wieso sollte die Häufigkeit der Sterne bei unendlich Materie endlich sein?
Außerdem ist es doch bekannt, dass sich die Materie im Universum stetig, räumlich (-> Urknall-Theorie) ausdehnt, aber diese Ausdehnung endliche Dimensionen hat (wenn auch gigantische).
Würde es unendlich Materie geben, so würde es auch unendlich Sterne geben. Oder wieso sollte die Häufigkeit der Sterne bei unendlich Materie endlich sein?
Gegenfrage: wieso sollte sie es nicht sein? Es gibt auch unendlich viele natürliche Zahlen, aber nur eine ist das neutrale Element bezüglich der Multiplikation, nämlich die 1. Natürlich gibt es gute Argumente dafür, dass sich alle Teile des Universums ähneln, aber keine Beweise.
drunken monkey
14.10.2009, 21:13
Wenn man so anfängt, kann man auch sagen, dass wir evtl. in einer virtuellen Realität leben und es in der Wirklichkeit bereits Kontakt zu diversen anderen Planeten gibt. Es ist absolut möglich und auch nicht widerlegbar.
Aber letztendlich sollte man, wenn man keine wirklichen Gegenargumente oder begründete Zweifel hat, bei seiner Argumentation doch von dem derzeitigen wissenschaftlichen Konsensus ausgehen. Und da wirst du kaum einen finden, der behauptet, es gebe unendlich viel Materie. Die Urknall-Theorie wird zwar wohl nicht von allen unterstützt, aber selbst der klägliche der Rest dürfte wohl aus deutlich mehr Kreationisten als "Unendlich viel Materie"-Anhängern bestehen.
Also ich will nicht behaupten, dass die Behauptung, es gäbe unendlich viel Materie, widerlegbar ist – aber eine interessante Diskussion ergibt sie imo auch nicht. ^^"
@DFYX:
Sterne entstehen aus Materie und überall, wo es Materie gibt, gibt es auch Sterne. Folglich gibt es unendlich Sterne, wenn es unendlich Materie gibt (ich meine natürlich leuchtende Materie). Das wäre mein Gedankengang.
Wenn es dich interessiert, in Alpha Centauri, Folge 6, geht Lesch auf genau diese Frage und diesen Beweis ein (von dorther habe ich es auch). Er redet dabei vom Olbersschen Paradoxon (http://de.wikipedia.org/wiki/Olberssches_Paradoxon).
Edit:
Ich sehe gerade, Astrophysiker sind sich hier alles andere als einig und in manchen Fällen geht man sogar davon aus, dass das Universum, das wir kennen, entweder nur ein Teil eines viel größeren Universums ist (da Licht eine konstante Geschwindigkeit hat, soll das Licht hinter dem "Horizont" uns noch nicht erreicht haben; bzw. geht man auch davon aus, dass die Rotverschiebung das Licht für uns unsichtbar macht), oder, dass neben unserem Universum noch andere Universen befinden...
Ich mir eigentlich nicht. Wie gesagt, ich bin kein Mathematiker, und ein gelernter würde in der Schlussfolgerung vielleicht einige Fehler finden (und er ist natürlich nicht in Formeln ausgedrückt), aber mir erscheint das eigentlich recht logisch/stichhaltig:
Pi (und exakt das selbe gilt wohl jeweils für e) ist irrational, das heißt sie hat unendlich viele Stellen. Da das Dezimalsystem ein komplett willkürlich gewähltes ist, kann ich mir nicht vorstellen, dass die Verteilung der einzelnen Ziffern irgendeiner Regelmäßigkeit abseits einer Gleichverteilung auf die zehn möglichen Ziffern folgt. Ergo kommt jede Ziffer mit der gleichen Wahrscheinlichkeit vor, und daher bei unendlich vielen Stellen aufgrund des Gesetzes der großen Zahl genauso oft wie alle anderen Ziffern, in 10% der Fälle.
Naja, und wenn das bei beiden Zahlen so ist, lässt sich aus dem GdgZ ebenfalls schließen, dass es insgesamt Unentschieden ausgehen wird, da auf lange Sicht keine Zahl einen Vorteil hat.
Zu "Phasenkorrelationen": Die würden ja wenn nur stellenweise auftreten (wie gesagt kann ich mir bei einer willkürlichen Darstellung nicht vorstellen, dass das System hätte, bzw. auch nur haben könnte), und sich dann insgesamt auch sicher ausgleichen. Die Statistik lässt sich nicht bescheißen. ;O
Das Funktioniert so leider nicht problemlos. Natuerlich hast du recht, dass die Wahrscheinlichkeit fuer jede Ziffer an einer beliebigen Stelle genau 1/10 ist. Die Wahrscheinlichkeit eine 1 an Stelle 2 von pi zu finden ist allerdings nicht 1/10tel sondern exakt 100%.. Deine Hypothese, dass sich allein aus der Transzendenz zweier Zahlen schliessen laesst, dass es fuer obigen Fall zu einem Unentschied kommt, ist leider unhaltbar.
Beweis: Die Zahlen pi und (3+pi) sind beide transzendent: Das heisst, sie sind beide unendlich, nichtperiodisch, jede Ziffer kommt mit einer Wahrscheinlichkeit von 1/10tel vor und es wird jede beliebige Ziffernfolge durchlaufen. Trotzdem wird pi (3+pi) unterliegen, da fuer die erste Ziffer 3<6 gilt, und fuer alle anderen Ziffern identitaet. Damit gibt es nur einen einzigen "Stehenden" im Fanclub, alle anderen liegen am Boden. Demnach stellt der (3+pi)-Fanclub 100% der stehenden Personen, und hat gewonnen. Damit ist deine Hypothese widerlegt (Gegenbeispiel).
Es kommt nicht darauf an, dass alle Ziffern genau gleich haeufig irgendwo vorkommen, sondern die Position spielt auch eine Rolle. Die Wahrscheinlichkeit an der Stelle x von pi die xte Ziffer von pi zu finden ist nun einmal 100%., und nicht 10%. Das selbe gilt fuer e. Und das Gesetz der grossen Zahlen sagt nun einmal nichts darueber aus, wie oder auch nur ob pi und e in irgendeiner Weise Stelle fuer Stelle korreliert sind. Demnach kann dann das Ergebnis sowohl e gewinnen lassen, oder pi gewinnen lassen oder ein Unentschieden produzieren. Per se laesst sich darueber also gar nichts aussagen.
In transzendenten Zahlen wird zwar jede moegliche Permutatuion durchlaufen, aber nicht in beliebiger Reihenfolge, denn das ist es, was transzendente Zahlen von einander unterscheidet. Die Stellen einer transzendenten Zahl sind abzaehlbar unendlich viele. Die Anzahl Permutatuionen ueber aller Permutationen von Ziffernfolgen in der transzendenten Zahl ist allerdings ueberabzaehlbar unendlich. Demnach kannst du nicht davon ausgehen, dass wirklich jede beliebige Ziffernpermutation in e auf jede beliebige Ziffernpermutation in pi trifft, was das Unentschieden verursachen wuerde, wie du richtig angenommen hast. Genau das ist der Knackpunkt an der Aufgabe.
drunken monkey
15.10.2009, 09:23
Das Funktioniert so leider nicht problemlos. Natuerlich hast du recht, dass die Wahrscheinlichkeit fuer jede Ziffer an einer beliebigen Stelle genau 1/10 ist. Die Wahrscheinlichkeit eine 1 an Stelle 2 von pi zu finden ist allerdings nicht 1/10tel sondern exakt 100%..
Das sind dann aber sozusagen "a-posteriori-Wahrscheinlichkeiten", und die sind für eingetretene "Ereignisse" (wenn man das so formulieren kann) natürlich 100%. Allerdings kennt man höchstens endlich viele Stellen der Zahlen, und selbst wenn bei den bekannten 10^x Stellen der beiden Zahlen eine schon einen Vorsprung von 10^(x-1) hätte: Im Gegensatz zur Unendlichkeit der restlichen Stellen ist das absolut bedeutungslos.
Imo spielt es keine Rolle, dass es auch um die Position geht. Analog kann man sich das Gleiche mit Münzwürfen überlegen: Zwei Leute werfen parallel unendlich oft jeweils eine Münze. Kopf gewinnt gegen Zahl. Da für beide die Chancen für Kopf und Zahl (idealisieren wir hier mal) 50% beträgt, ergibt sich auch eine ausgewogene Siegeschance für beide pro Wurf (25% natürlich) und somit ingesamt ein sicheres Unentschieden (bei unendlich vielen Würfen eben). Dass es nicht egal ist, wann man nun Kopf und wann Zahl wirft, ist dafür irrelevant.
Und da es für mich klar zu sein scheint, dass pi und e absolut unkorelliert sind, d.h. im Allgemeinen an einer Stelle x (solange man diese nicht kennt, was für fast alle gilt) jede der Zahlen mit gleicher Wahrscheinlichkeit gewinnt, würde ich das Münzbeispiel auch 1:1 auf die Zahlen übertragen.
Deine Hypothese, dass sich allein aus der Transzendenz zweier Zahlen schliessen laesst, dass es fuer obigen Fall zu einem Unentschied kommt, ist leider unhaltbar.
Beweis: Die Zahlen pi und (3+pi) sind beide transzendent:
Ich würde dieses Beispiel als irrelevant bezeichnen, da die beiden ja eindeutig voneinander abhängen. Also ja, die obige Hypothese lässt sich offensichtlich nicht halten, aber wenn man das Wörtchen "unabhängiger" (bzw. "unkorellierter", um wahrscheinlichkeitstheoretischer zu klingen ;O) hinzufügt, sieht das imo schon ganz anders aus.
Für mich ist der Knackpunkt einfach die Unendlichkeit: Jeglicher Vorteil einer Zahl gegenüber der anderen wird im Unendlichen bedeutungslos, solange es kein systematischer Vorteil ist. Denn egal wie es nach x Stellen steht – solange man nicht genau weiß, dass es so weitergeht (also der Vorteil systematisch ist), ist das absolut einerlei, da noch unendlich viele Stellen folgen. Und ein systematischer Vorteil kann imo nicht existieren, wenn die beiden Zahlen nichts miteinander, oder der Zahl 10, zu tun haben.
Ich denke, dein Gedankengang wäre nur für endlich lange, großteils unbekannte Zahlenfolgen gültig.
Hm, das Thema ist vielleicht genauso unnötig wie das andere, aber irgendwie kann man deutlich besser drüber diskuttieren. XD Will nicht noch wer einsteigen? :D Zu zweit ist's doch langweilig…;O
Das sind dann aber sozusagen "a-posteriori-Wahrscheinlichkeiten", und die sind für eingetretene "Ereignisse" (wenn man das so formulieren kann) natürlich 100%.. Allerdings kennt man höchstens endlich viele Stellen der Zahlen, und selbst wenn bei den bekannten 10^x Stellen der beiden Zahlen eine schon einen Vorsprung von 10^(x-1) hätte: Im Gegensatz zur Unendlichkeit der restlichen Stellen ist das absolut bedeutungslos.
Imo spielt es keine Rolle, dass es auch um die Position geht. Analog kann man sich das Gleiche mit Münzwürfen überlegen: Zwei Leute werfen parallel unendlich oft jeweils eine Münze. Kopf gewinnt gegen Zahl. Da für beide die Chancen für Kopf und Zahl (idealisieren wir hier mal) 50% beträgt, ergibt sich auch eine ausgewogene Siegeschance für beide pro Wurf (25% natürlich) und somit ingesamt ein sicheres Unentschieden (bei unendlich vielen Würfen eben). Dass es nicht egal ist, wann man nun Kopf und wann Zahl wirft, ist dafür irrelevant.
Und da es für mich klar zu sein scheint, dass pi und e absolut unkorelliert sind, d.h. im Allgemeinen an einer Stelle x (solange man diese nicht kennt, was für fast alle gilt) jede der Zahlen mit gleicher Wahrscheinlichkeit gewinnt, würde ich das Münzbeispiel auch 1:1 auf die Zahlen übertragen.
Ich würde dieses Beispiel als irrelevant bezeichnen, da die beiden ja eindeutig voneinander abhängen. Also ja, die obige Hypothese lässt sich offensichtlich nicht halten, aber wenn man das Wörtchen "unabhängiger" (bzw. "unkorellierter", um wahrscheinlichkeitstheoretischer zu klingen ;O) hinzufügt, sieht das imo schon ganz anders aus.
Für mich ist der Knackpunkt einfach die Unendlichkeit: Jeglicher Vorteil einer Zahl gegenüber der anderen wird im Unendlichen bedeutungslos, solange es kein systematischer Vorteil ist. Denn egal wie es nach x Stellen steht – solange man nicht genau weiß, dass es so weitergeht (also der Vorteil systematisch ist), ist das absolut einerlei, da noch unendlich viele Stellen folgen. Und ein systematischer Vorteil kann imo nicht existieren, wenn die beiden Zahlen nichts miteinander, oder der Zahl 10, zu tun haben.
Ich denke, dein Gedankengang wäre nur für endlich lange, großteils unbekannte Zahlenfolgen gültig.
Hm, das Thema ist vielleicht genauso unnötig wie das andere, aber irgendwie kann man deutlich besser drüber diskuttieren. XD Will nicht noch wer einsteigen? :D Zu zweit ist's doch langweilig…;O
DAS ist es doch genau, bisher hat niemand bewiesen, DASS pi und e nicht voneinander abhaengen. Ausserdem sind fuer pi und e in diesem Sinne die Ziffern an der Stelle X genau solche "a-posteriori-Wahrscheinlichkeiten", da gibt es nichts zu wahrscheinlichen, denn welche Ziffer das ist, steht ja bereits fest (bestenfalls kann man sie als Pseudozufallszahlen betrachten). Die Wahrscheinlichkeiten nuetzen einem hier gar nichts. Wenn kann man nur zwei Algorithmen gegeneinander antreten lassen, die die jeweils naechste Ziffer von e bzw pi berechnen, dann Schritt fuer Schritt aufsummieren und den Limes der beiden Reihen vergleichen. Nur fuer den Fall, dass beide Reihen gegen Unendlich gehen oder einen exakt endlichen identischen Grenzwert besitzen, gibt es ein Unentschieden.
Hat sich jemand schonmal eingehend mit der Allegro library zur Spieleentwicklung in C(++) beschäftigt?
Im ersten Berufsschuljahr wurde uns die Objektorientierung an einem mit Hilfe von Allegro selbst entwickelten Pacman- Projekt nähergebracht, was zeitlich vorne und hinten nicht hinhauen wollte. Das wenige, was ich dort mitnehmen konnte, hat mir nicht sonderlich gefallen, zumal ich da schon ein wenig Erfahrung mit XNA gesammelt habe - was mir als Java Entwickler natürlich Vorteile bringt - und bis heute noch mit Torque liebäugle.
Kann man Allegro empfehlen und/oder wäre ich mit Torque (wohl 2D) gut beraten, wenn ich mich denn eingehender mit C++ beschäftigen möchte?
Ich hab ne Weile mit Allegro gearbeitet und kann dir sicher mit ein paar Kleinigkeiten helfen. Wenn du ein gutes Buch suchst: Lennart Steinke - Spieleprogrammierung. Beschreibt Schritt für Schritt, wie man einen simplen Diablo Klon mit Allegro entwickelt. Torque sagt mir nix, aber evtl. könnte auch SDL für dich interessant sein.
SFML (http://www.sfml-dev.org/features.php) sieht nach einer guten Alternative zu SDL aus.
Entweder bin ich ein grottiger Lehrer oder Java eignet sich definitiv nicht als Sprache für ein Einsteigertutorial
oh mann, noch gar nicht gesehen^^ Wird nacher gelesen /o
dead_orc
20.10.2009, 14:53
DFYX: Wenn man zum Einlesen von Input schon Klassen und Exceptions braucht, musst du halt erstmal (Javas) OOP erklären (was ich eigentlich eh für sinnvoller halte. Erst die Syntax, dann die Stdlib [wozu ich Input schon zähle])
Wenn du unbedingt User-Input in deinen Beispielen brauchst, kannst du es ja vielleicht über die args lösen oder so...
Naja, ich möchte eigentlich ganz gerne Beispiele, bei denen man auch ein sinnvolles Ergebnis sieht, mit dem man rumspielen kann. Graue Theorie setzt sich nicht so gut im Hirn fest. Auf der anderen Seite ist es aber in meinen Augen auch nicht furchtbar sinnvoll, jetzt direkt mit Exceptions um mich zu schmeißen, solang der Leser noch nichtmal weiß, wie genau Methoden funktionieren.
drunken monkey
20.10.2009, 16:05
Darum wäre ja der Scanner perfekt, der wirft (praktisch) nie Exceptions und lässt sich direkt aus System.in konstruieren, wodurch auch die verschachtelten Konstruktoren wegfallen. Einfacher geht's kaum noch, und ist sogar bequemer als teils in Skript-Sprachen.
Das sind doch Einsteigertutorial, sollte man daher die Exceptions nicht einfach ignorieren, bis Exceptions erklärt wurden und die Programmschnipsel grösser sind?
Schon, aber ich hab das Gefühl, dass ein "Hier sind 15 Zeilen Code, ignoriert davon erstmal alle bis auf 3 und 6." doch ziemlich abschreckend wirkt, meint ihr nicht?
Mein Info-Prof löst die Problematik, indem er die Leute eine Library mit simpler API verwenden lässt, ohne groß zu erklären, was dahintersteckt. Ist dann halt ein Import.
Wobei die Vorlesung natürlich auch eher eine Einführung in die Informatik und Algorithmen ist als ein Kurs für Anwendungsentwicklung …
dead_orc
21.10.2009, 15:23
Schon, aber ich hab das Gefühl, dass ein "Hier sind 15 Zeilen Code, ignoriert davon erstmal alle bis auf 3 und 6." doch ziemlich abschreckend wirkt, meint ihr nicht?
Ich glaube, Drakes meinte, man könnte sie wirklich weglassen (i.e. nicht hinschreiben), oder? Wäre zumindest bei der einen wohl möglich, denke ich (als jemand, der keine Ahnung von Java hat :D)
Ich glaube, Drakes meinte, man könnte sie wirklich weglassen (i.e. nicht hinschreiben), oder? Wäre zumindest bei der einen wohl möglich, denke ich (als jemand, der keine Ahnung von Java hat :D)
Der Code sollte schon compilierbar sein. Java verlangt von dir, dass du die Exceptions fangen musst, sonst beschwert sich der Compiler.
deadorc hat recht, aber dass man sie abfangen muss habe ich mir fast noch gedacht, trotzdem habe jedoch noch ein bischen getestet.
Meine Resultate sind, dass man beim readln die Exception abfangen muss, aber beim Integer.parseInt nicht O.o Beim googlen bin ich noch über folgendes gestolpert:
String BenutzerEingabe =
javax.swing.JOptionPane.showInputDialog("Geben sie eine Zahl ein.");
Zwar nicht das eleganteste für mehrere Benutzereingaben, wäre aber eine Möglichkeit.
Xardas der Dunkle
21.10.2009, 17:50
Meine Resultate sind, dass man beim readln die Exception abfangen muss, aber beim Integer.parseInt nicht O.o
Weil Java zwischen sogenannten Forced- und Runtime-Exceptions unterscheidet.
IOException ist z.B. eine Forced-Exception und muss daher abgefangen werden ... (auch wenn bei der Tastatur z.B. nicht so schnell ein Fehler auftreten wird).
Wie wer es mit:
int main(String[] args) throws Exception { zwar auch nicht schön, aber besser dem Anwender sagen er soll diese eine Zeile erst mal ignorieren als wenn er 10 Zeilen ignorieren soll ;).
Jesus_666
07.11.2009, 03:48
Da es im Computerforum keinen nicht seit Ewigkeiten toten OT-Thread gibt kommt es mal hier rein:
Slashdot berichtet: (http://news.slashdot.org/story/09/11/07/014245/KDE-Founder-Receives-Highest-German-Honor) KDE berichtet: Matthias Ettrich, Gründer des KDE-Projekts, hat für seinen Beitrag zur Freien Software das Bundesverdienstkreuz verliehen bekommen. (http://dot.kde.org/2009/11/06/matthias-ettrich-receives-german-federal-cross-merit)
Gentlemen, discuss.
drunken monkey
08.11.2009, 01:20
Tja, sehr lebendig wirkt das hier auch nicht. :-/
Also ich habe mit KDE zwar nichts am Hut, aber dass Leute für Verdienste um die OSS-Bewegung nationale Ehrungen erhalten, finde ich auf jeden Fall eine positive Entwicklung. ^^ Ich habe schon über fünf Patches gepostet und will auch was vom Bundespräsidenten! XD
Tja, sehr lebendig wirkt das hier auch nicht. :-/
Also ich habe mit KDE zwar nichts am Hut, aber dass Leute für Verdienste um die OSS-Bewegung nationale Ehrungen erhalten, finde ich auf jeden Fall eine positive Entwicklung. ^^ Ich habe schon über fünf Patches gepostet und will auch was vom Bundespräsidenten! XD
Hast du ein paar Leaks eingearbeitet. huh? :P
drunken monkey
08.11.2009, 10:35
Hast du ein paar Leaks eingearbeitet. huh? :P
Verdammt, das war ein einziger String, lass' mich mal in Ruhe damit! XD
Ooooook...
Warum sind globale Variablen in Java böse?
Nein ehrlich, ich weiß es nicht, aber unsere Dozentin beharrt auf dieser These, so wie sie strickt verbietet einen Break in einer Schleife zu verwenden und mich erschließt sich das nicht ganz^^°
Whiz-zarD
08.11.2009, 18:49
Ooooook...
Warum sind globale Variablen in Java böse?
Nein ehrlich, ich weiß es nicht, aber unsere Dozentin beharrt auf dieser These, so wie sie strickt verbietet einen Break in einer Schleife zu verwenden und mich erschließt sich das nicht ganz^^°
Globale Variablen sind generell böse. Nicht nur in Java.
Das liegt daran, dass jede Funktion auf diese Variablen zugreifen kann. Allgemein gilt: So lokal wie möglich!
Das hat den Vorteil, dass man bestimmte Funktionen auch in anderen Projekten weiter benutzen kann, ohne großartig rumschauen zu müssen, ob da irgendwo eine globale Variable rumgeistert, die diese Funktion benötigt.
Auch hat man das Problem nicht, dass man aus versehen eine Variable mit einem anderen wert überschreibt.
makenshi
08.11.2009, 20:30
Warum sie ein break verbietet ist mir allerdings schleierhaft. Globale Variablen sollten wahrhaftig nur mit Bedacht eingesetzt werden. Aber ein break kann doch stellenweise eine Schleife sinnvoll vorzeitig beenden.
Whiz-zarD
08.11.2009, 21:06
Warum sie ein break verbietet ist mir allerdings schleierhaft. Globale Variablen sollten wahrhaftig nur mit Bedacht eingesetzt werden. Aber ein break kann doch stellenweise eine Schleife sinnvoll vorzeitig beenden.
Also ich weiß, dass man unter Pascal das Break vemeiden sollte, weil das vom compiler abhängig ist, obs implementiert wurde oder nicht. Turbo Pascal kennt das Break nicht so ohne weiteres, während Free Pascal es ohne zu meckern schluckt.
Warum man ein Break unter Java (oder generell bei allen Sprachen) vermeiden sollte, würde mir auch nichts einfallen, außer vielleicht aus Strukturierungsgründen, weil ein Break was sprunghaftes hat und Sprünge soll man vermeiden.
Zumindest bin ich all den Jahren ohne Break ausgekommen und wüsste kein Beispiel, wo ein Break zwingend erforderlich wäre.
Naja, wenn ich das bei meiner Informatik-Vorlesung richtig verstanden hab (da hieß es iirc auch, wir sollen kein break verwenden), meinen sie, wenn man die Abbruchbedingung im Schleifen-Kopf hat, ist das besserer Programmierstil. Aber andererseits ist das, was wir da machen (und das trifft vermutlich auch auf R.D. zu) so simpel, dass es da auch keine sinnvolle Anwendung für break gibt.
@Globale Variablen
Ahh~! Gut, denke ich hab das jetzt verstanden, auch was das break angeht, wobei sie wenn sie davon redet immer so wirkt, als wäre es ein Sünde.
Sie hat uns sogar ausdrücklich VERBOTEN jemals einen Break zu verwenden. Solltes es in einer Klausur vorkommen gisb ne 5 :/ (wobei das sicher scherzhaft gemeint war... hoffe ich...)
drunken monkey
08.11.2009, 22:24
Manche Professoren/Dozenten spinnen einfach etwas mehr als normal. :D
Also ich hatte schon etliche Vorlesungen zu Software-Entwicklung mit Java, und habe davon noch nie gehört. Und auch wenn's teilweise vielleicht wirklich besserer Stil ist, das nur im Schleifenkopf zu haben, gibt's genug Fälle wo das nicht so ist. Ein allgemeines Verbot ist da einfach nur dämlich.
Vor allem wenn sie anscheinend nicht mal fähig ist, das verständlich zu begründen. o_O"
Vor allem wenn sie anscheinend nicht mal fähig ist, das verständlich zu begründen. o_O"
oh doch, das kann sie:
"ist schöner"
... :(
drunken monkey
08.11.2009, 23:02
OK, das ist zwar nachvollziehbar (wenn auch für Anfänger evtl. etwas kryptisch), aber reicht gerade mal für eine Empfehlung oder Richtlinie, nie für ein komplettes Verbot. o_O" Auch wenn ich natürlich verstehe, dass man Anfängern unschöne Sachen besser komplett verbietet und sie später selber draufkommen lässt, wann es doch sinnvoll sein kann. ^^" Profis dürfen ja sogar GOTOs anwenden, und es kann sinnvoll sein.
Erinnert mich btw an was, das wir gerade diese letzte (Verdammte Mitternacht! XD) Woche erst wieder hatten:
The First Rule of Optimizing:
Don't do it.
:A
Ich denke R.D. übertreibt hier zu seinen Gunsten. :>
Ich denke R.D. übertreibt hier zu seinen Gunsten. :>
Glaub mir, tut er nicht. Ich hatte im 1. Semester auch so einen Prof.
Jesus_666
09.11.2009, 09:18
Es gibt allen Ernstes Professoren, die der Meinung sind, daß ein break nie gerechtfertigt ist. Wenn man in einer Schleife eine Abbruchbedingung außer dem Ende der Iteration hat, dann kann man das doch auch mit einer Exception machen.
Ja, es gibt Leute, die lieber eine Schleife in einen try...catch-Block wickeln, als das Sprachkonstrukt zu verwenden, das dafür vorgesehen ist.
drunken monkey
09.11.2009, 11:10
Es gibt allen Ernstes Professoren, die der Meinung sind, daß ein break nie gerechtfertigt ist. Wenn man in einer Schleife eine Abbruchbedingung außer dem Ende der Iteration hat, dann kann man das doch auch mit einer Exception machen.
Ja, es gibt Leute, die lieber eine Schleife in einen try...catch-Block wickeln, als das Sprachkonstrukt zu verwenden, das dafür vorgesehen ist.
Erinnert mich an das hier: Exception-oriented 99 Bottles (http://99-bottles-of-beer.net/language-java-866.html). :A
Das im Namen des guten Codestils zu machen, würde ich aber als geradezu pervers bezeichnen. XD
Glaub mir, tut er nicht. Ich hatte im 1. Semester auch so einen Prof.
Du hattest einen Professor, der mit "ist schöner" argumentiert? ;)
Dass sie globale Variablen und break/continue im ersten Semester in einer stark objektorientierten Sprache wie Java verbietet, finde ich übrigens toll.
Etwas übertrieben habe ich schon xD
Trotzdem ist sie sehr streng was Konventionen angeht, vllt auch gut so... mal sehen :3
Ich hab ja auch nix dagegen, bis ich halt an einen Punkt stoße wo ich es gebrauchen könnte o.o
Du hattest einen Professor, der mit "ist schöner" argumentiert? ;)
Seine Wortwahl war etwas anders, aber im Prinzip liefs auf "ist schöner" hinaus, ja.
drunken monkey
09.11.2009, 16:51
Etwas übertrieben habe ich schon xD
Trotzdem ist sie sehr streng was Konventionen angeht, vllt auch gut so... mal sehen :3
Ich hab ja auch nix dagegen, bis ich halt an einen Punkt stoße wo ich es gebrauchen könnte o.o
Darüberhinaus habe ich wie gesagt noch nie was davon gehört, also kann's zumindest keine so umfassend akzeptierte Konvention sein. <__<" Und wenn man auf solchen unwichtigeren derart rumpocht, fehlt vielleicht etwas das Verhältnis für die deutlich wichtigeren. o_O
Ahja, und gerade fällt's mir auf: Globale Variablen gibt's in Java doch gar nicht. XD Natürlich gibt's public static, aber die sind ja immerhin noch an die Klasse gebunden, was immerhin Verdeckungs-Effekte vermeidet. Dass man Methoden dann im Extremfall alle einzeln nach Seiteneffekten bezüglich solchen Feldern absuchen muss, bleibt aber natürlich.
dead_orc
09.11.2009, 17:45
Ich hab das Gefühl, meinem Prof ist Stil vollkommen egal. Um so wichtiger sind ihm dafür Tests. "Selbstgeschriebene" Programme müssen immer (!) ausführlich (!!!) getestet werden und die Tests machen 20% der Note aus (40% Programm, 40% Doku, 20% Tests).
So kommt es, dass ich effektiv jetzt zum aktuellen Übungsblatt doppelt so viel Tests wie Dokumentation habe (Trivialfall, Normalfälle, Grenzfälle und Fehlerfälle für... die Umrechnung einer Dezimalzahl in eine andere Basis in 8 Codezeilen -_-).
Jesus_666
10.11.2009, 02:26
Ich hab das Gefühl, meinem Prof ist Stil vollkommen egal. Um so wichtiger sind ihm dafür Tests. "Selbstgeschriebene" Programme müssen immer (!) ausführlich (!!!) getestet werden und die Tests machen 20% der Note aus (40% Programm, 40% Doku, 20% Tests).
So kommt es, dass ich effektiv jetzt zum aktuellen Übungsblatt doppelt so viel Tests wie Dokumentation habe (Trivialfall, Normalfälle, Grenzfälle und Fehlerfälle für... die Umrechnung einer Dezimalzahl in eine andere Basis in 8 Codezeilen -_-).
Erste Reaktion: "Hey, das ist ja genau wie an meiner Uni!"
Zweite Reaktion: "Moment mal, d_o studiert an meiner Uni." -_-°
Amüsanterweise habe ich es schon mal geschafft, ein nicht richtig funktionierendes Programm durch geschickte Konstruktion der Tests so aussehen zu lassen, als wäre es korrekt (sofern man nicht gerade beliebigen Input reinschickt). Bin sogar damit durchgekommen.
Der deprimierende Teil: Schon im Hauptstudiumsprojekt werden hehre Ideale wie Unit-Tests völlig vergessen sein. Aber hey, positiverweise vergißt man auch Rainer "das Wasserfallmodell ist das einzig Wahre" Koschke. Spätestens, nachdem man ein Semester damit verschwendet, strikt nach Wasserfall nichts brauchbares zu produzieren.
Darüberhinaus habe ich wie gesagt noch nie was davon gehört, also kann's zumindest keine so umfassend akzeptierte Konvention sein. <__<"
Entschuldige, aber ob ein drunken monkey aus Multimediaxis schonmal davon gehört hat, dass ein Sprachkonstrukt potentiell problematisch ist, oder nicht, sagt nichts über den allgemeinen Konsens darüber aus. :D
Und wenn man auf solchen unwichtigeren derart rumpocht, fehlt vielleicht etwas das Verhältnis für die deutlich wichtigeren. o_O
Völlig aus der Luft gegriffen. ^^
drunken monkey
11.11.2009, 23:58
Entschuldige, aber ob ein drunken monkey aus Multimediaxis schonmal davon gehört hat, dass ein Sprachkonstrukt potentiell problematisch ist, oder nicht, sagt nichts über den allgemeinen Konsens darüber aus. :D
Völlig aus der Luft gegriffen. ^^
Bitte mach' dir das nächste Mal die Mühe, einen Beitrag zu lesen, bevor du ihn abschickst. :)
Menschen auf unserer Unis glauben, Contracts schreibt man in Kommentare.
Bitte mach' dir das nächste Mal die Mühe, einen Beitrag zu lesen, bevor du ihn abschickst. :)
Diese Schiene ist doch nicht nötig.
Genau so unnötig, wie eure Diskussion... Hört auf euch anzuzicken und habt euch lieb ;)
Whatever, ich hasse das Wasserfallmodell. Bis nächste Woche muss ich 20 Seiten Pflichtenheft für einen Routenplaner schreiben. Überhaupt hat der Prof, der das Praktikum betreut, nen Schuss. Laut Modulhandbuch hat das Praktikum 4 Wochenstunden und auch entsprechend 6 ECTS. In der Einführungsveranstaltung hieß es aber schon, es wird erwartet, dass wir mindestens 1 1/2 Tage die Woche dran arbeiten. Kann mir mal einer sagen, woher wir die Zeit nehmen sollen?
Jesus_666
12.11.2009, 10:18
Genau so unnötig, wie eure Diskussion... Hört auf euch anzuzicken und habt euch lieb ;)
Whatever, ich hasse das Wasserfallmodell. Bis nächste Woche muss ich 20 Seiten Pflichtenheft für einen Routenplaner schreiben. Überhaupt hat der Prof, der das Praktikum betreut, nen Schuss. Laut Modulhandbuch hat das Praktikum 4 Wochenstunden und auch entsprechend 6 ECTS. In der Einführungsveranstaltung hieß es aber schon, es wird erwartet, dass wir mindestens 1 1/2 Tage die Woche dran arbeiten. Kann mir mal einer sagen, woher wir die Zeit nehmen sollen?
Von den anderen Kursen natürlich (nachdem deine Freizeit aufgebraucht ist und du Essen und Schlafen in zusammen drei Stunden pro Tag abwickelst). Leider gibt's solche Profs, die der Meinung sind, daß ihr Kurs das wichtigste am ganzen Studium sind und man dafür schon mal alles andere vernachlässigen kann.
...wobei ich zugeben muß, daß Anforderungsspezifikationen eine der unbestreitbar nützlicheren Sachen sind, die man im Informatikstudium beigebracht bekommt.
drunken monkey
12.11.2009, 14:36
Menschen auf unserer Unis glauben, Contracts schreibt man in Kommentare.
Lass' mich raten: OOP? :D
Preconditions, Postconditions, Invariants, und das alles in Java! Zusätzlich noch Kovarianz, Kontravarianz und Invarianz, was Java ebenfalls geflissentlich ignoriert. Herrlich. ^^
@ Fyx: Ich habe gerade "Advanced Internet Security", das ist auch so. Drei ECTS, aber 8 Mal im Semester muss man innerhalb einer Woche eine recht knifflige Übungsaufgabe lösen. Die letzten Male musste man Buffer-Overflows in gegebenen Programmen herbeiführen und ausnutzen, diesmal muss man ein bestimmtes BHO fr den IE programmieren – was als Nebeneffekt bedeutet, dass man in der einen Woche auch C++ und den Umgang mit der Microsofts API lernen muss. o_O"
Allerdings ist die LVA dafür echt interessant, und sie haben uns am Anfang extra gewarnt, dass die Anstrengungen deutlich über den 3 ECTS liegen, es also mehr eine LVA für speziell Interessierte ist. Aber bei Pflichtlehrveranstaltungen kenne ich das leider auch, ja. :-/
dead_orc
18.11.2009, 21:14
Ich habe hier gerade einige mod_rewrite Anweisungen zu fassen, die irgendwie schon fast an Programmierung rankommen:
RewriteCond $2 (\.[^.]+)$
RewriteCond ${npshare:$1|NULL}%1 ^(.*(\.[^.]+))\2$
RewriteCond %1 !NULL
RewriteRule ^files/([0-9a-f]{8})(/.*)? %1 [L]
Wer das ohne Manual versteht: Respekt!
Wen es interessiert, ich schlüssel das mal eben auf:
Es handelt sich um URLs der Form /files/1234abcd/filename.ext (wo kommen die wohl her? *hust*)
Die erste Zeile matcht von filename.ext das .ext und speichert es in einer Gruppe. Die zweite Zeile lässt das 1234abcd in einer sog. RewriteMap (http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html#rewritemap) nachgucken, hängt die in der ersten Zeile gematchte Endung an und matcht dagegen dann den Regexp ^(.*(\.[^.]+))\2$, der effektiv dafür sorgt, dass verglichen wird, ob die Rückgabe der RewriteMap die selbe Endung hat, die in der ersten Zeile gematcht wurde, und diese Rückgabe in einer neuen Gruppe speichert (auf die hinterher wieder mit %1 zugegriffen werden kann). Die dritte Zeile prüft nur noch, ob der Rückgabewert nicht NULL war (was heißt, dass nichts gefunden wurde). Falls also die Endung gleich war und überhaupt was gefunden wurde, ersetzt die vierte Zeile den Aufruf durch die Rückgabe der RewriteMap. Elegant daran: Es musste nur einmal die RewriteMap aufgerufen werden, die potentiell hohe Laufzeitkosten hat. Scheußlich daran: Die Funktionalität könnte man genau so gut in die RewriteMap selbst stopfen, weil die (zumindest bei mir) ein Script ist. Aber ich hatte gerade Spaß daran, es so zu machen. Bei genauer Betrachtung könnte ich vermutlich den Check auf !NULL weglassen… *kratz*
Naja, ich werds lieber nicht wirklich so verwenden. Denn sowas erzeugt unwartbare Projekte :D (das versteh ich ja selbst schon morgen nicht mehr)
Habt ihr auch diese Burnout-Phasen? Das ist ein Teufelskreis, man hat zwar Zeit produktiv zu werden, aber keine Lust dazu, was dazu führt, dass man aus der Burnout-Phase nicht rauskommt, da es keine Erfolgserlebnisse gibt. Von Pflichtarbeiten rede ich gar nicht, da bekommt man wenigstens "motivierende" Arschtritte.
Habt ihr auch diese Burnout-Phasen? Das ist ein Teufelskreis, man hat zwar Zeit produktiv zu werden, aber keine Lust dazu, was dazu führt, dass man aus der Burnout-Phase nicht rauskommt, da es keine Erfolgserlebnisse gibt. Von Pflichtarbeiten rede ich gar nicht, da bekommt man wenigstens "motivierende" Arschtritte.
Häufig ja :D
Ich brauch mir dann aber nur KH II oder so anzuschauen, dann hab ich wieder Lust.
makenshi
20.11.2009, 17:35
Habt ihr auch diese Burnout-Phasen? Das ist ein Teufelskreis, man hat zwar Zeit produktiv zu werden, aber keine Lust dazu, was dazu führt, dass man aus der Burnout-Phase nicht rauskommt, da es keine Erfolgserlebnisse gibt. Von Pflichtarbeiten rede ich gar nicht, da bekommt man wenigstens "motivierende" Arschtritte.
Oh ja. Daran merkt man denke ich aber auch immer wieder das Anwendungen schreiben auch was mit Kreativität zutun hat. Wäre es nur "dumpfes" abarbeiten von auswendig gelernten Logiken, wäre das denke ich kaum möglich.
Meist beenden sich diese Phasen von selbst wieder. Nur die Wartezeit ist halt schon nervig.
@Ein anderes Thema
Ich muss ehrlich sagen, ich habe eine echte Abscheu gegenüber Javascript. Ich muss damit arbeiten um eine statische Website zu erstellen. Anders wäre der Shop der dabei sein muss nur schwer zu realisieren. Wer sich nun fragt warum das? Nunja, ist eine Übungsaufgabe.
Die ganze Sprache ist ein einziger Krampf. Sie fühlt sich widerlich an. Vielleicht ist es fehlende Gewöhnung und Übung. Aber ich werd mit diesem Ding nicht warm. Selbst die simpelsten Umsetzungen darin kommen mir umständlich und "unnatürlich" vor.
Obwohl es logisch zu definieren sein müsste, kann ich es grad nicht. Mir fällt grad kein konkretes Beispiel ein. Alleinig das die Variablen keinen festen Datentyp haben fällt mir grad ein.
Vielleicht ist es fehlende Gewöhnung und Übung.
Definitiv. JavaScript ist ziemlich cool und relativ mächtig, es ist wahrscheinlich nur die bisherige fehlende Erfahrung mit Sprachen dieser Art, die dir Probleme bereitet. Persönlich habe ich JavaScript bisher nur eingebettet mit Netscapes SpiderMonkey und Googles V8 verwendet, also ohne den ganzen Webkram, die Erfahrung war aber ziemlich positiv, wenn man von einigen fehlenden Sprachkonstrukten, die man sich wünschen würde, wie etwa Modulunterstützung, und der mageren Performance (die natürlich auch mit der Implementierung zusammenhängt) absieht.
Edit: Ich kann übrigens Eloquent JavaScript (http://eloquentjavascript.net/contents.html) wärmstens empfehlen.
Klar, so was ist immer Gewöhnungssache. Ich lern gerade nebenher Haskell, teilweise find ich Zeug da bescheuert umständlich, teilweise aber auch total cool (und besser, als das in anderen Sprachen ginge).
drunken monkey
22.11.2009, 09:43
Klar, so was ist immer Gewöhnungssache. Ich lern gerade nebenher Haskell, teilweise find ich Zeug da bescheuert umständlich, teilweise aber auch total cool (und besser, als das in anderen Sprachen ginge).
Haskell ist definitiv eine coole Sprache, in den Fällen, wo sie sich eignet. :D Und auch mal eine interessante Abwechslung von der ganzen imperativen Kost…^^"
JavaScript (oder, um das Kyuu entsprechend zu unterscheiden, dessen Einbindung in HTML/DOM) mag ich hingegen überhaupt nicht, mich graust's auch jedes Mal, wenn ich's verwenden muss. <__<" Die dynamische Typisierung ist mir da eher egal, mich stört wohl vor allem die mangelnde Standardisierung / einheitliche Referenz. Z.B.: "node.value = "foo""/"node.setAttribute("value", "foo")" – was ist "richtig", bzw. wird in welchen Browsern verstanden? Nachdem sogar der IE langsam fast standardkonform wird, sollte es doch eigentlich möglich sein, die verbreitetste clientseitige Scriptsprache in halbwegs geordnete Bahnen zu pressen.
Oder gibt's da eh schon irgendwo eine gute Referenz, die wirklich alles Brauchbare abdeckt?
"node.value = "foo""/"node.setAttribute("value", "foo")" – was ist "richtig", bzw. wird in welchen Browsern verstanden?
Also richtig ist nach dem ECMAScript-Standard definitiv node.value = "foo". Ich vermute, dass die expliziten Getter/Setter verwendet werden, weil die API der zugrunde liegenden JavaScript-Engine keine impliziten unterstützt. In SpiderMonkey beispielsweise ist es möglich Getter und Setter sowohl für Klassen, als auch für Attribute zu definieren, die implizit bei einem Ausdruck der Form node.value = "foo", bzw. var bla = node.value ausgeführt werden. Ich kann mir vorstellen, dass andere Implementierungen sowas nicht unterstützen, so dass man explizite Akzessoren braucht. Das ist auch schon das Problem bei JavaScript: Es gibt viele Implementierungen, die zwar skriptseitig standardkonform sind, was die Einbettung angeht aber unterschiedlich umfangreiche APIs anbieten. Würden die Browser sich auf eine JavaScript-Engine einigen, würde es viel einheitlicher aussehen.
Habt ihr auch diese Burnout-Phasen? Das ist ein Teufelskreis, man hat zwar Zeit produktiv zu werden, aber keine Lust dazu, was dazu führt, dass man aus der Burnout-Phase nicht rauskommt, da es keine Erfolgserlebnisse gibt. Von Pflichtarbeiten rede ich gar nicht, da bekommt man wenigstens "motivierende" Arschtritte.
Ich hab grad wieder eine. Ich hab noch zig Sachen, die fertig werden sollten und bin dieses Wochenende zu exakt gar nichts gekommen. Auch nicht durch "motivierende Arschtritte". Im Gegenteil, das einzige, womit ich in den letzten Tagen voran gekommen bin, ist eine Überarbeitung der Website von ner Freundin. Da hab ich weder einen festen Zeitplan, noch krieg ich irgendeine Bezahlung, aber es ist einfach entspannend und ich weiß, dass ich damit jemanden glücklich mache.
Jesus_666
29.11.2009, 23:15
Ach ja, DFYX: Deine Signatur verstößt ja mal voll gegen Wikipedia:Notability (http://en.wikipedia.org/wiki/Wikipedia:Notability) und hat außerdem [citation needed], also schlage ich eine schnelle Löschung vor. Ist gerade ein Administrator zur Hand?
Soll ich eine Poll über den Löschantrag anhängen? :D
Jesus_666
29.11.2009, 23:48
Traditionell müßten wir jetzt drüber diskutieren und ein Admin löscht dann alle Gegenstimmen aus der Diskussion, sofern sie nicht sowieso gleich mit Verweisen auf Wikipedia:NPOV, Wikipedia:EFLA, Wikipedia:NAMBLA und Wikipedia:LMAA (und noch 20 weiteren solcher Seiten) zugeschüttet werden.
Lass mal bitte die Landschaftsarchitekten da raus. Ich bin schon bei obskurer Architektur fast durchgefallen, wie soll ich da bitte mit Gartenbau zurecht kommen?
Hö!
Javafrage:
Mal eine Frage, wenn ich ein String zu einem Double (z.B.) wandeln will, kann ich einfach Datentyp.valueOF(string) nehmen oder?
Bzw, funzt das auch wenn ich sowas haben wie:
bla = Double.valueOF(BufferedReader.readline);
Geht das so? der Jikes-Compiler sagt mir da etwas, der Java-Compiler nicht, verwundert mich ein wenig. (Und es nervt, das wir immernoch keine Gui-Programmierung haben, zurzeit ist Objektorientierung das große Thema, wofür ich auch grad was aus Spaß mache).
Ich denke, korrekt müsste Double.parseDouble(string) sein. Das eine gibt dir halt ein Double, das andere ein double. Kommt ganz drauf an, was von beidem du brauchst.
Edit:
Und natürlich Double.valueOf, nicht Double.valueOF.
uuups, klar, value.Of xD (Doofe Laptop-Tastatur, ich sollte lernen damit umzugehen xD).
Jedenfalls danke, an parse habe ich auch gedacht, war mir aber da überhaupt nicht sicher, wieder was gelernt^^
Test, ob man "Coding for Fun mit C++" kaufen sollte (http://www.galileocomputing.de/buchscanner/ergebnis?suchString=Rheinwerkallee&titelID=2259)
Grade mit der Volltextsuche von Galileo Press drauf gestoßen. Besonders Antwort d) bei der ersten Frage find ich cool.
(Datei durch Suchseite ersetzt, jetzt isses rechtlich definitiv kein Problem mehr)
Edit: im übrigen reichen allein die Wörter von dieser Seite aus, um der Suchfunktion ca. 200 verschiedene Seiten aus dem Buch zu entlocken. Ich sollte mir ein Programm schreiben, das das mit allen Galileo Press Büchern so macht.
dead_orc
13.12.2009, 11:06
Test, ob man "Coding for Fun mit C++" kaufen sollte (http://www.galileocomputing.de/buchscanner/ergebnis?suchString=Rheinwerkallee&titelID=2259)
Grade mit der Volltextsuche von Galileo Press drauf gestoßen. Besonders Antwort c) bei der ersten Frage find ich cool.
Ich finde Antwort d) cooler. :p
(Da die Datei frei im Netz verfügbar ist und ich kein Hotlinking betreibe, sollte das ok sein. Wenn nicht, bitte entfernen oder mich benachrichtigen)
Naja, guck mal ganz unten in das Bild. Ein (C) ist ziemlich eindeutig, auch bei frei im Netz verfügbaren Dateien... Ich werd die Datei aber erstmal nicht löschen und gucken, was die Mods sagen. ^^
Moderation: Link auf DFYX' Anraten durch rechtlich sicherere Alternative ersetzt.
– Jeez
Ich finde Antwort d) cooler. :p
Mein ich doch... zu müde gewesen und so.
Edit: habe jetzt stattdessen mal auf die Suchergebnisseite verlinkt und Jeez gebeten, das in deinem Post auch zu ändern.
Doppelpost!
Skript ist geschrieben und funktioniert. Allerdings werde ich das nicht hier posten, bevor der Verlag informiert wurde, dass das geht. Wenn es jemand haben will, PN oder Messenger. Benutzung ist dann auf eigene Gefahr.
dead_orc
04.01.2010, 19:14
Ich glaub mich tritt n Pferd. Gerade in der Tagesschau gehört: Seit Jahresbeginn können viel Commerz- und Postbankkunden kein Geld mehr mit ihrer EC-Karte abheben, weil der Chip darauf mit dem Datum 2010 nicht klarkommt. WTF?
Ich meine: Y2K-Bug, okay. Das wäre verständlich und ist ja quasi nicht aufgetreten. Aber dass ein Jahrzehntwechsel sowas wichtiges wie ne EC-Karte außer Kraft setzen kann... <_<
NPC Fighter
04.01.2010, 20:06
Nicht nur das. Mein "Smart"phone glaubt, dass die obligatorischen Neujahrs-SMS aus dem Jahr 2016 gekommen sind.
Whiz-zarD
04.01.2010, 20:55
Gibt es dafür Gründe, wie sowas passieren kann? O_o
Ich kann die Zahlen in verschiedene Systeme konvertieren und drehen, wie ich will, ich sehe aber nichts, was wie ein Speicherüberlauf oder dergleichen aussehen könnte.
dead_orc
05.01.2010, 10:23
Gibt es dafür Gründe, wie sowas passieren kann? O_o
Ich kann die Zahlen in verschiedene Systeme konvertieren und drehen, wie ich will, ich sehe aber nichts, was wie ein Speicherüberlauf oder dergleichen aussehen könnte.
Ich muss bei dem von NPC geschilderten Problem irgendwie daran denken, dass das Jahr als 2-stellige Dezimalzahl gespeichert wird und dann als Hex ausgelesen wird (1016 = 1610 und so), aber ich kann mir nicht im Entferntesten Vorstellen, warum man sowas machen sollte. o_O
Was die EC-Karten angeht: Vielleicht wurde vor 10 Jahren mal ein Check in die Software auf dem Chip eingebaut, um das Datum auf Richtigkeit zu überprüfen, ob das Jahr auf 200? matcht und seitdem nicht verändert. Wäre vorstellbar aber trotzdem unverzeihlich, sowas einzubauen und dann nicht rechtzeitig zu entfernen...
drunken monkey
17.01.2010, 00:28
Heute schon…
- Linux-Quellcode gelesen? (http://www.100mb.nl/)
XD
Whiz-zarD
17.01.2010, 14:45
Heute schon…
- Linux-Quellcode gelesen? (http://www.100mb.nl/)
XD
Du hast mich auf eine ganz böse Idee gebracht http://www.multimediaxis.de/images/smilies/old/s_044.gif
Eigentlich sollte ich für meine Marketing-Klausur üben aber stattdessen sitz ich hier seit ein paar Stunden und bastel an so einem Bild-to-Text-Generator
Hier ein Ergebnis (Mit Lorem Ipsum Text) (http://whiz-zard.bplaced.net/upload/asd.html)
Jesus_666
17.01.2010, 15:21
Das Ding sollte das Bild vorher in die Breite ziehen, um auszugleichen, daß deine "Pixel" nicht quadratisch sind.
dead_orc
17.01.2010, 15:31
Das hatten wir hier doch schon als den berühmten "Mona-Lisa-Contest" (http://www.multimediaxis.de/showthread.php?t=68756) (der leider gerade wegen zu niedriger PHP-Memory-Grenze nicht angezeigt werden kann :p)
(der leider gerade wegen zu niedriger PHP-Memory-Grenze nicht angezeigt werden kann :p)
Jetzt schon. Aber was ballert ihr da auch so bescheuert viele BBCodes rein :P
Whiz-zarD
17.01.2010, 15:44
Das Ding sollte das Bild vorher in die Breite ziehen, um auszugleichen, daß deine "Pixel" nicht quadratisch sind.
So sollte es besser passen ^^ (http://whiz-zard.bplaced.net/upload/asd2.html)
Hab grade ARToolKit (http://www.hitl.washington.edu/artoolkit/) gezeigt bekommen. Lustiges Spielzeug. Ne schöne Demo zu der Bibliothek ist ARTK_MMD (http://ppyy.hp.infoseek.co.jp/artk_mmd.html), aber die Beispiele, die dabei sind, sind auch schon ganz nett.
nudelsalat
19.01.2010, 18:17
Sehr freakig, hut ab. :D:A
Hab noch ein bisschen damit rumgespielt und muss sagen, es ist richtig cool. Lege ich jedem ans Herz, der ein bisschen Ahnung von OpenGL und eine Webcam hat.
Btw: Muss ich mir Gedanken machen, wenn mich Luki bittet, eine RPG Maker 2003 Map für ihn zu bearbeiten und ich einen Hexeditor nehme, statt den passenden Maker zu installieren?
Btw: Muss ich mir Gedanken machen, wenn mich Luki bittet, eine RPG Maker 2003 Map für ihn zu bearbeiten und ich einen Hexeditor nehme, statt den passenden Maker zu installieren?
Nein, das ist ganz normaler Wahnsinn.
Google beginnt, den IE6-Support einzustellen. (http://googleenterprise.blogspot.com/2010/01/modern-browsers-for-modern-applications.html)
Nein, das ist ganz normaler Wahnsinn.
Dito. Ich patche auch schon mal meine eigenen Tools mit einem Hex-Editor, wenn ich wo einen Schreibfehler finde aber den Source gerade verlegt habe :D
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int main(int argc, char* argv[]) {
char* buffer = NULL;
buffer = (char*)malloc(1024);
memset(&buffer, 0, 1024);
printf("blah blah\n");
return 0;
}
Ähnliches, hervorgerufen durch copy & paste, ist mir vor kurzem in einem größeren Programm mit Dateioperationen passiert. Glücklicherweise aber schnell entdeckt. :|
Ähnliches, hervorgerufen durch copy & paste, ist mir vor kurzem in einem größeren Programm mit Dateioperationen passiert. Glücklicherweise aber schnell entdeckt. :|
Mein C ist nicht so wirklich gut, aber lese ich richtig das "&Buffer" das Problem ist? Weil es ist ja ein Pointer und so
Whiz-zarD
16.02.2010, 16:41
calloc() macht doch das selbe, was du gemacht hast.
Brauni90
16.02.2010, 17:37
calloc() macht doch das selbe, was du gemacht hast.
Schau dir die Verwendung von memset nochmal genauer an ;)
dead_orc
16.02.2010, 17:40
Mein C ist nicht so wirklich gut, aber lese ich richtig das "&Buffer" das Problem ist? Weil es ist ja ein Pointer und so
Dein C ist offensichtlich besser als meins: Ich dachte nur "na toll, wird gar nicht ge-free()-t".
calloc() macht doch das selbe, was du gemacht hast.
Tut es, und ich frage mich, warum immer malloc() verwendet wird. Kann mir das wer erklären?
drunken monkey
16.02.2010, 17:54
Tut es, und ich frage mich, warum immer malloc() verwendet wird. Kann mir das wer erklären?
Naja, solange du den Speicher nicht genullt brauchst, ist calloc() halt unnötiger Mehraufwand. Andernfalls ist's aber echt eine gute Frage. ^^" Gewohnheit wohl, und die Tatsache, dass es meist nicht viel Unterschied macht, performanztechnisch.
@ Whiz: Er hat ja geschrieben, "Ähnliches", ist im Original also vielleicht eh sinnvoller, bzw. nicht der Punkt.
Whiz-zarD
16.02.2010, 18:20
Tut es, und ich frage mich, warum immer malloc() verwendet wird. Kann mir das wer erklären?
Ich denke, das hat wohl was damit zu tun, dass C für Unix gedacht war und Unix generell den Speicher mit Nullen belegt. Da macht es keinen Unterschied, ob malloc() oder calloc(). Nur unter Windows muss man da höllisch aufpassen. Auch wenn man den Speicher nicht genullt braucht, würde ich es dennoch machen. Schaden kann es nicht.
Jesus_666
16.02.2010, 18:46
Daß malloc() den Speicher nullt ist auch unter Unix nicht garantiert. Die meisten oder alle neueren Unixe machen es zwar so, aber garantiert ist es absolut nicht.
Brauni90
16.02.2010, 18:51
Tut es, und ich frage mich, warum immer malloc() verwendet wird. Kann mir das wer erklären?
In einigen Faellen ist es aufgrund des Zeitbedarfs einfach besser, malloc anstatt calloc zu verwenden.
Whiz-zarD
16.02.2010, 19:21
In einigen Faellen ist es aufgrund des Zeitbedarfs einfach besser, malloc anstatt calloc zu verwenden.
Naja, der Zeitbedarf ist doch recht minimal, sodass man ihn schon quasi vernachlässigen kann.
Der Zeitunterschied zwischen den beiden Funktionen, bei 1.000.000 Blöcken a 1 MB Plus Freigeben des Speichers liegt, bei meinem Rechner, bei 124 ms.
Ich besitze einen Intel C2D E6600 (2x 2,4 Ghz) und 2 GB RAM.
Da gibt es eigentlich kein Optimierungspotenzial.
Brauni90
16.02.2010, 19:40
Naja, der Zeitbedarf ist doch recht minimal, sodass man ihn schon quasi vernachlässigen kann.
Der Zeitunterschied zwischen den beiden Funktionen, bei 1.000.000 Blöcken a 1 MB Plus Freigeben des Speichers liegt, bei meinem Rechner, bei 124 ms.
Ich besitze einen Intel C2D E6600 (2x 2,4 Ghz) und 2 GB RAM.
Da gibt es eigentlich kein Optimierungspotenzial.
Das entspricht einem Mindestdatendurchsatz von etwa 7,7TiB/s, wenn ich mich nicht verrechnet habe Oo. Ein weltweites Text- oder Bildbearbeitungsprogramm zaehlt jedenfalls nicht zu "In einigen Faellen".
Whiz-zarD
16.02.2010, 20:16
hab jetzt mal alle Programme geschlossen und mein Testprogramm durchlaufen lassen.
nun liegt der Unterschied sogar bei nur 47 ms.
1000000 mal 1048576 Bytes reservieren und freigeben
Zeit von malloc: 35047 ms
Zeit von calloc: 35000 ms
Zeitunterschied: 47 ms
Mein C ist nicht so wirklich gut, aber lese ich richtig das "&Buffer" das Problem ist? Weil es ist ja ein Pointer und so
Ja, richtig. Die interessantere Frage ist aber nicht wo die Ursache ist, sondern was genau dabei passiert. Da es eine lokale Variable auf dem Call Stack ist, wird dieser überschrieben und damit alle im Stack folgenden Rücksprungadressen, Funktionsparameter, etc. Kurz gesagt, Katastrophe. In diesem Fall ist es sogar noch schlimmer, da ohne Debugger das Programm an der Stelle der früher oder später resultierenden Zugriffsverletzung still beendet ("bla bla" wird nicht ausgegeben), ohne auf das Fehlverhalten mit einer entsprechenden Ausnahmebehandlung zu reagieren.
@ Whiz: Er hat ja geschrieben, "Ähnliches", ist im Original also vielleicht eh sinnvoller, bzw. nicht der Punkt.
Ursprünglich war es wie erwähnt eine Dateioperation, fread um genau zu sein. memset sollte wirklich nur dem Vorführungszweck dienen.
[...] Auch wenn man den Speicher nicht genullt braucht, würde ich es dennoch machen. Schaden kann es nicht.
Da würden dir die C-Entwickler vermutlich etwas anderes sagen. Redundanz im Zeichen der Fehlerreduzierung entspricht zum Beispiel nicht der C-Philosophie.
Die Frage, ob man auf malloc verzichten sollte erinnert mich an die Frage, ob man auf goto verzichten sollte. Hierzu:
In computer science:
1st years don't use goto
2nd years use goto in assembly language
3rd years use goto when goto is needed.
Besonders in C hat goto einen festen Platz und vereinfacht oft den Code, wie zum Beispiel in der Ausnahmebehandlung. Ähnlich verhält es sich mit malloc und calloc. Beide haben Vor- und Nachteile, die je nach Situation andere Gewichtung haben können. Verdammen ist ist in meinen Augen nie gut und schädlicher als fragliche Anwendung.
hab jetzt mal alle Programme geschlossen und mein Testprogramm durchlaufen lassen.
nun liegt der Unterschied sogar bei nur 47 ms.
Ohne Code sind diese Resultate nicht wirklich repräsentativ. Man kann auf eine Weise messen und auf eine andere mit jeweils völlig unterschiedlichen Ergebnissen. Entscheidend wären beispielsweise, Granularität, Mittelwertbildung mehrerer Messwerte um Abweichungen durch Interrupts und ähnliches zu minimieren, Reduzierung auf die Messung der tatsächlichen Arbeit (free ist ein Störfaktor), usw.
Ich habe mal einige Messungen auf meinem Pentium D 2.8 Ghz gemacht und bei mir braucht malloc für 1 MB im Schnitt (10 Messungen hintereinander) etwa 12500 clock cycles (entspricht etwa 4.46 us bei 2.8 Ghz) und calloc etwa 13500 clock cycles (etwa 4.82 us). Damit ist calloc um 8% langsamer als malloc. Nicht viel, aber viel hat man hier auch nicht erwartet, denn Nullsetzung ist sehr billig und in heutigen Zeiten in der Regel SIMD-optimiert. Natürlich erhebe ich keinen Anspruch, dass auch meine Messungen 100%-ig repräsentativ und fehlerfrei sind. Jedenfalls gibt es einen Unterschied, der in manchen Situationen sogar größer sein kann und damit eventuell abgewogen werden könnte, wie zum Beispiel auf Systemen ohne SIMD, wenigen und kleinen Caches etc.
Jesus_666
16.02.2010, 23:26
Verdammen ist ist in meinen Augen nie gut und schädlicher als fragliche Anwendung.
Stellt sich die Frage, ob du auch noch sprintf() benutzt. Das ist ja bekanntermaßen eine gute Möglichkeit, unkontrolliert Speicher zu überschreiben und viele empfehlen, stattdessen snprintf() (bei C99-fähigen Compilern) oder asprintf() (bei GNU GCC) zu verwenden. Zugegeben, die sind vermutlich beide langsamer, aber solange man nicht per (semi-)formellem Beweis nachweisen will, daß der Puffer nicht überlaufen kann, stellen sie auch Schutz vor einem potentiellen Sicherheitsrisiko dar.
Hängt von den Softwarekriterien ab.
drunken monkey
17.02.2010, 19:40
Also gut, ich verwende eigentlich automatisch schon snprintf() (auch wenn ich praktisch nie C programmiere), aber teilweise würde ich sehr wohl auch sprintf() für gerechtfertigt halten. Z.B. wenn man nur Integers in einen String schreibt – länger als 11/20 Stellen (je nach Größe) können die ja nicht werden. Genauso wenn man bei allen Wildcards auch die Maximallänge angibt (bei Strings halt – floats sind wohl echt problematisch).
"Verdammen" wäre da vielleicht auch falsch, selbst wenn es allgemein auch kaum schaden wird, einfach immer die sichereren Varianten zu benutzen.
Jesus_666
17.02.2010, 20:36
Interessant wird's dann aber, wenn man in weiser Voraussicht den String auf 11 Stellen dimensioniert hat, weil der Code ja eh nur auf 32bittigen Plattformen zum Einsatz kommt. Und dann kommt plötzlich eine source-kompatible 64bittige Version der Plattform raus oder jemand portiert den Code.
Das ist (sicherheitstechnisch) das Blöde bei C: Die einzige Sicherheit, die du hast, ist die, die du einbaust. Das ist ein Grund, lieber defensiv zu programmieren als die letzten 0,1% Leistung rauszukitzeln.
Wie gesagt, am Ende kommt es immer auf die Anforderungen der Software an, die man programmiert. Es ist genauso falsch an den falschen Stellen zu optimieren, wie auch zu optimistisch, oder zu pessimistisch zu programmieren. Hundertprozentige Sicherheit gibt es sowieso nie.
Jesus_666
18.02.2010, 02:32
Doch, gibt es. Sie nennt sich "EAL7-Zertifizierung". Gut, dafür mußt du sämtliche Software und IIRC auch Teile der Hardware formell verifizieren und testen. Aber dann kannst du dir absolut sicher sein, daß jegliche Fehler Hardwaredefekte und nicht Implementierungsfehler sind.
Okay, als Normalsterblicher wirst du nicht mit EAL7-Kram arbeiten. Aber du solltest schon wissen, wann du wo welche Risiken eingehen kannst. Ich würde mir wohl nicht die Mühe machen, bei jedem Befüllen eines Strings abzuwägen, ob es theoretisch möglich ist, den String mit zu vielen Daten zu befüllen – nicht, wenn es Funktionen gibt, die diese Mühe überflüssig machen.
Man kann's natürlich übertreiben, aber solange der Performanceverlust durch Verwendung von sprintf()-Alternativen nicht zu groß ist, würde ich sie grundsätzlich verwenden. Und das dürfte außerhalb von synthetischen Benchmarks immer der Fall sein.
Die CC ist auch keine Silberkugel und unangreifbar. Du kannst dich an absolute Sicherheit annähern, sie aber nie erreichen. Mit jedem erreichten EAL kannst du deine Software als "sicherer", oder als "zur Zeit sicher gegen dies und das" bezeichnen, aber nie als "sicher". Die Hardware spielt IMO auch eine entscheidende Rolle bei der Frage nach der Sicherheit eines Systems. Übrigens habe ich mal irgendwo gelesen, dass EAL7 für Low Level-Implementation nur semi-formelle Spezifikation fordert, so dass es keinen mathematischen Beweis gibt, dass die Low Level-Spezifikation der Implementation entspricht. Dass EAL7 nur für sehr spezielle Systeme mit sehr speziellen Sicherheitsfunktionen überhaupt praktikabel ist, da der Aufwand und die daraus resultierenden Kosten enorm sind, ist bekannt. Naja, ich bleibe dabei, dass absolute Sicherheit - und ich meine absolut - nicht möglich ist. Ich meine mich zudem zu erinnern gelesen zu haben, dass selbst bei der medizinischen Ausrüstung (und anderer Technik mit ähnlichen Sicherheitsstandards) nicht mit absoluter Fehlerfreiheit gerechnet wird und Todesfälle verursacht durch Fehler in diesen Geräten sowohl in Kauf genommen werden (wenn auch minimal), als auch schon vorgekommen sind.
Was sprintf angeht, überrascht es mich ein wenig, dass du nur die Performance, oder gerade die Performance in Betracht ziehst, da diese kaum bei der sprintf-Familie relevant sein kann. Ich kann mir jedenfalls nicht vorstellen aus welchem sinnvollen Grund sprintf und co. etwas in performancekritischen Bereichen zu suchen hätten. Vielmehr würde ich speziell bei snprintf/asprintf argumentieren, dass ihre Verwendung zusätzlichen Aufwand und damit Komplexität erzeugt in dem Fall, wenn man sich nicht auf einen Compiler beschränken möchte. MSVC ist zum Beispiel nicht C99-konform und hat keine snprintf-Implementation. Nun bietet MSVC zwar sein eigenes snprintf, nämlich _snprintf (was hätte man anderes erwartet), dieses ist aber semantisch von C99-snprintf verschieden -> Aufwand ist notwendig um hier Plattformunabhängigkeit zu erreichen. Man könnte argumentieren, dass dieser Aufwand relativ gering ist, es bleibt trotzdem Aufwand, der betrieben werden muss. IIRC ist das Trimmen von _snprintf auf C99-snprintf aus dem Grund der semantischen Unterschiede sogar nicht so effizient wie man es erwarten würde und würde im Worst Case viele Aufrufe erfordern, was vielleicht nicht wünschenswert ist. Wenn die Software klein genug ist und das Risiko, dass sprintf einen Überlauf verursacht gering ist und nur in Grenzfällen eintreten kann, wie etwa wie in deinem Beispiel mit der Portierung auf 64 Bit, kann man dieses durchaus in Kauf nehmen. Man kann auch mit größerem Buffer arbeiten, was absolut nicht unüblich ist. Ein Wechsel von sprintf zu snprintf/asprintf/_snprintf/etc. ist zu jedem Zeitpunkt immernoch möglich. Ich habe gelernt, dass vorzeitige Paranoia genauso schädlich ist, wie vorzeitige Optimierung und ähnliches Übel und Schritte in diese Richtungen erst gemacht werden sollten, wenn ein Anlass besteht. Es gibt natürlich Ausnahmen.
Im Übrigen bin ich alles andere als der Meinung, Performance geht über Stabilität und Sicherheit, falls (aus welchem Grund auch immer) bei irgendwem dieser Eindruck entstanden sein sollte. Um ehrlich zu sein, habe ich doch bis jetzt immer wieder auf eine oder andere Art betont, dass immer abgewogen werden sollte, je nach Situation und Anforderungen. Ich bin aber definitiv der Meinung, dass nicht vorschnell Dinge als impraktikabel erklärt werden sollten, allein aufgrund dessen, dass sie unter bestimmten Voraussetzungen unsicher sind. "sicher" erweckt meiner Meinung nach sowieso ein falsches Gefühl der Sicherheit, denn um überhaupt nur entfernt von Sicherheit zu reden ist weit mehr nötig, als nur calloc oder snprintf und co. zu verwenden. Davon abgesehen, dass calloc kaum als "sichere Variante von malloc" gedacht war, sondern vermutlich nur als "die bequeme Variante", im Fall, dass der erhaltene Speicher genullt sein muss. Im Fall von Gleitpunktzahlen und Zeigern ist calloc schonmal keine Silberkugel, denn alle Bits auf Null gesetzt, bedeutet nicht eine Gleitpunktzahl gleich Null, oder einen Nullzeiger, man hat also das gleiche Problem wie in deinem Beispiel mit sprintf und der Portierung auf 64 Bit.
Jesus_666
18.02.2010, 14:51
C99 ist immer noch nicht flächendeckend implementiert? Oy vey; ich weiß schon, warum ich mich von lowlevel-Programmierung fern halte.
Ein kurzer Codeschnipsel, den ich mit euch teilen möchte:
#!/bin/bash
SENDMAIL="/usr/sbin/sendmail -t"
NAME=list@example.com
TO="person1@example.com, person2@example.com, person3@example.com"
sed -r ";s/^Reply-to:.*$//i;s/^To:.*$/To: $NAME\nBcc: $TO\nReply-to: $NAME/i" - | $SENDMAIL
Was macht das Ganze? Es ist sowas wie ein möglichst simpler Ersatz für eine Mailing List. Mit folgender Procmail Regel werden eingehende Mails an list@example.com an alle Adressen, die unter TO eingetragen sind, weitergeleitet und das Reply-To Feld so gesetzt, dass man bequem auf Antworten klicken kann.
#Mailverteiler
:0H
* !^Reply-to: list@example.com
* ^TO_list@example.com
| /home/person1/mailforward.sh
Die Zeile mit dem Ausrufezeichen ist da, damit das Ganze keine Endlosschleife gibt. Wenn ihr nicht wollt, dass die Mails archiviert werden, fügt einfach noch eine weitere Regel hinzu, die alles, was Reply-to: list@example.com enthält, nach /dev/null schiebt.
Noch einfacher wäre das Ganze, wenn man Sendmail beibringen könnte, das Bcc: Feld zu beachten, das To: Feld aber nicht. Leider gehen nur beide oder keins und für BCC scheint es keinen Kommandozeilenparameter zu geben.
dead_orc
23.02.2010, 09:46
Du kannst das ganze doch auch einfacher machen, und die Empfänger einfach als Argument zu sendmail übergeben, oder? o_O
Dann rewritest du vielleicht noch den Reply-To Header, damit die Menschen, die zu blöd sind, auf "Reply to all" zu klicken, trotzdem zu ihrem Glück kommen. Beim sendmail-Aufruf entfernst du das -t und machst hinten aus $SENDMAIL ein $SENDMAIL $TO (ich glaube, dann musst du die Kommata in $TO aber weglassen)
Der Punkt ist, die Leute sollen ja nicht allen einzeln antworten, sondern der Verteileradresse. Deshalb steht die im Reply-to Feld. Die einzelnen Empfänger stehen schon absichtlich in Bcc, nicht in To.
dead_orc
23.02.2010, 11:03
Der Punkt ist, die Leute sollen ja nicht allen einzeln antworten, sondern der Verteileradresse. Deshalb steht die im Reply-to Feld. Die einzelnen Empfänger stehen schon absichtlich in Bcc, nicht in To.
Mir ist die Funktionsweise einer Mailadresse durchaus klar. Wenn du sendmail die Empfänger auf der cmdline übergibst, schreibt dieses sie aber auch nicht ins To. Wenn aber die ursprüngliche Mail an list@domain.tld und außerdem noch person@example.com ging, obwohl person@example.com nicht in der Liste ist, sollte eine Antwort auf die Mail auch an person@example.com (und natürlich die Liste) gehen, oder? Daher sollte das ursprüngliche To nicht modifiziert werden.
Wenn du sendmail die Empfänger auf der cmdline übergibst, schreibt dieses sie aber auch nicht ins To.
Ah, der Teil war mir nicht bewusst. Dann macht das mehr Sinn, wird allerdings auch etwas mehr Aufwand.
Mich würde mal interessieren, ob jemand außer mir auch mit dem Problem zu kämpfen hat, gezwungen zu sein immer wieder den Code umzuschreiben, wenn einem ein treffenderer Name für eine Routine, eine bessere Namenskonvention, oder eine bessere Formulierung für einen Kommentar einfällt (von besseren Problemlösungsansätzen ganz zu schweigen...)? Oft ist es sogar so, dass ich immer wieder von einem Ansatz zum anderen wechsle, da zwar beide ausgewogene Vor- und Nachteile haben, die Vorteile des aktuell anderen Ansatzes aber immer zu überwiegen scheinen. Irgendwann schaffe ich es zwar, mich zusammenzureißen und einen Weg zu gehen, aber der Weg dahin ist mühsam. Das ist zum Kotzen, denn damit verbringe ich etwa 50% (wenn nicht mehr) der gesamten Zeit beim Programmieren. Das hat natürlich auch damit etwas zu tun, dass ich mir mein eigener Chef bin und aus dem Grund keine klaren Anweisungen habe, mich an etwas zu halten, aber ich denke, es hat auch einen nicht unwesentlichen Teil mit fehlender Erfahrung und Routine zu tun.
Oh Mann... ich bin so froh, wenn die Klausurenphase rum ist. Ich muss für morgen die Abschlusspräsentation von unserem Routenplanerprojekt fertig machen und bis Montag für die Betriebssysteme Klausur lernen. Naja, immerhin hat der Prof bei letzterem Humor:
Operating System Definition
OS is a resource allocator
Manages all resources
Decides between conflicting requests for efficient and fair resource use
OS is a control program
Controls execution of programs to prevent errors and improper use of the computer
Everything a vendor ships when you order an operating system
=> No universally accepted definition
Ich hab das Gefühl, dass der von mir hervorgehobene Punkt ein kleiner Seitenhieb auf Microsoft sein soll.
Xardas der Dunkle
24.03.2010, 18:06
Mich würde mal interessieren, ob jemand außer mir auch mit dem Problem zu kämpfen hat, gezwungen zu sein immer wieder den Code umzuschreiben, wenn einem ein treffenderer Name für eine Routine, eine bessere Namenskonvention, oder eine bessere Formulierung für einen Kommentar einfällt (von besseren Problemlösungsansätzen ganz zu schweigen...)? Oft ist es sogar so, dass ich immer wieder von einem Ansatz zum anderen wechsle, da zwar beide ausgewogene Vor- und Nachteile haben, die Vorteile des aktuell anderen Ansatzes aber immer zu überwiegen scheinen. Irgendwann schaffe ich es zwar, mich zusammenzureißen und einen Weg zu gehen, aber der Weg dahin ist mühsam. Das ist zum Kotzen, denn damit verbringe ich etwa 50% (wenn nicht mehr) der gesamten Zeit beim Programmieren. Das hat natürlich auch damit etwas zu tun, dass ich mir mein eigener Chef bin und aus dem Grund keine klaren Anweisungen habe, mich an etwas zu halten, aber ich denke, es hat auch einen nicht unwesentlichen Teil mit fehlender Erfahrung und Routine zu tun.
Das ist bei mir normal Zustand.
Ich habe mein CMS schon tausend mal umgeschrieben ... vor kurzem habe ich mich z.B. mal einfach so dazu entschlossen es auf PHP-5.3 inkl. Namespaces umzustellen ... :p.
Und sogar auf der Arbeit ist es häufig so. "Das Modul ist scheiße das müssen wa mal neu machen" :D.
Ah, immerhin einer. :D Wobei bei mir es meistens eher Kleinigkeiten sind, was das Ganze noch ärgerlicher macht. ;)
Ich weiß nicht ob das wirklich so toll ist wie ich das denke, aber:
for(int i = 0; i < enemy.size(); i++) {
if(waveStart.get(i) < distance && waveStop.get(i) > distance) {
for(int j = 0; j < enemy.get(i).size(); j++) {
if(enemy.get(i).get(j).isAlive() && !enemy.get(i).get(j).isOutOfWindow()) {
g2d.drawImage(enemy.get(i).get(j).getImage(), enemy.get(i).get(j).getX(), enemy.get(i).get(j).getY(), this);
}
}
}
}
Ist das ein toller langer Befehl?
Was hier passiert ist dabei ziemlich einfach, für unseren vertikal Shooter haben wir die Gegner die in den einzelnen Level auftauchen in einen Array eines Arrays gepackt, der "obere" Array steht für das Level der "untere" für die Waves in denen die Gegner auftauchen.
Sprich ,die äußere Schleife kontrolliert die Nummer der Wave und die innere die Anzahl der Gegner der Wave.
Innen wird also nur der Gegner gezeichnet und für mich ist das schon ein ziemlich großer Schritt x_X
So, ich hab clang (http://en.wikipedia.org/wiki/Clang) auf meinem Mac installiert. Irgendwie sind das viel angenehmere Fehlermeldungen, als mit dem gcc.
Ich weiß nicht ob das wirklich so toll ist wie ich das denke, aber:
for(int i = 0; i < enemy.size(); i++) {
if(waveStart.get(i) < distance && waveStop.get(i) > distance) {
for(int j = 0; j < enemy.get(i).size(); j++) {
if(enemy.get(i).get(j).isAlive() && !enemy.get(i).get(j).isOutOfWindow()) {
g2d.drawImage(enemy.get(i).get(j).getImage(), enemy.get(i).get(j).getX(), enemy.get(i).get(j).getY(), this);
}
}
}
}
Ist das ein toller langer Befehl?
Was hier passiert ist dabei ziemlich einfach, für unseren vertikal Shooter haben wir die Gegner die in den einzelnen Level auftauchen in einen Array eines Arrays gepackt, der "obere" Array steht für das Level der "untere" für die Waves in denen die Gegner auftauchen.
Sprich ,die äußere Schleife kontrolliert die Nummer der Wave und die innere die Anzahl der Gegner der Wave.
Innen wird also nur der Gegner gezeichnet und für mich ist das schon ein ziemlich großer Schritt x_X
Wofür ist die Variable "distance" da? Wie weit die Gegner"welle" von uns, also dem Shooter, entfernt ist?
dead_orc
28.03.2010, 09:58
Ich weiß nicht ob das wirklich so toll ist wie ich das denke, aber:
for(int i = 0; i < enemy.size(); i++) {
if(waveStart.get(i) < distance && waveStop.get(i) > distance) {
for(int j = 0; j < enemy.get(i).size(); j++) {
if(enemy.get(i).get(j).isAlive() && !enemy.get(i).get(j).isOutOfWindow()) {
g2d.drawImage(enemy.get(i).get(j).getImage(), enemy.get(i).get(j).getX(), enemy.get(i).get(j).getY(), this);
}
}
}
}
Ist das ein toller langer Befehl?
Was hier passiert ist dabei ziemlich einfach, für unseren vertikal Shooter haben wir die Gegner die in den einzelnen Level auftauchen in einen Array eines Arrays gepackt, der "obere" Array steht für das Level der "untere" für die Waves in denen die Gegner auftauchen.
Sprich ,die äußere Schleife kontrolliert die Nummer der Wave und die innere die Anzahl der Gegner der Wave.
Innen wird also nur der Gegner gezeichnet und für mich ist das schon ein ziemlich großer Schritt x_X
Du könntest den Code grandios vereinfachen, wenn du enemy.get(i).get(j) in einer neuen Variable speicherst. Hat nebenbei noch den Vorteil, dass die Methoden nur einmal ausgeführt werden und das Programm dadurch wahrscheinlich schneller wird. Und lesbarer...
Whiz-zarD
28.03.2010, 11:28
for(int i = 0; i < enemy.size(); i++) {
if(waveStart.get(i) < distance && waveStop.get(i) > distance) {
for(int j = 0; j < enemy.get(i).size(); j++) {
if(enemy.get(i).get(j).isAlive() && !enemy.get(i).get(j).isOutOfWindow()) {
g2d.drawImage(enemy.get(i).get(j).getImage(), enemy.get(i).get(j).getX(), enemy.get(i).get(j).getY(), this);
}
}
}
}
Muss er unbedingt die kompletten For-Schleifen durchlaufen?
Die Innere Schleife wird ja nur dann ausgeführt, wenn die Bedingung waveStart.get(i) < distance && waveStop.get(i) > distance erfüllt ist.
Wenn die Bedingung einmal nicht erfüllt wurde, kann sie dann nochmal erfüllt werden?
Wenn nein, würde ich eine While-Schleife nehmen oder sogar den Teil zu einer Rekursion umbauen.
dead_orc
28.03.2010, 11:40
Muss er unbedingt die kompletten For-Schleifen durchlaufen?
Die Innere Schleife wird ja nur dann ausgeführt, wenn die Bedingung waveStart.get(i) < distance && waveStop.get(i) > distance erfüllt ist.
Wenn die Bedingung einmal nicht erfüllt wurde, kann sie dann nochmal erfüllt werden?
Wenn nein, würde ich eine While-Schleife nehmen oder sogar den Teil zu einer Rekursion umbauen.
Warum nicht einfach die if-Bedingung in den for-Kopf integrieren? Dann hast du den Komfort der for-Schleife ohne unnötige Durchläufe (falls deine Annahme zutrifft).
So, ich hab clang (http://en.wikipedia.org/wiki/Clang) auf meinem Mac installiert. Irgendwie sind das viel angenehmere Fehlermeldungen, als mit dem gcc.
Liefert OS X doch bei den Developer Tools eh schon mit …
Aber, ja, clang rockt. Und der in Xcode eingebaute static analyzer, der auf clang basiert, ist auch ziemlich cool.
Liefert OS X doch bei den Developer Tools eh schon mit …
Ach, Tatsache, jetzt hab ichs gefunden. Mal wieder in einem Ordner, der nicht in PATH liegt, deshalb bin ich davon ausgegangen, dass es nicht da ist.
*selbstkompiliertes clang wieder runter werf*
Edit: Und direkt /Developer/usr/bin mit in PATH schmeißen
Wofür ist die Variable "distance" da? Wie weit die Gegner"welle" von uns, also dem Shooter, entfernt ist?
Achso ja, das dient als Abstand zwischen den einzelnen Waves.
Du könntest den Code grandios vereinfachen, wenn du enemy.get(i).get(j) in einer neuen Variable speicherst. Hat nebenbei noch den Vorteil, dass die Methoden nur einmal ausgeführt werden und das Programm dadurch wahrscheinlich schneller wird. Und lesbarer...
Geht das bei Vektoren? enemy ist nämlich ein Vektor (Ja ich hab array geschrieben .____.)
Muss er unbedingt die kompletten For-Schleifen durchlaufen?
Die Innere Schleife wird ja nur dann ausgeführt, wenn die Bedingung waveStart.get(i) < distance && waveStop.get(i) > distance erfüllt ist.
Wenn die Bedingung einmal nicht erfüllt wurde, kann sie dann nochmal erfüllt werden?
Wenn nein, würde ich eine While-Schleife nehmen oder sogar den Teil zu einer Rekursion umbauen.
Warum nicht einfach die if-Bedingung in den for-Kopf integrieren? Dann hast du den Komfort der for-Schleife ohne unnötige Durchläufe (falls deine Annahme zutrifft).
Naja, es können doch auch mal mehrere Waves auf dem Screen sein.
Evtl. wird das aber nochmal interessant wenn es um finishing geht, bisher werden da maximal 100 Elemente drin sein.
Ich habe mich da komisch ausgedrückt als ich erst sagte das der obere Array für das Level steht und dann das der obere für die welle steht xD Sry...
Es ist jedenfalls so dass das erste for die Wellen durchgeht. Wenn die Welle sichtbar ist dann werden die Gegner in der Welle gezeichnet^^ (also die am Leben sind und die im Bildschirm sind, daher das If.
Edit:
Ich muss nochmal drauf hinweisen, das der Code des Spiels nicht 100% von mir ist, die meiste Arbeit übernimmt mein Partner der so ein Java-Guru ist und durch den ich erst so schnell Java gelernt hab. Tolle Sprache irgendwie, mal sehen wie C++ ist.
drunken monkey
28.03.2010, 20:05
Geht das bei Vektoren? enemy ist nämlich ein Vektor (Ja ich hab array geschrieben .____.)
Klar geht das, warum nicht?
for(int i = 0; i < enemy.size(); i++) {
if(waveStart.get(i) < distance && waveStop.get(i) > distance) {
for(int j = 0; j < enemy.get(i).size(); j++) {
e = enemy.get(i).get(j);
if(e.isAlive() && !e.isOutOfWindow()) {
g2d.drawImage(e.getImage(), e.getX(), e.getY(), this);
}
}
}
}
enemy.get(i) und vllt. sogar enemy.get(i).size() ebenfalls zwischenzuspeichern könnte sich auch noch auszahlen. Auf jeden Fall macht das das Programm nicht nur schneller, sondern auch deutlich lesbarer – und der Codeblock sprengt bei mir nicht mehr das Design. XD
Tolle Sprache irgendwie, mal sehen wie C++ ist.
Schlechter. :D
*duck, wegrenn und den Krieg sich entfalten lass* XD
Ok, jetzt hab ichs kapiert.
Das ist ja ein Mega Unterschied o_O Bei Tests lag der Unterschied bei 1000 Millisekunden O_O
Traue niemandem, der von sich behauptet C++ zu können. (http://lbrandy.com/blog/2010/03/never-trust-a-programmer-who-says-he-knows-c/)
Ich habe mal irgendwo geschrieben, dass ich in Zukunft von C++ die Finger lassen werde. Zu dieser Zeit würde ich mich irgendwo im Tal dieses Graphs ansiedeln. Ich war ziemlich frustriert von all den Eigenheiten und Tücken, die man als C++-Programmierer kennen und zu meistern wissen muss und fand in D das, was ich mir ursprünglich von C++ erhofft hatte. Mittlerweile sehe ich die Dinge mit etwas anderen Augen. D fehlt im Moment leider noch (vernünftige) Unterstützung für DLLs, da Walter dieser noch keine hohe Priorität zuteilte, inzwischen es aber glücklicherweise anders sieht. Damit fällt D für mein aktuelles Hauptprojekt flach, da es von einer Plugin-Architektur profitieren soll. Mog hat mal Vala erwähnt, also habe ich mir Vala näher angesehen und war im ersten Augenblick positiv überrascht. Vala ist eine tolle Sprache, die sich stark an C# anlehnt und viele Stärken aufweist. Eine solche Stärke ist die absolute Kompatibilität zu C, da Vala komplett zu C (mit GObject) übersetzt wird. Leider befindet sich die Sprache noch mitten in Entwicklung, es fehlt an vernünftiger Windows-Unterstützung und - das K.O.-Kriterium - es fehlt an Dokumentation, so dass Vala für ernsthafte Projekte noch nicht geeignet ist. C++ ist alt, hat viele Designfehler und Probleme. Gleichzeitig ist C++ aber sehr umfangreich, so gut etabliert, dass man von C++ als Industriestandard sprechen kann und wird sehr gut in Form von hochwertigen Compilern auf beinahe allen Systemen unterstützt. Fazit: C++ ist ein notwendiges Übel und ich werde wohl auch weiterhin C++ im Privatbereich nutzen müssen. Im professionellen Bereich gehört fundiertes Wissen über C++ sowieso dazu. Bei all der Kritik: C++ ist natürlich allgemein gesehen trotz - oder gerade wegen - des hohen Alters immernoch eine sehr robuste Sprache, die in ihrem Sinne angewandt durchaus zu robustem und effizienten Code führen kann. D bleibt immernoch meine Lieblingssprache und ich hoffe Walter wird dynamische Bindung auf die Reihe bekommen, trotz der - zugegebenermaßen - vielen Stolpersteine, die dynamische Bindung vor allem in Windows mit sich bringt. Heute würde ich mich im Graph übrigens irgendwo beim Erklimmen des zweiten Peaks sehen.
drunken monkey
08.04.2010, 10:47
Hm, ich denke, das passt hier halbwegs rein: Für alle, die's letzte Woche auch verpasst haben. XD (http://googlewave.blogspot.com/2010/03/try-out-new-google-wave-wave.html)
drunken monkey
17.04.2010, 17:59
Weekends and long compiling times make monkey go… er, well, see for yourself. ;O
const PREFIX = "http://www.multimediaxis.de/";
const FORUMDISP = "forumdisplay.php";
const USERCP = "usercp.php";
const URL = gBrowser.currentURI.spec;
const DOC = gBrowser.contentDocument;
if (URL.substr(0, PREFIX.length) == PREFIX) {
var xpath = null;
if (URL.substr(PREFIX.length, USERCP.length) == USERCP) {
xpath = "//tbody[@id='collapseobj_usercp_forums']/"
+ "tr[td/img[@src='layouts/dawn/statusicons/forum_new.gif']]/"
+ "td[@class='alt1Active']/div[1]/a";
}
else if (URL.substr(PREFIX.length, FORUMDISP.length) == FORUMDISP) {
xpath = "//a[contains(@href, 'goto=newpost')]";
}
else {
gBrowser.loadURI(PREFIX + USERCP);
return;
}
var nodes = DOC.evaluate(xpath, DOC, null, XPathResult.UNORDERED_NODE_ITERATOR_TYPE, null);
try {
for(var node = nodes.iterateNext(); node; node = nodes.iterateNext()) {
gBrowser.loadOneTab(node.href, null, null, null, true, false);
}
gBrowser.removeTab(gBrowser.mCurrentTab);
}
catch (e) {
alert("Error! Document tree modified during iteration:\n" + e);
}
}
else {
gBrowser.loadURI(PREFIX + USERCP);
}
Das Ding ist für FireGestures – einfach auf irgendeine Geste legen und damit entweder im User-CP (falls ihr Foren abonniert habt) oder in einer Forenübersicht rumfuchteln. ;) Es werden dann alle ungelesenen Foren / Threads in neuen Tabs geöffnet und das aktuelle Tab geschlossen. :A
Mit etwas Anpassung könnte es für den kompletten Forenindex sicher auch klappen – man müsste dann aber wohl extra noch nach den Foren filtern, in die man überhaupt reinschauen will. *kratz*
Ahja, und falls man die Geste auf irgendeiner anderen Seite verwendet, wird einfach das User-CP im aktuellen Tab geöffnet.
Jedenfalls mal wieder mein Forensüchteln performanter gemacht! \o/
SmokingFish
18.04.2010, 00:24
Willkommen, SmokingFish.
Dein letzter Besuch war: 03.03.2006 um 12:04 Uhr
Office 11.0 Excel Interop in C#
261 Excel Files á 1,6 MB , gesamt 417,6MB, in 4 resultierende Excel Files umstrukturieren. ca. 1735s für 42 der 261 Files (18 518 Felder) - ca.3h für alle ca. 115 000 Felder. VIEL ZU LANGSAM...so langsam das ich ein Forum besuche in dem ich seit 4 Jahren nix mehr gepostet hab -_- Bei meinem Glück ist auch noch ein Fehler im Algo und ich kann die Daten nachher nochmal generieren...
drunken monkey
18.04.2010, 00:56
Wb, Typ den ich nicht kenne! ^^"
Dank dir habe ich gemerkt, dass im XPath für die Forenübersicht noch ein Fehler steckt, wenn ein Forum Unterforen hat (wie eben das Pro-Forum hier). Der hier scheint aber zu klappen: "//div/a[contains(@href, 'goto=newpost')]". ^^'
SmokingFish
18.04.2010, 15:31
Freut mich das ich helfen konnte xD
Ihr habt es übrigens echt schön hier, es hat sich einiges getan seit ich das letzte mal hier vorbeigeschaut hab. Werde wohl in Zukunft wieder öfter zuhause programmieren und ab und an reinschaun =).
XPath ging mir vor kurzem übrigens auch richtig auf die Nerven. Wollte Suchabfragen mit Xpath 1.0 machen und musste entnervt feststellen das es keine upper und lower case Funktionen gibt. Hab mir am Ende mit ein bissel JScript nen Workaround basteln können, schön war das aber auch nicht =(.
drunken monkey
18.04.2010, 15:51
XPath ging mir vor kurzem übrigens auch richtig auf die Nerven. Wollte Suchabfragen mit Xpath 1.0 machen und musste entnervt feststellen das es keine upper und lower case Funktionen gibt. Hab mir am Ende mit ein bissel JScript nen Workaround basteln können, schön war das aber auch nicht =(.
translate() (http://www.w3.org/TR/xpath/#function-translate)?
Auch etwas unschön, aber immer noch besser als das Ganze ins Javascript auszulagern. ^^"
Ansonsten bin ich aber doch froh über XPath 2.0 – auch wenn ich gerade sehe, dass 1.0 eh deutlich mehr Funktionen hatte als ich dachte. o_O Hätte schwören können, contains() (ohne das ich oben wohl auch mit JS rumhacken hätte müssen ^^") hätte es da noch nicht gegeben…*kratz*
Aber eigentlich mag ich XPath, das "auch" kannst du bei deinem "auf die Nerven gehen" also ruhig streichen. ;) Habe auch selten mal Probleme damit – das hier war ja nur, weil ich eine Kleinigkeit im DOM nicht berücksichtigt habe.
(Btw habe ich oben noch eine Kleinigkeit ausbessern müssen – dass ich davor "var" vor allen drei xpath-Zuweisungen hatte, hat zu irgendeinem seltsamen Bug geführt. *kratz* Und war natürlich auch keine Absicht.)
SmokingFish
18.04.2010, 16:19
Mögen tu ich es auch, für gewöhnlich arbeite ich aber nicht damit.
Normalerweise programmier ich in C# oder C++/C - bzw in VB/A wenn der Kunde mich ärgern will -_-. In C# ist XML Handling eh traumhaft. In dem Fall hab ich halt mal ein Webinterface gebraucht um die XML Datenbanken die meine Software generiert zu visualisieren.
Von translate() hab ich damals übrigens abgesehn weil es laut Dokumentation nicht als Ersatz geeignet war - hab gerade nochmal drüber geschaut, für das was ich gebraucht hab wär das absolut ausreichend gewesen -_- ....
drunken monkey
18.04.2010, 16:50
Naja, der Hinweis soll wohl nur heißen, dass es nicht Unicode-sicher ist, also dass du händisch alle Zeichen einbauen müsstest, die in irgendeiner Sprache als Klein-/Großbuchstaben angesehen werden. o_O Solange aber eh alles Englisch (oder Deutsch) ist, ist das aber natürlich kein Problem – der Hinweis ist mal wieder einer dieser "OMG, das klappt in einem von tausend Fällen nicht!"-Dinger, die solche Standards so heiß lieben. <__<"
Und Mist, für den perfekten Forensurfkomfort bräuchte ich jetzt noch eine Möglichkeit, per GET-Request ein Forum als gelesen zu markieren. XD
Oho, SmokingFish, dass ich dich nochmal hier sehe! Hat dich unser Gespräch vor ein Tagen dazu inspiriert oder war das Zufall? Wie auch immer, machs dir bequem und bleib ein Weilchen.
SmokingFish
18.04.2010, 19:58
War eher Zufall =)
Während mein Algo so vor sich hinackerte ging auf dem Rechner eh nicht mehr viel ausser surfen, also hab ich versucht mich an ein paar alte Seiten zu erinnern und n bissel zu stöbern. Bin irgentwann im RPG-Atelier gelandet (das hiess doch damals anders oder ?oO) und hab dann deinen Namen hier im Forum gelesen - für nen Offtopic Thread, perfekt, also schnell mal ausprobiern ob ich noch angemeldet bin (Standardpasswort von damals - 1360 Tage alt laut Forum xD) und voila ^^.
Da ich jetzt eh öfter in meinem neuen Arbeitszimmer am Rechner sitzen werde schau ich ab jetzt ab und an einfach mal rein, vielleicht hab ich ja irgentwann auch mal was sinnvolles beizutragen ;).
Hallö~
Ich melde mich mal wegen meinem derzeitigen Projekt.
Ich hab mir die Möglichkeiten der Speicherung durchgelesen, und hab mich für Jeez Variante entschieden.
Serializable ist echt genial und dazu muss ich nur mit einem JFrame arbeiten, so wie wir es ja schon mit unserem Java-Shooter machen.
Ich hab das jetzt so gelöst, das ich einen Starter haben, der von JFrame erbt und dann ein paar Anfangssachen macht (Fenstergröße, Resizable etc) und dann die Klasse PokeMOD aufruft, die zum Zeichen und usw. da ist (was abgegeuckt ist von dem Shooter 8D). Dieser Klasse erbt von JPanel in implementiert Runnable für die Listener. Ich hoffe ich habe das soweit richtig?
(Dann habe ich da noch eine nette Klasse gefunden die für Popup-Menüs da ist, die werde ich sicher nutzen /o)
Edit:
Achja und ich habe für Buttons die ein Bild haben sollen auch eine eigene Klasse, die so aufgerufen wird:
PokeButton pb = new PokeButton(text);
import javax.swing.*;
public class PokeButton extends JLabel {
public PokeButton(String text) {
setIcon(new ImageIcon(this.getClass().getResource("Images/Buttons/" + text + ".png")));
}
}
Die Bilder für den Button müssen natürlich da sein, sonst is doof :/
Edit:
Hat sich erledigt, hab das Problem gelöst :D
Programming languages history in a nutshell. (http://james-iry.blogspot.com/2009/05/brief-incomplete-and-mostly-wrong.html)
Programming languages history in a nutshell. (http://james-iry.blogspot.com/2009/05/brief-incomplete-and-mostly-wrong.html)
1964 - John Kemeny and Thomas Kurtz create BASIC, an unstructured programming language for non-computer scientists.
1965 - Kemeny and Kurtz go to 1964.
Verdammt genial^^
dead_orc
07.05.2010, 19:43
Sehr geile Liste. Meine Favoriten:
1801 [...] Redditers of the time are not impressed due to the lack of tail call recursion, concurrency, or proper capitalization.
[...]
Larry Wall falls asleep and hits Larry Wall's forehead on the keyboard. [...] Perl is born.
[...]
Programmable Hyperlinked Pasta (PHP)
drunken monkey
08.05.2010, 11:40
Danke für den Link, der Artikel ist echt genial! XD
Auch die Kommentare, teils:
1801 - Joseph Marie Jacquard uses punch cards to instruct a loom to weave "hello, world" into a tapestry. Redditers of the time are not impressed due to the lack of tail call recursion, concurrency, or proper capitalization.
Jacquard's loom wasn't concurrent? It was pretty thoroughly multithreaded, I'd have thought!
Aber meine Favoriten, da müsste ich praktisch alle zitieren. ^^" C/Unix, C++ und ObjectiveC waren aber z.B. besonders cool. XD
Jesus_666
09.05.2010, 16:08
PHP wird aber falsch dargestellt. Die PHP-Dokumentation wurde von kompetenten, hochmotivierten Experten geschrieben. Das Gleiche gilt auch für den Rest der Sprache, nur waren die Experten da gerade betrunken.
Mit "kompetente hochmotivierte Experten" meinst du "Entwickler, die in den Kommentaren schreiben, was nicht in der eigentlichen Doku steht", oder?
Whiz-zarD
09.05.2010, 17:38
Was die Dokumentation von PHP angeht, hab ich zweigeteilte Meinungen.
Während viele Bereiche der Dokumentation doch recht gut geschrieben worden sind, sind viele andere Bereiche extremst miserabel, bis hin zur Unverständlichkeit, geschrieben.
Ein Beispiel wäre das tolle SSH2-Modul, was anscheinend auch noch nicht fertig programmiert wurde.
Wenn man unbedingt meint, so ein Modul zu veröffentlichen, sollte wenigstens die Dokumentation darauf hinweisen, was machbar ist und was nicht ...
PHP halte ich persönlich eh für eine Krankheit. Will alles können, kann aber nichts richtig.
Was die Dokumentation von PHP angeht, hab ich zweigeteilte Meinungen.
Während viele Bereiche der Dokumentation doch recht gut geschrieben worden sind, sind viele andere Bereiche extremst miserabel, bis hin zur Unverständlichkeit, geschrieben.
Ein Beispiel wäre das tolle SSH2-Modul, was anscheinend auch noch nicht fertig programmiert wurde.
Wenn man unbedingt meint, so ein Modul zu veröffentlichen, sollte wenigstens die Dokumentation darauf hinweisen, was machbar ist und was nicht ...
PHP halte ich persönlich eh für eine Krankheit. Will alles können, kann aber nichts richtig.
Dude, die Entwickler haben dich nicht darum gebeten, ihre Software zu verwenden. Und das sage ich dir als ein Maintainer, undokumentierter Software. ;)
Die Typen, die das Binding veröffentlichen, wissen was sie brauchen. Warum sollten die sich zusätzlich den Arsch aufreißen?
Wenn die die Dokumentation fehlt, dann schreibe und ergänze sie. So läuft der Hase nun mal.
Whiz-zarD
09.05.2010, 20:00
Wenn die die Dokumentation fehlt, dann schreibe und ergänze sie. So läuft der Hase nun mal.
Nur dumm ist, wenn man nicht weiß, was die Funktionen überhaupt machen, weil es dazu keine Dokumentation gibt ;)
Nur dumm ist, wenn man nicht weiß, was die Funktionen überhaupt machen, weil es dazu keine Dokumentation gibt ;)
Dann schau in der C-Doku nach, oder lies den Code. Wie gesagt: So laeuft der Hase. :P
Whiz-zarD
09.05.2010, 20:23
Dann schau in der C-Doku nach, oder lies den Code. Wie gesagt: So laeuft der Hase. :P
Dann erkläre es den Auftraggebern, dass ich erstmal wochenlang mich in den wirren Gedanken der PHP-Entwickler einarbeiten und deren Scheiße korrigieren muss und somit die Produktion der Software vorübergehend stillsteht.
Dann erkläre es den Auftraggebern, dass ich erstmal wochenlang mich in den wirren Gedanken der PHP-Entwickler einarbeiten und deren Scheiße korrigieren muss und somit die Produktion der Software vorübergehend stillsteht.
... die Leute stellen dir /gratis/ Bibliotheken zur Verfügung. Um diese Funktionalität selber zu implementieren, würdest du Monate brauchen.
Erkläre du mal lieber den Entwicklern, woher du die Frechheit her nimmst, auch noch Forderungen auf eine so unverschämte Art und Weise zu stellen, nachdem sie dir -- unter Anderem auch in ihrer Freizeit -- ihre Arbeitszeit und Fähigkeiten zur Verfügung stellen.
Wenn dir ihre Arbeit nicht gut genug ist, dann verwende sie nicht, sondern implementiere die notwendige Funktionalität selber, anstatt die Leute zu beleidigen, deren Arbeit du scheinbar nicht nachvollziehen kannst.
Whiz-zarD
09.05.2010, 20:37
dann erkläre halt den Auftraggeber das ich das Rad neu erfinden muss, weil der Erfinder keine Lust hat, eine Beschreibung zu schreiben und somit die Produktion erstmal still steht.
dann erkläre halt den Auftraggeber das ich das Rad neu erfinden muss, weil der Erfinder keine Lust hat, eine Beschreibung zu schreiben und somit die Produktion erstmal still steht.
Ich glaube, du willst nicht verstehen: Du hast kein Recht irgendetwas zu fordern. Du bist nicht der Auftragsgeber der Bibliothek. Du willst sie verwenden. Und das noch dazu ohne dazu etwas zu bezahlen.
Insofern du glaubst, nur weil jemand seine Arbeit zur freien Verwendung zur Verfügung stellt, muss er dir persönlich nach der Pfeife tanzen, dann hast du dich schlichtweg geschnitten.
Du hast kein Recht irgendetwas zu verlangen. Du willst konsumieren, und man hat dir die Erlaubnis gegeben dies auch zu tun. Sei froh, dass du das darfst und gefällig dankbar. Das ist nämlich keine Selbstverständlichkeit.
Noch dazu scheinst du, wenn auch indirekt, mit fremder Arbeit Geld zu machen. Dann solltest du erst recht dankbar sein, dass dir jemand die Möglichkeit dazu gibt, anstatt den undankbaren Geier zu spielen.
Was du da machst ist schlichtweg eine Frechheit. Würde es um Schokolade gehen, oder etwas anderes Materielles, würdest du das vielleicht verstehen, warum ich mich gerade fremd schaehme.
Whiz-zarD
09.05.2010, 20:54
Ich hab mir den Mist nicht ausgedacht. Der Kunde will PHP und dann bekommt er PHP.
Und ich finde, zu jeder Bibliothek, egal ob nun OpenSource oder ClosedSource, gehört eine Dokumentation. Die muss ja nicht 1000 Seiten dick sein. Eine kleine Beschreibung zur Bibliothek und deren Funktionen würde schon reichen.
Und sowas ist bei PHP oftmals nicht gegeben, sodass selbst die Entwickler rätseln, was überhaupt einige Funktionen können und was nicht.
Schon traurig, dass sowas keine Selbstverständlichkeit ist ... Bei einer Welt, die angeblich sooooo viel Wert auf Dokumentation und Kommunikation legt ...
Ich hab mir den Mist nicht ausgedacht. Der Kunde will PHP und dann bekommt er PHP.
Und ich finde, zu jeder Bibliothek, egal ob nun OpenSource oder ClosedSource, gehört eine Dokumentation. Die muss ja nicht 1000 Seiten dick sein. Eine kleine Beschreibung zur Bibliothek und deren Funktionen würde schon reichen.
Und sowas ist bei PHP oftmals nicht gegeben, sodass selbst die Entwickler rätseln, was überhaupt einige Funktionen können und was nicht.
Schon traurig, dass sowas keine Selbstverständlichkeit ist ... Bei einer Welt, die angeblich sooooo viel Wert auf Dokumentation und Kommunikation legt ...
:hehe:
Jetzt klingst du gerade, wie ein Realitaetsverweigerer. Dokumentation ist -- egal ob bezahlt, oder nicht bezahlt -- alles andere als normal. ICh habe schon oft kommerzielle Bibliotheken in der Hand gehabt, bei denen man einfach durch probieren heraus finden musste, was Sache ist.
Du hast hier mindestens den Source. Da sehe ich echt kein Problem.
Prinzipiell gebe ich dir aber recht: Die Realität ist in dem Punkt nicht so schön.
Aber, wenn es was mit SSH ist, ist die Lib sowieso gebunden. Schau mla in ie C-Doku. Die hilft sicher weiter.
Xardas der Dunkle
10.05.2010, 17:10
Imho hat php eine sehr gute Doku o_O. Auf php.net habe ich bisher eigentlich fast immer das gefunden was ich suchte.
Das einzige was mir gerade einfällt ist eine Konstante für die Curl-Bibliothek welche in der Doku nicht auftaucht, aber das eine Konstante von weiß ich wie vielen vergessen wird ... * (http://de2.php.net/manual/en/function.curl-setopt.php).
Und ich weiß nicht wo dein Problem liegt ... auch die SSH-Lib ist ausreichend dokumentiert ...
http://de2.php.net/manual/en/book.ssh2.php
Das würde ich mir für manche Software welche ich auf der Arbeit benutze wünschen ...
Jesus_666
11.05.2010, 11:24
Die PHP-Doku ist eine gemischte Sache: Für die üblichen Module ist sie vollständig und (abgesehen von Cocoa) jeder anderen mir bekannten Programmierumgebung deutlich überlegen. (Ja, Pythons Doku geht mehr in die Tiefe, dafür ist es schwer, das zu finden, was man eigentlich braucht.) Dafür sind die obskuren Module, die nur sehr selten mal jemand benutzt, teilweise komplett undokumentiert.
Generell funktioniert die PHP-Doku wirklich gut. Die Probleme treten fast immer in Randfällen auf und da für gewöhnlich bei Bindings zu externen Bibliotheken.
Ich bin übrigens dafür, dass wir die Threadnummer bei 256 oder 512 erhöhen (bzw. einen neuen Thread aufmachen), einfach weils so schön glatte Zahlen sind.
drunken monkey
11.05.2010, 19:02
10nded! :D
Jesus_666
11.05.2010, 19:10
Ich bin übrigens dafür, dass wir die Threadnummer bei -127 oder -127 erhöhen (bzw. einen neuen Thread aufmachen), einfach weils so schön glatte Zahlen sind.
Ich bin für -127. -127 paßt nicht mehr in ein Byte.
signed char? Willst du mich verarschen? Einigen wir uns auf unsigned char und machen nach 255 Schluss?
dead_orc
11.05.2010, 19:23
signed char? Willst du mich verarschen? Einigen wir uns auf unsigned char und machen nach 255 Schluss?
Java kennt nur unsigned. :p Deswegen hat Jeez vermutlich auch von byte und nicht von char geredet.
Und Suchalgorithmen sucken. Zumindest wenn man alle auf einmal lernen soll, obwohl sie alle das selbe tun... -_-
Ach komm schon, gibt echt schlimmeres, als Suchalgorithmen. Vor allem: sie tun eben nicht alle dasselbe. Das fängt damit an, dass manche stabil sind und manche nicht. Mal von Laufzeiten und Speicherbedarf ganz abgesehen.
Jesus_666
11.05.2010, 19:42
Java kennt nur unsigned. :p Deswegen hat Jeez vermutlich auch von byte und nicht von char geredet.
Nein, von einem Byte. Ich sprach von acht Bits, nicht von einem Datentyp, der acht Bits darstellt. Daß ich währenddessen alle Zahlenwerte in unsigned chars gespeichert hate, hat nichts damit zu tun, daß log₂(512) > 8.
Und Suchalgorithmen sucken. Zumindest wenn man alle auf einmal lernen soll, obwohl sie alle das selbe tun... -_-
Ja, ich habe auch gerade ähnlichen Spaß. Ich darf ID3 lernen und tollerweise ist die "information gain"-Metrik in jedem Quellenmaterial unterschiedlich und offenbar widersprüchlich erklärt. Yay.
drunken monkey
12.05.2010, 11:34
Was kann an Suchalgorithmen denn stabil sein? o_O Ich habe das bisher nur beim Sortieren gehört…
Und ich hatte letztes Jahr "Effiziente Algorithmen", da haben Suche und Sortieren eigentlich zu den interessanteren Algorithmen gezählt. ^^ Auch wenn ich es etwas unnötig fand, da dann noch die Namen zu lernen…<__<"
Btw bin ich dafür, bei 256 Schluss zu machen – da passt die Anzahl der Antworten noch in ein Byte. Einen Thread mit 0 Posts gibt's sowieso nicht, die Information abzuspeichern wäre daher eh unnötige Redundanz.
Argh, ja, in dem Moment war ich natürlich total daneben. Stabil gibt es in der Tat nur bei Sortieralgorithmen. Irgendwie hab ich im Kopf die ganze Zeit ans Sortieren gedacht, war aber offensichtlich noch hinreichend anwesend, um das richtige Wort hinzuschreiben. Die Uni tut mir echt nicht gut.
Ich glaube, an Synergy+ (http://code.google.com/p/synergy-plus/) könnte ich mich gewöhnen. Jetzt hab ich hier effektiv ein System mit drei Bildschirmen. Links OS X und die anderen beiden Windows 7.
MagicMagor
19.05.2010, 13:01
Irgendwie bin ich gerade ein wenig erschlagen von all den ganzen (tollen) Klassen, die Java mir so bietet und ich weiß gerade nicht so recht welche genau ich jetzt brauche.
Alles was ich möchte ist eine Textdatei einzulesen und den kompletten Inhalt in einen String zu packen, aber alles was ich irgendwie schaffe ist die Ascii-Werte der einzelnen Zeichen zu lesen. Wäre nett wenn mir jemand da kurz aushelfen könnte. (Ist eigentlich nicht meine Art nach so "simplen" Dingen zu fragen, aber ich würde gerne meine Zeit mit der Arbeit an meiner eigentlichen Aufgabe (Parsing) verbringen und nicht damit herauszufinden wie ich in Java eine Datei einlese)
drunken monkey
19.05.2010, 13:25
Ja, das ist leider in Java echt etwas mühsam. :-/ Eine einzelne Methode gibt's dafür afaik nicht, da muss man zwangsläufig mit mehreren Klassen rumhantieren.
import java.io.FileInputStream;
import java.io.IOException;
public class IOZeugs {
public static String readFile(String filename) throws IOException {
FileInputStream in = new FileInputStream(filename);
int size = in.getChannel().size();
byte[] buf = new byte[size];
in.read(buf);
in.close();
return new String(buf);
}
}
Das dürfte so ziemlich die Minimalvariante sein, ohne besonders elegante Fehlerbehandlung. Rückgabewert von in.read() zu prüfen wäre z.B. sicher kein Fehler, Zeichenkodierung beim Erzeugen des Strings sollte man wohl auch besser angeben.
Außerdem ist das jetzt zu drei Vierteln aus dem Kopf getippt und nicht getestet, weil ich atm kein javac zur Verfügung habe…*kratz*
Wirklich mühsam ist das IMO eigentlich nicht, wenn man nicht besonders elegant sein will. ;)
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class Test
{
public String readTxtFile(String filename)
{
Scanner datei = null;
StringBuilder s = new StringBuilder();
try
{
datei = new Scanner(new File(filename));
while (datei.hasNextLine())
{
s.append(datei.nextLine() + "\n");
}
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
finally
{
if (datei != null)
datei.close();
}
return s.toString();
}
}
Eigentlich sogar sehr verständlicher Code, wie ich finde. Man sollte vielleicht noch Exceptions abfangen, die beim Einlesen auftreten können, aber ansonsten funktioniert es. Der Code von drunken monkey sieht auch so aus, als würde er funktionieren - und sind sogar weniger Zeilen, die meiner Meinung nach aber nicht so gut zu verstehen sind. ;)
Powered by vBulletin® Version 4.2.3 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.