Come creare una semplice mappa (con segnaposto) usando OpenLayers ?

Questo tutorial si basasu OpenLayers Quick Start Guide e OpenLayers Popup Example ed è riferito alla versione 5.3.0 della libreria. Controlla se è presente una versione aggiornata.

Includi lo stylesheet di OpenLayers nella sezione <head> della tua pagina HTML.

<link rel="stylesheet" href="https://cdn.rawgit.com/openlayers/openlayers.github.io/master/en/v5.3.0/css/ol.css" type="text/css">

Includ la libreria in Javascript di OpenLayers alla fine della sezione <body> del tuo HTML

<script src="https://cdn.rawgit.com/openlayers/openlayers.github.io/master/en/v5.3.0/build/ol.js"></script>

Inserisci un elemento <div id="map"> dove deve trovarsi la mappa

 <div id="map" style="width: 600px; height: 400px;"></div>

Ora puoi aggiugere una sezione <script> alla fine della sezione <body>  (dopo lo <script> che carica la libreria JavaScript OpenLayers). Tutto il seguente JavaScript deve trovarsi nella sezione <script.

Inizializza la mappa con la base dei dati del Belgio

 var attribution = new ol.control.Attribution({
     collapsible: false
 });

 var map = new ol.Map({
     controls: ol.control.defaults({attribution: false}).extend([attribution]),
     layers: [
         new ol.layer.Tile({
             source: new ol.source.OSM({
                 url: 'https://tile.openstreetmap.be/osmbe/{z}/{x}/{y}.png',
                 attributions: [ ol.source.OSM.ATTRIBUTION, 'Tiles courtesy of <a href="https://geo6.be/">GEO-6</a>' ],
                 maxZoom: 18
             })
         })
     ],
     target: 'map',
     view: new ol.View({
         center: ol.proj.fromLonLat([4.35247, 50.84673]),
         maxZoom: 18,
         zoom: 12
     })
 });

Devi aggiungere un segnaposto per un luogo

 var layer = new ol.layer.Vector({
     source: new ol.source.Vector({
         features: [
             new ol.Feature({
                 geometry: new ol.geom.Point(ol.proj.fromLonLat([4.35247, 50.84673]))
             })
         ]
     })
 });
 map.addLayer(layer);

Devi creare una nuova sezione <div id="popup"> dopo l’elemento <div id="map">

 <div id="popup" class="ol-popup">
     <a href="#" id="popup-closer" class="ol-popup-closer"></a>
     <div id="popup-content"></div>
 </div>

Inizializza il popup (il seguente codice JavaScript deve essere inserito nella sezione<script>)

 var container = document.getElementById('popup');
 var content = document.getElementById('popup-content');
 var closer = document.getElementById('popup-closer');

 var overlay = new ol.Overlay({
     element: container,
     autoPan: true,
     autoPanAnimation: {
         duration: 250
     }
 });
 map.addOverlay(overlay);

 closer.onclick = function() {
     overlay.setPosition(undefined);
     closer.blur();
     return false;
 };

Add the function to open the popup when you click on the marker

 map.on('singleclick', function (event) {
     if (map.hasFeatureAtPixel(event.pixel) === true) {
         var coordinate = event.coordinate;

         content.innerHTML = '<b>Hello world!</b><br />I am a popup.';
         overlay.setPosition(coordinate);
     } else {
         overlay.setPosition(undefined);
         closer.blur();
     }
 });

Di default, il popup si aprirà clickando sl segnaposto. Se vuoi che il popup si apre non appena la mappa viene caricata, basterà aggiungere


 content.innerHTML = '<b>Hello world!</b><br />I am a popup.';
 overlay.setPosition(ol.proj.fromLonLat([4.35247, 50.84673]));

Qui puoi vedere il risultato

Testo adattato con origine di : https://openstreetmap.be/en/projects/howto/openlayers.html

Modifica data di scadenza per un utente OracleDB

Di recente mi sono trovato davanti al problema di aumentare la durata della validità della password di un utente di OracleDB.

La soluzione è quella di creare un nuovo profilo al quale associare un periodo per la scadenza della password;

CREATE PROFILE LONG_LIFE_PROFILE LIMIT
PASSWORD_LIFE_TIME 3600
PASSWORD_GRACE_TIME 3550;

SELECT username, expiry_date FROM DBA_USERS ;

SYS 10-OTT-20 15:40:56

ALTER USER SYS PROFILE LONG_LIFE_PROFILE;

SELECT username, expiry_date FROM DBA_USERS ;

SYS 28-APR-30 15:40:56

ILOM e SUN/Oracle

Integrated Lights-out Manager (ILOM) aiuta la gestione ed il troubleshooting del hardware di un server della Sun/Oracle. Con l’aiuto di ILOM è possibile gestire da remoto il server, anche se (come mi è successo) il server fosse spento per un malfunzionamento della piastra madre.
Riporto i comandi più usati:

Per loggarsi nella macchina

-> start /SP/console        -- inizializza  SP-console
-> show /SP/sessions        -- verifica le sessioni attive
-> stop /SP/console         -- ferma ogni sessione utente

Start and stop system

-> start /SYS                            (fa partire il sistema)  
-> stop [-force] /SYS                    (ferma sistema)
-> show /SYS                             (verifica lo stato)
-> reset /SYS                            (reset del host)
-> reset /SP                             (reset di ILOM SP)
-> set /HOST send_break_action=break     (invia break all'OS)
-> reset /CMM                            (resetta CMM dello Chassis delle blade)

Comandi per la rete

-> show /SP/network

Per settare l’IP address della ILOM

-> set pendingipdiscovery=static 
-> set pendingipaddress=10.10.10.10
-> set pendingipnetmask=255.255.255.0
-> set pendingipgateway=10.10.10.1
-> set commitpending=true

Per verificare il MAC address della SP

show /SP/network macaddress

Per verificare il CMM IP dello chassis della blade

-> show /CMM/network

Amministrazione degli utenti

-> show /SP/users                  (mostra gli utenti ILOM)
-> show /SP/user/admin             (La configurazione di un utente)
-> create /SP/users/user_name password=PWD role=[administrator|operator]    (crea)
-> delete /SP/users/username       (cancella un user)
-> set /SP/users/admin01 role=administrator           (definisce il ruolo)
-> set /SP/users/admin01           (cambio password)

Monitoring e logs

-> show /SP/logs/event/list     (event log di ILOM)
-> show -level all -output table /SP/faultmgmt     (mostra i fault hardware)
-> show -level all -output table /SYS type==Temperature value

hardware info

-> show -level all -output table /SYS type==DIMM                (mostra DIMMS)
-> show -level all -output table /SYS type=='Host Processor'    (mostra CPUs)
-> show -l all /SYS type=='Hard Disk'                           (mostra disks)

Calcolo della distanza fra due punti GPS

Dovendo calcolare la distanza fra due punti GPS, ho cercato su DuckDuck un aiuto per poter eseguire il calcolo ed ho adattato quello trovato facendolo divenire il seguente pezzo di codice PHP:

function distanza(lat2,lon2)
{
$R=6371;
$pigreco=3.1415927;
$f=0;
$p=0;
$d1=0;
// Coordinate di Piazza del Campidoglio, Roma
$lat2=41.89326;
$lon2=12.48298;
/* Converte i gradi in radianti */
$lat_alfa = $pigreco * $lat1 / 180;
$lat_beta = $pigreco * $lat2 / 180;
$lon_alfa = $pigreco * $lon1 / 180;
$lon_beta = $pigreco * $lon2 / 180;
// Calcola l’angolo compreso fi
$fi = abs($lon_alfa – $lon_beta);
// Calcola il terzo lato del triangolo sferico
$p = acos(sin($lat_beta) * sin($lat_alfa) + cos($lat_beta) * cos($lat_alfa) * cos($fi));
// Calcola la distanza sulla superficie terrestre R = ~6371 km
$d1 = $p * $R;
}

Non servendomi una grande precisione, assumo che la terra sia una sfera perfetta .
Dunque, osservando la figura in alto, diciamo che, in base alla trigonometria sferica (teorema di Eulero), tra i lati ab e p del triangolo sferico ABP vale la relazione:

cos p = cos a cos b + sen a sen b cos φ

Ora, dette lat(A)lon(A)lat(B)lon(B), la latitudine e la longitudine dei punti A e B e, considerato che utilizzando la regola mnemonica di Nepero si ha:

  • a = 90° – lat(B)
  • b = 90° – lat(A)
  • φ = lon(A) – lon(B)

abbiamo tutti i dati per calcolare la lunghezza del lato p considerando il raggio della Terra approssimabile a R = 6371 km.

Da Via e Civico a coordinate GPS

Per un mio interesse volevo riportare su mappa una serie di luoghi, ma avevo solo l’indirizzo a mia disposizione.

Mi sono trovato, quindi, nella necessità di trasformare questi indirizzi in punti GPS: LocationIQ mi ò venuto in aiuto.

www.locationiq.com è un sito tramite il quale, una volta registrati ed ottenuta la key da sviluppatore, si possono convertire indirizzi (via e civico) in coordinate gps e fino a 10000 indizzzi nelle 24 ore, il servizio è gratuito !!

#!/bin/bash

echo -e "lat	lon	title	description	icon	iconSize	iconOffset">lista.txt
rm update_poi.sql
while IFS=\; read poi indirizzo 
do

indirizzo1="$indirizzo1,rome,lazio,italy"
echo $indirizzo
wget -O ppp.xml  "https://eu1.locationiq.com/v1/search.php?key=ppqqtt&q=${indirizzo1}&format=xml"

actualsize=$(wc -c <"ppp.xml")
if [ $actualsize -ge 1 ]; then
  XML_FILE=ppp.xml
  LAT=$(xmllint --xpath 'string(/searchresults/place/@lat)' $XML_FILE)
  LON=$(xmllint --xpath 'string(/searchresults/place/@lon)' $XML_FILE)
  echo $poi","$LAT,$LON 
  echo -e "$LAT\t$LON\t$poi\t$indirizzo\n$LAT\n$LON\tOl_icon_blue_example.png	24,24	0,-24" >> lista.txt
  echo "update fact_data_provisioning_gps set lat='${LAT}', lon='${LON}' where cod_poi='${poi}';">>update_poi.sql
fi
sleep 1
rm ppp.xml

done<esportazione.dsv

il piccolo programmino in bash che a fronte dell’indirizzo via/civico del mio poi, ottiene le coordinate gps e crea il file che mi permetterè l’aggiornamento della mia tabella Oracle.

A questo punto dopo aver cercato in rete qualcosa che mi potesse aiutare a mappare i punti gps ottenuti sulla cartina.

Anche in questo caso una breve ricerca e sono arrivato alla pagina

https://wiki.openstreetmap.org/wiki/Openlayers_POI_layer_example

che mi ha consentito di rappresentare i miei punti GPS in un attimo !

Mail senza mail

Ho avuto l’esigenza di testare la funzionalità di un mailrelay, ma senza che la macchina client disponesse del pacchetto mail:

per ovviare al problema i comadi da lanciare sono pochi e semplici:

$ telnet mailrelay smtp
Connected to mailrelay.
Escape character is ‘^]’.
220 mailrelay ESMTP Exim 4.90_1
HELO mailrelay
250 mailrelay Hello mailrelay [mailrelay]
mail from: user@domain.com
250 OK
rcpt to: user2@otherdomain.com
250 Accepted
data
354 Enter message, ending with “.” on a line by itself
This is test email only

Thanks
.

250 OK id=1j6umb-0005ko-VZ
quit
221 mailrelay closing connection
Connection closed by foreign host.
$

Fatto !

Compilazione dei pacchetti DEB sotto Ubuntu

Checkinstall fa tutto quello che occorre: controlla quali file saranno installati e dove, li inserirà correttamente all’interno del .deb

L’installazione del pacchetto è sempre la stessa

apt-get install checkinstall

A questo punto dopo la compilazione del sorgente, non va eseguito il solito ‘sudo make install’, ma ‘sudo checkinstall’:

  ./configure
  make
  sudo checkinstall

Nessun Dual boot con Ubuntu e Windows 10

Devo usare un foglio Excel per forza con delle funzioni che non sono interpretate correttamente sotto LibreOffice ed allora ho deciso di utilizzare Excel in maniera nativa.

Quando comprai questo portatile mi venne data una copia di Windows 10, per Natale ho trovato in dono un disco da 1Tb ed ho pensato di utilizzare il dual boot per avere funzionante una copia di Excel.

Ho realizzato che non valeva la pena ed ho ceduto alla virtualizzazione

Con un semplice

dd bs=1M if=/dev/sda of=/tmp/sda/w10.img

ho creato l’immagine del disco da 250GB e poi l’ho convertito in qcow2

sudo qemu-img convert -f raw -O qcow2 w10.img /var/lib/libvirt/images/w10.qcow2

poi ho creato una macchina virtuale con due processori , 4GB di ram e Win10 sul mio portatile gira che è una bellezza !

COALESCE

Dovevo fare una cosa semplice… Verificare il contenuto di due colonne presenti su tabelle diverse… Girovagando su internet ho trovato la funzione coalesce. L’esempio che ho trovato , a fronte di un prezzo di vendita e di un prezzo minimo, calcola il prezzo di vendita (10% di sconto) ed in assenza di prezzi, impone un prezzo simbolico di 5.

SELECT product_id, list_price, min_price,    
COALESCE(0.9*list_price, min_price, 5) "Sale"
FROM product_information
WHERE supplier_id = 102050
ORDER BY product_id, list_price, min_price, "Sale";

PRODUCT_ID LIST_PRICE MIN_PRICE Sale
---------- ---------- ---------- ----------
1769 48 43.2
1770 73 73
2378 305 247 274.5
2382 850 731 765
3355 5

La mia query completa è questa:

select coalesce(a.prodotto, b.prodotto) prodotto,
coalesce(a.atotal, 0) atotal,
coalesce(b.btotal, 0) btotal
from
(
select prodotto, count() aTotal
from vend_mensile
group by prodotto )
a full outer join
( select prodotto, count() bTotal
from vend_giornaliere
group by prodotto
) b
on a.prodotto = b.prodotto
where coalesce(a.atotal, 0) <> coalesce(b.btotal, 0);

la full_outer_join serve per recuperare anche le colonne dove no sono presenti dati.

TFTP server per Ubuntu 17.04

Installazioe e verifica di Server TFTP su Ubuntu 17.04

Bisogna installare i seguenti pacchetti:

sudo apt-get install tftpd-hpa tftp-hpa

Modifichiamo il file /etc/default/tftpd-hpa in modo che coincida con le nostre esigenze

# /etc/default/tftpd-hpa

TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/tftpboot"
TFTP_ADDRESS=":69"
TFTP_OPTIONS="--secure"

Creiamo la cartella /tftpboot e questa deve coincidere con l’informazione inserita nel file di configurazione: il più delle volte è /tftpboot, ma il pacchetto tftpd-hpa crea la directory /var/lib/tftpboot che dovremo rimuovere con un

rm -rf /var/lib/tftpboot

Successivamente creiamo e settiamo i permessi per directory

sudo mkdir /tftpboot
sudo chmod -R 777 /tftpboot
sudo chown -R tftp /tftpboot

Ristartiamo il servizio tftpd-hpa.

sudo service tftpd-hpa restart

Ora il servizio tftp è attivo.
Testiamo che sia tutto funzionante

Creiamo un file test con alcuni caratteri all’interno della cartella /tftpboot del server tftp
Otteniamo l’indirizzo del server, se sconosciuto, con ifconfig.

Quindi eseguiamo:

tftp 192.168.1.2
tftp> get test
Sent 159 bytes in 0.0 seconds

tftp> quit

Se siete arrivati fino qui, allora è tutto a posto.