venerdì 29 aprile 2011

OrientDB - primi passi di Embedding in java - #1

Sono sempre alla ricerca di DB in java da Embeddare in modo da provarli più rapidamente su NetBeans.

Dopo avere scaricato le lib della RC1 dal sito, prendo confidenza con lo strumento con qualche articolo su  RecordID e i Cluster

includo le lib nel mio progetto ed inizio a capire dalla documentazione come creare e gestire un db.




import com.orientechnologies.orient.core.db.document.ODatabaseDocumentTx;
import com.orientechnologies.orient.core.metadata.security.OUser;
import com.orientechnologies.orient.core.record.impl.ODocument;
import com.orientechnologies.orient.core.sql.query.OSQLSynchQuery;
import com.orientechnologies.orient.server.OServer;
import com.orientechnologies.orient.server.OServerMain;
import java.io.File;

public class Main {

  public static void main(String[] args) {

    try {

          OServer server = OServerMain.create();
          server.startup(new File("/home/marco/file/conf.xml"));
          ODatabaseDocumentTx db = new ODatabaseDocumentTx("local:/home/marco/db").create();
          server.shutdown();
    } catch (Exception ex) {
            System.out.println("ex:" + ex.getMessage());
    }

  }
}




il file conf.xml è questo:


<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<orient-server>
<network>
<protocols>
    <protocol name="binary" implementation="com.orientechnologies.orient.server.network.protocol.binary.ONetworkProtocolBinary"/>
    <protocol name="http" implementation="com.orientechnologies.orient.server.network.protocol.http.ONetworkProtocolHttpDb"/>
    </protocols>
    <listeners>
    <listener ip-address="0.0.0.0" port-range="2424-2430" protocol="binary"/>
    <listener ip-address="0.0.0.0" port-range="2480-2490" protocol="http"/>
    </listeners>
  </network>
    <users>
    <user name="root" password="test" resources="*"/>
    </users>
    <properties>
    <entry name="orientdb.www.path" value="/home/marco/Scrivania/orientdb/www/"/>
    <entry name="orientdb.config.file" value="/home/marco/Scrivania/orientdb/file/orientdb-server-config.xml"/>
    <entry name="server.cache.staticResources" value="false"/>
    <entry name="log.console.level" value="info"/>
<entry name="log.file.level" value="fine"/>
    </properties>
</orient-server>



a questo punto il db è creato per accederci bisogna utilizzare questa connessione:

ODatabaseDocumentTx db = new ODatabaseDocumentTx("local:/home/marco/db").open("admin", "admin");


di default viene creato l'utente admin admin per l'accesso del db in locale.


con questa funzionalità è possibile vedere quali cluster sono presenti, gli elementi contenuti e info sull'utente in uso sul nostro nuovo db:

System.out.println("closed:" + db.isClosed());
OUser user = db.getUser();
System.out.println("user:" + user.getName());
System.out.println("password:" + user.getPassword());

for (String s : db.getClusterNames()) {
           System.out.println("cluster: " + s + " - " + db.countClusterElements(s));

}




Salviamo qualcosa


          try {
db.begin();

ODocument persona = new ODocument(db, "Persona");
persona.field("nome", "marco");
persona.field("cognome", "bianchi");
persona.save();

persona = new ODocument(db, "Persona");
persona.field("nome", "carlo");
persona.field("cognome", "rossi");
persona.save();

db.commit();
} catch (Exception e) {
System.out.println("ex:" + e.getMessage());
db.rollback();
} finally {
db.close();
}



Eseguiamo la query ed estraiamo i valori appena scritti


List persone = db.query(new OSQLSynchQuery("select from Persona"));

for (ODocument persona : persone) {
System.out.println( persona.field("nome") + " " +  persona.field("cognome"));
}

non male vero?

se rieseguite il codice per elencare i cluster vedrete:

Persona : 2


E' possibili correlare anche gli object in questo modo inserendo documenti in documenti:




try {
db.begin();

ODocument persona = new ODocument(db, "Persona");
persona.field("nome", "marco");
persona.field("cognome", "bianchi");

ODocument auto = new ODocument(db, "Auto");
auto.field("marco", "seat ibiza");
auto.field("cilindrata", "1444");
persona.field("auto",auto);


persona.save();

persona = new ODocument(db, "Persona");
persona.field("nome", "carlo");
persona.field("cognome", "rossi");

auto = new ODocument(db, "Auto");
auto.field("marco", "fiat punto");
auto.field("cilindrata", "1245");
persona.field("auto",auto);

persona.save();

db.commit();
} catch (Exception e) {
System.out.println("ex:" + e.getMessage());
db.rollback();
} finally {
db.close();
}





e ancora più complesso inserendo una lista di valori in un field sotto forma di List:




try {
db.begin();

ODocument persona = new ODocument(db, "Persona");
persona.field("nome", "marco");
persona.field("cognome", "bianchi");

ArrayList mezzi_list = new ArrayList();

ODocument auto = new ODocument(db, "Auto");
auto.field("marco", "seat ibiza");
auto.field("cilindrata", "1444");

mezzi_list.add(auto);

auto = new ODocument(db, "Auto");
auto.field("marco", "fiat punto");
auto.field("cilindrata", "1245");

mezzi_list.add(auto);

persona.field("mezzi",mezzi_list);

persona.save();

db.commit();
} catch (Exception e) {
System.out.println("ex:" + e.getMessage());
db.rollback();
} finally {
db.close();
}




mercoledì 27 aprile 2011

java.lang.OutOfMemoryError: Java heap space


Sempre con il mio programma ciccioso arriva l'errore:

 "Exception in thread "main" java.lang.OutOfMemoryError: Java heap space" 

quindi cambio le impostazione del heap space

java -Xms<initial heap size> -Xmx<maximum heap size>

tipo:
java -Xms512m -Xmx512m

default:
java -Xms32m -Xmx128m



java.lang.OutOfMemoryError: GC overhead limit exceeded

facendo girare una app in java molto pesante mi appare il seguente errore causa da un sovradosaggio del garbage collection:


java.lang.OutOfMemoryError: GC overhead limit exceeded




per evitare basta aggiungere l'opzione -XX:-UseGCOverheadLimit alla riga di esecuzione del nostro .jar in modo da inibire il controllo del overhead del GC.

La spiegazione qui





domenica 24 aprile 2011

MBFastUrl - nuova beta - Qrcode e altro

Ultime modifiche al mio piccolo progettino MBFastUrl:


    - gestione e statistiche dei file del qrcode
    - fix del problema degli url con parametri nella pagina di home di chiamata
    - ottimizzazione della lettura del file conf.xml
    - creazione di altre classi di conf
    - integrazione del qrcode di google
    - cron.job - procedura automatica per la ricenerazione dei qrcode partendo dall'archivio con relative conf
    - cronjob.backupdb - creazione di uno zip per i file di backup



venerdì 22 aprile 2011

Android - GO Launcher EX

Questo Launcher per Android è un portento! attualmente mi trovo molto bene sul Hero che non è sicuramente tra i terminali più moderni al giorno d'oggi.

le home







App Draw (con cartelle)



task manager


storico




le app/widget che uso per la home sono Handcent SMS, i Beautiful Widgets, Android Booster



sul web

giovedì 21 aprile 2011

linux - Unrar file multipli

file-part1.rar
file-part2.rar
file-part3.rar


find -type f -name '*.rar' -exec unrar x {} \;

[via basic-linux.bauani.org]

Prestashop 1.4 - Modulo pagamento per Banca Sella - PrestaGestPay


Ultima versione del modulo per Banca Sella disponibile sul sito il modulo è funzionante e presente sul questo sito.




fiero di aver contribuito! :)

mercoledì 20 aprile 2011

Prestashop 1.4 - Modulo Pagamento in contrassegno

Il modulo del pagamento in contrassegno non era presente in Prestashop, ovvero il modulo dove si possa pagare la merce alla consegna con l'aggiunta della spesa del contrassegno (per ora è pensato Italia to Italia).

Eccolo realizzato per la comunità





dalle configurazione è possibile definire a cose viene applicata la tassa, in questo caso si seleziona solamente il totale delle spese di spedizione, se avete richieste chiedete pure. (a me serviva fatto così :) )

liberamente scaricabile da qui

venerdì 15 aprile 2011

MBFastUrl - nuova beta - modifiche minori

Le modifiche della settimana:



    - tolti gli header inutili
    - nuova home page
    - eliminati alcuni log di debug eccessivi
    - ottimizzazione delle configurazioni
    - statistiche per il referer con relativa tabella /stats/referer e cron.job
    - ottimizzazione configurazioni
    - ottimizzazione delle conf, con creazione di classi
    - login per le statistiche con relativa tabella di utenza ancora da ultimare
    - inizio implementazione mail per vari usi.
    - altre modifiche al login

    - per privacy commentato il blocco dell'ip

lunedì 11 aprile 2011

Prestashop 1.4 - problemi paginazione/ordinamento sui best-sales

Nella estrazione dei Best Sales ho notato il problema del non funzionamento della paginazione e dell’ordinamento, penso che chi guarda questa sezione vorrebbe vedere l’elenco dei prodotti più venduti ordinati appunto da quelli più venduti!!

questo file è da inserire nella cartella /overide/controllers/BestSalesController.php


tra le altre cose ho scoperto che è possibile usare la cartella /overide/ per iserire tutte le classi e i controller che vanno sovrascritti!


articolo postato anche qui


venerdì 8 aprile 2011

MBFastUrl - nuova beta - estrazione degli user agent

Una nuova beta di MBFastUrl è pronta.

le novità:

  • elenco distinto di User Agent 
  • Visualizzazione log dell'app e del cron
  • Bug Fix
aggiornata anche la documentazione.


Prestashop 1.4 - problemi sul calcolo dei voucher

Usando Prestashop mi sono accorto che esiste un problema sul calcolo dei voucher, infatti gli sconti vengono sempre calcolati sul totale ordine con iva e spese di spedizione quando il cliente logicamente vuole il calcolo sulla sommatoria di soli tutti i prodotti iva esclusa. Per sistemare questa problematica ho dovuto eseguire una patch brutale del codice dei File Cart.php, Discount.php e naturalmente la generazione del PDF.php

per il file Discount.php bisogna modificare il seguente e calcolo

foreach ($products AS $product)
if (count($categories) AND Product::idIsOnCategoryId($product['id_product'], $categories))
$totalAmount += $useTax ? $product['total_wt'] : $product['total'];


con

foreach ($products AS $product)
if (count($categories) AND Product::idIsOnCategoryId($product['id_product'], $categories))
$totalAmount += $product['total'];
//$totalAmount += $useTax ? $product['total_wt'] : $product['total'];


qui trovate la funzione da sostituire nel file Cart.php

per il pdf lascio ad ognuno la modifiche che servono.

questo post è stato anche inserito qui

se avete bisogno di aiuto scrivetemi.

lunedì 4 aprile 2011

MBFastUrl - nuova beta - tentativo con hostip.info

Uscita una nuova beta disponibile a questo indirizzo, ho tentato di integrare Hostip.info per analizzare la provenienza dell'ip, la procedura prevede lo scaricamento dei file del dbe l'inserimento in un file di sqllite.. anche se alla conclcusione del tutto abbiamo un db di 1.8 gb... devo ancora capire se realmente questa cosa è utile o meno..