<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title></title>
	<atom:link href="https://www.appliserver.com/wordpress/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>https://www.appliserver.com/wordpress</link>
	<description>Tecnica e programmazione</description>
	<lastBuildDate>Tue, 25 Feb 2025 22:08:05 +0000</lastBuildDate>
	<language>it-IT</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.4.2</generator>
		<item>
		<title>Cambiamento climatico</title>
		<link>https://www.appliserver.com/wordpress/?p=111</link>
		<comments>https://www.appliserver.com/wordpress/?p=111#comments</comments>
		<pubDate>Thu, 18 May 2023 08:38:08 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Scienza]]></category>

		<guid isPermaLink="false">http://www.appliserver.com/wordpress/?p=111</guid>
		<description><![CDATA[Il cambiamento climatico La narrativa corrente continua ad affermare che le cause del cambiamento climatico in atto siano da imputarsi alle attività umane, si parla cioè di cambiamento climatico antropogenico. Con l&#8217;aiuto dell&#8217;Intelligenza Artificiale di ChatGPT, esploriamo qual è la &#8230; <a href="https://www.appliserver.com/wordpress/?p=111">Continua a leggere<span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<h1>Il cambiamento climatico</h1>
<p><span style="color: #000000;"><span style="font-family: 'Times New Roman', serif;">La narrativa corrente continua ad affermare che le cause del cambiamento climatico in atto siano da imputarsi alle attività umane, si parla cioè di cambiamento climatico antropogenico.</span></span></p>
<p><span style="color: #000000;"><span style="font-family: 'Times New Roman', serif;">Con l&#8217;aiuto dell&#8217;Intelligenza Artificiale di ChatGPT, esploriamo qual è la posizione della scienza ufficiale e cerchiamo di fare chiarezza su questo tema.</span></span></p>
<h2>Il cambiamento climatico esiste?</h2>
<p><span style="color: #000000;"><span style="font-family: 'Times New Roman', serif;">Innanzitutto ChatGPT dichiara che il cambiamento del clima è un fatto assodato:</span></span></p>
<p>“<span style="color: #000080;">C&#8217;è un consenso scientifico abbastanza ampio sul fatto che il clima globale sta cambiando.</span>”</p>
<p><span style="color: #000000;"><span style="font-family: 'Times New Roman', serif;">Però “un consenso scientifico abbastanza ampio” non significa che questa sia una verità. Cosa dicono coloro i quali non sono d&#8217;accordo?</span></span></p>
<p><strong>Nota</strong>: <em>ChatGPT qui mostra chiaramente delle risposte “biased”, ovvero è stato addestrato ad attenersi alle opinioni “mainstream”, in particolare i due capisaldi sono che il cambiamento climatico esiste ed è colpa dell&#8217;Uomo. Punto. Infatti anche quando la domanda riguarda semplicemente il cambiamento climatico e non le sue cause, non perde occasione di infilare nelle risposte il concetto che sia indiscutibilmente di origine antropica. Chi non è d&#8217;accordo, per esempio, viene chiamato “negazionista”, un termine che non è affatto una “vox media” ma di solito ha un connotato vagamente dispregiativo. Per fargli sputare quello che dicono i non allineati bisogna porre domande specifiche, ovvero esso non presenta imparzialmente le varie opinioni. <strong>Spero che questo articolo, oltre ad informare sul tema del “clima impazzito” sia anche uno spunto di riflessione sul fatto che quello che dice una IA non è oro colato e va attentamente valutato</strong>.</em></p>
<p><span style="color: #000000;"><span style="font-family: 'Times New Roman', serif;">Ecco la risposta :</span></span></p>
<p>“<span style="color: #000080;">Chi nega l&#8217;esistenza o l&#8217;incidenza significativa del cambiamento climatico solleva diverse argomentazioni. Ecco alcune delle posizioni comuni sostenute dai negazionisti del cambiamento climatico:</span></p>
<ol>
<li><span style="color: #000080;">Variabilità naturale: Alcuni sostengono che le fluttuazioni climatiche siano un fenomeno naturale e che il cambiamento climatico osservato sia semplicemente il risultato di cicli naturali, come l&#8217;oscillazione naturale dell&#8217;attività solare o i cambiamenti ciclici delle correnti oceaniche.</span></li>
<li><span style="color: #000080;">Dati limitati: Alcuni negazionisti del cambiamento climatico mettono in dubbio l&#8217;affidabilità dei dati climatici o sostengono che i dati disponibili siano insufficienti per trarre conclusioni definitive sul cambiamento climatico. Questa posizione si concentra spesso su incertezze nei modelli di previsione e su discrepanze tra diverse fonti di dati.</span></li>
<li><span style="color: #000080;">Cause naturali: Alcuni negano che l&#8217;attività umana, come l&#8217;emissione di gas serra, sia la principale causa del cambiamento climatico. Invece, attribuiscono il cambiamento climatico a fattori naturali come eruzioni vulcaniche, variazioni nell&#8217;orbita terrestre o attività solare.</span></li>
<li><span style="color: #000080;">Conflitti di interesse: Alcuni negazionisti del cambiamento climatico sostengono che la preoccupazione per il cambiamento climatico sia alimentata da interessi economici e politici. Questa posizione implica che i ricercatori, i governi e le organizzazioni internazionali abbiano un&#8217;agenda nascosta nell&#8217;affermare l&#8217;esistenza del cambiamento climatico.</span></li>
</ol>
<p><span style="color: #000080;">È importante sottolineare che la stragrande maggioranza della comunità scientifica riconosce l&#8217;esistenza del cambiamento climatico e l&#8217;influenza significativa delle attività umane. L&#8217;opinione contraria, sebbene esistente, rappresenta una minoranza e non riflette il consenso scientifico generale. Le posizioni negazioniste del cambiamento climatico sono state ampiamente confutate e smentite dalla ricerca scientifica e dai rapporti dell&#8217;IPCC (Intergovernmental Panel on Climate Change).&#8221;</span></p>
<p><span style="color: #000000;"><span style="font-family: 'Times New Roman', serif;">Ammettiamo quindi che il clima stia effettivamente cambiando. Sulle cause, come ho detto, ChatGPT ha pochi dubbi:</span></span></p>
<p>“<span style="color: #000080;">Numerose evidenze scientifiche indicano che l&#8217;attività umana, in particolare le emissioni di gas serra derivanti dalla combustione di combustibili fossili e dalla deforestazione, sta causando un aumento delle temperature medie della Terra. Questo fenomeno è comunemente noto come riscaldamento globale o cambiamento climatico antropogenico. Gli effetti di questo cambiamento includono l&#8217;aumento delle temperature medie, gli eventi meteorologici estremi più frequenti, l&#8217;innalzamento del livello del mare e gli impatti sugli ecosistemi e sulle comunità umane.</span>”</p>
<p><span style="color: #000000;"><span style="font-family: 'Times New Roman', serif;">Per amor di discussione quindi, diamo per buona l&#8217;opinione che vi sia davvero un cambiamento del clima, cioè che non si tratti di variabilità naturale. A questo punto l&#8217;altro corno del dilemma è: c&#8217;entra davvero l&#8217;Uomo?</span></span></p>
<h2>Ma è davvero colpa nostra?</h2>
<p><span style="color: #000000;"><span style="font-family: 'Times New Roman', serif;">Nel passato della Terra vi sono stati importanti cambiamenti del clima, che hanno stravolto gli ambienti e portato ad estinzioni di massa. Come possiamo quindi essere certi che il cambiamento in atto sia davvero una conseguenza delle attività umane?</span></span></p>
<p>“<span style="color: #000080;">È corretto che nel passato della Terra ci sono stati cambiamenti climatici naturali, indipendenti dalle attività umane. Il clima del nostro pianeta è stato soggetto a variazioni nel corso di milioni di anni a causa di diversi fattori, come variazioni nell&#8217;orbita terrestre, attività vulcanica, cicli solari e cambiamenti nell&#8217;atmosfera. Questi cambiamenti naturali hanno avuto effetti significativi sul clima globale, portando a periodi di riscaldamento o raffreddamento.</span></p>
<p><span style="color: #000080;">Tuttavia, ciò che rende il cambiamento climatico attuale un&#8217;eccezione è la velocità con cui si sta verificando. Gli studi scientifici hanno dimostrato che l&#8217;attuale cambiamento climatico è senza precedenti negli ultimi millenni e che l&#8217;aumento delle temperature globali è in gran parte attribuibile all&#8217;attività umana.</span></p>
<p><span style="color: #000080;">Le emissioni di gas serra prodotte dalle attività umane, come l&#8217;uso di combustibili fossili e la deforestazione, hanno alterato l&#8217;equilibrio naturale dell&#8217;atmosfera, contribuendo all&#8217;effetto serra e all&#8217;aumento delle temperature globali. Questa interferenza antropica nel sistema climatico è ciò che rende l&#8217;attuale cambiamento climatico così preoccupante e ha portato alla necessità di affrontare urgentemente il problema.”</span></p>
<p><span style="color: #000000;"><span style="font-family: 'Times New Roman', serif;">In pratica è la rapidità con cui questo sta avvenendo a puntare il dito verso l&#8217;interferenza delle attività umane. Ma un momento: circa 39000 anni fa l&#8217;eruzione della caldera vulcanica dei Campi Flegrei ha causato una mini-glaciazione. In quell&#8217;immane evento il clima cambiò, almeno a livello regionale. C&#8217;è chi dice addirittura che fu la causa della (ancora non del tutto spiegata) estinzione dell&#8217;Uomo di Neanderthal. Cosa ci dice ChatGPT su questo?</span></span></p>
<h2>Eruzioni vulcaniche e cambiamento del clima</h2>
<p>“<span style="color: #000080;">L&#8217;eruzione più rilevante della caldera dei Campi Flegrei, conosciuta come eruzione Campanian Ignimbrite, avvenne circa 39.000 anni fa durante il Pleistocene superiore. Questa eruzione fu una delle più grandi eruzioni vulcaniche degli ultimi 200.000 anni in termini di volume di materiale espulso. Si stima che siano stati rilasciati circa 150-200 chilometri cubi di materiale vulcanico, principalmente sotto forma di flussi piroclastici.</span></p>
<p><span style="color: #000080;">L&#8217;eruzione Campanian Ignimbrite ebbe un impatto significativo sul clima regionale e forse anche globale. La vasta quantità di cenere vulcanica e gas rilasciati nell&#8217;atmosfera avrebbe oscurato il sole, causando un abbassamento delle temperature a livello regionale per un periodo prolungato. Tuttavia, gli studi sulla relazione tra questa eruzione e l&#8217;estinzione dei Neanderthal sono ancora oggetto di dibattito tra gli scienziati.</span></p>
<p><span style="color: #000080;">Alcuni ricercatori suggeriscono che l&#8217;eruzione dei Campi Flegrei potrebbe aver influito sul declino dei Neanderthal, ma è difficile stabilire un collegamento diretto e univoco. Ci sono molteplici fattori che potrebbero aver contribuito all&#8217;estinzione dei Neanderthal, come i cambiamenti climatici, l&#8217;interazione con gli Homo sapiens e i fattori ecologici complessi. È probabile che l&#8217;eruzione abbia avuto un impatto significativo sull&#8217;ambiente circostante, ma l&#8217;esatta estensione del suo ruolo nell&#8217;estinzione dei Neanderthal richiede ulteriori ricerche e studi multidisciplinari.</span></p>
<p><span style="color: #000080;">È importante notare che gli studi sul passato geologico e climatico sono in continua evoluzione, e nuove scoperte e ricerche potrebbero fornire una comprensione più dettagliata dell&#8217;eruzione dei Campi Flegrei e dei suoi effetti sull&#8217;ambiente e sulle popolazioni umane del tempo.</span>”</p>
<p><span style="color: #000000;"><span style="font-family: 'Times New Roman', serif;">Tra parentesi, la caldera eruttò di nuovo circa 13000 anni fa, anche se l&#8217;evento fu meno imponente. I resti di queste eruzioni sono visibili in quanto hanno cambiato il paesaggio. Si tratta di strati geologici e rocce di affioramento causate sia dal magma sia dal deposito sul terreno di materiali piroclastici. Oltre alla Ignimbrite della prima eruzione, la seconda eruzione espulse il tufo giallo caratteristico della regione campana. Tra parentesi, la caldera è ancora attiva e se dovesse eruttare di nuovo potrebbe causare conseguenze catastrofiche, dato che nella zona vivono circa 700.000 persone e non esiste un piano di evacuazione. Però l&#8217;intensità delle eruzioni è andata attenuandosi nel tempo, l&#8217;ultima è avvenuta nel 1538 ma non è stata comparabile con gli immani eventi precedenti. Speriamo bene&#8230;</span></span></p>
<p><span style="color: #000000;"><span style="font-family: 'Times New Roman', serif;">Tornando al fatto che le eruzioni vulcaniche possano essere imputati accettabili del rilascio di CO2 nell&#8217;atmosfera (e quindi del riscaldamento globale), abbiamo avuto un aumento significativo dell&#8217;attività vulcanica nell&#8217;ultimo mezzo secolo?</span></span></p>
<p>”<span style="color: #000080;">L&#8217;attività vulcanica globale negli ultimi 50 anni è rimasta sostanzialmente nella norma e non ha mostrato un aumento significativo rispetto alla media storica.</span>”</p>
<p><span style="color: #000000;"><span style="font-family: 'Times New Roman', serif;">Pare proprio che i vulcani non c&#8217;entrino. Ma un attimo! Un altro gas serra, il metano, è diverse volte più efficiente della CO2 nel trattenere il calore, e quindi è molto più pericoloso per il riscaldamento globale. Una cosa che non tutti sanno è che sul fondale dei mari sono presenti enormi quantità di clatrati di metano, capaci di liberare in atmosfera un profluvio di metano da far impallidire le attività umane. Non è che c&#8217;entrano qualcosa?</span></span></p>
<h2>I clatrati di metano: c&#8217;entrano loro?</h2>
<p>“<span style="color: #000080;">Sì, è corretto dire che i clatrati presenti sul fondo del mare contengono grandi quantità di metano. I clatrati di metano sono strutture di ghiaccio che si formano quando molecole di metano si intrappolano all&#8217;interno di una matrice di molecole di acqua in condizioni di temperature e pressioni elevate. Questi clatrati possono essere trovati in aree marine e permafrost nelle regioni polari.</span></p>
<p><span style="color: #000080;">I clatrati di metano sul fondo del mare contengono enormi quantità di metano, che è un potente gas serra. Si ritiene che le riserve di metano presenti nei clatrati sottomarini siano molto più abbondanti rispetto alle riserve di gas metano convenzionali.</span></p>
<p><span style="color: #000080;">Liberare grandi quantità di metano nell&#8217;atmosfera potrebbe avere implicazioni significative per il cambiamento climatico, poiché il metano è un gas a effetto serra molto più potente della CO2. Tuttavia, è importante notare che gli effetti di una possibile liberazione massiva di metano dai clatrati sottomarini sul clima globale sono ancora oggetto di dibattito scientifico e richiedono ulteriori studi e monitoraggio.</span>”</p>
<p><span style="color: #000000;"><span style="font-family: 'Times New Roman', serif;">Nemmeno i clatrati sembrano quindi tra i sospettati. E poi, come può liberarsi il metano in essi intrappolato?</span></span></p>
<p>“<span style="color: #000080;">I clatrati di metano possono liberare metano nell&#8217;atmosfera quando le condizioni ambientali cambiano. Le principali circostanze che potrebbero causare la liberazione di metano dai clatrati sono:</span></p>
<ol>
<li><span style="color: #000080;">Aumento della temperatura dell&#8217;acqua: Quando la temperatura dell&#8217;acqua circostante aumenta, il calore può sciogliere i clatrati di metano, permettendo al metano di essere rilasciato nell&#8217;atmosfera.</span></li>
<li><span style="color: #000080;">Cambiamenti nella pressione: Le variazioni nella pressione possono influenzare la stabilità dei clatrati di metano. Aumenti di pressione possono favorire la stabilità dei clatrati, mentre riduzioni di pressione possono causare la loro disgregazione e rilascio di metano.</span></li>
<li><span style="color: #000080;">Movimenti del fondale marino: Terremoti o movimenti del fondale marino possono provocare la rottura dei depositi di clatrati, permettendo al metano di fuoriuscire nell&#8217;acqua e, potenzialmente, raggiungere l&#8217;atmosfera.</span></li>
</ol>
<p><span style="color: #000080;">È importante notare che, nonostante l&#8217;esistenza di grandi quantità di clatrati di metano, la maggior parte di essi rimane stabile e non viene rilasciata nell&#8217;atmosfera. Le condizioni specifiche che possono innescare il rilascio di metano dai clatrati richiedono un&#8217;interazione complessa di fattori ambientali. La ricerca scientifica è in corso per comprendere meglio questi processi e valutare il potenziale impatto sul clima globale.</span>”</p>
<h2>Ma che c&#8217;entriamo noi?</h2>
<p><span style="color: #000000;"><span style="font-family: 'Times New Roman', serif;">A questo punto siamo abbastanza convinti (negazionisti a parte) che tutti i combustibili fossili che l&#8217;umanità ha bruciato negli ultimi 200 anni (petrolio, carbone, gas&#8230;) abbiano significativamente aumentato il livello dei gas ad effetto serra (principalmente CO2). Ma insomma, l&#8217;Italia è un piccolo paese ed il suo impatto è proprio così importante da giustificare un radicale cambiamento tecnologico ed industriale, ed il costante martellamento a cui siamo sottoposti, come se il cambiamento del clima globale dipendesse da 60 milioni di italiani (l&#8217;1% della popolazione mondiale)?</span></span></p>
<p><span style="color: #000000;"><span style="font-family: 'Times New Roman', serif;">Naturalmente no, in un certo senso quello che avviene in Italia è piuttosto irrilevante. Ma troppo spesso la propaganda nazionale ci fa apparire come protagonisti dei destini del mondo, quando in effetti non contiamo (quasi) niente. Ma questa è un&#8217;altra storia.</span></span></p>
]]></content:encoded>
			<wfw:commentRss>https://www.appliserver.com/wordpress/?feed=rss2&#038;p=111</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Intelligenza Artificiale: autocoscienza?</title>
		<link>https://www.appliserver.com/wordpress/?p=106</link>
		<comments>https://www.appliserver.com/wordpress/?p=106#comments</comments>
		<pubDate>Sat, 29 Apr 2023 21:11:33 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Senza categoria]]></category>

		<guid isPermaLink="false">http://www.appliserver.com/wordpress/?p=106</guid>
		<description><![CDATA[Pensiero meccanico E&#8217; stata soprattutto la fantascienza a determinare quello che nella percezione comune si intende per “Intelligenza Artificiale”. Gli addetti ai lavori non pensano affatto alle “macchine pensanti” quando si occupano di IA, ma l&#8217;uomo della strada probabilmente sì. &#8230; <a href="https://www.appliserver.com/wordpress/?p=106">Continua a leggere<span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><strong>Pensiero meccanico</strong></p>
<p>E&#8217; stata soprattutto la fantascienza a determinare quello che nella percezione comune si intende per “Intelligenza Artificiale”. Gli addetti ai lavori non pensano affatto alle “macchine pensanti” quando si occupano di IA, ma l&#8217;uomo della strada probabilmente sì.</p>
<p>In questo senso, tutte le tecnologie a cui siamo abituati e che ci vengono proposte come “intelligenti”, sono un po&#8217; una delusione. Certo, se l&#8217;aspettativa è quella di un robot parlante e pensante, viene da dire: “Tutto qua?”</p>
<p>A parte il ristretto circolo degli addetti ai lavori, il significato comune che si attribuisce all&#8217;espressione “Intelligenza Artificiale” è quello letterale, quindi di intelligenza vera e propria, realizzata con qualche artificio tecnico.</p>
<p>L&#8217;inventore del termine “Artificial Intelligence”, nel 1955, è stato un certo John McCarthy, che ha definito l&#8217;IA come “la scienza e l&#8217;ingegneria per creare macchine intelligenti” e ha chiarito come obbiettivo generale &#8220;far sì che una macchina si comporti in modi che sarebbero considerati intelligenti se un essere umano si comportasse in quel modo”</p>
<p>Anche Marvin Minsky, altro pioniere dell&#8217;AI, offre una definizione identica nel 1968: “la scienza di far fare a delle macchine cose che richiederebbero intelligenza se fossero fatte da esseri umani.”</p>
<p>Queste definizioni iniziali chiariscono che lo scopo non era di creare un qualche tipo di intelligenza e farla vivere in un computer, ma solo di replicare in campi limitati un comportamento “intelligente” secondo il senso comune.</p>
<p>Il termine “Intelligenza Artificiale” è ambiguo, e sembra fatto apposta per creare false aspettative. Se McCarthy l&#8217;avesse chiamata “abilità artificiale”, che sembra meno altisonante ma più aderente alla realtà, sicuramente nessuno avrebbe fatto confusione.</p>
<p>La fantascienza aveva peraltro già fatto suo un concetto molto più ampio, ovvero le “macchine intelligenti”, che anzi è sempre stato uno dei suoi filoni classici. Già nel 1950 Isaac Asimov immaginava robot pensanti nel suo “Io, Robot”. Del resto, la fantascienza stessa era un fenomeno relativamente nuovo, dato che il termine stesso “science fiction” si fa risalire al 1926. Hugo Gernsback coniò in verità “scientific fiction”, poi contratto in “scientifiction” e infine in “science fiction”. In Italia il termine “fantascienza” pare sia stato coniato da Giorgio Monicelli (nel 1952).</p>
<p>E la fantascienza si è divertita ad esplorare una infinità di scenari, dai più rosei ai più funesti, con netta prevalenza di quelli funesti, perché in un mondo perfetto dove tutto fila a meraviglia non c&#8217;è molto pathos. In molti racconti viene richiamato il cosiddetto “mito di Frankenstein”, ovvero quello della creatura che si ribella al suo creatore. Ahimé, si tratta sempre di robot che si ribellano all&#8217;uomo.</p>
<p>Isabella Hermann dice: “Per far funzionare il dramma, l&#8217;AI viene spesso rappresentata come simile all&#8217;uomo o autonoma, indipendentemente dalle reali limitazioni tecnologiche. Prendere troppo alla lettera l&#8217;AI fantascientifica e persino applicarla alla comunicazione scientifica dipinge un&#8217;immagine distorta del potenziale attuale della tecnologia e distrae dalle implicazioni e dai rischi del mondo reale dell&#8217;AI.”</p>
<p>E spesso l&#8217;AI viene rappresentata come pericolosa, per esigenza di drammaticità. Questo ha contornato la percezione comune dell&#8217;AI di un alone minaccioso, che non sembra tendere a dissiparsi, anche se per motivi molto diversi dal timore dei robot killer. Molto più prosaicamente oggi ci si preoccupa delle violazioni della privacy e dei potenziali rischi di disinformazione o manipolazione che IA “conversazionali” possono comportare.</p>
<p>Oltre alla fantascienza però il concetto stesso di intelligenza artificiale ha interessato anche pensatori, scienziati e filosofi.</p>
<p>Tanto per cominciare, si è subito entrati in una disputa sulla definizione stessa di AI.</p>
<p><strong>AI Forte, AI Debole</strong></p>
<p>I sostenitori della “AI Forte” &#8221; credono che sia possibile creare macchine dotate di un&#8217;intelligenza simile a quella umana. Il loro obiettivo è quello di costruire macchine in grado di comprendere il linguaggio naturale, apprendere e ragionare come gli esseri umani, e persino sperimentare la coscienza. L&#8217;obiettivo ultimo dell&#8217;AI Forte è quello di creare macchine auto-consapevoli.</p>
<p>Così la definizione iniziale della AI è oggi chiamata “AI Debole”. Questo approccio si concentra invece su compiti limitati senza pretese di ragionamento o apprendimento al di fuori dello specifico problema affrontato. Un esempio di queste AI sono i sistemi per il riconoscimento vocale o facciale o certi programmi di scacchi. L&#8217;approccio limitato e specifico ha portato a numerosi risultati estremamente significativi.</p>
<p>L&#8217;industria ha appoggiato l&#8217;AI Debole perché è l&#8217;unica che abbia prodotto risultati efficaci. La definizione di AI che dà l&#8217;IBM è “qualsiasi cosa che faccia agire le macchine più intelligentemente”, quindi una concezione molto pratica.</p>
<p>L&#8217;AI Forte ha sollevato un vespaio perché pone una domanda fondamentale: <strong>Ma possono concettualmente esistere macchine auto-coscienti</strong>?</p>
<p>Prima di rispondere a questa domanda è necessario capire cos&#8217;hanno di così strano o particolare i programmi di IA rispetto agli altri programmi “tradizionali”, mi si passi il termine. A farli rientrare nella categoria di IA non è il grado di complessità del software o la bontà dei risultati, bensì il modo con cui il software lavora. Per dirla alla buona, se il software è basato sul concetto di rete neurale, è AI.</p>
<p><strong>Reti neurali</strong></p>
<p>Una rete neurale è un modello computazionale che si ispira al funzionamento del cervello umano. Le cellule nervose nel cervello sono interconnesse da sottili filamenti lungo i quali viaggiano gli impulsi nervosi. Ogni cellula funziona un po&#8217; come un centralino, ricevendo ed emettendo segnali.</p>
<p>In una rete neurale abbiamo al posto dei neuroni delle piccole unità di elaborazione, i nodi, i quali sono interconnessi. Quando un nodo viene raggiunto da un segnale esso è in grado di fare una semplice misurazione e decidere se ritrasmettere il segnale o no. Per esempio un nodo collegato a due altri nodi si attiva se entrambi i nodi trasmettono, ma non si attiva se uno solo di essi trasmette.</p>
<p>La caratteristica importante di una rete neurale è che può essere calcolata, cioè simulata. Non occorre quindi costruire fisicamente complesse reti neurali, esse possono essere virtualizzate mediante un programma. Un calcolatore può quindi funzionare come una rete neurale, col vantaggio di poter essere configurato a piacere quanto a connessioni e tipo di elaborazione dei nodi.</p>
<p>Così abbiamo reti neurali (simulate) per classificare, per riconoscere, per calcolare, e funzionano straordinariamente bene. In particolare mostrano la capacità di elaborare delle informazioni anche se incomplete o imprecise, e fornire comunque una risposta.</p>
<p>Le RN possono apprendere: in una fase di “addestramento” vengono forniti alla rete dei modelli di attivazione di gruppi di nodi, e la risposta corretta che essi determinano. A questo punto la rete modifica autonomamente i nodi in modo che il risultato dei calcoli si avvicini alla risposta corretta.</p>
<p>Questo procedimento viene ripetuto molte volte, finché i nodi non raggiungono una configurazione stabile. Una volta addestrata, si sottopongono alla RN i dati “veri” e si verifica il grado di precisione delle risposte.</p>
<p>Un problema con le reti neurali è che, quando sono complesse, si perde la capacità di determinare cosa esattamente faccia la RN. Non c&#8217;è un modo di sapere in anticipo quale sarà lo stato dei nodi dopo l&#8217;addestramento, la RN si comporta insomma come una “scatola nera” imperscrutabile.</p>
<p>Anche sui tipi di calcoli spesso si usa un approccio empirico, provando varie soluzioni a seconda del problema e procedendo per tentativi. A dispetto di questa metodologia (apparentemente) poco rigorosa, le RN funzionano molto bene e sono molto più efficienti di altri approcci in molti ambiti, per esempio nell&#8217;analisi di grandi quantità di dati.</p>
<p>Le reti neurali non sono l&#8217;unica arma a disposizione dei ricercatori di AI, vi sono altri approcci che hanno dato segnali promettenti. Inoltre le RN hanno dei limiti e non si vede come si possa realizzare una intelligenza autocosciente solo con questo strumento.</p>
<p><strong>La Mente</strong></p>
<p>Torniamo ora alla nostra domanda: in effetti sembrerebbe, prima di poter creare una “mente” artificiale, &#8211; perché proprio di questo si tratterebbe – bisogna avere un modello della mente o una teoria della mente. Abbiamo questi strumenti? No. Quindi niente mente artificiale. Bisogna ricordare che nel frattempo i filosofi stanno ancora disputando tra connettivisti e cognitivisti su come funziona l&#8217;intelligenza umana (molto in soldoni: la mente funziona come una rete neurale e basta, oppure no, la mente funziona come un elaboratore di simboli).</p>
<p>Ma, obbiettano alcuni, una Teoria della Mente non è affatto necessaria se immaginiamo che la mente “si formi da sé” posto di aver creato un sistema capace di apprendere e di auto-modificarsi. La nascita dell&#8217;autocoscienza sarebbe una specie di “effetto collaterale”, un cosiddetto epifenomeno, che si manifesta spontaneamente raggiunto un certo livello di complessità. In pratica la coscienza e l&#8217;intenzionalità sarebbero “qualità emergenti” dell&#8217;attività cerebrale. Una qualità emergente è qualcosa che richiama l&#8217;idea che il tutto è maggiore delle parti: per esempio il traffico su scala macroscopica si può studiare con la dinamica dei fluidi, come se fosse acqua che scorre. Questo non è controllato da nessuno in particolare, ed è involontario da parte dei conducenti. La combinazione di molti comportamenti individuali porta alla formazione di un “super-comportamento” osservabile solo su una scala più vasta.</p>
<p>Tuttavia c&#8217;è un&#8217;altra obiezione alla AI Forte, Il punto fondamentale è che una macchina non ha alcuna percezione. Un pezzo di silicio non può provare piacere o dolore, non vede e non sente. Una AI può simulare però, mediante calcoli, queste cose. Possiamo immaginare un robot dotato di sensori termici, che riceverà un segnale se mette un dito su una fiamma, calcolerà l&#8217;azione opportuna e ritrarrà la mano, ma quello che accade ad un essere umano è intrinsecamente diverso: Il robot calcolerebbe che sta provando “dolore”, ma non proverebbe in effetti alcun dolore fisico. Il dolore non può essere riprodotto, perché il nostro “Io” è un tutt&#8217;uno con l&#8217;apparato percettivo, ed è proprio la percezione a determinare l&#8217;essenza stessa della nostra autoconsapevolezza. Una IA potrebbe solo simulare una intelligenza umana, corporea, e quindi al massimo simulare l&#8217;autocoscienza, senza che essa possa avere la stessa natura della autoconsapevolezza umana.</p>
<p>Allo stato delle cose insomma alla domanda se sia possibile davvero creare macchine autocoscienti e autodeterminate come lo intendiamo noi esseri umani, la risposta è no.</p>
<p>Ma se ci domandiamo se sia possibile creare macchine che simulano in maggiore o minor misura tutte queste facoltà, la risposta sarà invece affermativa.</p>
<p><strong>Intelligenze conversazionali</strong></p>
<p>Adesso però la macchina parlante è arrivata per davvero, e sembra proprio intelligente. Come dubitarne? Parla (anzi scrive)!</p>
<p>C&#8217;erano già risponditori automatici in grado di recepire comandi vocali, e fornire una risposta preconfezionata, ma usandoli ci rendiamo conto che non sono affatto “intelligenti”, ovvero non capiscono davvero quello che diciamo loro.</p>
<p>Le nuove “intelligenze conversazionali”, come ChatGPT, sono diverse: sembrano capire esattamente quello che gli diciamo e formulano delle risposte pertinenti elaborate al momento nella nostra lingua. In poche parole ci sembra proprio di comunicare con una entità “intelligente”.</p>
<p>Questa à la trascrizione di una sessione con una AI (non è ChatGPT, è un suo emulo di nome Chatsonic). Per la stesura di questo articolo mi sono fatto assistere da questa AI per ricerche varie e non dire qualche strafalcione. Ad un certo punto mi è venuto in mente un articolo che lessi negli anni 80 (mi pare) che poi per fortuna del lettore non ho citato e spiegato, che parlava della manipolazione di simboli come una attività che non richiede necessariamente intelligenza. Ricordavo vagamente che c&#8217;era una stanza in cui un tizio che non sa il cinese sta seduto con un vocabolario. Ogni tanto qualcuno gli consegna un foglio con ideogrammi cinesi. Il tizio si limita a tradurre uno per uno gli ideogrammi e a fornire un foglio con la traduzione, senza capire nulla.</p>
<p>Il tutto era per spiegare come mai i computer sono così stupidi, anche se sono in grado di manipolare i simboli, o qualcosa di simile. Con pochi indizi ho provato a sfruttare l&#8217;onniscienza della AI per recuperare l&#8217;articolo.</p>
<p>D: chi ha suggerito l&#8217;esempio della &#8220;scatola nera&#8221; in grado di tradurre dal cinese?</p>
<p>(Nota: Chatsonic non è avanzato come ChatGPT, qualche volta risponde in inglese)</p>
<p>R: I&#8217;m sorry, I couldn&#8217;t find any relevant information in the given Web Search Results to answer your question about who suggested the example of the &#8220;black box&#8221; that can translate from Chinese. However, I can tell you that the term &#8220;black box&#8221; refers to a device or system that has inputs and outputs, but its internal workings are not easily understood or observable. In the context of brain activity and consciousness, some scientists believe that consciousness and intentionality are by-products of brain activity, while others argue that they are emergent qualities or epiphenomena [1]. Holism, on the other hand, is the concept that a system cannot be fully understood by looking only at its individual parts, but rather as a whole [2]. Regarding the idea of &#8220;strong AI,&#8221; there are arguments against its ability to replicate human consciousness and intelligence, as well as concerns about ethical risks [3].</p>
<p>Come si vede, alla prima domanda Chatsonic mi risponde picche. Dato che ero sicuro dell&#8217;articolo, ho allora insistito (in inglese maccheronico):</p>
<p>D: the example was published by &#8220;science&#8221; 30-40 years ago. I read it on the italian edition, &#8220;Le scienze&#8221;. The article was about the symbol manipulation</p>
<p>R: I see. The &#8220;Chinese Room&#8221; thought experiment, which was first proposed by philosopher John Searle in 1980, is often used to illustrate the limitations of &#8220;strong AI&#8221; or artificial general intelligence. In the thought experiment, a person who does not understand Chinese is placed in a room with a set of instructions for manipulating Chinese characters to produce responses to questions in Chinese. Though the person in the room may be able to produce convincing responses, they do not actually understand Chinese, and therefore the system as a whole cannot be said to truly understand Chinese either. This example highlights the difference between symbol manipulation and true understanding or consciousness.</p>
<p>Questa risposta mi ha deliziato, soprattutto quell&#8217; ”I see” all&#8217;inizio. Intanto non era la “scatola nera” ma era la “stanza cinese”, va beh, e non si trattava nemmeno di tradurre, ma di comporre risposte. Inoltre la rivista non è &#8220;Science&#8221;, ma è &#8220;Scientific American&#8221;.</p>
<p>Aggiungendo però il riferimento alla manipolazione dei simboli l&#8217;AI ha ripreso in esame le poche informazioni fornite e ha azzeccato la risposta. Provate a immaginare la fatica che avrei fatto se avessi voluto cercare su un motore di ricerca normale quell&#8217;articolo a partire da informazioni scarse e imprecise!</p>
<p>Le AI, anche se si esprimono correttamente, comprendono le domande e rispondono a tono, non sono in effetti più consapevoli di sé di un apriscatole. Sono però delle ottime imitazioni di intelligenza, e questo sicuramente comporta delle conseguenze.</p>
<p>Ci sono persone che sono perfettamente convinte che il loro cane (o gatto, o pappagallo&#8230;) li capisca quando loro ci parlano. E ci parlano, eccome. L&#8217;essere umano quando usa il linguaggio fa quello che milioni di anni di evoluzione hanno affinato: parte dall&#8217;assunto che l&#8217;interlocutore sia umano e gli attribuisce emozioni e stati d&#8217;animo che non sono altro che la proiezione di se stessi. Del resto, senza questo meccanismo, la comunicazione non funzionerebbe, perché non possiamo descrivere a parole il colore verde, il profumo del rosmarino o una sensazione di bruciore al dito. Possiamo solo sperare che l&#8217;interlocutore condivida queste sensazioni quando pronunciamo le parole che le richiamano, e capisca esattamente queste parole in quanto anche lui le ha sperimentate.</p>
<p>Io penso che molte persone finirebbero per umanizzare queste AI conversazionali, considerarle un po&#8217; come amici o comunque entità benevole a propria disposizione. Ci saranno persone che non sapranno fare a meno del loro assistente personale. E ci sono milioni di ragazzini che semplicemente non sono in grado di discernere esattamente cosa sia una AI. Come si dice: “Se cammina come un&#8217;oca, gracchia come un&#8217;oca e sembra un&#8217;oca, allora è un&#8217;oca”</p>
<p>La commissione selezionata della Camera dei Lord sulle tecnologie di intelligenza artificiale scrive nel suo rapporto &#8220;AI in the UK: ready, willing, able?&#8221; (House of Lords 2018: 22): &#8220;La rappresentazione dell&#8217;intelligenza artificiale nella cultura popolare è a anni luce dalla realtà spesso più complessa e banale. Sulla base delle rappresentazioni nella cultura popolare e nei media, il non specialista sarebbe perdonato per immaginare l&#8217;IA come un robot antropomorfo (con o senza intenzioni omicide), o almeno come una voce altamente intelligente e senza corpo in grado di assistere in modo impeccabile in una serie di compiti. [...] Questo non è un vero riflesso della sua attuale capacità, e confrontarsi con la natura pervasiva ma spesso opaca dell&#8217;intelligenza artificiale sta diventando sempre più necessario per una società informata.&#8221;</p>
<p>Magari andrà tutto bene e le AI si dimostreranno un formidabile strumento di sostegno psicologico e aiuto a soggetti fragili, soli o abbandonati. Magari ci aiuteranno nell&#8217;educazione e nell&#8217;apprendimento e nel coaching in momenti di crisi. A volte fa bene sfogarsi, e una IA conversazionale è probabilmente l&#8217;unico essere al mondo che può ascoltare i nostri sfoghi senza annoiarsi, senza criticare e senza mandarci a quel paese.</p>
<p>O invece questo ci renderà tutti più insicuri, solitari e disadattati. Chissà?</p>
<p>Comunque, sarà l&#8217;uso che ne faranno coloro che le manovrano ad essere pericoloso, piuttosto che le AI in sé.</p>
<p>Sempre Herrmann conclude: ”Questi rischi non riguardano robot umanoidi o macchine coscienti, ma riguardano la valutazione, il nudging, la discriminazione, lo sfruttamento e la sorveglianza degli esseri umani da parte delle tecnologie AI attraverso i governi e le aziende.&#8221;</p>
]]></content:encoded>
			<wfw:commentRss>https://www.appliserver.com/wordpress/?feed=rss2&#038;p=106</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Scrivere applicazioni CGI in (x)Harbour &#8211; Parte I</title>
		<link>https://www.appliserver.com/wordpress/?p=87</link>
		<comments>https://www.appliserver.com/wordpress/?p=87#comments</comments>
		<pubDate>Sat, 27 Jul 2019 17:58:37 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[harbour]]></category>
		<category><![CDATA[programmazione]]></category>
		<category><![CDATA[xBase]]></category>
		<category><![CDATA[xharbour]]></category>

		<guid isPermaLink="false">http://www.appliserver.com/wordpress/?p=87</guid>
		<description><![CDATA[Le CGI CGI significa Common Gateway  Interface e designa una classe di programmi (applicazioni) fatti per funzionare in tandem con un web server. Queste applicazioni prevedono di essere invocate da un web server e restituiscono al medesimo una pagina HTML. Il &#8230; <a href="https://www.appliserver.com/wordpress/?p=87">Continua a leggere<span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><strong>Le CGI</strong></p>
<p>CGI significa Common Gateway  Interface e designa una classe di programmi (applicazioni) fatti per funzionare in tandem con un web server. Queste applicazioni prevedono di essere invocate da un web server e restituiscono al medesimo una pagina HTML.</p>
<p>Il web server sarà configurato in modo tale per cui l&#8217;applicazione CGI diventa a tutti gli effetti parte dell&#8217;URL del sito. Per esempio un URL (in ambiente Windows) del tipo: http://www.miosito.com/cgi-bin/MyCgi.exe invoca direttamente MyCgi.exe (nella directory convenzionale cgi-bin).</p>
<p>Il web server a sua volta restiturà pari pari tale pagina HTML al browser che ha invocato la CGI (cioè ha tentato di &#8220;navigare&#8221; l&#8217; URL che invoca la CGI), per esempio una stringa come la seguente (EOL=LF, chr(10) o CRLF, (chr(13)+chr(10)):</p>
<div><span style="font-size: 16px;">&#8220;Content-Type:text/html[</span><span style="font-size: 16px;">EOL][EOL]</span><span style="font-size: 16px;">Grazie per avermi invocato![EOL]&#8220;</span></div>
<p>La stringa viene ritrasmessa al browser chiamante, che la tratterà come una pagina statica. Dal punto di vista del browser che ha emesso la richiesta, ricevere una pagina HTML statica, ovvero il contenuto di un file situato sul server, oppure una pagina creata al momento non fa alcuna differenza: si tratta sempre di un flusso di bytes (uno stream) e verrà processato sempre allo stesso modo.</p>
<div><span style="font-size: 16px;">Tutto questo a poco servirebbe se non ci fosse modo di passare alla CGI anche una serie di valori che ne determinino il comportamento.</span></div>
<p><strong>Come passare parametri alla CGI</strong></p>
<p>Il web server fornisce un ambiente standard di esecuzione per i programmi CGI, completo di un set di variabili d&#8217;ambiente. In (x)Harbour possiamo leggere le variabili d&#8217;ambiente, conoscendo il loro nome, con l&#8217;istruzione GetEnv(&#8220;nomevar&#8221;). Per prima cosa quindi possiamo ricavare PATH_INFO, QUERY_STRING E CONTENT_LENGTH, variabili d&#8217;ambiente che dovrebbero contenere l&#8217;URL richiesto dal client, una parte specifica di esso e la lunghezza in bytes dello stream inviato dal client. Il modo più semplice quindi di trasmettere parametri è quello di includerli nell&#8217;URL, per esempio:<br />
www.miosito.com/cgi-bin/MyApp.cgi?cheoresono<br />
Si noterà che viene usato il carattere convenzionale &#8220;?&#8221; per delimitare l&#8217;inizio della parte dell&#8217;URL che contiene i parametri (la query string). Tutto quello che segue il &#8220;?&#8221; finisce nella variabile d&#8217;ambiente QUERY_STRING.</p>
<p>La CGI prende forma: essa deve quindi esaminare QUERY_STRING e agire di conseguenza. La risposta dovrà essere scritta su STDOUT. (x)Harbour ha la funzione OutStd() (e il comando qout, suo alias) che fa appunto questo. Per esempio:</p>
<pre>Procedure main()
cCommand:=getenv("QUERY_STRING")
if .not. empty(cCommand)
do case
case cCommand="cheoresono"
outStd("Content-Type:text/html"+chr(10)+chr(10))
outStd(""Sono le "+time()+"")
...
endcase
endif
return nil</pre>
<p>Un altro metodo utilizza specifici elementi HTML, ovvero i FORM. Un form è costituito da un &#8220;contenitore&#8221; e da un certo numero di controlli. Un form dispone di un METHOD e di una ACTION. I METHOD che ci interessano sono POST e GET, mentre la ACTION conterrà il comando da passare alla CGI. Per esempio: (Nota: questo editor è fatto con Javascript e HTML, quindi se tento di scrivere del codice HTML esso verrà interpretato anziché presentato in forma testuale. Per questo i simboli TAG inizio e fine sono sostituiti da parentesi quadre).</p>
<pre>[form action="cgi-bin/MyApp.exe" method="GET" name="myform"&gt;Importo:[input type="TEXT" name="IMPORTO" value="100"&gt;&lt;br&gt;&lt;br&gt; Rate:[input type="TEXT" name="RATE" value="12"&gt;&lt;br&gt; [input type="SUBMIT" value=""&gt;&lt;br&gt;&lt;/form&gt;</pre>
<div> <span style="font-size: 16px;">Il FORM quando SUBMITted trasmetterà al server una richiesta, corrispondente a:</span></div>
<p>www.miosito.com/cgi-bin/MyApp.exe?IMPORTO=100&amp;RATE=12, il che porrà in QUERY_STRING &#8220;IMPORTO=100&amp;RATE=12&#8243;. In pratica il metodo GET è equivalente a un URL. Notare come dal FORM vengano generate coppie di valori del tipo[VARIABILE]=[VALORE] separate questa volta dal carettere &#8220;&amp;&#8221;.</p>
<p>Se lo stesso FORM usasse il METHOD POST, il risultato sarebbe diverso.</p>
<form action="cgi-bin/MyApp.exe" method="POST" name="myform">
<pre>[form action="cgi-bin/MyApp.exe" method="POST" name="myform"&gt;Importo:[input type="TEXT" name="IMPORTO" value="100"&gt;&lt;br&gt;&lt;br&gt; Rate:[input type="TEXT" name="RATE" value="12"&gt;&lt;br&gt; [input type="SUBMIT" value=""&gt;&lt;br&gt;&lt;/form&gt;</pre>
</form>
<form action="cgi-bin/MyApp.exe" method="POST" name="myform"><span style="font-size: 16px;">Il metodo POST trasmette i dati del FORM su STDOUT (del client, arrivano al server su STDIN del server, il quale fa lo stesso e copia i dati sul suo STDOUT e questi arrivano su STDIN della CGI) e setta la variabile d&#8217;ambiente CONTENT-LENGTH. Come si fa a leggere STDIN via (x)Harbour? Anche se la docuentazione ufficiale non affronta specificamente il tema, ricordiamoci le funzioni FREAD() e FREADSTR(). Sono funzioni di basso livello che leggono uno stream e necessitano come argomento di un handle valido, solitamente ottenuto con una FOPEN() per leggere un file in modo &#8220;grezzo&#8221;. Orbene, se il numero di handle è 0 (zero), queste funzioni leggono STDIN.</span></form>
<p>La nostra CGI potrebbe a questo punto arricchirsi con un ulteriore confronto:</p>
<p>&#8230;<br />
IF VAL(GETENV(&#8220;CONTENT_LENGTH&#8221;))!=0<br />
cStream:=FREADSTR(0)</p>
<p>In questo modo possiamo riconosceer una richiesta POST e leggere lo stream via STDIN, viceversa leggeremo QUERY_STRING.</p>
<p>C&#8217;è un altro modo, simile al metodo GET, ovvero utilizzare Javascript per manipolare direttamente il contenuto dell&#8217;URL prima di effettuare il submit(). Il risultato sarà simile ad un GET.</p>
<p><strong>I ferri del mestiere</strong></p>
<p>A questo punto ci rendiamo conto di necessitare di qualche funzione specializzata: per esempio se l&#8217;URL inserito nel client comprende il carattere(ASCII 32), la Query String conterrà %20, ovvero il carattere &#8220;%&#8221; seguito dal codice ASCII in esadecimale. Questo vale per tutti i caratteri speciali, per cui ci occorrono un paio di funzioni: hexify() e dehexify() per convertire queste stringhe. Al posto di Qout() definiamo mediante il possente preprocessore di (x)Harbour:</p>
<pre>#command cgiout [&lt;xList&gt;] =&gt; ([OutStd(),] OutStd(chr(10)))</pre>
<p>Questo ci permetterà di stampare su STDOUT aggiungendo alla fine [EOL]. OutStd() infatti si limita a porre in STDOUT i caratteri passati, senza formattazione né EOL (che viene aggiunto invece dai comandi &#8220;?&#8221; e da &#8220;??&#8221;).</p>
<p>Dato che, come abbiamo visto, avremo a che fare con streams contenenti coppie separate da &#8220;&amp;&#8221; a loro volta composte da due elementi separati da &#8220;=&#8221;, ci occorre una funzione &#8220;splitter&#8221; che separi una stringa in base a un separatore arbitrario. La funzione estrai(stringa,separatore) restituisce un array con tanti elementi quanti i separatori nella stringa.<br />
Visto poi che tutte le pagine che la CGI dovrà produrre iniziano con &#8220;content-type&#8230;&#8221; ecc. e finiscono con il tag di chiusura, scriviamo le funzioni MakeHTMLHeader() e MakeHTMLBottom() che automatizzano in parte queste operazioni.</p>
<p>Anche l&#8217;errorsystem andrà modificato: se vogliamo che i messaggi di errore siano visibili, devono anche loro essere stampati su STDOUT e non visualizzati su schermo.</p>
<p>Con questo armamentario ridotto siamo già in grado di scrivere delle CGI, ma non bisogna farsi illusioni. Ci sono alcune complessità intrinseche nella programmazione di applicazioni CGI. Se leggere uno stream in entrata e scriverne uno in uscita non sono operazioni difficili, tutto quello che sta in mezzo invece lo è. Una difficoltà è ovviamente rappresentata dal fatto che bisogna generare in output codice HTML valido, e quindi una certa conoscenza di HTML è indispensabile. Un&#8217;altra difficoltà analoga alla prima riguarda Javascript: è evidente che, a parte applicazioni piuttosto scarne, bisognerà fare uso massiccio di Javascript, il che significa impararsi un nuovo linguaggio, niente meno, e per di più un linguaggio che, anche se apparentemente semplice, è invece un brutto cliente se si vuole cercare il pelo nell&#8217;uovo. Però bisogna dire che la situazione attualmente è meno tragica di quanto non fosse qualche anno fa: è vero che Javascript è implementato in modo diverso nei diversi browser, ma la corsa alla standardizzazione ha per fortuna ridotto le distanze. Fino a qualche anno fa era laborioso e complesso, oltre che fonte di innumerevoli dispute nei forum dei programmatori Javascript, produrre script  davvero robusti in grado di funzionare su qualsiasi browser.</p>
<p>Un&#8217;altra difficoltà consiste nel dover rivedere il paradigma di programmazione. Chi programma da tempo ha già dovuto affrontare il passaggio da programmazione procedurale a programmazione a oggetti. In entrambi i casi il programma dopo essersi avviato aspetta che l&#8217;utilizzatore emetta un comando e rimane in esecuzione svolgendo elaborazioni e/o attendendo altri input. Una CGI peraltro invece viene invocata, fa tutto quello che deve fare e termina. Questo significa che alla successiva chiamata la CGI sarà completamente immemore della chiamata precedente! Ogni invocazione della CGI è una esecuzione-e-termine del programma (ci sono tecniche per mantenere delle sessioni ma non verranno trattate qui).</p>
<p>La conseguenza più notevole è che l&#8217;output di una CGI deve essere costituito in realtà da una specie di programma che contiene tutte le istruzioni e i riferimenti per compiere l&#8217;operazione successiva. Chi ha visto il film Memento può avere un&#8217;idea del meccanismo: il protagonista per un disturbo della memoria vive in una specie di eterno presente. Unica guida sono le scritte che imprime sul suo stesso corpo, cosicché al risveglio saprà che fare. Analogamente il programma dovrà scrivere, nella pagina HTML che genererà, i form (o altro) contenenti i comandi da passare a se stesso corredati dai parametri necessari.</p>
<p>Il sorgente che segue è un omaggio a un bravo programmatore che molti anni fa pubblicò una rivista dal titolo &#8220;Clipper Magazine&#8221;. In uno dei numeri veniva descritta appunto la tecnica per creare delle CGI con Clipper. Si era nel 1996 o giù di lì e possiamo immaginare quanto fosse rivoluzionaria l&#8217;idea. Il fatto che dopo oltre 20 anni i concetti siano ancora validi è notevole. Il programmatore si chiamava Mario Lener e ho voluto conservare nel sorgente i suoi messaggi originali di copyright. In realtà non trovo più i sorgenti originali, per cui riporto uno dei miei esperimenti dell&#8217;epoca di diretta derivazione dal sorgente originale di Lener. Ci sono degli elementi &#8220;spurii&#8221; nel sorgente, come la funzione normalizza() ecc. introdotti da me. Per adesso ignoriamoli.</p>
<p>Il programma viene richiamato da un form, quindi per allestire questo test bisognerà avere il server web funzionante, la pagina HTML con il form al suo posto nella documentroot del web server, un database &#8220;ar_cli.dbf&#8221; con almeno i campi DITTA,CAP e CITTA in una directory accessibile dal nostro programma (C.\cgidata per esempio) e ovviamente Harbour o xHarbour installati.</p>
<p>Link per il sorgente: <a title="testcgi.prg" href="http://www.appliserver.com/cgi-bin/motsgd.cgi?/sgd/&amp;link&amp;12&amp;vis=1" target="_blank">Link</a></p>
]]></content:encoded>
			<wfw:commentRss>https://www.appliserver.com/wordpress/?feed=rss2&#038;p=87</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WordPress multilingua</title>
		<link>https://www.appliserver.com/wordpress/?p=51</link>
		<comments>https://www.appliserver.com/wordpress/?p=51#comments</comments>
		<pubDate>Fri, 28 Dec 2012 22:23:34 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[qTranslate]]></category>

		<guid isPermaLink="false">http://www.appliserver.com/wordpress/?p=51</guid>
		<description><![CDATA[Dopo aver pensato che sarebbe stato carino poter rendere disponibile un articolo anche in inglese, ho cercato di capire come farlo. Ho ben presto capito però che in pratica l&#8217;unica opzione sarebbe stata scrivere un altro articolo distinto dal primo &#8230; <a href="https://www.appliserver.com/wordpress/?p=51">Continua a leggere<span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Dopo aver pensato che sarebbe stato carino poter rendere disponibile un articolo anche in inglese, ho cercato di capire come farlo. Ho ben presto capito però che in pratica l&#8217;unica opzione sarebbe stata scrivere un altro articolo distinto dal primo col suo bravo titolo in inglese, e poi magare inserire un link in ciascun articolo, che puntasse all&#8217;altro. Bruttino. A questo punto, cominciando a capire la filosofia di WordPress, mi sono chiesto se magari ci fosse un plugin specifico per questo. Ho fatto un po&#8217; di ricerche e in effetti ho trovato quello che cercavo.</p>
<p>Il plugin in questione si chiama <strong>qTranslate</strong> e mi sono affrettato a scaricarlo ed installarlo, il che è veramente un gioco da ragazzi, ed ho provveduto a configurarlo per le 4 lingue che ho sperimentalmente deciso di supportare (niente di meno!) nonché a tradurre il primo post.</p>
<p>Purtroppo le 4 lingue non compaiono&#8230; adesso devo capire come mai!</p>
<p>(più tardi&#8230;)</p>
<p><span style="color: #ff0000;">Ma che sciocchezza&#8230; non bastava naturalmente installare ed attivare il plugin, bisogna pur piazzarlo da qualche parte! Io mi aspettavo che &#8220;automagicamente&#8221; una volta attivato il plugin e [faticosamente] composti gli articoli in più lingue, ZAC, essi fossero immediatamente disponibili con una bella bandierina sul post per scegliere in quale lingua visualizzarlo. Invece bisogna posizionare il plugin in una delle aree del tema che si è scelto riservata ai medesimi, dopodiché l&#8217;utente dovrà scegliere dalla suddetta area plugins la lingua desiderata dal menu che a questo punto sarà visibile. Il punto è che nel mio tema, twenty-eleven mi pare, le aree destinate ai plugins si trovano o nella sidebar di destra, o in basso. Per quanto riguarda l&#8217;area dei messaggi, qui non è previsto alcun plugin quindi o cambio tema o (immagino) me lo modifico a manina, il che implica studiarsi un po&#8217; di PHP e tutto quanto il sistema di funzionamento di WordPress. Ammetto di non aver mai preso in mano PHP e men che meno WordPress di cui sono un dilettante, quindi per ora teniamocelo così.</span></p>
<p>qTranslate fa il suo dovere in modo soddisfacente. In fase di editazione degli articoli presenta diversi tab e una distinta area di editazione per ciascuna delle lingue che si è deciso di supportare. Quando si pubblica/aggiorna l&#8217;articolo tutte le versioni vengono aggiornate simultaneamente. C&#8217;è una specifica versione di qTranslate per ogni versione di WordPress. Io ho la 3.4.2 e la corrispondente versione di qTranslate si è aggiornata automaticamente (ero partito con la versione sbagliata). L&#8217; installazione è semplice e fila via liscia anche la configurazione. Senza dubbio un ottimo tool.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>https://www.appliserver.com/wordpress/?feed=rss2&#038;p=51</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Harbour e xHarbour</title>
		<link>https://www.appliserver.com/wordpress/?p=24</link>
		<comments>https://www.appliserver.com/wordpress/?p=24#comments</comments>
		<pubDate>Thu, 27 Dec 2012 03:00:11 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[harbour]]></category>
		<category><![CDATA[programmazione]]></category>
		<category><![CDATA[xBase]]></category>
		<category><![CDATA[xharbour]]></category>

		<guid isPermaLink="false">http://www.appliserver.com/wordpress/?p=24</guid>
		<description><![CDATA[Per linguaggio di programmazione &#8220;xBase&#8221; si intende un insieme di &#8220;dialetti&#8221; che derivano in ultima analisi dal DBIII (anni &#8217;80) e successive migliorie (foxBase, Clipper, QuickSilver negli anni &#8217;80 e &#8217;90,  etc.), tutti linguaggi dedicati alla gestione di basi di &#8230; <a href="https://www.appliserver.com/wordpress/?p=24">Continua a leggere<span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Per linguaggio di programmazione &#8220;<strong>xBase</strong>&#8221; si intende un insieme di &#8220;dialetti&#8221; che derivano in ultima analisi dal DBIII (anni &#8217;80) e successive migliorie (foxBase, Clipper, QuickSilver negli anni &#8217;80 e &#8217;90,  etc.), tutti linguaggi dedicati alla gestione di basi di dati (database) e quindi dotati di specifiche funzioni per agevolare tali gestioni.</p>
<p>I linguaggi xBase si sono affermati come strumento di sviluppo di applicativi gestionali in un&#8217;epoca in cui non esisteva il mouse, non esisteva Windows, e gli utilizzatori interagivano con i programmi essenzialmente mediante un monitor monocromatico e una tastiera. Ebbe straordinaria fortuna <strong>Clipper</strong>, in tutto il mondo, che fu usato da milioni di programmatori (me compreso). Clipper non prevedeva di per sé Windows, ma aveva una struttura aperta, talmente aperta che degli sviluppatori indipendenti crearono un &#8220;ponte&#8221; tra Clipper e Windows, permettendo così al linguaggio xBase per eccellenza di non morire nel nuovo mondo informatico caratterizzato dalle finestre e dalla grafica. Gli odierni Harbour e xHarbour permettono di compilare senza praticamente modifiche persino i vecchi programmi scritti per DBIII, ma offrono anche un completo ambiente di sviluppo per creare applicazioni dotate di GUI (graphic user interface) e che sfruttano tutte le potenzialità dei moderni sistemi.</p>
<p>In breve, Harbour e xHarbour sono due <strong>compilatori</strong> in grado di trasformare un listato sorgente xBase in un eseguibile Windows/Linux/et.al. Essi derivano concettualmente da Clipper, di cui accettano linguaggio e sintassi, e replicano ed ampliano la struttura aperta.</p>
<p>Si tratta in realtà di due pseudo-compilatori che trasformano il <strong>sorgente</strong> (= il programma come lo scrive il programmatore, che è un essere umano e avrebbe terribili difficoltà a scrivere i programmi direttamente nel codice macchina che il computer può digerire) in una sorta di codice intermedio basato su un notissimo, basilare e universale linguaggio di programmazione, il <strong>linguaggio C</strong>, e poi richiamano un <strong>compilatore</strong>  C vero e proprio ( compilatore=programma che pre-digerisce i sorgenti e li trasforma in codice macchina) per generare l&#8217;eseguibile finale.</p>
<p>La base fornita dal comune denominatore C consente una estrema versatilità del linguaggio, il quale consente di incorporare nei programmi praticamente qualunque cosa, direttamente in linguaggio C o mediante componenti aggiuntivi basati sul C. Ricordo che anche Windows è scritto in gran parte in C, come pure Unix/Linux ecc.</p>
<p>Se qualcuno a questo punto si stesse chiedendo che bisogno ci sia di usare uno pseudo-compilatore C eccetera, e se non sarebbe meglio scrivere i programmi in C direttamente, potrebbe rispondersi da solo con una analogia, chiedendosi per esempio che bisogno ci sia di comprare le scarpe bell&#8217;e fatte quando si può benissimo comprare cuoio, gomma, colla e procedere con molta maggiore libertà e soddisfazione personale alla realizzazione delle proprie scarpe su misura.</p>
<p>Come ho detto prima, [x]Harbour e compagnia bella (Alaska xBase, Visual Foxpro, Flagship ecc.)  sono linguaggi &#8220;di alto livello&#8221; il che non significa che abbiano un rango nobiliare nei confronti dei linguaggi di &#8220;basso livello&#8221; come il C. Alto e basso livello nel gergo informatico stanno a designare in pratica il loro livello di astrazione rispetto al linguaggio macchina, l&#8217;ingestibile (per noi umani) codice binario che è l&#8217;unica cosa che in ultima analisi un computer esegue direttamente. Tanto più ci si astrae da queste istruzioni elementari, tanto più alto è il livello. In pratica una singola istruzione in un linguaggio di alto livello corrisponde a centinaia o migliaia di operazioni elementari o di basso livello. In questo modo il programmatore può scrivere meno codice e concentrarsi sulla logica del programma, tralasciando i dettagli. Naturalmente un linguaggio di alto livello non consente un controllo fine delle singole istruzioni o di fare particolari operazioni di dettaglio, allo stesso modo in cui un bulldozer non va bene per rimuovere un centimetro di sabbia da uno scavo archeologico,  ma questo controllo fine, per le applicazioni gestionali, non è necessario più di quanto sia necessario uno spazzolino di tasso per spianare un terreno in edilizia.</p>
<p>[x]Harbour sta ad indicare i due compilatori Harbour e xHarbour. Essi sono alquanto simili, ma questo è comprensibile se si pensa che essi sono in effetti due teste del medesimo&#8230; mostro.</p>
<p><strong></strong>La storia di questi compilatori è lunga e riporto qualche approfondimento di carattere &#8220;storico&#8221; <a href=" http://www.appliserver.com/wordpress/?p=31">qui</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://www.appliserver.com/wordpress/?feed=rss2&#038;p=24</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Storia dei compilatori xBase liberi</title>
		<link>https://www.appliserver.com/wordpress/?p=31</link>
		<comments>https://www.appliserver.com/wordpress/?p=31#comments</comments>
		<pubDate>Thu, 27 Dec 2012 02:57:49 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[harbour]]></category>
		<category><![CDATA[programmazione]]></category>
		<category><![CDATA[xBase]]></category>
		<category><![CDATA[xharbour]]></category>

		<guid isPermaLink="false">http://www.appliserver.com/wordpress/?p=31</guid>
		<description><![CDATA[Verso la metà degli anni &#8217;80 la scena informatica ha nella società Ashton-Tate uno dei suoi protagonisti indiscussi  tra gli sviluppatori di applicazioni gestionali, gli esperti e i semplici hobbisti. Con il DBIII, che è essenzialmente un database programmabile,  è &#8230; <a href="https://www.appliserver.com/wordpress/?p=31">Continua a leggere<span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Verso la metà degli anni &#8217;80 la scena informatica ha nella società <strong>Ashton-Tate</strong> uno dei suoi protagonisti indiscussi  tra gli sviluppatori di applicazioni gestionali, gli esperti e i semplici hobbisti. Con il <strong>DBIII</strong>, che è essenzialmente un database programmabile,  è possibile creare in modo semplice e intuitivo i propri archivi, ed anche scrivere delle procedure in un semplice linguaggio di alto livello, che permettono di gestire tali archivi. DBIII infatti disponeva di un suo linguaggio di programmazione dotato di decine di istruzioni specifiche per la manipolazione dei database. Era possibile quindi usare DBIII &#8220;direttamente&#8221; dandogli una istruzione alla volta, oppure per le operazioni ripetitive scrivere tali istruzioni in un file e poi far leggere tale file al DBIII, che le avrebbe eseguite sequenzialmente. Era anche possibile presentare dei menu di scelta e dare quindi in pasto ad utenti inesperti di programmazione dei veri e propri programmi gestionali completi, come per esempio una gestione ordini e fatturazione, inventari, gestione del magazzino ecc. In questo modo una impresa poteva acquistare il DBIII e poi incaricare un programmatore di progettare una intera gestione, magari scrivendo delle procedure ad hoc. Ben presto intraprendenti programmatori cominciarono a proporre queste gestioni bell&#8217;e pronte, o personalizzabili secondo le esigenze, ad un mercato in rapidissima espansione e praticamente vergine. All&#8217;epoca c&#8217; erano poco software e pochi programmatori, quindi il DBIII, che era infinitamente più potente, efficace e semplice dei tradizionali linguaggi di programmazione, si trovò rapidamente ad avere la parte del leone. Ma c&#8217;erano un paio di inconvenienti. Le procedure scritte per il DBIII richiedevano per essere eseguite che DBIII fosse installato sul computer che le avrebbe eseguite, e DBIII costava se non ricordo male un milione e mezzo di lire (rapportato ad oggi, almeno tre o quattromila euro), inoltre le procedure erano dei semplici files di testo e qualunque furbastro avrebbe potuto copiarle e riutilizzarle per conto proprio di nascosto dal legittimo autore. Quello che successe nella realtà fu che quasi tutti avevano una copia pirata del DBIII e fioriva un mercato nero assai vasto di programmi trafugati dalle varie aziende. I nerds dell&#8217;epoca ebbero così la possibilità di impossessarsi di moltissimi programmi e di studiarseli in santa pace, senza contare la vasta (per l&#8217;epoca) letteratura sul DBIII che completava gli ottimi manuali che accompagnavano il prodotto (e di cui quasi tutti naturalmente avevano una fotocopia abusiva).</p>
<p>La Ashton-Tate si era sempre rifiutata di dotare DBIII di un vero e proprio generatore di applicazioni che svincolasse il linguaggio, ossia le procedure, dal DBIII vero e proprio. Sarebbe stato possibile cioè far generare a DBIII dei programmi eseguibili anche su computer su cui DBIII non era stato installato, creando un modulo direttamente eseguibile dal computer ma impossibile o comunque difficilissimo da &#8220;spacchettare&#8221; per capire cosa c&#8217;era dentro. Potevano, ma non vedevano l&#8217;interesse a farlo: avrebbero agevolato i programmatori ma a loro interessava solo vendere copie del DBIII, senza rendersi conto che ormai il DBIII doveva la sua fortuna proprio ai programmatori, e almeno una forma di offuscamento del codice o pseudocompilazione o criptazione era essenziale per tutelare il lavoro dei programmatori, che mal tolleravano di dover dare in giro il loro sudato codice in forma non protetta e liberamente copiabile. Il mercato stava cambiando, e sempre meno persone avvertivano la necessità di usare direttamente il DBIII, dato che la disponibilità di software già pronto era vasta e crescente, quindi l&#8217;obbligo di comprarlo si riduceva alla necessità di essere in regola con le licenze d&#8217;uso ma appariva come una specie di tangente salatissima che si doveva pagare ad Ashton-Tate per poter eseguire programmi scritti per DBIII.</p>
<p>Verso la fine degli anni &#8217;80 un paio di società americane riuscirono a creare dei compilatori in grado di prendere le procedure scritte per il DBIII e trasformarle finalmente in programmi stand-alone che non necessitavano di nessun componente aggiuntivo per essere eseguiti: e fu la rivoluzione.</p>
<p>La Nantucket Corp. presentò <strong>Clipper</strong>, mentre l&#8217;altro prodotto che ricordo si chiamava Quicksilver. La spuntò Clipper, che era facilissimamente disponibile in versione &#8220;copia non ufficiale&#8221;, accompagnato da una essenziale ma completa documentazione, e dotato anche di alcune funzioni supplementari che rendevano ancora più potente il linguaggio, particolarmente un sistema per collegare Clipper al linguaggio C, rendendolo uno strumento potentissimo in mano sia al programmatore della domenica, che poteva compilare semplici procedure derivate dal DBIII, sia al vero esperto programmatore, che poteva sbizzarrirsi a fare qualunque tipo di applicazione.</p>
<p>La prima preda di Clipper furono i milioni di utilizzatori del DBIII, ormai quasi solo programmatori, che poterono finalmente distribuire i loro programmi in forma di eseguibile stand-alone, da cui era impossibile per l&#8217;utilizzatore risalire al sorgente (e quindi effettuare modifiche o aggiunte), e cominciò inoltre ad attrarre programmatori che abbandonavano i linguaggi tradizionali per passare al nuovo linguaggio. Clipper versione S87 era fatto straordinariamente bene. Consentiva di scrivere programmi in multiutenza, era solido come una roccia, quasi privo di bachi, efficiente e relativamente facile da imparare (soprattutto per chi proveniva dal DBIII). La sua parentela con il C non lo rendeva troppo esotico anche per chi proveniva da questo linguaggio, e come abbiamo visto questi programmatori disponevano di tutti gli strumenti per collegare Clipper proprio al C, per cui lo considerarono come una manna dal cielo.</p>
<p>La Nantucket fu acquistata all&#8217;apice del successo dalla Computer Associates, che era un colosso del software, quando aveva nel cassetto due prodotti più o meno pronti per il lancio, ossia la versione 5 di Clipper e Visual Object, che avrebbe dovuto costituire l&#8217;evoluzione di Clipper nel nuovo mondo informatico che si stava delineando e in cui mouse, finestre ed interfacce grafiche stavano prendendo il posto delle tristi schermate nere del DOS.</p>
<p>CA rilasciò in seguito la versione 5 di Clipper, che era in effetti una ulteriore rivoluzione: il linguaggio era stato reimplementato come un sottoinsieme di qualcosa di assai più vasto che prevedeva adesso anche una gestione ad oggetti, che nel frattempo si stava affermando come nuovo paradigma di programmazione. Il &#8220;qualcosa&#8221; era molto più chiaramente somigliante al C puro, sebbene conservasse la sua distinta identità. Apparve chiaramente la vera struttura interna del nuovo Clipper, ossia un insieme di centinaia di funzioni distinte, e di un &#8220;traduttore&#8221; che trasformava le classiche istruzioni DBIII nelle corrispondenti funzioni simil-C. La programmazione ad oggetti e la presenza di centinaia di nuove istruzioni facevano apparire come un piccolo sottoinsieme semplificato il tradizionale linguaggio DBIII, ed in questa fase molti programmatori rimasero costernati e perplessi. Devo ammettere che mi convertii alla nuova versione  di Clipper solo quando raggiunse la versione 5.2, e storcendo il naso.  Mi pare che fosse il 1991.</p>
<p>Nel frattempo Ashton-Tate aveva lanciato il DBIV, che ebbe poca fortuna, ed in seguito tentò di riciclarsi in ambiente Windows con il dBase 5, ma anche questo non ebbe grande successo ed alla fine fallì. Adesso dopo diversi passaggi Visual dBase sopravvive, sviluppato e commercializzato da una piccola società indipendente.</p>
<p>Il prodotto migliore dopo Clipper era probailmente <strong>Foxpro</strong>, che per certi versi era anzi anche meglio, e la versione per Windows, Visual Foxpro, era probabilmente la miglior implementazione del linguaggio dBase in tale ambiente. E&#8217; in questo periodo quindi che si comincia a parlare genericamente di linguaggi xBase, dato che erano presenti diversi prodotti, tutti basati sul vecchio DBIII ma dotati di varianti e caratteristiche proprie. Il vero problema era comunque come riuscire ad adattare il linguaggio dBase al nuovo ambiente Windows-centrico.</p>
<p>Il linguaggio di Clipper e degli altri prodotti concepiti per l&#8217;ambiente DOS si rifà ad uno stile di programmazione che è molto diverso dal funzionamento di Windows (o di altre GUI). La necessità di gestire bottoni, finestre, magari anche più finestre contemporaneamente aperte nello stesso programma, e la necessità di dialogare con Windows portano ad un modello di programmazione chiamato event-driven, cioè pilotato dagli eventi, contrapposto alla programmazione tradizionale, detta procedurale, in cui ogni programma fa in genere una sola cosa per volta secondo una successione prefissata. dBase V e Foxbase avevano risolto a modo loro, tracciando la via e creando le loro versioni del nuovo xBase, dotate di estensioni per la programmazione ad oggetti e di tutta la parte grafica. CA aveva rilasciato Visual Object, il successore di Clipper, innovativo e promettente, sebbene alquanto astruso e pieno di bachi che lo rendevano quasi inutilizzabile.</p>
<p>Intervenne a questo punto Microsoft, che acquistò Visual Foxpro. La mossa apparve come il riconoscimento che Visual Foxpro era il miglior strumento xBase disponibile, e che Microsoft si era decisa ad entrare nell&#8217;arena dei linguaggi xBase dalla porta principale. Molti programmatori acquistarono Foxpro (me compreso) serenamente pensando che il linguaggio non sarebbe morto e nuovi rosei sviluppi sarebbero arrivati. Niente di tutto ciò. Ben presto la vera strategia di Microsoft si chiarì: aveva acquistato Foxpro solo per toglierlo di mezzo e indirizzare i programmatori verso le sue alternative proprietarie. Foxpro fu lasciato morire lentamente e attualmente non è più nel catalogo Microsoft. L&#8217;ultima release è del 2007.</p>
<p>Ma qualche temerario aveva cominciato a lavorare in modo indipendente su Clipper:  aveva visto la luce infatti <strong>Clip4win</strong>, estensione che permetteva di collegare Clipper all&#8217;ambiente Windows (non ricordo l&#8217;autore). All&#8217;incirca in quello stesso periodo un certo <strong>Antonio Linares</strong>, un forte programmatore C con buonissime conoscenze dei meccanismi interni di Windows e che si era innamorato di Clipper, scrisse a sua volta una estensione che chiamò <strong>Fivewin</strong>. La bellezza e la profondità di Fivewin stanno nella semplicità del linguaggio creato da Linares (e dal suo pard Francisco Pulpòn) per gestire l&#8217;ambiente Windows, nella perfetta integrazione delle sue estensioni nel linguaggio esistente e nella fondamentale qualità del suo lavoro. Anche se Fivewin aveva qualche baco, la qualità generale era molto buona ed il costo accettabile: il prodotto ebbe subito successo tra i programmatori.</p>
<p>Ma CA aveva nel frattempo quasi abbandonato Clipper, che rimaneva un compilatore a 16 bit in un mondo dove ci si avviava a grandi passi verso i 32 e poi i 64 bit, e cominciava a soffrire di limitazioni strutturali insormontabili. Fu così che Linares cominciò a sviluppare un compilatore indipendente compatibile con Clipper (e Fivewin naturalmente) in grado di affrontare le sfide del futuro. La sua visione fu grandiosa e lo sforzo personale probabilmente immenso. La grossa novità fu che <strong>Harbour</strong> (il nuovo compilatore) nasceva come progetto Open Source, cioè di libero utilizzo da parte di chiunque. L&#8217;ultima versione che CA rilasciò di Clipper è la 5.3b nel 1997. Le alternative per la comunità di programmatori xBase erano costituite da pochi prodotti proprietari piuttosto costosi, come Alaska xBase++, Flagship, Visual Foxpro e dBase V. Nessuno di questi prodotti sembrava però in grado di raccogliere l&#8217;eredità di Clipper. Inoltre il solo Flagship era multipiattaforma, ovvero disponibile sia per il sistema Windows, sia per Linux.</p>
<p>L&#8217;idea del compilatore Open Source coagulò un certo numero di programmatori e il sistema cominciò pian piano a prendere piede. Presto fu disponibile la versione per Linux, il che consente ad un programmatore di scrivere un programma e di poterlo compilare ed eseguire senza particolari modifiche nei due ambienti. Ad un certo punto la creatura si rivoltò al suo padrone, se così possiamo dire. Proprio perché era un progetto &#8220;libero&#8221; un gruppo di programmatori in disaccordo con Linares sulle linee da seguire nello sviluppo del compilatore si separò dal progetto originario dando vita a xHarbour, che sta per extended Harbour (2001). Di xHarbour esistono due versioni, una free ed una a pagamento, mentre di Harbour esiste solo la versione free. I due progetti, Harbour e xHarbour, hanno molto in comune dato che derivano dallo stesso tronco, ma le differenze ci sono e non sono poche.</p>
<p>La situazione attuale vede Harbour come un progetto più vasto e disponibile per molte diverse piattaforme, come Windows, Linux, Mac OS X, MINIX 3, Windows CE, Pocket PC, Symbian, iPhone, QNX, VxWorks, OS/2/eComStation, BeOS/Haiku, AIX (xHarbour supporta in pratica solo Windows e Linux). Mediante il contributo di molti programmatori indipendenti il linguaggio dispone oggi di numerose alternative anche a livello di GUI oltre al citato Fivewin (che rimane comunque nella sua posizione di preminenza) e può collegarsi a SQL server come Oracle, PostgreSQL, MySQL ecc. e sfruttare tutta la potenza degli attuali PC a 32 o 64 bit. Personalmente utilizzo entrambi i compilatori in ambiente Windows e il solo Harbour in ambiente Linux. Lo sviluppo è costante e la comunità di programmatori è in perenne contatto in tutto il mondo mediante forum tecnici di discussione e mailing list.</p>
]]></content:encoded>
			<wfw:commentRss>https://www.appliserver.com/wordpress/?feed=rss2&#038;p=31</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Opera 12.10: sparizione della cornice della finestra</title>
		<link>https://www.appliserver.com/wordpress/?p=26</link>
		<comments>https://www.appliserver.com/wordpress/?p=26#comments</comments>
		<pubDate>Wed, 26 Dec 2012 21:51:59 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Browsers e dintorni]]></category>
		<category><![CDATA[browser]]></category>
		<category><![CDATA[cornice]]></category>
		<category><![CDATA[Opera]]></category>
		<category><![CDATA[opera troubleshooting]]></category>
		<category><![CDATA[problemi opera]]></category>
		<category><![CDATA[sparizione]]></category>
		<category><![CDATA[suggerimenti opera]]></category>

		<guid isPermaLink="false">http://www.appliserver.com/wordpress/?p=26</guid>
		<description><![CDATA[Diversi utenti di Opera (tra cui il sottoscritto) si sono ritrovati dopo l&#8217;aggiornamento alla versione 12.10 senza la cornice più esterna della finestra in cui gira Opera (versione Windows). Dopo qualche ricerca ho scoperto che pare che il problema sia &#8230; <a href="https://www.appliserver.com/wordpress/?p=26">Continua a leggere<span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Diversi utenti di Opera (tra cui il sottoscritto) si sono ritrovati dopo l&#8217;aggiornamento alla versione 12.10 senza la cornice più esterna della finestra in cui gira Opera (versione Windows).</p>
<p>Dopo qualche ricerca ho scoperto che pare che il problema sia presente soprattutto sui PC portatili dotati della funzione di sospensione. Se Opera era visualizzato in modalità &#8220;FullScreen&#8221; (a pieno schermo, finestra massimizzata) al momento dell&#8217;aggiornamento, al successivo riavvio la finestra risulta priva del bordo.</p>
<p>Questo inconveniente è davvero seccante, in quanto per esempio per chiudere Opera occorre adottare qualche forma di chiusura brutale dall&#8217;esterno del programma, sfruttando le opzioni di gestione dei programmi in esecuzione che consente il Sistema Operativo (in pratica Alt-F4 o altre cose più macchinose). Inoltre il menu risulta inaccessibile. Insomma un bel pasticcio, tanto che dopo un po&#8217; di tentativi avevo deciso di passare a Chrome e non pensarci più.</p>
<p>Ma per la verità un po&#8217; mi dispiaceva. Opera è probabilmente il più vituperato dei browser (da parte degli sviluppatori) per via di qualche sua particolarità (di cui gli utilizzatori finali non sono consapevoli), ben nota a chi sviluppa HML+Javascript e che ha causato ai suddetti sviluppatori qualche mal di testa e diverse imprecazioni (indovinate&#8230; me compreso!).</p>
<p>Bisogna tuttavia ammettere che le recenti versioni di Firefox e l&#8217;ancor più vituperato Internet Explorerer non sono un granché, tanto che Google Chrome sta conoscendo una diffusione molto ampia, anche naturalmente grazie al &#8220;muscolo&#8221; rappresentato da Google, che sta invadendo ogni angolo della Rete ed imponendo i suoi standard.</p>
<p>Dopo un incredibile (per l&#8217;epoca) navigatore prodotto da Attachmate (Emissary), l&#8217;Europa non ha più avuto voce in capitolo per quanto riguarda  questo tipo di prodotti, a parte per l&#8217;appunto Opera, che è prodotto da una società norvegese. Emissary non fu capito (anche perché era a pagamento) ma io che l&#8217;ho usato vi assicuro che era fantastico. Naturalmente non ebbe alcun successo e Attachmate abbandonò il progetto, con mio (e di altri suppongo) grande scorno.</p>
<p>Opera ha realmente innovato l&#8217;esperienza della navigazione Internet, per esempio introducendo i Tabs, i movimenti del mouse personalizzabili (gestures), l&#8217;integrazione di un client di posta nel browser e altre cose meno note come Opera Unite, Opera Turbo, ecc. Alcune di queste cose sono state copiate bellamente dagli altri browser, naturalmente senza che nessuno desse il minimo riconoscimento alla piccola società norvegese.  Opera rimane uno dei più veloci browser sul mercato, e la sua versione &#8220;mini&#8221; gira sui cellulari con sistema Symbian (Nokia per lo più) offrendo un prodotto incredibilmente efficiente per questi dispositivi, che fino ad oggi non erano dotati di grosse risorse hardware (memoria e potenza di elaborazione).</p>
<p>Dopo questa premessa, necessaria a capire come mai alla fine mi sia deciso ad effettuare nuove investigazioni piuttosto che buttare a mare Opera, ecco la soluzione.</p>
<p>Anzi per la verità ci sono ben tre soluzioni, che un ignoto utente ha così riassunto nel forum di discussione di Opera:</p>
<p>Method 1 (if you start Opera from a shortcut). Force Opera off however you can. Then use the shorcut to force Opera to start minimized (right click the shortcut &gt; Properties &gt; Shortcut &gt; Run: select &#8220;minimized&#8221; &gt; OK). After Opera starts up minimized, click the Opera icon in the taskbar to cause Opera to appear. Hopefully it will look normal. Again right-click the Opera shortcut and return the Run selection to &#8220;Normal Window&#8221;.</p>
<p>Method 2. With Opera off, delete Opera&#8217;s autosave.win file in its &#8220;sessions&#8221; folder, then restart Opera and see if the problem is cleared. NOTE: you may need to be sure &#8220;show hidden files and folders&#8221; is checked in your Windows Explorer (Tools &gt; Folder Options &gt; View &gt; Files And Folders) to see the file/folders.</p>
<p>Method 3. Rename Opera&#8217;s &#8220;operaprefs.ini&#8221; file in the profile or roaming folder to something like Xoperaprefs.ini (with Opera off). Then restart Opera and it will automatically create a new, default operaprefs file. See if that restores Opera to the correct view (although any custom preferences will be back at default settings). If Opera works correctly and the view problem is cleared, again turn Opera off and again rename the just-created operaprefs.ini file to something like Zoperaprefs.ini. Next rename the Xoperaprefs.ini file back to operaprefs.ini and restart Opera. Again, see if Opera now works like its supposed to and your custom settings are back. Finally, if all is well, go back and delete the Zoperaprefs.ini file as a cleanup.</p>
<p>La soluzione giusta e sicura al 100% è la seguente: Opera dispone di un <strong>file di configurazione</strong> che si chiama <strong>operaprefs.ini</strong>, il quale risiede nella cartella dove Windows normalmente pone i files di configurazione delle applicazioni. Questa locazione del vostro sistema non è sempre la stessa, a seconda della versione di Windows che state usando. Comunque, quale che sia tale locazione, il sistema ha un nome per essa: appdata (è una variabile d&#8217;ambiente), e quindi basta dire al sistema di posizionarsi in %appdata% e ci troveremo nel sancta sanctorum dove Windows memorizza le impostazioni ecc. dei vari programmi installati.</p>
<p>Dal menu Start scegliendo &#8220;Esegui&#8221; (N.B.: gli utenti di Windows Vista/7 potrebbero non avere l&#8217;opzione &#8220;Esegui&#8221; nel menu Start, per cui occorre prima abilitarla) inserite %appdata%. Occorre che nelle opzioni di visualizzazione delle finestre siano state abilitate le opzioni per visualizzare i files nascosti e di sistema. Se non sapete come fare queste due operazioni (Esegui nel menu Start e visualizzazione di files nascosti) qualche ricerca su Internet dovrebbe essere sufficiente, altrimenti fatemi sapere&#8230;</p>
<p>A questo punto si dovrebbe aprire una finestra con il contenuto della cartella %appdata%, tra cui dovrebbe essere presente la cartella Opera. Qui c&#8217;è una sottocartella che di nuovo si chiama Opera, e al suo interno tra altri files dovreste trovare appunto <strong>operaprefs.ini</strong>. Occorre adesso aprire questo file con un editor, quindi sarà sufficiente un clickdestro sul file e scegliere dal menu a comparsa &#8220;apri con&#8230;&#8221; e scegliere Notepad come editor. Anche un doppioclick dovrebbe andare bene perché Windows apre di solito con Notepad i files con estensione .ini, la quale è una estensione convenzionalmente usata dai programmatori per metterci le impostazioni iniziali (ini) dei programmi, ed è un normale file di testo. Questo file è organizzato in sezioni (tra parentesi quadre, per esempio: [uno], [due]&#8230; ) e coppie di parole separate da un segno uguale (esempio: DimensioneOrizzontaleDellaFinestra=800 puntini [eh eh, magari fosse così semplice ed in italiano...] ). Ora scorrete il file o effettuate un cerca-parola e localizzate nella sezione &#8220;[Windows]&#8221; la riga che comincia con &#8220;Browser window&#8221;.  I primi 4 valori che seguono &#8220;=&#8221;, separati da virgole,  sono le coordinate video appunto della finestra del browser all&#8217;avvio. Nel mio caso il primo valore era -4, che invece io ho riportato a 0. In pratica potete mettere 4 valori diversi, purché naturalmente abbiano un senso, per esempio 10,10, 400,600. Si tratta delle coordinate tlbr (Top, Left, Bottom, Right) rapportate al numero di pixel che lo schermo supporta (per esempio, se usate una risoluzione video di 1024&#215;768 pixel, tlbr varrebbero per una finestra ampia l&#8217;intero schermo 0,0,768,1024). E&#8217; facile capire che un valore come -4 significa che il punto più a &#8220;nord&#8221; della finestra si trova 4 pixel &#8220;sopra&#8221; lo schermo visibile. Questo tipo di istruzione sbagliata causa quasi sempre pasticci se i programmi si aspettano di leggere dal file .ini dati certi e quindi non effettuano alcun controllo di coerenza sui medesimi. In questo particolare caso Opera, poverino, va in confusione e traccia la finestra in un&#8217;area che &#8220;non esiste&#8221; col risultato che la cornice esterna finisce nel nulla&#8230;</p>
<p>Chiudete Notepad salvando il file modificato, riavviate Opera e dovreste ora constatare la ricomparsa della cornice della finestra.</p>
<p>Naturalmente, non occorre quasi nemmeno dirlo, queste operazioni vanno compiute con Opera CHIUSO.</p>
<p>Buon lavoro!</p>
]]></content:encoded>
			<wfw:commentRss>https://www.appliserver.com/wordpress/?feed=rss2&#038;p=26</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bulletin Board System</title>
		<link>https://www.appliserver.com/wordpress/?p=15</link>
		<comments>https://www.appliserver.com/wordpress/?p=15#comments</comments>
		<pubDate>Tue, 13 Nov 2012 09:57:40 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[HTML e dintorni]]></category>
		<category><![CDATA[BBS]]></category>
		<category><![CDATA[bulletin]]></category>
		<category><![CDATA[fidonet]]></category>
		<category><![CDATA[forum]]></category>
		<category><![CDATA[phpbb]]></category>

		<guid isPermaLink="false">http://www.appliserver.com/wordpress/?p=15</guid>
		<description><![CDATA[Qualcuno forse ricorda ancora le BBS, ovvero gli antenati dei &#8220;forum di discussione&#8221; su Internet. Internet in effetti non c&#8217;era ancora, e nemmeno l&#8217;ADSL. Nonostante questi limiti fioriva una piuttosto vasta (per l&#8217;epoca) comunità di appassionati anche qui in Italia. &#8230; <a href="https://www.appliserver.com/wordpress/?p=15">Continua a leggere<span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Qualcuno forse ricorda ancora le BBS, ovvero gli antenati dei &#8220;forum di discussione&#8221; su Internet. Internet in effetti non c&#8217;era ancora, e nemmeno l&#8217;ADSL. Nonostante questi limiti fioriva una piuttosto vasta (per l&#8217;epoca) comunità di appassionati anche qui in Italia. Al posto di Internet c&#8217;era Fidonet, che era una rete per lo più amatoriale diffusa in tutta la penisola.</p>
<p>Per potersi collegare occorreva una linea telefonica, un modem e naturalmente un PC con un semplice software in grado di azionare il modem. Dato che all&#8217;epoca c&#8217;era solo Telecom e le telefonate si pagavano (salate) in base al tempo ed alla distanza, la rete era organizzata in nodi, ognuno situato in una provincia. Così gli utenti si collegavano al nodo più vicino ed evitavano i costi della teleselezione. In ogni nodo erano presenti i messaggi di tutta la rete, divisi per argomento. C&#8217;erano una infinità di argomenti, cosicché era possibile scegliere solo quelli di interesse.</p>
<p>La comunicazione non avveniva in tempo reale come adesso nelle chat, dato che l&#8217;esigenza era quella di stare collegati il più breve tempo possibile. Chi voleva fare sul serio non si accontentava di un software che permetteva solo di collegarsi e consultare la BBS:  c&#8217;erano programmi che consentivano di replicare sul proprio PC i forum di discussione. In pratica la prima telefonata permetteva di scaricare sul proprio pc i messaggi degli argomenti che si era deciso di seguire. Poi si riagganciava e con calma si leggevano i messaggi e si componevano le risposte. Solo a questo punto si faceva un&#8217;altra chiamata per caricare i messaggi sul nodo, e poi si poteva tranquillamente andare a dormire perché tanto fino al giorno dopo non c&#8217;era speranza di ricevere risposta.</p>
<p>Durante la notte (sfruttando il fatto che le chiamate notturne in teleselezione costavano molto meno) i nodi si chiamavano a vicenda e scambiavano i messaggi, cosicché da una città all&#8217;altra, da un nodo all&#8217;altro, il nostro prezioso messaggio veniva rimbalzato per tutta Italia. Riassumendo, in un paio di giorni o tre arrivava la risposta: una enormità con gli occhi di adessso, ma un bel vantaggio rispetto alle lettere, che impiegavano settimane.</p>
<p>Le BBS non sono morte, hanno traslocato su Internet e si sono dotate di una serie di funzionalità aggiuntive quali la grafica (all&#8217;epoca i messaggi erano di solo testo) e grazie all&#8217;ADSL alla istantaneità dell&#8217;aggiornamento dei contenuti. Il nuovo modello server-centrico permette ai messaggi di essere disponibili immediatamente dopo essere stati inviati, senza  tempi morti.</p>
<p>Come se non bastasse, oggi praticamente chiunque può, utilizzando software gratuito e di pubblico dominio, creare una BBS sul proprio sito, disponendo di un provider che metta a disposizione quello che si chiama comunemente un server LAMP (Linux, Apache, MySQL, PHP).</p>
<p>Per il software di gestione dei gruppi di discussione veri e propri è disponibile tra gli altri <strong>phpBB</strong>, che offre davvero tante opzioni (www.phpbb.com). Questo software permette di creare un forum di discussione con diversi argomenti in cui gli utenti possono registrarsi, inviare messaggi e rispondere anche allegando foto o altro materiale multimediale.</p>
<p>Un bel passo avanti rispetto alle BBS d&#8217;antan, anche se nulla può restituire il sapore e l&#8217;emozione che dava il fatto di essere parte di una sparuta minoranza di precursori, il sentirsi parte di qualcosa di nuovo e completamente diverso da tutti gli altri modi di comunicare&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>https://www.appliserver.com/wordpress/?feed=rss2&#038;p=15</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WordPress</title>
		<link>https://www.appliserver.com/wordpress/?p=9</link>
		<comments>https://www.appliserver.com/wordpress/?p=9#comments</comments>
		<pubDate>Fri, 26 Oct 2012 11:52:29 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[HTML e dintorni]]></category>

		<guid isPermaLink="false">http://www.appliserver.com/?p=9</guid>
		<description><![CDATA[Dopo che un amico mi aveva chiesto un consiglio su come modificare le icone di un particolare tema di WordPress (erano azzurre ma lui le voleva rosse) ho cominciato a pensare che forse era il caso di dare un&#8217; occhiata &#8230; <a href="https://www.appliserver.com/wordpress/?p=9">Continua a leggere<span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Dopo che un amico mi aveva chiesto un consiglio su come modificare le icone di un particolare tema di WordPress (erano azzurre ma lui le voleva rosse) ho cominciato a pensare che forse era il caso di dare un&#8217; occhiata a questo CMS. Per inciso, la operazione di modifica delle icone ha comportato qualche imbarazzo, ma questa e&#8217; un&#8217; altra storia che sara&#8217; trattata magari in un altro articolo.</p>
<p>La prima operazione e&#8217; stata quella di cercare di capire quale CMS mi convenisse affrontare per primo. Avevo gia&#8217; ristretto il campo di indagine a WordPress, Joomla! e Drupal (e temo che dovro&#8217; guardarmeli tutti e tre) e dopo alcune ricerche su Internet ho ricavato l&#8217; impressione che WordPress sia il piu&#8217; amichevole.</p>
<p>A questo punto ho scaricato WordPress e l&#8217; ho installato sul fedele Appliserver, che per fortuna e&#8217; gia&#8217; predisposto per WordPress o Joomla!. Il famoso &#8220;si installa in 5 minuti&#8221; e&#8217; vero! Appliserver e&#8217; ospitato su un server su cui gira Linux CentOS ed e&#8217; stato relativamente facile attivare un database MySQL e collegarlo a WordPress. Dopo aver eseguito la configurazione iniziale, che si riduce alla modifica di un file, e&#8217; stato sufficiente richiamare lo script di installazione e&#8230; ecco fatto!</p>
<p>Naturalmente le cose non sono andate proprio lisce: dopo l&#8217; installazione infatti la pagina iniziale di Appliserver era sparita e al suo posto compariva questo blog. Dopo un po&#8217; di panico ho capito che era meglio separare il blog dal resto delle pagine HTML mettendo i files di WordPress in una cartella separata. A questo punto pero&#8217; non funzionava piu&#8217; niente. Fantastico!</p>
<p>Ci e&#8217; voluta qualche investigazione supplementare e un po&#8217; di pazienza, ma alla fine eccoci qua. Non sto qui a descrivere i vari passaggi perche&#8217; sono facilmente reperibili in rete, ma il risultato mi soddisfa abbastanza, e mi ha risparmiato la fatica di fare da zero un programma per la gestione del blog, che di certo mi avrebbe tenuto impegnato per un bel po&#8217; di tempo, modificando ed adattando Billboard. Certo sarebbe carino anche avere un vero e proprio forum di discussione,  e credo che questa sarebbe una buona esercitazione con Joomla!&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>https://www.appliserver.com/wordpress/?feed=rss2&#038;p=9</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
