Archiv für die Kategorie ‘Programmieren’
Kernel-Design, oder: Torvalds vs Tanenbaum
In diesem Artikel soll es also um das Kernel-Design eines Betriebssystems gehen… doch was ist das eigentlich, ein Kernel?
Nun, man könnte den Kernel einfach mit „Betriebssystemkern“ übersetzen: er steuert die grundlegendsten Sachen, die für ein Betriebssystem nötig sind; dazu gehören zum Beispiel Zugriffe auf die Festplatte, Speicherverwaltung, Scheduling oder Gerätetreiber.
Und genau an dem letzten Punkt „Treiber“ scheiden sich die Geister: sollen sie nun mit in den Kernel oder lieber extern bleiben?
Auch zwei Prominente der IT-Welt stritten sich darum: Linus Torvalds, der Begründer von Linux, und Andrew Tanenbaum, der unter anderem für das Betriebssystem Minix verantwortlich ist.
In Linux sind die Treiber mit im Kernel drin; ein solcher Kernel- heißt monolithischer Kernel. Im Gegensatz dazu ist der Minix-Kernel ein Microkernel: hier sind die Treiber extern: der Kernel wird so kleiner und auf diesem Wege auch sehr viel stabiler.
Diese Stabilität ist auch die größte Stärke des Microkernels. Im Gegensatz dazu kann der monolithische Kernel mit Schnelligkeit punkten: durch das Alles-drin-haben sind die Zugriffe auf Treiber wesentlich schneller, allerdings gibt es hier auch mehr, was den Kernel zum Absturz bringen kann als beim Microkernel.
Letztendlich muss jeder selbst entscheiden was wichtiger ist; jedes Design hat also seine ganz eigenen Vorzüge.
JavaFX 1.0 erschienen
Nun ist es soweit: JavaFX 1.0 ist erschienen! Doch was ist JavaFX eigentlich?
Am besten beschreiben lässt sich JavaFX als eine Konkrrenz zu Adobe Flash oder Microsoft Silverlight. Es lassen sich also mit einer Skriptsprache eigene „Webanwendungen“ (RIA, Rich Internet Application) programmieren. Alles was man dazu braucht ist das JavaFX-SDK, wahlweise im Bundle mit Netbeans. Ein Tutorial von Sun findet sich hier.
Python 3.0 ist fertig
Seit dem 3. Dezember 2008 steht die Final-Version von Python 3.0 bzw. 3000 unter http://www.python.org/download/releases/3.0/ zum Download bereit.
Da sich im Verglich zu den Vorgängerversionen (vorallem, was die Abwärtskompabilität angeht) einiges verändert hat, empfiehlt es sich die unter „Python resources“ verlinkten Artikel zu lesen.
Buchrezension – Forbidden Code
In diesem Artikel möchte ich euch das Buch „Forbidden Code“ von Jon Erickson (erschienen bei mitp 2006, ISBN: 978-3-8266-1667-9) vorstellen.
Nun, wenn man sich das Cover einmal anschaut, mitsamt des Spruchs „Jedes System ist zu knacken! Jedes!!!“ wird man sich denken: „Oh nein, nicht wieder eins von diesen Möchtegern-Hacker-Büchern“. Wenn man aber mal einen Blick reinwirft, so wird man eines besseren belehrt: ein sehr verständliches, ausführliches Buch über die Grundlagen des Hackings.
Grundsätzlich ist dieses Buch in 3 Teile unterteilt. Teil 1 von 3 geht um die „Programmierung“: hierbei geht es um das Ausnutzen von änfälligem Quellcode. Anhand von vielen Beispielen in den Programmiersprachen C, seltener auch Assembler, führt Erickson in grundlgende Technicken wie zum Beispiel Buffer Overflows, Format Strings oder auch die Programmierung von Shellcode ein. Dabei wird zunächst ein anfälliges Beispiel programmiert, ausgenutzt und erweitert, so dass neue Techniken benötigt werden, welche dann erklärt werden… – sehr gelungen!
In Teil 2 geht es nun um „Netzwerk-Hacking“. Zu Anfang des Kapitels steht eine grundlegende Einführung in das TCP/IP-Protokoll, dann wird erklärt, was es für verschiedene Techniken gibt. Im Gegensatz zum 1. Teil geht es hier theoretischer vor, zumindest im ersten Teil des Kapitels.
Im 3. und letzten Teil wird das Thema „Kryptologie“ behandelt. Es geht um die Ver-und Entschlüsselungstheorie; und natürlich fehlen auch einige Beispiele zu Entschlüsselung nicht. Dieser Teil ist sehr mathematisch – logisch, es muss bei Entschlüsselung viel gerechnet werden.
Nun aber zu einem Fazit: Das Buch ist eine rundum gelungene Einführung in das Hacking, jedoch sollte man Vorkenntnisse in C, am besten auch in Assembler und keine Scheu vor Rechnereien mitbringen. Denn ohne diese Kenntnise verliert man schnell den Faden. Und: nach der Lektüre des Buches ist man natürlich kein Profi – Hacker, es handelt sich hierbei um eine grundlegende Einführung.
Komodo Edit unter Linux installieren
Leider ist die Auswahl an hochwertigen Editoren unter Windows größer als unter Linux. Es gibt allerdings einen Editor von Activestate, der unter beiden Betriebssystem verfügbar ist: Komodo Edit. Dieser Editor ist eine abgespeckte aber dafür kostenlose Version von Komodo IDE.
Unter Windows gibt es -wie bei den meisten Programmen- einen Wizard, der Schritt für Schritt alle Fragen und Einstellungen abharkt. Für Linux ist es ein klein wenig komplizierter. Um Rechten-Probleme und damit die gefahr eine Datei nicht ausführen zu können, aus dem weg zu gehen, befolgen Sie die Anleitung bitte Schritt für Schritt (verwenden Sie also zum Beispiel für das Entapcken auch die Konsole und nicht etwa Ark).
- Zunächst laden Sie sich das Archiv der aktuellen Version herunter (das geht über den Link „Komodo Edit“ von oben).
- Als nächstes öffnen Sie die Shell und tippen dort „su“ und dann das root-Passwort ein, um sich als root anzumelden.
- Nun gehen Sie mit „cd [Ordner]“ in den Ordner, in dem das Archiv liegt. Tippen Sie „tar -xvzf Komodo-Edit-<Version>-<Plattform>.tar.gz“ um alle Datein zu entpacken.
- Wechelsn Sie mit „cd Komodo-Edit-<Version>-<Plattform>.tar.gz“ in den automatisch erstellen Ordner.
- Tippen „./install.sh“.
- Nun können Sie den Installationspfad festlegen. Ich empfehle „/opt/Komodo-Edit-<Version>“.
- Nach einem Enter wird Komodo installiert.
- Sie können Komodo Edit nun per Shell oder [Alt]+[F2] aufrufen. Nach einem Neustart, erscheint außerdem im Startmenü unter „Neue Anwendungen“ und „Entwicklung | Weitere Programme“ eine Verknüpfung.
Python in UltraEdit
Python in UltraEdit einzubinden ist sehr einfach. Zunächst laden wir uns den Installer für Windows im Bereich „Downloads“. Aktuell ist die Version 2.5.2. Die eigentliche Installation von Python ist dank des Wizards kein Problem. Sie müssen sich hier lediglich den Installationspfad für die Konfiguration von UltraEdit merken. Im Startmenü befindet sich nun ein Python-Eintrag mit -unter anderem- der Verknüpfung zur Python-Shell und zu IDLE (Editor, etwas komfortablere Entwicklung als mit der reinen Shell).
Als nächstes bietet sich ein Wordfile mit Python-Syntax an. Das bekommen wir für UltraEdit auf der offiziellen Webseite unter http://www.ultraedit.com/downloads/extras.html#wordfiles. Den Inhalt der Datei zur aktuellen Version (hier 2.5) legen Sie in der Zwischenablage ab.
Starten Sie jetzt UltraEdit und navigieren Sie zu Extras | Optionen. Hier wählen Sie Anzeige | Syntaxhervorhebung. Klicken Sie nun auf Öffnen um die Datei mit allen Wordfiles zur Bearbeitung in UltraEdit zu öffnen. Ans Ende der Datei fügen Sie jetzt den Inhalt des Python Wordfiles ein. Achten Sie jedoch auf die L-Nummer in der ersten Zeile! Die gibt den Platz im Syntax-Auswahlmenü an. Standard ist hier 14. Wenn Sie allerdings schon vorher Wordfiles eingefügt haben, müssen Sie die Nummer für einen freien Platz eingeben.
Als letztes folgt der Eintrag ins Werkzeugmenü, um den Code ausführen zu können. Gehen Sie zu Extras | Werkzeugkonfiguration (nähere Informationen hierzu auch in der mitgelieferten UltraEdit Hilfe) und klicken Sie auf Einfügen um ein neues Werkzeug zu erstellen. Sie können hier die Einstellungen nach Ihren Wünschen vornehmen. In der Befehlszeile sorgt der Code
C:\Python25\pythonw C:\Python25\Lib\idlelib\idle.pyw -r "%f"
dafür, dass die aktuelle Datei in der Python-Shell ausgeführt wird. Es empfiehlt sich die aktuelle Datei davor speichern zu lassen und unter Arbeitsverzeichnis „%P“ (ohne Anführungszeichen) einzugeben. Zum Schluss ein Klick auf Übernehmen und fertig.
Noch eine kleine Erläuterung zum Schluss: pythonw(.exe) führt GUIs (Grafische Benutzeroberflächen) aus und idle.pyw startet die Python-Shell mit dem Programm oder einer Auflistung der Fehler.
Layoutmanager in Java – Teil 2
So, im 2. Teil der Layoutmanager-Serie soll zunächst einmal das GridLayout besprochen werden. Mit diesem Layoutmanager unterteilen wir unser Fenster in gleich große Teile. Beispiel:
frame.setLayout( new GridLayout( 3, 2 ) );
Dies führt zu einer Unterteilung des Fensters in 3 Reihen und 2 Spalten. Werden jetzt Komponenten hinzugefügt, werden die einzelnen Zellen für die ganze Komponente benutzt – sie nimmt also den ganzen Teilbereich ein. „Aufgefüllt“ wird dabei von links nach rechts und anschließend von oben nach unten.
GridLayout ist ein recht einfacher Layoutmanager; allerdings gibt es noch eine Art Erweiterung dazu: das GridBagLayout. Mit diesem Layoutmanager lassen sich die Komponenten nicht nur in gleich großen Zellen platzieren, sondern es können auch andere Dinge bestimmt werden: die Position in der Zelle selbst, die Anzahl der Zellen, die eine Komponente horizontal/vertikal belegen soll, das Verhalten einer Komponente beim vergrößern/verkleinern des Fensters. Dazu bekommt jede Komponente ein GridBagConstraints-Objekt zugewiesen. In der Klasse GridBagConstraints lassen sich nun verschiedene Variablen setzen, die das Verhalten der Komponente bestimmen. An dieser Stelle sei auf das Sun-Tutorial verwiesen: GridBagLayout.
Kommandozeile in Java
Auch schon mal gefragt, wie man mit Java Kommandozeilenprogramme erstellen kann? Muss ja nicht immer grafisch sein…
Nun, die Lösung liegt hier im Parameter der main-Methode:
public static void main( String args[ ] )
Beim Programmstart über die Kommadozeile wird das Feld args (das übrigens auch anders heißen kann, nur „args“ oder auch „argv“ hat sich nunmal durchgesetzt als Standardbezeichnung
mit den einzelnen übergebenen Strings gefüllt. Zum Beispiel spricht
args[ 0 ]
das erste Element an. Hierzu ein kleines, Beispielprogramm:
class Cmd
{
public static void main( String[ ] args )
{
for( String s : args )
System.out.println( s );
if( args[ 0 ].equals( "Test" ) )
System.out.println( "Test" );
else
System.out.println( "NoTest" );
}
}
Zuerst werden alle Parameter ausgegeben, anschließend wird getestet, ob der erste Parameter „Test“ ist; ist er es, wird „Test“ ausgegeben, ansonsten „NoTest“:
$ java Cmd Test
$ java Cmd Test
Test
Test
$ java Cmd Noch ein Test mit mehreren Parametern
Noch
ein
Test
mit
mehreren
Parametern
NoTest
Was passiert jetzt aber, wenn man garnichts übergibt, aber trotzdem versucht, die Elemente anzusprechen? Nun, es gibt eine Exception, die nun wie üböich behandelt werden sollte:
$ java Cmd
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
at Cmd.main(cmd.java:8)
Also immer schön darauf Acht geben
Layoutmanager in Java – Teil 1
In diesem Eintrag sollen 2 Layoutmanager in Java besprochen werden; doch zuerst: wozu braucht man das überhaupt, einen Layoutmanager? Nun, wenn man Komponenten in einem Fenster anordnen möchte, so stellt sich doch die Frage: wie soll das Fenster hinterher aussehen? Wie sollen die Komponenten angeordnet werden? Die simpelste, aber umständlichste Variante:
frame.setLayout( null );
Hier wird garkein Layoutmanager benutzt, alle Komponenten müssen mit setBounds( ); einzeln „gesetzt“ werden.
Ein Layoutmanager kann uns hier nun viel Arbeit abnehmen: wir fügen die Komponenten hinzu, und der Layoutmanager bestimmt dann wie es am Ende aussieht; hierbei können wir unterschiedlich genau Positionen/Größen bestimmen, je nach vewendetem Layoutmanager. In Teil 1 sollen 2 Layoutmanager vorgestellt werden: das BorderLayout (Standardlayout für ein JFrame) und das FlowLayout (Standardlayout für ein JPanel).
Das BoderLayout unterteilt das das Fenster in 5 Teile: NORTH, CENTER, SOUTH, EAST, WEST. Komponenten werden so hinzugefügt:
frame.add( new JButton( "Button 1" ), BorderLayout.NORTH );
Hier wird ein Button im Norden des Frames hinzugefügt; prinzipiell lassen sich natürlich auch andere Komponenten hinzufügen – auch JPanels.
Das FlowLayout ist etwas simpler: Komponenten werden einfach nacheinander hinzugefügt, in einer Reihe von links nach rechts. Die Ausrichtung der Komponenten (z.B. links/rechtsbündig) lässt sich so bestimmen:
FlowLayout layout = new FlowLayout( FlowLayout.RIGHT);
frame.setLayout( layout );
Alle Komponenten in besagtem Frame werden nun also rechtsbündig ausgerichtet.
g++ (MinGW) installieren (und in UltraEdit einbinden)
Dieser Beitrag richtet sich an aller C++ Entwickler unter Windows, die mit IDM UltraEdit arbeiten; oder solche, die es werden wollen.
Warum MinGW und UltraEdit?
UltraEdit ist ein Texteditor für Programmierer aus dem Hause IDM (offizielle Website). Der Vorteil bei UltraEdit ist, das er zwar ein mächtiger Texteditor für nahezu alle Bedürfnisse ist, aber dem Entwickler nicht am Code pfuscht. Das heißt Sie geben die Kontrolle über Ihre Projekte nicht aus der Hand und trotzdem wird in an vielen Stellen Arbeit abgenommen. So lässt sich zum Beispiel die Codevervollständigung aktivieren oder externe Programme (wie Compiler) einbinden. Natürlich gehören auch Lesezeichen, (auch eigene) Code-Vorlagen, Umgang mit Projekten und Einzeldateien, WebSearchToolbar, Verschlüsselung, FTP-Browser, eine anpass- und abspeicherbare Arbeitsoberfläche, Codebereinigung, … zum Lieferumfang.
MinGW ist ein Compilerpaket, dass veile Sprachen wie C/C++, JAVA, … abdeckt. Im Grunde sind dort alle Werkzeuge der GNU-Compiler-Collection enthalten. Diese sind für jedes Linux-System verfügbar, weshalb das MinGW-Paket ausschließlich für Windows erhältlich ist. Neben dem Compiler Von Microsoft ist der g++ einer der am häufigsten genutzten Compiler für C/C++.
MinGW installieren
Da die Installation von UltraEdit durch den Installationsassisten in Deutsch eigentlich sehr einfach ist und ohne Probleme ablaufen sollte, gehen wir im Folgenden davon aus, das dies bereits erledigt ist. Bleibt also noch MinGW. Die offizielle Website lautet http://www.mingw.org/. Dort befindet sich auch ein Link zum Sourceforge-Archiv des MinGW-Projekts, wo die Dateien heruntergeladen werden können. Wir nehmen hier den „Automated MinGW Installer“.
Nach dem Dowload kann die .exe gestartet werden. Eine Meldung erscheint, das nach der aktuellsten version gesucht wird. Anscheinend erscheint die Meldung „Welcome to MinGW Version …“.
- Die Installation kann mit „Next >“ vorbereitet werden. Hier wählen wir „Download and install“ um die benötigten Datien aus dem Internet zu laden und MinGW anschließend zu installieren.
- MinGW kann nur isntalliert werden, wenn sie die nun sichtbare lizenz mit „I Agree“ akzeptieren.
- Bei der Frage,w elche Version wählen wir „Current“. Es gibt in der regel keinen Grund ältere Sofwtare vorzuziehen. Aber eine ß-Version kann zu Problem führen. Weiter mit „Next >“.
- Nun können Sie wählen welche Pakete installiert werden sollen. Zunächst reicht uns für die reine C++-Programmierung „MinGW Base Tools“ und „g++ Compiler“. (Natürlich können Sie bei Bedarf weitere installieren.)
- Nach „Next >“ können Sie nun ein Installatiosnverzeichnis wählen. Sie könne hier im Grunde ein beliebiges auswählen. allerdings verursachen Compiler manchmal Probleme, wenn in irgendeinem Pfad Leerzeichen sind. Es wäre also praktisch hierauf zu verzichten. Der Vorschlag („C:\MinGW“) ist also eine gute Idee.
- Anschließend kann der Name für den Ordner im Startverzeichnis gewählt werden.
- Nach dem Klick auf „Install“ werden die benötigten Datien aus dem Internet geladen und die Installation startet.
- Anschließend ein Klick auf „Next >“ und hier auf „Finish“ und Sie haben es geschafft.
g++ ohne UltraEdit benutzen
g++ ist nun einsatzbereit. Sie sollten allerdings den Pfad zu MinGW noch als Umgebungsvariable setzen. Sonst müssen Sie beim Kompilieren immer den kompletten Pfad angaben.
- Gehen Sie in den Eintrag „System“ in der Systemsteuerung. Hierfür muss die klassische Ansicht ausgewählt sein.
- Nun gehen Sie auf den Reiter „Erweitert“ und klciken auf den Button ganz unten „Umgebungsavriablen“.
- Unter „Systemvariablen“ suchen Sie den Eintrag „Path“.
- Nach einem Doppelklick können Sie in das Feld „Wert der Variablen“ den folgenden Text anhängen: „;C:\MinGW\bin“ (ohne Anführungszeichen, gegebenenfalls müssen Sie den Pfad anpassen, wenn Sie ihr Installationsverzeichnis anders gewählt haben).
- Damit die Umgebungsvariablen komplett übernommen werden, sollte der PC nun neugestartet werden.
Wenn Sie nun eine .cpp-Datei kompilieren wollen, rufen Sie die Konsole auf (zum Beispiel mit [WIndows]+[E] und dort „cmd“ (ohne Anführungszeichen) eingeben. Mit [Enter] bestätigen).
- wechseln Sie mit „cd“ in das Verzeichnis, indem sich die .cpp-Datei befindet. Zum Beispiel: cd C:\dev\cpp
- Hier geben Sie g++ -o MeinErstesProgramm MeinErsterCode.cpp ein (g++ -o [Name die die .exe haben soll] [Kompletter Name der Datei]).
- Wenn Sie mehrere Dateien kompilieren wollen, können Sie anstatt „MeinErsterCode.cpp“ auch „*.cpp“ schreiben.
g++ in UltraEdit einbinden
Wenn Sie UltraEdit benutzen, können Sie sich die ganze Arbeit unter „g++ ohne UltraEdit benutzen“ sparen. Hier gehen Sie einfach unter [Extras]->[Werkzeug-Konfiguration]. Anschließend auf „Einfügen“. Nun können Sie die folgenden Werte eingeben:
- Bezeichnung für den Menüeintrag: aktuelle Datei kompilieren
- Befehlszeile: C:\MinGW\bin\g++.exe -o „%n“ %F
- Arbeistverzeichnis: %P
- (Nun im Reiter „Optionen“) Programmtyp: Dos-Programm
- Ein Harken bei „Aktive Datei erst speichern“
- (Nun im Reiter „Ausgabe“)Befehlsausgabe: Ausgabe in Listenfeld und Ausgabe aufzeichnen
- Markierten Text ersetzen durch: Nicht ersetzen
Wenn Sie ganze Projekte kompilieren möchten, müssen Sie im Gegensatz zu oben einige Einträge ändern:
- Bezeichnung für den Menüeintrag: Projekt kompilieren
- Befehlszeile: C:\MinGW\bin\g++.exe -o „%rn“ %RP*.cpp
- Arbeistverzeichnis: %RP
- Ein Harken bei „Erst alles speichern“
Nun können Sie noch Einträge zum Ausführen der erstellen Programme einfügen. Wenn Sie die erstellte .exe einer Datei ausführen wollen, lautet die Befsehlszeile „%P%N.exe“ (beim Projekt „%RP%RN.exe“). Unter Optionen wird nichts gespeichert und das DOS-Programm ausgewählt. Bei beiden Typen wird unter dem Reiter „Ausgabe“ das Häkchen bei „Ausgabe aufzeichnen“ entfernt und afür eins bei „DOS-Fenster anzeigen“ gesetzt.
Mehr zu diesen Möglichkeiten bei UltraEdit finden Sie auch sehr gut dokumentiert in der Hilfe. Der Eintrag in der Hilfe ist gleichnamig mit dem genutzten im Extras-Menü.