Disclaimer per i contenuti del Blog


DISCLAIMER:Questo blog non rappresenta una testata giornalistica in quanto viene aggiornato senza alcuna periodicità . Non può pertanto considerarsi un prodotto editoriale ai sensi della legge n° 62 del 7.03.2001.
L'autore non è responsabile per quanto pubblicato dai lettori nei commenti ad ogni post. Verranno cancellati i commenti ritenuti offensivi o lesivi dell’immagine o dell’onorabilità di terzi, di genere spam, razzisti o che contengano dati personali non conformi al rispetto delle norme sulla Privacy. Alcuni testi o immagini inserite in questo blog sono tratte da internet e, pertanto, considerate di pubblico dominio; qualora la loro pubblicazione violasse eventuali diritti d'autore, vogliate comunicarlo via email. Saranno immediatamente rimossi. L'autore del blog non è responsabile dei siti collegati tramite link, del loro contenuto che può essere soggetto a variazioni nel tempo ne degli eventuali danni derivanti dall'utilizzo proprio od improprio delle informazioni presenti nei post.

venerdì 28 marzo 2014

Per chi continuerà ad usare Windows XP dopo l'8 aprile 2014

Come ormai tutti sapranno, a partire dall'8 di aprile 2014 la Microsoft interromperà il supporto per l'ormai datato Windows XP interrompendo di fatto la ricerca/correzione di eventuali vulnerabilità ancora presenti che potrebbero essere utilizzate dai creatori di malware per causare danni più o meno gravi ai nostri computer.

E' notizia di qualche giorno fa la scoperta di una vulnerabilità di Microsoft Word che permetterebbe l'esecuzione di codice in modalità remota in certe condizioni operative e questa vulnerabilità affliggerebbe anche il buon vecchio Word 2003. Questo per dire che alcune vulnerabilità possono essere scoperte anche a distanza di diversi anni.


La scelta di mantenere o meno Windows XP la lascio a voi, ma per coloro che sceglieranno di rimanere con il mitico SO di Microsoft ho pensato di buttare giù un decalogo di norme da seguire per non avere problemi o, almeno, per essere in grado di correre ai ripari qualora si dovessero verificare.

Tenete a mente che il passaggio ad un sistema operativo superiore (Windows 7 o 8) potrebbe comportare la necessità di acquistare anche nuove licenze di software, es. Office, qualora le versioni correntemente utilizzate non fossero compatibili con il nuovo sistema operativo scelto.

Questo decalogo prende spunta dalla fine del supporto di Windows XP ma andrebbe comunque seguito da tutti gli utilizzatori di computer, indipendentemente dal SO utilizzato.

1 - Internet Explorer

Sarebbe ormai ora di smettere di usare questo browser di Microsoft (od una delle sue versioni precedenti) sia per motivi di sicurezza, sia per poter godere delle caratteristiche del Web 2.0 non completamente supportate. Alternative possibili sono Google Chrome, Firefox, Safari, Opera, tanto per citare quelli più famosi.

2 - Aggiornare con frequenza i software di terze parti

Qui mi riferisco in particolare a quei software di supporto (i più famosi e critici sono Java Virtual Machine e Adobe Flash Player) e/o plugin che possono essere utilizzati per scavalcare le protezioni di Windows permettendo ai malintenzionati di operare quasi indisturbati.

3 - Evitare come la peste le Toolbar

Oltre a ridurre lo spazio disponibile nella pagina di navigazione (ho avuto dei clienti con così tante toolbar installate da avere la metà dello schermo del browser occupata...), possono essere causa di pubblicità non richiesta e, in alcuni casi, mezzo per l'installazione di software più o meno dannosi che si spacciano per utility mentre nel migliore dei casi sono solo delle 'inutility'.

4 - Evitare di installare qualsiasi programma ci venga proposto

Prima di installare un software, specialmente se gratuito ed offerto durante la navigazione, verificare i seguenti punti:
  • mi serve?
  • proviene da una fonte attendibile?
  • se ne parla su internet e che reputazione ha?
Fare anche attenzione agli eventuali software aggiuntivi che ci vengono proposti durante l'installazione di programmi scaricati da internet, quasi sempre non servono e, se vengono proposti, ci sarà pure un motivo, no? Nessuno regala nulla...

5 - Utilizzare un buon software di antivirus  e mantenerlo aggiornato

L'antivirus può in molti casi evitare che virus, spyware e software non desiderati  (PUP, Potentially Unwanted Program) vengano installati sul nostro computer, magari anche a nostra insaputa. Esistono soluzioni gratuite abbastanza valide (quasi mai utilizzabili in ambiti lavorativi) ma conviene spesso affidarsi a soluzioni a pagamento facendo qualche ricerca e selezionandone uno non troppo avido di risorse.

6 - Backup dei dati.

Una copia completa dei dati, aggiornata frequentemente (la frequenza varia da caso a caso in relazione all'attività svolta) può essere l'ultima risorsa in casi di serio danneggiamento del sistema. Un sistema ancora più efficace può essere l'adozione di quei programmi (es. Acronis True Image) che permettono di salvare una copia speculare del nostro disco di sistema su un disco esterno permettendoci di ripristinare l'operatività del computer in una manciata di minuti.
L'ideale sarebbe l'esecuzione di una immagine del sistema in occasione dell'installazione di programmi ed un normale backup dei dati con frequenza settimanale. Esistono diversi software free per il backup dei dati, es. Uranium Backup.

7 - Evitare i software di File-Sharing

Oltre ad essere spesso e volentieri utilizzati per lo scambio di materiale protetto da copyright e quindi fuorilegge, possono essere utilizzati utilizzati come veicolo per la diffusione di malware (mai capitato a nessuno di scaricare un film e ritrovarsi invece tutt'altro???).

8 - Mantenere un profilo di navigazione 'safe'

Non tutti i siti internet sono affidabili e sicuri. Esistono lunghe listi di siti che sarebbe bene evitare. Spesso e volentieri questi siti offrono gratuitamente programmi commerciali e/o metodi per aggirare le protezioni utilizzate dai produttori di per evitare copie non autorizzate. Anche molti siti porno possono rappresentare un pericolo per la sicurezza del PC in quanto veicoli per l'installazione di malware (del resto chi denuncerebbe mai un sito porno od uno che propone dei crack???)

9 - Provvedere ad una periodica manutenzione del sistema

Mantenere il sistema pulito ed agile può servire ad evitare spiacevoli conseguenze, indipendentemente dal fatto che si utilizzi XP o qualsiasi altro sistema operativo.

10 -Incrociare le dita e sperare che non capiti nulla :)

Questo è l'augurio!!!!


mercoledì 26 marzo 2014

Simulare un popup con DIV in una pagina html


Realizzando pagine html può far comodo utilizzare dei popup per comunicare all'utente informazioni o per richiedere dati ulteriori. I normali popup a me non sono mai piaciuti, principalmente per diversi motivi:
  • possono nascondersi dietro alla pagina principale
  • possono non essere visualizzati se al browser è stato detto si evitarli
  • può essere complesso far interagire il codice del popup con l'html della pagina di partenza

E' pur vero che esistono decine di librerie Javascript che permettono di simulare i popup ma quella che propongo oggi è una soluzione, sebbene spartana, molto sintetica e semplice da implementare.

Ho utilizzato comunque jQuery per aumentare la leggibilità del codice ma questa dipendenza è facilmente evitabile modificando un paio di righe ed utilizzando JS puro.

Questa è la porzione HTML

<!DOCTYPE html>
<!--[if lt IE 9 ]> <html class="ie8-or-less"> <![endif]-->
<!--[if (gt IE 9)|!(IE)]><!--> <html> <!--<![endif]-->
 <head>
  <meta charset="UTF-8">
  <title>POPUP</title>
  <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
  <link rel="stylesheet" type="text/css" href="index.css">
 </head>
 <body>
  <div class="page-content">
  <h1>POPUP simulato con DIV</h1>
   Questo è il contenuto della pagina Web, 
   <a href = "javascript:void(0)" onclick = "$('#popup1, #overlay').css('display', 'block')">
    fai click qui per aprire il popup...
   </a>
  </div>

<!-- ***************** Porzione di HTML per la generazione del PopUp ***************** -->
  <!-- Overlay per l'oscuramento dello sfondo -->
  <div id="overlay" class="ovl">
  </div>

  <!-- E' possibile gestire più popup assegnando ad ognuno un diverso ID  -->
  <!-- ricordandosi di modificare i riferimenti nei due 'onclick', avendo -->
  <!-- cura di lasciare inalterato il riferimento all'ID 'overlay' e      -->
  <!-- modificando solamente il riferimento all'ID del popup desiderato   -->
  <div id="popup1" class="popup"> 
   <div class="title">
    <div class="title-row">
     <div class="title-description">
      Questo è il titolo della finestra...
     </div>
     <div class="title-close">
      <a href = "javascript:void(0)" onclick = "$('#popup1, #overlay').css('display', 'none')">
       <img src="close.png" border=0>
      </a>
     </div>
    </div>
   </div>
   Contenuto del popup
  </div>
<!-- ********************************************************************************** -->

 </body>
</html>

e questo il relativo CSS

 .ie8-or-less body{
 width: 100%;
 margin: 0px;   
}

.ie8-or-less .page-content {    
 width: 99%;
 margin: auto;
 padding: 5px;
}

.ovl{
 display: none;
 position: absolute;
 top: 0px;
 left: 0px;
 width: 100%;
 height: 100%;
 background-color: black;
 z-index: 1001;
 -moz-opacity: 0.7;
 opacity: .70;
 filter: alpha(opacity=70);
}

.popup {
 display: none;
 position: absolute; 
 top: 25%;
 left: 25%;
 width: 50%;
 height: 50%;
 padding: 4px 4px 4px 4px;
 border: 2px solid white;
 border-radius: 5px;
 -moz-border-radius: 5px;
 background-color: white;
 z-index: 1002;
 overflow: auto;
}

.title {
 display: table;
 background-color: blue;
 color: white;
 font-weight: bold;
 font-size: 150%;
 padding: 4px;
 margin: auto;
 width: 99%;
 border-radius: 5px;
 -moz-border-radius: 5px;
}

.title-row{
 display: table-row;
 width: 100%;
}

.ie8-or-less .title-description{
 display: block;
 float: left;
 width: auto;
}

.title-description{
 display: table-cell;
 float: left;
 width: auto;
}

.ie8-or-less .title-close{
 display: block;
 float: right;
 width: 16px;
}

.title-close{
 display: table-cell;
 width: 16px;
}

Come si può notare dalle prime righe di html, ho dovuto inserire un test del browser utilizzato per intercettare Internet Explorer 8 (bestia nera) in modo da poter adattare il css al suo comportamento non proprio standard. E' possibile vedere una demo funzionante o scaricare i files che compongono il progetto.

Il funzionamento del tutto è molto semplice, il primo <DIV> con id 'overlay' serve ad oscurare il contenuto della pagina web (nero con opacità al 70%) ed ha inizialmente impostato il parametro display a none; il secondo <DIV>, quello con id 'popup1' funge da contenitore del nostro popup, anche lui inizialmente ha il parametro display impostato a none. Facendo click sul link il parametro display dei due <DIV> viene impostato a block rendendoli visibili entrambi. Utilizzando uno z-index più alto mi assicuro che il <DIV> 'popup1' venga visualizzato al di sopra del resto.

Facendo click sull'immagine che simula il pulsante di chiusura riporto il valore del parametro display dei due <DIV> a none simulando la chiusura del popup.
Semplice ed efficace...

Lo script è stato testato con IE8 e con le ultime versioni di Chrome, Firefox, Safari per Windows/iOS ed Opera.

lunedì 24 marzo 2014

Remote Desktop Protocol per Raspberry PI

Sempre a proposito di Raspberry PI a volte può essere comodo utilizzare l'interfaccia grafica (io sono comunque un fautore della riga di comando) senza dover connettere il piccolino ad un monitor dedicato/televisore. Per poter far questo possiamo utilizzare il protocollo RDP (Remote Desktop Protocol).

Con

   sudo apt-get install xrdp 

possiamo installare il servizio che si occuperà della gestione del suddetto protocollo.

Una volta installato (non serve nessuna particolare configurazione), per accedere al PI potremo utilizzare il client di Windows "Remote Desktop Connection" presente sicuramente in tutte le versioni Pro di questo sistema operativo, almeno a partire da Windows XP (non ricordo se W2K aveva tale modulo built-in...).


Al termine dell'installazione eseguiamo il programma "Remote Desktop Connection" ed indichiamo l'IP del PI:



quindi premiamo "Connetti" per accedere alla prima schermata, quella di autenticazione:


inseriamo i soliti pi e raspberry...


ed ecco qui il nostro desktop!


Una tastiera Bluetooth per il Raspberry PI

Ho deciso di mettere in linea questa guida perché non sono riuscito a trovarne altre in italiano sull'argomento ed alcune in inglese non sembrano funzionare correttamente (almeno con il S.O. da me utilizzato) o lasciano a desiderare in quanto a chiarezza. 

Questo per dire che non mi sono inventato nulla di nuovo; ho semplicemente fatto delle ricerche su internet ed ho eseguito le operazioni trovate parallelamente alla stesura dell'articolo, così da verificare dal vivo la correttezza dei comandi.

Spero possa essere d'aiuto per altri...

Il modo migliore per utilizzare un Raspberry PI è collegarlo ad una tastiera Bluetooth. Io ho scelto un modello della iTek che dispone anche di un comodo Touchpad così da avere mouse e tastiera in un solo oggetto.

Come dongle BT ne ho acquistato uno piccolissimo della ADJ (AC240) che è stato riconosciuto immediatamente senza necessità di operazioni particolari.

Questa guida si basa sul S.O. Wheezy Raspbian, la versione è quella del 07/01/2014. Tutta l'installazione verrà eseguita in modalità console utilizzando Putty per connettersi al server SSH del PI. Ricordo che l'utente di default è pi e la sua password è raspberry. Ovviamente il PI dovrà essere connesso ad Internet...

Una volta connessi al PI via SSH ed eseguito il login, aggiorniamo i software installati alle ultime versioni:
   sudo apt-get update
quindi
   sudo apt-get upgrade

Inseriamo il dongle BT e verifichiamo che venga riconosciuto dal sistema:
   lsusb

se tutto è a posto dovremmo avere una risposta simile a questa (la riga evidenziata è quella relativa al dongle BT):



Passiamo ora all'installazione di tutto il software che il PI utilizzerà per gestire il BT:
   sudo apt-get install bluetooth bluez-utils blueman

Nel mio caso il sistema scaricherà 97 pacchetti (dipendenze incluse) per un totale di 34MB di download:


Rispondiamo S ed andiamo a prendere un caffè... Il download sarà abbastanza rapido, uno o due minuti, ma l'installazione richiederà un pochino di tempo in più.

Trascorsa una decina di minuti avremo di nuovo il controllo del nostro PI; a seguito dell'installazione di nuovi servizi ritengo opportuno riavviare il sistema:

   sudo reboot

Ricolleghiamoci al PI via SSH. Per verificare che il servizio bluetooth sia partito ed attivo utilizziamo il comando:

   /etc/init.d/bluetooth status


Ora che il servizio è partito possiamo interrogare BT per vedere quali periferiche siano raggiungibili. Il comando per effettuare questa operazione è

   hcitool scan 

bisogna ovviamente ricordarsi di mettere la tastiera in modalità accoppiamento altrimenti non vedremo nulla


il codice di 6 bytes è il MAC Address della nostra (anzi mia) tastiera; ovviamente sarà diverso per ognuno di voi. Passiamo ora al Pairing con il comando:

   sudo bluez-simple-agent hci0 DC:2C:26:A0:59:A2

avendo cura di sostituire l'indirizzo della mia tastiera con quello della vostra:


alla richiesta del PIN code digitare sulla tastiera della console SSH una sequenza numerica di almeno 4 caratteri seguita dal tasto INVIO ed immediatamente digitare la stessa sequenza sulla tastiera da accoppiare sempre seguita dal tasto INVIO. Se il pairing ha avuto successo dovreste vedere una schermata simile a quella riportata sopra.

L'ultima cosa che ci resta da fare è rendere permanente questo accoppiamento tra PI e tastiera. Il comando da utilizzare è:

   sudo bluez-test-device trusted DC:2C:26:A0:59:A2 yes

Se non abbiamo in risposta messaggi di errore significa che la procedura è andata a buon fine. D'ora in poi il PI connetterà automaticamente la tastiera BT quando la troverà nel suo raggio di azione (per esperienza la connessione può impiegare qualche secondo ed a volte i primi tasti non vengono 'sentiti')

Molto probabilmente il layout della tastiera italiana non sarà correttamente gestito dal PI, per risolvere questo problema:

   sudo nano /etc/default/keyboard

sostituire XKBLAYOUT=”gb” con XKBLAYOUT=”it”, premere CTRL+X, rispondere S per salvare quindi INVIO per confermare il nome del file, eseguire il reboot e tutto dovrebbe essere a posto.


giovedì 20 marzo 2014

Tabelle MySQL decodifica comuni, province e regioni italiane



ATTENZIONE - IL DATABASE NON È AGGIORNATO
Se un giorno dovessi riuscire ad allinearlo lascerò una nota...

Capita spesso, quando ci si occupa di applicazioni gestionali, di dover decodificare comuni, province e regioni o, ad esempio, estrapolare tutti i comuni di una certa provincia, desumere dal codice fiscale la descrizione del comune di nascita, realizzare un pop-up che permette di selezionare il comune desiderato senza scrivere una <SELECT></SELECT> composta da più di 8000 elementi (tanti sono i comuni italiani) ma che, partendo dalla regione, ci faccia selezionare in cascata provincia e comune estrapolando ad ogni passaggio solo le righe di tabella necessarie (jQuery e Ajax aiutano non poco nella realizzazione di simili pop-up).

 Per quanto mi riguarda ho penato non poco a reperire suddette tabelle ed ho quindi deciso di renderle disponibili.

Gli indici definiti sono quelli che ho trovato più comodi per la mia applicazione, lascio a voi il compito di definirne di nuovi così da realizzare una struttura che si adatta al meglio alla vostra applicazione; faccio notare che per mia comodità ho creato una regione ed una provincia per l'estero (sigla provincia EE, codice regione 99) dal momento che nella tabella comuni sono presenti anche gli stati esteri (codici Znnn), come previsto dalla struttura del nostro codice fiscale.

Questa è la struttura delle tabelle:

-- phpMyAdmin SQL Dump
-- version 3.5.4
-- http://www.phpmyadmin.net
--
-- Host: localhost
-- Generato il: Mar 20, 2014 alle 12:00
-- Versione del server: 5.0.77
-- Versione PHP: 5.2.9

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;

--
-- Database: `ComuniProvinceRegioni`
--

-- --------------------------------------------------------

--
-- Struttura della tabella `tbComuni`
--

CREATE TABLE IF NOT EXISTS `tbComuni` (
  `nome_comune` text character set utf8 collate utf8_unicode_ci,
  `siglaprovincia_comune` varchar(2) NOT NULL,
  `codice_catastale` varchar(4) character set utf8 collate utf8_unicode_ci NOT NULL,
  `codice_istat` int(7) NOT NULL,
  UNIQUE KEY `codice_catastale` (`codice_catastale`),
  KEY `fkey_comuni` (`siglaprovincia_comune`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Tabella comuni d''Italia';

-- --------------------------------------------------------

--
-- Struttura della tabella `tbProvince`
--

CREATE TABLE IF NOT EXISTS `tbProvince` (
  `sigla_provincia` varchar(2) NOT NULL,
  `nome_provincia` text,
  `capoluogo_provincia` text,
  `codiceistatregione_provincia` varchar(2) default NULL,
  `codiceistat_provincia` text,
  PRIMARY KEY  (`sigla_provincia`),
  KEY `fkey_province` (`codiceistatregione_provincia`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Tabella province d''Italia';

-- --------------------------------------------------------

--
-- Struttura della tabella `tbRegioni`
--

CREATE TABLE IF NOT EXISTS `tbRegioni` (
  `nome_regione` text,
  `capoluogo_regione` text,
  `codiceistat_regione` varchar(3) NOT NULL,
  PRIMARY KEY  (`codiceistat_regione`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Tabella regioni d''Italia';

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;


 Il file può essere scaricato da qui.