Pieniä kysymyksiä ohjelmoinnista

Liittynyt
16.09.2017
Viestejä
9
Onko 4 merkkiä pitkä, base62 enkoodattu merkkijono (jokainen merkki aakkosista 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz) 32-bittinen? Siis kun UUIDv6 on 128-bittinen, kun siinä on 36 heksadesimaalilukua, ja yksi heksadesimaali vie 4 bittiä (32 * 1 * 4), mutta base62-kirjain vie 2 heksadesimaalia, jolloin 4 * 2 * 4 -> 32?
 
Liittynyt
17.02.2018
Viestejä
1 008
Onko 4 merkkiä pitkä, base62 enkoodattu merkkijono (jokainen merkki aakkosista 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz) 32-bittinen? Siis kun UUIDv6 on 128-bittinen, kun siinä on 36 heksadesimaalilukua, ja yksi heksadesimaali vie 4 bittiä (32 * 1 * 4), mutta base62-kirjain vie 2 heksadesimaalia, jolloin 4 * 2 * 4 -> 32?
Wikipedia näyttää että base62 olisi kuusi bittiä per merkki (ei suoraa speksiä, mutta listauksessa on kuusi bittiä per merkki), eli 1,5 hexaa tai 0,75 tavua. Käy järkeen koska muuten siinä olisi hukkatilaa.

Eli neljä merkkiä olisi 3 tavua tai 24 bittiä (4*6).

Edit:
Sekoilua

Edit2:
En saanut otetta miten uuid v6 liittyy tähän. Se on 128 bittinen arvo, joka heksoina esitettynä sisältää 32 merkkiä. base62 enkoodattuna se olisi laskelmieni mukaan 21,5 merkkiä pitkä.

Edit3:
Koska base62 sisältää 62 verran tietoa kuudessa bitissä (64) jää vähän informaatiota yli, jolloin se tekee muunnoksista hankalampia mikäli käytetään myös nuo tuo yli jäänyt data.
 
Viimeksi muokattu:
Liittynyt
16.09.2017
Viestejä
9
Wikipedia näyttää että base62 olisi kuusi bittiä per merkki (ei suoraa speksiä, mutta listauksessa on kuusi bittiä per merkki), eli 1,5 hexaa tai 0,75 tavua. Käy järkeen koska muuten siinä olisi hukkatilaa.

Eli neljä merkkiä olisi 3 tavua tai 24 bittiä (4*6).

Edit:
Sekoilua

Edit2:
En saanut otetta miten uuid v6 liittyy tähän. Se on 128 bittinen arvo, joka heksoina esitettynä sisältää 32 merkkiä. base62 enkoodattuna se olisi laskelmieni mukaan 21,5 merkkiä pitkä.

Edit3:
Koska base62 sisältää 62 verran tietoa kuudessa bitissä (64) jää vähän informaatiota yli, jolloin se tekee muunnoksista hankalampia mikäli käytetään myös nuo tuo yli jäänyt data.
UUID:n otin esille varmaan sillä, että siinä voi päätellä bittimäärän perusteella todennäköisyyden että se generoi duplikaatin, ja tässä yritän pienessä päässäni järkeillä että jos otan randomisti base62 -taulukosta merkkejä (chars[rand(0, 61)]), ja laitan niitä peräkkäin, niin kuinka monta niitä pitää olla että siinä on vähintään vaikkapa 24 tai 32bittiä (ja näin laskea myös sen collisio-todennäköisyyden)?
 
Liittynyt
17.02.2018
Viestejä
1 008
UUID:n otin esille varmaan sillä, että siinä voi päätellä bittimäärän perusteella todennäköisyyden että se generoi duplikaatin, ja tässä yritän pienessä päässäni järkeillä että jos otan randomisti base62 -taulukosta merkkejä (chars[rand(0, 61)]), ja laitan niitä peräkkäin, niin kuinka monta niitä pitää olla että siinä on vähintään vaikkapa 24 tai 32bittiä (ja näin laskea myös sen collisio-todennäköisyyden)?
Tarkoitatko siis että jos sinulla on 128 bittinen arvo, niin haet sitä että kuinka suurella todennäköisyydellä saat saman arvon jos rakennat arvon jonosta arvoja välillä 0-61? Se riippuu allokoitko jokaiselle arvolle täydet 6 bittiä vai sallitko kuuteen bittiin mahtuvan ylijäämän kierrättämisen eteenpäin kokonaisarvoon, jolloin saat useamman arvon mahtumaan tuohon 128 bittiin.

Jos sisällytät 6 tavun ylijäämät base62:sta menee laskenta nopeasti katsottuna jotakuinkin tämän mukaan: What is Base62 Conversion?
Jos taas käytät kuusi tavua per merkki jätät tuosta 128 tavun arvosta osan käyttämättä koska se ei ole kuudella jaollinen tai vaihtoehtoisesti otat vain kahden tavun arvoisen merkin loppuun. Onko peräkkäin laittaminen tavoitteen mukaista?

Base62 arvo ei ole jaollinen 24 tai 32 bitin maksimiarvon kanssa. Jos haluat tietää kuinka monta base62 merkkiä on arvoltaan vähintään 24 bittiä, on vastaus viisi. Kysymys ei kuitenkaan ole niin yksinkertainen, sillä neljä base62 merkkiä on arvoltaan 14 776 336, kun taas 24 bittiä on arvoltaan 16 777 216. Viisi base62 merkkiä meneekin pitkälle yli. Jos nuo noin kaksi miljoonaa väliin jäävää arvoa vielä jaetaan base62 merkeistä koostuvalle merkkijonolle saadaan huomattavasti enemmän mahdollisuuksia kuin mihin neljällä merkillä päästään. Onko tämän taustalla koulutehtävä jonka tarkoituksena on ymmärtää binääriarvoja?
 
Liittynyt
15.10.2021
Viestejä
17
UUID:n otin esille varmaan sillä, että siinä voi päätellä bittimäärän perusteella todennäköisyyden että se generoi duplikaatin, ja tässä yritän pienessä päässäni järkeillä että jos otan randomisti base62 -taulukosta merkkejä (chars[rand(0, 61)]), ja laitan niitä peräkkäin, niin kuinka monta niitä pitää olla että siinä on vähintään vaikkapa 24 tai 32bittiä (ja näin laskea myös sen collisio-todennäköisyyden)?
Jos kiinnostava asia on tuo lopussa suluissa oleva todennäköisyys sille että kaksi satunnaista base62 merkkijonoa ovat samat, niin eikö sen voi laskea ihan tavanomaisella todennäköisyyslaskennalla? Yhden saman merkin todennäköisyys on silloin 1/62 ja saman N merkkiä pitkän merkkijonon (1/62)^N. Tuotahan voi sitten verrata halutessa vastaavaan bittijonon todennäköisyyteen jossa yhden saman bitin todennäköisyys on 1/2. Tuosta laskimella 32 bittisten bittijonojen samanlaisuuden todennäköisyys (1/2)^32 = 2,328e-10. Sitten kokeilemalla vähintään yhtä epätodennäköinen base62 merkkijono: (1/62)^6 = 1.761e-11. Eli jo 6 base62 merkkiä pitkien merkkijonojen "yhteentörmäyksen" todennäköisyys on pienempi kuin 32 bittisten bittijonojen.
 
Liittynyt
16.09.2017
Viestejä
9
Jos kiinnostava asia on tuo lopussa suluissa oleva todennäköisyys sille että kaksi satunnaista base62 merkkijonoa ovat samat, niin eikö sen voi laskea ihan tavanomaisella todennäköisyyslaskennalla? Yhden saman merkin todennäköisyys on silloin 1/62 ja saman N merkkiä pitkän merkkijonon (1/62)^N. Tuotahan voi sitten verrata halutessa vastaavaan bittijonon todennäköisyyteen jossa yhden saman bitin todennäköisyys on 1/2. Tuosta laskimella 32 bittisten bittijonojen samanlaisuuden todennäköisyys (1/2)^32 = 2,328e-10. Sitten kokeilemalla vähintään yhtä epätodennäköinen base62 merkkijono: (1/62)^6 = 1.761e-11. Eli jo 6 base62 merkkiä pitkien merkkijonojen "yhteentörmäyksen" todennäköisyys on pienempi kuin 32 bittisten bittijonojen.
No sehän tässä on ongelma, etten ymmärrä mistä se bittisyys tässä tulee. Jos generoin randomisti 4 tavua (esim. js:llä window.crypto.getRandomValues(new Uint8Array(4)), saan 32 bittiä informaatiota, ja lopuksi konvertoin sen base62-merkkijonoksi, se sisältää edelleen 32 bittiä informaatiota, ja on joka kerta täsmälleen 4 merkkiä pitkä. Siis miten on mahdollista, että neljän base62 -merkin laittaminen peräkkäin eri menetelmällä yhtäkkiä onkin vain 24-bittinen? Se on tällaista kun ei ole teoriataustaa, ja järkikin juoksee välillä melkein takaperin :D
 
Liittynyt
17.02.2018
Viestejä
1 008
No sehän tässä on ongelma, etten ymmärrä mistä se bittisyys tässä tulee. Jos generoin randomisti 4 tavua (esim. js:llä window.crypto.getRandomValues(new Uint8Array(4)), saan 32 bittiä informaatiota, ja lopuksi konvertoin sen base62-merkkijonoksi, se sisältää edelleen 32 bittiä informaatiota, ja on joka kerta täsmälleen 4 merkkiä pitkä. Siis miten on mahdollista, että neljän base62 -merkin laittaminen peräkkäin eri menetelmällä yhtäkkiä onkin vain 24-bittinen? Se on tällaista kun ei ole teoriataustaa, ja järkikin juoksee välillä melkein takaperin :D
Tuo luo neljä 8 bittistä satunnaisarvoa. Jos muunnat ne base62 merkeiksi ja saat vain neljä merkkiä, tarkoittaa se että muunnos on häviöllinen. Kahdeksan bittinen (1 tavu) arvo on välillä 0-255 ja base62 on 0-61. Esim. arvo 128 kääntyisi häviöttömästi base62 merkeiksi "24" (jos nopeasti laskin oikein). Nelitavuinen arvo sitten on jo jotain aivan muuta base62:ksi käännettynä. Häviöllinen muunnos riippuu millä tavalla se on tehty.

Jos saat neljä kirjainta, voi olla että ne ovat esim. iso 8859 tai extended ASCII muodossa ja siksi vievät 8 bittiä per merkki. Uint8 kääntyykin näppärästi suoraan tuohon muotoon ilman ongelmia. Tietämättä sen tarkemmin millä tuon käännöksen teet on vaikea asiaa analysoida enempää.

EDIT:
Laskin uusiksi...
 
Viimeksi muokattu:
Liittynyt
16.09.2017
Viestejä
9
... tarkoittaa se että muunnos on häviöllinen...
Oikeassa olet, törmäsin tähän itsekin kun aloin miettimään miten sen merkkijonon voi dekoodata (vastaus: ei voi, koska informaatiota häviää). Sain kuitenkin ongelmaani ratkaisun (joka siis oli että kuinka monta merkkiä tarvitsee, että todennäköisyys että saa kaksi samaa on "tarpeeksi pieni" (<0.2%)) – päädyin siihen että 4 merkkiä riittää, bittimäärä oli tässä oikeastaan vain sivuseikka. Kiitos vastaajille. PS. käytin Collision Calculator -sivun laskinta todennäköisyyden laskemiseen, vaikutti se että se osasi hommansa, ja lähdekoodin silmäilyn mukaan ottaa huomioon myös syntymäpäiväongelman.
 
Liittynyt
15.10.2021
Viestejä
17
No sehän tässä on ongelma, etten ymmärrä mistä se bittisyys tässä tulee. Jos generoin randomisti 4 tavua (esim. js:llä window.crypto.getRandomValues(new Uint8Array(4)), saan 32 bittiä informaatiota, ja lopuksi konvertoin sen base62-merkkijonoksi, se sisältää edelleen 32 bittiä informaatiota, ja on joka kerta täsmälleen 4 merkkiä pitkä. Siis miten on mahdollista, että neljän base62 -merkin laittaminen peräkkäin eri menetelmällä yhtäkkiä onkin vain 24-bittinen? Se on tällaista kun ei ole teoriataustaa, ja järkikin juoksee välillä melkein takaperin :D
En ole hirveästi javascriptiä tai htmlää kirjoittanut mutta tein What is Base62 Conversion? ohjeilla yksinkertaisen muuntimen:
HTML:
<!DOCTYPE html>
<html>
<body>
<p id="demo"></p>
<script>
merkit = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
numero = self.crypto.getRandomValues(new Uint32Array(1))[0];
base62 = "";

x = numero;
while (x > 0) {
    base62 += merkit[x % 62];
    x -= x % 62;
    x /= 62;
}
base62 = base62.split('').reverse().join('');

document.getElementById("demo").innerHTML = numero + " = " + base62;
</script>
</body>
</html>
Tuolla saan kyllä 6 merkkisiä arvoja tuosta 32 bittisestä (Uint32) numerosta. Esimerkki tulos:
3581715481 = 3uOVoX
Teet ilmeisesti jokaiselle 4 lle tavulle erikseen base62 muunnoksen? Tästähän tulee eri arvo kuin jos nuo neljä tavua tulkittaisiin 32 bittisenä lukuna. Yhden tavun muunnoksesta tulee 1 tai 2 merkkiä tulokseksi eli jos nuo lyöt yhteen siitä tulee 4-8 merkkiä yhteensä. Onko mahdollista että otat jokaisesta muunnoksesta vahingossa vain yhden merkin mukaan tulokseen?
 

Yeenoghu

Neighbour of the beast
Liittynyt
07.11.2016
Viestejä
1 247
Toivottavasti tänne mahtuu yksi simppeli skriptaamiseen liittyvä avunpyyntö.

Windows command promptiin tarvitsen tiedostojen massauudelleennimeämiseen skriptin, jonka pitäisi suoriutua seuraavasta tempusta:

Nykyinen:

y:\kansio\tiedosto.iso
y:\toinen kansio\toinen tiedosto.iso
jne.

Tavoite olisi:
y:\kansio\kansio.iso
y:\toinen kansio\toinen kansio.iso
jne.

Toisin sanoen iso-tiedostot pitäisi saada uudelleennimettyä kunkin isäntäkansion nimen mukaiseksi. Kussakin kansiossa on vain yksi tiedosto.

Vinkkejä otetaan vastaan.
 
Liittynyt
17.10.2016
Viestejä
4 005
Toimisiko


Get-ChildItem -Directory | ForEach-Object {
$newName = (Get-ChildItem $_.FullName | Where-Object { $_.Extension -eq '.iso' }).BaseName
Rename-Item $_.FullName -NewName $newName
}

Toki kokeile ensin joillain dummy fileillä :)


edit: jaa, juuri päinvastoin..


Get-ChildItem -File -Filter *.iso | ForEach-Object {
$folderName = $_.Directory.Name
$newName = $folderName + $_.Extension
Rename-Item $_.FullName -NewName $newName
}
 
Viimeksi muokattu:
Liittynyt
07.01.2021
Viestejä
669
Osaako joku selittää tai ohjata sopivaan matskuun, että miten NextJS:n ISG (Incremental Site Generation) toimii? NextJS:n omat sivut selittävät miten yksi sivu koodataan niin että se päivittyy, mutta miten jos tehdään muutos, jonka pitäisi vaikuttaa isoon määrään sivuja.

Esimerkki: muokkaan sivustollani teosta. Muokkauksista riippuen tämä voi vaikuttaa yhteen tai useampaan henkilösivuun, asiasanasivuun, kirjasarja-sivuun (vaihdan kirjasarjan toiseksi -> kaksi sarjasivua muuttuu) jne.

Tuo sivustoni kun on sellainen, että yksittäiset sivut päivittyvät hyvin harvoin, mutta sivuja alkaa olla luokkaa 10,000, ja jotain sivuja päivitetään käytännössä päivittäin, joten kokoaan staattista sivustosta ei kannata tehdä - koko sivuston buildaaminen jokaisesta muutoksesta olisi ihan liian raskasta.

Ja löytyykö jostain jotain hyvää selitystä miten sivusto ylipäätään pitäisi suunnitella jos haluaa käyttää SSR:ää? Miten ne interaktiiviset osat erotetaan staattisesta sisällöstä? Riittäkö jos ne on omissa komponenteissaan?
 
Liittynyt
07.01.2021
Viestejä
669
Ja siis unohtui mainita tuo revalidate, joka on tulossa seuraavaan versioon, ilmeisesti jos rakentaa jonkunlaisen häkkyrän, joka tunnistaa mitkä muut sivut pitää revalidoida, niin se ratkaisisi tuon ongelman?
 
Toggle Sidebar

Statistiikka

Viestiketjut
234 267
Viestejä
4 118 619
Jäsenet
69 902
Uusin jäsen
CallmeJohnson

Hinta.fi

Ylös Bottom