15 Things that sucked about Pacte des Loups
Haha, da habe ich doch gerade im Web Archive meine alte Website wiedergefunden, zusammen mit ein paar Artikeln. Einige davon sind echt zum Schießen und werden demnächst hier neuveröffentlicht.
Der erste
ist meine Rezension über den Film "Pakt der Wölfe"
Viel Spaß beim Lesen :)
15 things that sucked about "Pacte des Loups"
- Es sind alle Franzosen
- Ein Indianer der Kung Fu kann, rettet...
- ...den Alten Mann mit dem häßlichen Mädchen, das keiner kennt und die alle hassen.
- Hätte er sie in Ruhe gelassen hätte sich der Film ca 45 Minuten sparen können.
- Die Frau wird der Hexerei angeklagt...
- ...der Biologe jedoch NICHT!
- Alle Alten Menschen sind Böse.
- Die Drahtzieherin (mit Kontakt zum Papst in Rom wohlbemerkt)...
- ...ist eine Nutte
- Der verrückte Endgegener hat ja wohl die lächerlichste Waffe des gesamten Genres.
- Welchen Grund hat jemand, seine zweite Hand zu verstecken und verschimmeln zu lassen?
- Die "BESTIE" ist ein gepanzertes Trüffelschwein.
- Der Film ist mit 2 Stunden Spieldauer einfach zu lang.
- Ganz nebenbei wird erwähnt, daß der Indianer als kleines Kind in seinem Dorf "gefunden" wurde. Wieso kann er dann seinen Kampfsport, das Weißbrot aber nicht?
- In jedem "Tatort" am Sonntag kommt mehr Spannung auf. Toll, der Täter selbst befand sich die ganze Zeit unter ihnen, aber entlarvt wird er duch den Jagdhof. Dessen Existenz wird erst nach 2/3 des Films bekannt.
Sowas ist mir schon lange nicht mehr passiert. Ich sehe einen Film und habe danach wirklich das Gefühl, meine Zeit verschwendet zu haben.
Wer ihn gesehen hat weiß was ich meine, wer ihn noch nicht gesehen hat: lest lieber ein Buch...
Ich liebe Windows!
Das kategorische Statement im Titel sorgt sicher dafür, das einige besonders Linux/Mac-Affine Leser die Lektüre des Artikels bereits abgebrochen haben, jedoch ist die Aussage auf mich durchaus zutreffend. Das mag man verwerflich finden, daher möchte ich doch einmal darlegen, weshalb jemand ein abstürzendes, proprietäres Weltherrschafts-Betriebssystem als gut befinden mag.
Die letzte Formulierung ist natürlich überspitzt. Genauso wie der Titel. Ich liebe nicht alle Windows. Windows 98 beispielsweise war ziemlich schrecklich. Windows Vista produziert bei mir immer wieder Fehler, die ich bisher in noch keinem Betriebssystem finden konnte. Vista ist dabei sehr kreativ.
Vielleicht liegt es an diversen Shellerweiterungen wie beispielsweise dem installierten Tortoise, dass mein System manches mal den Desktop zum Abstürzen und Neuladen
bringt, wenn ich einen Rechtsklick auf eine Datei mache. Das wäre dann Schuld des Drittanbieters, der mich zur Verwendung von nicht verwalteten Code zwingt.
Was ist aber, wenn ich einen Ordner mit meinen Lieblingsfernsehserien öffne, und der Rechner so lange rattert (Festplatte) sodass letzen Endes das System einfriert?
Naja dann muss man den Windows Index Service deaktivieren. Die Suche funktioniert danach noch genauso gut (eher sogar besser). Schlimm jedoch,
dass der Index Service auch zu Suche in Outlook verwendet wird. Durch Deaktivierung desselben sind komplexe Suchanfragen nach vergangenen Konversationen nahezu unmöglich.
Hier muss ich mir eingestehen: Epic Windows Fail.
Aber lassen wir Vista beiseite. Vista ist die Macke, die jeder Freund hat. Die muss man akzeptieren und in der Vergangenheit belassen, und ermöglichen, dass der Freund sich ändert.
So geschehen bei Windows 7. Windows 7 ist stabil, schnell, schön. Wer's nicht glaubt soll sich selbst davon überzeugen. Windows 7 hat ähnliche Qualität wie Windows XP.
Ich habe es weder auf meinem Laptop, noch auf meinem Arbeitsrechner, die beide mit XP laufen, in den vergangenen 5 Jahren geschafft, diese zum Absturz zu bringen. Aber ich schweife ab. Warum liebe ich Windows?
Diese Liebe entspringt der einfachen Überlegung, sich anzupassen und in seiner Umgebung zurechtzufinden und möge diese noch so gastunfreundlich sein. Dazu möchte ich ein kleines, Fachfremdes Beispiel geben:
Jeder kennt Zombie Filme. Alle haben gemeinsam, dass ein Großteil der Menschheit von einem Übel befallen wird, dass sie zu Monstern macht, die den wenigen nicht befallenen ans Leder wollen.
Der Fokus dieser Filme liegt auf dem Überlebenskampf dieser Überlebenden, die meist in kleinen, unorganisierten Gruppen auftreten, ihre eigene Dynamik entwickeln und modellhaft Stereotypen aus der normalen Welt wiederspiegeln.
Ich habe mich immer gefragt, was die Leute antreibt, wie die Irren ums Überleben zu kämpfen.
Mal abgesehen von "28 Weeks later" lässt keiner der Filme auf ein besseres Morgen hoffen und die Welt ist so ziemlich dem Untergang geweiht. Von Leben kann also nie wieder die Rede sein, viel mehr geht es in Zukunft nur noch ums überleben.
Paranoia, Stress, Todesangst, begrenzte Lebensräume und Tod sind die einzigen Folgen eines derartigen Szenarios. Kein Konsum, kein Luxus, kein Swimmingpool, kein Fernsehen, kein gutes Essen. Wozu sollte man in so einer Welt überleben wollen?
Dagegen wirkt das sonst als "finster" beschriebene Mittelalter doch wie ein Kindergeburtstag bei McDonalds.
Da bleibt wohl nur ein Ausweg: Selbstmord.
Meine individuelle Überlegung zu diesem Sachverhalt geht nun davon aus, dass es noch einen zweiten Ausweg gibt: Selbst ein Zombie werden.
Dadurch ließen sich alle oben genannten Probleme abschalten. Keine Todesangst, kein Stress, und man kann gehen wohin man will. Man ist ja quasi schon untot.
Dabei bleiben zwar auch der freie Wille (haha), die Individualität, die Liebe, der Glaube und die Hoffnung auf der Strecke, aber ich frage einfach mal in den Raum, ob das denn eigentlich so schlimm wäre?
Jetzt mag einem der Gedanke missfallen, sich beißen zu lassen oder bei lebendigem Leibe gefressen zu werden, um wieder einen ruhigen Alltag führen zu können.
Aber ich frage mich, ob man als Zombie nicht einfach glücklicher wäre, da man alle Facetten des sonst so unerträglichen Menschenlebens, zusammen mit seiner Schönheit abgelegt hat.
Die Frage geht noch ein wenig weiter. Ist es vielleicht besser, als Tier, bereinigt von aller Vernunft, Sitte und Moral zu leben? Ist das Akzeptieren der neuen Umstände - des neuen Systems - nicht wesentlich einfacher, als dauerhaft dagegen zu kämpfen?
Diese Frage lässt übertragen: Wär es nicht vielleicht wirklich besser, wenn wir uns alle überwachen ließen, und es keine Kriminalität mehr gäbe?
In letzterem Fall natürlich nicht, weil a) Durch Überwachung die Kriminalität nicht weniger wird und b) es sinnvolle Alternativen gibt. Das Zombie Szenario besitzt diese Eigenschaften nicht.
Genau wie ein Charakter des Films, der sich dazu entscheidet, selbst zum Zombie zu werden um fortan ein stumpfsinniges, triebgesteuertes, wenn auch kurzes Leben zu führen, so habe ich mich dazu entschieden, nicht gegen Windows zu kämpfen und über alle seine Fehler zu fluchen,
sondern mich damit abzufinden und das Beste aus der Situation zu machen. Ich beschäftigte mich mit der Absicherung, Programmierung und Fehlertoleranz des Systems und fahre seither sehr gut. Im Endeffekt habe ich gekniffen, aufgegeben, die weiße Fahne gezückt und mich zum Zombie gemacht, der
alles um ihn herum einfach akzeptiert ohne nach Alternativen zu suchen, aber das macht mir das Leben extrem leichter.
Ich vertraue Microsoft, mit durch Windows gemopsten Daten verantwortungsbewusst umzugehen und mich genug abzusichern, auch wenn das vllt. sehr naiv ist.
Als Alternative Linux vorzuschlagen finde ich immer ein bisschen weit hergeholt. Linux sei kostenlos und "besser", sicherer, freier. Dazu kann ich nur sagen, dass Linux keineswegs kostenlos ist, es sei denn die Zeit des Benutzers hat keinen Wert.
Solange man nicht viel seiner wertvollen Zeit investiert, bleibt man in einer schwarz-weißen Kommandozeile gefangen. Da sieht man die Gitterstäbe seines eigenen Käfigs gar nicht!
Unter Linux kann ich natürlich einen Desktop betreiben, aber weder sind die UI-Metaphern der verfügbaren Desktops so präzise, noch ist deren Kompatibilität noch deren Installation trivial.
Die Installation von Programmen, ist ein Graus. Unter FreeBSD fand ich pkg_add, unter Debian apt-get immer ganz nett, aber (K)Ubuntu wollte partout den Firefox und andere Helferlein nicht installieren, wenn ich nicht das Ultimatum erfüllen würde, 2 Makes und 200 Zeilen ./configure anzupassen.
Unter Windows heißt das nach wie vor "Weiter>Weiter>Weiter>Fertigstellen".
"Jaaaa, aber Linuxe sind halt heterogen, da geht nicht alles immer gleich, außerdem gibt’s notfalls für deine Distri immer einen vorgefertigten Build", höre ich euch da sagen. "Außerdem wird durch die Heterogenität das System viel sicherer".
Sich Sicherheit durch Heterogenität zu erkaufen halte ich schlichtweg für Blödsinn. Das ist wie wenn ich keine Angst vor AIDS haben muss, weil mein Penis in keine Vagina passt. Da hab ich doch lieber ein durchweg kompatibles Geschlechtsorgan und einen bisschen weniger Angst.
Update:
Sven Jacobs hat sich die Mühe gemacht, den Artikel zu kommentieren:
0xefbbbf - Ich Liebe Linux!
Danke für das Feedback :)
Kurzes Word 2007 Tutorial
Immer wieder beobachte ich bei meinen Nicht-Informatiker-Bekannten und -Verwandten, wie umständlich sie mit Word umgehen. Word ist eigentlich eine sehr mächtige Software, die einem das Leben ziemlich leicht, aber auch ziemlich schwer machen kann. Wenn man alles mit der Hand formatiert, wie ich es oft bei besagten Mitmenschen beobachte macht man sich das leben nur unnötig kompliziert. Auch beim Pflegen von Inhaltsverzeichnissen oder Quellenangaben tun sich manche schwer, obwohl Word das alles selbst macht. Daher möchte ich nun, für meine Mitmenschen ohne IT Hintergrund ein kleines Tutorial geben, welches ein paar erweiterte Grundfunktionen von Word aufgreift und erklärt. Darunter sollen auch absolute Basics fallen, wie beispielsweise Tastenkombinationen.
- Einführung
- Formatieren
- Anlegen der Gliederung
- Nummerieren der Gliederung
- Inhaltsverzeichnis anlegen
- Seitennummer einfügen
- Kapitel in Kopfzeile anzeigen
- Pflegen von Quellenangaben
Einführung
Glossar
Ribbon Menü: Die dicke blaue Leiste oben in Word 2007
Cursor: Der blinkende Textzeiger
Absatz: Ein logischer Textblock. Für jeden Absatz gelten eigene Formatierungen,
also Schriftarten, Farben und Abstände.
Einzug: Der Abstand eines Absatzes zum linken Textrand.
[TASTE]: Gibt an, dass eine Tastenkombination auf der Computertastatur erfolgen
soll. Der Name TASTE wird durch den entsprechenden Namen ersetzt.
Navigation
Klickfolgen: Im Folgenden werden Klickfolgen wie folgt angezeigt:
Start -> Absatz -> [Zentriert]
Das bedeutet dass man die Registerkarte "Start" anwählt und im Feld "Absatz" den
Knopf "Zentriert" wählt. Wenn keine Beschriftungen vorhanden sind, kann man sich
anhand der Symbole herleiten, was gemeint ist. Wenn man mit der Maus über ein Symbol
fährt ohne zu klicken bekommt man angezeigt, wie der Knopf heisst und was er bedeutet.
Einige Tasten
[STRG]: Die Steuerungstaste, auf jeder Tastatur immer ganz Links unten. Steht auch
drauf ;)
[SHIFT]: Die "Großmach"- Taste links auf der Tastatur, direkt über der [STRG] Taste,
sieht aus wie ein Pfeil nach oben.
[CAPSLOCK]: Die Taste über der [SHIFT] Taste, sieht aus wie ein Pfeil nach unten.
[TAB]: Die "Tabulator" Taste. Diese befindet sich über der [CAPSLOCK] Taste und
zeigt zwei entgegengesetzte Pfeile.
[ENTER]: Auch [RETURN] ist die Taste für einen neuen Absatz auf dem "Schreibblock"
ganz rechts, die aussieht wie ein Pfeil nach unten und dann links. Sie ist neben
der Leertaste die größte Taste auf der Tastatur.
[BACKSPACE]: Die Taste über der [ENTER] Taste die man braucht um einen Buchstaben
zu löschen.
Einige Tastenkombinationen
Wichtig ist zu wissen, dass man die Tasten beim Schreiben kombinieren muss, da man
sonst die gesamte Formatierung verändert. Als Kombination bezeichnet man das Drücken
von zwei Tasten gleichzeitig. [SHIFT] + [ENTER] bedeutet, dass man die [SHIFT] Taste
drückt und dann gedrückt hält, und während die Taste gedrückt ist die [ENTER] Taste
gedrückt werden muss.
[ENTER]: Erzeugt einen neuen Absatz.
[SHIFT] + [ENTER]: Erzeugt einen Zeilenumbruch. Dadurch wird kein neuer Absatz begonnen,
das ist später wichtig beim Formatieren.
[STRG] + [ENTER]: Erzeugt einen Seitenumbruch. Alles was über dem Cursor ist bleibt
wo es ist, aber alles was darunter ist kommt auf die nächste Seite.
[TAB]: Erhöht den Einzug um eine Ebene.
[SHIFT] + [TAB]: Erniedrigt den Einzug um eine Ebene.
[STRG] + [TAB]: Rückt den Text mit einem Tabulatorzeichen ein. Ein Tabulatorzeichen
kann man sich vorstellen wie ein Paket aus vielen Leerzeichen.
Das ist praktisch, wenn man Text "verschieben" möchte. Statt ganz viele Leerzeichen
zu tippen kann man einige wenige Tabulatorzeichen verwenden.
Formatieren
Möchte man eine Überschrift im Text anzeigen, so sollte man nicht jedes mal den Text markieren und "Fett" machen, sondern man kann sich aus der Liste bei "Start > Formatvorlagen" eine Formatierung aussuchen. Diese gilt dann absatzübergreifend. Wählt man beispielsweise einen Text, der als Überschrift dienen soll, so klickt man auf den Absatz, und sucht in den Formatvorlagen die Vorlage "Überschrift 1". Für Unterüberschriften entsprechend "Überschrift 2" und so weiter.
Dadurch wird der Text automatisch nach Überschriften gegliedert. Dieser Teil ist wichtig!
Der Vorteil ist hierbei, dass man jeden Text zentral formatiert hat. Möchte man von allen Überschriften im Dokument die Farbe ändern braucht man nur auf die Formatvorlage mit der rechten Maustaste zu klicken und "Ändern" zu wählen.
Daraufhin erscheint das folgende Fenster. Hier kann man alle eigenschaften der Formatierung verändern. Wenn man dann auf OK klickt werden diese für alle Absätze im Text übernommen.
Dadurch braucht man nicht mehr für jede Überschrift die Farbe anpassen, sondern macht das nur einmal und alle entsprechend formatierten Überschriften passen sich automatisch an.
Anlegen der Gliederung
Beim Schreiben größerer Dokumente sollte man am Besten mit der Gliederung anfangen. Hierzu bietet Word einen eigenen Anzeigemodus. Diesen erreicht man wenn man oben im Ribbon Menü auf Ansicht > Gliederung klickt.Der Text verändert sich dann und es erscheint eine Liste von Punkten in einer Baumstruktur:
Durch doppelklicken auf die Kreise kann man die Dokumentstruktur expandieren oder kollabieren
Hier kann man nun alle Überschriften (die Gliederung) anlegen. Wenn man [ENTER] drückt wird eine neue Überschrift erstellt. Man kann diese dann mit [TAB] einrücken um Unterüberschriften zu erstellen.
Nummerieren der Gliederung
Hat man nun alle Überschriften zusammen, so möchte man unter Umständen, dass diese sinnvoll nummeriert werden. Dazu klickt man auf die erste Überschrift im Dokument. Dann wählt man "Start -> Absatz > Liste mit mehreren Ebenen" und wählt in der Sektion "Listen im aktuellen Dokument" ein Überschriftenformat.
Danach sollten vor allen Überschriften im Dokument entsprechende Nummern angezeigt werden.
Inhaltsverzeichnis anlegen
Nachdem nun alle Überschriften erstellt wurden und Text vorhanden ist, möchte man ein Inhaltsverzeichnis erstellen. Dazu klickt man in die erste Seite des Dokuments und wählt im Ribbon "Verweise > Inhaltsverzeichnis". Das Inhaltsverzeichnis enthält dann alle Überschriften und deren Seitenzahlen.
Wenn sich der Text ändert muss man mit der rechten Maustaste auf das Inhaltsverzeichnis klicken und dann "Felder aktualisieren" wählen. Dann kommt ein Dialog, wo man "Gesamtes Verzeichnis aktualisieren" wählen sollte.
Nach dem bearbeiten des Dokuments muss das Verzeichnis neu erstellt werden
Seitennummer einfügen
Nachdem alles gut gelaufen ist, sollte man Seitennummern einfügen. Dazu geht man auf "Einfügen > Seitenzahl". Dann kann man wählen, wo die Seitenzahl erscheinen soll.
Kapitel in Kopfzeile anzeigen
Um anzuzeigen in welchem Kapitel sich die aktuelle Seite befindet wendet man einen speziellen Trick an.
Man geht auf "Einfügen > Kopfzeile" und wält eine Position.
Dann befindet man sich im Kopf- und Fußzeilenmodus. Dieser ist ein spezieller Anzeigemodus, der über "Entwurf > Kopf und Fußzeile schließen" oder einen Doppelklick auf den Fließtext wieder verlassen werden kann.
Durch Doppelklick in die Kopf- oder Fußzeile landet man wieder in diesem Modus. Hier gehen wir in das Feld der Kopfzeile und wählen "Einfügen > Schnellbausteine > Feld". Daraufhin erscheint ein Dialogfenster.
In diesem wählt man aus der Liste links "StyleRef" und aus der Liste rechts "Überschrift 1". Danach mit OK bestätigen. Nun wird in der Kopfzeile immer der Inhalt der aktuellen Überschrift (der mit der Formatierung "Überschrift 1") angezeigt.
Die Feldfunktion "StyleRef" wird verwendet, um in der Kopfzeile das aktuelle Kapitel anzuzeigen
Pflegen von Quellenangaben
Um Quellenangaben zu pflegen kann man einen komfortablen Editor in Word verwenden. Diesen erreicht man über die Registerkarte "Verweise > Quellen verwalten"
Im Editor wählt man "Neu" und kann dann alle Angaben zur Qelle tätigen. Dann alles mit OK bestätigen.
Mit dem Quelleneditor können Quellenverzeichnisse komfortabel erstellt und gepflegt werden
Im Text kann man dann an der entsprechenden Stelle einfach "Verweise > Zitat einfügen" wählen, wodurch dann eine Textmarke gesetzt und am Ende des Dokuments automatisch ein Quellenverzeichnis erstellt wird.
Closures in C# verwenden
Aha, schon wieder was gelernt! Gerade bin ich über ein Problem gestolbert, dessen Lösung mir zunächst ein wenig schleierhaft war, was sich jedoch sehr elegant lösen ließ.
Ich habe eine Klasse, die eine Art Primary Key verwendet. Dieser Primary Key wird durch das Property "Id" abgebildet. Diese Id soll Objekte der Klasse in einer Menge eindeutig identifizieren. Normalerweise könnte man für soetwas Dictionaries verwenden, jedoch habe ich das Problem, dass ich die Liste mit der Klasse XmlSerializer als XML serialisieren möchte, die jedoch leider keine Dictionaries unterstützt. Der Workaround hierfür wäre das Implementieren des Interfaces IXmlSerializable in einer eigenen, von Dictionary<TKey, TValue> abeleiteten Klasse, jedoch ist das nicht erwünscht. Ist ausserdem ein anderes Problem.
Nehmen wir also folgende Klasse an:
public class Container : IEquatable<Container>
{
private string _id = string.Empty;
public string Id
{
get { return _id; }
set { _id = value; }
}
// Weitere Properties & Implementierungen
public bool Equals(Container other)
{
return (_id == other._id);
}
}
Die Klasse implementiert IEquatable*. Dieses Interface ist notwendig, um beispielsweise
das Vorhandensein eines Objektes in einer generischen Liste List<Container>
mit der Methode List<Container>.Contains(Container c) festzustellen. Dabei
ist übrigens darauf zu achten, dass die hierzu verwendete Contains Methode die komplette
Liste durchläuft und daher eine sehr teure Operation darstellt.
Nun möchte ich aber auch in der Lage sein, konkrete Objekte aus der Liste anhand
der Id herauszufiltern. Contains gibt ja nur true oder false zurück, also die Aussage, ob das Objekt mit der gleichen Id vorhanden ist. Dazu kann die Find Methode verwendet werden, die von List<T>
bereitgestellt wird. Diese akzeptiert einen generischen Delegaten, nämlich Predicate<T>,
dessen Signatur die folgende ist:
public delegate bool Predicate<T>(T obj)
Damit kann ich also eine Methode angeben, die eine benutzerdefinierte Funktion als
Vergleichsoperation auf alle Elemente der Liste anwendet. Die Implementierung in
List<T> sieht wie folgt aus:
public T Find(Predicate<T> match)
{
if (match == null)
{
ThrowHelper.ThrowArgumentNullException(ExceptionArgument.match);
}
for (int i = 0; i < this._size; i++)
{
if (match(this._items[i]))
{
return this._items[i];
}
}
return default(T);
}
Die Liste läuft über alle Elemente und führt den Delegaten aus. Die Operation im delegaten muss true oder false zurückliefern. Ist der Vergleich true, dann stoppt Find den durchlauf und gibt das aktuelle Element zurück.
Wie kann ich dem Delegaten, der ein Objekt vom gleichen Typ erwartet und true oder
false zurückgibt aber nun sagen, dass er die lediglich die Ids der Objekte vergleich
soll? Das geht am besten über eine anonyme Funktion:
public class ContainerCollection
{
private List<Container> containers = new List<Container>();
public ContainerCollection() { Fill(); }
private void Fill()
{
// Ein paar container hinzufügen:
Container c1 = new Container();
c1.Id = "ContainerOne";
containers.Add(c1);
// ...
}
public Container FindContainerById(string id)
{
Container container = null;
container = containers.Find(
delegate(Container c)
{
return (c.Id == id);
}
);
return container;
}
}
Gegegeben ist die ContainerCollection Klasse, die intern die Liste verwaltet. Die
Funktion FindContainerByIdverwendet eine anonyme Methode. Normalerweise besitzt
eine Methode ihren eigenen Methoden-Stack, der alle durch Eingabeparameter definierten
Werte beinhaltet, jedoch ist der hier definierte Delegat im Methodenkontext von
FindContainerById deklariert worden, und hat daher weiterhin Zugriff auf den "äußeren"
Methodenstack. Dadurch ist es möglich, die Id des aktuell iterierten Containers
c mit dem Eingabeparameter id zu vergleichen.
Diese künstliche Verlängerung der Lebensdauer wird auch als Closure bezeichnet.
Der Aufruf könnte so aussehen:
ContainerCollection c = new ContainerCollection();
Container container = c.FindContainerById("ContainerOne");
Programmierern von funktionalen Programmiersprachen dürfte dieses Konzept durchaus bekannt sein. In JavaScript geht vieles über Closures und erfordert ein ziemliches Umdenken. Ich halte es deswegen für sehr gewinnbringend, sich mal mit funktionalen Programmiersprachen auseinander zu setzten. Wieso nicht mal F# ausprobieren?
Die Methode FindContainerById geht übrigens noch kleiner zu schreiben, wenn man
einfach alle Umbrüche entfernt:
public Container FindContainerById(string id)
{
return containers.Find(delegate(Container c) {return c.Id == id;});
}
Schon wieder haben wir eine Zeile gespart und die Leserlichkeit verschlechtert Dafür hält uns unser Chef jetzt für genialer, weil wir Code schreiben, den er noch weniger versteht ;)
* Ich weiss, meine Nicht-Autoproperties sind sowas von 2005. Auch lässt sich darüber streiten, ob die Überladung von Equals zur Prüfung auf Wertegleichheit so sauber ist, jedoch gibt die MSDN Doku dazu an, dass das durchaus eine valide Implementierung ist. In so einem Fall muss man natürlich für eine genügende Dokumentation sorgen.
Bing zur Suche in Firefox verwenden
Wenn man in die Firefox Adressleiste eine fehlerhafte URL eingibt, so wird die Eingabe
als Suchanfrage behandelt.
Gibt man "mozilla.org" ein, so wird diese Eingabe zu http://mozilla.org konvertiert.
Gibt man jedoch "virtual c# keywords" ein, so ist dies keine URL und Firefox wird diese Eingabe automatisch an Google weiterleiten.
Ich verwende jedoch lieber Bing als Google, daher fragte ich mich, wie ich diese
Standardsuche umschalten kann. Dazu habe ich nur kurz die sehr gut strukturierte Config von Firefox durchgeblättert,
die über die Eingabe von about:config in Firefox erreichbar ist (sollte man kennen), nur für ungeübte hier
nochmal :). Bitte beachtet den Hinweis von Firefox, vorsichtig mit den verfügbaren Einstellungen
zu sein. Nur weil man etwas kann, heisst das nicht dass man es auch unbedingt tun sollte,
gemäß dieser Illustration:
Dann kann man bei Filter oben "keyword.URL" eingeben. Durch Doppelklick auf den
Eintrag kann er dann geändert werden, einfach
http://www.bing.com/search?q=
eintragen. Fortan werden alle fehlerhaften Urls statt bei Google bei Bing gesucht:
Klappt natürlich auch mit anderen Suchmaschinen.
Weitere details zum keyword.URL Parameter: http://kb.mozillazine.org/Keyword.URL