martes, 3 de marzo de 2015

HPLIP

    No entiendo el por qué del equipo de gentoo, funtoo y HP les gusta hacer engorroso la instalación de la herramienta HPLIP, pero más que la instalación es el uso, cada vez que la voy a usar para configurar un scanner, fax o una misera impresora, siempre tengo el mismo problema y es que me resulta imposible instalar los plugins propietarios de HP para que las impresoras funcionen y hasta para que se pueda usar el scanner; siempre me frustra tener el mismo error:

 Error importing HPLIP modules.  Is HPLIP installed?

  Luego de leer un buen rato varios foros y la misma página de la wiki de gentoo (generalmente ese es el problema me desespero en hacer las cosas) no me doy cuenta que HPLIP no esta migrado por completo para Python 3.x, todo lo contrario, la página de la wiki de gentoo dice que puede tener problemas con las versiones posteriores a Python 2, de hecho dice algo más o menos así:

 Note
Python 2 is still the recommended python interpreter for Gentoo. When using python 3 you should be aware of potential issues.

     Y este imbecíl que no le presta atención a los cuadros de notas y con colores distintos... no se percata si no después de un buen rato tratando de hacer no se cuantas estupideces e idioteces y luego con una simple instrucción en la consola se solventó

# eselect set python2.7

    y listo, pude instalar los plugins sin problemas, en verdad nunca aprendo a leer mas (y eso que aveces critico a los más jóvenes de ser un poco apresurados en hacer las cosas).
    Lo que aprendi de todo esto fué a leer más antes de disparar en la obscuridad...

Bueno, lo dejo por aquí para no volverme a equivocar...


lunes, 29 de diciembre de 2014

Open ThinClients

     Hace unas semanas por cuestiones de trabajo tuve que volver a entrar en el mundo de las terminales ligeras, ya hacía un buen tiempo que no estaba por ese mundo (desde TCOS de Mario Debian, proyecto que por lo que vi el abandonó), sin embargo mi primera intención es tratar con Linux Terminal Server Project (LTSP), realmente la instalación de esta herramienta es bastante sencilla, tan solo hay que seguir los pasos de la wiki y ya se tienen un servidor LTSP para conectar las terminales ligeras. Sin mucha configuración ya se tiene activo un servidor de terminales ligeras y listo para funcionar, aunque comparado con sus versiones pagas (como Xen ThinCentre o el de VMWare) no tiene mucha ventaja en la parte administrativa. Sin embargo, husmeando por la red me topé con otro proyecto interesante openthinclients, este proyecto tiene una administración parecida a la de las versiones pagas, si bien la instalación es bastante sencilla, hay que tomar en consideración varias cosas para que este software funcione:
  1. Tener una Distribución de linux compatible y en 32bits
  2. Usar la versión de Oracle Java 1.6 (no funciona con las superiores)
  3. El booteo por PXE solo funciona con versiones superiores a la 5.0 (por más que lo intenté no pude hacerla funcionar con gPXE)
  4. La administración de los clientes se hace usando el administrador que se instala
  5. La mayoría de la documentación se encuentra en Alemán (el mio esta muy oxidado), para la parte de la instalación no es muy complicado y siempre se puede usar google translator, sin embargo las traducciones se toman de manera literal con esta herramienta y puede que se tenga errores semánticos en la traducción.
     A pesar de las limitantes que tuve, logré hacer un manual que voy a colgar en los próximos días en mi carpeta mega (probablemente luego de las fiestas) para que tengan una idea de como instalar esta herramienta. Me falta por completar la parte de la administración, pero eso es otra historia.

     Y ustedes ¿Qué herramienta para terminales tontas utilizan?

miércoles, 13 de agosto de 2014

CANAIMA GNU/Linux

Hace poco menos de un año mi madre entró en el plan internet equipado de ABA CANTV y decidió comprar una laptop VIT financiada, esta laptop venia con Canaima GNU/Linux 3.0, cuando le dije que era linux (mi madre sabe que uso linux desde hace mucho tiempo, cuando agarraba la computadora de la casa le instalaba cualquier cantidad de distribuciones), luego que la compró, le dije le planeas dejar Canaima o vas a querer que te le instale Windows, debido a que soy usuario GNU/Linux, pero sin embargo creo en la libertad de elección, cada quien es libre de escoger el S.O. que desee para su computadora, es como la ropa interior, cada quien usa la que quiera. Pero debido a que mi madre tiene fuertes convicciones simpatizantes del gobierno de Venezuela y luego de haber usado una versión de RHEL, hace muchos años (no recuerdo si fué la 2 o la 3), me dijo que no tenía problemas con usar linux, pero que le configurara la impresora y le explicara como es la cosa, para internet, twitter (es una usuaria apasionada de ese medio), le explique lo que necesitaba saber, luego de un tiempo me dijo que el Canaima le estaba pidiendo actualizar, fui hasta su casa y realizé la actualización de 3.0 a 3.1 sin ningún problema, debido a que el equipo de Canaima, hizo un buen trabajo para que la migración diera pocos dolores de cabezas, luego de un tiempo mi mamá estaba feliz con su Canaima, me dice que lo prefiere 1000 veces al windows vista que tiene en su pc (creo que sabemos las razones), pero un día me dice que no puede escribir en hotmail, que sencillamente no hace nada, así que la revisé y efectivamente eso pasaba, al entrar en el sitio web de Canaima GNU/Linux, me pude percatar que la actualización directa ya era posible (hace unos meses tenía entendido que no era así), seguí los pasos que especifican para realizar la actualización, sin embargo tuve un problema con initfsram-tools, debido a la versión de plymouth, lo que hice fué mandarlo a instalar y luego seguir con la actualización, todo funcionó correctamente a excepción de ese error, luego de culminada la actualización tengo un gnome3 bastante sobrio y con un tema agradable, en el pasado no estaba un poco de acuerdo con los temas elegidos para canaima, pero esta vez dieron en el clavo, es un gnome-shell bonito y eficiente, con los complementos necesarios para que los usuarios finales no se pierdan en el uso de esto, en verdad me gustó bastante.

Lo mencioné alguna vez en este blog, yo trabajé con el equipo de desarrollo de la distribución CANAIMA/CANTV GNU/Linux y en verdad por cuestiones internas del funcionamiento de esa empresa de gobierno y exigencias de adecuar el linux para que funcionara correctamente con el active directory y con las diferentes aplicaciones proporcionadas por cada uno de los proveedores de servicio de CANTV, que funcionan nativamente en Windows o en Internet Explorer 4, hicieron muy engorrosa el trabajo de mejorar un canaima 2 y poderlo llevar a debian wheezy y con esto no estoy diciendo que el equipo de CANTV hiciera un mal trabajo, todo lo contrario, se invertía un gran esfuerzo en realizar la distribución para este ente gubernamental, sin embargo habían trabas, que en algunas ocasiones sencillamente no se pudieron solventar, o si se solventaban no era del agrado del usuario final. No sé en que estado se encuentra la distribución de CANAIMA/CANTV, pero en verdad si pudieran tomar de ejemplo lo que ha estado realizando el equipo de la meta distribución, donde se ve reflejada el esfuerzo y el aprendizaje que han tenido desde la primera versión de Canaima GNU/Linux, para ir poco a poco teniendo una distro que va a ser independiente de Debian y poco a poco va a ir mejorando, en verdad me alegra.

Extiendo una felicitación al equipo de Canaima GNU/Linux por todo el trabajo que han hecho y están haciendo.

P.D. No pienso dejar de utilizar Funtoo, pero para aquellos que piensen que ubuntu es mejor para usuario final, intenten usar Canaima GNU/Linux, se van a sentir más a gusto.

jueves, 3 de julio de 2014

Funtoo usando ZFS

Unas de las cosas que me pasó hace unos meses, es que me obstiné del KDE y decidí volver a instalar gnome o en su defecto cinnamon, sin embargo, era error tras error, y cada vez que solventaba un error aparecía otro y a parte había dejado de lado un proyecto que tenía que culminar y tenía a los clientes esperando, así que decidí con lagrimas en los ojos abandonar funtoo/gentoo por otra distro que me brindara gnome y fuera un poco más rápida a la hora de configurarla, por lo que inicié mi ardua tarea de probar distros:
  • Red Hat Linux 6 o 7: debido a que la empresa donde trabajo es aliado RH, decidí usar mi usuario para descargarme las versiones RH, sin embargo, la 6 es muy vieja en paqueteria y la 7 es algo más nueva pero igual no me sentí cómodo con las versiones, por lo que asi como la instalé la desinstalé :).
  • Fedora: es una distro que instalé, sin embargo no me hallaba dentro de ella, la forma de configuración, la forma de personalizarla, etc. no eran del todo agradables para mi, por lo que luego de un día la eliminé.
  • Sabayon: Como usuario gentoo, me decidí por sabayon, que supuestamente es mas enfocado a usuario final y de verdad así es, pero los constantes problemas que tenía instalando paquetes usando equo y emerge, hicieron que la dejara de lado.
  • OpenBSD: esta realmente no es un linux, pero quería probar gnome-shell en openbsd, en verdad que hicieron un buen trabajo, pero no logré configurar mi tarjeta de red inalámbrica, por lo que la tuve que dejar, a aparte que no podía instalar algunos paquetes vitales, asi que la tuve que dejar muy a mi pesar.
  • Arch: luego de pensarlo por un rato, decidí usar arch, mi sorpresa es que ya tiene systemd y la instalación fue bastante rápida, se parece un poco a la de gentoo, luego de un corto periodo instalando y configurando tenía un S.O. totalmente funcional, por lo que decidí quedarme con ella para poder realizar un grueso de trabajo que tenía por delante y asi fue un gnome 3.12, un systemd, es una distro rolling release, por lo que me parecía apropiada para mi que me gusta utilizar versiones experimentales y más nuevas de diferentes paquetes. Fue una experiencia agradable, pero tengo que decir que extrañaba la utilización de los flags y de los eselect, a parte que el kernel montaba muchos módulos que no estaba utilizando, por otro lado, los paquetes AUR en algunas ocaciones eran demasiado inestables, el wally no me funcionaba, luego de actualizar el kernel se hacía dificil usar el KVM o el VirtualBox y así algunos detalles que se iban apilando, por lo que luego de culminar mis obligaciones decidí volver a instalar funtoo
Instalación de Funtoo:
    Como había decidido utilizar funtoo, vi que hay soporte nativo para ZFS, por lo que decidí probar usar un ZFS, no voy a hablar aqui sobre zfs y caracteristicas, solo puedo decir que junto con btrfs, es considerado uno de los sitemas de archivos de nueva generación, a parte que luego de leer un poco sobre ambos me incliné por zfs, más que todo porque esta documentada la instalación para funtoo, así que me arremangué las mangas nuevamente, me troné los dedo y me pusé a instalar mi nuevo funtoo.
    Cuando inicié la instalación me percaté que todavía usan OpenRC, esto es una limitante, aún no entiendo la negativa del grupo Gentoo/Funtoo para usar systemd por defecto, pero bueno, también tambien hay que considerar que las personas que contribuyen a gentoo y a funtoo son personas que no cobran por ello y lo hacen porque les gusta, bajo esta premisa, es un poco más comprensible que no hayan hecho la tarea de migración a systemd.
     Bueno dejando eso de lado, me quedo con mi OpenRC, así que me pongo a seguir el manual de zfs para funtoo, la instalación es bastante sencilla y muy parecida a la original, salvo que hay que utilizar los comando de zfs para crear el pool y las unidades zfs, cosa que no tiene mayor complicación, sin embargo lo que si me llama la atención es que utilizan una versión del kernel que se llama bliss-kernel, cosa que instalé sin embargo, me esta dando problemas con la tarjeta de sonido y con la tarjeta gráfica, por lo que decidí compilar el kernel a mano y colocarle las opciones que yo utilizo, para esto seguí un video viejo sobre la instalación del kernel , pero lo que no te dicen, es que luego de que tienes un kernel funcionando y decides actualizar o cambiar a un gentoo-sources o un vanilla-source, tienes que hacer algunas cosas, en mi caso gentoo-sources:
  • entrar en el archivo .config y agregar esta línea CONFIG_CRYPTO_ZLIB=y, para que esta otra funcione CONFIG_ZLIB_DEFLATE=y, porque si no van a tener problemas en siguiente proceso, luego de poner esas dos lineas se recompila el kernel
  • ahora con el kernel recompilado es necesario reinstalar los paquetes zfs zfs-kmod y spl, para que se creen dentro del kernel recien compilado los módulos para el siguiente paso,
  • luego ejecutamos bliss-initramfs para que nos cree el initrd, y el archivo generado lo copiamos dentro de /boot
  • yo siguiendo el manual de funtoo agregué estas líneas a mi /etc/boot.conf
"Funtoo ZFS" {
        kernel vmlinuz[-v]
        initrd initrd[-v]
        params root=tank/funtoo/root quiet
        # If you have an encrypted device with a regular passphrase,
        # you can add the following line
        params += enc_root=/dev/sda3 enc_type=pass
}
        Pero por alguna razón no funcionan con el bliss-kernel, sin embargo las deje allí. luego de los pasos anteriores hice un boot-update y me reconoce mi kernel, por lo que me senté a revisar mi configuración de grub.cfg:
set timeout=3

  insmod part_gpt
  insmod ext2
  set root=(hostdisk//dev/sda,gpt1)
  search --no-floppy --fs-uuid --set d88b1c30-ccec-48d8-8c1f-a7de04564520
if loadfont /grub/unifont.pf2; then
   set gfxmode=text
   insmod gfxterm
   insmod vbe
   terminal_output gfxterm
fi

set menu_color_normal=cyan/blue
set menu_color_highlight=blue/cyan

menuentry "Funtoo ZFS - vmlinuz-3.15.3-gentoo" {
  insmod part_gpt
  insmod ext2
  set root=(hostdisk//dev/sda,gpt1)
  search --no-floppy --fs-uuid --set d88b1c30-ccec-48d8-8c1f-a7de04564520
  linux /vmlinuz-3.15.3-gentoo root=tank/funtoo/root enc_root=/dev/sda3 enc_type=pass quiet
  initrd /initrd-3.15.3-gentoo
  set gfxpayload=text
}
menuentry "FuntooZFS - 3.12.22-KS.01" {
  insmod part_gpt
  insmod ext2
  set root=(hostdisk//dev/sda,gpt1)
  linux /kernels/3.12.22-KS.01/vmlinuz root=tank/funtoo/root enc_root=/dev/sda3 enc_type=pass quiet
  initrd /kernels/3.12.22-KS.01/initrd
}
set default=0

Como se puede ver solo agregúe la línea del initrd y luego agregué por si acaso la línea de el kernel-bliss, de tal manera que pueda seguir realizando arreglos si mi gentoo-sources falla.

Luego de reiniciar, todo anda perfectamente, ahora me voy a dar la tarea de migrar esto a systemd ya que si es mucho  más rápido para iniciar y tiene sus ventajas sobre openrc.

viernes, 24 de enero de 2014

Recuperación de tablas de particiones con testdisk


El día de ayer me toco realizar la creación de un pendrive (memoria USB) booteable, para realizar una instalación de ubuntu, como tengo mis imágenes ISO en un disco externo WD de 1 TB, motivo por el cual lo conecto y busco dentro de la partición correspondiente lo que necesito, así que me dispongo a usar dd para crear mi dispositivo booteable, sin embargo por andar conversando y distraído lo hice sobre el mismo disco de 1 TB (allí entendí el concepto de microinfarto), por lo que la tabla de particiones fueron borradas el disco fue reescrito con los datos de la ISO, bueno me pongo a investigar por internet como hacer file carving o realizar una recuperación de datos en particiones XFS, luego de un buen rato googleando, recordé que utilice foremost para la recuperación de unos datos de un servidor (que aparentemente habían sido borrados por accidente),  y recuerdo que me funcionó para lo que se necesitaba, sin embargo para este caso no me funcionó debido a que necesitaba una forma mucho más eficiente de recuperar mi partición; luego traté con gpart, pero no entiendo por qué me daba un error de punto flotante, por lo que lo descarté, así que me fui por mi última opción testdisk, luego de leer la documentación vi que era muy sencillo el trabajo de recuperación de la tabla particiones (que es lo que realmente quería en este caso), así que lo ejecuté

# testdisk

Me inicia un asistente que me hace escoger en que disco se va a realizar el análisis, allí selecciono mi disco externo, y luego indiqué el tipo de particiones (Intel para este caso), así que inicié el análisis, luego de culminado el proceso, me dice que consiguió una partición xfsXFS, por lo que sentí un alivio, y le mando a reescribir la tabla de particiones, y "magicamente" tengo mi partición XFS nuevamente visible en mi disco, perdí fue una partición que tenia aparte de 100 GB donde había puesto un Red Hat Eterprise 6.4, para una instalación que hice a principios de año y en realidad no sé si fue por el tipo de partición no me la reconoció, pero en realidad no me preocupo mucho, debido a que el grueso estaba en una partición de casi 900 GB donde estaba todos mis respaldos, fotos y videos.

Para más información de esta útil herramienta pueden visitar el sitio oficial de testdisk http://www.cgsecurity.org, una buena opción para casos donde una persona por accidente reescribe o borra la tabla de partición del disco.


domingo, 31 de marzo de 2013

ZSH

Ufff, que de tiempo que no escribía por aquí, en verdad que he tenido este blog bastante abandonado (nunca porque quisiera), sin embargo, en estos días decidí sucumbir ante la zsh, una shell algo particular, la usé por primera vez cuando instalaba mi funtoo usando el System-Rescue-CD y me di cuenta que la shell tenia unas cosas que no tenía la que usualmente usaba, así que hoy por fin, luego de investigar un poco de la zsh logré colocarla como quería, parecida al bash que presenta funtoo/gentoo.
    Para instalarla es necesario usar nuestro árbol de portage, para ello:

# emerge -av zsh zsh-completion

El primero es el paquete de la zsh y el segundo es el paquete necesario para el autocompletado dentro de nuestra caja gentoo/funtoo

luego de realizar la instalación es necesario editar el archivo .zshrc que se encuentra dentro del home del usuario por lo tanto (nota: cuando se inicia por primera vez ejecuta un ayudante para configurar las opciones que deseamos, pero yo prefiero editar mi archivo)

$ vim ~/.zshrc

y colocamos lo siguiente:

# Número de líneas en el historial
export HISTSIZE=100000
# Número de líneas salvada en el historial luego de cerrar sesión
export SAVEHIST=100000
# ubicación del historial
export HISTFILE=~/.zhistory
# comando cuando se ejecuta history
setopt inc_append_history
# módulo para completado de comandos de gentoo
unsetopt equals
# alias para listar en color
alias ls='ls --color'
# Módulo de autocompletado
autoload -U compinit
compinit
setopt completealiases
# Módulo de colores dentro del prompt
autoload colors; colors
zstyle ':completion:*' menu select

#color en el promt en este caso los de gentoo
export PS1="%{$fg_bold[green]%}%n@%{$fg_bold[green]%}%m%{$fg_bold[blue]%} %~ $ $reset_color"
#titulo en la bara de la terminal
chpwd() {
  [[ -o interactive ]] || return
  case $TERM in
    sun-cmd) print -Pn "\e]l%~\e\\"
      ;;
    *xterm*|rxvt|(dt|k|E)term) print -Pn "\e]2;%n@%m:~\a"
      ;;
  esac
}
#bindkeys como inicio y fin
typeset -A key
                                                                                                                        

key[Home]=${terminfo[khome]}

key[End]=${terminfo[kend]}
key[Insert]=${terminfo[kich1]}
key[Delete]=${terminfo[kdch1]}
key[Up]=${terminfo[kcuu1]}
key[Down]=${terminfo[kcud1]}
key[Left]=${terminfo[kcub1]}
key[Right]=${terminfo[kcuf1]}
key[PageUp]=${terminfo[kpp]}
key[PageDown]=${terminfo[knp]}

# configurar las teclas correctamente
[[ -n "${key[Home]}"    ]]  && bindkey  "${key[Home]}"    beginning-of-line
[[ -n "${key[End]}"     ]]  && bindkey  "${key[End]}"     end-of-line
[[ -n "${key[Insert]}"  ]]  && bindkey  "${key[Insert]}"  overwrite-mode
[[ -n "${key[Delete]}"  ]]  && bindkey  "${key[Delete]}"  delete-char
[[ -n "${key[Up]}"      ]]  && bindkey  "${key[Up]}"      up-line-or-history
[[ -n "${key[Down]}"    ]]  && bindkey  "${key[Down]}"    down-line-or-history
[[ -n "${key[Left]}"    ]]  && bindkey  "${key[Left]}"    backward-char
[[ -n "${key[Right]}"   ]]  && bindkey  "${key[Right]}"   forward-char

if (( ${+terminfo[smkx]} )) && (( ${+terminfo[rmkx]} )); then
    function zle-line-init () {
        printf '%s' "${terminfo[smkx]}"
    }
    function zle-line-finish () {
        printf '%s' "${terminfo[rmkx]}"
    }
    zle -N zle-line-init
    zle -N zle-line-finish
fi


Hay otros detalles, que colocaré cuando los logre configurar correctamente, preo con esto basta para tener una zsh funcionando correctamente, y seguir con la configuración acostumbrada dentro de nuestra bash

Luego de realizado esto, se debe editar el archivo /etc/passwd usando el comando vipw (no lo olviden). Y se cambia /bin/bash por /bin/zsh en el usuario que deseamos que use zsh luego reiniciamos la sesión y listo.


miércoles, 2 de mayo de 2012

Creando una app con python, Tkinter y libvirt

     Entre esta semana y la que pasó estuve dedicado a realizar una pequeña aplicación que se encargaba de conectarse con libvirt mediante python y Tkinter, como conozco bien el funcionamiento de virsh pensé que sería fácil, pero por el contrario me costo algunas horas de dedicación.

     La app que deseaba realizar consta de tres (3) botones uno para encender, uno para apagar y otro para verificar el estado de la máquina virtual, por lo tanto decidí aventurarme con python y tkinter para realizar dicha tarea; los dos primeros botones no presentaron ningún problema, ya que con os.sytem puedo ejecutar comandos de consola, pero para el tercer botón si que me costo varios días de dedicación a Internet y preguntándole a mis amigos programadores en python, sin embargo, luego de leer un buen rato y por recomendación de Carlos Ruíz (@carlosgr_arahat) un gran amigo y excelente programador, decidí trabajar con la API de libvirt con python, tal y como se comenta en este enlace.

     Me remangué las mangas y a programar, me dí cuenta de cuan oxidado estoy en este mundo, pero decidí no rendirme y terminar este proyecto, el cual culminé con éxito, aquí anexo el código para personas que como yo no tengan muchos conocimientos en programación y puedan obtener un buen resultado:

from Tkinter import *
import os
import tkMessageBox
from tkColorChooser import askcolor
from tkSimpleDialog import askfloat
from tkFileDialog   import askopenfilename
import libvirt


class App:

    def __init__(self, master):

        frame = Frame(master)
        frame.pack()

        self.button = Button(frame, text="Encender", fg="dark green", command=self.encender)
        self.button.pack(side=LEFT)

        self.button2 = Button(frame, text="Apagar", fg="dark red", command=self.apagar)
        self.button2.pack(side=LEFT)

    self.button3 = Button(frame, text="Estado", fg="black", command=self.estado)
    self.button3.pack(side=BOTTOM)

    def encender(self):
        os.system("virsh -c vbox:///session start Windows")
    def apagar(self):
        os.system("virsh -c vbox:///session destroy Windows")
    def estado(self):
    conn = libvirt.openReadOnly(None)
        dom0 = conn.lookupByName("Windows")
    estado = dom0.info()
    estado1 = estado[0]
    if estado1 == 1:
         tkMessageBox.showinfo(title="Estado de la Maquina virtual", message="La Maquina Virtual se Encuentra Encendida")
    else:
         tkMessageBox.showinfo(title="Estado de la Maquina virtual", message="La Maquina Virtual se Encuentra Apagada")

root = Tk()
root.title('Inicio de Maquina Virtual')
root.minsize(250,75)
texto = Label(root,text="Bienvenido al Gestor de Maquina Virtual\n" "A continuacion escoja encender para iniciar MV\n" "o Apagar para apagar la Maquina Virtual")
texto.pack()#side=TOP)
app = App(root)

root.mainloop()
    Como se puede apreciar es para trabajar con virtualbox, por lo tanto en la parte de los estados sólo me interesa es encendido o apagado, por eso lo dejé así, pero para un futuro no muy lejano pienso agregarle los demás estados.

    Por otra parte como se observa en el último botón (estado) me valgo del módulo libvirt para traerme el dom0.info() que me genera una lista de valores que luego sólo extraigo la primera posición que es un número del 0 al 8 y son los 9 estados de los dominios (sin estado, en ejecución, bloqueado, pausado por el usuario, se esta apagando, apagado, estrellado*, entre otros) más info aquí.

    Espero que les sea de ayuda esta información y que no pasen tantos días como yo haciendo esta tontería de aplicación.


*estrellado quiere decir que por algún error en el dominio este falló y dejó de funcionar.