Not only developing

Linux,Oracle,Java and much more…..

Fedora 11 : problemi con driver NVIDIA

Pubblicato da teox78 su Giugno 24, 2009

Ho fatto l’upgrade da Fedora 10 a Fedora 11 sul mio portatile attraverso lo strumento preupgrade che ti permette di passare alla nuova distribuzione senza alcun DVD o CD ma tramite yum.

Il processo di upgrade è andato benissimo!!

Al primo boot entro in run level 3 per compilare i driver NVidia sul nuovo kernel e faccio reboot.

L’interfaccia grafica non parte, guardo nei log e vedo che ci sono problemi nel caricare il driver NVidia.

Facendo lsmod mi accorgo che anche il nouveau (driver opensource nvidia) è stato caricato. Per evitare il suo caricamento ecco la procedura che ho seguito :

vi /etc/modprobe.d/blacklist.conf

aggiungo le seguenti righe :

# Video drivers
blacklist nouveau

Faccio il backup dell’initrd e lo ricreo (dall’utente root) :

mv /boot/initrd-`uname -r`.img /boot/initrd-`uname -r`.img.backup
mkinitrd -v /boot/initrd-`uname -r`.img `uname -r`

Reboot e tutto funziona alla perfezione !!

Pubblicato su Fedora, Linux | Contrassegnato da tag: , , | Lascia un commento

Oracle : allocation and deallocation of a Clob

Pubblicato da teox78 su Maggio 13, 2009

In a platform based on Oracle, I’m currently developing at work, there is a massive use of clobs so I must make sure to free all the resources allocated by clobs. To do this I created two procedures : one created a temporary clob, the other one frees the clob.

PROCEDURE pr_Open_CLOB(pc_Clob IN OUT NOCOPY CLOB) AS
BEGIN
pc_Clob:=EMPTY_CLOB;
DBMS_LOB.CREATETEMPORARY(pc_Clob, TRUE);
DBMS_LOB.OPEN(pc_Clob, DBMS_LOB.LOB_READWRITE);
END pr_Open_CLOB;


PROCEDURE pr_Close_CLOB(pc_Clob IN OUT NOCOPY CLOB) AS
BEGIN
IF DBMS_LOB.ISOPEN(pc_Clob)=1 THEN
DBMS_LOB.CLOSE(pc_Clob);
END IF;
IF DBMS_LOB.ISTEMPORARY(pc_Clob)=1 THEN
DBMS_LOB.FREETEMPORARY(pc_Clob);
END IF;
END pr_Close_CLOB;

This is how the 2 procedures should be used :

PROCEDURE pr_Test AS
c_Temp CLOB;
BEGIN
pr_Open_Clob(c_Temp);
--use clob
pr_Close_Clob(c_Temp);
EXCEPTION
WHEN OTHERS THEN
pr_Close_Clob(c_Temp);
END pr_Test;

In this way I make sure resources allocated by clobs are always released, even in case of exceptions.

Pubblicato su Oracle, Uncategorized | Contrassegnato da tag: , | Lascia un commento

Fedora 9 : applicazioni flash senza audio

Pubblicato da teox78 su Settembre 7, 2008

Oggi mi sono accorto guardando un trailer su internet che l’audio non si sentiva. Dopo un po’ di test arrivo alla conclusione che l’audio funzionava perfettamente eccetto per le applicazioni flash come il player di YouTube. Dopo poche ricerche si google trovo la soluzione :

yum remove libflashsupport

yum remove flash-plugin

yum install libflashsupport

yum install flash-plugin

Non so se la causa sia stata un update o altro ma la reinstallazione sopra descritta ha comunque risolto il mio caso.

Pubblicato su Linux | Contrassegnato da tag: , , , | 1 Commento »

Alcuni repository per Fedora 9

Pubblicato da teox78 su Agosto 26, 2008

Dopo aver provato varie distribuzioni linux , ho deciso di installare e tenere Fedora Core 9. Per renderla ancora più completa ecco alcuni repository già disponibili per l’ultima versione di Fedora :

LIVNA

[livna]
name=Livna for Fedora Core $releasever – $basearch – Base
baseurl=http://rpm.livna.org/fedora/$releasever/$basearch/
enabled=0
gpgcheck=1
gpgkey=http://livna-dl.reloumirrors.net/RPM-LIVNA-GPG-KEY

FRESHRPMS

[freshrpms]
name=Fedora Core $releasever – $basearch – Freshrpms
baseurl=http://ayo.freshrpms.net/fedora/linux/$releasever/$basearch/freshrpms/
enabled=0
gpgkey=http://freshrpms.net/RPM-GPG-KEY-freshrpms
gpgcheck=1

ADOBE

[adobe-linux]
name=Adobe Systems Incorporated
baseurl=http://linuxdownload.adobe.com/linux/$basearch/
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-adobe-linux

ATRPMS

[atrpms]
name=Fedora Core $releasever – $basearch – ATrpms
baseurl=http://dl.atrpms.net/f$releasever-$basearch/atrpms/stable
gpgkey=http://ATrpms.net/RPM-GPG-KEY.atrpms
enabled=0
gpgcheck=1

Pubblicato su Linux | Contrassegnato da tag: , , , | Lascia un commento

Ruotare un video al volo

Pubblicato da teox78 su Agosto 20, 2008

Una mia collega, appena tornata dalle vacanze, mi stava mostrando alcuni video che aveva fatto col la sua fotocamera : peccato che erano ruotati di 90° :-)

Ecco come ruotarli al volo con mencoder :

mencoder -oac copy -ovc lavc -lavcopts vcodec=mjpeg -vf rotate=1  input.avi -o output.avi

Il parametro rotate puo assumere altri valori :
0 : ruota di 90° in senso orario e gira
1 : ruota di 90° in senso orario
2 : ruote di 90° in senso antiorario
3 : ruote di 90° in senso antiorario e gira

Analogamente valori dal 4 al 7 vengono utilizzati per quei video con geometria “ritratto” e non “paesaggio”.

Pubblicato su Linux, Video | Contrassegnato da tag: , | Lascia un commento

RIA (Rich internet application) : ecco alcuni esempi in Flex 2

Pubblicato da teox78 su Febbraio 8, 2008

Credo che una delle difficoltà principali nel creare applicativi web sia la velocità di sviluppo degli stessi. Flex viene in contro a noi sviluppatori mettendo a disposizione un potente framework che permette di creare applicazioni web in breve tempo e soprattutto con delle funzionalità non supportate dall’html (drag and drop, sliders, …). Non mi dilungo nello spiegare il suo funzionamento nel dettaglio, anche perchè è un mondo a me nuovo e quindi sono ancora inesperto , bensì vi mostro le potenzialità di tale framework grazie a qualche applicativo di esempio.

Raccolta di applicazioni web

Flex 3 è già in beta, ecco qualche video che mostre alcune delle nuove funzionalità :

Advanced Datagrid
OlapDatagrid
Charting Enhancements
Flex 3

L’unica “pecca” è che per il momento non ci sono IDE freeware che ti permettano di sviluppare in flex quindi o si usa un editor di testo qualunque (tornando però ad avere tempi di sviluppo lunghissimi ) o si acquista Flex Builder (a partire da €220 circa ) per il momento disponibile solo per Windows e Mac (dicono che sia prevista anche una versione Linux). Per chi usa eclipse invece c’è il plugin (compatibile con eclipse 3.1 ; con flex 3 invece sarà compatibile con eclipse 3.3).

Pubblicato su Flex | Contrassegnato da tag: , , | Lascia un commento

Lanciare un processo sincrono da Oracle tramite Java

Pubblicato da teox78 su Gennaio 23, 2008

Ecco una breve classe java che permette di lanciare un qualsiasi processo del sistema operativo da Oracle.

CREATE OR REPLACE AND RESOLVE JAVA SOURCE NAMED "FileHandler" AS
import java.io.*;
import java.sql.*;
import oracle.sql.*;
import oracle.jdbc.driver.*;


class StreamReader extends Thread {
InputStream inputStream;
String prefix;

StreamReader(InputStream inputStream, String prefix) {
this.inputStream = inputStream;
this.prefix = prefix;
}

public void run() {
try {
InputStreamReader inputStreamReader = new InputStreamReader(
inputStream);
BufferedReader bufferedReader = new BufferedReader(
inputStreamReader);
String line = null;
while ((line = bufferedReader.readLine()) != null) {
System.out.println(prefix + " " + line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}

class StreamWriter extends Thread {
OutputStream outputStream;
String prefix;

StreamWriter(OutputStream outputStream) {
this.outputStream = outputStream;
}

public void run() {
try {
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(outputStream);
BufferedWriter bufferedWriter = new BufferedWriter(outputStreamWriter);
while (true) {
bufferedWriter.newLine();
}
} catch (IOException e) {

}
}
}

public class FileHandler {

public static int run (String command) {
Runtime runtime = Runtime.getRuntime();
Process process;
int exitValue = -1;
try {
process = runtime.exec(command);

StreamReader errorReader = new StreamReader(process.getErrorStream(), "<<ERROR>>");
StreamReader outputReader = new StreamReader(process.getInputStream(), "<<OUTPUT>>");
StreamWriter inputWriter = new StreamWriter(process.getOutputStream());
errorReader.start();
outputReader.start();
inputWriter.start();
exitValue = process.waitFor();

} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
return exitValue;
}

};

La classe StreamReader serve per poter catturare lo standard output e lo standard error del processo lanciato e loggarli : in questo caso verranno scitti all’interno di trace file nella directory user dump di Oracle ma nulla ci vieta di inserire il tutto in una tabella per una consultazione più rapida. La classe StreamWriter invece impedisce che il processo si blocchi nel caso quest’ultimo sia in attesa sullo standard input. Nel mio caso ero solo interessato al fatto che il processo non si bloccasse quindi non faccio altro che simulare un invio da tastiera, però si potrebbero inviare delle informazioni tramite lo standard input se il processo lo richiedesse.

Il metodo run all’interno della classe FileHandler non fa altro che lanciare il processo e restituire il valore ritornato dal processo, solitamente 0 significa ‘terminato con successo’ e tutto il resto significa che si sono verificati degli errori.

Adesso creiamo una stored procedure che punti a questo metodo :

create or replace FUNCTION OSCommand_Run(Command IN STRING) RETURN NUMBER IS LANGUAGE JAVA NAME 'FileHandler.run(java.lang.String) return int';

Diamo i permessi necessari

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’, ”);

A questo punto possiamo lanciare e monitorare un qualsiasi processo del sistema operativo da una stored procedure o package.

Pubblicato su Java, Oracle | Contrassegnato da tag: , , | Lascia un commento

Impostare il proxy su Opensuse 10.3

Pubblicato da teox78 su Dicembre 4, 2007

In ufficio sono costretto ad utilizzare un proxy con autenticazione per accedere ad internet.

Quindi, dopo aver installato Opensuse 10.3 apro Yast Control Centre, vado sotto Network Services -> Proxy : inserisco l’url del proxy http, il nome utente e la password. Faccio il test e ottengo un esito positivo.

Quando però cerco di andare sotto Yast Control Centre -> Software -> Community Repositories mi viene restituito un messaggio di errore che dice di non poter scaricare la lista dei repositories. Baco ??

Dopo aver fatto un po’ di prove, per risolvere il problema in maniera abbastanza ‘pulita’ ho deciso di editare a mano il file /etc/sysconfig/proxy impostando HTTP_PROXY, HTTPS_PROXY, FTP_PROXY con un valore così composto :

http://domain\username:password@host:port

Pubblicato su Linux | Contrassegnato da tag: , | 1 Commento »

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

Pubblicato da teox78 su Novembre 27, 2007

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.

Pubblicato su Java, Oracle | Contrassegnato da tag: , , , , | Lascia un commento

Oracle su Windows ? Attenzione!!

Pubblicato da teox78 su Novembre 16, 2007

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.

Pubblicato su Oracle, Windows | Contrassegnato da tag: , | 1 Commento »