Schlagwort: Technik

Representation of IP Addresses (Appendix: Version numbers) 👍 👎

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

Representation of IP Addresses 👍 👎

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.

Search Engine Optimisation 👍 👎

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.

Endless TLDs 👍 👎

Ich möchte mich an dieser Stelle gar nicht groß über die neuen TLDs auslassen, deren Nutzen mir großteils ohnehin fraglich erscheint – wahrscheinlich wird das zu großen Teilen lediglich in Geldmacherei münden.

Aber auch die bestehenden TLDs haben bereits ihre Tücken und davon nicht zu knapp. Wie einige von euch sicher bereits wissen werden (→ zu meiner Person), arbeite ich als Softwareentwickler bei einem ISP. Das bedeutet wir gehören zu denen, die Endkunden und auch Unternehmen Domains zur Registrierung anbieten und deren Betreuung übernehmen.

Natürlich bleibt es da nicht aus, dass man auch Anwendungen entwickelt, die auf die Systeme anderer Registrare und Registrierungsstellen (z. B. DENIC für .de-Domains) zugreifen müssen. Nun befindet man sich im IT-Sektor ja eigentlich in einer – zumindest sollte man das meinen – strukturierten Umgebung und das trifft auch auf vieles zu, leider aber nicht auf die Schnittstellen und Formate bei Domain-bezogenen Abfragen.

Wenn man sich beispielsweise daran machen möchte, Whois-Abfragen für diverse Top-Level-Domains ("TLD", z. B. "net") zu implementieren, so hat man es tatsächlich bei den meisten Domainendungen mit völlig unterschiedlichen Ausgaben zu tun, die es anschließend zur eigenen Verarbeitung erst einmal auf ein einheitliches Format zu bringen gilt. Zugegebenermaßen hätte ich von ICANN und Co. an dieser Stelle deutlich mehr Initiative für ein einheitliches Format erwartet, da der aktuelle Zustand die Wart- und Verarbeitbarkeit der Daten außerordentlich und wie ich finde auch völlig unnötig erschwert.

Zu allem Überfluss sind auch noch die Anforderungen und Formalien bei verschiedenen TLDs teilweise völlig unterschiedlich. Das bedeutet, dass man je nach Domainendung auch noch zusätzliche (meist länderspezifische) Daten benötigt. Das beginnt bei der Angabe von Nameservern, geht über Einschränkungen im Domainnamen und endet (nicht wirklich) bei den Angaben zur Person des Inhabers einer Domain.

Domain Name Warehousing 👍 👎

Wer schon einmal eine Domain für ein neues Projekt gesucht hat, kennt das Problem natürlich: Die gewünschte Domain ist leider bereits vergeben. Dann denkt man sich, da war wohl – offensichtlich – jemand schneller, möchte es sich mal ansehen und sieht, was irgendwie klar war: Die Domain ist "geparkt", mit zumindest gefühlten 500 Links versehen und steht zum Verkauf.

D. h. es schaltet sich hier ohne Not und Auftrag jemand zwischen Registrar und Kunde, um auch noch daran mitzuverdienen. Wobei "verdienen" hier mehr als fraglich ist, es wird schließlich keinerlei Mehrwert erbracht, sondern im Gegenteil völlig unnötiger Umstand verursacht.

Letztlich nichts Neues, aber das nervt mich immer wieder und wollte mal hier festgehalten werden. Leider habe ich auch bisher keine praktikable Idee, wie sich das verhindern lässt. Nicht zuletzt ist natürlich problematisch, dass man als Domain-Anbieter schließlich erst einmal daran verdient, wenn hunderte oder gar tausende Domains "einfach nur so" registriert werden.

Project links

Categories / Archive  |  Übersicht RSS feed

Tags

Search