468x60

mercoledì 30 settembre 2009

Pattern architetturale Model-View-Controller

Model-View-Controller (MVC, talvolta tradotto in italiano Modello-Vista-Controllore) è un pattern architetturale molto diffuso nello sviluppo di interfacce grafiche di sistemi software object-oriented. Originariamente impiegato dal linguaggio Smalltalk, il pattern è stato esplicitamente o implicitamente sposato da numerose tecnologie moderne, come framework basati su PHP (Symfony, Zend Framework), su Ruby (Ruby on Rails), su Python (Django), su Java (Swing, JSF e Struts), su Objective C o su .NET. A causa della crescente diffusione di tecnologie basate su MVC nel contesto di framework o piattaforma middleware per applicazioni Web, l'espressione framework MVC o sistema MVC sta entrando nell'uso anche per indicare specificamente questa categoria di sistemi (che comprende per esempio Ruby on Rails, Struts, Spring, Tapestry e Catalyst).

Struttura

Il pattern è basato sulla separazione dei compiti fra i componenti software che interpretano tre ruoli principali:
  • il model fornisce i metodi per accedere ai dati utili all'applicazione
  • il view visualizza i dati contenuti nel model e si occupa dell'interazione con utenti e agenti
  • il controller riceve i comandi dell'utente (in genere attraverso il view) e li attua modificando lo stato degli altri due componenti
Questo schema, fra l'altro, implica anche la tradizionale separazione fra la logica applicativa (in questo contesto spesso chiamata "logica di business"), a carico del controller e del model, e l'interfaccia utente a carico del view.

Creazione di un componente con MVC in Joomla 1.5

Articolo molto interessante sulla creazione di un componente MVC in Joomla 1.5 utilizzando il pattern MVC

martedì 29 settembre 2009

Wiki - progetti per la condivisione della conoscenza

Wiki ha intrapreso un ambizioso progetto, quello di rendere "aperta" la conoscenza, permettendo a chiunque di accedervi per usufruirne e condividerla.

Elenco di seguito alcuni dei progetti di Wiki:

lunedì 28 settembre 2009

Errore HTTP 500 - Internal Server Error

L'errore "HTTP 500" è un errore generico di elaborazione di uno script da parte del webserver. Questo errore è senza dubbio uno tra gli errori più odiati da chiunque si avvicini al mondo dei linguaggi server side, soprattutto tra gli sviluppatori. Perché in realtà dice tutto e niente...

Il codice http di questo errore, il 500, è generato dal webserver quando un errore di elaborazione ha impedito il corretto completamento della richiesta. L'errore è molto generico ed è quindi praticamente impossibile risalire al problema da questa notifica.

Vediamo come è possibile trasformare questo messaggio, decisamente user unfriendly, in uno maggiormente comprensibile. Fortunatamente è possibile ottenere informazioni più dettagliate sulla natura dell'errore che saranno utili per procedere alla correzione. Per visualizzarli è sufficiente usare un browser differente da Internet Explorer o, in alternativa, disattivare i messaggi di errore http brevi seguendo questa procedura:
  • Aprite il pannello di configurazione di IE: Strumenti > Opzioni Internet
  • Scegliete la Scheda Avanzate
  • Alla voce Esplorazione disattivare l'opzione Mostra Messaggi di Errore HTTP Brevi
  • Applicate, chiudete il browser e riavviate

Visitando nuovamente la pagina noterete ora un errore che, per la gran parte degli sviluppatori, risulterà decisamente più comprensibile.
E' così possibile leggere in modo inconfondibile le informazioni riguardo la linea che genera l'errore ed altri contenuti utili ad individuare e correggere il problema.

E' buona norma, anche per gli utenti non sviluppatori, disattivare i messaggi di errori generici, per poter leggere gli errori in modo più specifico e soprattutto non confondere, ad esempio, una pagina non trovata (HTTP 404) con un errore di elaborazione. Visualizzare i messaggi completi si rivela utile anche per avvertire tempestivamente il responsabile di un sito web che state visitando, nel caso incontriate un errore, per permettergli di ricorrere alle necessarie correzioni.

Settare un Timeout ad un Socket in Java

Lavorando al progetto PROMIS ho dovuto sviluppare un'applicazione Java che riceve in UDP Multicast alcune informazioni, lanciando un "timeout" se queste non vengono ricevute entro X millisecondi.

Per settare un timeout è sufficiente utilizzare il metodo setSoTimeout(), vediamo come con un piccolo esempio:
MulticastSocket socket = new MulticastSocket(port);
socket.setSoTimeout(timeout);
in = new BufferedReader(new InputStreamReader(new DatagramInputStream(
socket), "UTF8"));
...

try {
String message = in.readLine();
} catch(SocketTimeoutException ex) {
System.err.println("Timeout exception: "+ex);
}

sabato 26 settembre 2009

Aumentare la sicurezza di un sito Joomla

  • Settare in sola lettura il file configuration.php
  • Modificare lo username "admin" con uno più complesso, utilizzando anche una password complessa
  • Mettere in sicurezza PHP, editando il file php.ini con le seguenti righe
register_globals = Off
magic_quotes_gpc = On
allow_url_fopen = Off
disable_functions = system, shell_exec, exec, phpinfo, proc_open
  • Proteggere la cartella "administrator" nel seguente modo
- Se il Web Serve è Apache, creare nella cartella administrator due files
- .htaccess, che dovrà contenere
AuthUserFile /percorsoMiaWebRoot/administrator/.htpasswd AuthGroupFile /dev/null AuthName "Protezione directory administrator di Joomla" AuthType Basic Require valid-user
- .htpassword, che dovrà contenere
nome:password
La password deve essere criptata, per criptarla è possibile utilizzare questa comoda utility online messa a disposizione gratuitamente
- Se il Web Server è IIS, dalla console di amministrazione di IIS selezionare il sito web di interesse, ed al suo interno selezionare la cartella administrator. Cliccarci sopra col tasto destro del mouse e selezionare la voce "Properties", poi selezionare il Tab "Directory Security", click su Edit, deselezionare la casella "Enable anonymous access" abilitata di default e scegliere un tipo di autentica



MySql - come risolvere errcode 17

Utilizzando MySql 5.x su Windows ho dovuto affrontare il misterioso problema dell' errcode 17, a causa del quale andava in crash il server MySql.

L'errore per esteso è il seguente: "can't create/write to file 'C:\WINDOWS\TEMP\#sql_8b8_0.MYD' errcode 17"

Ho scoperto che l'errore è dovuto ad i files temporanei che MySql memorizza sulla cartella Temp di Windows, e si verifica quando MySql cerca di scrivere un file temporaneo già esistente.

Per risolvere tale problema ho assegnato a MySql una sua propria directory temporanea. Ho perciò creato una nuova temp dir (C:\Programmi\MySQL\tmp) e l'ho specificata in my.ini

[mysqld]
...
tmpdir="C:/Programmi/MySQL/tmp/"


Adesso pare non ci sia più tale problema... in bocca al lupo!

sabato 19 settembre 2009

Web Services per Axis2 con Netbeans

Sviluppando Web Services con Netbeans per il web services engine Axis2, ho dovuto affrontare il problema di dover esporre servizi richiedenti parametri complessi (dove i parametri complessi sono classi user defined).

Se i parametri sono una singola istanza di una classe (chiamiamola MyClass), il codice lato server sarà di questo tipo:
public void put(MyClass myclass);
public MyClass get();

Se i parametri sono una lista (o array) di istanze di una classe, il codice lato server sarà di questo tipo:
public void put(MyClass list[]);
public []MyClass get();

In entrambi i casi, una regola da ricordare è quella di aggiungere un costruttore di default
(senza parametri) alla classe MyClass

lunedì 14 settembre 2009

Open source social networking platforms

Ecco due ottime piattaforme open source per il social networking

Elgg è una ottima piattaforma open source di social networking. Offre blogging, networking, community, news utilizzando l'aggregazione di feeds ed inoltre permette il file sharing. Tutto può essere condiviso tra gli utenti con controllo a gli accessi e tutto può essere catalogato con tags.

PHPizabi è una potente piattaforma di social networking. Esistono migliaia di siti creati con PHPizabi, dai più semplici ai più complessi social network. Facile da installare ed usare.

Ecco un link alla pagina dei confronti tra le varie social networking platforms http://en.wikipedia.org/wiki/Comparison_of_social_networking_software

mercoledì 9 settembre 2009

iText - dynamic PDF document generation in Java

iText è una libreria open source Java ideale per gli sviluppatori che desiderano realizzare applicazioni desktop e web arricchendole con la generazione dinamica di documenti PDF. Può essere utile ad esempio nelle seguenti situazioni:
  • A causa del tempo o della dimensione, i documenti PDF non possono essere prodotti manualmente.
  • Il contenuto dei documenti deve essere calcolato o si deve basare su input dell'utente.
  • Il contenuto deve essere customizzato o personalizzato.
  • Il contenuto PDF deve essere servito in un ambiante web.
  • I documenti devono essere creati in modalità "batch process".
iText può essere usato per:
  • Servire PDF ad un browser
  • Generare dinamicamente documents da file XML o databases
  • Aggiungere segnalibri, pagine, numeri, ecc.
  • Suddividere, concatenare, e manipolare pagine PDF
  • Automatizzare il riempimento di form PDF
  • Aggiungere firme digitali ad un file PDF
iText è molto utile per chi ha bisogno di generare documenti read-only e platform independent che contengono testo, liste, tabelle ed immagini; o per chi vuole effettuare specifiche manipolazioni sui documenti PDF

iReport - report designer per report facili e di effetto

iReport è un software open source standalone che offre funzionalità di report designer grafico, e permette di eseguire reports utilizzando tutti i data source supportati dal motore JasperReports. Davvero un ottimo tool, che permette la creazione intuitiva di report, in modo semplice e di effetto...

JasperReport in applicazioni Java

JasperReports è una libreria open source Java per il reporting che può stampare a schermo, su una stampante o su file PDF, HTML, Microsoft Excel, RTF, ODT, Comma-separated file e XML.
Può essere utilizzato in applicazioni Java, inclusi Java EE o Web applications, per generare contenuto dinamico. Legge le sue istruzioni da un file XML o .jasper

Vediamo un semplice esempio di codice Java per la visualizzazione di un report
try {
String reportFile = "path_to_report.jrxml";
JasperDesign jasperDesign = JRXmlLoader.load(reportFile);
JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);

Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection jdbcConnection = DriverManager.getConnection("jdbc:mysql://[server]:[port]/[db]", "user", "password");

/*//Passaggio parametri da passare al jasper.
Map parameters = new HashMap();
parameters.put("param1", new Integer(1));*/

JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, null, jdbcConnection);
JasperViewer.viewReport(jasperPrint);

jdbcConnection.close();

} catch (Exception ex) {
ex.printStackTrace();
}

martedì 8 settembre 2009

Record count di un ResultSet in Java

Alcune volte può tornare utile poter contare i record di un ResultSet. Vediamo come farlo in Java...

- Mediante COUNT(*) di SQL

Statement s = conn.createStatement();
ResultSet r = s.executeQuery("SELECT COUNT(*) FROM( " + miaQuery + " )AS a");
r.next();
int count = r.getInt(1) ;
r.close() ;
System.out.println("MyTable has " + count + " row(s).");
- Ottenedo il numero di riga dell'ultimo record

Statement s = conn.createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
ResultSet r = s.executeQuery(miaQuery);
r.last();
int count = r.getRow();
r.beforeFirst();
Quest'ultimo approccio dovrebbe essere quello più efficiente, in quanto non necessita di rieseguire la query due volte come nel primo...

Combobox con Joomla

Joomla! è un software open source di content management (CMS) per siti web, realizzato in PHP. È pubblicato con licenza open source GNU GPL2, e con i suoi numerosissimi template e moduli offre innumerevoli possibilità di sviluppo...

Vediamo come realizzare un Combobox in Joomla.
Per farlo è sufficiente modificare il template che si desidera utilizzare aggiungendo il seguente codice PHP:
$query = "SELECT id, nome FROM mytable order by id desc ";
$objD = &JFactory::getDBO();
$objD->setQuery($query);
$aryReturnedCategories = $objD->loadObjectList('id');

foreach ($aryReturnedCategories as $objCat)
{
$arySelectOptions[] = JHTML::_('select.option', $objCat->nome , $objCat->nome );
}

$lists['nome'] = JHTML::_('select.genericlist', $arySelectOptions , 'nome', 'class="inputbox"', 'value', 'text' , 0 );
echo $lists['nome'];
?>
Nell'esempio vengono inseriti all'interno di un combobox dei dati letti dalla tabella "mytable" di un database. Più precisamente, viene inserito il campo "nome", in ordine decrescente in base al campo "id".

000webhost.com - Ottimo servizio di Hosting gratuito (e non)

Recentemente ho scoperto un ottimo servizio di web hosting gratuito, che utilizzo adesso.
Registrati da qui http://www.000webhost.com/201316.html

Vengono offerti 1500 MB di spazio disco e 100 GB di traffico dati. Non c'è alcun tipo di pubblicità o banner sui contenuti pubblicati nel proprio spazio web. E' ottimo, proprio da provare...

Potete iscrivervi semplicemente cliccando sul banner qui sotto

Free Website Hosting

sabato 5 settembre 2009

Photobox - 50 stampe gratis offerte da questo OTTIMO servizio


Vi invito a scoprire Photobox, leader europeo della foto online con piu di 5 milioni di membri. Potrete immagazzinare, sviluppare e condividere le vostre foto ma anche creare dei prodotti originali come il FotoLibro o il Fotocalendario. Grazie alla mia presentazione potete beneficiare di 50 stampe gratis che ti saranno offerte all'iscrizione. Buona scoperta!
468x60

Cerca su Google

Cerca nel Blog con Google