<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3744914562289486967</id><updated>2011-05-03T23:13:22.365+02:00</updated><category term='windows'/><category term='docbook'/><category term='MVC'/><category term='template'/><category term='php'/><category term='ottimizzazione'/><category term='odt'/><category term='dvi'/><category term='LaTeX'/><category term='preambolo'/><category term='pdf'/><category term='html'/><title type='text'>Ctrl + Alt + Canc</title><subtitle type='html'>Usciamo tutti e poi rientriamo</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://mondorux.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3744914562289486967/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://mondorux.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>ruggdam</name><uri>http://www.blogger.com/profile/01882728871834764883</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/_oqoqk5RoDTc/SQi-ThGN5OI/AAAAAAAAAGQ/YIcZlkvblMc/S220/linkedin.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>4</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3744914562289486967.post-7287378270116697553</id><published>2011-05-02T21:06:00.010+02:00</published><updated>2011-05-03T23:13:22.777+02:00</updated><title type='text'>Processo di produzione audiovisiva casalinga</title><content type='html'>&lt;h3&gt;Condizioni al contorno&lt;/h3&gt;Ho appena incominciato la sperimentazione di una squadra di software per il montaggio audiovisivo. In passato ebbi un po' di esperienza con Adobe Premiere, After Effects e Encore DVD, ma questa volta ho voluto affrontare l'impresa usando esclusivamente software libero.&lt;div&gt;Guardandomi in giro, mi imbatto in&lt;b&gt; &lt;a href="http://www.lightworksbeta.com/"&gt;Lightworks&lt;/a&gt;&lt;/b&gt;, un programma professionale rilasciato recentemente, in versione beta, come libero e open source: perfetto per farsi tanto male... mi piace! Naturalmente ho scoperto poi di aver bisogno di diversi altri strumenti.&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;div&gt;Il punto di  partenza del processo è l'acquisizione con i seguenti dispositivi a mia disposizione:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;smatphone &lt;i&gt;HTC Tattoo&lt;/i&gt;: aquisisce in formato 320x240 usando il contenitore 3gp con framerate variabile;&lt;/li&gt;&lt;li&gt;macchina fotografica &lt;i&gt;Canon Digital IXUS 85IS&lt;/i&gt;: acquisisce in formato 640x480 usando la codifica MJPEG a 30 fps;&lt;/li&gt;&lt;li&gt;videocamera &lt;i&gt;Sony Handycam DCR-HC19E PAL&lt;/i&gt;: acquisisce in formato PAL 4:3 o 16:9 su cassetta miniDV.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;L'ambiente di lavoro è &lt;i&gt;MS Windows 7 a 64 bit&lt;/i&gt;.&lt;/div&gt;Il punto di arrivo è la visualizzazione da:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;smartphone HTC Tattoo;&lt;/li&gt;&lt;li&gt;riproduttore &lt;i&gt;Philips Home Theater System HTS3164&lt;/i&gt; (con televisore 16:9): riproduce &lt;b&gt;DVD&lt;/b&gt; e&lt;b&gt; DivX&lt;/b&gt; e supporta audio &lt;b&gt;AC3&lt;/b&gt; e &lt;b&gt;DTS&lt;/b&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;h3&gt;Sperimentazione&lt;/h3&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;Il primo problema da considerare è che &lt;b&gt;Lightworks&lt;/b&gt; è un programma professionale che si è appena affacciato al grande pubblico amatoriale, quindi utilizza come formati di acquisizione i formati standard per il broadcasting e il cinema: &lt;b&gt;PAL&lt;/b&gt;, &lt;b&gt;NTSC&lt;/b&gt;, &lt;b&gt;HD 720&lt;/b&gt;, &lt;b&gt;HD 1080&lt;/b&gt;; i contenitori gestiti sono &lt;b&gt;AVI&lt;/b&gt; e &lt;b&gt;Quicktime&lt;/b&gt; con le compressioni &lt;b&gt;DV&lt;/b&gt;, &lt;b&gt;MPEG 2&lt;/b&gt; e una caterva di &lt;a href="http://www.lightworksbeta.com/index.php?option=com_content&amp;amp;view=article&amp;amp;id=108&amp;amp;Itemid=247"&gt;formati professionali&lt;/a&gt; a me sconosciuti. Fine. Niente MPEG4, DivX, Theora ... ahi!&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;Nessun problema con la &lt;b&gt;Handycam&lt;/b&gt;, che è riconosciuta e correttamente controllata nel processo di acquisizione: l'unica difficoltà è che Windows 7 non permette l'uso dell'interfaccia USB per l'acquisizione video (e neanche Lightworks, figurarsi!), quindi è necessario usare la &lt;b&gt;IEEE 1394&lt;/b&gt; (anche nota come Firewire o iLink): meglio, dato che quest'ultima è anche superiore in termini di qualità del segnale. &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;La &lt;b&gt;IXUS&lt;/b&gt; ha una qualità del video un po' inferiore a quella della Handycam (e vorrei vedere, è una macchina fotografica!), ma il formato &lt;b&gt;MJPEG&lt;/b&gt; è direttamente importabile in Lightworks. Però, siccome registra a 30 fps, Lightworks permette di importare i metraggi solo in formato NTSC o HD, perchè tale velocità non è prevista per PAL (che, per combinazione, è il formato che devo usare io): importo in HD 720, pur sapendo che il passaggio da 640x480 a 1024x720 necessiterà di un ricampionamento.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;Il &lt;b&gt;Tattoo&lt;/b&gt; ha una risoluzione molto più bassa del PAL e un framerate variabile fra circa 5 e 16 fps, oltre ad un'ottica molto "economica" e nessuna possibilità di regolazione in fase di ripresa: non mi aspetto risultati esaltanti; inoltre il contenitore &lt;b&gt;3gp&lt;/b&gt; appartiene ad un pianeta sconosciuto a Lightworks. Mi necessita un convertitore: dopo averne provati diversi la mia scelta cade su &lt;a href="http://teejee2008.wordpress.com/ffcoder/"&gt;&lt;b&gt;ffcoder&lt;/b&gt;&lt;/a&gt;, che usa &lt;b&gt;K-Lite Codec Pack&lt;/b&gt; e &lt;b&gt;Avisynth&lt;/b&gt;; forse non è la scelta ottimale, perché scopro in seguito che sul mio sistema operativo il programma non riesce a configurare i codec VFW per il contenitore AVI (che, guarda caso, sono proprio quelli utilizzati da Lightworks). Per risolvere questo problema, installo anche &lt;a href="http://www.virtualdub.org/"&gt;&lt;b&gt;Virtualdub&lt;/b&gt;&lt;/a&gt;, che può usare i &lt;b&gt;codec VfW&lt;/b&gt; ma non legge i 3gp. Nessuno dei due programmi da solo può convertire da 3gp ai codec Matrox usati da Lightworks, ma posso usarli insieme usando un formato comune di trasferimento. Comunque Virtualdub è utile anche per l'applicazione di filtri, quali &lt;a href="http://www.guthspot.se/video/deshaker.htm"&gt;&lt;b&gt;Deshaker&lt;/b&gt;&lt;/a&gt; (stabilizzatore video), che per le riprese con il Tattoo si rivelerà salvifico.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Lightworks ha una curva di apprendimento piuttosto ripida, perché pur avendo un'interfaccia utente molto pulita e flessibile, usa un linguaggio professionale e un paradigma di montaggio che è sicuramente intuitivo per i professionisti del settore (quelli che lavoravano con le forbici e le pellicole), ma è diverso dagli altri NLE più diffusi. Il manuale utente è anch'esso rivolto ai professionisti, quindi poco masticabile per un novizio, ma, in compenso il &lt;a href="http://www.lightworksbeta.com/index.php?option=com_kunena&amp;amp;view=listcat&amp;amp;catid=0&amp;amp;func=listcat&amp;amp;Itemid=270"&gt;forum&lt;/a&gt; del sito è molto vivo, ricco e popolato da personaggi piuttosto esperti; inoltre ci sono nella rete diversi &lt;a href="http://www.youtube.com/watch?v=SK4ogYgnm4I"&gt;filmati di apprendimento&lt;/a&gt; che mostrano le caratteristiche principali del programma e sono sufficienti per incominciare a lavorare.&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;div&gt;Stimolato dal forum, integro &lt;a href="http://www.debugmode.com/wax/"&gt;Wax&lt;/a&gt; come plugin di Lightworks per provare un po' di effetti speciali, ma rimango un po' deluso: l'interfaccia utente, pur abbastanza semplice e classica, non permette operazioni banali come lo zoom sulle timeline o l'inserimento da tastiera dei valori dei vari effetti, rendendosi di difficile ed impreciso utilizzo. In pratica, non riesco a creare correttamente né una transizione, né un effetto speciale: spero in una prossima evoluzione. Diversamente da Lightworks, le risorse per imparare ad usarlo sono piuttosto povere.&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;div&gt;Per tentativi e con forum sul comodino riesco a produrre un paio di filmati. Al momento dell'esportazione sono un po' imbarazzato nello scegliere il codificatore di uscita. Naturalmente, neanche a dirlo, Lightworks esporta solo nei formati e nelle codifiche già elencate per la fase di importazione. Ma ormai la strada è in discesa: basta ripercorrere al contrario la strada in salita dell'andata. Quindi, con Virtualdub esporto in&lt;b&gt; DivX 720x404&lt;/b&gt; (pur arrivando il PAL a 768x576, più di 720 sembra che il mio home theater non supporti) e in AVI non compresso: quest'ultimo è trasformato in e &lt;b&gt;MPEG 2&lt;/b&gt; (PAL Widescreen) e &lt;b&gt;3gp&lt;/b&gt; 320x240 con bande orizzontali mediante ffcoder.&lt;/div&gt;&lt;h3&gt;Conclusioni&lt;/h3&gt;&lt;div&gt;La prima evidenza scaturita da questa esperienza è (non ci vuole Kubrick per scoprirlo) che il &lt;b&gt;Tattoo&lt;/b&gt; è assolutamente inadeguato. Penso che la prossima volta che mi appresterò ad usarlo per riprendere le evoluzioni di mia figlia sarò preso da brividi di paura. Una buona ripresa con la Handycam o al limite la IXUS è un buon punto di partenza per sentirsi a proprio agio nelle successive fasi di produzione.&lt;/div&gt;&lt;div&gt;&lt;b&gt;Virtualdub&lt;/b&gt; era un mio vecchio amico e continua ad esserlo, perché non fa molto, ma il poco che fa lo fa molto bene: applicazione di filtri e conversione di formato e codifica sono semplici ed efficaci. &lt;/div&gt;&lt;div&gt;Sono stato deluso dall'incapacità di &lt;b&gt;ffcoder&lt;/b&gt; di esportare in AVI VfW; per il 3gp e MPEG 2 invece nulla da eccepire. &lt;/div&gt;La prima caratteristica di &lt;b&gt;Lightworks&lt;/b&gt; che mi ha colpito è la conservazione di tutto il lavoro fatto anche in caso di crash (d'altra parte è una beta): è una balla sorpresa scoprire di non aver perso niente dopo uno spaventoso "errore critico". Se all'inizio mette un po' di soggezione il suo approccio personale al montaggio, basta entrare un po' in intimità per restarne affascinati: dà l'impressione di saper fare cose che noi umani (neanche quelli che hanno scritto il manuale) non possiamo neanche immaginare.&lt;div&gt;&lt;b&gt;WAX&lt;/b&gt;... mah, c'è chi ne parla entusiasticamente, chi meno. Io non sono riuscito ad usarlo efficacemente come plugin di Lightworks. L'impossibilità di ingrandire l'area di lavoro nella timeline, quando si deve lavorare con precisione, è una grave pecca; ancora peggio l'impossibilità di scrivere (con la tastiera) dati numerici nelle caselle di testo delle regolazioni degli effetti, ma l'obbligo di ottenere "172,34" facendo scorrere il mouse intorno alla casella: impossibile. Inoltre, anche dopo essere riuscito a creare un effetto approssimativamente come volevo io, la sua applicazione nell'&lt;i&gt;edit&lt;/i&gt; di Lightworks era scorretta.&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;div&gt;Insomma, posso dire che il risultato di questa esperienza è soddisfacente, ma migliorabile.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3744914562289486967-7287378270116697553?l=mondorux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mondorux.blogspot.com/feeds/7287378270116697553/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3744914562289486967&amp;postID=7287378270116697553' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3744914562289486967/posts/default/7287378270116697553'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3744914562289486967/posts/default/7287378270116697553'/><link rel='alternate' type='text/html' href='http://mondorux.blogspot.com/2011/05/processo-di-produzione-audiovisiva.html' title='Processo di produzione audiovisiva casalinga'/><author><name>ruggdam</name><uri>http://www.blogger.com/profile/01882728871834764883</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/_oqoqk5RoDTc/SQi-ThGN5OI/AAAAAAAAAGQ/YIcZlkvblMc/S220/linkedin.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3744914562289486967.post-2895308692525543296</id><published>2008-11-25T19:48:00.016+01:00</published><updated>2008-11-26T20:04:37.590+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MVC'/><category scheme='http://www.blogger.com/atom/ns#' term='template'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>Separazione delle carriere in php</title><content type='html'>&lt;div style="text-align: left;"&gt;&lt;span style="font-style: italic;"&gt;&lt;a href="http://www.php.net/"&gt;php&lt;/a&gt;&lt;/span&gt; è considerato un linguaggio "semplice" per lo sviluppo web, spesso contrapposto alle piattaforme "serie" come .NET e Java: questo è dovuto soprattutto all'uso semplice che la maggior parte degli sviluppatori ne fanno.
&lt;/div&gt;
&lt;div style="text-align: left;"&gt;Ma anche in &lt;span style="font-style: italic;"&gt;php&lt;/span&gt; si possono usare paradigmi di progettazione più evoluti del semplice incapsulamento nel codice &lt;span style="font-style: italic;"&gt;html&lt;/span&gt;; ad esempio, si possono usare i &lt;span&gt;template&lt;/span&gt;, per separare lo strato di visualizzazione da quello di elaborazione.
&lt;/div&gt;
&lt;div style="text-align: left;"&gt;Il &lt;span style="font-weight: bold;"&gt;template&lt;/span&gt; è un file prototipo che non contiene (quasi) codice &lt;span style="font-style: italic;"&gt;php&lt;/span&gt; e che può essere quindi gestito anche da chi non conosce il &lt;span style="font-style: italic;"&gt;php&lt;/span&gt;: può essere un file &lt;span style="font-style: italic;"&gt;html&lt;/span&gt;, &lt;span style="font-style: italic;"&gt;xml&lt;/span&gt;, &lt;span style="font-style: italic;"&gt;javascript&lt;/span&gt; o di qualunque altro tipo si voglia. La sua particolarità è quella di poter contenere eventuali segnaposto utilizzabili da &lt;span style="font-style: italic;"&gt;php&lt;/span&gt;.
&lt;/div&gt;
&lt;div style="text-align: left;"&gt;Il codice &lt;span style="font-style: italic;"&gt;php&lt;/span&gt; può compilare il template con &lt;a href="http://php.html.it/articoli/leggi/849/utilizziamo-i-template-integrati-con-php/"&gt;diverse tecniche&lt;/a&gt; (io ne mostrerò solo una, basata sulla funzione &lt;strong&gt;eval&lt;/strong&gt;) e restituire il documento opportunamente modificato.
&lt;/div&gt;
Ad esempio, si possono avere i tre file:
&lt;ul style="text-align: left;"&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;mondorux.php&lt;/span&gt;: la pagina che sarà richiesta dal browser e che controlla il processo;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;component.php&lt;/span&gt;: contiene la classe Component, che incapsula il meccanismo di rendering dei contenuti;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;template.html&lt;/span&gt;: il prototipo che "vestirà" mondorux.php.&lt;/li&gt;&lt;/ul&gt;Ecco il codice, che mi appresto a commentare.

&lt;h4&gt;template.html&lt;/h4&gt;
&lt;pre class="code xml"&gt;
&amp;lt;html&gt;
    &amp;lt;head&gt;
        &amp;lt;title&gt;$titolo&amp;lt;/title&gt;
    &amp;lt;/head&gt;
    &amp;lt;body&gt;
        &amp;lt;h1&gt;$titolo&amp;lt;/h1&gt;
        &amp;lt;p&gt;$saluto&amp;lt;/p&gt;
    &amp;lt;/body&gt;
&amp;lt;/html&gt;
&lt;/pre&gt;

&lt;div style="text-align: left;"&gt;Come si può vedere, in questa pagina &lt;span style="font-style: italic;"&gt;html&lt;/span&gt; non c'è codice &lt;span style="font-style: italic;"&gt;php&lt;/span&gt;, a parte quelle strane stringhe precedute da '$': esse sono solo dei segnaposto (nota: questo non è l'unico modo per scrivere il template).
&lt;/div&gt;
&lt;h4&gt;component.php&lt;/h4&gt;
&lt;pre class="code php" style="overflow:auto"&gt;
&amp;lt;?php
class Component{
    var $_template;
    var $_parameters_array;

    /* costruttore, imposta il template */
    function Component($template){
        $this-&gt;_template = str_replace("\"","\\\"",implode("",file($template)));
    }

    /* legge un array associativo di nomi di variabili e loro valori */
    function setParameters($parameters_array){
        $this-&gt;_parameters_array = $parameters_array;
    }

    /* esegue la resa del template */
    function render(){
        if(is_array($this-&gt;_parameters_array)){
            foreach($this-&gt;_parameters_array as $v_name =&gt; $v_value){
                eval("$v_name = \$v_value;");
            }
        }
        eval("\$compiled = \"".$this-&gt;_template."\";");
        return $compiled;
    }
}
?&gt;
&lt;/pre&gt;

&lt;div style="text-align: left;"&gt;Questa classe (perdonate lo stile PHP4, un po' obsoleto) incapsula il template e il meccanismo di rendering, che ruota tutto intorno alla funzione &lt;code&gt;eval&lt;/code&gt; (nel metodo &lt;code&gt;render&lt;/code&gt;), che valuta come codice php la stringa passata come parametro.
&lt;/div&gt;
&lt;div style="text-align: left;"&gt;Il metodo &lt;code&gt;getParameters&lt;/code&gt; raccoglie un array associativo di coppie (nome, valore) in modo che il codice cliente possa impostare i contenuti della pagina.
&lt;/div&gt;
&lt;h4&gt;mondorux.php&lt;/h4&gt;
&lt;pre class="code php"&gt;
&amp;lt;?php
require("component.php");
$pagina = new Component("template.html");
$pagina-&gt;setParameters(
    array(
        '$titolo' -&gt; "Template php",
        '$saluto' -&gt; "Ciao mondo, ma che belli i template!"
    )
);
$pagina-&gt;render();
?&gt;

&lt;/pre&gt;

&lt;div style="text-align: left;"&gt;Come si può vedere, in questo codice non c'è traccia di come sarà reso il documento (in questo caso: html).

&lt;/div&gt;&lt;div style="text-align: left;"&gt;mondorux.php usa la classe Component, chiedendole di eseguire, tramite il template "template.html", la resa dei contenuti, ossia i parametri $titolo e $saluto i cui valori sono assegnati nell'array.
&lt;/div&gt;
&lt;div style="text-align: left;"&gt;Con questa tecnica abbiamo ottenuto una quasi completa separazione del codice di elaborazione (mondorux.php) dal codice di visualizzazione (template.html), implementando così il famoso (e utile) pattern &lt;a href="http://it.wikipedia.org/wiki/Model-View-Controller"&gt;Model-View-Controller&lt;/a&gt;.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3744914562289486967-2895308692525543296?l=mondorux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mondorux.blogspot.com/feeds/2895308692525543296/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3744914562289486967&amp;postID=2895308692525543296' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3744914562289486967/posts/default/2895308692525543296'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3744914562289486967/posts/default/2895308692525543296'/><link rel='alternate' type='text/html' href='http://mondorux.blogspot.com/2008/11/separazione-delle-carriere-in-php.html' title='Separazione delle carriere in php'/><author><name>ruggdam</name><uri>http://www.blogger.com/profile/01882728871834764883</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/_oqoqk5RoDTc/SQi-ThGN5OI/AAAAAAAAAGQ/YIcZlkvblMc/S220/linkedin.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3744914562289486967.post-7948348291506858539</id><published>2008-11-13T19:46:00.025+01:00</published><updated>2008-11-14T11:02:58.202+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='odt'/><category scheme='http://www.blogger.com/atom/ns#' term='preambolo'/><category scheme='http://www.blogger.com/atom/ns#' term='docbook'/><category scheme='http://www.blogger.com/atom/ns#' term='pdf'/><category scheme='http://www.blogger.com/atom/ns#' term='dvi'/><category scheme='http://www.blogger.com/atom/ns#' term='LaTeX'/><category scheme='http://www.blogger.com/atom/ns#' term='html'/><title type='text'>LaTeX senza preamboli</title><content type='html'>&lt;div style="text-align: justify;"&gt;
&lt;p&gt;Niente di pornografico, non è questo il luogo.&lt;/p&gt;
&lt;p&gt;Come tutti sappiamo, &lt;a href="http://it.wikipedia.org/wiki/LaTeX"&gt;&lt;span style="letter-spacing: -0.15em;"&gt;L&lt;sup&gt;&lt;sub&gt;A&lt;/sub&gt;&lt;/sup&gt;&lt;/span&gt;&lt;span style="letter-spacing: -0.1em;"&gt;T&lt;sub&gt;&lt;big&gt;E&lt;/big&gt;&lt;/sub&gt;X&lt;/span&gt;&lt;/a&gt; è un linguaggio a marcatori per la preparazione di testi basato sul programma di composizione tipografica &lt;span style="letter-spacing: -0.1em;"&gt;T&lt;sub&gt;&lt;big&gt;E&lt;/big&gt;&lt;/sub&gt;X&lt;/span&gt;.
&lt;/p&gt;
&lt;p&gt;
Io trovo molto comodo il suo approccio &lt;span style="font-weight: bold;"&gt;WYSIWYM&lt;/span&gt; (&lt;span style="font-style: italic;"&gt;What You See Is What You Mean&lt;/span&gt;, "ciò che vedi è ciò che intendi") per pubblicazioni complesse e strutturate, e comodissimo il fatto che dalla compilazione di un unico documento &lt;span style="font-family:courier new;"&gt;.tex&lt;/span&gt; si possano ottenere prodotti &lt;span style="font-family:courier new;"&gt;&lt;span style="font-weight: bold;"&gt;dvi&lt;/span&gt;,&lt;/span&gt; &lt;span style="font-weight: bold;font-family:courier new;" &gt;ps&lt;/span&gt;, &lt;span style="font-weight: bold;font-family:courier new;" &gt;pdf&lt;/span&gt;, &lt;span style="font-family:courier new;"&gt;&lt;span style="font-weight: bold;"&gt;(x)html,&lt;/span&gt; &lt;span style="font-weight: bold;"&gt;docbook&lt;/span&gt;&lt;/span&gt; o persino &lt;span style="font-family:courier new;"&gt; &lt;span style="font-weight: bold;"&gt;odt&lt;/span&gt;&lt;/span&gt;, con piccoli accorgimenti nella composizione del preambolo.
&lt;br/&gt;
Quello che trovo scomodo è invece la scrittura stessa del preambolo, che mi obbliga a ricordare una serie di comandi che non sono "What I Mean". Per questo mi viene in aiuto &lt;span style="letter-spacing: -0.15em;"&gt;L&lt;sup&gt;&lt;sub&gt;A&lt;/sub&gt;&lt;/sup&gt;&lt;/span&gt;&lt;span style="letter-spacing: -0.1em;"&gt;T&lt;sub&gt;&lt;big&gt;E&lt;/big&gt;&lt;/sub&gt;X&lt;/span&gt; stesso, perchè permette l'&lt;span style="font-weight: bold;"&gt;inclusione&lt;/span&gt; di file esterni nel file sorgente principale. Allora ho scritto una piccola libreria di comandi che permette di costruire di volta in volta il preambolo adatto al tipo di output che desidero.
&lt;/p&gt;
&lt;p&gt;
La libreria (che ho chiamato &lt;span style="font-weight: bold;font-family:arial;" &gt;preamble&lt;/span&gt;) è costituita da pochi file:
&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;font-family:arial;" &gt;default.tex&lt;/span&gt;: un preambolo semplice, che definisce solo il tipo di documento, il titolo, l'autore e la data;
&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;font-family:arial;" &gt;dvi.tex&lt;/span&gt;: permette la creazione di un &lt;span style="font-family:courier new;"&gt;dvi&lt;/span&gt; (e quindi un &lt;span style="font-family:courier new;"&gt;ps&lt;/span&gt;) con immagini; pensato per la compilazione mediante il comando: &lt;span style="font-family:courier new;"&gt;&lt;blockquote&gt;latex miodocumento.tex&lt;/blockquote&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;font-family:arial;" &gt;pdf.tex&lt;/span&gt;: permette la creazione di un pdf ipertestuale; pensato per la compilazione mediante il comando: &lt;span style="font-family:courier new;"&gt;&lt;blockquote&gt;pdflatex miodocumento.tex&lt;/blockquote&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;font-family:arial;" &gt;xml.tex&lt;/span&gt;: permette la creazione di documenti basati su xml, quali ad esempio:
&lt;ul&gt;&lt;li&gt;html: &lt;span style="font-family:courier new;"&gt;htlatex miodocumento.tex&lt;/span&gt;&lt;/li&gt;&lt;li&gt;docbook: &lt;span style="font-family:courier new;"&gt;dblatex miodocumento.tex&lt;/span&gt;&lt;/li&gt;&lt;li&gt;odt: &lt;span style="font-family:courier new;"&gt;ooflatex miodocumento.tex&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
Il preambolo dei miei nuovi documenti diventerà semplicemente:

&lt;pre class="code wikitalis"&gt;\input{preamble/pdf}
\makepreamble{article}{a4paper,12pt}{titolo}{autore}{oggi}
\setabstract{Una libreria per facilitare la scrittura del preambolo}
\setkeywords{LaTeX preambolo pdf html dvi odt}
&lt;/pre&gt;

La prima riga del preambolo imposta l'uso di &lt;span style="font-family:courier new;"&gt;./preamble/pdf.tex&lt;/span&gt;. 
&lt;br/&gt;
Questo preambolo serve per produrre un &lt;span style="font-family:courier new;"&gt;pdf&lt;/span&gt;. Per &lt;span style="font-weight: bold;"&gt;cambiare il tipo di output&lt;/span&gt;, è sufficiente modificare la prima riga in
&lt;code&gt;\input{preamble/dvi}&lt;/code&gt; oppure &lt;code&gt;\input{preamble/xml}&lt;/code&gt;.
&lt;br/&gt;
Il comando &lt;span style="font-family:courier new;"&gt;\makepreamble&lt;/span&gt; costruisce il preambolo per un articolo su foglio A4 con caratteri da 12 punti (i primi due parametri sono identici a quelli del comando &lt;span style="font-family:courier new;"&gt;\documentclass&lt;/span&gt; di &lt;span style="letter-spacing: -0.15em;"&gt;L&lt;sup&gt;&lt;sub&gt;A&lt;/sub&gt;&lt;/sup&gt;&lt;/span&gt;&lt;span style="letter-spacing: -0.1em;"&gt;T&lt;sub&gt;&lt;big&gt;E&lt;/big&gt;&lt;/sub&gt;X&lt;/span&gt;), e imposta il titolo, l'autore e la data.
&lt;br/&gt;
I comandi &lt;code&gt;\setabstract&lt;/code&gt; e &lt;code&gt;\setkeywords&lt;/code&gt; impostano rispettivamente le proprietà del &lt;span style="font-family:courier new;"&gt;pdf&lt;/span&gt; &lt;span style="font-style: italic;"&gt;oggetto&lt;/span&gt; e &lt;span style="font-style: italic;"&gt;parole chiave&lt;/span&gt;; anche se servono solo per il &lt;span style="font-family:courier new;"&gt;pdf&lt;/span&gt;, si possono lasciare nel sorgente senza danni perchè i file della libreria &lt;span style="font-family:arial;"&gt;preamble&lt;/span&gt; rispettano tutti la stessa interfaccia, che definisce anche questi comandi.
&lt;/p&gt;
&lt;p&gt;
Ecco come sono i sorgenti:
&lt;br/&gt;
&lt;span style="font-weight: bold;font-family:arial;" &gt;pdf.tex&lt;/span&gt;
&lt;pre class="code wikitalis"&gt;
\newcommand{\makepreamble}[5]{
 \RequirePackage{ifpdf}
 \ifpdf
   \documentclass[#2]{#1}
   \RequirePackage[hyperindex]{hyperref}
   \hypersetup{
     pdftitle={#3},
     pdfauthor={#4},
     pdfcreator={wordml2latex (Ruggero Dambra, http://www.mondorux.com)},
     colorlinks=true,
     linkcolor=red,
     anchorcolor=black,
     citecolor=green,
     filecolor=magenta,
     menucolor=black,
     urlcolor=blue,
     breaklinks=true,
     pdfstartview=FitH,
     pdfpagemode=UseOutlines
   }
   \usepackage[pdftex]{graphicx}
   \DeclareGraphicsExtensions{.pdf,.png,.jpg}
 \else
   \documentclass[#2]{#1}
   \usepackage{hyperref}
   \usepackage{graphicx}
   \DeclareGraphicsExtensions{.eps,.ps}
 \fi

 \usepackage[]{fontenc}
 \usepackage[latin1]{inputenc}
 \usepackage[italian]{babel}
 \frenchspacing
 \title{#3}
 \author{#4}
 \date{#5}
}

\newcommand{\setabstract}[1]{
 \RequirePackage{hyperref}
 \hypersetup{pdfsubject={#1}}
}

\newcommand{\setkeywords}[1]{
 \RequirePackage{hyperref}
 \hypersetup{pdfkeywords={#1}}
}
&lt;/pre&gt;

&lt;span style="font-weight: bold;font-family:arial;" &gt;ht.tex&lt;/span&gt;
&lt;pre class="code wikitalis"&gt;
\newcommand{\makepreamble}[5]{
 \documentclass{#1}
 \usepackage[T1]{fontenc}
 \usepackage{hyperref}
 \usepackage{graphicx}
 \DeclareGraphicsExtensions{.gif,.png,.jpg}
 \usepackage[latin1]{inputenc}
 \usepackage[italian]{babel}
 \frenchspacing
 \title{#3}
 \author{#4}
 \date{#5}
}

\newcommand{\setabstract}[1]{}
\newcommand{\setkeywords}[1]{}

\newcommand{\href}[2]{\Link[#1]{}{} #2 \EndLink}
\newcommand{\hypertarget}[2]{\Link[]{}{#1} #2 \EndLink}
\newcommand{\hyperlink}[2]{\Link[]{#1}{} #2 \EndLink}
&lt;/pre&gt;

&lt;span style="font-weight: bold;font-family:arial;" &gt;dvi.tex&lt;/span&gt;
&lt;pre class="code wikitalis"&gt;
\newcommand{\makepreamble}[5]{
 \documentclass[#2]{#1}
 \usepackage[T1]{fontenc}
 \usepackage{hyperref}
 \usepackage{graphicx}
 \DeclareGraphicsExtensions{.eps,.ps}
 \usepackage[latin1]{inputenc}
 \usepackage[italian]{babel}
 \frenchspacing
 \title{#3}
 \author{#4}
 \date{#5}
}

\newcommand{\setabstract}[1]{}
\newcommand{\setkeywords}[1]{}
&lt;/pre&gt;

&lt;span style="font-weight: bold;font-family:arial;" &gt;default.tex&lt;/span&gt;
&lt;pre class="code wikitalis"&gt;
\newcommand{\makepreamble}[5]{
 \documentclass[#2]{#1}
 \title{#3}
 \author{#4}
 \date{#5}
}

\newcommand{\setabstract}[1]{}
\newcommand{\setkeywords}[1]{}
&lt;/pre&gt;
&lt;/p&gt;
&lt;p&gt;
In realtà, la finalità di questa libreria non è di evitare la scrittura del preambolo, perchè prima di &lt;code&gt;\begin{document}&lt;/code&gt; si potranno scrivere tutte le ulteriori direttive che servono al nostro documento; il vero pregio è la possibilità di modificare "al volo" quelle parti del preambolo che ottimizzano la produzione di un particolare tipo di output.
&lt;/p&gt;
&lt;/div&gt;
&lt;span style="font-family:arial;"&gt;RFC&lt;/span&gt;: tutti i suggerimenti per migliorare sono benvenuti.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3744914562289486967-7948348291506858539?l=mondorux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mondorux.blogspot.com/feeds/7948348291506858539/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3744914562289486967&amp;postID=7948348291506858539' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3744914562289486967/posts/default/7948348291506858539'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3744914562289486967/posts/default/7948348291506858539'/><link rel='alternate' type='text/html' href='http://mondorux.blogspot.com/2008/11/latex-senza-preamboli.html' title='LaTeX senza preamboli'/><author><name>ruggdam</name><uri>http://www.blogger.com/profile/01882728871834764883</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/_oqoqk5RoDTc/SQi-ThGN5OI/AAAAAAAAAGQ/YIcZlkvblMc/S220/linkedin.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3744914562289486967.post-360533482583204084</id><published>2008-10-29T22:43:00.005+01:00</published><updated>2008-11-14T11:06:08.472+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><category scheme='http://www.blogger.com/atom/ns#' term='ottimizzazione'/><title type='text'>Ottimizzazione di Windows</title><content type='html'>&lt;div style="text-align: left;"&gt;&lt;div style="text-align: left;"&gt;L'ottimizzazione del sistema operativo di casa Microsoft è spesso considerata un'operazione misteriosa da cervelloni informatici.
&lt;/div&gt;&lt;div style="text-align: left;"&gt;In alcuni casi lo è, ad esempio se si vuole far girare Windows XP in 64 MB di memoria o ridurre lo spazio sul disco fisso occupato dal sistema operativo a 200 MB; ma in questi casi è necessario modificare la struttura stessa dell'installazione di Windows e bisogna conoscere le componenti che si vogliono toccare (o essere pronti a reinstallare tutto).
&lt;/div&gt;&lt;div style="text-align: left;"&gt;Normalmente però mi viene richiesto qualcosa di molto più semplice: ridurre il degrado di prestazioni che inevitabilmente si crea con un uso non oculato del sistema.
In questi casi, con poche conoscenze di base e l'aiuto di alcuni programmi che non necessitano di installazione (cosiddetti "portable"), opero così:
&lt;/div&gt;&lt;ol&gt;&lt;li&gt;Analizzo l'uso della memoria di massa (i dischi fissi), con il comodo &lt;a href="http://www.steffengerlach.de/freeware/"&gt;Scanner&lt;/a&gt; e cancello eventuali file o cartelle ingombranti e inutili;&lt;/li&gt;&lt;li&gt;Eseguo una pulizia dei file e del registro di configurazione con &lt;a href="http://www.ccleaner.com/"&gt;CCleaner&lt;/a&gt;;
&lt;/li&gt;&lt;li&gt;Eseguo la scansione antivirus e antispyware completa: come antivirus uso &lt;a href="http://portableapps.com/apps/utilities/clamwin_portable"&gt;ClamWinPortable&lt;/a&gt; e una selezione di &lt;a href="http://delicious.com/ruggdam/antivirus"&gt;antivirus on-line&lt;/a&gt;; come antispyware &lt;a href="http://www.safer-networking.org/it/index.html"&gt;Spybot- S&amp;amp;D&lt;/a&gt;;&lt;/li&gt;&lt;li&gt;Richiedo l'esecuzione di ScanDisk (uno degli strumenti forniti con Windows stesso) al successivo avvio del sistema operativo;&lt;/li&gt;&lt;li&gt;Disattivo la memoria virtuale per eliminare il file di paging (serve solo per eseguire una deframmentazione più completa dopo il successivo riavvio);&lt;/li&gt;&lt;li&gt;Riavvio; ScanDisk sarà eseguito automaticamente;&lt;/li&gt;&lt;li&gt;Deframmento tutti i dischi con &lt;a href="http://www.kessels.com/Jkdefrag/"&gt;JKDefrag&lt;/a&gt; e &lt;a href="http://www.defraggler.com/"&gt;Defraggler&lt;/a&gt;; quest'ultimo ha la particolarità di poter deframmentare i file singolarmente;&lt;/li&gt;&lt;li&gt;Deframmento il registro di configurazione con &lt;a href="http://www.portablefreeware.com/?sc=160&amp;amp;p=3"&gt;RegDefrg&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Imposto in &lt;a href="http://technet.microsoft.com/en-us/sysinternals/bb897426.aspx"&gt;PageDefrag&lt;/a&gt; la deframmentazione dei file di sistema al successivo riavvio;&lt;/li&gt;&lt;li&gt;Dopo il riavvio, riattivo la memoria virtuale.&lt;/li&gt;&lt;/ol&gt;Questa è la procedura classica che uso quando il tempo non mi manca...
&lt;span style="font-family:verdana;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3744914562289486967-360533482583204084?l=mondorux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mondorux.blogspot.com/feeds/360533482583204084/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3744914562289486967&amp;postID=360533482583204084' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3744914562289486967/posts/default/360533482583204084'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3744914562289486967/posts/default/360533482583204084'/><link rel='alternate' type='text/html' href='http://mondorux.blogspot.com/2008/10/ottimizzazione-di-windows.html' title='Ottimizzazione di Windows'/><author><name>ruggdam</name><uri>http://www.blogger.com/profile/01882728871834764883</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/_oqoqk5RoDTc/SQi-ThGN5OI/AAAAAAAAAGQ/YIcZlkvblMc/S220/linkedin.jpg'/></author><thr:total>0</thr:total></entry></feed>
