468x60

mercoledì 30 dicembre 2009

DialogBox di Conferma con Javascript

Un box di conferma è utilizzato quando è necessario ottenere una risposta di tipo SI/NO dall'utente. Con Javascript è possibile ottenere questo tipo di risposta con la funzione confirm(), nel seguente modo:

<script type="text/javascript">

var answer = confirm ("Sei sicuro?")

if (answer)

alert ("Si sono sicuro")

else

alert ("Non sono sicuro")


</script>

martedì 29 dicembre 2009

JSP e AJAX

Esempio di codice per interazione Client-Server utilizzando JSP e AJAX:

//ajaxTest.html
<html><body><script type="text/javascript">function ajaxFunction()
{var xmlHttp;
try
{ // Firefox, Opera 8.0+, Safari xmlHttp=new XMLHttpRequest(); }
catch (e)
{ // Internet Explorer try
{ xmlHttp=new ActiveXObject("Msxml2.XMLHTTP"); }
catch (e)
{ try
{ xmlHttp=new ActiveXObject("Microsoft.XMLHTTP"); }
catch (e)
{ alert("Your browser does not support AJAX!"); return false; } } }
xmlHttp.onreadystatechange=function()
{
if(xmlHttp.readyState==4)
{
document.myForm.time.value=xmlHttp.responseText;
}
}
xmlHttp.open("GET","time.jsp",true);
xmlHttp.send(null); }</script><form name="myForm">
Name: <input type="text"
onkeyup="ajaxFunction();" name="username" />
Time: <input type="text" name="time" />
</form></body>
</html>

//time.jsp
<%
// This scriptlet declares and initializes "date"
java.util.Date date = new java.util.Date();
%>
<%=date%>

sabato 26 dicembre 2009

Wikitude - la realtà aumentata di Wikipedia

Anche Wikipedia si lancia nel campo della realtà aumentata con la sua applicazione Wikitude, disponibile da ieri in iTunes, su App Store. L’applicazione, per adesso solo in inglese e tedesco, mostra, a secondo dei monumenti o luoghi inquadrati, le informazioni relative ed in più anche le info sulle vicinanze e sui POI (punti di interesse). Ogni punto di interesse contiene un piccolo sommario di informazioni e un radar in basso a destra mostra la direzione e gli altri punti di interesse vicini. Wikipedia stessa però dice che ancora non ha la copertura di tutto il mondo per cui bisogna provare, dato che l’applicazione è gratuita. Si capisce che Wikitude funziona solo con l’iPhone 3GS e il sistema operativo iPhone OS 3.1.

mercoledì 23 dicembre 2009

La realtà aumentata

Cos'è
La realtà aumentata (in inglese augmented reality, abbreviato AR) è la sovrapposizione di livelli informativi ( elementi virtuali e multimediali, dati geolocalizzati etc) ad un flusso video che riprende la realtà di tutti i giorni. Gli elementi che "aumentano" la realtà possono essere visualizzati attraverso un device mobile, come un telefonino di ultima generazione, (es. l'iPhone 3GS o un telefono Android) o con l'uso di un pc dotato di webcam. Il sovrapporsi di elementii reali e virtuali crea una "Mixed Reality".

Tipologie di Realtà Aumentata
- La Realtà Aumentata su piattaforma mobile: Il telefonino o smartphone di ultima generazione deve essere dotato necessariamente di Gps per il posizionamento, di magnetometro (bussola) e deve poter permettere la visualizzazione di un flusso video in tempo reale, oltre che di un collegamento internet per ricevere i dati online. Il telefonino inquadra in tempo reale la realtà , alla quale vengono sovrapposti i livelli di contenuto, da dati da PDI Punti di Interesse geolocalizzati ad elementi 3d.

- La Realtà Aumentata su desktop computer è basata su l'uso di markers, o ARtags, dei disegni stilizzati in bianco e nero che vengono mostrati alla webcam, vengono riconosciuti dal pc, ed ai quali vengono sovrapposti in tempo reale i contenuti multimediali: video, audio, oggetti 3d etc. Normalmente le applicazioni di Realtà aumentata sono basati su tecnologia Adobe Flash e quindi fruibili da un qualsiasi browser Internet standard. Anche definita Augmented Advertising è esplosa nel 2009 per numerose campagne di comunicazione da da corporate brands come Toyota Lego, Mini, Kellogs, General Electrics, cantanti come Eminem Johm Mayer o riviste come Colors o Esquire Magazine.

Applicazioni di Realtà Aumentata
Già usata in ambiti molto specifici come nell'ambito militare e medicale o nella ricerca accademica, nel 2009 grazie al miglioramento della tecnologia la realtà aumentata è arrivata al grande pubblico sia come campagne di comunicazione augmented advertising pubblicate sui giornali o sulla rete, sia attraverso un numero sempre crescente di applicazioni per telefonini, in particolare per iPhone. È oggi infatti possibile con la realtà aumentata trovare informazioni rispetto al luogo in cui siamo - alberghi bar ristoranti, stazioni della metro etc - ma anche visualizzare e foto dai social network come Flickr o voci Wikipedia sovrapposte alla Realtà; trovare i Twitters vicino a noi; ritrovare la macchina parcheggiata; trovare le stazioni della metro più vicine; giocare a catturare fantasmi e fate invisibili usando una intera città come campo di gioco; taggare luoghi… inserire dei messaggini in Realtà Aumentata in un luogo specifico come fanno già i teenager giapponesi per incontrarsi...dei graffiti invisibili se non attravero il telefonino.

Alcuni links a bellissimi demo:

martedì 22 dicembre 2009

Scaricare files dal web con Java

Per scaricare files dal web con Java è sufficiente utilizzare un codice del tipo:
int size = 1024;
OutputStream os = null;
URLConnection URLConn = null;
InputStream is = null;
try {
URL fileUrl;
byte[] buf;
int ByteRead;
fileUrl = new URL(url);
os = new BufferedOutputStream(new FileOutputStream(dirPath + "\\" + filename));
URLConn = fileUrl.openConnection();
is = URLConn.getInputStream();
buf = new byte[size];
while ((ByteRead = is.read(buf)) != -1) {
os.write(buf, 0, ByteRead);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
is.close();
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}

ProgressBar e Tasks con Netbeans

Quando si crea una Java Desktop Application con Netbeans, vengono automaticamente generati il codice ed i componenti per l'utilizzo di una JProgressBar, di uno StatusPanel e di una AnimationLabel:

// status bar initialization - message timeout, idle icon and busy animation, etc
ResourceMap resourceMap = getResourceMap();
int messageTimeout = resourceMap.getInteger("StatusBar.messageTimeout");
messageTimer = new Timer(messageTimeout, new ActionListener() {

public void actionPerformed(ActionEvent e) {
statusMessageLabel.setText("");
}
});
messageTimer.setRepeats(false);
int busyAnimationRate = resourceMap.getInteger("StatusBar.busyAnimationRate");
for (int i = 0; i <>
busyIcons[i] = resourceMap.getIcon("StatusBar.busyIcons[" + i + "]");
}
busyIconTimer = new Timer(busyAnimationRate, new ActionListener() {

public void actionPerformed(ActionEvent e) {
busyIconIndex = (busyIconIndex + 1) % busyIcons.length;
statusAnimationLabel.setIcon(busyIcons[busyIconIndex]);
}
});
idleIcon = resourceMap.getIcon("StatusBar.idleIcon");
statusAnimationLabel.setIcon(idleIcon);
progressBar.setVisible(false);

// connecting action tasks to status bar via TaskMonitor
taskMonitor = new TaskMonitor(getApplication().getContext());
taskMonitor.addPropertyChangeListener(new java.beans.PropertyChangeListener() {

public void propertyChange(java.beans.PropertyChangeEvent evt) {
String propertyName = evt.getPropertyName();
if ("started".equals(propertyName)) {
if (!busyIconTimer.isRunning()) {
statusAnimationLabel.setIcon(busyIcons[0]);
busyIconIndex = 0;
busyIconTimer.start();
}
progressBar.setVisible(true);
progressBar.setIndeterminate(true);
} else if ("done".equals(propertyName)) {
busyIconTimer.stop();
statusAnimationLabel.setIcon(idleIcon);
progressBar.setVisible(false);
progressBar.setValue(0);
} else if ("message".equals(propertyName)) {
String text = (String) (evt.getNewValue());
statusMessageLabel.setText((text == null) ? "" : text);
messageTimer.restart();
} else if ("progress".equals(propertyName)) {
int value = (Integer) (evt.getNewValue());
progressBar.setVisible(true);
progressBar.setIndeterminate(false);
progressBar.setValue(value);
}
}
});

Se si desidera agganciare l'esecuzione di un proprio codice ai suddetti componenti, basta creare una classe che estenda la classe Task ed esegua in background il codice desiderato, nel seguente modo:

@Action
public Task avviaTask() {
return new MyTask(getApplication());
}

private class MyTask extends Task {

estrazioneTask(org.jdesktop.application.Application app) {
super(app);
}

@SuppressWarnings("unchecked")
@Override
protected Void doInBackground() {
setMessage("Working...");
//il codice va inserito qui

return null;
}

@Override
protected void finished() {
setMessage("Done.");
}
}

JFileChooser per selezionare directory e files

La classe java JFileChooser può essere utilizzata per navigare nel filesystem e selezionare i files, ma anche per selezionare una directory. Per farlo possiamo impostare la proprietà FileSelectionMode con il metodo
filechooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);

lunedì 21 dicembre 2009

Insert dal risultato di una Select in MySQL

Per inserire in una tabella i record risultanti da una Select, bisogna seguire questa sintassi con MySQL:
INSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE]
[INTO] tbl_name [(col_name,...)]
SELECT ...
[ ON DUPLICATE KEY UPDATE col_name=expr, ... ]

giovedì 17 dicembre 2009

ODBC Drivers su Windows x64

Su Windows x64 per visualizzare i drivers ODBC a 32 bit bisogna utilizzare odbcad32.exe, che si trova su %WINDIR%\SYSWOW64. Con questo programma verranno elencati tutti i drivers a 32 bit, altrimenti non visibili...

mercoledì 16 dicembre 2009

Stop Tomcat da Netbeans

Sviluppando applicazioni web con Netbeans + Tomcat mi è capitato di ricevere un errore durante lo shutdown di Tomcat, con conseguente mancato shutdown. L'errore è il seguente:
StandardServer.await: Invalid command 'SHUTD' received
Ho risolto il problema modificando le impostazioni del Server Apache Tomcat nella sezione Services di Netbeans, in particolare impostando:

Server Port: 8080
Shutdown Port: 8005

Tali impostazioni riflettono la configurazione presente sul file server.xml di Tomcat.

Inoltre, verificare che la porta 8005 sia libera e che il firewall e/o l'antivirus non la blocchino.

lunedì 14 dicembre 2009

Resize di un disco virtuale con VMware Player

Lavorando con le macchine virtuali capita spesso di voler incrementare le dimensioni del disco virtuale. Dopo aver fatto un pò di googleling... ecco a voi una semplice soluzione, testata e funzionante in pochi minuti, utilizzando solo software gratuito:
  1. Utilizzare VMware Player 3.0 o superiore
  2. Editare la configurazione della MV da VMware Player, selezionando il disco da espandere e scegliendo Expand dal menu Utility. Digitare poi la dimensione desiderata
  3. Scaricare ed installare sulla MV EASEUS Partition Master, un software free per uso personale
  4. Avviare il ridimensionamento della partizione desiderata dall'interfaccia user friendly di EASEUS Partition Master
Buon lavoro!

mercoledì 9 dicembre 2009

Sunbird - MinimizeToTray

Mozilla Sunbird 09 Ita WinXP.png Mozilla Sunbird è un'applicazione open source per la gestione di calendari, agenda, memo, contatti, gestione riunioni (analogamente a Microsoft Outlook, anche se per la posta deve integrarsi con Thunderbird), sviluppata da Mozilla Foundation e da una vasta comunità di contributori esterni. È espandibile con componenti aggiuntivi (estensioni e temi).

Nell'utilizzo di Sunbird potreste trovare molto utile minimizzarlo sulla System Tray. Per farlo potete utilizzare l'addon gratuito MinimizeToTray For FF

sabato 5 dicembre 2009

Apache Tomcat Native library

All'avvio di Apache Tomcat, controllando i messaggi della console, vi sarà capitato di leggere il seguente avviso:
'INFO: The Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path:...'
Questo è dovuto ad una libreria nativa compilata mancante (es. un file DLL su windows) che Tomcat non può trovare. Per maggiori informazioni leggere qui.
Per Windows la soluzione è abbastanza semplice, basta scaricare l'ultima versione della libreria da qui (l'ultima versione nel momento in cui è scritto questo articolo è qui), il file che bisogna scaricare è chiamato tcnative-1.dll. Copiarlo dentro la cartella bin di Tomcat e riavviare Tomcat. Adesso il problema dovrebbe essere risolto...

giovedì 3 dicembre 2009

Ultima parola di una frase in Java/JSP

Esempio applicativo in cui illustriamo come restituire l'ultima parola di una stringa, se presente, in Java/JSP.
word="WHERE";
mystring.substring(mystring.length()-word.length());
Alcune volte capita di dover creare per pagine web dinamiche delle query SQL la cui struttura viene definita "a cascata", a seconda che un campo debba essere o meno considerato all'interno della query. In questi casi è importante costruire la query posizionando in modo opportuno gli operatori logici.

Ad esempio, se dobbiamo considerare due campi di ricerca la nostra query sarà del tipo:
SELECT * FROM mytable WHERE
field1='val1' AND field2='val2'
Ma se dobbiamo considerare SOLO il secondo campo, l'operatore "AND" non dovrà comparire all'interno della query.. In tal caso possiamo utilizzare il suddetto codice Java per verificare che la query termini o meno con la parola "WHERE".
query = "SELECT * FROM mytable WHERE";
//se la frase NON termina con la parola "WHERE"
if(!query.substring(query.length()-5).equals("WHERE"))
query+=" AND";
query+="field2='val2'";

sabato 14 novembre 2009

Web Conferencing Open Source

Recentemente sto testando due ottime piattaforme open source per il Web Conferencing:


- Scheda comparazione di vari software per il web conferencing

lunedì 9 novembre 2009

sh404SEF FREE Download

Chi utilizza Joomla conoscera' l'ottimo SEO tool "sh404SEF", fino a poco tempo fa Open Source, con licenza GPL e di pubblico dominio... Adesso questo componente è disponibile solo a pagamento...

E' possibile scaricare l'ultima versione GPL Open Source da qui sh404SEF FREE Download

Buon utilizzo!

venerdì 6 novembre 2009

Rimozione manuale di un driver della stampante in WindowsXP

Quando si rimuove una stampante dalla cartella Stampanti o da Print Manager, il file del driver della stampante non viene rimosso dal disco rigido. In questo articolo è riportata una procedura utilizzabile se si ritiene che un file di driver della stampante sia danneggiato, o comunque se si desidera rimuoverlo.

In Windows XP è disponibile una funzione con interfaccia utente per l'eliminazione dei driver della stampante, pertanto questa procedura non è più necessaria. Per eliminare i file di driver della stampante in Windows XP, fare clic sul pulsante Start, scegliere Stampanti e fax, quindi scegliere Proprietà server dal menu File. Nella scheda Driver selezionare ed eliminare il file del driver della stampante.

giovedì 5 novembre 2009

Installare una stampante di rete in WindowsXP x64

Avendo dei problemi con l'installazione di una stampante di rete in WindowsXP x64, ho risolto installando manualmente il driver e la stampante nel seguente modo:

Procedura 1 (da prompt)
  1. scaricare il driver dal sito web del produttore
  2. installare il driver dal prompt con il seguente comando: rundll32 printui.dll,PrintUIEntry /id
  3. installare la stampante di rete dal prompt con il seguente comando: rundll32 printui.dll,PrintUIEntry /in /n\\\
Procedura 2 (da interfaccia grafica)
  1. scaricare il driver dal sito web del produttore
  2. per installare la stampante di rete fare click sul pulsante Start, scegliere Stampanti e fax, quindi scegliere Aggiungi stampante, click su avanti, scegliere Stampante di rete, selezionare la stampante a cui connettersi, in seguito quando verrà richiesto di selezionare il driver della stampante fare click su Sfoglia... per scegliere il driver scaricato (oppure, se presente, scegliere la stampante dalla lista delle stampanti)

martedì 3 novembre 2009

Blocco rapido del computer in Windows XP

In Windows XP è disponibile una nuova scelta rapida di Microsoft Natural Keyboard che consente di bloccare il computer. Questa operazione può essere eseguita anche da altre tastiere compatibili in cui siano presenti i tasti LOGO WINDOWS e il tasto MENU SCELTA RAPIDA. Per utilizzare questa scelta rapida da tastiera, premere il tasto LOGO WINDOWS+L.

Everest Home Edition - free system information tool

Everest Home Edition è un ottimo software freeware per il recupero delle informazioni sul sistema, la diagnostica e la misurazione delle prestazioni del PC. Il software è in grado di fornire informazioni accurate sul sistema grazie ad un'analisi a basso livello. Include anche funzionalità di monitoraggio dell'hardware.

lunedì 26 ottobre 2009

Netrenderer - online tool per visualizzare una pagina con tutte le versioni di IE

Netrenderer è un tool online che permette di vedere come sarebbe visualizzata una pagina su tutte le versioni di Internet Explorer. Ecco il link al tool http://ipinfo.info/netrenderer/index.php

Utilissimo quando bisogna sviluppare siti web cross-browser, ovvero compatibili con diversi browsers

venerdì 23 ottobre 2009

OpenDNS - ottimo servizio di DNS e content filtering

OpenDNS è un servizio che offre liberamente i propri DNS. Lo scopo iniziale del servizio era creare un servizio di risoluzione di nomi in indirizzi Internet (DNS) che non sia controllato da governi o enti militari al fine di evitare censura vincoli e controllo sul traffico internet e i suoi contenuti.

Un'altra caratteristica molto interessante di OpenDNS è la possibilità di utilizzarlo per il content filtering. Attraverso un pannello di controllo web-based è possibile configurare il proprio account in modo da creare regole di filtraggio automatiche e/o manuali, permettendo o negando la navigazione di siti web in base al loro contenuto.

Le possibilità d'utilizzo di tale servizio sono innumerevoli, come ad esempio:
  • Parental Control sulla connessione internet di casa
  • Content Filtering su una connessione internet aziendale (utile per limitare l'utilizzo della banda per scopi non lavorativi)
  • Content Filtering su una connessione internet pubblica (scuole, uffici pubblici, ecc.)

lunedì 19 ottobre 2009

Free Project / SVN Hosting


Elenco di alcuni ottimi servizi gratuiti di Project ed SVN Hosting

http://www.projectlocker.com (5 users, 500MB, unlimited projects)
http://www.xp-dev.com (unlimited users, 200MB, 2 private projects, unlimited open source project)
http://unfuddle.com (2 users, 200MB, unlimited repositories, 1 active project)


Non gratuiti

Confronto dei vari servizi

giovedì 15 ottobre 2009

Stringhe e Date con MySQL

MySQL mette a disposizione molte potenti funzioni per l'elaborazione dei dati, tra cui alcune utilissime funzioni per la manipolazione delle stringhe e delle date.

In questo esempio vediamo come convertire una stringa in una data, e come calcolare la differenza di tempo tra due date:
SELECT TIMEDIFF(STR_TO_DATE('20091015132615',"%Y%m%d%H%i%s"),STR_TO_DATE('20091015130759',"%Y%m%d%H%i%s"))

Il cui risultato è il seguente:

20091015132615 viene convertito nella data "2009-10-15 13:26:15"

20091015130759 viene convertito nella data "2009-10-15 13:07:59"

infine TIMEDIFF() restituisce come risultato "00:18:16", in formato Time

FinecoWave - conto gratis per 1 anno e premio a scelta

Fineco ha lanciato una ottima offerta...
Apri subito il conto Fineco con il tuo Codice Wave e ricevi 1 anno di conto gratis e un premio a scelta:
  • carta usa-e-getta MasterCard da 50€
  • 200€ in commissioni per investire
  • 1 anno aggiuntivo di conto gratis
Basta cliccare su questo link per usufruire dell'offerta


UN CONTO, TANTI VANTAGGI
Carta e bancomat insieme gratis
Zero canone con l’accredito dello stipendio
Prelievi Bancomat gratis ovunque in Italia
Utenze, tasse e ricariche gratuite
Versamenti in oltre 2.000 Bancomat
Libretto assegni a domicilio

I SERVIZI CHE VUOI
Semplici e veloci: dimentica lo stress!
Tutti in un conto anche dal telefonino
In autonomia o con un Personal Adviser
Non solo online: oltre 5.000 filiali Unicredit
SMS di sicurezza su bonifici e spese
Corsi trading ed eventi in tutta Italia

PIU' INVESTIMENTI
Trading online su 26 mercati mondiali
Oltre 3.400 fondi a zero commissioni
Azioni, ETF, obbligazioni con un click
Quotazioni, grafici e news in tempo reale
Marginazione con leva fino a 50 volte
Commissioni degressive fino a 2.95€


In ogni caso, per poter usufruire di questa fantastica promozione vi basta utilizzare il codice AA3727562.

L'offerta scade il 6 novembre 2009!

JTable con Horizontal Scroll Bar

Sviluppando applicazioni Java Swing avrete notato che la scroll bar verticale compare di default, mentre non è così per quella orizzontale...

Per visualizzare la scroll bar orizzontale un semplice metodo è disabilitare l'auto resize, utilizzando questo codice:
myTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);

martedì 13 ottobre 2009

JPA Error "Unknown abstract schema type"

Sviluppando applicazioni Java JPA mi è capitato di affrontare il problema di un fastidioso errore di runtime: Unknown abstract schema type. Per esteso
Exception Description: Error compiling the query Unknown abstract schema type

Dopo parecchie ricerche ho scoperto che l'errore viene lanciato quando JPA fallisce nell'allocare la entity class, spesso quando:
  • abbiamo specificato nella query JPA il nome della tabella anzichè il nome della entity class
  • quando JPA è eseguito in modalità standalone, oppure non dentro un Java EE container (come Tomcat), abbiamo dimenticato di scrivere una lista di TUTTE le entity class nel file persistence.xml

lunedì 12 ottobre 2009

JasperViewer - parametro per non chiudere l'intera applicazione

Nel mio articolo JasperReport in applicazioni Java abbiamo visto cos'è JasperReport e come può essere utilizzato in applicazioni Java, mediante un semplice esempio...

Se avete provato ad utilizzare JasperViewer per visualizzare i report avrete notato che chiudendolo viene chiusa e terminata anche l'intera applicazione... Per risolvere questo inconveniente basta passare il parametro "false" al metodo viewReport di JasperViewer, nel seguente modo:
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, null, jdbcConnection);
JasperViewer.viewReport(jasperPrint, false);

Buon utilizzo!

giovedì 8 ottobre 2009

Fatal error: Maximum execution time exceeded

Installando software PHP "corposi" può capitare di riscontrare messaggi di errore del tipo:
Fatal error: Maximum execution time of 60 seconds exceeded
Per risolvere questo problema basta editare il file php.ini aumentando il valore della variabile max_execution_time (portandolo ad esempio a 300)

Encryption tools

Ecco alcuni ottimi software gratuiti per la criptazione di files...

AxCrypt, è un programma open source che permette di cifrare qualsiasi file ricorrendo all’algoritmo Rindajel (AES 128). Semplicissimo da installare ed utilizzare, permette di criptare i files dal file Explorer di Windows semplicemente cliccandoci sopra col tasto destro del mouse.

TrueCrypt, è un programma open source per la criptazione dei dati del proprio hard disk, col quale è possibile creare partizioni criptate e volumi criptati, dentro i quali è possibile archiviare i dati ed utilizzarli come se fossero normali partizioni aggiuntive.

Al seguente link è possibile trovare una lista di software free per la criptazione di files e cartelle


martedì 6 ottobre 2009

FTP shell script per Windows

Molto spesso è comodo poter schedulare delle operazioni pianificate, tra cui anche le operazioni di FTP... Per farlo basta creare uno shell script (un file batch .bat) che esegua i comandi del client FTP di MS DOS.

Ecco una lista dei comandi del client FTP:

Possiamo passare i comandi da far eseguire al client su un file, col seguente comando:
ftp -s:nomefile indirizzo_server_ftp

Buon utilizzo!

sabato 3 ottobre 2009

Access denied for user 'root'@'localhost' in MySQL

Effettuando l'upgrade di alcuni MySql Server ho riscontrato che la procedura guidata di configurazione dell'istanza non andava a buon fine, perchè non riusciva ad applicare le Security Settings...
Ho notato che il problema era dovuto ad una password scorretta che il server MySql teneva conservata... infatti tentando di accedere al database veniva mostrato il seguente messaggio di errore:

Access denied for user 'root'@'localhost' (using password: YES)

Per risolvere tale problema è sufficiente resettare la password dell'utente root, nel seguente modo:

- arrestare il processo mysqld

- eseguire mysqld --skip-grant-tables

- aprire una nuova shell ed entrare in MySQL

- lanciare il seguente comando: update mysql.user set password=password('miapasswordqui') where user='root';

- arrestare mysqld e riavviarlo normalmente

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!

lunedì 31 agosto 2009

Correzione differenziale GPS wireless


Lavorando al progetto di ricerca PROMIS ho dovuto realizzare un sistema per la correzione differenziale delle posizioni GPS.
Il Global Positioning System (GPS) permette, mediante la ricezione di informazioni da parte di satelliti in orbita a bassa quota, di determinare la propria posizione sul globo terrestre. La presenza dell'atmosfera determina una componente di variazione aleatoria del ritardo di propagazione dei segnali GPS, e pertanto la misura di posizione terrestre è di accuratezza ridotta, e nota solo a meno di un errore di decine di metri, o più, in caso di condizioni atmosferiche perturbate od infelice posizionamento dei satelliti.
Nel terminal del Porto di Gioia Tauro è presente una stazione differenziale (detta Base Station) la cui posizione è ben nota, e che riceve anch'essa il segnale GPS. Presso la Base Station, viene quindi calcolato un segnale di errore di posizione, che è lo stesso di quello di tutti i ricevitori GPS vicini alla Base Station stessa (le condizioni atmosferiche sono infatti le stesse).
Il segnale di correzione differenziale (DGPS) viene tradizionalmente trasmesso via porta seriale (o via radio), ed una volta integrato con l'informazione GSP, comporta un aumento dell'accuratezza della misura di posizione, il cui errore si riduce a pochi metri.
Nell'ambito del progetto PROMIS ho realizzato un server DGPS che trasmette in multicast le correzioni differenziali a tutti i client in ascolto, ed un client che da un lato riceve le correzioni differenziali trasmesse, e dall'altro comunica il segnale di correzione al ricevitore GPS, e ne visualizza le informazioni di posizione corrette.


venerdì 28 agosto 2009

Sincronizzazione giornaliera dell’ora di Windows XP

Forse saprete già che esistono programmi freeware che promettono di mantenere l’orologio del vostro pc sincronizzato con l’ora atomica mondiale… Sfortunatamente molti di questi programmi free di dubbia provenienza contengono anche dello spyware

Perchè rischiare? Windows XP già dispone di un servizio di aggiornamento automatico dell’ora (W32Time) il quale è predisposto per sincronizzare (di default una volta alla settimana, ma volendo la frequenza si può modificare) l’orario del vostro pc con quello di un server di riferimento (il server di riferimento predefinito è quello di Microsoft).

Potete verificare se questo servizio è attivo sul vostro pc cliccando due volte sull’orologio di sistema nella tray area e selezionando la scheda “Ora Internet“:

orainternet2

Come potete vedere dall’esempio, l’ultima sincronizzazione è stata effettuata alle 13.05 e la prossima è prevista per il giorno successivo alla stessa ora.

Personalmente ho preferito sostituire l’indirizzo del server NTP della Microsoft (NTP sta per Network Time Protocol) con quello dell’Istituto Nazionale di Ricerca Metrologica ntp1.inrim.it

I server NTP dell’ INRIM sono sincronizzati con un orologio atomico a fasci di cesio, il che vi permette di ottenere un’accuratezza estremamente elevata.

Se poi siete talmente maniaci da non tollerare l’aggiornamento automatico settimanale e preferireste invece un aggiornamento giornaliero, questo è possibile modificando una voce del registro di sistema.

La chiave da modificare si trova nel percorso:
HKEY_LOCAL_MACHINE\
\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpClient

Dovete modificare il valore del parametro “SpecialPollInterval” dal valore decimale 604800 (che sono i secondi di una settimana) al valore decimale 86400 (che sono i secondi di un giorno). Volendo potreste aumentare la frequenza degli aggiornamenti, ricordandovi di specificare sempre il valore in secondi e prestando sempre attenzione a specificare che si tratta di un valore decimale e non esadecimale.

specialpoll.jpg

Fatto ciò, per rendere effettive le modifiche, il servizio W32Time deve essere arrestato e riavviato.

Se non avete fretta potete aspettare il prossimo riavvio di Windows altrimenti al prompt dei comandi digitate il seguente comando, quindi premete invio:
net stop w32time && net start w32time

Per ulteriori approfondimenti sul servizio W32Time vi consiglio di visitare questa pagina del supporto tecnico Microsoft.

Interrogare l'NIST (Internet Time Service) utilizzando il Network Time Protocol

Se nelle nostre applicazioni Java abbiamo bisogno di interrogare l'Internet Time Service di un Time Server, possiamo utilizzare il Network Time Protocol (NTP), mediante la libreria open source Apache Commons Net.

Vediamone un esempio di utilizzo:

package test;

import java.net.InetAddress;
import java.util.Date;

import org.apache.commons.net.ntp.NTPUDPClient;
import org.apache.commons.net.ntp.TimeInfo;

public class TimeLookup {

// List of time servers: http://tf.nist.gov/service/time-servers.html
// Do not query time server more than once every 4 seconds
public static final String TIME_SERVER = "time-a.nist.gov";

public static void main(String[] args) throws Exception {
NTPUDPClient timeClient = new NTPUDPClient();
InetAddress inetAddress = InetAddress.getByName(TIME_SERVER);
TimeInfo timeInfo = timeClient.getTime(inetAddress);
long returnTime = timeInfo.getReturnTime();
Date time = new Date(returnTime);
System.out.println("Time from " + TIME_SERVER + ": " + time);
}
}

Sincronizzazione automatica dell'orologio di sistema

Windows

- Windows 95/98/NT
Questi sistemi operativi non implementano un client NTP, che deve essere quindi installato a parte. Un client liberamente scaricabile ed open source è Nettime.

- Windows XP/2000/2003/Vista/2008
Se il computer è membro di un dominio, probabilmente l'orologio verrà sincronizzato automaticamente da un Network Time Server. Altrimenti, l'orologio del computer può essere sincronizzato automaticamente e regolarmente da un server di riferimento ora.
In questa procedura vengono descritte le modalità per sincronizzare l'orologio del computer con un server di riferiemnto ora su Internet. Assicurarsi di essere connessi a Internet.

  1. Fare clic su Pannello di controllo dal menu di avvio, quindi su Data, ora, lingua e opzioni internazionali, quindi fare clic su Modificare data e ora.
  2. Scegliere la scheda Ora Internet. (Tale scheda non è disponibile se il computer è membro di un dominio)
  3. Scegliere Aggiorna.

Da linea di comando è possibile utilizzare questi comandi:

net time /setsntp:ntp1.inrim.it
net stop w32time
net start w32time

Per visualizzare il server ntp corrente digitare:

net time /querysntp

Linux

La soluzione preferita è usare il demone NTP, ntpd, configurando uno o più server NTP di riferimento nel suo file di configurazione /etc/ntpd.conf. In questo modo, oltre ad aggiornare l'orologio di sistema, ntpd ne stima l'errore sistematico, ed è in grado di correggerlo, evitando un andamento irregolare del tempo, e migliorando la precisione quando il computer non è connesso alla rete.

Per sincronizzare manualmente l'orologio di sistema con quello di un server, da console, in modalità root, dare il comando:

ntpdate ntp1.inrim.it

martedì 25 agosto 2009

Caricare immagini (e non solo) da un file JAR

Quando bisogna distribuire le proprie applicazioni torna molto utile impacchettare tutto il necessario in un file JAR. Se utilizzate Netbeans come IDE, per impacchettare nel JAR anche le immagini (o qualsiasi altra cosa) basta che copiate dentro un package i files di interesse. Lanciando poi "Clean and Build" i files si troveranno dentro il JAR creato nella cartella "dist".

Esempio
Vediamo come leggere un'immagine contenuta nel JAR con un semplice esempio:

Image image = toolkit.getImage(myClass.class.getClassLoader().getResource("immagini/immagine.gif"));

Nel codice sopra stiamo leggendo una immagine che si trova dentro il package immagini... semplice no?

lunedì 24 agosto 2009

Launch4j - wrapper Java in eseguibili Windows

Screenshot

Launch4j è un utile tool che permette di creare un file eseguibile nativo Windows completo di icona e splash screen, a partire dall'archivio JAR dell'applicazione. Launch4j non converte l'applicazione in un eseguibile, perchè questo può causare problemi. Semplicemente si pone come wrapper verso l'applicazione Java, ed è quindi comunque necessario che il sistema abbia installata una qualche versione della Java Runtime Environment (JRE). L'eseguibile generato può agire in due modi differenti. Solitamente l'archivio JAR viene totalmente incorporato nell'eseguibile, consentendo così di evitare di distribuirlo assieme all'applicazione. In alternativa, selezionando Don't wrap the jar, launch only, è possibile far si che l'eseguibile mantenga separato il file JAR, occupandosi solamente di eseguirlo invocando la JVM. In quest'ultimo caso è necessario distrubuire il file JAR assieme all'applicazione. E' importante sottolineare che i due approcci sono del tutto equivalenti, in quanto Launch4j non effettua conversioni del codice, ma funge semplicemente da wrapper. Una delle funzionalità più importanti e utili di Launch4j è la capacità di controllare automaticamente la presenza della JRE e la relativa versione, e di avvisare l'utente nel caso sia necessario scaricare un'altra versione della JRE, proponendo il link verso la pagina di download. Per sfruttare questa funzionalità è necessario specificare, nel tab JRE della GUI, la versione minima della JRE affinchè l'applicazione funzioni (es. 1.6.0.12), ed eventualmente anche la versione massima e il criterio di selezione della JRE nel caso sia installato anche il Java Development Kit (JDK). Nella stessa scheda è possibile anche impostare i parametri per l'esecuzione della JVM, quali le dimensioni dello heap e le opzioni della JVM. Nell'eseguibile vengono incorporate anche le informazioni sulla versione, il titolo dell'applicazione, il copyright, ecc... Tutto ciò è impostabile nel tab Version Info. E' anche possibile forzare Windows a consentire una sola esecuzione contemporanea dell'applicazione, impostando il mutex di controllo nel tab Single Instance. Infine una funzionalità simpatica è la possibilità di inserire uno splash screen.
468x60

Cerca su Google

Cerca nel Blog con Google