ChannelWeb.it - Bloghttp://www.channelweb.it/section/blogitaBEdita, semantic content managment frameworkPrima beta scaricabile del nostro progetto <hr/><p>Dopo due anni di duro lavoro (in collaborazione con <a title="Chia lab Srl" href="http://www.chialab.it" target="_blank">Chialab</a>) abbiamo finalmente pubblicato e rilascato la prima <em>beta </em>pubblica con licenza open source del progetto <a title="BEdita.com" href="http://www.bedita.com" target="_blank"><strong>BEdita</strong></a>: un framework per creare applicazioni Web pensato per il Web2.0, che ambisce a diventare uno strumento di riferimento per <a title="Web 3.0" href="http://www.scribd.com/doc/2021419/A-More-Revolutionary-Web-Print-Version-International-Herald-Tribune" target="_blank">il prossimo Web3.0</a> e per il futuro <a title="Semantic Web" href="http://www.w3.org/2001/sw/" target="_blank">Web Semantico</a></p> <p>La beta scaricabile la trovate su <a title="BEdita 3.0 - latest release" href="http://www.bedita.com/be-download" target="_self">http://www.bedita.com/be-download</a></p> <h3><strong>Framework o CMS?</strong><br /></h3> <p><a title="BEdita.com" href="http://www.bedita.com" target="_blank"><strong>BEdita</strong></a> presenta molte analogie con i cosiddetti <a title="CMS" href="http://www.contentmanager.eu.com/history.htm" target="_blank">CMS (Content Management Systems)</a> e spesso &egrave; presentato cos&igrave; per semplicit&agrave;, ne rispetta infatti (almeno in parte) la definizione: <em>a tool that enables technical and non technical staff to create, edit, manage and finally publish a variety of content (such as text, graphics, video, documents etc). </em>Con la differenza che lato <em>publishing</em> non fornisce volutamente una soluzione di default finita e univoca.</p> <p>Una buona definizione <a title="what is a framework?" href="http://blog.newtonicaonline.com/2008/12/06/what-is-framework" target="_blank">di framework software</a> ci pu&ograve; aiutare a capire meglio: a <em>framework is </em><em><strong>incomplete, though concrete, driving solution to recurring high-value problem. </strong></em>In questo senso BEdita &egrave;:</p> <ol> <li><em>incomplete </em>&ndash; non &egrave; uno software che da solo risolve un problema/bisogno di un utente; piuttosto &egrave; un potente strumento per [web]designer/[web]developer che vogliono creare applicazioni frontend; </li> <li><em>driving solution to recurring high-value problem</em> &ndash; &egrave; utile in tutte le situazioni in cui debba costruire un'applicazione (<em>frontend</em>)<em> </em>in cui &egrave; necessario gestire contenuti complessi e multimediali, e le loro relazioni semantiche; evita a un designer/developer di dover affrontare e risolvere tutte le tipiche problematiche correlate. </li> </ol> <h3><strong>Architettura e principali features</strong></h3> <p>A livello architetturale gli elementi fondamentali del <em>semantic framework </em>sono due:</p> <ol> <li>un'applicazione Web di backend per la redazione dei contenuti e delle loro propriet&agrave; e relazioni semantiche, con un'interfaccia utente innovativa per l'ergonomia tramite l'associazione cromatica fra tipologie di oggetti, l'uso estensivo del drag'n'drop e altre tecniche AJAX; </li> <li>un API di frontend, servizi e specifiche per creare applicazioni frontend; con interfaccia Web in prima battuta, ma anche desktop/mobili sfruttando, per esempio, l'interfaccia nativa REST/XML. </li> </ol> <p>L'applicazione <strong>backend</strong> &egrave; unica ed &egrave; la medesima per ogni installazione del sistema o istanza, le applicazioni <strong>frontend </strong>sono costruite tramite un'<strong>API </strong>ed ereditano dal core del sistema<strong> classi Model e business logic</strong>: possono essere poche linee di codice PHP o strutture pi&ugrave; complesse. Questa separazione &egrave; una scelta fatta per ragioni di sicurezza, efficienza, scalabilit&agrave; e per lasciare maggiore libert&agrave; possibile al lavoro del designer/developer.</p> <p>Riassiumiamo di seguito le caratteristiche/features pi&ugrave; interessanti del sistema nel suo complesso:</p> <ul> <li> <strong>internazionalizzazione</strong> completa: gestione di contenuti e interfaccia utente in qualunque lingua (tutte le lingue definite dallo standard ISO-693-3 sono in teoria supportate) &ndash; lato UI &egrave; utilizzato il formato gettext, mentre per oggetti/contenuti &egrave; stata creata una struttura dati dedicata; </li> </ul> <ul> <li>sistema a<strong> oggetti</strong>: ogni tipo di contenuto dentro BEdita &egrave; un oggetto, che pu&ograve; essere taggato, categorizzato, tradotto, geolocalizzato; quindi non solo documenti, ma anche immagini, video, eventi, schede anagrafiche, gallerie multimediali, newsletter... </li> <li>estensione <strong>oggetti: </strong>possibilit&agrave; di creare nuovi tipi di oggetti, possibilit&agrave; di aggiungere propriet&agrave; custom tipizzate agli oggetti stessi; </li> </ul> <ul> <li> <strong>modularit&agrave;</strong>: moduli software specifici per task e tipi di contenuti differenti (cio&egrave; <em>multimedia, events, news, administration, publishing, addressbook, newsletter</em>,...) </li> </ul> <ul> <li> posibilit&agrave; di creare <strong>relazioni semantiche libere</strong> fra oggetti; </li> </ul> <ul> <li>sistemi di <strong>autenticazione</strong> interno o esterno/pluggable tipo LDAP o OpenID; </li> </ul> <ul> <li>gestione integrata di sistema di <strong>newsletter</strong> (modulo dedicato); </li> </ul> <ul> <li> <strong>statistiche</strong> redazionali, integrazione di statistiche con sistemi come Google analytics, Piwik e log del web server (apache logs); </li> </ul> <ul> <li> <strong>granularit&agrave;</strong> di accesso: definizione dinamica di gruppi di utenti con accesso in lettura/scrittura ai singoli moduli software; </li> </ul> <ul> <li> <strong>interfaccia XML/REST</strong> e JSON nativa per gli oggetti pubblicati; </li> </ul> <ul> <li>ogni oggetto &egrave; identificato da un nome proprio alfanumerico detto<strong><em> nickname</em></strong><em> </em>che pu&ograve; essere usato nelle URL e applicazioni frontend per referenziarlo; &egrave; l'equivalente <em>semantico</em> dell'ID; </li> </ul> <p>&nbsp;</p>Wed, 13 May 2009 15:04:00 +0200http://www.channelweb.it/bedita-semantic-content-managment-frameworkhttp://www.channelweb.it/bedita-semantic-content-managment-frameworkIl Web compie 20 anni, e non li dimostraNel marzo del 1989 a Tim Berners Lee venne un'idea...<hr/><p>Sembra passato veramente tanto tempo dal <a title="CERN 20 years WWW" href="http://info.cern.ch/www20/" target="_blank">marzo 1989</a> quando un ricercatore del <a title="CERN website" href="http://cern.ch" target="_blank">CERN </a>di Ginevra propose un documento intititolato: <span style="text-decoration: underline;"><em>Information Management : a Proposal</em></span>.</p> <p>In <a title="Berners Lee Proposal" href="http://info.cern.ch/Proposal.html" target="_blank">questo documento</a> proponeva <em>"a large hypertext database with typed links"</em>, e non riscosse un grande successo all'epoca (beh, capita spesso alle buone idee).</p> <p>Per il primo sistema Web funzionante bisogner&agrave; aspettare la fine del 1990 quando Berners Lee mise in piedi: un Web server, un browser, il prodocollo HTTP e le prime pagine HTML che descrivevano il progetto stesso....</p> <p>Qui troverai approfondimenti sul <a title="CERN: the First Web Server" href="http://info.cern.ch" target="_blank">primo server Web</a>.</p> <p>Ora il Web &egrave; diventato uno strumento importante nella vita di tutti i giorni per moltissime persone: ma &egrave; ancora sottoutilizzato, usato male e fondamentalmente non compreso appieno .... insomma c'&egrave; ancora davvero tanto da fare.... siamo solo all'inizio! :-)</p> <p>&nbsp;</p> <p><strong>Nota</strong>: <em>&egrave; bello notare come una figura come Berners Lee non sia poi diventata una specie di popstar, &egrave; sempre rimasto dietro le quinte a lavorare e ha preso la parola solo su argomenti veramente importanti (vedi <a title="Net Neutrality" href="http://en.wikipedia.org/wiki/Net_Neutrality" target="_blank">Net Neutrality</a> e <a title="W3C: Semantic web FAQ" href="http://www.w3.org/2001/sw/SW-FAQ" target="_blank">Semantic Web</a>). E proprio in questi giorni si &egrave; espresso chiaramente <a title="Berners-Lee: non spiate la rete " href="http://punto-informatico.it/2574193/PI/News/berners-lee-non-spiate-rete.aspx" target="_blank">in difesa della privacy sul Web</a>. </em>Grazie Tim!!</p>Sun, 15 Mar 2009 12:24:59 +0100http://www.channelweb.it/il-web-compie-20-anni-e-non-li-dimostrahttp://www.channelweb.it/il-web-compie-20-anni-e-non-li-dimostraQuante licenze Open Source? Ne bastano 4Anzi due. Parola di Bruce Perens.<hr/><p>In un <a title="Perens Open Source Licenses" href="http://itmanagement.earthweb.com/osrc/article.php/12068_3803101_3/Bruce-Perens-How-Many-Open-Source-Licenses-Do-You-Need.htm" target="_blank">bell'articolo</a> che invito tutti a leggere <a title="Bruce Perens" href="http://perens.com/" target="_blank">Bruce Perens</a> affronta il classico problema di quale licenza <a title="Free/Open Source" href="http://en.wikipedia.org/wiki/Free_and_Open_Source_Software" target="_blank">Free/Open Source</a> scegliere per il proprio progetto.</p> <p>Esprime bene quello che penso da parecchio tempo, ovviamente lo fa molto meglio di quanto potrei fare io...</p> <p>In breve il problema &egrave; questo: ci sono tante licenze Free/Open Source (pi&ugrave; di 70) nate per scopi differenti; tutte rispettano i principi del <a title="Free Software Foundation" href="http://www.fsf.org/" target="_blank">Free Software</a> e dell'<a title="Open Source Initiative" href="http://www.opensource.org" target="_blank">Open Source</a>; non tutte sono <em>della stessa qualit&agrave;</em>; molte possono creare conflitti: se devo combinare pi&ugrave; software con licenze differenti potrei semplicemente non farcela o complicarmi parecchio la vita. Che fare?</p> <p>Semplice. Per chi fa <em>business</em> con il software Free/Open Source Perens individua due obiettivi tipici:</p> <ol> <li> <em>to get everyone possible to use </em><em>your software to do things the same way </em>(per esempio, se vuoi promuovere un formato/protocollo affinch&egrave; diventi uno <em>standard</em>) </li> <li> <em>to create a partnership for software development, where everybody shares in the work</em> (cio&egrave; creare un <em>ecosistema collaborativo</em> attorno al tuo progetto/prodotto e far si che un possibile concorrente se ne possa anche avvantaggiare ma sia costretto a condividere miglioramenti e correzioni apportate al software) </li> </ol> <p>Per raggiungere al meglio questi obiettivi i consigli sono:</p> <ol> <li> una licenza <em>permissiva</em> come <a href="http://www.apache.org/licenses/LICENSE-2.0">The Apache License 2.0</a> simile alle licenze MIT e BSD, ma con una protezione migliore dai brevetti (obiettivo: maggiore uso/penetrazione del software); </li> <li>una licenza per <em>condividere con delle regole</em> come la <a href="http://www.fsf.org/licensing/licenses/gpl.html">GPL 3</a>, evoluzione delle licenza GPL, criticata per delle clausole anti-DRM che per Perens sono invece fra i suoi punti di forza (obiettivo: permettere un ampio uso ma <em>costringere a collaborare</em> sull'evoluzione del software);<br /></li> <li>una licenza <em>via di mezzo </em>come <a href="http://www.fsf.org/licensing/licenses/lgpl.html">LGPL 3</a> che consente di creare soluzioni proprietarie, ma richiede di rendere <em>disponibili </em>eventuali migliorie/correzioni;</li> <li>una licenza <a href="http://www.fsf.org/licensing/licenses/agpl.html">Affero GPL3</a> pensata per condividere con delle regole (<em>sharing-with-rules</em>) anche il software tipicamente usato via rete: vedi applicazioni Web (ma non solo) in primis. <br /></li> </ol> <p>Quest'ultima licenza vuole evitare che il <strong><em>Google</em> <em>di turno</em></strong> si prenda il tuo software e lo usi senza condividere le modifiche: la <strong>GPL</strong> classica richiede la <em>condivisione</em> del codice <em>unicamente </em>quando il codice &egrave; distribuito, ma il <strong><em>Google di turno</em></strong> non redistribuisce software, pubblica servizi. Questa licenza equipara l'utilizzo di un servizio via rete (vedi: usare una Web application come GMail) alla <em>distribuzione</em> del software: il <strong><em>Google di turno</em></strong> &egrave; obbligato a <em>rendere disponibili </em>le sue modifiche per il solo fatto di pubblicare sui suoi server un servizio basato su quel software.</p> <p>E' la stessa licenza che abbiamo scelto per il nostro Semantic Content Management Framework <a title="BEdita" href="http://www.bedita.com" target="_blank"><strong>BEdita</strong></a>, fa piacere notare che Perens avrebbe preso la stessa decisione.....</p> <p>Per concludere le licenze consigliate sono di fatto solo due: <a href="http://www.apache.org/licenses/LICENSE-2.0">The Apache License 2.0</a> e <a href="http://www.fsf.org/licensing/licenses/gpl.html">GPL 3 </a>. Le altre due (LGPL3 e Affero GPL3) sono solo variazioni della GPL3.</p> <p>Sono tutte licenze <em>compatibili </em>fra loro e (SOPRATTUTTO) sono state studiate e revisionate <strong>parola per parola</strong> da <em>decine e decine di avvocati</em> delle aziende pi&ugrave; grandi al mondo.<em> </em></p> <p><em>"No license anywhere has had 1/10 of the legal review that went into GPL3</em>."</p> <p>Quindi perch&egrave; non usarle? E perch&egrave; mai inventarsene di nuove?</p>Tue, 17 Feb 2009 01:06:52 +0100http://www.channelweb.it/quante-licenze-ne-bastano-4http://www.channelweb.it/quante-licenze-ne-bastano-4XPS, attacco all'altro monopolio, part 1Ovvero quando Microsoft decide di entrare nei terreni consolidati e presidiati da Adobe Corporation.<hr/><p>Con il lancio di Vista&trade;, la Microsoft (MS, ma quella 'mmericana) ha presentato due nuovi "standard suoi": Silverlight per la pubblicazione di contenuti multimediali e vettoriali su Web e XPS per la fruizione di contenuti paginati orientati alla stampa.</p> <p>Perch&eacute; Silverlight&trade; e XPS sono i concorrenti diretti di due "standard" <em>de facto</em>: il formato di file SWF (Adobe Flash&trade;, Flex&trade;, ecc&hellip;) e il formato PDF (Adobe Acrobat&trade; e tante altre robe). Oggi tocca a...</p> <p>&nbsp;</p> <!--more--> <h3>XPS</h3> <p>La MS ha sviluppato XPS (<strong>X</strong>ML <strong>P</strong>aper <strong>S</strong>pecification, nome in codice &ldquo;metro&rdquo;) in cooperazione con altre <em>IT companies</em>: come in parte recita il nome, &ldquo;specifiche per la carta in XML&rdquo;, &egrave; il set di specifiche tecniche di un linguaggio basato su XML per documenti paginati (cartacei e non), indipendenti da piattaforme software e periferiche I/O: le pagine del documento possono contenere testo e grafica, e il loro aspetto &egrave; consistente qualunque sia la stampante o il software di visualizzazione utilizzato. In pratica, un file XPS &egrave; un archivio <em>zip</em> contenente tutti i file di cui si compone il documento: un file XML per ciascuna pagina, il testo, i font, le immagini bitmap, grafica vettoriale 2D e le informazioni DRM (<em>Digital Rights Management</em>). In MS Vista&trade; il supporto a XPS &egrave; nativo: &egrave; utilizzato come formato di <em>spool</em> per la stampa, si possono creare documenti XPS tramite una apposita stampante virtuale (<em>virtual XPS printer driver</em>) ed &egrave; pre-installato un programma di visualizzazione come estensione del <em>browser</em> Internet Explorer 7 (<em>XPS Viewer</em>). Il <em>viewer</em> e il <em>driver</em> sono disponibili agli utenti di Windows XP tramite l'installazione di .Net Framework 3.0. Non riassumo le specifiche della tecnologia XPS, che potete <a title="XML Specs su Wikipedia (en)" href="http://en.wikipedia.org/wiki/XML_Paper_Specification" target="_blank">naturalmente leggere altrove</a>. Sta di fatto che la MS ha sottoposto dette specifiche al ECMA International per ottenere il riconoscimento dello <em>standard</em> internazionale (committee TC46). E poi la licenza &egrave; un capolavoro di comunitarismo gi&agrave; nel nome, <em>Community Promise for XPS,</em> e dispone che sia <em>royalty free</em> e liberamente ridistribuibil<em>e.</em></p> <p>&nbsp;</p> <h3>XML VS PDF</h3> <p>Il formato PDF (Portable Document Format) non bisogna certo di presentazioni. Certo XPS nasce come suo concorrente diretto:</p> <ul> <li>Sia XPS che PDF possono essere usati come formato di visualizzazione, scambio e stampa di documenti.</li> <li>Entrambi mirano a descrivere pagine fisse, ovvero di precise dimensioni e il cui contenuto non cambia aspetto e disposizione con la piattaforma di visualizzazione.</li> <li>Sia XPS che PDF possono essere usati come linguaggi di descrizione della stampa e comunicazione con le macchine stampanti. Per esempio, cos&igrave; come a PDF si accompagna il formato JDF (Job Definition Format) per la descrizione del flusso di lavoro, XPS &egrave; dotato dei &ldquo;Print Tickets&rdquo; che, seppure con qualche differenza, implementano un'applicazione simile.</li> </ul> <p>&nbsp;</p> <p>Certo, PDF ha i vantaggi di</p> <ul> <li>essere da anni uno standard di mercato, soprattutto nella grafica;</li> <li>essere molto conosciuto e largamente utilizzato;</li> <li>avere una enorme libreria di software dedicato;</li> <li>essere davvero <em>cross-platform</em>, dal momento che &egrave; utilizzabile su qualsiasi sistema, dai grossi server ai palmari</li> </ul> <p>&nbsp;</p> <p>Ma &egrave; vero anche che XPS</p> <ul> <li>&egrave; realmente completamente gratuito;</li> <li>&egrave; basato su XML e compressione zip, quindi &egrave; facile e poco dispendioso implementare software dedicato;</li> <li>&egrave; distribuito con il sistema operativo pi&ugrave; diffuso del pianeta;</li> <li>anche se Adobe Corporation &egrave; una gigantesca holding potente ed influente, la Microsoft &egrave; ancora pi&ugrave; grande, pi&ugrave; potente e, <em>&ccedil;a va de soi</em>, pi&ugrave; influente.</li> </ul> <p>&nbsp;</p> <p>Continua...</p> <p>(con Silverlight&trade;, attacco all'altro monopolio - parte II)</p>Fri, 14 Nov 2008 14:22:36 +0100http://www.channelweb.it/xps-attacco-all-altro-monopolio-part-1-1http://www.channelweb.it/xps-attacco-all-altro-monopolio-part-1-1Nomi di dominio “internazionalizzati”L'internazionalizzazione dei nomi di dominio in 6 mosse (o poco più)<hr/><p>La questione se la sono posta i non occidentali (naturalmente) gi&agrave; una decina di anni fa.</p> <p>Dunque da allora ad oggi:</p> <ol> <li>Il principale problema consisteva nell'impossibilit&agrave; pratica di riprogettare l'intera struttura dei DNS;</li> <li>Dopo qualche anno di dibattiti, nel 2003 &egrave; stato definito lo standard "<em>backward compatible</em>" <strong>IDNA</strong> (<strong>I</strong>nternationalizing <strong>D</strong>omain <strong>N</strong>ames in <strong>A</strong>pplications): un'applicazione <em>IDNA compatible</em> &egrave; in grado di effettuare conversioni dalla rappresentazione "restricted ASCII" a quella "non-ASCII" e viceversa (per es. un browser Web usa la versione restricted-ASCII per interrogare il DNS, ma presenta l'URL in lingua madre nella barra degli indirizzi);</li> <li>Da allora sono accettati i domini <strong>IDN</strong> (<strong>I</strong>nternationalized <strong>D</strong>omain <strong>N</strong>ames), che sono tutti quelli composti esclusivamente da <em>labels</em>&nbsp;a cui si pu&ograve; applicare con successo l'algoritmo IDNA di conversione "ToASCII";</li> <li>Dal 2004 gi&agrave; in Giappone si potevano registrare nomi di dominio internazionalizzati con estenzione .jp, successivamente anche i .info;</li> <li>Solo nel novembre 2007 un gruppo di lavoro dell'ICANN ha iniziato a lavorare agli altri TLD delle varie nazioni;</li> <li>Nel marzo 2008 infine l'IETF ha fondato un gruppo di lavoro per aggiornare il protocollo IDNA.</li> </ol> <p>&nbsp;</p> <p>Detto questo resta che:</p> <ol> <li>Tutti i moderni browser fanno la traduzione tramite l'algoritmo IDNA citato e sono dunque compatibili: Mozilla 1.4 (con Firefox), Netscape 7.1, Opera 7.11 e Safari.Internet Explorer 7.0 e le URL APIs di Windows Vista offrono supporto nativo agli IDN; non &egrave; compatibile Internet Explorer 6 (ma esiste un <em>plugin</em>).</li> <li>C'&egrave; un <strong>grosso problema di sicurezza</strong>&nbsp;legato all'uso di omografi/omoglifi in situazioni di <em>phishing</em> o, meglio, per quello che &egrave; chiamato "<em>homograph spoofing attack</em>".Per esempio questo link che segue <br /><br /><a href="http://www.xn--pypal-4ve.com/">http://www.pаypal.com</a><br /><br />non vi porta al sito di paypal, perch&eacute; al posto del carattere latin 1 "a" (Unicode U+0061) &egrave; stato usato il carattere cirillico "а" (Unicode U+0430), visivamente uguale. <br /> L'esempio vale per tutti i numerosi casi di somiglianza tra lettere o ideogrammi, etc...<br /> L'esempio citato &egrave; stato fatto dal gruppo Shmoo alla conferenza hacker Shmoocon, <a href="http://www.shmoo.com/idn/">http://www.shmoo.com/idn/</a>. <p>(NB: dal novembre 2005, per sicurezza, Firefox riporta nell'URL il risultato della traduzione tramite l'algoritmo citato ToASCII)</p> </li> </ol> <p>&nbsp;</p> <p>Per finire:</p> <ol> <li>Si possono usare domini internazionalizzati, ma la comunicazione avviene attraverso l'uso dei relativi convertiti tramite l'algoritmo citato IDNA ToASCII e succede tutto a livello di browser (o in generale di applicazione <em>client</em>, ovvero il server manco lo sa che a lui &egrave; associato un nome Unicod-izzato/Internazionalizzato, perch&eacute; lui &egrave; configurato per funzionare con la versione ASCII del medesimo dominio);</li> <li>Niente &egrave; definitivo, se ne discute ancora e il protocollo sar&agrave; aggiornato; ma sicuramente non si abbandoner&agrave; la compatibilit&agrave; verso il basso.</li> </ol>Mon, 10 Nov 2008 11:22:56 +0100http://www.channelweb.it/nomi-di-dominio-internazionalizzatihttp://www.channelweb.it/nomi-di-dominio-internazionalizzati~/.bash_historyIntroduzione all'uso dell'history in Bourne Shell<hr/><p>Ho appena letto di M.F. - utente Linux - che, avendo creato un programmino per inviare SMS da <em>shell</em>, ha poi trovato prova inconfutabile delle proprie corna in <code>~/.bash_history</code>: una relazione di sei anni, con tanto di promessa di matrimonio e progetti prolifici (by etimo), si frantumava contro un <code>|less</code>.</p> <p>Pare poi che M.F. non possa vivere senza di lei e dunque, avendo letto tutti gli espliciti sessuali negli SMS inviati dalla fedifraga a terzo, ha scambiato un newsgroup di Gentoo per "La posta del cuore" e ha - seriamente, miseramente, pateticamente - chiesto consiglio a una manica di smanettoni menefreghisti. E mi sa tanto che non &egrave; colpa della tipa...</p> <p>&nbsp;</p> <p>Ma se l'<code>history</code> ha portato tanto dispiacere a M.F., pu&ograve; portare altrettanto e pi&ugrave; diletto a tutti noi. Vi mostro come.</p> <pre class="code">&gt; history</pre> <p>Vi mena gi&ugrave; tutti i comandi salvati automaticamente in <code>~/bash_history</code>, preceduti da un numero progressivo di riga.</p> <pre class="code">&gt; history 10</pre> <p>Vi tira fuori gli ultimi 10. Ok, ma che me ne faccio dei numeri di riga? E' presto detto:</p> <pre class="code">&gt; !101</pre> <p>Esegue il comando alla posizione 101.</p> <pre class="code">&gt; !-3</pre> <p>Esegue il comando che compare 3 posizioni indietro partendo dal basso (conta a partire da 1, non da 0 come si aspetterebbe qualche esploratore di <em>array</em></p> <p>).</p> <pre class="code">&gt; !!</pre> <p>Richiama l'ultimo comando inserito, sinonimo di <code>!-1</code>. Poi ancora:</p> <pre class="code">&gt; !wh</pre> <p>Richiama l'ultimo comando che inizia per "wh...". Se non dovessi ricordare se l'ultimo era un <code>who</code> oppure un <code>which</code>, puoi sempre digitare <code>CTRL+r</code> e iniziare a scrivere una qualunque porzione del comando: mano mano che scrivi, per magia, si materializzer&agrave; l'intera riga.</p> <!--more--> <p>.</p> <p>Pausa. Vi siete scaldati? Perch&eacute; ora arriva la parte divertente.</p> <p>Innanzitutto una sostituzione veloce sull'ultimo comando eseguito, <code>^string1^string2^</code>.</p> <p>Per esempio:</p> <pre class="code">&gt; find . -anme "*php" | wc -l<br /> find: invalid predicate '-anme' [cazzarola!]<br /> &gt; ^an^na^<br /> find . -name "*.php" | wc -l<br /> 361</pre> <p>Il comando <strong><code>!</code></strong>, che da inizio ad una (cosiddetta) <em>history expansion</em>, supporta alcune opzioni precedute da <strong><code>:</code></strong> (due punti).</p> <p>Si possono usare numeri interi per richiamare la n-esima parola nella riga richiesta. Per esempio:</p> <pre class="code">&gt; !cp:2</pre> <p>designa il secondo argomento dell'ultimo comando eseguito che inizia con "cp".</p> <p>Al posto del numero, si pu&ograve; usare <code>^</code> per riferirsi al primo argomento, oppure <code>$</code> per l'ultimo (<code>!!:$</code> si pu&ograve; accorciare in <code>!$</code>).</p> <p>Oppure ancora <strong><code>*</code></strong> per richiamare tutti gli argomenti.</p> <p>Poi ci sono i <em>modificatori</em>.</p> <p>Tra i pi&ugrave; utilizzati: <code>:p</code> stampa il comando senza eseguirlo, <code>:t</code> se l'argomento &egrave; un lungo <em>path</em> prende solo la parte finale, <code>:h</code>, al contrario, rimuove solo la parte finale e prende il resto del <em>path</em> ("p" sta per <em>print</em>, "t" sta per <em>tail</em>, "h" sta per <em>head</em>).</p> <p>Infine per evitare di conservare inutile ciarpame:</p> <pre class="code">&gt; export HISTIGNORE="&amp;:ls:[bf]g:exit&rdquo;</pre> <p>[non verranno conservati comandi duplicati, <code>ls</code>, <code>fg</code>, <code>bg</code> e <code>exit</code>].</p> <p>Vi sembra troppo? State l&igrave; scettici a dire "ma chist'&egrave; scem'... chi caz se li ricorda?!". A mio immodesto parere, se li usate per un po', non ci rinunciate pi&ugrave;.</p> <p>.</p> <p>Famo un esempio pratico articolato:</p> <pre class="code">&gt; cp ~/mytemplate.php /var/www/mysite/newfile.php<br /> &gt; vi !$<br /> &gt; cat ~/myfooter.txt &gt;&gt; !$<br /> &gt; cd !$:h<br /> &gt; svn ci !-2:$:t:p<br /> &gt; !!<br /> </pre> <p>Ve lo spiego?</p> <ol> <li>La prima &egrave; facile, copia quello da la' (la mia home) a la' (un'altra directory);</li> <li><code>vi /var/www/mysite/newfile.php</code>;</li> <li><code>cat ~/myfooter.txt &gt;&gt; /var/www/mysite/newfile.php</code>;</li> <li><code>cd /var/www/mysite/</code>;</li> <li><code>svn ci newfile.php</code> [ma stampa solo, non eseguire, ch&eacute; non sono tanto sicuro...];</li> <li><code>svn ci newfile.php</code> [era giusto e lo eseguo davvero]</li> </ol> <p>.</p> <p>Bene.<br /> Pu&ograve; bastare.<br /> Anzi tre cose ancora:</p> <ol style="list-style-type: lower-roman;"> <li>rientra nell'uso dell'<code>history</code> anche <code>cd -</code>, che vi permette di saltare alla directory in cui eravate prima di un <code>cd</code> (comodo per fare avanti e'ndr&eacute;).</li> <li>l'<em>history</em> pu&ograve; costituire una falla nella sicurezza sotto molteplici aspetti (non solo per questioni di corna) e in particolare su sistemi multi-utente, ma la cosa va al di la' degli scopi di questo articolo.</li> <li>un consiglio alla morosa di M.F.: un'altra volta, prima di lasciare zozzerie nel pc, lancia "unset HISTFILE" e la lista dei comandi inseriti sar&agrave; eliminata al <em>logout</em>. Poi <strong>MI </strong>puoi mandare tutti i messaggi che ti pare...</li> </ol>Mon, 10 Nov 2008 04:30:44 +0100http://www.channelweb.it/bash_historyhttp://www.channelweb.it/bash_historyPHP debug con Xdebug/Eclipse/PDTcinque semplici istruzioni per non perdersi nella configurazione di Xdebug/Eclipse/PDT<hr/><p>Tutti quelli che lavorano sul Web lo sanno: lo sviluppatore PHP &egrave; abituato (<em>male</em>) a debuggare a colpi di print/echo e compagnia, e talvolta gli piace anche! :-)</p> <p>Ok, non &egrave; solo colpa del povero web developer, debuggare non &egrave; <strong>out-of-the-box</strong> come su altri linguaggi o piattaforme... (a meno di non usare IDE proprietari tipo Zend Studio)... ma ora.... siamo nel <strong>2008</strong>, ci sar&agrave; un modo semplice per farlo usando strumenti open source? O vogliamo farci abbattere dalla frustrazione del print/echo/log e continuare a perdere un sacco di tempo???</p> <p>Una soluzione integrata, efficace e libera &egrave; usare la combinazione Xdebug + Eclipse + PDT (il plugin per sviluppare in PHP che supporta anche il debugger Zend). In rete troverete un bel p&ograve; di materiale su come fare. In fondo al post troverete un paio di link utili. Non sto a riscrivere howto/tutorial gi&agrave; ben fatti, leggeteli... di seguito riassumo il tutto in 5 passi, con alcuni problemi comuni (e relative soluzioni) che tipicamente incontrerete. (ah... Eclipse+PDT li dovete gi&agrave; avere)</p> <p><strong>1. installate l'entensione Xdebug</strong>, su linux troverete qualcosa tipo <em>php5-xdebug</em> nel gestore di pacchetti, per win ci sono binari, per mac non so...per chi ha tempo e voglia si pu&ograve; sempre ricompilare; se avete installato il debugger Zend rimuovetelo, va in conflitto con Xdebug, quindi se pensavate di installarlo non fatelo! chiaro il concetto?.... e non dimenticate la cartolina! ;-)</p> <p><strong>2. configurate il modulo</strong>, prendete il php.ini che vi serve guardando la voce "Configuration File" nell'output di <em>phpinfo()</em> per script web o con <em>php -i | grep "Configuration File"</em> per script commandline CLI. Una configurazione di esempio &egrave;:</p> <p><em>[XDebug]<br />zend_extension=/usr/lib/php5/extensions/xdebug.so<br />xdebug.remote_enable=true<br />xdebug.remote_host=127.0.0.1<br />xdebug.remote_port=9000<br />xdebug.remote_handler=dbgp<br />xdebug.profiler_output_dir=/tmp</em></p> <ul> <li><strong>ATTENZIONE</strong> per la voce <em>zend_extension </em>usate <strong>pathnames assoluti</strong>, ma soprattutto la voce da abilitare potrebbe non essere <em>zend_extension</em> ma <em>zend_extension_debug </em>o <em>zend_extension_ts </em>o ancora <em>zend_extension_debug_ts; </em>per capirlo guardate in phpinfo() o php -i le voci <em>Debug Build</em> e <em>Thread Safety</em>, quindi partire da <em>zend_extension</em>:</li> </ul> <ol> <li>se <em>Debug Build =&gt; yes</em> , aggiungete <em>_debug</em></li> <li>se <em>Thread Safety =&gt; enabled</em> , aggiungete <em>_ts</em> </li> </ol> <p><strong>3. riavviate il web server e controllate </strong>l'output di&nbsp;<strong> <em>phpinfo()</em></strong>, troverete <em>"Zend Scripting Language Engine...with Xdebug 2. ..."</em>. Analogamente verificate sulla command line con <em>php -i | grep "Xdebug"</em> , gia' che ci siete verificate i moduli con <em>php -m</em> (no zend debugger, only xdebug!)</p> <p><strong>4. configurazione di eclipse PDT:</strong></p> <ul> <li><em>Window/Preferences/PHP/PHP executables</em>: aggiungete una voce con path completo dell'eseguibile php CLI con php.ini relativo</li> <li><em>Window/Preferences/PHP/Debug:</em>Xdebug come debugger predefinito, come eseguibile quello definito sopra, e abilitate anche <em>"Open in Browser"</em> fra le workbench options<br /></li> </ul> <p><strong>5. esegui il debugger, </strong>&egrave; arrivato il grande momento....<strong> </strong>andate in <em>"Run/Open Debug Dialog..." </em>create nuove voci sul vostro progetto</p> <ul> <li>&nbsp;PHP Script (solo PHP CLI): impostate Debugger (Xdebug), eseguibile PHP e file .php da debuggare (relativamente al worskpace); &egrave; comodo impostare <em>"Break at first line"</em> se non siete strasicuri del flusso di esecuzione, avrete un breakpoint alla prima riga</li> <li>PHP Web Page: impostate Server Debugger (Xdebug), il file iniziale o principale della sessione (non sar&agrave; l'unico debuggabile ovviamente), <em>"Break at first line"</em> se preferite e <strong>attenzione: non usate <em>URL Auto generate</em></strong> tipicamente Eclipse non conosce la vostra configurazione del web server... impostate a mano l'url principale del progetto</li> <li>premete <em>Apply</em> e poi <em>Debug</em>...</li> </ul> <ol> </ol> <p>A questo punto breakpoints, variabili, espressioni..... e mai pi&ugrave; echo/print.. promesso?</p>Wed, 08 Oct 2008 18:22:18 +0200http://www.channelweb.it/php-debug-con-xdebug-eclipse-pdthttp://www.channelweb.it/php-debug-con-xdebug-eclipse-pdt