Dopo diversi tentativi riesco a scoprire come usare i dati meteo dell'Arpa Piemonte forniti da un WebService. Avevo richiesto all'Arpa piemonte dei dati storici per effettuare delle comparazioni con il mio sito del meteo http://mbmeteo.marcoberri.it. Alla richiesta l'Arpa piemonte mi segnala che gli archivi si pagano!!! Allora decido di iniziare ad archiviare i dati della stazione meteo di Vercelli attraverso un piccolo software in java inserito in cron ogni 10 minuti che semplicemente scarica i dati e registra dentro ad un db di MongoDB. Quando avrò raggiunto una buona mole di dati inizierò ad eseguire una comparazione.
Questo è l'esempio di chiamata per ottenere i dati :
http://webgis.arpa.piemonte.it/free/rest/services/climatologia-meteorologia-atmosfera/Misure_Temperatura_tempo_reale/MapServer/find?searchText=vercelli&searchFields=&sr=32632&layers=0&f=pjson
Il piccolo software per eseguire le operazione potete trovarlo sul gitHub.
lunedì 23 dicembre 2013
Dati Meteo Arpa Piemonte + MongoDB
Etichette:
arpa piemonte,
java,
meteo,
WebService
Ubicazione:
13048 Santhià VC, Italia
Arduino + Raspberry PI + Dagu 5 Rover + Node.js
Dopo un lungo periodo di esperimenti e di fatica finalmente sono arrivato alla prima fase del piccolo progetto.
Dai questo video il rover che muove i suoi primi passi in casa... con qualche problema..
L'hw è un mix di arduino per il controllo dei motori edella tilt pan per la Cam, Raspberry che gestisce lo streaming della cam sulla rete, e la parte web con node.js. Mancano alcuni dettagli che sistemerò a giorni.
Tutti i sorgenti, le specifiche e l'hw potete trovarlo sul GitHub
link on GitHub Site
Etichette:
arduino,
Dagu,
nodejs,
RaspberryPI
Ubicazione:
13048 Santhià VC, Italia
mercoledì 4 dicembre 2013
Telnet Starwars Animation
Etichette:
telnet
Ubicazione:
13048 Santhià VC, Italia
domenica 1 dicembre 2013
Raspberry Pi - Dagu 5 - Primi Passi
UPDATE: la gestione hardware è stata demandata ad Arduino.Il Raspberry comanderà arduino. Nel prossimo post altri dettagli.
Proseguono gli esperimenti con il Raspberry PI, preso da una frenesia di acquisti notturni ho comprato questo spettacolare rover con la scheda di controllo per i motori.
Hardware
Per il Raspberry Utilizzo la distribuzione standard presente sul sito, ho tolto X ed aggiunto la java-openjdk per utilizzare appunto java più alcune utility (joe, htop, etc), tutto comodamente utilizzando apt-get install.
La comunicazione avviene tramite wifi applicando una chiavetta al raspberry in modo da mantenerlo autonomo da cavo di rete.
Prima problema.. mi sono accorto che l'uscita digitale GPIO del Rapsberry è a 3.3V invece la scheda di controllo dei motori del dagu funziona su un segnale a 5 volt like Arduino. Quindi devo cercare un convertitore di segnale.. eccolo!!! Tindie converter gpio da 3 a 5v
Proseguono gli esperimenti con il Raspberry PI, preso da una frenesia di acquisti notturni ho comprato questo spettacolare rover con la scheda di controllo per i motori.
Hardware
Per il Raspberry Utilizzo la distribuzione standard presente sul sito, ho tolto X ed aggiunto la java-openjdk per utilizzare appunto java più alcune utility (joe, htop, etc), tutto comodamente utilizzando apt-get install.
La comunicazione avviene tramite wifi applicando una chiavetta al raspberry in modo da mantenerlo autonomo da cavo di rete.
Prima problema.. mi sono accorto che l'uscita digitale GPIO del Rapsberry è a 3.3V invece la scheda di controllo dei motori del dagu funziona su un segnale a 5 volt like Arduino. Quindi devo cercare un convertitore di segnale.. eccolo!!! Tindie converter gpio da 3 a 5v
Primi test.
Dopo vari esperimenti e ricerche trovo questa schedina che converte tutti i segnali del gpio a 5v. Proprio quello che serve per il controller del rover.
I primi esperimenti veloci dell'hardware sono con Nodejs e una piccola lib node-gpio semplice e veloce.
Materiale
Cavetti
Raspberry pi
ecco il tutto montato e pronto:
Primi esperimenti con python e nodejs... subito salta fuori il problema della programmazione parallela del gpio non molto semplice da risolvere. Se non risolvo la cosa sarà facile che passerò ad Arduino.... ufff....
ecco il tutto montato e pronto:
Primi esperimenti con python e nodejs... subito salta fuori il problema della programmazione parallela del gpio non molto semplice da risolvere. Se non risolvo la cosa sarà facile che passerò ad Arduino.... ufff....
Etichette:
Dagu,
java,
mongodb,
RaspberryPI
Ubicazione:
Santhia' VC, Italia
giovedì 7 novembre 2013
Oracle - Query - Paginated result with row_number()
Query per eseguire un subset delle row su oracle senza intaccare i parametri di orderby
SELECT *
FROM
(SELECT FIELDA,
FIELDB,
FIELDC,
ROW_NUMBER() OVER (ORDER BY FIELDC) R
FROM TABLE_NAME
WHERE FIELDA = 10
)
WHERE R >= 10
AND R <= 15;
SELECT *
FROM
(SELECT FIELDA,
FIELDB,
FIELDC,
ROW_NUMBER() OVER (ORDER BY FIELDC) R
FROM TABLE_NAME
WHERE FIELDA = 10
)
WHERE R >= 10
AND R <= 15;
Ubicazione:
13048 Santhià VC, Italia
lunedì 14 ottobre 2013
MongoDB + Java + Query + java.util.Date() Range
eseguendo questo codice:
final DBObject query = new BasicDBObject("field_1", new BasicDBObject("$exists", false))
.append("field_2", new BasicDBObject("$exists", true))
.append("field_3", new BasicDBObject("$exists", true))
.append("time", new BasicDBObject("$gte", new Date()));
System.out.println("----> query " + query.toString());
vi restituirà:
{ "field_1" : { "$exists" : false} , "field_2" : { "$exists" : true} , "field_3" : { "$exists" : true} , "time" : { "$gte" : { "$date" : "2013-10-09T15:53:18.649Z"}}}
e invece la query viene eseguita correttamente, se voi prende questa query e la lanciate dalla shell di mongo non funziona.... ma in realtà eseguita dai driver di mongo funziona!!!!
Quindi la query visualizzata vi sta mentendo!!!!
scusate sono impazzito 2 ore per capirlo....
final DBObject query = new BasicDBObject("field_1", new BasicDBObject("$exists", false))
.append("field_2", new BasicDBObject("$exists", true))
.append("field_3", new BasicDBObject("$exists", true))
.append("time", new BasicDBObject("$gte", new Date()));
System.out.println("----> query " + query.toString());
vi restituirà:
{ "field_1" : { "$exists" : false} , "field_2" : { "$exists" : true} , "field_3" : { "$exists" : true} , "time" : { "$gte" : { "$date" : "2013-10-09T15:53:18.649Z"}}}
e invece la query viene eseguita correttamente, se voi prende questa query e la lanciate dalla shell di mongo non funziona.... ma in realtà eseguita dai driver di mongo funziona!!!!
Quindi la query visualizzata vi sta mentendo!!!!
scusate sono impazzito 2 ore per capirlo....
martedì 24 settembre 2013
MongoDB + Morphia + Model to Map/Reduce Result with complex id
Alle volte capita di avere una collection risultante da una Map Reduce con un field id complesso.
Dopo varie ricerche ed esperimenti la soluzioni si trova agganciando come id una classe in embed:
la collection risultante della mapReduce:
{
"_id" : {
"time" : "2011-03",
"url" : "www.test.it",
"fast" : "c80"
},
"value" : 12
}
la classe di modello di result:
@Entity(value = "Stats.CountSingleUrl", noClassnameStored = true)
public class MRResult {
@Id
@Embedded
@Indexed(value = IndexDirection.ASC, unique = true, dropDups = true)
private IdObject id;
private String value;
///... GETTER e SETTER
public static class IdObject {
private String time;
private String url;
private String fast;
///... GETTER e SETTER
}
}
Dopo varie ricerche ed esperimenti la soluzioni si trova agganciando come id una classe in embed:
la collection risultante della mapReduce:
{
"_id" : {
"time" : "2011-03",
"url" : "www.test.it",
"fast" : "c80"
},
"value" : 12
}
la classe di modello di result:
@Entity(value = "Stats.CountSingleUrl", noClassnameStored = true)
public class MRResult {
@Id
@Embedded
@Indexed(value = IndexDirection.ASC, unique = true, dropDups = true)
private IdObject id;
private String value;
///... GETTER e SETTER
public static class IdObject {
private String time;
private String url;
private String fast;
///... GETTER e SETTER
}
}
Ubicazione:
13048 Santhià VC, Italia
domenica 25 agosto 2013
Processing.org - Arkanoid
Ecco il piccolo progettino realizzato per il corso Creative Programming for Digital Media & Mobile Apps basato su Processing.org. Un prototipo clone di Arkanoid ecco i sorgenti
Etichette:
processing,
programming
Ubicazione:
13048 Santhià VC, Italia
martedì 23 luglio 2013
Oracle + Procedure + Tomcat + Connection Pool + Ibatis
Utilizzando il connection pool di tomcat via app attrraverso ibatis/mybatis alcune chiamate a Store Procedure Oracle generavano errore
Caused by: java.lang.RuntimeException: unexpected invocation exception: unexpected invocation exception: null at oracle.ucp.jdbc.proxy.PreparedStatementProxyFactory.invoke(PreparedStatementProxyFactory.java:138) at oracle.ucp.jdbc.proxy.CallableStatementProxyFactory.invoke(CallableStatementProxyFactory.java:101) at $Proxy17.getResultSet(Unknown Source) at com.ibatis.sqlmap.engine.execution.SqlExecutor.getFirstResultSet(SqlExecutor.java:337) at com.ibatis.sqlmap.engine.execution.SqlExecutor.handleMultipleResults(SqlExecutor.java:299) at com.ibatis.sqlmap.engine.execution.SqlExecutor.executeQueryProcedure(SqlExecutor.java:283) at com.ibatis.sqlmap.engine.mapping.statement.ProcedureStatement.sqlExecuteQuery(ProcedureStatement.java:34) at com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeQueryWithCallback(GeneralStatement.java:173)
La soluzione è semplicemente NON chiamare le procedure con ibatis.callProcedure() ma con ibatis.update()
[via]
Etichette:
Connection Pool,
ibatis,
java,
Oracle,
tomcat
Ubicazione:
Santhia' VC, Italia
venerdì 12 luglio 2013
Certificazioni MongoDB 10gen
Etichette:
10gen,
Certificazione,
mongodb,
MOOC
Ubicazione:
Santhia' VC, Italia
mercoledì 1 maggio 2013
MongoDB Index
Visualizzare gli indici presenti sul db
use test;
db.system.indexes.find();
Visualizzare gli indici presenti sulla colection
db.<collection_name>.getIndexes()
Crea l' indice univoco eliminando le chiavi duplicate
db.accounts.ensureIndex( { username: 1 }, { unique: true, dropDups: true )
Creare un indice su elementi che possono anche non esserci nell'elenco dei documenti
db.addresses.ensureIndex( { "size": 1 }, { unique: true, sparse: true } )
Index Size
db.<collection_name>.indexSize();
Forzare l'uso di uno specifico indice
Elimina l'uso degli indici
db.people.find().hint({$natural:1})
Note:
- l'indice _id per default è sempre univoco anche se non specificato sulla getIndexes()
- L'indice di default viene creato di tipo BTREE
- In caso di utilizzo di query su indice sparse le query default non ritornano i documenti che non posseggono quel field.
Etichette:
mongodb,
performance
Ubicazione:
Santhia' VC, Italia
martedì 23 aprile 2013
MongoDB Shell
Alcune info prese dal corso di Mongo sulla Mongo University
Ritorna la funzionalità:
PRIMARY> db.names.save
function (obj) {
if (obj == null || typeof obj == "undefined") {
throw "can't save a null";
}
if (typeof obj == "number" || typeof obj == "string") {
throw "can't save a number or string";
}
if (typeof obj._id == "undefined") {
obj._id = new ObjectId;
return this.insert(obj);
} else {
return this.update({_id:obj._id}, obj, true);
}
}
Uso di variabili assegnate:
> db.names.save({name:"furetto"});
> db.names.find();
{ "_id" : ObjectId("515ea7d69f97aede503daa70"), "name" : "furetto" }
> var f = db.names.findOne();
> f;
{ "_id" : ObjectId("515ea7d69f97aede503daa70"), "name" : "furetto" }
> f.name2 = "pippo";
pippo
> f;
{
"_id" : ObjectId("515ea7d69f97aede503daa70"),
"name" : "furetto",
"name2" : "pippo"
}
> db.names.save(f);
> db.names.find();
{ "_id" : ObjectId("515ea7d69f97aede503daa70"), "name" : "furetto", "name2" : "pippo" }
Dati Testi con Javascript:
> for(i=0;i<1000;i++){db.scores.insert({"score":i})};
Escludere _id dalle query:
> db.names.find({"name2":"pippo"},{"_id:" 0, "name2":1});
{ "name2" : "pippo" }
Query tra estremi anche di caratteri:
>db.names.find({"name2":{$gte : "p", $lte:"z"}})
Query per tipologia di campo (per le tipologie di field vedi specifiche json):
> db.names.find({"name2": {$type : 2})
>db.names.find({"name2":{$gte : "p", $lte:"z"}})
Query per tipologia di campo (per le tipologie di field vedi specifiche json):
> db.names.find({"name2": {$type : 2})
martedì 19 marzo 2013
Raspberry Pi - configurare - NetGear 150N - RTL8188CUS
Preso il Rapsberry PI direttamente da RS. Chiavetta USB WI-FI - NetGear150N.
Configurato in dhcp sulla mia rete interna.
Inserire la chiavetta nel Raspberry,
lsusb e vedete se la chiavetta viene vista dal sistema
NetGear, Inc. WNA1000M 802.11bgn [Realtek RTL8188CUS]
le configurazioni di
/etc/network/interfaces
auto lo
iface lo inet loopback
iface eth0 inet dhcp
allow-hotplug wlan0
iface wlan0 inet dhcp
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
il file wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
ssid="xxxxx"
proto=RSN
key_mgmt=WPA-PSK
pairwise=CCMP TKIP
group=CCMP TKIP
psk="xxxxxxxxx"
}
riavviare e togliere il cavo di rete.
[via omer.me ]
Etichette:
linux,
RaspberryPI
Ubicazione:
Santhia' VC, Italia
sabato 2 marzo 2013
MongoDB - Rename Database
Non è possibile rinominare un database di mongo. Il metodo possibile è copiare il db e poi eliminare quello vecchio.
db.copyDabatase("original","newdb","localhost");
use original;
db.dropDatabase();
se abbiamo db molto grosso dobbiamo tenere conto della necessità di parecchio spazio su disco per eseguire l'operazione.
db.copyDabatase("original","newdb","localhost");
use original;
db.dropDatabase();
se abbiamo db molto grosso dobbiamo tenere conto della necessità di parecchio spazio su disco per eseguire l'operazione.
Etichette:
mongodb,
performance
Ubicazione:
Santhia' VC, Italia
Iscriviti a:
Post (Atom)