viernes, 13 de diciembre de 2013

Una de calculadoras....

Muchos las dejaron de lado, pero las calculadoras de bolsillo o de mesa siguen siendo de uso frecuente. Cuando tengo que hacer muchas cálculos las prefiero frente a la calculadora en mi PC o tablet.

Solemos dar por buenos los resultados de una calculadora, sin cuestionarnos mucho. La experiencia, y alguna mala pasada, me han llevado a no confiar a ciegas en la calculadora. Si el resultado no me parece razonable, lo verifico. De seguir obteniendo resultados poco razonables, cuestiono la calculadora. 
Es bien sabido que las calculadoras usan una representación interna de los números reales. Esa representación tiene limitaciones, que puede llevar a que los cálculos no den resultados correctos. Cuando estaba en el liceo recuerdo varias pruebas para las calculadoras. Es  interesante la que publica este sitio:
arcsin (arccos (arctan (tan (cos (sin (9) ) ) ) ) ) 
La idea es poner la calculadora en modo grados sexagesimales, y ejecutar sucesivamente varias operaciones trigonométricas y sus inversas. El resultado esperado es el numero desde el que partimos.  Esta disponible una discusion detallada de la prueba propuesta. Y una tabla con los resultados obtenidos por distintas calculadoras. Me sorprendieron algunos resultados, con calculadoras de alta gama. Cuando encuentre mi calculadora, voy a probar que resultados da.

jueves, 12 de diciembre de 2013

NTP ... mantener los relojes sincronizados

NTP es un servicio del que no se ve mucho ruido. No es difícil sincronizar la hora de un servidor o red contra un servidor maestro, local a nuestra red. Los servidores maestros pueden servirse de otro servidor, que consideremos fiable; o alguno del pool.  Y funciona bastante bien.
Un reloj Atómico

Hace un par de años atrás puse un script que controlaba mi PC, sincronizado vía NTP, comparándolo contra otro reloj maestro.  Luego de varios meses corriendo el script todos los días me puse a hacer unas estadísticas rápidas. La mayoría de las mediciones, más de un 90 %, daban diferencias menores a 1x10-3 segundos. Unas pocas medidas, menos de 1%, andaban en 1x10-1 segundos. Lamentablemente, con un cambio de trabajo no guarde el script ni los datos. Voy a repetir el experimento.

Lo concreto es que hace poco me pidieron que diera una mano con unos relojes que no estaban funcionando bien. Me vino bien para repasar cosas que utilizo poco.NTP es un protocolo realmente complejo, la tarea a llevar a cabo lo exige. Las condiciones de trabajo no son las más favorables, la latencia de la red afecta mucho esta tarea.

Algunos recursos utiles para trabajar con NTP:
  • Sitio oficial:  De donde se puede bajar la documentación del protocola e implementaciones.
  • NTP Pool Project: Un listado de servidores que dan acceso publico. En sudamerica tenemos pocos, puede ser un proyecto interesante agregar algunos más.
  • Un Newsgroup: El grupo comp.protocols.time.ntp esta disponible por google groups, para quienes no tenemos acceso a un servidor de news. 
  • Recomendaciones para servidores publicos: Como deberian estar configurados aquellos servidores disponibles al publico.
  • Como interpretar la salida de ntpq -p: Este comnado nos ayuda a conocer el estado de un servidor.
Con este repaso me enteré de la existencia de PTP, un protocolo para sincronizar relojes que lo hace adecuado para sistemas de control y adquisición de datos.


jueves, 5 de diciembre de 2013

Editando la configuracion de Oracle

Estoy haciendo mis primeras armas como DBA en ORACLE. Aplicando unos cambios en la configuración de un servidor me enfrenté al error ORA-00838, que resolví con esta receta. Para resolverlo tuve que hacer cambios en la configuración, pero la configuración está en un archivo binario.

Lo primero es exportar la configuración a un archivo de texto:
create pfile='/tmp/pfile.backup' from spfile;
Esto genera un archivo de texto, /tmp/pfile.backup, que podemos editar con un archivo de texto. Luego de editar el archivo de texto, generamos el archivo binario para arrancar el motor:
create spfile from pfile='/tmp/pfile.backup';
Luego de eso, podemos arrancar el motor, con el comando startup.