lunes, 20 de mayo de 2019

Google ha iniciado el desarrollo de un nuevo sistema operativo que no estará controlado por Google.

Hoy la noticia es que Android y las herramientas de Google estarán vetadas para el fabricante chino Huawei.

Para mi este movimiento podría salirles más caro a los del buscador a medio plazo que el que en principio se supone sufrirá la compañía China.

Este puede ser el revulsivo que necesita la gigantesca industria China para ponerse a una y lanzar el folk de android que pueda terminar haciendo sombra al propio android.

A día de hoy los fabricantes Chinos y el propio potencial de su mercado local es más que suficiente para impulsar un nuevo futuro sistema operativo estándar.

Quizás, hoy sea uno de esos días en los que un árbol caído en mitad del camino te enseña un lugar totalmente desconocido donde quedarte a vivir.

martes, 19 de febrero de 2019

Comportamiento Indefinido en FirebirdSQL 3 debido al “Cursor Stability”

FirebirdSQL 3.x trae una sorpresita que te puede complicar bastante la vida en el caso de que tengas en una tabla TRIGGERS que modifican otros registros de su propia tabla.

El problema viene cuando haces un UPDATE de varias filas modificando el FIELD1, y por ejemplo, el TRIGGER del primer registro hace un cambio en el segundo registro en el FIELD2. El resultado que obtienes es que ese cambio realizado por el TRIGGER desaparece, por que el UPDATE al llegar al segundo registro dejara el valor del FIELD2 que tenía en el momento en el que se lanzó el UPDATE. Vamos que utiliza el cursor en vez de utilizar la ultima versión del registro como era de esperar, y que dicho sea de paso, Firebird 2.5 lo hace a la perfección.

Ahora si haces un UPDATE sobre el primer registro y luego un UPDATE a parte para el segundo registro si que se mantendrá en cambio que se realizó en el FIELD2. Incluso si se hace sobre la misma transacción.

Si no he sido capaz de explicarlo bien espero que con el código de abajo se entienda mejor.

Esto viene provocado por una nueva funcionalidad que denominan “Cursor Stability” y tras una pequeña mención en la documentación ponen una nota que dice más o menos...

“El estándar SQL estipula que la instrucción MERGE debe generar un error si se encuentran múltiples coincidencias. Firebird no es tan estricto en este sentido, pero su comportamiento debe considerarse indefinido en estos casos.”

Firebird - SQL Language Changes

O sea… que ahora resulta que ya no tenemos la certeza de que los TRIGGERs funcionan en todos los casos, y por lo tanto, ahora la informática ha pasado de ciencia cierta a ciencia infusa. Teníamos programas que funcionaban perfectamente con las versiones anteriores de Firebird y al actualizar el motor, de repente, empiezan a trabajar con un comportamiento indefinido.

Yo personalmente hubiera preferido encontrarme de repente con errores al actualizar Firebird en desarrollo. La solución adoptada por los chicos de Firebird nos ha llevado a encontrarnos el problema ya en producción, con datos deteriorados por ese comportamiento indefinido.

Lo tengo reportado como un BUG en Firebird Tracker, aunque según el equipo encargado del desarrollo de Firebird no lo es.

CREATE TABLE TEST_UPDATE
(
  ID INTEGER NOT NULL,
  FIELD1 INTEGER,
  FIELD2 INTEGER,
  CONSTRAINT PK_TEST_UPDATE PRIMARY KEY (ID)
);

SET TERM ^^ ;
CREATE TRIGGER TEST_UPDATE_AU FOR TEST_UPDATE ACTIVE AFTER UPDATE POSITION 0 AS
begin
  Update TEST_UPDATE
  SET FIELD2=NEW.FIELD1
  Where ID=NEW.ID+1;
end ^^
SET TERM ; ^^

Insert into TEST_UPDATE (ID,FIELD1,FIELD2) VALUES (1,0,0);
Insert into TEST_UPDATE (ID,FIELD1,FIELD2) VALUES (2,0,0);
Insert into TEST_UPDATE (ID,FIELD1,FIELD2) VALUES (3,0,0);
Insert into TEST_UPDATE (ID,FIELD1,FIELD2) VALUES (4,0,0);
Insert into TEST_UPDATE (ID,FIELD1,FIELD2) VALUES (5,0,0);

Update TEST_UPDATE
Set Field1=10
Where ID in (2,3);
=== In Firebird 3.0.4 ===
Select *
From TEST_UPDATE;

ID,FIELD1,FIELD2
1,0,0
2,10,0
3,10,0 <== This value must be 10
4,0,10
5,0,0

=== In Firebird 2.5 is Correct!!!! ===
ID,FIELD1,FIELD2
1,0,0
2,10,0
3,10,10
4,0,10
5,0,0

lunes, 21 de marzo de 2016

Menú Desaparecido en DraftSight para Linux.

Si de repente has dejado de ver el menú de DraftSight y no eres capaz de volver a recuperarlo, solo tienes cerrar el programa, entrar en la carpeta /home//.config y eliminar o renombrar las carpetas DraftSight y draftsight. Al volver a entrar te volverá a cargar la configuración por defecto.

jueves, 1 de noviembre de 2012

Pantalla principal con Ubuntu 12.08, GNOME y Driver NVIDIA

Tengo dos monitores conectados a mi tarjeta gráfica NVIDIA y desde la configuración de la pantalla no era capaz de indicar que la principal (donde aparece la barra) era la otra. Al final ya sabéis... hay que entrar en el todopoderoso terminal.

Con el comando xrandr obtendras la información de las "salidas" que tienes disponible y cuales están conectada.

Averigua el nombre de la salida "output" que quieres convertir en principal y ejecuta el comando:

sudo xrandr --output [salida] --primary

Ejemplo: sudo xrandr --output DVI-I-1 --primary

Espero que os sirva.