blog personale

Archivi di AutoIt & Batchs category

The GPS enabled Nokia devices support a xml-based file format (LMX) for the map locations.

I’ve written a simple script for transforming the google maps links (just copying the full link in the form field) to the corresponding lmx file (you can send it to your mobile  via bluetooth, by copying in phone memory, by downloading with phone browser, etc..).

This lmx file script has only been tested with the mobile nokia n95 (Nokia Map Loader) via bluetooth.

Here is the online lmx generator tool:
http://www.elvisciotti.it/apps/gmaps2lmx/index.php
Enjoy… and let me know if it works !

Spesso è necessario scambiarsi files di dimensioni notevoli tra computer fisicamente distanti ma connessi tramite Internet.
Fondamentalmente gli approcci per risolvere il problema sono 2:

  1. In 2 tempi: prima caricate il file da qualche parte, poi dite all’amico destinatario dove prenderlo. Rientra in questa categoria l’invio tramite e-mail (soluzione accettabile solo per pochi Mb) o l’utilizzo di servizi tipo megaupload o rapidshare (limite sulla dimensione massima o necessità di spezzare il file in più parti). Metodo apparentemente semplice ma non troppo in alcuni casi.
    Problemi comuni: E’ necessario aspettare il tempo di caricamento prima che l’amico possa iniziare a scaricare: complessivamente cioè ci vuole molto tempo, considerato che la velocità in upload di una tradizione connessione ADSL è molto bassa.
  2. Connessione diretta: in pratica l’amico inizia a scaricare direttamente dal vostro PC. Trascurando il trasferimento con  Skype/Msn messenger (lento e con probabilità di timeout), ad esempio voi fate partire un FTP o HTTP server con il file disponibile, quindi date all’amico il vostro IP pubblico.
    Vantaggi: velocità di trasferimento complessiva massimizzata (l’amico inizia a scaricare subito alla vostra massima velocità in upload).
    Problemi:  Non semplice da configurare e non conveniente per utilizzarlo poche volte, inoltre l’impossibilità di configurare il router del mittente (o gli altri router intermedi) e aprire le porte del firewall rende impossibile la connessione diretta (a parte VPN o altri meccanismi non generalmente semplici).

In realtà esiste una soluzione che consente di trasferire i files direttamente (velocità massima), anche con uno o più router/firewall intermedi, senza installare nulla da ambo le parti e molto velocemente: Bittorrent !

E sufficiente creare il torrent dal file nel proprio pc, quindi inviarlo all’amico (pochi kb) tramite e-mail o client di messaggistica.

L’amico apre il torrent e inizia a scaricare subito. Potete anche traferire il file tra più amici, e i tempi diminuiranno ulterioremente (ogni amico scaricherà parti anche dagli altri amici), avendo in effetti una rete P2P tra di voi.

Potete anche decidere il limite di upload e settare altre opzioni dal programma torrent.

Questo metodo è stato testato con il gratuito, funzionale e no-install UTorrent. Ecco la semplice procedura: Dal menu “File” -> “Crea nuovo torrent”, scegliere il file, inviare il file “.torrent” creato all’amico, impostare la velocità di upload ed eventualmente forzare l’avvio col tasto destro (il torrent creato appare nel vostro elenco in “seeding”). Vedi screenshot (click per ingrandire).

 

Seeding con UTorrent

Seeding con UTorrent

Esplora risorse (file manager di windows dalla versione 9x) ha una interessante opzione a linea di comando:
explorer.exe /e,/root,c:\cartella
permette di lanciare esplora risorse con l’albero delle directory (sulla sinistra) che parte dalla cartella c:\cartella, cosa molto utile quando si lavora molto con la struttura della cartelle e i files in QUELLA cartella.

Dal registro, si può creare una nuova voce in HKEY_CLASSES_ROOT\Directory e dargli il comando con %1 (cartella corrente), vedi screenshot

Upload FTP

Vista la buona riuscita del planet S.P.R.I.Te. e il conseguente scambio di opinioni su vari argomenti tecnico/geek, propongo un mio modo per uploadare velocemente le modifiche a un sito, curioso di conoscere vostre alternative al tutto.

Esigenza: uploadare VELOCEMENTE* gli ultimi file modificati (anche in sottocartelle), nei rispettivi path remoti (struttura dirs mantenuta), sovrascrivendo (se necessario) i files. Esigenza che deriva dallo sviluppo di applicazioni già funzionanti e da testare online.
* Con un batch in pochi secondi, i files più recenti sono sempre sul pc in locale. Supponiamo di avere in locale una cartella di sorgenti di vari Mb e se no modifica solo 1 in una sottocartella.

Mio Metodo: con un batch (autoit + winrar + winscp scripting):

  • winrar crea un archivio con i files modificati negli ultimi N minuti (N chiesto a prompt). Winrar riesce in pochissimo tempo a analizzare gli ultimi files modificati (sottocartelle comprese) dopo una certa data/ora (tempo di molto inferiore al controllo manuale su ogni file da parte del batch).
  • decompressione archivio in cartella temporanea
  • upload della cartella temporanea tramite winscp scripting (connette, upload cartella e sottocartelle, sconnette).
  • se l’operazione riesce, scrivo un file con il timestamp dell’upload, così la volta successiva non viene chiesto nessun input dei minuti al passo 1

Personalizzazioni: apertura finestra winrar con l’archivio creato, così si possono modificare i file da caricare o no.
Aggiunte: creazione file con elenco siti, path e relativi profili di connessione winscp. Programmino autoit che mostra l’elenco dei siti, quindi con n click su questi lancia il batch sul sito selezionato e lo aggiorna (img a lato).

Alternative:

  • comparazione directory winscp: funzione che controlla le date dei files. Lenta in caso delle sottocartelle.
  • rsyinc: funziona solo su shell linux, ne parlano spesso ma non l’ho mai provata, sviluppando su windows

Altre idee o soluzioni pronte ?

Autoit toolbar

La vasta comunità di autoit ha creato una utile toolbar per il browser, praticamente indispensabile quando si creano script avanzati e si cercano continuamente nuove funzionalità
Funzioni:

  • ricerca nel forum autoitscript.com/forum
  • ricerca in altri motori
  • link a homepage, documentazione online, link a comparsa alle sezioni del forum
  • news RSS ultimi post dal forum e dalla homepage
  • segnalazione ultima versione \

http://autoitscript.communitytoolbars.com/

Trasformare il testo in minuscolo

dovete copiare un testo scritto in caratteri MAIUSCOLI e il vostro editor non ha una funzione di conversione in minuscolo ?

Per evitare di aprire word o simili e usare questa funzione, si può creare uno script con AutoIt (vedi articolo su questo blog) per eseguire la funzione in una sola riga:

ClipPut(StringLower (ClipGet()))

Per usarlo: copiate negli appunti la stringa scritta in maiuscolo, poi lanciate il programma, adesso gli appunti contengono la stessa stringa ma in minuscolo, quindi incollate.

Eseguibile già compilato: ToLower.exe 200 Kb

Il linguaggio AutoIt

Questo articolo è già stato pubblicato su sprite magazine n.3, lo ricopio qui per permettere commenti e future espansioni/modifiche.

AutoIt (versione 3.1.1 - http://www.autoitscript.com/autoit3) è un semplice e potentissimo linguaggio di script per automatizzare le operazioni eseguite in windows. E’ gratuito e comprende funzioni per gestire mouse e tastiera, creare finestre con i controlli (bottoni, menu, spider, caselle di testo, pulsanti radio e checkbox…), manipolare files, processi, registro di sistema. Comprende una vasta libreria di funzioni matematiche, manipolazione di stringhe e array. Supporta strutture di controllo (if-then-else, While, For …), funzioni, costanti globali e inclusione di librerie. E’ possibile compilare lo script in un comodo file eseguibile di pochi Kb che non necessita di nessun file o dll esterna.
L’ultima versione di AutoIt comprende al suo interno l’editor SciTe (http://www.scintilla.org), anch’esso gratuito, con vari plugin per AutoIt.
L’editor autocompleta i nomi delle funzioni e variabili già inserite, presenta strumenti grafici per creare interfaccie GUI, offre un sistema di debug per il codice e altri tantissimi utili tools.

Con l’ambiente descritto riusciamo a creare in poco tempo programmi di vario tipo molto utili e facilmente ridistribuibili, da semplici script di gestione file a mini-gestionali.

In questo articolo costruiamo – attraverso un breve tutorial - una semplice (per motivi di spazio sul giornalino!) applicazione che si interfaccia con una pagina php online e permette di inserire e gestire news in un sito web.
Prima di iniziare qualche nozione sulla sintassi del linguaggio rispetto ai linguaggi che già conosciamo:
Le variabili devono essere precedute dal simbolo del dollaro ($), le righe di commento precedute da punto e virgola, non serve punto e virgola alla fine di ogni riga, le stringhe sono delimitate da doppi apici, per concatenare due stringhe usare l’operatore ‘&’.

1 - creazione interfaccia grafica

Creiamo un file con estensione AU3 e apriamolo con SciTe. Dal menu Tools scegliamo ‘GUI Builder’ e disegniamo più o meno il form che vedete in figura. Una volta fatto, clicchiamo su Exit per vedere inserito il codice nel nostro script.

il-linguaggio-autoit-e-il-web_html_72a4cee5.gif
il-linguaggio-autoit-e-il-web_html_m1b697b9e.gif

Il codice creato dal tool crea la finestra e i controlli disegnati attraverso le funzioni GuiCreate (vedi manuale), assegnati eventualmente ad una variabile per essere poi gestiti successivamente. Copio il codice qui sotto. Come vedete ho assegnato variabili solo a aree di testo (Edit) o bottoni (Button) con nomi significativi in modo da poterli poi richiamare e gestire successivamente.

GuiCreate("Gestione news sito", 420, 301,-1, -1)

GuiCtrlCreateGroup("Inserisci news", 10, 20, 210, 190)
$testo_news = GuiCtrlCreateEdit("", 20, 40, 190, 90)
$data_news = GuiCtrlCreateDate("Date4", 20, 140, 190, 20)
$bott_inserisci = GuiCtrlCreateButton("Inserisci", 20, 170, 60, 30)

GuiCtrlCreateGroup("Cancella news", 10, 220, 210, 50)
$id_delete = GuiCtrlCreateInput("", 100, 240, 50, 20)
GuiCtrlCreateLabel("Inserisci id:", 25, 244, 65, 20)
$bott_cancella = GuiCtrlCreateButton("ok", 170, 240, 30, 20)

GuiCtrlCreateGroup("News inserite", 230, 20, 180, 250)
$text_elenco_news_inserite = GuiCtrlCreateEdit("", 240, 40, 160, 200)
$bott_ricarica = GuiCtrlCreateButton("Ricarica dal sito", 265, 244, 90, 20)

2 – come associare funzioni ai pulsanti

Avrete notato che dopo il codice sopra riportato viene inserito un ciclo while in cui viene chiamata la funzione GuiGetMsg(), che restituisce l’identificativo del pulsante premuto. Qui dentro è possibile associare le funzioni dei vari pulsanti attraverso il Select..Case sui vari controlli.

While 1
	$msg = GuiGetMsg()
	Select
	Case $msg = $GUI_EVENT_CLOSE
		ExitLoop
	Case Else
		;;;
	EndSelect
WEnd

Esempio:

Case $msg = $bott_inserisci
 		[… codice eseguito quando si clicca sul bottone ‘Inserisci’]

3 - Creazione pagina php

La comunicazione fra il nostro script e php avviene di nascosto con il metodo GET.
In pratica per inserire la news chiamiamo pagina.php?insert= e per vedere le news inserite scarichiamo via http il contenuto di pagina.php (che restituisce l’elenco delle news) e lo inseriamo nella area di testo a destra.
Per semplicità manteniamo l’elenco delle news su un file di testo, piuttosto che in un database.

4 - Funzioni associate al pulsante “inserisci”

L’azione da associare al pulsante ‘inserisci’ (cioè dopo Case $msg = $bott_inserisci) è la seguente:

$news_inserita = StringStripWS (GUICtrlRead ( $testo_news), 7 )
$news_inserita = StringReplace ( $news_inserita, "&"  , "&")
$news_inserita = StringReplace ( $news_inserita, "<"  , "<")
$news_inserita = StringReplace ( $news_inserita, ">"  ,
">"$news_inserita = StringReplace ( $news_inserita, "?"  , "?")
$news_inserita = StringReplace ( $news_inserita, "€"  , "€")
$news_inserita = StringReplace ( $news_inserita, "°"  , "°")
$news_inserita = StringReplace ( $news_inserita, @CR  , "")
$news_inserita = $news_inserita & " - " & GUICtrlRead($data_news) 

If $news_inserita <> "" Then
InetGet ("http://www.sito.it/pagina.php?insert=" & $news_inserita, "down.tmp", 1 )
MsgBox(0,"","inserimento ok", 2);
Else
MsgBox(0,"","Testo non inserito");
EndIf

Cioè prendiamo il testo dall’area di testo (funzione GUICtrlRead), ed elaboriamo la stringa (doppi spazi, codifica per passare il testo nella URL per la pagina php), aggiungiamo la data letta dal relativo controllo, poi chiamiamo via http (funzione InetGet) la pagina php passando nella URL la stringa elaborata.

5- Funzione associata al pulsante ‘Ricarica dal sito’

Nel relativo Case (Case $msg = $bott_ricarica) dobbiamo semplicemente scaricare il file e caricare il suo contenuto nell’area di testo a destra (funzione GUICtrlSetData ).

InetGet ("http://www.sito.it/pagina.php", "down.dat", 1 )
$file = FileOpen("down.dat", 0)
$news_from_sito=""
While 1
$news_from_sito = $news_from_sito & FileRead($file, 1)
If @error = -1 Then ExitLoop
Wend
$news_from_sito = StringReplace ( $news_from_sito, ""  , @CRLF)
GUICtrlSetData ($text_elenco_news_inserite,   $news_from_sito )

6 - completamento e creazione eseguibile

Il meccanismo della cancellazione avviene in modo simile all’inserimento, cioè passando come parametro l’identificativo della news da cancellare, poi la pagina php si preoccuperà di cancellarla effettivamente.
Il programmino può essere poi ampliato per esempio inserendo una password per l’utilizzo e per il passaggio di parametri alla pagina php.
Ciccando col tasto destro sul file au3 e scegliendo “Compile Script” viene generato in pochi Kb l’eseguibile funzionante, forte, eh ?

Conclusioni

Le potenzialità e semplicità di AutoIt lo rende - in alcuni casi - più comodo di altri linguaggi e relativi ambienti di sviluppo.
Consultate il sito di AutoIt, il suo forum e provate a utilizzarlo… sono sicuro che prima o poi vi tornino utili le sue funzionalità. Date un’occhiata anche al sito dell’editor SciTe, supporta molti linguaggi con relativi tools ed è un software veramente valido che sicuramente apprezzerete.
Se volete il codice completo del piccolo esempio fatto o maggiori informazioni non esitate a contattarmi.
Buon lavoro, programmatori !


 

Ultimi post

About Me

Blog tecnico/geek di Elvis. Chi sono ? studente & web developer freelance. Vedi la pagina "about me" per altre info.

scontiPHP