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)

Parental control con Raspberry PI





via http://rbnet.it/guide/parental-control-con-raspberry-pi-squid-squidguard-e-dnsmasq/

18 agosto 2018

Raspberry: risolvere problemi di permessi su Mount usb

sudo mkdir /mnt/share
sudo chown -R pi /mnt/share
chmod -R 777 /mnt
[fstab]
/dev/sda /mnt/usb ntfs-3g rw,nofail,nosuid,nodev,relatime,uid=1000,gid=1000,fmask=0022,dmask=0077 0 4

works for me anyway and using the above I can share it with samba and it's able to be used by my other machines too

13 luglio 2018

Inserire particles.js in wordpress

particles.js è una libreria JavaScript che aggiunge un effetto grafico a particelle che seguono il mouse ( demo: https://vincentgarreau.com/particles.js/ ).

Per inserire particles.js in Wordpress è disponibile un plugin:

Per fare in modo che sia in background è necessario del custom CSS:

div#rn-pbwp-div {
position:fixed!important;
z-index:-1!important;
}


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
syncthing
Modificare la configurazione:
nano /home/pi/.config/syncthing/config.xml
Cambiare 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/syncthing
e copiare il seguente codice (cambiare il DAEMON_USER se necessario):
#!/bin/sh
### 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
 Dare i seguenti comandi per renderlo eseguibile e farlo partire:
sudo chmod +x /etc/init.d/syncthing
sudo update-rc.d syncthing defaults
sudo service syncthing start
Aprire 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"

Per usare Typescript scegliere quale applicazione usare (React, Angular, ecc.):

Per esempio, per installare React si può usare npm:

Per installare npm occore installare node.js :

Dopo aver installato node.js in windows, aprire il command prompt di node.js dal menù avvio e digitare:
npm install -g create-react-app

Per creare una struttura di una applicazione:
create-react-app my-app --scripts-version=react-scripts-ts

Seguire il link a fondo pagina per continuare il demo...

Microsoft Word: scrivere il nome del file a piè di pagina in verticale

Sembra che l'unico modo sia:
- inserire il nome del documento a piè di pagina
- selezionarlo e inserire una tabella di una cella
- modificare l'allineamento del testo nella tabella in verticale
- spostare il testo dove si preferisce (esempio in basso a destra)


05 giugno 2018

Concatenare stringhe provenienti da diversi record in MYSQL

Sintassi :
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

Installazione pivpn:
sudo curl –L https://install.pivpn.io | bash
La 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 –a
per 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

wp_redirect() does not validate that the $location is a reference to the current host.
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.
Example :
wp_safe_redirect( $url );
Only use wp_redirect() when you are specifically trying to redirect to another site, and then you can hard-code the URL.
Example :
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/