giovedì 2 febbraio 2012

Effetto Lomo con Gimp (Script-fu)


AGGIORNAMENTO
Ultima versione: https://github.com/jackroom/lomopack

Salvare il seguente codice come lomo.scm nella cartella Scripts del Gimp (/home/utente/.gimp-2.x/scripts)

; GIMP Lomo v0.3
; Simula l'effetto di una "lomografia".
; 
; Copiare il file lomo.scm nella cartella scripts di Gimp. Se il programma
; è in esecuzione, aggiornare la lista dei filtri selezionando
; Filtri > Script-fu > Rinfresca gli scripts.
; Il filtro lomo sarà così accessibile da Filtri > Personal > Lomo.

(define (script-fu-lomo inImage inBackground theContrast theMerge theColor theBlur theVign)

 ; Avvia il gruppo della cronologia per questo script
 (gimp-image-undo-group-start inImage)

 (define (Border theAction)
  (let* 
   (
     (inBlur (car (gimp-layer-copy inBackground TRUE)))
     ; Imposta un raggio proporzionale per la sfocatura
     (theWidth (car (gimp-drawable-width inBlur)))
     (theHeight (car (gimp-drawable-height inBlur)))
     (theBlursize (/ (/ (+ theHeight theWidth) 2) 100))
     (theDrawable 0)
     (theE 8)
   )

   (gimp-image-add-layer inImage inBlur -1)
   
   (cond 
    ((= theAction 0)
     (plug-in-gauss-rle RUN-NONINTERACTIVE inImage inBlur theBlursize TRUE TRUE)
    )
    ((= theAction 1)
     (gimp-levels inBlur HISTOGRAM-VALUE 0 255 1.00 0 (- 255 (/ (* theVign 255) 100)))
    )
   )
   
   ; Crea la maschera per il livello della sfocatura
   (let
    ( (inMask (car (gimp-layer-create-mask inBlur ADD-WHITE-MASK))) )
    (gimp-layer-add-mask inBlur inMask)
   )
   
   ; Disegna un'ellisse nella maschera
   (set! theDrawable (car (gimp-image-get-active-drawable inImage)))
   (gimp-ellipse-select inImage (/ theWidth theE) (/ theHeight theE) (- theWidth(* (/ theWidth theE) 2)) (- theHeight (* (/ theHeight theE) 2)) 2 TRUE FALSE 0)
   (gimp-invert theDrawable)
   (gimp-selection-none inImage)
   (plug-in-gauss-rle2 RUN-NONINTERACTIVE inImage theDrawable (/ theWidth 2) (/ theHeight 2))
   
   ; Fonde il livello della sfocatura
   (gimp-image-merge-down inImage inBlur 1)
   ; Attiva il livello modificato
   (set! inBackground (car (gimp-image-get-active-drawable inImage)))
  )
 )

 ; ---------------------------------------------------------------------
 ; Aggiunge la sfocatura ai bordi
 ; ---------------------------------------------------------------------
 (if (= theBlur 1)
  (begin
   (Border 0)
  )
 )

 ; ---------------------------------------------------------------------
 ; Aggiunge un effetto di vignettatura
 ; ---------------------------------------------------------------------
 (if (> theVign 0)
  (begin
   (Border 1)
  )
 )

 ; ---------------------------------------------------------------------
 ; Effetto Lomo
 ; Da questo punto vengono applicati gli effetti di colore all'immagine
 ; ---------------------------------------------------------------------
 (let*
  (
   ; Esegue la copia del livello per la tonalità
   (inTonal (car (gimp-layer-copy inBackground TRUE)))
   ; Copia il livello per la desaturazione
   (inDesat (car (gimp-layer-copy inBackground TRUE)))
  )

  ; Inserisce il livello tonalità
  (gimp-image-add-layer inImage inTonal -1)
  ; Inserisce il livello da desaturare
  (gimp-image-add-layer inImage inDesat -1)

  ; Inverte i livelli del canale blu del livello principale
  (gimp-levels inBackground HISTOGRAM-BLUE 0 255 1.00 255 0)

  ; Imposta la modalità della tonalità come Luce Forte
  (gimp-layer-set-mode inTonal HARDLIGHT-MODE)
  
  ; Desatura l'ultimo livello
  (gimp-desaturate-full inDesat DESATURATE-LUMINOSITY)
  ; Modalità livello desaturazione: Solo Toni Scuri
  (gimp-layer-set-mode inDesat DARKEN-ONLY-MODE)
  ; Regola livelli (contrasta)
  (gimp-levels inDesat HISTOGRAM-VALUE 40 215 1.00 0 255)
  ; Imposta Opacità al 40%
  (gimp-layer-set-opacity inDesat 40)
  
  ; Aumenta il contrasto regolando le curve di inTonal
  (if (= theContrast 1)
   (begin
    (gimp-curves-spline inTonal 0 8 #( 0 0 70 50 195 215 255 255))
    (gimp-curves-spline inTonal 1 8 #( 0 0 84 70 212 208 255 255))
    (gimp-curves-spline inTonal 2 8 #( 0 0 144 127 212 212 255 255))
    (gimp-curves-spline inTonal 3 8 #( 0 0 70 82 194 210 255 255))
   )
  )

  ; Aggiunge del colore
  (if (= theColor 1)
   (begin
    (plug-in-retinex RUN-NONINTERACTIVE inImage inBackground 80 3 2 1.9)
   )
  )

  ; Appiattisce i livelli se deciso
  (if (= theMerge 0)
   (begin
    ; Unisce il livello della tonalità allo sfondo
    (gimp-image-merge-down inImage inTonal 1)
    ; Unisce il livello della saturazione
    (gimp-image-merge-down inImage inDesat 1)
   )
  )
  
  ; Chiude il gruppo della cronologia
  (gimp-image-undo-group-end inImage)

  ; Aggiorna l'immagine
  (gimp-displays-flush)
 )

)

; -----------------------------------------------------------------------
; Attiva lo script
; -----------------------------------------------------------------------
(script-fu-register
 "script-fu-lomo"
 "Lomo"
 "Genera un effetto Lomo"
 "any Jack" 
 "2012"
 "February 3, 2012"
 "RGB*"
 SF-IMAGE "Image" 0
 SF-DRAWABLE "Livello da duplicare" 0
 SF-TOGGLE "Aumenta il contrasto (Blu enfatizzati)" FALSE
 SF-TOGGLE "Crea livelli separati" FALSE
 SF-TOGGLE "Colora (Rende i colori più vivaci)" FALSE
 SF-TOGGLE "Aggiungi una sfocatura ai bordi" FALSE
 SF-ADJUSTMENT "Vignettatura" '(0 0 100 1 10 0 0)
)

; Definisce dove inserire il filtro nel menu
(script-fu-menu-register "script-fu-lomo" "/Filters/Personal")

venerdì 13 gennaio 2012

Scheme (Gimp Script-fu)

I file script.scm vanno copiati nella cartella .gimp-x.x/scripts

; Commento file.scm

; Somma due numeri (restituisce 5)
(+ 2 3)

; Definisce una variabile x
(let* ( (x 3) ) )

; Definisce due variabili locali (a,b) e ne restituisce la somma
(let* ( (a 1) (b 2) ) (+ a b) )

; Definisce una lista in una variabile ( '(a b c) )
(let* ( (x '(1 3 5))) x)

; Aggiunge un elemento all'inizio della lista
(cons 1 '(2 3 4) ) --> (1 2 3 4)

; Creazione di una lista
(list 1 2 a b) --> Crea la lista usando i valori di a e b precedentemente dichiarati

; Accedere ad una lista (car = Restituisce il primo elemento, cdr = la porzione restante dopo il primo elemento)
(car '("uno" "due")) --> Restituisce "uno"
(cdr '("uno" "due")) --> Restituisce "due"
(cdr '("uno")) --> Restituisce () (Il primo elemento non viene considerato)
; Per prendere un elemento specifico, usare car e cdr insieme
(let* (( x '("uno" "due" "tre") )) (car (cdr x)) ) --> Restitisce "due"

; Per gli array multidimensionali, si può usare (cadar x): abbreviazione di (car (cdr (car x) ) )
(let* (( x '(("uno-a" "uno-b") "due" "tre" "quattro") )) (cadar x) ) --> Restituisce "uno-b"

; Definisce la variabile num con let* e le assegna un nuovo valore con set!
(let* ( (num 10) ) (set! num (+ num num) ) ) --> Restituisce 20
(let* ( (num 10) ) (set! num (+ 3) ) ) --> Restituisce 3

; Definisce la funzione Somma che accetta due parametri (a,b) e ne restituisce la somma
(define (Somma a b) (+ a b))

; Chiama la funzione somma
(Somma 1 3) --> Restituisce 4

; Convenzioni
script-fu-abc --> nome della funzione di uno script
inText --> Nome di un argomento
theVar --> Nome di una variabile

; Registrare la funzione
script-fu-register --> All'inizio dello script, serve a rendere la funzione utilizzabile da gimp

giovedì 29 settembre 2011

Leggere e scrivere file dalla shell

echo
echo "testo" > file.txt → Scrive il testo nel file sovrascrivendone il contentuto
echo "testo" >> file.txt → Aggiunge il testo alla fine del file

cat
cat > file.txt → Crea il file.txt se non esiste, altrimenti lo sovrascrive. Inserire il testo e premere Invio per iniziare una nuova riga. Premere Ctrl-d per uscire dall'editor.

gpg (per criptare i file)
gpg -c file.txt → Crea una copia del file criptata in gile.txt.gpg. Chiede la password da usare per la cifratura (passphrase) e la conferma. Attenzione: se si dimentica la password il file non è più apribile. Il file.txt originale resta sul pc.
gpg file.txt.gpg → Decripta il file copiandolo in file.txt

Nota: se si decifra un file può apparire il messaggio "gpg: ATTENZIONE: l'integrità del messaggio non era protetta". Questa è solo un'avvertenza per ricordare all'utente che il file non è stato criptato con MDC e che potrebbe essere stato alterato. Per non visualizzare l'avviso, criptare il file con la sintassi: gpg -c --force-mdc file.txt

martedì 27 settembre 2011

lsof

Elenca i file aperti dalle applicazioni, indica quale applicazione usa una determinata porta

lsof -i tcp:54226 → info sulla porta 54226 (tcp si può anche omettere es. lsof -i :25)
lsof -i @192.168.0.1 → Cerca i processi collegati all'ip

-p 15783 → Elenca i file usati dall'applicazione con pid 15783
-p ^8526 → Esclude l'applicazione 8526
-d File_descriptor → Include o esclude (se preceduti da ^) i file descriptor (separati da virgola se più di uno)
-a → Operatore AND (tutte le opzioni devono essere verificate)

lsof /percorso/file → Cerca l'applicazione che usa quel file
lsof /percorso/dir → Cerca i file aperti in quel percorso (es un dvd)

venerdì 23 settembre 2011

tcpdump

Analizza il traffico di rete (sniffer)

tcpdump -n (non risolve hostname)
tcpdump -q (meno informazioni)
tcpdump port 22 (connessioni sulla porta 22)
tcpdump src host (host sorgente)
tcpdump dst blogspot.com (registra le connessioni verso blogspot.com)
tcpdump dst port 80 (connessioni sulla porta 80 del destinatario (pagine web))
tcpdump src host (connessioni che originano da host)
tcpdump -c 10 (esce dopo 10 risultati)

Sono ammesse espressioni con gli Operatori booleani:
! o not →  negazione
&& o and → and
|| o or → or
< o > → minore o maggiore

tcpdump src 192.168.0.2 && dst port 80 (connessioni generate da 192.168.0.2 verso la porta 80 del destinatario)

Strumenti Online

Reverse Lookup e Ricerca domini sullo stesso ip:
www.pagesinventory.com
www.myiptest.com/staticpages/index.php/Reverse-IP
ip_da_cercare.ipaddress.com

Analizzatore di USER_AGENT (scrive in forma leggibile i valori della stringa)
www.useragentstring.com

mercoledì 21 settembre 2011

Windows 95 Online (2011)



Configurazione di prova:
OS: Windows95 Versione A
Browser: Netscape Navitagor 3.03 Gold (1997)

www.google.it


La versione 3 del netscape supporta fino a Javascript 1.1, di conseguenza gli script in jquery causano diversi alert di errore.


Dopo aver chiuso le 8 finestre di errore e disattivato il javascript, un'altra carenza riguarda il supporto al css. La pagina iniziale di google si presenta infatti cosi:


Aprendo gmail.com, viene segnalato un errore con il certificato rsa che risulta scaduto il 1° Gennaio 2000 (Y2K bug?)

Andando avanti il caricamento viene automaticamente interrotto


Il browser permette l'autenticazione tramite .htaccess, ma non riesce a completare la connessione nel caso di accesso tramite form.

Conclusioni: Navigazione impossibile o molto limitata



La versione 4 si presenta come una suite di programmi (Navigator, Composer, Messenger, Collabra). Alla prima esecuzione viene richiesto di creare un profilo per l'utente e configurare l'email. 

Configurato il tutto, appare il primo errore quando cerca di caricare l'url home.netscape.com (che non esiste più). La navigazione su google causa lo stesso numero di errori javascript della versione precedente, in questo caso però la pagina sparisce.


Impossibile caricare sia google che gmail.

Conclusioni: Navigazione impossibile



Browser: Netscape 6.2.3 (2003, ultima versione per Windows 95)


A differenza delle precedenti versioni, la 6 redirige correttamente al nuovo sito netscape.aol.com

La pagina di google è visualizzata quasi correttamente


Nella pagina di gmail però non viene visualizzato il form per l'accesso

Windows 95 è stato installato su virtualbox. Per superare il limite dei 16 colori, sono stati installati i driver UNI da questo pacchetto