a-Shell e Comandi rapidi: come automatizzare un bot Telegram da iPad a riga di comando
In questo articolo ne approfitterò per parlarvi dell’app open-source a-Shell e di alcuni suoi possibili utilizzi con Comandi Rapidi (Shortcuts). Il problema che ho cercato di risolvere è decisamente specifico ma credo possa mostrare le potenzialità dell'integrazione di a-Shell e Comandi Rapidi.
1. Il problema
Chi mi legge da tempo sa che è presente un canale Telegram di Avvocati e Mac. È stata una positiva sorpresa perché grazie ad esso ho potuto conoscere tanti lettori e, soprattutto, tante persone esperte di tecnologia non solo Apple. Il problema Telegram, così come altre applicazioni di messaggistica (che non ho e non installo sui miei dispositivi), è che è potenzialmente una fonte di distrazione.
Per questo motivo ho disinstallato Telegram dal mio iPad (Pro).
Ho lasciato Telegram installato (e silenziato) solo sui Mac (sulla scrivania virtuale con i software che possono distrarmi e dove posso andare solo “volontariamente”) ed in caso di necessità su iPhone, anche qui con vari limiti ed in una sotto cartella per rendermi l’accesso più “difficile”.
Sì lo so, sono un pelino maniacale ma mi conosco e so di non aver una grossa forza di volontà su queste cose … prevenire è meglio che curare!
In questo periodo (dove la mobilità è praticamente inesistente e dove ho postazioni fisse di lavoro sia in ufficio che a casa) l’iPad è il mio strumento principale di consumo di informazioni:
- Lettura: sto cercando di utilizzare solo strumenti digitali ed in particolare MarginNote 3 per le letture “impegnate”, ma questo eventualmente sarà l’oggetto di un futuro articolo;
- Navigazione web;
- Visione di video su YouTube: utile per scoprire ed approfondire argomenti vari ma fonte di possibili distrazioni soprattutto a fine giornata quando mi rilasso e guardo video legate alle mie varie passioni.
A fronte di ciò l’iPad è il mezzo con cui scopro la maggior parte delle cose che voglio condividere. Tuttavia, proprio per i vincoli che mi sono auto-imposto, ogni tanto mi sento limitato a non poter condividere direttamente sul canale Telegram di Avvocati e Mac.
2. Prima possibile soluzione
Una possibile soluzione (che ho anche usato inizialmente) è quella del passaggio dati tra iPad e iPhone. In pratica, se voglio condividere un link su Telegram, posso copiarlo negli appunti dell’iPad, recuperare l’iPhone (dove ho installato Telegram) aprire l’app e incollare il link.
Come, mi domanderete?
È una funzione (non troppo conosciuta) di iOS / iPadOS e macOS che permette di condivisione gli appunti tra più dispositivi.
Se volete approfondire, qui trovate la guida di Apple.
Come potete immaginare dalla descrizione dei passaggi questa soluzione, pur percorribile, è complicata e, spesso, poco pratica per me. Sia in casa che in ufficio ho l’iPhone lontano da me (sì, sempre evitare tentazioni inutili!).
3. Seconda soluzione
La seconda soluzione che mi sono “inventato” è decisamente più complessa da mettere in piedi ma, nella pratica, è molto più fluida e richiede meno passaggi.
Ho quindi usato un bot di Telegram che, attraverso uno script open-source in Python, pubblica sul canale link od altro materiale che ritengo di interesse condividere con gli iscritti.
3.1 Lo script in Python
Qui trovate lo script in Python che ha dato il là a tutta la mia configurazione. Non entrerò in dettaglio su come funziona lo script (non credo che possa interessare ai più) e le istruzioni in inglese della pagina di GitHub del progetto sono relativamente semplici. Tra l’altro è possibile installare lo script attraverso pip di cui vi ho parlato in questo articolo.
3.2. a-Shell in soccorso
Come potrete immaginare uno script in Python è tutto fuorché utile su di un iPad che non ha un terminale come in macOS … sbagliato!
Esistono svariate applicazioni che, con differenti limitazioni, ci permettono di utilizzare un interprete Python su iOS / iPadOS.
Sarebbe infatti possibile usare Pythonista o iSH giusto per nominarne alcune ma, per gli scopi che mi ero prefissato (semplicità ed automazione), ho fin da subito pensato ad a-Shell.
4. a-Shell
Vi ho già parlato (incidentalmente) di questa applicazione in una puntata del podcast ma con questo articolo cercherò di approfondire un po' il suo funzionamento e perché mi interessa tanto.
Che cos’è a-Shell?
È un progetto open-source del bravo Nicolas Holzschuch ricercatore francese dell’INRIA (National Institute for Research in Digital Science and Technology).
L'idea di fondo è aver un semplice Terminale su iOS /iPadOS. Io l’ho scoperto perché tra i vari programmi presenti in a-Shell (che non ricomprende tutti i comandi a terminale GNU allo stato) ci sono anche Vim e LaTeX.
Attualmente non utilizzo a-Shell per Vim in ragione del fatto che sono abituato a personalizzarlo molto e (allo stato) la mia soluzione più semplice è lavorare in remoto con Secure Shell-Fish.
4.1 Le funzioni interessanti di a-Shell
Per motivi di spazio non potrò approfondire tutti gli aspetti di a-Shell in questo articolo ma credo ce ne siano alcuni che meritino un accenno.
Anzitutto la possibilità di accedere al file System di iOS / iPad OS.
Utilizzando il comando:
pickFolder
è infatti possibile aprire una finestra di dialogo di iOS / iPadOS da cui scegliere una cartella (con relativi documenti e sotto cartella) da poter visualizzare in a-Shell (come si vede nell’immagine sottostante).
a-Shell utilizzata le funzioni più avanzate di condivisione e quindi le modifiche fatte da a-Shell sono sul posto, ovvero direttamente nella cartella e sui documenti in essi contenuti e senza duplicare il documento lavorato.
Come vedete dall’immagine soprastante, tuttavia, non tutti i document provider di iOS / iPadOS permettono la condivisione con apertura sul posto delle cartelle. Oltre ad iCloud sono attivi sul mio iPad le applicazioni Working Copy e Secure ShellFish del buon Anders Borum.
a-Shell inoltre implementa il nuovo sistema di bookmark delle cartelle di iOS / iPadOS
Recentemente, Holzschuch, ha aggiunto anche la possibilità di ampliare il parco dei comandi con WebAssembly, non entro nel dettaglio perché lo ammetto entriamo in un campo troppo complesso per me ma, nella pratica, ciò permette di implementare all’interno di a-Shell altri comandi del sistema GNU come, ad esempio, ffmpeg (strumento di codifica e compressione video open-source).
Oltre a ciò a-Shell, come vi ho accennato precedentemente, ha un interprete Python con la conseguente possibilità di utilizzare pip (il packet manager di Python).
Infine a-Shell integra anche la possibilità di automatizzare il lancio di un comando od una serie di comandi del terminale attraverso Comandi Rapidi.
Ho usato proprio queste ultime due funzioni del programma per creare le mie specifiche automazioni.
5. I Comandi rapidi che ho creato
5.1 Attività preparatoria in a-Shell
La prima cosa da fare è installare telegram-send
in a-Shell.
Per fare questo basta aprire l’applicazione e digitare (o copia incollare):
pip3 install telegram-send
A questo punto c'è da configurare il bot di Telegram, non sto qui a spiegarvi come anzitutto perché non sono un esperto e secondariamente perché è possibile trovare su internet infinite guide sul punto.
Nel mio caso ho lanciato il comando di configurazione del bot in a-Shell come segue (mi interessava un bot all’interno di un canale).
telegram-send --configure-channel
Sarà necessario, quindi, inserire il token segreto del bot e fare la configurazione all’interno del canale.
Finita l’installazione e configurazione il comando di base da utilizzare è semplicissimo:
telegram-send "Testo che si vuole inviare"
Io ho fatto qualche test dall’interfaccia di a-Shell per controllare che tutto funzionasse ma, ovviamente, aprire a-Shell ogni volta che voglio scrivere qualcosa su Telegram non è proprio comodo.
È così che mi sono dedicato a creare il primo comando rapido.
5.2 Inviare un messaggio sul canale Telegram di Avvocati e Mac
Non entrerò nel dettaglio del comando, che trovate rappresentato nell’immagine sottostante ma spiegherò per sommi capi il suo funzionamento di base e le cose a cui stare attenti.
La prima cosa che fa il comando rapido è di richiedere un input dall’utente ovvero il testo da condividere (sia esso un link che del testo semplice).
Piccola nota sul punto: il testo da inserire deve essere una riga continua, altrimenti a-Shell lo interpreterà come una serie di comandi differenti.
A questo punto il testo salvato in una variabile viene unito al comando principale che voglio far eseguire ad a-Shell telgram-send
. Inizialmente ho avuto qualche problema a far funzionare correttamente questo passaggio nell’azione successiva (quella che invoca effettivamente il comando all’interno di a-Shell). Come ho già detto, l’azione di a-Shell che lancia un comando a terminale vede ogni singola riga come un comando, se si inserisce il comando telegram-send
e la varibile dell’input fornito dall’utente, il comando viene suddiviso in due differenti comandi e da, ovviamente, errore.
A questo punto utilizzando l'apposita azione il comando rapido lancia il comando a terminale in a-Shell. Sarebbe più comodo senza aprire l’app, ma dopo una serie di test ho notato che con questa impostazione non sempre tutto funzionava correttamente e, quindi, ho lasciato l’opzione di base che fa scegliere direttamente ad a-Shell come procedere.
L'unico inconveniente di tutto ciò è che il comando rapido così creato una volta lanciato lancia anche a-Shell e ci si sposta quindi dall’applicazione che avevamo aperto in precedenza. Fastidioso ma molto più semplice di dover fare il passaggio da iPad a iPhone e ritorno.
5.3 Inviare un’immagine sul canale Telegram di Avvocati e Mac
Non pago di questo risultato mi è venuto anche in mente che, a volte, voglio condividere delle immagini (spesso catture dello schermo dell’iPad) su Telegram. Con telegram-send
è possibile fare anche questo e, così, mi sono cimentato nella creazione di un più complesso comando rapido.
Per fare questo ho usato un’altra azione messa a disposizione da a-Shell in Comandi rapidi: Put file ovvero invia un documento (ad a-Shell). Questa azione permette di salvare nella cartella di lavoro di a-Shell dei documenti (lo ricordo ma su iOS / iPadOS essendo ogni applicazione isolata è necessario passare i documenti in questo modo se non si utilizza il sistema più avanzato della condivisione dei documenti che, come dicevo sopra, non è sempre implementato al meglio da tutte le app).
Ho, quindi, creato un comando rapido che funziona come estensione (prevedendo di utilizzarla all’interno di Foto o passando la cattura schermo direttamente dall’applicazione di cattura di iOS / iPAdOS), nel mio caso che accetta solo immagini.
L’immagine acquisita dal comando rapido viene salvata nella cartella principale (root) di a-Shell.
A questo punto usando il comando telegram-send --image
ed avendo salvato il nome dell’immagine originariamente catturata in una variabile, costruisco il comando finale, un azione di testo, ed invio il tutto con l’azione che abbiamo visto prima.
Potevo fermarmi qui, ma conoscendomi col tempo avrei riempito la cartella principale di a-Shell con inutili duplicati di immagini che già avevo altrove.
Ho quindi inserito una ulteriore serie di azioni per fare “pulizia” automaticamente.
Il comando rapido quindi una volta inviata l’immagina al canale Telegram aspetta 2 secondi (giusto per essere sicuro che l’immagine sia inviata correttamente dopo il suo salvataggio nella cartella principale di a-Shell) e poi viene cancellata utilizzando l’invio di un semplice comando a terminale rm
, ovvero remove (cancella), ed il nome dell’immagine.
In conclusione
Lo ammetto, i comandi rapidi spiegati saranno “inutili” per molti di voi, nel senso che ho creato qualcosa di molto legato alle mie specifiche esigenze.
Tuttavia ciò mi ha permesso di mostrare le possibilità di a-Shell ovvero:
- Gratuito ed open-source
- Integrazione profonda con iOS / iPadOS
- Comandi Rapidi
- Possibilità di accedere al file System di iOS / iPadOS
Sono ancora in attesa (me lo ha “promesso” lo sviluppatore) di avere Pandoc oltre che LaTeX in a-Shell così finalmente potendo creare atti telematici completamente off-line su iPad.
Come sempre: se avete domande, richieste di chiarimenti o idee da condividere lo potete fare nei commenti qui sotto oppure scrivendomi una email.