dimecres 11 de novembre de 2009

CORRECCIÓ ERROR DE REDIMENSIONAMENT DE FINESTRA EN EXECUTAR EXIT_FORM.

data26 / juny / 2008 23:37

Bona nit

He analitzat el problema que hem comentes i només s'ha d'incloure una petita modificació en el disparador del botó SORTIR_DAD, tant d'ENV com de REB de la pantalla ORDRES.fmb.

Consisteix en

..declare
/* Afegim variables per redimensionar la finestra en sortir */
....Alt....number;
....Ample..number;
..begin
....if (:PARAMETER.P_REFERENCIA is null ) then
......Go_Item('BL_DADES_ENV.BANC_DAD');

......Clear_Block(No_Validate);
......Go_Item('CONSULTA.TIPUS_PAG');
......Clear_Block(No_Validate);
....else
/* Venim d'una altra Pantalla, llavors haurem de redimensionar la
Finestra...' */
......if (:PARAMETER.P_ICF_SCF is not null) then
........Alt = 712;
........Ample = 272;
........Set_Window_Property(Forms_MDI_window,WIDTH,Alt);
........Set_Window_Property(Forms_MDI_window,HEIGHT,Ample);
......end if;
......Clear_Form(No_Validate);
......Exit_Form(No_Validate);
....end if;
..end;

Això passa per que quan cridem la pantalla ORDRES.fmb des de les pantalles ICF i SCF utilitzem els paràmetres

......No_Hide,
......Do_Replace,

en executar la instrucció CALL_FORM.

La pantalla anterior (ICF o SCF) roman inactiva sota la pantalla activa (ORDRES), i quan sortim només la tanquem.

De fet no estem navegant una altra vegada fins la pantalla original, sinó que és la única pantalla que ens queda activa i el focus es posiciona automàticament.

Con que el bloc de la pantalla original segueix en QUERY mode, no l'instnaciem de nou...

És a dir no s'executa el WHEN-NEW-BLOCK-INSTANCE que redimensionaria la pantalla una altra vegada.

Llevat de que sortim o toquem qualsevol altre botó que impliqui un nou event sobre el bloc, no es redimensionarà.

NOTA: Els valors els he posat a ull, només cal ajustar-los...

Salutacions.

diumenge 6 de setembre de 2009

Uploading files to the database I

The load of files is a requirement widely implemented along the business production systems with different facilities or solutions. This article provides an approach to implement an efficient and fast method to do it with the Oracle technology. Oracle9iR2 and earliest releases, includes a new implementation of the sqlloader utility, embedded in the schema level of the database, with the external tables.

In previous releases, the sqlloader utility has implemented in the operating system level. This scenario requires a physic control file, that’s contains the structure of the flat file, and the entity –table – as well. With this new implementation, the file upload process to the database is quickly, because the control file resides in the own entity –table- definition, at the schema level of the database.

This article review the next concepts of the Upload process:

  • The Oracle sqlloader utility
  • The Oracle directory
  • The oracle_loader external table


The Oracle sqlloader utility

In the next picture, we see a descriptive diagram of the file upload process with this new approach of the Oracle’s sqlloader utility.

The process step by step:

  • The Oracle directory points to a specific file system location.
  • The file - 2952315970203233637.xml – is placed in this location.
  • The external table, sustained by the directory, stores automatically the file content.
  • A DML statement queries the external table data, and put them into a relational database by an insert statement.

But, anyone can think: Where is the control file? The control file is built-in in the external table; please review the next DDL statement that builds the picture’s example:


  • The first sentence creates the directory basis needed for the external table to define the file system location where is the file to upload.
  • The second sentence creates the external table, first we define the columns –in this case, simply only one - , next we define the sqlloader control file.
  • The third sentence builds a simple relational table.

Easy not? At this moment, we are ready to load the data of the file, with a simply query statement versus the external table can retrieve them:






And finally, if the query is included into an insert statement, we load the data into the final relational table.
Note, that in a business production scenario, the last step can be supplied by a view.

This approach provides a more efficient way to retrieve the uploaded data from the file, and optimize the database storage: it’s your next goal!



Exercise 1: Write the DDL sentence to build the view to retrieve the 100’s first records of the uploaded file into the LOG_FILE_LOAD external table.


Next : the oracle directory

dilluns 31 d’agost de 2009

The safest for server development: "Intronet" 1427 Server

Many times we find the challenge of release one server confidentially -specially during the development phase- with professional software that requires network services have raised to work.

In these cases with a minimum infrastructure -without hub or other network devices or expensive software additional - can use the "intronet" 1427 Server, which provides availability of the software without security issues that derive from access to any network.

Simply connect the pin 1 Tx + (transceive data +) with the pin 4 BDD+ (Bi-directional data +), then the pin 2 Tx- (transceive data -) to Pin 7 BDD+(Bi-directional data +) from your RJ45 connector and then insert the connector in the server's network card and we already have.

Note: The use of term Intronet is only for educational -no commercial- purpose and it do'nt have relation with the vendor trademark.

dijous 6 d’agost de 2009

Averroes, the unknown father of the advertising?

Averroes, arabian philosopher, astronomer and writter on jurisprudence; born at Cordova 1126; died at Morocco, 1198.

Averroes may be the father of the advertising. Why the copy-writers who publish about the "nobility" of the profession, they obvious to him? They -the copy-writers- based their theories of the origin of the advertising in the Greek Rhetorics, Machiavelli, Sun Tzu, and another neocon models to build yuour concept of their art or science. But Averroes is not included, perhaps that he was Arab or Muslim?

Averroes -pursuived for the own Muslims- battled for a Society-Religion law integration. He was a Classic Greek good translator as well. He argued that the philosopher is not above the society, is part of it. And the "rhetoric" is the vehicle to reach the masses.

This demystifies the profession ... and puts it in its current context. Another issue is the copy-writer's, art director and academic efforts to define the advertising as a science or art.

Xavier Picamal

dimarts 28 de juliol de 2009

ORA-12541: Sense accés a la Instància

Error
Després d'instal·lar la base de dades i executar l'script de root.sh, quan intento accedir-hi via sqlplus obtinc el missatge d'error següent:

ORA-12541: TNS:No listener

Reviso els serveis que s'estan executant en el servidor i la base de dades i la instància estan arrencades.

Reviso el fitxer tnsnames.ora i comprovo que l'entrada corresponent a la instància és la següent:

test2=
(DESCRIPTION =
..(ADDRESS_LIST =
....(ADDRESS = (PROTOCOL = TCP)
....(HOST = srvtst09)(PORT = null))
..)
..(CONNECT_DATA =
....(SERVER = DEDICATED) (SID = )
..)
)


Causa
S'ha produit una errada de xarxa -configuració del TCP- durant el procés de creació de la base de dades i concretament en el moment de configurar i arrencar la instància. En aquest context, és possible que l'error es produeixi per diverses causes:

  • d'errada de configuració dels dispositius de xarxa del servidor.
  • No s'han executat totes les tasques -o s'han executat incorrectament- de post-instal·lació de la base de dades Oracle.

Resposta
Si la base de dades està oberta i la instància arrencada i no podem accedir-hi, comprovem primer que el nostre servidor és accessible en xarxa i la seva configuració.

#ping -a srvtst09
PING srvtst09 (198.182.196.128) 56(84) bytes of data.
64 bytes from srvtst09 (198.182.196.128): icmp_seq=1 ttl=51 time=31.9 ms
64 bytes from srvtst09 (198.182.196.128): icmp_seq=2 ttl=51 time=31.4 ms
64 bytes from srvtst09 (198.182.196.128): icmp_seq=3 ttl=51 time=48.4 ms
64 bytes from srvtst09 (198.182.196.128): icmp_seq=4 ttl=51 time=40.0 ms
64 bytes from srvtst09 (198.182.196.128): icmp_seq=5 ttl=51 time=31.1 ms
64 bytes from srvtst09 (198.182.196.128): icmp_seq=6 ttl=51 time=31.6 ms
64 bytes from srvtst09 (198.182.196.128): icmp_seq=7 ttl=51 time=31.4 ms
64 bytes from srvtst09 (198.182.196.128): icmp_seq=8 ttl=51 time=46.7 ms
64 bytes from srvtst09 (198.182.196.128): icmp_seq=9 ttl=51 time=46.9 ms
64 bytes from srvtst09 (198.182.196.128): icmp_seq=10 ttl=51 time=31.7 ms

--- srvtst09 ping statistics ---
10 packets transmitted, 10 received, 0% packet loss, time 4506ms
rtt min/avg/max/mdev = 31.197/37.166/48.474/7.159 ms


És accessible però no s'ha actualitzat la informació en el descriptor de la connexió, per tant ens assegurem que efectivament el listener no està funcionant, obtenint primer el nom del listener del fitxer listener.ora:

LISTENER=
..(DESCRIPTION=
....(ADDRESS_LIST=
......(ADDRESS=(PROTOCOL=tcp)(HOST=srvtst09)(PORT=null))
......(ADDRESS=(PROTOCOL=ipc)(KEY=extproc))))
SID_LIST_LISTENER=
..(SID_LIST=
....(SID_DESC=
....(SID_NAME=plsextproc)
....(ORACLE_HOME=/app/oracle/10gR2)
....(PROGRAM=extproc)))


En el nostre cas, comprovem que el fitxer listener.ora és incorrecte, per lo que haurem d'actualitzar la informació del descriptor:

LISTENER=
..(DESCRIPTION=
....(ADDRESS_LIST=
......(ADDRESS=(PROTOCOL=tcp)(HOST=198.182.196.128)(PORT=1521))
......(ADDRESS=(PROTOCOL=ipc)(KEY=extproc))))
SID_LIST_LISTENER=
..(SID_LIST=
....(SID_DESC=
....(SID_NAME=plsextproc)
....(ORACLE_HOME=/app/oracle/10gR2)
....(PROGRAM=extproc)))


I ara comprovem que el listener s'està executant, amb la següent instrucció:

#lsnrctl status
LSNRCTL for Solaris: Version 10.2.0.1.0 - Production on 28-JUL-2008 09:55:08

Copyright (c) 1991, 2005, Oracle. All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC2)))
TNS-12541: TNS:no listener
TNS-12560: TNS:protocol adapter error
TNS-00511: No listener
Solaris Error: 2: No such file or directory
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=srvtst09)(PORT=)))
TNS-12541: TNS:no listener
TNS-12560: TNS:protocol adapter error
TNS-00511: No listener
Solaris Error: 146: Connection refused

Fixeu-vos que no hem especificat cap nom de listener perque en el fitxer listener.ora no hi constava cap nom. Si n'hi hagués un la instrucció a exectuar seria la següent:

#lsnrctl status NOM_LISTENER

Con que el listener no s'està executant, actualitzarem en primer lloc l'entrada del fitxer tnsnames.ora introduint la IP obtinguda amb la instrucció PING i tot seguit incorporem el port 1521, el valor per defecte i també el nom de la instància doncs no hi constava.

test2=
(DESCRIPTION =
..(ADDRESS_LIST =
....(ADDRESS = (PROTOCOL = TCP)
....(HOST = 198.182.196.128)(PORT = 1521))
..)
..(CONNECT_DATA =
....(SERVER = DEDICATED) (SID = test2)
..)
)


Ara inciem el listener amb la següent instrucció:

#lsnrctl start

Ens esperem un moment per donar temps a que es registri la nova entrada del servei i tot seguit, executem una altra vegada l'sqlplus per accedir a la instància, obtenint el següent error Oracle:

ORA-12162 "TNS:net service name is incorrectly specified"

Malgrat que les indicacions del fabricant ens adrecen vers comprovar errades sintàctiques en el fitxer tnsnames.ora, aquest error genèric moltes vegades el provoca el fet de no tenir registrades les variables d'entorn.

Hem de finalitzar les tasques de post-instal·lació, executant les següents instruccions per actualitzar les variables d'entorn linux.

#export ORACLE_HOME=/app/oracle/10gR2
#export ORACLE_SID=test2

Baixem i tornem a pujar el listener amb les instruccions següents:

#lsnrctl stop
#lsnrctl start

Esperem un moment a que es registrin les noves entrades i tot seguit comprovem, que efectivament ja tenim accés a la instància.

dijous 16 de juliol de 2009

Introducció als sistemes UNIX /Linux : Sistemes de Fitxers

En alguns casos la formació dels Administradors de Bases de dades es centra exclusivament en elles, i sovint, el DBA ha de fer altres tasques relacionades amb els sistemes operatius que requereixen d'un coneixement previ. Aquest conjunt d'aportacions es centra en proporcionar conceptes bàsics dels coneixement essencials sobre els sistemes operatius i les plataformes més utilitzades en els entorns productius de negocis.

El coneixement conceptual del que és un sistema de fitxers ens ajudarà a recuperar un disc dur en cas d'una situació d'emergència o a preparar-lo nosaltres mateixos per a instal·lar-hi una base de dades.

El Sistema de Fitxers
Un sistema de fitxers UNIX/Linux és una col·lecció de fitxers i directoris emmagatzemats que contenen dades d'usuaris o metadades -com informació estructural-, en una partició separada d'un disposisitu d'emmagatzematge o disc.

El Fitxer
És una col·lecció de dades emmagatzemades en un disc, o un dispositiu que pot emmagatzemar informació, com dades, música, imatges, pel·lícules, text, etc. Els fitxers estan associats a un dispositiu -disc dur, disquet, discs compactes, òptics, etc- essent el darrer objecte en l'arbre del sistema de fitxers.

Els Directoris
El directori és un grup de fitxers, que permet organitzar les dades de manera eficient. En un sistema de fitxers podem distingir entre dos tipus de directoris

  • el directori arrel, -root- on s'inicia tot el sistema de fitxers, es representa per una barra inclinada (/) i no es pot renombrar o eliminar.
  • sub-directoris o sots-directoris. Qualsevol altre directori que es troba per sota de l'arrel, que pot ser creat o renombrat per l'usuari.

Tipus de Sistemes de fitxers
  • ext2 És el sistema de fitxers tradicional de Linux, basat en els conceptes de blocs, nodes i directoris com el UNIX. Proporciona una gran velocitat d'accés respecte la primera versió i permet crear arxius de fins a 4 GB. És robust, però en cas de blocatge del sistema, necessita controls d'integritat, que en funció del tamany del disc dur, poden requerir molt de temps, i possiblement provocarà la corrupció d'alguns fitxers.
  • ext3 Aquest sistema de fitxers és un ext2 que incorpora un tractament d'enregistrament cronològic -journaling-, en un fitxer de registre ubicat en una part separada del disc dur, on s'emmagatzema els noms dels arxius i la seva ubicació.
..........En lloc de fer un extens sistema de verificació de fitxers, un sistema de fitxers amb
..........
diari -journaling- només llegeix el contingut de l'arxiu de registre per assegurar-se
..........
que els arxius estan en l'estat que se suposa que han d'estar. Això estalvia temps i
..........
evita la corrupció d'arxius. El principal desavantatge és que una vegada eliminat
..........
un arxiu aquest roman irrecuperable.

..........L'ext3 suporta llista de control POSIX (POSIX ACL).
  • Isofs O iso9660, és utitlitzat pel sistema de fitxers del CDROM.
  • SysFs És un sistema de fitxers basat en RAM que s'utilitza per exportar objectes del nucli de manera senzilla per l'usuari.
  • Procfs El proc actua com a interfície de les estructures de dades internes del nucli. S'utilitza per obtenir informació sobre el sistema i per a modificar certs paràmetres del nucli en temps d'execució utilitzant la instrucció sysctl, per exemple.
  • NFS L'NFS -Network File System- o sistema de fitxers de xarxa permet compartir els mateixos arxius a sistemes o usuaris utilitzant la metodologia client/servidor. L'NFS permet compartir tots els tipus de sistemes de fitxers que hem citat anteriorment.

Particions de Sistema de fitxers UNIX/Linux
Un altre concepte que cal tenir en compte, és el de partició. La partició d'una unitat de disc dur, és la creació de divisions lògiques separades, per emmagatzemar sistemes de fitxers diferents. L'inici de cada partició rep el nom de punt de muntatge.

La partició dels discs obeix a criteris com:
  • Facilitat d'ús, aillant cada part del sistema en una àrea separada.
  • Rendiment, quan més petit és un sistema de fitxers més eficient.
  • Seguretat, separant i limitant el creixement dels fitxers dels sistema operatiu dels fitxers d'usuari fem el nostre sistema molt més segur.
  • Còpia de Seguretat i Recuperació, pel mateix criteri que la facilitat.
  • Estabilitat i eficiència. Es pot incrementar l'eficiència de l'espai de disc, donant un format de bloc en funció del nombre i el tamany dels fitxers que conté.
  • Monitorització
Algunes de les particions dels sistemes de fitxerx UNIX/Linux més habituals són:
  • / Sistema de fitxers especial que incorpora els fitxers sota diversos directoris com /dev /sbin /tmp
  • /usr per emmagatzemar programes d'aplicacions
  • /var per emmagatzemar arxius -o fitxers- de registres
  • /tmp per emmagatzematge de dades temporals.
  • /boot per emmagatzemar les imatges del nucli i el carregador del sistema
  • /home o arrel dels directoris on emmagatzemar les dades dels usuaris

Hem de tenir present que en cada partició podem establir un nivell de seguretat específic, editant el fitxer /etc/fstab i afegint-hi les opcions següents:
  • nosuid, impedint-hi l'accés SUID/SGID.
  • nodev, impedint-hi dispositius o caràcters especials.
  • noexec, impedint-hi l'execució de binaris.
  • ro, montant el sistema de fitxers com només lectura
  • quota, assignant un tamany determinat.
En aportacions posteriors veurem com crear i/o modificar particions i com obtenir informació de particions existents.
Xavier Picamal

dijous 7 de maig de 2009

Gestió Automàtica de Documents I

Abstracte
L'Organització es troba davant un repte important: en el darrer informe de situació sobre el sistema de gestió documental s'ha constatat que en el decurs del darrer any, només s'ha procedit a l'enregistrament digital d'una tercera part dels documents que s'han generat en l'arxiu físic.

Aquest escenari implica una pèrdua important d'informació vital i de coneixement, que rau en les estacions de treball dels col·laboradors en lloc del servidor.

En el context del projecte de digitalització de documents i comunicats, iniciat amb la implantació del sistema de gestió documental, aquest no sols no ha aconseguit la fita establerta en l'aspecte administratiu, sinó que a més, ha esdevingut una important despesa de recursos econòmics i humans.

En el context de l'operativa, suposa una gran pèrdua de coneixement, doncs, tota aquesta informació ha de ser en molts casos generada de nou, degut a l'escasa efectivitat que suposa haver de gestionar físicament tota aquesta informació o per la poca cura en l'aplicació dels procediments normals de gestió d'un arxiu, sense responsable aparent.

La direcció ens demana una proposta que recondueixi la situació i que aconsegueixi que en un termini de tres mesos dues terceres parts dels documents generats per l'organització siguin dins del servidor.


Primera aproximació
Els factors que condicionen l'escenari actual, a part de la política de l'organització, són:

  • Els col·laboradors són externs i el temps destinat a tasques administratives, com l'arxiu de documents, no se'ls retribueix.
  • Els col·laboradors tracten de protegir el seu coneixement, com a eina de pressió vers la direcció.
  • Els col·laboradors treballen en local i no en el servidor.
  • El sistema de gestió documental només s'ajusta a les necessitats d'algunes unitats de negoci de l'organització.
  • El correu electrònic no està integrat en el sistema de gestió documental.
  • La integració amb el programari ofimátic és deficient.

En aquest context cal dissenyar una solució tecnològica que incorpori forçosament un automatisme d'arxiu de documents que a més integri el correu electrònic i el programari ofimàtic.


Situació actual
El sistema de gestió documental està constituït per tres bases de dades que comparteixen les quatre unitats de negoci, una d'elles administració, que formen l'organització, ubicades en un únic servidor :
  • documents
  • clients / projectes
  • històric

El correu corporatiu també està ubicat en el mateix servidor, el que implica una càrrega de treball desmesurada, que justifica la posició del col·laborador, a l'hora de procedir a l'arxiu de documents.

NOTA: En la recent renovació del parc informàtic que va dur a terme l'organització, el sistema de fitxers -documents- i el de gestió documental - correu electrònic corporatiu es van separar en dos servidors de prestacions idèntiques. Eliminant doncs d'aquesta manera, segons la direcció, la principal argumentació dels col·laboradors per no utilitzar-lo de forma habitual.

El programari ofimàtic està instal·lat en cada estació de treball, però està actualitzat després de la renovació de tot el parc tecnològic, però no s'ha pogut integrar correctament en migrar de versió el sistema de gestió documental.

Els documents s'organitzen seguint els següents criteris:
  • unitat de negoci
  • any
  • client / projecte
  • tipus de document
  • autor
  • estat

Malgrat es disposi d'un servidor potent i dedicat, el fet de compartir una única base de dades de documents suposa embuts importants -per concurrència- en alguns moments del dia, especialment abans de la pausa pera anar a dinar i al final de la jornada laboral habitual.

D'altra banda, l'accés als documents es feixug, per dues raons fonamentals:
  • Quan s'accedeix a un document, encara que sigui en la modalitat de consulta, aquest roman blocat per a la resta d'usuaris.
  • Els usuaris tenen el costum de gestionar els documents com si fossin propis, en lloc de pensar en grup. En altres paraules, no hi ha esperit de col·laboració entre les diferents unitats de negoci.
Per lo que la solució adoptada per la direcció no satisfà la necessitat real dels col·laboradors, i aquests no mantenen una actitud pròpia d'un entorn col·laboratiu.


Una organització que no col·labora, està condemnada al fracàs.
La nostra primera actuació ha de ser forçosament en l'àmbit dels recursos humans. Si no tenim la complicitat dels clients -prefereixo aquest terme, al d'usuari- no aconseguirem els nostres objectius.

El nostre primer esforç es centra, en establir un clima de col·laboració entre les diferents unitats de negoci, però topa de front amb la direcció de l'organització: si s'estableix una col·laboració molt estreta entre tots, la pressió que podran exercir podrà esdevenir molt gran i en aquesta separació es fonamenta la política laboral de l'organització.

En no poder mantenir reunions o grups de treball en els que participin totes les unitats de negoci, el procés d'implantació d'una solució serà lent i feixug. Poc eficient.

No podem establir i imposar una normativa d'ús del sistema, requeriment obligat de la implantació de la LOPD en una organització com la tractada per raons laborals òbvies, que no citarem per raons també, òbvies.

Per tant, haurem doncs de motivar als col·laboradors a que actuin com a tals, i forçar -de manera que no se n'adonguin- progressivament la implantació d'una normativa d'ús del sistema de gestió documental.

Aquesta actuació es durà a terme des de l'àrea de suport, la que està en contacte directa amb els clients.

En general, els clients -especialment els que pertanyen a professionals lliberals- mantenen una posició dominant vers el personal tècnic, al que considera un ajudant poc qualificat causant dels problemes tecnològics que pateixen. Aquesta afirmació, sustentada en anys d'experiència, ens condueix a que el client no és conscient que gran part dels problemes tecnològics que pateix, els provoca ell mateix.

La nostra estratègia s'ha de centrar en la conscienciació d'aquells elements de l'organització que poden frenar la implantació d'una normativa d'ús, o bé perque tenen poder -ocupen una jerarquia en l'organització- o perque són líders d'un grup d'opinió -lideren a un grup d'elements de l'organització per raons sociològiques.

diumenge 26 d’abril de 2009

Donant forma a les idees: El procés creatiu

El procés creatiu, la creativitat
Em citat anteriorment, que en la etapa 2 s’iniciava el procés creatiu. I hom pot deduir amb facilitat que el procés creatiu, deriva de la creativitat. Ara bé, què ¿s'entén per creativitat o creatiu?¿Quines poden ser les notes que defineixin la creativitat, i per extensió, el pensament creatiu? Paul Torrance1, comenta que analitzant una llista de les característiques o termes d’aprenentatge creatiu–en un termini màxim de cinc minuts- elaborada per dos-cents alumnes, havia validat fins a dos cents trenta indicadors.

Matthew Lipman considera que "aquells termes que em venen més ràpidament a la ment i sense cap ordre en particular són la originalitat, la novetat, la generativitat, la singularitat, la productivitat, la capacitat de ruptura, la capacitat de sorpresa, d'invenció, la qualitat alliberadora, l’espontaneïtat, la imaginació, la inspiració i la capacitat de síntesi. Aquests termes han de ser analitzats per a determinar fins a quin punt són senzillament sinònims del pensament creatiu o bé criteris del mateix".
2

El pensament creatiu
En aquest context, el que sí s'observa es el comú denominador de les definicions o característiques de la creativitat i/o el pensament creatiu, la creació d'una cosa nova i a més, en certa mesura, un element transgressor, que se surt de les pautes habituals, dels convencionalismes. En aquest mateix context, s’expressen Mackinnon o Taylor que defineixen la creativitat com el procés intel•lectual que cerca produir noves idees que siguin vàlides.3

Per a J. Richard Suchman, insistint sobre la idea de l'originalitat, introdueix un nou element que pot ser de vital importància: la referència al subjecte i la seva autonomia. "El pensament creatiu té dos trets característics. Primer, és autònom, no es ni aleatori, ni està controlat per a cap agent extern o esquema fixe, sinó que és completament autodirectiu. Segon, està dirgit a produir una nova forma -nova en el sentit de la consciència del pensador abans d'iniciar el seu pensament".
4 Pren especial rellevància, que la novetat és centra en el subjecte i no en el col•lectiu o societat a la que pertany.

De tota manera podem veure que la interpretació que originalitat i novetat, trets característics de la creativitat i el pensament creatiu, no sempre es fa en la línia que segueixen Jackson, Messick, Ghiselin, Ulmann i Guilford, que la consideren com una proposta que ningú ha fet abans, o una alternativa a tot allò que s'havia plantejat. Steiner considera que
"l’originalitat és la antítesi de la novetat. L'etimologia de la paraula ens alerta. Ens parla d'inici i d'instauració de un retorn, en substància i forma, als inicis. Les invencions estètiques són arcaiques en exacta relació amb la seva originalitat, amb la seva força d'innovació espiritual-formal"
5. Llavors ser original, suposa plantejar una idea de manera autèntica, recreant els diferents elements del nostre pensament o de la nostra actuació i donar-li un ordre propi, una estructura significativa dins del nostre univers personal.

Desenvolupar un pensament creatiu y original més que crear una novetat esdevé trencar amb la convencionalitat, amb lo admès, suposa repensar la realitat per un mateix, amb els seus propis ulls, i no amb els de la societat.6

Creativitat, espontaneïtat i reflexió
El pensament creatiu està subjecte a la reflexió, està sotmès a certs criteris. “També es troba allí, una vegada més, tota la dialèctica entre l'omnipotència de la imaginació i la necessitat d'un compromís amb la realitat".7 Es evident que en el pensament creatiu l’espontaneïtat, la llibertat d'expressió i d'imaginació s'han de canalitzar, explorar i explotar d'una manera sistemàtica i reflexiva. I tot creatiu ho sap, o ho hauria de saber. Hem d'entendre llavors que la creativitat espontània o primària8 i la creativitat reflexiva, no són dos tipus de creativitat, sinó dos estadis o moments diferents del procés creatiu.9

El procés creatiu estarà format per una etapa d’originalitat, que garanteix la novetat del producte i una altra de funció intel•lectual que produeix el caràcter valuós i escaient del mateix. Aquest fet, desmitifica la definició romàntica –i tant acceptada socialment- de que el creatiu no és es un ésser racional. És obvi, que la creativitat necessita vies d’expressió i de comunicació, necessita canals per a la seva elaboració i realització. La creativitat esdevé l’adquisició i interiorització d’instruments i eines mentals, entre les que hi haurà forçosament els processos de raonament lògic-formals. “El cultiu de la racionalitat en l’esfera estètica és tant o més important que el cultiu de la mateixa en les altres dues esferes essencials de l’ésser humà-la teòrica i la pràctica-“.
10

Creativitat i pensament divergent
El pensament divergent és per oposició al convergent aquell que la direcció de la reflexió i argumentació no és única. És a dir, no pretén obtenir una conclusió o resposta única i valida. En no concentrar-se en una única direcció, la investigació esdevé més obert i dispers. Pierce introdueix el raonament explicatiu, que extén el nostre pensament sense ampliar-lo, la deducció en seria un exemple, i el raonament amplificatiu que duu el nostre pensament més enllà de l’experiència, amb analogies, inducció i metàfores. 11



(1) Paul Torrance, E. Creative teaching makes a difference en Creativity: its educational implications. Curtis Gowan, J. Demos. G.D. y Paul Torrance, E. New York, John Wiley and Sons Inc, 1967, p.177.
(2) Lipman, M., Pensament complex i educació, p. 279.

(3) Citat por Jaoui, H., Claves para la creatividad, México, Diana, 1979 p. 249

(4) Richard Suchman, J., Creative thinking and conceptual growth, Cretativity: its educational implications. Curtis Gowan, J. Demos G.D. y Paul Torrance, E. (Comp.) New York, John Wiley and Sons Inc, 1967, p. 89

(5) Steiner, G. Presencias Reales, Hay algo en lo que decimos? Barcelona, Ensayos/Destino, 1989. p-42

(6) Lago Bornstein, Juan Carlos, Redescribiendo la comunidad de investigación, Ed. De la Torre, p-94.

(7) Jaoui,H. Claves para la creatividad, Mexico, Diana, 1979, p-42

(8) Lago Bornstein, Juan Carlos, Redescribiendo la comunidad de investigación, Ed. De la Torre, p-96.

citant a Maslow.
(9) Lago Bornstein, Juan Carlos, Redescribiendo la comunidad de investigación, Ed. De la Torre, p-97.

(10) Ferry, L., Homo Aesthethicus, Paris, Grasset, 1990

(11) Pierce, Ch. S, The probability of Induction, New York, Dover, p.180

dimarts 10 de març de 2009

La importància de la definició de les extensions

Aquestes darreres setmanes he estat analitzant un servidor de continguts, que corria damunt una base de dades Oracle10g, amb tenia un rendiment molt baix, considerant les prestacions de la màquina i la càrrega de treball a la que estava sent sotmesa.

En els moments de màxima concurrència d'usuaris, el sistema s'alentia de tal manera, que sovint es produien "timeouts" de les aplicacions, un vertader maldecap. Les dades introduides en successives pantalles d'aplicació, es volcaven contra la base de dades i sovint no s'hi enregistraven. Els usuaris i els tècnics de sistemes patien un stress desmesurat, i saltaven espurnes constantment. El deteriorament de les relacions humanes suposa una gran pèrdua de productivitat per a qualsevol organització.

Una de les raons per les que el rendiment no era el que cabia esperar, era la definició de les extensions de les taules més grans, d'uns cinc o sis milions de registres. Concretament, la taula que enregistrava l'activitat de les aplicacions sensibles de l'organització a efectes de la LOPD -Llei Orgànica de Protecció de dades- era un dels coll d'ampolla.

Qualsevol petició, modificació, eliminació o inserció de dades sensibles havia de ser curadosament enregistrada i auditada. I totes les aplicacions del servidor accedien i inserien constantment dades en aquesta taula. L'administrador de la base de dades havia assenyadament partit la taula, seguint el criteri setmanal. Tenint en compte que a efectes legals s'ha de tenir, relativament a mà els darrrers cinc anys, estem parlant d'unes tres-centes particions, i prop de cinc milions de registres.

Analitzant la capa de base de dades, amb una consulta contra DBA_SEGMENTS s'obtenia uns 32 GB per tota la taula. Una quantitat massa gran, tenint en compte de que es tracta d'una taula d'enregistrament (LOG), amb prop de trenta columnes, amb un máxim de dos-cents caràcters per columna.

Triant una partició a l'atzar, s'obtenia una columna mitjana de 40 i uns dos milions tres-centes cinquanta mil files, AVG_ROW_LEN = 42, NUM_ROWS = 2.364.689. És a dir que la partició tenia aproximadament 96.000 KBytes, contenint una quantitat relativament petita de dades. Els blocs obtinguts eren uns tretze mil el que ens donava un pes de 103 KB. Fins aquí les dades eren coherents, però la partició ocupava físicament en disc prop de 2 MB!

On era el problema? Em va preguntar l'Administrador de la base de dades. En la definició de la taula! -li vaig respondre. Li vaig posar un senzill exemple per il·lustrar-ho :

create table tb_test (t varchar2(1))
storage (INITIAL 1 MB
NEXT 1 MB
MINEXTENTS 1
MAXEXTENTS 5 );


Com ja saps cada segment, conté extensions. Si en la taula de l'exemple insereixo dos registres, tindré 2 bytes d'informació, però ocuparan un Mega en disc, i no puc tenir menys d'una extensió... Per tant, el primer que hem de fer és analitzar l'estructura de les taules, especialment la clàusula STORAGE de cadascuna. Però abans executarem:

alter table TB_LOG_LOPD deallocate unused;

dimarts 12 d’agost de 2008

Carregant fitxers directament

Una de les utilitats més utilitzades per a carregar fitxers en una base de dades Oracle, és l'sqlloader. Aquesta funcionalitat ha evolucionat amb les versions, fins assolir una certa maduresa, en la Oracle9iR2 i posteriors. Amb la racionalització de l'ús que proporcionen les Taules Externes, els obstacles de complexitat del LOADER s'esvaeixen.

Sistema d'Arxius
Hem de seguir una llista de comprovació bàsica en la ubicació dels fitxers en el sistema d'arxius:
- que tinguem una partició dedicada, si és possible.
- que tinguem prou espai d'emmagatzematge.
- que sigui sempre la mateixa.
- que sigui accessible pel compte d'usuari oracle.
- que tingui els permisos escaients sobre el fitxer a carregar.

Una vegada satisfets aquests requeriments, podem iniciar el procés de definició en base de dades.

Base de Dades
Els DIRECTORY són punters a una ubicació (PATH) del sistema d'arxius. Per tant, amb l'usuari propietari de l'esquema crearem el directori de càrrega i atorgarem permisos al compte que executarà el programa.

En aquest punt, tenim definit l'accés al fitxer, ara caldrà crear un objecte de base de dades que ens permeti definir el fitxer i la seva estructura. En l'sqlloader tradicional, es tractaria del fitxer de control i configuració.

Les taules externes, ens permeten concentrar en únic objecte la gestió de càrrega sqlloader, simplificant el màxim el procés. Crearem doncs, la taula externa -especificant que es tracta d'una taula LOADER-, definim les columnes de l'entitat, i del fitxer: la seva posició i longitud, fixer o amb caràcter separador. En l'especificació de la taula, haurem d'indicar el directori i opcionalment, l'origen -el nom del fitxer- de les dades.

Un exemple
Una aplicació que transforma fitxers plans (txt) en fitxers xml genera un fitxer de registre -un log- com el que es mostra tot seguit:
...
...
2008-04-04 14:23:06 # SEPAconv.sh # 2598 # LOG # FileLoad 01 : trobat fitxer sepa20080404cicle2.out en directori /app/sepa/data/in

2008-04-04 14:23:06 # SEPAconv.sh # 2598 # LOG # FileLoad 02 : renombrant fitxer sepa20080404cicle2.out per out_20080404_2.conv


2008-04-04 14:23:06 # SEPAconv.sh # 2598 # LOG # FileLoad 04 : movent fitxer out_20080404_2.conv en directori /app/sepa/data/exe

2008-04-04 14:23:06 # SEPAconv.sh # 2598 # LOG # FileLoad 05 : trobat fitxer out_20080404_2.conv en directori /app/sepa/data/exe

2008-04-04 14:23:07 # SEPAconv.sh # 2598 # LOG # FileCheck 01: comprobant la integritat del fitxer out_20080404_2.conv

2008-04-04 14:23:07 # SEPAconv.sh # 2598 # LOG # FileCheck 03 : El fitxer out_20080404_2.conv té el format correcté i un sol bloc.

...


On la primera columna ens mostra la data i hora d'execució, la segona el procés que s'està executant, la tercera l'identificador de procés, la quarta el tipus de missatge (LOG, correspon a registre normal, WRN a una advertència i ERR a un error d'execució) i en darrer lloc el missatge informatiu.

Per generar la taula externa que ens permeti carregar els fitxers de registre de l'aplicació a la base de dades hauríem d'executar les següents instruccions:

create or replace directory APPDUMP as '/app/sepa/data/load/';
grant read on directory APPDUMP to sepa;
grant write on directory APPDUMP to sepa;

create table APP_SEPA_LOG(
..APP_DATAIHORA_EXEC
..date,
..APP_PROCES_EXEC.....varchar2(30),
..APP_PROCES_PID......varchar2(4),
..APP_TIPUS_MISSATGE..char(3),
..APP_PROCES_MISSATGE varchar2(200)
..)
organization external (
type ORACLE_LOADER
default directory APPDUMP
acces parameters (
records delimited by newline
skip 2
fields terminated by ' # '
missing field values are null
.(
APP_DATAIHORA_EXEC.date,APP_PROCES_EXEC varchar2(30),
..APP_PROCES_PID varchar2(4),
APP_TIPUS_MISSATGE char(3),
..APP_PROCES_MISSATGE varchar2(200))
location ('appSEPA.log'));

...
Bé, doncs ara ja estem en condicions de poder carregar les dades en la nostra taula. Per fer-ho haurem de:

  • moure el fitxer de registre fins el directori /app/sepa/data/load.
  • renombrar-lo per appSEPA.log
  • atorgar-li permisos de lectura i escriptura
I tot seguit obrim una sessió en la base de dades amb el compte d'usuari oracle SEPA.
  • executem la instrucció
......select to_date(APP_DATAIHORA_EXEC,'yyyy-mm-dd hh24:mi:ss'),
.............APP_PROCES_EXEC
,APP_PROCES_PID,
.............APP_TIPUS_MISSATGE,APP_PROCES_MISSATGE

........from SEPA.APP_SEPA_LOG;

I tot seguit obtindrem les dades corresponents al fitxer, tabulats per columnes.

En l'enllaç http://www.psoug.org/reference/externaltab.html teniu informació complerta de les taules externes.