{"id":49234,"date":"2025-09-03T01:21:11","date_gmt":"2025-09-02T23:21:11","guid":{"rendered":"https:\/\/www.lemonskin.net\/io\/?p=49234"},"modified":"2026-04-07T16:07:59","modified_gmt":"2026-04-07T14:07:59","slug":"%c2%b7-in-riproduzione-%c2%b7%c2%b7%c2%b7%c2%b7-%e2%98%85%e2%98%85%e2%98%85","status":"publish","type":"post","link":"https:\/\/www.lemonskin.net\/io\/49234\/","title":{"rendered":"In riproduzione \u00b7\u00b7\u00b7"},"content":{"rendered":"\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"730\" height=\"174\" src=\"https:\/\/www.lemonskin.net\/io\/wp-content\/uploads\/2025\/09\/In_riproduzione-Cover.png\" alt=\"\" class=\"wp-image-49236\" srcset=\"https:\/\/www.lemonskin.net\/io\/wp-content\/uploads\/2025\/09\/In_riproduzione-Cover.png 730w, https:\/\/www.lemonskin.net\/io\/wp-content\/uploads\/2025\/09\/In_riproduzione-Cover-300x72.png 300w\" sizes=\"auto, (max-width: 730px) 100vw, 730px\" \/><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\"\/>\n\n\n\n<p class=\"has-drop-cap\">Fin da quando ho iniziato a utilizzare i primi computer dotati di un minimo di capacit\u00e0 multimediali \u2013 pi\u00f9 o meno dai tempi dell&#8217;Amiga, quindi \u2013 mi sono sempre prodigato per trovare soluzioni che mi consentissero di gestire la musica in modo semplice e pratico.<\/p>\n\n\n\n<p><em>Bla bla bla&#8230;<\/em> arriviamo a un paio di giorni fa: quando lavoro al computer non riesco a farlo senza un sottofondo musicale, e quel sottofondo musicale \u00e8 sempre stato iTunes (che adesso, da qualche anno, si chiama Music). All&#8217;interno ho qualcosa come trent&#8217;anni di brani che nonostante la mia natura precisina e perfezionista non ho ancora perfettamente classificato come dico io. Parlo proprio di voti: brani bellissimi, belli, carini, cos\u00ec cos\u00ec. Quelli brutti no, perch\u00e9 li cancello. Mi \u00e8 sempre servita una utility che mi permettesse di assegnare velocemente un voto (o cambiarlo, perch\u00e9 negli anni si modificano anche i gusti personali) durante l&#8217;ascolto; passare tutte le volte dall&#8217;applicazione \u00e8 una rottura e una seccante fonte di distrazione.<\/p>\n\n\n\n<!--more-->\n\n\n\n<p>Su macOS esistono diversi programmini che si posizionano sulla barra dei menu; con un semplice clic, mostrano le informazioni sul brano in riproduzione e offrono controlli rapidi. Per\u00f2 ognuno di loro ha un approccio diverso: uno mostra solo il titolo, un altro solo la valutazione, mentre un terzo offre tutto ma non ti permette di votare. Un altro ancora ti lascia votare, ma non mostra il nome dell&#8217;album. E sebbene alcuni facciano tutto e di pi\u00f9, spesso le funzioni che ti servono sono solo una piccola parte, e non puoi nascondere il resto delle opzioni superflue.<\/p>\n\n\n\n<p>Naturalmente non mi stava bene e, dopo lungo cercare, ho trovato un programma che faceva al caso mio: <a href=\"https:\/\/xbarapp.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">Xbar<\/a>. No, non \u00e8 un&#8217;estensione musicale, \u00e8 un aggregatore di script. Va visto come una sorta di <em>playground<\/em> dove tu programmi istruzioni e lui le esegue, come i robottini motorizzati anni &#8217;80, che gli dicevi &#8220;vai avanti per tre metri, gira a destra, suona l&#8217;allarme, poi torna qui&#8221;. Xbar ti permette di <em>fare cose e vedere gente<\/em>. No, vedere gente no, ma fare cose s\u00ec. E poi molta gente non \u00e8 nemmeno tanto bella da guardare.<\/p>\n\n\n\n<p>Ok, mi sono detto. Non devo fare niente di complicato: voglio che sulla barra del menu compaia il nome del brano musicale in riproduzione e che, cliccandoci sopra, possa assegnargli una valutazione che va da zero a cinque stelline; quanto ci vorr\u00e0 mai? Un&#8217;oretta di lavoro&#8230;<\/p>\n\n\n\n<p class=\"censura\"><em>S\u00ec, il cazzo&#8230;<\/em><\/p>\n\n\n\n<p>Ho deciso di non affrontare quest&#8217;impresa da solo, ma di iniziare una collaborazione alla pari con ChatGPT. Sono convinto che queste intelligenze artificiali, se usate nel modo giusto, possano offrire un aiuto concreto per completare anche i lavori pi\u00f9 complessi.<\/p>\n\n\n\n<p>Dopo circa dieci minuti avevo la mia utility pronta e funzionante:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"730\" height=\"172\" src=\"https:\/\/www.lemonskin.net\/io\/wp-content\/uploads\/2025\/09\/In_riproduzione-Versione_1.png\" alt=\"\" class=\"wp-image-49237\" srcset=\"https:\/\/www.lemonskin.net\/io\/wp-content\/uploads\/2025\/09\/In_riproduzione-Versione_1.png 730w, https:\/\/www.lemonskin.net\/io\/wp-content\/uploads\/2025\/09\/In_riproduzione-Versione_1-300x71.png 300w\" sizes=\"auto, (max-width: 730px) 100vw, 730px\" \/><\/figure>\n\n\n\n<p>Nome della canzone, stelline a destra e, cliccandoci sopra, un menu che mi consentiva di assegnare un nuovo voto (in seguito i tre puntini li ho sostituiti con una stellina vuota \u2606). Bene, potevo fermarmi qui. E infatti&#8230;<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"730\" height=\"364\" src=\"https:\/\/www.lemonskin.net\/io\/wp-content\/uploads\/2025\/09\/In_riproduzione-Versione_2_3.png\" alt=\"\" class=\"wp-image-49238\" srcset=\"https:\/\/www.lemonskin.net\/io\/wp-content\/uploads\/2025\/09\/In_riproduzione-Versione_2_3.png 730w, https:\/\/www.lemonskin.net\/io\/wp-content\/uploads\/2025\/09\/In_riproduzione-Versione_2_3-300x150.png 300w\" sizes=\"auto, (max-width: 730px) 100vw, 730px\" \/><\/figure>\n\n\n\n<p>Nella seconda versione ho aggiunto le informazioni sui brani, nella terza ho inserito comandi veloci per controllarli. Ho messo anche l&#8217;anno tra parentesi dopo il nome dell&#8217;album, ma ero troppo pigro per rifare gli screenshot.<\/p>\n\n\n\n<p>Mi sono fermato qui? Beh&#8230;<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"alignright size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"325\" height=\"495\" src=\"https:\/\/www.lemonskin.net\/io\/wp-content\/uploads\/2025\/09\/In_riproduzione-Versione_4.png\" alt=\"\" class=\"wp-image-49239\" srcset=\"https:\/\/www.lemonskin.net\/io\/wp-content\/uploads\/2025\/09\/In_riproduzione-Versione_4.png 325w, https:\/\/www.lemonskin.net\/io\/wp-content\/uploads\/2025\/09\/In_riproduzione-Versione_4-197x300.png 197w\" sizes=\"auto, (max-width: 325px) 100vw, 325px\" \/><\/figure>\n<\/div>\n\n\n<p>Nella quarta incarnazione, che poi \u00e8 quella definitiva (almeno per quanto riguarda il menu) ho aggiunto il commento, se presente nel brano, un link per passare velocemente all&#8217;applicazione Music, o lanciarla se \u00e8 chiusa, e una piccola progress bar minimale, per sapere al volo a che punto \u00e8 la canzone.<\/p>\n\n\n\n<p>Mi sarebbe piaciuto poter aggiungere l&#8217;immagine della copertina dell&#8217;album ma a quanto pare non \u00e8 possibile (Xbar dialoga con le applicazioni tramite AppleScript, una sorta di linguaggio interno di MacOS, ma non pu\u00f2 addentrarsi troppo in profondit\u00e0 dentro i loro database). Pazienza&#8230; in ogni caso non avrebbe aggiunto molto e occupato spazio prezioso sullo schermo.<\/p>\n\n\n\n<p>Bene, l&#8217;utility era completa, potevo fare tutto quello che mi serviva, quindi era il momento giusto per fermarsi.<\/p>\n\n\n\n<p>E infatti non mi sono fermato.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"730\" height=\"213\" src=\"https:\/\/www.lemonskin.net\/io\/wp-content\/uploads\/2025\/09\/In_riproduzione-Colori.png\" alt=\"\" class=\"wp-image-49242\" srcset=\"https:\/\/www.lemonskin.net\/io\/wp-content\/uploads\/2025\/09\/In_riproduzione-Colori.png 730w, https:\/\/www.lemonskin.net\/io\/wp-content\/uploads\/2025\/09\/In_riproduzione-Colori-300x88.png 300w\" sizes=\"auto, (max-width: 730px) 100vw, 730px\" \/><\/figure>\n\n\n\n<p>Per prima cosa era inutile mostrare le stelline vuote sulla barra. Dopo tanti anni ho ormai imparato che sono al massimo cinque, quindi niente informazioni superflue. Ne utilizzer\u00f2 una vuota solo quando un brano non ha ancora ricevuto un voto, e gli sar\u00e0 assegnato il colore bianco. I voti seguiranno uno schema di colori che mi aiuter\u00e0 a capire quanto un brano mi piace. La singola stella in realt\u00e0 non mi serve per classificare i brani brutti; non ha senso tenere i brani brutti (non li aggiungo neanche, a dirla tutta). La utilizzo invece come un mio codice personale per segnare le nuove canzoni che ho ascoltato e che al momento non mi convincono del tutto, per poter dare loro una seconda possibilit\u00e0. Se non passano il secondo ascolto (o il terzo, o il quarto\u2026 non sono bravo a capire subito cosa mi piace), le elimino. Quindi quando vedo rosso (letteralmente, non quando sono incazzatissimo) so che devo prestare particolare attenzione a quello che Music sta riproducendo. Il colore grigio lo uso quando il brano \u00e8 in pausa.<\/p>\n\n\n\n<p>Bene, avevo fatto tutto e tutto era perfetto. Non c&#8217;era davvero pi\u00f9 nulla da aggiungere per cui mi sono ferm&#8230; No, non mi sono fermato.<\/p>\n\n\n\n<p>Ogni tanto uso il campo &#8220;commento&#8221; per inserire annotazioni importanti, come curiosit\u00e0 sulla canzone, oppure tag che mi permettono di includerla in una determinata playlist. Se \u00e8 valorizzato lo vedo nel menu. Per\u00f2, se non apro il menu, come so che c&#8217;\u00e8?<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"730\" height=\"41\" src=\"https:\/\/www.lemonskin.net\/io\/wp-content\/uploads\/2025\/09\/In_riproduzione-Commento.png\" alt=\"\" class=\"wp-image-49243\" srcset=\"https:\/\/www.lemonskin.net\/io\/wp-content\/uploads\/2025\/09\/In_riproduzione-Commento.png 730w, https:\/\/www.lemonskin.net\/io\/wp-content\/uploads\/2025\/09\/In_riproduzione-Commento-300x17.png 300w\" sizes=\"auto, (max-width: 730px) 100vw, 730px\" \/><\/figure>\n\n\n\n<p>Lo so perch\u00e9 compare quel pallino microscopico a sinistra del nome. Se c&#8217;\u00e8, allora c&#8217;\u00e8 anche un commento.<\/p>\n\n\n\n<p>Bene, basta, ho finito, possiamo chiudere&#8230;<\/p>\n\n\n\n<p>Aspetta, e della micro <em>progress bar<\/em> non ne parlo?<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"730\" height=\"41\" src=\"https:\/\/www.lemonskin.net\/io\/wp-content\/uploads\/2025\/09\/In_riproduzione-Micro_progress_bar.png\" alt=\"\" class=\"wp-image-49244\" srcset=\"https:\/\/www.lemonskin.net\/io\/wp-content\/uploads\/2025\/09\/In_riproduzione-Micro_progress_bar.png 730w, https:\/\/www.lemonskin.net\/io\/wp-content\/uploads\/2025\/09\/In_riproduzione-Micro_progress_bar-300x17.png 300w\" sizes=\"auto, (max-width: 730px) 100vw, 730px\" \/><\/figure>\n\n\n\n<p>Ma certo che ne parlo, \u00e8 forse la caratteristica pi\u00f9 figa di tutto il lavoro!<\/p>\n\n\n\n<p>Ne avevo messa una grande all&#8217;interno del menu, ed \u00e8 utile perch\u00e9 mi d\u00e0 il tempo trascorso e quello rimanente, ma \u00e8 per l&#8217;appunto dentro il menu. Allora ne ho fatta una sempre visibile. \u00c8 molto semplice, ci sono in tutto cinque puntini: se ne vedo tre illuminati, come nell&#8217;immagine qui sopra, significa che sono a met\u00e0 canzone; se ce ne sono cinque, il brano sta finendo come l\u2019estate, e via dicendo. Adoro osservare quei puntini che spuntano come funghetti. :)<\/p>\n\n\n\n<p>Ok, dopo questa cretinata mi sono fermato oppure andremo avanti di questo passo ancora per una settimana?<\/p>\n\n\n\n<p>S\u00ec, mi sono fermato. :)<\/p>\n\n\n\n<p>Raccontata in questo modo, la mia piccola impresa potrebbe apparire tutta rose e fiori. Quello che non ho menzionato, anche perch\u00e9 spero presto di dimenticarlo, \u00e8 il tempo spropositato che ho impiegato per domare e farmi ubbidire da ChatGPT. Non ho familiarit\u00e0 con AppleScript, e tantomeno con il linguaggio di Xbar, che \u00e8 Bash \u2013 uno script di Shell di Unix che conosco ancora meno.<\/p>\n\n\n\n<p>No, davvero, \u00e8 stata follia pura. Nonostante ChatGPT comprenda molto bene le tue esigenze e riesca a scrivere funzioni piuttosto complesse, la sfida pi\u00f9 grande \u00e8 stata mantenerla concentrata. Basta un attimo per mandare tutto all&#8217;aria: ti scrive un codice che funziona, ma quando passi al blocco successivo, il primo smette di funzionare. Quando le spieghi l&#8217;errore, ti risponde: &#8220;Ah, s\u00ec, mi sono sbagliata, ora lo correggo&#8221;, ma a quel punto \u00e8 la seconda funzione che smette di andare. E se cerchi di risolvere tutto insieme, ti cambia il codice sotto il naso, e a un certo punto ti accorgi che la prima funzione \u00e8 addirittura sparita, e ti senti rispondere: &#8220;Oops, che sbadata!&#8221;, e cos\u00ec via.<\/p>\n\n\n\n<p>Non hai idea su quante versioni di codice ho dovuto mettere mano, spesso arrivando al punto di dover buttare tutto e ricominciare da capo. Semplicemente non puoi fidarti ciecamente di queste intelligenze artificiali, n\u00e9 lasciarle agire senza controllo. L&#8217;unica strategia che funziona \u00e8 concentrarsi su piccoli blocchi di codice, per poi integrarli manualmente nel progetto principale.<\/p>\n\n\n\n<p>Ah, e non ho fatto cenno delle idio(t)sincrasie di Apple Music, un&#8217;applicazione che da sempre \u00e8 afflitta da bug e decisioni discutibili che Apple non ha mai risolto. Un esempio concreto \u00e8 la gestione delle valutazioni: quando aggiungi un nuovo brano alla libreria, ovviamente non ha un voto. Se per\u00f2 decidi di metterlo, poi non lo puoi pi\u00f9 rimuovere. Puoi cambiarlo, certo, ma solo da una a cinque stelle. Nelle versioni precedenti eri libero di fare quello che volevi, ora non pi\u00f9 (e non se ne capisce il motivo).<\/p>\n\n\n\n<p>Inoltre, nell&#8217;applicazione, le stelline del voto sono solitamente di colore viola. Se provi a scorrere col mouse per portarle a zero, il programma ne rimette forzatamente una, ma la visualizza in nero. Quindi ci ritroviamo con canzoni con una stellina rossa e canzoni con una stellina nera. A me sembra una <span class=\"censura\">cagata pazzesca<\/span>. Il problema poi \u00e8 che per AppleScript una stella \u00e8 una stella, indipendentemente dal suo colore.<\/p>\n\n\n\n<p>Come ho risolto? Ho ideato una soluzione creativa ma funzionante: quando imposto zero stelle tramite lo script, scrivo un identificatore univoco del brano (titolo + autore + album) in un file di supporto. In questo modo, quando lo script parte, controlla se il brano ha una sola stella e, in caso affermativo, verifica se \u00e8 presente nel file. Se lo trova, lo interpreta come un brano senza voto. Quando poi gli assegno un voto, lo script cancella il brano dal file. In ogni caso, grazie Apple!<\/p>\n\n\n\n<p>Ci sono state numerose montagne da scalare, come gestire lo stato di Music: quando \u00e8 in esecuzione, quando \u00e8 chiuso, quando non ha brani selezionati, quando si trova in pausa.<\/p>\n\n\n\n<p>Insomma, un viaggio decisamente impegnativo durato una trentina di ore molto intense. Ma che alla fine ha dato i suoi risultati. Dai, brava ChatGPT, tutto sommato. :)<\/p>\n\n\n\n<p>Se ti interessa il codice da usare con Xbar \u2013 e che potrebbe presentare qualche bug qui e l\u00e0 perch\u00e9 al momento l&#8217;ho testato soltanto per qualche ora (ma finora tutto bene) \u2013 puoi scaricarlo <a onclick=\"CopiaClip(document.getElementById('Xbar_NowPlaying'),'Copiato: Script Xbar')\" href=\"javascript:void(0);\">cliccando qui<\/a>.<\/p>\n\n\n\n<textarea id=\"Xbar_NowPlaying\" readonly=\"\" hidden>#!\/bin\/bash\n\n# 2025 Lock (e ChatGPT)\nVersione=&#8221;v2.4 &#8211; 28\/09\/2025&#8243;\n\n# Now Playing per Apple Music \u2013 \u00a92025 Lock e ChatGPT\nexport LANG=it_IT.UTF-8\n\n# &#8212; FILE CONFIGURAZIONE &#8212;\nCONFIG_FILE=&#8221;$HOME\/Library\/Application Support\/xbar\/MusicConfig.txt&#8221;\nmkdir -p &#8220;$(dirname &#8220;$CONFIG_FILE&#8221;)&#8221;\n[ ! -f &#8220;$CONFIG_FILE&#8221; ] &#038;&#038; echo &#8220;SCHEMA_COLORI=1&#8221; > &#8220;$CONFIG_FILE&#8221;\n\n\n# &#8212; UTILI &#8212;\nvercomp () {\n    if [[ $1 == &#8220;$2&#8221; ]]; then return 0; fi\n    local IFS=.\n    local i ver1=($1) ver2=($2)\n    for ((i=${#ver1[@]}; i<${#ver2[@]}; i++)); do ver1[i]=0; done\n    for ((i=0; i<${#ver1[@]}; i++)); do\n        if [[ -z ${ver2[i]} ]]; then ver2[i]=0; fi\n        if ((10#${ver1[i]} < 10#${ver2[i]})); then return 1; fi\n        if ((10#${ver1[i]} > 10#${ver2[i]})); then return 2; fi\n    done\n    return 0\n}\n\ntruncate_middle() {\n    local str=&#8221;$1&#8243;\n    local max_len=&#8221;$2&#8243;\n    local str_len=${#str}\n    if [ &#8220;$str_len&#8221; -le &#8220;$max_len&#8221; ]; then\n        echo &#8220;$str&#8221;\n        return\n    fi\n    local keep=$(( (max_len &#8211; 3) \/ 2 ))\n    local start=&#8221;${str:0:$keep}&#8221;\n    local end=&#8221;${str: -$keep}&#8221;\n    echo &#8220;${start} \u2026 ${end}&#8221;\n}\n\n# &#8212; PARAMETRI SPECIALI &#8212;\ncase $1 in\n    &#8216;launch&#8217;) osascript -e &#8220;tell application \\&#8221;Music\\&#8221; to activate&#8221;; exit ;;\n    &#8216;random_launch&#8217;) \n        osascript -e &#8221;\n        tell application \\&#8221;Music\\&#8221;\n            set lib to library playlist 1\n            if (count of tracks of lib) > 0 then\n                set shuffle enabled to true\n                set t to some track of lib\n                play t\n            end if\n        end tell&#8221;; exit ;;\n    &#8216;schema1&#8217;) sed -i &#8221; &#8220;1s\/.*\/SCHEMA_COLORI=1\/&#8221; &#8220;$CONFIG_FILE&#8221;; exit ;;\n    &#8216;schema2&#8217;) sed -i &#8221; &#8220;1s\/.*\/SCHEMA_COLORI=2\/&#8221; &#8220;$CONFIG_FILE&#8221;; exit ;;\n    &#8216;schema3&#8242;) sed -i &#8221; &#8220;1s\/.*\/SCHEMA_COLORI=3\/&#8221; &#8220;$CONFIG_FILE&#8221;; exit ;;\nesac\n\n# &#8212; LETTURA CONFIGURAZIONE &#8212;\nSCHEMA_COLORI=$(head -1 &#8220;$CONFIG_FILE&#8221; | cut -d= -f2)\nZERO_FILE=&#8221;$CONFIG_FILE&#8221;  # useremo righe rimanenti per brani zero\n\n# &#8212; CONTROLLO MUSIC &#8212;\nis_running=$(osascript -e &#8220;application \\&#8221;Music\\&#8221; is running&#8221; 2>\/dev\/null)\nif [ &#8220;$is_running&#8221; = &#8220;false&#8221; ]; then\n    echo &#8220;\u266b&#8221;\n    echo &#8220;&#8212;&#8221;\n    echo &#8220;Music non \u00e8 in esecuzione&#8221;\n    echo &#8220;\u21c4 Brano casuale | bash=&#8217;$0&#8242; param1=random_launch terminal=false&#8221;\n    echo &#8220;\u2192 Musica | bash=&#8217;$0&#8242; param1=launch terminal=false&#8221;\n    exit\nfi\n\ntrack=$(osascript -e &#8220;tell application \\&#8221;Music\\&#8221; to name of current track as string&#8221; 2>\/dev\/null)\nif [ -z &#8220;$track&#8221; ]; then\n    echo &#8220;\u266b&#8221;\n    echo &#8220;&#8212;&#8221;\n    echo &#8220;Non ci sono brani selezionati&#8221;\n    echo &#8220;\u21c4 Brano casuale | bash=&#8217;$0&#8242; param1=random_launch terminal=false&#8221;\n    echo &#8220;\u2192 Musica | bash=&#8217;$0&#8242; param1=launch terminal=false&#8221;\n    exit\nfi\n\n# &#8212; RACCOLTA INFO TRACK &#8212;\nIFS=$&#8217;\\t&#8217; read -r player_state artist album year kind rating bitrate comment plays tracknum trackcount discnum disccount genre size <<< \"$(\nosascript -e '\ntell application \"Music\"\n    try\n        set ps to player state as string\n\n        set ar to \"\"\n        if exists current track then set ar to artist of current track as string\n\n        set al to \"\"\n        if exists current track then set al to album of current track as string\n\n        set yr to \"\"\n        if exists current track then set yr to year of current track as string\n\n        set k to \"\"\n        if exists current track then set k to kind of current track as string\n\n        set r to \"0\"\n        if exists current track then set r to rating of current track as string\n\n        set br to 0\n        if exists current track then set br to bit rate of current track as integer\n\n        set c to \"\"\n        if exists current track then\n            set c to comment of current track as string\n            set c to do shell script \"echo \" &#038; quoted form of c &#038; \" | base64\"\n        end if\n\n        -- Nuovi campi\n        set pl to 0\n        if exists current track then set pl to played count of current track as integer\n\n        set tn to 0\n        if exists current track then set tn to track number of current track as integer\n\n        set tc to 0\n        if exists current track then set tc to track count of current track as integer\n\n        set dn to 0\n        if exists current track then set dn to disc number of current track as integer\n\n        set dc to 0\n        if exists current track then set dc to disc count of current track as integer\n\n        set g to \"\"\n        if exists current track then set g to genre of current track as string\n\n        set sz to 0\n        if exists current track then set sz to size of current track as integer\n\n        return ps &#038; \"\\t\" &#038; ar &#038; \"\\t\" &#038; al &#038; \"\\t\" &#038; yr &#038; \"\\t\" &#038; k &#038; \"\\t\" &#038; r &#038; \"\\t\" &#038; br &#038; \"\\t\" &#038; c &#038; \"\\t\" &#038; pl &#038; \"\\t\" &#038; tn &#038; \"\\t\" &#038; tc &#038; \"\\t\" &#038; dn &#038; \"\\t\" &#038; dc &#038; \"\\t\" &#038; g &#038; \"\\t\" &#038; sz\n\n    on error\n        return \"\"\n    end try\nend tell\n'\n)\"\n\ncomment=$(echo \"$comment\" | base64 --decode 2>\/dev\/null)\nposition=$(osascript -e &#8220;tell application \\&#8221;Music\\&#8221; to player position as integer&#8221;)\nduration=$(osascript -e &#8220;tell application \\&#8221;Music\\&#8221; to duration of current track as integer&#8221;)\n\nSONG_ID=&#8221;$track &#8211; $artist &#8211; $album&#8221;\n\n# FORZA RATING A 0 SE IL BRANO \u00c8 NEL FILE DEI VOTI\nif grep -Fxq &#8220;$SONG_ID&#8221; &#8220;$VOTES_FILE&#8221; 2>\/dev\/null; then\n    rating=0\nfi\n\n# &#8212; CALCOLO STELLE &#8212;\ncase $rating in\n    0)  FILLED=0 ;;\n    20) FILLED=1 ;;\n    40) FILLED=2 ;;\n    60) FILLED=3 ;;\n    80) FILLED=4 ;;\n    100) FILLED=5 ;;\n    *)  FILLED=0 ;;\nesac\n# Salva FILLED per l\u2019uso nel menu delle stelle\nFILLED_STARS=$FILLED\n\n# &#8212; GESTIONE VOTI &#8212;\ncase $1 in\n    &#8216;zero&#8217;) osascript -e &#8220;tell application \\&#8221;Music\\&#8221; to set rating of current track to 1&#8243;; grep -vFx &#8220;$SONG_ID&#8221; &#8220;$ZERO_FILE&#8221; 2>\/dev\/null > &#8220;${ZERO_FILE}.tmp&#8221;; mv &#8220;${ZERO_FILE}.tmp&#8221; &#8220;$ZERO_FILE&#8221;; echo &#8220;$SONG_ID&#8221; >> &#8220;$ZERO_FILE&#8221;; exit ;;\n    &#8216;one&#8217;) osascript -e &#8220;tell application \\&#8221;Music\\&#8221; to set rating of current track to 20&#8243;; sed -i &#8221; &#8220;\/^$SONG_ID$\/d&#8221; &#8220;$ZERO_FILE&#8221; 2>\/dev\/null; exit ;;\n    &#8216;two&#8217;) osascript -e &#8220;tell application \\&#8221;Music\\&#8221; to set rating of current track to 40&#8243;; sed -i &#8221; &#8220;\/^$SONG_ID$\/d&#8221; &#8220;$ZERO_FILE&#8221; 2>\/dev\/null; exit ;;\n    &#8216;three&#8217;) osascript -e &#8220;tell application \\&#8221;Music\\&#8221; to set rating of current track to 60&#8243;; sed -i &#8221; &#8220;\/^$SONG_ID$\/d&#8221; &#8220;$ZERO_FILE&#8221; 2>\/dev\/null; exit ;;\n    &#8216;four&#8217;) osascript -e &#8220;tell application \\&#8221;Music\\&#8221; to set rating of current track to 80&#8243;; sed -i &#8221; &#8220;\/^$SONG_ID$\/d&#8221; &#8220;$ZERO_FILE&#8221; 2>\/dev\/null; exit ;;\n    &#8216;five&#8217;) osascript -e &#8220;tell application \\&#8221;Music\\&#8221; to set rating of current track to 100&#8243;; sed -i &#8221; &#8220;\/^$SONG_ID$\/d&#8221; &#8220;$ZERO_FILE&#8221; 2>\/dev\/null; exit ;;\n    &#8216;playpause&#8217;) osascript -e &#8220;tell application \\&#8221;Music\\&#8221; to playpause&#8221;; exit ;;\n    &#8216;next&#8217;) osascript -e &#8220;tell application \\&#8221;Music\\&#8221; to next track&#8221;; exit ;;\n    &#8216;prev&#8217;) osascript -e &#8220;tell application \\&#8221;Music\\&#8221; to previous track&#8221;; exit ;;\nesac\n\n# &#8212; TRUNCATE TITOLO &#8212;\nMAX_TITLE_LENGTH=40\ntrack_bar=&#8221;$track&#8221;\n[ -n &#8220;$comment&#8221; ] &#038;&#038; track_bar=&#8221;\u00b7 $track_bar&#8221;\ntrack_bar=$(truncate_middle &#8220;$track_bar&#8221; $MAX_TITLE_LENGTH)\n\n# &#8212; STELLE ANSI COLORATE &#8212;\nhex2rgb() {\n  local hex=&#8221;${1#\\#}&#8221;   # rimuove &#8220;#&#8221;\n  local dec=$((16#$hex))\n  local r=$(( (dec>>16) &#038; 255 ))\n  local g=$(( (dec>>8) &#038; 255 ))\n  local b=$(( dec &#038; 255 ))\n  echo &#8220;$r;$g;$b&#8221;\n}\nrgb2hex() {\n    local r g b\n    # sostituisci eventuali ; con ,\n    local in=&#8221;${1\/\/;\/,}&#8221;\n    IFS=&#8217;,&#8217; read -r r g b <<< \"$in\"\n    printf \"#%02x%02x%02x\" \"$r\" \"$g\" \"$b\"\n}\n\n\n# --- colore stelle ---\nSTAR_COLOR[0]=$(hex2rgb \"#ffffaa\")  # 0 stelle \u2192 giallo chiaro\nSTAR_COLOR[1]=$(hex2rgb \"#f25858\")  # 1 stella \u2192 rosso\nSTAR_COLOR[2]=$(hex2rgb \"#e57617\")  # 2 stelle \u2192 arancione\nSTAR_COLOR[3]=$(hex2rgb \"#17b18c\")  # 3 stelle \u2192 acquamarina equilibrata\nSTAR_COLOR[4]=$(hex2rgb \"#5c9edb\")  # 4 stelle \u2192 azzurro pieno, meno accecante\nSTAR_COLOR[5]=$(hex2rgb \"#b663dd\")  # 5 stelle \u2192 viola-magentato leggero\n\n# --- MINI PROGRESS BAR ---\nBAR=\"\"\nif [ -n \"$duration\" ] &#038;&#038; [ $duration -gt 0 ]; then\n    BAR_LEN=5\n    thresholds=(10 30 49 70 90)\n    FILLED_BAR=0\n    for t in \"${thresholds[@]}\"; do\n        [ $position -ge $((duration * t \/ 100)) ] &#038;&#038; ((FILLED_BAR++))\n    done\n    EMPTY_BAR=$((BAR_LEN - FILLED_BAR))\n    BAR=\"[\"\n    for ((i=0;i<FILLED_BAR;i++)); do BAR+=\"\u00b7\"; done\n    for ((i=0;i<EMPTY_BAR;i++)); do BAR+=\" \"; done\n    BAR+=\"]\"\nfi\n\n\n# --- ELEMENTI PULITI ---\n# Puntino solo se c'\u00e8 commento\nif [ -n \"$comment\" ]; then\n    PUNTINO=\"\u00b7\"\nelse\n    PUNTINO=\"\"\nfi\n\n# Titolo accorciato\nTITOLO=\"$track\"\n[ -n \"$comment\" ] &#038;&#038; TITOLO=\"$PUNTINO $TITOLO\"\nTITOLO=$(truncate_middle \"$TITOLO\" $MAX_TITLE_LENGTH)\n\n\n# Stelle \"pulite\"\nif [ $FILLED_STARS -eq 0 ]; then\n    STARS_PLAIN=\"\u2606\"\nelse\n    STARS_PLAIN=$(printf '\u2605%.0s' $(seq 1 $FILLED_STARS))\nfi\n\n# Applica sempre il colore, anche per zero stelle\nSTARS_COLOR=\"\\033[38;2;$(rgb2hex \"${STAR_COLOR[$FILLED_STARS]}\")m$STARS_PLAIN\\033[0m\"\n\n\n\n# --- FUNZIONE PER COLORARE TESTO ---\napply_color() {\n    local text=\"$1\"\n    local stars=\"$2\"\n    local schema=\"$3\"\n    local filled=\"$4\"\n    local player_state=\"$5\"\n\n    local TITLE_OUT=\"$text\"\n    local BAR_OUT=\"$BAR\"\n    local STARS_OUT=\"$stars\"\n    local COLOR=\"\"\n\n    case \"$schema\" in\n        1)  # Monocromatico \u2192 niente colore\n            STARS_OUT=\"$stars\"\n            ;;\n        2)  # Solo stelle colorate\n            STARS_OUT=\"\\033[38;2;${STAR_COLOR[$filled]}m$stars\\033[0m\"\n            ;;\n        3)  # Tutto colorato\n            TITLE_OUT=\"\\033[38;2;${STAR_COLOR[$filled]}m$text\\033[0m\"\n            BAR_OUT=\"\\033[38;2;${STAR_COLOR[$filled]}m$BAR\\033[0m\"\n            STARS_OUT=\"\\033[38;2;${STAR_COLOR[$filled]}m$stars\\033[0m\"\n            ;;\n    esac\n\n    # Sovrascrivi tutto in grigio se in pausa o fermo\n    if [ \"$player_state\" = \"paused\" ] || [ \"$player_state\" = \"stopped\" ]; then\n        COLOR=\"#b6b6c2\"\n        TITLE_OUT=\"&#x23f8; $text\"\n        BAR_OUT=\"$BAR\"\n        STARS_OUT=\"$stars\"\n    fi\n\n    echo -e \"$TITLE_OUT $BAR_OUT $STARS_OUT${COLOR:+ | color=$COLOR}\"\n}\n\n\n# --- STAMPA BARRA PRINCIPALE ---\necho \"$(apply_color \"$TITOLO\" \"$STARS_PLAIN\" \"$SCHEMA_COLORI\" \"$FILLED\" \"$player_state\")\"\n\n\n# --- PROGRESS BAR RESIDUA ---\nif [ -n \"$duration\" ] &#038;&#038; [ $duration -gt 0 ]; then\n    REMAIN=$((duration - position))\n    BAR_LEN=50\n    FILLED=$(( position * BAR_LEN \/ duration ))\n    [ $FILLED -gt $BAR_LEN ] &#038;&#038; FILLED=$BAR_LEN\n    EMPTY=$(( BAR_LEN - FILLED ))\n    RES_BAR=\"[\"\n    for ((i=0;i<FILLED;i++)); do RES_BAR+=\"\u00b7\"; done\n    for ((i=0;i<EMPTY;i++)); do RES_BAR+=\" \"; done\n    RES_BAR+=\"]\"\nfi\n\n\n# --- MENU ---\n\n# --- PROGRESS BAR DINAMICA ---\nMAX_LEN=55; MIN_LEN=25\nlen_track=${#track}; len_artist=${#artist}; len_album=$(( ${#album}+(${year:+3+${#year}}) )); len_comment=${#comment}\n# larghezza barra calcolata considerando anche il commento\nBAR_WIDTH=$(( len_track>len_artist ? len_track : len_artist )); (( len_album>BAR_WIDTH )) &#038;&#038; BAR_WIDTH=$len_album\n(( len_comment>BAR_WIDTH )) &#038;&#038; BAR_WIDTH=$len_comment\n(( BAR_WIDTH>MAX_LEN )) &#038;&#038; BAR_WIDTH=$MAX_LEN; (( BAR_WIDTH<MIN_LEN )) &#038;&#038; BAR_WIDTH=$MIN_LEN\nFILLED=$(( position*BAR_WIDTH\/duration )); (( FILLED>BAR_WIDTH )) &#038;&#038; FILLED=$BAR_WIDTH\nRES_BAR=&#8221;[$(printf &#8216;%*s&#8217; $FILLED &#8221; | tr &#8216; &#8216; &#8216;\u00b7&#8217;)$(printf &#8216;%*s&#8217; $((BAR_WIDTH-FILLED)) &#8221;)]&#8221;\necho &#8216;&#8212;&#8216;\nprintf &#8216;%d:%02d %s %d:%02d\\n&#8217; $((position\/60)) $((position%60)) &#8220;$RES_BAR&#8221; $((REMAIN\/60)) $((REMAIN%60))\n\n\n# &#8212; Info aggiuntive (dentro progress bar) &#8212;\n\n# Traccia + Disco su una sola riga\nif [ &#8220;$trackcount&#8221; -gt 0 ]; then\n    traccia=&#8221;Traccia $tracknum di $trackcount&#8221;\nelse\n    traccia=&#8221;Traccia $tracknum&#8221;\nfi\nif [ &#8220;$disccount&#8221; -gt 0 ]; then\n    disco=&#8221;\/ Disco: $discnum di $disccount&#8221;\nelse\n    disco=&#8221;\/ Disco: $discnum&#8221;\nfi\necho &#8220;&#8211;$traccia $disco&#8221;\necho &#8220;&#8211;Riproduzioni: $plays&#8221;\necho &#8220;&#8211;Genere: $genre&#8221;\nif [ -n &#8220;$bitrate&#8221; ] &#038;&#038; [ &#8220;$bitrate&#8221; -gt 0 ]; then\n    echo &#8220;&#8211;Qualit\u00e0: $kind ($bitrate kbps)&#8221;\nelse\n    echo &#8220;&#8211;Qualit\u00e0: $kind&#8221;\nfi\nif [ &#8220;$size&#8221; -gt 0 ]; then\n    echo &#8220;&#8211;Dimensione: $((size\/1024\/1024)) MB&#8221;\nfi\n\n\n# Funzione per stampare una voce lunga con a capo automatico\nprint_multiline() {\n    local text=&#8221;$1&#8243;\n    local width=50   # larghezza massima prima del ritorno a capo\n    echo &#8220;$text&#8221; | fold -s -w &#8220;$width&#8221;\n}\necho &#8220;&#8212;&#8221;\nprint_multiline &#8220;$track&#8221;\nprint_multiline &#8220;$artist&#8221;\nif [ -n &#8220;$year&#8221; ]; then\n    print_multiline &#8220;$album ($year)&#8221;\nelse\n    print_multiline &#8220;$album&#8221;\nfi\n\n# &#8212; MENU VOTI &#8212;\necho &#8220;&#8212;&#8221;\nparams=(zero one two three four five)\nSTAR_STRINGS=(&#8220;\u2606&#8221; &#8220;\u2605&#8221; &#8220;\u2605\u2605&#8221; &#8220;\u2605\u2605\u2605&#8221; &#8220;\u2605\u2605\u2605\u2605&#8221; &#8220;\u2605\u2605\u2605\u2605\u2605&#8221;)\nfor i in {0..5}; do\n    stars=&#8221;${STAR_STRINGS[$i]}&#8221;\n    param=&#8221;${params[$i]}&#8221;\n    color=&#8221;&#8221;\n    if [ &#8220;$i&#8221; -eq &#8220;$FILLED_STARS&#8221; ]; then\n        # riconverte da rgb a hex\n        color=$(rgb2hex &#8220;${STAR_COLOR[$i]}&#8221;)\n    fi\n    echo &#8220;$stars | bash=&#8217;$0&#8242; param1=$param refresh=true terminal=false${color:+ color=$color}&#8221;\ndone\n\n\n# &#8212; APERTURA MUSICA &#8212;\necho &#8220;&#8212;&#8221;\necho &#8220;\u2192 Musica | bash=&#8217;$0&#8242; param1=launch terminal=false&#8221;\n\n\n# &#8212; CONTROLLI &#8212;\necho &#8220;&#8212;&#8221;\nif [ &#8220;$player_state&#8221; = &#8220;playing&#8221; ]; then\n    echo &#8220;&#x23f8; Pausa | bash=&#8217;$0&#8242; param1=playpause terminal=false&#8221;\nelse\n    echo &#8220;&#x25b6; Riproduci | bash=&#8217;$0&#8242; param1=playpause terminal=false&#8221;\nfi\necho &#8220;\u21c4 Brano casuale | bash=&#8217;$0&#8242; param1=random_launch terminal=false&#8221;\necho &#8220;&#8212;&#8221;\necho &#8220;&#x23ee; Traccia precedente | bash=&#8217;$0&#8242; param1=prev terminal=false&#8221;\necho &#8220;&#x23ed; Traccia successiva | bash=&#8217;$0&#8242; param1=next terminal=false&#8221;\n\n\n# &#8212; COMMENTO &#8212;\nif [ -n &#8220;$comment&#8221; ]; then\n    echo &#8220;&#8212;&#8221;\n    # echo &#8220;Commento:&#8221;\n    echo &#8220;$comment&#8221; | fold -s -w 60 | while IFS= read -r line; do\n        echo &#8221;   $line&#8221;\n    done\nfi\n\n\n# &#8212; SOTTOMENU COLORI &#8212;\nSTELLA_VUOTA=0  # 1 = mostra stella vuota, 0 = no\necho &#8220;&#8212;&#8221;\necho &#8220;Schema colori&#8221;\nlabels=(&#8220;Monocromatico&#8221; &#8220;Misto&#8221; &#8220;Colori&#8221;)\n\nfor i in 1 2 3; do\n    check=$([ &#8220;$SCHEMA_COLORI&#8221; -eq &#8220;$i&#8221; ] &#038;&#038; echo &#8221; \u2713&#8221;)\n    STARS_MENU=$([ &#8220;$i&#8221; -eq 1 ] &#038;&#038; echo &#8220;$([ &#8220;$STELLA_VUOTA&#8221; -eq 1 ] &#038;&#038; echo &#8220;\u2606\u2605\u2605\u2605\u2605\u2605&#8221; || echo &#8220;\u2605\u2605\u2605\u2605\u2605&#8221;)&#8221; || { STARS_MENU=$([ &#8220;$STELLA_VUOTA&#8221; -eq 1 ] &#038;&#038; echo -ne &#8220;\\033[38;2;${STAR_COLOR[0]}m\u2606\\033[0m&#8221;); for j in {1..5}; do STARS_MENU+=$(printf &#8216;\\033[38;2;%sm\u2605\\033[0m&#8217; &#8220;${STAR_COLOR[$j]}&#8221;); done; echo &#8220;$STARS_MENU&#8221;; })\n    TEXT_MENU=&#8221;${labels[$((i-1))]}$check&#8221;\n    [ &#8220;$i&#8221; -eq 3 ] &#038;&#038; TEXT_MENU=&#8221;\\033[38;2;${STAR_COLOR[5]}m${TEXT_MENU}\\033[0m&#8221;\n    echo &#8220;&#8211;$STARS_MENU $TEXT_MENU | bash=&#8217;$0&#8242; param1=schema$i terminal=false&#8221;\ndone\n\n# &#8212; VERSIONE &#8212;\necho &#8220;&#8212;&#8211;&#8221;\necho &#8220;&#8211;$Versione&#8221;\n<\/textarea>\n\n\n\n<p>Occhio per\u00f2, non \u00e8 per deboli di cuore.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"aggiornamento\">Aggiornamento: 4 settembre 2025<\/h2>\n\n\n\n<p>Sono tornato a rivedere il codice a distanza di sole ventiquattro ore.<\/p>\n\n\n\n<p>Un&#8217;altra delle tante <span class=\"censura\">cazzate<\/span> di MacOS \u00e8 che ad Apple piace decidere per noi, e imporci cose di cui avremmo fatto volentieri a meno. Nelle ultime incarnazioni del sistema operativo la barra del menu \u00e8 divenuta un cavallo imbizzarrito, al di fuori di ogni controllo da parte degli utenti. A livello estetico si pu\u00f2 scegliere se avere un tema chiaro e uno scuro, e questo influenza l&#8217;aspetto di molti elementi quali il colore dei menu o lo sfondo del dock. Ma, indipendentemente da questo, a seconda dell&#8217;immagine che scegliamo di avere come sfondo, la barra cambia dinamicamente colore per poter essere sempre visibile. Questa non \u00e8 necessariamente una brutta cosa ma se a me piace il tema bianco e voglio sempre la barra bianca mi attacco al tram. Non solo, le applicazioni a tutto schermo hanno sempre la barra nera, perch\u00e9 sua maest\u00e0 la reginetta del ballo Tim Cook ha voluto cos\u00ec.<\/p>\n\n\n\n<p>Ora, Xbar \u00e8 in grado di adattarsi a queste cavalcate selvagge, usando automaticamente un font nero su una barra chiara e uno bianco su una scura. Ma non offre la possibilit\u00e0 di passare questo parametro ai suoi script. Di conseguenza, se uso un giallo vivace, meraviglioso su una barra nera, su una chiara diventa totalmente illeggibile. Di conseguenza i colori vibranti che avevo scelto per le mie stelline si sono rivelati un disastro in determinate circostanze. Li ho dovuti quindi scurire e saturare, trovando un compromesso che potesse garantire la leggibilit\u00e0 in ogni situazione. Il risultato \u00e8 funzionale.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"730\" height=\"519\" src=\"https:\/\/www.lemonskin.net\/io\/wp-content\/uploads\/2025\/09\/In_riproduzione-Nuovo_menu.jpg\" alt=\"\" class=\"wp-image-49283\" srcset=\"https:\/\/www.lemonskin.net\/io\/wp-content\/uploads\/2025\/09\/In_riproduzione-Nuovo_menu.jpg 730w, https:\/\/www.lemonskin.net\/io\/wp-content\/uploads\/2025\/09\/In_riproduzione-Nuovo_menu-300x213.jpg 300w\" sizes=\"auto, (max-width: 730px) 100vw, 730px\" \/><\/figure>\n\n\n\n<p>Per mitigare un po&#8217; l&#8217;inconveniente ho introdotto tre diverse modalit\u00e0 di visualizzazione: una <strong>monocromatica<\/strong>, dove tutte le scritte sono in bianco o nero; una <strong>mista<\/strong>, in cui il testo segue la barra mentre le stelline sono colorate; e una interamente <strong>a colori<\/strong>, con tutti gli elementi in tinta. Ho anche accorciato in modo smart il titolo sulla barra quando troppo lungo e reso dinamico il menu dei voti: adesso mostra il <em>rating<\/em> corrente evidenziato.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"alignright size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"280\" height=\"323\" src=\"https:\/\/www.lemonskin.net\/io\/wp-content\/uploads\/2025\/09\/In_riproduzione-Schema_colori.jpg\" alt=\"\" class=\"wp-image-49282\" srcset=\"https:\/\/www.lemonskin.net\/io\/wp-content\/uploads\/2025\/09\/In_riproduzione-Schema_colori.jpg 280w, https:\/\/www.lemonskin.net\/io\/wp-content\/uploads\/2025\/09\/In_riproduzione-Schema_colori-260x300.jpg 260w\" sizes=\"auto, (max-width: 280px) 100vw, 280px\" \/><\/figure>\n<\/div>\n\n\n<p>Ecco le tre modalit\u00e0 al lavoro, sia su barra bianca che su barra nera. La prima \u00e8 impeccabile in ogni contesto, pur difettando sul piano cromatico; le altre due sono pi\u00f9 vibranti seppur soggette alle leggi del caso.<sup class=\"modern-footnotes-footnote modern-footnotes-footnote--expands-on-desktop \" data-mfn=\"1\" data-mfn-post-scope=\"000000000000072f0000000000000000_49234\"><a href=\"javascript:void(0)\"  role=\"button\" aria-pressed=\"false\" aria-describedby=\"mfn-content-000000000000072f0000000000000000_49234-1\">1<\/a><\/sup><span id=\"mfn-content-000000000000072f0000000000000000_49234-1\" role=\"tooltip\" class=\"modern-footnotes-footnote__note\" tabindex=\"0\" data-mfn=\"1\">Perch\u00e9 a dirla tutta la barra non \u00e8 mai completamente bianca o completamente nera, ma pu\u00f2 assumere qualsiasi tonalit\u00e0  (MacOS applica cambiamenti grafici relativi a trasparenza, sfocatura, tinta e solo Dio sa cos&#8217;altro).<\/span><\/p>\n\n\n\n<p>Per cui niente, per il momento va bene cos\u00ec. Ho inviato un&#8217;email agli sviluppatori di Xbar e vedremo se ci sar\u00e0 un modo per far passare agli script la stessa informazione che usa l&#8217;applicazione per capire il colore della barra. Altrimenti pazienza. Nel frattempo continuo a sperimentare con il bilanciamento dei colori, per trovare un compromesso accettabile.<\/p>\n\n\n\n<p>Ho anche ottimizzato molto lo script. Non che qualcun altro a parte me potrebbe apprezzarlo, ma l&#8217;ho fatto. :)<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"aggiornamento2\">Aggiornamento: 7 settembre 2025<\/h2>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"730\" height=\"156\" src=\"https:\/\/www.lemonskin.net\/io\/wp-content\/uploads\/2025\/09\/In_riproduzione-Schema_colori_new.png\" alt=\"\" class=\"wp-image-49314\" srcset=\"https:\/\/www.lemonskin.net\/io\/wp-content\/uploads\/2025\/09\/In_riproduzione-Schema_colori_new.png 730w, https:\/\/www.lemonskin.net\/io\/wp-content\/uploads\/2025\/09\/In_riproduzione-Schema_colori_new-300x64.png 300w\" sizes=\"auto, (max-width: 730px) 100vw, 730px\" \/><\/figure>\n\n\n\n<p>Gli sviluppatori di Xbar non danno segni di vita, per cui questo sar\u00e0 lo schema di colori definitivo, perfettamente visibile sia su bianco che su nero.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"aggiornamento3\">Aggiornamento: 28 settembre 2025<\/h2>\n\n\n\n<p>In questi giorni sto installando macOS da zero sul mio Mac, perch\u00e9 era giunto il momento di fare un po&#8217; di pulizia ed eliminare una carovanata di file divenuti inutili e obsoleti; e che portavano via troppo spazio prezioso.<sup class=\"modern-footnotes-footnote modern-footnotes-footnote--expands-on-desktop \" data-mfn=\"2\" data-mfn-post-scope=\"000000000000072f0000000000000000_49234\"><a href=\"javascript:void(0)\"  role=\"button\" aria-pressed=\"false\" aria-describedby=\"mfn-content-000000000000072f0000000000000000_49234-2\">2<\/a><\/sup><span id=\"mfn-content-000000000000072f0000000000000000_49234-2\" role=\"tooltip\" class=\"modern-footnotes-footnote__note\" tabindex=\"0\" data-mfn=\"2\">Sono piuttosto estremista per quanto riguarda la pulizia digitale: se formatto l&#8217;hard disk (dovrei dire SSD, perch\u00e9 non siamo pi\u00f9 negli anni &#8217;90) sono sicuro di togliere tutto; se mi metto l\u00ec a dire &#8220;questo lo tolgo, questo lo lascio&#8221; poi va sempre a finire che mi passa la voglia e lascio tutto l\u00ec.<\/span><\/p>\n\n\n\n<p>Ho avuto l&#8217;ardire di passare alla nuovissima versione 26 del sistema operativo Apple e ho inizialmente avuto alcuni problemi (che ho in seguito scoperto essere imputabili al NAS, che andava riavviato); per cui ho alternato svariate installazioni di Sequoia e Tahoe una dietro l&#8217;altra fino a quando non sono riuscito a ritrovare il bandolo della matassa.<\/p>\n\n\n\n<p>Per queste ragioni tutti i progetti in atto subiranno una pausa di alcune settimane.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"alignright size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"398\" height=\"154\" src=\"https:\/\/www.lemonskin.net\/io\/wp-content\/uploads\/2025\/09\/In_riproduzione-Nuovo_schema_colori.png\" alt=\"\" class=\"wp-image-49330\" srcset=\"https:\/\/www.lemonskin.net\/io\/wp-content\/uploads\/2025\/09\/In_riproduzione-Nuovo_schema_colori.png 398w, https:\/\/www.lemonskin.net\/io\/wp-content\/uploads\/2025\/09\/In_riproduzione-Nuovo_schema_colori-300x116.png 300w\" sizes=\"auto, (max-width: 398px) 100vw, 398px\" \/><\/figure>\n<\/div>\n\n\n<p>Nel frattempo ho rimesso mano al mio script, perch\u00e9 con Tahoe la barra del menu \u00e8 divenuta ancora pi\u00f9 dinamica (e addirittura invisibile); per cui si \u00e8 reso necessario qualche piccolo ritocco.<\/p>\n\n\n\n<p>Ho implementato alcuni cambiamenti estetici qui e l\u00e0, modificato leggermente lo schema dei colori e potenziato l&#8217;apposito menu, in modo da avere un veloce colpo d&#8217;occhio sulla resa visiva delle tre modalit\u00e0.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"aggiornamento4\">Aggiornamento: 5 gennaio 2026<\/h2>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"488\" src=\"https:\/\/www.lemonskin.net\/io\/wp-content\/uploads\/2025\/09\/In_riproduzione-Simbolini-1024x488.jpg\" alt=\"\" class=\"wp-image-50426\" srcset=\"https:\/\/www.lemonskin.net\/io\/wp-content\/uploads\/2025\/09\/In_riproduzione-Simbolini-1024x488.jpg 1024w, https:\/\/www.lemonskin.net\/io\/wp-content\/uploads\/2025\/09\/In_riproduzione-Simbolini-300x143.jpg 300w, https:\/\/www.lemonskin.net\/io\/wp-content\/uploads\/2025\/09\/In_riproduzione-Simbolini-768x366.jpg 768w, https:\/\/www.lemonskin.net\/io\/wp-content\/uploads\/2025\/09\/In_riproduzione-Simbolini.jpg 1460w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Altra piccola modifichetta: Adesso, oltre al simbolo per commenti, vengono visualizzati indicatori anche per i brani dotati di testi (lyrics) e per quelli in qualit\u00e0 lossless; pi\u00f9 una pratica legenda sotto le informazioni del brano e numero e data della versione corrente dello script (prima si trovava all&#8217;interno del sottomenu dello schema colori).<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Fin da quando ho iniziato a utilizzare i primi computer dotati di un minimo di capacit\u00e0 multimediali \u2013 pi\u00f9 o meno dai tempi dell&#8217;Amiga, quindi \u2013 mi sono sempre prodigato per trovare soluzioni che mi consentissero di gestire la musica in modo semplice e pratico. Bla bla bla&#8230; arriviamo a un paio di giorni fa:&hellip; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_stopmodifiedupdate":false,"_modified_date":"","advgb_blocks_editor_width":"","advgb_blocks_columns_visual_guide":"","jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[15],"tags":[111336,111259,111220,111247,111362,111266],"class_list":["post-49234","post","type-post","status-publish","format-standard","hentry","category-informatica","tag-a-i","tag-amm","tag-apple","tag-creazioni","tag-lr","tag-musica"],"acf":[],"author_meta":{"display_name":"lock","author_link":"https:\/\/www.lemonskin.net\/io\/author\/lock\/"},"featured_img":null,"jetpack_featured_media_url":"","coauthors":[],"tax_additional":{"categories":{"linked":["<a href=\"https:\/\/www.lemonskin.net\/io\/category\/informatica\/\" class=\"advgb-post-tax-term\">informatica<\/a>"],"unlinked":["<span class=\"advgb-post-tax-term\">informatica<\/span>"]},"tags":{"linked":["<a href=\"https:\/\/www.lemonskin.net\/io\/category\/informatica\/\" class=\"advgb-post-tax-term\">A.I.<\/a>","<a href=\"https:\/\/www.lemonskin.net\/io\/category\/informatica\/\" class=\"advgb-post-tax-term\">AMM<\/a>","<a href=\"https:\/\/www.lemonskin.net\/io\/category\/informatica\/\" class=\"advgb-post-tax-term\">Apple<\/a>","<a href=\"https:\/\/www.lemonskin.net\/io\/category\/informatica\/\" class=\"advgb-post-tax-term\">creazioni<\/a>","<a href=\"https:\/\/www.lemonskin.net\/io\/category\/informatica\/\" class=\"advgb-post-tax-term\">lr<\/a>","<a href=\"https:\/\/www.lemonskin.net\/io\/category\/informatica\/\" class=\"advgb-post-tax-term\">musica<\/a>"],"unlinked":["<span class=\"advgb-post-tax-term\">A.I.<\/span>","<span class=\"advgb-post-tax-term\">AMM<\/span>","<span class=\"advgb-post-tax-term\">Apple<\/span>","<span class=\"advgb-post-tax-term\">creazioni<\/span>","<span class=\"advgb-post-tax-term\">lr<\/span>","<span class=\"advgb-post-tax-term\">musica<\/span>"]}},"comment_count":"4","relative_dates":{"created":"Pubblicato 7 mesi fa","modified":"Aggiornato 24 ore fa"},"absolute_dates":{"created":"Pubblicato il 3 Settembre 2025","modified":"Aggiornato il 7 Aprile 2026"},"absolute_dates_time":{"created":"Pubblicato il 3 Settembre 2025 1:21","modified":"Aggiornato il 7 Aprile 2026 16:07"},"featured_img_caption":"","series_order":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.lemonskin.net\/io\/wp-json\/wp\/v2\/posts\/49234","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.lemonskin.net\/io\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.lemonskin.net\/io\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.lemonskin.net\/io\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.lemonskin.net\/io\/wp-json\/wp\/v2\/comments?post=49234"}],"version-history":[{"count":10,"href":"https:\/\/www.lemonskin.net\/io\/wp-json\/wp\/v2\/posts\/49234\/revisions"}],"predecessor-version":[{"id":50428,"href":"https:\/\/www.lemonskin.net\/io\/wp-json\/wp\/v2\/posts\/49234\/revisions\/50428"}],"wp:attachment":[{"href":"https:\/\/www.lemonskin.net\/io\/wp-json\/wp\/v2\/media?parent=49234"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.lemonskin.net\/io\/wp-json\/wp\/v2\/categories?post=49234"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lemonskin.net\/io\/wp-json\/wp\/v2\/tags?post=49234"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}