viernes, 19 de diciembre de 2008

La Guerra del Coltán

A veces, simplemente miramos para otro lado. Pero el poder llevar nuestro estilo de vida en el primer mundo tiene consecuencias. El País Semanal dedicaba un reportaje a este asunto titulado Coltán, el regalo envenenado de Congo .

[Extraido de Microsiervos]
La pesadilla del coltán. Las nuevas tecnologías llegaron a finales del siglo XX al este de Congo en forma de un nuevo mineral que arrancar de las montañas: el coltán. El país cuenta con las mayores reservas mundiales conocidas de esta extraña aleación [con] unas propiedades eléctricas que lo hacen insustituible en los teléfonos móviles, consolas de videojuegos y todo tipo de equipos electrónicos. Fácil de extraer y muy valioso, el coltán fue el combustible que engrasó las múltiples facciones que protagonizaron la gran guerra entre 1997 y 2003.

El coltán contiene metales muy cotizados por lo que su extracción tiene graves consecuencias en la zona donde abunda. El Congo vive una guerra desde que en 1998 Uganda y sobre todo Ruanda, aprovechando la debilida política de aquel país, ocuparan militarmente las zonas mineras para su explotación comercial. Un desastre medioambiental y sobre todo social que suma hasta ahora más de 5,5 millones de muertos.

El término coltán se refiere coloquialmente al binomio que forman distintas composiciones de columbita y la tantalita, metales muy escasos y que, entre otras características destacables, tienen una alta conductividad, gran resistencia a temperaturas elevadas y la capacidad de almacenar cargas eléctricas –el tantalio se utiliza en la fabricación de condensadores eléctricos.

Hace unos meses Fernando Plaza ahondó ampliamente el tema del coltán (a raíz de la presentación del libro de Alberto Vázquez-Figueroa que lleva ese término por título) aunque dejando de lado las implicaciones política, sociales y mediomabientales causados por el “fenómeno del coltán”.

The coltan phenomenon – Hay grupos de presión que apuestan por boicotear o imponer una moratoria en las exportaciones de coltán desde el Congo con intención de solucionar los problemas asociados al mercado internacional de coltán. Sin embargo estas medidas no impedirían que la expresas explotadoras continuaran su actividad de forma aún menos transparentes, o simplemente cambien de lugar para continuar su actividad.

En cambio, los trabajadores perderán el que es prácticamente su único sustento de vida, una de las pocas fuentes de ingresos que les quedan. Lo ideal serie establecer una forma más justa y menos dolorosa de extraer y comercializar el coltán.

Lo anterior está en línea con lo que afirmaba recientemente el fotógrama Álvaro Ybarra que ha presenciado el conflicto en primera persona.

Discrepo mucho de las frases salomónicas de ciertas ONG y organismos internacionales en temas como el coltán: chavales trabajando, los niños soldados... ¡cómo se nota que no han estado allí! Si eres el noveno hermano de una familia en la mitad de la selva colombiana en la que tu padre te abandona, tienes prácticamente que matar con tus hermanos para comer - eso te da una probabilidad de sobrevivir. La Ley Humana exige sobrevivir, así que no critiques una situación si no aportas una solución real.

[Sucede] igual con los niños mineros del coltán. Efectivamente, un niño no tiene que estar trabajando en una mina, un niño no tiene que poder coger un arma - ¡nungún ser humano debería coger un arma, odio las armas! Ellos lo único que piensan es que quieren vivir y comer. [Entrevista con Álvaro Ybarra Zavala]

La extración de coltán además tiene consecuencuas medioambientales notables: desde la contaminación de los ríos de la zona y grandes lagos, la destrucción del entorno y el desplazamiento humano y de la especies. «Algunos rebeldes y mineros cazan para comer elefantes y gorilas poniendo a éstos en peligro».

Además del coltán, también la extracción casiterita, mineral fundamental para la obtención de estaño y otras aleaciones, «está causando los mayores casos de explotación infantil y trabajos forzados» en la región, según se cita en el mencionado artículo de El País Semanal.

martes, 16 de diciembre de 2008

Cielos abiertos, Mentes cerradas

Este es el título de un libro de temática ovni (Gracias, Santi Camacho) que la verdad, en este blog y para este post no viene al caso, pero que se me vino a la mente recientemente, ante una noticia sorprendente .

Quizá algunos consideren que los defensores de Linux somos demasiado vehementes, o que incluso llegamos a ser algo agresivos. Pero es raro el día que alguien no nos demuestra que hemos de seguir trabajando en dar a conocer a la gente la realidad con respecto al software libre.

Aunque parezca mentira, todavía quedan personas que creen en que la tierra es un disco plano, que Dios creó el mundo, que todos los planetas giran en torno a la tierra y, sorprendentemente, que Linux es ilegal.... Si, si... Ilegal... Y lo expresan sin tapujos.

Este documento, demuestra hasta donde llega el ostracismo humano. Hasta donde, las mentes cerradas y dogmáticas, pueden llegar, mintiendose a si mismas (¿tendrán que leer el libro del gran Daniel Goleman "El punto ciego"?), y repitiendose una y otra vez, sin descanso, que el mundo es tal y como sus gurús dicen y ven... Este es el caso de una profesora estadounidense, que viendo como uno de sus alumnos distribuia una versión de linux (HeliOS) no solamente le ha amonestado y confiscado las copias, sino que se ha permitido el lujo de escribir al responsable de dicha distribución para increparle y dudar sobre la legalidad de sus actos (si... si... legalidad... tal y como suena). El texto está en inglés, pero merece la pena : http://linuxlock.blogspot.com/2008/12/linux-stop-holding-our-kids-back.html .

Aunque quizá no tengamos que irnos tan lejos para tener ejemplos claros de esta cerrazón. En nuestro propio país seguimos teniendo ciertas organizaciones con ánimo de lucro, que siguen llamando piratería a lo que los jueces, una y otra vez, denominan actos perfectamente legales. Todavía nuestra querida SGAE sigue diciendo que la compartición de archivos en redes P2P es un delito, cuando los jueces han sobreseido todos los casos de páginas de torrent y de enlaces a megaupload y rapidshare, que han sido denunciados. Si no es delito, no es delito. Y si no hay ánimo de lucro, no es delito. Así de simple. Pero algunos lo siguen llamando piratería.

Cielos abiertos, mentes cerradas. Quizá si venga al caso. No es que los defensores del software libre sean los nuevos paladines de la libertad. No es que vayamos a ser los nuevos gurús, o los nuevos mesias. Nada más lejos de la realidad. Lo que si terminamos siendo son las barricadas. Los que enseñen a los demás que hay algo más, que la realidad dogmática que algunos nos intentan inculcar. Mostrar los cielos abiertos, a las mentes cerradas.

lunes, 18 de agosto de 2008

Scrum

Ficha resumen de metodología Scrum para gestión de proyectos. Actualmente la más laureada de las metodologías.




Un saludo a todos.

miércoles, 13 de agosto de 2008

Errores más frecuentes en Sistema Oracle

A continuación se indican los errores más comunes encontrados en Sistemas Oracle. Siguiendo el Método Oracle de Mejora del Rendimiento, se deberían evitar todos estos errores. Si se evidencian estos errores en el sistema y no pueden ser eliminados, entonces se debe hacer una reingeniería de la Aplicación en aquellos aspectos en los que el esfuerzo par mejorar el rendimiento sea elevado.

1. Gestión de Conexiones Errónea

La Aplicación se conecta y desconecta para cada interacción de Base de Datos. Este problema es común en componentes midleware “no oficiales” en Servidores de Aplicaciones. Tiene un impacto en el rendimiento de 2 órdenes de magnitud y es completamente no escalable.

2. Mala utilización de cursores y de la Shared Pool.

La no utilización de cursores genera parsers repetitivos. Si no se utilizan variables bind se realizará hard parser de todas las sentencias SQL. Tiene un impacto en el rendimiento de un orden de magnitud y es completamente no escalable. Se deben utilizar cursores con bind variables que permiten que el cursor se abra y ejecute muchas veces. Se debe sospechar de Aplicaciones que generan SQL dinámico.

3. Transferencia incorrecta de datos de la Base de Datos

En muchas ocasiones la base de datos esta mal distribuida entre los discos disponibles. En otras ocasiones el número de discos es no apropiado pues configuran los discos en función de maximizar la capacidad global en lugar de hacerlo maximizando el ancho de banda de las operaciones de entrada/salida.

4. Problemas de configuración de Redo Log

En muchas ocasiones se asignan muy pocos ficheros de Redo Log y además son de pequeño tamaño. Los ficheros de Redo Log pequeños hacen que las verificaciones del sistema generen una alta carga en la buffer cache y en el subsistema de entrada/salida. Si hay demasiado pocos ficheros de Redo Log, el proceso de archivado no puede realizarse y la base de datos hasta que el proceso de archivado se pueda realizar.

5. Serialización de acceso a bloques de datos.

El acceso en serie a bloques de datos en la buffer cache es debido a un insuficiente número de free lists, free list groups, entradas de transacciones (INITRANS) u ordenación de segmentos de rollback. Este punto es especialmente habitual en Aplicaciones que realizan muchos INSERT, en Aplicaciones que han aumentado el tamaño de bloque de base de datos a 8K o 16K o en Aplicaciones con un elevado número de usuarios activos y pocos segmentos de rollback.

6. Full Table Scans de mucha duración

La existencia de full table scans de larga duración en operaciones online interactivas puede indicar un diseño poco eficiente de las transacciones, carencia de índices o sentencias SQL poco optimizadas. Estas operaciones son, por su naturaleza, intensivas respecto a transferencias del subsistema de entrada/salida y no escalables.

7. Ordenaciones en disco

Las ordenaciones en disco para operaciones online podrían indicar un diseño de transacciones poco eficiente, carencia de índices o sentencias SQL poco optimizadas. Estas operaciones son, por su naturaleza, intensivas respecto a transferencias del subsistema de entrada/salida y no escalables.

8. Elevado número de SQL recursivo de SYS.

Un elevado número de sentencias SQL recursivas debidas al usuario SYS puede indicar actividades de gestión de espacio, como puede ser asignación de extensiones. Esta situación es no escalable y tiene impacto en el tiempo de respuesta del usuario. La ocurrencia de sentencias SQL recursivas ejecutas por otro usuario diferente a SYS son debidas probablemente a SQL y PL/SQL y no suponen un problema.

9. Errores de Schema y problemas del Optimizador

En muchos casos, una Aplicación utiliza demasiados recursos debido a que el schema propietario de las tablas no ha sido migrado con éxito desde el entorno de desarrollo o desde una implementación previa. Ejemplos de esto es pérdida de índices o estadísticas incorrectas. Estos errores pueden ocasionar la ejecución de planes no óptimos y generar un rendimiento pobre. Cuando se migran Aplicaciones de rendimientos conocidos, se deben exportar, mediante DBMS_STATS, las estadísticas del schema para mantener la estabilidad de los planes de ejecución. De igual modo, los parámetros relativos al optimizador pueden tener preferencia sobre planes de ejecución previamente eficientes. Por estas razones, los schemas, las estadísticas de los schemas y la configuración del optimizador se deben manejar juntas como un grupo para garantizar la consistencia del rendimiento.

10. Uso de parámetros de inicialización no estándar.

Esto suele ocurrir debido a un consejo no adecuado o a suposiciones incorrectas. En particular, los parámetros asociados con SPIN_COUNT sobre latches y características del optimizador no documentadas pueden generar una gran cantidad de problemas que requieren una importante investigación.

11. Pensar que solo existen los 10 errores anteriores

jueves, 10 de julio de 2008

La teoría de la génesis social del conocimiento

Extraido del libro "Aspectos legales y de explotación del software libre Parte I", de la Universitat Oberta de Catalunya:

"El primer argumento utilizado por los defensores del software libre es filosófico-ideológico. El principio básico en la mayoría de las argumentaciones de los defensores del movimiento del software libre es que el conocimiento como tal no pertenece a nadie, pues cualquier conocimiento proviene de unos conocimientos anteriores y es una copia en mayor o menor medida de otras ideas.

En otras palabras, nadie tiene ideas que no hayan estado directa o indirectamente influenciadas por las relaciones sociales que mantiene en las comunidades de las que forma parte, y si la génesis es social, el uso debe permanecer social a su vez. La función principal de la generación de conocimiento es mejorar la sociedad y, por tanto, debe llegar al máximo número de personas.

La consecuencia más directa de esta filosofía de la génesis social del conocimiento es que la limitación de la copia, el uso o la reproducción del software no tiene sentido, pues dificulta la generación de nuevo conocimiento y no permite que cumpla su principal objetivo: revertir en la comunidad.

Este argumento lleva a la crisis del sistema tradicional de derechos de autor y modifica las estructuras típicas de las licencias de uso."

jueves, 3 de julio de 2008

Uso de índices

He aquí la pregunta que muchos se hacen cuando se encuentran con problemas de rendimiento en sus tablas.... ¿he de crear un índice?. Veamos en que criterios podemos basarnos.

Como norma general, para cualquier tipo de índice, debe limitarse el número de estos y crear siempre los que exclusivamente sean necesarios, es decir, el menor número posible dentro de todos los que hagan falta.

La selectividad de un índice es la relación entre el número de valores distintos de una columna indexada y el número de registros de la tabla. Si una tabla tiene 1000 registros, y una columna indexada de la tabla tiene 950 valores diferentes, la selectividad del índice es 0.95 (950/1000). La mejor selectividad es 1. Los índices únicos sobre columnas no nulas y las claves primarias siempre tienen selectividad 1.

La selectividad de un índice nos da una medida de su utilidad para evitar I/O en la ejecución de sentencias contra la tabla. Si un índice sobre una tabla de 1000 registros tiene sólo 5 valores diferentes, entonces su selectividad es muy pobre (5/1000 = 0.005). Para cada posible valor de este índice, habrá un promedio teórico de 200 filas. En este caso, podría ser más interesante realizar un full table scan en vez de acceder vía índice a esta tabla, si bien se debe comprobar con datos reales de acceso a la misma.

Si se está usando CBO, el optimizador no realizará accesos a tablas a través de índices con una selectividad muy baja.

Puede sin embargo ser conveniente usar índices con baja selectividad, si se cumplen varias condiciones.

• Las sentencias empleadas no usan variables bind o se ha implementado algún mecanismo para distinguir aquellas consultas que deben emplear el índice, como por ejemplo, uso de literales, basándose en la distribución de datos.
• El índice está analizado con histogramas.
• El valor usado en las condiciones tiene muy poca cardinalidad.

Un saludo para todos.

miércoles, 2 de julio de 2008

Programación Orientada a Objetos en Oracle


- INTRODUCCIÓN:

Los type de Oracle son tipos de datos que declara el usuario, y que puede ser utilizado para la declaración de variables, tanto en procedimientos, como en funciones, o incluso en tablas.

Con el tiempo, los type de Oracle, han derivado en lo que en Java o C++ se denominan clases. Es decir que cada tipo esta formado por sus objetos y sus atributos:

· Los objetos son variables, que a su vez pueden pertenecer a otros tipos.

· Los atributos son procedimientos o funciones que pertenecen al type.

A parte, los type de Oracle tienen todas las características propias de la programación orientada a objetos:

· Encapsulación: El type contiene dentro todos los objetos y atributos correspondientes, siendo estos últimos transparentes para el usuario.

· Herencia: Un type puede heredar todos los objetos y atributos de otro.

· Polimorfismo: El type de oracle, una vez heredado puede añadir nuevos objetos y atributos.

- TYPE OBJECT:

Los tipos de objeto, crean tipos de variable, que puede contener, objetos de otro tipo y métodos. La sintaxis de creación es:

CREATE OR REPLACE TYPE NOMBRE IS OBJECT (

VARIABLE1 TIPO_DATO,

VARIABLE2 TIPO_DATO,

VARIABLEN TIPO DATO,

MEMBER PROCEDURE NOMBRE_PROC (VAR IN TIPO_DATO) ,

MEMBER FUNCTION NOMBRE_FUNC (VAR IN TIPO_DATO) RETURN TIPO_DATO

);

CREATE OR REPLACE TYPE BODY NOMBRE IS (

MEMBER PROCEDURE NOMBRE PROC (VAR) IS

VRIABLE1 TIPO_DATO,

VARIABLE2 TIPO_DATO,

VARIABLEN TIPO DATO

BEGIN

CODIGO;

END NOMBRPE PROC;

END;

Como podemos observar, los tipos tienen dos partes: el TYPE, que contiene la especificación de objetos y métodos, y el TYPE BODY, que contiene el código de los métodos del tipo. Evidentemente sólo se hará el TYPE BODY si existen métodos en el tipo.

Una vez creado el tipo, Oracle lo va a interpretar como un tipo de dato, y como tal podrá ser usado en cualquier parte. Así, al declarar una variable en un procedimiento o en una función, podremos usar el tipo como si se tratara de otro tipo de datos tales como varchar2 o number.


De hecho, también se puede utilizar como tipo de datos en tablas, declarandolo después como una neested table, de la siguiente manera:

CREATE OR REPLACE TYPE CourseList AS TABLE OF VARCHAR2(64);

CREATE TABLE department (
name VARCHAR2(20),
director VARCHAR2(20),
office VARCHAR2(20),
courses CourseList)
NESTED TABLE courses STORE AS courses_tab;

Una vez creada la tabla, se pueden realizar operaciones de insert, update, delete o select como en cualquier otra tabla. Para más información visitar la página : http://www.psoug.org/reference/nested_tab.html .

- TYPE TABLE:

El tipo de tabla, crea una tabla física en base de datos, de un tipo de datos concreto (lo cual incluye cualquier otro type que haya creado en la base de datos) sobre la que, a lo demás, podremos ejecutar sentencias sql. Para poder ejecutar sentencias SQL sobre un tipo tabla, hay que basar este en un tipo de objeto (type object) en el cual cada objeto será el campo de la base de datos; así como crear el tipo tabla a nivel de base de datos. Si el tipo de tabla es creado a nivel de procedimiento o función no podrá ser usado para ejecutar sentencias SQL.

La sintaxis de creación es la siguiente:

CREATE OR REPLACE TYPE NOMBRE_TIPO IS TABLE OF TIPO_DATO;

Una vez creado el tipo, podremos usarlo dentro de cualquier procedimiento o función. Para ello tendremos que inicializarlo, con un constructor. Una vez hecho esto, se utilizará con la referencia al tipo de dato usado (en caso de que sea otro type). Por ejemplo:

Creamos el type que nos va a decir los campos:

CREATE OR REPLACE TYPE PERSON IS OBJECT(

NOMBRE VARCHAR2(10),

APELLIDOS VARCHAR2(15));

CREATE OR REPLACE TYPE PERSON_TABLE IS TABLE OF PERSON;

Para usarlo en un procedimiento, lo haríamos de la siguiente manera:

CREATE OR REPLACE PROCEDURE INTRO_PERSON IS

DECLARE

PERSON_DATES PERSON_TABLE;

NUM_PERSON NUMBER;

BEGIN

PERSON_DATES := PERSON_TABLE(); -- Constructor que inicializa la variable.

/* Introducimos los datos que queremos. En este caso, 3 nombres. Hacemos referencia,

como veis Al tipo inicial, y no al tipo de tabla, a la hora de rellenarlo. Esto es así

imprescindible. Con respecto al rellenado de las variables del tipo, se puede hacer referencia

por posición (escribiendo en la Posición adecuada el dato), o por referencia (tal y como está

relleno en el ejemplo)*/

PERSON_DATES.EXTEND;

PERSON_DATES(1) := PERSON(NOMBRE => ‘JUAN’, APELLIDOS => ‘RAMIREZ’);ç

PERSON_DATES.EXTEND;

PERSON_DATES(1) := PERSON(NOMBRE => ‘PEDRO’, APELLIDOS => ‘RAMIREZ’);

PERSON_DATES.EXTEND;

PERSON_DATES(1) := PERSON(NOMBRE => ‘FRANCISCO’, APELLIDOS => ‘PEREZ’);

/*Aplicamos ahora una sentencia SQL sobre la variable PERSON_DATES*/

SELECT COUNT(APELLIDOS)

INTO NUM_PERSON

FROM TABLE(CAST(PERSON_DATES AS PERSON_TABLE))

WHERE APELLIDOS LIKE ‘REMIREZ’;

DBMS_OUTPUT.PUT_LINE (‘Nº DE PERSONAS: ’ || NUM_PERSON) ;

END;

Podemos ver que al aplicar la sentecia SQL hay dos palabras clave importantes: TABLE y CAST.

La primera indica a Oracle que se trata de una tabla de memoria, y no de una tabla de base de datos.

La segunda hace un cast de conversión. Es necesario hacerlo, porque si no Oracle no reconoce el tipo.

- TYPE BODY:

Los procedimientos y funciones miembros de un tipo se programan igual que cualquier otro procedimiento o función. Lo único a tener en cuenta es que para hacer referencia a cualquiera de los atributos del tipo (cualquiera de las variables), se pondría la palabra self delante.

Ejemplo:

Supongamos que al typo PERSON creado anteriormente le añadimos como member functión la función validar:

MEMBER FUNCTION VALIDAR RETURN NUMBER IS

VALIDACION NUMBER;

BEGIN

IF SELF.NOMBRE = SELF.APELLIDOS THEN

VALIDACION := 1;

ELSE

VALIDACION = 0;

END IF;

RETURN VALIDACION;

END;

El procedimiento del ejemplo anterior podría usarse de la siguiente manera:

CREATE OR REPLACE PROCEDURE INTRO_PERSON IS

DECLARE

PERSON_DATES PERSON_TABLE;

NUM_PERSON NUMBER;

VALIDAR NUMBER;

BEGIN

PERSON_DATES := PERSON_TABLE(); -- Constructor que inicializa la variable.

/* Introducimos los datos que queremos. En este caso, 3 nombres. Hacemos referencia,

como veis Al tipo inicial, y no al tipo de tabla, a la hora de rellenarlo. Esto es así

imprescindible. Con respecto al rellenado de las variables del tipo, se puede hacer referencia

por posición (escribiendo en la Posición adecuada el dato), o por referencia (tal y como está

relleno en el ejemplo)*/

PERSON_DATES.EXTEND;

PERSON_DATES(1) := PERSON(NOMBRE => ‘JUAN’, APELLIDOS => ‘RAMIREZ’);

/*Validamos si el nombre no coincide con el apellido*/

VALIDAR:= PERSON.VALIDAR;

IF VALIDAR = 1 THEN

RAISE DUP_VAL_ON_INDEX;

END IF;

PERSON_DATES.EXTEND;

PERSON_DATES(1) := PERSON(NOMBRE => ‘PEDRO’, APELLIDOS => ‘RAMIREZ’);

/*Validamos si el nombre no coincide con el apellido*/

VALIDAR:= PERSON.VALIDAR;

IF VALIDAR = 1 THEN

RAISE DUP_VAL_ON_INDEX;

END IF;

PERSON_DATES.EXTEND;

PERSON_DATES(1) := PERSON(NOMBRE => ‘FRANCISCO’, APELLIDOS => ‘PEREZ’);

/*Validamos si el nombre no coincide con el apellido*/

VALIDAR:= PERSON.VALIDAR;

IF VALIDAR = 1 THEN

RAISE DUP_VAL_ON_INDEX;

END IF;

/*Aplicamos ahora una sentencia SQL sobre la variable PERSON_DATES*/

SELECT COUNT(APELLIDOS)

INTO NUM_PERSON

FROM TABLE(CAST(PERSON_DATES AS PERSON_TABLE))

WHERE APELLIDOS LIKE ‘REMIREZ’;

DBMS_OUTPUT.PUT_LINE (‘Nº DE PERSONAS: ’ || NUM_PERSON) ;

EXCEPTION

WHEN DUP_VAL_ON_INDEX

DBMS_OUTPUT.PUT_LINE (‘NO PUEDE COINCIDIR EL NOMBRE CON EL

APELLIDO’) ;

END;

- HERENCIA:

Para heredar se usa el comando UNDER. Si cogemos el tipo PERSON, del ejemplo anterior para crear un nuevo tipo, que a lo demás incluya el DNI, la sentencia sería:

CREATE OR REPLACE TYPE PERSON_COMPLEX UNDER PERSON (

DNI VARCHAR2(10)

);

Esto crearía un tipo llamado PERSON_COMPLEX, que tendría todos los atributos y métodos del tipo PERSON, más el atributo DNI.

El principio de neutralidad tecnológica de la Ley 11/2007

Muchas gracias Kriptópolis.

http://www.kriptopolis.org/neutralidad-tecnologica-y-legacy


" Por Fernando Acero

En algunos foros en los que he participado recientemente, se me ha preguntado por mi opinión sobre el concepto de Neutralidad Tecnológica que aparece en la Ley 11/2007 de Acceso Electrónico de los Ciudadanos a los Servicios Públicos. Por ello, he decidido escribir este artículo sobre lo que yo entiendo e interpreto al respecto.

Dicha Ley, en su artículo 4.i dedicado a los Principios Generales, dice lo siguiente:

"Principio de neutralidad tecnológica y de adaptabilidad al progreso de las técnicas y sistemas de comunicaciones electrónicas garantizando la independencia en la elección de las alternativas tecnológicas por los ciudadanos y por las Administraciones Públicas, así como la libertad de desarrollar e implantar los avances tecnológicos en un ámbito de libre mercado. A estos efectos las Administraciones Públicas utilizarán estándares abiertos así como, en su caso y de forma complementaria, estándares que sean de uso generalizado por los ciudadanos."

Dicha Ley es aplicable y de obligado cumplimimento para todas las Administraciones Públicas, es decir, para la General, las Autonómicas y para las Locales y está previsto que se desarrolle mediante un Real Decreto, que contendrá los Esquemas Nacionales de Interoperabilidad y de Seguridad. También es evidente para mi, que esta Ley si se aplica como se debe, implicaría cambios en los modelos de negocio de algunas empresas, sobre todo, de las de software privativo, para ser competitivas en el nuevo entorno legal. Pero también es cierto, que las empresas se han de adaptar a otras muchas leyes, desde las Tributarias, a las de Consumo, pasando por las de Contratos en el Sector Público, sin que ello suponga un problema insalvable para hacer dinero..."

jueves, 26 de junio de 2008

Free Software: Modelos de seguridad

Aún no hace mucho tiempo que estuve discutiendo con unos compañeros sobre los modelos de publicación del código fuente de los programas creados, desde el punto de vista de la seguridad.

Básicamente, la discusión venía porque algunos no terminaban de ver seguro la publicación pública del código. Aparentemente esto presenta varios problemas:

  1. Cualquiera puede auditar el código, y aprovecharse de las vulnerabilidades encontradas.
  2. ¿Como sacar negocio de un software que cualquiera puede compilar y utilizar?¿Quien va a pagar por lo que puede obtener gratis?
Primeramente veamos cuales son las diferentes alternativas en publicación de código fuente:

  1. Security Throw Obscurity: No publicar nada.
  2. Responsible Disclousure: Publicar tanto el código como las vulnerabilidades, pero dentro de circulos donde se le pueda sacar un provecho "positivo". Digamos que una publicación pública, pero limitada.
  3. Full Disclousure: Publicarlo a los cuatro vientos.
Mediante el método de Security Throw Obsurity, en principio, parece que el nivel de seguridad es mayor. Es el método utilizado, por ejemplo, por Micro$oft. Pero... ¿es realmente seguro?. La respuesta la sabeis ya casi todos: no. El que no publiques el código ni las vulnerabilidades no te libra ni de que los demás usen tus programas sin permiso ni de que estas vulnerabilidades sean publicadas. Está visto, a lo demás, que el hecho de que se publiquen las vulnerabilidades, acelera el proceso de corrección de estas. A lo demás, la no publicación del código puede llevar a que haya vulnerabilidades no encontradas, que algún hacker avispado pueda estar utilizando si que lo sepas. Decididamente no es el mejor método.

Responsible Disclosure: Es, sin duda, el método que ofrece más confianza. Puedes controlar, hasta cierto punto, quien accede a tu código, y evitas que individuos no deseables accedan a él sin control ninguno. Es el método de moda, por decirlo de alguna manera. Empresas como Sun Microsystems, Oracle, HP o IBM lo utilizan, ya desde hace algún tiempo, en todos sus proyectos Open Source (que cada día son más). Incluso la todo poderosa Micro$oft se está subiendo al carro.

Full disclousure: el que acceda todo el mundo es el método en el que se basaron inicialmente al crear el software libre. Linux, Open Office, Firefox o MySQL se han basado desde sus inicios en este modelo. Evidentemente han funcionado bien, sobre todo gracias a una trabajadora comunidad que ha hecho grandes progresos. Es un método que, disponiendo de grandes comunidades va bien, pero en caso de no ser un software de amplio espectro puede dar problemas. Tenedlo en cuenta.

Con respecto al modelo de negocio, habría que mirar el modelo económico de recursos gratuitos. Llevamos ya años utilizandolo con éxito, y desde luego a las empresas que lo utilizan no les va nada mal. Se basa, sobre todo en hacer bien el trabajo, y ofrecer servicios en torno al producto que se ofrece. Empresas como Red Hat, Suse, Google o incluso ahora Oracle, sacan pingües beneficios de estas prácticas. Esta claro que dinero se puede obtener. De hecho es el modelo que está triunfando a nivel mundial. El secreto del éxito se basa en poder ofrecer los mismos servicios que la competencia, a un menor coste, lo cual es evidentemente muy ventajoso.

Cada uno que saque sus conclusiones. Evidentemente cada modelo ha de usarse según las circunstancias, y no debería elegirse a la ligera. Yo, aquí dejo las opciones.

Oracle XE en Oracle Interprise Linux

Primeramente, es muy importante prestar mucha atención a los prerequisitos de instalación de Oracle XE. Hay que tener en cuenta tener libre, al menos, 1,5Gb en disco duro, y una partición Swap de, al menos, 1024Mb. Si no se cumplen estos requisitos, no se instalará.

La instalación de Oracle Interprise Linux es igual que la de cualquier distribución Red Hat.

Una vez instalado, nos bajamos de la página oficial de Oracle el fichero de instalación en rpm (Red hat Package Management): http://www.oracle.com/technology/software/products/database/xe/index.html.

En otras versiones de linux deberíamos comprobar que están instaladas algunas librerias(Agregar el repositorio (http://oss.oracle.com/), pero como nosotros disponemos del propio linux de Oracle, no nos hará falta. Vienen instaladas de serie.

Una vez descargado el rpm es hora de instalar el producto lo cual no es cosa del otro mundo porque basta con el siguiente comando:

rpm -ivh oracle-xe-10.2.0.1-0.1.i386.rpm

Entonces, si no se ha hecho caso a los prerequisitos, y no has dejado la suficiente swap, dará el siguiente error:

Preparing… ########################################### [100%]
This system does not meet the minimum requirements for swap space. Based on he amount of physical memory available on the system, Oracle Database 10g Express Edition requires 988 MB of swap space. This system has 800 MB of swap space. Configure more swap space on the system and retry the installation.
error: %pre(oracle-xe-10.2.0.1-0.1.i386) scriptlet failed, exit status 1
error: install: %pre scriptlet failed (2), skipping oracle-xe-10.2.0.1-0.1

Pues toca incrementar temporalmente el swap de Linux:

su - root
dd if=/dev/zero of=extraswap bs=1k count=900000
chmod 600 extraswap
mkswap extraswap
swapon extraswap

Para verificar que el swap se haya asignado se puede digitar el siguiente comando:

grep SwapTotal /proc/meminfo

Si luego deseas desabilitar este swap temporal :

su - root
swapoff extraswap
rm extraswap

Ahora si:

rpm -ivh oracle-xe-10.2.0.1-1.0.i386.rpm
Preparing… ########################################### [100%]
1:oracle-xe warning: /etc/init.d/oracle-xe saved as /etc/init.d/oracle-xe.rpmorig ########################################### [100%]

Executing Post-install steps…

oracle-xe 0:off 1:off 2:off 3:on 4:off 5:on 6:off
You must run ‘/etc/init.d/oracle-xe configure’ as the root user to configure the database.

Y luego ejecutamos el script de configuración:

/etc/init.d/oracle-xe configure

Oracle Database 10g Express Edition Configuration
————————————————-
This will configure on-boot properties of Oracle Database 10g Express Edition. The following questions will determine whether the database should be starting upon system boot, the ports it will use, and the passwords that will be used for database accounts. Press to accept the defaults. Ctrl-C will abort.

Specify the HTTP port that will be used for Oracle Application Express [8080]:

Specify a port that will be used for the database listener [1521]:

Specify a password to be used for database accounts. Note that the same password will be used for SYS and SYSTEM.
Oracle recommends the use of different passwords for each database account. This can be done after initial
configuration:

Confirm the password:

Do you want Oracle Database 10g Express Edition to be started on boot (y/n) [y]:n

Starting Oracle Net Listener…Done

Configuring Database…Done

Starting Oracle Database 10g Express Edition Instance…Done

Installation Completed Successfully.

To access the Database Home Page go to “http://127.0.0.1:8080/apex”

Y listo con estos pasos ya tenemos el Oracle XE y APEX en nuestro equipo.
Powered By Blogger

Datos personales