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
- 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.
- installare l’interfaccia di tidy verso ruby (gem install tidy) – evviva ruby
- 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
- 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 |
- 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”
- 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)