Uncategorized

All’improvviso, un palinsesto

Sulla TV e sul pessimo trattamento riservato a molte trasmissioni ho già scritto molto, ma non potevo stare zitto in questo frangente.
Per chi si fosse perso la faccenda, tutto inizia il 28 settembre, con un articolo di Aldo Grasso sul Corriere.
L’argomento sono i palinsesti televisivi, fatti spesso a tavolino senza pensare alle effettive necessità trasmissive e quindi, per una varietà di ragioni, molto spesso disattesi.
Il signor Grasso scrive, come sempre, cose intelligenti e condivisibili, ma non si è ‘svegliato’ un po’ tardi?.
Dopo il suo articolo, è stato tutto uno stracciarsi di vesti da parte dei direttori delle reti RAI e Mediaset, anche loro si sono ridestati da un torpore decennale?
Dai, cerchiamo di non essere ridicoli!

Il fatto che i palinsesti siano fatti basandosi su durate e assunzioni del tutto teoriche è una realtà da molti anni!
Da quando in qua è una novità che i programmi vengono fatti saltare, oppure ritardano, oppure sono spostati improvvisamente senza avvisare nessuno, soprattutto i telespettatori affezionati?
Mi sembra che, come spesso accade, stiamo facendo della demagogia, preoccupandoci di un problema quando ormai è una pratica comune e non volendo fare niente di utile per risolverlo, per poi lasciarlo cadere nel dimenticatoio in pochi giorni, dopo che ha riempito abbastanza carta del giornale.

Qui sembra che ci sia una ribellione perchè i programmi preserali – la fascia che dalla nascita di Striscia in poi ha acquisito un valore commerciale enorme sia nel ruolo di ‘traino’ che di ‘rimorchio’ – si sono progressivamente allungati facendo iniziare la prima serata dopo le 21:00.
Inoltre ci si ‘ribella’ (sic) perchè House M.D. è stato spostato dalla domenica al mercoledì, sempre alla stessa ora.

Ma dico io, stiamo dando i numeri?
Vogliamo ricordare qualche episodio veramente scandaloso di cui nessuno ha voluto scrivere nemmeno una riga?
Certo.

  • Fantascienza
    Qualcuno di voi si ricorda delle lotte per vedere in Italia un telefilm di Fantascienza? Penso a me e agli amici Trekker che per tutta la seconda metà degli anni novanta e all’inizio del Terzo Millennio dovevamo fare un opera certosina di ricerca, analisi e programmazione per riuscire a registrare Star Trek che veniva trasmesso alle 3 di notte.
    Già questa era un offesa alla serie TV più famosa del Mondo, aggiungiamo poi che la programmazione era ‘ballerina’ non entro pochi minuti, ma decine o ore intere!
    All’epoca a noi nessuno pensava?
    E agli amici appassionati di Babylon 5, la RAI ha dato un servizio migliore?
  • Serie TV di qualità
    Mi riferisco a quelle serie non proprio alla portata di tutti, che non sono in grado di portare una grande audience, ma che alzano il livello medio delle trasmissioni e che sono seguite da un gruppo di appassionati molto fedele.
    Un esempio, The West Wing: acclamata dalla critica, un po’ apologetica, ma senza dubbio una delle migliori serie prodotte dalla TV americana.
    Bene, alzi la mano chi ha seguito la serie su Rete4 con costanza.
    Chi l’ha alzata ha mentito, perchè sarebbe stato impossibile!
    Cambiamenti di giorno, di orario interruzioni e riprese delle trasmissioni improvvise e senza avviso

Poi, all’improvviso, arriva la tv satellitare, arriva Jimmy che trasmette Star Trek per anni, tutto, senza interruzioni, senza saltare niente, con regolarità e con molte repliche.
Poi arriva FOX, ci fa vedere The West Wing e molti altri telefilm di qualità, poi si inventa la serata SciFOX e fa felici tutti noi appassionati di fantascienza.
Tutto questo con precisione al minuto, con programmazione anticipata di settimane in TV e sulle riviste.
E improvvisamente la TV generalista scopre di essere in svantaggio.

Ma che strano, vero?
Dopo averci abituato anni a sorbirci programmazioni approssimative che persino un bambino avrebbe potuto fare meglio, si stupiscono che l’organizzazione e la puntualità vengano apprezzate e li surclassino.
E non venite a raccontarci scuse come ‘pubblicità’ o ‘talk show’. La pubblicità è venduta con precisione certosina (è quella che porta soldi!) e con contratti dettagliati al massimo, sia per durata che per modalità di trasmissione, volete dirmi che non sono in grado di programmarla?
Non scherziamo, si tratta solo di fare una moltiplicazione!
I talk show vanno per le lunghe?
Non credo che sia colpa di una legge della Fisica, basta stringere i tempi quando manca mezz’ora alla chiusura della trasmissione, non mi sembra molto difficile.

La verità è che la programmazione in TV è sempre stata trattata con approssimazione, poi alcuni esempi estremi come quelli che ho citato sono stati trattati ancora peggio, ma questa non è una necessità, o una conseguenza inevitabile di qualche cosa, come la Tv satellitare ha dimostrato.
Fare palinsesti precisi era possibile 10 anni fa come oggi: 10 anni fa non lo faceva nessuno, adesso qualcuno lo fa e gli altri si trovano spiazzati
Va bene, non è morto nessuno, adesso che RAI e Mediaset ammettano l’errore (in pratica l’hanno atto, dandosi la colpa vicenda, naturalmente), ma soprattutto inizino a lavorare per migliorare la situazione!

PS: Al prossimo giornalista cui viene in mente di parlare di questo argomento, prego di spendere una parola per tutti noi che i palinsesti li abbiamo subiti per anni e anni inseguendo i nostri programmi preferiti, senza che nessuno scrivesse una parola o muovesse un dito per i nostri diritti. Grazie.

Standard
Uncategorized

Query, Parametri e SQL Injection

Credo che ogni programmatore nella sua carriera si sia trovato a dover affrontare il problema di come interrogare un database dal proprio programma.
Negli anni, gli strumenti di sviluppo di Microsoft hanno sempre implementato una qualche meccanismo per l’accesso ai dati, il futuro in questo campo sarà probabilmente il LINQ, ma per il momento lo strumento principale per il framework è ADO.net.
In questa entry affronteremo un argomento poco conosciuto ma molto importante per quanto riguarda l’esecuzione delle query

Come tutti ben sapete, per eseguire una query a un database, dopo averne effettuato il collegamento e dopo aver creato un Command semplicemente si associa uno statement SQL e si esegue il comando.
Il metodo è piuttosto semplice, ha il grosso problema della mancanza di digitazione assistita, ma questo inconveniente verrà superato dal già citato LINQ e sarà argomento di molti discorsi futuri.


Al momento, il problema più importante è quello delle istruzioni parametriche; considerate il frammento di codice seguente:
 Cmd = dbConn.CreateCommand
 Cmd.CommandText = "SELECT * FROM articles WHERE ID=" & artID
 Reader = Cmd.ExecuteReader

In una ipotetica tabella contenente una serie di articoli, questo comando recupera il record corrispondente all’articolo con l’identificativo contenuto nella variabile artID, questa variabile potrebbe essere un campo utente.
Questo codice sembra assolutamente innocuo, e probabilmente molti di noi lo hanno usato spesso, ma nasconde una insidia.

Siamo sicuri che artID contenga proprio un numero di ID?
Se questa variabile proviene da un campo utente, cosa succede su viene inserito qualcosa del tipo ;DROP TABLE articles?

Questa tecnica si chiama SQL Injection ed è spesso usata per una operazione di cracking: il primo punto e virgola chiude la query legittima, dopodichè la seconda parte dello statement forza il DB a cancellare tutta la tabella articles!

Ovviamente questo è il caso peggiore, in quanto presuppone nessun controllo sull’input e una gestione allegra delle autorizzazioni, in quanto la connessione del DB avrebbe dovuto essere aperta da un profilo utente con pochi permessi.

A parte queste avvertenza, c’e’ un’altra precauzione che si può prendere: utilizzare i parametri all’interno della query, in modo che un input malformato possa influire solo in una parte limitata della query.
Riscriviamo il codice di prima:

<p class="inlinecode">Dim parm As OleDb.OleDbParameter</p>
dbConn.Open()
 parm = New OleDb.OleDbParameter("@artID", artID)

Cmd = dbConn.CreateCommand
 Cmd.Parameters.Add(parm)
 Cmd.CommandText = "SELECT * FROM articles WHERE ID=@artID"
 Reader = Cmd.ExecuteReader

Il codice è molto semplice: dopo aver dichiarato la variabile parametro, la inizializziamo e la identifichiamo da un nome che inizia con @, nella stessa dichiarazione le associamo anche un valore.
Aggiungiamo, poi, la variabile parametro al comando e nello statement SQL inseriamo il nome del parametro invece di concatenare il nome della variabile.
In questo modo, il testo preso dalla variabile artID non può fare altro che influenzare il valore del campo ID nella query.

Questo è il modo più diretto per creare e usare un oggetto Parameter, ma vi invito a leggere tutta la documentazione sul MSDN per conoscere tutte le caratteristiche di questa classe.
Ricordo infine che l’oggetto parameter non esiste solo per OleDb, ma anche per tutti gli altri provider. Il funzionameto è in pratica identico per tutti, ma leggete sempre l’apposita documentazione per verificare eventuali differenze tra un provider e l’altro.

Standard
Uncategorized

Windows Server 2003, puntuale

Per alcuni è una mania, e per altri è una mentalità, ma è innegabile che in mondo sempre più tecnologico come il nostro la puntualità precisa è semplicemente una necessità.
Una necessità così importante che nel mondo informatico è stata creata una apposita infrastruttura basata su server NTP e SNTP per gestire la sincronizzazione degli orologi a livello mondiale.
Ovviamente l’avvento di internet ha liberalizzato anche questa tecnologia che non richiede più orologi atomici o altre strumentazioni miliardarie, ma consente a ciascuno di noi di avere orologi sincronizzati con precisione estrema in maniera molto semplice.

Come tutti sapete, le varie versioni di Windows permettono di impostare un server NTP per la sincronizzazione dell’ora: uno tra i più usati è quello del Network Time Protocol project pool.ntp.org, ma per restare nel nostro Paese vi segnalo anche quello dell’Istituto Elettrotecnico Nazionale ntp.ien.it.
Se possedete più computer, oppure se siete amministratori di una rete, potrebbe sembrare molto semplice impostare un server su ogni macchina in modo che ognuna indipendentemente vada su internet e sincronizzi la propria ora.
Ma questo è il modo più logico di procedere?
Non sempre: per esempio potreste pensare che è inutile lasciare che diverse macchine facciano continue richieste a un server su internet per la stessa informazione. Non sarebbe più logico chiedere un aggiornamento solo e poi ridistribuirlo?
Certo, infatti Windows Server 2003 permette di attivare un NTP server interno che agisca daproxy all’interno della vostra organizzazione e che ridistribuisca l’ora esatta a tutti i clients.

Forse qualcuno di voi ha già provato a impostare una cosa del genere, ma si è scontrato con un problema.
La soluzione più semplice sembrerebbe quella di agire nelle Group Policy e di modificare i valori in Computer Configuration\Administrative Template\System\Windows Time Service\Time Providers, purtroppo questa è anche la soluzione sbagliata.

Infatti non è così semplice attivare un server NTP su una macchina W2k3, ma un articolo della KB della Microsoft viene in nostro aiuto.
Si tratta della KB816042 In questo documento è spiegata la configurazione passo passo del server NTP e la sua implementazione sul server, sui clients oltre a considerazioni sulla sua importanza in una struttura di Active Directory.
Vi rimando all’articolo per informazioni dettagliate sull’argomento e vi segnalo anche la bibliografia come fonte di altre informazioni interessanti su NTP e Windows

Standard