1+1

Posted by jeko, Tue Oct 16 22:00:00 UTC 2007

Voglio usare Ruby, voglio usare Ruby, voglio usare Ruby! Non faccio che ripetermelo da quando l’ho scoperto. Ho pensato a soluzioni per massimi sistemi, come calcolare il pigreco o risolvere il mistero del graal, o trovare la soluzione di entrambi nell’equazione che descrive le tette nuove di Giorgia Palmas. ma niente che avesse a che vedere con il mondo reale. L’esperienza di Oscon mi ha sbloccato in questo senso, facendomi capire che il vero campo di applicazione è il perseguimento di uno degli scopi che già da tempo mi ero prefissato: la pigrizia totale.

Ho inoltre abbassato la soglia delle iterazioni superflue, portandola a 1. Ovvero, se ripeto un’azione per piu di una sola volta, è già troppo. Ora uso Ruby, spesso, e mi diverto. La bellezza di Ruby sta, a mio giudizio, nel rispetto delle cose semplici. Ovvero, non introduce fattori moltiplicatori di difficoltà in stile “Rendere difficile il facile attraverso l’inutile”, per dirla come farebbe mia madre. Ricordo ancora con terrore quando ho voluto scrivere hello world in java. Se avessi perseverato su quella strada sarebbe stato sicuramente il mondo a salutarmi, e non viceversa. Insomma, per farla breve, ho iniziato a farmi una serie di ricette alla 1+1 style, ecco qualche scampolo di vita reale

HTML Tidy in da clipboarda

I nostri redattori devono inserire una gran quantità di codice html nei siti, e spesso il gestionale non ha editor integrati come FCKEditor, o un Tidy integrato che pulisca il codice html. Ancor più spesso i redattori non sono veri redattori, ma clienti, e cosa usano i clienti per scrivere qualsiasi cosa? certo, usano MSWord! Perché che lo vogliamo o no, nel mondo reale si sua word. E io dovevo fare in modo che generassero un codice valido. Missione alla amaro Montenegro. Ho pensato che se avessi fatto un’applicazione a riga di comando, sarebbe stata inutilizzabile per quasi tutti. Un’interfaccia, web o non, avrebbe introdotto ulteriori complessità. Allora ho deciso di ridurre ai minimi termini la catena degli eventi e piazzarmi tra il copia e l’incolla, ovvero

Editor (Word, editor html, notepad… )→Copia→script che pulisce il codice→Incolla

Ho la fortuna di poter gestire i pc dei clienti in questione e dei redattori, per cui installare ruby sulle macchine non è stato un problema.

E’ stato semplicissimo, molto di piu di quanto pensassi

  1. solo questa dritta vale la pena di aver letto quest’articolo fino a qua: la dll tidy per windows utilizzabile con ruby (e non solo) è su http://dev.int64.org/tidy.html e si chiama tidy-dll.zip Per trovarla ho dovuto consultare un medium. è stata un’impresa enorme.
  2. installare l’interfaccia di tidy verso ruby (gem install tidy) – evviva ruby
  3. rimediare una libreria che gestisca la clipboard. (gem install win32-clipboard) anche qui una dritta che ne vale 1000: su http://rubyforge.org/projects/win32utils/ c’è una serie di librerie per ruby che danno accesso diretto a un sacco di funzioni di windows
  4. scrivere uno script come questo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
require 'win32/clipboard'
require 'tidy'
include Win32

# qui ci va il prcorso completo della dll del tidy.
# supponendo che tidy.dll si trovi nella stessa cartella di questo script, 
# basta mettere 
Tidy.path = 'tidy.dll'

Tidy.open() do |tidy|
  # i parametri di configurazione del tidy si trovano su
  # http://tidy.sourceforge.net/docs/quickref.html
  tidy.options.output_xhtml = true
  tidy.options.doctype = 'strict'
  tidy.options.show_body_only = true
  
  # recupero l'id del formato associato associato a "HTML Format"
  formatid = Clipboard.formats.invert["HTML Format"]
  
  # il parametro passato a Clipboard.data è il formato dei dati in clipboard richiesto
  # nessun parametro passa il testo semplice
  if !formatid.nil? then
  tidy.options.word_2000 = true
  tidy.options.clean = true
  tidy.options.bare = true
  data = Clipboard.data(formatid)
        # aiuto sono un'idiota non riesco a fare una regex che prenda tutto
        # il codice compreso tra <!--StartFragment--> e <!--EndFragment-->
        #per poter usare lo slice al posto dello split
        data = data.split("<!--StartFragment-->")[1]
  else
        data = Clipboard.data
  end

  xml = tidy.clean(data).strip
  Clipboard.set_data(xml)
  puts xml
end
e salvarlo in un file che NON si chiami tidy.rb come ha fatto il sottoscritto, ma salvarlo con un nome file diverso per evitare che la riga “require’tidy’” forzi ruby a includere lo script stesso al posto della libreria tidy (sono ancora sotto psicofarmaci per averlo scoperto sulla mia pelle)
  1. configurare il tidy con le opzioni documentate su http://tidy.sourceforge.net/docs/quickref.html occhio che i dashes diventano undescore nei parametri di configurazione quindi “show-body-only” diventa “show_body_only”
  2. condire con trasformazioni ad hoc mediante l’uso di regular expression (queste sconosciute) a piacere #creare un collegamento di facile accesso, magari piazzandolo nella quickbar di windows che richiami lo script appena fatto

L’utilizzo è semplicissimo: editare il pezzo con word, o l’editor html preferito, copiare il testo, eseguire lo script, e incollare il codice ripulito!

vi potete anche sbizzarrire ad associare lo shortcut a una hotkey o a un tasto di un meraviglioso dispositivo esterno come questo http://www.contourdesign.com/shuttlepro/

Bella la vita in Ruby! Ciao Jeko

Stefano Guglielmetti alias Jeko

Schiavo dell’industria informatica italiana dal 1996, anno in cui entra in Flashnet, dalla quale esce nel 1998 con la qualifica di webmaster per fondare la sua prima società (flux s.n.c) a 19 anni con 3 amici, due dei quali sono tutt’ora soci (a prova del fatto che non è un infame totale) Sempre nel 1998 inizia l’avventura con Interact, di cui diventa socio, e in un batter di ciglio sono passati quasi 10 anni. Quando ormai aveva preso gran parte delle speranze maturate nella breve fase dell’entusiasmo iniziale, scopre ruby e i metodi agili, e, se non altro, ora si diverte. (quando fa il programmatore e non il manager – project manager – direttore tecnico – chaos wrangler)

Filed Under: Snippet | Tags:

Comments

  1. chiaroscuro 02.02.08 / 16PM
    ci sono librerie standard per smandruppare la clipboard OS-indipendent ?

Have your say

A name is required. You may use HTML in your comments.