lunes, 23 de abril de 2012

Averiguar el primer y último viernes de un mes con Java

A finales del 2011 desarrolle un proyecto que tomaba la asistencia de personas en  una oficina por medio de un dispositivo biometrico de huella digital. A la hora de generar los reportes de porcentaje de asistencia, calculaba un promedio de asistencia, si una persona solo asistía los viernes lo promediaba a 4 veces, pero el tiempo no es fácil de manejar, existe una anomalía, la cual es que ciertos meses una persona asiste 5 veces y en otras ocasiones 4. En febrero 2012 hay 4 viernes, y en Marzo 2012 hay 5 viernes.
Esto vuelve el sistema inexacto, así que procede por investigar como averiguar cuantos viernes tiene un determinado mes, la lógica me dicto, saber la fecha del último viernes, y la del primer viernes, para poder encontrar la fórmula. 


Calcular el último viernes.

  1. Calendar pCal=java.util.GregorianCalendar.getInstance();
  2. pCal.set(GregorianCalendar.YEAR,2012);
  3. pCal.set(GregorianCalendar.MONTH,GregorianCalendar.APRIL);
  4. pCal.set(GregorianCalendar.DAY_OF_WEEK,GregorianCalendar.FRIDAY);
  5. pCal.set(GregorianCalendar.DAY_OF_WEEK_IN_MONTH, -1);
  6. System.out.pritnln("Ultimo viernes: " + pCal.get(GregorianCalendar.DAY_OF_MONTH);


1. Se crea una una instancia de un calendario gregoriano
2. Se indica el año
3. Se indica el mes que se desea, GregorianCalendar en sus atributos maneja los meses en ingles
4. Se indica el  día por medio de GregorianCalendar
5. Este es la que importa, el -1 indica el último viernes, no parece lógico a simple vista pero funciona.
6. Se imprime  la instancia del calendario accediendo  pCal.get  indicando que deseamos el número de día en el mes indicado.


Calcular el primer viernes


Es similar a la anterior, solo cambia el parámetro del inciso 5


5.  pCal.set(GregorianCalendar.DAY_OF_WEEK_IN_MONTH, 1);


Se cambia a "1" lo que indica que se desea es el primer viernes


Y con esto sabemos la fecha del primer y ultimo viernes de un mes, para poder realizar cálculos con respecto al tiempo, esta solución me fue muy buena, debido que lo primero que vino a mi mente fue un cubo de Datawarehouse, pero no se tienen los recursos para esa solución.

viernes, 21 de octubre de 2011

No se puede iniciar MySQL - ERROR 2003 (Windows 7)

En ciertas ocasiones nos encontramos que no podemos iniciar MySQL en Windows 7, y cuando ejecutamos el comando "mysql.exe" nos notifica el ERROR 2003





Lo que sucede es que el servicio no esta iniciado, así que lo que debemos hacer es iniciarlo por medio de consola, pero no la consola normal, necesitamos una consola con permisos de administrador, la cual se puede acceder:

Inicio -> (digitamos cmd en "Buscar programas y archivos") -> damos click derecho en cmd, seleccionamos "Ejecutar como administrador"

La imagen siguiente nos da una idea de como sería el proceso.





Luego que el prompt se abra con los persmisos, procedemos a digitar "NET START MySQL" lo cual permitirá que el servicio de MySQL se inicie, como muestra la siguiente figura.




Podemos proceder a trabajar con MySQL sin ningún problema.


martes, 5 de abril de 2011

Ajustar imagen al tamaño de un JLabel - Java

En el día a día de la programación deseamos que un JLabel contenga una imagen, sí la imagen no es del tamaño del JLabel pueda que sobre espacio, o no se vea completamente.

Como notamos, tenemos una imagen en un JLabel la cual no se puede distinguir, el siguiente código muestra como poder ajustar la imagen al tamaño del JLabel.
  1. ImageIcon fot = new ImageIcon(path_ala_imagen);
  2. Icon icono = new ImageIcon(fot.getImage().getScaledInstance(jLabel1.getWidth(), jLabel1.getHeight(), Image.SCALE_DEFAULT));
  3. jLabel1.setIcon(icono);
  4. this.repaint();
Explicación
  1. En la primera línea se carga la imagen
  2. Se crea un icono, el cual cargará la imagen, pero usa la instancia "getScalesInsance" la cual permite crear un ajuste/redimensionar  la imagen. Hemos puesto que sea del ancho del jLabel1, el cual se especifica con jLabel1.getWidth, el alto con jLabel1.getHeight y lo último son parámetros de Image.
  3. Se le otorga a JLabel1 el icono con su nueva dimensión.
  4. Este pase es opcional, a veces es necesario un repaint para que se noten los cambios.
Resultado:

domingo, 3 de abril de 2011

Marcar Paquetes por tarea

En el gesto de paquetes Synaptic existe una utilidad llamada "Marcar paquetes por tarea" el cual agrupa software que ofrece servicios tales como LAMP (Linux Apache MySql Php), Cloud Computing, DNS Server, Printer Server, OpenSSH Server y muchos más.


En las versiones actuales de Ubuntu (10.10) esta opción no se encuentra habilitada en Synaptic, en el sub-menú edit. Para poder activarla es necesario instalar el paquete tasksel desde consola:

sudo apt-get install tasksel 

Una vez instalada podrá verla en el sub-menú edit en Synaptic. con lo cual podrá instalar los servicios que mencionamos.



Y los Servicios que se ofrecen:




También se puede acceder a ellos desde consola:

sudo tasksel 

Y ver la lista de servicios por consola:

tasksel --list-task

lunes, 2 de febrero de 2009

FILOSOFIA UNIX

UNIX

En nuestra vida informática, desde que nos adentramos al mundo de los sistemas operativos, hemos podido notar el reluciente nombre de “UNIX”, cosas como: “de ahí se baso el sistema operativo Linux”, “Ellos hablan de la simpleza en los programas”.

Para poder entender a este sistema operativo portable y multiusuario, debemos comprender los motivos por lo cual fue creado, y las bases que le dan sentido a la razón de ser.
Luego de chequear su historia, los programadores: Ken Thompson, Dennis Ritchie deseaban llegar al término de “programa transportable” luego de la creación de Unix se adaptaron a lo el Lenguaje C, el cual es portable y podía resumir milésimas líneas de código Assembler, tomaron la iniciativa para poder crear su sistema operativos en pequeños programas eficientes.

Filosofía UNIX.

Ken Thompson creo originalmente la “Filosofía Unix” para diseñar un sistema operativo, de características pequeñas pero operar el sistema con una interfaz limpia aplicada a servicios. 

Cuando se dio a conocer estos principios, se aclararon muchos aspectos para no tener una idea errónea del sistema.

La filosofía Unix no es un método formal de programación.

  • No utiliza la teoría de la computación para obtener “teóricamente un software perfecto”.
  • Su programación es de “abajo hacia arriba: bottom up”.
  • Es de conocimiento pragmático.
  • Basado en el conocimiento Empírico o Experiencia.
  • No se encuentra en los métodos y las normas oficiales, sino en el medio-reflexivo implícito el conocimiento.

Aparte de las aclaraciones, hay colaboradores a la par de Ken Thompson, los cuales dieron una explicación explicita sobre las condiciones que se cumplen para Unix. Entre ellos tenemos a Doug McIlroy , creador de las Unix pipes(Tuberías de Unix):

  • Hacer que cada programa haga una cosa específica, y que lo haga de manera correcta, es mejor construir algo nuevo, que modificar programas viejos, en los cuales solo se atoran de pequeñas mejoras.
  • Se espera que la salida de cada programa para convertirse en la entrada a otro, esto permite conectar los programas que hacen cosas especificas para tener un mayor control sobre que pudo haber fallado.
  • No dudes en tirar las piezas sin sentido y luego reconstruirlas, esto permite la reusabilidad de código.
  • Utilice las herramientas en lugar de ayudar a trabajadores no calificados para aligerar una tarea de programación, incluso si tiene que desviarse para construir las herramientas y esperar para lanzar algunos de ellos después de que haya terminado de usarlos.
  • Escribir programas para manejar flujos de texto, ya que es una interfaz universal, lo cual permite la conexión con otros programas y poder obtener mejores resultados.
  • Escribir programas que trabajen de manera conjunta.

Todo lo anterior puede resumirse en la siguiente frase:
“Esta es la filosofía Unix: Escribir programas que hacen una cosa y hacerlo bien. Escribir programas para trabajar juntos. Escribir programas para manejar flujos de texto, ya que es una interfaz universal.”

Todos los colabores de Unix se unieron a la creación, también aportaron valores a los principios filosóficos, que luego de mucho tiempo se aplico a la forma de poder programar como en el lenguaje C, dando aspectos que podrían ayudar a programar en base a los principios filosóficos:

  • Regla de Modularidad: Escribe módulos o partes simples conectadas a través de interfaces los cuales comunican a otros programas.
  • Regla de Composición: Diseñar programas que se conectarán a otros programas, una salida del programa es la entrada de otro programa.
  • Imperio de la Robustez: La robustez es el hijo de la transparencia y la simplicidad.
  • Regla del Silencio: Cuando un programa no tiene nada sorprendente que decir, probablemente no tiene nada que decir.
  • Énfasis de la menor sorpresa: en lo que respecta en el diseño de la interfaz, no es necesario sorprender.

Una forma simple de ver la Filosofía UNIX

K.I.S.S. : Keep It Simple, Stupid
Es la manera de simplificada de Unix, en lo cual exige ser efectivos a tener exageradas interfaces notorias. Los puntos más importantes rondan en:

  • Todo lo que puede ser una fuente y destino-debe ser independiente de un filtro.
  • Lo pequeño es hermoso. Escribir programas que hacen lo menos es coherente con la realización del trabajo.

Ciertas invenciones en Unix
Me queda la duda de este video que encontré en youtube, pero ustedes dirán.


Fuentes:

http://www.unix.com/
http://www.geocities.com/v.iniestra/apuntes/unix.html
http://www.faqs.org/docs/artu/index.html
http://es.wikipedia.org/wiki/Unix#Historia
http://www.unix.org/
http://en.wikipedia.org/wiki/KISS_Principle


miércoles, 28 de enero de 2009

Poner una imágen como textura en Java 3D

Como siempre programando en Java3D, cree un box, pero me dije, ¿Porqué el box no puede tener como textura una foto o imágen que desee?.

Terminando de cuestionarme, investigue por internet como colocar las texturas y por fin llegue a mi respuesta. Se deben crear ciertos objetos que serán parámetros para las figuras geométricas.

  • Crear un objeto para el tipo de textura:
  • int paratextura = Primitive.GENERATE_NORMALS + Primitive.GENERATE_TEXTURE_COORDS;
  • /*Nota: Esta sentencia pide ciertas librerías, las cuales en Netbeans 5 ó superior indica cuales son las que deben declararse o incluirse.*/
  • Crear objetos de Carga de textura,textura y apariencia:
  • TextureLoader loader=null;
  • Texture texture=null;
  • Appearance ap=null;
  • Inicializar con parámetros:
  • loader = new TextureLoader("pared.jpg","INTENSITY", new Container());
  • /*Nota: "pared.jpg" es la imagen que deseamos sea la textura para nuestra figura geométrica.*/
  • texture = loader.getTexture();
  • ap = new Appearance();
  • ap.setTexture(texture);
  • Ahora damos la textura a la figura geométricacon los parámetros ya creados
  • Box cabeza=new Box(1.2f,1.25f,1.25f,paratextura,ap);
  • /*Nota: Ahora ingresamos el primer parámetro de paratextura, y el otro porsupuesto de apariencia, y listo.*/

Y podemos ver los resultados,  para una pared que en si es un box:

Saludos....

viernes, 12 de diciembre de 2008

Batallar hasta el último aliento

Gracias a Dios puedo contar que me he librado de una asignatura que me atormento como loco, y pues no me da pena decir que es compiladores 2, dirán seguis hablando de eso.....

Pero si lo hablo en alto y muchas veces debido, a que pues fue un gran logro ganar esta asignatura, debido a que me parecia peculiar muchas cosas que en ello pasaron.
Lo que gracias a Dios me ayudo bastante fue el hecho de no tirar el curso la 3ra vez que la cursaba, tomé la decisión de llegar a última instancia, y solo con esa decisión pude ver resultados íncreibles.

Debido a esto recuerdo las palabras de un entrenador de futbol americano que una vez dijo luego de ganar un partido.

"No hay ganadores en el partido de hoy.

En este mundo, sólo los que experimenten
la decepción se harán mas fuertes.

Todos los que juegan en el campo
saborearon la derrota alguna vez.

No hay ningún jugador que no haya perdido antes.

Pero, los mejores jugadores hacen todo
lo que pueden para recuperarse cuanto antes.

Los jugadores normales tardan en recuperarse.

Y los perdedores, se quedarán llorando en el campo."

asi que ...........