Per invertire le stringhe, Python non mette a disposizione nessuna funzione.

Però è comunque molto facile, utilizzando la "sintassi slice".

In sostanza è come se trattassimo la stringa come una lista.

Continuiamo la nostra introduzione in Kotlin; oggi vediamo qualche esempio di funzione.

Prima di tutto, dobbiamo dire che non esistono funzioni / metodi statici; però Kotlin permette di creare delle funzioni anche all'inizio del file, fuori dalla classe.

E, da quanto ho capito, le funzioni così scritte assumo un significato simile allo static.

Come anche in altri linguaggi, anche Kotlin permette di creare e usare più costruttori.

Questo un esempio di costruttore primario:

class Person constructor(var name: String, var email: String?)

Se non ci sono altri metodi / costruttori, è anche possibile omettere le parentesi graffe.

Visto che Google introdurrà a breve Kotlin in Android Studio per lo sviluppo su Android, ho pensato fosse giunto il momento di iniziare a studiarlo un pò.

Kotlin è uno dei vari linguaggi che si basa sulla JVM, ed è quindi compatibile con Java, ed è in grado di usare le sue librerie.

Se volete usare un IDE, vi consiglio Intellij IDEA; ma anche Netbeans ed Eclipse sono compatibili.

Per salvare l'hash delle password in PHP, e per controllarne la validità in fase di login, ero solito usare solo la funzione sha1.

Ma ho scoperto che c'è un modo più sicuro, usando password_hash e password_verify.

L'ereditarietà in Python è leggermente diversa rispetto ad altri linguaggi.

Non si usano parole chiave tipo extends, ma si imposta come se fosse un parametro di una funzione.

Supponiamo di avere la generica classe Persona:

class Persona:
    nome = ''
    cognome = ''

    def __init__(self, nome, cognome):
        self.nome = nome
        self.cognome = cognome

    def getNome(self):
        print(self.nome)

    def getCognome(self):
        print(self.cognome)

Ho scoperto che nelle applicazioni web è possibile utilizzare un file manifest, che da determinate informazioni quando si "installano" nelle homescreen dei dispositivi mobili.

E' una tecnologia non ancora stabile e pienamente suppoortata, ma sarebbe già il caso di aggiungerla ai nostri siti.

Da non confondere con Apache Spark, Spark è un frameowrk per applicazioni web per Java.

L'ho trovato, almeno inizialmente, abbastanza semplice da usare, e anche abbastanza familiare se avete già usato Node.js ed Express.

Inoltre, di default, utilizza una versione embedded di Jetty, e quindi non ci sono server da configurare (ma potete comunque usarne un altro se volete).

Iniziamo a vedere qualcosa; useremo Maven, e va bene qualsiasi IDE (io uso Netbeans).

Le applicazioni create con Electron, arrivano già con un menu "pre-confezionato".

Ovviamente è possibile crearne uno personalizzato.

Vediamo come crearne uno (se volete avere una base su Electron, leggete questo articolo):

const {app, BrowserWindow, Menu, dialog} = require('electron');
const path = require('path');
const url = require('url');
let win;

const template = [
    {
        label: 'File',
        submenu: [
            {
                label: 'Apri',
                click() {
                    dialog.showOpenDialog({properties:
                                [
                                    'openFile',
                                    'openDirectory',
                                    'multiSelections'
                                ]}
                    )
                }
            }
        ]
    },
    {
        label: 'Edit',
        submenu: [
            {role: 'undo'},
            {role: 'redo'},
            {type: 'separator'},
            {role: 'cut'},
            {role: 'copy'},
            {role: 'paste'},
            {role: 'pasteandmatchstyle'},
            {role: 'delete'},
            {role: 'selectall'}
        ]
    },
    {
        label: 'View',
        submenu: [
            {role: 'reload'},
            {role: 'forcereload'},
            {role: 'toggledevtools'},
            {type: 'separator'},
            {role: 'resetzoom'},
            {role: 'zoomin'},
            {role: 'zoomout'},
            {type: 'separator'},
            {role: 'togglefullscreen'}
        ]
    },
    {
        role: 'window',
        submenu: [
            {role: 'minimize'},
            {role: 'close'}
        ]
    },
    {
        role: 'help',
        submenu: [
            {
                label: 'My Blog',
                click() {
                    require('electron').shell.openExternal('https://www.mattepuffo.com')
                }
            }
        ]
    }
];

if (process.platform === 'darwin') {
    template.unshift({
        label: app.getName(),
        submenu: [
            {role: 'about'},
            {type: 'separator'},
            {role: 'services', submenu: []},
            {type: 'separator'},
            {role: 'hide'},
            {role: 'hideothers'},
            {role: 'unhide'},
            {type: 'separator'},
            {role: 'quit'}
        ]
    });

    // Edit menu
    template[1].submenu.push(
            {type: 'separator'},
            {
                label: 'Speech',
                submenu: [
                    {role: 'startspeaking'},
                    {role: 'stopspeaking'}
                ]
            }
    );

    // Window menu
    template[3].submenu = [
        {role: 'close'},
        {role: 'minimize'},
        {role: 'zoom'},
        {type: 'separator'},
        {role: 'front'}
    ];
}

const menu = Menu.buildFromTemplate(template);
Menu.setApplicationMenu(menu);

function createWindow() {
    win = new BrowserWindow({width: 800, height: 600});
    win.loadURL(url.format({
        pathname: path.join(__dirname, 'index.html'),
        protocol: 'file:',
        slashes: true
    }));

//    win.webContents.openDevTools();

    win.on('closed', () => {
        win = null;
    });
}

app.on('ready', createWindow);

app.on('window-all-closed', () => {
    if (process.platform !== 'darwin') {
        app.quit();
    }
});

app.on('activate', () => {
    if (win === null) {
        createWindow();
    }
});

Attivate e disattivate il menu per vedere le differenze con quello base.

Ovviamente potete modificarlo a vostro piacimento.

Enjoy!

Electron è un framework, basato su Node.js, per la creazione di applicazione desktop usando Javascript e HTML.

Se pensate che su questo framework si basano programmi del callibro di Atom.io, Visual Studio Code e GitHub Desktop, vi renderete conto delle sue potenzialità.

Oggi vediamo un'introduzione basica.

Prima di tutto installiamo Electron (conviene farlo a livello globale):

# npm -g install electron