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/