Blog de Daniel Zegarra Rotating Header Image

Por favor basta ya con la tortura de animales

Otro niño enciende con un fósforo el combustible

Hace unos días publiqué en mi muro de facebook un pedido de actuable para firmar una carta pidiendo se haga justicia para un cachorro que es quemado vivo en Eslovaquia y apenas tuve respuestas sobre ello. La meta es llegar a las 12mil firmas en 10 dias, algo que se esta a punto de lograr. Pero firmando esta petición no podemos cambiar el pasado. Ni siquiera es seguro si este cachorrito recibirá algo de justicia (la verdadera justicia seria cadena perpetua para sus asesinos, algo que es seguro no va a ocurrir).

Los seres humanos creamos los Derechos Humanos aunque no todos los cumplen. Pero menos aun se cumplen los derechos de los animales. En países como el mio que pertenecen al tercer mundo no existe ley que proteja a los animales. La policía, aun si encontrara a una persona maltratando a un animal (torturándolo incluso) no cuenta con una ley que le permita amedrentar al ciudadano. Vamos que, para nuestros congresistas es mas importante una ley para aumentarse el sueldo que combatir la pobreza y mucho menos proteger a los animales.

La tortura de mascotas domesticas ocurre incluso en paises como Estados Unidos, España, Mexico e Israel. Solo escribe “perro quemado vivo” en google para comprobarlo.

No me imagino el sufrimiento que un perrito debe pasar en manos de esta gente que en muchos casos son niños concientes de sus actos. Los vídeos que son capturados por estos enfermos suelen ser borrados rápidamente por infracción de políticas  y las compilaciones protestando por estos actos corren la misma suerte por mostrar las mismas imágenes ofensivas.

He tenido la oportunidad de ver uno de estos vídeos, y realmente créeme cuando te digo que la brutalidad del acto supera mil veces lo que te puedas imaginar. No ha pasado un día en que no recuerde esas imágenes y es eso lo que me impulsa a escribir este post y a empezar a apoyar activamente a las entidades que protejan a los animales.

Si aun piensas que apoyar esta causa no vale tu tiempo, pues no te voy a obligar a ver el video pero si te pido ver estas imágenes que explican mejor que con palabras la razón de mi angustia. Créeme, no a sido fácil para mi volver a ver este video.

Se trata de un cachorro (menos de un año de edad) que es amarrado del cuello con una soguilla para rociarle combustible y luego prenderle fuego. Los adolescentes autores de este asesinato siguen al perrito hasta que este muere luego de casi un minuto de agonía.

El bebe es capturado y rociado con combustible

El bebe es capturado y rociado con combustible

Otro niño enciende con un fósforo el combustible

Otro niño enciende con un fósforo el combustible

El pobre animalito tarda en sabes que ya se encuentra condenado

El pobre animalito tarda en sabes que ya se encuentra condenado

Corre con la esperanza de escapar del dolor

Corre con la esperanza de escapar del dolor

Se retuerce envuelto en fuego hasta finalmente morir

Se retuerce envuelto en fuego hasta finalmente morir

De más esta decir que el audio donde se escucha al cachorro llorar por que le rocian combustible y más aun por arder en llamas es desgarrador. Le toma al perrito casi un minuto el morir y durante este tiempo, a pesar de perder la movilidad de su cuerpo, sigue llorando cubierto de fuego.

Por favor, no permitas que escenas como estas se repitan en tu país. El ignorarlas y bloquear los vídeos en sitios como youtube hacen que la muerte de estos animalitos sea en vano. Un número más para sumar a una estadística que ni siquiera existe.

Enlaces de interés

Petición de actuable. Por favor, entra aquí y firma. Es lo menos que puedes hacer.

Ley de protección a los animales que nunca fue aprobada. Y por lo tanto Peru aun no cuenta con una ley que proteja ni siquiera a nuestras mascotas.

Desde hoy Claro ofrece oficialmente 3Mb de ancho de banda para móviles

Por fin, desde hoy algunos usuarios de los planes smart de Claro Perú tienen 3Mb de ancho de banda. Me lo dijo una operadora cuando llame hace una semana para preguntar cuando volverian los 3 megas (porque habia notado que habia vuelto los 700kbps) y me aseguro que volverían con el nuevo ciclo de facturacion y esta vez de manera oficial.

Con esto me contento hasta que termine mi contrato y cambie de equipo.

Por si no lo saben, Claro limita (o limitaba) la velocidad de navegación a 700kbps en teléfonos moviles. Las demás velocidades estaban solo disponibles para tablets y modem usb.

Diseño de un administrador de reportes

Luego de dejar de postear por tanto tiempo queria volver publicando algo util, liberar algun proyecto o algo por el estilo, pero entre ver el siguiente capitulo de 24 y sanear un proyecto para ser publicado siempre salio ganando 24.

Lo siguiente no es tan interesante como lo que tenia planeado pero es de utilidad para quien necesita crear plantillas de reportes y esta a punto de empezar a indagar como hacerlo con PHP.

El requerimiento

Si por algun lado hay que empezar es por aqui. Se necesita lo siguiente:

  • Tener un catalogo de reportes
  • Elegir el formato en que quiero cada reporte (el mismo reporte pueda obtenerse en distintos formatos)
  • La cantidad de parametros que cada reporte necesita sea variable

El modelo de datos

El modelo de las tablas que necesitamos se limitan a lo siguiente.

Modelo de datos de un catalogo de reportes

Modelo de datos de un catalogo de reportes

Tenemos tres tablas. Una guarda el catalogo de reportes, la otra el catalogo de formatos de archivos y una tabla de relación que describe los formatos en que cada reporte se encuentra disponible.

Clases PHP

Acostumbro a trabajar consumiendo servicios. Me parece que es mas limpio si tengo bien separado la vista (en el cliente) de la lógica del negocio (en el servidor). Ademas, si no amarro la vista a los controladores puedo utilizar otros clientes (flash, java, etc) sin hacer cambios al código.

Como dije, trabajando como servicios tengo el servicio/clase llamado Sistema_Reporte que tiene los siguientes métodos:

  • Sistema_Reporte
    • run(codigo:string, formato:string, params:array)
      Ejecuta un reporte. recibe el código del reporte, el formato en que se requiere y los parámetros que necesita el reporte para hacer su trabajo.
    • getReporte(codigo:string)
      Entrega información disponible sobre un reporte (nombre, descripción, etc).
    • getFormats(codigo:string)
      Devuelve una matriz con los formatos que un reporte puede generar.
    • getParams(codigo:string)
      Entrega una matriz con los parámetros que recibe el reporte.
    • getParamValues(parametro:string)
      Algunos parametros son predefinidos (true, false, “si”, “no”) y otros serán IDs de un catalogo. Este método devuelve una matriz con los valores posibles que un parámetro puede tomar cuando estos no pertenecen a una tabla catalogo.
    • scan(ruta:string)
      Busca y registra los reportes encontrados en la ruta dada (relativa a la raíz del sistema).

Lo que este servicio hace es tan solo recibir la petición y direccionarlo al reporte especificado. Los reportes seran otras clases PHP que pueden estar ubicadas todas en un mismo directorio u ordenadas en otros directorios junto a otras clases de sus modulos, eso no importa ya que en nuestro modelo de datos estamos almacenando la ruta donde se encuentra el reporte. El metodo scan realizara una busqueda de reportes en el directorio especificado usando el siguiente algoritmo:

  • Abre el directorio y lista su contenido
  • Recorre el contenido tomando en cuenta solo los archivos con extension .php
  • Carga cada archivo php y revisa si la clase cargada es hija de Sistema_Reporte_Plantilla (todos los reportes deben heredar de esta clase para ser reconocidos como tal).
  • Si la clase cumple con los requisitos es registrada en la tabla de catálogos de reportes si es que aun no se encuentra allí.

En la clase Sistema_Reporte_Plantilla definimos los métodos que todo reporte debe tener:

  • Sistema_Reporte_Plantilla
    • getName()
      Entrega el nombre del reporte
    • getDescription()
      Entrega la descripcion del reporte
    • getFormats()
      Devuelve una matriz simple con los formatos que este reporte es capaz de generar (pdf, xml, csv)
    • getParams()
      Una matriz con los parametros que el reporte debe recibir
    • getParamValues(param)
      Devuelve una matriz con los valores posibles que un parámetro puede tomar cuando estos no pertenecen a una tabla catalogo.
    • run(format, params)
      Ejecuta el reporte.

Como ves, varios métodos del reporte son bastante similares a los del servicio. El servicio tan solo va a redireccionar la petición para que el usuario no tenga acceso directo a los reportes.

Descargar Modelo PHP para la administración de reportes
Descargar Modelo de datos para la administración de reportes

Ahora, para implementar los formatos, debes implementar metodos como _runPDF(params) o _runXLS(params) y generar los respectivos documentos. Dale un vistazo al codigo en el metodo run() de Sistema_Reporte_Plantilla para mas información.

Mi primer app para Android

No diré que fue difícil porque la verdad no lo fue. A pesar de que llevo con un dispositivo Android por varios meses ya no he tenido tiempo ni interés suficiente para intentar crear una aplicación por mi mismo. El catalogo de aplicaciones para Android es de por si tan extenso que no había tenido la necesidad de crear algo para el.

Mi intención era compilar una aplicación muy simple en corto tiempo y con el menor esfuerzo posible y para conseguirlo utilice la ayuda del proyecto App Inventor de Google.

App Inventor es una herramienta que te permite crear aplicaciones simples para Android de forma rapida y sin tener que aprender Java. El diseno de la interfaz se crea desde el browser y la logica utilizando un ejecutable java (es necesario tener instalado Java SDK).

Diseño de la aplicación

Diseño de la aplicación

Creando la lógica.

Creando la lógica

Para mi primer experimento elegí crear un catalogo electrónico de cuentas contables, en clase de contabilidad nos han pedido conseguir un listado de las cuentas contables y, ademas de la hoja de excel con los mas de mil cuentas existentes, no he podido encontrar un lugar donde vendan este listado en formato físico. Poder consultar la identidad de una cuenta a partir de su código sera de utilidad en clase.

  1. Instalar el SDK de App Inventor.
    El instalador copia archivos en la pc que son necesarios para compilar la aplicación y probarla en un emulador en el mismo teléfono.
  2. Utilizar el diseñador desde el browser y armar la lógica usado el complemento java.
  3. Probar la aplicación utilizando el emulador que viene con el SDK o en un dispositivo Android compatible.
  4. Compilar la aplicación y copiarla al teléfono. El archivo compilado ya se encuentra con la extensión apk. Por lo tanto, es tan simple como copiarla al teléfono y ejecutarla desde ahí.

Ahora, publicar el instalador en el market no es tan sencillo. Para empezar, el instalador generado no esta preparado para la tienda de Android porque no esta firmado digitalmente ni incluye los datos mínimos requeridos para ser compartido con otros usuarios. App Inventor es un proyecto que aun se encuentra en fase de pruebas y no esta pensado para crear aplicaciones que sean utilizadas en producción, sin embargo hay una forma de modificar el instalador para agregar las características restantes y que este sea aceptado por la tienda.

Los pasos para conseguirlo se pueden encontrar aquí y es necesario que ya tengas el instalador apk generado.

El resultado del experimento puedes descargarlo siguiendo el siguiente enlace:

Descargar AndroidApp: Plan Contable 2011 (Perú)

No he tenido tiempo que prepararlo para la tienda. Por el momento, solo puede instalarse copiandolo manualmente al dispositivo.

Información sobre la aplicación

Emulador de dispositivo

Emulador de dispositivo

Muestra información de la cuenta contable asociada al código ingresado. Ademas muestra la naturaleza del registro y lo que representa. La información la halla de una tabla de google docs compartida. Fue la manera mas rápida que encontré de realizar una búsqueda en una tabla. Como la tabla se encuentra en mi cuenta de google docs requiere de otra cuenta de google valida para tener acceso a la tabla de mi cuenta, sin importar que la tabla de datos sea publica. Por lo tanto te pedirá acceso a tu cuenta de google al realizar la primera consulta. Esto puede parecer sospechoso :P . Repito, esto se debe a que los datos de este ejemplo se encuentran almacenados en una cuenta de google docs. Lo ideal seria que se almacenen en la aplicación (ya que esta data suele no cambiar en años).

Enhanced by Zemanta

El demonio también usa Linux

Hace un momento apareció esta alerta en mi pantalla. Me imaginé como hubiera reaccionado un hombre de Dios que no sabe lo que significa un “demonio” en informática.

Advertencia intrigante