Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
| efinf:blc2016:hausaufgaben [2016/11/15 13:22] – Ivo Blöchliger | efinf:blc2016:hausaufgaben [2017/01/09 12:32] (current) – [Aufgaben auf Donnerstag 27. Oktober] Ivo Blöchliger | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | ==== Hausaufgaben auf Dienstag 29. November ==== | ||
| + | * Nesa-Pilot Login fertig machen. | ||
| + | * Siehe [[efinf: | ||
| + | |||
| + | ==== Arbeitsauftrag am Dienstag 22. November und Hausaufgaben für Donnerstag 24. November ==== | ||
| + | === Datenverarbeitung mir Ruby und Regular Expressions === | ||
| + | Hintergrund ist die Idee von S. Knaus, den MAC-Adressen im Schulhaus zu lauschen, um einmal zu sehen, was für Daten daraus gewonnen werden können. Das Projekt wird eventuell ausgebaut und die Daten an verschiedenen Orten erhoben. | ||
| + | |||
| + | - Lesen nach, was eine " | ||
| + | * Wie wird eine MAC-Adresse angegeben, aus wie vielen Bytes besteht sie? | ||
| + | * Aus welchen 2 Teilen ist die MAC-Adresse zusammengesetzt? | ||
| + | * Wie wird garantiert, dass diese weltweit eindeutig ist? | ||
| + | * Kann die MAC-Adresse geändert werden (MAC-Spoofing)? | ||
| + | * Finden Sie Ihre eigenen MAC-Adressen heraus (min 2 Netzwerkkarten im Laptop, 1 im Smartphone) | ||
| + | - Überfliegen Sie http:// | ||
| + | - Auf http:// | ||
| + | - Entpacken Sie diese beiden Dateien. | ||
| + | - Schreiben Sie eine Ruby-Klasse, | ||
| + | - Schreiben Sie ein Ruby-Programm, | ||
| + | * Für jedes 1-Minuten-Intervall, | ||
| + | * Welcher Prozentsatz der MAC-Adressen kann Apple-Geräten zugeordnet werden? | ||
| + | * Welche MAC-Adressen waren während einer ganzen Lektion immer wieder zu sehen? Welcher Klasse könnten diese wohl zugeordnet werden? | ||
| + | * Sich weitere Fragestellungen zu diesen Daten überlegen und eventuell programmieren. | ||
| + | |||
| + | |||
| + | == Lösungsvorschläge == | ||
| + | * {{ : | ||
| + | * {{ : | ||
| + | ==== Aufgaben auf Dienstag 15. November ==== | ||
| + | === Fragen zu DNS, IP-Adressen, | ||
| + | * Finden Sie heraus, welche IP-Adressen Ihre eigenen Geräte (inkl. Router) zu Hause haben (private wie öffentliche). | ||
| + | * Wie gross ist Ihr Heimnetzwerk theoretisch (oder anders gefragt, wie viele Bits Ihre Netzmaske sind 0)? | ||
| + | * Können Sie sich ein Angriffsszenario vorstellen, wo die Kenntnis Ihrer internen IP-Adressen (vom Internet aus nicht erreichbar) nützlich sein könnte? | ||
| + | * Was kostet ein .ch-Domain pro Jahr? Wo? | ||
| + | * Finden Sie heraus, wo www.ksbg.ch geographisch zu Hause ist. | ||
| + | * Auf welchen Ports laufen standardmässige folgende Dienste: http, https, ssh, VoIP? | ||
| + | * Was müssen Sie alles tun, damit Sie zu Hause Ihren eigenen Webserver betreiben könnten? Welche Services müssten Sie wohl einkaufen? Was müssten Sie zu Hause installieren bzw. konfigurieren? | ||
| + | |||
| + | <hidden einige Antworten> | ||
| + | IP-Adresse: Linux: ifconfig, Windows ipconfig. Zu Hause typischerweise 192.168.1.1 (router). | ||
| + | |||
| + | Typischweise 255.255.255.0 Netzmaske (24 Bit Netz, 8 Bit Host). | ||
| + | |||
| + | Angriffsszenario: | ||
| + | http:// | ||
| + | |||
| + | Es ist nicht unwahrscheinlich, | ||
| + | |||
| + | |||
| + | www.ksbg.ch wird (laut https:// | ||
| + | |||
| + | Port Numbers: Siehe auch https:// | ||
| + | | Dienst | Port | | ||
| + | | http | 80 | | ||
| + | | https | 443 | | ||
| + | | ssh | 22 | | ||
| + | | voip | 5060 | | ||
| + | |||
| + | Eigener Webserver zu Hause: Domain (oder Subdomain), Nameserver, der den Domainnamen auf die IP zu Hause auflöst. Idealerweise ist diese IP fix (kostet zwischen 100.- und 200.- im Jahr). Sonst muss bei jeder neuen Vergabe einer IP-Adresse der Nameserver entsprechend neu konfiguriert werden. Dazu gibt es Dienste (vor langer Zeit mal gratis, was heute läuft, keine Ahnung). | ||
| + | |||
| + | Damit ist die eigene IP vom Internet aus erreichbar. Dazu muss noch der Router konfiguriert werden, damit er Anfragen auf port 80 (und evtl. 443) auf die interne IP mit dem Webserver weiterleitet. Der interne Computer muss natürlich einen Webserver am laufen haben und die Firewall entsprechend konfiguriert (wenn denn eine da ist). | ||
| + | </ | ||
| + | |||
| + | ?? Regular Expressions: | ||
| + | ==== Aufgaben auf Donnerstag 10. November ==== | ||
| + | Studieren Sie folgende String-Methoden (z.B. [[https:// | ||
| + | * [] (Substrings, | ||
| + | * chars | ||
| + | * each_char | ||
| + | * strip | ||
| + | * split | ||
| + | * die Array-Methode join (z.B. [[https:// | ||
| + | * die Methode rand(n) (mit n eine Ganzzahl >= 1) (z.B. [[https:// | ||
| + | |||
| + | Programmieren Sie nun folgende Programme, die einen String einlesen und dann das Resultat ausgeben. | ||
| + | - Zwischen allen Buchstaben eines Strings wird ein Leerschlag eingefügt. Z.B. wird "abc efg" zu "a b c e f g". | ||
| + | - Zwei zufällige Buchstaben werden vertauscht. Tipp: verwenden die spezielle Ruby-Syntax '' | ||
| + | - Die Eingabe besteht nur aus Ziffern 1, 2 und 3. Produzieren Sie dann als Ausgabe einen String, der angibt, wie viele dieser Ziffern vorkommen. Beispiel: " | ||
| + | - Schreiben Sie ein Prmgraom, das in jdeem Wrot zewi innree Bcuhstaben vertauhcst, dh.. der esrte und letzte Buchetabsn müssen blnibee. Als Tiennzerchen zhiscwen Wöretrn knönen Sie eifnach Llerscheäge veewendrn(edor das ncoh bseser prognammierer). Als Beispeil eienr Augsabe dinet dseier Ttxe. | ||
| + | <hidden Lösungsvorschläge> | ||
| + | 1. Leerzeichen einfügen: | ||
| + | <code ruby> | ||
| + | str = "Ein Test-String | ||
| + | |||
| + | # Einzeiler | ||
| + | puts str.chars.join(" | ||
| + | |||
| + | # For loop | ||
| + | print str[0] | ||
| + | for i in 1...(str.size) | ||
| + | print " # | ||
| + | end | ||
| + | puts | ||
| + | </ | ||
| + | |||
| + | 2. Buchstaben vertauschen | ||
| + | <code ruby> | ||
| + | str = " | ||
| + | |||
| + | # Zwei zufällige, unterschiedliche Positionen | ||
| + | p1, p2 = rand(str.size), | ||
| + | p2+=1 if p2>=p1 | ||
| + | # Vertauschen | ||
| + | str[p1], str[p2] = str[p2], str[p1] | ||
| + | puts str | ||
| + | </ | ||
| + | |||
| + | 3. Ziffern zählen: | ||
| + | <code ruby> | ||
| + | str = " | ||
| + | puts str | ||
| + | # Position im String | ||
| + | p = 0 | ||
| + | # aktuelle Ziffer | ||
| + | z = str[p] | ||
| + | # Anzahl Vorkommnisse | ||
| + | n = 0 | ||
| + | |||
| + | # Resultat | ||
| + | res = "" | ||
| + | |||
| + | # String durchgehen | ||
| + | str.each_char{|c| | ||
| + | if c==z # Immer noch gleich? | ||
| + | n+=1 # Zähler erhöhen | ||
| + | else | ||
| + | res += "# | ||
| + | n = 1 # Neue Ziffer merken | ||
| + | z = c | ||
| + | end | ||
| + | } | ||
| + | res += "# | ||
| + | |||
| + | puts res | ||
| + | </ | ||
| + | |||
| + | 4. Wechstaben Verbuchseln | ||
| + | <code ruby> | ||
| + | def switch(wort) | ||
| + | return wort if (wort.size< | ||
| + | p1, p2 = rand(wort.size-2)+1, | ||
| + | p2+=1 if p2>=p1 | ||
| + | # Vertauschen | ||
| + | res = String.new(wort) | ||
| + | res[p1], res[p2] = res[p2], res[p1] | ||
| + | return res | ||
| + | end | ||
| + | |||
| + | text = "Bis Juni 2016 wurden über 39,5 Millionen Artikel der Wikipedia in annähernd 300 Sprachen in Mehrautorenschaft von freiwilligen Autoren verfasst. Darüber hinaus werden die Artikel nach dem Prinzip des kollaborativen Schreibens fortwährend bearbeitet und diskutiert. Alle Inhalte der Wikipedia stehen unter freien Lizenzen." | ||
| + | |||
| + | # Einzeiler | ||
| + | puts text.split(" | ||
| + | |||
| + | </ | ||
| + | </ | ||
| + | ==== Aufgaben auf Donnerstag 27. Oktober ==== | ||
| + | * Pseudocode aufs Wiki: [[efinf: | ||
| + | |||
| + | |||
| + | ==== Aufgaben auf Dienstag 20. September ===== | ||
| + | * Aufgaben auf [[efinf: | ||
| + | |||
| + | ==== Aufgaben auf Dienstag 13. September ==== | ||
| + | * Ruby-Kurs (pdf-Version) Abschnitt 1.6 (Loops), Aufgabe 8 ist fakultativ. | ||
| + | |||
| + | ==== Aufgaben auf Donnerstag 8. September ==== | ||
| + | * In Java kann eine Farbe durch Angabe einer einzigen natürlichen Zahl ausgewählt werden, von denen die " | ||
| + | <code java> | ||
| + | new Color(Math.random()*0x100_0000); | ||
| + | </ | ||
| + | <hidden Antwort> | ||
| + | * Im Speicher stehen 3 Bytes mit den Werten 52, 50 und 49. | ||
| + | - Welche Zeichenkette (String) erhält man, wenn man diese 3 Bytes als ASCII-Code interpretiert? | ||
| + | <hidden Antwort>" | ||
| + | - Welche natürliche Zahl erhält man, wenn man diese 3 Bytes // | ||
| + | <hidden Antwort> | ||
| + | - Welche natürliche Zahl erhält man, wenn man diese 3 Bytes // | ||
| + | <hidden Antwort> | ||
| + | - Welche natürliche Zahl erhält man, wenn man den String (wie im Punkt 1) als Hexadezimalzahl interpretiert? | ||
| + | <hidden Antwort> | ||
| + | * Grossbuchstaben haben den ASCII-Code 65 (A) bis 90 (Z). Kleinbuchstaben 97 (a) bis 122 (z). Von irgendeinem Buchstaben ist sein ASCII-Code in Binärdarstellung gegeben. | ||
| + | - Wie können Sie auf einen Blick entscheiden, | ||
| + | <hidden Antwort> | ||
| + | - Wie kann man, in der Binärdarstellung der Codes, ganz einfach aus Gros- Kleinbuchstaben machen und umgekehrt? | ||
| + | <hidden Antwort> | ||
| + | * Zählt man mehrere binäre Zahlen mit schriftlicher Addition zusammen, kann es einen Übertrag (" | ||
| + | <hidden Antwort> | ||
| + | | | 1 | 1 | 1 | | ||
| + | | + | 1 | 1 | 1 | | ||
| + | | + | 1 | 1 | 1 | | ||
| + | | + | 1 | 1 | 1 | | ||
| + | | Behalte | **1** | | ||
| + | | ---- | ---- | ---- | ----- | | ||
| + | | | | | 0 | | ||
| + | </ | ||
| + | * Wie bestimmt man möglichst effizient das Bit 16 (d.h. das siebzehnte Bit, man beginnt bei Bit 0 zu zählen) einer natürlichen Zahl, die als 8-stellige Hexadezimalzahl gegeben ist? Wie könnte man das mit Ruby tun? | ||
| + | <hidden Antwort> | ||
| + | * Lernen Sie die Zweierpotenzen bis $2^{10}$ auswendig. Lernen Sie folgende Zweierpotenzen auf 10% genau auswendig: $2^{16}$, $2^{24}$, $2^{32}$, $2^{64}$. | ||
| + | * Schreiben Sie die Zahl 78546939656932 in der Basis 36. Verwenden Sie dazu ruby. | ||
| + | <hidden Antwort> | ||
| + | | ||
| + | ==== Aufgaben auf Dienstag 6. September ==== | ||
| + | * Ruby-Kurs (PDF-Version) bis und mit 1.5 | ||
| + | |||
| + | ==== Hausaufgaben auf Dienstag 23. August ==== | ||
| + | * Backup Ihrer lieben Daten | ||
| + | * Ubuntu Installationsimage auf Stick mitbringen (oder andere Linux-Distro) (z.B. von http:// | ||
| + | * Ggf. VirtualBox oder ähnliches installieren. https:// | ||
| + | * Ggf. schneller USB-Stick (>=16GB) oder externe HD/SDD (passender Anschluss) mitbringen. | ||
| + | * Laptop mitbringen. | ||