bingel | Monte Cerignone e dintorni - Part 2

Archivio Autore

Fusione fredda? Macché, è bollente!

Nel video allegato il prof. Focardi parla dell'e-cat, il reattore, o meglio, il catalizzatore messo a punto dall'ing. Andrea Rossi con la consulenza di Focardi stesso. L'invenzione è vista con notevole scetticismo dalla comunità scientifica per via del fatto che l'ing. Rossi non ha ancora svelato il funzionamento del catalizzatore e anche per via dei suoi trascorsi, legati alla vicenda della Petroldragon, che non sono del tutto limpidi.

Stando alle parole di Focardi, tuttavia, ci sarebbero dei risultati sperimentali incontestabili: il prodotto della reazione (che si presume di origine nucleare) sono isotopi, assai rari in natura, del rame (aggiungendo un protone al nucleo del nichel si ottiene il rame). La cella, inoltre, riesce a generare una quantità di energia che normali reazioni chimiche, a parità di massa, non sarebbero in grado di fornire. E questo fatto, sempre a detta di Focardi, è, sebbene inspiegabile (se non nel campo delle LENR o della fusione fredda …ma a dire il vero le teorie scarseggiano anche qui), un'evidenza "galileana" che dovrebbe mettere a tacere anche i più scettici.

Nonostante tutto, lo scetticismo che aleggia intorno all'invenzione non è destinato a placarsi e con esso le critiche.
Pare, tuttavia, stando alle ultime novità, che le critiche avanzate da determinate "web-riviste" d'oltreoceano non siano totalmente disinteressate in quanto un paio di sperimentatori americani (certo Ahern e certo Miley) avrebbero messo a punto una tecnologia simile a quella di Rossi basata su nanomateriali. E tali riviste, come è ovvio che sia, pare stiano velatamente appoggiando gli americani a discapito dell'italiano.

Scrive Daniele Passerini sul suo blog, riportando le parole preventivamente tradotte, di certo Ben, gestore del sito e-catsite.com (mi sono permesso di apportare alcune correzioni volte a rendere più chiara la traduzione): "È interessante notare come Ahern sia stato negli ultimi tempi uno dei massimi critici di Andrea Rossi, da lui accusato di frode in più di una occasione sulle pagine del New Energy Times. Sono accuse singolari, se si pensa che provengono da un individuo che ha lavorato a una tecnologia simile e si prepara ad annunciarla al mondo. Molte ipotesi sono state fatte sul perché Steven Krivit di New Energy Times abbia dato spazio a tali accuse e abbia permesso che venissero riportate sulle pagine del suo blog. Alcuni osservatori, tra cui il sottoscritto, erano del parere che egli fosse venuto meno alla sua oggettività e si fosse schierato con l'altro ricercatore italiano, Francesco Piantelli, nella corsa che, entro breve, dovrebbe portare sul mercato la fusione fredda. Pare ora che Krivit avesse davvero un secondo fine, ma rivolto, piuttosto, ad appoggiare il lavoro di Ahern e, per estensione, di Miley, apparentemente a detrimento di Andrea Rossi."

Quindi, stando a quanto scrive Passerini, ci sarebbero al momento almeno quattro competitors (la società greca Defkalion, collegata, se non erro, a Rossi, Rossi/Focardi, Piantelli e Ahern/Miley) che stanno lavorando alla commercializzazione di un apparato in grado di produrre energia derivante da fusione fredda e in questa competizione sembra non siano esclusi colpi bassi e carognate di ogni genere. Comincio a spiegarmi, dunque, anche la faccia schizzata di Rossi nelle scene finali del secondo video: Rossi è furbo e scafato e probabilmente sa come giocarsi le sue carte ma tenere segreto qualcosa che al contempo si vuole anche pubblicizzare non dev'essere cosa facile. Probabilmente sta cercando di commercializzare il macchinario ancora prima che venga approvato il brevetto proprio nel timore che il brevetto stesso possa non essere concesso.

 

 

Lo sciopero della TV

Oggi, non so perché m'è venuta quest'idea. Visto che ormai esistono giornate dedicate praticamente a qualsiasi cosa, io credo che celebrarne una dove tutti insieme si decide di spegnere la TV per un giorno intero (fosse per me farei anche una "tre giorni" o una settimana o addirittura un mese), potrebbe essere oltre che una sfida al sistema (shock to the system), una gran bella iniziativa. La potremmo chiamare "giornata della TV spenta" e sarebbe uno sciopero non tanto di coloro che la TV la fanno, ma di coloro invece che la TV la guardano. Perché con tutta l'immondizia che ci viene somministrata oggigiorno, ad ogni livello, gli unici che hanno veramente diritto di scioperare sono i telespettatori. Cercando frettolosamente con Google, i primi risultati mi  pare non abbiano portato alla luce nulla di già esistente pertanto direi di cominciare ad immaginarci una "tre giorni" (ma sarebbe bello se fosse "per sempre"), possibilmente d'inverno, dove tutti quanti spegnerebbero la TV ed uscirebbero di casa per ritrovarsi (da mattina a sera) da qualche parte a fare cose interattive di qualsiasi tipo evitando di starsene passivamente seduti sul divano a fare zapping o trastullarsi col telecomando in mano sorbendosi le minchiate menzognere del TG1 (e compagnia bella) o le moderne carrambate della De Filippi.
Sarebbe meraviglioso.
Si potrebbero inoltre contattare quei pazzi di RADIO2 (Caterpillar) per sostenere l'iniziativa ed ottenere qualche notiza dal mondo. Oppure ci si potrebbe semplicemente aggiornare tramite Internet con una sorta di giornalismo partecipativo (per esempio un rappresentante per ogni provincia o qualcosa del genere …lo troveremo almeno uno studente di giornalismo coi controcoglioni per provincia!)
Ecco, mi chiedo se sia possibile organizzare una cosa del genere attraverso il semplice PASSAPOROLA, magari avvalendoci di Facebook.
Potremmo anche montare un sito in un paio di giorni (o settimane) e usarlo come punto di riferimento. Ritengo che la cosa potrebbe assumere le proporzioni di una protesta dalle capacità devastanti, senza black bloc, tuttavia, che rompano i coglioni (e se qualcuno prova a fregarci dovremo star ben in guardia a non permetterglielo). Dovrà essere quindi qualcosa di pacifico ma anche estremamente potente come lo furono a loro tempo, ad esempio, le proteste guidate dal Mahatma Ghandi. Ok, ora forse l'ho sparata un po' troppo grossa e posso già immaginare che qualcuno, dall'alto della propria pigrizia, mi starà già tacciando per pazzo delirante o visionario. Ma io intanto il sasso l'ho lanciato, se qualcuno ha qualche ulteriore idea non esiti a farsi avanti.

Ma chi cazzo sono sti black bloc?!

Chi trae vantaggio dall'operato dei Black Bloc? Questa è la solita domanda da porsi nel cercare di capire chi sia questa gente. E' strano che sbuchino fuori improvvisamente e riescano a dileguarsi nel nulla allo stesso modo con cui  appaiono, no? E' forse magia? Sia davvero così difficile individuarli e riuscire a risalire a chi li coordina? Dopotutto è dal 2001 che la polizia si "infiltra" indisturbata tra queste persone. Possibile che ancora non se ne sappia niente? Possibile che ancora non li conosciamo per nome uno per uno? E' molto, molto, molto, molto strano! E il copione sembra ripetersi anche fuori dall'Italia, Per esempio in Canada dove la polizia l'ha addirittura ammesso, forse per la prima volta al mondo, di aver infiltrato "qualche" uomo tra gli azionisti neri. Dico che è' strano anche perché ritengo improbabile riuscire a radunare 200 persone senza che queste abbiano alle spalle una qualche sorta di organizzazione. E perché solo a Roma poi? Oppure: perché proprio lì? Di manifestazioni ce ne sono state tante, in ogni parte d'Europa. E tutte sono state più o meno pacifiche. La domanda da porsi, dunque, è questa: a chi giovano i black bloc? E la risposta più semplice, la prima che uno può darsi: non certo a chi organizza le manifestazioni di protesta. Al tg1 di ieri sera, infatti, si è parlato quasi esclusivamente dei danni che hanno provocato questi facinorosi e della guerriglia da essi scatenata. Solo tra un lacrimogeno e l'altro s'è trovato spazio per parlare, a grandi linee, anche della protesta che volente o nolente è finita per passare in secondo piano. Se è vero che i black bloc hanno come obiettivo le grandi multinazionali, le banche e compagnia bella, credo che col loro operato non facciano altro che aiutarle pertanto o sono solo dei deficienti o i soliti ignoti li assoldano per fare ciò che fanno.

Non se ne viene fuori …parola di commercialista

L'articolo che segue non credo sia stato scritto da un "comunista" (lo lascia trasparire una scarsa obiettività di giudizio sull'ex ministro Visco: in merito alla finanziaria dell'ultimo governo Prodi si parla di vizi ideologici quando invece i dati di fatto e la contingenza, dovrebbero far pensare, piuttosto, che gli allora ministro e viceministro dell'Economia si trovavano praticamente di fronte agli stessi problemi cui si è trovato di fronte Tremonti qualche anno più tardi ovvero cercare di recuperare denaro per continuare ad alimentare un sistema marcio) pertanto l'analisi dell'operato dell'attuale governo è senz'altro "lucida" e affatto viziata da sentimenti partigiani o ideologismi (eventualmente lo sarebbe in senso opposto). Difficile, del resto, trovare un commercialista talmente idiota da lasciarsi condizionare da qualche stupida ideologia!

Lotta all’evasione poca, recupero di gettito tanto
di Enrico Zanetti
fonte: Eutekne.info
martedì 06 settembre 2011

Perché la lotta all’evasione fiscale non è stata fatta prima e ci si sveglia oggi? È questa la legittima domanda che molti cittadini pongono quando sentono proclami come quelli uditi in questi giorni. La risposta è nelle pieghe di una storia che ben conoscono coloro che, come i commercialisti, seguono da anni le vicende del Fisco italiano dal privilegiato punto di osservazione di chi è nei fatti il crocevia del rapporto tra Fisco e contribuente. Una risposta che, peraltro, induce a sua volta a chiedersi se la domanda iniziale, per quanto legittima, non sia forse mal posta. Perché, che ci si sia realmente svegliati, è tutto da vedere. Fino al 1993, il “rilassamento” dello Stato era dovuto al fatto che, tanto, c’era il deus ex machina rappresentato dal debito pubblico: tentazione irresistibile per chi ragiona pensando alle prossime elezioni e non alle prossime generazioni. Dal 1994 al 1996, finita l’era della incoscienza più totale, alla semi-quadratura del cerchio dei conti pubblici contribuiva in modo significativo una crescita economica “drogata” dalle cosiddette svalutazioni competitive della moneta. Dal 1997, venuto meno anche questo jolly, con la fissazione definitiva dei cambi in vista dell’introduzione dell’euro, si rende necessario, finalmente, avviare una seria riflessione sul rapporto tra fisco e contribuente. Una riflessione che sfocia in alcuni provvedimenti oggettivamente importanti: la riforma del sistema delle sanzioni pecuniarie, ma anche l’introduzione del ravvedimento operoso; l’entrata in vigore degli studi di settore, ma anche il riconoscimento del diritto del contribuente di compensare debiti e crediti tributari. L’azione di efficientamento prosegue fino al 2000, con la riforma del sistema delle sanzioni penali, ma anche con l’introduzione dello Statuto del contribuente. Insomma, una sorta di promessa di primavera del Fisco, portata avanti con equilibrio da Vincenzo Visco, il cui diritto a rivendicare meriti per quegli anni deve però considerarsi completamente azzerato da quell’autentico atto di arroganza e follia legislativa unilaterale che fu l’introduzione dell’IRAP. Nel 2001 Visco cede la mano a Tremonti, il quale, seppur con una breve parentesi di Siniscalco, tira le fila fino al 2006. Sono gli anni del giustificazionismo, ma forse sarebbe meglio dire del vuoto pneumatico: prima (2002-2003) i mille e uno condoni fiscali che riportano la credibilità del sistema fiscale ai minimi storici; poi la legge delega per la grande riforma (2003), lasciata inspiegabilmente inattuata, salvo la parte riferita al reddito delle società di capitali; infine (2004-2005) l’inizio di sistematiche violazioni allo Statuto del contribuente sotto la crescente necessità di fare in qualche modo cassa. Nel biennio 2006-2007 torna Visco. La lotta all’evasione fiscale viene messa definitivamente al centro dell’attenzione, ma è un’attenzione negativa, ideologica e con la bava alla bocca: vengono varate norme ad categoriam (la tracciabilità a 100 euro solo per i liberi professionisti), viene quasi fatto saltare un intero settore economico (quello immobiliare), vengono inserite presunzioni di evasione e di elusione di ogni tipo e genere, viene nei fatti irriso, dal suo stesso “padre”, lo Statuto del contribuente. In pratica, la lotta all’evasione fiscale, da battaglia comune di tutti i cittadini per l’equità sociale tra i medesimi, viene definitivamente trasformata in battaglia tra categorie di cittadini, da parte di uno Stato che non vuole smagrire e combatte l’evasione solo per avere di più da tutti, invece che per far pagare tutti meno. Dal 2008, dopo il ritorno di Visco, è la volta del ritorno di Tremonti. L’inizio è di chi vuol tornare a suonare la sua musica, nel bene (eliminazione di alcune norme di oggettivo accanimento introdotte dal precedente Governo) e nel male (un nuovo scudo fiscale). Già dal 2009, però, la presa di coscienza che la festa è definitivamente finita e che solo un diluvio di maggiori entrate può farla continuare, porta a una radicale inversione di rotta, prudentemente tenuta sotto traccia. È l’inizio di quella che già abbiamo avuto modo di definire “fase Dottor Jekyll e Mister Hyde”. Tra il 2009 e il 2010 vengono introdotte una serie di norme a senso unico pro Fisco che potenziano la riscossione e l’accertamento come nemmeno il Visco “incattivito” del 2006-2007 aveva anche solo pensato di fare, con tanto di tentativo finale di addomesticamento pro Fisco della giustizia tributaria, denunciato senza mezzi termini dai suoi vertici istituzionali e sindacali: pazzesco. Verso la fine del primo trimestre 2011, con le elezioni amministrative alle porte, il colpo di teatro: la denuncia indignata del rischio di una deriva di oppressione fiscale, da parte dello stesso Ministro che ha avallato l’introduzione delle norme che rendono questa deriva un pericolo tutt’altro che infondato. Il resto è cronaca di queste settimane. Questo non si può fare, quello non si vuole fare, non resta che provare con un “dagli agli evasori” e sperare, contro ogni logica, che l’Unione Europea e i mercati ce la mandino buona. Norme anti-evasione realmente significative da mettere non ce ne sono, perché, tra il Visco del 2006-2007 e il Tremonti del 2009-2010, si è già fatto di tutto e di più. Non resta allora che puntare sugli effetti speciali di grande impatto emotivo (dichiarazioni on line, società di comodo e tintinnar di manette) e avviare una campagna mediatica con cui, tra l’altro, precostituirsi una legittimazione popolare, per quando le norme introdotte con furba discrezione in precedenza cominceranno a produrre i loro effetti (gli accertamenti esecutivi, ad esempio, divengono operativi dal prossimo 1° ottobre, mentre la giustizia tributaria è ancora in mezzo al guado). Il tutto, presumibilmente, in attesa di future scadenze elettorali, quando sarà di nuovo tempo di denunciare il rischio quanto mai reale di derive di oppressione fiscale e incrociare le dita. In definitiva, dunque, la risposta è che la lotta all’evasione fiscale non è mai stata fatta prima (e continua a non essere fatta oggi), perché allo Stato non interessa affatto ripristinare l’equità sociale tra i cittadini. Di contro, però, allo Stato interessa moltissimo aumentare il gettito e bisogna dare atto, sempre sia un merito, che, a partire dal 2006, questo obiettivo viene perseguito da entrambi i principali schieramenti politici con una determinazione feroce. Chi per fanatismo ideologico, chi per cinica disperazione. Uno degli ultimi emendamenti alla manovra promette ora che gli incassi derivanti dalla lotta all’evasione saranno destinati alla riduzione della pressione fiscale. Non, però, da subito e non per intero: solo dal 2015 e solo, eccezionale, al netto della parte necessaria per contenere deficit e indebitamento. Non vale nemmeno la pena commentare. Volteremo mai pagina?

L’ultimo giro di chiave

Ho chiuso la porta che mi è venuta dietro veemente quasi a volermi cacciar fuori con rabbia e risentimento. Per questo, una volta battuta, non ho potuto fare a meno di accarezzarla come in un assurdo tentativo di placarne l'ira. E subito dopo ho dato l'ultimo giro di chiave senza pensarci due volte, senza portare a compimento nessuna delle cerimonie che m'ero poc'anzi prefigurato. Fuori piovigginava e tirava vento.

Nei giorni e nelle ore precedenti non ero mai stato pervaso né dal rimpianto né dalla tristezza. Pregustavo, anzi, quel sapore di libertà di cui, ormai da anni, avevo perso il ricordo. Solo in quel momento, per un attimo, mi si è stretto un nodo alla gola. Una sorta di senso di colpa per aver tradito quella figlia cui non ho mai potuto né saputo dare la dovuta attenzione. E così quella stessa "creatura" ora mi sbatteva fuori piena di odio e rancore.

Spero soltanto che i nuovi genitori sappiano trattarla con tutto il riguardo che merita.

Nucleare, a chi conviene?

Facciamo un “breve” riepilogo:

- solo ieri, a 5 giorni dal voto, la Consulta ha approvato il nuovo testo del referendum sul nucleare riformulato dalla Cassazione (mi chiedo come faranno ad essere pronte le schede per domenica prossima). Ditemi voi se non è una vergogna.

- i tg pubblici, quelli che noi cittadini paghiamo di tasca nostra, boicottano, disinformando o omettendo e sàbotano, “sbagliando” persino le date. Nelle reti pubbliche la pubblicità è ridotta ai minimi termini.

- il governo legifera ad hoc per impedire al popolo di esprimere il proprio parere (quello stesso governo che fino a ieri non faceva altro che ripetere di essere l’unico legittimo rappresentante del popolo stesso).

- presso questo link una lista (non proprio breve però) in cui sono riportati alcuni degli incidenti avvenuti nel mondo a partire dagli anni ’50 fino alla data di redazione della lista stessa (luglio 2008) e l’Italia, che negli anni ’60, in quanto a nuclearizzazione, era terza soltanto dopo USA e Gran Bratagna, non ne è affatto esente.
. E’ lecito nonché doveroso chiedersi quante vittime avranno silenziosamente mietuto, tali incidenti, nel corso dell’ultimo mezzo secolo.
. E’ lecito domandarsi quale sia la probabilità che un incidente più o meno grave possa accadere a due passi da casa nostra quando in Europa, se non vado errato sono presenti i 3/5 di tutte le centrali nucleari sparse in giro per il mondo.
. E’ lecito domandarsi dove e come vengono o verranno smaltiti i residui radioattivi prodotti da tali centrali. Pensare alle famose carrette affondate al largo di Napoli dovrebbe essere sufficiente per farci smettere di mangiare pesce per il resto della vita ma soprattutto ad aprirci gli occhi su come anche i paesi più “perbene” smaltiscono tali scorie.

- il nucleare non conviene a meno che non sia supportato da denaro pubblico. Gli Stati Uniti sono anni che non investono più in tale settore perché lo stato là non tira fuori un quattrino, in tal senso non esiste, i soldi li devono tirare fuori tutti quanti i privati, gli investitori. Questo dato, da solo, la dice lunga su come andrà invece a finire in Italia. Tra i costi del nucleare dovrebbero tra l’altro, essere calcolate le cosidette esternalità ovvero tutti quei costi non direttamente imputabili alla produzione di energia ma che tuttavia esistono (smaltimento scorie, risarcimento vittime in caso di incidente, danni all’ambiente etc etc etc). A conti fatti, il nucleare non conviene a meno che tutti questi costi “invisibili” non sia il cittadino a sobbarcarseli ovvero non sia lo stato a finanziarli. Provo ad immaginare, poi, considerato come viene amministrata la cosa pubblica in Italia, come potrebbero essere gestite le scorie nucleari. Basta pensare nuovamente alle carrette affondate nel Mediterraneo o ancor prima (e sarà anche un luogo comune ma è verità) alla munnezza di Napoli.

- un incidente grave presso una sola centrale nucleare causa danni incalcolabili che coinvolgono l’intero pianeta. Lo ha dimostrato Chernobyl e lo sta dimostrando Fukushima.

In definitiva la domanda è questa: agli italiani, o meglio, ai normali cittadini di questo pianeta, conviene sobbarcarsi rischi e spese di una centrale nucleare? La risposta è semplice ed è NO.

A chi conviene allora? Come dice ogni notte Marzullo fatevi questa banale domanda e provate a darvi una risposta.

Tempo di referendum: “divulgare”, la parola d’ordine

Sono passati quasi tre mesi dal giorno in cui in Giappone è scoppiata la terza bomba atomica. Questa volta non per colpa dei soliti Americani, almeno non in apparenza perché poi magari sono proprio costoro, i maggiori azionisti della società che gestiva le centrali nucleari giapponesi, e ne gestisce decine in tutto il mondo, chi lo sa. Ma questo poco conta, infondo.

Comunque sia, a tre mesi di distanza, si sta cominciando ad ammettere che il nocciolo di ben tre reattori è fuso o parzialmente fuso. E a distanza di tre mesi le falle che riversano quotidianamente scorie radioattive nell'oceano sono sempre aperte. Pensare che i giapponesi si erano dati tre mesi di tempo per chiuderle e nove mesi per riuscire a raffreddare completamente i reattori, ammesso che sia possibile farlo. Per bonificare la zona ci vorranno invece decenni. I danni in termini di vite umane sono e saranno incalcolabili. Nel vero senso della parola.

E la radioattività riversata nell'oceano contaminerà pesci, plancton, tonni che vengono esportati in tutto il mondo. Le vittime indirette, inconsapevoli e "silenziose" di questo incidente saranno migliaia nel corso dei prossimi venti o trent'anni. Un olocausto silenzioso che ucciderà senza suscitare particolare clamore.

Ebbene, tutto ciò rappresenta i rischi che bisogna conoscere e accettare quando si decide di costruire una centrale nucleare.
Rappresenta tuttavia solo una minima parte di tutto quello che c'è da sapere.
E l'avv. Giannino A. (vedi commento relativo), ad esempio, credo potrebbe illustrarci il resto visto che sembra saperla lunga in merito all'argomento.

Comunque, per farla breve, esprimo il mio pensiero e chi mi ama (o lo ama) mi segua e diffonda il più possibile questa voce perché è necessario divulgarla e farlo alla svelta: il gioco non vale la candela.

Se uno solo o pochi mostri del genere possono contaminare irrimediabilmente, per migliaia di anni, l'intero ambiente terrestre, devono essere estinti nel minor tempo possibile. Se è vero che non avere centrali nucleari nel territorio italiano non diminuisce il rischio cui anche noi italiani siamo, nolenti, sottoposti, è pur vero che questo deve essere un punto di partenza per un movimento che deve espandersi a macchia d'olio, a livello mondiale. Bisogna cominciare a liberare il mondo dall'immondizia e bisogna farlo alla svelta.
Altrimenti siamo destinati a soccombere, Tutti quanti.

E anche se sulla questione ci sarebbe da disquisire per ore intere, per adesso mi fermo qui.

Grecia al lastrico, costretta a vendere le proprie cazzo di isolacce.

Questo sarà, probabilmente, il post più breve che abbia mai scritto: iene chi le compra! Possano, un giorno, trovarsi nella stessa merda.

Anche se so perfettamente che ciò non accadrà mai.

E dicendolo il mio pensiero corre inevitabilmente all'Italia e al Mondo intero dove da sempre, furbi e potenti, perpetrano ogni sorta di crimine e frode nei confronti dei più sprovveduti, nei confronti dell'umanità.

…tempo e "fiato" sprecati, lo so.

L’eredità, trasmissione infame?

Raramente, nonostante tutto, mi accanisco contro questo schifo di trasmissioni che vanno in onda in TV in quanto do per scontato che siano un insulto e una presa per il culo per noi poveri deficienti costretti a pagare il canone RAI. Pertanto non sto nemmeno ad elencare tutto ciò che mi fa schifo e se non fosse per qualche bella concorrente che ogni tanto rapisce la mia attenzione (avrete notato, a proposito, che il più delle volte se non è una bella ragazza o un bel ragazzo, colui o colei che arriva in fondo è se non altro simpatico/a) probabilmente consumerei il mio pasto semplicemente immerso, come dice Guccini (se non sbaglio), nei pensieri miei.

Tuttavia devo dire che spesso mi capita, durante la ghigliottina (e se fate finta di non avere mai sentito parlare della ghigliottina vi sputo in un occhio) di mettermi a pensare alla parola che si lega con tutte le altre.
Ebbene, questa sera le cinque parole della ghigliottina erano queste:

- quarto

- nascita

- titolo

- animo

- miseria

Alla terza avevo già indovinato pensando a “nobiltà”. Poi, arrivato all’ultima, comincio a ripensarci e mi rendo conto che con alcune delle parole date avrebbe forse legato meglio la parola “nobile”.
A voce alta esclamo: “vuoi vedere che stasera a questo qua lo inculano perché non si capisce se ci sta meglio nobile o nobiltà?”.

Poi il colpo di scena. Carlo Conti, che forse è anche un bravo ragazzo ma quanto a fantasia e simpatia ne ha quasi meno del sottoscritto, svela la parola messa nero su bianco dal concorrente. Tale parola è “stato”. Comincio a fare i miei carloconti e mi rendo carliconto che quella è la parola esatta perché quella è la parola che lega meglio di tutte.

Il concorrente, inizialmente ci crede il giusto ma poi, dopo aver fatto la solita manfrina insieme a Conti di accostare la sua pensata alle altre parole, ecco che comincia ad illudersi. La moglie, tra il pubblico, non sta più nei panni.

Devo precisare che il concorrente, stasera, guarda caso, non aveva mai dimezzato. Centomila euro tondi tondi se li stava dunque già pregustando.

Pensate, l’unica parola che non era riuscito a collegare ma che in un qualche modo gli suonava comunque bene, era “quarto”.
Ecco allora che Carlo Conti interviene in suo aiuto e gli fa presente che “Quarto Stato” è un famoso quadro di Giuseppe Pellizza da Volpedo perciò a quel punto anche il concorrente si ricorda di tale dipinto e improvvisamente comincia a sognare.

Ma come dicevo, c’è il colpo di scena, la parola esatta non è “stato” bensì “nobiltà”.

Mi alzo indignato e mi dirigo verso il pc. Mi siedo e ripenso ai fatti. Quello che penso è, “testualmente”: “avevo detto che lo inculavano e l’hanno inculato, è strano eh? Devo essere un profeta!” Ma so benissio di non esserlo e ad un tratto infatti mi si accende la lampadina: come faceva Carlo Conti, che l’italiano lo ha imparato facendo televisione e che di arte ne sa praticamente quanto me a ricordarsi così perfettamente il nome dell’autore di tale dipinto (peraltro non particolarmente facile)? Sfido chiunque di voi, che avrete capito certamente di quale quadro stiamo parlando, a ricordarsi, tuttavia, dell’autore.

Ecco dunque che realizzo il possibile imbroglio. E’ strano che Conti fosse così preparato a dare spiegazioni su tale liaison della parola individuata dal concorrente quando questa non era affatto esatta, non vi pare? Qui ci sono i presupposti perché le iene ne facciano un caso e aprano un’inchiesta!

Script per la creazione di “punti di ripristino” usando apt-get, dpkg o tasksel

Questo script serve a generare un log di tutti i pacchetti aggiornati, installati o rimossi in un sistema linux basato su Debian (come ad esempio potrebbero essere Ubuntu o Mint). In pratica crea dei punti di ripristino ordinati sia progressivamente che cronologicamente attraverso cui l'amministratore di sistema può facilmente risalire alle modifiche effettuate senza dover perdere la testa a ricercare i pacchetti installati o rimossi, nel file di log generato da dpkg (/var/log/dpkg.log).

 

INSTALLAZIONE:

1) Copiare il codice in un file di testo, nominarlo debic e salvarlo nella directory /usr/local/bin
2) Modificarne i permessi di esecuzione e il proprietario in questa maniera:

$ chmod 755 /usr/local/bin/debic
$ chown root:root /usr/local/bin/debic

3) Eseguire il comando debic da una finestra di terminale affinché i link usr/local/bin/aptic e usr/local/bin/taskic possano essere creati:

$ debic

Attenzione!: tutti i comandi indicati vanno eseguiti come superuser

 

USO:

E' lo stesso di apt-get, dpkg e tasksel. E' tuttavia necessario sostituire questi tre comandi, rispettivamente, coi comandi aptic, debic e taskic. Se il primo o unico argomento è cat, less, tail o head verranno mostrati rispettivamente, il contenuto dei file di log con i primi due comandi, la sua coda o la parte iniziale con gli ultimi due. Tali comandi accettano anche le proprie tipiche opzioni. Dal momento in cui vengono installati, è importante usare solo questi tre strumenti (debic, aptic o taskic) per aggiornare il sistema (o per installare o rimuovere pacchetti) affinché tutte le modifiche effettuate possano essere tracciate con successo. Modificando opportunamente lo script, è tuttavia possibile monitorare anche le modifiche effettuate da programmi come synaptic, gnome-apt o wajig.

Nel caso di installazione di pacchetti autocompilati è consigliato creare prima un file .deb e quindi installare quest'ultimo avvalendosi di debic.

 

Eventuali bug o migliorie possono essere segnalati commentando questo post.


#!/bin/bash

# Personal script by Bingel
# Version: 3.0
# Release date: April 21th 2011

# *** BEGIN EXTENDED HELP ***
#
# This script is a pretty basic script meant for helping
# to keep an ordered track about installed, removed or
# upgraded packages in a Debian based distribution. It
# is a wrapper for dpkg, apt-get or tasksel, it runs
# them and writes changes done, in file:
#
# /var/cache/debic/resc-pts
#
# Each line of this file is structured as follows:
#
# - 1st field) Package name.
# - 2nd field) Package extended state*
# - 3rd field) Package version before package manager (pm)
#   action was performed. If reported version is "unknown",
#   this means that package has been newly installed.
# - 4th field) Package selection state** before pm action
#   was performed.
# - 5th field) Package error state** before pm action was
#   performed,
# - 6th field) Package state** before pm action was
#   performed,
# - 7th field) Separator ">>"
# - 8th field) Package version after pm action was
#   performed. If reported version is "unknown", this
#   means that package has been removed.
# - 9th field) Package selection state** after pm action
#   was performed,
# - 10th field) Package error state** after pm action
#   was performed,
# - 11th field) Package state** after pm action was
#   performed,
#
# * extended states are:
#    - "A" for auto-installed packages (as dependencies)
#    - "H" for hand-installed packages (as any normally
#       installed package)
#
# ** for help about packages states see "man dpkg" at
#    section "INFORMATION ABOUT PACKAGES"
#
# On head of each rescue point, its progressive number,
# date on which it was generated, package manager used,
# number of packages involved are shown as well as a
# brief description, if entered, about performed
# operations. If package manager field reports "unknown"
# this means that the corresponding rescue point was
# created in attempting to reflect changes made by an
# unknown package manager (but it is preferable if this
# situation does not occur).
#
# INSTALLATION:
# Soon after having placed this script in
# installation directory, preferably:
#
# /usr/local/bin
#
# change its mode bits and owner in this way:
#
# $ chmod 755 <script-name>
# $ chown root:root <script-name>
#
# First time using this script it's necessary to run it
# with its real name (debic), with or without arguments
# (if any arguments are passed they will be ignored), so
# that links (aptic and taskic) can be generated.
#
# *** BEGIN HELP ***
#
# USAGE:
# Usage is the same as apt-get, dpkg or tasksel
# except that it is necessary to replace the "dpkg",
# "apt-get" or "tasksel" commands, respectively with:
#
# - debic
# - aptic
# - taskic
#
# that is the name of this script (that I recommend to
# call "debic") or name of links needed to run apt-get
# and tasksel (that I recommend to call "aptic" and
# "taskic"). For help about apt-get, dpkg or tasksel
# usage, see their respective manual pages.
#
# Script must be run as superuser but if executed in
# "query mode", this is not mandatory.
#
# Query mode is when you use this script to read log
# files content as explained below.
#
# If first or sole argument is one of the following:
#
# - cat
# - less
# - head
# - tail
#
# content of the two most recent log files (a
# concatenated output of "resc-pts.1" and "resc-pts"
# files) will be printed according to these well known
# commands output. Typical options, for cat, less, head
# and tail are also accepted. For help about these
# programs usage, see their respective manual pages.
#
# If instead, first argument is one of the following:
#
# - first [N]
# - latest [N]
#
# content, respectively, of earliest or latest rescue
# point, found into the two most recent log files, will
# be printed. An integer number could also be passed as
# further argument in way to tell this script to show N
# earliest or latest rescue points.
#
# - rp [N] [N-M] [N-] [-M]
#
# rescue points specified by a list of ranges passed as
# further arguments, will be searched in log files and
# eventually printed. Each list is made up of one range,
# or many ranges separated by a space. Each range is one
# of:
#
# N   : content of N'th rescue point will be printed
# N-  : content from N'th rescue point to latest rescue
#       point  will be printed
# N-M : content from N'th to M'th (included) rescue point
#       will be printed
# -M  : content from first to M'th (included) rescue point
#       will be printed
#
# - date YYYY-MM-DD HH:MM:SS [to YYYY-MM-DD HH:MM:SS]
#
# log files will be searched for rescue points matching
# given date or included in given date range when also
# argument "to" is passed and followed by a date. Date
# digits can be omitted from the right, so, for exemple,
# "2011-04" will be accepted as "2011-04-15" or
# "2011-04-15 16:10".
#
# If following arguments:
#
# - first
# - latest
# - rp
# - date
#
# are prefixed by letter "r" (so, for example, "first"
# will become "rfirst" and so on), a raw output withouth
# header, footer separator or blank lines will be
# printed. This is particularly useful if the output
# have to be used in a script.
#
# If first argument is:
#
# - h
#
# a brief help will be printed
#
# - help
#
# an extended help will be printed
#
# *** END HELP ***
#
# DISCLAIMER: This script is provided 'as-is', without
# any express or implied warranty. In no event will the
# author be held liable for any damages arising from the
# use of this software.

### Prevents this script can be interrupted

trap "" 2

### Set script name, link names, installation path and cache directories path

scriptname=debic    # script name, it runs dpkg
aptgetlink=aptic    # link name for running apt-get
tasksellink=taskic  # link name for running tasksel
installdir=/usr/local/bin # installation directory
aptdir=/var/lib/apt   # apt directory
dpkgdir=/var/lib/dpkg # dpkg directory
cachedir=/var/cache/$scriptname # cache directory
tmpdir=$cachedir/tmp # temporary directory
separator="-----"    # separator symbols between rescue points
rowsize=500          # max size of rescue-pts file (in rows) before it is archived
description=enabled  # comment this line to disable description

### Check if link name exists

if ln -s $installdir/$scriptname $installdir/$aptgetlink 2>/dev/null; then
  echo "Symbolic link for "'"'$aptgetlink'"'" genearated"
  esc=yes
fi

if ln -s $installdir/$scriptname $installdir/$tasksellink 2>/dev/null; then
  echo "Symbolic link for "'"'$tasksellink'"'" genearated"
  esc=yes
fi

### Check if cache directories exist

if mkdir $cachedir 2>/dev/null; then
  mkdir -m 640 $tmpdir
  echo "Cache directories not found"
  echo -n "generating"; for i in $(seq 1 2); do  echo -n .; sleep 0.5; done; echo .
  echo "Cache directories generated successfully"
  #esc=yes
else
  if mkdir -m 640 $tmpdir 2>/dev/null; then
    echo "Temporary directory not found"
    echo -n "generating"; for i in $(seq 1 2); do  echo -n .; sleep 0.5; done; echo .
    echo "Temporary directory generated successfully"
    #esc=yes
  fi
fi

### Exits after generating cache directories and links
### (disabled by default for cache directories).
### To enable, uncomment "esc" variables.

if [ "$esc" = "yes" ]; then
  exit
fi

#### ####################################### ####
####   BEGIN - "QUERY" section.              ####
####   To print "rescue-pts" file content.   ####
#### ======================================= ####

OLD_IFS=$IFS; IFS=""

###################################
### Querying by rescue point number

printrp=$(if [ "$1" = "rp" ] || [ "$1" = "rrp" ]; then
  args=$(i=0; for arg in $@; do
    i=$(($i + 1))
    if [ $i -gt 1 ]; then
      dcount=`echo $arg | grep -o "-" | wc -l`
      lcount=`echo -n $arg | wc -m`
      rpbegin=`cat $cachedir/resc-pts.1 $cachedir/resc-pts 2>/dev/null | grep "^Rescue Point n. " | head -n 1 | cut -d " " -f 4`
      rpend=`cat $cachedir/resc-pts.1 $cachedir/resc-pts 2>/dev/null | grep "^Rescue Point n. " | tail -n 1 | cut -d " " -f 4`
      if [ $dcount -eq 1 ] && [ $lcount -gt 1 ]; then
        dbeg=`echo $arg | grep -e "^-" | wc -l`
        if [ $dbeg -eq 1 ]; then

          ### from begin to number ###
          #==========================#
          aend=$((10#`echo $arg | cut -d "-" -f 2` * 1))
          # if [[ "$aend" =~ ^[0-9]+$ ]] && [[ $aend -ge $rpbegin ]] && [[ $aend -le $rpend ]]; then
          if [[ "$aend" =~ ^[0-9]+$ ]] && [[ $aend -ge $rpbegin ]]; then # If you uncomment
            if [[ $aend -gt $rpend ]]; then                              # previous
              if [[ $rpend -gt 0 ]]; then  # This seems a stupid         # row you
                aend=$rpend                # condition but               # need
              else                         # needed if rpend value       # to comment
                aend=0                     # is empty                    # these
              fi                                                         # 8
            fi                                                           # rows
            for num in $(seq $rpbegin $aend); do
              echo $num
            done
          else
            : # echo "Invalid argument"  # Uncomment if 2nd row of this
              # exit                     # section is uncommented
          fi

        else
          dend=`echo $arg | grep -e "-$" | wc -l`
          if [ $dend -eq 1 ]; then

            ### from number to end ###
            #========================#
            abeg=$((10#`echo $arg | cut -d "-" -f 1` * 1))
            # if [[ "$abeg" =~ ^[0-9]+$ ]] && [[ $abeg -ge $rpbegin ]] && [[ $abeg -le $rpend ]]; then
            if [[ "$abeg" =~ ^[0-9]+$ ]] && [[ $abeg -le $rpend ]]; then # If you uncomment
              if [[ $abeg -lt $rpbegin ]]; then                          # previous row you
                abeg=$rpbegin                                            # need to comment
              fi                                                         # these 4 rows
              for num in $(seq $abeg $rpend); do
                echo $num
              done
            else
              : # echo "Invalid argument"  # Uncomment if 2nd row of this
                # exit                     # section is uncommented
            fi

          else

            ### from number to number ###
            #===========================#
            abeg=$((10#`echo $arg | cut -d "-" -f 1` * 1))
            aend=$((10#`echo $arg | cut -d "-" -f 2` * 1))
            # if [[ "$abeg" =~ ^[0-9]+$ ]] && [[ "$aend" =~ ^[0-9]+$ ]] && [[ $abeg -ge $rpbegin ]] && [[ $abeg -le $rpend ]] && [[ $aend -ge $rpbegin ]] && [[ $aend -le $rpend ]]; then
            if [[ "$abeg" =~ ^[0-9]+$ ]] && [[ "$aend" =~ ^[0-9]+$ ]] && (([[ $abeg -ge $rpbegin ]] && [[ $abeg -le $rpend ]]) || ([[ $aend -ge $rpbegin ]] && [[ $aend -le $rpend ]]) || ([[ $abeg -lt $rpbegin ]] && [[ $aend -gt $rpend ]]) || ([[ $aend -lt $rpbegin ]] && [[ $abeg -gt $rpend ]])); then
              if [ $abeg -lt $rpbegin ]; then   # If you
                abeg=$rpbegin                   # uncomment
              elif [ $abeg -gt $rpend ]; then   # 3rd line
                abeg=$rpend                     # of this section
              fi                                # you have to
                                                # comment
              if [ $aend -lt $rpbegin ]; then   # these
                aend=$rpbegin                   # lines
              elif [ $aend -gt $rpend ]; then   # and
                aend=$rpend                     # previous
              fi                                # line (4th line)

              if [ $abeg -lt $aend ]; then
                for num in $(seq $abeg $aend); do
                  echo $num
                done
              else
                for num in $(seq $aend $abeg); do
                  echo $num
                done
              fi
            else
              : # echo "Invalid argument" # Uncomment if 3rd
                # exit                    # line is not commented
            fi

          fi
        fi

      else

        ### only a number ###
        #===================#
        if [[ "$arg" =~ ^[0-9]+$ ]] && [[ 10#$arg -ge $rpbegin ]] && [[ 10#$arg -le $rpend ]]; then
          echo `expr $arg \* 1`
        else
          : # echo "Invalid argument" # Uncomment if you want to stop executing script
            # exit                    # when a number out of rescue points range is given
        fi

      fi
    fi
  done | sort -uV | grep -v "^0")

  # esc=$(echo $args | while read arg; do          # These rows are not needed
  #   if [ "$arg" = "Invalid argument" ]; then     # if previous
  #     echo "yes"                                 # "Invalid argument" rows
  #     break                                      # in previous
  #   fi                                           # sections are all
  # done)                                          # commented
                                                   #
  # if [ "$esc" = "yes" ]; then                    #
  #   exit                                         #
  # fi                                             #

  if [ -n "$2" ]; then
    echo $args | while read num; do
      rps=`cat $cachedir/resc-pts.1 $cachedir/resc-pts 2>/dev/null | grep -nxe "Rescue Point n. $num" -e "^$separator" | grep -A 1 ":Rescue Point n. $num"`
      start=`echo $rps | head -n 1 | cut -d ":" -f 1`
      stop=$((`echo $rps | tail -n 1 | cut -d ":" -f 1` + 1))
      cat $cachedir/resc-pts.1 $cachedir/resc-pts 2>/dev/null | head -n $stop 2>/dev/null | tail -n +$start 2>/dev/null
    done
  fi
fi)

if [ "$1" = "rp" ] || [ "$1" = "rrp" ]; then
  if [ -n "$printrp" ]; then
    if [ "$1" = "rp" ]; then
      tput clear
      echo $printrp | less
    else
      echo $printrp | grep -ve "^Rescue Point n. " -e "^Date: " -e "^Package Manager: " -e "^No packages involved: " -e "^Description: " -e "^$separator" -e "^[[:space:]]*$"
    fi
    exit
  else
  echo "Invalid argument/s or rescue point/s not found"
  exit
  fi
fi

#####################
### Querying by date

function odate {
#if [ "$1" = "date" ] || [ "$1" = "rdate" ]; then
  if [ -z "$4" ]; then
    if [ -n "$2" ]; then
      checkargs $2 $3
      if [ "$chk1" = "ok" ] && [ "$chk2" = "ok" ]; then
        if [ -n "$3" ]; then
          dates=`cat $cachedir/resc-pts.1 $cachedir/resc-pts 2>/dev/null | grep -ne "^Date: $2 $3" -e "^$separator" | grep -A 1 ":Date: $2 $3"`
        else
          dates=`cat $cachedir/resc-pts.1 $cachedir/resc-pts 2>/dev/null | grep -ne "^Date: $2" -e "^$separator" | grep -A 1 ":Date: $2"`
        fi
        if [ -n "$dates" ]; then
          start=$((`echo $dates | grep ":Date: " | head -n 1 | cut -d ":" -f 1` - 1))
          stop=`echo $dates | grep -A 1 ":Date: " | tail -n 1 | cut -d ":" -f 1`
          if [ -n "$start" ]; then
            tput clear
            if [ "$1" = "date" ]; then
              cat $cachedir/resc-pts.1 $cachedir/resc-pts 2>/dev/null | head -n $stop | tail -n +$start | less
            else
              cat $cachedir/resc-pts.1 $cachedir/resc-pts 2>/dev/null | head -n $stop | tail -n +$start | grep -ve "^Rescue Point n. " -e "^Date: " -e "^Package Manager: " -e "^No packages involved: " -e "^Description: " -e "^$separator" -e "^$"
            fi
          fi
        else
          echo "Date not found"
        fi
      else
      echo "Invalid date/range"
      fi
    fi
  else
  echo "Too many arguments"
  fi
exit
#fi
}

#####################
### Check date format

function checkargs {

unset chk1 chk2 chk pchk dchk p1 p2 p3

if [[ "$1" =~ ^[0-9-]+$ ]] && [ `expr length "$1"` -le 10 ]; then
  dcount=`echo $1 | grep -o "-" | wc -l`
  case $dcount in
    2)
      p1=`echo $1 | cut -d "-" -f 1`
      p2=`echo $1 | cut -d "-" -f 2`
      p3=`echo $1 | cut -d "-" -f 3`
      if [[ `expr length "$p1"` -eq 4 ]] && [[ `expr length "$p2"` -eq 2 ]]; then
        chk=ok
      fi
    ;;
    1)
      p1=`echo $1 | cut -d "-" -f 1`
      p2=`echo $1 | cut -d "-" -f 2`
      if [[ `expr length "$p1"` -eq 4 ]] && [[ `expr length "$p2"` -le 2 ]]; then
        chk=ok
      fi
    ;;
    0)
      p1=$1
      if [[ `expr length "$p1"` -le 4 ]]; then
        chk=ok
      fi
    ;;
  esac

  if ([ ! "$p3" = "00" ] && [[ "$p3" =~ ^[0-3] ]]) || [ -z $p3 ]; then
    if ([ ! "$p2" = "00" ] && [[ "$p2" =~ ^[0-1] ]]) || [ -z $p2 ]; then
      pchk=ok
    fi
  fi

  case $p2 in
    01|03|05|07|08|10|12)
      if [[ 10#$p3 -le 31 ]]; then
        dchk=ok
      fi
    ;;
    04|06|09|11)
      if [[ 10#$p3 -le 30 ]]; then
        dchk=ok
      fi
    ;;
    02)
      isleap="false"
      if [ $((10#$p1 % 4)) -ne 0 ] ; then
        :
      elif [ $((10#$p1 % 400)) -eq 0 ] ; then
        isleap="true"
      elif [ $((10#$p1 % 100)) -eq 0 ] ; then
        :
      else
        isleap="true"
      fi

      if [ "$isleap" == "true" ]; then
        if ([[ 10#$p3 -le 29 ]] && [[ "$p3" =~ ^[0-2] ]]) || [ -z $p3 ]; then
          dchk=ok
        fi
      else
        if ([[ 10#$p3 -le 28 ]] && [[ "$p3" =~ ^[0-2] ]]) || [ -z $p3 ]; then
          dchk=ok
        fi
      fi
    ;;
    *)
      dchk=ok
    ;;
  esac

  if [ "$chk" = "ok" ] && [ "$pchk" = "ok" ] && [ "$dchk" = "ok" ]; then
    chk1=ok
  fi

fi

unset chk pchk p1 p2 p3

if [[ "$2" =~ ^[0-9:]*$ ]] && [ `expr length "$2"` -le 8 ] && ([ `expr length "$1"` -eq 10 ] || [ -z $2 ]); then
  dcount=`echo $2 | grep -o ":" | wc -l`
  case $dcount in
    2)
      p1=`echo $2 | cut -d ":" -f 1`
      p2=`echo $2 | cut -d ":" -f 2`
      p3=`echo $2 | cut -d ":" -f 3`
      if [[ `expr length "$p1"` -eq 2 ]] && [[ `expr length "$p2"` -eq 2 ]]; then
        chk=ok
      fi
    ;;
    1)
      p1=`echo $2 | cut -d ":" -f 1`
      p2=`echo $2 | cut -d ":" -f 2`
      if [[ `expr length "$p1"` -eq 2 ]] && [[ `expr length "$p2"` -le 2 ]]; then
        chk=ok
      fi
    ;;
    0)
      p1=$2
      if [[ `expr length "$p1"` -le 2 ]]; then
        chk=ok
      fi
    ;;
  esac

  if ([[ 10#$p3 -le 59 ]] && [[ "$p3" =~ ^[0-5] ]]) || [ -z $p3 ]; then
    if ([[ 10#$p2 -le 59 ]] && [[ "$p2" =~ ^[0-5] ]]) || [ -z $p2 ]; then
      if ([[ 10#$p1 -le 23 ]] && [[ "$p1" =~ ^[0-2] ]]) || [ -z $p1 ]; then
        pchk=ok
      fi
    fi
  fi

  if [ "$chk" = "ok" ]&& [ "$pchk" = "ok" ]; then
    chk2=ok
  fi

fi

}

######################
### since date to date

if [ "$1" = "date" ] || [ "$1" = "rdate" ]; then
  if [ "$3" = "to" ]; then
    if [ -z $6 ]; then
      checkargs $2
      if [ "$chk1" = "ok" ] && [ "$chk2" = "ok" ]; then
        begin=`echo "Date: "$2`
      else
        echo "Invalid date/range"
        exit
      fi
      if [ -z $5 ]; then
        checkargs $4
        if [ "$chk1" = "ok" ] && [ "$chk2" = "ok" ]; then
          end=`echo "Date: "$4"9"`
        else
          echo "Invalid date/range"
          exit
        fi
      else
        checkargs $4 $5
        if [ "$chk1" = "ok" ] && [ "$chk2" = "ok" ]; then
          end=`echo "Date: "$4" "$5"9"`
        else
          echo "Invalid date/range"
          exit
        fi
      fi
    else
      echo "Too many arguments"
      exit
    fi
  else
    if [ "$4" = "to" ]; then
      if [ -z $7 ]; then
        checkargs $2 $3
        if [ "$chk1" = "ok" ] && [ "$chk2" = "ok" ]; then
          begin=`echo "Date: "$2" "$3`
        else
          echo "Invalid date/range"
          exit
        fi
        if [ -z $6 ]; then
          checkargs $5
          if [ "$chk1" = "ok" ] && [ "$chk2" = "ok" ]; then
            end=`echo "Date: "$5"9"`
          else
            echo "Invalid date/range"
            exit
          fi
        else
          checkargs $5 $6
          if [ "$chk1" = "ok" ] && [ "$chk2" = "ok" ]; then
            end=`echo "Date: "$5" "$6"9"`
          else
            echo "Invalid date/range"
            exit
          fi
        fi
      else
        echo "Too many arguments"
        exit
      fi
    else
    odate $@
    exit
    fi
  fi

  rpnum=`cat $cachedir/resc-pts.1 $cachedir/resc-pts 2>/dev/null | grep "^Date: " | wc -l`

  brange=$(echo $begin
  cat $cachedir/resc-pts.1 $cachedir/resc-pts 2>/dev/null | grep "^Date: ")

  erange=$(echo $end
  cat $cachedir/resc-pts.1 $cachedir/resc-pts 2>/dev/null | grep "^Date: ")

  chkb=$(echo $brange | sort | grep -nx "$begin" | head -n 1 | cut -d ":" -f 1)
  chke=$(echo $erange | sort | grep -nx "$end" | cut -d ":" -f 1)

  if [[ $chkb -le $rpnum ]] && [[ $chke -gt 1 ]] && [[ $chke -gt $chkb ]]; then
    firstrp=$(cat $cachedir/resc-pts.1 $cachedir/resc-pts 2>/dev/null | grep "^Rescue Point n. " | head -n 1 | cut -d " " -f 4)
    start=$(($firstrp + $chkb - 1 ))
    stop=$(($firstrp + $chke - 2 ))
  else
    echo "Invalid range"
    exit
  fi

  if [ "$1" = "date" ]; then
    $scriptname rp "$start"-"$stop"
  else
    $scriptname rrp "$start"-"$stop"
  fi
  exit
fi

#################################
### Querying firsts rescue points

if [ "$1" = "first" ] || [ "$1" = "rfirst" ]; then
  if [ -z "$3" ]; then
    if [[ "$2" =~ ^[0-9]+$ ]]; then
      lnr=`cat $cachedir/resc-pts.1 $cachedir/resc-pts 2>/dev/null | grep -ne "^Rescue Point n. " -e "^$separator" | head -n $(( 10#$2 * 2 )) | tail -n 1 | cut -d ":" -f "1"`
    else
      if [ -z "$2" ]; then
        lnr=`cat $cachedir/resc-pts.1 $cachedir/resc-pts 2>/dev/null | grep -ne "^Rescue Point n. " -e "^$separator" | head -n 2 | tail -n 1 | cut -d ":" -f "1"`
      else
        echo "Invalid argument"
      fi
    fi
    if [ -n "$lnr" ]; then
      if [ "$1" = "first" ]; then
        tput clear
        cat $cachedir/resc-pts.1 $cachedir/resc-pts 2>/dev/null | head -n $lnr | less
      else
        cat $cachedir/resc-pts.1 $cachedir/resc-pts 2>/dev/null | head -n $lnr | grep -ve "^Rescue Point n. " -e "^Date: " -e "^Package Manager: " -e "^No packages involved: " -e "^Description: " -e "^$separator" -e "^$"
      fi
    fi
  else
  echo "Too many arguments"
  fi
  exit
fi

##################################
### Querying latests rescue points

if [ "$1" = "latest" ] || [ "$1" = "rlatest" ]; then
  if [ -z "$3" ]; then
    if [[ "$2" =~ ^[0-9]+$ ]]; then
      lnr=`cat $cachedir/resc-pts.1 $cachedir/resc-pts 2>/dev/null | grep -n "^Rescue Point n. " | tail -n $2 | head -n 1 | cut -d ":" -f "1"`
    else
      if [ -z "$2" ]; then
        lnr=`cat $cachedir/resc-pts.1 $cachedir/resc-pts 2>/dev/null | grep -n "^Rescue Point n. " | tail -n 1 | cut -d ":" -f "1"`
      else
        echo "Invalid argument"
      fi
    fi
    if [ -n "$lnr" ]; then
      if [ "$1" = "latest" ]; then
        tput clear
        cat $cachedir/resc-pts.1 $cachedir/resc-pts 2>/dev/null | tail -n +$lnr | less
      else
        cat $cachedir/resc-pts.1 $cachedir/resc-pts 2>/dev/null | tail -n +$lnr | grep -ve "^Rescue Point n. " -e "^Date: " -e "^Package Manager: " -e "^No packages involved: " -e "^Description: " -e "^$separator" -e "^$"
      fi
    fi
  else
  echo "Too many arguments"
  fi
  exit
fi

###########################################################
### Querying through "cat", "less", "tail", "head" commands

if [ "$1" = "less" ]; then
  tput clear
  cat $cachedir/resc-pts.1 $cachedir/resc-pts 2>/dev/null | $*
  exit
fi

if [ "$1" = "cat" ]; then
  tput clear
  $* $cachedir/resc-pts.1 $cachedir/resc-pts 2>/dev/null
  exit
fi

if [ "$1" = "tail" ]; then
  tput clear
  cat $cachedir/resc-pts.1 $cachedir/resc-pts 2>/dev/null | $*
  exit
fi

if [ "$1" = "head" ]; then
  tput clear
  cat $cachedir/resc-pts.1 $cachedir/resc-pts 2>/dev/null | $*
  exit
fi

IFS=$OLD_IFS

case $1 in
  h)
    beghelp=$((`grep -n "\*\*\* BEGIN HELP \*\*\*" $installdir/$scriptname | cut -d ":" -f 1` + 2))
    endhelp=$((`grep -n "\*\*\* END HELP \*\*\*" $installdir/$scriptname | cut -d ":" -f 1` - 1))
    cat $installdir/$scriptname | head -n $endhelp | tail -n +$beghelp | cut -c 3- | less
    exit
  ;;
  help)
    beghelp=$((`cat $0 | grep -n "\*\*\* BEGIN EXTENDED HELP \*\*\*" | cut -d ":" -f 1` + 2))
    endhelp=$((`grep -n "\*\*\* END HELP \*\*\*" $0 | cut -d ":" -f 1` - 1))
    cat $0 | head -n $endhelp | tail -n +$beghelp | grep -v "\*\*\* BEGIN HELP \*\*\*" | cut -c 3- | less
    exit
  ;;
esac

#### ======================================= ####
####   END - "QUERY" section.                ####
####   To print "rescue-pts" file content.   ####
#### ####################################### ####

### Check if script is already running

if mkdir $tmpdir/lock 2>/dev/null; then
  echo "Locking succeeded"
else
  echo "Lock failed - Program could be already running - Exit"
  exit
fi

### Check if any other package manager has been executed since
### last time this script was run and if system has therefore
### been amended without tracing changes

statusdiff=`diff $dpkgdir/status $cachedir/status 2>/dev/null`

if [ -n "$statusdiff" ]; then
  echo "Detected operations previously performed but not tracked by aptic/debic:"
  echo "-another package manager could have been used in the meantime"
  echo " since last time aptic/debic have been executed"
  echo "-tracking about some changes to the system may be got lost"
  echo "...attempting to recover lost changes"
  echo
  action="no"
  program="unknown"
  mv $cachedir/status $tmpdir/status-old
  mv $cachedir/extended_states $tmpdir/extended_states-old
fi

### Check size of "resc-pts" file and if it exceeds "$rowsize" lines
### stores it in a gzipped file

if [ $(cat $cachedir/resc-pts 2>/dev/null | wc -l) -gt $rowsize ]; then
  find $cachedir/resc-pts* -printf %f\\n | while read filename; do
    filenr=`echo $filename | grep "[0-9]" | cut -d "." -f 2`
    if [[ $filenr -gt 1 ]]; then
      mv $cachedir/$filename $tmpdir/resc-pts.$(($filenr + 1)).gz
    fi
  done
  mv $tmpdir/resc-pts* $cachedir 2>/dev/null
  gzip $cachedir/resc-pts.1 2>/dev/null && mv $cachedir/resc-pts.1.gz $cachedir/resc-pts.2.gz 2>/dev/null
  mv $cachedir/resc-pts $cachedir/resc-pts.1 2>/dev/null
fi

###########################################################
### *******************  B E G I N  ******************* ###
###########################################################

### Check if package manager have to be executed or not

if [ "$action" != "no" ]; then

  ### Generate "status-old" file in temporary directory

  cp -f $dpkgdir/status $tmpdir/status-old
  cp -f $aptdir/extended_states $tmpdir/extended_states-old

  ### Check what package manager to run

  OLD_IFS=$IFS; IFS=""

    case `basename $0` in
      $scriptname)
        program="dpkg"
        dpkg $*
      ;;
      $aptgetlink)
        program="apt-get"
        apt-get $*
      ;;
      $tasksellink)
        program="tasksel"
        tasksel $*
      ;;
    esac

  IFS=$OLD_IFS

fi

### Generate "status" file in cache directory

cp -f $dpkgdir/status $cachedir
cp -f $aptdir/extended_states $cachedir

### Extract relevant infos from status and status-old
### files

cat $tmpdir/status-old | grep -e "^Package: " -e "^Status: " -e "^Version: " > $tmpdir/strstatus-old
cat $cachedir/status | grep -e "^Package: " -e "^Status: " -e "^Version: " > $tmpdir/strstatus

### Check differences between "status-old" file and "status" file

diff $tmpdir/strstatus-old $tmpdir/strstatus | grep -ve "<" -e ">" -e "---" | grep "a" | cut -d "a" -f 2 > $tmpdir/curdiffs
diff $tmpdir/strstatus-old $tmpdir/strstatus | grep -ve "<" -e ">" -e "---" | grep "c" | cut -d "c" -f 2 >> $tmpdir/curdiffs
diff $tmpdir/strstatus-old $tmpdir/strstatus | grep -ve "<" -e ">" -e "---" | grep "c" | cut -d "c" -f 1 > $tmpdir/prediffs
diff $tmpdir/strstatus-old $tmpdir/strstatus | grep -ve "<" -e ">" -e "---" | grep "d" | cut -d "d" -f 1 >> $tmpdir/prediffs

### Discover packages involved in operations

> $tmpdir/packages
cat $tmpdir/curdiffs | while read lnr; do
  start=`echo $lnr | cut -d "," -f 1`
  end=`echo $lnr | cut -d "," -f 2`
  cat $tmpdir/strstatus | head -n $start | grep -e "^Package: " | tail -n 1 >> $tmpdir/packages
  cat $tmpdir/strstatus | head -n $end | tail -n +$start | grep -e "^Package: " >> $tmpdir/packages
done
cat $tmpdir/prediffs | while read lnr; do
  start=`echo $lnr | cut -d "," -f 1`
  end=`echo $lnr | cut -d "," -f 2`
  cat $tmpdir/strstatus-old | head -n $start | grep -e "^Package: " | tail -n 1 >> $tmpdir/packages
  cat $tmpdir/strstatus-old | head -n $end | tail -n +$start | grep -e "^Package: " >> $tmpdir/packages
done

### Generate files containing previous and current version infos about
### packages involved in operations

> $tmpdir/curver
> $tmpdir/prever
cat $tmpdir/packages | sort -u | while read pckg; do
  cat $tmpdir/strstatus | tail -n +`cat $tmpdir/strstatus | grep -nxe "$pckg" | cut -d ":" -f 1` 2>/dev/null | grep -e "^Package: " -e "^Status: " -e "^Version: " | head -n 3 >> $tmpdir/curver
  cat $tmpdir/strstatus-old | tail -n +`cat $tmpdir/strstatus-old | grep -nxe "$pckg" | cut -d ":" -f 1` 2>/dev/null | grep -e "^Package: " -e "^Status: " -e "^Version: " | head -n 3 >> $tmpdir/prever
done

### Compare previous version and current version infos about packages
### involved in any sort of operation (upgrade, install or remove)
### writing performed actions in a file

> $tmpdir/updated
cat $tmpdir/packages | sort -u | while read pckg; do
  packagename=`echo $pckg | cut -d " " -f 2`
  ipv=`cat $tmpdir/prever | grep -nx "$pckg" | cut -d ":" -f 1`
  if [ -n "$ipv" ]; then
    verln=`cat $tmpdir/prever | tail -n +$ipv | head -n 2 | tail -n 1 | cut -d ":" -f 1`
    if [ "$verln" = "Status" ]; then
      prestat=`cat $tmpdir/prever | tail -n +$ipv | head -n 2 | tail -n 1 | cut -d " " -f 2-`
    else
      prestat="unknown"
    fi
    verln=`cat $tmpdir/prever | tail -n +$ipv | head -n 3 | tail -n 1 | cut -d ":" -f 1`
    if [ "$verln" = "Version" ]; then
      prever=`cat $tmpdir/prever | tail -n +$ipv | head -n 3 | tail -n 1 | cut -d " " -f 2`
    else
      prever="unknown"
    fi
  else
    avstat=`apt-cache dumpavail | grep -x "$pckg"`
    if [ -n "$avstat" ]; then
      prestat="unknown ok not-installed"
    else
      prestat="unknown unknown not-installed"
    fi
    prever="unknown"
  fi
  icv=`cat $tmpdir/curver | grep -nx "$pckg" | cut -d ":" -f 1`
  if [ -n "$icv" ]; then
    verln=`cat $tmpdir/curver | tail -n +$icv | head -n 2 | tail -n 1 | cut -d ":" -f 1`
    if [ "$verln" = "Status" ]; then
      curstat=`cat $tmpdir/curver | tail -n +$icv | head -n 2 | tail -n 1 | cut -d " " -f 2-`
    else
      curstat="unknown"
    fi
    verln=`cat $tmpdir/curver | tail -n +$icv | head -n 3 | tail -n 1 | cut -d ":" -f 1`
    if [ "$verln" = "Version" ]; then
      curver=`cat $tmpdir/curver | tail -n +$icv | head -n 3 | tail -n 1 | cut -d " " -f 2`
    else
      curver="unknown"
    fi
  else
    avstat=`apt-cache dumpavail | grep -x "$pckg"`
    if [ -n "$avstat" ]; then
      curstat="unknown ok not-installed"
    else
      curstat="unknown unknown not-installed"
    fi
    curver="unknown"
  fi
  if [ "$curver" != "$prever" ] || [ "$curstat" != "$prestat" ]; then
    extst=`cat $cachedir/extended_states | grep -xA 2 "^$pckg" | grep "^Auto-Installed: " | cut -d " " -f 2`
    if [ "$extst" = "1" ]; then
      extflag=A  # auto-installed
    else
      extst=`cat $tmpdir/extended_states-old | grep -xA 2 "^$pckg" | grep "^Auto-Installed: " | cut -d " " -f 2`
      if [ "$extst" = "1" ]; then
        extflag=A  # auto-installed
      else
        extflag=H  # hand-installed
      fi
    fi
    echo $packagename" "$extflag" ["$prever"] "$prestat" >> ("$curver") "$curstat >> $tmpdir/updated
  fi
done

### Copy detected changes in "rescue points" file creating a
### specific rescue point for each apt-get/dpkg session

if [ ! -e $cachedir/resc-pts ]; then
  > $cachedir/resc-pts
fi

rn=$((`cat $cachedir/resc-pts.1 $cachedir/resc-pts 2>/dev/null | grep "Rescue Point n. " | tail -n 1 | cut -c 17-` + 1 ))

date=`date +%F" "%T`
invpkgs=`cat $tmpdir/updated | wc -l`

if [ $invpkgs -gt 0 ]; then

  if [ "$description" = "enabled" ]; then
    tput clear
    if [ "$action" = "no" ]; then
      whiptail --title Information --msgbox "Attempt to recover lost changes completed succesfully. A list of involved packages has been generated.\n\n
Press (ok) button to start viewing this list, then:\n
- (pg-down) or (down-arrow) - to scroll-down\n
- (pg-up) or (up-arrow) - to scroll-up\n
- (q) - to exit" 18 70
      tput clear
      less $tmpdir/updated
      whiptail --title "Enter a description" --inputbox "Please enter a description that summarizes detected changes or leave blank if preferred then press "'"'"Enter"'"'" when done:" 10 50 2> $tmpdir/description
      tput clear
    else
      whiptail --title Information --inputbox "Required actions were completed successfully.\n
Please, enter a description about performed operations or leave blank if preferred then press "'"'"Enter"'"'" when done:" 12 60 2> $tmpdir/description
      tput clear
    fi
  fi

  echo "Rescue Point n. "$rn >> $cachedir/resc-pts
  echo "Date: "$date >> $cachedir/resc-pts
  echo "Package Manager: "$program >> $cachedir/resc-pts
  echo "No packages involved: "$invpkgs >> $cachedir/resc-pts
  if [ `cat $tmpdir/description | wc -w` -gt 0 ]; then
    echo "Description: "`cat $tmpdir/description` >> $cachedir/resc-pts
  fi
  echo >> $cachedir/resc-pts
  cat $tmpdir/updated >> $cachedir/resc-pts
  echo >> $cachedir/resc-pts
  echo $separator >> $cachedir/resc-pts
  echo >> $cachedir/resc-pts
fi

### Clear temporary directory

rm -fr $tmpdir/*

### Re-execute script if any other package manager has been
### executed since last time script was run

if [ "$action" = "no" ]; then
  IFS=""; $0 $*
fi

############################################################
### *********************  E N D  ********************** ###
############################################################
Meteo
Fiera

Tophost
 

BlogItalia.it - La directory italiana dei blog
blog search directory
Aggregatore
blogarama - the blog directory
Regional blogs & blog posts
technorati
SEO Directory - Indicizza GRATIS il tuo sito Web nei motori di 
ricerca
Tophost

Switch to our mobile site