Un monitor de Servidores




Si este es un monitor el uso de CPU y memoria ademas quieres estar revisando el estado del load average y te aburriste de ver el TOP o mas aun te aburriste de pedirle al administrador de servidores  que instale el Nagios u otra cosa.

https://hub.docker.com/r/netdata/netdata


Término BUG en programación.

DEBUG


Todos en mas de alguna vez hemos utilizado el termino de BUG (Bicho) en la programación. y todos entendemos que se refiere a algún error de programación y desde aquí es donde nace la otra palabra mas utilizada DEBUG o DEBUGGING que es el proceso que realizamos para localizar y eliminar un error en nuestra programación.

¿Pero de donde nace esta palabra o este concepto?



En 1945, el MARK II  sufrio un fallo en uno de los miles de relés electromagnético.

Cuando se investigó, se encontró una polilla que había provocado que este relé quedase abierto.
Este incidente es conocido como el origen de la palabra BUG para describir un error en un sistema informático.

Dejemos la historia y ahora la programación.

Que se puede hacer cuando comenzamos un DEBUG.


  1. Break : Marca una ubicación de un punto de control. Linea en donde situaremos el corte.
  2. Step : Ejecutamos el programa linea alinea, al menos que indiquemos lo contrario. Este puede ser tanto hacia adelante o atrás
  3. Finish Debugger : Damos termino al proceso de debug.
  4. Pausa : Su nombre lo indica detenemos momentáneamente el debug.
  5. Continue : Saltamos al siguiente break Point.
  6. Apply code changes : Esta herramienta del debug es la que mas me gusta ya que me permite realizar cambios en caliente


Errores o Bugs más comunes. 

A la hora de programar o realizar manutenciones a aplicacion ni que conoces lo mas importante es saber leer errores. Pero antes es saber cuales son los mas comunes esto es en cualquier lenguaje de programación y/o tecnología.

  1. División por CERO : No es mentira es mas común de lo que se cree. 
  2. Ciclo infinito : En este caso es muy importante que en la empresa se tengan normas de programación. Por ejemplo los famosos IF o FOR anidados. Rotundamente prohibidos.  
  3. Desbordamiento (Overflow) : Cuando asignamos un valor a una variable con una capacidad inferior. Es este caso es muy importante que conozcas tu datos y el lenguaje que utilizas.
  4. Subdesbordamiento (Underflow) : Lo contrario a Overflow. Asignamos a una variable un valor inferior al permitido. Por ejemplo : byte Numérico Entero con signo -128 a 127 y le asignamos un -130.
  1. Exceder el tamaño del array : Cuando nos salimos de la capasidad del indice del array. Si tengo una array de largo 5 no le puedo agregar un valor en el indice 8. 
  2. Utilizar una variable no inicializada: Jajaja tengo muchas historias con este error. En java seria el NullPointerException. (Como un compañero de trabajo diría "El Típico NullPointerException")
  3. Acceder a memoria no permitida. (Access violation).
  4. Perdida de memoria (Memory leak) : Perdida de memoria. Es muy común en algunos lenguajes me toco vivir lo con apache-tomcat 6 (Garbage collector). Esto es cuando se pierden referencias a posesiones de memoria . Un mal que no se lo deseo a nadie. puedes realizar análisis con jmap -dump:file=heap.hprof <pid> y luego con un plugin de eclipse para analizar. https://dzone.com/articles/how-to-find-and-fix-memory-leaks-in-your-java-appl
  5. Buffer overflow : En Java y tomcat 6 muy común. Aqui una explicacion muy buena https://www.welivesecurity.com/la-es/2014/11/05/como-funcionan-buffer-overflow/
  6. Deadlock : En Oracle me tope con algunos de estos errores. Al principio no entendía nada. Luego con la ayuda de un amigo me explico los bloqueos de datos. Se da principalmente cuando dos procesos intentan acceder a una posición de memoria. https://www.jasoft.org/Blog/post/191;Que-es-un-deadlock-o-interbloqueo.aspx
Bueno eso tenia que contar. Saludos






Estaba un poco aburrido y decidí aprender ruby.


Ruby - Manual del Programador (Users)


Así como esta en el titulo del aburrimiento decidí aprender a programar en Ruby. Ademas que necesitaba un lenguaje interpretado como PHP o Ruby. El tema es que de PHP hay mucha información y personas que ya lo programan asi que por suerte me encontré este libro el cual me estoy devorando. A mi sorpresa me resulto muy simple de leer y para nada de aburrido. Partiendo de la base que ya sabes de programación o has programado en algún lenguaje.

Si quieres aprender Ruby desde cero, te recomiendo este libro. En cuanto a los ejemplos son muy prácticos lo que ayuda bastante.

En cuanto a lo que a mi me interesa Ruby on Rails. (Desarrollo de aplicaciones WEB).
Rails suena bastante bien al punto buscar en google Ruby and Rails V/S Spring



La verdad es que esperaba menos de Ruby on Rails me resulto bastante grato encontrar una alternativa tan buena en el papel. Ahora se tendría que ver en la programación que tal se comportar. 

Ahora la misma comparación contra PHP este se ve bastante superior. Pero estamos hablando de PHP. Que con los años y mejoras que se le han echo. Quien podría decir otra cosa.






¿Porque me gusta la informática?

Ya hace varios años que egrese de Analista Programador en computación en especifico desde el 2006. y me pregunto :

¿Que me gusta de este trabajo?

¿Recomiendo o no estudiar esta carrera?


Bueno lo que me gusta de esta profesión :
El desafió constantes de Construir y Resolver problema. Es algo que me encanta. Llegar a diario a la oficina y descubrir algo que hacer. Claro muchas veces los desafíos se vuelven monótonos pero esta en uno en buscar el rumbo para encontrar desafios distintas que hacer. La idea es que estés trabajando en un lugar que te permitan expandir tu creatividad y si no, siempre tienes la posibilidad de buscar desafíos por fuera de tu trabajo.

La comunidad : Es grandioso que con solo buscar en google siempre encontraras a alguien que paso desarrollo alguna idea o solución a lo que buscar.

La oportunidad de Aprender. La informática tiene tantas áreas que mantenerse actualizado en todas es muy difícil. Pero si te gustan los desafíos de la programación y sientes que estas donde tus habilidades son retadas a diario siempre encontraras el tiempo para estudiar o al menos enterarte de los nuevo framework que se estén desarrollando para dar solución a alguna problemática que podrías encontrar. Buscar información y sorprender con cada solución y herramientas de que se desarrollan.

Si te recomiendo esta profesión. Si estas con dudas de estudiar informática yo te cuento que el camino no es fácil. Al inicio siempre te costara y debes de estudiar por que luego todo se te ira haciendo fácil.
Programar crear y solucionar creo que son las palabras claves de este trabajo.

Bueno les escribo esto luego de ver un documental en netflix AlphaGo donde con solo programación y algoritmos lograron crear una inteligencia capas de jugar contra el mejor del mundo en GO y ganar. Pero no solo eso ahora crearon AlphaGo Zero que con 2 horas de entrenamiento y lo mínimo en recursos de hardware como un notebook  puedes tener tu IA para Jugar. Sorprendente.

Saludos

Postgres Function y Cursores



El Gran Elefante.

Bueno la pregunta es como programar una buena function en postgres y mas aun como obtener los datos. En este caso estoy evaluando function y cursores. Veamos como funciona esto.

1.- La tabla y código de la function.

CREATE TABLE public.parametros (
                codigo VARCHAR NOT NULL,
                valor VARCHAR NOT NULL,
                descripcion VARCHAR NOT NULL,
                dominio VARCHAR NOT NULL,
                CONSTRAINT parametros_pk PRIMARY KEY (codigo)
)

2.- La cabecera de la function.
CREATE OR REPLACE FUNCTION public.get_lst_dominio(
    IN p_dominio character varying,
    IN p_count integer DEFAULT 0,
    OUT p_cod_err integer,
    OUT p_desc_err character varying,
    OUT ref refcursor)

Aquí tengamos presente que los parámetros de entrada están con un IN/OUT

2.- Código Java.
Muy importante que al utilizar cursores en postgresql el autocommit debe estar deshabilitado.

           getConexion().setAutoCommit(false);
           // TODO : Con el Manejo de cursores es importante manejar el auto commit en falso.
            String sql = "{ call public.get_lst_dominio(?, ?, ?, ?, ?) }";
            CallableStatement pre = getConexion().prepareCall(sql);
            pre.setString(1, dominio);
            pre.setInt(2, 0);
            pre.registerOutParameter(3, java.sql.Types.INTEGER);
            pre.registerOutParameter(4, java.sql.Types.VARCHAR);
            pre.registerOutParameter(5, java.sql.Types.OTHER);
           
            pre.execute();
           
            ResultSet resSet = (ResultSet) pre.getObject(5);


Fuentes en GIT : https://github.com/FrankSeguel/Postgresql