Post

Visualizzazione dei post da ottobre, 2014

DNS Hijacking Parte 1: Cosa è e come riconoscerlo

Finalmente siete riusciti ad avere un collegamento ad Internet decente da una compagnia telefonica/(W)ISP locale, ma quando tentate di entrare in un sito vi si aprono 3 possibilità Pagina bianca: il sito non viene caricato Un errore del vostro browser che non riesce a caricare la pagina La pagina del vostro provider che vi indica che questo sito è bloccato per X motivi. Questo significa che, molto probabilmente, il vostro ISP fa DNS Hijacking. Prima di tutto: che cosa è il DNS? DNS sta per Domain Name Server, e fa parte della struttura base di Internet. Senza di esso sarebbe necessario scrivere l' IP del server e non un nome facile da ricordarsi, quindi, invece di google.com, dovreste digitare http://70.50.150.23, oppure usare l'email potrebbe essere un problema ( wikipedia: DNS per ulteriori informazioni). Quindi tutto il traffico per la porta 53 UDP, viene intercettato dal vs. provider e poi, eventualmente, re-indirizzato verso il nulla, oppure verso una pagina di

PostgreSQL: Cosa sono le clausole OVER e PARTITION

Immagine
Piccolo esercizio di SQL: un vostro cliente vi chiede di estrarre i prezzi più alti degli articoli, partendo da dei documenti. Ora avete due possibilità: Utilizzare il classico GROUP BY, con le funzioni di aggregazione, impazzendo tra MAX, GROUP BY, subquery, CROSS JOIN nella stessa tabella Utilizzare le funzioni di partizionamento fornite da SQL Server, PostgreSQL, Oracle e qualche altro RDBMS (no, quella chiavica di MySQL non le supporta essendo non compatibile con lo standard SQL2003) Ecco qui un esempio di cosa stiamo parlando, sotto PostgreSQL 9.3.5: ed ecco una query veloce, veloce, che vi ha risolto il problema in poco tempo: SELECT * FROM   (SELECT *,    row_number() OVER (PARTITION BY codicearticolo ORDER BY  codicearticolo ASC,valorearticolo DESC) AS pos    FROM articoli   ) AS max_prezzi con relativo risultato: Spiegazioni: La query in PostgreSQL ha: * Creato una colonna pos ( dense_rank() ), contenente l'ordinamento delle tuple, la quale viene reset