26 ene 2010

Uso de palabra INTERFAZ

Hace algun tiempo un administrador de proyectos que tenia le conuslto a Don Fernando Diez, Filólogo del periodico LA NACION sobre el uso de la palabra interfaz. He aqui su respuesta:

INTERFAZ.

La voz inglesa interface, que significa, en informática, ‘conexión física y funcional entre dos aparatos o sistemas independientes’, se ha adaptado al español en la forma INTERFAZ: «Su interfaz gráfica y capacidades de acceso a Internet facilitarán aún más el uso del PC» (Vanguardia [Esp.] 30.8.95).

Su plural es INTERFACES (→ plural, 1g). Aunque no es infrecuente su uso en masculino, debe emplearse en FEMENINO, ya que esta palabra incluye en su forma el sustantivo femenino FAZ.

Con este sentido, NO debe usarse la forma interfase, que no responde ni a la pronunciación ni a la estructura semántica del étimo inglés, que se ha formado con el sustantivo face, cuyo equivalente español es FAZ, no fase. Tampoco se aconseja usar con este significado el término interficie.


Aparte les dejo un par de definiciones de la RAE con respecto a este tema:

interfaz:

(Del ingl. interface, superficie de contacto).

1. f. Inform. Conexión física y funcional entre dos aparatos o sistemas independientes.


interfase:


1. f. Biol. Período del ciclo celular en el que tiene lugar la síntesis de proteínas y la replicación del material genético.

2. f. Fís. y Quím. Superficie de separación entre dos fases.


Así que, como ven, esta claro: únicamente debe usarse interfaz e interfaces en nuestros quehaceres informáticos.

7 ene 2010

Uno de viejitos

Hace unos días, me asignaron a un proyecto de un cliente que tiene su base de Datos en SQL Server 2000 la cual tenia bastante tiempo de no travesear. Una de las cosas que tenia que atender era habilitar el control de errores de un store procedure que ya existía y bitacorearlos en otra tabla a modo de monitor.

Como alguien dijo alguna vez: "¡No se haga la barba en seco!" refiriéndose a lo doloroso que eso podía llegar a ser. El manejo de errores (asumiendo que se le pueda llamar asi) es increíblemente engorroso, problemático e inflexible (fui generoso en los adjetivos).

Empecemos mi queja: resulta que la variable @@ERROR que es lo único que tenemos para determinar errores en SQL Server 2000 (Ni siquiera piensen en estructuras tipo Try Cacth), solo se puede capturar inmediatamente despues de la sentencia que produce el error. Osea si tenemos algo como esto:

...
WHILE algunacondicion
...
BEGIN
BEGIN TRANSACTION

INSERT INTO miTabla1 (campo1, campo2) VALUES (@parametro1, @parametro2)

UPDATE miTabla2 SET campo3 = @parametro3 WHERE campo4 = @parametro4

@variable1 = @varaible2 / @variable3

COMMIT TRANSACTION
...
END
...

y quisiéramos guardar en una tabla de bitácora, si se produce un error, cualquiera que fuese: por ejemplo que en el INSERT no se pudo ejecutar por problemas de llaves primarias, o que el UPDATE no se pudo ejecutar por problema de llave foráneas o que se dio una división por cero en la operación matemática; tendríamos que hacer algo mas o menos asi:

...
WHILE algunacondicion
BEGIN
....
BEGIN TRANSACTION

INSERT INTO miTabla1 (campo1, campo2) VALUES (@parametro1, @parametro2)
IF @@ERROR <> 0
BEGIN
GOTO logError
END

UPDATE miTabla2 SET campo3 = @parametro3 WHERE campo4 =@parametro4
IF @@ERROR <> 0
BEGIN
GOTO logError
END

@variable1 = @varaible2 / @variable3
IF @@ERROR <> 0
BEGIN
GOTO logError
END

COMMIT TRANSACTION
...
END
...
logError:
...

Luego del tag logError deberíamos tener las sentencias para el tratamiento de errores así como otros "GOTO" para seguir con la ejecución del store procedure.

Increible ¿cierto?

Foy: Ahora, y el mensaje del error ¿como lo capturamos para guardarlo?
SQLServer 2000: ¿Mensaje de error? ¿Que es eso?

Así es, no hay manera de capturar el mensaje de error o como decía un articulo al respecto: "There is no supported way to retrieve the full text of an error message in SQL 2000". Bueno en realidad se supone que si hay una manera, en este articulo se explica que haciendo uso de un store procedure de sistema (xp_readerrorlog) se puede, sin embargo se requiere tener acceso al mismo siendo owner de la base de datos, a mi particularmente no me sirve esta solución (ademas no tuve oportunidad de probar esta solución por eso señalo "se supone que funciona").

En vista de esto no quedo más remedio que usar algo como esto:

SELECT @Mensaje= MSG.description from master.dbo.sysmessages MSG
INNER JOIN sys.syslanguages LANG ON MSG.msglangID=LANG.msglangid
WHERE MSG.error=@Error

Donde @Error es el numero de error que capturamos y @Mensaje es donde dejaremos la descripcion del error. El problema es que en @Mensaje se guardan mensajes como

Cannot insert the value NULL into column '%.*ls', table '%.*ls'; column does not allow nulls. %ls fails.

Por lo que se puede apreciar no aparecen reemplazados los tags por lo que la informacion podría y de hecho es escasa.

La otra opción es escribir mensajes de error personalizados dependiendo del numero de error pero llegado ha este punto ya estaba cansado de las peripecias que habia tenido que hacer. por lo que me quede con el mensaje sin reemplazar tags. Si alguien sabe alguna forma de hacerlo muy bienvenida será, siempre que la recomiendacion no se sea ¿Por que no migras a 2005?...

5 ene 2010

Feliz 2010

Ya pasaron las fiestas, las celebraciones y ya estamos de vuelta en las faenas diarias de todos los días comunes y corrientes. Espero que este 2010 sea mejor que el 2009 pero no tan bueno como el 2011.

Que soplen vientos favorables para todos mis amigos y conocidos. Y que, aunque es mucho pedir, el mundo mejore aunque sea un poquito para bienestar de todos.

Próspero 2010!