Odsvetujem, škoda tvojih živcev!
Zapis IPv6 naslova v stringu je definiran; OK, ni determinističen, a — “so what”. Sparsat string, ki naj bi bil IPv6 naslov, ni tako hudo.
Zanimivo vprašanje za programerje; a obstaja kakšna funkcija, skozi katero se pošlje vrednost v vnosnem polju (IPv6 naslov) in zna konvertirati med vsemi pojavnimi oblikami? V bistvu v bazo lahko vedno zapišeš v polni obliki in s tem rešiš vse dileme in težave. Me prav zanima, ali bodo japonci privršali nadme s katanami, če jih vprašam, kakšno težavo sploh probajo rešit 😉 Lemme try that…
Spreminjati standard, ker programerji ne znajo pravilno implementirat obstoječega standarda v svoje aplikacije? Sliši se kot uvod v while(1), prvi loop bo pa trajal dlje kot kot do 2011 😉
Tale je moja iz PHPja, morda kaj fali, ampak za silo je… Bi se dalo verjetno tudi lepše z regexp.
function expand_ipv6($ip) {
// replace :: with right number of :0
if (strpos($ip, ‘::’) !== false) {
$ip = str_replace(‘::’, str_repeat(‘:0’, 8 – substr_count($ip, ‘:’)).’:’, $ip);
}
// add 0s so each string between two : is 4 chars long
$ip_array = explode(‘:’, $ip);
foreach ($ip_array as $value) {
$value = str_repeat(‘0’, 4 – strlen($value)) . $value . “:”;
$expanded_ip .= $value;
}
return substr($expanded_ip, 0, -1);
}
… pred vpisom v bazo magari še konverzija v long integer (odstraniš : in base_convert() iz šestnajstišekga v desetiškega).
V tem času sem japoncem že preusmeril razmišljanje v smer, da ne poveljujejo celemu svetu, ampak naj izkoristijo community za iskanje takšnih anomalij na OS-ih in drugih napravah ter to sporočajo proizvajalcu, da se zadeve popravijo. Z odprtimi rokami so idejo sprejeli in sedaj delajo rewrite…
OMG no … pa saj že skor za vsak jezik obstaja kakšen OS lib ki podpira manipulacijo z IPv6 naslovi.
Python ma rečmo en super lib netaddr in kakršnkoli IPv6 (lahko tudi CIDR pa potem samo interiraš čez podomorežje) mu vržeš v objekt ti zadevo sparsa v svašta – vključno z okrajšano obliko
recimo:
>>> from netaddr import *
>>> ip = IP(‘ffff::’)
>>> str(ip)
‘ffff::’
>>> ip.value
340277174624079928635746076935438991360L
>>> ip.bits()
‘1111111111111111:0000000000000000:0000000000000000:0000000000000000:0000000000000000:0000000000000000:0000000000000000:0000000000000000’
Odsvetujem, škoda tvojih živcev!
Zapis IPv6 naslova v stringu je definiran; OK, ni determinističen, a — “so what”. Sparsat string, ki naj bi bil IPv6 naslov, ni tako hudo.
Zanimivo vprašanje za programerje; a obstaja kakšna funkcija, skozi katero se pošlje vrednost v vnosnem polju (IPv6 naslov) in zna konvertirati med vsemi pojavnimi oblikami? V bistvu v bazo lahko vedno zapišeš v polni obliki in s tem rešiš vse dileme in težave. Me prav zanima, ali bodo japonci privršali nadme s katanami, če jih vprašam, kakšno težavo sploh probajo rešit 😉 Lemme try that…
/jan
Spreminjati standard, ker programerji ne znajo pravilno implementirat obstoječega standarda v svoje aplikacije? Sliši se kot uvod v while(1), prvi loop bo pa trajal dlje kot kot do 2011 😉
Tale je moja iz PHPja, morda kaj fali, ampak za silo je… Bi se dalo verjetno tudi lepše z regexp.
function expand_ipv6($ip) {
// replace :: with right number of :0
if (strpos($ip, ‘::’) !== false) {
$ip = str_replace(‘::’, str_repeat(‘:0’, 8 – substr_count($ip, ‘:’)).’:’, $ip);
}
// add 0s so each string between two : is 4 chars long
$ip_array = explode(‘:’, $ip);
foreach ($ip_array as $value) {
$value = str_repeat(‘0’, 4 – strlen($value)) . $value . “:”;
$expanded_ip .= $value;
}
return substr($expanded_ip, 0, -1);
}
… pred vpisom v bazo magari še konverzija v long integer (odstraniš : in base_convert() iz šestnajstišekga v desetiškega).
Zanimiv pristop, thnx for sharing.
V tem času sem japoncem že preusmeril razmišljanje v smer, da ne poveljujejo celemu svetu, ampak naj izkoristijo community za iskanje takšnih anomalij na OS-ih in drugih napravah ter to sporočajo proizvajalcu, da se zadeve popravijo. Z odprtimi rokami so idejo sprejeli in sedaj delajo rewrite…
/jan
OMG no … pa saj že skor za vsak jezik obstaja kakšen OS lib ki podpira manipulacijo z IPv6 naslovi.
Python ma rečmo en super lib netaddr in kakršnkoli IPv6 (lahko tudi CIDR pa potem samo interiraš čez podomorežje) mu vržeš v objekt ti zadevo sparsa v svašta – vključno z okrajšano obliko
recimo:
>>> from netaddr import *
>>> ip = IP(‘ffff::’)
>>> str(ip)
‘ffff::’
>>> ip.value
340277174624079928635746076935438991360L
>>> ip.bits()
‘1111111111111111:0000000000000000:0000000000000000:0000000000000000:0000000000000000:0000000000000000:0000000000000000:0000000000000000’