Schlagwort: Technik

Farbcodes 👍 👎

Ab dem 1. August haben wir in der Firma einen neuen Auszubildenden zum Fachinformatiker für Anwendungsentwicklung. Dieser hat vor Kurzem noch ein zweiwöchiges Praktikum bei uns absolviert und dabei auch einiges von mir erfahren (ich hoffe, er hat sich erholt Smiley: winking). Auf dem Plan stand auch das Thema Farbcodes, wie sie insbesondere im Webdesign auftreten und nun möchte ich hier ebenfalls ein paar Worte dazu verlieren.

Zuerst einmal muss klar sein, was eigentlich die theoretische Grundlage dieser Notation ist, um sinnvolle Aussagen treffen zu können. Wir besprechen hier den RGB-Farbraum, welcher ein (additiver) Farbraum aus den drei Grundfarben Rot, Grün und Blau darstellt – wir besitzen demnach also drei Farbkanäle. Mit ein wenig Fantasie lässt sich bereits jetzt erahnen, wie entsprechende Farbcodes aus CSS zu verstehen sind:
#R1R0G1G0B1B0
Für jeden Farbkanal stehen uns in dieser Notation zwei hexadezimale Ziffern zur Verfügung, d. h. der Wertebereich pro Farbkanal erstreckt sich von 0 – ff16 (bzw. 0 – 25510) ≙ 162 (= 256) mögliche Werte.

Durch entsprechend niedrige bzw. hohe Werte pro Farbkanal ergibt sich proportional dazu die Intensität der jeweiligen Grundfarbe, d. h. um eben diese in voller Ausprägung darzustellen müssen wir lediglich den entsprechenden Farbkanal mit dem höchsten Wert belegen:
Grundfarben als Farbcode
010203
#ff0000 = ff (Rot) + 00 (Grün) + 00 (Blau) = Rot#00ff00 = 00 (Rot) + ff (Grün) + 00 (Blau) = Grün#0000ff = 00 (Rot) + 00 (Grün) + ff (Blau) = Blau
Wenn man sich den Farbraum wörtlich vorstellt, d. h. als Koordinatensystem mit den entsprechenden Farbkanälen als Achsen, können wir jeder Koordinate einen Farbeindruck entnehmen. Die tatsächlichen Farbmodelle sind noch etwas komplexer, für diese kleine Einführung ist diese Vorstellung jedoch durchaus legitim.

Sofern wir alle drei Farbkanäle mit einem identischen Wert belegen, erhalten wir einen grauen Eindruck zwischen niedrigster (Schwarz) und höchster (Weiß) Intensität:
Grauwerte
010203040506070809
#000000 = 00 (R) + 00 (G) + 00 (B) = Schwarz#333333 = 33 (R) + 33 (G) + 33 (B) = dunkles Grau#777777 = 77 (R) + 77 (G) + 77 (B) = mittleres Grau#cccccc = cc (R) + cc (G) + cc (B) = helles Grau#ffffff = ff (R) + ff (G) + ff (B) = Weiß
Sofern – wie im o. g. Beispiel, was dafür nicht unbedingt notwendig gewesen wäre – jeder Farbkanal aus zwei identischen Ziffern besteht, erlauben uns CSS und viele Grafikprogramme eine Kurzschreibweise, so dass aus #RRGGBB die Verkürzung #RGB werden kann. So kann beispielsweise aus #112233 schlicht #123 werden.

Weitere prägnante Farben zur Orientierung:
Weitere Farbcodes
010203
#00ffff (= #0ff) = 00 (R) + ff (G) + ff (B) = Cyan#ff00ff (= #f0f) = ff (R) + 00 (G) + ff (B) = Magenta#ffff00 (= #ff0) = ff (R) + ff (G) + 00 (B) = Gelb
Zugegebenermaßen war das nun wirklich nur eine sehr minimale Einführung mit einigen Vereinfachungen. Ich hoffe dennoch, dass manchem reinen "Farbcode-Kopierer" das System dadurch etwas klarer geworden ist.

Möglicherweise – das kann ich allerdings noch nicht versprechen – kann ich meinen ehem. Ausbilder einmal zu einem Gastbeitrag zum Thema Farbe und Licht bewegen, der als Elektrotechniker auf diesem Gebiet ein Experte ist und das auch sehr gut verständlich machen kann. Ein anderer Gastbeitrag ist auf jeden Fall bereits geplant. Smiley: smiling

Windows-Bibliotheken und NAS 👍 👎

Bei vielen Benutzern scheinen die Windows-Bibliotheken immer noch für mehr Verwirrung als Nutzen zu sorgen. Da ich diese jedoch sehr gerne verwende, möchte ich einen konkreten Anwendungsfall am Beispiel meines tatsächlichen lokalen Netzwerkes im Zusammenhang mit einem NAS erläutern.

Die Ausgangssituation stellt sich so dar, dass ich in meinem Heimnetzwerk sowohl mit einem stationären Rechner arbeite, als auch mit einem Netbook. Da ich meist für die gleiche Arbeit beide Geräte abwechselnd nutze, ergibt sich natürlich umgehend das Problem, die Daten synchron zu halten. Naheliegenderweise besitze ich deshalb zusätzlich ein NAS (für Interessierte: es handelt sich um eine Synology DiskStation*).

Ich habe dazu gemeinsame Ordner für öffentliche Bilder, Dokumente, Musik, Podcasts und Videos angelegt. Da es durchaus auch Dateien gibt, die nicht jeder sehen muss, besitzt jeder angelegte Benutzer auf dem NAS zusätzlich ein home-Verzeichnis. Auf die weiteren – durchaus interessanten – Möglichkeiten des NAS möchte ich nun aber gar nicht weiter eingehen, sondern den Komfort im Zusammenhang mit den Windows-Bibliotheken erläutern; genauer nehmen wir uns die "Bilder"-Bibliothek vor. Standardmäßig zeigt diese nach der Installation von Windows auf die Ordner "Eigene Bilder" (C:\Users\{BENUTZER}\Pictures) und "Öffentliche Bilder" (C:\Users\Public\Pictures).

Mein NAS habe ich nun so konfiguriert, dass die gemeinsamen Ordner als Freigabe zur Verfügung stehen. Für am System angemeldete Benutzer steht außerdem das bereits erwähnte Heimverzeichnis zur Verfügung. Die Bibliotheken habe ich so abgeändert (was ganz einfach über den Eigenschaften-Dialog möglich ist), dass die alten Verzeichnis-Zuordnungen entfallen sind und stattdessen die öffentlichen Freigaben und die entsprechenden Pfade innerhalb meines Heimverzeichnisses eingetragen wurden. Den privaten Ordner habe ich darüber hinaus als Standardspeicherort festgelegt.

Praktisch kann ich nun also genauso wie zuvor arbeiten (insbesondere verhält sich dies Programmen gegenüber weitestgehend transparent), mit dem Unterschied, dass ich nicht mehr auf lokale Daten zugreife, sondern auf das NAS. Durch die Festlegung des Standardspeicherortes auf meine persönliche Freigabe landen alle auf die Bibliothek gezogenen Dokumente (zumindest erst einmal) automatisch dort. Dennoch habe ich aber über die Bibliotheken auf alle Dateien über einen Ort im Windows Explorer Zugriff, wobei ich einzelne Dateien jederzeit beispielsweise von meinem privaten in den öffentlichen Ordner verschieben kann, ohne mir um den konkreten Speicherpfad Gedanken zu machen. Ebenfalls kann nun der Zugriff von allen Geräten auf die gleiche Weise erfolgen, womit im Normalfall (man kann natürlich alles provozieren) keine Inkonsistenzen entstehen können. Für Besitzer eines Windows Phone (wie mich) ist außerdem praktisch, dass Zune – genauso wie der Windows Media Player – standardmäßig ebenfalls auf diese Bibliotheken zugreift und dadurch alle Medien problemlos auch dafür und damit auch zur Synchronisierung mit dem Smartphone zur Verfügung stehen.

Wer ebenfalls per VPN Zugriff auf ein externes Netzwerk (beispielsweise des Unternehmens) hat, kann dessen Freigaben auch einer solchen Bibliothek hinzufügen und so auch darauf zentral zugreifen. Dies finde ich auf jeden Fall deutlich komfortabler über Bibliotheken als die Auswahl über div. Netzlaufwerke. Zugegebenermaßen muss man aber wohl sagen, dass dieser Vorteil erst in ähnlichen Umgebungen wie in meinem Anwendungsfall voll zur Geltung kommt. Sofern man lediglich mit einem Rechner und ohne Netzwerkspeicher arbeitet, d. h. wahrscheinlich sowieso alle Dateien in den eigenen Ordnern ablegt, wird man von den Windows-Bibliotheken tatsächlich nicht wesentlich profitieren. Sie stören meines Erachtens nach aber auch nicht, wenn einem das Konzept der Zusammenführung verschiedener Pfade unter einem virtuellen bewusst ist.

Wer sich für die technischen Details der Bibliotheken interessiert, findet deren Definition übrigens im Verzeichnis C:\Users\{BENUTZERNAME}\AppData\Roaming\Microsoft\Windows\Libraries; die *.library-ms-Dateien enthalten XML-Code.


*) Nein, ich erhalte für diesen Link kein Geld. Smiley: tongue_out

Darstellung von IP-Adressen (Ergänzung: Versionskennungen) 👍 👎

Zu meinem letzten Eintrag hat mich eine Mischung aus Frage und Idee erreicht, dieses Verfahren doch auch bei Versionskennungen (z. B. v1.2.3) anzuwenden, welche schließlich ähnlich aussehen, wie eine IP-Adresse.

Grundsätzlich ist das natürlich naheliegend und nicht völlig abwegig, funktioniert jedoch nur bedingt. Das Problem: Die Ziffern unserer Stellen müssten nach bisherigem Vorgehen endlich sein, damit wir die Basis korrekt wählen können, um das Ergebnis eindeutig zu halten. Im Dezimalsystem stehen uns als Ziffern 09 zur Verfügung. Bei IP-Adressen lauten die "Ziffern" 0255 (dezimal).

Bei einer Versionskennung muss im Allgemeinen beispielsweise auf v1.0.9 nicht zwangsläufig v1.1.0 folgen (da die einzelnen "Stellen" traditionell* als Hauptversion, Nebenversion und Fehlerbehebungsversion geführt werden). Das heißt, werden erneut lediglich einige Fehler behoben, wird eher v1.0.10 folgen usw. Bei anders aufgebauten Versionskennungen (variierende Stellenanzahl, "beta" etc.) wird es noch schwieriger.

Sollte jedoch, aus welchen Gründen auch immer, jede Stelle auf z. B. 09 begrenzt sein, so könnten wir natürlich analog zum "üblichen" Dezimalsystem verfahren und als Basis die 10 wählen (oder einfach die Punkte entfernen …), womit das Verfahren wieder funktioniert. Dies dürfte jedoch ein eher seltener und ungewöhnlicher Spezialfall sein, insofern sollte hier der Einfachheit wegen nach wie vor eher stellenweise verglichen werden.


*) Ich persönlich halte daran auch fest. Viele Projekte scheinen diesem Schema jedoch nicht mehr zu folgen. Teilweise gibt es zumindest zur Kommunikation nach Außen gar nur noch eine einzelne Versionsnummer (z. B. v19), was jedoch auf den ersten Blick weniger über den Inhalt der Version aussagt. Es ist sicherlich nicht ganz falsch, dass das den Endanwender auch nicht direkt interessieren muss – praktisch finde ich es trotzdem. Smiley: tongue_out

Darstellung von IP-Adressen 👍 👎

Vorweg sei erwähnt, dass ich mich im weiteren Verlauf des Artikels der Übersicht wegen auf IPv4 beschränken werde. Das vorgestellte Konzept funktioniert prinzipiell jedoch auch bei IPv6 in ähnlicher Form.

Jeder hat bestimmt schon einmal IP-Adressen der Form "127.0.0.1" (lokale Adresse), "192.168.1.1" (private Adresse) oder "217.160.176.125" (öffentliche Adresse) gesehen. Das ist eine für den Menschen bequeme Schreibweise, jedoch nur bedingt zur automatisierten Verarbeitung (z. B. für Vergleiche bei Sortierungen) geeignet.

Eine IPv4-Adresse besteht aus vier Segmenten, die jeweils 8 Bit (≙ 4 * 1 Byte = 32 Bit, bzw. 4 Byte) umfassen. Insofern verwendet eine IPv4-Adresse dieser Schreibweise ("dotted decimal") eine Art Stellenwertsystem wie unser gebräuchliches Dezimalsystem, wobei die einzelnen Stellen jedoch mehrere Ziffern umfassen und daher durch ein Trennzeichen (in diesem Fall ein ".") getrennt werden.

Die Wertigkeit der Stelle einer Zahl unseres Dezimalsystems ergibt sich bekanntermaßen aus dessen Position:
Stellenwertsystem von Dezimalzahlen
01020304050607
  1 =                     1 * 100  5 =                     5 * 100
10 = 1 * 101 + 0 * 100 15 = 1 * 101 + 5 * 100
123 = 1 * 102 + 2 * 101 + 3 * 100
Ähnlich verhält es sich nun bei einer IPv4-Adresse, jedoch mit entsprechend anderen Wertigkeiten:
Stellenwertsystem von IP-Adressen
0102030405
127.  0.  0.  1 = 127 * 224 +   0 * 216 +   0 * 28 +   1 * 20 = 2 130 706 433
192.168. 1. 1 = 192 * 224 + 168 * 216 + 1 * 28 + 1 * 20 = 3 232 235 777
82.165. 40.206 = 82 * 224 + 165 * 216 + 40 * 28 + 206 * 20 = 1 386 555 598
In Anbetracht dieser Tatsache können wir einer IPv4-Adresse also einen ein-eindeutigen ganzzahligen Wert zuordnen, indem wir – analog zu unserem Dezimalsystem – die Summe der einzelnen Stellen bilden. Durch diese Darstellungsweise sind nun beispielsweise sehr einfach "größer"- und "kleiner"-Relationen zu ermitteln.

Die zu dieser Thematik passende Eigenschaft Address der IPAddress-Klasse des .NET-Frameworks ist als veraltet gekennzeichnet. Solltet ihr diese Funktionalität dennoch benötigen, so lässt sich dies selbstverständlich auch schnell selbst schreiben – wobei zu berücksichtigen gilt, dass das nur für IPv4-Adressen in dieser Form verwendet werden kann:
Vorgehensweise zur ganzzahligen Darstellung von IPv4-Adressen
010203040506
IPAddress ipAddress = IPAddress.Parse("217.160.176.125");byte[] segmentList = ipAddress.GetAddressBytes();
long ip2long = Convert.ToInt64((segmentList[0] * Math.Pow(2, 24)) + (segmentList[1] * Math.Pow(2, 16)) + (segmentList[2] * Math.Pow(2, 8)) + segmentList[3]); // – oder auch -long ip2long = (((long) segmentList[0] << 24) | ((long) segmentList[1] << 16) | ((long) segmentList[2] << 8) | (long) segmentList[3]);
PHP bietet hier beispielsweise die Funktion ip2long (und deren Gegenstück long2ip) an.

Suchmaschinenoptimierung 👍 👎

Vor einer Weile habe ich ein Angebot zur Suchmaschinenoptimierung (SEO, Search Engine Optimization) meiner Projektseite für die dt. Übersetzung der Lua-Referenz erhalten. Daran wird eigentlich schon recht klar, dass es hier nur wenig um die eigentlichen Inhalte der Seite geht. Die meisten Besucher kommen nämlich – naheliegenderweise – über den offiziellen Link der Lua-Webpräsenz und ebenfalls sehr viele bereits über Suchmaschinen. Für die breite Masse dürfte das Angebot dieser Seite nicht interessant sein, so dass eine weitere Verbreitung gar nicht notwendig ist. Werbung soll es dort selbstverständlich ebenfalls auch zukünftig nicht geben.

Es gibt auf jeden Fall sinnvolle Methoden zur "Suchmaschinenoptimierung" (wobei ich hier breiter fassen würde auf "Optimierung zur automatisierten Verarbeitung der Inhalte"). Dazu gehören Metadaten und eine semantische Struktur des Quelltextes der Webpräsenz. Dies können Suchmaschinen beispielsweise zur Darstellung eines passenden Titels und einer treffenden Kurzbeschreibung verwenden.

Ein nicht unerheblicher Anteil der Branche beschäftigt sich jedoch damit, zweifelhafte "Linkfarmen" aufzubauen, nicht im Zusammenhang mit dem eigentlichen Thema des Auftritts stehende Verknüpfungen herzustellen oder gleich direkt schlichten Spam zu betreiben, was trotz der Bemühungen großer Suchmaschinen-Anbieter dennoch ab und an zu völlig unpassenden Ergebnissen zu einer Recherche führt. Leider scheint man davon mit praktisch keinem technischen Fachwissen und wenig Aufwand sogar recht gut leben zu können, wenn man sich die Angebote einmal genauer ansieht. Die tatsächliche Auswirkung derartiger Angebote ist teilweise ebenfalls fragwürdig. Zudem finde ich es schade, dass es dadurch inhaltlich wirklich interessante Seiten schwerer haben, gefunden zu werden.

Mein einfacher, kostenloser Tipp an alle Betreiber von Webpräsenzen: Sorgt für ansprechend und sorgfältig aufbereitete Themen, dezente und vor allem passende Werbung (wenn ihr ein Thema toll auf euren Seiten beschreibt, dürft ihr darauf sicherlich bei den meisten Blogs oder Foren verweisen, wenn es um dieses Thema geht Smiley: smiling) und der Rest ergibt sich meist von alleine, insbesondere in Zeiten von Facebook, Twitter und ähnlichen Plattformen dauert das auch gar nicht mehr so lange.

Projektverweise

Kategorien / Archiv  |  Übersicht RSS-Feed

Schlagworte

Suche