Autore: arkenidar

  • arkenidar.com/github

    https://arkenidar.com/github

    questo link porta all’ elenco dei raggruppamenti tematici di file di programmazione detti ” git repositories ” .

    ogni raggruppamento tematico è ricopiabile ovunque si voglia mediante una azione dell’ utente di ” clonazione git ” .

    ad esempio ricopio nel mio personal computer per modificarlo e lo ricopio su un computer pubblico ( ” computer server ” ) per pubblicarlo , ma in modo che sia utilizzabile , a differenza di github che non è preposto a questo ma ad altro .

    esempio di repository : https://github.com/arkenidar/php_http_apps_todo

    esempio di clonazione : gh repo clone arkenidar/php_http_apps_todo

    esempio di copia utilizzabile : arkenidar.com/app/todo

    in genere è possibile cercare & trovare un repository , “clonarlo” & personalizzarlo per usarlo .

    molti dei repository pubblicati hanno disponibilità di studio oltre che uso , i meccanismi sono esposti per imparare ad usarli nelle proprie creazioni anche personalizzate , ma la licenza dice a riguardo anche sul creare copie proprie secondo regole specifiche variamente liberali .

  • Introduco ChatGPT

    Oggigiorno c’è disponibilità di servizi di AI specializzati nel fornire contenuti sotto forma di discussione . interagendo si fruisce . di cosa ? è un sistema intelligente generativo : produzione testi in lingua ( supporto al redigere , riassume, spiega , traduce ) , di coding info-tech ( conosce linguaggi tecnici ) , anche di immagini ( generazione di immagini e di testo ) . tutti questi vengono prodotti nel dialogare , nel prompt in cui inserire botta e risposta , sotto forma di richieste in linguaggi naturali come l’ English e l’ Italiano che uso . questi linguaggi li comprende , come può anche comprendere codici di coding info-tech . e supporta i programmatori così . l’ interazione può essere costruzione passo per passo ( steps , fasi e passi ) , aggiunte , modifiche , debugging ( risoluzione problemi di costruzione tecnica ) , anteprima html ( questa soltanto in ClaudeAI ) . inoltre si possono copiare e incollare , scaricare , files singoli , zip files anche contenenti in un file una molteplicità di files , e parti di files ( ad esempio una modifica di differenza incrementale , cosa varia tra due versioni in modo da fare patching , rattoppo ) . Tutte le AI generative che ho sperimentato hanno facoltà di ragionamento , che venendo affinato dagli impiegati e gestori rispettivi migliorano e ad oggi non sappiamo quanto possano migliorarsi anche con nostra e mia sorpresa . Attingono , anche oltre alle definizioni date , da informazioni e comprensioni estratte dagli input degli utilizzatori e dagli input dei gestori . possono attingere da testi di libri , manuali , articoli , e altre knowledge – bases , archivi di conoscenze e comprensioni . anche prese da una risorsa web avendone indirizzo per raggiungerla , leggerla e sfruttarla nel servizio che offre .

  • S. Operativi per PC: Windows e Linux

    Sistemi operativi per Personal Computers: Microsoft Windows e distribuzioni GNU/Linux di varia provenienza.

    Esperienza personale mia: ho avuto possibilità di essere un utente di PC da anni. Ho usato Microsoft DOS e Microsoft Windows su vari PC di tipo IBM-compatibile.

    E’ successo tanto. Gli standard si sono evoluti, ad esempio per l’hardware e per la grafica in particolare. Vari software hanno conosciuto periodi anche d’oro ma con dei declini successivi.

    La TV promuoveva la cultura secondo cui i computers sono piuttosto importanti, ma importanti perchè?

    Nel tempo ho notato degli aspetti che non erano di performance tecniche o meglio, c’erano pure ma ho conosciuto aspetti legali e finanche politici.

    Legali per le leggi anti-pirateria, come per le licenze dei software e la pirateria della diffusione illecita di files commerciali (proprietà intellettuale).

    Ho anche avuto contatto con la cosiddetta “programmazione” definita come la capacità di costruire programmi informatici già menzionati con la parola “software”. Più tardi si è parlato di “sviluppatori di software”.

    Sei bravo? Rendilo un mestiere! Molti mi pressavano e io ho lasciato che avvenisse, così ho studiato per diventare “sviluppatore di programmi software”. Una storia noiosissima, secondo il metro degli standard hollywoodiani. Non l’informatica di Hollywood. Ma la “mia” informatica, per come l’ho vissuta.

    Ho conosciuto anche il sistema operativo Debian con GNOME di quei tempi, ho usato MEPIS assime a mio fratello (dividevamo il fardello), poi anche KUbuntu con quel KDE di quei tempi (ricordi universitari di hardware supportato o meno per Ubuntu/Mepis).

    Poi i social network. Una voragine. I social network hanno cambiato la società (beh lo dice il nome stesso). Ma che facciamo e che faremo?

    Così siamo nei giorni in cui Windows 11 fa la sua comparsa ufficiale (anche nel mio terzo PC HP, l’unico che è adatto, l’unico ad avere HD SSD tra l’altro, i primi due sono più antichi).

    E siamo nei giorni in cui si promette il Gaming per sistemi Linux (GNU/Linux precisamente), con drivers adatti specifici che supportano l’hardware, e … si torna alla questione dell’hardware supportato di anni e anni fa, ancora attuale. Del resto l’hardware è del dominio del sistema operativo e ho iniziato parlando di PC e hardware dei PC (IBM-compatibili!).

    Sistemi Operativi per l’hardware dei PC.

  • DOM for HTML and XML

    Document Object Model means a programmatic way of dealing with the structure of a Document (both XML Document or HTML document).

    This is DOM: https://www.w3schools.com/xml/dom_intro.asp

    But HTML adds to it: https://www.w3schools.com/jsref/dom_obj_document.asp

    E.g. this is HTML not XML: https://www.w3schools.com/jsref/met_node_insertadjacenthtml.asp

    BTW one well/widely understood way of dealing with this is: https://api.jquery.com/category/manipulation/

    ADDENDUM: there are other ways such as Ractive’s dynamic templating.

    https://ractive.js.org/tutorials/iterative-sections/

  • rsync with BASH scripting for backup

    Introduction: I needed to backup copy from my remote server (arkenidar.com personal website) to my local computer, incrementally, 3 important directories, into my Dropbox so to keep them. This does not keep into account database backup so this plus servmask’s “All-in-One WP Migration plugin” enabled me to move my partially WordPress partially “custom HTML” personal web site from Linode to DigitalOcean, after also screwing an Ubuntu’s release upgrade, with ensuing security concerns (php sources were exposed also config php files, because they weren’t processed by misconfiguration after upgrade).

    Scripting enable to ease the automating of keeping this.

    There are variables for configuring for personal use. The variable RSOPT (rsync options) enable to inject options to the rsync use.

    I am publishing because initially it was very basic and simple then it kind of grew, so I am showing it. And pertinent feedback is esteemed valuable by me.

    #!/usr/bin/env sh
    
    # env RSOPT="--dry-run" ~/Dropbox/my-www/rsync-backup-www.sh
    # env RSOPT="--dry-run --delete" ~/Dropbox/my-www/rsync-backup-www.sh
    
    HOST=arkenidar.com
    THIS=backup-www
    DEST=~/Dropbox/my-www/$THIS
    mkdir --parents $DEST
    line="-------------------------------------------------"
    echo $line
    cd $DEST && RSYNC="rsync $RSOPT -arvz root@$HOST:" && \
    echo ">> $RSYNC/root ." && $RSYNC/root . && echo $line && \
    echo ">> $RSYNC/etc/apache2 ." && $RSYNC/etc/apache2 . && echo $line && \
    echo ">> $RSYNC/var/www ." && $RSYNC/var/www . && echo $line && \
    echo ">> backup DONE (BUT databases aren't included)"
    echo $line
    

    then became:

    It has a FOR loop with BREAK condition, mimicking the “command1 && command2 && command3” semantics.

    It prints the command before executing it (ala Makefile perhaps), by custom code.

    This is my first more meaningful BASH script so I am a beginner in this. And it spanned Ubuntu Server, KUbuntu, Manjaro, Windows 10 (Cygwin, Mingw, Termius for shells). Also a use of Dropbox is used to keep them somewhere safe but accessible, other options? Someone told me of Deja-Dup but is it for remote servers? Of course one can creatively find other ways, evaluate them together using our skills and experiences, so I am asking and presenting this as clear as I manage to.

    
    HOST=arkenidar.com
    THIS=backup-www
    DEST=~/Dropbox/my-www/$THIS
    mkdir --parents $DEST
    line="-------------------------------------------------"
    echo $line
    cd $DEST && RSYNC="rsync $RSOPT -arvz root@$HOST:" && \
    
    for dir in /root /etc/apache2 /var/www ; do
    COMMAND="$RSYNC$dir ."
    echo ">> $COMMAND" && $COMMAND
    
    if [ $? -ne 0 ] ; then
        echo $line
        echo ">> Exit status is FAILURE, exiting."
        echo $line
        exit 1
    fi
    
    echo $line
    done
    
    echo ">> backup DONE (BUT databases aren't included)"
    echo $line
  • Tools per Windows (Software Makers & MS-Windows)

    Git installer che fornisce anche GitBash (GNU bash da loro preso da MinGW, minimal GNU for Windows)

    Avendo git installato si può usare un client git grafico, per git come Sublime Merge (BTW ho anche Sublime Text), o anche MS Code (MS gestisce GitHub) gestisce Git e GitHub.

    Tra gli IDE, uno specifico per il C/C++ e sue API (ed anche Fortran BTW) è CodeBlocks. Uno tra gli IDE “generici” è MS Visual C++/Visual Studio (da cui si ispira MS Code).

    Per accedere al server remoto uso ssh, o via MSYS o via CygWin (ambo i casi installo “openssh”).

  • arkenidar tools

    E’ possibile usare 3 tools protetti da password per avere nel browser: shell+upload+editing.

    Si installano clonando il repository Git ospitato su github.com/arkenidar/tools.

    Si configura la password creando un file avente questo nome: “secrets.php”.

    E questo contenuto:

    <?php $secret_password= “…password…qui…”;

    E’ tutto semplicistico ma può avere un valore didattico o anche in quanto tools può consentire alcune operazioni.

  • usare il cervello

    Vorrei imparare ad usare il mio cervello. Ho un concetto ampio di uso. Uso che sviluppa le funzioni e abilità. Uso che dà percezioni ampliate e dettagliate. Uso che gestisce le facoltà di uso della memoria e della memorizzazione, con tutto quello che è richiamo mnemonico, ricombinazione delle memorie, percezione delle strutture mnemoniche di memorizzazione e richiamo. Capacità di sentire percettivamente, esterna, coi sensi esterni, più percezione ulteriori. Capacità di osservare, di superare la catalogazione della realtà ma vederla senza limitazioni di percezione insite nella catalogazione. Percezione dei fenomeni con capacità di anticipazione senza però scadere in manie di controllo e dominio delle realtà e delle cose, dei sistemi. Capacità di percepire le esigenze altrui, le emozioni e mentalità altrui e proprie, con capacità di interazione anche se interfacciata da suoni, grafica, o testo, vedasi chat, presenza, etc. Capacità di cogliere i dettagli, da attento osservatore di tutta la realtà, niente escluso, anche i dettagli delle proprie realtà interiori, fittizie o fondate che siano. Capacità di superare le illusioni, la convenienza, la pigrizia fisica e fisiologica, l’indagare sempre a fondo per comprendere. Le capacità di comunicare, di usare linguaggi e mezzi comunicativi, stratagemmi e tecniche, ma senza scadere nella manipolatività. Avere una disposizione verso la vita e le vite che possa favorire che avvenga quanto necessario, e anche uno svolgimento dei processi vitali agevole o comunque possibile. Capacità di raccogliere internamente e ricollezionare, ricapitolare, sapere e sapere di sapere e di non sapere, distinguendo, sapendo come si sa, se i mezzi sono adeguati. Sapere per non ignorare e negare attivamente o passivamente la vita. Sapere vivere tutti gli attimi, sapere riconoscere cosa è unico in quell’attimo sfuggente e viverlo prima che non sia più. Riconoscere le proprie virtù senza idealizzare, le proprie caratteristiche anche ripetitive o negate e non ammesse a nessuno, saper riconoscere i propri difetti, sapere cosa hanno causato e causeranno, sapere come rimuoverli e spezzarli affinché nuociano sempre meno. Sapere costruirsi interiormente, non soltanto logisticamente e interpersonalmente, socialmente, sapere divenire e maturare, sapere invecchiare e morire. Saper essere mortali come siano soggetti a limitatezza, imperfezione, incompletezza, temporaneità, mortalità, limitatezze di percezione, di funzionamento, di espressione, di capacità di scelta, di attuazione e di coerenza, di dominio di sé senza mancare di essere anche spontanei senza reprimere ma esprimere e non esprimere con maestria dei propri mezzi. Saper rinunciare, saper accettare ciò che non conviene, saper arrendersi, saper riconoscere e discriminare che atteggiamenti avere anche senza scadere nel pessimismo passivo, vittime di destini che invece possiamo influenzare, come di fatti accade consapevoli o meno. Sapersi ergere oltre la miseria umana, oltre le impotenze e frustrazioni, oltre le mancanze e i vuoti, oltre le incapacità e gli ostacoli. Avere obiettivi senza però esagerare diventando ciechi al riconoscere che non ci sono soltanto obiettivi e quindi mezzi, ma anche processi nel tempo e cose che non possiamo interamente determinare finché siamo in queste condizioni, nostre, mie e tue e di molti prima e forse dopo di noi.

  • Grafica 2D e GameDev [ITA]

    Un canale YouTube molto interessante per chi vuole usare C++ e API di grafica.

    Sviluppo Giochi usando SDL (sua API)

    SDL-PrinceOfPersia: da un gioco DOS un suo meticoloso ReMake usando SDL2. https://github.com/NagyD/SDLPoP . BTW per compilarlo: https://github.com/NagyD/SDLPoP#gnulinux-1

  • About SDL2 combos [ENG]

    SDL2 (Simple DirectMedia Layer) is the software layer that allows a cross platform handling of basilar Video Output, User Input, and so on. It has allowed Software Creators to reuse “programs source codes” across (as I said) several Platforms namely Windows, GNU/Linux, Mac and more recently even Android.

    SDL2 can be used as a BackEnd for OpenGL(*) applications, providing cross-platform windowing, graphic output in “desktop” windows, input both from Mouse, Gamepad, Keyboard. (*) Vulkan too more recently

    SDL2 can be used as a BackEnd for Cairo Graphics, too, allowing cross-platform app creation with advanced graphics and vector graphics.

    https://github.com/tsuu32/sdl2-cairo-example

    https://cairographics.org/SDL/ and other links listed below mentioned in the above linked page: https://github.com/tsuu32/sdl2-cairo-example

    Helpful Links

  • Sistemi Operativi

    Si fa il download di un file “*.iso” di “immagine memoria avviabile”, utile a produrre CD/DVD avviabili, ma anche scrivibile su memorie rimovibili elettroniche di tipo Flash, scrivibili elettronicamente e riscrivibili (scrittura non definitiva).

    Ad esempio ho usato questi sistemi avviabili per provare prima e installare dopo alcuni Sistemi Operativi: Windows 10, Debian, Manjaro, Mint.

    Per questo si può scaricare uno di tali file che sono avviabili all’accensione del computer, inserendo una memoria piena di uno di questi, e avviando anziché da hard-disk interno invece da memoria esterna rimovibile: DVD avviabile, Flash USB, SD card, etc.

    Per scaricare si possono usare anche clients BitTorrent (ad esempio Transmission).

    Per poi scrivere il file “*.iso” così ottenuto in una memoria esterna da cui avviare il sistema operativo da installare al riavvio del computer, a fini di installazione (memoria esterna poi rimuovibile e anche resettabile), installazione su memoria interna non rimuovibile (che solitamente ha già almeno un Sistema Operativo ma si può fare spazio per dedicare una o più “partizioni del disco” ai vari requisiti dell’installazione dei sistemi operativi. Un requisito è spazio libero in memoria del disco interno).

    Si può scrivere tale file ISO mediante Etcher, ad esempio. Oppure altro esempio è qualcosa del tipo:

    sudo dd if=manjaro-kde-21.2.2-220123-linux515.iso of=/dev/sdb status=progress bs=4M && sync && echo “iso dd DONE” # ManjaroOS, KDE

    singolo rigo che combina più operazioni, via shell Bash-like, su sistema Unix-like
  • intuito? domanda!

    https://www.youtube.com/watch?v=7tXl2M14Yhg&t=14s

    (YOUTUBE) Never try to be intuitive, Sadhguru about intuition and gut feeling (non incorporabile come i video precedenti, accessibile da YouTube ma non da siti esterni come questo)

  • HTTPd, PHP, WordPress

    Impersonalmente (per quanto possibile e pratico):

    HTTPd https://httpd.apache.org/ anche chiamato Apache2 è un software che consente di fornire delle cose partendo da un link HTTP (anche detto URL, qualcosa come https://google.com).

    Può fornire anche HTML+Scripts in modo da dare agli utilizzatori non soltanto testi (o ipertesti) ma anche modi di interagire. In questo PHP e JavaScript sono importanti.

    WordPress è un sistema di pubblicazione sul WWW di Internet. Usa PHP e JS (JavaScript), e in quanto WorldWide Web usa HTML (linguaggio nato per gli HyperTexts).

    Personalmente:

    Si possono fare siti con i suddetti ingredienti in tanti modi. Con gli stessi ingredienti tante ricette possibili (ed esistono pure altri ingredienti sui quali non mi concentro adesso). Con gli ingredienti del HTTP/HTML PHP/JS ad esempio è costruita anche WikiPedia, ed anche altre casistiche esistono.

    Dicono che sia storico, ma anche obsoleto, ma quel che fa lo fa bene. Se cercate qualcosa che faccia tutto, auguri, partitene alla sua ricerca e quando tornate fatemi indagare su cosa avete trovato, qualora si possa trovare qualcosa che fa tutto e lo fa bene.

  • piccoli passi: nota Facebook

    [PREMETTENDO] Leggere prima questo articolo : https://www.caveri.it/blog/2016/05/02/le-preghierevera-e-falsadi-saint-exup%C3%A9ry

    l’arte dei piccoli passi.

    Non ti chiedo né miracoli né visioni
    ma solo la forza necessaria per questo giorno!
    Rendimi attento e inventivo per scegliere
    al momento giusto
    le conoscenze ed esperienze
    che mi toccano particolarmente.
    Rendi più consapevoli le mie scelte
    nell’uso del mio tempo.
    Donami di capire ciò che è essenziale
    e ciò che è soltanto secondario.
    Io ti chiedo la forza, l’autocontrollo e la misura:
    che non mi lasci, semplicemente,
    portare dalla vita
    ma organizzi con sapienza
    lo svolgimento della giornata.
    Aiutami a far fronte,
    il meglio possibile,
    all’immediato
    e a riconoscere l’ora presente
    come la più importante.
    Dammi di riconoscere
    con lucidità
    che le difficoltà e i fallimenti
    che accompagnano la vita
    sono occasione di crescita e maturazione.
    Fa’ di me un uomo capace di raggiungere
    coloro che hanno perso la speranza.
    E dammi non quello che io desidero
    ma solo ciò di cui ho davvero bisogno.

    Signore, insegnami l’arte dei piccoli passi.

    Antoine de Saint-Exupéry

    Andre Memnun says «I know that many problems solve themselves, so please teach me patience.You know how much we need friendship. Make me worthy of this nicest, hardest, riskiest and most fragile gift of life.Give me enough imagination to be able to share with someone a little bit of warmth, in the right place, at the right time, with words or with silence.Spare me the fear of missing out on life.» *_*

    https://www.facebook.com/notes/396439118024690/

  • Spring Framework

    Di recente sto studiando (anzi ri-studiando, proseguendo/approfondendo) il vasto framework Spring.

    Ho applicato lo studio in alcune basi di source code, che elenco qui:

    https://github.com/arkenidar/combo/

    https://github.com/arkenidar/spring-demo1

    In esse mostro:

    • Templating lato server con Thymeleaf o FreeMarker.
    • Templating lato client con AJAX JSON via JQuery e RactiveJS per il templating lato client reattivo.
    • Gestione delle variabili di sessione (va configurato ad esempio su DBMS come session storage).
    • Accesso ad RDBMS via JDBC (sia PostgreSQL che MySQL) con inserimento di dati presi dal database nel template (in un caso un template FreeMarker).

    Potrebbe essere abbastanza per iniziare (per chi non ha iniziato magari concretamente dopo le lezioni) e per approfondire ancora (senza perdersi e disperdere gli sforzi che devono essere sforzi mirati).

    PS: ho fatto qualcosa di simile negli studi di backend web in linguaggio Go, per ExpressJS di NodeJS, e ovviamente in PHP (dato che è stato il mio primo e più esteso studio di backend web).

  • HTTP e Web

    Nelle web-app (applicazioni software costruite mediante tecnologie web e fruibili via web) ci sono due suddivisioni: client e server.

    Un client si connette al server. Nel caso web, quindi avendo un server HTTP, ci sono Richieste HTTP (HTTP Request) e Risposte HTTP (HTTP Response).

    Un utente mediante il client HTTP (ad esempio un web-browser come Mozilla Firefox o Google Chrome) effettua richieste HTTP che il server (backend) risponderà con una risposta HTTP che il client HTTP elaborerà (nel frontend, la parte vicina all’utente, ad esempio che gestisce l’aspetto grafico dell’interfaccia grafica utente di una web-app).

    Per gestire le richieste ci si serve ad esempio di un Controller, un componente software che risponde alle richieste all’interno della web-app lato server (back-end).

    Mi vengono in mente alcuni design pattern, ovvero modi riutilizzabili di strutturare i meccanismi software, modi ricorrenti e standardizzati conseguentemente.

    Il pattern Front Controller specifica che le richieste HTTP sono filtrate dal front controller che le gestisce, gestendo quindi un filtraggio dell’accesso alle risorse HTTP, ad esempio con blocchi in caso di mancata autorizzazione all’accesso, elaborazioni quali il templating HTML, che vedremo tra poco, e tutte le altre necessità che questa strutturazione software consente di risolvere (strutturazione architetturale).

    Il Templating HTML è un modo di riusare del codice HTML, che però può variare, avendo quindi parti prefissate e altre inserite all’occorrenza dinamicamente dal software. Il look appare consistente anche grazie a questo.

    Nel design pattern MVC (ModelloVistaControllore) il controllore gestisce le richieste HTTP (iniziate dal client e risposte dal server che le invia al client che le elabora). La vista è un template HTML che viene dinamicizzato dal Modello contenente i dati del software da mostrare (inserendo tali dati nella vista/template HTML).

    Il templating può essere effettuato sia lato server sia lato client, anche mescolando gli approcci risolutivi nella stessa applicazione.

    Un templating lato server è ottenibile quando il controllore passa i dati del modello alla vista come template HTML elaborato lato server. Al client arriva il template già riempito con i dati.

    Un templating lato client HTTP è ottenibile mediante una richiesta del modello al server, e una volta ricevuto il modello dal server esso riempirà le parti dinamiche del template lato client (ad esempio un client HTML+JavaScript che mediante il JS genera l’ HTML dinamico servendosi dei dati del modello ottenuto mediante una apposita richiesta HTTP, stile AJAX/REST). Il client riempe il template con i dati, presi i dati dal server (e dall’utente).

    Quindi i template esistono sia nel client che nel server, seguendo un design di una architettura distribuita, in questo caso distribuita tra clients e servers (come potrebbe anche esserlo tra nodi di rete e peers vedasi PeerToPeer/P2P).

  • focus sistemi software

    Questo è il focus che emerge e che probabilmente mi guiderà. Non dico di seguirlo, forse neanche io lo seguirò tra scelte vincolate e necessità di scelta.

    Java

    Linguaggio storico. Linguaggio longevo e attivamente usato. Sta ancora crescendo. Applicabile come Web Back-end con Spring Web.

    JavaScript

    Linguaggio modernizzato, accresciuto di recente, con TypeScript ha un supporto alla tipizzazione statica (tipizzazione in questo simile a Java). Applicabile come Web Front-end, sia come Javascript/ECMAScript che come TypeScript.

    https://www.analyticsinsight.net/top-10-programming-languages-used-in-popular-websites/
    articolo d’ispirazione a questo mio articolo, poi modificato al mio caso personalizzato
  • Laxmi and Vishnu

    https://www.youtube.com/watch?v=1ZBLHJNhUNo
  • questions

    #questions (for every time cycle and year cycle).
    Is an educated mind more intelligent for this very reason? Can stupidity be healed or transformed? Can ignorance of the existent be made non-existent? Is that ignorance or stupidity? Can ignorance be avoided by education and informations and perceptions? Can stupidity in every form be always healed, and can minds be made capable to function more and more optimally?
    #questions

  • programmatore

    In Italia un programmatore è associato ad un lavoratore metalmeccanico. Sorpresi o no, in Italia c’è molto ehm da capire!

    Io Programmatore VIDEO – Alan Maestrale feat Gionathan & Bora ( Ragazzi di via Agliè )
    La ballata del programmatore
  • datalog (inference from facts and rules)

    datalog (inference from facts and rules) using pyDatalog (pythonic datalog extension)
    from pyDatalog import pyDatalog

    pyDatalog.create_terms("parent")
    + parent("xerces", "brooke")
    + parent("brooke", "damocles")

    pyDatalog.create_terms("ancestor,X,Y,Z")
    ancestor(X,Y) <= parent(X,Y)
    ancestor(X,Y) <= parent(X,Z) & ancestor(Z,Y)

    print(ancestor("xerces", X))

    datalog (inference from facts and rules) using pyDatalog (pythonic datalog extension)

  • AmbientiDesktop

    Gli ambienti desktop che ho usato (in varie loro versioni e configurazioni varie):

    • GNOME Classico
    • KDE Classico
    • XFCE
    • GNOME Shell
    • KDE Plasma
    • MATE
    • Cinnamon
    • Unity
    • altri meno e non mi sento di menzionare oltre

    https://cdimage.debian.org/cdimage/unofficial/non-free/cd-including-firmware/current-live/amd64/iso-hybrid/

  • Daily Planet Life

    Daily Life and Conscious Planet
  • Programmabilità … anche minima

    Una moderna incarnazione della storica e primordiale Turing Machine. Al posto di nastri magnetici memorie ad accesso non necessariamente sequenziale, limite dei nastri magnetici dove farlo era lento e dispendioso. Ma rimane un Macchina di Turing in quanto coglie l’essenza di computer come lo aveva pensato Alan Turing, essenza che vive ancora oggi in circuiterie più complesse, ma prima presento questa complessità ridotta e minima, poi si può studiare sulle varie architetture cosiddette dei computers con il loro hardware programmabile col software.

    Fase 1: Il puntatore di istruzione (IP, Instruction Pointer), seleziona quale istruzione leggere dalla memoria ROM di programma formato da una serie di istruzioni. L’istruzione corrente fluisce in 4 destinazioni che la scompongono: 2 che sono la sorgente e la destinazione di copia di bits di memoria, e 2 che sono i puntatori alle 2 possibili istruzioni successive, selezionate dal Path Selector (PS, selezionatore di percorso).

    Fase 2: Avviene la copia del bit (parte di informazione) tra sorgente e destinazione. Questo può anche modificare il Program PS (Path selector), coi suoi effetti.

    Fase 3: Viene aggiornata l’istruzione corrente mediante IP (Puntatore a istruzione). L’istruzione corrente specificamente consiste nella istruzione contenuta nella memoria ROM individuata dall’indirizzo del Puntatore a Istruzione, indirizzo contenuto nel Puntatore a Istruzione.

    Nota: forse tra imprecisioni e varianti possibili di questo design le cose non sono esattamente così, ma con differenze.

    Ecco mostrato come un programma viene eseguito, istruzione per istruzione, con ogni istruzione avente 2 possibili istruzioni prossime, con selezionatore di istruzione prossima, e con il nocciolo dell’istruzione che consiste nella copia di bits con 2 posizioni una come fonte da cui prelevare il dato, l’altra come specificazione del dove collocarlo. Muovendo bit si ha anche immissione ed emissione di informazioni, che possono così essere elaborate.

    Con queste semplici istruzioni è possibile derivarne ogni altra essendo Turing Complete il design. Io ne ho derivate ad esempio istruzioni dell’algebra di George Boole per fare operazioni di somma e conteggio.

    Una sua variante però potrebbe avere accesso indiretto alla memoria, ovvero con memorie in RAM contenenti indirizzi da cui leggere informazioni o scrivere informazioni, un pò come il PEEK & POKE nei sistemi BASIC. Ovviamente una Turing Machine classica a memoria su nastri magnetici avrebbe qualche problema a fare questo, anche se non sarebbe impossibile tecnicamente.

  • Linux inadeguato? Opinioni mie

    Linux. Avete sentito qualcosa a riguardo o non sareste qui a leggere. Oppure è un primo contatto che è privo di preconcetti.

    Le mie opinioni: prime di enunciarle dico che sono un utente antico ed esperto, con interessi nell’ambito della programmazione di software (siti web e app incluse) e amministrazione di sistema (che potrebbe arrivare ad includere amministrare distese di computer attivi a servire le richieste di decine su decine di utenti, creando un carico di lavoro notevole).

    Io ho conosciuto Linux come kernel. Ovvero nel mio bagaglio di conoscenze tecniche so che è un componente essenziale di un sistema operativo. Ad esempio Android è un sistema operativo. E Android usa un adattamento del kernel Linux.

    Linux è quindi un kernel adattabile. Può adattarsi agli smartphone e tablet, ma può anche servire in una moderna apparecchiatura elettronica come ad esempio una lavatrice smart.

    Questi sono adattamenti in piccola scala mentre essendo Linux un kernel scalabile può adattarsi anche a una più grande scala. Come la larga scala di un Facebook o di una Wikipedia in cui tanti computer di tipo server hanno un sistema operativo con kernel Linux e assieme ad appositi software (che si appoggeranno al kernel essendo il kernel alla base) questi computers gestiranno i siti web anche molto usati e quindi con grandi carichi di lavoro e con esigenze di memorizzazione anche elevatissime (vedasi Facebook quanto memorizza nei suoi computers servers).

    Oppure anche nel super calcolo: molti computer agiscono come clusters per supportare enormi calcoli e carichi di lavoro ad esempio di fisici o di ingegneri, ad esempio con simulazioni e previsioni, statistiche, suggerimenti smart, profilazione, etc che richiedono grosse prestazioni.

    E? E poi? Dicevamo sull’inadeguatezza! Fin qua tra Android, centri di calcolo, servers per ospitare Facebook, elettrodomestici smart, smart TV, etc, fin qua non è inadeguato!

    E’ inadeguato in un campo di sicuro: l’utenza comune. Linux per l’utenza comune non fornisce soluzioni adatte (aspetta!). Ma in che senso? Allora… Android usa una versione adattata del kernel Linux. E Android ha una interfaccia secondo me al top di quelle che esistono oggigiorno. Ma Linux è il Kernel, una parte sottostante, un nocciolo centrale, il cuore, non il viso chessò. Per dare un viso al kernel il team Google ha fatto progressi e successi ben noti.

    Mentre, nei sistemi PC Linux è stato il cuore di vari sistemi operativi per PC (e lo è tuttora che scrivo), ma tali sistemi PC (Personal Computer) hanno seri e gravi problemi e carenze nel fornire un’esperienza adatta agli utenti comuni quindi non particolarmente esperti.

    Sono stati fatti passi avanti però da non nascondere: molti più applicativi, giochi inclusi adesso supportano tali “PC Linux” e forse … chissà, non pronostico.

    Nella mia esperienza di utente non comune bensì tecnico e smaliziato (che vocabolo!) ho avuto la possibilità di un uso quotidiano anche perché non gioco sul PC, non uso Softwares che non supportano PC Linux, anzi uso dei softwares che a volte sono prodotti per funzionare solo su PC Linux, caso opposto.

    Aggiungo oggi 13/11/2023: uso un PC laptop con Windows 11 e Manjaro e Ubuntu, più un server online Debian. Non mi limito nell’ uso del software, non sono più “Linux first” bensì non voglio né favorire né sfavorire. La parte politica del tema la lascio ancor più di prima al passato. Il presente non ha tensioni. No politica, no ideologie, no fazioni. Guardo i software in modo concreto per le esigenze e le possibilità e le limitazioni.

  • GParted e partizionamenti delle memorie

    GParted da Debian11

    Ecco un “/dev/sda” (disco interno) partizionato. Ci sono partizioni (ovvero suddivisioni), per le necessità di memoria di ben 4 Sistemi Operativi: MS Windows10, Ubuntu 21.10, Fedora 35, Debian11.

    Come nota aggiuntiva dico che: è bene ricordare di non interrompere le operazioni di manutenzione ad esempio quelle di GParted perché si potrebbero perdere strutturazioni di dati e quindi dati. Una volta iniziate terminarle ed assicurarsi di avere disponibili tempo, alimentazione elettrica. Fare comunque backups anche appoggiandosi a DropBox etc.

    E non ultimo per modificare una partizione non deve essere in uso: ad esempio ho ampliato mediante GParted la partizione Debian non da Debian avviato ma da Ubuntu avviato perché così la partizione Debian da modificare non era in uso e quindi modificabile.

    Se potete appoggiarvi a sufficientemente esperti potrebbe risultare meglio, o anche nel tempo divenire esperti. Se c’è possibilità di perdita di dati è una responsabilità.

    Altra cosa: allocare cioè assegnare risorse per usarle è una cosa tattica per così dire. Dividete l’hard disk in modo tattico per non avere problemi futuri strada facendo.

    Mentre in quanto a multi-boot di compresenza di sistemi operativi consiglio imparare di più su GRUB e sulla eventuale presenza di un sistema recente con UEFI e non un vecchio BIOS senza: UEFI agevola il multi-boot tenendo copie separate di GRUB + boot di Windows (io ho più di 4 voci di avvio nel UEFI anche per vecchi sistemi, e Microsoft Windows (!) che può essere avviato così anche senza GRUB, che è tipicamente un boot loader della famiglia Linux)

  • HTTPS per HTTP Sicuro

    https://certbot.eff.org/

    CertBot lo uso nei miei domini/websites:

    Notare “ServerName” e “certbot”

    # from ~/.bash_history cd /var/www && ls mkdir alias.arkenidar.com touch alias.arkenidar.com/test.txt cd /etc/apache2/sites-available/ nano alias.arkenidar.com.conf a2ensite alias.arkenidar.com systemctl reload apache2 sudo certbot --apache -d arkenidar.com -d netop.info -d alias.arkenidar.com

    https://arkenidar.com/docs/snippets/alias-howto.txt

  • DNS: nome all’ IP address

    Server attivo sempre allo stesso indirizzo IP
    Un indirizzo IP può avere anche più di un nome di dominio, il server poi smista (se volessi mettere chessò netop.info su un server a parte gli darei un IP a parte del server del caso)

    Ecco come uso linode e dynu per avere un server con IP e dare almeno un nome a quell’IP statico (fisso, non cambia, a differenza dell’utenza comune che ha IP variabili)

  • app che evidenzio

    Queste sono le app che uso di questi tempi, specificamente nell’ambiente software di Debian 11.

    Come dico anche nel titolo nel blog ogni software può essere sia migliorativo che peggiorativo. Usateli con coscienza.

    Forse dettaglierò in futuro su ciascuno degli elementi mostrati.

    https://arkenidar.com/var/sh-scripts/

  • Lao Russell said

    Basic Foundation for a
    Living Philosophy (from Lao Russell)


    To bring blessings upon yourself bless your neighbor.
    To enrich yourself enrich your neighbor.
    Honor your neighbor and the world will honor you.
    To sorely hurt yourself hurt your neighbor.
    He who seeks love will find it by giving it.
    The measure of a man’s wealth is the measure of wealth he has given.
    To enrich yourself with many friends enrich your friends with yourself.
    That which you take away from any man the world will take away from you.
    When you take the first step to give yourself to that which you want, it will also take its first step
    to give itself to you.
    Peace and happiness do not come to you from your horizon, they spread from you out to infinity
    beyond your horizon.
    The whole universe is a mirror which reflects back to you that which you reflect forward into it.
    Love is like unto the ascent of a mountain. It comes ever nearer to you as you go ever nearer to it.
    Lao Russell

  • Qualità divine (pag. 21 di “Perle di Saggezza”)

    Qualità divine (capitolo di “Perle di Saggezza” edito da BBT)

    1. È veritiero chi non manca mai alla sua parola d’onore.
    2. È definito eloquente chi si esprime con parole piene di significato, pronunciate con gentilezza e rivelatrici di buone qualità.
    3. Una persona è intelligente quando ha una memoria acuta e una fine capacità di discernimento.
    4. È definito abile chi può compiere rapidamente un lavoro difficile.
    5. Chi è consapevole dei benefici ricevuti e non li dimentica mai è considerato riconoscente.
    6. È ingegnoso chi può compiere più cose simultaneamente.
    7. È determinato chi osserva i principi morali e mantiene le sue promesse.
    8. Chiunque possieda un perfetto controllo dei sensi è padrone di sé.
    9. È perseverante chi continua a compiere la sua opera fino a raggiungere lo scopo che si è prefissato.
    10. È tollerante chi può sopportare tutte le difficoltà, anche quelle che sembrano insopportabili.
    11. Chi sa tollerare tutte le offese ricevute dai suoi nemici dà prova di indulgenza.
    12. È definito grave chi non rivela il suo pensiero a chiunque o la cui attività mentale e pianificazione sono molto difficili da capire.
    13. È soddisfatto in se stesso chi conosce una perfetta gioia interiore, è libero da ogni desiderio e non è mai turbato, neanche in presenza di serie cause di afflizione.
    14. È equanime chi non cade in preda dell’attaccamento e dell’invidia in alcuna circostanza.
    15. È magnanimo chiunque sia incline a compiere grandi atti di carità e beneficenza.
    16. È religioso chi osserva personalmente i princìpi della religione così come li prescrivono i testi sacri ed insegna agli altri questi stessi princìpi.
    17. È definito eroico chi mostra un vivo entusiasmo nel combattimento ed è esperto nell’adoperare le armi più svariate.
    18. È compassionevole la persona che non può tollerare che qualcuno soffra.
    19. È rispettoso chi sa mostrare il dovuto riguardo a un maestro spirituale, a un religioso e a un anziano.
    20. È definito cortese chi non è mai insolente e non ha una natura orgogliosa.
    21. Una persona di cui si può aver fiducia in ogni circostanza è detta fidata.
    22. La persona che talvolta fa trapelare una certa umiltà e timidezza è definita riservata.
    23. Chi possiede caratteristiche particolarmente dolci e desiderabili ha una natura amabile.
    24. Si dice che una persona ha carattere fermo quando non è turbata neppure nelle avversità.
    25. Una personalità capace di influenzare la mente di molti è detta dominante.
    26. Chi dopo lo studio sa ricordare ciò che ha studiato è dotato di buona memoria (smriti).
    27. La capacità di leggere molti libri su argomenti diversi, ma anche di comprenderli e applicarli quando è necessario, è segno di intelligenza (medha).
    28. La capacità di vincere l’incostanza è definita fermezza (dhriti).
    29. L’entusiasmo è il risultato dello sforzo compiuto con intelligenza.
    30. L’umiltà è l’ornamento del puro amore per Dio.
  • 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: “se” vero fai…

    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”).
    In questo caso del “mentre” vero fai… ripete parte del programma mentre una condizione Booleana è vera, altrimenti esce dal ciclo o nemmeno ci entra.

    Nel caso del “se” vero fai… fa qualcosa solo se la condizione Booleana è vera altrimenti non lo fa.

    if numero<0 -- se "numero" è negativo
    then
     errore("negativo non consentito")
    end

    E’ possibile anche intercettare il caso in cui la condizione è falsa:

    Nel caso del “se” vero fai… “altrimenti” fai… fa qualcosa solo se la condizione Booleana è vera altrimenti fa quel che è specificato nell’altrimenti, ovvero in caso che la medesima condizione sia falsa.

    if numero<minimo or numero>massimo -- verifica
    then
      errore("fuori dall'intervallo consentito")
    else
      elabora_numero() -- solo se valido, se è nell'intervallo dei valori consentiti
    end

    Spero che questi esempi e queste descrizioni siano utili. Esercitarsi in pratica aiuta molto ad assimilare.

  • #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.

  • #dream La ragazza di campagna e la città dei robots.

    La ragazza di campagna e la città dei robots.

    Inna aveva dovuto camminare e superare le barriere per iniziare ad addentrarsi nell’agglomerato urbano. Voleva conoscere la vita di quel posto. Lì vivono esseri dall’animo circuitale, leggendari esseri nati dalla precedente estinzione degli esseri umani che volevano fondersi con la loro parte robotica che infine prevalse.

    Inna incontrò uno schermo immersivo che iniziò telepaticamente a mandarle dei segnali di terrore subliminale che lei riuscì a resistere. L’essere visualizzò le forme di vita che conosceva nel suo schermo 3d immersivo e lei vide quelli che dovevano essere altri animali intelligenti, leggenda voleva che si fossero estinti. Lo schermo proseguì a sputar fuori immagini. Si vide nuda fino a dentro se stessa capendo che quell’essere la stava vedendo dentro e analizzandola. Disse in un linguaggio antico ma che somigliava a quello che lei usava con gli altri umani: “Si diriga nel settore ibridi per ulteriori analisi”. L’aveva confusa per un ibrido uomo-macchina, che secondo le leggende si era estinta come forma di vita. Temette che si venisse a scoprire che lei non era nemmeno una creazione ibrida ma proveniente da un’area in cui gli umani erano tollerati come tutti gli altri animali, questo perché durante quelle guerre gli umani non erano tollerati. Ma le macchine avevano imparato di più sugli animali e trattandoli come animali c’era possibilità di convivenza pacifica e tollerante. Ma Inna decise d’indagare sulle origini delle forme di vita e si era addentrata in quella città robotica, forse non la più grande e importante ma la più vicina. Così fece un altro incontro: un essere strisciante e lucente apparve nella periferia del suo campo visivo e piano e coraggiosamente si voltò. Era un tubo rapido con degli occhi in alcune giunzioni del suo flessibile corpo. Si eresse e formò una spirale. Quindi rivolse a lei i suoi occhi o per meglio dire i suoi sensori visivi, che però rassomigliavano a degli occhi in seguito alla fusione delle specie pre-guerra.

    (scritto di getto se mi va proseguo)

    Inna sentendosi osservata si stette immobile. Quell’essere continuava a fissarla. Infine se ne andò via emettendo un suono discendente.

    Inna superò vari ologrammi incomprensibili ma si dirisse verso dove l’intensità cromatica era maggiore, infine raggiungendone il suo punto centrale.

    Sentì le sue ombre allungarsi e la incatenavano a quella luce del campo in cui era immersa. Infine era paralizzata. Vide le proprie membra divenire trasparenti, e imparò persino qualcosa sulla propria mente intelligente. In quel campo di espansione arrivarono altri esseri che da scuri tornavano luminosi, passando da questo luogo. Infine, alla massima trasparenza del suo corpo seguì uno slacciamento dalle sue ombre che l’avevano tenuta fissata e potè andare oltre.

  • #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

  • #basi : Linguaggi (PL) e interfacce di #programmazione (API)

    Linguaggi e interfacce di programmazione: le basi di ogni software.

    Per essere capace di essere un programmatore bisogna conoscere entrambi gli elementi: sia i linguaggi di programmazione sia le interfacce di programmazione comunemente abbreviate come “A.P.I.” (application programming interface).

    In una applicazione bisogna usarli entrambi. Nella mia esperienza ho una buona dimestichezza con lo studio dei linguaggi (imparentati e “a famiglie” di somiglianza, e aventi influenze sia ricevute che date). Le somiglianze rendono possibili il riciclo delle conoscenze, una ri-applicabilità di ciò che è stato compreso. Un linguaggio può essere implementato in più modi e ciò può essere rilevante.

    Riguardo le API ovvero le interfacce di programmazione ne esistono svariate e a volte determinano il linguaggio che va con esse usato. Quindi sono vincolanti. Sono più soggette a un mutamento di versione in versione e anche per questo richiedono lo studio della documentazione specifica. Possono anche invecchiare e divenire obsolete o anche non più supportate. Vincolano al produttore e al mantenitore con i suoi interessi di mercato e strategici.

  • Love2D intro notes

    Love2D is a way to build apps. It is based on the distribution of compressed bundles of files, usually a “main.lua” Lua script file plus other Lua scripts and optionally other files, tipically images and sounds.

    Love2D is mainly a way to build game apps with 2D graphic. It can leverage some of its cross-platform ability, both mobile and classic desktop systems.

    To activate a Love2D app you must use an installer with file extension association (or install its package). Extension association is a way to usually launch such apps, the other is in this form: “love gamefile.love”. The extension of the zipped compressed app bundle is “.love” in fact, and the above way is meant to launch the love2d app using the “love” runtime executable and the file to open as a “command line argument”, usable both in consoles and in desktop app launcher files (e.g. Windows or Linux app Icons).

    The “love” executable file is a runtime that can run both zipped “.love” files and directories containing Lua/Love2D scripts also. Such directories must contain at least the “main.lua” file as app entry-point for program execution, and such directories can be distributed by zipping such contents with a zip compression program/command and renaming such zip file to a love file extension: app.zip -> app.love.

    To write such script textual files describing the program you can use a Lua IDE such as ZeroBrane Studio (written in wxlua) or Microsoft’s Visual Studio Code extendible IDE with Lua specific “extensions” from the “VSCode Extension Marketplace” (BTW VSCode is built mainly in JavaScript).

  • Espansioni ed Informatica

    Perché metto in guardia dall’informatica con le sue espansioni in continua espansione?

    Anche soltanto notare ciò è molto utile per capire che posto può avere l’informatica nelle nostre proprie vite e nei nostri ambienti.

    Per me l’informatica ha avuto tanti effetti e fasi sia di conoscenza e sia dell’evoluzione dell’informatica stessa nella mia vita.

    La tendenza è che questo campo cresca, ci sono investite troppe energie affinchè questa crescita avvenga.

    Ma cresce anche la complessità da gestire e io ho conosciuto scenari da incubo e pazzia. E non si è fermata minimamente questa crescita.

    Che fare?

    ADDENDUM: mancava una immagine a questo articolo quindi metto questo video (abbastanza attinente)

    CppCon 2015: Fedor Pikus “C++ Metaprogramming: Journey from simple to insanity and back” https://www.youtube.com/watch?v=CZi6QqZSbFg

  • linguaggio C

    #include <stdio.h>
    #include <stdlib.h>
    
    int main(){
    
        struct Nodo{
            int contenuto; // lista di "int"
            struct Nodo* collegato; // nodo successivo
        };
        struct Nodo* lista=NULL; // collegato al primo nodo
    
        struct Nodo* ultimo=NULL;
        for(int n=1; n<=3; n++){ // aggiungi: quanti?
    
            printf("aggiungi n=%d\n",n);
            
            struct Nodo* corrente=(struct Nodo*)malloc(sizeof (struct Nodo));
            corrente->contenuto=n;
            corrente->collegato=NULL;
            
            if(ultimo==NULL) lista=corrente;
            else ultimo->collegato=corrente;
    
            ultimo=corrente;
        }
    
        struct Nodo* scorre=lista;
        while(scorre != NULL){
            printf("scorrendo n=%d\n",scorre->contenuto);
            scorre=scorre->collegato;
        }
    
        return 0;
    }

    https://replit.com/@dariocangialosi/liste-collegate-liste-linked

    Ecco un esempio di programma scritto in Linguaggio C. Il linguaggio C è la base di molte cose. In questo caso mostro un esempio di gestione della memoria RAM mediante una “linked list” di numeri. Una linked list è una struttura dati che ha i suoi algoritmi di inserimento elementi, rimozione elementi, ordinamento, ricerca. In C è possibile sia partire dalle basi e realizzarne una ad-hoc sia esistono le cosiddette “libraries” che consentono di riutilizzare codice scritto da altri che fornisce tali funzionalità senza doverle scrivere noi stessi (condivisione e riuso). Ad esempio GLib fornisce: https://developer.gnome.org/glib/stable/glib-Singly-Linked-Lists.html

  • spring.io, appunti vari

    Parlerò di un campo della tecnologia delle informazioni che è circoscritto alla creazione e mantenimento delle applicazioni web.

    Una applicazione web è formata da web servers ai quali si connettono i web client, spesso browsers a volte app di altro genere, comunque mediando le due tipologie (client+server) con un protocollo di comunicazione in rete chiamato HTTP.

    Dando per buono che Java sia una buona scelta, cosa si può usare per costruire un webserver in Java? “Spring.io” è un sito che fornisce principalmente questo, anche se si è evoluto temporalmente.

    Java lo si può apprendere da “SoloLearn.com”, come linguaggio, mentre Spring è un uso di tale linguaggio.

    Per iniziare un uso di Spring in Java o JVM ho usato:

    https://start.spring.io/#!type=maven-project&language=java&platformVersion=2.5.1.RELEASE&packaging=jar&jvmVersion=11&groupId=com.example&artifactId=demo&name=demo&description=Demo%20project%20for%20Spring%20Boot&packageName=com.example.demo&dependencies=devtools,web,session,freemarker,jdbc,data-jdbc,postgresql,data-rest

    Le “dependencies” sono parti da cui dipenderà la nuova webapp, perchè le userà, prevedibilmente. Fatto questo si scarica il “progetto” (nel senso di app in lavorazione) e lo si modifica ad esempio con Visual Studio Code, uno dei “https://spring.io/tools”:

    https://marketplace.visualstudio.com/items?itemName=Pivotal.vscode-boot-dev-pack

    E’ una app che usa un datasource, che va configurato come sorgente dei dati (datasource: gestione dei dati immagazzinati). Io in questo file “application.properties” uso Postgres ma avevo già bazzicato con una configurazione equivalente con MySQL (entrambi tipi di database software).

    https://github.com/arkenidar/spring-demo1/blob/master/src/main/resources/application.properties

    Fatto ciò l’app parte senza errori, ma non fa nulla, nè può fare nulla in questa condizione iniziale embrionale.

    Ho quindi aggiunto delle classi controller MVC (già sperimentate e studiate tempo fa) che avevo scelto come piccoli esempi e prove in piccola, minuscola scala.

    https://github.com/arkenidar/spring-demo1/tree/master/src/main/java/com/example/demo/controllers

    Fatte queste modifiche (che nel mio caso fanno riavviare automaticamente il server, in modo che le metta in atto) posso quindi accedere agli indirizzi http del server http locale, in ascolto sulla porta 8080 (http://localhost:8080/fm).

    “Fm” come FreeMarker un sistema di templating, di cui ho fatto un minimo iniziale uso.

    Faccio anche uso di meccanismi di sessione http, e di JDBC un sistema per i DB (database).

    Su Udemy ci sono video corsi estesi, ma per me molto pesanti da seguire, ho trovato un varco in questa jungla con tentativi più auto-diretti che passivamente imboccati (anche perchè conoscevo già PHP con e senza frameworks MVC).

  • Punti per WordPress e LAMP in genere

    == Punti da trattare, in ordine apposito.

    =1 Cos’è un Sistema Operativo (OS) e in particolare Ubuntu.

    • La gamma dei sistemi operativi.
    • Uso desktop e uso Server.
    • Installazione di Fedora Workstation in locale.

    =2 Come acquistare un server Ubuntu sempre online, con opzionale DNS.

    • Acquisto di un server con installato Ubuntu mediante Linode.com.
    • DNS gestito mediante Dynu.com.

    =3 Operazioni quotidiane in Ubuntu (SSH, aggiornamenti, installazioni, configurazioni mediante Nano o VSCode via SSH, rsync).

    • SSH login e logout.
    • APT upgrade e reboot.
    • APT install e APT remove.
    • GNU nano editor di testo dei file di configurazione, in modo testuale.
    • Microsoft VisualStudio Code per editing di files remoti, su server, in modo grafico.

    =4 Installazione Apache2 e HTTPS mediante Certbot.

    • Installazione di Apache2.
    • Configurazione del sito Apache2 disponibile e abilitato.
    • Certbot per avere i siti Apache2 ovvero HTTP con HTTPS (più sicuro e necessario).

    =5 Installazione di PHP.

    • Installazione dei pacchetti mediante APT.
    • File PHPinfo di prova temporanea e verifica.

    =6 Installazione di MySQL (LAMP: Linux Apache MySQL PHP).

    • Installazione dei pacchetti mediante APT.
    • MySQL usabile da PHP.
    • Gestione di MySQL mediante un apposito software, da remoto ma sempre in sicurezza.

    =7 WordPress (un caso di uso di LAMP).

    • Installazione download dal sito wordpress.org.
    • Prima configurazione.
    • Primi post.
    • Amministrazione quotidiana.
  • server gnulinux parte 1

    GNU/Linux è la base di molte Distro, Sistemi Operativi molti dei quali usati nei computer online, i computer server. I server hanno sistemi operativi adatti a operare come server, spesso come server web (HTML/HTTP) ma anche come server di gioco, di videoconferenza e altri usi.

    Nell’immagine sopra mostro come ho usato due servizi: Linode e Dynu. Linode pagandolo mi fornisce un computer sempre online a un indirizzo fisso, che è numerico e che posso usare più agevolmente come indirizzo non numerico (ad esempio “arkenidar.com” come indirizzo) mediante un sistema DNS, dei nomi.

    Mediante SSH posso amministrarlo, come accenno.

  • Files in Unix parte 4

    Nella parte 4 parlo dei files nascosti.

    Un file (che può anche essere un file di tipo directory) se inizia con un . (punto) allora non viene mostrato, tranne nei casi questo sia esplicitamente richiesto.

    ls di default, senza specificare -a (All, tutto) non mostra tutti i file. Invece ls specificando -a elenca tutti i files (files del percorso specificato, e se non specificato files della directory corrente).

  • Files in Unix parte 3

    BASH e i files: la directory corrente e il percorso per riferirsi a un file.

    I comandi (commands) menzionati negli articoli precedenti di questa serie (cp, mv, rm, mkdir) vengono eseguiti tipicamente all’interno di un’interfaccia testuale (ad esempio KDE/Konsole con shell GNU Bash).

    Di BASH ne è ho parlato poco ma la menziono perchè è questa che ci fornisce il concetto di “directory corrente” (del processo in esecuzione). Questa directory corrente è usata dai processi che vengono creati quando un comando viene messo in esecuzione (ad esempio digitato non parte, dando il tasto di nuovo rigo il comando parte mediante l’interpretazione del rigo di comando da parte di BASH, che è anche un processo genitore e il comando dato è un processo figlio creato dal genitore, gerarchicamente).

    Quindi… Se la directory corrente è la mia “home directory” (utente arkenidar quindi /home/arkenidar), se io creo un nuovo file vuoto con il comando touch così touch nomefile.txt il risultato è che viene fuori un file con questo nome completo: /home/arkenidar/nomefile.txt

    Questo vale anche per tutti i comandi usati da shell BASH. Ad esempio: rm nomefile.txt rimuove il file così chiamato cercandolo nella directory corrente.

    Se io faccio adesso rm percorso/nomefile.txt cercherà il file all’interno della directory percorso.

    Esistono anche dei riferimenti particolari in BASH e in Unix in genere: . (punto) e .. (punto punto).

    Lo spiego in pratica: al punto singolo viene sostituito il nome della directory corrente (ad esempio la directory home, ma con cd si fa un cambio directory).

    cd nomedirectory farà entrare nella sotto-directory nominata, mentre cd .. farà entrare nella directory appena superiore alla directory corrente, superiore di un livello, rendendo la directory superiore la directory corrente (quella immediatamente superiore, ma se ci fossero più directory superiori si può usare ancora il .. con ad esempio ../.. che indica sopra di due livelli).

    Questo forma il percorso di un file. Ad esempio a partire dalla directory radice (directory /) /home/arkenidar o a partire dalla directory corrente /home/arkenidar/sottodirectory: cd ../sottodirectory2 (che diventa quindi /home/arkenidar/sottodirectory2).

    NOTA: Vedendoli in azione questa spiegazione testuale può divenire più decodificabile. Scusate se non fornisco immagini o video in questo momento.

  • Files in Unix parte 2

    I files più particolari in questo articolo sono le directory (o cartelle, come vengono chiamate) che possono ospitare al loro interno dei files.

    Si scopre così la gerarchia di directories perchè ad esempio la directory / radice (root) contiene la directory home (/home) che contiene i files degli utenti (nel mio caso dell’utente arkenidar diventa: /home/arkenidar)

    Ma una directory oltre a contenere files di tipo directory può contenere solo files e nessuna cartella (quindi questa profondità non continua indefinitamente) o anche essere directory vuote (nessun contenuto in quel momento).

    Una directory viene creata con il comando mkdir. Ad esempio mkdir Schermate. Una directory viene creata col nome file specificato, ed è inizialmente vuota.

    Una directory può essere rimossa con rmdir che va usato così: rmdir -rf Schermate. Le opzioni r ed f sono spiegate nel manuale: man rmdir.

  • Files in Unix parte 1

    Articolo 1 della serie di articoli sui files in Unix e quindi GNU/Linux.

    I files vengono creati, hanno date di creazione e altro, occupano uno spazio nella memoria in base alla loro dimensione e hanno dei contenuti quindi.

    Ma la cosa più importante è che i files hanno un nome, che serve a indicarli, individuarli, a riconoscerli e a farci riferimento.

    Ad esempio un file può essere copiato (copy) così:

    cp [origine] [destinazione] (vedasi man cp)

    Ad esempio: cp pagina.html pagina2.html

    Ecco quindi che il nome della nuova copia sarà la destinazione, ovvero pagina2.html.

    Parentesi: Esiste un comando per evidenziare le differenze tra files: per esempio diff pagina.html pagina2.html non dovrebbe inizialmente mostrare differenze, poi se la copia verrà modificata, allora si che avrà differenze.

    Se si vuole che il file origine scompaia, e rimanga il file di destinazione allora quello che forse vi tornerà utile è il comando mv che muove (move), sposta, quindi senza creare una copia. È utile se ci pensate anche a cambiare nome a un file. Ad esempio mv pagina.html index.html.

    Per cancellare un file si può ad esempio usare rm (remove) che sgancia un file dal filesystem che quindi va perso pur non essendo fisicamente sovrascritto ancora (vedasi i tools di wiping e implementazioni di filesystems che sono fuori da questa serie di articoli). Alcuni usano un posto dove conservare i file prima di rimuoverli definitivamente che nei Desktop Environment (Ambiente di Scrivania) viene chiamato Cestino (metafore fisiche di Scrivania e Cestino). Ma questi comandi come rm non ne tengono particolare conto, perché precedono concettualmente l’avvento degli ambienti grafici e sono rimasti fedeli a quello stile. Se volete mantenete delle copie voi stessi con procedure apposite (come ad esempio i backups, fuori dalle tematiche dell’articolo).

    Comandi cp, mv, rm. E con questo esempio di operazioni sui files di: copia, spostamento (e rinominazione), e cancellazione (senza passare dal Cestino), chiudo questo articolo di weblog e ci orientiamo verso i successivi in senso cronologico e di praticità. Ad esempio non sappiamo niente ancora su files speciali (ad esempio i files nascosti e le directory/cartelle).

  • Linux da ISO

    Debian&KDE: Setting up a Debian10(codenamed:Buster) with KDE-Plasma (as DE)

    A new operating system: Debian, side by side with others like Microsoft Windows.

    Trick: (the ISO format was originally for CDs and DVDs, so you can write the ISO files there, in case)

    BEGIN with a Download the ISO image file (for installing it)

    https://cdimage.debian.org/cdimage/unofficial/non-free/cd-including-firmware/

    1. The choice of “non-free”. First thing select a “non-free” version that means that it contains also Wi-Fi drivers(firmware), useful when you want of course to use Wi-Fi.
    2. The choice of a “live ISO image” so you can try it before installing: https://cdimage.debian.org/cdimage/unofficial/non-free/cd-including-firmware/current-live/
    3. The choice of CPU type: https://cdimage.debian.org/cdimage/unofficial/non-free/cd-including-firmware/current-live/amd64/
    4. The choice of download type: https://cdimage.debian.org/cdimage/unofficial/non-free/cd-including-firmware/current-live/amd64/iso-hybrid/
    5. The choice of DE (KDE Plasma), search KDE .ISO: https://cdimage.debian.org/cdimage/unofficial/non-free/cd-including-firmware/current-live/amd64/iso-hybrid/debian-live-10.9.0-amd64-kde+nonfree.iso

    THEN having the ISO file “flash” it with Etcher

    https://www.balena.io/etcher/ Use Etcher to flash the chosen ISO file to USB Flash Drives or SD Cards (removable storage). This removable storage once flashed can start a live OS that can be tried and/or installed on the main storage, in a disk partition. (Be sure to understand the concept of Partition, so you preserve what you eventually want to preserve and yet find room for installing a new Operating System, O.S. like the one you already have possibly, Windows. I use both!).

    FINALLY boot the computer from the flashed memory with the new OS to “try it and install it”

    (you can refer to YouTube videos from now on, here I focused on 1- selecting the proper ISO file giving you also freedom of choice by means of understanding and room for further exploration especially in terms of DE, Desktop Environments like KDE Plasma and so on) 2- writing the ISO file to external disk to boot from it and try it and install it


    These commands tweaked and used from a proper bash terminal allow to:
    ## get the ISO file by HTTP download
    wget https://cdimage.debian.org/cdimage/unofficial/non-free/cd-including-firmware/current-live/amd64/iso-hybrid/debian-live-10.9.0-amd64-kde+nonfree.iso ## download the ISO file mentioned by means of “wget” command
    ## write the ISO file to external disk (/dev/sdb???) to start it after powering the computer of course if external disk is 1-inserted and 2-selected
    sudo dd if=debian-live-10.9.0-amd64-kde+nonfree.iso of=/dev/sdb bs=4M status=progress && sync && echo “@@@ ALL IS OK! successful…” ## alternative to Etcher


    (writing in progress)

  • rsync per gestire i files

    Rsync permette di sincronizzare i files tra due posizioni anche tra locale e remoto e viceversa.

    devtool: rsync https://docs.google.com/document/d/1UFmfLRkGh0yY-OWlgmtYjkDYTWisEmf_jVhLmiJeumg/edit?usp=sharing

  • java: zenity vs System.console()

    In Java si può anche usare zenity così (vedi sotto) nel momento in cui System.console() non è disponibile (not available). Ad esempio se il processo è in esecuzione da un IDE (e non da terminale apposito, alternativa anche questa).

    Naturalmente zenity va installato (per essere richiamabile come da console).

    /*
    Console console = System.console();
    if (console == null) { System.out.println("No console available"); return; }
    else System.out.println("console available! (debug info)");
    String line = console.readLine("");
    */
    
    String line="<error: uninitialized line input>";
    try {
        Process process = Runtime.getRuntime().exec("zenity --entry");
        InputStream inputStream = process.getInputStream();
        Stream<String> lines = new BufferedReader(new InputStreamReader(inputStream)).lines();
        line = lines.collect(Collectors.joining("\n"));
    } catch (IOException e) {
        e.printStackTrace();
    }
    System.out.println(line);
    
  • Racket (Scheme system)

    This is a rectangular area calculation given its 4 vertices’ coordinates (axis-aligned). I had to do some research on various how-tos.

    #lang racket
    (define rect1 '( (1 1) (5 1) (1 -2) (5 -2) ) )
    (define xmin 'undefined)
    (define xmax 'undefined)
    (define ymin 'undefined)
    (define ymax 'undefined)
    (define (bounds point) (begin
       (void (let
           ( (x (list-ref point 0))
         (y (list-ref point 1)) )
         (begin
       (if (equal? xmin 'undefined) (set! xmin x) (if (< x xmin) (set! xmin x) '()) )
       (if (equal? xmax 'undefined) (set! xmax x) (if (> x xmax) (set! xmax x) '()) )
       (if (equal? ymin 'undefined) (set! ymin y) (if (< y ymin) (set! ymin y) '()) )
       (if (equal? ymax 'undefined) (set! ymax y) (if (> y ymax) (set! ymax y) '()) )
       )
         
       ) ) )
       )
    (bounds (list-ref rect1 0))
    (bounds (list-ref rect1 1))
    (bounds (list-ref rect1 2))
    (bounds (list-ref rect1 3))
    (list xmin xmax ymin ymax)
    (- xmax xmin)
    (- ymax ymin)
    (* (- xmax xmin)
    (- ymax ymin) )
    Welcome to DrRacket, version 7.4 [3m].
    Language: racket, with debugging; memory limit: 128 MB.
    '(1 5 -2 1)
    4
    3
    12
    > 
  • F# (functional on dotnet)

    https://fsharp.org/use/linux/

    https://fsharp.org/about/

    Out of curiosity mixed with desire to have the best programming tools starting with the best language possible and the best runtime possible (it mentions tooling software also)

    Evaluating it led me to the situation shown below:

    Further info:

    (bash) sudo rpm –import https://packages.microsoft.com/keys/microsoft.asc
    (bash) sudo wget -O /etc/yum.repos.d/microsoft-prod.repo https://packages.microsoft.com/config/fedora/33/prod.repo
    (bash) sudo dnf install dotnet-sdk-5.0

    … for current SDK (5) on Fedora 33

    https://docs.microsoft.com/en-us/dotnet/fsharp/get-started/get-started-vscode

    … for F# in VSCode first steps

  • https e golang

    “Go Language” HomePage at: https://go.dev/ (WAS: golang.org/)

    https://vk.com/wall341179603_5279

    package main 
     
    import( 
            "net/http" 
            "fmt" 
            "log" 
    ) 
     
    func main() { 
     
    // handle `/` route 
    http.HandleFunc( "/", func( res http.ResponseWriter, req *http.Request ) { 
            fmt.Fprint( res, "Hello World! (from GoLang's net/http)" ) 
    } ) 
     
    // run server on port 443=https 80=http 
     
    // your DNS domain is not netop.info so change below accordingly 
    // these 2 files were generated by certbot 
    // https://golang.org/pkg/net/http/#ListenAndServeTLS 
     
    certFile:="/etc/letsencrypt/live/netop.info/fullchain.pem" 
    keyFile:="/etc/letsencrypt/live/netop.info/privkey.pem" 
    serverError:=http.ListenAndServeTLS(":443", certFile, keyFile, nil) 
    log.Fatal(serverError) 
     
    }
     
    
    curl https://netop.info
    https://netop.info
  • seguito concettuale della Turing Machine

    La macchina di Turing ha segnato a fondo il concetto di cosa sia un computer. I programmi venivano codificati come una lunghissima sequenza d’istruzioni. Tali sequenze vengono eseguite sequenzialmente, spostandosi in una casella a destra o a sinistra nel caso di un nastro magnetico. Nel caso di una memoria ad accesso arbitrario l’ordine di esecuzione delle istruzioni è “avanti per default” altrimenti salta verso una specifica istruzione anche non adiacente. Questo default consente ad esempio di risparmiare memoria cosa che non avviene in una mia variante RESM dove ogni istruzione ha due e sempre due istruzioni successive. Il processore e i linguaggi C-like hanno ovviamente preso la scelta del “avanti per default” + “salti qualora bisogni”. E così vengono in essere istruzioni quali il GOTO del BASIC e ancor prima il JUMP del linguaggio macchina di cui sono importanti specialmente le varianti condizionali ovvero che avvengono soltanto a particolari condizioni.

    Il GO TO, “vai a” … e la sequenza di istruzioni lineare divenne non lineare. Si pose il problema dello spaghetti code ovvero di tessiture indecifrabili di programmi che fecero nascere la programmazione strutturata che trovò la sua accettazione anche grazie al supporto nei linguaggi come Pascal e C …

    Come nota dell’autore io tendo a conservare i pezzi d’informazione che permettono una comprensione storica ed evolutiva.

    Queste sono le basi dei linguaggi e dei processori odierni. Nessuno ha mai pensato cose come rendere un programma non una sequenza d’istruzioni con salti, non una sequenza d istruzioni con salti disciplinati in gerarchie strutturate, ma un grafo di grafi ma non sarò io a introdurlo. In ogni caso vedo la necessità di mezzi visuali per definire i programmi. E non soltanto come testo decorato e “assistito” (come in VisualStudio con IntelliSense), ma come abbandono o integrazione della definizione di programmi mediante testo sequenziale, in oggetti grafici manipolabili e configurabili che esemplifichino il funzionamento del programma anche a fini di debug o refactoring. E già esistono varie notazioni e vari tipi di diagrammi ma non so perché i programmi debbano venire ancora scritti come files di testo semplice, poi elaborato.

  • 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.

  • usi di SSH

    SSH è un sistema usato per interfacciarsi verso un altro computer in rete (detto gergalmente computer host).

    Permette:

    • accesso mediante shell che può essere di root (SuperUtente) o di un utente esistente creato specificato. es: ssh dario@arkenidar.com
    • permette l’esecuzione di un comando di testo o anche grafico (usante X11 o altro server grafico)
    • ssh -t root@arkenidar.com “python3” # esegue un comando con terminale (-t come terminal) in questo caso la REPL del linguaggio CPython
    • ssh -Yf root@arkenidar.com “PathFinder” #esegue un programma grafico in questo caso un filemanager

  • pacchetti installati senza APT

    Ecco che installando Dropbox (discussa altrove la sua utilizzabilità) ho dovuto fare un:

    sudo dpkg -i dropbox_2020.03.04_amd64.deb # .deb installato

    come SuperUtente il Debian Package *.deb viene installato (-i come install).

    Questo perchè non è nei repository. Più avanti scoprirete anche altri modi usati per distribuire il software, etc. (aggiornarlo etc etc)

    Nota: in casi di dipendenze di pacchetti non risolte un “sudo apt install -f” potrebbe Fixare. Annetto anche un “sudo apt autoremove” a volte torna utile nel rimuovere i pacchetti software non più richiesti (nessun pacchetto dipende da essi)

    sudo apt install ./zoom_amd64.deb è invece un esempio di come usare apt per installare un file *.deb

  • APT e gestione software

    APT è un software di gestione del sistema che permette di:

    • installare (anche reinstallare sopra)
    • disinstallare (mantenendo o rimuovendo la configurazione)
    • aggiornare (può conoscere versioni più recenti)
    • cercare (è un database ricercabile)

    … pacchetti software di tipo .deb (Debian) che vengono immagazzinati nei repository ad esempio di Ubuntu di Canonical per poi essere distribuiti, scaricati dagli utenti.

    APT è un comando presente anche in Debian oltre che Ubuntu, una questione di parentele e derivazioni (considerando Ubuntu figlia di Debian).

    Su altri sistemi ci sono software somiglianti negli intenti e funzionalità ma sono specifici. Ad esempio “dnf” in Fedora o persino “pkg” in Termux di Android come lontana somiglianza.

    In alcuni casi può persino occuparsi del salto di versione dell’intero sistema operativo ma per questo documentatevi prima adeguatamente.

    Quindi gestione del download, delle versioni e anche della composizione armoniosa dei vari pezzi per cui ad esempio se un pacchetto ne necessita un altro lo installa o a volte più liberalmente lo suggerisce soltanto.

    Esempio:

    sudo apt install apache2 libapache2-mod-php # apache + php

    Non installate software sconosciuto ma informatevi:

    apt show apache2 # mostra info su apache2, pacchetto APT

    man apt # pagine di manuale su APT

  • “console” e frammenti

    I progettisti dei programmi informatici ma anche altri usano ancora un modo classico di interagire con il computer: la “riga di comando” (in English “command line”).

    Questa shell testuale permette di operare mediante l’immissione e l’emissione di testi.

    ad esempio:

    devo clonare un repo Git:

    git clone https://github.com/arkenidar/quiz

    devo amministrare il server:

    ssh root@arkenidar.com

    ad esempio combinandoli:

    ssh root@arkenidar.com

    e sono nel server

    cd /var/www/html

    e sono nella root del webserver

    git clone https://github.com/arkenidar/quiz

    e il quiz PHP è accessibile dal server PHP:

    https://arkenidar.com/quiz/new/questions.php?set=1

    approfondimenti: uso di SSH, uso di RSYNC, uso di server locale magari di tipo LAMP, uso di linode.com come hosting, uso di Git e di Github magari anche.

  • 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