Tag: programming

Factotum BOT – La presentazione

Finalmente, dopo un lungo periodo di preparazione, sono riuscito a terminare la presentazione per il progetto Factotum BOT.

Cos’è Factotum BOT? E’ sostanzialmente un bot per Telegram creato in Python utilizzando la libreria TELEPOT (anche se al momento il progetto di sviluppo di questa libreria è fermo) per testare alcune funzionalità e possibilità offerte da questo tipo di implementazione.

Come prima cosa devo ringraziare gli amici del sito “Alla fine del palo” perchè ho letteralmente utilizzato il loro codice per la parte che si occupa di leggere un QR Code (ma ho chiesto preventivamente l’autorizzazione).

Qui di seguito trovate la presentazione (l’attuale versione pubblicata è aggiornata a Settembre 2019) del progetto e nei prossimi giorni pubblicherò sia le singole funzioni sia il codice dell’intero bot funzionante. Ovviamente se lo volete provare dovrete creare un vostro bot tramite TheBotFather e utilizzare il vostro codice di attivazione del bot.

Permettetemi un’ultima divagazione…

Mi sono imposto (per motivi etici) di realizzare il progetto unicamente con software libero e quindi anche la presentazione l’ho voluta realizzare con lo strumento Impress della suite per ufficio LibreOffice. L’impressione che ho avuto è che sia un programma orrendo rispetto al suo parente più blasonato di casa Microsoft.

E a questo proposito mi viene in mente la diatriba tra Torvalds e Stallman quando, nella conferenza del 1996 organizzata dalla Free Software Foundation, Torvalds ammise di ammirare il software per la presentazioni delle diapositive della Microsoft. “Da qualche parte nell’universo del software libero stava nascosto un programma che forse un giorno qualche hacker avrebbe trasformato in alternativa a Power Point. Ma fino a quel momento, perchè invidiare alla Microsoft l’idea di aver realizzato quel programma e di essersene riservata i diritti?”

Beh posso tranquillamente dire che quel giorno non è ancora arrivato. Per fortuna di Microsoft e per sfortuna nostra.

Trovate tutti i link utili nell’apposita sezione del sito.

Permanent link to this article: http://www.andrea.rustichelli.name/factotum-bot-la-presentazione/

Sebastian Raschka – Machine Learning con Python

Libro interessante ma, per quanto mi riguarda, poco pratico.

Questo libro parla delle principali tecniche di machine learning, ovvero:

  • apprendimento con supervisione
  • apprendimento senza supervisione
  • apprendimento di rafforzamento

Dopo una ampia ed esaustiva introduzione teorica, si inizia a parlare in Python e le librerie utilizzate sono:

  • NumPy
  • SciPy
  • scikit-learn
  • matplotlib
  • pandas.

Permanent link to this article: http://www.andrea.rustichelli.name/sebastian-raschka-machine-learning-con-python/

Roger… il primo bot per Telegram scritto in Python

Partiamo con il primo bot per Telegram scritto in python.

Come prima cosa utilizzare il bot BotFather di Telegram per creare un nuovo bot e copiare il codice di attivazione che dovrà essere inserito nel codice del programma.

Questo bot farà una cosa molto semplice, ovvero analizza il formato del messaggio digitato e non farà altro che riproporlo nel formato:

Roger... TESTO DIGITATO SU TELEGRAM... passo...

Oltre ad interagire direttamente all’interno di Telegram, il programma visualizzaerà anche i messaggi digitati all’interno della finestra dove lo script è in esecuzione.

Anticipo che Telegram può essere scaricato per qualsiasi piattaforma compreso iOS e Linux… in questo modo è possibile utilizzare dispositivi più comodi rispetto al solito smartphone.

Qui di seguito è riportato il testo funzionante di questo primo e semplice bot.

import time
import telepot
import json
from telepot.loop import MessageLoop

def handle(msg):
content_type, chat_type, chat_id = telepot.glance(msg)
print(content_type, chat_type, chat_id)

if content_type == 'text':
text = msg['text']
bot.sendMessage(chat_id, 'Roger... ' + text + '...passo...')
print(msg["from"] ["first_name"] + " ha scritto " + msg["text"])

bot = telepot.Bot('COPIARE_CODICE_ATTIVAZIONE_BOT')
MessageLoop(bot, handle).run_as_thread()
print('BOT in ascolto ...')
# Questo ciclo itera il programma (agisce come un processo sempre attivo)
while 1:
time.sleep(10)

Questa è una schermata tratta da Telegram (questa è la versione per linux)

e questo è lo stesso output che si può leggere nella console.

Permanent link to this article: http://www.andrea.rustichelli.name/roger-il-primo-bot-per-telegram-scritto-in-python/

Telegram… vieni a me

Voglio programmare un Bot in Telegram usando il linguaggio Python. Queste sono le premesse.

Ovviamente occorre installare Python e un editor sulla macchina.  Successivamente è necessario installare la libreria TELEPOT (per interfacciarsi con le API di Telegram) e PPRINT per avere delle funzionalità aggiuntive sulla scrittura dei messaggi.

Entrambe le librerie le ho installate con il comando:

sudo easy_install3 telepot
sudo easy_install3 pprint

Per l’installazione delle librerie Python preferisco utilizzare il programma easy_install al posto di pip perchè con pip su Linux Mint 18.3 ottengo sempre dei messaggi di errore.

Apro IDLE (un veloce e leggero IDE per Python) e scrivo i seguenti comandi :

import telepot [con questa istruzione importiamo la libreria 'telepot' per gestire il bot]

bot = telepot.Bot('***** PUT YOUR TOKEN HERE *****') [richiamo il bot utilizzando 
il token associato al bot]

bot.getMe() [eseguo la funzione per visualizzare i dati principali del bot]

Ecco quello che viene visualizzato:

Se visualizziamo un testo come quello sopra riportato significa che ci siamo correttamente collegati al nostro Bot di Telegram che, in questo caso, si chiama zaccabot.

 

Permanent link to this article: http://www.andrea.rustichelli.name/telegram-vieni-a-me/

Atom per la programmazione in Python

Ok, decido di iniziare a smanettare un po’ più seriamente con il Python. La prima cosa di cui ho bisogno (e qui rimembro i bei tempi andati quando la Borland sviluppava degli IDE fotonici) è un buon editor… completo ma non troppo complicato visto che voglio dedicarmi alla programmazione e non alla configurazione dell’editor.
Dopo un paio di installazioni fatte seguendo suggerimenti trovati su internet, decido di installare l’editor Atom.
La cosa migliore da fare è andare sul sito https://atom.io/ e scaricare il pacchetto di installazione .DEB… al termine del download viene eseguito il programma di gestione di questo tipo di pacchetti e l’installazione viene completata con successo.

Una volta terminata l’installazione, è necessario installare alcuni package per aggiungere delle funzionalità all’editor. Per installare i package è necessario andare nel menù Edit – Preferences e poi, nella finestra Settings che si apre nella parte centrale dell’editor, è necessario andare nella sezione Install.

Ho deciso di installare i seguenti package:
– atom-python-run: questo permette di eseguire il codice scritto in python. Ho scelto questo package perchè è veloce da configurare per l’utilizzo con il python3 (come da schermata sotto riportata) e consente di eseguire il codice tramite 2 tasti funzione (F5 e F6).

– autocomplete-python: per avere suggerimenti durante la scrittura del codice in python.

– minimap: per visualizzare sulla destra una anteprima del testo che è possibile scorrere per raggiungere velocemente la parte di programma selezionata. E’ molto comoda per i programmi molto lunghi, ma è comunque una figata anche per gli script più corti.

– file-icons: per visualizzare, nell’albero di progetto, i file con una icona che rappresenta il contenuto. Questa funzione, oltre a migliorare il look & feel permette di rendere più agevole individuare i file in progetti con molti file.

E adesso non rimane che iniziare a scrivere un po’ di codice.

Permanent link to this article: http://www.andrea.rustichelli.name/atom-per-la-programmazione-in-python/

Ottenere info sul sistema linux tramite un programma Bash

Mi capita a volte di avere la necessità di recuperare informazioni sul sistema operativo linux e su altre informazioni legate al sistema e alla rete. Visto che non mi ricordo sempre tutti i comandi (considerato che lo uso solo nel tempo libero) ho scritto un programma bash da lanciare. Un volta eseguito (se non vengono forniti parametri in input) il programma visualizza le tipologie di informazioni e poi, una volta fatta la scelta, vengono mostrate le informazioni richieste. E’ anche possibile eseguire il programma passando direttamente il numero corrispondente all’opzione desiderata. Fin che c’ero ho cercato di utilizzare i principali costrutti come l’if e il case.

#!/bin/bash

if [ $# -eq 0 ]; 
then 
#se non è stato passato il parametro viene visualizzato il menù con
#le opzioni
echo "################################################"
echo "# Visualizza le info del sistema e dell'utente #"
echo "# 1 - Informazioni dal 'printenv'              #"
echo "# 2 - Informazioni generiche sul sistema       #"
echo "# 3 - Informazioni di rete                     #"
echo "# 4 - Informazioni sulla release               #"
echo "# 5 - Informazioni sulla CPU                   #"
echo '# 6 - Varie                                    #'
echo "################################################"
read -p "Scegli l'opzione:" OPZ
else 
#altrimenti il parametro passato viene messo nella varibile di scelta
OPZ=$1
fi

case $OPZ in
1) 
clear 
echo "---===] Informazioni dal 'printenv' [===---"
printenv|grep SHELL
printenv|grep USER
printenv|grep DESKTOP_SESSION
printenv|grep LANG
printenv|grep CINNAMON_SESSION
printenv|grep HOME
;;
2) 
clear
echo "---===] Informazioni generiche sul sistema [===---"
echo "Nome host: "`uname -n`
echo "Sistema basato su: "`uname -s`
echo "Sistema operativo: "`uname -o`
echo "Kernel release: "`uname -r`
echo "Kernel version: "`uname -v`
;;
3)
clear
echo "---===] Informazioni di rete [===---"
echo "Nome host: "`hostname`
echo "Indirizzo IP: "`hostname -i`
echo "Indirizzo IP internet: "`hostname -I`
;;
4)
clear
echo "---===] Informazioni sulla release [===---"
echo "Distribuzione: "`lsb_release -is`
echo "Descrizione: "`lsb_release -ds`
echo "Numero di release: "`lsb_release -rs`
echo "Nome in codice della release: "`lsb_release -cs`
;;
5)
clear
echo "---===] Informazioni sulla CPU [===---"
cat /proc/cpuinfo|grep vendor_id |uniq
cat /proc/cpuinfo|grep 'model name' |uniq
cat /proc/cpuinfo|grep 'cache size' |uniq
lscpu|grep Architecture
lscpu|grep 'CPU op-mode'
lscpu|grep 'CPU(s)'|head -1
;;
6)
clear
echo "---===] Varie [===---"
ls -l /usr/share/xsessions/
;;
esac

Permanent link to this article: http://www.andrea.rustichelli.name/ottenere-info-sul-sistema-linux-tramite-un-programma-bash/

Ripartiamo dalla shell BASH

Considerato che ormai da molto tempo utilizzo un sistema operativo Linux, ho deciso di rispolverare la programmazione tramite shell. La mia preferita (come quella di molti) è la BASH – Bourne Again SHell) e, visto che è presente sulla distro Linux Mint, ho iniziato a riprendere un po’ di confidenza con questo potente strumento.

Come prima cosa aprire il proprio editor preferito, creare un nuovo file e inserire la riga :
#!/bin/bash
Ricordiamoci che tutto quello che inizia con il carattere # viene considerato commento e quindi non eseguito   dalla shell.
Inserire il comando:
echo Hello World!
che non fa altro che visualizzare la frase “Hello World!” sulla console.

Salvare il file con il nome “hello.sh” (senza i caratteri “).
Prima di eseguire il file è necessario dargli gli attributi per poterlo eseguire mediante il comando:
chmod +rx hello.sh
A questo punto è sufficiente digitare il comando:
./hello.sh

Ecco il risultato:

Hello World! nella shell BASH

Permanent link to this article: http://www.andrea.rustichelli.name/ripartiamo-dalla-shell-bash/