Tag Archive for 'commandline'

Page 2 of 2

Enso diventa OpenSource

Il team di Humanized ha deciso di rilasciare Enso, un software nato per semplificare l’usabilità, con . La decisione è maturata per permettere agli sviluppatori di aggiungere comandi per far interagire Enso con le proprie applicazioni, Enso infatti, è nato per garantire una migliore usabilità dei software e la sua utilità è direttamente proporzionale al numero di quelli con cui riuscirà ad integrarsi, citando dal blog di Humanized:

Why are we doing this?

For Enso to have a chance of becoming the universal tool that we envisioned, it has to be compatible with an ever-expanding number of applications as well as providing an ever-expanding number of commands. For instance, there’s a program called GVim; Enso’s text-selection commands are currently incompatible with GVim because the latter has a unique way of handling text selections. A few users have complained to us about this, and while we’re sympathetic, we’ve had to pull a Spock and say “The needs of the many outweigh the needs of the few” as we focused the limited resources of our 4-person development team on getting the most popular commands to work with the most popular applications. The closed-source development model limits what we can do. It doesn’t scale well to the problem of an ever-expanding number of applications and an ever-expanding number of commands

Ora che è Opensource è anche possibile che presto venga resa disponibile una versione per altri sistemi operativi. Cosa che non mi sarei mai aspettato: il codice sorgente è in Python, il più umano dei linguaggi di programmazione e di sicuro quello che al momento conosco un po’ meglio. Non che abbia aspirazioni di sviluppare il codice, ma se vedo che creare comandi è relativamente semplice un pensierino ce lo posso fare :-) .

Per chi non lo conosce, Enso è un tentativo di superare le limitazioni delle attuali interfacce utente proposte dai sistemi operativi, un modo per integrare alle interfacce grafiche la praticità della vecchia linea di comando, che se si sa cosa si vuol fare permette di farlo in maniera molto più veloce. Per ora le uniche due componenti rilasciate come release sono il launcher ed Enso Word (un correttore ortografico globale), ma molte altre vengono rese disponibili in versione beta. Anche se, come app launcher puro e semplice preferisco Launchy, le potenzialità di Enso, soprattutto ora che è OpenSource, sono maggiori e vanno ben oltre la semplice apertura di applicazioni.

Per fare un esempio una delle componenti permette di controllare il proprio player preferito, un’altra di operare traduzioni al volo e così via, tutto questo senza la necessità di aprire il player o il browser ed usare Google Translate.

Per esempio vediamo come si può tradurre dall’inglese all’italiano del testo senza lasciare il text editor in uso o senza aprire una scheda del browser per usare Google Translate. Bene, selezioniamo il testo da tradurre, premiamo CAPSLOCK digitando il comando:

translate to italian

Screenshot di Enso. nell'immagine si vede cosa accade quando si preme CAPSLOCK e si digita il comndo tranlsate

Si noti che non è necessario digitare il comando per intero, è sufficiente digitare le lettere iniziali del comando e l’autocompletamento farà il resto.. Il risultato verrà sostituito al testo selezionato se ci si trova all’interno di un text editor o in una textarea del browser, altrimenti verrà aperta una finestrella che riporterà il testo tradotto.

Non è però che sia tutto rose e fiori :-P . Il traduttore ha almeno un paio di problemi:

  • il risultato della traduzione non è sempre eccelso (credo usi Google Translate), e comunque questo non è un problema imputabile a Enso :-P ;
  • c’è un grosso problema con l’encoding dei caratteri, le accentate ad esempio vengono sostituite da dei punti di domanda :-P ;

il traduttore è comunque in versione Beta ed è quindi probabile che venga migliorato al più presto.

A chi volesse installarlo consiglio di iniziare con il solo Launcher ed eventualmente di installare tutte le componenti solo dopo aver fatto un po’ di pratica con il funzionamento del software. Al momento – purtroppo – non è possibile disinstallare le componenti singolarmente. A prescindere dalle componenti installate è possibile ottenere l’elenco dei comandi attivi premendo CAPSLOCK digitando il comando: commandlist..

Technorati Tags: , , ,

Recensione di iswitch-tabs, estensione per Firefox che permette di aprire le schede in modo più semplice

Oggi, dopo un bel po’ di tempo che non scrivo su questo blog, vorrei presentare un’estensione che, a mio parere, va nella giusta direzione: cioè quella di rendere più usabile un’applicazione. Niente di che, dirà qualcuno, però secondo me l’idea di questa estensione è geniale, anche se non è fra quelle pubblicizzate su Firefox Addons (pure nome gli hanno cambiato e non a caso credo ::-P ). Fra parentesi, mi piacerebbe sapere chi sceglie i « Componenti aggiuntivi consigliati», no perchè io di quelli consigliati non ne installerei nemmeno uno :-P .

L’estensione si chiama iswitchbtabs e permette di fare una cosa semplicissima: accedere alle schede aperte usando solamente la tastiera. Lo sviluppatore Chris Danis si è ispirato al famoso editor di testo su piattaforma Linux: Emacs (che non ho mai imparato ad usare :-P ) che ha una feature simile. In pratica è sufficiente premere F9 per far apparire una finestrella con elencate tutte le schede aperte in quel momento:

Screenshot della schermata di iswitchb-tabs che mostra le schede aperte in Mozilla Firefox

iniziando a digitare del testo l’elenco delle schede comincerà a ridursi mostrando solamente quelle che soddisferanno il pattern digitato, dando invio si aprirà la prima scheda che appare nella lista. Perchè questo dovrebbe essere utile ? Ecco qualche buon motivo:

  • se le schede aperte sono tante, il loro nome è tagliato, a volte rimangono solo poche lettere visibili (il numero delle schede aperte può variare a seconda della risoluzione dello schermo o del tema utilizzato). Questo ovviamente rende complicato riconoscerle;
  • si può tranquillamente fare a meno della barra delle schede;
  • anche dal punto di vista dell’accessibilità, credo, sia un ottimo metodo per muoversi velocemente fra le schede.

L’unica cosa che, secondo me, potrebbe essere migliorata è quella di proporre le schede aperte in un menu a scomparsa nella barra di stato anzichè in una finestra popup (like Nostalgy for TB). . In realtà, sto anche cercando di fare questa piccola modifica prendendo spunto dalle due estensioni in oggetto, ma sono ben lungi dal venirne a capo (avevo già richiesto nella mailing list di Nostalgy, la scorsa settimana ho messo pure un commento nella pagina di iswitchb-tabs su Firefox Addons ma senza risultati (il commento su A.M.O. è in attesa di moderazione :-P ).

In realtà, inizialmente avevo dei progetti più ambiziosi, però la mia scarsa conoscenza di Javascript e Xul mi ha fatto desistere :-P . Quello che volevo fare era rendere accessibili tutti i menu di Firefox (File, Visualizza, Strumenti…) usando l’autocompletamento, comunque ci ho rinunciato :-P . All’idea di modificare iswitchb-tabs per farla funzionare come Nostalgy invece, non ho ancora desistito :-P .

In realtà, io speravo che fosse possibile richiamare la scheda aperta in Firefox, e più in generale di tutte le applicazioni in uso, con Enso ma, almeno qui da me, non è possibile richiamare le schede, è invece possibile richiamare le finestre di qualunque applicazione in uso e per questo ha una sua ragione di rimanere installato :-) . Visto che, gli sviluppatori di Enso sono stati ingaggiati da Mozilla è comunque possibile che ci siano gradite novità a breve :-) .

Download: iswitchb-tabs.

Technorati Tags: , , ,

Fare una lista dei software installati da prompt dei comandi

In questa vecchia pagina viene spiegato un metodo per ottenere un elenco delle applicazioni installate su un sistema Windows. La cosa può tornare utile per farsene una stampa quando si vuole fare pulizia di software inutili che non ci si ricorda manco di aver installato.

Il metodo proposto è però assai lento: per recuperare il nome delle applicazioni installate infatti, viene analizzato più volte un file temporaneo in cui si sono salvate le informazioni lette dal registro di sistema. Usando Sed si può sveltire l’operazione in modo radicale e ottenere una lista dei software installati, che può essere poi scritta su carta o su un file, dando come parametro la periferica di output.

Installazione ed esempi di utilizzo

Se non avete installato Sed è necessario farlo prima di utilizzare la mia versione modificata dello script, se è già installato, lo script tenta di recuperarlo da “C:\Programmi\Gnuwin32\bin” o “C:\Cygwin\bin”. Se l’eseguibile non è in una di queste cartelle (o in una facente parte del PATH di sistema) sarà necessario mettere l’eseguibile nella stessa cartella in cui si è scompattato l’archivio 7z (o modificare il file BAT).

L’archivio contiene due file: uno è il file BAT vero e proprio (installedapps.bat), il secondo file un elenco di direttive che Sed applicherà per formattare correttamente l’output (cmd.sed).

Per usarlo è sufficiente scrivere da prompt dei comandi (o facendo un collegamento sul desktop):

C:\installedapps> installedapps

Questo è un esempio dell’output generato:

7-Zip 4.57
Adobe Flash Player Plugin
Adobe Shockwave Player
Adobe SVG Viewer 3.0
Agent Ransack Version 1.7.3
Album Art Downloader 0.6-alpha2
Avira AntiVir PersonalEdition Classic
AVG Anti-Spyware 7.5
AviSynth 2.5
CamStudio
CCleaner
CDex extraction audio
ClamWin Free Antivirus 0.90
Codice Fiscale 32-bit v4.21
Intel A/V Codecs V2.0
CommandBurner 3.3
COMODO Firewall Pro
Crimson Editor

Si può anche inviare l’output ad un file o alla stampante (PRN):

C:\installedapps> installedapps > log.txt

Se non volete scaricare l’archivio questo è il contenuto dei due file:

installedapps.bat

@echo off
PATH=%PATH%;C:\Programmi\gnuwin32\bin;c:\cygwin\bin
regedit /a %TEMP%\install.reg "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
sed -f cmd.sed %temp%\install.reg

volendo si può aggiungere una ulteriore riga finale per cancellare il file temporaneo:

del %TEMP%\install.reg

cmd.sed

/"DisplayName"/b matchpattern {
	d
	}
:matchpattern
s/"DisplayName"=\(.*\)/\1/
s/"//g
s/(remove only)//

Download

Archivio 7z con lo script
Gnuwin32 Homepage

Technorati Tags: , , , ,

Junction e link simbolici in Windows

In questo periodo in cui ho lavorato molto con le copie locali dei due blog, il vecchio con SPB ed il nuovo su WordPress, una delle cose che mi è tornata davvero utile sono i link simbolici o giunzioni (junction) che sono supportati su piattaforme Windows a patto che si stia usando una partizione con file system NTFS (quindi no Windows 98 e compagnia).

La situazione è la seguente: spesso e volentieri ci si trova ad aprire file situati in posizioni assurde, navigando fra le cartelle sono necessari una trentina di click prima di arrivarci e l’operazione la si deve ripetere più e più volte. Beh ci sono molti rimedi a questo problema, uno di questi è impostare una junction assegnando al la carrtella un percorso “umanamente accessibile :-)

Ma vediamo l’esempio pratico. Io mi ero trovato a dover lavorare con dei file che risiedevano in queste due cartelle:

C:\Programmi\Xampp\htdocs\Blog\
C:\Programmi\Xampp\htdocs\wordpress

senza contare che molte volte i file con cui operare erano situati in delle sottocartelle di questi percorsi, ad esempio:

C:\Programmi\Xampp\htdocs\wordpress\wp-content\themes\k2\styles

con la difficoltà di dover accedere di volta in volta a queste cartelle. Lo so che è possibile configurare Apache in modo da usare una qualunque cartella come localhost, e difatti su Windows 98 applicavo questa strategia, ma con una partizione NTFS esiste un metodo più semplice e cioè quello di creare un riferimento virtuale alla cartella utilizzando il comando junction, da riga di comando:

junction C:\localhost C:\Programmi\Xampp\htdocs\
junction  C:\k2 C:\Programmi\Xampp\htdocs\wordpress\wp-content\themes\k2

e da questo momento in poi sarà lo stesso scrivere C:\Programmi\Xampp\htdocs oppure C:\localhost. La cosa importante è che questa associazione varrà finchè formattazione non vi separi o la rimuoviate mediante il comando junction stesso (vedere l’help in linea). Si potrebbe usare anche il comando SUBST per associare ad un percorso una lettera di drive, ma oltre ad essere una scelta meno efficace (le lettere sono limitate ed è più difficile memorizzare la loro associazione con le cartelle), richiede che sia eseguito ogni volta che si riavvia il PC (autoexec.bat is deprecated in Windows XP :-P ).

La cosa potrebbe tornar utile anche a coloro che non hanno avuto l’accortezza di creare i profili di Firefox e Thunderbird in una seconda partizione (o ancora meglio spostare l’intera %appdata%), il profilo è solitamente allocato in una sottocartella di livello sette quindi associarlo ad un percorso C:\Profiloff non è affatto una cattiva idea quando si lavora con i file di configurazione :-) .

Consultando Google, sembra che nonostante Windows XP supporti i link simbolici, non esista all’interno del pacchetto base uno strumento per la loro creazione/gestione e che il pacchetto aggiuntivo minimale che si deve installare per poterli usare sia di svariati MB, con l’aggiunta di componenti che possono anche non servire affatto. Fu così che Mark Russinovich creò un piccolo applicativo di qualche Kb per poter gestire i link simbolici su XP :-) ., ora la sua azienda (SysInternal) software è parte integrante della Microsoft che l’ha acquisita circa un anno e mezzo fa. il download è gratuito ed in fase di primo avvio vi verrà richiesto di accettare la licenza, nei futuri usi non verrà più mostrato il fastidioso popup.

Il file junction.exe per poter essere usato a prescindere dalla posizione in cui ci si trova, è meglio sia messo in una cartella facente parte del PATH di sistema, ad esempio C:\Windows andrà bene.

Download: Junction

Technorati Tags: , ,

Usare Sed per recuperare le email "invisibili" in Thunderbird

Vediamo come si può usare una piccola utility da prompt dei comandi per recuperare le email cancellate per sbaglio da Mozilla thunderbird. Prendetelo come un semplice esercizio per imparare le regex o per imparare ad utilizzare sed. Per recuperare le email cancellate meglio usare un piccolo programmino che si chiama: Thunderbird Reset Status. Al momento Thunderbird Reset Status recupera le email ma perde eventuali marcature da parte dell’utente o stati di avvenuta risposta al messaggio, anche se Paolo Kaosmos, sviluppatore di moltissime utili estensioni per Firefox e Thunderbird nonchè moderatore sul forum di MozillaItalia, sta cercando di modificare il codice del programma per fare in modo che queste informazioni non vengano perse. Se siete interessati leggetevi questa discussione.

Prima di tutto bisogna spiegare cosa avviene quando un messaggio viene cancellato. Thunderbird in realtà non cancella il messaggio ma aumenta di otto unità il valore del parametro X-Mozilla-Status. Il messaggio, pur rimanendo nell’archivio, non verrà visualizzato da Thunderbird; per eliminare il messaggio dall’archivio è necessario compattare le cartelle. Dopo questa operazione il messaggio verrà definitivamente cancellato e non sarà più possibile recuperarlo. Se non si ha ancora compattato la cartella è quindi possibile recuperare le email “invisibili” diminuendo di otto unità il valore di X-Mozilla-Status.

In breve:

  • se il messaggio è stato letto l’ultima cifra di X-Mozilla-Status aumenta di uno;
  • se è stato risposto al messaggio,l’ultima cifra di X-Mozilla-Status aumenta di due;
  • se il messaggio viene marcato dall’utente, l’ultima cifra di X-Mozilla-Status viene aumentata di quattro unità;
  • se il messaggio viene cancellato l’ultima cifra di X-Mozilla-Status viene aumentata di otto.

Questo in sintesi, una spiegazione più accurata sui valori assunti da X-Mozilla-Status la trovate sul blog di pseudotecnico (link alla fine).

Ciò premesso, si può facilmente dedurre che tutti i messaggi cancellati hanno l’ultima cifra compresa fra 8 e F (valore esadecimale di 15=0001+0002+0004+0008).

E’ quindi sufficiente usare un editor di testo, modificare manualmente il valore di X-Mozilla-Status per recuperare le email cancellate. Naturalmente la cosa diventa abbastanza tediosa se le mail sono tante, senza togliere che gli editor di testo potrebbero avere problemi con file molto grossi. Bene, esiste un modo molto semplice per eseguire modifiche ad un file di testo senza editarlo, ed è utilizzare un editor di flusso come sed.

Bene, questo è il comando perrecuperare tutte le vostre email:

sed -e "/^X-Mozilla-Status:.*[89abcdef]$/{s/8$/0/;s/9$/1/;s/a$/2/;s/b$/3/;s/c$/4/;s/d$/5/;s/e$/6/;s/f$/7/}" prova. > prova2.

Su Linux probabilmente l’uso dell’apice singolo è preferibile rispetto all’uso dei doppi apici, su Windows l’uso dei doppi apici si rende necessario perché altrimenti viene ignorato il carattere ‘^’ che indica l’inizio della riga (in effetti è molto improbabile ci sia un matching da qualche altra parte ma giusto per essere precisi :-) )

Riga che dovete copiare nel prompt dei comandi, dove naturalmente al posto di “prova.”, dovrete inserire il nome dell’archivio di posta che contiene le email da recuperare (ad esempio “inbox.” per la cartella “Posta in arrivo”) e al posto di “prova2.” il nome dell’archivio in cui verranno salvate le email recuperate. Ovviamente il comando va dato dalla cartella in cui si trovano gli archivi di posta (di solito: Profilo/Mail/Local Folders) e facendo attenzione ad aggiungere la cartella di “sed.exe” al PATH di sistema. Se è arabo chiedetelo nei commenti : Alla fine ho inserito il link ad un vecchio post che vi permette di attivare il copia/incolla nel prompt dei comandi, nonchè attivare l’autocompletamento, in modo da non metterci una vita intera :-P .

ATTENZIONE: se non siete esperti, lasciate perdere questo post, ignoratelo tranquillamente e passate oltre che altrimenti poi se perdete le vostre email ve la prendete con me :-P .

Cerchiamo di capire cosa fa. Prima guardiamo il comando nella sua interezza e poi vedremo di spiegare il significato di quello che c’è dentro agli apici:

sed -e "/regex/comandi" prova. > prova2.

viene tradotto così: leggi il flusso proveniente dal file “prova.” e applicagli lo script racchiuso fra i doppi apici (significato dell’opzione -e), quindi scrivi il flusso processato nel file “prova2.”. E ora vediamo il significato di ciò che è racchiuso fra apici.. Ci sono due parti, la prima è una regex (espressione regolare) e la seconda una sequenza di comandi separati dal ‘;’. Traducendo, sed legge il flusso riga per riga, quando incontra una riga che soddisfa la regex la processa applicando i relativi comandi. La regex viene racchiusa (sempre fra ‘/’. Per chi non lo sapesse, ecco il significato di alcuni caratteri usati nella regex:

  • ^ indica l’inizio riga;
  • $ indica la fine della riga;
  • . un qualunque carattere;
  • * una qualunque ripetizione del carattere, .* è qualsiasi cos
  • [xyz] il carattere può essere uno fra quelli indicati fra parentesi quadre, nel nostro caso le cifre (esadecimali): 8,9,a,b,c,d,e,f.

Detto questo:

/^/X-Mozilla-Status:.*[89abcdef]$/

significa: applica i comandi solo alle righe che iniziano con ‘X-Mozilla-Status:’ e che finiscono con uno dei caratteri racchiusi fra parentesi quadre, a queste vengono dunque applicate una serie di sostituzioni mediante il comando ‘[b]s/ / /[/b]‘:

s/8$/0/;s/9$/1/;s/a$/2/;s/b$/3/;s/c$/4/;s/d$/5/;s/e$/6/;s/f$/7/

La sostituzione avviene (si veda l’uso del ‘$’ solo se il carattere si trova a fine riga. Si noti che se non si usasse questa accortezza, X-Mozilla-Status diventerebbe X-Mozillb-Stbtus e tutto andrebbe a farsi benedire.

Bene, un po’ contorto ma spero si capisca :-) . Se volete “vedere i messaggi che si vanno a recuperare con questo metodo, provate con:

sed -n -e "/^X-Mozilla-Status:.*[89abcdef]$/,/^From/p" pinbox.  | more

in questo caso non specificando una periferica di output verrà visualizzato tutto a schermo :-) . Naturalmente usare [strong]grep[/strong] è molto più sensato :-) .

Download:
Sed e Grep per Windows li trovate a questo indirizzo, potete scaricarli singolarmente o via getGnuWin32 che vi scaricherà un sacco di altri utili applicazioni da linea di comando. Chi usa Cygwin non serve faccia nulla perchè vengono installate di default.

Thunderbird Reset Status lo potete scaricare da se siete utenti Windows e da ] se state usando Linux.

Link di approfondimento:
Documentazione Sed (la seconda parte dell’articolo è la più interessante delle tre),
Spiegazione dei valori assunti dall’X-Mozilla-Status,
Grep, cose utili da sapere,
Abilitare il copia/incolla e l’autocompletamento nel prompt dei comandi (Windows).

Technorati Tags: , , ,

Nascondere un file in una immagine

Vediamo come si può “nascondere un file all’interno di un’immagine, la cosa potrebbe tornare utile ad esempio per inviare file non permessi dal server SMTP.

In questo tutorial viene spiegato come eseguire l’operazione con Winrar, che però non è un software gratuito quindi ho deciso di rifare la procedura usando 7-Zip:

Logo di 7-Zip
Una volta scaricato ed installato 7-zip, isogna innanzitutto comprimere il file da nascondere in un archivio e quindi unirlo all’immagine prescelta. La procedura è molto più rapida se eseguita da prompt dei comandi, quindi premere Windows-R e digitare cmd e dare invio.

Dal prompt dei comandi per comprimere il file con 7-zip digitare:
7z a -t7z file.7z file_da_comprimere.exe
(naturalmente bisogna assicurarsi di essere nella cartella in cui si trova il file 7z.exe o eventualmente settare il giusto PATH)
Per unire il file compresso all’immagine, dare il comando:
copy /b immagine.png + file.7z output.png
(è importante che l’immagine venga messa prima del file compresso)

Prompt dei comandi

Ora se aprite normalmente il file output.png esso verrà aperto con un visualizzatore di immagini, se invece decidete di aprirlo con 7-Zip (o altro software per la gestione degli archivi compressi) esso mostrerà il file che abbiamo aggiunto. Ad esempio:
7zFM output.png

Bene, per fare prima potete usare un piccolo file BAT che io ho chiamato mfii (merge file in image) e che va usato nel seguente modo:
mfii file_da unire immagine
tenendo ben presente le seguenti cose:

  • se il percorso del file contiene spazi bisogna quotare con le virgolette;
  • l’immagine va sempre inserita come secondo parametro del comando;
  • se avete installato 7-zip in una cartella diversa da “C:\Programmi\7-zip” dovete modificare il file BAT inserendo il giusto percorso.

Il codice è il seguente:

@echo off
::  Se si è  installato 7-zip in una cartella diversa modificare il percorso con il  giusto PATH
PATH=%PATH%;C:\Programmi\7-zip;;
:: Imposta i tipi di file permessi per il file immagine
SET FILETYPE=.jpg .png .gif
:: Se non sono stati inseriti i parametri necessari lo script restituisce un errore
IF (%1)==() GOTO ERRORE3
IF (%2)==() GOTO ERRORE3
:: Verifica l'esistenza dei due file in input, se non esistono ritorna un ERRORE
IF NOT EXIST %1 GOTO  ERRORE1
IF NOT EXIST %2 GOTO ERRORE2
:: Estrae il nome del file di output che deriverà il suo nome dal file da aggiungere all'immagine
for %%F in (%1) do   SET IMGNAME=%%~nF
:: deriva l'estensione del file di output che coincide con l'estensione dell'immagine utilizzata
for %%F in (%2) do   SET IMGEXT=%%~xF
:: Verifica che il secondo file sia un'immagine altrimenti interrompe lo script
SET ISIMAGE=0
for %%F in (%FILETYPE%) do  IF (%%F)==(%IMGEXT%) SET ISIMAGE=1
IF (%ISIMAGE%)==(0) GOTO ERRORE4
:: Crea il file  archivio da aggiungere poi all'immagine, se il percorso di 7z.exe non è corretto verrà restituito un errore
7z  a -t7z temp.7z %1
:: unisce il file compresso all'immagine e dà il file di output
copy /b  %2 + temp.7z %IMGNAME%%IMGEXT%
:: Cancello il file temporaneo temp.7z
del temp.7z
:: Termina lo script non avendo incontrato nessun errore
echo Il file %IMGNAME%%IMGEXT%   è stato creato con successo
GOTO END
:ERRORE1
:: Se il primo file non esiste viene restituito un errore
echo il file %1  non esiste, accertarsi di aver digitato  correttamente il nome del file
GOTO END

:ERRORE2
:: Se il secondo file non esiste viene restituito un errore
echo il file %2 non esiste
GOTO END
:ERRORE3
echo  devi  inserire almeno due parametri
GOTO END

:ERRORE4
echo il secondo file in input deve essere un'immagine
GOTO END

:END

]]>

UPDATE: seguendo i suggerimenti di chi ha commentato ho creato uno script VBS che permette di “nascondere” un file in un’immagine dal menu contestuale di Explorer, questo è il link al nuovo post.

Traduttore in linea

AGGIORNAMENTO: purtroppo SPB fa delle conversioni assurde e i bookmarklet non funzionavano, ora ho fatto l'escape manuale dei caratteri e spero il problema si sistemi :-( .

Visto che un solo %s da usare come parametro nelle keyword di Firefox non bastava, quelli di Lifehacker si sono inventati il modo di utilizzare parametri multipli :-D . Qui trovate il post su Lifehacker con alcuni esempi di utilizzo delle keyword multiparametriche. Io mi ero posto una domanda simile ma non conoscendo così bene Javascript non ero riuscito nel mio scopo. Ora che ho visto come si fa però, ho modificato il bookmarklet per le traduzioni utilizzando questa nuova funzione segnalata su Lifehacker. Se leggete il post originale su Lifehacker troverete il bookmarklet prototipo che può essere utilizzato, ad esempio, per cercare del testo nei messaggi di particolari utenti nei Forum o affinare le ricerche con un parametro in più a vostra scelta.

Se qualcuno conosce bene Javascript si accorgerà sicuramente che il bookmarklet è migliorabile diciamo che lo scopo è quello che funzioni, ma, non è buon codice. Probabilmente ad un vero programmatore gli si rizzeranno i capelli :-P . Se qualcuno vuole migliorarlo è benvenuto :-) .

Il bookmarklet necessita che vengano passati sempre almeno due parametri che rappresentano, rispettivamente, la sigla della lingua di partenza e di quella di arrivo e va usato da barra degli indirizzi richiamandolo tramite keyword, motivo per cui funziona solamente con Firefox. Con qualche if in più si potrebbe farlo andare anche con altri browser ma perderebbe di utilità e diventerebbe pressoché uguale a quelli proposti nei siti di traduzione. I bookmarklet sono due: il primo usa come servizio di traduzione Google Translate, mentre il secondo utilizza BabelFish.

Supponiamo di associare al bookmarklet che usa Google Translate la keyword: trans (tranquilli non è l'amico di Lapo ma solo l'abbreviazione di translate :-) ) e trans2 a quello di BabelFish, ecco come vengono richiamati:

trans sigla_lingua_pagina sigla_lingua_in_cui_tradurre (opzionalmente altro testo)
trans2 sigla_lingua_pagina sigla_lingua_in_cui_tradurre (opzionalmente altro testo)

I primi due parametri devono sempre essere passati mentre il terzo è opzionale. Le sigle da passare sono quelle canoniche: it (italiano), en (inglese), fr (francese), de (tedesco) e così via.

Purtroppo, non si possono usare lettere accentate come testo opzionale e non ne so la ragione, anzi se qualcuno ne conosce il motivo, mi farebbe un grosso piacere a spiegarmelo commentando o contattandomi via email. Ecco come funziona:

  • se viene selezionato del testo nella pagina verrà tradotto il testo selezionato;
  • se non viene selezionato del testo e vengono passati solo due parametri viene tradotta la pagina;
  • se viene passato del testo senza selezionare nulla viene tradotto il testo digitato come “terzo parametro.

Ma bando alle ciance e facciamo qualche esempio pratico :-) .

Esempi

trans it en
senza selezionare alcun testo traduce la pagina dall'italiano all'inglese
transen it
selezionando del testo, tradurrà il testo dall'inglese all'italiano,
trans it en oggi il sole splende
traduce dall'italiano all'inglese "oggi il sole splende".

Naturalmente la coppia di lingue deve essere supportata dal servizio di traduzione utilizzato, purtroppo per quanto riguarda Google Translate l'italiano può essere usato solo in coppia con l'inglese dunque non si possono usare combinazioni del genere (o meglio si possono usare ma non producono alcun risultato):
transit fr
Naturalmente se in futuro Google migliora il servizio offerto può darsi che tali comandi acquistino un senso compiuto. Se vi accontentate dell'inglese invece potete tradurre da/in quasi tutte le lingue del mondo, per esempio:

transen es
traduce dall'inglese allo spagnolo, oppure:
trans de en
traduce dal tedesco all'inglese e così via.

Se passate la stessa lingua, come ad esempio:
trans it it

potete bypassare l'eventuale proxy che vi blocca la pagina come spiegato da O'Reilly.

Con BabelFish si può inoltre tradurre dall'italiano al francese e viceversa, sono validi dunque i comandi:
trans2fr it
trans2it fr

bene ora che sapete come si usano, se volete potete aggiungere i due bookmarklet :-D .

Google Translate

javascript:var quote=document.getSelection();var s='%s'; if ((quote=='' && s.length>5)) {testo=encodeURIComponent(s.substring(5,s.length));url='http://translate.google.com/translate_t?langpair=%s|%s&text='+testo;} else{if (quote=='') url='http://www.google.com/translate?langpair=%s|%s&u='+encodeURIComponent(location.href); else url='http://translate.google.com/translate_t?text='+quote+'&langpair=%s|%s'};t=''; qc=0; chunks=url.split('%s'); for(i=0; i<5; i++){if(s.charAt(i)=='%22')qc=qc^1; t+=((s.charAt(i)==' '&&qc)?'^':s.charAt(i)); }args=t.split(/\s/); nurl=''; for(i=0; i<chunks.length; i++){nurl+=chunks[i]; if(args[i]!=undefined) {args[i]=args[i].replace(/\^/g,' '); nurl+=args[i]; }}location.replace(nurl,'');

BabelFish

javascript:var quote=document.getSelection();var s='%s'; if ((quote=='' && s.length>5)) {testo=s.substring(5,s.length);url='http://babelfish.altavista.com/tr?doit=done&intl=1&tt=urltext&lp=%s_%s&trtext='+encodeURIComponent(testo)+'&btnTrTxt=Traduci';} else{if (quote=='') url='http://babelfish.altavista.com/babelfish/tr?trurl='+encodeURIComponent(location.href)+'&lp=%s_%s&btnTrUrl=Traduci'; else url='http://babelfish.altavista.com/tr?doit=done&intl=1&tt=urltext&trtext='+encodeURIComponent(quote)+'&lp=%s_%s&btnTrTxt=Traduci'};t=''; qc=0; chunks=url.split('%s'); for(i=0; i<5; i++){if(s.charAt(i)=='%22')qc=qc^1; t+=((s.charAt(i)==' '&&qc)?'^':s.charAt(i)); }args=t.split(/\s/); nurl=''; for(i=0; i<chunks.length; i++){nurl+=chunks[i]; if(args[i]!=undefined) {args[i]=args[i].replace(/\^/g,' '); nurl+=args[i]; }}location.replace(nurl,'');javascript:var quote=document.getSelection();var s='%s'; if ((quote=='' && s.length>5)) {testo=encodeURIComponent(s.substring(5,s.length));url='http://babelfish.altavista.com/tr?doit=done&intl=1&tt=urltext&lp=%s_%s&trtext='+encodeURIComponent(testo)+'&btnTrTxt=Traduci';} else{if (quote=='') url='http://babelfish.altavista.com/babelfish/tr?trurl='+encodeURIComponent(location.href)+'&lp=%s_%s&btnTrUrl=Traduci'; else url='http://babelfish.altavista.com/tr?doit=done&intl=1&tt=urltext&trtext='+encodeURIComponent(quote)+'&lp=%s_%s&btnTrTxt=Traduci'};t=''; qc=0; chunks=url.split('%s'); for(i=0; i<5; i++){if(s.charAt(i)=='%22')qc=qc^1; t+=((s.charAt(i)==' '&&qc)?'^':s.charAt(i)); }args=t.split(/\s/); nurl=''; for(i=0; i<chunks.length; i++){nurl+=chunks[i]; if(args[i]!=undefined) {args[i]=args[i].replace(/\^/g,' '); nurl+=args[i]; }}location.replace(nurl,'');

Suggerimenti e opinioni sono gradite :-) .

Altre letture::
Firefox Tip: How to set up multi-parameter keyword searches – Lifehacker,
Il blog che non c'è – Tradurre pagine Web al volo,
O'Reilly Network — Using Google to View MySpace or Any Restricted Site,
JavaScript Strings
ìì+JavaScript Strings.

Unire,dividere e convertire file PS e PDF

Raccolgo qui alcuni comandi per unire, dividere e convertire file PS e PDF utilizzando GhostScript. Ci sono anche dei software appositi per fare tali operazioni ma molte volte si sta prima a farlo da linea dei comandi. Ci sono due distribuzioni di GhostScript: APPL GhostScript e GPL GhostScript, che differiscono sostanzialmente per il tipo di licenza:

AFPL Ghostscript is distributed with a license called the Aladdin Ghostscript Free Public License that allows free use, copying, and distribution by end users, but does not allow commercial distribution. AFPL Ghostscript was previously known as Aladdin Ghostscript.

GNU Ghostscript is distributed with the GNU General Public License, which allows free use, and free copying and redistribution under certain conditions (including, in some cases, commercial distribution). GNU Ghostscript versions are usually released shortly after the next AFPL Ghostscript version.

GhostScript può essere usato tranquillamente su più piattaforme e i comandi funzionano sia su Windows che su Linux, l’unica differenza è che mentre su Windows si usa gswin32 su Linux si usa gs. Su Windows è consigliabile aggiungere il percorso dell’eseguibile alla variabile di sistema PATH per poterlo utilizzare a prescindere dalla cartella in cui ci si trova. Per visualizzare file PS e PDF è consigliatissimo invece usare la GUI grafica che usa GhostScript: GsView, che può anche essere utilizzato per visualizzare i file PDF e PS in Firefox, anche se io preferisco scaricarli sull’HD e poi aprirli. Per salvare qualunque documento in formato PdF basta usare PDF Creator che necessita di GhostScript per funzionare, infatti ci sono due installer dispobibili uno con GhostScript e uno senza.

Conversione da PS a PDF

gswin32 -q -dNOPAUSE -dSAFER -sOutputFile=output.pdf   file_input.ps

Dividere un file PDF

gswinn32c -sDEVICE=pdfwrite -dNOPAUSE -dQUIET -dBATCH -dFirstPage=numero_pagina_iniziale -dLastPage=numero_pagina_fineale -sOutputFile=file_di_output file_da_spezzare

Unire file PDF

gswin32c -sDEVICE=pdfwrite -dNOPAUSE -dQUIET -dBATCH -sOutputFile=out.pdf *.pdf

Unire file PS

gswin32 -sDEVICE=pswrite -sOutputFile=output.ps -dNOPAUSE -dBATCH file1.ps file2.ps file3.ps