Com’è dura la professione!

16 Novembre 2009

Sfruttare il system tray per controllare i job di KDE

Archiviato in: Open Source, Programmazione, kde4 — lbell @ 22:07

Una delle funzionalità offerte da KDE4 a sviluppatori ed utenti è quella di gestire i lavori a lungo termine delle applicazioni mediante un componente del vassoio di sistema. L’infrastruttura mette a disposizione dell’utente un unica locazione dalla quale può controllare l’andamento delle operazioni, opzionalmente sospenderle, sbloccarle o controllarne l’esito anche dopo il loro termine. Si evita così che ogni applicazione che intende avvalersi di questa funzionalità debba implementare una interfaccia di controllo. Dal punto di vista del programmatore, la fatica di imparare una nuova serie di API è ripagato dal fatto che è l’ambiente a prendersi in carico il compito di interagire con l’utilizzatore, sia per quello che riguarda l’aspetto funzionale, sia per l’interfaccia utente. Ovviamente i soli lavori di cui dovrà essere notificato lo stato di avanzamento mediante questa caratteristica sono solo quelli a lungo termine, per evitare di confondere l’utente con una miriade di messaggi irrilevanti.

Vediamo ora come si può sfruttare questa funzionalità:

Le applicazioni che intendono sfruttare il sistema di notifica devono incapsulare direttamente o indirettamente l’attività in una struttura KIO::Job, ad esempio derivando da essa la nostra classe di esempio KJobTest.

	#include <kjob.h>
	class KJobTest : public KIO::Job

Se si desidera che l’utente, una volta comparsa la notifica, possa mettere i lavori in pausa, riprenderli o annullarli occorre, nella nostra classe, chiamare la funzione

    setCapabilities()

cui va passato come argomento un insieme di flag che ne determinano il comportamento. Con il valori Kjob::Suspendable si concede all’utente la possibilità di sospendere un lavoro, con KJob::Killable anche di terminarlo. Per abilitare entrambe le funzionalità, scriveremo:

    setCapabilities(KJob::Killable|KJob::Suspendable);

Quando si è pronti per presentare il job all’utente, lo si deve registrare presso una struttura globale:

	KIO::getJobTracker()->registerJob(m_jobTest);

Da questo punto in poi il job è visibile all’utente. Emettendo il segnale ‘infoMessage‘ si può forzare il pannello a mostrare la descrizione desiderata per indicare il proprio job.

Il job può essere attivato in modalità sincrona o asincrona. Nel primo caso tutto quello che dovrà fare l’applicazione per gestire il job sarà richiamarne il metodo ‘exec‘, definito nella classe base, che restituirà l’esito mediante un valore booleano. Dietro le quinte verrà attivato un loop di messaggi nascosto. Riporto l’esempio di utilizzo definito nella documentazione KDE:

void SomeClass::methodWithSynchronousJobCall()
 {
   KJob *job = someoperation( some parameters );
   if ( !job->exec() )
   {
       // An error occurred
   }
   else
   {
       // Do something
   }
 }

Nel caso si intenda utilizzare il job in modo asincrono, metodo preferito per la gestione di operazioni a lungo termine, occorre attivare il job attraverso il metodo start(), richiamato in modo nascosto anche nel caso sincrono, e mettersi in attesa dei risultati collegando il segnale ‘result‘ ad uno slot. Ecco l’esempio relativo, sempre tratto dalla documentazione KDE:

 void SomeClass::methodWithAsynchronousJobCall()
 {
   KJob * job = someoperation( some parameters );
   connect( job, SIGNAL(result(KJob*)), this, SLOT(handleResult(KJob*)) );
   job->start();
 }
 void SomeClass::handleResult( KJob *job )
 {
   if ( job->error() )
       doSomething();
 }

Nel metodo start(), da reimplementare nella nostra classe derivata da KJob, occorre utilizzare un meccanismo asincrono, come ad esempio un timer di tipo oneShot, per innescare il job, per evitare che un’attivazione direttamente nella funzione start() provochi un malfunzionamento della gestione sincrona del job attraverso la funzione exec(), per motivi derivanti dall’implementazione della funzione exec stessa. Se abbiamo deciso di non utilizzare mai l’interfaccia sincrona potrebbe sembrare una precauzione inutile, ma scrivendo codice che si deve integrare in un ambiente, occorre sempre rispettarne i dettami.

Quando l’utente decide di intervenire nella vita del job cambiandone lo stato, il pannello del vassoio di sistema richiamerà metodi doSuspend(), doResume() e doKill() del nostro job, mediante i quali si potranno realizzare le dovute azioni.

Durante il suo ciclo di vita, il job può inviare al pannello segnali riguardo il proprio stato o la percentuale di avanzamento.

Emettendo il seguente segnale:

emit infoMessage(job, messageText, messageRichText );

si può provocare la comparsa della scritta relativa allo stato puntuale del job. Allo stesso modo è possibile inviare informazioni relative alla velocità attuale ed alla unità di misura utilizzata, nel caso sia compresa tra quelle dell’enumeratore ‘Unit’ di KJob.

Come esempio di utilizzo possiamo utilizzare un semplice programma, jobsample, mediante il quale è possibile provare le tecniche esposte, configurare i parametri principali a disposizione di un job ed osservare i risultati.

I sorgenti di jobsample sono disponibili a questo indirizzo:

http://www.tsc4.com/lbell/presentazioni/src/jobsample.tgz

Finestra principale di jobsample:

job sample in esecuzione:

26 Ottobre 2009

Compilare KDE 4.4 con Qt4.6 e kdesvn-build

Archiviato in: Open Source, QT, kde4 — lbell @ 21:55

Con il passaggio del trunk di KDE a Qt4.6 avvenuto il 10 ottobre non è più possibile utilizzare il sistema di build basato su kdesvn-build 1.9.1, dato che i sorgenti delle librerie Qt sono affidati a git e kdesvn-build si interfaccia con Subversion, occorrerebbe gestire manualmente il modulo qt-copy. Occorrerebbe, perché è appena stata rilasciata la versione 1.10, che è in grado di gestire git per il solo modulo qt-copy. E’ disponibile nel sito ufficiale da un paio di giorni e nel repository svn di KDE in branches/work/kdesvn-build-1.10. Per usarlo, occorre modificare la sezione relativa al modulo qt-copy nel file .kdesvn-build.rc nel modo seguente nella sezione dedicata a git:

module qt-copy
	#opzioni di compilazione
	configure-flags -system-zlib -qt-gif -system-libjpeg -system-libpng \
			-no-exceptions -fast -debug -dbus \
	            -no-phonon # Phonon built separately
	make-options -j2

	# opzioni di gestione git
	branch 4.6-stable-patched
	repository http://git.gitorious.org/+kde-developers/qt/kde-qt.git
end module

Sito di kdesvn-build:

http://kdesvn-build.kde.org/releases/kdesvn-build-1.10.php

19 Marzo 2009

Un viaggio in WebKit transitando per Plasmaland

Archiviato in: Open Source, Programmazione, QT, kde4 — lbell @ 22:55

Scrivendo una piccola utility per Plasma mi sono fatto tentare dall’uso della nuova versione di WebKit per gestire l’interfaccia utente.

In effetti integrare WebKit in un programma QT o KDE non è troppo difficile, grazie all’uso degli slot e delle metainformazioni che QT aggiunge alle classi. E’ possibile richiamare direttamente i metodi di oggetti residenti nel nostro programma, sfruttando il meccanismo dei segnali e degli slot, dalla pagina HTML via Javascript. Per prima cosa occorre inserire nelle pagine HTML riferimenti agli oggetti C++ della nostra applicazione come se fossero variabili Javascript native, utilizzando un identificatore che verrà mappato sugli oggetti fisici a tempo debito. Fatto ciò possiamo codificare funzioni Javascript che sfruttino i metodi dichiarati come slot, in corrispondenza di determinati eventi, come la pressione di un pulsante. Possiamo quindi dalla pagina HTML eseguire metodi dei nostri oggetti passando quali parametri entità definite al livello HTML, come ad esempio i valori di un form.

Ogni collegamento tra WebKit e la nostra applicazione avverrà sempre tramite funzioni Javascript, quindi sarà WebKit ad iniziare le operazioni.

Facciamo un esempio:

Supponiamo che il nostro obiettivo sia di richiamare da Javascript il metodo ‘reload’ di un’istanza di una classe C++ descritta in questo modo:

class DBusApplet : public
Plasma::PopupApplet
{
    Q_OBJECT
    ...
public
slots:
    void reload(const QString &selection);
private:
    ...
};

in Javascript la nostra istanza può essere mappata come segue, assumendo che sia stata associata all’identificatore ‘appletInterface’:

function execute(selection)
{
    appletInterface.reload(selection);
}

Dato che la conversione dei tipi di base è automatica, quello che occorre fare è ‘iniettare’ gli oggetti C++ all’interno del componente WebKit, ma è necessario attendere che sia il componente ad avvertirci del momento più opportuno.

Al termine del caricamento di una pagina HTML, che la si assegni direttamente da programma o attraverso un URL, il frame corrente emette infatti il segnale “javaScriptWindowObjectCleared”, che occorre avere cura di catturare nel solito modo che QT ci mette a disposizione:

connect(page()->mainFrame(),

SIGNAL(javaScriptWindowObjectCleared()), this, SLOT(populateJavaScriptWindowObject()));

Alla ricezione del segnale possiamo, attraverso il metodo collegato (nell’esempio precedente ‘populateJavaScriptWindowObject’), passare finalmente il riferimento dei nostri oggetti a WebKit attraverso il metodo addToJavaScriptWindowObject, i cui argomenti sono il nome della variabile Javascript associata e l’indirizzo dell’oggetto stesso.

page->mainFrame()->addToJavaScriptWindowObject(“appletInterface”, this);

Se tentassimo di associare i nostri oggetti prima che la pagina sia stata effettivamente caricata, il collegamento non avrebbe successo.

http://doc.trolltech.com/4.4/qtwebkit.html

http://webkit.org/

http://code.google.com/p/dbusapplet/

10 Gennaio 2008

Anjuta è ora parte di GNOME

Archiviato in: Linux, Open Source, Progetti su SourceForge, Programmazione — lbell @ 22:43
Tags: , ,

Un piccolo annuncio che mi riempie di soddisfazione, anche se ormai sono anni che non vi riverso una linea di codice: Anjuta, un IDE per programmare in C e C++ per l’ambiente GNOME farà ufficialmente parte dei moduli di GNOME 2.22 come si legge in questa mail. Complimenti agli sviluppatori attuali ed una lacrimuccia in memoria di quando programmavo nel mio linguaggio preferito (il C) e Linux per me era ancora una (bellissima) novità. Di strada ne è stata fatta tanta.

Anjuta 3 Anjuta 2 Anjuta 1

Il sito ufficiale di Anjuta:

http://www.anjuta.org/

Il sito di Anjuta su SourceForge:

http://sourceforge.net/projects/anjuta

 

8 Gennaio 2008

Perché è importante usare standard aperti (ed essere contrari a OOXML)

Archiviato in: Microsoft, Open Source, cosi' va il mondo — lbell @ 23:26

La fine del supporto a certi tipi di “vecchi” formati di file decretata da Microsoft, fa riflettere sull’utilità di impiegare formati proprietari per memorizzare i documenti. In un altro blog leggo che decine di documenti religiosi e scolastici a causa di questa decisione rischiano di essere perduti perché fra qualche tempo non esisteranno più programmi in grado di leggerli, mentre gli atti più vecchi scritti su carta possono essere tranquillamente consultati.

L’accessibilità dei documenti elettronici memorizzati in formati proprietari, essendo molto spesso non nota la loro codifica, dipende dalla volontà della ditta che detiene l’ideazione di tali formati. Qualora la ditta fallisse o non avesse più convenienza ad aggiornare i programmi perché possano funzionare sui moderni sistemi operativi (tutti casi occorsi nella realtà), l’utente o l’autore di tali documenti troverebbe di fatto un ostacolo insormontabile tra sé ed i propri dati.

Cosa è successo in realtà? Che un’azienda, esercitando un suo legittimo diritto, ha deciso di togliere il supporto ad alcuni formati di file proprietari, di programmi non più funzionanti sugli odierni sistemi operativi. Lo ha fatto per la propria convenienza, citando come spiegazione ragioni di sicurezza, mediante la pubblicazione di aggiornamenti di manutenzione ai suoi programmi da ufficio. Per amor del vero devo dire che esiste una scappatoia, anche se complicata, per accedere ancora a tali formati, ma il danno maggiore lo si avrà fra qualche tempo, quando magari si avrà bisogno di consultare i documenti storici e non si saprà come.

In un mondo dove occorre lavoro ed impegno per essere continuamente competitivi, sprecare tempo e lavoro per poter di nuovo accedere ai vecchi documenti mi sembra una vergogna. Viviamo tempi in cui accadono cose straordinarie, da piccolo mai avrei pensato che potesse cadere il confine con la Slovenia nella concordia più totale o che la Cina potesse diventare la fabbrica del mondo, perché dobbiamo perdere tempo ed energie per capire come rileggere i documenti di cinque o dieci anni fa?

È facile ora consigliare di utilizzare standard aperti per la memorizzazione dei documenti, ma che alternative reali esistono per evitare di non potervi più accedere fra, diciamo, cinque anni? Tutti pensiamo di poter vivere almeno cinque anni ancora, vero? Altrimenti non perdereste tempo a leggere queste righe.

  1. Utilizzare il programma che va per la maggiore, non accontentarsi di nulla di meno, il secondo in classifica domani sarà reso obsoleto dalla nuova versione del sistema operativo o magari la ditta che lo produce sarà fallita o scalata. Ma nemmeno così sarete sicuri.

  2. Usare uno standard aperto, e per aperto non intendo aperto per finta come è stato fino ad oggi OOXML, ma un formato utilizzabile senza restrizioni né condizioni, OpenDocument, tanto per essere chiari.

Con un formato aperto sarà sempre possibile accedere ai propri dati.

Decidere di utilizzare o meno un formato aperto è di una scelta legittima, ma penso che almeno le associazioni e le pubbliche amministrazioni abbiano il dovere di utilizzare e pubblicare documenti in formati aperti.

L’uso di formati come OpenDocument, PDF ed HTML è una garanzia prima di tutto per l’utente.

Link:

http://www.tedcarnahan.com/2008/01/02/three-steps-to-open-source-in-the-church/

http://it.slashdot.org/firehose.pl?id=443210&op=view

http://support.microsoft.com/kb/938810/en-us

http://www.news.com/Office-2003-to-get-security-upgrade/2100-7355_3-6179672.html?tag=st.nl

http://www.consortiuminfo.org/standardsblog/index.php?topic=20051116124417686

http://www.noooxml.org/

http://en.wikipedia.org/wiki/Opendocument

http://www.fsf.org/campaigns/odf.html

 

 

 

 

4 Gennaio 2008

È nato il nuovo anno, è nato KDE 4.0.0

Archiviato in: Open Source, kde4 — lbell @ 21:47
Tags: ,

Non sarà il passo che porta alla salvezza del genere umano, o un capolavoro come la Gioconda, ma KDE 4.0.0 è praticamente pronto per il rilascio di metà gennaio, proprio nei giorni del mio compleanno, in un evento in grande stile a Mountain View nella sede di Google. La versione attuale non sarà tuttavia un ambiente che qualunque utente potrà desiderare di utilizzare già da ora al posto della 3.5 attuale, ma piuttosto una base su cui far crescere il KDE di domani: il processo di sviluppo del software Open Source è diverso da quello del software proprietario e questo post di Aaron Seigo lo descrive bene:
http://aseigo.blogspot.com/2008/01/talking-bluntly.html.
La fretta e la confusione con cui sono state eseguite le ultime traduzioni per rientrare nella deadline imposta, valida anche per il congelamento del codice, mi ha ricordato per certi versi l’atmosfera di un giornale al momento di andare in stampa. Più di 700 commit in un paio di giorni non è una cifra da disprezzare.
Forse è troppo tardi per la applicazioni desktop, ma KDE4 è comunque un’avventura affascinante.
Buon anno KDE, da lunedì si torna al lavoro con Windows.

4 Dicembre 2007

Vita con Android

Archiviato in: Android, Open Source, Programmazione — lbell @ 21:09
Tags: ,

Finalmente ho avuto l’occasione di vedere da vicino e di provare l’ambiente di sviluppo del gPhone.

La prima cosa che si nota rispetto agli ambienti di sviluppo ‘tradizionali’ è la facilità dell’installazione: basta scompattare i file in una directory ed aggiungere una variabile di ambiente. Se si intende sviluppare con Eclipse (cosa che facilita la vita) occorre scaricare dal sito di Google un plugin. Un altra cosa che lascia ben disposti è il fatto che lo SDK sia stato portato sotto Linux, Windows e MacOS demandando la scelta dell’ambiente operativo allo sviluppatore.

L’emulatore di dispositivo in dotazione sembra ben fatto, ma a volte, almeno sotto Linux, in fase di debug perde il sincronismo con Eclipse. Dal momento che in realtà gli strumenti utilizzati dietro le quinte sono programmi pilotabili a linea di comando, adb nello specifico, presenti nella directory tools del SDK, in caso di emergenza possiamo killare il processo adb con opzione start-server permettendo ad Eclipse di rilanciarlo in modo pulito alla sessione di debug successiva. Anche lo SDK stesso sembra solamente il primo abbozzo di un sistema più completo e diverse funzionalità sono riportate non funzionanti nella mailing list dedicata al progetto.

Nel complesso come primo passo Android sembra ottimo, la documentazione è esaustiva e copre ogni parte del toolkit, ma occorre aspettarsi una sviluppo del sistema.

Come banco di prova ho iniziato un progettino per visualizzare i feeds del sito planet.kde.org (uno dei miei preferiti). Ho cercato di esplorare un po’ di tecnologie, servizi in background, uso del database sqlite, viste personalizzate e l’integrazione del browser internet incluso. Il tutto è stato abbastanza agevole, anche se non sono state investigate le capacità multimediali del sistema, di cui molti sviluppatori si sono lamentati. Ad ogni modo il progetto è stato pubblicato su Google code all’indirizzo http://code.google.com/p/planetandroid/ sotto l’obbligatoria licenza GPL.

3 Maggio 2007

ApacheDS, server LDAP da Apache (e LDAP Studio)

Archiviato in: Java, Open Source, Programmazione — lbell @ 20:27

Qualche giorno fa è stato rilasciata una nuova versione (1.5) di ApacheDS, un server LDAP scritto interamente in Java. LDAP è ormai diventato centrale nel mondo IT per la gestione delle identità degli utenti in ambienti di una certa complessità. Microsoft vi ha decisamente puntato, mentre il mondo Open Source è un po’ più statico a questo riguardo.

ApacheDS, server nato da un progetto Apache, ha diverse caratteristiche interessanti: è scritto in Java, è embeddable, estensibile, supporta filtri, trigger (che possono implementare integrità referenziale) e stored procedure.

Sono previsti tool di configurazione per semplificare la vita agli utilizzatori ed esiste già uno strumento, LDAP Studio basato su Eclipse che, oltre a permettere la navigazione dei dati, può editare gli schemi (e presto modificare direttamente ads) e presto avrà altre funzionalità specifiche per ads.

Sul sito (http://directory.apache.org) ci sono guide e tutorial.

A dire la verità dopo alcune prove, ho riscontrato qualche problema con il consumo di memoria. La quantità di memoria consigliata e di default è di 384MB ( da settare nel file di gestione del servizio) ma sulla mia macchina con solo 512MB con tale valore ads non è riuscito a partire causa allocazioni fallite. Ho dovuto abbassare il limite ad un più ragionevole 128 MB per avere la soddisfazione di vederlo partire.

Oltre al sito del progetto si può trovare una presentazione sul sito della conferenza europea di Apache 2007 http://www.eu.apachecon.com/

LDAP Studio

13 Febbraio 2007

Marzo, il mese dei bug e di PHP

Archiviato in: Linux, Open Source, Programmazione, php — lbell @ 21:42

Marzo sarà il mese dei bug di PHP. Stefan Esser, il fondatore del progetto Hardened-PHP, deluso dal comportamento del team di sviluppatori e degli addetti alla sicurezza del linguaggio probabilmente più diffuso nelle applicazioni web, ha deciso di rivelare un bug al giorno per smuovere le acque. Lo si può leggere sul suo blog e in un’intervista su SecurityFocus. PHP è l’arma principale dei siti web che sfruttano Apache e software Open Source e fa molta impressione leggere le serie accuse che Esser muove ai suoi sviluppatori. Sapere che applicazioni come i CMS più diffusi, Typo3, Drupal, Mambo ed altre applicazioni largamente diffuse come Horde, Mediawiki, WordPress possono essere a rischio al di là di come sono state scritte, ma solo per il sistema con cui sono state realizzate, lascia un po’ di amaro in bocca, tanto più se si pensa all’enorme numero di siti che resteranno unpatched per molto tempo ancora (gli aggiornamenti solitamente hanno una inerzia molto alta nella maggior parte dei casi). Chi attacca i sistemi conosce ovviamente questi problemi molto bene, i web master no, solo ora se ne potranno rendere conto. Un discorso a parte merita il come sono state scritte le applicazioni stesse, ma questa è un’altra storia.

Forse una lezione salutare, ma di cui non se ne sentiva la necessità.

Una notizia che spicca proprio nel momento in cui Microsoft sta profondendo il suo massimo sforzo nel campo della sicurezza. E’ molto tempo che non esce una vulnerabilità seria per IIS6 e l’uso di C# ha permesso di abbattere i problemi di errori dovuti a buffer overflow ( anche se qualche problema resta….. ). Viene veramente da pensare se sia il caso di migrare i siti ad ASP.NET, magari nascosto dietro un Apache come protezione supplementare.

3 Gennaio 2007

Provare un sistema LAMP sotto Windows senza fatica.

Archiviato in: Linux, Open Source, php — lbell @ 21:05

Nel DVD allegato al numero di PC Professionale di questo mese si trova una macchina virtuale vmware (e relativo player) contente una installazione di LAMP, (Ubuntu) Linux, Apache come server web, MySQL database e PHP come linguaggio di script ed una serie di applicazioni già configurate, pronte per essere provate, una ventina in totale. Si va dalla suite di collaborazione eGroupware ai gestori di contenuti (CMS) ai programmi di e-commerce, ai gestori di blog. L’uso di una macchina virtuale permette anche a chi ha solo Windows di toccare con mano gli applicativi web in questione senza dover installare nulla, a parte il player di vmware, ovviamente. C’è da sottolineare che non serve comunque utilizzare Linux per gestire la maggiore parte degli applicativi in questione visto che molti funzionano anche sotto Windows e IIS, data la portabilità di PHP e MySQL.

Pagina Successiva »

Blog su WordPress.com.