Zum Inhalt springen

lilith2k3

Mitglieder
  • Gesamte Inhalte

    1420
  • Benutzer seit

  • Letzter Besuch

  • Tagessiege

    2

Alle Inhalte von lilith2k3

  1. Steht eh unter (H), dass der TVÖD gilt. Insofern ist wumpe, ob da Urlaub noch explizit angegeben worden ist, oder nicht.
  2. Ohne die Möglichkeiten von pdftk im Einzelnen zu kennen - einfach folgender (uninspirierter) Vorschlag: Logo so oft verfielfältigen, wie Seiten ausgedruckt werden sollen und dann beides mit pdftk zusammenkleben lassen. Ist zwar doff, könnte aber funktionieren.
  3. Moment, worum geht's? Ich verstehe gerade nur Bahnhof. pdftk ist die Anwendung. Mit dieser Anwendung kannst Du einen Hintergrund und einen Vordergrund zusammenbringen. In Deinem Fall möchtest Du ein Logo mit einem Text zusammenbringen, und zwar so, dass a) das Logo über den Text gelegt wird und das Logo, welches bisher nur auf einer Seite erscheint, auf allen Seiten erscheint. Meintest Du in etwa das?
  4. Darik's Boot And Nuke | Hard Drive Disk Wipe and Data Clearing Is the Gutmann method the best method? | Darik's Boot And Nuke
  5. Eine Klasse ist quasi so etwas wie eine Blaupause, ein Konstruktionsplan. Das kann ein Plan für weitere Klassen sein (abstrakte Klasse als Blaupause für Klassen), das kann auch ein Plan für konkrete Objekte sein. Attribute spiegeln den Zustand eines Objektes wieder und werden in Variablen festgehalten, e.g. die Variable Alter gibt an, wie alt bspw. ein Objekt der Klasse "Spielfigur" ist. Bei Methoden unterscheidet man zwischen solchen, die am Objekt irgendwelche Zustandsänderungen veranlassen, bzw. veranlassen, dass das Objekt irgendwie in Aktion tritt und denen, die den Zustand des Objektes erfragen. Grob gesagt, handelt es sich bei Objekten um eine Verbindung der Daten mit den Routinen, die diese Daten letztlich bearbeiten. Während in anderen Programmiersprachen Verbundtypen genutzt werden, um zusammengehörige Daten in einem Block abzuhandeln, gibt es außerhalb der objektorientierten Sprachen keine solche Verbindung zwischen Daten und Routinen. Der Vorteil liegt auf der Hand: das Objekt "kümmert" sich selbst um seine Konsistenz nach innen und erlaubt nur derartige Zugriffe, unter denen diese Konsistenz gewahrt bleibt. Einher gehen damit die sog. Zugriffsmodifizierer in statisch typisierten OO Sprachen "private, public, protected" die als Kennzeichen dafür dienen, unter welchen Umständen, welche anderen Objekte mit diesem Objekt kommunizieren können. Private spricht für sich selbst: Methoden (Funktionen/Routinen), die als Private gekennzeichnet sind, sind in der Regel von außen nicht aufrufbar (es gibt tatsächlich Außnahmen, die ich bei Seite lassen möchte). Public ist das genaue Gegenteil: Alles was publik gemacht wird, davon kann jeder Gebrauch machen. Protected ist ein Zwischending: Methoden die Protected sind, sind nicht publik, also nicht für jedermann nutzbar; aber auch nicht private - sondern meist für eine gewisse "Gruppe" von Objekten benutzbar. An dem Punkt fiele dann jetzt das Wort "Vererbung"... usw. usf. Wenn Dein Prof also meint, Du sollst Dir die Objekte überlegen, so meint er quasi soviel wie: Du sollst die Aufgaben, die zu erledigen sind aufteilen. Und die Aufgaben, die unbedingt zusammen erledigt werden müssen und thematisch eng verzahnt sind, sollten dann in einer Klasse zu finden sein. http://de.wikipedia.org/wiki/Koh%C3%A4sion_(Informatik) Single Responsibility Prinzip Das eine schließt das andere mit ein. Halte Deine Klassen kurz, knapp und überschaubar. Ebenso Deine Methoden. So hast Du einerseits leserlichen und überschaubaren Code, der auf der anderen Seite die Fehlersuche ungemein erleichtert.
  6. Ich würde mir das mit der FIAE-Ausbildung nochmal überlegen; vielleicht lieber ein Startseite - Mathematisch-technischer Softwareentwickler ?
  7. C# in Depth: Amazon.de: Jon Skeet: Englische Bücher The C# Programming Language Covering C# 4.0 Microsoft .Net Development: Amazon.de: Anders Hejlsberg, Mads Torgersen, Scott Wiltamuth, Peter Golde: Englische Bücher Sind bisher meine Favourites, wenn es um C# geht. Aber leider a) Englisch und nur bedingt einsteigertauglich - insofern nicht für jeden geeignet
  8. Es geht darum, dass ein Vertreter Abteilungsleiter sein kann (e.g. hat die Rolle inne) und nicht "hat Beziehung zu 0..1" Abteilungsleiter. Die Kardinalitäten für die Telefonnummern müssen auch gesetzt werden.
  9. So pauschal kann man das nicht sagen - es gibt sicher einige, bei denen Du recht hast. Aber sowohl das Visual C# 2008/2010 als auch der Titel von Herrn Geirhos finde ich gut.
  10. Eine zu schreiben? Oder hunderte Lesen zu müssen? Ich habe die Erfahrung gemacht, dass weder unangemeldete Spontanvorstellungsgespräche noch Initiativbewerbungen inzwischen gern gesehen werden. In den 80ern als das noch keiner gemacht hat, konnte man so tatsächlich positiv auffallen - heute eher nur noch -fallen. Die Chancen sind eher gering - ähnlich wie übrigens die Stellensuche per Internet früher zu einem (Wissensvorsprung) führen konnte und heute keine Vorteile mehr bietet. @TO: Das ist auch der Grund weshalb ich meine Prüfung abwarte. Ich sitze innerlich schon auf gepackten Koffern - muss allerdings bis nächstes Jahr noch warten.
  11. Solche Leute hasse ich ebenfalls wie die Pest. Bei Supportanfragen aus dem Bekanntenkreis: »Oh, tut mir leid, ich bin Gentoo-Nutzer und kompiliere mein Linux selbst. Von Windows hab ich keine Ahnung« *KinnladerunterundAbmarsch*
  12. Ich bin zwar kein Javerino aber ich versuch mich trotzdem mal an einer Antwort: vec ist der Name der Variable vom Typ Vector<Verteilung>. Vector<Verteilung> ist der Typ der Variablen vec. Vector<T> ist eine generische Klasse, wobei "Verteilung" in diesem Falle die Typ-Variable für den generischen Parameter T ist. new ist ein schlüsselwort, welches zur Objektinstanziierung benötigt wird. Vector() ist nicht der Konstruktor, sondern der Aufruf des Konstuktors. und durch die Zuweisung der rechten an die Linke Seite erhält die Variable vec die Referenz auf ein neues Objekt vom Typ Vector. Irrtümer vorbehalten
  13. Was hier Verwirrung stiftet ist der Unterschied zwischen call by reference und call by value, welches man in anderen Sprachen kennt und dem signifikanten Unterschied zwischen Werttypen und Referenztypen in C#. Was Du im Sinn hast ist erstere Unterscheidung. In der Regel erfolgt bei C# eine Übergabe als call by value. Das hat aber folgenden Effekt: Wird ein Werttyp übergeben wird innerhalb der Funktion mit einer Kopie der Werttypen gearbeitet. Das Verhalten, was man im Grunde auch von call by value erwartet. Wird ein Referenztyp übergeben, so wird auch dieser "Wert" kopiert - also reguläres call by value-Verhalten. Der Haken an der Sache ist, dass es sich eben lediglich um die Kopie der Referenz und nicht um eine Kopie des referenzierten Objekts handelt. C# verhält sich ganz konsistent, aber für den unbedarften Nutzer kontraintuitiv. Rapid Application Development: Parameter passing in C# erklärt die Zusammenhänge sehr gut.
  14. An dieser Stelle -> [...] <- hämische Kommentare einfügen.... So. Die Problembeschreibung relativ offen - daher noch ein Paar Fragen: 1) Sollen zwei gleichartige Dateien miteinander verglichen werden? Wenn nein, musst Du Dir eine Abstraktionsschicht schaffen auf der Du bspw. eine Excel-Datei mit einer reinen Textdatei vergleichen kannst. (e.g. "zeilenweiser Vergleich") 2) Muss der Vergleich unbedingt programmatisch erfolgen? Wenn nein, exportiere die zu vergleichenden Exceltabellen in eine .csv und benutze ein Diff-Tool (e.g. "KDiff" o.ä.) 3) Was genau heißt das?
  15. Ich sehe jetzt nicht direkt den Unterschied zu dem von mir gesagten. new dient dazu, die Objektgenerierung anzustossen. Dabei wird der Konstruktor aufgerufen (entweder Standard- oder eigener). Soweit korrekt. Da der Konstruktor für die Initialisierung des Objektes zuständig ist, sehe ich ihn als Zuständig für die "Instanziierung" an - ausgelöst durch ein new. Sicherlich können wir uns an dem Punkt einigen, dass ein "new"+"Konstrukturaufruf" ein initialisiertes Objekt zurückgibt :]
  16. Danke. Wieder was gelernt :]
  17. Potentiell (hier im Demo) ja. Wobei mich da noch folgender Punkt interessieren würde (ist vielleicht ab vom Thema): Wenn ich in einer Anwendung, wie hier geschehen, Speicher alloziere und nicht explizit freigebe: Was geschieht mit dem Speicher nachdem meine Anwendung geschlossen worden ist. Ist der weiterhin belegt, oder räumt das Betriebssystem hinter unordentlichen Anwendungen auf? Letzeres war meine Vermutung, weshalb ich an der Stelle auf ein free verzichtet habe (was anscheinend nicht so klug gewesen ist). Danke für den Hinweis :] Das sollte entsprechend bei der Übernahme des Beispiels beachtet werden.
  18. Danke :]
  19. Entweder, Du hast Dich geirrt und meintest gets oder Dein Buch taugt nicht. Es geht in diesem Punkt um Buffer overflows. Gets liest ohne Punkt und Komma in die Variable ein, die Du angegeben hast (ähnlich scanf!). Da fgets allerdings nur eine begrenzte, von Dir festgelegte Anzahl am Bytes liest, liegt es an Dir Boundary Checks zu betreiben. => sscanf. Vielleicht schaust Du bezüglich fscanf mal hier weiter: fscanf - C++ Reference Galileo Computing :: C von A bis Z – 16.9 Formatiertes Einlesen/Ausgeben von Streams mit »fprintf()« und »fscanf()« Sollte eigentlich recht verständlich sein. Falls Du noch gezielte Fragen hast, können wir Dir gern hier weiterhelfen. Macht man heute nicht mehr. Kommt darauf an, wieviel Zeit Du bekommst. Wäre in meinen Augen eine Überlegung wert. Vorallem ginge aus dem Datenformat hervor, was gemeint ist. Und der "Header" wäre auch nicht so eine kryptische Kombination. 1) Was heißt "MIN", "MID" bzw. "MAX"? Ich denke, Du bist Dir dessen bewußt. Aber kannst Du auch garantieren, dass es der Programmierer nach Dir versteht? Wohl kaum. Warum also die Variablen nicht richtig benennen? Lange Variablenbenennungen sind auch nicht aufwendig; heutige IDEs beherrschen Code Completion, wodurch das ständige Ausschreiben entfällt. Wenn Du keine IDE nutzt, wäre es genau jetzt an der Zeit, darüber nachzudenken. 2) Sind MIN, MID und MAX keine Konstanten. Konstanten werden nach wie vor mit dem Schlüsselwort "const" deklariert. Auch wenn im "Kernighan/Ritchie" der Gebrauch solcher "symbolischen Konstanten" gutgeheißen wird, ist es schlechter Stil. Es handelt sich bei den define-Anweisungen um sog. Präprozessor-Direktiven; d.h. mit #define definierte Ausdrücke werden stumpf vom Präprozessor ersetzt (in etwa so wie STRG+H "search/replace"). Das heißt, wenn Du überlegst, evtl. einen Debugger einzusetzen wirst Du die #defines nicht wiederfinden; was die Fehlersuche erschwert. Eleganter ist es, Konstanten auch als solche zu kennzeichnen.
  20. Er ist wesentlich lesbarer?
  21. #include <stdio.h> #include <time.h> #include <stdlib.h> #include <conio.h> char *GenerateRandomString(int length); int GenerateRandomNumber(int maximum); void *AllocateNecessaryMemory(size_t size); void InitRandomNumberGenerator(); int main(void){ const int maximalStringLength=10; char *randomString; randomString=GenerateRandomString(maximalStringLength); printf("%s", randomString); getch(); } char *GenerateRandomString(int length){ const char *alphabet="abcdefghijklmnopqrstuvwxyzABCDEFGHIKJLMNOPQRSTUVWXYZ"; const int alphabetLength=52; int randomIndex; int index; char *randomString=NULL; InitRandomNumberGenerator(); randomString=AllocateNecessaryMemory(length); for(index=0; index<length; index++) { randomIndex=GenerateRandomNumber(alphabetLength); randomString[index]=alphabet[randomIndex]; } randomString[length]='\0'; return randomString; } void InitRandomNumberGenerator() { srand ( time(NULL) ); } int GenerateRandomNumber(int maximum) { return (rand() % maximum)+1; } void *AllocateNecessaryMemory(size_t size) { return malloc(size+1); } [/php]
  22. Ich habe da noch ein Paar Fragen: 1) Soll das ganze unbedingt in C gehalten werden? Wenn nein, empfehle ich C++. 2) Was sind MAX, MID und MIN? Tick, Trick und Track? 2b) Wenn es, wie es der Fall zu sein schein, Konstanten sind, warum definierst Du sie nicht auch als solche? #define ist einfach unsauber. 3) Bitte unterlasse die unsägliche Hungarian Notation. Ich weiss nicht, warum die a) je erfunden worden ist und heute immer noch zu finden ist. Benutze lieber sprechende Namen: "Krankheiten", "Alter", "Gewicht", "Anzahl" etc. und nicht "pKrankheiten", "iAlter". Soetwas verwirrt mehr und ist vollkommen redundant: Niemand würde ein "cAlter" erwarten. 4) Für das Datenmodell schlage ich folgendes vor: Gewicht in double, Geburtsdatum als char, Hausnummer als char, PLZ als char: 83.5 Kilo, 27.12.1989, 2a, D-54689 wären somit auch gültig. 5) Des weiteren würde ich mir einen "Parser" schreiben: Lese_Header(); Werte_Header_aus(); Solange_noch_Zeilen_vorhanden: Lese_Zeile(); Werte_Zeile_aus(); Werte_Zeile_aus(): Teile_Zeile_ab_"+"_in_zwei_Teile(); Erzeuge_aus_Teil1_Patientendaten(); Erzeuge_aus_Teil2_Krankheitsverlauf(); Füge_Krankheitsverlauf_den_Patientendaten_hinzu(); Gib_Patientendatensatz_zurück(); Erzeuge_aus_Teil2_Krankheitsverlauf(): Solange_Zeichenkette_nicht_zuende: Lies_Zahl_bis_Semikolon(); Lies_Krankheit[i]n[/i]_bis_Semikolon(); Lies_Diagnose[i]n[/i]_bis_Semikolon(); Lege_Krankheitsdatensatz_in_Krankheitsverlauf_ab(); Gib_Krankheitsverlauf_zurück(); 6) fgets ist Dein Freund 7) CSV ist in meinen Augen kein gutes Datenformat. Verwende lieber XML: The XML C parser and toolkit of Gnome
  23. Ich gebe jetzt einmal eine paradox anmutende Antwort: Programmieren hat überhaupt nichts mit Programmiersprachen zu tun, oder besser: Programmieren ist unabhängig von der konkreten Programmiersprache. Das mag Dich einerseits erstaunen; aber ich will versuchen zu erklären, was ich damit meine: Natürlich steht zu Beginn der Programmierer-Karriere, das eigentliche Erlernen einer Programmiersprache. Bei dem einen ist es Java, bei dem anderen ist es VB-Net. Wieder andere (wie ich) haben mit "Basic" auf dem ZX81 ihre ersten Programmier-Erfahrungen gemacht. Grundsätzlich geht es beim "Programmieren" darum, sich dem Computer verständlich zu machen. Grundsätzlich aber nicht wesentlich. Und das ist der wichtige Schritt hin zum richtigen Programmierer. Du schreibst als Programmierer nicht nur Code, der dem Computer erklärt, was Du wie gemeint hast: also lediglich Programme, die funktionieren, sondern Du schreibst auch handwerklich gute Programme. Was sind handwerklich gute Programme? Zum einen sind es Programme, deren Code aufgeräumt ist. Aufgeräumt ist Code, der sich gewissen Design-Prinzipien unterwirft ( Prinzipien Objektorientierten Designs ) - zumindest ist das in objekt-orientierten Sprachen so. Für andere Sprachen gelten natürlich andere Spielregeln, die denen aber nicht unähnlich sind ( Strukturierte Programmierung vgl. Dijkstra). Im Grunde kann man all diese Prinzipien herunterbrechen auf die Faustregeln: Halte alle Funktionen einfach, wiederhole Dich nicht selbst und versuche mit einigen wenigen klugen Abstraktionen eine möglichst hohe Zahl an Anwendungsfällen abzudecken. Desweiteren ist lesbarer Code ein handwerklich guter Code. Dazu ist es notwendig das Vokabular eines Programmierers zu erlernen("Factory", "Abstract Factory", "Builder", "Adapter", "Proxy" etc. ktl.); darüberhinaus aber auch das Vokabular des Fachbereichs zu Sprechen, für den das Produkt nachher eingesetzt werden soll. In einem Programm zum Thema Buchhaltung wäre es nicht falsch von "Buchen", "Konto", "Soll", "Haben", "Buchungssatz" etc. zu sprechen. Variablen und Funktionen werden mit Bedacht benannt und nicht nach Lust und Laune ("KontoFactory" statt "KtoFac"). Die Zeiten von Fortran, wo man nur 6 Alphanumerische Zeichen hintereinander schreiben durfte sind vorbei. Heute werden auch komplexere Benennungen von den IDEs verstanden. Darüberhinaus zeichnet es einen Programmierer aus, wenn er die Sprache seines Kunden versteht und optimaler Weise auch selbst sprechen kann. Ein guter Programmierer kann sich in andere Abläufe gut eindenken und besitzt die Fähigkeit, diese Abläufe zu abstrahieren, abstrakt zu formulieren und diese Formulierung letzten Endes in Code zu gießen. Nur wer versteht, worum es bei einem Problem geht, ist auch in der Lage es korrekt zu lösen. Darüberhinaus besitzt ein Programmierer soviel Fachverstand, dass er in der Lage ist, nicht nur ein Problem "lediglich" zu lösen, sondern ggf. seinen gewälten Lösungsweg zu verbessern. Das sind alles -und längst nicht alle- Aspekte, die einen guten Programmierer oder eben "Programmieren" ausmachen, die zunächst überhaupt nichts mit dem eigentlichen "tippen" der Codezeilen zu tun haben. Selbstredend ist es wichtig, dass ein Programmierer die Programmiersprache seiner Wahl so umfassend wie möglich versteht und stets bestrebt ist, sich auf seinem Fachgebiet weiterzuentwickeln - oder gehst Du zu einem Arzt, der Dir offen sagt, er habe 10 Jahre Berufserfahrung, aber sich seit 10 Jahren auch nicht mehr weitergebildet? Wohl kaum. Als sorgfältiger Programmierer sollte man stets bestrebt sein, sich mit den neuesten Techniken und Trends seiner Sparte auseinanderzusetzen. Nur so kann man es vermeiden, Funktionalitäten, die ggf. schon mit dem benutzten Framework abgedeckt werden, noch einmal mühselig neu zu programmieren. Natürlich lässt es sich bei heutigen Frameworks nicht vermeiden, dass man das eine oder andere, die eine oder andere Klasse noch nihct benutzt hat, oder nicht einmal von Ihrer Existenz gehört hat. Ich komme aus der .NET Welt und kann Dir sagen, dass dieses Framework einfach unglaublich vielseitig und mächtig ist, und es nicht so ohne weiteres überschaubar ist. Regelmäßig kommen Neuerungen hinzu. Allerdings gehört es für mein berufliches Selbstverständnis dazu, mich freiwillig neben der Arbeit intensiv weiterzubilden. Codeschnipsel aus dem Internet zusammenpasten ist zwar auch eine Art des Programmierens, aber das hat, wie Du aus dem Gesagten erschließen kannst nur grundlegend etwas mit Programmieren zu tun. Der eigentliche Programmier beginnt anschließend den kopierten Code zu verstehen, anzupassen, zu abstrahieren umzuformen, zu verallgemeinern und solange damit zu arbeiten, bis aus dem Schnipsel etwas geworden ist, was in sein Repertoire übergehen kann. Außerdem zähle ich zum Programmieren, das Verwenden essentiell wichtiger Werkzeuge: 1) Source-Code-Verwaltung 2) Test-Frameworks 3) Mocking-Frameworks beides je nach Vorhandensein 4) Integration Server 5) Code Coverage etc. Nur Code, der durch ausreichend Tests definiert werden kann, ist guter Code. Angenommen die Platte auf der Dein Programmcode gelegen hat, ist kaputt gegangen: Bist Du in der Lage ausschließlich anhand Deiner Tests, die Funktionalität des Programms ohne den eigentlichen Code zu rekonstruieren? Wenn ja, hast Du Tests, die etwas taugen. Wenn nein, kannst Du sowohl die Tests, wie auch Dein Programm in die Tonne treten. Ein Programm, von dem Du nicht einmal mit Sicherheit sagen kannst, dass es die Aufgaben, die es erfüllen soll, auch erfüllt, taugt nicht. Wie Du siehst, ist -für mich- Programmieren mehr als "nur" Programmieren.
  24. Prinzipiell wahrscheinlich von jeder aus. Da Du allerdings sowieso schon Bekanntschaft mit der Cygwin-Umgebung gemacht hast, würde ich Dir vorschlagen, dass Du es auch gleich da versuchst. Kleiner Tipp: Installiere das RXVT-Paket. ( theflow.de ) » Cygwin rxvt
  25. Also ich behaupte einmal, dass das lediglich eine Floskel ist, die Dir signalisieren soll: "Hallo, Du wirst hier ernst genommen, ich bin für Dich da Blablabla." Ich kann mir nicht vorstellen, das derjenige erfreut wäre, wenn tatsächlich ständig von irgendwelchen Bewerbern irgendwelche Rückmeldungen kämen. Davon unberührt bleibt natürlich die Möglichkeit, dass Du tatsächlich (auch ohne, dass Dir jemand die Möglichkeit einräumt) im Anschluss an ein Bewerbungsgespräch noch die ein oder andere Frage stellen kannst. Solltest Du keine wirklich drängenden Fragen haben, würde ich die Gelegenheit auch nicht nutzen. Man kann sich da auch unbeliebt machen. Insofern: Nicht zuviel drüber nachdenken und alles auf die Goldwaage legen;)

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...