Portal 2: Sehr viel “Community Content”

Portal 2 ist zwar länger als Portal 1, aber auch ziemlich schnell durchgespielt. Zum Glück gibt es auf thinkingwithportals.com sehr viele gute Einzelspieler- und Coopkarten zum Download.

Portal 2 ist zwar länger als Portal 1, aber auch ziemlich schnell durchgespielt. Zum Glück gibt es auf thinkingwithportals.com sehr viele gute Einzelspieler- und Coopkarten zum Download.
Ich bereite gerade das Tutorium zum Thema Rekursion vor. Natürlich darf da die rekursive Traversierung eines Baumes nicht fehlen.
Der Baum:
1 2 3 4 5 6 7 8 9 10 | public class Node { List<Node> children = new ArrayList<Node>(); String name; public void print(String indent) { System.out.println(indent + name); for (int i = 0; i < children.size(); i++) { children.get(i).print(indent + " "); } } } |
Da ich in den vorangegangenen Aufgaben oft auch eine iterative Implementierung gefordert habe (z.B. Fibonacci Zahlen) durfte folgende Aufgabe nicht fehlen:
3.4
Ist es möglich 3.3 [Ausgabe des Baumes - rekursiv] auch iterativ (ohne Rekursion) zu implementieren?
Wäre diese Implementierung einfacher oder komplizierter?
Warum ist das so?
Wikipedia dazu:
Jede primitiv-rekursive Definition kann unter Zuhilfenahme eines Stapels durch eine Schleife (z.B. For-Schleife oder While-Schleife) ersetzt werden.
Ja, es geht. Ich denke aber, dass das niemand im Tutorium verstehen wird, oder doch?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | static void print_i(Node node) { class StackItem { public Node node; public int index; public String indent; public StackItem(Node n, String indent) { this.node = n; this.indent = indent; this.index = -1; } } Stack<StackItem> stack = new Stack<StackItem>(); stack.push(new StackItem(node, "")); while (!stack.isEmpty()) { StackItem top = stack.peek(); Node topNode = top.node; if (top.index == -1) { System.out.println(top.indent + topNode.name); } else if (top.index < topNode.children.size()) { stack.push(new StackItem(topNode.children.get(top.index), top.indent + " ")); } else { stack.pop(); } top.index++; } } |
Endlich ist es geschafft. Der neue Heimserver ist komplett geliefert, zusammengebaut und installiert.
Nach anfänglichen Ärgernissen
fuhr das System nicht hoch. Erst nach Umstellung des SATA Modus von ‘IDE Emulation’ auf AHCI konnte Debian gebootet werden.
Das Resultat:

Endlich gibt es wieder mehr Platz!
Der alte Server kann dann als kalte Reserve verwendet werden.
Außerdem ist der neue Server ziemlich stromsparend:
Das Energie-Messgerät zeigt momentan (Idle) 20W an.
Der alte Server hat über 50W benötigt.
Soeben habe ich beschlossen, dass mein Blog deutlich mehr Georgia verträgt. Artikelüberschriften und Überschriften in der Sidebar erfreuen sich nun einer neuen Schriftart.
vorher war Arial
jetzt ist Georgia in kursiv
Als ich soeben Office 2007 installiert habe und aktivieren wollte meldete der Aktivierungsassistent, dass Office nicht mehr über das Internet aktiviert werden könne.
Auf der Schachtel steht: Aktivierung gültig für 3 PCs.
Also auf zur Telefonaktivierung. Als ich alle Zahlen eingetippt hatte kam die Frage: Ist ihr Produkt auf mehr als einem PC installiert? Ich habe ’2′ für ‘ja’ gedrückt. Die Antwort: “Ihre Version von Windows kann nur auf einem PC installiert werden.” Aufgelegt.
Auf der Schachtel steht: Aktivierung gültig für 3 PCs.
Also noch mal angerufen und nun bei der Frage die ’1′ für nur ein mal installiert gedrückt. Dann gab es auch Zahlen zum Aktivieren.
Fazit
Ich werde bei der Telefonaktivierung nie wieder angeben, dass ich irgendein Microsoft Produkt auf mehr als einem PC installiert habe.
Ich dachte bislang, dass nur die Telekom zu so etwas fähig ist.
Endlich kann man nicht nur all seine Freunde / Bekannte / Termine / religiöse Ansichten / seinen aktuellen Aufenthaltsort / Lebenslauf mit Facebook verwalten. Jetzt gibt es auch Facebook-Email. Toll!
Endlich kann Facebook auch alle persönlichen Emails mitlesen.
Mark Zuckerberg
Datenschutz ist nicht mehr Zeitgemäß [Sinngemäß]
Vom Facebook Gründer, ist also garantiert nichts zu befürchten. Der will sicherlich nur das Beste für die Leute und sich nicht mit ihren Daten bereichern.
Trotzdem hab ich mir mal meine Facebook-Email Adresse ‘gesichert’ (es gibt sowieso niemand der genauso heißt wie ich).
Probiert es doch einmal aus und schickt eine Mail an
simon.ottenhaus (at) facebook.com
Mal sehen was der Spam-Filter taugt.
Achso: So alten Kram wie POP, IMAP und SMTP gibt es bei Facebook-Mail natürlich nicht!
Mein Blog wird immer mehr zu einer endlosen Ansammlung von VDSL Störungsmeldungen. Dieses Mal war es eine größere Störung, so dass die Telekom schon von der Störung selbst wusste als ich anrief. Der Kundenberater konnte mir dann nur noch bestätigen, dass er mit dieser Verfügbarkeit selbst auch nicht zufrieden wäre. Natürlich konnte er nicht ausschließen, dass es in nächster Zeit zu weiteren Störungen kommen kann.
Sind 3 Telekom-seitige Störungen in 35 Tagen normal?
Die Verfügbarkeit ist eindeutig mangelhaft.
Wer endgültig genug von seinem jetzigen Internetanbieter hat oder nach einem günstigeren Angebot such kann sich unter
billig-tarife.de/internettarife
über die Tarife aller Anbieter informieren.
Nun war das VDSL wieder für über 24h nicht verfügbar. Welche Hardware die Telekom wohl einsetzt? Andauernd Probleme…
Update
Offenbar hat die Telekom ein Update eingespielt und musste dafür alle Kundendaten neu laden. Unsere Daten wurden dabei leider falsch geladen und dann tat nichts mehr. Als der Rückruf der Telekom kam wurden wir natürlich zunächst genötigt unsere Kundendaten im Router neu einzutragen. Als ob wir die geändert hätten…
Liebe Telekom: Wenn wir eine Störung melden ist einer der 2 Fälle aufgetreten:
1) Der billig produzierte Router ist kaputt gegangen.
2) Es liegt eine Telekom-Seitige Störung / Fehlkonfiguration vor!
Anmerkung zur internen Verwaltung der Telekom
Offensichtlich werden Kunden-, Anschluss-, Auftrags- und sonstige Daten bei der Telekom in verschiedensten Datenbanken (oder Textdateien?!) gespeichert. Auf jeden Fall ist alles herrlich inkonsistent.
Mitarbeiter Telekom: Nein an ihrem Anschluss ist kein VDSL geschaltet, nur ein Telefon – Moment, wenn ich auf den Knopf da drücke ist da doch was!
Gegeben sei folgender Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | protected override void CalculateSize(CalculationArguments args) { float lastMarginRight = 0; bool first = true; foreach (RdAbstractNode node in listNodes) { node.CalculateSizeBase(args); if (!first) { width += Math.Max(lastMarginRight, node.MarginLeft); } width += node.OuterWidth; [...] lastMarginRight = node.MarginRight; } } |
Wo ist der Fehler?
Genau: first = true. !first = false.
Damit ist if(!first) äquivalent zu if(false)
Eine Compiler-Warnung wäre hier echt nett gewesen.
Der Bug existiert schon seit längerem, war aber nie wirklich aufgefallen, da node.MarginLeft maximal 3px ist. Die fehlenden 3px sind bisher nicht wirklich aufgefallen…
Ich bin nur froh, dass es dieses Mal mein Fehler war und ich nicht stundenlang verschollene Pixel suchen muss.