Not only developing

Novembre 27, 2007

Select * from C:\ ??? Ecco come farlo in Oracle

Archiviato in: Java, Oracle — Tag:, , , , — teox78 @ 3:53 pm

In questi giorni ho iniziato a sviluppare un nuovo processo che ha come database Oracle.

Prima di caricare alcuni file csv,l’utente deve avere la possibilità di vedere il contenuto di alcune directory non sempre visibili dalla macchina dell’utente quindi ho deciso che la soluzione ottimale fosse avere questo elenco all’interno di Oracle, ad esempio tramite una vista che interrogasse direttamente il filesystem. Ecco come fare tutto ciò :

  • CREATE OR REPLACE TYPE StringArray AS TABLE OF VARCHAR2(512);
  • CREATE OR REPLACE AND RESOLVE JAVA SOURCE NAMED "FileHandler" AS
    import java.io.*;
    import java.sql.*;
    import oracle.sql.*;
    import oracle.jdbc.driver.*;
    public class FileHandler {
    public static oracle.sql.ARRAY list(String dirName) throws SQLException {
    Connection conn = null;
    int ret_code;
    String[] files = null;
    File file = new File(dirName);
    if (file.exists()) {
    if (file.isDirectory()) {
    if (file.canRead()) {
    files = file.list();
    }
    }
    }
    try {
    conn = new OracleDriver().defaultConnection();
    ArrayDescriptor x_ad = ArrayDescriptor.createDescriptor(
    "STRINGARRAY", conn);
    ARRAY x_array = new ARRAY(x_ad, conn, files);
    return x_array;
    } catch (SQLException e) {
    ret_code = e.getErrorCode();
    System.err.println(ret_code + e.getMessage());
    conn.close();
    return null;
    } finally {
    closeConnection(conn);
    }
    }private static void closeConnection(Connection connection) {
    if (connection == null) {
    return;
    } else {
    try {
    connection.close();
    } catch (Exception e) {
    System.out.println(e.getMessage());
    }
    connection = null;
    }}
    };
    /
  • CREATE OR REPLACE FUNCTION list (p_path IN VARCHAR2) RETURN StringArray AS LANGUAGE JAVA NAME 'FileHandler.list (java.lang.String) return oracle.sql.ARRAY';
  • EXEC DBMS_JAVA.grant_permission('SCHEMA-NAME', 'java.io.FilePermission', '<<ALL FILES>>', 'read ,write, execute, delete');
    EXEC DBMS_JAVA.grant_permission('SCHEMA-NAME', 'SYS:java.lang.RuntimePermission', 'writeFileDescriptor', '');
    EXEC DBMS_JAVA.grant_permission('SCHEMA-NAME', 'SYS:java.lang.RuntimePermission', 'readFileDescriptor', '');
    GRANT JAVAUSERPRIV TO SCHEMA-NAME;

A questo punto sarà sufficiente fare una query come quella seguente per ottenere tutti i file e directory presenti sul disco C della macchina sulla quale c’è il database.

SELECT * FROM TABLE(LIST('C:\'))

Naturalmente questo è solo un esempio che mostra la strada che ,secondo me, è meglio seguire; si potrebbero creare strutture più complesse che oltre al nome del file restituiscano la dimensione o la data dello stesso.

Novembre 16, 2007

Oracle su Windows ? Attenzione!!

Archiviato in: Oracle, Windows — Tag:, — teox78 @ 3:33 pm

Ieri mattina, arrivo in ufficio e scopro che uno dei database oracle di produzione è giù! Vado nell’alert a vedere se c’è qualche errore e incappo in un
ORA-04030: memoria di processo esaurita nel tentativo di allocare 1483316 byte
La macchina virtuale ha 2.5 Gb di memoria virtuale e ha Windows 2003 Server 32 bit ; il task manager indica che l’occupazione in ram è di soli 2.1 Gb, e poi anche se superasse i 2.5Gb avrebbe ancora tutto lo swap.
Per farla breve, su windows Oracle non crea più processi come fa su uno Unix bensì fa tutto capo al processo oracle.exe che poi al suo interno avrà svariati thread; di conseguenza tutta la memoria allocata fa capo ad un solo processo che , su Windows 2003 server 32 bit , non può superare i 2 Gb di RAM allocata !!! A questo punto sono stato costretto ad abbassare la SGA_MAX_SIZE affinchè la somma di SGA e PGA non superassero i 2Gb.

Quindi, se già sapete di dover creare un database oracle che avrà bisogno di parecchia ram (più di 2 Gb), secondo me, le soluzioni possibili sono :

  • Passare alla versione 64 bit di Windows 2003 Server (ecco le migliorie)
  • Usare un sistema operativo Unix/Linux (scelta da me consigliata)
  • Se si è obbligati ad usare Windows a 32 bit ma il database può essere diviso,allora si possono creare due istanze sulla stessa macchina così i processi oracle diventano 2 e ognuno di loro potrà allocare 2 Gb.

Novembre 14, 2007

Chiave USB wireless ASUS WL-167G : compilazione modulo kernel

Archiviato in: Linux, wireless — Tag:, , , , — teox78 @ 12:14 pm

Ho da poco comprato una scheda di rete wireless USB per il mio portatile, una Asus WL-167G

Inserisco la chiavetta nello slot USB e dopo pochi secondi mi accorgo che la mia openSuse 10.3 appena installata riconosce la scheda; dentro di me penso che sia stato fin troppo semplice e infatti……quando cerco di collegarmi usando KNetworkManager la connessione fallisce :-(

iwconfig restituisce delle informazioni valide per l’interfaccia di rete ma se faccio ifconfig mi accorgo che l’interfaccia è giù; quindi provo

ifconfig wlan0 up che mi restituisce il seguente errore :

SIOCSIFFLAGS: No buffer space available
Quindi vado sul sito del costruttore e scarico i driver per linux; tramite yast installo i sorgenti del kernel , seguo le istruzioni presenti nel readme ma quando arrivo al punto di dover compilare ecco un altro errore :

make -C /lib/modules/2.6.22.12-0.1-default/build SUBDIRS=/home/matteo/download/Linux/rt73/RT73_Linux_STA_Drv1.0.3.6/Module modules
make[1]: Entering directory `/usr/src/linux-2.6.22.12-0.1-obj/i386/default'
make -C ../../../linux-2.6.22.12-0.1 O=../linux-2.6.22.12-0.1-obj/i386/default modules
CC [M] /home/matteo/download/Linux/rt73/RT73_Linux_STA_Drv1.0.3.6/Module/rtmp_main.o
/home/matteo/download/Linux/rt73/RT73_Linux_STA_Drv1.0.3.6/Module/rtmp_main.c: In function ‘usb_rtusb_probe’:
/home/matteo/download/Linux/rt73/RT73_Linux_STA_Drv1.0.3.6/Module/rtmp_main.c:2065: error: ‘struct net_device’ has no member named ‘get_wireless_stats’
/home/matteo/download/Linux/rt73/RT73_Linux_STA_Drv1.0.3.6/Module/rtmp_main.c:2085: warning: unused variable ‘device’
make[4]: *** [/home/matteo/download/Linux/rt73/RT73_Linux_STA_Drv1.0.3.6/Module/rtmp_main.o] Error 1
make[3]: *** [_module_/home/matteo/download/Linux/rt73/RT73_Linux_STA_Drv1.0.3.6/Module] Error 2
make[2]: *** [modules] Error 2
make[1]: *** [modules] Error 2
make[1]: Leaving directory `/usr/src/linux-2.6.22.12-0.1-obj/i386/default'
make: *** [all] Error 2

Evidentemente il compilatore non trova il metodo “get_wireless_stats” allora mi metto alla ricerca su google e trovo che questa funzione non è più presente nei sorgenti del kernel ed è stata rimpiazzata da “get_stats”, quindi è sufficiente aprire il file rtmp_main.c , andare alla riga 2065 e sostituire get_wireless_stats con get_stats. A questo punto la compilazione termina con successo e possiamo proseguire con le istruzioni del readme.

Abbiamo finito ?? No, non ancora !!! Di default quando attacco la chiavetta carica anche il modulo standard che non funziona rt73usb, quindi editiamo /etc/modprobe.conf.local e aggiungiamo la seguente riga blacklist rt73usb per evitare che il modulo venga caricato.

Finalmente riesco a collegarmi all’access point !

Novembre 12, 2007

OpenSuse 10.3 + Eclipse 3.3 + Aptana plugin

Archiviato in: Eclipse, Linux — Tag:, , , — teox78 @ 9:55 am

E’ da pochi giorni che ho formattato il portatile passando da Gentoo a Opensuse 10.3.
Ripristinando l’ambiente di sviluppo, ho installato Eclipse 3.3 e ,sotto consiglio di un mio collega, ho deciso di installare il plugin Aptana che permette uno sviluppo/debug più agile di applicazioni web.
Dopo aver installato il plugin, eclipse andava in crash,chiudendosi brutalmente, quando cercavo di utilizzare il nuovo plugin. L’errore sul terminale era :
eclipse.bin: xcb_xlib.c:52: xcb_xlib_unlock: Assertion `c->xlib.lock’ failed

Per risolvere il problema ho dovuto :

  • impostare la variabile MOZILLA_FIVE_HOME ad una installazione di firefox o mozilla ( nel mio caso /usr/lib/firefox/). Nel mio caso non era impostata, in altri casi potrebbe già esserlo.
  • impostare la variabile LIBXCB_ALLOW_SLOPPY_LOCK=1

Per comodità ho creato un piccolo script per lanciare eclipse :

#!/usr/bin/sh
export MOZILLA_FIVE_HOME=/usr/lib/firefox/
export LIBXCB_ALLOW_SLOPPY_LOCK=1
eclipse

Intro

Archiviato in: personal — Tag:, — teox78 @ 8:14 am

Ciao a tutti,
sono uno sviluppatore di 29 anni che lavora in Italia in una multinazionale che offre servizi.Principalmente ho aperto questo blog per condividere strumenti,pezzi di codice, script e tutto ciò che concerne lo sviluppo.
Altri argomenti che mi piacerebbe trattare sono Linux, auto, cinema, musica e qualche evento particolare della mia vita.
Posso iniziare col dirvi che io e la mia ragazza ci siamo da poco trasferiti in un bel paese fuori Milano (dove prima abitavamo) ; adesso siamo alle prese con le mille cose che bisogna fare quando si trasloca in una casa nuova. In compenso siamo entusiasti del cambiamento perchè ci troviamo benissimo e soprattutto abbiamo trovato due grandi amici!
Dopo questa breve introduzione su di me, passiamo subito a parlare di “developing”…

Blog su WordPress.com.