tag:blogger.com,1999:blog-33498320665677640642024-03-13T01:36:40.243+01:00LARS WUCKELAnonymoushttp://www.blogger.com/profile/16165301474370289610noreply@blogger.comBlogger18125tag:blogger.com,1999:blog-3349832066567764064.post-11754658050460293262014-02-25T21:11:00.000+01:002014-03-23T20:52:38.330+01:00Ordnung auf der Festplatte mit tagsistantWer schon länger sich gewünscht hat zu Dateien auf der Festplatte die Tags ähnlich zu vergeben wie bei google mail oder drive, der kann ja mal <a href="http://www.tagsistant.net">tagsistant</a> ausprobieren.<br />
<br />
Für die Installation unter Ubuntu 13.10 muss man folgendes installieren:<br />
<br />
$ sudo apt-get install subversion libextractor-dev libdbi-dev libgtk2.0-0 libsqlite3-dev libfuse-dev libglib2.0-0 libglib2.0-dev sqlite3 libdbd-mysql libdbd-sqlite3 libdbi0 libdbi0-dev <br />
<br />
$ cd /usr/lib/i386-linux-gnu<br />
$ sudo ln -s libgthread-2.0.so.0 libgthread-2.0.so<br />
<br />
Nun kann man sich die entsprechende stable Version downloaden und damit arbeiten.<br />
Wer aber etwas Risiko bereiter ist kann auch die unstable Version verwenden. Diese muss man sich aus dem svn repository holen.<br />
Ich beschreibt mal wie das geht:<br />
<br />
Version abrufen:<br />
$ svn co http://svn.gna.org/svn/tagfs/trunk tagsistant<br />
<br />
und kompilieren<br />
<br />
$ cd tagsistant<br />
$ ./configure<br />
$ make<br />
$ sudo make install<br />
<br />
Danach kann man mit <br />
<br />
$ tagsistant ~/dms <br />
<br />
ein Verzeichnis (hier dms) mounten in denen man die Dateien verwalten kann. Das Verzeichnis wird mittels fuse gemountet.<br />
<br />
Die Dateien dürfen allerdings nur im Verzeichnis store verwaltet (verschoben, gelöscht,umbenannt) werden. Der Ordner tags ist nur für die Tags zuständig. Deshalb sind auch keine Dateien in den Ordnern.<br />
Weitere Infos gibt es <a href="http://www.tagsistant.net/documents-about-tagsistant/0-8-howto?showall=&start=2">hier</a><br />
<br />
Nun kann man anfangen die Tags (Verzeichnisse) zu erstellen und die Dateien rein zu kopieren. Dabei arbeitet man am besten nur im store Verzeichnis.<br />
Wichtig ist immer, dass man die Dateien immer in den entsprechenden @-Ordner des Tag-Ordners ab legt.<br />
<br />
Will man das Verzeichnis wieder unmounten benutzt man<br />
<br />
$ fusermount -u dms<br />
<br />
Die Dateien, die man getaggt hat befinden sich im Verzeichnis .tagsistant. Dieses Verzeichnis sollte man also im Backup berücksichtigen.<br />
<br />
Wenn man tagsistant aktualisieren will sollte man zuerst<br />
$ cd tagsistant<br />
$ sudo make uninstall<br />
<br />
Danach<br />
$ svn update<br />
<br />
und dann wieder<br />
$ ./configure<br />
$ make<br />
$ sudo make install<br />
<br />
<br />
Anonymoushttp://www.blogger.com/profile/16165301474370289610noreply@blogger.comtag:blogger.com,1999:blog-3349832066567764064.post-77489206985949711522013-12-26T22:58:00.000+01:002014-02-25T21:16:04.833+01:00C# - Misshandlung von 'as'Es scheint eine Modeerscheinung zu sein, die sich derzeit rasant ausbreitet. Man kann seit geraumer Zeit sehr oft in Demo Codes folgende 'as' Verwendung sehen.<br />
<br />
<u>Sinnfreies Beispiel:</u><br />
<br />
<pre class="brush: js">void SetText(object sender)
{
(sender as TextBox).Text = "Hallo";
}</pre>
<br />
Auf den ersten Blick denkt man "interessant". Aber auf den zweiten Blick sollte jeder erfahrene Programmierer den Fehler erkennen.<br />
Hier wird per 'as' gecastet ohne Typprüfung.<br />
<br />
Durch die Verwendung von 'as' (<a href="http://msdn.microsoft.com/de-de/library/cscsdfbt(v=vs.90).aspx" rel="nofollow" target="_blank">msdn</a>) wird der Aufruf der Methode universell. D.h. ich kann jedes Objekt in die Methode reinwerfen. Irgendwann gibt es eine NullPointerException.<br />
Aber wann gibt es diese Exception?<br />
<br />
Hier mal ein paar Testimplementierungen:<br />
<pre class="brush: js">SetText(new TextBox())
SetText("Hallo"); // NullPointerException
SetText(null); // NullPointerException
</pre>
<br />
Wenn man sich nun mal vorstellt, dass man gar nicht weiß wie die Methode SetText implementiert ist würde man bei einer NullPointerException erstmal stutzig werden. Der string "Hallo" ist doch gar kein null-Wert, aber ich bekomme eine solche Exception? Sehr verwirrend. Was habe ich falsch gemacht? Oder was muss ich tun, damit bei "Hallo" keine Exception kommt?<br />
<br />
Genau hier liegt das Problem. Eigentlich sollte eine InvalidCastException geworfen werden, um mir zu signalisieren, dass es ein Typproblem gibt.<br />
<br />
Durch die fehlerhafte Verwendung von 'as' hat man sich selber ein Bein gestellt.<br />
<br />
Eine korrekte Implementierung der Methode sollte in etwa so aussehen:<br />
<blockquote class="tr_bq">
<span style="font-family: Courier New, Courier, monospace;">void SetText(object sender)<br />{<br /> var textBox = (TextBox) sender; // InvalidCastException<br /> textBox.Text = "Hallo"; // NullPointerException<br />} </span></blockquote>
<div>
<br /></div>
<div>
Hier werden nun die richtigen Exceptions geworfen. </div>
<div>
Der Vorteil ist, dass man nun den möglichen Programmfehler (Exception) besser bewerten kann und nach entsprechenden Objekten zur Laufzeit suchen kann (debuggen). Dies spart Zeit und Geld.</div>
<div>
<br /></div>
<div>
<h4>
Hinweis:</h4>
Mir ist klar, dass man bereits in der Parameterdefinition den Typ TextBox angeben könnte. Dann wäre per Definition "Hallo" als Parameterwert nicht mehr möglich gewesen. Ein cast mit 'as' aber auch nicht :-) Deshalb hier nochmal, das ist nur ein einfaches Beispiel. Komplexere Beispiele mit Deserialisierungen o.ä. habe ich an dieser Stelle vermieden.</div>
<div>
<br /></div>
<h3>
Hintergrund</h3>
<div>
'as' <i>"[<span style="color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 13.333333969116211px; line-height: 17.98611068725586px;">...] entspricht dem folgenden Ausdruck, mit der Ausnahme, dass </span>expression<span style="color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 13.333333969116211px; line-height: 17.98611068725586px;"> nur ein Mal ausgewertet wird."</span></i> (<a href="http://msdn.microsoft.com/de-de/library/cscsdfbt(v=vs.90).aspx" rel="nofollow" target="_blank">msdn</a>):</div>
<div>
<blockquote class="tr_bq">
<span style="font-family: Courier New, Courier, monospace;">expression is type ? (type)expression : (type)null</span></blockquote>
</div>
<div>
<br /></div>
<div>
Der einzige Grund für ein as-cast ist die <b>Performance</b>. Da es keine InvalidCastException geben kann (Exceptions kosten Zeit).</div>
<div>
<br /></div>
<div>
Hier ein kleines Beispiel:</div>
<blockquote class="tr_bq">
<span style="font-family: Courier New, Courier, monospace;">var name = dataRow["Name"] as string;<br />var id = dataRow["Id"] as int?;</span></blockquote>
<div>
Beim Abrufen des Namens aus der DataRow erwarte ich einen String, sei er null oder vorhanden. Manch einer möchte aber besonders sicher gehen und prüfen, ob da nicht doch noch ein anderes Objekt enthalten ist, statt eines Strings. Dann kann man natürlich auch einen expliziten Cast wählen. Verbaut sich aber zusätzlich die Möglichkeit Standardwerte relativ einfach zu definieren.</div>
<blockquote class="tr_bq">
<span style="font-family: Courier New, Courier, monospace;">var name = dataRow["Name"] as string<br /> ?? "keiner vorhanden"; // Standardwert<br />var id = dataRow["Id"] as int?<br /> ?? -1; // Standardwert</span></blockquote>
<div>
<span style="font-family: Courier New, Courier, monospace;">dataRow["Name"]</span> könnte als null Wert auch ein <span style="font-family: Courier New, Courier, monospace;">DBNull</span>-Objekt enthalten. Dieses würde automatisch durch ein as-cast in <span style="font-family: Courier New, Courier, monospace;">null</span> umgewandelt.</div>
<div>
<br /></div>
<div>
<br /></div>
Ein weiteres Beispiel wäre ein Filter auf Personen in einer Liste mit Objekten:<br />
<blockquote class="tr_bq">
<span style="font-family: Courier New, Courier, monospace;">foreach(object item in list)<br />{<br /> var person = item as person;</span> </blockquote>
<blockquote class="tr_bq">
<span style="font-family: Courier New, Courier, monospace;"> if (person != null)<br /> person.Delete();<br />}</span></blockquote>
<div>
<div>
<span style="font-family: 'Courier New', Courier, monospace;"><br /></span></div>
<div>
In diesem Beispiel werden alle Person-Objekte als gelöscht markiert. Man filtert mit dem as-cast also die Personen aus der Liste heraus.</div>
<div>
<br /></div>
<div>
Sicher kann man auch hier einen expliziten cast durchführen, aber hierbei würde das Objekt in der Variablen <span style="font-family: Courier New, Courier, monospace;">item</span> 2 mal ausgewertet. Einmal bei der 'is' Prüfung und dann noch einmal beim cast. Dies kann dann etwas Performance kosten und ist eigentlich unnötig.</div>
<div>
<br /></div>
<div>
<br /></div>
<h3>
Wann 'as'</h3>
<div>
<br /></div>
<div>
Das Schlüsselwort 'as' ist auf jeden Fall optisch leichter zu lesen, da man sich Text erspart, den man schreiben und später lesen muss. Und alles was dem schnelleren Verstehen dienlich ist ist gut.</div>
<div>
<br /></div>
<div>
Wann man nun 'as' verwendet hängt davon ab, wie der Kontext definiert wurde. Erwarte ich beim Aufruf keine InvalidCastException, dann sollte man 'as' verwenden.</div>
<div>
<br /></div>
<div>
Besteht aber die Möglichkeit einer solchen Exception, dann sollte man lieber zu einem expliziten cast greifen. Allerdings sollte man das Nachprogrammieren des as-Schlüsselwortes vermeiden. :-)</div>
<div>
'is' sollte man nur verwenden, wenn man auf unterschiedliche Typen unterschiedlich reagieren möchte.</div>
<div>
<br /></div>
<h3>
Negativ-Beispiel</h3>
<div>
<br /></div>
<div>
Ich habe mal gelesen, dass jemand meinte, sobald er eine event handler Methode implementiert könne er davon ausgehen, dass in der <span style="font-family: Courier New, Courier, monospace;">sender</span>-Variable immer das Objekt enthalten ist, das den event bereitstellt, und er somit 'as' verwenden darf. Er wisse ja was er tut.</div>
<div>
<br /></div>
<div>
Dem kann ich nicht zustimmen. Wäre dies wirklich so, dann würde die Parameterdefinition nicht <span style="font-family: Courier New, Courier, monospace;">(object sender, EventArgs e)</span> sein, sondern einen speziellen Typen beim <span style="font-family: Courier New, Courier, monospace;">sender</span> Parameter angeben.</div>
<div>
<br /></div>
<div>
Somit wäre folgende Implementierung falsch:<br />
<br />
<blockquote class="tr_bq">
<span style="font-family: Courier New, Courier, monospace;">new Button().Click +=</span><span style="font-family: 'Courier New', Courier, monospace;"> </span></blockquote>
<blockquote class="tr_bq">
<span style="font-family: 'Courier New', Courier, monospace;"> (sender,e) => (sender as Button).Text = "geklickt"; </span></blockquote>
<blockquote class="tr_bq">
<br /></blockquote>
</div>
<div>
Man kann nicht davon ausgehen, dass heute und für alle Zeit sich in der Variable '<span style="font-family: Courier New, Courier, monospace;">sender</span>' immer ein Button-Objekt befindet. Das würde dann mit hellseherischen Fähigkeiten zu tun haben.</div>
<div>
<br /></div>
<div>
Viel wichtiger ist die Aussage, dass der Programmierer in der Variable '<span style="font-family: Courier New, Courier, monospace;">sender</span>' einen Button erwartet. Das heißt, wenn in '<span style="font-family: Courier New, Courier, monospace;">sender</span>' kein Button-Objekt enthalten ist muss das Programm mir das sagen, indem eine InvalidCastException geworfen wird. Schließlich ist das Programmverhalten auf ein Button-Objekt ausgelegt. </div>
<div>
Diese Definition kann mit einem as-cast nicht sicher gestellt werden. Da hier das Programm nur meldet, dass gar kein Objekt vorhanden wäre.</div>
<div>
<br /></div>
<div>
<br /></div>
<h3>
Fazit</h3>
<div>
<br /></div>
<div>
Ein as-cast ist eine tolle Sache, wenn man es an den richtigen Stellen verwendet. Richtige Stellen sind die, an denen keine InvalidCastException zur Programmablaufsicherung benötigt wird.</div>
<div>
Im Programmcode sollte man immer darauf achten, dass man die Definitionen die man aufstellt nicht mit einem as-cast wieder aushebelt. </div>
<div>
<br /></div>
</div>
Anonymoushttp://www.blogger.com/profile/16165301474370289610noreply@blogger.comtag:blogger.com,1999:blog-3349832066567764064.post-48005764381976233952013-12-25T18:26:00.000+01:002013-12-26T12:02:07.658+01:00C# Style Guide - Der PräfixfehlerIn C# werden ja so einige Dinge aus anderen Programmiersprachen übernommen. Sehr häufig sind dies die Präfixe aus C++ oder auch aus VB. Genauer eigentlich die Präfix-Abkürzungen.<br />
Dabei ist es in C# recht eindeutig definiert (<a href="http://msdn.microsoft.com/en-us/library/ms229045.aspx" rel="nofollow" target="_blank">msdn</a>):<br />
<blockquote class="tr_bq">
<span class="label" style="color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 13.333333969116211px; font-weight: 700; line-height: 17.98611068725586px;">X DO NOT</span><span style="color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 13.333333969116211px; line-height: 17.98611068725586px;"> use Hungarian notation.</span></blockquote>
und <a href="http://msdn.microsoft.com/en-us/library/ms229012.aspx" rel="nofollow" target="_blank">hier</a><br />
<blockquote class="tr_bq">
<span class="label" style="color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 13.333333969116211px; font-weight: 700; line-height: 17.98611068725586px;">X DO NOT</span><span style="color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 13.333333969116211px; line-height: 17.98611068725586px;"> use a prefix for field names.</span><br />
<span style="color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 13.333333969116211px; line-height: 17.98611068725586px;">For example, do not use "g_" or "s_" to indicate static fields.</span></blockquote>
<br />
<h3>
Hintergrund</h3>
<br />
Das Problem ist, dass Microsoft dies den Programmieren selber beigebracht hat Präfixe zu verwenden. Grund hierfür war damals der schlechte Editor. In VB 6 war der Editor damals am weitesten entwickelt und beherrschte Code Vervollständigung. In VC++ funktionierte dies nicht so recht. Da war der Borland Builder viel weiter voraus. Somit entschlossen sich viele Entwickler die VC Umgebung erst gar nicht zu nutzen, sondern einfach einen anderen Editor zu verwenden, der dann ein paar mehr Features zu bieten hatte.<br />
<br />
Um nun nicht ständig Compiler Fehler zu bekommen, weil man sich mal wieder verschrieben hatte, wurden die Namen der Variablen stark verkürzt und zusätzlich Präfixe verwendet. Zu dieser Zeit entstand sicher auch die Verwendung des zwErgs (heute 'zwischenErgebnis') :-).<br />
<br />
<br />
<h3>
VB - Präfix-Abkürzungen für Klassen</h3>
<br />
Microsoft definierte in VB eine Menge Präfixe (siehe <a href="http://msdn.microsoft.com/en-us/library/aa263493(v=vs.60).aspx" rel="nofollow" target="_blank">msdn</a>). Ich kenne bis heute nicht alle auswendig. Ich weiß nur, dass selbst hier ein gewisses Chaos herrschte, da z.B. für die ComboBox 'cbo', aber auch 'cbx' im Umlauf war / ist.<br />
<br />
In C# hat man dieses Problem beseitigt in dem man einfach sagt, es gibt keine Prefix-Abkürzungen mehr. Statt cbx schreibt man nun comboBox als Präfix. Hierfür ist keine Übersetzungstabelle mehr notwendig und man muss auch nicht sonderlich viel lernen.<br />
<br />
Dies kann man an einem praktischem Beispiel erkennen. Man öffnet den Designer für ein Form und fügt dem Form eine ComboBox hinzu. Der Designer wird automatisch eine Variable anlegen, die mit 'comboBox' beginnt. Mal abgesehen von den MenuItems (da macht der Designer ein Postfix draus) zieht sich dies dann so durch.<br />
<br />
<br />
<h3>
VB - Prefix-Abkürzungen für einfache Datentypen</h3>
<br />
Sehr beliebt war es auch in die Variablennamen den Datentyp mit zu integrieren via "ungarische Notation" (siehe <a href="http://de.wikipedia.org/wiki/Ungarische_Notation#Pr.C3.A4fix_und_Bezeichner" rel="nofollow" target="_blank">Wikipedia</a>) . Hier wurde immer der Anfangsbuchstabe des Datentyps verwendet. Z.B. iZahl für eine Variable vom Typ Integer.<br />
<br />
Das Problem bei dieser Art der Namensvergabe ist der, dass wenn sich der Typ ändert sich automatisch auch der Name ändern muss. Sonst macht das ja alles keinen Sinn.<br />
Also beginnt beim ändern des Typs plötzlich ein großes Namen-Refactoring. Obwohl sich nur eine Zeile ändert hatte man dann plötzlich eine Datei mit 40 Änderungen, die man im Bedarfsfall alle anschauen musste, um herauszufinden was sich genau geändert hat.<br />
<br />
Dazu kam, dass man ständig die Variablen suchte, da man zum einen den Datentyp wissen musste und zum anderen den Namen. Das hat öfter mal Zeit gekostet, die richtige Variable zu finden.<br />
z.B. Was nehme ich wohl iZahl oder sZahl ?<br />
<br />
In C# gibt es sowas nicht mehr. Der Name einer Variable drückt einzig und allein deren Verwendungszweck aus und beinhaltet nicht noch zusätzliche Metainformationen zu Typ, Zeilennummer oder Mondphase.<br />
<br />
Wird der Variablentyp geändert, so kommt vom Compiler entweder ein Fehler oder nicht. Wenn ein Fehler auftaucht muss man bewusst Änderungen am Code vornehmen.<br />
<br />
In der Präfix Variante mischen sich Compilerfehler und Namensänderungen, was das Nachverfolgen von Änderungen stark erschwert.<br />
<br />
<h3>
C++ </h3>
<br />
In C++ war man damals sehr kreativ, wie man bestimmte Variablen kennzeichnen sollte, damit man sich in der Codevervollständigung 'einfach' zurechtfinden konnte und globale, lokale, statische Variablen trennen konnte.<br />
Hier gibt es meist folgende Präfix-Definition.<br />
<br />
's_' - statische Variable<br />
'm_' oder '_' - klassenglobale Variable<br />
<br />
Das 'm' stammt aus der "Ungarischen Notation" (<a href="http://de.wikipedia.org/wiki/Ungarische_Notation#Pr.C3.A4fixe_der_Sichtbarkeit" rel="nofollow" target="_blank">wikipedia</a>) und wird hier Member genannt.<br />
In VB gib es auch das m-Präfix (siehe <a href="http://msdn.microsoft.com/en-us/library/aa240858(v=vs.60).aspx" target="_blank">msdn</a>) und bezeichnet das Modul.<br />
<br />
Dies macht es in C# recht schwer zu beurteilen, wie man nun dieses 'm' bezeichnen soll. Hier muss man zuerst erfragen, welcher Programmierer den Code geschrieben hat und von welcher Programmiersprache dieser gewechselt ist. Es kann ja theoretisch noch eine andere Sprache sein in der der m-Präfix eine ganz andere Bedeutung hat.<br />
<br />
<br />
Der Nachteil von solchen Konventionen ist, dass jeder über diese Bescheid wissen muss. Das heißt, jeder muss die Konvention kennen, um sie nutzen und verstehen zu können. Es darf aber auch nur eine einzige Konvention geben. Diese darf sich also nicht nach 3 Jahren ändern.<br />
<br />
Auch, wenn viele C++ Programmierer diese Definition für äußerst lebenswichtig halten und ohne diese gar nicht mehr arbeiten könnten, gibt es dies nicht in C#. Denn es geht auch ohne.<br />
<br />
Klassenglobale Variablen werden mit "this." eingeleitet.<br />
Statische Variablen werden mit dem Klassennamen kombiniert. [Klassenname].[statische Variable]<br />
<br />
Die erste Reaktion, die ich hier erwarte, ist "Ohhh Gott. So viel zu tippen. Wie umständlich."<br />
<br />
Aber ich kann da jeden beruhigen. So viel mehr tippen muss man da gar nicht. Um das Wort "this" gefolgt von einem Punkt einzutippen benötige ich weniger als eine Sekunde. Der Zeitaufwand sollte also im Rahmen bleiben.<br />
Wer möchte kann aber auch, während er das Wort "this" eintippt, darüber nachdenken, was er nach dem Punkt eigentlich eingeben möchte.<br />
<br />
Wo liegt aber der Vorteil in dem "this.". Ganz einfach Compilersicherheit.<br />
Ich kann mir bei einem "this." hundertprozentig sicher sein, dass die globale Variable der Klasse verwendet wird. Bei einem "_" ist das nicht ganz so sicher. Nicht immer ist ein Entwickler so fleißig und benennt die Variablen um, wenn er eine globale Variable in eine lokale ändert.<br />
<br />
Das Gleiche gilt für statische Variablen. Füge ich eine lokale Variable mit gleichem Namen aus versehen (oder mit Absicht) hinzu, wird trotzdem die statische Variable genommen, da ich ja den Klassennamen mit angegeben habe.<br />
Erstelle ich aber eine lokale Variable unter Missachtung aller Konventions-Gesetze und benenne diese dann mit dem Prefix "s_", obwohl diese gar nicht statisch ist und ich nur keine Lust zum Umbenennen habe, habe ich im Code Chaos erzeugt. Macht man dies dann mehrmals kann man die Sache mit dem Verstehen total vergessen.<br />
<br />
Somit kann man sagen, die Sache mit der Verwendung des Unterstrichs ist ok, wenn sich jeder ganz penibel dran hält. Sicherer ist es aber "this." zu verwenden, da mich dann der Compiler kontrolliert.<br />
<br />
Auch wird man zum Refactoring gezwungen, wenn man die Variable im Kontext verschiebt. Dies bedeutet, dass man auf jede Stelle hingewiesen wird und diese nochmals kontrollieren muss.<br />
Bei der "_"-Konvention muss man darauf hoffen, dass der Programmierer die Variable auch umbenennt. Er wird ja nicht gezwungen.<br />
<br />
<br />
<br />
<h3>
Fazit</h3>
<br />
Das "rüberschwappen" der Prefix-Konventionen aus anderen Programmiersprachen sollte beim Umstieg auf C# auf jeden Fall vermieden werden. Jede Sprache hat Konventionen. Somit auch C#. Und diese sollten beachtet werden. <b>Keine "Ungarische Notation" in C# verwenden</b>.<br />
<div>
<br /></div>
Die Verwendung von Präfixen war schon immer eine Fehlerquelle. Diese beruhte auf Definitionen, die strickt eingehalten werden mussten, um das Verständnis und die Funktion zu erhalten. Wurde von der Definition abgewichen kam es zu Chaos oder Fehlverhalten (Bugs), da diese Lösung nicht vom Compiler geprüft werden konnte.<br />
<br />
Mit der Abkehr von diesen Regeln und der Verwendung von Compiler verständlichen Regeln kann es nicht mehr zu den genannten Problemen kommen. Dinge die Compiler verständlich als global definiert werden, werden auch immer auf global geprüft. Gleiches gilt für statische Variablen. Ein Aushebeln ist nicht mehr möglich.<br />
<br />
Auch eine Kommunikation der speziellen Regeln ist nicht notwendig, da jeder Programmierer wissen sollte, dass sich die Variable "this" immer auf den globalen Klassenkontext bezieht, da dies sich bereits in der formalen Definition der Programmiersprache C# befindet (übrigens auch in C++).<br />
<br />
Dazu kann man aber auch immer im <a href="http://msdn.microsoft.com/en-us/library/ms229042.aspx" rel="nofollow" target="_blank">Microsoft Style Guide</a> nachlesen in der die C# Konvention definiert ist.Anonymoushttp://www.blogger.com/profile/16165301474370289610noreply@blogger.comtag:blogger.com,1999:blog-3349832066567764064.post-47375942878706694632013-12-25T16:45:00.002+01:002013-12-25T16:57:50.132+01:00Coding Style Guide für C#Fasst für jede Programmiersprache gibt es einen Style Guide. Z.B. einen für Java, mehrere für C++, einen für VisualBasic und auch einen für C#, der aber ständig und immer wieder missachtet wird.<br />
Dies liegt vor allem daran, dass es so viele Umsteiger gibt.<br />
Diejenigen die von Java kommen, versuchen den Style von Java irgendwie in C# durchzusetzen. Gleiches gilt für C++ und VB.<br />
<br />
Deshalb habe ich mir gedacht, dass ich mal ein paar Artikel zu diesem Thema schreiben könnte.<br />
<br />
<h3>
Der Standard</h3>
<div>
<br /></div>
Der C# Style Guide ist eigentlich ganz einfach, da er von Visual Studio per Default eingestellt ist. Er wird meist nur nicht verwendet oder verfälscht, da sich die meisten Umsteiger damit nicht anfreunden wollen. Es ist natürlich einfacher in der Style-Welt weiter zu leben aus der man kam. Da ist das Auge dran gewöhnt und muss sich nicht umstellen.<br />
<br />
Per Definition wird in C# der Allman Style (<a href="http://de.wikipedia.org/wiki/Einr%C3%BCckungsstil#Allman_.2F_BSD_.2F_.E2.80.9EEast_Coast.E2.80.9C" rel="nofollow" target="_blank">Wikipedia</a>) für die Form verwendet.<br />
Der Guide für die Verwendung und Anordnung der sprachspezifischen Details definiert Microsoft <a href="http://msdn.microsoft.com/en-us/library/ms229042.aspx" rel="nofollow" target="_blank">hier</a>. Einen .NET 1.1 Style findet man <a href="http://msdn.microsoft.com/en-us/library/czefa0ke.aspx" rel="nofollow" target="_blank">hier</a>.<br />
Dort sind so Dinge definiert wie die Benamung von Feldern (camel case) oder Eigenschaften (pascal case).<br />
<br />
<h3>
Warum akzeptiert kaum einer den Standard?</h3>
<div>
<br /></div>
<h4>
Der Umsteiger</h4>
Bevor wir uns den Grund für die Verweigerung des Styles anschauen muss vorher noch geklärt werden warum man sich überhaupt einen Style angewöhnt?<br />
Der einfache Grund ist, Performance beim Code lesen und verstehen. Damit man beim Code lesen sich nicht immer umgewöhnen muss und somit seine eigenen Nerven schont, sollte die Form und Struktur sich nach einer klaren Regel definieren. Dies sollte jeder Softwareentwickler kennen.<br />
<br />
Bei C# ist es allerdings meist so, dass die Umsteiger sich nicht umgewöhnen wollen und auch meist nur rum schimpfen, dass man den C# Code nicht richtig lesen könne. Für die Umsteiger solle der Style doch am besten der aus der anderen Welt bleiben, damit man sich nicht immer umstellen muss, wenn man sich den alten Code anschaut und dann den Neuen.<br />
<br />
Anders ist es allerdings, wenn man von VB zu C++ wechselt. Da wird ein anderer Style akzeptiert.<br />
<br />
Warum ist das so?<br />
Nun komm ich zur eigentlichen Antwort auf die Frage zur Akzeptanz.<br />
C++ und VB sind C# einfach zu ähnlich. C++ und VB-Entwickler können sich in C# wiederfinden und glauben sie wären immer noch in der alten Welt, bloß mit neueren Features. Somit möchten sie auch ihre alten Gewohnheiten weiter pflegen und verwenden, da sie diese über Jahre als sehr praktikabel empfunden haben. Eine Umstellung auf etwas anderes würde bedeuten man hätte in den Jahren davor nicht effizient gearbeitet. Man würde somit seine Wurzeln verleugnen.<br />
<br />
Ich bin mir sicher, dass das der Grund dafür ist, dass man so viele unterschiedliche Coding-Styles sehen kann, wenn man nach Code-Beispielen im Internet sucht.<br />
<br />
<h4>
Der Einsteiger</h4>
Ein wichtiger Punkt beim missachten des Code-Styles sind auch die Einsteiger. Diejenigen die gerade beginnen zu programmieren. Für diese Gruppe steht der Code-Style nicht im Vordergrund.<br />
Das Ergebnis ist wichtiger. Es soll also etwas Lauffähiges entstehen.<br />
<br />
Hier beginnt meist etwas heranzuwachsen, was viele von uns Entwicklern fürchten, aber auch schätzen. Der "Autodidakt".<br />
Das Problem mit dem Autodidakten ist der, dass er es grundsätzlich immer besser macht als alle anderen. Er braucht keinen Rat, sondern gibt lieber Einen.<br />
Mit seinen "Erkenntnissen" entstehen meist sehr kompakte Codezeilen, für die man ein Buch zur Übersetzung schreiben müsste.<br />
Man erkennt ihn meist daran, das er mind. 6 Anweisungen in einer Zeile unterbringt. Am besten ohne Kommentar. Feldnamen sind aus Platzgründen aufeinander folgende Buchstaben (a,b,c usw.).<br />
<br />
Aber warum ist das so?<br />
<br />
Für Autodidakten ist Code-Style nur dann gut, wenn er optimal ist. Optimal ist der Code, der mit möglichst wenigen Buchstaben so viel wie möglich machen kann. Dies ist meistens nicht mehr verständlich, aber eben "optimal".<br />
<br />
Dies zeigt sich dann auch darin, dass Leerzeilen vermieden werden müssen. Der Blocksatz ist Favorit. Da werden dann Anweisungen auch gern mal mit Semikolon getrennt hintereinander geschrieben, um dem Blocksatz genüge zu tun.<br />
<br />
Code muss bei Autodidakten aber auch so formatiert werden, dass, bei aufeinanderfolgenden Zuweisungen, das Gleichheitszeichen übereinander steht.<br />
<br />
Beispiel:<br />
<blockquote class="tr_bq">
<span style="font-family: Courier New, Courier, monospace;">zwerg1 = zwerg5; </span><br />
<span style="font-family: Courier New, Courier, monospace;">a1 = 6; </span><br />
<span style="font-family: Courier New, Courier, monospace;">b = t5; </span><br />
<span style="font-family: Courier New, Courier, monospace;">a = z5; </span></blockquote>
Dies macht zwar wenig Sinn, sieht aber aus Sicht des Autodidakten "schön" aus. Mal abgesehen von der Zeit, die dafür drauf geht, solche Spielereien in das Codeformat einzubauen und zu pflegen.<br />
<br />
<h3>
Fazit</h3>
Umsteiger und Einsteiger machen es dem Code Style schwer sich durchzusetzen.<br />
<br />
Die häufigsten Ausreißer möchte ich in den folgenden Blogbeiträgen mal näher beleuchten. Vielleicht erkennt sich ja der ein oder andere wieder. Wobei ich natürlich hier niemanden Anprangern möchte. Jeder kann zum programmieren die Form wählen, die ihm am besten gefällt.<br />
<br />
Aber vielleicht kann auch der ein oder andere überlegen, ob es nicht auch in C# sinnvoll wäre sich an einen Globalen-Standard zu halten, auch wenn dies bedeuten würde, dass man sich anpassen müsste.Anonymoushttp://www.blogger.com/profile/16165301474370289610noreply@blogger.comtag:blogger.com,1999:blog-3349832066567764064.post-69286436136307061852013-12-22T18:31:00.001+01:002013-12-22T18:46:39.915+01:00Aufgabenverwaltung mit GmailMittlerweile bin ich zum Verwalten von bestimmten Aufgaben auch auf die Email-Lösung umgestiegen, da man hierfür keine App braucht und dies auf jedem System funktioniert.<br />
Das Gute ist, bei Gmail funktioniert alles über Tags und diese kann man mehrfach und hierarchisch zuweisen.<br />
<br />
Somit kann man in Gmail einen Tag z.B. 'Aufgaben' erstellen und unter diesem dann die entsprechenden Sortiertags erstellen z.B. '@Home.Privat' o.ä.<br />
<br />
Gmail kennt auch das Feature, dass man individuelle Bezeichnungen seinem eigenem Emailnamen über ein '+' hinzufügen kann (weitere Infos <a href="http://stadt-bremerhaven.de/filter-in-google-mail-nuetzlich-nutzen-und-automatisiert-ordnung-ins-mail-chaos-bringen/">hier</a>). Somit kann man die Bezeichnung '+News' der Emailadresse kermit@gmail.com hinzufügen, um diese später besser nach Newslettern filtern zu können. Man könnte also überall wo man Newsletter erwartet die Adresse 'kermit+News@gmail.com' angeben. Die Email würde ankommen und ist leichter filterbar. 'kermit+Spam@gmail.com' ist auch vorstellbar :-)<br />
Hierfür muss man dann nur noch eine Regel erstellen mit der dann diese Mails bearbeitet werden.<br />
<br />
Um nun schnell vom Handy eine Aufgabe anzulegen, habe ich mir in Gmail eine Regel angelegt mit der Mails, die von der eigenen Email-Adresse z.B. 'kermit@gmail.com' an die Adresse z.B. 'kermit+aufgabe@gmail.com' gesendet werden automatisch das Tag 'Aufgaben' bekommen und den Posteingang überspringen.<br />
<br />
<i>"schnell vom Handy"</i> geht's halt nur, wenn das entsprechende Smartphone OS dies unterstützt. Bei WebOS Geräten geht es sehr schnell über die "Just Type" Funktion. Bei anderen Betriebssystemen muss man vielleicht vorher noch die Mail-App öffnen.<br />
<br />
Wenn die Mail dann im Postfach angekommen ist sieht man dies über die Zahl in Klammern hinter dem Tag z.B. 'Aufgaben (1)', da dies die Zahl der ungelesenen Mails ist. Über diese Zahl kann man dann leicht erkennen wie viele Aufgaben noch offen sind bzw. erledigt werden müssen.<br />
Man kann dann dieser Mail noch weitere Tags zuordnen z.B. '@Urlaub' o.ä.<br />
<br />
Was zu erledigen ist, kann dann über den gelesen Status definiert werden. Alle Mails die als ungelesen markiert sind müssen angesehen oder erledigt werden.<br />
<br />
<br />
<b>Vorteile</b><br />
<br />
<ol>
<li><b>Funktioniert mit jedem Betriebssystem, </b>welches IMAP-Konten einbinden kann.</li>
<li><b>Sehr einfach zu bedienen</b></li>
</ol>
<br />
<br />
<b>Nachteile</b><br />
<br />
<ol>
<li><b>Keine Prioritäten. </b><br /><br />Reihenfolge kann nicht beeinflusst werden. Man kann nur ein Paar Tags erstellen 'Priorität Dringend', 'Priorität Hoch','Priorität Mittel', 'Priorität Gering' und versuchen sich darüber zu organisieren. Für die Meisten sollte das auch reichen, da man ja nie 20 Dringende Aufgaben haben sollte ;-)<br />Den einzelnen Tags kann man auch Farben zuordnen, um die Dringlichkeit besser zu signalisieren.<br /></li>
<li><b>Kein Teilen möglich. </b><br /><br />Diese Art der Aufgabenverwaltung kann nicht mit mehreren Leuten geteilt werden, da man ja nicht auf Tag-Ebene seinen Postkasten freigeben kann. Wenn man also in einer Gruppe arbeiten möchte, sollte man dafür ein eigenes Email-Postfach anlegen, dass dann alle in der Gruppe einbinden können.<br /></li>
<li><b>Aufgaben lassen sich nicht bearbeiten</b><br /><br />Da sich Emails nicht bearbeiten lassen kann man immer nur eine neue Mail schreiben, um dieser Aufgabe etwas hinzuzufügen. Dies ist zwar recht umständlich, hat nebenbei aber den Vorteil, dass man sehen kann, wann welche Änderung von wem hinzugefügt wurde, da Gmail ja immer den Verlauf anzeigt.</li>
</ol>
<div>
<br /></div>
<div>
<br /></div>
<div>
Das gleiche System kann man übrigens <b>auch für Lesezeichen-Urls</b> verwenden. Hier könnte man z.B. eine Mail-Adresse 'kermit+ref@gmail.com' verwenden. Bei Lesezeichen muss man aber immer etwas aufpassen, dass man nicht zu viele Untertags erzeugt, da es dann wieder leicht unübersichtlich wird. </div>
<div>
<br /></div>
<div>
Um bestimmte Urls zu kennzeichnen, die man unbedingt mal lesen sollte, kann man diese Mails ja wieder als ungelesen markieren.</div>
Anonymoushttp://www.blogger.com/profile/16165301474370289610noreply@blogger.comtag:blogger.com,1999:blog-3349832066567764064.post-29627889656437362122011-05-21T21:54:00.000+02:002013-12-22T18:31:48.584+01:00Organisieren mittels KategorienIm Internet und in Büchern kann man unterschiedliche Varianten finden, wie man Kategorien verwenden sollte. Allerdings kann ich keine Referenzen angeben.Darum hoffe ich mal das ich keinen Googleberg begehe, wenn ich jetzt meine Version hier veröffentliche.<br />
<br />
Mein Grundkonzept, bei der Benennung der Kategorien, basiert auf der Domain und Email schreibweise.<br />
<br />
Aufbau einer Domain ist [subdomain].[domainname].[thematische Zuordnung]<br />
Beispiel: blog.info.org<br />
Ist nicht ganz Original, aber es sollte den Aufbau erklären.<br />
Eine Email sieht folgendermaßen aus: [Name der Person]@[Domainname].[thematische Zuordnung]<br />
Beispiel: franz@info.org<br />
<br />
Einfach erklärt, möchte ich etwas direkt mit einer Person klären schreibe ich eine Email.<br />
<br />
Um dies nun auf Kategorien anzuwenden benutze ich folgendes Konzept.<br />
<br />
Aufgaben, die an eine bestimmte Person gerichtet sind oder einen bestimmten Ort betreffen, werden einer Kategorie zugeordnet, die mit dem Zeichen @ beginnt. Beispiel @Franz, @Home<br />
<br />
Alle anderen Aufgaben werden Kategorien zugeordnet, die mit einem # beginnen und nach dem Thema (möglichst abstrakt) benannt werden. Beispiel: #Organisieren<br />
<br />
Wenn man das Konzept nun so anwendet fällt es schwer zu unterscheiden, welche Aufgaben privat oder beruflich sind. Da kommt die thematische Zuordnung ins Spiel. Dem Kategorienamen wird also eine Info angehangen, die eine Zuordnung zu einem Thema ermöglicht.<br />
Beispiele:<br />
@Franz.Privat<br />
#Organisieren.Freunde<br />
<br />
Alle Kategorien ohne Zuordnungsangabe beinhalten automatisch das Hauptthema. Normalerweise ist dies das Thema "Geschäftlich". Dies braucht somit nicht mit angegeben werden und ist somit implizit.<br />
<br />
Um das ganze zusammenzufassen hier nochmal eine kleine Übersicht:<br />
<br />
@ - Personen,Orte<br />
# - Abstraktes Thema<br />
. - Zuordnungsangabe<br />
<br />
Somit könnte man auch nur ".Privat" als Kategoriename verwenden, wer dies benötigt. Allerdings wäre dies überflüssig, da man ja auch nach diesen Zuordnungsangaben filtern kann.<br />
<br />
<b>Wo liegt nun der Vorteil?</b><br />
<br />
Wenn man Outlook verwendet kann man sich nun leicht Ansichten anlegen, die die Aufgaben und Emails gruppiert anzeigen. Dazu kann man dann noch Filter erstellen, die nach den entsprechenden Zuordnungseinheiten filtert.<br />
<br />
Mit diesen Ansichten kann man sofort erkennen, welche Aufgaben man mit wem,wo oder wie bearbeiten muss.<br />
Wenn man nun Fälligkeitsdaten und Prioritäten festlegt kann man je Gruppe unterscheiden, welche Aufgabe gerade wichtig ist und was z.B. am heutigen Tag erledigt werden muss.<br />
<br />
Wer ein Blackberry nutzt kann nun auch leichter nach Aufgabengruppen filtern.<br />
<br />
<b>Wozu benötige ich Zuordnungen, wenn ich auch @Home anlegen kann?</b><br />
<br />
Bei manchen Leuten ist es üblich Arbeit mit nach Hause zu nehmen. Dies würde dem @Home entsprechen.<br />
Möchte man aber sich an den Müll wegbringen erinnern lassen, sollte die Kategorie @Home.Privat sein.Anonymoushttp://www.blogger.com/profile/16165301474370289610noreply@blogger.comtag:blogger.com,1999:blog-3349832066567764064.post-82218188618760263652011-04-23T17:28:00.000+02:002013-12-22T18:31:48.597+01:00Ist ein Termin eine Aufgabe, oder anders herum?Schwierig scheint nicht nur die Abgrenzung zwischen Temin und Aufgabe, sondern auch die Rolle der Email dabei. Deshalb mal eine kurze Beschreibung:<br />
<div><br />
</div><ol><li><i>Termin</i><br />
Ein Termin ist ein Ereignis bei dem zu einer genau definierten Zeit (Datum) gehandelt werden muss. Eine persönliche Anwesenheit ist Pflicht. Selbst Geburtstagstermine gehören dazu. Dort möchte man sich ja erinnern lassen, dass man demjenigen (normalerweise) persönlich gratuliert.<br />
</li>
<li><i>Aufgabe</i> <br />
Eine Aufgabe ist eine Handlung, die bald stattfinden soll. Es kann ein Startdatum und/oder ein Fälligkeitstag festgelegt werden.<br />
Bei Aufgaben geht es darum eine Handlung zu erledigen. Wer die macht ist egal. Hauptsache die wird gemacht. Z.B. wenn sich ein Vater die Aufgabe "Müll raus bringen" definiert, aber dann seinen Sohn los schickt ist die Aufgabe danach erfüllt. :-)<br />
</li>
<li><i>Email </i><br />
Mails sind Kommunikation, wie z.B. ein Telefonat. Man sollte Emails nie anders behandeln, da es sich um reine Kommunikation mit einem anderen Partner handelt. Notizen o.ä. mit in den Postkasten zu mixen erhöht die Unordnung und irgendwann (meist nach einem Urlaub) blickt man da nicht mehr durch.</li>
</ol><div><br />
</div>Anonymoushttp://www.blogger.com/profile/16165301474370289610noreply@blogger.comtag:blogger.com,1999:blog-3349832066567764064.post-39429926853529093912011-04-23T17:20:00.000+02:002013-12-22T18:31:48.588+01:00Wie kann ich mich mit Hilfe von google Diensten organisieren?Die meisten Leute wissen nicht wie sie sich am besten organisieren können, da sie die vielen Funktionalitäten nicht überblicken und steuern können.<br />
<br />
<div>
Helfen kann da erstmal nur das Verständnis darüber, welche Daten man ablegen möchte.</div>
<div>
Also wie will ich was verwalten. Folgend ein kleiner Überblick:<br />
<ol>
<li>Kommunikation </li>
<ul>
<li>EMails</li>
<li><strike>Buzz</strike></li>
<li>Blog</li>
</ul>
<li>Organisation </li>
<ul>
<li>Aufgaben</li>
<li>Kalender</li>
</ul>
<li>Verwaltung </li>
<ul>
<li>Lesezeichen</li>
<li>Drive</li>
<li><strike>Notizbuch</strike></li>
</ul>
<li>Information</li>
<ul>
<li>Nachrichten</li>
<li>Maps</li>
</ul>
<li>Präsentation</li>
<ul>
<li>Webseite</li>
<li>Blog</li>
<li>Google+</li>
</ul>
</ol>
<div>
<br /></div>
</div>
Anonymoushttp://www.blogger.com/profile/16165301474370289610noreply@blogger.comtag:blogger.com,1999:blog-3349832066567764064.post-80693972984071879712011-04-23T17:14:00.000+02:002013-12-22T18:31:48.594+01:00Probleme beim sich selbst organisierenGoogle bietet einem viele Möglichkeiten sich zu organisieren. Die Google Dienste habe ich ja bereits vorgestellt. Nur leider fällt es vielen (wie auch mir) schwer Informationen zu verteilen und sich darüber zu organisieren. Das liegt daran, dass die Übersicht fehlt. Google bietet keine Möglichkeit, Daten anhand ihres Typs zu verwalten. Somit muss jeder selber entscheiden was er wo hinterlegt.<br />
Dass heißt, Google gibt dir das Werkzeug und Ende.<br />
Ich habe mittlerweile schon vieles gesehen, wie sich so mancher organisiert und war manchmal auch recht überrascht, wie kreativ manche sind, um an ihr Ziel zu kommen.<br />
Bei GTD z.B. erledigt man alles über Emails. Aufgaben, Links, Notizen werden alle in Emails gepackt und zur eigenen Mailbox geschickt.<br />
<br />
Man kann die Flut an Daten in unterschiedlichster Form bewältigen. Hier mal ein paar Beispiele:<br />
<br />
<span class="Apple-style-span" style="font-size: large;">Aufgaben im Notizbuch</span><div><div>Mal davon abgesehen, dass viele das Notizbuch nicht kennen, kann es schnell passieren, dass es als Aufgabenverwaltung missbraucht wird. <br />
Allerdings gibt es dabei einen großen Nachteil. Man kann keine Zeiten angeben. Auch ist es schwer Aufgaben als erledigt zu kennzeichnen.<br />
<br />
<span class="Apple-style-span" style="font-size: large;">Aufgaben im Terminkalender</span></div><div>Aufgaben könnte man auch im Terminkalender eintragen. Da es keine Zeiteingabe gibt muss man diese als Tagestermin eintragen.<br />
Allerdings ist es bei Aufgaben so, dass man nicht immer alle Aufgaben erledigen kann. Dann fängt das Verschieben an. Dann kann es schnell passieren, dass man eine Aufgabe übersieht.<br />
Auch ist es hier schwer eine Aufgabe als erledigt zu markieren.<br />
<br />
<span class="Apple-style-span" style="font-size: large;">Aufgaben als Emails</span></div><div>Emails kann man auch als Aufgabensammlung verwenden, wenn man die Emails in entsprechenden Ordner “offen” und “erledigt” verschiebt. Doch ist es auch hier nicht so einfach ein Datum zu hinterlegen.<br />
<br />
<span class="Apple-style-span" style="font-size: large;">Notizen als Aufgaben </span></div><div>Bevor man das Notizbuch bemüht, trägt man eine Notiz schnell mal als Aufgabe ein. Man denkt “hauptsache erstmal sichern”. Das Problem ist hierbei, dass meist mehr Notizen anfallen als Aufgaben. Dazu kommt, dass Notizen eigentlich nicht wie Aufgaben darauf ausgerichtet sind kurzlebig zu sein.<br />
<br />
<span class="Apple-style-span" style="font-size: large;">Notizen als Emails</span></div><div>Da die google Mailsuche sehr gut ist könnte man ja auch davon ausgehen Notizen als Email zu speichern. Allerdings sollte jedem klar sein, dass täglich mehr Emails rein kommen als Notizen erfasst werden. Dadurch kommt die Übersicht über die Notizen schnell abhanden. Auch wenn man mit Ordnern arbeitet müsste man die Notiz-Ordner gegen die Email Order abgrenzen und das klappt irgend wann nicht mehr.<br />
<br />
<span class="Apple-style-span" style="font-size: large;">Lesezeichen als Aufgabe</span></div><div>Jeder kennt es. Man findet eine Seite hat aber gerade keine Zeit sie durchzulesen. Was liegt da näher als diese Url als Aufgabe zu speichern. Allerdings wird man die Url nicht finden, wenn man Zeit hat, da man nicht in die Aufgaben schaut, zu einer Zeit zu der man Entspannung sucht.<br />
<br />
<span class="Apple-style-span" style="font-size: large;">Lesezeichen als Email</span></div><div>Gleiches, wie bei den Aufgaben, gilt auch für Emails. Allerdings gehen Url-Emails noch schneller unter.<br />
<br />
<span class="Apple-style-span" style="font-size: large;">Fotos in Email</span></div><div>Mancher speichert seine Fotos als Email. Auch diese gehen schnell in der Masse unter. Auch lassen sich diese aus den Emails heraus nicht für andere freigeben. Suchen ist auch schwierig, wenn man keinen vernünftigen Namen vergeben hat.</div><div><br />
<span class="Apple-style-span" style="font-size: large;">Termine als Aufgabe</span></div><div>Wer einen Termin bei den Aufgaben einträgt kann keine Zeiten definieren. Das heißt, man kann nur ganztägige Termine eintragen. Allerdings ist hier das Problem, dass man bei Aufgaben davon ausgeht, dass diese geschoben werden können. Einen Termin zu verschieben bedeutet, dass irgendjemand oder irgendetwas nicht über die Schiebung informiert wird.<br />
</div></div>Anonymoushttp://www.blogger.com/profile/16165301474370289610noreply@blogger.comtag:blogger.com,1999:blog-3349832066567764064.post-1451690286707275852011-04-18T21:43:00.001+02:002013-12-22T18:31:48.573+01:00Übersicht über die bekanntesten Google Dienste<h1 id="internal-source-marker_0.7541321965736847">
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 24pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline;"></span></h1>
<table style="border-collapse: collapse; border: none; width: 624px;"><colgroup><col width="*"></col><col width="*"></col></colgroup><tbody>
<tr style="height: 0px;"><td style="border: 1px dotted #aaa; padding: 7px 7px 7px 7px; vertical-align: top;"><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline;">Url</span></td><td style="border: 1px dotted #aaa; padding: 7px 7px 7px 7px; vertical-align: top;"><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline;">Dienst</span><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"></span></td></tr>
<tr style="height: 0px;"><td style="border: 1px dotted #aaa; padding: 7px 7px 7px 7px; vertical-align: top;"><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;">mail.google.com</span></td><td style="border: 1px dotted #aaa; padding: 7px 7px 7px 7px; vertical-align: top;"><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;">Emails</span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;">Buzz</span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;">Aufgaben</span></td></tr>
<tr style="height: 0px;"><td style="border: 1px dotted #aaa; padding: 7px 7px 7px 7px; vertical-align: top;"><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;">docs.google.com</span></td><td style="border: 1px dotted #aaa; padding: 7px 7px 7px 7px; vertical-align: top;"><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;">Textdokumente</span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;">Tabellendokumente</span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;">Präsentation</span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;">Formular</span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;">Zeichnung</span></td></tr>
<tr style="height: 0px;"><td style="border: 1px dotted #aaa; padding: 7px 7px 7px 7px; vertical-align: top;"><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;">picasaweb.google.com</span></td><td style="border: 1px dotted #aaa; padding: 7px 7px 7px 7px; vertical-align: top;"><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;">Fotos veröffentlichen, aber auch bearbeiten</span></td></tr>
<tr style="height: 0px;"><td style="border: 1px dotted #aaa; padding: 7px 7px 7px 7px; vertical-align: top;"><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;">bookmarks.google.com</span></td><td style="border: 1px dotted #aaa; padding: 7px 7px 7px 7px; vertical-align: top;"><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;">Lesezeichen</span></td></tr>
<tr style="height: 0px;"><td style="border: 1px dotted #aaa; padding: 7px 7px 7px 7px; vertical-align: top;"><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;">blogger.google.com</span></td><td style="border: 1px dotted #aaa; padding: 7px 7px 7px 7px; vertical-align: top;"><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;">Blog</span></td></tr>
<tr style="height: 28px;"><td style="border: 1px dotted #aaa; padding: 7px 7px 7px 7px; vertical-align: top;"><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;">calendar.google.com</span></td><td style="border: 1px dotted #aaa; padding: 7px 7px 7px 7px; vertical-align: top;"><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;">Kalender</span></td></tr>
<tr style="height: 0px;"><td style="border: 1px dotted #aaa; padding: 7px 7px 7px 7px; vertical-align: top;"><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; vertical-align: baseline;"><strike>reader.google.com</strike></span></td><td style="border: 1px dotted #aaa; padding: 7px 7px 7px 7px; vertical-align: top;"><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; vertical-align: baseline;"><strike>Rss Feed Reader</strike></span></td></tr>
<tr style="height: 0px;"><td style="border: 1px dotted #aaa; padding: 7px 7px 7px 7px; vertical-align: top;"><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;">news.google.de</span></td><td style="border: 1px dotted #aaa; padding: 7px 7px 7px 7px; vertical-align: top;"><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;">Nachrichten</span></td></tr>
<tr style="height: 0px;"><td style="border: 1px dotted #aaa; padding: 7px 7px 7px 7px; vertical-align: top;"><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;">realtime.google.com</span></td><td style="border: 1px dotted #aaa; padding: 7px 7px 7px 7px; vertical-align: top;"><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;">Websuche nach News aus Twitter, Facebook, Blogs usw.</span></td></tr>
<tr style="height: 0px;"><td style="border: 1px dotted #aaa; padding: 7px 7px 7px 7px; vertical-align: top;"><a href="http://translate.google.com/"><span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline;">translate.google.com</span></a><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"></span></td><td style="border: 1px dotted #aaa; padding: 7px 7px 7px 7px; vertical-align: top;"><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;">Übersetzen</span></td></tr>
<tr style="height: 0px;"><td style="border: 1px dotted #aaa; padding: 7px 7px 7px 7px; vertical-align: top;"><a href="http://maps.google.com/"><span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline;">maps.google.com</span></a><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"></span></td><td style="border: 1px dotted #aaa; padding: 7px 7px 7px 7px; vertical-align: top;"><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;">Landkarte, Straßenkarte, Routenplaner</span></td></tr>
<tr style="height: 0px;"><td style="border: 1px dotted #aaa; padding: 7px 7px 7px 7px; vertical-align: top;"><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;">earth.google.de</span></td><td style="border: 1px dotted #aaa; padding: 7px 7px 7px 7px; vertical-align: top;"><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;">Erddarstellung</span></td></tr>
<tr style="height: 0px;"><td style="border: 1px dotted #aaa; padding: 7px 7px 7px 7px; vertical-align: top;"><a href="http://books.google.com/"><span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline;">books.google.com</span></a><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"></span></td><td style="border: 1px dotted #aaa; padding: 7px 7px 7px 7px; vertical-align: top;"><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;">Eingescannte Bücher lesen</span></td></tr>
<tr style="height: 0px;"><td style="border: 1px dotted #aaa; padding: 7px 7px 7px 7px; vertical-align: top;"><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;">sites.google.com</span></td><td style="border: 1px dotted #aaa; padding: 7px 7px 7px 7px; vertical-align: top;"><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;">Webseiten gestalten</span></td></tr>
<tr style="height: 0px;"><td style="border: 1px dotted #aaa; padding: 7px 7px 7px 7px; vertical-align: top;"><a href="http://sketchup.google.com/"><span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline;">sketchup.google.com</span></a><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"></span></td><td style="border: 1px dotted #aaa; padding: 7px 7px 7px 7px; vertical-align: top;"><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;">3D-Grafiken erstellen</span></td></tr>
<tr style="height: 0px;"><td style="border: 1px dotted #aaa; padding: 7px 7px 7px 7px; vertical-align: top;"><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;">groups.google.com</span></td><td style="border: 1px dotted #aaa; padding: 7px 7px 7px 7px; vertical-align: top;"><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;">Gruppen</span></td></tr>
<tr style="height: 0px;"><td style="border: 1px dotted #aaa; padding: 7px 7px 7px 7px; vertical-align: top;"><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;">www.google.de/ig</span></td><td style="border: 1px dotted #aaa; padding: 7px 7px 7px 7px; vertical-align: top;"><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;">Dashboard</span></td></tr>
<tr style="height: 0px;"><td style="border: 1px dotted #aaa; padding: 7px 7px 7px 7px; vertical-align: top;"><h2>
<a href="http://alerts.google.de/"><span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline;">alerts.google.de</span></a><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"></span></h2>
</td><td style="border: 1px dotted #aaa; padding: 7px 7px 7px 7px; vertical-align: top;"><h2>
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;">Benachrichtigungen über Websuche-Ergebnisse</span></h2>
</td></tr>
</tbody></table>
Anonymoushttp://www.blogger.com/profile/16165301474370289610noreply@blogger.comtag:blogger.com,1999:blog-3349832066567764064.post-71492040865104250292010-10-14T10:27:00.001+02:002013-07-21T18:54:54.765+02:00Virtual PC 2007 und NATHabe eben herausgefunden, dass NAT mit VirtualPC 2007 fehlerhaft ist.<br />
Man muss manuell im Gast-System den DNS-Server 192.168.131.254 einstellen und (WICHTIG) das Gastsystem neustarten.Anonymoushttp://www.blogger.com/profile/16165301474370289610noreply@blogger.comtag:blogger.com,1999:blog-3349832066567764064.post-20466437820871332152008-12-22T18:45:00.002+01:002008-12-22T18:47:03.663+01:00Ubuntu upgrade von 8.04 auf 8.10Heute habe ich meiin Ubuntu upgegraded. Da ich eine Nvidia Grafikkarte<br />habe war es nicht ganz so einfach.<p>Nach dem Upgrade startete X nicht mehr mit dem nvidia Treiber. Nach<br />langem hin und her habe ich das fehlende Header-Paket des neuen<br />Linux-kernels installiert. Danach konnte auch der nvidia-Treiber<br />installiert werden. Genauer gesagt, mit der Installation des<br />header-Pakets installierte der sich selber.</p><p>Zusätzlich zu diesem Fehler kam eine Fehlermeldung des PCI-Express alle<br />paar Sekunden.<br />Um diese nicht mehr sehen zu können musste ich noch einen Parameter beim<br />Booten (grub) angeben.<br />pci=noaer</p><p>Dann war der Fehler weg. Nun läuft das System wieder.</p>Anonymoushttp://www.blogger.com/profile/16165301474370289610noreply@blogger.comtag:blogger.com,1999:blog-3349832066567764064.post-72784347989383800672008-08-18T13:32:00.002+02:002008-08-18T13:36:43.903+02:00SMT-G3210 Drucker einbinden unter LinuxWer den Drucker, der am SMT-G3210 angeschlossen ist, unter Linux benutzen will muss die URI<br /><br /><blockquote>socket://192.168.220.1:9100</blockquote><br />verwendenAnonymoushttp://www.blogger.com/profile/16165301474370289610noreply@blogger.comtag:blogger.com,1999:blog-3349832066567764064.post-76811462784798579612008-03-16T14:52:00.002+01:002008-03-16T14:58:39.435+01:00jDVDSlideshow 1.0 beta 29Soeben habe ich das neue Release von jDVDSlideshow freigegeben.<br />Es ist nicht sonderlich gut ausgetestet, da mir die Zeit fehlt. Ich hoffe mal auf Fehlermeldungen von Anwendern.<br /><br />Viel ist bei dieser Version nicht dazu gekommen. Drag&Drop sollte nun gehen. Also kann man nun Fotos und Audio-Dateien in die Kommandoliste ziehen. Auch ganze Ordner werden durchsucht.<br /><br />Eine Toolbar habe ich nun auch mal eingefügt. Leider hatte ich nicht genügend Zeit um ein paar ansprechende Icons zu finden oder selber zu basteln. Deshalb sind erstmal nur so wenige Buttons vorhanden.<br /><br />Eigenlich wollte ich in dieser Version auch die Thumbnailgröße einstellbar machen. Dies hat sich allerdings als etwas schwieriger dargestellt, so dass ich die Änderungen wieder rückgängig gemacht habe.<br /><br />Natürlich habe ich auch den einen und anderen Bug entfernt.<br /><br />Ich hoffe mal, dass etwas Feetback kommt.Anonymoushttp://www.blogger.com/profile/16165301474370289610noreply@blogger.comtag:blogger.com,1999:blog-3349832066567764064.post-47579125533136315642008-03-08T15:12:00.002+01:002008-03-08T15:17:15.081+01:00Neues JDVDSlideshow Release in ArbeitJeden den es interessiert. Ich bin derzeit dabei jDVDSlideshow zu überarbeiten.<br /><br />Neue Features werden u.a. eine Toolbar und Drag&Drop sein. Ich hoffe damit bald fertig zu werden, um mich weiteren tunings und Projekten widmen zu können.Anonymoushttp://www.blogger.com/profile/16165301474370289610noreply@blogger.comtag:blogger.com,1999:blog-3349832066567764064.post-1365694714636748952008-03-07T19:57:00.007+01:002008-03-07T20:23:44.008+01:00Team Foundation Server 2005 InstallationNachdem ich bei der Microsoft <a href="http://www.microsoft.com/germany/aktionen/ready-for-take-off/">ready.for.take.off Launch 2008</a> das Softwarepaket (VS 2008, Windows Server 2008, Team Foundation Server, SQL2008 CTP, SQL 2005 Standard) bekommen hatte, wollte ich dieses nun auch ausprobieren. Drum fix mal ne VM mit virtualbox aufgemacht und los gings.<br /><br />Zuerstmal den Server 2008 installiert. Dies ging relativ problemlos. Nun wollte ich den Foundation Server installieren. Das Setup lief bis zur Abfrage nach dem SQL-Server. Den hatte ich natürlich noch nicht installiert.<br /><br />also...<br /><br />SQL 2005 Standard installiert. Danach meckerte die Installation des TF-Servers, dass keine Reporting Services installiert sind. Die sind natürlich bei der Standard-Version nicht dabei. Ok<br /><br />also...<br /><br />SQL 2008 installiert mit ALLEN Features.<br />Der TF-Server meinte nun, dass die Volltextsuche nicht installiert sei. Diese musste noch aktiviert werden. Danke Microsoft an dieser Stelle.<br /><br />also...<br /><span id="_ctl0_MainContent_PostFlatView"><span></span></span><br /><span id="_ctl0_MainContent_PostFlatView"><span><p align="left"><span id="_ctl0_MainContent_PostFlatView"><span><blockquote>#sc.exe create msftesql binPath= "C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Binn\msftesql.exe -s:MSSQL10.MSSQLSERVER -f:MSSQLSERVER" DisplayName= "SQL Server FullText Search (MSSQLSERVER)"<br /></blockquote></span></span></p></span></span><span id="_ctl0_MainContent_PostFlatView"><span><p align="left">danach Registry öffnen:<br /></p> <p align="left"> [HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\msftesql]</p> <p align="left">"ImagePath" doppelklicken<br /></p> <p align="left"> und Anführungszeichen hinzufügen (am Anfang und hinter msftesql.exe)<br /></p> <p align="left"></p></span></span><blockquote><span id="_ctl0_MainContent_PostFlatView"><span><p align="left">"C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Binn\msftesql.exe" -s:MSSQL10.MSSQLSERVER -f:MSSQLSERVER</p></span></span></blockquote><br /><br />Danach wieder die TF-Server installation gestartet. Nun wollte er Sharepoint.<br /><br />also...<br /><br />Sharepoint 3.0 mit SP1 runtergeladen und installiert.<br />Das TF-Setup wollte nun die URLs haben. Da waren (selbstverständlich) erstmal die falschen eingestellt.<br />Den Port der Zentrale zu ändern war nicht so das Problem (findet man im IIS Manager). Da fällt mir ein, der muss auch noch installiert werden. Im Server-Manager auf "Rollen hinzufügen" klicken und dort den Webserver hinzufügen. Ein Webserver ist bei Microsoft anscheinend nur eine Rolle oder spielt keine derartige :-)<br /><br />Nun wieder zu den URLs der Sharepoint Geschichte. Statt http://.../Sites muss in der deutschen Version http://.../Websites verwendet werden. Websites ist zwar nicht deutsch, aber anders. Und deutsch ist ja auch anders als englisch.<br /><br />und nun .... ENDLICH. Er installiert sich !!!!<br /><br />Danach noch schnell den TF-Explorer installiert und fertig.<br /><br />Danke für dieses neue Advanture Microsoft.Anonymoushttp://www.blogger.com/profile/16165301474370289610noreply@blogger.comtag:blogger.com,1999:blog-3349832066567764064.post-86801215069172593272008-03-06T16:56:00.001+01:002008-03-06T16:58:54.151+01:00Stress stress stressDerzeit bin ich mal wieder voll im Stress. Ich bereite nämlich grad den Umzug vor. Wir ziehen bald in eine neue größere Wohnung. Ist zwar noch etwas hin, aber Planung ist alles.<br /><br />Zusätzlich kommen noch meine Projekte auf den Plan. Die müssen ja auch weitergehen.Anonymoushttp://www.blogger.com/profile/16165301474370289610noreply@blogger.comtag:blogger.com,1999:blog-3349832066567764064.post-37631595051884801842007-01-21T08:58:00.002+01:002008-03-06T12:31:21.654+01:00LG DVD-Brenner GSA-4081B Probleme<h1 style="font-size: 12px; display: inline;">Anscheinend haben viele Leute Probleme mit ihrem LG GSA-4081B.</h1><br />Gestern viel nun auch mein Brenner aus. Kein lesen und kein brennen mehr. Toll.<br />Also suchte ich im Internet und fand auch schnell ne Lösung. So ganz konnte ich es nicht glauben. Aber gut. Da ich eh keine Wahl hatte hab ich's eben ausprobiert.<br />Ich muss sagen es funktioniert. Keine Macken mehr. Echt klasse<br /><br />Hier ist der <a href="http://www.computerhilfen.de/forum/index.php?PHPSESSID=c58dc52d2c306ee9d8757e70b0181bbd&topic=44132.15">Link zur Lösung</a>:<br /><br />Und hier noch die einzelnen Schritte:<br /><br /><blockquote></blockquote><blockquote>Nochn kleiner Tipp: bei solchen Arbeiten immer statisch entladen d.h. vorher an Heizkörper oder PC Gehäuse fassen(irgend ne Masse) um zu verhindern dass ihr die elektronik gleich am anfang durchschiest.<br />Und so wenig wie möglich auf den grünen Platienen rumtatschen.<br /><br />1. Bei ausgeschaltetem Rechner, Laufwerk aus dem Gehäuse(am besten vor dem ausschalten des Rechners Laufwerk öffnen)<br />2. die vier schrauben an der Unterseite lösen und rausdrehn und Abdeckblech vorsichtig abnehmen<br />3. das koplette Laufwerk aus dem großen Blechgehäuse ziehen(auchn bischen vorsichtig dabei sein)<br />4. wenn ihr euch jetz das Laufwerk von oben betrachtet könnt ihr so ein breites, flaches, weisses kabeln sehn.<br />direkt am Ende des Kabels is ne schwarze plasteklammer(is so breit wie das Kabel selbst) die sich recht leicht nach oben klappen lässt.<br />5. jetzt kann man das Kable herausnehmen und die Silberkontakte mit nem Reinigungsmittel für elektronik und am besten nem antistatischen- nichtfusselnden Lappen reinigen.(seht euch nochmal die Kontakte an ob noch irgendwas drauf ist [Fusseln oder Rückstände vom reinigungsmittel] und entfernts wenn das der Fall ist)<br />6. Kabel wieder reinschieben (auf richtigen Sitz achten) und klammer vorichtig nach unten drücken bis sie wieder einrastet.<br />7. dann dreht ihr das Laufwerk und ihr seht an der Unterseite das gleiche Kabel ruaskommen, den gleichen Spass nochma, Plasteklammer nach oben öffnen Kabel rausziehen, Kontakte säubern, Kabel wieder rein und Klammer zu.<br />8: so noch das Laufwerk wieder in das Blechgehäuse(auf richtigen Sitzt achten und bloss nich mit Gewalt reindrücken), Blechdeckel wieder drauf und die vier Schrauben mit gefühl festziehen.<blockquote></blockquote></blockquote>Anonymoushttp://www.blogger.com/profile/16165301474370289610noreply@blogger.com