viernes, 17 de julio de 2015

Descargar datos en formato CSV del lado del Cliente (javascript)

Introducción


La introducción la pongo solo para darles a conocer el por qué decidí hacer esta entrada en mi blog, si quieren ver directamente el código, favor ir a la siguiente sección.

Pues hace unos días necesitaba hacer la descarga de un archivo CSV desde el lado del cliente, encontré varias opciones pero la moyoría funcionaba únicamente para navagadores no-Internet Explorer. Esto era un problema ya que funcionalidad debía ser multi plataforma. Después de un tiempo encontre una opción para IE con el inconveniente de que abría un dialog de "Save As", que no era lo que estaba buscando, y además IE solo permite descargar contenido "Html/text" quitándole por completo la extensión al archivo y dejando únicamente las opciones "Html/text". Por supuesto, aún así se puede descargar el contenido como CSV especificando el nombre del archivo junto con la extensión .csv entre comillas, sin embargo, esto no es para nada práctico para el usuario. Lo curioso de esto es que, en la mayoría de los blogs, decían que era la única forma de hacerlo. Pues si hay otra forma y es la siguiente:

Procedimiento


Primero debemos convertir los datos de Object/Json a contenido CSV. Para este ejemplo utilizaremos un Object, sin embargo, un objeto Json puede ser convertido facilmente a object mediante JSON.parse(). Para realizar esta conversión utilizamos el siguiente código:

function convertDataToCsv(objectData)
{
    var csvData = '';
    var row = '';

    for (var index in objectData[0])
    {
 row += index + ',';
    }
    row = row.slice(0, -1);
    csvData += row + '\r\n';

    for (var i = 0; i < objectData.length; i++)
    {
 var row = '';
 for (var index in objectData[i])
 {
     var arrValue = objectData[i][index] == null ? '' : '="' + objectData[i][index] + '"';
     row += arrValue + ',';
 }
 row.slice(0, row.length - 1);
 csvData += row + '\r\n';
    }
    return csvData;
}


Como segundo punto, debemos convertir el contenido CSV a an objeto Blob mediante:

var blobContent = new Blob([convertDataToCsv(objectData)], { type: 'text/csv;charset=utf-8;' });


Como tercer punto, detectar el navegador que estamos utilizando. Para esto existen muchas formas de hacerlo, una de ellas es la siguiente:

function isInternetExplorer() 
{
    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

    if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./))
  return true;
            
    return false;
}


Y por último, dependiendo del navegador, realizamos lo siguiente:

if(isInternetExplorer())
{
    navigator.msSaveBlob(blobContent, 'file.csv');
}
else
{
    var link = document.createElement('a');
    link.href = URL.createObjectURL(blobContent);
    link.style.visibility = 'hidden';
    link.download = 'file.csv';
    document.body.appendChild(link);
    link.click();
    document.body.removeChild(link);
}

Espero que a alguien le sea de ayuda.

martes, 30 de diciembre de 2014

Mis metas para el 2015


Se viene el 2015 y, como todos los años, muchas personas ven hacia el futuro con grandes esperanzas, nuevos deseos y sobre todo con un ánimo de cumplir grandes metas, muchas de las cuales son nuevas y el resto son simplemente una continuidad de las que no se lograron alcanzar en el año en curso.

Pero, qué de bueno trae esto?

Alcanzar una meta genera una satisfacción personal que realmente vale la pena experimentar, yo personalmente y con la ayuda de Dios, he logrado alcanzar muchas de mis metas en este 2014.

Pero, qué pasa cuando no se alcanzan?

Dependerá de cada persona cómo llegar a tomar el fracaso en la persecución de una meta. Sin embargo, es importante resaltar que para lograr una meta siempre es necesario contar con fuerza de voluntad, disciplina y claro... recursos.

Bien, pues este año he decidido hacer un pequeño listado de algunas metas que quisiera lograr alcanzar siendo realista y considerando la mayoría de variables que me rodean día con día, y he decidido escribir algunas de ellas aquí como una pequeña medida de presión para lograrlas. Estas son:

  1. Recuperar el 50% del peso que perdí este año: hace unos meses empecé a bajar de peso por una mala racha de enfermedades que, gracias a Dios, ya fueron superadas casi en su totalidad. Se que será difícil por mi constitución y la rutina que actualmente llevo, pero de eso se trata, encontrar la forma de lograrlo.

  2. Leer como mínimo 3 libros: se que a muchos les parecerá que esto es algo sencillo, pero somos muchas las persona a las que el hábito de lectura simplemente no se nos da. Pero entonces para qué hacerlo? He decidido hacerlo porque en los libros se encuentra mucho material de aprendizaje que no se encuentra de otra forma. Audio libros ya he escuchado muchos, pero no es lo mismo. Aactualmente tengo 2 libros ya en mis manos:  "Empreliderazgo" de Dave Ramsey y "Guía para Invertir"- de Robert Kiyosaki. Ambos libros ya los había comprado antes pero no los he leído porque como dije antes, la lectura no se me da. Solo me falta el tercero, pero ese en el camino lo decidiré.

  3. Completar un curso en Coursera: Durante mis estudios universitarios y de maestría, se nos exhortaba a llevar por lo menos un curso en el sitio www.coursera.org . Nunca terminé uno y por eso, en este nuevo año, si quisiera hacerlo. En ese sitio encontrarán cursos muy interesantes pero como también dije antes, se requiere de fuerza de voluntad y disciplina.

  4. Continuar aprendiendo francés: Hace un par de años empecé a aprender francés de forma autodidacta a través de los sitios: https://www.busuu.com/es/, www.livemocha.com y www.duolingo.com. Entonces, mi intención es retomar esta metodología, yo se que quizá no sea la mejor forma de hacerlo, o al menos no la forma óptima, pero mi objetivo en este año no es lograr dominar el idioma, simplemente conocer lo básico.

  5. Empezar y encaminar mi proyecto personal: Desde hace mucho tiempo que he tenido la intención de iniciar un proyecto personal, y he intentado arrancarlo con amigos y compañeros de trabajo pero, por alguna razón, solo queda en el tintero y no se logra concretar un avance significativo. Pero para este año tengo nuevas ideas que me pueden ayudar a establecer los cimientos del proyecto.

Bien, cómo lo mencioné al principio estos son solo algunos de los objetivos que quiero lograr en este nuevo año. Aparte de estos, existen otros más que son algo personales y por eso no los incluyo aquí, sin embargo, los tengo bien anotados y sé que me ayudarán a mejorar como persona.

Los invito, si así lo desean, a que hagan también un listado de metas, objetivos o propósitos a alcanzar en este 2015 ya sea que lo compartan o no, y de esta forma cambiar un poco su ritmo de vida, encontrarle más sentido a las actividades diarias y disfrutar de lleno este año que está por empezar. Además, este ejercicio nos puede ayudar a desarrollar nuestra disciplina para que cada año se nos haga más fácil alcanzar nuestras metas.



jueves, 9 de octubre de 2014

El polémico McDía Feliz




El día de ayer miércoles 8 de octubre de 2014, se celebró nuevamente en Guatemala el llamado McDía Feliz, pero como siempre, no se hicieron esperar los comments, tweets, posts, etc. de opiniones que van en contra de esta actividad.

Como tuve la oportunidad de comentar en un blog (específicamente en la entrada: http://elsalmon.org/razones-para-no-participar-en-la-compra-especial-de-hamburguesas-hoy/), estos comentarios me recuerdan mucho a la fábula de la olla de cangrejos (para los que no la conocen, pueden investigarla).

Nunca entenderé por qué nuestra naturaleza será siempre buscar el lado negativo a cualquier actividad que incluso pueden servir de ejemplo para impulsar el apoyo a la gente más necesitada.

En cuanto a algunos aspectos criticados, yo contestaría:
  • Es propaganda para la empresa?  Si... y qué?
  • Es propaganda para algunas figuras públicas del país? Si... y qué?
  • Realmente se invierte lo que dicen que se invierte en el beneficio de las personas que lo necesitan? Ni idea, y como no cuento con los datos, no me parece justo criticar al respecto.
Yo siempre respetaré la opinión de todos, pero me desagrada en gran manera los comentarios negativos ante actividades como esta ya que como dice el dicho: "si no ayuda, no estorbe".

Por mi parte disfruté del ambiente de fiesta y, por qué no decirlo, de la hamburguesa también.

Aprovecho para agregar un fragmento de la noticia:

Este año, todo lo recaudado por la venta de Big Macs será destinado para apoyar a la Fundación Infantil Ronald McDonald para el funcionamiento y mantenimiento de las tres casas y albergues. Además, se ayudará en la construcción de 300 viviendas para familias de escasos recursos con la Organización Un Techo para mi País, por quinto año consecutivo.
Se aportará también para la operación de niños de escasos recursos con problemas cardiacos con la Fundación Aldo Castañeda, y para programas de la organización Visión Mundial con el objetivo de reducir la desnutrición crónica con la organización Visión Mundial. Se apoyará también la construcción de una sala de espera para los padres de los niños en la Unidad de Cirugía Cardiovascular de Guatemala (Unicar).
 Fuente Prensa Libre del 9 de octubre de 2014:
http://www.prensalibre.com/noticias/comunitario/empieza_16_edicion_mcdia_feliz_guatemala_0_1226277436.html


jueves, 25 de septiembre de 2014

Mi percepción del "Nuevo Apple" en el mundo de los SmartPhones

Hace ya mucho tiempo quise obtener un iPhone, ¿por qué? Bueno porque los Android me desesperaron (en otras entradas  podrán ver algunas actualizaciones que hice que al final no me funcionaron para nada, luego escribiré sobre este tema).

Hace un par de años, logré comprar un iPhone 4S el cual me gustó mucho por su facilidad de uso, portabilidad y su elegancia física. Hasta la fecha, es un teléfono que no me ha fallado para nada, siempre se mantiene fluido en su funcionamiento y ha soportado todas las actualizaciones que hasta el momento han sido publicadas.


A poco menos de un año de haber comprado el 4S, Apple presentó el flamante iPhone 5 y poco tiempo despues el iPhone 5S (no quiero ni hablar del 5C), ambos un poco más grandes físicamente que el 4S y con nuevas funcionalidades.


Ok, por requerimientos de hardware era comprensible un pequeño aumento en el tamaño del dispositivo. A su vez, presentaron el Inigualable iOS7 con sus colores pasteles y una que otra nueva funcionalidad.

Pues decidí actualizar mi dispositivo 4S con el nuevo iOS7 e inmediatamente me arrepentí de hacerlo. Personalmente no soy muy amigo de los colores y su diseño "flat". Pero por qué no decirlo, el teléfono funciona correctamente, mantiene su fluidez y al pasar del tiempo me acostumbre a su diseño.

Sin embargo, desde la publicación del iPhone 5S y el iOS7, mi percepción de Apple como productos de extrema calidad empezó a deteriorarse, pero no fue hasta los problemas recientes que me han hecho pensar que la próxima vez que quiera comprar un iPhone, deberé analizarlo más de dos veces.

¿De qué problemas estoy hablando?

  1. Apple cayó en el juego de los SmartPhones grandes con lo que hasta su competencia directa se burló de ellos (y con toda razón). Yo soy de la idea de que un teléfono no debe ser grande, debe ser de fácil portabilidad y de fácil manejo. 
  2. También cayó en el juego de los "SmartWatch", cuando (en mi opinión muy personal) es un gadget realmente innecesario siempre que requiera cargar cerca el SmartPhone.
  3. Procedimiento de producción de teléfonos grandes mal ejecutado, ya que el iPhone 6 Plus simplemente al poco tiempo se dobla si lo cargas en la bolsa del pantalón (según algunos usuarios).
  4. iOS 8 con problemas desde su Release. Salió una actualización 8.0.1 que dió mas problemas que su antecesora, por lo que tuvieron que deshabilitar la actualización y permitir a los usuarios regresar a la versión 8.0.0. 
  5. Y para ponerle la cereza al pastel, todos los usuario de iTunes forzosamente tienen ahora en su cuenta el nuevo disco de U2. Tan ridículo fue el asunto que Apple tuvo que habilitar un botón de eliminación para los usuario que no querían ese disco.
En cuanto al funcionamiento y rendimiento yo sigo pensando que iOS sigue superando a Android con el simple hecho de que, con menor hardware, Apple ha logrado mantener un sistema operativo más fluido y con mejor rendimiento que Android, es decir, Android ha necesitado de dispositivos con bastante hardware para funcionar como se debe.

Pues bien, esta es mi percepción del que yo llamo "Nuevo Apple" que no cabe la menor duda que, desde la partida de Steve Jobs, Apple ha cambiado y no para bien, esperemos que sea solo una mala racha y que después de estos inconvenientes vuelvan a producir productos de calidad para los consumidores finales.  







martes, 14 de mayo de 2013

Algunas frases que impactan negativamente tu imagen social

1. No me importa lo que piense la gente de mí:

Hace un tiempo un amigo mio me dijo: "mira...a mi realmente no me importa lo que la gente piense de mi, asi vivo mas feliz" en su momento pensé... "que bien así debe de ser". Sin embargo, tiempo después otro amigo mio me dijo una frase que creo que tiene mas sentido: "mira... prácticamente uno es lo que la gente piensa de uno como persona". A mi punto de vista, esta última frase es bastante cierta ya que he visto (principalmente en el trabajo) como existen personas que, con el afán de dañar a otra, inventan o hacen mas grandes los errores de estas otras personas lo cual les genera problemas. Es decir, muy buena puede ser realmente una persona pero si los que le rodean piensan lo contrario, esta persona jamás podrá sobresalir porque tu imágen está dañanda...

Para este caso, la solución que yo veo es simple: ser autentico y siempre comportarte de manera correcta y como dice el dicho, evitar lo mas que se pueda el hacer cosas buenas que parezcan malas.

2. Es mi dinero y yo con mi dinero hago lo que yo quiera, total... yo me lo he ganado:

Si pensas así... mas equivocado no podes estar. Simplemente porque yo tengo el dinero no voy a contratar a alguien para que vaya a matar a otra persona. Solo porque tengo el dinero no lo voy a malgastar en algo superficial sabiendo que puedo invertir el dinero o utilizarlo para cubrir las necesidades de mi familia.

Desde mi punto de vista, el dinero es un tema delicado. Muchos dicen que lo material no lo es todo, sin embargo no podemos negar que vivimos en un mundo material, por lo cual, considero que el dinero debe invertirse en cosas que realmente sean de nuestra utilidad y que no perjudique en ningún momento los intereses de otras personas, recordemos que nuestro derecho termina en donde empieza el derecho de los demás.

3. La persona con la que estoy debe aceptarme tal y como soy.

Hace unos días me llegó un correo en el que había un cuento sobre unos erizos (tal vez les llegó a ustedes también)... pero para no hacer muy grande la historia, el cuento se refería a aceptar los defectos de los demás para poder "sobrevivir". Desde mi punto de vista, esto no puede estar más lejos de la verdad, existen situaciones y acciones que no se pueden aceptar. En muchas ocasiones existen "defectos" de algunas personas que incurren en la falta de respeto hacia otras, lo cual es inaceptable. Cualquier cambio que nos ayude a mejorar como persona debe ser aplicado a nuestro comportamiento o a nuestra forma de ser.

Así como esas "frases" han de haber muchas más, por el momento solo pondré estas porque este era un post que lo tenía en "borrador" desde hace mucho tiempo...




sábado, 28 de abril de 2012

El Efecto Orton en Photoshop Elements 9


Hoy en día existen muchos efectos para aplicar a nuestras fotografías, pero son pocos los que las resaltan tan bien como el efecto Orton (Se llama así por su creador Michel Orton).
Este efecto consiste en aplicar algunos ajustes a la imagen original, primero sobre exponer las capas, aplicar desenfoque y mezclarlas.
Este efecto se puede lograr fácilmente siguiente los siguientes pasos…
Paso1:
Hacer backup de tu imagen original.
Paso2:
Abrir la imagen con Photoshop Elements y duplicar la capa original (Ctrl+j).
Paso3:
Sobre exponer la capa duplicada accediendo a la opción Mejora->Ajustes de Luz->Niveles.  En el cuadro de diálogo seleccionar un radio de entre 2 y 3 (este valor depende del gusto de cada persona)
Paso4:
Aplicar desenfoque a la capa duplicada accediendo a la opción Filtro->Desenfoque->Desenfoque Gaussiano y en el cuadro de dialogo seleccionar un radio de entre 20 y 30 (este valor depende del gusto de cada persona)
Paso5:
Sobre exponer la capa original mediante la opción Mejora->Ajustes->Ajustes de Luz->Niveles y en el cuadro de dialogo seleccionar un valor de 1.5 (de igual forma, este valor puede variar según la imagen lo necesite)
Paso6:
Mezclar las capas. Ir a la capa duplicada y en la sección de mezclas utilizar la opción “Multiplicar”.
Y eso es todo, a continuación muestro el antes y el después de una imagen:
Antes Después
Real-Estate Real-Estate copia
Espero que a alguien le sea de utilidad….

miércoles, 25 de abril de 2012

Transponer el resultado de un Query en ORACLE

El día de hoy necesitaba básicamente convertir las columnas del resultado de un query en filas y las fila en columnas. Para esto pensé en varias soluciones pero ninguna de ellas era eficiente ya que cada vez crecía más el query haciendolo más lento...

Investigando por ahí vi que hay un operador en ORACLE que hace el trabajo, el operador es "PIVOT". Veamos como funciona:

Query inicial:

SELECT t.Nombre, COUNT(*) Cantidad
FROM TablaX t
GROUP BY t.Nombre

Esto nos da el resultado:

Nombre Cantidad
nombre1 5
nombre2 3


Query con PIVOT

SELECT * FROM
(
SELECT t.Nombre
FROM TablaX t
)
PIVOT (COUNT(*) FOR Nombre IN ('nombre1','nombre2') )

Esto nos dará el resultado:

nombre1nombre2
53

Esta es una opción bastante útil para estadísticas....