Home ] Su ] Novità ] FAQ ] Hardware ] Software ] Windows ] Sicurezza ] Linguaggi ] Cerca ] Contatta ] Guestbook ] Mappa ] Info su... ]

La FAQ su Hamster - Pagina 4


La versione originale è sempre disponibile all'indirizzo http://www.geocities.com/fashionavenue/1075/.
Al suddetto indirizzo potete trovare materiale più aggiornato rispetto al contenuto della FAQ su Hamster di questo sito.
Prima di continuare a leggere la seguente Pagina 4 della FAQ su Hamster, vi invitiamo a prendere visione del disclaimer, dei copyright e delle note di revisione, situate in questa pagina.


FAQ su Hamster - Release 0.9b


Sezione 7: Lo Scorefile di Hamster "(root)\scores.hst"

7.1 A cosa serve lo Scorefile? Il file "(root)\scores.hst"

Le regole del file "Scores.hst" determinano, dopo il caricamento delle intestazioni "xover", quali articoli saranno caricati immediatamente, quali articoli saranno rimandati al Killfile-Log e quali saranno bocciati senza appello (il comando NNRP xover scarica comunque tutte le intestazioni).

Questo filtro viene realizzato con una tecnica chiamata "Scoring" ed equivale ad assegnare un punteggio, un voto. In Hamster, questo significa che ogni articolo parte con un punteggio (score-value) di zero per poi guadagnare o perdere punti se i campi in esso contenuti corrispondono una o più regole presenti nello scorefile.

Il punteggio assegnato determina se l'articolo verrà caricato. Se il valore è maggiore o uguale a zero (>=0), l'articolo sarà caricato immediatamente. Altrimenti, (<0) non sarà caricato, ma rimandato al Killfile-Log, da dove potrà essere successivamente caricato manualmente. Per mantenere questo file-log piccolo e comprensibile, potete impostare un ulteriore limite di punteggio nel campo Killfile-Settings, il quale previene le registrazioni con un punteggio molto basso (bocciatura diretta, leggete i punti 6.11 e 6.12).

Torna all'indice

7.2 Una veduta generale della sintassi dello Scorefile

Scores.hst (Scorefile) è un semplice file di testo, modificabile con qualsiasi editor, compreso il blocco note di Ms Windows.

Prima di iniziare, vorrei premettere che, contrariamente a ciò che alcuni potrebbero pensare, la sintassi dello scorefile è molto semplice, in alcuni casi addirittura banale. A una prima analisi potrebbe sembrare difficile, ma al punto successivo sarà subito possibile passare a esempi molto semplici che permetteranno di apprenderne velocemente il funzionamento.

ESEMPIO DI SCOREFILE CON LEGGENDA:

      ["*"]                        --+
      -9999 Subject "$$$"            |-- ScoreBlock
      =+1  From  tuo@indirizzo.it  --+
          |____| |______________|
            ||          ||              
        ScoreField    Pattern
       |_______________________|
                  ||
              ScorePattern
      [it.test]            <--- ScoreScope
      =+1 References "tuoFQDN"  <--
      =+1 Message-ID "tuoFQDN"  <-- ScoreRule
      -9999 Subject "prova"     <--
  
      ["*" -"it.test"]  <--- ScoreScope
      
          |__________|
               ||
          ScopePattern formato da "+ o -" più il Pattern "it.test"

Lo Scorefile, appare quindi formato da blocchi di regole, chiamati ScoreBlock, in testa ai quali campeggiano gli ScoreScope. Gli ScoreScope servono per identificare su quale gruppo o su quali gruppi debbano o non debbano essere applicate le regole. Gli ScoreScope, infatti, contengono uno o più ScopePattern che sono modelli o regole che pongono una condizione di corrispondenza verso un valore o una stringa ancora sconosciuta e quindi astratta. Per esempio, uno ScopePattern del tipo "$$$" corrisponde qualsiasi stringa in cui compaiano tre simboli $ consecutivi. Le ScoreRule, invece, possono contenere uno o più Pattern, in questo caso però all'interno di una struttura più ampia detto ScorePattern, a sua volta quindi scomponibile in ScoreField (insieme di campi sensibili alle regole) e uno o più Pattern (regola vera e propria).

Il Pattern può essere realizzato come PatSimple o come PatRegExp.

Il PatSimple fa capo a tre modalità di corrispondenza (match) che sono PatSimpleAll, PatSimpleText e PatSimpleNumber. Il primo caso corrisponde qualsiasi valore o stringa attraverso "*", il secondo si impiega quando una stringa (ad esempio "$$$") deve corrisponderne qualsiasi altra che la contiene, infine il terzo è d'obbligo per gestire valori che possono essere numero di righe, bytes, date, ecc. con simboli come % < = >.

Il PatRegExp fa capo invece al Perl Compatible Regular Expression-style (PCRE-style). E' più complesso del precedente, ma è considerato il migliore mezzo per determinare corrispondenze (match) e poter così filtrare al meglio.

STRUTTURA DELLO SCOREFILE IN PILLOLE:

ScoreFile = *(ScoreBlock \ cEOL )

ScoreBlock = ScoreScope *( ScoreRule / cEOL )

ScoreScope = "[" ScopePattern *( 1*WSP ScopePattern ) "]" cEOL ScopePattern = [ "+" / "-" ] Pattern

ScoreRule = ["="] ScoreValue 1*WSP ScoreSelection cEOL ScoreValue = ( "+" / "-" ) <Number> ScoreSelection = ScoreDefField 1*( 1*WHSP ScorePattern ) ScorePattern = ["+"/"-"] [ "@" ScoreField ":" ] Pattern ScoreDefField = [ "~" ] ScoreField

ScoreField = ( "Number" / "Subject" / "From" / "Date" / "Message-ID" / "References" / "Bytes" / "Lines" / "Xref" / "Xpost" / "Age" ) [":"]

Pattern = ( PatRegExp / PatSimple ) PatRegExp = "{" <PCRE-style regex-pattern> "}" PatSimple = ( PatSimpleAll / PatSimpleText / PatSimpleNumber ) PatSimpleAll = "*" PatSimpleText = """ <Text> """ PatSimpleNumber = "%" ( "<" / "=" / ">" ) <Number>

cEOL = [ "#" <commento> ] CRLF CRLF = ritorno a capo

Torna all'indice

7.3 Lo Scorefile spiegato dall'Help Online

Score-Header:

Ogni ScoreBlock comincia con un header "[...]" che descrive i nomi dei gruppi sui i quali saranno testate le ScoreRule successive:

[*] # ScoreRule valide per tutti i gruppi

[* -".news"] # ScoreRule valide per tutti i gruppi, ad eccezione di quelli # contenenti ".news"

["news" "usenet"] # ScoreRule valide per tutti i gruppi contenenti "news" o # "usenet".

[{^news\.} {^alt\.usenet\.}] # ScoreRule valide per tutti i gruppi che cominciano per "news." # o "alt.usenet."

I modelli dentro "[...]" seguono le stesse regole degli ScorePattern descritti più sotto.

ScoreRule:

Lo score-value per un articolo testato è elevato con "+" e abbassato con "-", seguiti dal valore del cambiamento.

+100 subject "hamster" -100 subject "make money fast"

Se una ScoreRule è preceduta con "=", lo score-value è impostato al valore dato e nessuna modifica sarà applicata sull'articolo in oggetto:

=+9999 from "my.mail@address" =-9999 from "spam.mail@address"

I campi sensibili allo score-value dipendono dalle informazioni restituite dal news server remoto ("XOVER")[*]. Nella maggior parte dei casi, i seguenti campi sono disponibili per assegnare un punteggio: Subject, From, Date, Age, Message-ID, References, Bytes, Lines, Xref, Xpost:

+100 subject "hamster"

-100 from {no.*spam} +500 message-id "my.unique.fqdn" +100 references "my.unique.fqdn" -100 bytes %>10000 -100 lines %>250

[*] Nota: Hamster ancora non supporta campi addizionali eventualmente restituiti dai server.

Lo ScoreField Xpost è fittizio perché basato su Xref e offre il numero di gruppi in cui l'articolo è in crosspost:

-10 xpost %>2 # spedito a più di 2 gruppi =-9999 xpost %>5 # spedito a più di 5 gruppi

Lo ScoreField Age è fittizio perché basato su "Date:" e offre l'età in giorni degli articoli:

=-9999 age %>14 # ignora tutti gli articoli più vecchi di 14 # giorni

Se un nome di capo è preceduto con "~", il contenuto del campo in oggetto è decifrato in MIME prima di testarlo:

+100 ~subject "hämstêr" -100 ~from "jürgen"

[*] Nota: questa caratteristica è obsoleta.

ScorePattern:

I modelli senza un segno "+"- o "-" iniziale significano che uno o più di uno di essi devono trovare riscontro:

# "hamster" o "newsserver" o "mailserver" +1 subject "hamster" "newsserver" "mailserver"

I modelli con un segno "+" iniziale significano che il campo in oggetto deve corrispondere quel valore:

# "hamster" in combinazione con "newsserver" oppure "mailserver" +1 subject +"hamster" "newsserver" "mailserver"

I modelli con un segno "-" iniziale significano che il campo non deve contenere quel valore:

# "newsserver" o "mailserver" non concernenti "unix/linux/inn" +1 subject "newsserver" "mailserver" -"unix" -"linux" -"inn"

# Campo From non contenente "@" =-9999 from -"@"

Per combinare differenti campi in una ScoreRule, potete qualificare il modello con il suo nome:

-1 subject "help" "urgent" "!!!" -@from:"my@address" -"SCNR"

Se un Pattern è collocato dentro "{...}", viene trattato come espressione regolare PCRE-style [*]:

# Ignora quelli che usano l'antispam: -1 from {no.?spam} {(remove|delete|cut).*this}

[*] La documentazione Perl per le espressioni regolari può essere trovata all'URL che segue: http://www.perl.com/CPAN-local/doc/manual/html/pod/perlre.html

Esempi:

# Una sezione che comincia con "[*]" contiene ScoreRule globali # che saranno usate per tutti i gruppi

[*] # Carica tutti i miei articoli immediatamente: =+9999 From "mio nome" =+9999 Message-ID mio.FQDN

# Carica gli articoli che riferiscono ai miei articoli: =+5000 References mio.fqdn

# Siamo interessati negli articoli relativi a questi divertenti e # piccoli animali con piccole antenne sulla testa: =+1000 Subject hamster "HELP! THERE'S A BIG FAT RAT!" "SCNR ;-)"

# Vogliamo ignorare stupidi suggerimenti quali: =-1000 Subject "MAKE HAMSTER FAST!!!!" # (Attenzione: questo pattern è racchiuso tra virgolette e non # altera le corrispondenze con subject che contengono la parola # hamster

# Gli esempi che seguono usano ScoreRule specifiche per gruppo # cominciando una nuova sezione nello ScoreFile con una riga # "[...]" (ScoreScope). # Dato che Hamster costruisce un elenco score "individuale" per # ogni gruppo prima del caricamento degli articoli, è meglio # definire filtri "individuali" se le ScoreRule sono necessarie # solo per alcuni di essi.

# Ignora "grandi" articoli che non hanno "FAQ" nel subject e non # sono spediti su it.news.annunci [* -"it.news.annunci"] -10 Lines %>200 -10 Bytes %>10000 +20 Subject FAQ

# Ignora gli articoli spediti a più di tre gruppi: -10 Xpost %>3

# Ignora gli articoli con subject che contiene "!!!" in tutti i # gruppi ad eccezione di it.news.aiuto [* -"it.news.aiuto"] -1 Subject "!!!"

# Alcuni gruppi sono più leggibili, se ignorate tutti gli articoli # e caricate solo quelli specifici immediatamente, ad esempio: [nome.gruppo.uno nome.gruppo.due nome.gruppo.tre] -1 Message-ID * +1 Subject "interest1" "interest2" "interest3" "interest4" +1 From "user1" "user2" "user3" "user4"

Torna all'indice

7.4 Come si fa un filtro plonk? Cos'è un filtro plonk?

In un gruppo di discussione, di fronte a un utente che da continuamente vita a polemiche, seguite magari da decine di messaggi senza senso, molti ricorrono al *plonk*. Il plonk è un filtro che permette di non caricare i messaggi attribuibili a un determinato utente.

Per realizzare un plonk con Hamster, è sufficiente modificare il file Scores.hst (menù Fillfile-Log/Settings, menù File -> Edit Scorefile). Scegliere l'estensione della regola, ovvero quali gruppi deve riguardare. Creare la regola.

Partiamo da un esempio: conosciamo un utente fastidioso che ha il seguente campo "from" nelle intestazioni: From: "Mario Rossi" <mario.rossi@provider.it>

Potremo facilmente evitarlo in futuro con questo ScoreScope seguito dalla regola contenuta nella ScoreRule.

[it.nome.gruppo] -9999 From mario.rossi@provider.it

Questo eviterà di scaricare i messaggi di chi impiega l'email address indicato in quel particolare gruppo.

L'esempio precedente equivale a scrivere:

["it.nome.gruppo"] -9999 From "mario.rossi@provider.it"

Le virgolette, in questo caso, sono solo impiegate per dare chiarezza visiva.

Lo stesso utente può però essere evitato applicando questa regola:

-9999 From mario rossi

ma questo ha lo svantaggio di punire tutti gli utenti che nell'indirizzo o nel loro nickname riportano anche solo una di queste parole, "mario" e "rossi". Saranno filtrati anche i vari Rossini, Rossignoli, ecc. (PatSimpleAll).

Possiamo quindi risolvere il problema usando le virgolette che, se prima non servivano, ora diventano essenziali.

-9999 From "mario rossi"

Per essere sicuri di non fare errori si dovrebbe riportare l'intero campo from. Tuttavia, in questo caso, vediamo che nell'indirizzo appaiono delle virgolette che sono caratteri riservati per le regole PatSimple e quindi non comprensibili all'interno di una regola. L'unica soluzione a questo problema è usare un più complesso PatRegExp di questo tipo:

-9999 From {"Mario Rossi" <mario\.rossi@provider\.it>}

Come avrete forse capito analizzando la precedente struttura dello ScoreFile, una regex (regular expression o espressione regolare) deve essere contenuta in mezzo a due parentesi graffe, "{" e "}". Su http://www.geocities.com/fashionavenue/1075 si può scaricare una guida al PCRE-style.

Torna all'indice

7.5 Come posso scaricare solo i miei messaggi?

Questa regola può essere utile quando sottoscriviamo un gruppo per fare prove, come it.test o it.test.moderato. Senza questa regola Hamster caricherebbe inutilmente messaggi ai quali non siamo interessati.

Dovremo quindi porre una regola generale per assegnare un punteggio negativo a tutti i messaggi, esclusi i nostri.

In generale, esistono due ScoreField adatti per scaricare solo i nostri messaggi: "From" e "Message-ID".

Quindi avremo:

[it.test] -9999 From * -"mio@indirizzo.it"

oppure

[it.test] -9999 Message-ID * -"mioFQDN"

Osservate con attenzione la funzione del simbolo "-" che esclude il secondo Pattern (indirizzo o FQDN) dal subire gli effetti di quello che lo precede (filtro generalizzato "*" (PatSimpleAll)).

L'utilità del FQDN è spiegata al punto 6.8, mentre per la sua realizzazione pratica, leggete il punto della sezione 11 relativo al vostro newsreader.

Torna all'indice

7.6 Come posso scaricare solo i thread che mi interessano?

Questa regola può essere utile tutte le volte in cui ci imbattiamo in newsgroup ad alto traffico e vogliamo caricare in prima battuta tutti i messaggi che abbiano nel subject almeno una parola di nostro interesse.

Ad esempio, se partecipando al gruppo it.comp.software.newsreader, fossimo interessati ai soli messaggi relativi ad Outlook Express, potremmo impiegare questa regola.

[it.comp.software.newsreader] -9999 Subject * -"Outlook" -"OE"

La funzione del simbolo "-" che precede il PatSimple equivale a quella del punto precedente. In altri termini, questa ScoreRule assegna un punteggio negativo a tutti gli articoli che non riportano almeno una delle parole contenute nelle ultime due ScorePattern, Outlook e OE.

Questa regola ha l'inconveniente di non caricare tutti i messaggi che non riportano alcun segno identificatore del contenuto e che magari potrebbero trattare proprio il newsreader in oggetto. Ad esempio, il semplice messaggio: "Aiuto. Cosa è la sincronizzazione" che con ogni probabilità si riferisce proprio ad Outlook passerà al Killfile-Log senza essere caricato.

Non è un grosso male, come già anticipato altrove, è sufficiente selezionare le voci ancora importanti presenti nel Killfile-Log e poi attivare Ctrl+m. In questo modo, alla connessione successiva, sarà possibile scaricare anche i messaggi sfuggiti.

Tuttavia, nonostante un controllo scrupoloso delle voci presenti nel Killfile-Log, alcuni messaggi possono sempre sfuggire poiché molti utenti non comprendono l'importanza di far capire nel subject cosa stanno scrivendo, soprattutto quando danno per scontata la lettura del proprio messaggio.

In questo caso, l'unica soluzione è scaricare almeno tutti i messaggi padri dei thread, riservandoci la scelta di seguire manualmente le eventuali repliche.

Torna all'indice

7.7 Come posso scaricare solo i messaggi padri?

Questa regola può essere utile tutte le volte in cui ci imbattiamo in un newsgroup ad alto traffico, fortemente generalista e vogliamo caricare in prima battuta solo i messaggi padri o capostipiti dei thread. Sarà nostra cura intervenire poi manualmente nel Killfile-Log con Ctrl+m sui messaggi appartenenti ai thread che avremo reputato di nostro interesse.

Ad esempio, nel gruppo it.news.aiuto potremo scegliere di non caricare in prima istanza tutte le repliche, ovvero tutti i messaggi che riportano all'inizio del subject il prefisso di replica "Re: ".

[it.news.aiuto] -9999 Subject {^Re:\s|^R:\s}

E' da notare come in questo caso non sia possibile fare a meno delle conoscenze di base del PCRE-style che ci permette di realizzare un PatRegExp semplice ed efficace.

Questa regola comprende un'alternativa al fine di individuare il maggior numero possibile di repliche. Questa scelta è dovuta al fatto che alcune versioni di Outlook Express impiegano prefissi fuori standard come "R: "

In realtà, l'utilità in sé della ScoreRule creata non è determinante, ma esistono esempi di filtri complessi con più ScoreRule interrelate, in cui tale utilità cresce in misura notevole. E' il caso del punto 7.10

Il metodo utilizzato non è l'unico per individuare le repliche NNTP. Inoltre, se è vero che "Re: " rappresenta il prefisso standard, è anche vero che il suo impiego non è obbligatorio e, quindi, qualche corrispondente Usenet potrebbe avere un newsreader che ne fa a meno. Un altro metodo, quindi, corrisponde all'impiego dello ScoreField References al posto di Subject o meglio ancora in suo abbinamento. Ricordo che i messaggi padri non dispongono di alcun campo References a meno di non essere frutto di reindirizzamenti da thread di altri gruppi (followup-to:). Avremo quindi:

[it.news.aiuto] =+1 References -"@" -9999 Subject {^Re:\s|^R:\s} -9999 References "@"

Questa è già una forma di filtro complessa poiché le tre ScoreRule sono tra di esse interrelate. La prima assegna un punteggio positivo a tutti i messaggi senza campo References (tutti i messaggi con campo References riportano almeno una volta il carattere @ in quel dato ScoreField). Il simbolo "=" all'inizio rende immuni alle regole presenti nelle ScoreRule successive gli articoli che ottengono un punteggio. La seconda ScoreRule assegna un punteggio negativo a tutti i messaggi con prefisso di replica nel Subject (vengono però esclusi quelli senza References che hanno il punteggio di 1, ma teoricamente non dovrebbero esistere messaggi che soddisfano la prima e la seconda ScoreRule). Infine, la terza ScoreRule assegna un punteggio negativo a tutto ciò che rimane (indi messaggi di replica con campo References, ma senza prefisso di replica)

Tuttavia, considerando azzardata l'ipotesi del newsreader che non applica il prefisso di replica e valutando possibile il followup-to da altri gruppi, lo ScoreBlock "eccellente" sembra non formulabile, ma questo non è grave. Abbattere in modo sostanziale il traffico, non comporta avere il controllo assoluto su di esso. Questa caratteristica di Usenet è ben nota ai newsmaster che non perdono tempo ad inseguire la luna, ma si limitano a gestire la maggior parte del feed possibile, con le risorse disponibili.

Torna all'indice

7.8 Come posso evitare i messaggi di grandi dimensioni?

Questa regola può essere utile se non vogliamo prodigarci a leggere messaggi di lunghezza eccessiva.

Esistono due ScoreField che possiamo prendere in considerazione, Lines e Bytes. Il primo riguarda il numero di righe il secondo la sua dimensione in byte del messaggio. Per avere un riferimento tra le due dimensioni, un messaggio di 50 righe occupa circa 4.000 byte (senza contare le intestazioni).

["*" -"binari" -"binary"] -9999 lines %>300

Nell'esempio precedente, abbiamo creato uno ScoreBlock che dovrebbe essere posto in testa allo ScoreFile, prima di tutte le altre. Lo ScoreScope contiene tre ScopePattern che servono in buona sostanza ad applicare le regole contenute nelle ScoreRule successive a tutti i gruppi ad esclusione di quelli che riportano le parole binari o binary nel nome. La regola nella ScoreRule evita il caricamento dei messaggi che eccedono le 300 righe.

Lo ScoreBlock precedente equivale di fatto al seguente:

["*" -"binari" -"binary"] -9999 bytes %>24000

Torna all'indice

7.9 Come posso limitare il crossposting?

Il crossposting è un fenomeno tipicamente diffuso dove ci sono gruppi generalisti che condividono parte del proprio topic con gruppi specialisti. Su Usenet il crosspost, se non limitato con il followup-to, viene spesso considerato come qualcosa di sbagliato poiché accade che il thread prenda una piega diversa senza rispettare più il topic originario. Nel contempo chi scrive lascia colpevolmente il crosspost senza curarsi dell'effetto fastidioso che può generare sugli utenti presenti nell'altro gruppo.

Nel caso fossi ad esempio un utente di it.discussioni.telecom e volessi evitare di leggere qualsiasi xpost con it.discussioni.consumatori.tutela, potrei fare così:

[it.discussioni.telecom] =-9999 Xref "it.discussioni.consumatori.tutela"

Se invece volessi evitare tutti i messaggi in crosspost con qualsiasi gruppo potrei usare:

[it.discussioni.telecom] =-9999 Xpost %>1

Xpost è uno ScoreField che determina il numero di gruppi presenti nel campo Newsgroups. Xref, invece, identifica il contenuto dell'omonimo campo delle intestazioni.

Torna all'indice

7.10 Alcuni esempi di filtri complessi

Caso a. Seguito dei thread di proprio interesse

[it.comp.software.newsreader] =+1 Subject "Outlook" "OE" =+1 Message-ID "mio.FQDN" =+1 References "mio.FQDN" -9999 References "@"

In questo modo viene data priorità agli articoli che riportano la parola Outlook o la parola OE nel Subject. Parimenti non sono esclusi tutti i miei messaggi anche se non riportano almeno una di quelle parole e tutti i messaggi degli altri utenti incolonnati per References su uno dei miei. Sono scaricati comunque tutti i messaggi padre, ad eccezione di quelli in followup-to da altri gruppi, mentre vengono accuratamente evitate tutte le repliche che, o non sono attinenti all'argomento Outlook (Subject), o non sono miei messaggi (Message-ID), o non appartengono ad un thread a cui io ho partecipato (References).

La stringa FQDN è oggetto di trattazione al punto 6.8, mentre per la sua realizzazione pratica, leggete il punto della sezione 11 relativo al vostro newsreader.

Caso b. Seguito distaccato di un gruppo in cui compaiono racconti.

[it.arti.scrivere] =-1 Subject {^Re:\s|^R:\s} =+1 lines %>50 -1 Subject *

Lo ScoreBlock offre la massima visibilità agli articoli che superano le 50 righe che però non sono repliche. A tutto il resto viene assegnato un punteggio negativo. In altre parole, possiamo leggere gli articoli (presumibilmente racconti) che superano un certo numero di righe ma, allo stesso tempo, scartiamo tutti i messaggi lunghi che, con ogni probabilità, costituiscono repliche e spunti di discussione sul contenuto dei racconti. Non ci interessiamo ai messaggi brevi, anche se originari, perché presupponiamo che possano essere sonetti, poesie o altro.

Lo ammetto, questa logica che valuta la letteratura per numero di righe farebbe accapponare la pelle a qualsiasi insegnante, ma lasciamo liberi di partecipare gli utenti nelle forme che loro desiderano ;-))

Torna all'indice

7.11 Come posso filtrare la posta elettronica?

Hamster permette di filtrare la posta elettronica solo da una versione relativamente recente, ovvero la 1.3.14.

Torna all'indice

7.12 Cos'è HamScore? A cosa serve? Dove si scarica?

HamScore è un utility che interagisce con il database di Hamster e serve per testare ScoreRule di cui non si è sicuri sul parco articoli disponibile, in modo da non arrecare danni nel trasporto news dai server remoti.

HamScore è liberamente scaricabile da: http://home.knuut.de/heiko.rost/

La lingua utilizzata è il tedesco, ma il programma offre solo due o tre funzioni essenziali e comprensibili.

Per installare HamScore basta decompattare il relativo file .zip nella stessa cartella di Hamster.

Quando vogliamo realizzare una nuova regola o una serie di esse, possiamo usare tranquillamente lo Scorefile di Hamster per poi testarne gli effetti sul parco dei messaggi presenti nella cache.

Creata la nuova regola, lanciate HamScore, selezionate il gruppo oggetto del vostro interesse e premete [Start]. Alternativamente, doppio click sul gruppo. HamScore comincerà immediatamente a setacciare dentro il database di Hamster la corrispondenza alle regole che avete creato. Se HamScore si dovesse bloccare, il fatto è causato con ogni probabilità da regole sintatticamente sbagliate. Al termine, nei due grandi riquadri appariranno, da una parte l'elenco degli articoli presenti nel gruppo ordinabili per i vari ScoreField e per Score, dall'altra le ScoreRule applicate nel gruppo corrente (comprendendo anche quelle globali). Potrete quindi verificare se lo score applicato sugli articoli soddisfa le vostre esigenze iniziali, senza aver rischiato di arrecare danni agli articoli, e senza aver perso inutilmente tempo online. Inoltre, nell'elenco degli articoli potrete vedere anche un singolo articolo semplicemente aprendolo con il doppio click. Se l'esperimento riesce, potrete subito passare alla connessione al server remoto.

Torna all'indice

7.13 Cosa sono le espressioni regolari? Cosa è il PCRE?

Questo argomento è oggetto di trattazione articolata e completa in un'altra guida, precisamente potete scaricarla da: http://www.geocities.com/fashionavenue/1075

La PCRE library è un set di funzioni che implementano espressioni regolari con condizioni da soddisfare usando la stessa sintassi e semantica del Perl 5 (con qualche piccola differenza).

Una espressione regolare è una condizione, o un modello di condizioni, che deve essere soddisfatta da una stringa, partendo da sinistra verso destra. All'interno di un modello, la maggior parte dei caratteri vale per sé e misura o soddisfa i corrispondenti caratteri oggetto della nostra attenzione. Alcuni di essi, invece, operano come caratteri speciali o metacaratteri.

Come si è visto in precedenza (punto 7.2), in Hamster un Pattern o modello può essere realizzato sia come PatSimple che come PatRegExp. RegExp è il termine usato per abbreviare le parole "regular expression" (espressione regolare).

Realizzare un PatRegExp in Hamster è piuttosto semplice. La stessa cosa non si può dire per le espressioni regolari racchiuse al suo interno che richiedono almeno un po' di familiarità nel loro utilizzo e sono da sconsigliare se la funzione assolta può essere parimenti svolta da un PatSimple.

Così, con il modello "$$$" e il PatRegExp {$$$}, potremo scrivere la seguente ScoreRule:

-9999 Subject {$$$}

In questo modo, non caricheremo più ogni messaggio che riporta la stringa {$$$} all'interno del suo subject, in qualsiasi posizione sia essa contenuta. Una regex, quindi, per essere definita come tale deve essere racchiusa all'interno delle parentesi graffe "{" e "}". Tali parentesi non sono presenti sulla tastiera italiana, ma possono essere facilmente riprodotte usando contemporaneamente " Shift + Alt Gr + [ " (]), oppure in tutte le altre tastiere con le combinazioni di tasti Alt+123 e Alt+125.

Nonostante l'incremento costante della potenza di calcolo dei processori, esistono alcuni modelli (formati da ripetizioni, alternative e subpattern) particolarmente complessi che richiedono diverso tempo per essere risolti. Ciò porta, se non si è accorti, a un deprimento delle prestazioni del sistema, ma soprattutto a ritardi nell'esecuzione delle operazioni online.

In ogni caso, è raro, almeno per quanto riguarda i filtri Usenet, avere bisogno di modelli così complessi.

Torna all'indice

 

Sezione 7a: I filtri e-mail di Hamster "(root)\MailFilt.hst"

7a.1 A cosa servono i filtri e-mail? Il file"(root)\MailFilt.hst"

Le regole presenti nel file "MailFilt.hst" determinano: a. quali email saranno scaricate dai server POP3 di posta; b. cosa fare con le email una volta scaricate.

In altri termini, questo file da modificare manualmente con il blocco note di Windows, permette di scrivere regole che possono bloccare in partenza determinate email o, in alternativa, predisporre percorsi diversi quali, ad esempio, la consegna a un utente locale piuttosto che all'amministratore.

Torna all'indice

7a.2 Come evitare di scaricare la posta indesiderata dal server?

Se il file MailFilt.hst contiene una regola "ignore" o "kill", Hamster per prima cosa proverà a caricare le intestazioni della posta disponibile e, solo se alla fine le regole diranno "yes, it's ok to load them", la posta verrà scaricata completamente e inoltrata al loro destinatario finale.

* Ogni email comincia con "yes, it's ok to load it". * Se una regola "ignore" corrisponde, il messaggio email non sarà caricato completamente e verrà inoltrato ai destinatari finali. * Se una regola "kill" corrisponde, il messaggio email non sarà caricato, ma cancellato. * Se una regola "load" corrisponde, verrà revocata una regola "ignore" o "kill" precedentemente corrisposta.

In modo predefinito, "ignore" e "kill" funzionano "silenziosamente", così solo Hamster conosce se e quali messaggi sono stati realmente ignorati o cancellati. Per abilitare la notifica per ogni email che è stata ignorata o cancellata, aggiungete una riga "notify".

Nota: l'opzione "[X] Leave mails on server, i.e. do not delete them" ha una priorità più alta delle regole fornite in Mailfilt.hst. In questo modo, con la spunta di questa casella, se una regola dicesse "cancella questa email", essa non verrebbe comunque cancellata.

Torna all'indice

7a.3 Come destinare la posta a un destinatario o a un newsgroup?

Dopo che un messaggio email è stato scaricato, deve essere inoltrato al suo destinatario finale. Il secondo gruppo di regole determina in quali mailbox (account) locali o in quali newsgroup debba essere archiviata la posta.

* Ogni email comincia con un elenco vuoto di destinatari e newsgroup. * Se una regola "add" corrisponde, il destinatario dato sarà aggiunto all'elenco dei destinatari. * Se una regola "del" corrisponde, il destinatario dato sarà rimosso dall'elenco dei destinatari. * Se una regola "set" corrisponde, l'elenco dei destinatari sarà sostituito con il destinatario dato. * Se una regola "postto" corrisponde, il newsgroup dato sarà aggiunto all'elenco dei newsgroup.

La regola "addaccounts" controlla se un certo campo nelle intestazioni contiene indirizzi email conosciuti da Hamster. Se viene individuato un indirizzo email locale (specialmente uno di quelli definiti sotto "Local Accounts"), l'account corrispondente viene aggiunto all'elenco dei destinatari.

Se, dopo il test di tutte le regole, entrambi gli elenchi, destinatari e newsgroup, sono ancora vuoti, il messaggio email non verrà perso, ma inviato all'account predefinito. Questo account è sempre l'amministratore a meno che non venga definito un diverso account locale o utente attraverso l'ultimo parametro di un comando script per fetchmail, come ControlRunFetchMail, oppure a meno che non sia inserita una riga "default" in MailFilt.hst.

Torna all'indice

7a.4 Una veduta generale della sintassi di MailFilt.hst

MFilterFile = *( MFilterBlock / cEOL ) MFilterBlock = MFilterScope *( MFilterRule / cEOL ) MFilterScope = "[" ScopePattern *( 1*WSP ScopePattern ) "]" cEOL MFilterRule = ["="] ( MRuleLoad / MRuleDeliver ) cEOL

MRuleLoad = "load" [ "(" ")" ] 1*WSP MSelection MRuleLoad =/ "ignore" [ "(" ")" ] 1*WSP MSelection MRuleLoad =/ "kill" [ "(" ")" ] 1*WSP MSelection MRuleLoad =/ "notify" [ "(" AccountList ")" ]

MRuleDeliver = "default" "(" AccountList ")" MRuleDeliver =/ "addaccounts" [ "(" ")" ] 1*WSP MDefaultField MRuleDeliver =/ "add" "(" AccountList ")" 1*WSP MSelection MRuleDeliver =/ "set" "(" AccountList ")" 1*WSP MSelection MRuleDeliver =/ "del" "(" AccountList ")" 1*WSP MSelection MRuleDeliver =/ "postto" "(" NewsgroupList ")" 1*WSP MSelection

MSelection = MDefaultField 1*( 1*WHSP MSelectPattern )

MDefaultField = [ "~" ] [ "*" ] ( MSingleField / MGroupedField ) MSingleField = ( <Name of any header-field> / "Bytes" ) [ ":" ] MGroupedField = ( "Any-Sender" / "Any-Recipient" ) MSelectPattern= [ "+" / "-" ] [ "@" MSingleField ":" ] Pattern

AccountList = <account-name> *( "," <account-name> ) NewsgroupList = <newsgroup-name> *( "," <newsgroup-name> )

ScopePattern = [ "+" / "-" ] Pattern

Pattern = ( PatRegExp / PatSimple )

PatRegExp = "{" <PCRE-style regex-pattern> "}" PatSimple = ( PatSimpleAll / PatSimpleText / PatSimpleNumber ) PatSimpleAll = "*" PatSimpleText = """ <Text> """ PatSimpleNumber = "%" ( "<" / "=" / ">" ) <Number>

cEOL = [ "#" <Commento> ] CRLF CRLF = ritorno a capo / nuova riga

Filter-Scope:

Ogni blocco comincia con un'intestazione "[...]" che descrive gli elementi distintivi (identifiers) per i quali la corrispondente regola dovrà essere applicata. L'unico modo per impostare questi contrassegni è l'ultimo parametro di un comando script fetchmail (ControlRunFetchMail), ad esempio:

fetchmail "pop3.serv.er" "pop3" "$7" "" "admin,identifier"

[*] # regole valide per tutte le email, indipendentemente # dall'elemento distintivo o contrassegno considerato.

[private] # regole valide per tutte le email caricate con il contrassegno # "private"

[* -private] # regole valide per tutte le email, a eccezione per quelle con il # contrassegno "private"

Filter-Rules:

Nota: la seguente descrizione copre solamente le principali differenze tra i filtri mail e quelli news. Per maggiori dettagli su Pattern (modelli) e tutto il resto, leggete la sezione 7.

Diversamente dai filtri news, ogni regola comincia con una specifica "parola chiave" (keyword) seguita dai suoi parametri all'interno di due parentesi.

kill() From: "spammer@conosciuto.it"

add(john) To: "john@mail.serv.er" postto(hamster.ehamster) To: "ehamster@egroups.com"

Il campo speciale "Bytes" permette di filtrare in base alla dimensione del messaggio:

ignore() Bytes: %>100000

Il campo speciale "Any-Sender" controlla tutti i seguenti campi: "From:" "Apparently-From:" "Sender:" "Reply-To:" "X-Sender:" "Envelope-From:" "X-Envelope-From:"

Ad esempio: load() Any-Sender: "boss@compa.ny" -@Subject:"You are fired!"

Il campo speciale "Any-Recipient" controlla tutti i seguenti campi: "To:" "Apparently-To:" "CC:" "BCC:" "Envelope-To:" "X-Envelope-To:".

Ad esempio: add(john) Any-Recipient: "john@mail.serv.er" add(jane) Any-Recipient: "jane@mail.serv.er" addaccounts() Any-Recipient:

Se un nome campo è preceduto con "~", prima di filtrare il valore del dato campo sarà decifrato in MIME.

Ad esempio: load() ~To: "jürgen"

In modo predefinito, solo la prima intestazione (header) che corrisponde al dato campo verrà testata. Se un nome campo viene preceduto da "*", tutte le intestazioni con quel nome verranno testate:

Ad esempio: add(john) *Received: "john@"

Esempi:

Consegna la posta basata su un indirizzo locale conosciuto.

[*] addaccounts() Any-Recipient: addaccounts() *Received:

Invia la posta delle mailing-list che trattano di Hamster ai newsgroup locali (e una ulteriore copia di ogni messaggio all'amministratore "admin", fino a quando non sarete sicuri che funzioni secondo le vostre aspettative...).

[*] postto(hamster.ml.usehamsternet) To: "usehamsternet@egroups.com" add(admin) To: "usehamsternet@egroups.com" postto(hamster.ml.ehamster) To: "ehamster@egroups.com" add(admin) To: "ehamster@egroups.com"

Torna all'indice

 

Sezione 8: Gli script di Hamster (tratta dalla guida online di Hamster escluso il punto 8.4)

8.1 A cosa servono gli script?

Gli script di Hamster servono a fornire un metodo per semplificare il lancio di compiti ricorrenti. Gli script permettono inoltre di personalizzare in una semplice funzione un lungo e complesso elenco di compiti da soddisfare.

Ad esempio, potremmo voler realizzare uno script per spedire solo i messaggi con un dato news server, ecc.

Torna all'indice

8.2 Cos'è e come si lancia uno script?

Uno script è un semplice insieme di istruzioni, realizzate attraverso appositi comandi, che risiede in un file di testo con estensione *.hsc. Hamster ne fornisce un esempio con default.hsc che si trova nella cartella principale.

Uno script per essere operativo, deve essere salvato come file .hsc all'interno della cartella principale di Hamster. E' sufficiente creare un file di testo con il blocco note di Windows, ad esempio script.txt, per poi modificarne solo l'estensione. Windows non offre in modalità predefinita la possibilità di visualizzare (e cambiare) le estensioni dei file, quindi questa operazione dovrà essere compiuta in Ms-Dos, in questo modo:

c:\>cd\hamster <--- nell'ipotesi che la vostra cartella principale si chiami hamster e si trovi direttamente in C: c:\>ren newscript.txt newscript.hsc

c:\>exit

A questo punto, per lanciare lo script che abbiamo creato, dovremo avviare Hamster (oppure riavviarlo se era già in esecuzione) e verificare che lo script creato appaia nell'elenco del menù Script.

Torna all'indice

8.3 Quali sono i comandi utilizzabili negli script?

I comandi che possono essere incorporati in uno script sono:

{ quit }

ferma l'esecuzione dello script

{ restart }

riavvia lo script dall'inizio

{ call "scriptname.hsc" }

Chiama ed esegue il dato script. Una volta terminato lo script figlio, il genitore continua dopo la riga "call".

{ wait.delay milliseconds }

attende il dato numero di millisecondi (1/1000 di secondo). Esempio: wait.delay 5000

{ wait.until timepoint1 timepoint2 timepoint3 ... }

attende fino a uno dei dati punti di tempo. I tempi devono essere espressi nella forma "hh.mm". Esempio: wait.until 02.00 08.00 12.00 18.00 21.00

{ wait.idle }

attende fino alla chiusura di tutti i task attivi (come purging, pulling news, sending mail, ecc.). Esempio: wait.idle

{ mail.pull ["ServerList"] }

avvia il thread, che prima attira la nuova posta dal mailserver e poi invia all'esterno le mail (se presenti). Se omettete ServerList (elenco dei server) oppure lo impostate come stringa vuota (""), tutti i server POP3 e SMTP definiti in Hamster potranno essere usati. Altrimenti, il trasferimento è ristretto ai server indicati nell'elenco.

Se è presente un elenco dei server, deve essere costituito dai nomi dei server separati da un punto e virgola (";"). I nomi dei server devono essere espressi nello stesso formato come mostrato nelle impostazioni di Hamster (ovvero nomeserver + "," + porta). Esempio: mail.pull Esempio: mail.pull "mail.aaa.com,pop3;mail.bbb.com,pop3;mail.aaa.com,smtp"

{ fetchmail Server Port User Pass DestUser }

Avvia un thread, che attira la posta da un dato server POP3 (Server, Port).

Se si forniscono in chiaro username e password, saranno usati per autenticare il server, se sono entrambi vuoti, saranno usate le impostazioni user/pass per il dato server. Inoltre, una delle password archiviate può essere richiamata per evitare la sua messa in chiaro all'interno dello script (User="$(number)", Pass=""). Se viene fornito il nome dell'utente destinatario (DestUser), la posta scaricata sarà archiviata nella mailbox di questo utente, altrimenti sarà usata la mailbox dell'amministratore. Il nome può opzionalmente essere seguito da una virgola e un elemento distintivo o contrassegno (identifier) che determina la filter-section da usare per la posta scaricata con questo comando (sono predefiniti i filtri globali, ovvero la sezione "[*]" in MailFilt.hst). Esempi: fetchmail "pop3.serv.er" "" "" "" "" fetchmail "pop3.serv.er" "pop3" "john.doe" "secret" "john" fetchmail "pop3.serv.er" "10110" "$7" "" "jane" fetchmail "pop3.serv.er" "pop3" "$7" "" "admin,myfilters"

{ sendmail Server Port FromSelection }

Avvia un thread che spedisce la posta al dato server SMTP (Server, Port). Se non è presente alcuna "FromSelection", tutta la posta in attesa di inoltro viene spedita. Se invece è presente una selezione (espressione regolare), solo la posta che riporta un Envelope-From corrispondente sarà spedita a questo server. Esempi: sendmail "smtp1.serv.er" "smtp" "john\.doe@serv\.er" sendmail "smtp2.serv.er" "" ""

{ news.post ["ServerList"] }

Avvia un thread che spedisce nuovi articoli news (se presenti). Se l'elenco dei server (ServerList) è impostato a stringa vuota (""), potranno essere usati tutti i server NNTP definiti in Hamster. Altrimenti, il trasferimento è ristretto ai server dati (leggete mail.pull per avere visione dei dettagli sul formato impiegato per scrivere l'elenco dei server).

{ news.pull ["Serverlist"] }

Avvia i thread che richiameranno i nuovi articoli dai news server. Se l'elenco dei server (ServerList) è impostato a stringa vuota (""), potranno essere usati tutti i server NNTP definiti in Hamster. Altrimenti, il trasferimento è ristretto ai server dati (leggete mail.pull per avere visione dei dettagli sul formato impiegato per scrivere l'elenco dei server).

{ news.purge [PurgeOptions] }

Avvia un thread purge (ovvero la cancellazione dei vecchi dati). Il parametro "PurgeOptions" è "bit-oriented", nel senso che accetta solo due valori, e descrive quali dati debbano essere cancellati (bit0=1=articles, bit1=2=voci history, bit2=4=killfile-log, bit3=8=voci mailhistory). Se omettete questo valore, tutti i tipi di vecchi dati saranno "purgati". Esempio: news.purge Esempio: news.purge 15

{ news.rebuildhistory }

Avvia un thread che cancella i file history correnti (".\Groups\Hist???.dat") e lo ricostruisce aggiungendo i Message-ID di tutti gli articoli archiviati in Hamster.

Nota: Questo può occupare diverso tempo con migliaglia di articoli, perciò dovrebbe essere usato solo se strettamente necessario! Dopo aver lanciato questa funzione, aspettate fino a quando Hamster avrà terminato.

{ news.rebuildgloballists }

Inizia un thread che ricostruisce alcuni elenchi necessari per Hamster (leggete il menu: "File -> Rebuild global lists" per maggiori dettagli).

{ setlogin "Identifier" "Username" "Password" }

Imposta temporaneamente username e password per il dato "Identifier", che può essere sia il nome di una connessione RAS, sia il nome di un news/mailserver. "Temporaneamente" significa che questa impostazione non viene salvata in un file ma tenuta in memoria fino alla chiusura di Hamster.

Se lo username e/o la password sono impostati con un punto interrogativo ("?"), Hamster ve ne chiederà il contenuto non appena ne avrà bisogno. Inoltre, una delle password archiviate può essere richiamata dallo script per evitarne la messa in chiaro nello stesso. Esempio: setlogin "RAS-connection" "DoeJohn" "Secret!" Esempio: setlogin "news.xxx.com" "DoeJane" "42" Esempio: setlogin "ser.verna.me" "$11" ""

{ ras.dial "ConnectionID" ["Username" ["Password"]] }

Questa funzione attiva la connessione di accesso remoto (RAS) chiamata "ConnectionID". Lo username e/o la password possono essere impostati come stringhe vuote (""). In questo caso, le impostazioni memorizzate in Accesso remoto (se ci sono) oppure i valori archiviati in Hamster saranno impiegati per attivare la connessione. Se il dialogo relativo fallisce, lo script sarà fermato. Esempio: ras.dial "RAS-connection" "DoeJohn" "Secret!" Esempio: ras.dial "RAS-connection"

{ ras.hangup } Chiude la connessione di accesso remoto (RAS) attivata da "ras.dial". Esempio: ras.hangup

{ msgbox "message" } Mostra il dato messaggio. Esempio: msgbox "Script finished!"

{ start.wait "command and parameters" } Avvia un programma esterno con i parametri dati. Lo script viene sospeso fino a quando il programma esterno non ha terminato. Esempio: start.wait "before-dial.bat"

{ start.nowait "command and parameters" } Come "start.wait", ma Hamster non aspetterà fino a quando il programma esterno avrà finito. Lo script continua. Esempio: start.nowait "after-connected.bat"

{ message msg-number [parameter] } Avvia alcune funzioni di Hamster, normalmente disponibili e accessibili attraverso le voci nei suoi menù.

msg-number parameter scopo 1 none Chiude Hamster 2 none Reimposta log e contatori 3 0=stop, 1=start Start/Stop NNTP-server locale 4 0=stop, 1=start Start/Stop POP3-server locale 5 0=stop, 1=start Start/Stop SMTP-server locale 6 0=hide, 1=show Mostra/Nascondi la finestra princ. 7 0=hide, 1=show Mostra/Nascondi l'icona systray Esempio: message 2 Esempio: message 3 0

Esempio:

wait.idle

# purge # wait.idle

ras.dial "name of ras-connection"

mail.pull news.post wait.idle

news.pull wait.idle

ras.hangup

Torna all'indice

8.4 Dove posso trovare documentazione sugli script?

A quanto mi è dato sapere, non esiste documentazione in inglese, né tanto meno in lingua italiana. Al momento le uniche informazioni sono disponibili in lingua tedesca presso l'URL http://home.t-online.de/home/micha-wr/hamster/scriptarchiv.htm  

Si auspica la creazione di un database degli script, descritto in lingua italiana.

Torna all'indice

8.5 Come lanciare uno script con un collegamento sul desktop?

Sì ed è piuttosto semplice. E' sufficiente creare un nuovo collegamento (shortcut) a "Hamster.exe" seguito dal nome del file contenente lo script che si vorrebbe lanciare. Potreste, ad esempio, creare una cartella di rapido accesso con tutte le funzioni che ritenete importanti.

Torna all'indice



Disclaimer

SourceNet non riconosce nessun tipo di garanzia per il contenuto di tutta la sezione dedicata alle FAQ su Hamster pubblicata su questo sito (SourceNet Italia).
Tutto il contenuto della FAQ su Hamster è fornito "così come è", senza alcuna garanzia di qualsiasi tipo, sia espressa che implicita, ivi incluse, senza limitazioni, le garanzie implicite di commerciabilità o idoneità per uno scopo particolare ovvero quelle che escludano la violazione di diritti altrui. L'intero rischio derivante dall'uso o dalle prestazioni del contenuto di tutta la sezione della FAQ su Hamster rimane a carico dell'utente.


Copyright

Il contenuto della sezione delle FAQ su Hamster situata in questo sito è la trasposizione in HTML della FAQ su Hamster di EagleStorm, situata all'indirizzo http://www.geocities.com/fashionavenue/1075/. Il contenuto dell'intera FAQ su Hamster è di proprietà di EagleStorm.
Non è concessa a nessuno la possibilità di copiare il contenuto dell'intera FAQ su Hamster di questo sito senza l'autorizzazione di EagleStorm.


Note sulla revisione

La versione di questa FAQ in italiano è aggiornata alla versione 0.9b della FAQ su Hamster di EagleStorm.

 

Torna ad inizio pagina

La FAQ su Hamster - Pagina 2 ] La FAQ su Hamster - Pagina 3 ] [ La FAQ su Hamster - Pagina 4 ] La FAQ su Hamster - Pagina 5 ]

Ultimo aggiornamento : 17/01/2009.   
Home ] Su ] Novità ] FAQ ] Hardware ] Software ] Windows ] Sicurezza ] Linguaggi ] Cerca ] Contatta ] Guestbook ] Mappa ] Info su... ]

Copyright © 1997-2070, Joseph Parrello. Tutti i diritti sono riservati.

Siete il visitatore n. Contatore Sito
Bpath Contatore
dal 17 gennaio 2009.