Italian Chiacchiericci

Star-Dust

Expert
Licensed User
Longtime User
Non mi dispiacerebbe poter evitare di scrivere qui in "Chiacchiericci" e poterlo fare in una nostra chat su Telegram.
Fatemi sapere.

P.S. Senza contare che non sarebbe nemmeno limitata a messaggi di testo.
Naaaaaaaaaaa. Qui quando voglio chiudere per qualche, basta che non entro e e finisce li.

Su Telegram riceveresti comunque tutto da tutti........ non sia mai.... e se volessi sparire per poi tornare dopo una settimana? Mica è una prerogativa solo di alcuni.
 
Last edited:

Elric

Well-Known Member
Licensed User
Bello leggervi!
Lo farei anche altrove!
Tra trasloco, lavoro e paternità (e non nel senso di ferie) sono stato un po' assente. Riprendere i progetti non è stato facilissimo!

Qualcuno che ha 5 minuti e voglia di elargire conoscenza (anziché sorgenti) mi spiega in due parole, come lo spieghereste a un bambino, il concetto di "Stack Collection"?

Non ho trovato spiegazioni chiare su internet e su b4x ho trovato questo post https://www.b4x.com/android/forum/threads/module-stack-collection.81335/ e mi pare di capire che si tratta di una sorta di list.

Un grazie anticipato a tutti
 

Star-Dust

Expert
Licensed User
Longtime User
Bentornato
 

Star-Dust

Expert
Licensed User
Longtime User
Per collection In genere si intende l'insieme di dati che possono essere dello stesso tipo ma non necessariamente.
Ad esempio list, Array, map ecc

Lo stack in genere legato al processore o alle memorie interne delle CPU. Può traduci in italiano pila.
Quando mette le informazioni impilati uno sopra l'altro. L'ultimo che inserisci diventa il primo che puoi tirare fuori. Questo tipo si chiama lifo.
Poi ci sono quelli di tipo fifo, il primo che inserisci nell'ordine sarà il primo che uscirà
 

Star-Dust

Expert
Licensed User
Longtime User
Nella fattispecie dell' esempio che indicato tu siccome riguarda b4r, non posso dirti molto a riguardo. Ti ho fatto solo una panoramica generica
 

udg

Expert
Licensed User
Longtime User
spieghereste a un bambino,
Se leghiamo questo al concetto "paternità" espresso poco prima, dovremmo concludere che siamo di fronte ad un caso di assoluta precocità :)

Il concetto di stack, come detto sopra, prende le mosse dalla pila dei piatti in cucina (immagina un ristorante), dove man mano che vengono lavati ed asciugati vengono posti in cima alla pila (che ha una molla sul fondo). Quindi, quando occorre un piatto, il meccanismo ti restituisce quello in cima. Da cui l'acronimo LIFO (last in first out)

Per la coda (queue), si ha invece un sistema FIFO (first in first out) perchè funziona come la galleria in autostrada. Il primo che entra è anche il primo che esce. La trovi nelle comunicazioni seriali (ad esempio). I byte (o bit) inviati sul mezzo di trasmissione "viaggiano in ordine" ed arrivano (incrociando le dita) nello stesso ordine di invio.
 

Star-Dust

Expert
Licensed User
Longtime User
Se leghiamo questo al concetto "paternità" espresso poco prima, dovremmo concludere che siamo di fronte ad un caso di assoluta precocità :)

Il concetto di stack, come detto sopra, prende le mosse dalla pila dei piatti in cucina (immagina un ristorante), dove man mano che vengono lavati ed asciugati vengono posti in cima alla pila (che ha una molla sul fondo). Quindi, quando occorre un piatto, il meccanismo ti restituisce quello in cima. Da cui l'acronimo LIFO (last in first out)

Per la coda (queue), si ha invece un sistema FIFO (first in first out) perchè funziona come la galleria in autostrada. Il primo che entra è anche il primo che esce. La trovi nelle comunicazioni seriali (ad esempio). I byte (o bit) inviati sul mezzo di trasmissione "viaggiano in ordine" ed arrivano (incrociando le dita) nello stesso ordine di invio.
L'ha detto meglio ma era la stessa cosa :p
 
Last edited:

udg

Expert
Licensed User
Longtime User
ma era la stessa cosa
Per forza, quello era.. :)
Sarebbe stata sorprendente una spiegazione completamente diversa.. Però, in attesa della cena, aggiungo una ciliegina (amara).
Si dice che l'impiegato che dovrebbe esaminare la nostra pratica abbia una pila di domande simili. Una pila, quindi uno stack e quindi (dal discorso precedente) un sistema LIFO. Ecco perchè restiamo sempre in fondo ed il nostro turno non arriva mai....
 

Star-Dust

Expert
Licensed User
Longtime User
Sarebbe stata sorprendente una spiegazione completamente diversa..
Magari aggiungevi qualche nota storica, il significato in greco koi9nè del termine. L'etimologia del termine.
Dove vengono usati. Quali firmware .... vabbe hai fame.....
 

Elric

Well-Known Member
Licensed User
Grazie mille!

Direi che è abbastanza chiaro.

In effetti ci potevo arrivare anche da solo, sapendo che "stack" deriva dal norreno "stakkr", ossia pagliaio, di origine germanica; relativo al russo "stog".

Ho trovato anche questo articolo (interessante, che mi ha già intrippato) che fa cenno allo Stack Collection e mi pare una cosa tipo "Annulla" dei word processor.

Dal che posso dedurre che tutti i CTRL+Z siano realizzati con uno Stack Collection?

Mentre immagino che Queque si usi per evitare che alle poste venga servito l'ultimo che entra ma questo entra, prende il numerino, e attende che il programma che usa il comando queque faccia apparire il suo numerino sul display.
 

LucaMs

Expert
Licensed User
Longtime User
Se leghiamo questo al concetto "paternità" espresso poco prima, dovremmo concludere che siamo di fronte ad un caso di assoluta precocità :)

Il concetto di stack, come detto sopra, prende le mosse dalla pila dei piatti in cucina (immagina un ristorante), dove man mano che vengono lavati ed asciugati vengono posti in cima alla pila (che ha una molla sul fondo). Quindi, quando occorre un piatto, il meccanismo ti restituisce quello in cima. Da cui l'acronimo LIFO (last in first out)

Per la coda (queue), si ha invece un sistema FIFO (first in first out) perchè funziona come la galleria in autostrada. Il primo che entra è anche il primo che esce. La trovi nelle comunicazioni seriali (ad esempio). I byte (o bit) inviati sul mezzo di trasmissione "viaggiano in ordine" ed arrivano (incrociando le dita) nello stesso ordine di invio.
Ci sono delle eccezioni:

1 - come quelli che tentano di sfilare una tovaglia al volo, senza togliere prima le stoviglie, qualcuno fa la stessa cosa con i piatti, togliendo quello in fondo;
2 - i piatti "stesi" ad asciugare; da questa pila orizzontale puoi indifferentemente prendere il primo o l'ultimo.
 

Elric

Well-Known Member
Licensed User
AUGURI!

(e tanta inDivia da parte mia; anche per il resto, a dire il vero)
Grazie! Andiamo verso i due anni. Finché hanno circa 13-15 mesi un po' di tempo per scrivere qualcosa c'è... 😅 poi sempre meno!

Ci sono delle eccezioni:

1 - come quelli che tentano di sfilare una tovaglia al volo, senza togliere prima le stoviglie, qualcuno fa la stessa cosa con i piatti, togliendo quello in fondo;
2 - i piatti "stesi" ad asciugare; da questa pila orizzontale puoi indifferentemente prendere il primo o l'ultimo.
Grazie!

Quindi lo stack è una pila dove posso decidere se prendere il piatto più in cima (LIFO) o il più in basso (FIFO)... e "Queque" (oltre ad essere il "corretto" modo di pronunciare "Black" - perché loro hanno sempre ragione...) è un concetto all'interno del "comando" o è proprio una cosa a sé stante?
 

udg

Expert
Licensed User
Longtime User
Non farti ingannare dai voli pindarici di LucaMs. Stack e Queue sono due costrutti distinti e si usano rispettivamente per LIFO e FIFO.
Poi, considerando che i dati grezzi si trovano in strutture dati (in genere array) cui potresti accedere indipendentemente dai puntatori che regolano la movimentazione in entrata ed uscita, nulla impedisce di "prendere" ciò che si vuole e quindi i voli pindarici tornano ad essere delle normali possibilità.

Cercando con "programming queue", ad esempio, uno dei risultati è questo, dove hai modo di vedere il dietro le quinte di come venga realizzata una coda in alcuni linguaggi.
 

Assurbanipal2

New Member
Ho fatto la prima parte del lavoro (quella facile!) ma andrebbe completato con decodifica CBOR, verifica della firma tramite le chiavi pubbliche, ottenimento del JSON in chiaro per verificare se in corso di validità applicando le regole sopra indicate.
In pratica la strada è ancora tanta per completare il codice

B4X:
    If qrcodeString.Length<4 Then Return ""
    If qrcodeString.SubString2(0,4) <> "HC1:" Then Return ""
    Dim data As String = qrcodeString.SubString(4)

    If data = "" Then
        xui.MsgboxAsync("Errore nei dati letti da QrCode", "B4X")
        Return
    End If
   
    Dim base45decoded() As Byte = base45decode(data)
    If base45decoded(0)<>0x78 Then
        xui.MsgboxAsync("Errore nei dati da decomprimere dopo base45decode", "B4X")
        Return
    End If
   
    Dim cs As CompressedStreams
    Dim decompressed() As Byte = cs.DecompressBytes(base45decoded, "zlib")

base45decode:
Private Sub base45decode(encodedString As String) As Byte()
    'Dim alphabet() As String = Array As String("0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"," ","$","%","*","+","-",".","/",":")
    Dim mAlphabet As Map = CreateMap("0": 0, "1": 1, "2": 2, "3": 3, "4": 4, "5": 5, "6": 6, "7": 7, "8": 8, "9": 9, "A": 10, "B": 11, "C": 12, "D": 13, "E": 14, "F": 15, "G": 16, "H": 17, "I": 18, "J": 19, "K": 20, "L": 21, "M": 22, "N": 23, "O": 24, "P": 25, "Q": 26, "R": 27, "S": 28, "T": 29, "U": 30, "V": 31, "W": 32, "X": 33, "Y": 34, "Z": 35, " ": 36, "$": 37, "%": 38, "*": 39, "+": 40, "-": 41, ".": 42, "/": 43, ":": 44)
    If encodedString.Length = 0 Then Return
   
    If (encodedString.Length Mod 3) = 1 Then Return  ' ERRORE
   
    Dim i As Int, l As Long
    Dim chunk3 As String, chunk2 As String, m As Int
   
    Dim bb As B4XBytesBuilder
    bb.Initialize
   
    For i = 0 To encodedString.Length-1 Step 3
        l = 0
        If i+3 > encodedString.Length Then
            chunk2 = encodedString.SubString2(i,i+2)
            m = mAlphabet.GetDefault(chunk2.SubString2(1,2),-1)
            If m = -1 Then Return
            l = l + m * 45
            m = mAlphabet.GetDefault(chunk2.SubString2(0,1),-1)
            If m = -1 Then Return
            l = l + m
        Else
            chunk3 = encodedString.SubString2(i,i+3)
            m = mAlphabet.GetDefault(chunk3.SubString2(2,3),-1)
            If m = -1 Then Return
            l = m * 2025
            m = mAlphabet.GetDefault(chunk3.SubString2(1,2),-1)
            If m = -1 Then Return
            l = l + m * 45
            m = mAlphabet.GetDefault(chunk3.SubString2(0,1),-1)
            If m = -1 Then Return
            l = l + m
        End If
           
        If l >= 256 Then
            bb.Append(Array As Byte(Floor( l / 256).As(Byte)))
            bb.Append(Array As Byte((l Mod 256).As(Byte)))
        Else
            bb.Append(Array As Byte(l.As(Byte)))
        End If
    Next
           
    Return bb.ToArray

End Sub

Per la decodifica CBOR ho trovato questa libreria java della quale poi occorrerebbe capire come chiamare i metodi
jar:
sorgenti:

Aggiungendola come #AdditionalJar funziona in B4J ma non in B4A.

Ho quindi trovato questo post di Erel
che spiega che le librerie fatte con Java 8 non possono essere importate così come sono in Android ma occorre fare un "desugar".
Ho quindi provato a seguire le istruzioni ma ottengo vari messaggi di errore...
Ciao. sei riuscito a capire come funziona????? ti serve una mano ????
 

moster67

Expert
Licensed User
Longtime User
Questo thread con esempi potrebbe essere interessante (si parla anche dello Stack)
 

Star-Dust

Expert
Licensed User
Longtime User
Con viva e vibrante soddisfazione vi comunico che finalmente sono riuscito a capire bananoVuetify3DS. O almeno quello che serve a me per fare una WebApp.
 

Sagenut

Expert
Licensed User
Longtime User
Pur non avendo ancora avuto l'occasione per studiarli credo che tutto il pacchetto relativo ad ABMaterial (quindi compreso Banano in ogni sua variante) sia qualcosa che merita di essere approfondito e supportato.
 
Top