bibigeek.com  Tu blog de Programación Geek: Java, php, J2EE... y mucho más

Archivo del Autor

Mi historia sobre el inicio de Google Chrome para Mac:

Estamos en Martes día 8 de Diciembre del 2009, en España fiesta Nacional… y mi Google Notifier para Mac me avisa de un nuevo correo en mi bandeja de entrada, en ese momento pienso: “Genial!!! Mi amigo Xavi me ha contestado el mail del trabajillo que estamos haciendo…”.

Me decido a abrir mi Gmail y… ¡OSTRAS! ¿Un correo de Google Chrome? Abro el correo y veo el siguiente titular:

Por fin ha llegado Google Chrome para Mac. La versión beta ya está disponible.

¡¡¡¡Alucinante!!!! Lo que hemos tenido que esperar para que realmente Google Chrome lanzara la versión de Google Chrome para Mac oficialmente, la beta por supuesto (beta =  peta, al tanto).
Este es la imagen del correo que he recibido:

CorreoGoogleChrome

Espero comentarios sobre la nueva experiencia… yo lo instalaré dentro de unos minutos y ya os contaré.

Otra experiencia informática,

Ahora sí… os voy a explicar como instalar desde cero el Django. Pero antes tendremos que comprobar una serie de puntos importantes, como la de saber si tenemos instalado el Python, o si ya tenemos alguna versión del Django instalada y lo desconocíamos…

Pasos previos a Instalar Django en un Mac

1. Comprobar si tenemos instalado el Intérprete de Python y que versión tenemos instalada. Para comprobar sólo sera necesario ejecutar el comando “python” desde la terminal. Por defecto Mac ya lo tiene instalado, pero no cuesta nada coprobarlo ¿no? Pongo una ilustración (una imagen vale más que mil palabras):

Interprete Python

En esta imagen podréis ver que tengo instalado el python y al ejecutar el comando python ya tenemos rulando el intérprete en el Mac. Fijáos en las líneas superiores.., el “python” que está ejecuntándose es la versión 2.6, versión apta para el Django. Actualmente si tenéis una versión del python superior a la 2.6 el Django no funcionará, por lo tanto es algo a tener muy en cuenta.

Para salir del intérprete de python sólo basta con ejecutar la función: exit().

Salir Interprete Python

2. Comprobar que no tenemos nínguna versión de Django instalada. En este punto voy a centrarme en la de instalar el Django estable, ya que desde la página oficial de DjangoProjects podemos instalarlo de 3 formas diferentes. La versión estable de Django se instala en el directorio site-packages de nuestra versión de Python. Supongo que cada distribución linux, y en este caso el Mac, podemos encontrar este directorio en lugares diferentes. Para conocer donde tenemos el site-packages tenemos que ejecutar el siguiente comando:


python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()"

Os puedo decir que en Mac OC X el Python lo podemos encontrar en /Library/Python/2.6/ (he puesto 2.6 porque es el que se está ejecutando). Pongo otra imagen para que veáis un ejemplo:

Site Packages Python

Por lo tanto, tenemos que acceder al directorio especificado en la ejecución del comando y ejecutamos el comando: ls -l.

Site Packages Django

Si tenemos alguna carpeta llamada django, significa que tenemos alguna versión instalada. Por lo tanto, podemos  proceder a su eliminación y será tan fácil como eliminar la carpeta django.

Pasos para Instalar Django en Mac OS X

Paso 1. Descargar la versión estable

Paso 2. Descomprimimos el fichero. Podemos descomprimirlo desde Terminal o del entorno gráfico, es totalmente indiferente.

Paso 3. Tenemos que acceder a la carpeta que hemos descomprimido. Adjunto ilustración:

Directorio Django 1_11

Paso 4. Ejecutamos el siguiente comando dentro del directorio que hemos descomprimido:


sudo python setup.py install

La ejecución de este comando su función ha sido la de instalar el django dentro de la carpeta site-packages de nuestro python.

Paso 5. Comprobar que se ha instalado correctamente.

Para verificar si se ha instalado correctamente tenemos que comprobar que dentro del site-packages se ha creado una nueva carpeta con el nombre django en el cual podemos encontrar ficheros y directorios, por ejemplo:

django Site Packages

Hasta aquí la instalación del Django en un Mac OS X. A disfrutarlo!!!!!

Hola a tod@s,
Estos días estoy metiéndome mucho con la configuración de mi Mac desde Terminal, ya que estoy intalando el Django y preparándome para el WorkShow.

Normalmente utilizo la Terminal para conectarme con ssh a mi Servidor ya para hacer algunas que otras cosillas como: asignar permisos (que desde mi punto de vista es mucho más rápido que la interfaz), modificar ficheros ocultos o busquedas de ficheros ocultos… Pero nunca me había detenido en que la Terminal tuviera una visualización más idónea, más práctica para diferencias ficheros y carpetas…, configuración que algunos Linux traen por defecto. En fin que tuve que buscar como hacerlo, y lo conseguí, otra cosa que he aprendido!!!!!

Explicación y ejemplos BASHRC

Para añadir los colores en la Terminal sólo será necesario modificar el fichero bashrc. En las distintas distribuciones linux se puede encontrar este fichero en diferentes directorios, si es que se han creado. Os pondré unos ejemplo:

Ejemplo 1. Que ya esté creado (Distribución Debian Lenny)

Os pondre el ejemplo más fácil, el de mi servidor Debian Lenny. Cuando entré por primera vez en el servidor mediante SSH, me di cuenta que no tenía activado los colores a la hora de distinguir ficheros, directorios, ejecutables, etc. A raíz de esto, me puse a buscar como activarlo y tuve que buscar el fichero bashrc.

Aquí es donde podemos ver una diferencia sustancial entre Mac OS X con Debian, el fichero bashrc en Debian lo encontramos como un fichero oculto en el directorio raíz del usuario (por ejemplo: /home/bibigeek/.bashrc) en concreto, es decir, cada usuario tiene que tener su fichero .bashrc. Veamos una ilustración:

Debian Bashrc
Si ya está creado, lo único que tendremos que hacer es modificar el fichero y tenemos que descomentar unas líneas: desde el export hasta el trecer alias. Por lo tanto, el fichero debería quedar así:


# ~/.bashrc: executed by bash(1) for non-login shells.

export PS1='\h:\w\$ '
umask 022

# You may uncomment the following lines if you want `ls' to be colorized:
export LS_OPTIONS='--color=always'
eval "`dircolors`"
alias ls='ls $LS_OPTIONS'
alias ll='ls $LS_OPTIONS -l'
alias l='ls $LS_OPTIONS -lA'
#
# Some more alias to avoid making mistakes:
# alias rm='rm -i'
# alias cp='cp -i'
# alias mv='mv -i'

Ejemplo 2. Que el fichero no este creado

Simplemente tenemos que crear el fichero .bashrc en el directorio raíz del usuario y listo. Reiniciamos el bash y teóricamente tenemos que poder entrar con los colores activos. IMPORTANTE: el contenido del fichero tiene que ser el mismo que el del Ejemplo 1.

Mac añadir colores en el Terminal.app

Primero tenemos que conocer donde tenemos que buscar el fichero bashrc en Snow Leopard. Lo encontraremos en:


/etc/bashrc // Lo tenemos que editar con vim

En este fichero no hay que descomentar nada, todo lo contrario, sino que hay que añadir nuevas líneas de código, veámoslas:


export TERM=xterm-color
export CLICOLOR=1
export LSCOLORS=ExFxCxDxBxegedabagacad

Poniendo estas líneas de código, tendremos configurado nuestro terminal con los colores.

Poner colores al editor VIM en Mac

Ahora viene el otro punto fuerte de este POST, otra vez los colores :P

¿Como podemos darle colores al editor VIM cuando abrimos un fichero?

Para llevar a cabo esto, nuevamente hay que modificar un fichero de condiguración, en este caso es el fichero vimrc.

En Debian (y creo que en las distintas distribuciones también) podemos encontrar cuyo fichero en la ruta:


/etc/vim/vimrc

En cambio para el sistema Mac OS X lo podemos encontrar:


/usr/share/vim/vimrc

En ambos ficheros tenemos que añadir una línea, o como me pasó en el caso del Sistema Debian, descomentarla, para que pueda funcionar correctamente los colores en el editor Vim, y es:


syntax on

Con esto doy como finalizada esta nueva entrada en bibigeek, espero que os sea tan útil como lo ha sido para mi.
Un fuerte abrazo!

Tras los comentarios de una gran y buen amigo…, después los comentarios de un profesor… y después de leer un blog de un gran entendido sobre la programación con Python Antoni Aloy… me he decido a estudiar un poco sobre este Lenguaje de Programación.

Tengo que decir, que lo poco que he leído me está impresionando mucho. Hay que tener en cuenta también, el peso que está dando Google a este lenguaje (no digo nuevo lenguaje porque ya tienes sus añitos :P ). Durante estos días supongo que escribiré más Posts sobre el tema ya que el Viernes 4 tengo un WorkShow sobre Python i Django.

No os puedo decir mucho sobre Django, la finalidad de estudiar Python, es la de aprender Django :) Los programadores tenemos que estar a la última ¿no? Cada vez que me pongo a mirar cosillas sobre este lenguaje siente un cosquilleo, unas sensaciones… que me inspiran de cada vez más (parecidas a lo que sentí con Java).

Links interesantes para perderos en el Tiempo:

Buenas a tod@s nuevamente,

Estos días estoy haciendo un módulo de Mensajería Interna para una Web que estamos montando, y como no, utilizamos uno de los considerados como mejor Lenguaje de Programación Web (discrepo… sé que esto puede llevar a un gran abanico de discusión, pero sólo expondré dos nombres para que podáis reflexionar: Python – Django, estoy estudiándolo :P ).

Volviendo al PHP, actualmente hay dos versiones (que yo sepa) que se están utilizando: php4 y el php5. Estoy hablando desde el punto de vista de la ignorancia, pero si no voy equivocado el php5 surgió para que integrara la Programación Orientada a Objetos, mejoras de rendimientos, mejoras con el SQLite y MySQL…

Logo PHP

Y ahora va mi opinión: un PARCHE….. Esta nueva modalidad de programar en PHP no cumple con una de las características básicas y fundamentales de la POO, el Polimorfismo, bueno, si la cumple pero no como es debido. Razones:

  • Sólo podemos tener  un constructor
  • Si tenemos que tener un mismo método pero repetidos varias veces pero con distintos parámetros de entrada tenemos que utilizar el método __call el cual tiene que controlar que según el número de parametros que se le esté pasando llame a uno u otro. Para más información, podéis mirar este link.

Bueno, sé que parece que estoy buscando razones para desacreditar al PHP5, no es mi intención, pero al igual que considero que las JSP son un parche Web de Java, al PHP5 le queda evolucionar, y como mejor que haciéndolo con debates ¿no?

Ya está… CONSEGUIDO!

Como habéis podido comprobar en los anteriores posts (para ser más concretos los dos últimos) he cambiado de Servidor y en estos momentos tengo instalada una distribución Linux Debian Lenny.
Como podréis imaginar a un buen programador no le puede faltar un Repositorio de Versiones, en este caso he instalado nuevamente el Subversion siguiendo los pasos de un Post que ya escribí en su tiempo, pero sólo tenéis que añadir una modificación en el siguiente comando:


sudo svnadmin create /home/<nombreDirectorio>

Hay que añadir la opción: –fs-type fsfs. Por lo tanto, el comando quedaría de la siguiente forma:


sudo svnadmin create --fs-type fsfs /home/<nombreRepositorio>

Sabiendo esto, ya podéis seguir las instrucciones de este Post:

Instalar un Repositorio Subversion en Ubuntu con WebDav

Ya sé que el Post para instalar un Respositorio Subversion era para una distribución Ubuntu, pero estos mismos pasos me han servido para instalar satisfactoriamente el Subversion en mi nueva distribución Debian. Lo que voy a explicar ahora de nuevo es como activar el módulo websvn que contiene una interfaz más amigable, funciones de comparación, histórico,… como de un cliente subversion se tratase pero disponible en formato Web (programada con php).

Instalar WebSVN en Linux Debian Lenny, Ubuntu…

Simplemente hay que comprobar si tenemos disponibles en nuestros repositorios linux el paquete websvn. Lo podremos comprobar ejecutando el siguiente comando en una terminal:


sudo aptitude search websvn
p   websvn                             - interface for subversion repositories written in PHP

Si véis que hay una “i” en vez de una “p” justo al incio de la línea querrá decir que está instalado, en caso contrario no. Para instalar el WebSVN también será necesaria la instalación de otro paquete adicional llamado: enscript. Por lo tanto vayamos a instalar los dos paquetes poniendo los siguientes comandos:


sudo aptitude install enscript
sudo aptitude install websvn

Ahora viene cuando deberemos configurar el websvn para que funcione con nuestro respositorio.

KIT-KAT: Tengo que mencionar que dentro de un mismo directorio podremos tener varios Repositorios Instalados, por ejemplo, un repositorio para proyectos personales y otro para proyectos de invitados, FIN KIT-KAT

Ahora veamos las imágenes que nos ayudará a entender como configurar el WebSVN:

Imagen 1. Especificamos que deseamos configurar el webSVN

Pantallazo 1. Configuracion inicial

Imagen 2. Tenemos que indicar los módulos que deseamos configurar para el apache, yo he seleccionado todos :P .

Pantallazo con las confguraciones posibles de apache

Imagen 3. Indicar la carpeta donde están situados los repositorios subversion, en este caso lo instalé en /var/SVN

[More]

Como habréis notado algunos, ayer estuve configurando el nuevo server y parecía estar caído, inaccesible en algunos momentos… en fin una cadena de errores que ni yo sabía por donde pillarlo :P

Primero presentaros al nuevo Server:

  • Compañía: OVH
  • Procesador: Intel Atom CPU 330 1.60 GHz
  • Memoria Ram: 1 GB
  • Disco: etx3 20 GB
  • Sistema Operativo:
    • Distributor ID: Debian
    • Description: Debian GNU/Linux 5.0.2 (lenny)
    • Release: 5.0.2
    • Codename: Lenny

Me gustaría que me dieráis vuestra opinión y ayuda. ¿Por qué ayuda? Necesito saber como mirar el rendimiento de mi machine y estoy buscando algo que me proporcione algunos datos sobre el servidor.

Tengo que comentaros el error principal de ayer, la innaccesibilidad de mi blog Wordpress. Todo vino por los Permalinks, cuando hice la importación de la Base de Datos, los Permalinks estaban con el nombre: día y nombre del Post. Automáticamente el Wordpress estaba creando el fichero .htaccess, pero se vé que no se podia acceder a él… como solución cambié los permialinks por defecto y funcionaba todo correctamente (gracias a eso no se creaba el .htaccess). Volví al estado inicial y nada, volvía a PETAR…

Las solución fué “LOS PERMISOS” del fichero .htaccess, tuve que darle un chmod 755, con ello ya funcionaron todos los permalinks.

Muchas gracias a tod@s!!!!

Hola a tod@s,

Me tenéis que perdonar… ahora mismo estoy acabando de configurar mi nuevo servidor y me gustaría hacer pruebas de rendimiento, configuración, optimización, etc y durante esta semana será posible que la página (en algunos instantes) deje de funcionar. No voy a cerrar el blog ni mucho menos, pero necesito hacer estos cambios lo más rápidamente posible.

Muchas gracias de antemano, y siento las molestias que os pueda causar esto.

Atentamente Xisco.

cambioServidor

Buenas,

Ayer llegó el gran día. Parece que todas las empresas de SO se han puesto de acuerdo para sacar sus productos al mercado, en este caso el último ha sido Ubuntu (SO de software libre y puede ser accesible para todo el mundo… ni Windows ni OS X) con la versión 9.10 y su nuevo nombre Karmic Koala.

¿Querrá decir que Ubuntu tenía una “as en la manga” y sus enemigos lo desconocían por completo? :P

VentanaUbuntu9.10

Una de las mejoras principales es la “optimización de Ubuntu para los ultraportátiles”, que cada día más se están poniendo de moda ¿Y cómo no? Ubuntu no se está bajando del carro, todo lo contrario, siempre buscando la máxima optimización de su Sistema (BRAVÍSIMO).

¡Ubuntu! Tú siempre serás bienvenido… ¡¡¡Larga vida a Ubuntu!!!

Descargar Ubuntu 9.10 – Karmic Koala

Buenas,
Ya estoy de nuevo otra vez. Siento el retraso, no es que haya abandonado el blog :P , he estado super liado con cursos en la empresa y la verdad que no me ha permitido dedicarme mucho al blog.

Hoy vamos hablar de nuevo sobre las fechas en Java, es un tema tan amplio que pienso que aun me quedan múchisimos posts para escribir sobre el tema.
Veamos, este Post en concreto, tiene mucho que ver con el anterior que escribí sobre fechas: como utilizar correctamente las fechas en Java. ¿Por qué? Porque es realmente importante utilizar las herramientas que proporciona Java para las fechas, ya que a veces cuyas herramientas tienen en cuenta factores que nosotros no podemos controlar, como ejemplo podéis leer el Post del link anterior y lo comprobaréis con vuestros ojos.
Hoy voy a explicar una cosa que me he dejado en todos los Posts de Java que he escrito anteriormente, y que omití (perdonadme):

¿Qué herramienta utilizar para restar dos fechas en Java? ¿Qué utilizar para obtener la diferencia entre dos fechas en java?

Yo recomiendo, plenamente, utilizar el GregorianCalendar. Es lo que comentaba antes, hay que utilizar las herramientas de Java destinadas a la solución/manejo del tema a tratar, en este caso las Fechas.

¿Por qué no utilizar la clase Date? Si miráis minuciosamente la API de la clase Date, podréis comprobar que muchos de los métodos están siendo Deprecated y SUN están dando más relevancia las clases Calendar, Gregorian Calendar, etc.

Con eso no quiero decir que funcione mejor o peor una Clase u otra, pero desde mi punto de vista siempre hay que utilizar las clases idóneas. Reitero, MI PUNTO DE VISTA.

¿Cómo restar dos fechas en Java? ¿Cómo obtener la diferencia entre dos fechas en Java?

Necesitamos los siguientes datos para calcular la resta:

  1. Tener dos objetos GregorianCalendar o Date (ya sea obtenidos con string, con Calendar, etc…)
  2. Efectuar operaciones matemáticas simples (como mucho una multiplicación) sin que intervengan los milisegundos :P

A este punto voy a dividirlo en dos subpuntos: restar fechas del mismo año o restar fechas de distinto año. Empecemos:

Restar dos Fechas en Java que son del mismo año


/*CREAMOS EL GREGORIAN CALENDAR DE LAS DOS FECHAS*/
GregorianCalendar t1 = new GregorianCalendar(2009,9,23);
GregorianCalendar t2 = new GregorianCalendar(2009,9,28);

/*RESTAR FECHAS*/
int dias =  t2.get(Calendar.DAY_OF_YEAR) - t1.get(Calendar.DAY_OF_YEAR);

/*IMPRESION POR PANTALLA*/
System.out.println("Valor de días es: " + dias);

Están fácil como esto, RESTAR y PUNTO. Salida por pantalla es:


Valor de días es: 5

Se puede dar el caso de que necesitemos crear los dos objetos GregorianCalendar dados dos objetos Date. El código quedaría así:


        /* CREAMOS LOS OBJETOS GREGORIAN CALENDAR PARA EFECTUAR LA RESTA */
        GregorianCalendar date1 = new GregorianCalendar();
        date1.setTime(dateIni); //dateIni es el objeto Date

        GregorianCalendar date2 = new GregorianCalendar();
        date2.setTime(dateFin); //dateFin es el objeto Date

¿Qué problemas puede conllevar esto?
Pues el problema está cuando cogemos dos fechas de distinto año, el problema que puede darse es que el número no sea el correcto o el que esperamos. Veamos como es la salida por pantalla de la resta de las fechas: 2009/12/25 y 2010/01/02 (teóricamente deberían ser 8 días):


Valor de días es: -357 //( si le restásemos 365 días que tiene el año daría 8) 

Restar dos Fechas en Java de diferente año

Gracias al comentario anterior, y buscando en san Google se me ocurrió la brillante idea (que buscando, buscando, también lo encontré en un foro inglés :-( ) de hacer lo siguiente:


        /*CREAMOS EL GREGORIAN CALENDAR DE LAS DOS FECHAS*/
        GregorianCalendar date1 = new GregorianCalendar(2009,11,25);
        GregorianCalendar date2 = new GregorianCalendar(2010,0,2);

        /* COMPROBAMOS SI ESTAMOS EN EL MISMO ANYO */
        if (date1.get(Calendar.YEAR) == date2.get(Calendar.YEAR)) {
            System.out.println( "Valor de Resta simple: " +String.valueOf(date2.get(Calendar.DAY_OF_YEAR) - date1.get(Calendar.DAY_OF_YEAR)));
        } else {
            /* SI ESTAMOS EN DISTINTO ANYO COMPROBAMOS QUE EL ANYO DEL DATEINI NO SEA BISIESTO
             * SI ES BISIESTO SON 366 DIAS EL ANYO
             * SINO SON 365
             */
            int diasAnyo = date1.isLeapYear(date1.get(Calendar.YEAR)) ? 366 : 365;

            /* CALCULAMOS EL RANGO DE ANYOS */
            int rangoAnyos = date2.get(Calendar.YEAR) - date1.get(Calendar.YEAR);

            /* CALCULAMOS EL RANGO DE DIAS QUE HAY */
            int rango = (rangoAnyos * diasAnyo) + (date2.get(Calendar.DAY_OF_YEAR) - date1.get(Calendar.DAY_OF_YEAR));

        }
        System.out.println("Valor de rangoDias:" + (date2.get(Calendar.DAY_OF_YEAR) - date1.get(Calendar.DAY_OF_YEAR)));
        System.out.println("Valor de rangoAnyos: " + nAnyos);
        System.out.println("Valor de rango: " + rango);

El resultado importante es el de rango, resultado por pantalla es:


Valor de rangoAnyos: -357
Valor de nAnyos: 1
Valor de diasCorrectos: 8

Fijáos que he tenido que controlar la opción del AÑO BISIESTO… que también se tiene que controlar. Si volvéis a mirar el código lo he solucionado con esta simple operacion:


int diasAnyo = date1.isLeapYear(date1.get(Calendar.YEAR)) ? 366 : 365;

También deseo remarcar que he realizado un IF para controlar si la resta se hace con fechas del mismo año o si son diferentes años

Cómo restar con la clase Date (MI OPINIÓN INCORRECTO)

Utilizando los milisegundos es problemático… desde mi punto de vista, INCORRECTO. Problemas con cambios de hora,…


        Date actual = new Date();
        Date fecha =null;
        String dateFrom = "20091023";
        SimpleDateFormat day= new SimpleDateFormat("yyyyMMdd");
        try {
            fecha = day.parse(dateFrom);
        } catch (ParseException ex) {
            ex.getMessage();
            ex.printStackTrace();
        }
        long diferencia= ( fecha.getTime() - actual.getTime() );

        System.out.println("Valor de diferencia: " + diferencia/(1000*60*60*24));

¿Es una opción viable? SÍ, menos cuando hay cambios de hora por el medio. Debemos ir con precaución y repito: mejor utilizar las clases Java preparadas para el problema en cuestión.

Espero que os haya servido de algo, al menos para solucionar algún problema o ayudaros a entender un poco más las fechas en Java.

ACTUALIZACIÓN

Actualizo este post por el mero echo que aNieto2K me ha sugerido que pusiera estadísticas :P . Lo sé Andrés, tengo que currarmelo más jejeje.

[More]