Hamster. Guida all'uso (versione 0.9c del 13-10-2000) ===================================================== Curatore: eaglestorm@iname.com (EagleStorm) Ringraziamenti per i preziosi contributi: Andrea Agnoletti Carlo Fusco Joseph Parrello Sleepers tutto il gruppo degli utenti di news:it.comp.software.newsreader tutto il gruppo degli utenti di news:it.comp.software.mailreader inoltre voglio anche ringraziare tutte quelle persone che, pur avendo contribuito con importanti suggerimenti e correzioni alla stesura del presente documento, hanno manifestato il desiderio di rimanere anonimi. (in realtà sono tutti dannatamente presenzialisti, ma scriverlo fa molto politically correct ;-)) Distribuzione: Usenet: posting trimestrale su it.faq web: http://geocities.com/FashionAvenue/1075/ http://www.freeweb.org/computer/SourceNet/hamster.htm http://www.vene.ws/news/hamster.asp http://space.tin.it/cinema/claveron/alessio Licenza d'uso ed altre avvertenze: Questo documento viene rilasciato secondo la licenza GNU General Public License (GPL o copyleft) versione 2 della Free Software Foundation. Chiunque è autorizzato a distribuire copie elettroniche o cartacee del presente documento, allegarlo a raccolte, CD-ROM o programmi, a patto di citare la fonte da cui è stato tratto. Inoltre il presente documento può essere liberamente modificato in ogni sua parte purché venga rilasciato secondo la medesima licenza e i nomi dei curatori della presente versione vengano rimossi. L'autore non si assume _NESSUNA_ responsabilità per eventuali errori o inesattezze eventualmente rilevabili. Questo documento inoltre deve essere considerato frutto delle opinioni personali dell'autore e _non_ una enunciazione di dogmi assoluti. ATTENZIONE: per alcune parti di esso, l'autore si è limitato a tradurre, talvolta letteralmente, quanto già riportato nell'Help online del programma realizzato da Juergen Haible. Ne consegue che i diritti morali d'autore dell'opera limitatamente a quelle parti spettino ai rispettivi legittimari. L'autore della traduzione non fornisce comunque _NESSUNA_ garanzia sulla qualità del lavoro compiuto. Le sezioni 5, 6, 7a, 8, 8a, 9 e 10 ad esclusione dei punti 8.4 e 10.8 e parte della sezione 7 sono frutto di traduzione semi-integrale della guida online del programma. La sezione 11 invece prende spunto da quanto pubblicato sul web da Juergen Haible. Si ribadisce ancora in questa sede come le condizioni di rilascio di questa guida precludano qualsiasi responsabilità per i contenuti ivi espressi. History: Legenda: ! Nuova sezione + Nuovo punto - Eliminato ~ modifica/correzione ~~ revisione V 0.9 : Nasce la faq di Hamster. V 0.9a: Revisione generale dell'intera FAQ ! introduzione + punto 6.15 e scalati quelli a seguire ! sezione 7a dedicata ai filtri e-mail ~ sezione 9 + punto 9.5 ~ punto 13.5 (password) + punto 13.6 (mailbox POP3 multiple) V 0.9b: ~ punto 4.1 ~ punto 6.4 (news-pulls -> [Add]) + punto 8.5 (shortcut per script) + 12.4 e scalati quelli a seguire (purge) V 0.9c: ~ introduzione ~ punti 1.1 e 1.6 Hamster diventa Open Source ~ punto 2.1 Hamster in italiano http://alexseb.freeweb.org ~ punto 2.2 (hamster-related site links) ~ punto 5.1 (news-pulls -> [Add]) ~ punto 5.4, 5.5 ~ punti 6.5 / 6.8 aggiunto SMTP AUTH ~ punto 6.8 (FQDN) ~ punto 7.9 (segnalato bug del filtro xpost) ~ punto 11.1 (risolto bug di Outlook) ~ punto 11.6 (FQDN e IDtoken di Xnews) ! sezione 8a dedicata alla nuova generazione degli script + punto 3.6 (scopo degli account locali) + punto 6.17 e scalati quelli a seguire + punti 6.22/23/24/25 e scalati quelli a seguire + punti 12.5, 12.6 e scalati quelli a seguire + punto 13.7 (risolto bug di Outlook) + punto 13.8 (date sballate sul server remoto) + punto 13.9 (messaggi di grandi dimensioni) ~~ punto 9.3 (hamster.ini) ~~ punto 9.4 (server.ini) ~~ punto 10.3 aggiunte istruzioni speculari ai nuovi script Indice degli argomenti: * Prefazione * Cosa bisogna sapere prima di leggere questo documento * Introduzione Sezione 1: A cosa serve Hamster? 1.1 Cos'è Hamster? 1.2 In quali lingue è disponibile? 1.3 Cos'è un news server locale? Cos'è un mailserver locale? 1.4 Cos'è un client? 1.5 Hamster si sostituisce al newsreader/mailreader (client)? 1.6 Cosa significa freeware? E' davvero gratis? 1.7 Cosa significa multi-threading? E multi-socket? Sezione 2: Dove posso trovare Hamster? 2.1 Dove posso scaricare Hamster? 2.2 Dove posso trovare informazioni sul suo funzionamento? 2.3 Perché esistono così poche informazioni in lingua inglese? Sezione 3: A chi può servire Hamster? 3.1 Perché installare Hamster? 3.2 Perché Hamster è così veloce? 3.3 A cosa servono i filtri? 3.4 Perché Hamster è così affidabile? 3.5 Perché Hamster è così comodo? 3.6 A cosa servono gli account locali? Sezione 4: A chi non serve Hamster? 4.1 Ma posso farne a meno? 4.2 Ma allora esistono altri news server locali? 4.3 Perché Hamster scarica insieme intestazioni e corpo dei messaggi? Sezione 5: La configurazione di Hamster 5.1 Come partire? 5.2 L'autenticazione per accedere a Hamster. 5.3 La configurazione del client. 5.4 Newsreader. 5.5 Mailreader. 5.6 La prima connessione. Sezione 6: I menù di Hamster 6.1 L'albero dei menù. 6.2 File -> Configuration -> Newsserver 6.3 File -> Configuration -> Newsgroups 6.4 File -> Configuration -> News-Pulls 6.5 File -> Configuration -> Mailserver 6.6 File -> Configuration -> Passwords 6.7 File -> Configuration -> Local Accounts 6.8 File -> Configuration -> Local Servers 6.9 File -> Configuration -> Settings 6.10 File -> Configuration -> Online-Menu 6.11 File -> Killfile-Log 6.12 File -> Killfile-Log/Edit scorefile 6.13 File -> Rebuild global list 6.14 File -> Purge all groups 6.15 File -> Rebuild history 6.16 File -> Clear counters+log 6.17 File -> Refresh menu item 6.18 Online -> 1-9: ??? 6.19 Online -> All servers (News+Mail) 6.20 Online -> Script: Default.hsc 6.21 Online -> Stop all tasks 6.22 Script -> File script disponibili 6.23 Script -> Edit 6.24 Script -> Edit Modules 6.25 Script -> Stop all scripts 6.26 Start/Stop Newsserver (NNTP) 6.27 Start/Stop Mailserver (POP3) 6.28 Start/Stop Mailserver (SMTP) Sezione 7: Lo Scorefile di Hamster "(root)\scores.hst" 7.1 A cosa serve lo Scorefile? Il file "(root)\scores.hst" 7.2 Una veduta generale della sintassi dello Scorefile 7.3 Lo Scorefile spiegato dall'Help Online 7.4 Come si fa un filtro plonk? Cos'è un filtro plonk? 7.5 Come posso scaricare solo i miei messaggi? 7.6 Come posso scaricare solo i thread che mi interessano? 7.7 Come posso scaricare solo i messaggi padri? 7.8 Come posso evitare i messaggi di grandi dimensioni? 7.9 Come posso limitare il crossposting? 7.10 Alcuni esempi di filtri complessi 7.11 Come posso filtrare la posta elettronica? 7.12 Cos'è HamScore? A cosa serve? Dove si scarica? 7.13 Cosa sono le espressioni regolari? Cosa è il PCRE? 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" 7a.2 Come evitare di scaricare la posta indesiderata dal server? 7a.3 Come destinare la posta a un destinatario o a un newsgroup? 7a.4 Una veduta generale della sintassi di MailFilt.hst Sezione 8: Gli script di Hamster 8.1 A cosa servono gli script? 8.2 Cos'è e come si lancia uno script? 8.3 Quali sono i comandi utilizzabili negli script? 8.4 Dove posso trovare documentazione sugli script? 8.5 Come lanciare uno script con un collegamento sul desktop? Sezione 8a: Gli script di Hamster versione 2 (*.hsc) 8a.1 Compatibilità con la vecchia generazione 8a.2 La sintassi degli script 8a.3 Tipo dati delle variabili 8a.4 Gli operatori 8a.5 Le variabili 8a.6 Comandi interpretativi degli script 8a.7 Le asserzioni e i rapporti degli script 8a.8 I gruppi di funzioni interne #k 8a.9 #k Variabili 8a.10 #k Interi 8a.11 #k Stringhe 8a.12 #k Tempo 8a.13 #k Gestione degli errori 8a.14 #k File e cartelle 8a.15 #k Elenchi (matrici) 8a.16 #k Input e Output 8a.17 #k Scheduler 8a.18 #k RAS (remote access service) 8a.19 #k Miscellanea 8a.20 Funzioni definite dall'utente. Come si creano #k 8a.21 #k Parametri per valore / per references 8a.22 #k Variabili locali e variabili globali 8a.23 Le Funzioni 8a.24 I moduli. Creazione 8a.25 I moduli. Impiego Sezione 9: I file e le cartelle di Hamster 9.1 Dove risiedono i messaggi in uscita? Come posso cancellarli? 9.2 Da quali file è composto Hamster? 9.3 Hamster.ini. Le opzioni manuali di Hamster.ini. 9.4 Server.ini. Le opzioni manuali per ogni singolo news server. 9.5 IPAccess.hst. La connessione dei client locali e remoti Sezione 10: Gli eventi di Hamster. L'automazione. 10.1 L'automation-server di Hamster 10.2 Funzioni di automazione varie 10.3 Funzioni task 10.4 Funzioni di accesso remoto (RAS, remote access service) 10.5 Funzioni News 10.6 Hamster-Event-objects (Win32) 10.7 Hamster-Mutex-objects (Win32) 10.8 Che cosa è il MiniOle? Dopo posso scaricarlo? Sezione 11: la configurazione dei newsreader 11.1 Microsoft Outlook Express 5 11.2 Netscape "Communicator" Newsgroup 11.3 Forté Free Agent 11.4 Forté Agent 1.5/1.6/1.7/1.8 11.5 SLRN per Windows 11.6 Xnews 11.7 NewsXpress Sezione 12: Varie ed eventuali su Hamster 12.1 Che cosa è Ham.exe? A cosa serve? 12.2 Come posso fare un backup degli articoli caricati? 12.3 Come si disinstalla Hamster? 12.4 Come posso evitare il purge in un gruppo specifico? 12.5 Come posso inviare articoli senza richiederne? 12.6 Come fare un check automatico e periodico dei newsgroup? 12.7 Chi sono gli autori citati negli "Acknowledgement"? 12.8 I collegamenti ai siti e alle informazioni Sezione 13: Risoluzione dei problemi 13.1 Newsgroup doppi dal news server remoto 13.2 Errore 10061 - Impossibile connettersi al server 13.3 Errore 480 - Authentication required 13.4 Impossibile passare al newsgroup "" sul server "" 13.5 Perché vengono cancellate le password di Hamster? 13.6 Come posso fare se ho più mailbox allo stesso server POP3? 13.7 Outlook Express: errore sconosciuto No Codice: 80004005 13.8 Data sballata dell'articolo sul newsserver remoto. 13.9 Hamster non scarica alcuni messaggi di posta elettronica. Prefazione ---------- Questo documento ha l'ambizione di colmare almeno in parte l'assenza di informazioni in Rete disponibili in lingua italiana sul funzionamento di Hamster. Qualsiasi argomento non venga coperto dalla guida o da altri documenti qui indicati può offrire lo spunto per aprire un thread specifico nel gruppo it.comp.software.newsreader o affini e quindi permettere l'aggiornamento di questa stessa guida. Cosa bisogna sapere prima di leggere questo documento ----------------------------------------------------- Per una completa comprensione dei temi trattati è necessario conoscere i rudimenti della struttura della rete usenet, come le informazioni vengono trasmesse dal suo protocollo NNTP e NNRP, in cosa consiste il servizio della posta elettronica e cosa sono i gateway Mail-News. Tutti questi argomenti sono ampiamente trattati nella faq più recente di it.news.aiuto (al momento la versione 2.04), reperibile su it.faq o it.news.aiuto. Introduzione ------------ Hamster è un newsserver / mailserver locale (va quindi installato sul vostro HD) di facile utilizzo, che si interpone tra i server remoti e il newsreader / mailreader. In altre parole, si occupa di scaricare intestazioni e corpo dei messaggi dei gruppi da voi sottoscritti per poi renderli disponibili al newsreader attraverso l'IP 127.0.0.1 (localhost). Parimenti si occupa di scaricare e inviare la posta gestendo simultaneamente più account SMTP/POP3. Hamster è indicato per essere associato a newsreader / mailreader con filtri deboli (come Outlook Express) o assenti (FreeAgent) oppure con newsreader che operano in modalità Online (Xnews). Hamster è di pubblico dominio e il suo codice è stato rilasciato secondo le regole dell'Open Source. Usando Hamster si ha il vantaggio di scaricare da più newsserver (se questi consentono di accedere, ovvio) "accorpando" il tutto (se lo stesso articolo è disponibile su più server Hamster lo legge una sola volta), per avere un feed più completo; in questo modo ci si mette anche al riparo da eventuali periodi di "latitanza" di un server... Lo svantaggio più evidente è che bisogna scaricare dai gruppi sottoscritti ogni intestazione e articolo (sia pure con la possibilità di scegliere attraverso i filtri); il vantaggio è che Hamster è più veloce di un normale newsreader (grazie a una migliore razionalizzazione nella gestione del protocollo NNRP) e dispone di filtri ampiamente configurabili per scaricare solo i post desiderati in base ai criteri impostati. In alternativa (per chi ha [Free]Agent o un newsreader multiserver) è possibile usare due sessioni, una che legge da Hamster (con i newsgroup di cui magari si scaricherebbero comunque tutti i post), la seconda con i newsgroup meno importanti o più trafficati (da cui si sceglie cosa scaricare) e che legge direttamente dal vostro server abituale. Sezione 1: A cosa serve Hamster? -------------------------------- 1.1 Cos'è Hamster? Hamster è un'applicazione gratuita per Windows, un news / / mailserver locale, interagente con i client presenti sul computer dell'utente, in grado di scaricare intestazioni e corpo dei messaggi da più server remoti in modalità multi-server, multi-socket e multi-threading. Hamster può inoltre funzionare come un server remoto e garantire l'accesso, attraverso autenticazione e/o controllo del numero IP, a client esterni alla macchina dell'amministratore (proprietà che definisco come *accesso multiplo*). L'autore iniziale di Hamster è Juergen Haible. JH collabora tuttora alla realizzazione del programma ma, da quando ne ha rilasciato pubblicamente il codice, lo fa insieme a un folto numero di volontari. 1.2 In quali lingue è disponibile Hamster? Al momento attuale in più lingue, tra cui inglese tedesco e italiano. La maggior parte della documentazione è scritta nella lingua madre dell'autore, il tedesco. Come anticipato nella prefazione, questa guida è stata scritta proprio per rimediare all'assenza di un testo in lingua italiana. 1.3 Cos'è un news server locale? Cos'è un mailserver locale? Nella accezione comune, un server (servente) "è una macchina che in una rete fornisce servizi alle altre" [1]. Esistono diversi tipi di server: file server, application server, mailserver, news server, printer server, web server, file server. "I mail server sono macchine centrali, accessibili con un indirizzo definito, che contengono le caselle postali di una serie di utenti i quali vi si collegano periodicamente in rete per consultarne il contenuto" [2] Parimenti, i news server sono macchine centrali, accessibili con un indirizzo IP definito o ad accesso pubblico, che contengono un insieme di informazioni strutturate e ripartite in gruppi di discussione e messaggi NNTP. I news server costituiscono quindi un network di computer che scambia le informazioni riversate in rete dagli utenti. Un news server locale è un software che emula il funzionamento del news server remoto (o di più server remoti) replicandone il contenuto, o parte di esso, per renderlo accessibile localmente al client, generalmente attraverso l'indirizzo IP 127.0.0.1. Attraverso un news server locale è quindi possibile scaricare per intero solo i gruppi necessari. Un mailserver locale è un software che emula il funzionamento del mail server remoto (o di più server remoti), occupandosi di scaricare da questi la posta disponibile nelle mailbox sotto la responsabilità dell'utente. [1][2] fonte glossario CD Computer Inter@ctive N. 21 - Maggio 1999 1.4 Cos'è un client? Nella accezione comune, un client (cliente) è "una macchina che su una rete riceve servizi da un server" [1], definita anche come stazione di lavoro. Tuttavia, si rileva come a volte il nome venga "assegnato anche al particolare software che accede a tali servizi; ad esempio un client di posta elettronica sarebbe quel programma caricato su un client (macchina) che accede ai messaggi registrati su un server". [2] A tal proposito, in questa guida, la parola client sarà spesso impiegata per indicare indifferentemente newsreader e mailreader (es: Ms Outlook Express, Forté Agent, Netscape Messenger, Netscape Collabra, Qualcomm Eudora Pro, Pegasus-mail, MicroPlanet Gravity, ecc.). [1][2] fonte glossario CD Computer Inter@ctive N. 21 - Maggio 1999 1.5 Hamster si sostituisce al newsreader/mailreader (client)? Da un punto di vista tecnico si, mentre dal lato pratico Hamster semplicemente affianca il software di cui voi già disponete. Dovrete abituarvi a gestire le operazioni online con Hamster, mentre tutto ciò che riguarda la lettura, la gestione e il posting degli articoli e delle email continuerà con gli strumenti e le conoscenze in vostro possesso, con qualche piccolo accorgimento in più. 1.6 Cosa significa freeware? e Open Source? E' davvero gratis? Freeware, è "un tipo di software che è completamente gratuito. Questo software viene solitamente distribuito sui siti Internet, sulle BBS e sui CD-ROM allegati alle riviste. Può essere utilizzato senza la necessità di acquistare alcuna licenza a condizione che sia identificato come freeware" [1]. Hamster non solo è gratuito ma, dalla versione 1.3.20, è anche diventato Open Source. In altre parole il suo codice è stato rilasciato pubblicamente e ne viene salvaguardata solo l'appartenenza morale all'autore. [1] fonte glossario CD Computer Inter@ctive N. 21 - Maggio 1999 1.7 Cosa significa multi-threading? E multi-socket? Comunemente, per software multi-threading si intende la capacità di invocare più connessioni simultanee da una o più sessioni dello stesso programma, non necessariamente interagenti l'una con l'altra e non necessariamente con lo stesso server. Per software multi-socket, invece, si intende la capacità di invocare più connessioni simultanee con lo stesso server da una o più sessioni dello stesso programma, non necessariamente interagenti l'una con l'altra, non necessariamente interagenti con altri server. Hamster coniuga le due caratteristiche dato che può invocare più connessioni simultanee con lo stesso server e con più server, ovvero ha la capacità di gestire un certo numero di thread simultanei durante il caricamento delle news per ogni server gestito. In modo predefinito, Hamster gestisce almeno 2 thread simultanei per server, ma questa quantità può variare in relazione alle esigenze dell'utente e alle limitazioni del news server remoto corrente. Hamster è quindi anche multi-server poiché ha la capacità di invocare da una sessione del programma connessioni contemporanee a più server e interagenti tra loro. Infine Hamster può funzionare con accesso multiplo come anticipato al punto 1.1. Sezione 2: Dove posso trovare Hamster? -------------------------------------- 2.1 Dove posso scaricare Hamster? Hamster è liberamente scaricabile da http://freebee.home.pages.de. Si tratta di un sito in lingua tedesca con una sezione in lingua inglese, facilmente individuabile nell'URL: http://home.t-online.de/home/juergen.haible/english.htm Da poco tempo, grazie al lavoro di AlexSeb, Hamster è disponibile anche in lingua italiana presso http://alexseb.freeweb.org 2.2 Dove posso trovare informazioni sul suo funzionamento? Perché questa faq non basta? ;-)) Scherzi a parte, in prima battuta sono sicuramente validi i suggerimenti contenuti nella stesso Help online di Hamster. Poi, in relazione alle necessità si possono considerare: http://www.egroups.com/subscribe/ehamster/ Mailing-list inglese di Hamster. http://www.egroups.com/subscribe/ihamster/ Mailing-list italiana di Hamster. http://www.onelist.com/subscribe/fhamster/ Mailing-list francese di Hamster. http://www.elistas.net/foro/hamster/ Mailing-list spagnolo di Hamster. http://www.egroups.com/subscribe/usehamsternet/ Mailing-list tedesca dedicata al beta-testing di Hamster http://www.alphalink.com.au/~johnf/hamster.htm Sito dedicato al setup e alla configurazione di Hamster; con un'attenzione particolare a Forté Agent (autore: John Fitzsimons, lingua inglese). http://funix.free.fr/informatique/windows/hamster.htm Sito dedicato al setup e alla configurazione di Hamster (autore Olivier Hoarau; lingua francese). http://hamster.ist-super.de/ http://home.t-online.de/home/micha-wr/hamster/index.htm Molte informazioni su Hamster e un archivio di script (autore: Michael Gebert; lingua tedesca). http://www.elfden.co.uk/ Pagina di traduzione in lingua inglese curata da Michael Gebert. http://www.planet-interkom.de/ulehmann/index.html Documentazione per Hamster in lingua tedesca, da parte di Uwe Lehmann, Joerg Behrend e Christian Fritz http://home.pages.de/~heikor/ Utility aggiuntive e utili da parte di Heiko Rost http://home.wtal.de/fritzwww/hamster/ La traduzione in lingua tedesca dell'Help Online di Hamster curata da Christian Fritz. http://home.knuut.de/tgl/ Tool addizionali da parte di Thomas G. Liesner (lingua tedesca). Disponibile anche KorrNews, un software in grado di correggere e riparare i difetti di alcuni newsreader oltre che apporre firme casuali e extra-headers. http://www.fortunecity.de/kraftwerk/prodigy/261/ "Laufrad" è un programma per la ricerca globale all'interno degli archivi di Hamster (autore Wolfgang Krietsch; lingua inglese). http://www.x501.de/hamster/ Informazioni su Hamster da parte di Jürgen Denzler (lingua tedesca). Da non scartare ovviamente nemmeno i newsgroup a tema. Nella gerarchia it.* non esiste uno specifico gruppo dedicato ai news server locali per cui la loro trattazione deve essere valutata caso per caso in relazione al topic del newsgroup più adatto. Per problemi relativi al collegamento tra Hamster e il vostro client, si può usare it.comp.software.newsreader o it.comp.software.mailreader (a seconda del client, ovviamente). Invece, per problemi relativi al collegamento news remoto, potrebbe essere in topic it.news.gestione, ma vi consiglio di chiedere prima al fornitore del vostro servizio news. Da non dimenticare la gerarchia hamster.* scaricabile dal newsserver dell'università di Berlino (cercate su it.faq la guida ai newsserver pubblici). Questa gerarchia dispone di una secondo livello in lingua inglese hamster.en.* e di un gruppo in lingua italiana hamster.it (prossimamente). 2.3 Perché esistono così poche informazioni in lingua inglese? Suppongo perché l'autore Juergen Haible ha dichiarato di avere una conoscenza pressoché scolastica della lingua inglese. Sezione 3: A chi può servire Hamster? ------------------------------------- 3.1 Perché installare Hamster? I motivi che possono spingere a scegliere questa soluzione possono essere molteplici. Hamster costituisce una soluzione: *veloce* fino al 100% più veloce di un normale newsreader; *potente* ha un sistema di filtri news e mail moderno e compatibile PCRE. *affidabile* non perde o cancella erroneamente un solo articolo; *comodo* permette di gestire nella sua cache virtuale i messaggi provenienti da più news server remoti, fornendo la precedenza a quelli più veloci, ma senza scartare quelli più affidabili. In questo modo non si perdono articoli, ma soprattutto non si perde tempo. 3.2 Perché Hamster è così veloce? Come spiegato al punto 1.7, Hamster è un news server locale mono-sessione, multi-threading, multi-server e multi socket. Nella stessa sessione, Hamster si può occupare dello scarico delle news da più server contemporaneamente e con più thread aperti (thread intesi come istanze NNRP intercorrenti tra Hamster e singolo news server remoto). Proviamo a fare un esempio paragonando l'impiego solitario di Outlook Express con quello svolto in comunione con Hamster. Outlook Express è mono-sessione, mono-threading ma, nonostante supporti server multipli, non è multi-server. Conseguentemente, dovendo scaricare le news da gruppi appartenenti a due news server remoti differenti, dovremo occuparci di un solo news server per volta, senza comunque riuscire a tenere aperto più di un singolo thread. In altre parole, avendo sottoscritto più gruppi su server distinti, Outlook Express è in grado di interagire con un solo server per volta e, nell'ambito di questo, caricare i messaggi da un solo gruppo per volta. Se abbiniamo Outlook Express a Hamster, il primo dovrà solo occuparsi di scaricare le news dalla porta NNRP 119 all'indirizzo locale 127.0.0.1 (localhost). Il secondo, svolgerà il lavoro difficile in vece del primo, scaricando le news contemporaneamente da più server e tenendo simultaneamente aperto un numero di almeno due thread, quantità che, come specificato al punto 1.7, può variare in relazione alle esigenze dell'utente e alle limitazioni del news server remoto corrente. In altre parole, avendo sottoscritto più gruppi su server distinti, Hamster è in grado di interagire contemporaneamente su più server e, nell'ambito di questi, caricare i messaggi da più gruppi alla volta. 3.3 A cosa servono i filtri? Comunemente, quando parliamo di Usenet e di posta elettronica, i filtri ricordano la capacità di un client di eliminare automaticamente alcuni messaggi che, per il contenuto espresso nel subject o per le qualità dell'autore, sono considerati come indesiderati. In realtà, questa interpretazione sul funzionamento dei filtri è piuttosto limitata ed è dovuta al pregiudizio sorto nel pubblico in forza delle prime implementazioni apparse e delle scarse capacità di filtro dei client più diffusi (Forté Free Agent, Ms Outlook Express). Al contrario, i filtri in Hamster possono fare ben altro che cancellare qualche utente fastidioso. Costituiscono una soluzione per poter affrontare felicemente gruppi ad alto traffico in cui la natura degli argomenti eccede le nostre necessità, ad esempio permettendoci di scaricare solo i messaggi incolonnati su un nostro intervento oppure di scaricare tutti quelli che riportano la parola Hendrix nel titolo piuttosto che ... Infine, i filtri di Hamster soddisfano in pieno il supporto per il Perl Compatible Language Expression, il più potente sistema per realizzare una condizione e corrispondere una stringa variabile. 3.4 Perché Hamster è così affidabile? Al contrario di ciò che comunemente si pensa, il software freeware (anche se un po' meno di quello open source) può garantire un livello di qualità del codice sorgente superiore a quello commerciale. La formula di questo successo sta in una incondizionata volontà da parte degli utenti a suggerire miglioramenti e soluzioni che nel caso del software commerciale sono per lo più dovuti. Hamster è freeware, ma basa alcuni dei suoi principali punti di forza nella disponibilità di implementazioni open source e simili. Ad esempio, le routine per le espressioni regolari (filtri) di Hamster sono basate sullo schema delle porte Win32 del "Perl-Compatible Regular Expression (PCRE)", package scritto da Philip Hazel. Tali implementazioni, proprio perché lasciate al tempo libero di generosi sviluppatori, non sono proprio user-friendly, ma rappresentano un insieme lineare di procedure su come devono essere svolte al meglio le cose. Spesso nel software commerciale, a parte qualche lodevole eccezione, queste soluzioni non sono adottate perché considerate poco user-friendly, o ancora peggio poco gradevoli per la resa grafica dell'interfaccia. Tutto ciò favorisce l'emergere di soluzioni di solito meno funzionali, ma soprattutto meno sicure, perché legate a routine utente-processo-utente difficili da controllare. 3.5 Perché Hamster è così comodo? Hamster accentra in una sola cache sul disco il risultato di tutti i news server e mailserver remoti che interroga. Già questo dovrebbe fornire un'idea della semplificazione che si prospetta nell'impiego del vostro client. Non sarà più necessario creare più account news e più account POP3, poiché Hamster concentrerà tutti i servizi che gestisce sulle porte 119, 110 e 25, affidate rispettivamente ai server NNTP, POP3 e SMTP locali, ma tutte sul numero IP 127.0.0.1 (localhost). A questa caratteristica Hamster unisce, in forza della sua natura multi-server, la capacità di prediligere i news server più veloci che sopravanzano e anticipano i più lenti durante il caricamento delle news. Quindi, nel caso di carico dello stesso gruppo da due server, il più lento non potrà che confrontare il risultato del comando xover con quello già fornito dal news server più veloce. Il caricamento del corpo dei messaggi da parte del news server più lento avviene solo se si riscontrano buchi nell'elenco già reso disponibile e limitatamente agli articoli corrispondenti a questi buchi. Un'altra caratteristica di Hamster è la gestione dinamica della posizione dei newsgroup nell'ordine di caricamento. Vengono incondizionatamente preferiti quelli a più alto traffico. Nel caso, per la verità raro, in cui questa non si manifestasse come condizione ottimale, esiste la possibilità di generare script personalizzati a copertura della specifica esigenza. 3.6 A cosa servono gli account locali? Gli account locali hanno prevalentemente due funzioni in relazione alle caratteristiche di newsserver e mailserver locale di Hamster. Come generico server locale, Hamster permette l'accesso attraverso account locali distinti, anche nell'ambito di una Intranet, ripartendo al meglio traffico e informazioni relative agli stessi account. In questo modo, sarà possibile definire con precisione i permessi dei singoli account e, di riflesso, degli utenti che vi accedono. A tal proposito, leggere il menù File -> Configuration -> Local accounts e la sezione 6 al punto "IPAccess.hst, la connessione dei client locali e remoti". Come newsserver locale, sarà possibile limitare la visione o la scrittura su alcuni newsgroup da parte dei client che accedono localmente. Come mailserver locale, attraverso i filtri e-mail (sezione 7a) o gli script (sezione 8 e 8a - fetchmail), sarà invece possibile ripartire la posta in entrata in più mailbox locali in modo da mantenere inalterata la distinzione che il mailreader fa tra i diversi account comprendendo le proprietà relative alle nostre diverse identità (campo from). In altre parole, potremo mantenere in vita i nostri account sul mailreader anche se trasformati in modo da richiamare e/o spedire la posta localmente. Sezione 4: A chi non serve Hamster? ----------------------------------- 4.1 Ma posso farne a meno? Se hai saltato direttamente a questa sezione senza leggere le prime tre, direi di sì ;-)). La configurazione di Hamster che viene trattata nella sezione 5 non rappresenta certo un ostacolo insormontabile per l'utente di livello medio-basso. Hamster può invece essere sconsigliato nei casi in cui si abbiano esigenze specifiche particolari. Ad esempio nei casi in cui: a. si utilizzino altre piattaforme (sotto Linux, pur considerando l'eventuale funzionamento di Hamster con l'estensione del supporto Delphi, so per certo che esiste un'offerta variegata di strumenti più complessi e potenti di Hamster); b. l'impiego delle news sia del tutto saltuario (per cui sarebbe più indicato l'impiego di un solo newsreader evitando così di scaricare intestazioni e corpo di centinaia di messaggi; 4.2 Ma allora esistono altri news server locali? Nì ;-)). Sotto Windows al momento conosco solo news server locali a pagamento, più complessi e pesanti che suggeriscono il passaggio alla più stabile piattaforma di Windows NT. Esiste anche NewsPlex che è come Hamster ma scarica solo le intestazioni unendo virtualmente tutti i news server remoti in un unico news server locale. 4.3 Perché Hamster scarica insieme intestazioni e corpo dei messaggi? Una risposta perfettamente lecita, ma circolare è "Hamster è un news server locale". La filosofia che sottintende questo prodotto è pur sempre quella di replicare in locale ciò che è contenuto nel server remoto. Nel caso si vogliano caricare solo le intestazioni provate NewsPlex. Sezione 5: La configurazione di Hamster --------------------------------------- (tratta dalla guida online di Hamster) 5.1 Come partire? Se avete già scaricato Hamster, potete ora procedere alla sua installazione. Hamster non dispone del programma di setup per cui dovrete occuparvi della decompressione del file .zip scaricato. Un file .zip non è altro che un archivio trattato mediante un algoritmo di compressione. Per decomprimerlo potete usare Winzip http://www.winzip.com o software alternativo. Decompattate tutto il contenuto in una cartella di vostro piacimento, meglio ancora se la chiamerete Hamster in modo da identificarla velocemente. 5.2 L'autenticazione per accedere a Hamster. Come spiegato al punto 1.1 Hamster è un news server locale ad *accesso multiplo*. In altre parole può fornire i suoi servizi a più utenti che usano la stessa macchina e/o a più utenti che si collegano in rete alla macchina dove risiede. Questo può comportare alcuni problemi di sicurezza. Un caso tipico è quello del genitore che vuole permettere l'accesso ai propri figli in sola modalità offline e, magari, solo in lettura con un elenco parziale dei gruppi di discussione. Il genitore svolge la funzione dell'amministratore e dovrà configurare Hamster in modo da lasciare a se stesso tutti i permessi. Per accedere a Hamster con un news o mail-client, è consigliabile fornire una password per l'account predefinito "admin". Per fare ciò, selezionate il menù File -> Configuration e andate alla rubrica chiamata "Local accounts". L'elenco in questa pagina contiene un account selezionato chiamato "admin, Hamster Administrator". Premete il bottone "Edit" per visualizzarne le caratteristiche. Per cambiare la password per l'account, premete il bottone "Change" vicino al campo "Password:" e immettete la stringa desiderata. Dopo la chiusura della finestra account con il bottone "Ok", il campo "Password:" dovrebbe mostrare "{SET}". In altre parole, all'atto della prima installazione, per evidenziare una caratteristica che passerebbe inosservata a un pubblico poco attento, Hamster imposta automaticamente un amministratore chiamato Hamster Administrator con username "admin" e password vuota. Configurate a vostro piacere questa password. Perché il client possa interagire con Hamster, dovrete poi quindi autenticare con username e password le connessioni al news server locale. L'autenticazione, quindi, si rende necessaria perché l'ambiente locale di Hamster è multi-account. 5.3 La configurazione del client. Hamster interagisce con qualsiasi client in grado di operare alle porte (anche configurabili a scelta) 119, 110 e 25. Buona parte dei newsreader e dei mailreader esistenti si collegano a queste porte in modo predefinito. Altri lasciano la possibilità di configurazione, ma qui basti sapere che si può accettare quella originaria. 5.4 Newsreader. Per accedere al news server locale di Hamster attraverso un newsreader, dovete configurarvelo in proprio con un nome di news server e informazioni di autenticazione appropriati. Un nome di news server che interagisce sempre con Hamster è "127.0.0.1", che è l'indirizzo IP assegnato al vostro computer. Nella maggior parte dei casi, anche il nome "localhost" dovrebbe funzionare. Le informazioni richieste per l'autenticazione sono username "admin" e password "{SET}" che avete assegnato a vostro piacimento come anticipato poco sopra al punto "L'autenticazione per accedere a Hamster". Se le impostazioni sono corrette, potete ora connettervi a Hamster e ottenere l'elenco dei newsgroup disponibili. L'elenco dovrebbe contenere un gruppo locale predefinito chiamato internal.misc. Tale gruppo sostituisce i tre gruppi locali presenti nelle versioni precedenti che erano hamster.errors, hamster.misc e hamster.posted. La sua funzione è quella di raccogliere articoli utili all'amministratore del server locale (admin).Provate a scrivere un articolo sul gruppo internal.misc e controllate se l'articolo vi ritorna scaricando le intestazioni delle news dal vostro client. Vi anticipo che se intendete tenere traccia dei post spediti, sarebbe opportuno leggete il punto su Hamster.ini relativo alla sezione "File e cartelle" al fine di apprendere come ripartire il traffico tra internal.misc e un altro gruppo locale a vostra scelta che possa raccogliere gli articoli spediti. 5.5 Mailreader. Come per il setup del newsreader, potete usare "127.0.0.1" o "localhost" per i nomi dei mailserver locali. Usate questo nome per entrambi i server, sia esso POP3 (ricezione email) o SMTP (invio mail). Nuovamente, le impostazioni richieste per l'autenticazione (solo per il POP3) sono username "admin" e password che avete assegnato a vostro piacimento come anticipato poco sopra al punto "L'autenticazione per accedere a Hamster". Se le impostazioni sono corrette, potete collegarvi ad Hamster ora. Provate a spedire una mail a uno degli indirizzi annotati qui sotto e controllate se il messaggio vi ritorna scaricando la posta nel vostro client. Qui ci sono alcuni esempi di indirizzi che vengono mantenuti locali e, con le impostazioni predefinite di Hamster, non faranno uscire nulla al di fuori della rete locale: admin (senza nessun @dominio) admin@hamster admin@localhost admin@127.0.0.1 admin@[127.0.0.1] admin@something.invalid Tutti questi indirizzi termineranno in una mail all'account amministratore di Hamster (esclusivamente locale). La sola ragione per cui fornisco più alternative è che alcuni mail-client potrebbero rifiutare alcuni di questi formati. Provateli dall'alto al basso e usate il primo formato che il vostro mail-client accetta. 5.6 La prima connessione I passi successivi sono necessari se volete che Hamster richieda l'elenco dei gruppi disponibili sul news server remoto del vostro provider, in modo da sottoscriverne alcuni: - Selezionate il menù "File -> Configuration" e aggiungete il vostro (o i vostri) news server nella rubrica "Newsserver" - (Andate Online) - Selezionate il menù "Online -> All servers (News+Mail)" per caricare l'elenco dei gruppi disponibili (questo potrebbe richiedere alcuni minuti; aspettate fino a quando vi sarà mostrato "Threads: 0" nell'ancolo in basso a sinistra dello schermo. - (Andate Offline) - Selezionate nuovamente il menù "File -> Configuration" e aggiungete i vostri gruppi favoriti nella scheda "News-Pulls" pigiando il tasto [Add]. - (Andate Online) - Selezionate nuovamente il menù "Online -> All servers (News+Mail)" per caricare gli articoli. - (Andate Offline) - Aprite il vostro newsreader, fate un refresh dell'elenco dei newsgroup (automatico per alcuni client), sottoscrivete i gruppi presenti e caricate i nuovi articoli. Sezione 6: I menù di Hamster (tratta dalla guida online di Hamster) ---------------------------- 6.1 L'albero dei menù. File -+-> Configuration ---+-> Newsserver | |-> Newsgroups | |-> News-Pulls | |-> Mailserver | |-> Passwords | |-> Local Accounts | |-> Local Servers | |-> Settings | +-> Online-Menu | |-> Killfile-Log |-> Killfile-Log/Edit Scorefile |-> Killfile-Log/Set sort-sequence |-> Rebuild local lists |-> Purge all groups |-> Rebuild history |-> Clear counters+log +-> Refresh menu items Online -+-> 1-9: ??? |-> All servers (News+Mail) |-> Script: Default.hsc +-> Stop all tasks Start --+-> Stop Newsserver (NNTP) |-> Stop Mailserver (POP3) +-> Stop Mailserver (SMTP) 6.2 File -> Configuration -> Newsserver [ Load news from (Server, Port): ] Qui dovete definire i news server da cui richiamerete e spedirete gli articoli. Per aggiungere un nuovo news server, premete [Add] e immettete il nome del server NNTP e il numero della porta da usare (facoltativo), entrambi separati da una sola virgola (ad es:, "news.mioprovider.it,nntp"). L'elenco dei gruppi disponibili per i nuovi servers sarà caricato automaticamente la prossima volta che andrete online. Per cancellare un news server, selezionatelo dall'elenco e premete [Delete]. Attraverso [Settings] si possono utilmente configurare alcune opzioni. [ ] "Server is readonly" # permette di escludere il server in scrittura On the next Pull [ ] Reload list of newsgroups [ ] Reload list of newsgroup-descriptions # si tratta di opzioni "one time only" che permettono di fare un # refresh dell'elenco dei gruppi disponibili in remoto. Scegliendo # la seconda possibilità, potremo scaricarne anche le descrizioni. [ Preferred Post-Server: ] Gli articoli inoltrati saranno spediti dai news server in relazione a quale di essi viene interrogato per il trasporto delle news. Se scaricate un gruppo da più di un server, per spedire il messaggio sarà usato il primo server presente nell'elenco. Per non tenere conto di questo comportamento, potete selezionare un server preferito per spedire (preferred post-server), che sarà sempre usato per il posting, se il newsgroup in oggetto ottiene il feed da esso. Per attivare questo "preferred post-server", selezionate un news server nell'elenco dei server e premete [Select]. 6.3 File -> Configuration -> Newsgroups [ Available newsgroups: ] Questo è l'elenco dei newsgroup disponibili che potete leggere da Hamster con il vostro newsreader. I gruppi che non sono anche elencati nella rubrica "News-Pulls" sono considerati come locali (gli articoli ad essi inoltrati non saranno spediti ad alcun news server). Un newsgroup locale è stato creato all'atto del primo avvio di Hamster: internal.misc. Tale gruppo sostituisce hamster.errors, hamster.misc e hamster.posted creati dalle precedenti versioni di Hamster. Per aggiungere un gruppo selezionandolo da uno o più elenchi disponibili da uno o più news server, dovete usare "News-pulls" Per aggiungere, invece, un gruppo locale, premete [Add/Local] e immettete il nome del gruppo. In questo modo, avrete un nuovo gruppo locale che potrebbe tornare utile per ripartire diversamente il traffico altrimenti destinato a internal.misc. (leggete il punto su Hamster.ini relativo alla sezione "File e cartelle"). Per sovrascrivere alcune impostazioni predefinite per un certo gruppo, selezionatelo nell'elenco e premete [Settings]. Per cancellare un newsgroup, selezionatelo nell'elenco e premete [Delete]. 6.4 File -> Configuration -> News-Pulls [ Groups to pull from server (groupname,servername): ] Questo è l'elenco dei newsgroup che prendono il feed dai news server remoti. Ogni voce nell'elenco è una combinazione del nome del gruppo seguita dal nome di un server remoto e, questo significa che quel dato gruppo dovrebbe essere scaricato da quel dato server. Normalmente, dovrebbe essere sufficiente scaricare un gruppo da solo un server (il "più veloce"/"migliore" server), ma potreste anche definire server addizionali per ogni gruppo. Per aggiungere un newsgroup all'elenco di quelli che prendono il feed, premete [Add] e selezionate un newsgroup nell'elenco presentato (se l'elenco è vuoto, dovete andare online per caricare l'elenco dei gruppi disponibili, come anticipato nella sezione 5 al punto "La prima connessione". Dopo aver trovato e selezionato il gruppo desiderato, cliccate nella parte sottostante della finestra su [Find pulls] per ottenere l'elenco dei pull disponibili, ovvero l'elenco dei news server remoti da voi sottoscritti che portano quel gruppo. Per sottoscriverne uno o alcuni di essi, selezionateli e premete [Ok]. Per cancellare un gruppo dall'elenco di quelli che prendono il feed, selezionatelo e premete [Delete]. 6.5 File -> Configuration -> Mailserver [ [POP3] Load mails from (Server, Port): ] Qui potete definire i mailserver che volete usare per caricare la posta attraverso il protocollo POP3. Per aggiungere un server POP3, premete [Add] e immettete il nome del server POP3 e il numero della porta da usare, entrambi separati da una sola virgola (es:, "pop.mioprovider.it,pop3"). Per cancellare un server POP3, selezionatelo nell'elenco e premete [Delete]. [ [SMTP] Send mails to (Server, Port): ] Qui potete definire i mailserver che volete usare per spedire la posta attraverso il protocollo SMTP. Per aggiungere un server SMTP, premente [Add] e immettete il nome del server SMTP e il numero della porta da usare (facoltativo), entrambi separati da una sola virgola (es:, "pop.mioprovider.it,smtp"). Per cancellare un server SMTP, selezionatelo nell'elenco e premete [Delete]. Nota: se un server richiede l'autenticazione con SMTP AUTH, dovete creare/modificare il file ".\Servers\(servername)\Server.ini" e aggiungere la riga "AUTH=1" nella sezione "[SMTP]" (per i dettagli, leggete la seziore relativa ai file e alle cartelle di Hamster). [ Preferred Send-Server: ] Questo è il server SMTP predefinito usato per spedire la posta. E' sempre usato, a meno di non essere "escluso" da un "Online-Menu" personalizzabile incaricato di stabilire il trasporto o da uno script apposito. Per selezionare questo server SMTP preferito, selezionate un server SMTP dall'elenco e premete [Select]. 6.6 File -> Configuration -> Passwords [ Usernames and passwords for servers, RAS-connections and scripts: ] Qui potete impostare lo username e la password per i news/mail- server in oggetto e per il vostro servizio di accesso remoto (RAS, Remote Access Service). Le impostazioni per la vostra connessione sono necessarie solo se a Hamster venisse richiesto di connettersi da solo (automazione). Le impostazioni addizionali chiamate "$1", "$2", ..., "$99" sono password a scopo generico, che possono essere usate in alcuni script. Invece di annotare username e password in chiaro nello script, si può richiamare una di queste impostazioni usando "$(numero)" per lo username e lasciando il campo della password vuoto. Ci sono tre differenti stati o condizioni che una password può avere. Essi appaiono come segue: - "{ASK}" Hamster vi chiederà username e password quando sarà necessario. - "{SET}" Username e/o password sono impostate e archiviate nel file "Password.!!!" (leggi nota sotto). - "{NONE}" Username/password è vuota, ovvero non necessarie (es. autenticazione per numero IP in SMTP). Per modificare le impostazioni di ogni singola voce, selezionatela nell'elenco e premete [Edit]. Per cancellare username and password (es:, impostati entrambi a "{NONE}"), selezionate la voce relativa nell'elenco e premete [Clear]. *Usare l'autenticazione APOP per i server POP3* Per usare l'autenticazione di APOP, la password deve essere preceduta con "APOP:". Se la password "casualmente" inizia con "APOP:", si può forzare l'autenticazione USER/PASS precedendola con "PASS:". Esempi: secret => Usa USER/PASS con password "secret" (default) APOP:secret => Usa APOP con password "secret". PASS:APOP:secret => Usa USER/PASS con password "APOP:secret". PASS:PASS:secret => Usa USER/PASS con password "PASS:secret". *Nota bene* Le impostazioni relative alle password saranno salvate nel file "Password.!!!". Le voci in "Password.!!!" sono cifrate con l'algoritmo "Blowfish". La chiave usata per per cifrare i dati è una combinazione di elementi fissi e variabili in relazione alle diverse impostazioni del sistema operativo, come nome del PC, versione del sistema operativo, ecc.. I dati archiviati e cifrati consistono in username e password e, sono indicizzati da un valore alfanumerico per il relativo server-/RAS-name (es:, questo nome non è archiviato in testo semplice, ma in un form dove cercare la voce quando ce ne è bisogno). Se questo sembra molto sicuro, siate consapevoli che non è vero! Anche se la chiave dipende dal PC dove è stata generata, le voci utilizzate possono essere indovinate. Tuttavia, se pensate che altri programmi usano XOR o ROT13 per cifrare quelle cose ... ;-) 6.7 File -> Configuration -> Local Accounts [ Name, Full name, Password: ] Qui potete aggiungere o modificare account locali impiegabili per l'autenticazione presso il server locale. Per aggiungere un nuovo account, premete [Add]. Le impostazioni dell'account selezionato saranno usate per il nuovo account (password, ecc. a esclusione dello username). Per modificare le impostazioni di un account, selezionatelo nell'elenco e premete [Edit]. Per cancellare un account, selezionatelo nell'elenco e premete [Delete]. IMPOSTAZIONI DELL'ACCOUNT. Lo User-ID è solo un numero identificativo dell'account. E' assegnato da Hamster all'atto della creazione e non può essere cambiato. Username e password sono usati per l'autenticazione quando l'utente entra nel server NNTP - e nel POP3 - locale. L'username (unico e distinto) è assegnato quando l'account viene creato e non può più essere cambiato. Per modificare la password, premete [Change]. Il "full name" non ha un significato particolare. Potete usarlo per identificare l'account, es: "Mario Rossi (solo-news)". Local NNTP-server: Il campo "Groups, the user may read" determina quali gruppi sono visibili e leggibili dall'utente, mentre il campo "Groups, the user may post to" determina a quali di questi gruppi visibili/leggibili l'utente può spedire messaggi. Il formato di entrambe le impostazioni è descritto più sotto alla voce "Group-selection". Local POP3-server: La casella "User has a POP3-mailbox" determina se l'account ha una mailbox POP3. Gli account senza una mailbox POP3 non possono ricevere la posta da Hamster. Se il campo "Local mail-addresses" è specificato, tutta la posta elettronica per questi indirizzi non è più inoltrata al server remoto, ma consegnata localmente all'utente. Indirizzi multipli, devono essere separati da un solo spazio, es: "mario.rossi@provider.it luca.rossi@provider.net". Local SMTP-server: Se la sezione "SMTP-after-POP3" è attiva, per il server SMTP locale la casella "User may send mails" determina se all'utente è concesso di spedire posta. GROUP-SELECTION Nei campi "Group, ..." può essere praticata una selezione di gruppi che consiste in un elenco di espressioni regolari, con ogni espressione separata da uno spazio. Le espressioni vengono affrontate da sinistra a destra e la corrispondenza del primo modello di espressione determina se un gruppo possa apparire oppure no. Se una espressione regolare è preceduta da "!", questo significa "not", così il risultato viene invertito. Esempi: Selezione: .* Significato: Tutti i gruppi sono disponibili. Selezione: !.* Significato: Nessun gruppo è disponibile (corrisponde a lasciare vuoto il campo). Selezione: !^hamster\. .* Significato: Tutti i gruppi sono disponibili ad eccezione dei gruppi "hamster". Selezione: .* !^hamster\. Significato: Tutti i gruppi sono disponibili (ricorda: la prima corrispondenza determina il risultato e ".*" corrisponde sempre a tutti i gruppi) Selezione: ^de\. !^hamster\.posted ^hamster\. Significato: Tutti i gruppi "de" e "hamster", ad eccezione di "hamster.posted" sono disponibili. UN ACCOUNT SPECIALE, "nntpdefault": Se viene creato un account con username "nntpdefault" e password "*", le sue impostazioni NNTP saranno usate, se gli utenti accederanno al server NNTP locale senza autenticazione. (salta la fase di autenticazione del comando NNRP "authinfo user|pass"). 6.8 File -> Configuration -> Local Servers SEZIONE "Newsserver (NNTP)" Autostart [x], Port: [numero] Quando la casella "Autostart" è spuntata, con l'avvio di Hamster, il server NNTP locale (quello che, oltre a ricevere e inoltrare i messaggi, richiede e fornisce localmente il feed delle news) parte automaticamente al numero di porta specificata. Il numero di porta predefinito è "119". Generate Message-ID: [ ] Se questa casella è spuntata, Hamster aggiunge un unico e distinto Message-ID all'articolo inviato, ammesso e non concesso che il messaggio sia uscito dal client senza averne già uno (in altre parole, Hamster non sovrascrive Message-ID esistenti). Il Message-ID formulato in locale consiste in un valore cifrato della data corrente, del task-number e di un contatore a tempo (simile ai Message-ID generati da INN), valore unico e distinto nel vostro PC locale. La parte del dominio è costituita dal vostro unico e distinto FQDN, che dovete immettere nella sezione "Local Domains" (leggete più sotto). Allow POST with unknown groups: [ ] In modo predefinito, tutti gli articoli spediti singolarmente, o in crosspost, a gruppi sconosciuti (unknown groups, ovvero gruppi non disponibili attraverso Hamster anche se disponibili in remoto) sono rifiutati. Se questa casella è spuntata, i post con il nome del gruppo sintatticamente corretto sono accettati, anche se non sono "conosciuti" da parte di Hamster. Dato che questo permette il posting in *tutti* i gruppi, non è raccomandabile in un ambiente multiuser (dove ad alcuni utenti si vorrebbero applicare dei limiti ai gruppi raggiungibili). Le seguenti restrizioni sono applicate anche se la casella è spuntata: - almeno uno dei gruppi in crosspost deve essere conosciuto - un massimo di 2 gruppi sconosciuti è permesso, se non è impostato alcun "Followup-To:" - un massimo di 5 gruppi sono permessi, se non è impostato alcun "Followup-To:" Days to keep data (Articles, History, Killfile-Log): In questa sottosezione potete impostare per quanti giorni Hamster debba detenere i dati. In altri termini, questo campo vi dice il numero di giorni di giacenza minima dei dati prima di essere disponibili al purge manuale ... "Articles": [______] Questo campo controlla per quanto tempo sono archiviati gli articoli, in base al valore date/time del caricamento degli articoli (la data riportata nel campo "Date:" dell'intestazioni non è rilevante a questo scopo). "History": [______] "History" è un elenco di Message-ID corrispondenti ad articoli già caricati che viene usato per controllare se un articolo sia già stato caricato da qualche news server remoto. Questo file (".\Groups\History.dat") è mantenuto completamente in memoria e ogni articolo deve essere controllato in questo elenco prima di essere richiesto. Di conseguenza, più alto è questo valore, maggiore sarà la memoria e (forse costoso) il tempo online necessario per Hamster. Per darvi un suggerimento: il mio file history su un P133 è grande circa 500KB, e finora non ho mai avuto problemi con questa dimensione. Rilevo però che dalla versione 1.3.5 il file History.dat non esiste più e viene ripartito in più file del tipo Hist???.dat. "Killfile-Log": [______] Il "Killfile-Log" (".\Groups\Kills.log") serve ad archiviare le informazioni relative agli articoli non caricati a causa delle impostazioni di scorefile. Se non siete interessati a utilizzare lo scorefile o a verificare il risultato di tale strumento, potete impostare questo campo a "0" giorni. SEZIONE Mailserver (POP3): Autostart [x], Port: [numero] Quando "Autostart" è segnato, all'avvio di Hamster, il server POP3 locale (quello che fornisce la posta elettronica raccolta da Hamster) parte automaticamente al numero di porta specificata. La porta predefinita per il POP3 è "110". Generate Message-ID: [ ] Funziona come per la versione NNTP (leggi più sopra). SEZIONE Mailserver (SMTP): Autostart [x], Port: [numero] Quando "Autostart" è segnato, all'avvio di Hamster, il server SMTP locale (quello che accetta la posta elettronica inoltrata ad Hamster) parte automaticamente al numero di porta specificata. La porta predefinita per il POP3 è "25". SMTP-after-POP3: [ ] Abilita "SMTP-after-POP3", che significa che una transazione SMTP è rifiutata, se l'autenticazione POP3 dallo stesso indirizzo IP non è andata a buon fine entro gli ultimi 5 minuti (predefinito; la durata può comunque essere modificata in Hamster.ini). SMTP AUTH: [ ] Abilita l'autenticazione SMTP che significa che il client deve autenticare il server remoto prima di spedire definitivamente la posta. SEZIONE Local Domains: "FQDN for Message-ID": [______] Qui potete immettere il vostro FQDN (Fully Qualified Domain Name), che identifica univocamente il vostro PC. Questo valore è usato per la parte del dominio di un Message-ID generato da Hamster. E' opportuno usare un dominio sintatticamente valido pena l'addizione della stringa ".invalid" all'estremità dell'FQDN scelto. Local mail-delivery, if domain-part of recipient matches this regex: [______] Se la parte del dominio di un mail-recipient (il testo che segue il carattere @) corrisponde la specifica espressione regolare, il messaggio non sarà spedito, ma "solo" consegnato localmente. Se la parte locale dell'email address corrisponde allo username di un account locale e questo account ha una mailbox POP3, la mail è inviata a questo utente, altrimenti non viene rigettata, ma inoltrata all'amministratore (questa condotta sarà modificata in una versione futura). L'impostazione originaria è .*hamster|\[?127\.0\.0\.1\]?|.*invalid Esempi per gli indirizzi locali coperti da questa espressione regolare sono: .*hamster --> someone@something.hamster \[?127\.0\.0\.1\]? --> someone@127.0.0.1, someone@[127.0.0.1] .*invalid --> someone@nospam.invalid Nota: Gli indirizzi senza una parte dominio o domini senza almeno un punto (".") in mezzo ad esso, sono sempre considerati come locali, indipendentemente dall'espressione regolare precedentemente usata. 6.9 File -> Configuration -> Settings Pull-Limit (default/empty group): [______] In questi campi potete limitare il numero degli articoli caricati per gruppo in una sessione online. La prima volta che si caricano gli articoli (es:, dopo l'aggiunta di un nuovo newsgroup), si usa il valore presente nel campo "(empty group)". Il caricamento susseguente userà il valore presente nel campo "(default)". I valori possibili sono: - "0" Carica tutti gli articoli disponibili. - >0 Carica solo un dato numero di articoli estratti tra quelli più recenti (ad esempio, gli ultimi "100"). - <0 Carica solo un dato numero di articoli estratti tra quelli più vecchi (ad esempio, i primi "100"). Leave mails on server, i.e. do not delete them [x] Quando spuntata (configurazione originale), la posta remota scaricata via POP3 attraverso Hamster, non sarà cancellata dal server. Viceversa, la posta sarà cancellata senza la sputa a meno che un'impostazione specifica per server sia scritta sul file Server.ini ("LeaveOnServer=1" nella sezione "[POP3]"). Ignore already loaded mails, i.e. do not load them again [x] Questa funzione fa uso del comando POP3 UIDL per ravvisare se la posta è già stata caricata in precedenza. Se questa casella è spuntata (configurazione originale) e il server supporta UIDL, la posta sarà caricata una volta sola. Hamster: [x] Start as icon Quando spuntata (configurazione originaria), Hamster alla partenza sarà minimizzato in una piccola icona nel system-tray . Hamster: [x] Minimize on close Quando spuntata, Hamster viene solo minimizzato a icona nel system tray quando la finestra principale viene chiusa. Per chiudere realmente Hamster, dovete usare il menù "File / Exit" then. Session-logfiles to keep: [______] Ogni volta che Hamster parte, viene creato un nuovo logfile (".\Logs\0.log"), mentre a quelli vecchi viene assegnato un altro nome a scalare fino alla posizione indicata in questo campo (il vecchio "0.log" diventerà "1.log" e così via). Oltre questa posizione, i log sono cancellati. Questo valore controlla appunto quanti di questi vecchi log debbano essere trattenuti. Logfile-lines to view: [______] Questo valore controlla quante righe del logfile sono trattenute in memoria e sono accessibili nella finestra principale (log). Questa è solo una caratteristica introdotta per non reprimere le performance, dato che l'aggiornamento dell'elenco a video può richiedere un po' di tempo. Save/View (Errors/Warnings/System/Info/Detail/Debug/Full): [ ] Queste caselle controllano quali tipi di "messaggi Hamster" saranno salvati nel log-file ("Save") e quali tipi sono mostrati nella finestra principale ("View"). Usate "[x] Debug" solo per ottenere il dettaglio completo nel caso aveste problemi di comunicazione e riportatelo al valore originario subito dopo dato che questo valore richiede molto spazio sul disco (il mio "Highscore" è di circa mezzo giga... ;-). 6.10 File -> Configuration -> Online-Menu Riquadro Menu-item: Ci sono 9 voci definibili nell'Online-Menu. Ogni articolo definisce un elenco di server che saranno usati con la selezione dello stesso articolo. Title: [______] Il testo da mostrare nell'Online-menu. Riquadri Available / Selected servers: Qui potete selezionare i server da usare dall'elenco dei news/mailserver definiti. Per attivare un server, selezionatelo nell'elenco a sinistra e spostatelo in quello di destra con [-->]. Per disattivare un server, selezionatelo nell'elenco di destra e spostatelo in quello di sinistra con [<--]. Ricordatevi di salvare i cambiamenti con [Save]. Esempi comuni: "News" --> attivate tutti i server NNTP "Receive Mail" --> attivate tutti i server POP3 "Send Mail" --> attivate tutti i server SMTP "MyProvider-only" --> attivate tutti i server inerenti il vostro provider di fiducia 6.11 File -> Configuration -> Killfile-Log L'argomento sarà approfondito nelle sezioni relative ai filtri. Qui si mostra solo il funzionamento di questa finestra. - Mostra le informazioni degli articoli non disponibili a causa delle impostazioni dello scorefile. - Cliccate in testa alla colonna desiderata per ordinare le righe a vostro piacimento. - Fate doppio clic sulla riga per vedere tutte le informazioni disponibili sull'articolo (intestazioni xover). - Selezionate più righe tenendo premuto shift o ctrl quando cliccate. - Fate clic con il bottone destro e selezionate "Mark for retrieval" (Ctrl+m) per caricare automaticamente gli articoli selezionati durante la prossima sessione online (--> ".\Server\(servsername)\getmids.txt"). - Fate clic con il bottone destro e selezionate "Delete" (Canc) per rimuovere le righe a cui non siete interessati. 6.12 File -> Killfile-Log/Edit scorefile Si tratta di un semplice editor per lo Scorefile delle news. Corrisponde al file: "Scores.hst". Don't log killed articles if score is lower than: [______] Se il punteggio assegnato è più basso del valore dato, l'articolo (non caricato) non è nemmeno registrato nel Killfile-Log. 6.13 File -> Rebuild global list Costruisce immediatamente i seguenti elenchi (normalmente sono ricostruiti automaticamente al riavvio di Hamster): * Elenco dei gruppi disponibili in pull (.\Server\allpulls.txt): Questo elenco contiene tutti i gruppi di tutti i newsserver attivi comprese le loro descrizioni. Questo è l'elenco impiegato quando volete aggiungere nuovi gruppi in news-pull ed è selezionata la casella [x] "descriptions". * Elenco di tutte le descrizioni dei newsgroup (.\Server\alldescs.txt) Questo elenco contiene le descrizioni di tutti i gruppi. Quando aggiungete un nuovo gruppo in pull, la descrizione del gruppo viene caricata dall'elenco. 6.14 File -> Purge all groups Selezionando questa funzione, i vecchi articoli, le voci nell'history e le registrazioni nel killfile-log saranno cancellate e i file relativi compattati. La giacenza minima dei dati può essere definita nel "Menù: File -> Configuration -> Local servers". 6.15 File -> Rebuild history Selezionando questa funzione, i file (".\Groups\Hist???.dat") history vengono cancellati e ricostruiti aggiungendo i Message-ID di tutti gli articoli archiviati in Hamster. Attenzione: l'operazione può occupare diverso tempo con migliaia di articoli. Normalmente, non dovrebbe esserci alcun bisogno di lanciare questa voce dato che le registrazioni nell'history sono aggiunte e cancellate automaticamente. Se avete invece problemi con articoli caricati più di una volta, potete risolverli con questa funzione. 6.16 File -> Clear counters+log Reimposta i contanttori nella barra di stato e libera il display dal logfile corrente. 6.17 File -> Refresh menu item Aggiorna dinamicamente le voci aggiunte ai menu (ad esempio, gruppi di server o server singoli nei menu Online o script disponibili nei menu. 6.18 Online -> 1-9: ??? Si tratta di un massimo di 9 funzioni personalizzabili dall'utente attraverso il "Menù: File -> Configuration -> Online-Menu". Quando selezionate una di queste voci, attivate il trasferimento di informazioni da e/o per i server che avete scelto. 6.19 Online -> All servers (News+Mail) Questo menù avvia il trasferimento dei dati da e per tutti i news/mailserver definiti. Se volete restringere il campo di operazione ad alcuni server specifici (es:, un solo news server), dovete usare uno dei menù personalizzabili di cui al punto precedente. 6.20 Online -> Script: Default.hsc Questa voce avvia lo script nella cartella principale di Hamster chiamato "Default.hsc". 6.21 Online -> Stop all tasks Selezionando questa voce, Hamster proverà a fermare tutti i task correntemente aperti. Sì, sì... ho proprio detto "proverà a fermare..." ;-) 6.22 Script -> File script disponibili Avvia uno dei file script disponibili (*.hsc). Nota: tutti i file script inizianti con "Demo-" sono disabilitati e non potranno essere avviati. Questi script dovrebbero essere presenti nella distribuzione di Hamster e saranno sovrascritti installando una nuova versione. 6.23 Script -> Edit Avvia un editor con uno degli script disponibili (*.hsc). Originariamente, viene usato l'editor di Windows "notepad.exe", ma questo può essere cambiato con l'impostazione "editor.*" nel file Hamster.ini 6.24 Script -> Edit Modules Avvia un editor con uno dei moduli disponibili (*.hsm). Originariamente, viene usato l'editor di Windows "notepad.exe", ma questo può essere cambiato con l'impostazione "editor.*" nel file Hamster.ini 6.25 Script -> Stop all scripts Ferma tutti gli script correnti. 6.26 Start/Stop Newsserver (NNTP) Se questa voce è già spuntata, il news server locale (NNTP) è avviato. Questo significa che potete richiedere il feed e inoltrare i messaggi news a Hamster con il vostro newsreader. Quando selezionate questa voce, il server, se in moto, sarà fermato, altrimenti, se fermo, sarà avviato. Per far partire automaticamente il server con l'avvio di Hamster, potete spuntare la casella apposita nel "Menù: File -> Configuration -> Settings". 6.27 Start/Stop Mailserver (POP3) Se questa voce è già spuntata, il mail server locale (POP3) è avviato. Questo significa che potete scaricare la posta da Hamster con il vostro mailreader. Quando selezionate questa voce, il server, se in moto, sarà fermato, altrimenti, se fermo, sarà avviato. Per far partire automaticamente il server con l'avvio di Hamster, potete spuntare la casella apposita nel "Menù: File -> Configuration -> Settings". 6.28 Start/Stop Mailserver (SMTP) Se questa voce è già spuntata, il mail server locale (SMTP) è avviato. Questo significa che potete inoltrare la posta a Hamster con il vostro mailreader. Quando selezionate questa voce, il server, se in moto, sarà fermato, altrimenti, se fermo, sarà avviato. Per far partire automaticamente il server con l'avvio di Hamster, potete spuntare la casella apposita nel "Menù: File -> Configuration -> Settings". 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). 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 = ( "+" / "-" ) 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 = "{" "}" PatSimple = ( PatSimpleAll / PatSimpleText / PatSimpleNumber ) PatSimpleAll = "*" PatSimpleText = """ """ PatSimpleNumber = "%" ( "<" / "=" / ">" ) cEOL = [ "#" ] CRLF CRLF = ritorno a capo 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" 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" 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" } 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. 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. 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. 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 di un punto successivo dove vengono spiegati "alcuni esempi di filtri complessi". 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. 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 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. Attenzione alla sintassi. Una forma come "=-9999 Xpost %> 1" oltre che essere errata per la presenza di uno spazio, provoca almeno fino alla versione 1.3.18 l'esclusione di tutti gli articoli! A mio modesto avviso siamo di fronte alla presenza di un bug che ho provveduto a segnalare all'autore. 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 ;-)) 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. 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. 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. 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. 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. * All'inizio ogni email è autorizzata "yes, it's ok to load it". * Se una regola "ignore" corrisponde, il messaggio non sarà né caricato, né cancellato. * Se una regola "kill" corrisponde, il messaggio non sarà caricato ma cancellato. * Se una regola "load" corrisponde, verrà revocata una regola "ignore" o "kill" precedentemente corrisposta. In modalità predefinita, "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. 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. 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 = ( / "Bytes" ) [ ":" ] MGroupedField = ( "Any-Sender" / "Any-Recipient" ) MSelectPattern= [ "+" / "-" ] [ "@" MSingleField ":" ] Pattern AccountList = *( "," ) NewsgroupList = *( "," ) ScopePattern = [ "+" / "-" ] Pattern Pattern = ( PatRegExp / PatSimple ) PatRegExp = "{" "}" PatSimple = ( PatSimpleAll / PatSimpleText / PatSimpleNumber ) PatSimpleAll = "*" PatSimpleText = """ """ PatSimpleNumber = "%" ( "<" / "=" / ">" ) cEOL = [ "#" ] CRLF CRLF = ritorno a capo / nuova riga Filter-Scope: Ogni blocco comincia con un'intestazione "[...]" che descrive i contrassegni (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" 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. 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. 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 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. 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. Sezione 8a: Gli script di Hamster versione 2 (*.hsc) ---------------------------------------------------- 8a.1 Compatibilità con la vecchia generazione Hamster dalla versione 1.3.17 ha visto l'introduzione di una nuova generazione di linguaggio di scripting basata su un nuovo motore decisamente più potente del precedente. Il nuovo linguaggio, per essere correttamente interpretato, ha bisogno di una chiosa iniziale in testa agli script del tipo: #!hs2 La presenza di questa riga determina infatti che troverà esecuzione la seconda generazione di linguaggio scripting. Con la sua assenza, invece, Hamster assumerà di dover usare il vecchio linguaggio. Il vecchio linguaggio di scripting sarà rimosso in una versione futura, per cui se ne sconsiglia l'ulteriore impiego. Si suggerisce, quindi, di non farne più uso e di sostituirlo con la nuova generazione. A tal fine, è possibile convertire gli script creati con il vecchio linguaggio grazie a un semplice script che potrete scaricare da: http://home.t-online.de/home/juergen.haible/hscconv.zip Questo file contiene lo script "hsc-convert.hsc" che converte i vecchi script nel nuovo formato. Riconosce tutti i comandi precedenti a eccezione di "wait.until" (sostituito da funzioni scheduler) e "call" (sostituito dalle funzioni definite dall'utente e/o dai moduli). Decomprimete il file nella cartella di Hamster. Riavviate Hamster in modo da farlo comparire lo script all'interno dell'apposito menù a tendina. Dopo il riavvio vi sarà chiesto di immettere il nome del file di un vecchio script che sarà rinominato sotto "nome_script.hsc-old". 8a.2 La sintassi degli script La sintassi degli script di Hamster è "line-oriented" che significa che ogni asserzione deve essere scritta in una sola riga di testo (la lunghezza di ogni riga non è limitata). Giusto: print( uppercase( "This is a single line" ) ) Sbagliato: print( uppercase( "This is NOT a single line" ) ) Le righe lunghe possono essere divise in righe multiple aggiungendo un continuatore di riga "_" alla fine della riga. Lo script interpreta questo simbolo come uno spazio e il ritorno del carrello su una nuova riga viene rimosso. Giusto: print( _ uppercase( _ "You won't believe it, but this is a single line, too!" _ ) _ ) COMMENTI I commenti iniziano con il carattere cancelletto "#" che fa ignorare il resto della riga: Giusto: # And now, a secret about spammers: print( uppercase( "make money" ) ) # They don't have shift-keys! Sbagliato: print( _ uppercase( "make money" ) _ # Not allowed within a line! ) Esiste anche un secondo tipo di commenti che possono essere inseriti all'interno di una riga. Questi commenti interni vengono scritti all'interno di parentesi {graffe}. Giusto: print( _ uppercase( "make money" ) _ {comment within splitted line} ) 8a.3 Tipo dati delle variabili SCALARI Hamster usa le VARIABILI che possono essere costituite a loro volta da due principali tipi di dati scalari: stringhe e interi. Le STRINGHE possono contenere ogni sequenza di caratteri ASCII, anche NULL (ASCII 0). Ogni stringa può quanto lunga quanto permette la memoria del vostro computer. Le COSTANTI sono scritte dentro le due virgolette ("..."). Gli INTERI sono gestiti entro i 32 bit e possono contenere numeri nell'insieme da -2147483648 a 2147483647. Le COSTANTI in sono scritte in esadecimale con uno "0x" iniziale (uno zero e una "x" minuscola, ad esempio 0xFF). Gli interi sono anche usati per rappresentare valori boleani, dove un valore pari a 0 significa FALSO e ogni altro valore significa VERO (in questo caso ogni funzione built-in restitituisce "true" con un valore pari a 1) Dove applicabile, i tipi dei dati sono convertiti automaticamente se necessario, così se un intero viene usato nel contesto di una STRINGA, viene convertito a STRINGA e viceversa. MATRICI (arrays), HASHES, COLLECTIONS, ELENCHI (lists). Non ci sono dati di questo tipo nel linguaggio script di Hamster, ma in molti casi possono essere rimpiazzati o almeno simulati attraverso un set di funzioni elenco. In tal caso, questi elenchi sono mantenuti internamente e sono accessibili attraverso un unico trattamento. Leggete "ListAlloc" per maggiori dettagli. 8a.4 Gli operatori Operatori Precedenza Associabilità Tipo-dati ------------------------------------------------------------------ ( ) (highest) <-- int, str ! ~ + - (unary) . --> int * / % . <-- int + - . <-- int, str (+ only) << >> . <-- int < > <= >= . <-- int, str == = != <> . <-- int, str & . <-- int ^ . <-- int | . <-- int && . <-- int || (lowest) <-- int Dettagli OPERATORI DESCRIZIONE ( ) group ! logical negation ~ binary negation (complement) + (unary) sign - (unary) sign * multiplication / division % modulus + addition, string-concatenation - subtraction << binary shift left >> binary shift right < smaller than > greater than <= smaller or equal >= greater or equal == = equal != <> not equal & binary AND ^ binary XOR | binary OR && logical AND || logical OR 8a.5 Le variabili Tutte le variabili cominciano con il simbolo del dollaro ("$") seguito da una lettera ("A"..."Z", "a"..."z"). Ulteriori caratteri possono contenere anche cifre ("0"..."9") o sottolineature ("_"). La lunghezza di un nome di variabile non ha limiti. Tutti i caratteri sono adatti, ma maiuscole e minuscole vengono trattate alla stessa stregua. Così $ABC è esattamente lo stesso che $abc. Esempi di variabili valide: $a $i________ $a_b $The_answer_is_REALLY_42 Esempi di variabili non valide: a$ ^^ $____i____ ^ $a.b ^ $The_answer_is_REALLY_42!!! ^^^ $1st_cut ^ 8a.6 Comandi interpretativi degli script I comandi interpretativi (preprocessor-commands) sono speciali opzioni che vengono eseguite prima dell'avvio dello script. Se vengono usati, devono essere preferibilmente collocati all'inizio di ogni script. #!hs2 Questo comando viene ignorato e potrebbe essere rimosso in una futura versione. E' il marcatore che decide di usare il nuovo motore di script invece di quello vecchio. #!trace 1 Serve per ragioni di testing. Tutte le righe saranno mostrate a video durante l'esecuzione. Benché ci sia anche un comando "trace" per abilitare e disabilitare il tracciato, questa opzione è l'unico modo per seguire la fase interpretativa. Mostra, per esempio, la sequenza di inizializzazione dei moduli caricati. #!debug Imposta il livello di debug con il quale lo script viene eseguito. Il default è "#!debug 0" che significa che tutti i comandi "debug" dentro gli script dovrebbero essere ignorati. #!load module.hsm Questo comando dispone e inizializza il dato modulo e le sue dipendenze (se presenti). Leggete i Moduli per maggiori dettagli. #!initialize Questa opzione viene usata nei moduli e rileva il codice di inizializzazione. Leggete i Moduli per maggiori dettagli. 8a.7 Le asserzioni e i rapporti degli script Le asserzioni (statements) sono funzioni che non possono essere usate all'interno di espressioni. La maggior parte di esse serve a controllare il flusso degli script. quit( ) quit Termina uno script in corso. Il parametro opzionale exitcode (default: 0), non ha ancora un significato particolare. error( ) error Termina uno script in corso con il dato messaggio di errore (default: "User defined error!"). Esempio: error( "File ", $Filename, " not found!" ) assert( , ) assert( ) Termina uno script in corso con il dato messaggio di errore (default: "Assertion failed!"), se restituisce un valore di 0 (FALSE). Esempio: assert( FileExists($Filename), "File ", $Filename, " not found!" ) return( ) return Lascia un "sub" e imposta il suo valore di ritorno. Se usato al di fuori di un "sub", lo script viene terminato. Esempio return( 42 ) return( uppercase("fortytwo") ) endsub Come "return" senza parametri, ad esempio lascia un "sub" con un valore di ritorno pari a 0. endsub var( [ , ... ] ) Dichiara delle variabili prima che possano essere usate. Il valore iniziale di nuove variabili è indefinito, parimenti per quelle già esistenti. Leggete anche "varset" Esempio: var( $a, $b, $c ) entercontext( ) leavecontext Un "context" definisce lo scopo per il quale sono valide le variabili. Se viene creato un nuovo "context", tutte le variabili in questo contesto saranno locali ad esso, mentre se il "context" venisse abbandonato, queste decadrebbero. Non dovreste aver bisogno di queste assunzioni dato che vengono automaticamente invocate mentre viene eseguita una "sub" (ovvero ogni sub ha le proprie variabili locali). Esempio: var( $a ) $a = 42 entercontext( "test" ) var( $a ) $a = 999 leavecontext print( $a ) # its value is still 42 label( ) Segna una posizione all'interno dello script con un dato contrassegno. Viene usato come obiettivo per le etichette "goto" e "gosub" (non_chiamatemi_mai_goto_per_favore). goto( ) Cerca un'etichetta con il dato contrassegno e continua l'esecuzione da lì in avanti. if( ) else endif Se da un valore diverso da 0 (=TRUE), le righe tra "if" e "else" vengono eseguite. Se restituisce 0 (=FALSE,) le righe tra "else" (se presente) e "endif" vengono eseguite. Esempio: if( $answer = 42 ) print( "The answer is correct!" ) else print( "The answer is wrong!" ) if( $whoanswered = "Deep Thought" ) print( "Reinstall Windows!" ) endif endif do while( ) repeat Segna l'inizio di un ciclo. Se "while" viene usato, il ciclo viene solo avviato, sempre che la condizione restituisca un valore diverso da 0 (in altre parole, mentre la condizione è vera). # Leggete gli esempi su loop/endwhile/until e break/continue loop endwhile until( ) Segna la fine di un ciclo. Se "until" viene usato, il ciclo viene semplicemente terminato, sempre che la condizione restituisca un valore diverso da 0 (in altre parole, fino a quando la condizione è vera) Esempi: do # ... loop while( $i<10 ) # ... endwhile repeat # ... until( $i>10 ) while( $i<10 ) # ... until( $k=42 ) for( , , , ) for( , , ) Segna l'inizio di un ciclo "for". Quando il ciclo viene avviato, la variabile viene inizializzata con . Il codice tra "for" e "endfor" viene successivamente eseguito fino a quando il valore di sarà inferiore o uguale a , oppure _se è negativo_ fino a quando il valore di sarà maggiore o uguale a . Dopo ogni loop-run, il valore (default: 1) viene aggiunto a . Esempio: var( $i, $k ) for( $i, 1, 10 ) for( $k, 10, 1, -1 ) print( $i, " ", $k ) endfor endfor endfor Segna la fine di un ciclo "for" # per gli esempi leggere "for" break( ) break Esce da un ciclo. Se una condizione viene data, il ciclo viene semplicemente chiuso, sempre che la condizione restituisca un valore diverso da zero (in altre parole, fino a quando la condizione è vera). Esempi: do break( RasIsConnected ) # do other things loop continue( ) continue Continua con il prossimo loop-run. Se una condizione viene data, il loop viene semplicemente continuato, sempre che la condizione restituisca un valore diverso da zero (in altre parole, fino a quando la condizione è vera). Esempi $i = 0 repeat continue( $i = 42 ) inc( $i ) until( $i > 100 ) sleep( ) Attende il dato ammontare di millisecondi (1/1000 di secondo) Esempio: sleep( 60000 ) # 1 minute trace( ) Se "trace" è ON, tutti le righe dello script saranno visualizzate durante l'esecuzione. Se è 0 (falso), "trace" è OFF, altrimenti è ON. Esempio: trace( 1 ) # ... trace( 0 ) dump Mostra tutte le variabili con i loro variabili a scopo di testing. Esempio: dump debug( , [ , ...] ) debug( ) Se solo un viene dato, il debug corrente viene impostato al valore dato (un valore di 0 disabilita la visualizzazione dei messaggi di debug. Se un addizionale viene dato, sarà solo visualizzato sempre che il debug corrente sia maggiore o uguale al dato Esempio: debug( 255 ) debug( 1, "Counter: ", $Counter ) 8a.8 I gruppi di funzioni interne #k Gruppi di funzioni: - Variabili (variables) - Interi (Intero) - Stringhe (Strings) - Tempo (Time) - Gestione degli errori (Error-handling) - File e cartelle (Files and directories) - Elenchi (Lists) - Input/Output - Agenda (Scheduler) - RAS (Remote Access Service) - Miscellanea 8a.9 #k Variabili set( , ) = Imposta la data al risultato di una . La seconda riga più comprensibile viene solo permessa all'inizio di una riga dato che "=" verrebbe interpretato come segno di paragone se usato in espressioni. In questo esempio il valore della variabile viene considerato dato o come se l'espressione avesse restituito questo valore. var( $a ) set( $a, 42 ) $a = 42 varset( , ) Dichiara una come "var" e imposta il suo valore iniziale al risultato della data In questo esempio il valore della variabile viene considerato dato o come se l'espressione avesse restituito questo valore. VarSet( $a, 42 ) inc( , ) inc( ) dec( , ) dec( ) Incrementa ("inc") o decrementa ("dec") la data di 1 o di un valore dato . Modifica il valore delle variabili Esempi: inc( $a ) dec( $a, 2 ) 8a.10 #k Interi true Offre un valore corrispondente al valore booleano TRUE (vero). Nota: tutti i valore diversi da 0 rappresentano TRUE, così "true" offre semplicemente una sorta di certificazione di valore TRUE. Esempio che restituisce: 1 $a = true false Offre un valore corrispondente al valore booleano FALSE (falso). Esempio che restituisce: 0 $a = false isint( ) Risolve la data espressione e restituisce vero se il risultato è un intero. Restituisce 1 se l'espressione rappresenta un intero, 0 altrimenti. Esempio: $result = iif( isint($a), $a, 0 ) int( ) Converte la data espressione in un intero. Se si tratta di una stringa che comincia con "0x", il resto della stringa viene considerato come valore esadecimale. Output: Intero; 0 se la stringa non contiene un intero valido. Esempi: $a = "1" $b = 2 $c = $a + $b # -> "12" $d = int($a) + $b # -> 3 print( int("0xFF") ) # -> 255 abs( ) Restituisce il valore assoluto di un numero. Output: Intero. print( abs( 42) ) # -> 42 print( abs(-42) ) # -> 42 sgn( ) Restituisce -1 se è negativo, +1 se è positivo e 0 se è uguale a 0. Esempi: print( sgn( 42) ) # -> 1 print( sgn(-42) ) # -> -1 8a.11 #k Stringhe isstr( ) Risolve la data espressione e restituisce vero se il risultato è una stringa. Output: 1, se l'espressione rappresenta un valore stringa, 0 altrimenti. Esempio: $result = iif( isstr($a), $a, "0x"+hex($a) ) ord( ) Restituisce la posizione ASCII del primo carattere della stringa. Output: Numero da 1 a 255 (0 se la stringa è vuota). Esempio: print( ord("*") ) # -> 42 chr( ) Restituisce il carattere ASCII corrispondente al numero di una certa posizione. Output: stringa contenente 1 carattere. Esempio: print( chr(42) ) # -> "*" str( , , ) ... str( ) Converte il dato numero in una stringa. Se viene dato, la stringa viene completata con il carattere iniziale (default: "0") fino alla concorrenza della lunghezza richiesta. Output: Stringa Esempio: $a = 42 print( str( $a ) ) # -> "42" print( str( $a, 5 ) ) # -> "00042" print( str( $a, 5, " " ) ) # -> " 42" hex( , ) hex( ] ) Converte il dato numero in esadecimale. Se viene dato, la stringa viene completata con degli "0" iniziali fino alla concorrenza della lunghezza richiesta. Output: Stringa Esempio: $a = 42 print( hex( $a, 42 ) ) # -> "002A" print( int( "0x" + hex(42) ) ) # -> 42 len( ) Restituisce la lunghezza di una data stringa. Output: Intero. Esempio: print( len("abc") ) # -> 3 pos( , , ] ) pos( , ) Restituisce la posizione di dentro . Se un viene dato, le posizioni inferiori a questo valore saranno ignorate. Output: Posizione oppure 0, se non trovato. Esempio: print( pos( "b", "abcde" ) ) # -> 2 print( pos( "b", "abcde", 3 ) ) # -> 0 copy( , , ] ) copy( , ) Restituisce la parte di che comincia allo . Se nessuna viene data, sarà restituito il resto della stringa. Output: Stringa. Esempio: print( copy( "abcde", 3, 1 ) ) # -> "c" print( copy( "abcde", 3 ) ) # -> "cde" delete( , , ] ) delete( , ) Cancella la parte di che comincia allo . Se nessuna viene data, il resto della stringa sarà cancellato Output: Stringa. Esempio: print( delete( "abcde", 3, 1 ) ) # -> "abde" print( delete( "abcde", 3 ) ) # -> "ab" $s = delete( $s, 1, 1 ) # cancella il primo char di $s trim( , ) trim( ) Rimuove tutti i caratteri iniziali e finali da che sono contenuti in . Se non viene dato alcun , i caratteri iniziali e finali verranno rimossi. Output: Stringa. Esempio: print( trim(" 42 ") ) # -> "42" $WHITESPACE = " " + chr(9) print( trim( $line, $WHITESPACE ) ) lowercase( ) Converte tutti i caratteri in maiuscolo dentro al minuscolo. Output: Stringa. Esempio: print( lowercase( "AbCd" ) ) # -> "abcd" uppercase( ) Converte tutti i caratteri in minuscolo dentro al maiuscolo. Output: Stringa. Esempio: print( uppercase( "AbCd" ) ) # -> "ABCD" replace( , , , , ) ... replace( , , ) Cerca dentro e, se trovato, lo sostituisce con . Se viene dato e ha un valore diverso da 0, tutte le corrispondenze di saranno sostituite. Se viene dato e ha un valore diverso da 0, maiuscole/minuscole saranno ignorate ai fini della ricerca. Output: Stringa. Esempio: print( replace( "abcABCabc", "b", "[X]" ) ) # -> "a[X]cABCabc" print( replace( "abcABCabc", "b", "[X]", true ) ) # -> "a[X]cABCa[X]c" print( replace( "abcABCabc", "b", "[X]", true, true ) ) # -> "a[X]cA[X]Ca[X]c" eval( ) Tratta come un'espressione, risolvendola e restituendo il suo valore. Output: soluzione di un'espressione. Esempio: print( "4" + "+" + "2" ) # -> "4+2" print( eval( "4" + "+" + "2" ) ) # -> 6 RE_Match( , ) Restituisce TRUE se corrisponde la (PCRE-style) espressione regolare . Nota: maiuscole/minuscole vengono ignorate di default. Per rendere la ricerca case-sensitive, precedete la con "(?-i)" Output: TRUE (1), FALSE (0) Esempio: $answer = "abc4efg2hij" if( RE_Match( $answer, "4.*2" ) ) print( "OK, it looks acceptable." ) endif RE_Extract( , ) Restituisce la parte di che corrisponde la (PCRE-style) espressione regolare NOTA: maiuscole/minuscole vengono ignorate di default. Per rendere la ricerca case-sensitive, precedete con "(?-i)" Output: Stringa (vuota se non trovato). Esempio: $answer = "abc4efg2hij" print( RE_Extract( $answer, "4.*2" ) ) # -> "4efg2" print( RE_Extract( $answer, "A.*C" ) ) # -> "abc" print( RE_Extract( $answer, "(?-i)A.*C" ) ) # -> "" RE_Parse( , , [ , ... ] ) Divide in gruppi definiti da una (PCRE-style) espressione regolare , dove un gruppo di caratteri viene racchiuso con parentesi. Il primo gruppo viene archiviato in variabile , il secondo in e così via. Se un dato parametro non è una variabile, la parte viene ignorata. Se non contiene abbastanza gruppi, i dati sono impostati a stringhe vuote. NOTA: maiuscole/minuscole vengono ignorate di default. Per rendere la ricerca case-sensitive, precedete con "(?-i)" Output: TRUE (1): OK, FALSE (0): Error (e.g. invalid ) Esempio: $line = "Subject: This is a test" RE_Parse( $line, "(\S+:)\s+(.*)", $a, $b ) # -> $a="Subject:", $b="This is a test" RE_Split( , , , [ , ... ] ) Divide in parti separate dalla (PCRE-style) espressione regolare . La prima parte viene archiviata nella variabile , la seconda in e così via. L'ultima variabile riceve sempre ciò che avanza della stringa anche se contenesse ulteriori parti corrisposte dalla . Se un dato -parametro non è una variabile, la parte viene ignorata. Se non contiene abbastanza parti, i dati sono impostati a stringhe vuote. NOTA: maiuscole/minuscole vengono ignorate di default. Per rendere la ricerca case-sensitive, precedete con "(?-i)" Output: TRUE (1): OK, FALSE (0): Error (e.g. invalid ) Esempi: $line = "this is a test" RE_Split( $line, " +", $a, $b ) # --> $a="this", $b="is a test" RE_Split( $line, " +", $a, $b, $c ) # --> $a="this", $b="is", $c="a test" 8a.12 #k Tempo ticks Carica il numero di millisecondi che sono trascorsi dall'avvvio di Windows. Output: Intero. Esempio: $start = ticks # ... $stop = ticks print( "It took ", $stop - $start, "ms." ) time Carica la data e l'ora correnti (ora locale). Output: Intero (Unix-format, ovvero secondi dal 01/01/1970). Esempio: $now = time $yesterday = $now - 24*60*60 timegmt Carica la data e l'ora correnti (GMT). Output: Intero (Unix-format, ovvero secondi dal 01/01/1970). Esempio: $nowgmt = timegmt decodetime(