PDA

View Full Version : Guida a jaLCDs - Parte 1


dhs
22-02-2003, 23:05
Ciao,

Anche se si tratta di un software, scrivo questo nel forum modding perche' difficilmente a qualcuno potrà interessare come pilotare un display LCD se non ad un modder :)

Questa cosa vuole essere un serio approfondimento di jaLCDs, per una serie di motivi:

-Uno sguardo superficiale non rende giustizia ad un programma di questa complessità.
-La documentazione, quasi tutta in Tetesco, non e' alla portata di tutti (neanche mia [non so una parola di tedesco], peroì sono riuscito lo stesso a venirne a capo).
-Con jaLCDs ed un po' di buona volontà si puo' veramente fare di tutto, cose che lcdsmartie, crystalcontrol e compagnia si scordano.

Vediamo innanzitutto quali sono le possibilità del software (rimarco con un * quelle "uniche"):

-Client indipendente dal programma di configurazione (*):

Questo, se da una parte e' uno svantaggio (non c'e' la possibilità di vedere "immediatamente" [solo dopo un reload della configurazione] cosa si e' ottenuto), dall'altra offre un programma che gira in background piu' leggero, e la possibilità di editare con un editor di testo esterno le proprie configurazioni [cosa che, all'utente avanzato, diventerà quasi indispensabile].

-Possibilità di mostrare sul display scritte, dati relativi al sistema, a MBM5, ai dischi rigidi, email, winamp, reti distribuite, Seti@home, orologioni e via di seguito.

-Effetti di transizione in e out (*)

-Possibilità di definire e mostrare caratteri grafici personalizati (*):

non si parla solo di caratteri, ma anche di animazioni (fino a 8).

-Completo linguaggio interno che permette l'elaborazione dei dati in svariati modi per una visualizzazione personalizzata / condizionata e via discorrendo (*).

-Possibilità di gestire plugins che possono interagire a vari livelli con il client.

-Possibilità di ricevere tramite rete dati relativi ad una macchina remota (*).

-Possibilità di istant messaging sul display (*).

-E, soprattutto, la possibilità di intergrare (e elaborare, mostrare) dati provenienti dalla rete (***).

Il programma di configurazione

Vi anticipo che, al contrario della versione attualmente distribuita (3.02), la prossima (3.10), oltre ad un sacco di cose carine, integra una completa traduzione in italiano :)

Vediamo rapidamente le cose poco utili:

-Setup: una volta settato il setup, non si toccherà piu' (solite cose: porta, grandezza LCD e via di seguito).
-Growing Chars: fino a 8 caratteri "crescenti" per schermo, un effetto totalmente inutile imho.
-Transizioni: abbellimento grafico, giochicchiateci, nulla di particolarmente
difficile...

Adesso cominciamo a vedere le cose interessanti:

Lo "Screen Settings" consente di definire uno schermo.
Uno "schermo" e' virtualmente cio' che il display mostrerà. Questo e' solo in parte vero, in quanto possono anche esistere schermi vuoti che conterranno solo definizioni di variabili, testi e/o salti condizionali, etc. (vedremo piu' avanti).
E' quindi possibile creare un nuovo schermo (Add), cancellarlo (Delete), cambiare l'ordine degli schermi (Change screen order), fare "skippare" lo schermo (utile solo in fase di test), e scriverne il contenuto, nelle apposite 4 righe di testo (presumo che le ultime due siano inutili per schermi lcd a 2 righe...).
Sulla destra troviamo altri 4 parametri che saranno unici per ogni schermo:

-Time to show: tempo per il quale lo schermo viene mostrato (in millisecondi).
-Update interval: il ritardo in millisecondi tra un update dello schermo e l'altro (utile soprattutto per le barre grafiche, winamp e per l'aggiornamento delle variabili).
-Scrolling speed: ... autoesplicatorio...
-Effect speed: velocità degli effetti di transizione (o dei growing characters).

Andando a sinistra c'e' un menu' ad albero che mostra le variabili disponibili per essere mostrate.
Troviamo un sacco di cose utili, ed altre meno...
Andando sotto System, troveremo, ad esempio, la percentuale di occupazione della CPU. Clickando quindi sulla voce "CPU-Usage", sotto al menu' verrà mostrata la sintassi della variabile da inserire nelle righe dello schermo ($cpuload§) ed un tastino "->" che permette di inserire automaticamente la variabile stessa nella riga selezionata.

Abbiamo già scoperto una cosa: la sintassi delle variabili (e degli operatori, che vedremo dopo) si apre sempre con il carattere "$" e si chiude con il carattere "§".

Parlando di operatori, troviamo, sempre sotto Sytem (devo ancora capire che ci fanno li'...) quattro utili operatori per il posizionamento delle variabili (o dei testi scritti direttamente).

$setfixed§
Che serve a definire un punto "fisso" ove mostrare un testo in una riga.
Scrivendo ad esempio:

$setfixed9§Testo

La parola "Testo" verrà mostrata a partire dalla nona colonna della riga nella quale il comando compare.

possiamo provare anche un:

$setfixed9§$cpuload§%

per avere, a partire dalla nona colonna, il valore percentuale di occupazione della CPU.
Nota che il caratter "%" e' interpretato come testo (non e' un comando o parte di un comando).

il comando $center§ chiaramente centrerà il testo seguente nel display (sempre a patto che il testo abbia un numero di caratteri minore di quelli che il vostro LCD puo' mostrare orizzontalmente).

$fix§ serve a "bloccare" un testo sullo schermo. Se ci saranno scroll, orizontali o verticali, di altro testo, questo non verrà cancellato o spostato, ma rimarrà fisso ove e' stato piazzato.

$fix:testo§
Bloccherà quindi la parola "testo" finche' questo schermo sarà mostato.

$fixend§ funziona allo stesso modo, ma il testo bloccato sarà mostrato in fondo alla linea.

L'utilità del centraggio di un testo e' ovvia, quella di fix e fixend dubbia (a dir poco), ma quella di setfixed e', come vedremo, quasi fondamentale :)

Scorrendo in avanti troviamo le variabili e funzioni relative a Winamp. C'e' da notare che jaLCDs e' l'unico ad implementare internamente un analizzatore di spettro ed un VU meter grafici (solo un determinato plugin di winamp lo fa... e non e' gratis [e fa solo quello...]).

I full screen clocks sono un'altra bella aggiunta che solo questo programma offre (3 tipi).

[segue]

dhs
22-02-2003, 23:41
Adesso cominciamo a vedere le cose veramente interessanti :)

Bargraph:

questo comando consente di visualizzare graficamente, tramite una barra liberamente dimensionabile (in orizzontale) i propri valori numerici.

Il comando consta di vari parametri.

(PS: leggete e ricordate per i futuro: quando parlo di parametri ricordate che questi potranno *sempre* essere sia valori fissi che variabili...).

la sintassi e' quindi:

$bar:a:b:c:d:e:f§

dove:

a = riga di partenza
b = colonna di partenza
c = lunghezza della barra (in caratteri)
d = valore minimo
e = valore da mostrare
f = valore massimo

Vediamo un esempio pratico (in tutti gli esempi da qui in avanti suppongo che si disponga di un LCD da 20x4).
Supponiamo di voler mostrare, sulla stessa riga, il valore percentuale di occupazione della CPU, e, a fianco di questo, una barra grafica che mostri lo stesso dato graficamente.

CPU: $cpuload§$bar:1:10:11:0:$cpuload§:100§

Cosa succede?

Scriviamo (in testo) la parola CPU:
Inseriamo la variabile che ci mostrerà, numericamente, la percentuale di occupazione.
Definiamo una barra che parta nella riga 1, dalla colonna 10, per una lungezza massima di 11 caratteri, con un valore minumo di 0, il valore di cpuload, che ha un valore massimo di 100.

Carino, eh? :)

ma! Cosa e' quella roba li?!
Notiamo una cosa.

Il valore numerico della cpu puo' essere lungo da 1 a 3 caratteri (es: 1, 22, 100). Quando viene mostrato sullo schermo, il valore viene sempre allineato a sinistra, cosa non propriamente bella da vedersi...

che facciamo?

Andiamo a vedere il comando $format§ :)

Questo comando consente appunto di "formattare" un valore numerico in modo tale che questo venga presentato secondo i nostri voleri :) La sintassi e':

$format:VAL:FORMAT§

dove VAL e' il valore da formattare, FORMAT e' il formato.
il sistema per specificare la formattazione e' lo stesso del Visual Basic o di exel, quindi potete fare riferimento a quelli.

Per ottenere, ad esempio, il valore *decimale* di occupazione della cpu possiamo semplicemente scrivere:

$format:$cpuload§:0.0§

nel nostro caso, facciamo in modo che il valore percentuale venga *sempre* mostrato di 3 cifre. Qundi, la riga di prima varierà cosi':

CPU: $format:$cpuload§:000§$bar:1:10:11:0:$cpuload§:100§

Seguendo questo esempio, possiamo, ad esempio, mostrare dei dati relativi all'occupazione della ram nella seconda riga:

RAM: $ramfree§ $bar:2:10:11:0:$ramfree§:$ramtotal§§

Mostriamo quindi il valore numerico della ram libera, dopodiche' definiamo una barra, che parte nella riga 2, colonna 10, lunghezza 11, con valore minumo 0, con il contenuto della ram libera ($ramfree§) e definendo come valore massimo quello reale, che e' contenuto nella variabile $ramtotal§.

Notare che alla fine della linea ci sono 2 simboli "§". Questo perche' quello piu' esterno chiude l'istruizione "bar", quello piu' a sinistra fa parte della variabile $ramtotal§.

Completiamo il nostro primo screen inserendo nella terza riga i seguenti comandi:

$date§ $time§

continuando a scorrere la lista delle funzioni scopriamo l'Advanced Bargraph. Che e'?!
E' una barra del tutto simile alla precente, con la differenza che ci consente di inseire, in maniera grafica, all'interno della grafica, un valore (di massimo 5 cifre).

Pensate a quello che penso io?

Andate alla prima riga e modificatela cosi':

CPU $advbar:1:5:16:0:$cpuload§:100:$cpuload§%:1§

Scriviamo la parola CPU seguita da uno spazio.
Definiamo una advbar che inizi alla riga 1, colonna 5, lunga 16 caratteri, con valore minimo 0, che mostri il valore di cpuload, che ha un valore massimo di 100, scriviamo il valore numerico di cpuload piu' il segno percentuale a partire dalla posizione 1 (si conta dall'inizio della barra).

Abbiamo cosi' ottenuto una barra piu' lunga senza pero' eliminare il valore numerico di del dato visualizzato. Mica male, eh?

Adesso vi faccio fare un bell'esperimento! :)

Clickate Add e create un nuovo schermo chiamato "clock".
Sulla destra dategli un time to show di almeno 10000.
Selezionate una riga (una qualsiasi), e scriveteci dentro

$clock2§

Salvate la vostra configurazione, caricatela con jalcds e quando viene mostrato l'orologione......... 00.00 ?!?!?!!? Ma come?!?!!?

Ok, Windows:
Start, pannello di controllo, Opzioni internazionali e della lingua, personalizza...

settate come segue:

Sotto il tab "ora" :
Formato ora: HH:mm:ss
Separatore ora: : (il simbolo ":")

Sotto il tab "Data":

Formato data breve: gg.MM.aaaa
Separatore data: . (il simbolo ".")
Formato data estesa: gggg, g. MMMM aaaa

Applica, ok, guardate il vostro LCD.
Che bello, ora avete il vostro orologione da 2/3/4/5 milioni, a seconda di quanto avete pagato il PC e quanto ci avete messo dentro tra schede, schifezze varie e modding :)

Domani andiamo avanti, e vedremo le cose veramente interessanti che toccano la manipolazione delle stringhe di testo, le variabili definibili e le operazioni matematiche tra variabili e funzioni.

Casino? Macche'. Vedrete che ne combinerete delle belle! :)

Schummacherr
23-02-2003, 11:44
a me non serve 'sta guida :)

ma credo ke molti l'apprezzeranno...

ottimo post ;) :)

dhs
23-02-2003, 14:34
Visti gli esempi fatti fin'ora, vediamo di creare un nuovo schermo.
Ipotizziamo di volerne uno che mostri, per 4 hard disks:

-Numericamente, lo spazio libero.
-Con una barra, lo spazio occupato rispetto a quello libero.

Il codice sarà il seguente:
[nb: quello che segue e' il codice di uno screen completo. Per aggiungerlo alla vostra configurazione, e' sufficiente copiarlo/incollarlo alla fine del vostro file di config]

[HD]
showtime 5000
growspeed 100
updateinterval 1000
scrollspeed 150
modein shutteron
modeout
jump 0
line 1 C: $format:$drivecfree§:00000§ $setfixed9§Mb $bar:1:12:9:0:$drivecused§:$drivectotal§§
line 2 D: $format:$drivedfree§:00000§ $setfixed9§Mb $bar:2:12:9:0:$drivedused§:$drivedtotal§§
line 3 E: $format:$driveefree§:00000§ $setfixed9§Mb $bar:3:12:9:0:$driveeused§:$driveetotal§§
line 4 H: $format:$drivehfree§:00000§ $setfixed9§Mb $bar:4:12:9:0:$drivehused§:$drivehtotal§§

Il risultato sarà una visualizzazione di questo tipo:

http://www.demichelis.it/jal/hd.jpg

Andiamo ora a qualcosa di piu' complesso.
Come immaginate, si potrebbero utilizzare le barre grafiche per visualizzare la velocità di trasmissione e ricezione della rete.
Le variabili ci sono, le barre le sapete fare, quindi....
C'e' pero' una cosa sgradevoluccia a vedersi: le barre, essendo il fetching dei dati molto veloce, e se la velocità non e' costante, hanno la tendenza a muoversi su e giu' in maniera isterica. Sarebbero molto piu' gradevoli delle barre con un minimo di latenza "analogica". Presto fatto :)

[Netstats]
showtime 5000
growspeed 100
updateinterval 1000
scrollspeed 150
modein delayedforkon
modeout wipeoffrightleft
jump 0
line 1 UP $setfixed$math:9-$len:$format:$ulc0§:0.0§§§§$format:$ulc0§:0.0§ K $setfixed$math:18-$len:$ultraffic0§§§§$ultraffic0§ MB
line 2 $setvar:ulc3:$ulc2§§$setvar:ulc2:$ulc1§§$setvar:ulc1:$ulspeed0§§$setvar:ulc0:$math:($ulc3§+$ulc2§+$ulc1§)/3§§$bar:2:1:20:0:$ulc0§:16§
line 3 DN $setfixed$math:9-$len:$format:$dlc0§:0.0§§§§$format:$dlc0§:0.0§ K $setfixed$math:19-$len::$dltraffic0§§§§$dltraffic0§ MB
line 4 $setvar:dlc3:$dlc2§§$setvar:dlc2:$dlc1§§$setvar:dlc1:$dlspeed0§§$setvar:dlc0:$math:($dlc3§+$dlc2§+$dlc1§)/3§§$bar:4:1:20:0:$dlc0§:80§

per ottenere un risultato di questo tipo:
http://www.demichelis.it/jal/net.jpg

In questo schermo vediamo un sacco di cose nuove:

il comando $math§ che consente di fare operazioni matematiche tra operatori e/o variabili.

il formato e':

$math:ESPRESS§

Ad esempio, volendo sommare, per qualsiasi strana ragione, la cifra 10 alla velocità di download e stamparne il risultato sarà sufficiente fare un:

$math:$dlspeed0§+10§

Vediamo anche l'istruzione $setvar§

Come immaginabile, serve ad attribuire un valore ad una variabile (sia numerico che di testo).

Ad esempio:

$setvar:a0:10§

Attribuisce alla variabile $a0§ il valore di 10.

oppure:

$setvar:a0:$math:$dlspeed0§+10§§

Attribuisce alla variabile $a0§ il valore della velocità di download + 10 :)

Abbiamo inoltre $len§. Questo comando restituisce il numero di caratteri che costituiscono cio' che vi viene racchiuso. Ad esempio:

$len:giuseppe§

restituirà il valore 8.

Se vi studiate lo schermo sopra, vedrete che basilarmente viene:

-Attribuito un formato preciso ai valori numerici.
-Preso per tre volte consecutive il valore di upload (e la stessa cosa viene fatta alla riga 4 per quello di download), viene fatta una media che viene assegnata ad una variabile, e quest'ultima viene utilizzata sia per il valore numerico che per quello mostrato graficamente con la barra. Questo serve a creare quella "latenza" che rende meno isterica la parte grafica.
-Notate inoltre come il comando $setfixed§ viene utilizzato, congiuntamente alle funzioni matematiche e al comando $len§, per posizionare correttamente i valori numerici affinche' questi rimangano ordinati.

Alla prossima :)

Jimmy3Dita
23-02-2003, 15:19
Ottimo, e' in via di pubblicazione sul portale.
Grazie di aver approfondito questo discorso, sicuramente hai sopperito egregiamente alla mia "passata superficiale" ai software dell'articolo. Anche se comunque la mia intenzione era di spiegare una configurazione veloce, non fare un manuale d'uso.. ;)

dhs
23-02-2003, 17:56
Due cose che mi sono dimenticato di dire sullo schermo "netstats":

-Il codice e' preso da una configurazione presente sul sito di jaLCDs stesso, che ho modificato in vari modi.
-Le barre grafiche sono calibrate (nei valori massimi) per una connessione adsl da 640K. Quindi, in caso, i valori da modificare sono il "16" nella seconda riga per cio' che riguarda la banda in uscita e "80" nella quarta riga per la banda in entrata.

Passiamo ora a vedere lo schermo che ho creato per il Winamp:

[WinAmp]
showtime 1000
growspeed 100
updateinterval 500
scrollspeed 150
modein
modeout
jump 0
line 1$showif:$math:$len:$winampartist§§+$len:$winamptitle§§+3§:>>:20: *** §$winampartist§$showif:$len:$winampartist§§:>>:0: - §$winamptitle§
line 2 $winampposition§ $ascii:126§ $winamplength§ $winampbitrate§ Kbs
line 3 $winampspectrum§
line 4

che produce questo risultato:

http://www.demichelis.it/jal/winamp.jpg

Ci sono varie cose da notare, per la precisione:

Non e' possibile mettere un vu-meter ed uno spectrum analyzer sullo stesso schermo. Lo stesso dicasi se si volesse mettere, che so, lo spectrum analyzer ed una bar.

Nella prima riga troviamo un comando utilissimo, $showif§.
La sintassi e' la seguente:

$showif:VAL1:op:VAL2:testo§

in pratica l'istruzione confronta il primo valore con il secondo. Nel caso la condizione venga soddisfatta, viene mostrato il testo (testo, variabile, quello che si vuole...).
Per la lista degli operatori dispobili, date un'occhiata al configuratore di jaLCDs.

Nel caso specifico a cosa lo showif presente nella prima riga? Semplice!
Lo scopo principale della riga e' di mostrare il nome dell'artista ed il titolo del brano in esecuzione. Se la lunghezza di Autore + Brano supera i 20 caratteri (la larghezza dell'LCD), il testo scrollerà ciclicamente, andando ad "attaccare" la fine del nome del brano con l'inizio del nome dell'autore alla prima ripetizione.
Lo $showif§ serve a rendere la cosa piu' leggibile.
Quindi, se Autore + Titolo e' minore di 20, questi vengono mostrati e non succede nulla di particolare (non scrollano).
Nel caso invece che la lunghezza dei due testi (e di altri 3 caratteri, cioe', " - ", il separatore) superi i 20 caratteri, verrà inserito *anche* il separatore " *** ", che renderà chiaramente leggibile il tutto.

Nella seconda riga vediamo un'altra cosa nuova, $ascii§.
Come si puo' immaginare, il comando serve a mostrare uno specifico carattere richiamandolo per il suo codice ascii.

la sintassi e':

$ascii:codice§, dove codice e' un valore numerico da 0 a 255.

(segue)

Jimmy3Dita
23-02-2003, 17:57
Post in rilievo, se lo merita! :D

Spank
23-02-2003, 17:58
ottima guida http://speedy.gamersrevolt.it/smiles/approved.gif :)

Appena finisco di sistemare il pc e trovo un modo per fissare l'lcd al case, la provo di sicuro (l'avevo già provato jaLCDs, a prima vista è un po' ostico da usare e configurare.. ma ha un sacco di opzioni e plugin interessanti! :eek: :cool: :sofico: )

dhs
23-02-2003, 18:06
Prima di proseguire con il nostro tutorial, un consiglio:

andate su http://www.jalcdsforum.de/thread.php?threadid=1889&boardid=7&styleid=4

in fondo al primo post c'e' la RC2 di jaLCDs 3.10.

1) verificate di avere impostato le opzioni internazionali di windows come ho spiegato precedentemente (assolutamente necessario).
2) copiate il contenuto dell'archivio dentro la dir ove e' installato il vostro jaLCDs 3.02.
3) all'interno dell'archivio ve n'e' un secondo che contiene il programma di configurazione: aprite anche questo e, come prima, copiatene il contenuto nella dir di installazione di jaLCDs.

Cosa abbiamo ottenuto?
Oltre al configuratore in italiano, questa versione implementa una serie di funzioni nuove, due delle quali, come vedremo, saranno di fondamentale importanza.

(segue)

dhs
23-02-2003, 18:19
Ora che abbiamo visto il primo comando condizionale ($showif§), passiamo ad esaminare gli altri a disposizione.

I salti condizionali sono effettuati con il comando $if§, la cui sintassi e':

$if:VAL1:op:VAL2:Target§

Cioe':

Se il confronto tra il valore1 ed il valore2 soddisfa la condizione, si eseguirà un salto allo schermo chiamato Target.

Se si vuole un'applicazione pratica di questo comando, fate cosi':
Nella prima riga dello schermo immediatamente successivo a Netstats, andate ad inserire, come primo comando, cio' che segue:

$if:$dlspeed0§:>>:20:Netstats§

A che serve?
Se la velocità di download supera i 20 Kbps, allora si torna allo schermo di netstats. In pratica, per meglio monitorizzare i downloads, lo schermo rimarrà fisso a Netstats finche' il download (che deve avere una velocità comunque superiore a 20kbps) non termina.
Utile, vero? In realtà, gli usi che questo comado concede sono molto ampie, come vedremo in seguito.

L'altro comando condizinale e' legato al Blink del testo.
Come avrete visto, sfogliando i vari comandi, e' possibile visualizzare testo che lampeggia.

In questo caso, lo si puo' far lampeggiare solo in determinate condizioni.
La sintassi e' praticamente identica a quella gia vista precedentemente.

Un piccolo esempio:

$blinkif:$mail1§:>>:0:You have $mail1§ emails§

Finche' ci saranno 0 email il testo comparirà come:

You have 0 emails

Come le email arrivano, il testo lampeggerà.

I salti condizionali possono essere, ad esempio, molto utili per segnalare condizioni anonime, come il sovrariscaldamento della CPU o la carenza di ram, facendo, magari, lampeggiare la retroilluminazione del display, o avviando programmi esterni :)

(segue)

dhs
23-02-2003, 18:58
Tralascio la creazione dei caratteri grafici, molto semplice, soprattutto se si utilizza l'editor addizionale presente sul sito jaLCDs.

Tralascio anche altre funzioni piu' triviali (ci si puo' arrivare da soli) e mi avvio invece da esaminare una delle cose che rendono jaLCDs veramente grande :)

Le variabili esterne.

Tradotto: la possibilità di importare dall'esterno, altre variabili, da mostrare in jalcds.

Questo puo' essere fatto in vari modi:

-Tramite un plugin: e' presente la documentazione e sono presenti già plugins per winamp (gia lo sappiamo), EDonkey, Nero, etc.
Il plugin altro non fa che prelevare/elaborare/creare dei dati e spedire delle righe di variabili a jaLCDs, tramite alcune porte tcp/ip.
-Un elaboratore esterno puo' inviare delle righe di variabili all'IP ove jaLCDs gira, in UDP su una porta specifica (pensate solo alle possibilità di monitoraggio di macchine esterne che questa cosa offre...).
-jaLCDs puo' prelevare direttamente, o dall'hard-disk locale o dalla rete, un file, opportunamente formattato, che contenga le variabili (e relativi valori).

Quest'ultima possibilità e' particolarmente interessante. :)

Nei primi due casi (plugin e "macchina in ascolto") e' sufficente inviare righe di variabili cosi' formattate:

setvar variabile1 valore1; setvar variabile2 valore2;

(notate che non ci sono caratteri speciali, come $ o §)

e cosi' via. Si possono gestire fino a 200 variabili esterne.

Per cio' che riguarda i files di testo, la formattazione e' la medesima, con la differenza che essi possono contenere piu' righe.

Per settare un file di variabili esterne e' sufficente andare sul configuratore, clickare external variables, ed aggiungere l'indirizzo del file da raggiungere.

Questo settaggio viene salvato *indipendentemente* dai files di configurazione. Il retrieving del/dei file/s avviene 1 volta ogni minuto.

Cercando per la rete si scopre che il francese Yetka aveva messo a punto due script pronti per essere richiamati da jaLCDs: uno forniva le notizie meteo, l'altro i programmi in onda. Purtroppo, entrambi gli script non sono piu' reperibili.

Che fare? Be', l'arte di arrangiarsi e' sempre viva a casa mia :)

Forse qualcuno di voi sa cosa sono i feed RSS. Brevemente, sono dei files XML, messi a disposizione da vari siti, contenenti brevi "news", piu' il link al sito di origine. Un secondo sito puo' cosi' mostrare i richiami alle news fornite dal primo sito. Una volta clickati, tali richiami porteranno al sito di origine, ove verrà mostrata la notizia intera.

La settimana scorsa, quando ho cominciato ad interessarmi di LCD, un sito che seguo assiduamente, www.corriere.fantascienza.com, ha cominciato a mettere a disposizione due feeds RSS. Uno riguarda (chiaramente) le notizie del sito stesso, il secondo...... i programmi (film, telefilm, miniserie) che stanno per essere trasmessi sulle TV terresti e satellitari.

tale feed e' raggiungibile alla URL
http://www.corriere.fantascienza.com/rss/tv.rss

Perche' non approfittarne?! :)
Il problema e', chiaramente, che il formato del feed non ha nulla a che vedere da quello che jaLCDs accetta.

Ma, come ho detto, l'arte di arrangiarsi e' viva da queste parti :)

(segue)

dhs
23-02-2003, 19:15
La prima cosa che ho fatto e' stato cercare un parser XML in php, liberamente distribuibile e modificabile, da adattare alle mie esigenze.

Anche se di php non so una mazza, sono riuscito nel mio intento.
Trovate lo script nell'archivio in attachment.
Basta caricare entrambi i files in un server web che abbia a disposizione l'esecuzione di script in php, renderli eseguibili e creare una directory chiamata xmlcache, che deve essere scrivibile.
(nota: lo script crea una cache per impattare in maniera piu' lieve possibile sul sito che fornisce il feed).

Fatto? Ok, ora provate a richiamare lo script con il vostro browser, puntanto alla url nel quale esso e' raggiungibile. Ad esempio:

http://www.vostrosito.it/feed.php

(ps: non sarebbe male averlo qui, per tutti, su hwupgrade.it).

questo restituirà quanto segue:

setvar title0 20.55: Alias; setvar desc0 TELEFILM - THRILLER - con Jenniifer Garner, Ron Rifkin - episodio "La scatola" - Raidue, 20.55;
setvar title1 22.45: The Hunger; setvar desc1 TELEFILM - HORROR - con Terence Stamp - Canal Jimmy, 22.45;

Ho riportato solo 2 righe, perche' verso sera, man mano che i programmi (di tema fantascentifico, horror, fantasy, thriller, etc.) si esauriscono, si esauriscono anche le righe.
Al massimo comunque, lo script e' configurato per riportare solo i prossimi 4 programmi.

Come vedete, per ogni programmi, vengono definite 2 variabili:

titleX, che contiene orario e titolo.
descX, che contiene genere, sottogenere, descrizione (non sempre disponibile), canale, e di nuovo, l'orario.

Le variabili sono solo due a causa della natura del feed, che suddivide in "notizia breve" (messo in titleX) ed estesa (messo in descX).

Questo potrebbe già essere sufficente ai nostri scopi.
Il problema e' che le due varabili contengono troppi dati perche' questi possano essere mostrati ordinatamente.

Niente paura.
Papa' DHS ha pensato anche a questo :)

Nel frattempo, caricate i files nel vostro server web, ed aggiungete la relativa URL alle vostre variabili esterne. Provvedete anche a fare l'update a jaLCDs 3.10RC2, senno' non si fa nulla :)

(segue)

dhs
23-02-2003, 21:58
Bene, e' arrivata l'ora di visualizzare i dati sul nostro LCD.
Come ho detto, 2 variabili per i dati di una sola trasmissione sono un po' scomode da gestire.

Ci avvaremo quindi di altre funzioni (alcune esclusive della versione 3.10!)per estrarre solo i dati che ci interessano *dove* ci interessano.

C'e' da fare comunque una premessa: come ho detto, jaLCDs estrae (o meglio, richiede) i dati esterni ogni minuto. Di base, quindi, bisogna aspettare circa 1 minuto affinche' le variabili vengano richieste, piu' al tempo necessario perche' il server remoto risponda con i dati che ci interessano.

Prima di avere questi dati, e' *pericoloso* manipolare le variabili interessate, in quanto si andrà inevitabilmente incontro ad un crash di jaLCDs. Ci avvarremo quindi del salto condizionato per skippare ogni elaborazione sulle variabili esterne fin quando queste non saranno dispobili, mettendo come prima istruzione, sulla prima linea un:

$if:$len:$title0§§:<<:1:nextscreen§

Cioe':

Se la lunghezza della variabile $title0§ e' minore di 1, salta al prossimo schermo.

Ci avvarremo anche di:

$part§

Sintassi:

$part:a:b:testo§

Che estrae da un testo solo una porzione dello stesso.

a = numero del carattere (da sinistra a destra) dal quale cominciare l'estrazione
b = numero di caratteri da estrarre.

Esempio:

$part:2:3:cavallo§

estrae "ava".

$count§

sintassi:

$count:testo:carattere§

restituisce il numero di volte che il carattere comapre nel testo.

e poi:

$split§

sintassi:

$split:testo:delimitatore:numerooggetto§

che serve a selezionare in una stringa una porzione di testo.

Ad esempio:

$split:non mi sono - mai piaciuti - i cavalli - assetati:-:3§

restituisce: "mai piaciuti".

Abbiamo infatti indicato che le porzioni di testo sono delimitate dal carattere "-", e che vogliamo la terza porzione.

Fa la sua comparsa anche il comando $space§, che seve a "scivere" un certo numero di spazi:

$space:numero§, ove "numero" indica il numero di spazi da scrivere.

Bando alle ciance:

Voglio ottenere un risultato simile a questo:

http://www.demichelis.it/jal/tv.jpg

il codice che ho elaborato e' il seguente:

[TV0]
showtime 8000
growspeed 100
updateinterval 1000
scrollspeed 100
modein wipeonrightleft
modeout
jump 0
line 1 $if:$len:$title0§§:<<:1:nextscreen§$part:1:5:$title0§§$split:$split:$desc0§:-:$math:($count:$desc0§:-§+1)§§:,:1§
line 2 $part:8:$math:$len:$title0§§-7§:$title0§§$showif:$len:$part:8:$math:$len:$title0§§-7§:$title0§§§:>>:20: *$space:1§§
line 3 $setvar:d0:$split:$desc0§:-:1§§$d0§$setvar:dd0:$part:2:$math:$len:$split:$desc0§:-:2§§-2§:$split:$desc0§:-:2§§§$showif:$math:$len:$dd0§§+$len:$d0§§§:=<:20:$dd0§§
line 4 $showif:$math:$len:$dd0§§+$len:$d0§§§:>>:20:$space:1§$dd0§§ *$split:$desc0§:-:3§

Andiamo a vedere come funziona:

Riga1:
-C'e' il controllo che le variabili siano arrivate, altrimenti skippa al prossimo schermo.
-Viene estratto l'orario dalla prima variabile.
-Viene eseguito un doppio split dalla seconda variabile per prelevare il canale televisivo e vengono eliminati gli spazi inutili.

Riga2:
-Viene estratto dalla prima variabile il titolo della trasmissione e vengono eliminati gli spazi inutili.
-Viene controllato se il titolo e' piu' lungo di 20 caratteri. Se si, viene aggiunto il testo " * " per facilitarne la lettura durante l'inevitabile scroll (vedi la parte su winamp).

Riga3:
-Vengono estratti in due variabili ($d0§ e $dd0§) genere e sottogenere della trasmissione, eliminando, ove necessario, gli spazi inutili.
Il genere viene stampato, poi si provvede stampare il sottogenere solo se genere + sottogenere ($d0§ + $dd0§) e' minore di 20 (per evitare lo scrolling).

Riga4:
-Se, nella riga precedente, non si e' potuto inserire il sottogenre, questo viene stampato in questa riga (che comunque, al 90%, scrollerà comunque) e viene inserito un separatore. Viene quindi estratta e stampata la descrizione.

Un lavoraccio, credetemi :)

Come ho detto, lo script provvede a inviare (quando disponibili) i 4 prossimi programmi in onda, quindi avremo bisogno di 4 schermi che si facciano vedere solo se le relative variabili esistono.

Ecco il codice completo dei 4 schermi:


[TV0]
showtime 8000
growspeed 100
updateinterval 1000
scrollspeed 100
modein wipeonrightleft
modeout
jump 0
line 1 $if:$len:$title0§§:<<:1:nextscreen§$part:1:5:$title0§§$split:$split:$desc0§:-:$math:($count:$desc0§:-§+1)§§:,:1§
line 2 $part:8:$math:$len:$title0§§-7§:$title0§§$showif:$len:$part:8:$math:$len:$title0§§-7§:$title0§§§:>>:20: *$space:1§§
line 3 $setvar:d0:$split:$desc0§:-:1§§$d0§$setvar:dd0:$part:2:$math:$len:$split:$desc0§:-:2§§-2§:$split:$desc0§:-:2§§§$showif:$math:$len:$dd0§§+$len:$d0§§§:=<:20:$dd0§§
line 4 $showif:$math:$len:$dd0§§+$len:$d0§§§:>>:20:$space:1§$dd0§§ *$split:$desc0§:-:3§
[TV1]
showtime 8000
growspeed 100
updateinterval 1000
scrollspeed 100
modein wipeonrightleft
modeout
jump 0
line 1 $if:$len:$title1§§:<<:1:nextscreen§$part:1:5:$title1§§$split:$split:$desc1§:-:$math:($count:$desc1§:-§+1)§§:,:1§
line 2 $part:8:$math:$len:$title1§§-7§:$title1§§$showif:$len:$part:8:$math:$len:$title1§§-7§:$title1§§§:>>:20: *$space:1§§
line 3 $setvar:d0:$split:$desc1§:-:1§§$d0§$setvar:dd0:$part:2:$math:$len:$split:$desc1§:-:2§§-2§:$split:$desc1§:-:2§§§$showif:$math:$len:$dd0§§+$len:$d0§§§:=<:20:$dd0§§
line 4 $showif:$math:$len:$dd0§§+$len:$d0§§§:>>:20:$space:1§$dd0§§ *$split:$desc1§:-:3§
[TV2]
showtime 8000
growspeed 100
updateinterval 1000
scrollspeed 100
modein wipeonrightleft
modeout
jump 0
line 1 $if:$len:$title2§§:<<:1:nextscreen§$part:1:5:$title2§§$split:$split:$desc2§:-:$math:($count:$desc2§:-§+1)§§:,:1§
line 2 $part:8:$math:$len:$title2§§-7§:$title2§§$showif:$len:$part:8:$math:$len:$title2§§-7§:$title2§§§:>>:20: *$space:1§§
line 3 $setvar:d0:$split:$desc2§:-:1§§$d0§$setvar:dd0:$part:2:$math:$len:$split:$desc2§:-:2§§-2§:$split:$desc2§:-:2§§§$showif:$math:$len:$dd0§§+$len:$d0§§§:=<:20:$dd0§§
line 4 $showif:$math:$len:$dd0§§+$len:$d0§§§:>>:20:$space:1§$dd0§§ *$split:$desc2§:-:3§
[TV3]
showtime 8000
growspeed 100
updateinterval 1000
scrollspeed 100
modein wipeonrightleft
modeout
jump 0
line 1 $if:$len:$title3§§:<<:1:nextscreen§$part:1:5:$title3§§$split:$split:$desc3§:-:$math:($count:$desc3§:-§+1)§§:,:1§
line 2 $part:8:$math:$len:$title3§§-7§:$title3§§$showif:$len:$part:8:$math:$len:$title3§§-7§:$title3§§§:>>:20: *$space:1§§
line 3 $setvar:d0:$split:$desc3§:-:1§§$d0§$setvar:dd0:$part:2:$math:$len:$split:$desc3§:-:2§§-2§:$split:$desc3§:-:2§§§$showif:$math:$len:$dd0§§+$len:$d0§§§:=<:20:$dd0§§
line 4 $showif:$math:$len:$dd0§§+$len:$d0§§§:>>:20:$space:1§$dd0§§ *$split:$desc3§:-:3§

Bene.
Direi che se avete capito fin qui, ne sapete quanto me :)

Se qualche anima buona che mastica php o altri linguaggi vuole mettersi a disposizione per elaborare altri dati provenienti dalla rete.... e' il benvenuto :)

Ci sono ancora un sacco di funzioni che non abbiamo visto, come ad esempio l'instant messaging di jaLCDs, ma, visto che perlopiu' si tratta di funzioni ben documentate (sul sito del programma) mi sembra inutile vederle qui.

Buon divertimento :)

Skatman
24-02-2003, 13:37
complimenti... ottima guida.....
sarebbe bene però trovare uno spazio dove mettere il feed.php
(non credo che tutti abbiano a disposizione uno spazio con il supporto php attivo)..

inoltre esistono servizi di hosting gratis che supportano il php, ma molti non permettono il collegamento dello script a files su altri servers (vedi ad esempio lycos.co.uk dove il tuo feed.php ritorna "could not open RSS for input")

io ho un piccolo script in php che prende le news da punto-informatico.it e le restituisce nel formato corretto per jaLCDs (ho riadattato un vecchio script trovato in rete non so più dove....), l'ho testato sul mio "webserver" personale e funziona, ma purtroppo non sono riuscito a trovare un hosting gratuito con php che permettesse di collegarsi dallo script a files su altri server.... (ora finalmente sto per acquistare un servizio di hosting serio (spero sia serio!!) e forse potrò metterlo online in tempi brevi (spero!!)).

se hai altri progetti di questo genere io col php me la cavicchio (anche se è un pò che non utilizzo).... e posso darti una mano... (tempo permettendo che è davvero poco!)

ciao ciao e ancora complimenti...

P.S. Da stasera fino a sabato non so se avrò la possibilità di visitare il forum... quindi se non vi rispondo scusate ma lo farò appena possibile !!

dhs
24-02-2003, 15:53
Originally posted by "Skatman"

complimenti... ottima guida.....
sarebbe bene però trovare uno spazio dove mettere il feed.php
(non credo che tutti abbiano a disposizione uno spazio con il supporto php attivo)..

Vero. Io ne ho due (a pagamento), ma sinceramente non me la sento di metterlo a disposizione... Ho poca banda, e quella che ho costa.

Originally posted by "Skatman"


inoltre esistono servizi di hosting gratis che supportano il php, ma molti non permettono il collegamento dello script a files su altri servers (vedi ad esempio lycos.co.uk dove il tuo feed.php ritorna "could not open RSS for input")

Beh, ce ne saranno di piu' permissivi in giro... :)

Originally posted by "Skatman"


io ho un piccolo script in php che prende le news da punto-informatico.it e le restituisce nel formato corretto per jaLCDs (ho riadattato un vecchio script trovato in rete non so più dove....), l'ho testato sul mio "webserver" personale e funziona, ma purtroppo non sono riuscito a trovare un hosting gratuito con php che permettesse di collegarsi dallo script a files su altri server.... (ora finalmente sto per acquistare un servizio di hosting serio (spero sia serio!!) e forse potrò metterlo online in tempi brevi (spero!!)).


Anche io avevo pensato a PI, pero', tutto sommato, non mi interessa avere un feed di news che vengono aggiornate una sola volta al giorno che mi gira in continuazione sul display :)

Originally posted by "Skatman"


se hai altri progetti di questo genere io col php me la cavicchio (anche se è un pò che non utilizzo).... e posso darti una mano... (tempo permettendo che è davvero poco!)

Be', una cosa carina sarebbe modificare ulteriormente quello che ho postato in modo tale che, invece che generare 2 variabili per "trasmissione" ne generi un po' di piu':

-Una per l'orario.
-Una per il titolo.
-Una per Il genere.
-Una per il sottogenere.
-Una per la descrizione (se presente, come ho detto, non sempre c'e'...).
-Una per il canale televisivo.

Si tratterebbe in pratica di affidare il secondo parsing, che io ho fatto fare a jaLCDs, direttamente al server remoto. Questo sgraverebbe un pochino la CPU locale e permetterebbe di personalizzare gli screens in manierà meno complessa di come l'ho fatto io.

Originally posted by "Skatman"


ciao ciao e ancora complimenti...


Grazie e ciao. ;)

Skatman
24-02-2003, 18:26
Anche io avevo pensato a PI, pero', tutto sommato, non mi interessa avere un feed di news che vengono aggiornate una sola volta al giorno che mi gira in continuazione sul display

effettivamente non hai tutti i torti.....

Si tratterebbe in pratica di affidare il secondo parsing, che io ho fatto fare a jaLCDs, direttamente al server remoto. Questo sgraverebbe un pochino la CPU locale e permetterebbe di personalizzare gli screens in manierà meno complessa di come l'ho fatto io.

mmm.. si può fare... se trovo il tempo mi ci metto...

già che ci sono abuso ancora un pò della tua disponibilità!! :D :D

nel tuo primo post dici che si possono mettere solo 8 caratteri personalizzati.. ed effettivamente io ho provato a mettere 10 caratteri custom e ne sono venuti visualizzati solo 8.... ma allora perchè su jalcds.de ci sono dei set di caratteri con più di 8 chars?

inoltre le animazioni tipo quella "asus" con 128 "chars" a che servono se non possono essere visualizzate correttamente?
io ho provato e viene tutta sballata....

inoltre da quando ho la 3.10 pure il secondo tipo di orologio e i growing chars non funzionano più correttamente.... vengono visualizzati in parte e con caratteri sballati... succede solo a me?

ciao e grazie!

dhs
24-02-2003, 19:24
Originally posted by "Skatman"

mmm.. si può fare... se trovo il tempo mi ci metto...


ottimo! :)


nel tuo primo post dici che si possono mettere solo 8 caratteri personalizzati.. ed effettivamente io ho provato a mettere 10 caratteri custom e ne sono venuti visualizzati solo 8.... ma allora perchè su jalcds.de ci sono dei set di caratteri con più di 8 chars?


I set di caratteri con piu' di 8 chars sono o animazioni o set completi di caratteri alternativi.
Il limite non e' nel numero di caratteri ridefinibili, ma nel numero massimo di caratteri che:

- *possono* stare nella piccola ram del display contemporaneamente.
- *possono* essere visualizzati in contemporanea.

Esempio:

Produci un file .char con 20 caratteri.
All'avvio, jaLCDs li carica ma *non* li invia al display.
Nel momento in cui tu li visualizzi in uno schermo, richiamandoli con il comando char, solo i caratteri richiamati vengono messi nella ram del display ed utilizzati.
In ogni caso, il display non mostrerà piu' di 8 caratteri custom in ogni schermo.

Siccome ogni regola ha le sue eccezioni:

-Da quel che ho visto, in realtà, nella ram dei display c'e' posto per almeno una ventina di caratteri, pero' sembra che alcune zone di memoria "speciali" possano essere accedute solo in modo particolare.
-L'autore di jaLCDs (come quello di winplug) deve avere trovato il sistema per aggirare, in determinate circostanze, il limite degli 8 caratteri grafici: l'esempio piu' eclatante e' lo spectrum analyzer di winamp (si, le "crescent bars" sono tutti caratteri "speciali" non residenti in rom).
-Anche le normali "bar" sono caratteri speciali....


inoltre le animazioni tipo quella "asus" con 128 "chars" a che servono se non possono essere visualizzate correttamente?
io ho provato e viene tutta sballata....

Se sono animazioni, l'importante e' che la parte visualizzata sia composta da massimo 8 caratteri. Poi questi verranno variati nei frames da jaLCDs, creando l'animazione.

inoltre da quando ho la 3.10 pure il secondo tipo di orologio e i growing chars non funzionano più correttamente.... vengono visualizzati in parte e con caratteri sballati... succede solo a me?

Per i growing non so (non li uso), per l'orologio, non so che dirti: io uso proprio il clock2, senza alcun problema :-/

Ciao.l

Jimmy3Dita
24-02-2003, 23:49
Il post non e' piu' in rilievo perche'... beh lo scoprirete presto! :)

Spank
02-03-2003, 23:41
ehm dhs, non li guardi mai i pvt? :eek: :p

te ne ho mandato uno x chiederti na cosa, almeno 1 settimana fa :muro: :eek: :(