Novembre 2018 archive

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/

roBOTomizzati – Analisi di una mania robotica

Spesso accade che lo spunto per un nuovo post nasca dalla conversazione con un Mangiatore di Quiche. Questo post ne è la conferma.

Inutile dire nuovamente quanto mi faccia arrabbiare sentire persone “inesperte” farcirsi la bocca con termini tecnici o informatici cercando di passare per esperti di nuove tecnologie. In questi giorni il termine scelto dal Mangiatore di Quiche era “Bot”. Questa nuova tecnologia che sta sconvolgendo il mondo informatico e prospetta nuove e inaspettate applicazioni in qualsiasi ambito.

Facciamo un po’ di ordine.

I Bot sono la contrazione, prettamente in ambito informatico, di roBOT, ovvero entità software (o, ancora meglio, software agent) che agiscono come se fossero persone e eseguono delle attività in modo più o meno automatizzato e con o senza il continuo intervento umano.

I primi Bot utilizzavano per l’interazione con l’uomo una semplice logica di programmazione basata sulla presenza, nel testo o nel corso del dialogo, di particolari parole o frasi che poi innescavano la logica applicata nella programmazione. Ovviamente nei nostri giorni questa semplice logica ha lasciato sempre più spazio all’applicazione della IA (intelligenza artificiale).

Di Bot ne esistono tantissimi tipi, solo per citarne alcuni:
chatterbot
web crawler (o web bot, o www bot o internet bot)
IRC bot (Internet Relay Chat)
video game bot

Sostanzialmente, visto che con i Bot è possibile fare praticamente tutto, è possibile trovare una moltitudine di definizioni in base alla loro attività/scopo.

Chatterbot
Programmi che simulano una conversazione tra persone… il più famoso è sicuramente ELIZA (ma personalmente ho provato anche ALICE).

Web crowler
Non sono altro che Bot che “girano” per internet cercando di catalogare e indicizzare i contenuti delle varie pagine web per migliorare le ricerche su internet (come dimenticare il file robot.txt da inserire nelle cartelle di un sito web per aiutare Google nell’indicizzazione).

IRC bot
Erano agenti software che operavano sulla chat internet basate sul protocollo Internet Relay Chat e che agivano come amministratori per aiutare gli utenti o per evitare comportamenti non consoni all’etichetta.

Video game bot
Questi ovviamente sono i più evoluti (come tutte le cose che riguardano il mondo dei video giochi) e possono essere prevalentemente di due tipi, bot statici e bot dinamici. I primi sono come quelli utilizzati in Quake 3 Arena dove avevano lo scopo di fronteggiare il protagonista nei vari livelli di addestramento. I bot dinamici invece hanno la capacità di imparare dinamicamente i vari livelli e le varie mappe di gioco come realizzato in Counter-Strike con i RealBot.

I bot arrivano da lontano. Lasciando stare il Test di Turing, uno dei primi interessanti esperimenti con i bot è sicuramente rappresentato da Eliza, un bot creato nel 1966 al MIT dal professor Joseph Weizenbaum con lo scopo di simulare una chiacchierata con una psicoterapista di nome Eliza. Di questo bot ne sono state fatte varie versioni anche per ambiente MS DOS nel corso degli anni 90.
Eliza simulava la conversazione usando un sistema di ricerca e sostituzione dei termini presenti nelle frasi della persona dando l’illusione che il programma capisse veramente il contenuto delle frasi.
Una curiosità che riguarda ELIZA è MELIZA, una sorta di easter egg presente in Google Earth che si può attivare posizionandosi su Marte (vicino alla Face of Mars) dove si può trovare una icona che, premendola, fa partire una chat con un presunto alieno che implementa le stesse funzioni del bot originale Eliza.
Rimanendo sempre negli anni ’90 è necessario citare anche A.L.I.C.E. (Artificial Linguistic Internet Computer Entity) sviluppata in AIML (Artificial Intelligence Markup Language).

Arrivando ai giorni nostri i bot si sono arricchiti della capacità di interpretare la lingua parlata, rispondere vocalmente utilizzando dei sintetizzatori vocali per trasformare il testo in parole e utilizzando algoritmi per la machine learning per espandere autonomamente le proprie capacità.
Si arriva infatti nel 2012 a Google Now e nel 2015 a Alexa e Cortana. Nel 2016 sono arrivati anche i bot per la piattaforma Messenger di Facebook in risposta ai bot di Telegram.

Nel 2016 la Microsoft aveva rilasciato su Twitter il bot TAY (Thinking Bout You) ma a causa di tweet offensivi e dal contenuto polemico la Microsoft è stata costretta a chiudere il servizio dopo solo 16 ore dal lancio.

Infine, direi che merita una menzione d’onore il bot LSJBOT (codice sorgente)creato dal professore svedese Sverker Johansson per creare in modo autonomo delle pagine per la versione Svedese di Wikipedia. Il bot è in grado di generare fino a 10.000 articoli al giorno e questo ha portato l’edizione svedese ad essere la seconda edizione a raggiungere i 2 milioni di articoli.

Direi che ho detto tutto.
Quindi, i bot sono agenti software che arrivano da lontano, si sono evoluti utilizzando sempre di più l’intelligenza artificiale e imparando ad utilizzare l’udito e la parola e possono fare praticamente qualsiasi cosa.

Adesso che il Mangiatore di Quiche mi ha provocato, mi sta venendo voglia di provare a creare un bot per Telegram.
Le sue applicazione possono essere le più varie… il bot può gestire richieste di documenti da remoto, può essere utile per interfacciasi con il computer di casa e può fornire assistenza a 360°.

Un’ultima nota folkloristica… con tutti i chat bot ci scambi al massimo 10 frasi… dopo ti viene voglia di offenderli e il discorso degenera velocemente. Provare per credere.

Permanent link to this article: http://www.andrea.rustichelli.name/robotomizzati-analisi-di-una-mania-robotica/

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/