Categoria: coding

  • Snow Dog Academy

    Oggi scade il termine per l’invio delle soluzioni al compito per la selezione dei corsisti alla Snow Dog Academy (https://snow.dog/academy). Ho inviato la mia!

    GitHub: https://github.com/arkenidar/snowdog-academy-v2

    Hosting:

  • #Lua: vero o falso?

    darcan@hp1:~$ lua
    Lua 5.4.2  Copyright (C) 1994-2020 Lua.org, PUC-Rio
    > not true
    false
    > not false
    true
    > false or false
    false
    > false or true, true or false, true or true
    true    true    true
    > true and true
    true
    > false and true, true and false, false and false
    false   false   false
    > 
    

    https://it.wikipedia.org/wiki/Algebra_di_Boole

    https://en.wikipedia.org/wiki/Boolean_algebra

    In questo articolo ho fatto riferimento a come ci possa essere un concetto di vero/falso per il computer. A che pro? In genere questo vero/falso viene chiamato “condizione Booleana” (vedasi George Boole e la sua algebra Booleana). La condizione serve a determinare il corso dell’esecuzione del programma (corso detto in gergo: “flusso”, come nei “diagrammi di flusso”).

  • #Lua: “mentre” vero fai…

    Eccoci a una esercitazione in cui ancora una volta introduco dei concetti senza spiegarli, lasciando all’intuito di fare il restante.

    Ecco. Dico solo: “while” significa mentre. E di preciso: “mentre questo è vero fai questo”, mentre è vera questa condizione logica che può essere vera o falsa fai questa o queste operazioni computazionali.

    Più facile vederlo:

    File: conta-zero.lua https://replit.com/@dariocangialosi/introduzionelua#conta-zero.lua

    In questo file di esempio una variabile ha un valore iniziale, che viene decrementato sottraendo uno. Fa questo mentre la condizione “maggiore o uguale a zero” e’ vera altrimenti fine (end). Finito il ciclo termina anche l’ultima istruzione o blocco di istruzioni e il processo del programma esce e il programma si chiude.

  • #Lua: tabelle

    Luando#5: Qui parleremo delle tabelle, una facilitazione di Lua per gestire dati, e vi mostrerò qualcosa a riguardo, anche se ha anche caratteristiche avanzate come le meta-tabelle che cito soltanto, qui.

    Alla base una tabella permette due cose: ancora una volta l’abbinamento tra lettura e scrittura, come per l’IO (Input e Output, ricordate?).

    Supponiamo di avere una tabella inizialmente vuota:

    tabella1={}

    Oppure una tabella inizialmente con qualche elemento:

    tabella2={"nord","sud","ovest","est"}

    Vediamo che succede a leggerci e a scriverci:

    return tabella2[1] -- restituisce "nord"

    Cosi come visto sopra si legge dalla tabella. Si usa la seguente sintassi: (sintassi? si, come per una grammatica analizzabile dal computer)

    nome_tabella[chiave] -- restituisce il valore

    Valori? Chiavi? Si, una tabella in senso astratto è una associazione chiavi-valori, ogni chiave con il suo valore e ogni valore con la sua chiave (un pò come ogni variabile ha il suo nome e il suo valore contenuto, anche valore nil).

    Questa che abbiamo vista era una tabella con chiavi di tipo intero: 1,2,3,4 sono le chiavi, avendo i 4 elementi (1:nord, 2:sud, 3:ovest, 4:est, nell’esempio sopra). Nota: in Lua il primo elemento a chiave numerica ha chiave 1 e non zero (altri linguaggi iniziano a contare da zero, in Lua si inizia contare da 1).

    Infatti passiamo alle associazioni con chiavi di tipo stringa (negli esempi precedenti le chiavi erano di tipo intero, numero intero):

    tabella_stringhe={base=4.5, altezza=7}

    Vedete? Molto simili alle assegnazioni delle variabili. Lo spiego: crea una tabella vuota (ovvero “{}” se ricordate) e pone la chiave chiamata “base” (chiave di tipo stringa!) al valore numerico “4.5” e la chiave “altezza” (stringa, non intero) al valore numerico “7” (vedi sopra, sintassi stile assegnazioni di variabili).

    Infatti scoprirete che le variabili in Lua usano le tabelle, ma non vorrei confondervi. Dicevamo: leggere dati e scrivere dati.

    nome_tabella[chiave] -- restituisce il valore
    nome_tabella[chiave]=valore -- assegna un valore

    Se vi sembra inizialmente complicato ricordatevi soltanto di queste due sintassi, per leggere un valore la prima, per scrivere un valore la seconda. Nota: anche le variabili possono essere sia lette che scritte:

    variabile1="valore1" -- scrive in variabile1
    return variabile1 -- legge da variabile1 per restituirlo mediante return

    In breve il solo nome permette di leggere il valore, il nome con un “=” di assegnazione associa un valore a quel nome. Associa. Sia nel caso delle variabili che delle tabelle si tratta di associazioni, sebbene temporanee perchè ri-assegnabili (per questa variabilità si parla di variabili).

    local triangolo={base=4.5, altezza=7} -- dati_triangolo
    return (triangolo.base*triangolo.altezza)/2

    Ecco un’altra sintassi:

    nome_tabella.chiave -- restituisce il valore
    nome_tabella[chiave] -- restituisce il valore

    La sintassi con il “.” punto è adatta però soltanto alle chiavi di tipo stringa (ma senza spazi eheh). Queste due sintassi si equivalgono in questo caso mostrato:

    triangolo.base -- con il "." punto per le chiavi stringa senza spazi
    triangolo["base"] -- con le parentesi quadre generiche

    Per il momento basta così ma ricordate che con le parentesi quadre avendo la “chiave” potete fare riferimento a un valore contenuto nella tabella, sia per poterlo leggere (e usare) sia per poterlo scrivere (e modificare).

  • #Lua: variabili e assegnazioni

    Luando#4: In questa puntata si studieranno le variabili e le assegnazioni di un valore a una variabile. Una variabile è un contenitore di vari valori (cioè dati). Una variabile ha un suo nome identificativo. Far contenere un valore alla volta a una variabile (sganciandola da quel valore precedente) viene detto operazione di assegnazione. Assegna un valore a una variabile, che viene identificata da un nome. La prima assegnazione crea la variabile che altrimenti avrebbe il valore speciale riservato nil, tipico delle variabili inesistenti.

    Kate evidenzia il codice Lua
    -- variabile1 ha valore nil (non esiste ancora)
    local variabile1="testo (valore di tipo stringa)" -- ora esiste e ha valore stringa
    variabile2=123 -- variabile2 inizia ad esistere ma come variabile globale
    local variabile3 -- variabile3 inizia ad esistere come variabile locale ma ha valore nil
    variabile3=variabile2 -- variabile3 ora ha valore 123
    variabile1=2 -- variabile1 ora ha valore 2, non stringa di testo ma di tipo numerico
    variabile3=variabile3+variabile1 -- assegna la somma di due variabili quindi
    -- equivale a variabile3=123+2 quindi variabile3=125

    L’operatore di assegnazione è “=” e si usa come (dove assegnare)=(cosa assegnare).

  • #Lua I.O.: leggi & scrivi dati.

    Luando#3: Input e Output (I.O.) ovvero Input per leggere dati (ricezione) e Output per scrivere dati (emissione).

    Nelle app classiche, dove non c’è una interfaccia grafica (G.U.I.) c’è una U.I. (Interfacciamento con l’Utenza) di tipo testuale a console, riga di comando.

    ecco un programma testuale a console (command line interface)

    Esempio: input-output.lua https://replit.com/@dariocangialosi/introduzionelua#input-output.lua

    io.write() scrive una stringa di testo nella console di testo, quindi avanzando il cursore di scrittura, posizionando più avanti, in base a cosa e quanto ha scritto.

    io.read() nell’esempio invece legge dall’utente un dato, nel caso di io.read(“*n”) un Numero. Ovvero il programma si ferma in attesa che l’utente digiti nella console un input, concludendo poi con la pressione del tasto invio per confermare. In questo caso della lettura di un numero viene prima letto un testo, che poi verrà convertito in numero se possibile, altrimenti dovrà essere gestita tale condizione limite.

  • #Lua] Dati: tipi e operazioni

    Luando#2: Questa è la seconda lezione di Luando, un corso in Italiano su Lua script, un linguaggio per formare le istruzioni di un programma informatico.

    Nella scorsa e prima puntata abbiamo visto i Commenti, modo di rendere del testo escluso, specialmente a fine di commentare il funzionamento, documentandolo.

    In questa sessione vedremo come esistano i dati, cioè le informazioni che il programma riceve ed emana, elaborandole, processandole, calcolandole.

    I dati hanno particolari formati, chiamati “tipi di dato”, e delle operazioni su di essi, chiamate “operazioni sui dati di un tipo”, ad esempio un tipo di dato numerico e operazioni sui dati di tipo numerico. Oppure un tipo di dato testuale detto in gergo stringa.

    darcan@hp1:~$ lua
    Lua 5.4.2  Copyright (C) 1994-2020 Lua.org, PUC-Rio
    > return 1+1, 2-3, 4*3, 5/2
    2       -1      12      2.5
    > return "stringa1 ".."e stringa2 di testo concatenate"
    stringa1 e stringa2 di testo concatenate
    > return "stringa più numero convertito in stringa: "..tostring(math.pi)
    stringa più numero convertito in stringa: 3.1415926535898

    Ad esempio qui sopra ci sono le quattro operazioni aritmetiche basilari (+ – * /), le stringhe di testo e l’operazione di concatenazione di due stringhe (..), e infine un numero (math.pi, il pi greco approssimato) e questo numero viene convertito in stringa per essere concatenato a una seconda stringa (concatenazione tra stringhe, non tra stringa e numero).

  • #Luando: i Commenti? Cosa e perché?

    Luando#1: Ecco il primo morso: cosa sono i Commenti? E perché esistono? E come rendono la vita un poco migliore 😉 ?

    Cosa sono i commenti? Nel linguaggio Lua i Commenti sono parti di testo che vengono ignorate durante l’esecuzione delle istruzioni. Quindi non vengono eseguiti.

    Esempio:

    passaggio1()
    --passaggio2()
    passaggio3()
    -- la riga del passaggio2() non viene eseguita
    -- e nemmeno queste descrittive

    Quindi abbiamo scoperto due usi: “disabilitare” cioè disattivare una parte del programma, in questo caso disattivare il secondo passaggio, quindi saltandolo.

    E scrivere del testo di commento, dei Commenti per descrivere qualcosa di attinente e associato a quel punto del programma in formato testuale. Quindi per spiegazioni del testo, dello script Lua.

    Queste due funzionalità: 1- disattivare 2- descrivere, sono i motivi principali per l’esistenza dei Commenti.

    Rendono la vita un poco migliore perché in questo modo sia si hanno direttamente nel testo del programma delle spiegazioni, e sia perché si può disattivare (e riattivare!) per effettuare prove di funzionamento (prove che poi capirete perché si fanno durante le fasi di scrittura e modifica).

    Per riattivare basta rimuovere i due trattini “–” iniziali:

    passaggio1()
    passaggio2() -- ecco il passaggio2 ri-attivato
    --passaggio3() -- disattivo il passaggio3
    --[[ vedete che si può commentare anche
     "durante" il rigo? oltre che inizio rigo?
    questo è un commento multi-rigo, invece --]]
    passaggio4() -- qua è di nuovo programma eseguito
    Preso da Kate che gestisce i file punto lua (.lua)

    Ultima chicca extra, un ultimo morso:

    --[[
    passaggio5()
    passaggio6()
    passaggio7()
    passaggio8()
    --]]

    Così (sopra) è disattivato da passaggio5 al passaggio8.

    ---[[
    passaggio5()
    passaggio6()
    passaggio7()
    passaggio8()
    --]]

    Così (sopra) è riattivato perché vengono considerati 2 commenti su rigo singolo e non 1 singolo commento multi rigo.

    A seguire una immagine GIF che lo va vedere:

    multi rigo on/off, disattivazione e riattivazione di più righi

    E con questa chicca concludo. Riassumo: in caso di testo da far ignorare per disattivarlo o per inserire testo umano che il computer dovrà ignorare usate i commenti per farlo ignorare. I commenti in Lua si aggiungono con un “–” doppio trattino. Un pò di pratica per vederlo in azione. E se non avete capito questo è opzionale per così dire ma mostra come ci sia un testo su più righi che vengono analizzati grammaticalmente. E con questa analisi se trova i due trattini allora ignora il resto del rigo. Tempo al tempo e buona digestione. Proseguirò, spero.

    File: commenti.lua https://replit.com/@dariocangialosi/introduzionelua#commenti.lua

  • Luando: un corso Lua in Italiano

    Lua significa Luna. E’ un nome di battesimo di un sistema informatico che vive al seguente link HTTP: https://www.lua.org/

    Questo sistema informatico consente di definire il comportamento del computer istruzione per istruzione, modificando programmi pre-esistenti o creandoli, costruendoli mediante scrittura e modifica di riscrittura.

    Di solito consiglio di studiare linguaggi di questo genere mediante SoloLearn.com ma è 1- in Inglese 2- alcuni linguaggi non sono comunque trattati tra cui il linguaggio Lua script.

    Io lo tratterò in piccoli metaforici morsi masticabili e inghiottibili, digeribili e nutrienti. E in Italiano. Un pò di gergo sarà comunque fornito, non dico necessario ma prima o poi serve parlare in gergo. Cercherò di renderlo un poi per non sovraccaricare.

    Ieri ho voluto lanciarmi nel parlarne un pò: https://arkenidar.com/wordpress/2021/08/25/preparativi-mini-corso-su-lua-script/

    Ma adesso come dicevo andrò per piccoli morsi digeribili. Alla prossima!

  • preparativi mini corso su Lua script

    Ho studiato molto e anche applicato vari linguaggi di programmazione al fine di scrivere dei programmi e lavorare come programmatore ovvero scrittore di programmi informatici.

    Ho voluto scegliere Lua come linguaggio di scripting per alcune sue caratteristiche, anche se è inusuale usarlo come linguaggio per iniziare perlomeno nelle cerchie che conosco.

    E’ usato in particolare come linguaggio di scripting da incorporare in modo da rendere scriptabile ovvero programmabile un programma. Ad esempio in Google Chrome è incorporato JavaScript per rendere scriptabili le pagine web scritte in linguaggio HTML.

    Ogni linguaggio ha sia il suo ecosistema sia i suoi fattori culturali di gruppo. Lua ha trovato spazio nell’ambito ludico e didattico, e magari che si possa fare didattica in modo ludico? Chissà.

    Intanto c’è un gran parlare di algoritmi. Ma sapreste riconoscerli? Un esempio di algoritmo che ci hanno insegnato è l’algoritmo della moltiplicazione mediante somme ripetute. I computer sono ottimi nella ripetitività sistematica e nelle operazioni matematiche elettroniche.

    Ed ecco un programmino scritto in linguaggio Lua

    Ho cercato qualcosa di semplice per iniziare sapendo che le cose andranno a complicarsi e sofisticarsi ma non troppo presto, accontentiamoci 🙂

    “Function” significa “funzione”. Ci sono due parametri numerici: “da_accumulare” e “quante_volte”. Accumulare con un accumulatore significa sommare insieme. Inizialmente lo si pone a zero poi andrà incrementandosi divenendo “il valore precendente + da_accumulare”.

    Per determinare quante volte ripeterlo fa un conto alla rovescia, vedasi la sottrazione. Quando arriva a zero non è più maggiore di zero quindi esce dalla ripetizione determinata dall’essere dentro il ciclo “while” che significa “mentre” è vera una condizione specificata.

    Ecco un algoritmo. Un algoritmo è valido su una casistica quindi è relativamente generico, esso generalizza, in questo caso sulla categoria dei numeri naturali.

    Esempio: 4 per 2. La variabile chiamata accumulatore diventa 0. Per 2 volte somma 4 all’accumulatore che avrà valori prima 0 poi 4 poi 8 e finisce il ciclo while, producendo 8, che viene restituito all’esterno della funzione con una “return” che è una parola chiave del linguaggio come anche “function” e “while”. Sono parole riservate ad usi specifici precostruiti e forniscono funzionalità.

    eccola nuovamente. riuscite ad intravedere qualcosa?

    ecco come lo uso:

    ecco un esempio di uso

    Il file per intero lo trovi al seguent link: https://replit.com/@dariocangialosi/introduzionelua#introduzione.lua

  • il mio acronimo RESM

    A few introductory words

    [IT] concetto di computer minimo, avente istruzioni uniformi, implementato con circuito (hardware) e con interprete di questo tipo di istruzioni (software)

    [EN] concept of minimal computer, having uniform instructions, implemented with circuits (hardware) and with interpreter of this type of instructions (software)

    RawExecutionStep Machine also-known-as BitBitJumpJump

    https://arkenidar.github.io/resm_aka_bbjj/

    https://github.com/arkenidar/resm_aka_bbjj

  • TypeScript ed esperimenti

    Vorrei comunicare cioè mettere in comune alcune cose fonte di apprendimento, comprensione, varianti di vedute, design e implementazione di un software che capisce ed esegue delle istruzioni che classicamente è chiamato sistema di scripting ma dalle caratteristiche inusuali ad esempio una struttura gerarchica che contiene un programma divenuto quindi eseguibile.

    In altre parole è un interprete di scripts imperativi, il cui parsing è la notazione polacca adattata agli algoritmi, la cui intermediate representation è una lista di liste, la cui esecuzione è particolarmente semplice in modo anche che un programmatore possa agevolmente comprenderla e ragionarci, che sia bello da scrivere e riscrivere, capirlo e riscoprirlo, e che il computer possa operarci su agevolmente (sia sul codice sorgente che quello che ne segue come dicevo).

    Ci sono quindi 3 fasi: scrittura in notazione polacca ovvero prefissa, derivazione di un albero ovvero una gerarchia di istruzioni praticamente imperative e strutturate (vedasi la teoria sulla programmazione strutturata), ed infine il funzionamento basato sull’esecuzione della gerarchia di istruzioni.

    Può sembrare scarno ma ha obiettivi didattici (anche per me), vuole essere (come ho altrove detto spesso) un giocattolo ma con una sua logica e una sua eleganza di design.

    Ho studiato molti linguaggi di programmazione, da quelli di moda a quelli senza tempo, a quelli esoterici e sperimentali, a quelli con ferventi sostenitori a quelli con dietro un supporto di corporations e fondazioni no-profit (o viceversa).

    Domani vi parlerò meglio di questo esperimento per i più avanzati e patiti di TypeScript o anche JavaScript, quelli che hanno studiato “linguaggi interpretati e compilati” all’università, a quelli che ci hanno lavorato tanto coi linguaggi da avere una illuminazione sull’essenza sincretica delle varie religiosità delle rispettive communities che altro che illuminate a volte vedono competizione e conflitto.

    A domani, a presto, ai prossimi articoli di questo weblog.

  • LangForge

    La forgia dei linguaggi, dice il titolo. Parlo dei linguaggi per programmatori e programmi.

    Ne ho studiati vari e mi sono fatto delle idee sul come cambiare qualcosa di essi, per ottenerne di nuovi, magari quindi ibridizzando.

    Questo design, ovvero questa progettazione per la costruzione di linguaggi mi ha portato a produrre vari files tra cui i progetti:

    • pang in Lua … non versionato su Git/Github ma pubblicato in modo informale su arkenidar.com
    • js-pang in JS su github di arkenidar (arkenidar=io utente che scrivo)
    • structure-js in JS anch’esso nel mio GH, si differenzia in varie scelte di design tra cui la creazione di nodi gerarchici in cui strutturare le parole del linguaggio computazionale.
    • ah, e anche alcuni progettini che precedono tra cui livefunc e exec_lang.es e altri ancora come OISC

    Sugli OISC ovvero i One Instruction Set Computer sono da citare a mio avviso la Macchina di Turing storica e una sua mia rivisitazione quasi involontaria ma frutto di riflessioni sul come unificare le istruzioni, il progetto RawExecutionStepMachine: https://arkenidar.com/wordpress/2020/12/20/il-mio-acronimo-resm/

  • Rails (Ruby)

    rails generate controller Welcome index

    Welcome#index

    Find me in app/views/welcome/index.html.erb

    erb value: <%= 3*2 %>

    erb value: <%= @welcome_variable %>

    erb value: <%= params[:name] %>


    class WelcomeController < ApplicationController
    def index
    @welcome_variable=123
    @param=params[:name]
    end
    end

    <h1>Welcome#index</h1>
    <p>Find me in app/views/welcome/index.html.erb</p>
    
    erb value: <%= 3*2 %> <br>
    
    erb value: <%= @welcome_variable %> <br>
    
    erb value: <%= params[:name] %> <br>
    class WelcomeController < ApplicationController
      def index
          @welcome_variable=123
          @param=params[:name]
      end
    end
    rails generate controller Welcome index
  • demons.trations

    Dai tempi della prima arte elettronica sono state prodotte una quantità di produzioni artistiche, ma qui e oggi vi accennerò a un sottogenere multiforme e in evoluzione ma complessivamente chiamato “demoscene” popolarmente.

  • da Felgo a QT a KDE

    kdevelop

    Immagine cliccabile per zoomare

    Benvenuti nell’esperienza. Premetto che ho una maggiore disinvoltura in alcuni campi per esperienza. Ma vorrei comunicare ciò che potrebbe essere uno stimolo ad una personale esperienza.

    Strade ci sono. Ci sono strade possibili perché le opzioni che valuto sono comunicanti ed in alcuni casi cooperanti.

    Storia di questa realtà. Nasce Unix, nasce GNU, nasce Linux, nascono le distro, nascono i desktop environment, nasce Qt di Trolltech, nasce KDE infine (un desktop enviroment basato su Qt per i sistemi operativi GNU/Linux e altri Unix).

    Mezzi. I mezzi per costruire Qt si basano sul C++, ma con QtQuick viene introdotto un livello di QML e JavaScript a fine di avere interfacce di buon design. Il design rimane importante tanto da meritare un tool apposito per i designer che collaborano però con in programmatori. I programmatori hanno la possibilità di scrivere dei programmi che girano quasi ovunque vogliano seguendo un ideale commerciale di praticità. Ma Qt non è solo Grafica Utente ma è anche interfacciamento mediante sensori, uso di database, di web services, etc.

    Parole chiave. KDevelop è un IDE per KDE. Mentre Felgo è una azienda che facilita lo sviluppo mobile, ma con dei costi. Insomma è possibile che vi siano vari attori tra coloro che muovono le scelte su ciò che è comune e su ciò che non lo è invece ed è proprio.

    KDE. Come ambiente desktop coesiste con altri, anche se qualche accortezza può essere necessaria affinché non si bisticcino nelle aree comuni. L’ho in prova in questo momento con KDE Plasma ed io ero un fan di Kubuntu già 10 anni fa prima di QtQuick e QML che fecero capolino per il mobile ed embedded, specialmente a schermini touch! (W WindowsCE)

    Felgo l’ho conosciuta come azienda che fornisce il reload live: https://felgo.com/qml-hot-reload-for-qt-with-felgo-live

    Ma la sua offerta è ampia. Ha un suo modello di business e partecipa con Qt (che è passata da TrollTech a Nokia a Digia, da quel che ricordo).

    Ma Qt è un progetto open-source e così è rimasto anche se si è affiancato un aspetto commerciale con un suo modello di business. Abbastanza da repellere i puristi del FOSS magari un po disinformati e fanatici. Lo dico perché lo ero e mi sto informando e conoscendo quello che potrebbe essere un sistema di qualità magari da adottare come propria specializzazione. Segue le news, sperimento, spingo i limiti per conoscerli, ma non soltanto valuto ma qualcosa apprendo e vedo cosa posso concretizzare pian piano che la strada è lunga e richiede uno sforzo di resistenza, non di velocità soltanto. 😉

  • Ciao Lettori!

    Benvenuto in questo sito personale strutturato con WordPress. Questo è il mio primo articolo. Parlerò e parlo di software, artistiche tematiche, codifica di sofware, amministrazione di sistema