Michela Vittoria Brambilla è un ministro competente

12 Maggio 2009

L’Italia ospita il 70% circa dei beni culturali del mondo, e fino al 2005 l’8.5% circa del Prodotto Interno Lordo Italiano era legato alle attività turistiche.
Per dimostrare l’alto rispetto che il nostro premier Silvio Berlusconi dimostra negli interessi economici della nazione, arriva da pochi giorni la nomina di Vittoria Brambilla come ministro del Turismo.

Penso sia buona cosa che gli italiani abbiano ben noto il background culturale e le competenze tecniche di cui tale soggetto si avvale per amministrare la nostra cosa pubblica.

Questo video ne è un esempio.


Ordeal’s Movie Manager RCP(Part3)

10 Novembre 2008

Come promesso vediamo il metodo FilmListView.printResult

	@SuppressWarnings("deprecation")
	public static void printResult(ResultSet r, Display display)
	{
		table.removeAll();
		if(secThread!=null)
			secThread.stop();
		 secThread=new PrintResult(r,display,table,nextItem);
		 secThread.start();

	     titoloCol.pack();
	     annoCol.pack();
	      numdvdCol.pack();
	      divxCol.pack();
	      vistoCol.pack();
	      registaCol.pack();
	      movieidCol.pack();
	}

In realtà il metodo in se serve solo ad avviare un thread della classe PrintResult, con due particolari accorgimenti:

  1. resettare il contenuto precedentemente visualizzato nella table con
    table.removeAll(); 
  2. stoppare un thread avviato precedentemente se è ancora in runtime, cioè se sta ancora stampando sulla table, con
    secThread.stop();

Esaminiamo dunque il codice del thread di stampa.

class PrintResult extends Thread {
	  private Display display;
	  private ResultSet r;
	  private Table table;
	  private TableItem nextItem;

	  String text="";

	  public PrintResult(ResultSet rs,Display d,Table t,TableItem ni)
	  {
		  display=d;
		  nextItem=ni;
		  r=rs;
		  table=t;
	  }

	  public void run()
	  {  

				try {
					while(r.next())
					{

							display.syncExec(new Runnable() {
								public void run() {
									try
									{
									nextItem = new TableItem(table, SWT.WRAP);
									nextItem.setText(0,r.getString("titolo"));
								     nextItem.setText(1,r.getString("anno"));
								     nextItem.setText(2,r.getString("numdvd"));
								     nextItem.setText(3,r.getString("divx"));
								     nextItem.setText(4,r.getString("giavisto"));
								     nextItem.setText(5,r.getString("regista"));
								     nextItem.setText(6,r.getString("movie_id"));
									}
									 catch (SQLException e) {
											// TODO Auto-generated catch block
											e.printStackTrace();
										}

								}//inner run

						} //runnable

					  );//
					}
					r.getStatement().getConnection().close();

				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}//while

	  }//run
}//thread

Il meccanismo usato nel ciclo while, è lo stesso di cui parlavo qui
Il metodo run() dell’interfaccia Runnable() che stiamo implementando è invocato direttamente dal thread grafico, e poichè scomodiamo quest’ultimo con la chiamata

display.syncExec(Runnable)

il thread secondario verrà sospeso fin quando il thread grafico non completerà la stampa di una riga.

Il membro “r” della classe, di tipo ResultSet, come dice il nome stesso contiene una struttura che alloca in qualche modo le stringhe di risultato della query al server.
Il ciclo ha la sua condizione d’arresto quando r.next() è falso, cioè quando sono terminate le righe estratte una per una dal ResultSet.

Per darvi un’idea del contenuto grafico del Tab “Search by Title”, eccovi una screenshot:

—-
Link ai binari/sorgenti
Win32 e per GNU/Linux@x86.

Vi ricordo che i sorgenti si trovano sotto la directory plugins,all’interno del MyMovieManager_1.0.0.jar, dentro la directory src.


Ordeal’s Movie Manager RCP(Part2)

9 Ottobre 2008

Vediamo come affrontare il problema delle “Viste”.
Secondo l’articolo di Eclipse Corner
In the Eclipse Platform a view is typically used to navigate a hierarchy of information, open an editor, or display properties for the active editor”.
Nel nostro caso ci serve per implementare una struttura a tab, un tab folder, che ci offrirà un tab per la ricerca dei titoli, un altro tab per il loro inserimento e cancellazione.
Per creare la vista dobbiamo usare il file plugin.xml, andare su extensions ed aggiungere un’estensione all’RCP, ovvero un set di plug-ins che estendono la funzionalità dell’applicativo, nel nostro caso org.eclipse.ui.views.
Aggiungete una vista, datele un nome, un id,nel caso mio myMovieManager.view1, e opzionalmente un’icona, cosa importante, ricordatevi di associargli la classe da generare attraverso il form *class, che conterrà tutte le componenti grafiche in essa contenute.
Una volta fatto ciò dovete mettere mano alla classe Perspective.

	layout.setEditorAreaVisible(false);
		layout.addStandaloneView(FilmListView.ID,false, IPageLayout.TOP, 0.90f, layout.getEditorArea());
		layout.addShowViewShortcut(FilmListView.ID);
		IViewLayout filmlist_layout = layout.getViewLayout(FilmListView.ID);
		filmlist_layout.setCloseable(false);
		filmlist_layout.setMoveable(false);

il metodo per aggiungere la vista è addStandaloneView, gli altri servono solo per sistemare il layout e le proprietà della vista.
La nostra vista servirà per contenere un oggetto di tipo Tab folder.

	@Override
	public void createPartControl(Composite parentWindow) {

		tabFolder = new TabFolder(parentWindow, SWT.BORDER);
		TabItem sbttabItem = new TabItem(tabFolder, SWT.NONE);
	      sbttabItem.setText("Search By Title ");
	      sbttabItem.setImage(new Image(parentWindow.getDisplay(), this.getClass().getResourceAsStream("/icons/search_16x16.png")));
	    sbttabItem.setControl(searchByTitleContent(tabFolder));

			      TabItem inmtabItem = new TabItem(tabFolder, SWT.NULL);
			      inmtabItem.setText("Insert/Delete Movie ");
			      inmtabItem.setControl(insertDeleteMovie(tabFolder));
			      inmtabItem.setImage(new Image(parentWindow.getDisplay(), this.getClass().getResourceAsStream("/icons/insert_16x16.gif")));

	}

Il codice in questione è appartenente al metodo createPartControl della vista contenuta nel sorgente FilmListView.java, appartenente al package dell’RCP.
Potete usare tale metodo in ogni vista per “piazzare” i widgets SWT che intendete disporre nella vista.
Nel nostro caso un TabFolder, e due TabItem comprensivi di immagine in esso contenuti.
Il mio consiglio è quello di usare questo sito assiduamente come un vero e proprio catalogo delle componenti grafiche SWT, da poter piazzare come e dove vi pare.
le due chiamate

sbttabItem.setControl(searchByTitleContent(tabFolder));

e

inmtabItem.setControl(insertDeleteMovie(tabFolder));

permettono di creare con le funzioni searchByTitleContent(tabFolder) e insertDeleteMovie(tabFolder) , tutto il contenuto di un TabItem, in modo custom.

All’interno di tali funzioni il procedimento è questo:

public Control searchByTitleContent(TabFolder tabFolder)
	{
	    Composite composite = new Composite(tabFolder, SWT.NONE);
	    composite.setLayout(new GridLayout(6,true));
	    // Create the TableTree and set some attributes on the underlying table
	    table = new Table(composite, SWT.MULTI | SWT.BORDER | SWT.V_SCROLL );
                 ...
                 return composite;

In pratica instanziamo un oggetto Composite,lo aggreghiamo con componenti grafiche di ciascun tipo (nell’esempio table), e alla fine lo ritorniamo alla funzione chiamante.

Oltre all’ogetto table, con tutte le colonne che nel package allegato potete vedere come sono implementate, il tabItem contenuto nella nostra vista, contiene anche un semplice InputDialog

// Create a label to display what the user typed in
			    final Label label = new Label(composite, SWT.NONE);
			    label.setLayoutData(data=new GridData(GridData.FILL_HORIZONTAL));
			    data.horizontalSpan=6;
			    Button show = new Button(composite, SWT.PUSH);
			    final Label dialog_content=new Label(composite,SWT.NONE);
			    dialog_content.setVisible(false);

			    label.setText("Nessun titolo ancora cercato");
			    dialog_content.setText("Inserisci il titolo da cercare");

			    show.setText("Enter Title");
			    show.addSelectionListener(new SelectionAdapter() {
			      public void widgetSelected(SelectionEvent event) {
			        InputDialog dlg = new InputDialog(Display.getCurrent().getActiveShell(),
			            "", "Inserire il titolo o una parola in esso contenuta", dialog_content.getText(), new LengthValidator());
			        if (dlg.open() == Window.OK) {
			          // User clicked OK; update the label with the input
			          label.setText("Risultati per : " + dlg.getValue());
			          label.pack();
			          dialog_content.setText(dlg.getValue());

			        try {
						result=Connector.giveResponse(fix(dlg.getValue()));
					} catch (Exception e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
			          if(result!= null)
			          {
			        	FilmListView.printResult(result, Display.getCurrent());
			          }

			        }
			      }
			    });

Il dialog è dlg, avviato quando viene premuto il pulsante show, attraverso il metodo addSelectionListener.
Quando tale dialog raccoglie il testo, tale testo viene passato al metodo statico

result=Connector.giveResponse(fix(dlg.getValue()));

che esamineremo prossimamente, il metodo fix invece, sostituisce l’apice ‘ con ` (apice inverso), per evitare di passare una variabile dati con un apice ad una query sql,sappiamo che l’apice infatti chiude la query.

Prossimamente vedremo il metodo
FilmListView.printResult(result, Display.getCurrent()); utilizzato da un thread secondario per la stampa asincrona dei risultati sulla tabella.

—-
Link ai binari/sorgenti
Win32 e per GNU/Linux@x86.

Vi ricordo che i sorgenti si trovano sotto la directory plugins,all’interno del MyMovieManager_1.0.0.jar, dentro la directory src.


Canto Notturno di pastore errante dell’Asia

18 Giugno 2008

Da tempo volevo condividere i pensieri e le emozioni che questa lirica di Leopardi mi ha dato con chiunque passasse da questo blog.
E’ una delle mie preferite in assoluto,concentra nei suoi versi la forza e la disperazione dell’uomo,che nel suo breve viaggio trova il coraggio di porsi La Domanda Essenziale:il significato della sua esistenza.
L’uomo è eroico,perchè continua a vivere nel tedio,pur sapendo che non troverà mai risposta alle sue domande,continua a camminare e non si arrende,come il pastore dell’Asia che per una vita intera sopporta le asperità del terreno che calpesta,fin quando non giunge alla fine dei suoi giorni.


Che fai tu, luna, in ciel? dimmi, che fai,
silenziosa luna?
Sorgi la sera, e vai,
contemplando i deserti; indi ti posi.
Ancor non sei tu paga
di riandare i sempiterni calli?
Ancor non prendi a schivo, ancor sei vaga
di mirar queste valli?
Somiglia alla tua vita
la vita del pastore.
Leggi il seguito di questo post »


Passo parola anche io

26 Maggio 2008

Ho aperto una nuova pagina :  Passaparola

Se non riuscite a inserire il player Stickam sul vostro blog WordPress ecco le istruzioni:

1) Createvi un account su Vodpod
2) Una volta loggati, create un nuovo pod recandovi qui
3) Aggiungete un nuovo video cliccando su Past embeded code,a quel punto selezionate WordPress come piattaforma per il blog,e inserite user e pass del blog, e il titolo del post.
4) Godetevi lo stream.


PowerPC assembly

12 Febbraio 2008

Essendo uno degli ultimi possessori di un processore della famiglia PowerPC non potevo resistere alla tentazione di scoprire le caratteristiche interne di questa meravigliosa macchina.
Il processore appartiene alla famiglia RISC,cioè ha un set di istruzioni limitato nelle funzionalità,(load and store), presenta un banco di 31 registri in virgola fissa a 32 bit e un banco di 32 registri in virgola mobile a 64 bit e alcuni registri di uso speciale.

In giro si trova parecchio materiale a riguardo,ho trovato un paio di references : semplificata
ed estesa
ma scarseggiavano un pò gli esempi e il codice.
Con il compilatore gcc però si può effettuare la compilazione senza assemblare il programma in codice eseguibile, adoperando

 gcc -S -o programma nomesorgente.c

e grazie a questo, è possibile studiare semplici programmi scritti ad alto livello e tradotti in assembly.
Leggi il seguito di questo post »