06 dicembre 2018
01 ottobre 2018
SQL Server: creare indici con colonne incluse
In questo argomento si illustra come aggiungere colonne incluse (o non chiave) per estendere la funzionalità di indici non cluster in SQL Server tramite SQL Server Management Studio o Transact-SQL. Con l'inclusione di colonne non chiave è possibile creare indici non cluster in grado di coprire più query. Ciò è possibile perché le colonne non chiave presentano i vantaggi seguenti:
Possono essere tipi di dati che non sono consentiti come colonne chiave indice.
Non vengono prese in esame dal Motore di database durante il calcolo del numero di colonne chiave indice o della dimensione delle chiavi di indice.
Con un indice con colonne non chiave è possibile aumentare significativamente le prestazioni delle query quando tutte le relative colonne sono incluse nell'indice come colonne chiave o non chiave. I vantaggi nelle prestazioni si ottengono poiché Query Optimizer può individuare tutti i valori delle colonne all'interno dell'indice. In questo modo, la quantità di operazioni di I/O su disco è inferiore dato che non viene eseguito alcun accesso ai dati delle tabelle o degli indici cluster.
Via: https://docs.microsoft.com/it-it/sql/relational-databases/indexes/create-indexes-with-included-columns?view=sql-server-2017
23 agosto 2018
Unire due campi data e ora in uno solo in SQL Server
Esempio:
nella tabella "Log" ci sono due campi di formato "datetime" uno con solo la data e uno con solo l'ora.
Se si vuole creare un campo unico "DataOra", è necessario prima convertire da data a stringa, concatenare e poi riconvertire in datetime.
UPDATE Log
SET DataOra = CONVERT(datetime, LEFT(CONVERT(char, Data, 121), 10) + ' ' + CONVERT(char, Ora, 108), 121)
121 indica uno stile di data aaaa-mm-gg hh:mi:ss.mmm(24h) (vedi link)
19 agosto 2018
Come ripristinare il vecchio nome eth0 al posto del MAC address
Modificare il file:
/boot/cmdline.txte aggiungere in fondo:
net.ifnames=0Riavviare il Raspberry.
via https://www.raspberrypi.org/forums/viewtopic.php?t=191030#p1199731
18 agosto 2018
Raspberry: risolvere problemi di permessi su Mount usb
sudo chown -R pi /mnt/share
chmod -R 777 /mnt
/dev/sda /mnt/usb ntfs-3g rw,nofail,nosuid,nodev,relatime,uid=1000,gid=1000,fmask=0022,dmask=0077 0 4
16 luglio 2018
Risolvere l'apertura lenta della cartella Download in Windows 10
- Proprietà della cartella
- Personalizza
- Cambiare "Ottimizza cartella per" da Immagini a Elementi generali.
via https://www.intowindows.com/fix-downloads-folder-opens-slowly-in-windows-10/
13 luglio 2018
Inserire particles.js in wordpress
div#rn-pbwp-div {position:fixed!important;z-index:-1!important;}
06 luglio 2018
Tabella comparativa della velocità di esecuzione di query con sottostringhe
via http://cc.davelozinski.com/sql/like-vs-substring-vs-leftright-vs-charindex
18 giugno 2018
Installare un cloud locale con SyncThing e Raspberry PI
Installare Syncthing sul Raspberry:
curl -s https://syncthing.net/release-key.txt | sudo apt-key add -
echo "deb https://apt.syncthing.net/ syncthing stable" | sudo tee /etc/apt/sources.list.d/syncthing.list
apt-get update
sudo apt-get install syncthing
syncthingModificare la configurazione:
nano /home/pi/.config/syncthing/config.xmlCambiare l'indirizzo da 127.0.0.1 a 0.0.0.0 e salvare.
Creare un file init per l'esecuzione automatica del servizio:
sudo nano /etc/init.d/syncthinge copiare il seguente codice (cambiare il DAEMON_USER se necessario):
#!/bin/shDare i seguenti comandi per renderlo eseguibile e farlo partire:
### BEGIN INIT INFO
# Provides: Syncthing
# Required-Start: $local_fs $remote_fs $network
# Required-Stop: $local_fs $remote_fs $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Syncthing
# Description: Syncthing is for backups
### END INIT INFO
# Documentation available at
# http://refspecs.linuxfoundation.org/LSB_3.1.0/LSB-Core-generic/LSB-Core-generic/iniscrptfunc.html
# Debian provides some extra functions though
. /lib/lsb/init-functions
DAEMON_NAME="syncthing"
DAEMON_USER=pi
DAEMON_PATH="/usr/bin/syncthing"
DAEMON_OPTS=""
DAEMON_PWD="${PWD}"
DAEMON_DESC=$(get_lsb_header_val $0 "Short-Description")
DAEMON_PID="/var/run/${DAEMON_NAME}.pid"
DAEMON_NICE=0
DAEMON_LOG='/var/log/syncthing'
[ -r "/etc/default/${DAEMON_NAME}" ] && . "/etc/default/${DAEMON_NAME}"
do_start() {
local result
pidofproc -p "${DAEMON_PID}" "${DAEMON_PATH}" > /dev/null
if [ $? -eq 0 ]; then
log_warning_msg "${DAEMON_NAME} is already started"
result=0
else
log_daemon_msg "Starting ${DAEMON_DESC}" "${DAEMON_NAME}"
touch "${DAEMON_LOG}"
chown $DAEMON_USER "${DAEMON_LOG}"
chmod u+rw "${DAEMON_LOG}"
if [ -z "${DAEMON_USER}" ]; then
start-stop-daemon --start --quiet --oknodo --background \
--nicelevel $DAEMON_NICE \
--chdir "${DAEMON_PWD}" \
--pidfile "${DAEMON_PID}" --make-pidfile \
--exec "${DAEMON_PATH}" -- $DAEMON_OPTS
result=$?
else
start-stop-daemon --start --quiet --oknodo --background \
--nicelevel $DAEMON_NICE \
--chdir "${DAEMON_PWD}" \
--pidfile "${DAEMON_PID}" --make-pidfile \
--chuid "${DAEMON_USER}" \
--exec "${DAEMON_PATH}" -- $DAEMON_OPTS
result=$?
fi
log_end_msg $result
fi
return $result
}
do_stop() {
local result
pidofproc -p "${DAEMON_PID}" "${DAEMON_PATH}" > /dev/null
if [ $? -ne 0 ]; then
log_warning_msg "${DAEMON_NAME} is not started"
result=0
else
log_daemon_msg "Stopping ${DAEMON_DESC}" "${DAEMON_NAME}"
killproc -p "${DAEMON_PID}" "${DAEMON_PATH}"
result=$?
log_end_msg $result
rm "${DAEMON_PID}"
fi
return $result
}
do_restart() {
local result
do_stop
result=$?
if [ $result = 0 ]; then
do_start
result=$?
fi
return $result
}
do_status() {
local result
status_of_proc -p "${DAEMON_PID}" "${DAEMON_PATH}" "${DAEMON_NAME}"
result=$?
return $result
}
do_usage() {
echo $"Usage: $0 {start | stop | restart | status}"
exit 1
}
case "$1" in
start) do_start; exit $? ;;
stop) do_stop; exit $? ;;
restart) do_restart; exit $? ;;
status) do_status; exit $? ;;
*) do_usage; exit 1 ;;
esac
sudo chmod +x /etc/init.d/syncthing
sudo update-rc.d syncthing defaults
sudo service syncthing startAprire da un pc in rete il browser all'indirizzo del Raspberry con la porta configurata.
Configurare la password e le cartelle da condividere.
Installare per esempio sul pc o sul cellulare l'app e scegliere quali cartelle sincronizzare.
via: https://www.htpcguides.com/install-syncthing-raspberry-pi-bittorrent-sync-alternative/
14 giugno 2018
Typescript "hello world"
Microsoft Word: scrivere il nome del file a piè di pagina in verticale
05 giugno 2018
Concatenare stringhe provenienti da diversi record in MYSQL
GROUP_CONCAT([DISTINCT] expr [,expr ...]
[ORDER BY {unsigned_integer | col_name | expr}
[ASC | DESC] [,col_name ...]]
[SEPARATOR str_val])
Esempio :
SELECT student_name,
GROUP_CONCAT(DISTINCT test_score
ORDER BY test_score DESC SEPARATOR ' ')
FROM student
GROUP BY student_name;
via: https://dev.mysql.com/doc/refman/5.5/en/group-by-functions.html#function_group-concat
04 giugno 2018
Come evitare che le email inviate da PHP mail() finiscano nello spam?
$fromMail = 'set your from mail'; $boundary = str_replace(" ", "", date('l jS \of F Y h i s A')); $subjectMail = "New design submitted by " . $userDisplayName; $contentHtml = ' Dear Admin The following design is submitted by '. $userName .'. Click here to check the design. '; $contentHtml .= ' '; $contentHtml .= ' Name : '.$name.' Description : '. $description .' '; $headersMail = ''; $headersMail .= 'From: ' . $fromMail . "\r\n" . 'Reply-To: '. $fromMail. "\r\n"; $headersMail .= 'Return-Path: ' . $fromMail . "\r\n"; $headersMail .= 'MIME-Version: 1.0' . "\r\n"; $headersMail .= "Content-Type: multipart/alternative; boundary = \"" . $boundary . "\"\r\n\r\n"; $headersMail .= '--' . $boundary . "\r\n"; $headersMail .= 'Content-Type: text/html; charset=ISO-8859-1' . "\r\n"; $headersMail .= 'Content-Transfer-Encoding: base64' . "\r\n\r\n"; $headersMail .= rtrim(chunk_split(base64_encode($contentHtml))); try { if (mail($toMail, $subjectMail, "", $headersMail)) { $status = 'success'; $msg = 'Mail sent successfully.'; } else { $status = 'failed'; $msg = 'Unable to send mail.'; } } catch(Exception $e) { $msg = $e->getMessage(); }
How to set mail send from localhost xampp:
comment everything in D:/xampp/sendmail/sendmail.ini and mention
the below under
[sendmail]
smtp_server=smtp.gmail.com smtp_port=587
error_logfile=error.log debug_logfile=debug.log
auth_username=yourmailid@domain.com
auth_password=your-mail-password force_sender=yourmailid@domain.com
In D:/xampp/php/php.ini a. Under
[mail function]
SMTP = smtp.gmail.com smtp_port = 587
b. set sendmail_from = yourmailid@domain.com c.
uncomment sendmail_path = "\"D:\xamp\sendmail\sendmail.exe\" -t"
Hence it should be look like below
sendmail_path = "\"D:\xamp\sendmail\sendmail.exe\" -t"
d. comment sendmail_path="D:\xamp\mailtodisk\mailtodisk.exe"
Hence it should be look like below
;sendmail_path="D:\xamp\mailtodisk\mailtodisk.exe"
e. mail.add_x_header=Off
03 giugno 2018
Trasformare Raspberry PI in un server VPN
sudo curl –L https://install.pivpn.io | bashLa prima cosa da scegliere sarà il nome dell’utente locale da utilizzare.
Successivamente attivare [yes] alla proposta di attivare gli aggiornamenti di sicurezza automatici.
Poi la scelta tra il tipo di protocollo UDP o TCP, lasciamo UDP senza troppi problemi.
Ora la parte da modificare sarà la porta di ascolto, per scongiurare qualche attacco hacker, consiglio di cambiarla e restare magari tra la 10000 e la 20000, ovviamente la scelta spetta a voi.
Nella scelta del livello di criptazione loro consigliano 2048, un livello già molto sicuro.
Se hai un ip dinamico scrivilo nella voce dns entry.
Per il DNS Provider, lasciare Google o cambiare con OpenDNS.
Una volta completata l’installazione e riavviato il RaspberryPi eseguiamo il comando
sudo pivpn –aper creare una configurazione da importare nei client.
La cosa bella è che verrà creato il file di configurazione /home/pi/ovpns/nomeScelto.ovpn e sarà sufficiente importarlo dal tuo client OpenVpn preferito per connetterti alla rete.
Infine è fondamentale creare nel Router/firewall il NAT/Port Forwarding dalla porta scelta prima verso l’ip Fisso INTERNO del RaspberryPi.
Se il RaspberryPi non ha un ip fisso all’ interno della LAN, ti verrà chiesto di impostarlo durante l’installazione di Pivpn.
via: https://www.makerlabitalia.com/trasformare-la-raspberry-pi-un-server-vps/
03 aprile 2018
Redirect a WordPress site
This means that this function is vulnerable to open redirects if you pass it a $location supplied by the user.
For this reason, it is best practice to always use wp_safe_redirect() instead, since it will use wp_validate_redirect() to ensure that the $location refers to the current host.
wp_safe_redirect( $url );
wp_redirect( 'https://example.com/some/page' );
28 febbraio 2018
Corso php e mysql
– 8 Lezioni in Streaming e Download Video con accesso illimitato
– Ebook del corso in PDF ed ePub
– Esercitazioni per ogni lezione
– Assistenza tecnica costante per tutta la durata del corso
– Attestato di Frequenza
via https://www.corsi-online.it/lezione-corso-php-mysql/