using System; namespace HelloWorld { public static class Program { public static void Main(String[] args) { //zuerst Konsole dann graphische Ausgabe Console.WriteLine("Hello World"); System.Windows.Forms.MessageBox.Show("Hello World"); } } } |
public static StateGraph CreateStateGraph(RoboBoard board) { ICollection<Node<RoboField>> nodes = new HashIndexedList<Node<RoboField>>(); for (int y = 0; y < board.Size.Height; y++) { for (int x = 0; x < board.Size.Width; x++) { nodes.Add(new FieldNode(Direction.Up, board.Fields[x, y])); nodes.Add(new FieldNode(Direction.Right, board.Fields[x, y])); nodes.Add(new FieldNode(Direction.Down, board.Fields[x, y])); nodes.Add(new FieldNode(Direction.Left, board.Fields[x, y])); } } StateGraph graph = new StateGraph(board, nodes); foreach (FieldNode node in nodes) { foreach (CardType cardType in Enum.GetValues(typeof(CardType))) { RoboPosition position = RoboManager.PlayCard(board, new RoboCard(cardType), new RoboPosition(node.Field.X, node.Field.Y, node.Direction)); if (position.IsDead) //der Hashcode des "Todesknoten" ist 0 graph.AddDirectedEdge(node, graph.GetNode(0), cardType); else graph.AddDirectedEdge(node, graph.GetNode(position.GetHashCode()), cardType); } } return graph; } |
public enum CardType { MoveForwardOne, MoveForwardTwo, MoveForwardThree, MoveBackwardOne, TurnLeft, TurnRight, TurnAround } |
private bool _isDead = false; public bool IsDead { set { _isDead = value; } get { return _isDead; } } |
position.IsDead = true; |
public bool IsDead { set; get; } |
public class Person { public Person(String vorname, String nachname, int alter) { Vorname = vorname; Nachname = nachname; Alter = alter; } public String Nachname { set; get; } // der Setter ist privat -> der Vorname einer Person kann nicht geaendert werden public String Vorname { private set; get; } // eine Eigenschaft, die nicht als Variablenzugriff dient public String Name { get { return Vorname + " " + Nachname; } } // fuer das Setzen des Alters wird eine gesonderte Ueberpruefung benoetigt private int _alter = 0; public int Alter { set { if (value < 0) _alter = 0; else _alter = value; } get { return _alter; } } } |
public class GenericHashtable<K, V> : Hashtable, IEnumerable<KeyValuePair<K, V>> { public GenericHashtable() : base() {} public GenericHashtable(int capacity) : base(capacity) {} public virtual void Add(K key, V value) { base.Add(key, value); } [Obsolete("The key must be type of K, value must be type of V!", true)] public new void Add(object key, object value) { //this method can't be used anymore } public V this[K key] { get { return (V)base[key]; } set { base[key] = value; } } [Obsolete("The key must be type of K, value must be type of V!", true)] public new object this[object key] { get { return null; } set { } } public new IEnumerator<KeyValuePair<K, V>> GetEnumerator() { IDictionaryEnumerator enumerator = base.GetEnumerator(); while (enumerator.MoveNext()) yield return new KeyValuePair<K, V>((K)enumerator.Key, (V)enumerator.Value); } public override string ToString() { StringBuilder result = new StringBuilder(); foreach (KeyValuePair<K, V> elem in this) { result.AppendFormat("[{0}; {1}]\r\n", elem.Key, elem.Value); } return result.ToString(); } } |
GenericHashtable<int, int> a = new GenericHashtable<int, int>(); //die ersetzte Methode wird aufgerufen, durch das Attribut "Obsolete" //wird bereits ein Fehler bei der Erstellung des Bytecodes erzeugt a.Add("Hello", "World"); Hashtable b = new GenericHashtable<int, int>(); //die Basismethode aus Hashtable wird aufgerufen - es wird kein Fehler //erzeugt, da "Hello" und "World" Objekte sind b.Add("Hello", "World"); |
Autoreninformation |
Martin Sommer ist Gewinner des zweiten Programmierwettbewerbs von freiesMagazin in der Schwierigkeitsstufe „schwer“ mit der vorgestellten Roboter-KI. Er begann in Java mit objektorientierter Programmierung und entwickelt seit über zwei Jahren nun beruflich in C#. |
Autoreninformation |
Martin Gräßlin ist KDE-Entwickler im Bereich des Fenstermanagers und Autor der Theme-Engine Aurorae. |
Kurz erläutert: „Kernel Oops / Kernel Panic“ Ein „Kernel Oops“ ist ein Fehler in der Funktion des Linux-Kernels. Dabei muss es sich nicht unbedingt um einen Software-Fehler handeln; wenn eine Hardware unerwartet reagiert, kann dies ebenfalls zu einem Oops führen. Das System kann trotz eines Oops manchmal weiterarbeiten. Ein Oops erzeugt normalerweise eine Fehlermeldung mit einer kurzen Beschreibung, was vorgefallen ist, und technischen Informationen, wie Speicherauszügen oder den vom Prozessor ausgeführten Code, die bei der Eingrenzung des ursächlichen Problems helfen sollen. Das Kernel-Oops-Projekt [11] hat es sich zur Aufgabe gemacht, die häufigsten Ooops zu finden und zu beheben. Ein „Kernel Panic“ ist dagegen ein schwerwiegender Fehler, der nicht vom Betriebssystem selbst behoben werden kann. Im Falle eines „Kernel Panic“ wird in der Regel ein Abbild des Kernels zum Zeitpunkt des Absturzes zur späteren Analyse gespeichert und eine Fehlermeldung angezeigt. Meist bleibt bei einem „Kernel Panic“ nur der Neustart des Systems übrig. |
Autoreninformation |
Mathias Menzer wirft gerne einen Blick auf die Kernel-Entwicklung, um mehr über die Funktion von Linux zu erfahren und seine Mitmenschen mit seltsamen Begriffen und unverständlichen Abkürzungen verwirren zu können. |
Autoreninformation |
Dominik Wagenführ legt bei seinem System einen sehr hohen Wert auf Stabilität und Sicherheit. Da die eigenen persönlichen Daten heilig sind, sollten Unbefugte durch eine geeignete Verschlüsselung keinen Zugriff darauf erhalten. |
$ metapixel-prepare -r --width=60 --height=60 /mnt/Bilder /mnt/temp/mosaik |
$ metapixel --library /mnt/temp/mosaik --metapixel /mnt/Bilder/Moewe.jpg /mnt/temp/moewe.png |
$ metapixel --collage --library /mnt/temp/mosaik --metapixel /mnt/Bilder/Moewe.jpg /mnt/temp/moewe_collage.png |
$ metapixel --cheat 80 --library /mnt/temp/mosaik --metapixel /mnt/Bilder/Moewe.jpg /mnt/temp/moewe_cheat80.png |
$ metapixel --antimosaic /mnt/Bilder/moewe.jpg -f 2 --metapixel /mnt/Bilder/moewe.jpg /mnt/temp/anti_moewe.png |
Autoreninformation |
Christian Brabandt setzt privat fast ausschließlich auf Linux und Freie Software. Linux ist sein anderes großes Hobby neben der Fotografie. |
$ nmap 127.0.0.1 $ nmap -6 ::1 $ nmap localhost $ nmap 127.0.0.1-254 |
$ nmap -6 ::1 Starting Nmap 5.21 ( http://nmap.org ) at 2010-02-28 02:08 CET Nmap scan report for ::1 Host is up (0.00026s latency). Not shown: 999 closed ports PORT STATE SERVICE 631/tcp open ipp Nmap done: 1 IP address (1 host up) scanned in 0.10 seconds |
$ nmap 127.0.0.1 Starting Nmap 5.21 ( http://nmap.org ) at 2010-02-28 02:11 CET Nmap scan report for localhost.localdomain (127.0.0.1) Host is up (0.00024s latency). Not shown: 998 closed ports PORT STATE SERVICE 22/tcp open ssh 631/tcp open ipp Nmap done: 1 IP address (1 host up) scanned in 0.06 seconds |
# nmap -O -sV 127.0.0.1 Starting Nmap 5.21 ( http://nmap.org ) at 2010-02-28 03:22 CET Nmap scan report for localhost.localdomain (127.0.0.1) Host is up (0.000027s latency). Not shown: 998 closed ports PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 5.3 (protocol 2.0) 631/tcp open ipp CUPS 1.4 Device type: general purpose Running: Linux 2.6.X OS details: Linux 2.6.19 - 2.6.31 Network Distance: 0 hops OS and Service detection performed. Please report any incorrect results at http://nmap.org/submit/ . Nmap done: 1 IP address (1 host up) scanned in 7.97 seconds |
$ nmap -p 1000-1010 127.0.0.1 |
$ nmap -p 22,80,443 127.0.0.1 |
$ nmap -p- 127.0.0.1 |
# Alias 0 paranoid 1 sneaky 2 polite 3 normal 4 aggresive 5 insane |
$ nmap -T4 -F 127.0.0.1 |
Autoreninformation |
Thorsten Töpper studiert Informatik Bachelor und ist in seiner Freizeit als Trusted-User bei Arch Linux aktiv. Durch sein reges Interesse an Netzwerken und Firewalls verwendet er Nmap regelmäßig in seiner Freizeit. |
$ setxkbmap de neo -option |
$ setxkbmap de |
\sqrt{\alpha^2 + \beta^2} \leq \Delta |
√{α² + β²} ≤ Δ |
Autoreninformation |
Frank Stähr verwendet Neo seit Ende 2007 auf verschiedenen Windows- und Linuxdistributionen und -versionen und ist Mitglied der Mailingliste des Projektes, aber kein aktiver Entwickler. Als Mathematikstudent schätzt er es vor allem in den Punkten Programmierung und LaTeX. |
Messen | ||||
Veranstaltung | Ort | Datum | Eintritt | Link |
Linuxwochen Wien | Wien | 06.-08.05.2010 | frei | http://linuxwochen.at |
LUG Camp | Roth | 13.-16.05.2010 | 55 EUR | https://lug-camp-2010.de |
FuCamp | Furtwangen | 14.-16.05.2010 | frei | http://fucamp.mixxt.de/ |
Freifunk Weekend | Berlin | 14.-16.05.2010 | frei | https://wiki.freifunk.net |
Linuxwochen Eisenstadt | Eisenstadt | 28.-29.05.2010 | frei | http://linuxwochen.at |
Skillshare | Lüneburg | 04.-06.06.2010 | – | http://www.skillshare.eu |
GPN9 | Karlsruhe | 11.-13.06.2010 | – | http://entropia.de/wiki/GPN9 |
LinuxTag | Berlin | 09.-12.06.2010 | 12 EUR | http://www.linuxtag.de |
FrOSCon | Sankt Augustin | 21.-22.08.2010 | 5 EUR | http://www.froscon.de |
Chaos Singularity | Bremgarten | 09.-11.07.2010 | 10 CHF | http://www.cosin.ch |
FrOSCamp | Zürich | 17.-18.09.2010 | frei | http://froscamp.org |
Ubucon | Leipzig | 15.-17.10.2010 | – | http://www.ubucon.de |
OpenRheinRuhr | Oberhausen | 13.-14.11.2010 | – | http://www.openrheinruhr.de |
Open Source Expo | Karlsruhe | 15.-16.11.2010 | 10 EUR | http://openexpo.de |
OOoKWV | München | 16.-17.11.2010 | – | http://www.oookwv.de |
$: | Shell-Prompt |
#: | Prompt einer Root-Shell - Ubuntu-Nutzer können hier auch einfach in einer normalen Shell ein sudo vor die Befehle setzen. |
~: | Abkürzung für das eigene Benutzerverzeichnis /home/BENUTZERNAME |
Impressum ISSN 1867-7991 | ||
freiesMagazin erscheint als PDF und HTML einmal monatlich. | ||
Redaktionsschluss für die Juni-Ausgabe: 23. Mai 2010 | ||
Kontakt | ||
Postanschrift | freiesMagazin | |
c/o Dominik Wagenführ | ||
Beethovenstr. 9/1 | ||
71277 Rutesheim | ||
Webpräsenz | http://www.freiesmagazin.de | |
Autoren dieser Ausgabe | ||
Christian Brabandt | Mit Metapixel ein Mosaikbild erzeugen | |
Martin Gräßlin | Die Welt der Fensterdekorationen | |
Mathias Menzer | Der April im Kernelrückblick | |
Martin Sommer | Roboter sprechen Mono | |
Frank Stähr | Neo – Ein ergonomisches Tastaturlayout | |
Thorsten Töpper | Der Portscanner Nmap – Eine Einführung | |
Dominik Wagenführ | Ubuntu-Systemverschlüsselung per Alternate-CD |
Erscheinungsdatum: 2. Mai 2010 | ||
Redaktion | ||
Dominik Honnef | Thorsten Schmidt | |
Dominik Wagenführ (Verantwortlicher Redakteur) | ||
Satz und Layout | ||
Ralf Damaschke | Yannic Haupenthal | |
Sebastian Schlatow | ||
Korrektur | ||
Daniel Braun | Frank Brungräber | |
Stefan Fangmeier | Mathias Menzer | |
Karsten Schuldt | Franz Seidl | |
Stephan Walter | ||
Veranstaltungen | ||
Ronny Fischer | ||
Logo-Design | ||
Arne Weinberg (GNU FDL) | ||