viernes, diciembre 31, 2010

Feliz año nuevo!!!

Navidad 2010
Navidad 2010,
originally uploaded by fido07.
Espero que el próximo 2011 esté increíble para todos

El Centro Histórico de la Ciudad de México

Cena de fin de año
Cena de fin de año,
originally uploaded by fido07.
Vista desde el gran Hotel de la Ciudad de México de la pista de hielo instalada por parte del gobierno del Distrito Federal en una noche por demás fría.

martes, junio 01, 2010

La jalada de Banxico

Hoy me entero por medio del diario El Universal que el Banco de México (Banxico) ha decidido beneficiar a los bancos al deslindarlos de la responsabilidad de los fraudes, clonaciones y cargos indebidos en transacciones que involucren el uso de tarjetas de crédito con chip.

Me parece una gran burla a los consumidores, nosotros no decidimos que las tarjetas fueran con chip o con banda magnética, un consumidor busca una institución financiera que sea seria, eficiente, que brinde servicios que aporten valor, con tasas competitivas, etc. Claro, ésto ocurre en el mundo de las ideas de Platón porque en México no tenemos tasas competitivas (comparadas con el resto del mundo y en gran medida por las políticas de riesgo implementadas por éstas instituciones y su gusto por no perderle en nada), nos cobran comisiones hasta por disposición de efectivo en cajeros automáticos (cuando en realidad ésto baja más los costos de operación de los bancos), nos cobran el uso de banca electrónica, etc.

Así que, a mi me vale madre (honestamente) si mi banco decide utilizar banda magnética, chip, código de barras o una hamburguesa para manejar mi crédito; siempre y cuando no tenga yo que pagar los fraudes cometidos por los errores cometidos por la institución en cuestión al tomar la decisión del medio a utilizar.

En conclusión, dado que el pedo es del consumidor y no de los amigos banqueros, pues nadie hará caso (con mayor razón) de las denuncias de los consumidores, pareciera entonces que al gobierno le da igual si nos dedicamos a los fraudes bancarios y por lo tanto éste país podría convertirse fácilmente en un paraíso para practicar la pesca (fishing) y algunos otros deportes recreativos para la comunidad de sombrero negro.

México, México, México, que lejos estamos de hacer las cosas como se debe.

Mi última pregunta es... ¿por qué no regresan a Guillermo Ortíz? como gobernador del Banxico?

jueves, mayo 06, 2010

Validación de fecha con javascript

Aquí les dejo una pequeña función que recibe una fecha y valida que ésta exista (por aquello de los años bisiestos).

function validaFecha(fecha)
{
var resultado = true;
var dia = fecha.substring(0,2);
var mes = fecha.substring(3,5);
var ano = fecha.substring(6,10);
var maxDias = 31;
if (mes == 4 || mes == 6 || mes == 9 || mes == 11)
maxDias = 30;
if (mes == 2)
{
if (ano % 4 == 0)
maxDias = 29;
else
maxDias = 28;
}
if (mes>12 || mes<1)>
if (dia>31 || dia<1)>
if (ano<1980>2200) return false;
if (dia>maxDias) return false;
return(resultado);
}

La premisa es simple, la mayoría de los meses del año (enero, marzo, mayo, julio, agosto, octubre y diciembre) tienen 31 días, por eso es el valor por defecto del máximo número de días del mes. Solo hay que ver que el máximo número de días cambie a 30 en el caso de los meses que así lo requieren (abril, junio, septiembre y noviembre); en caso de que sea febrero, habrá que determinar si es un año bisiesto (para ello me basé en la documentación de la wikipedia), el resto se explica por sí mismo.

El formato de fecha que espera ésta función es: dd/mm/aaaa, o sea, dos dígitos para el día, dos para el mes y cuatro para el año; en realidad el separador de éstos es indistinto, por lo que es factible utilizar "/" ó "-". El ejemplo de fecha para validar bajo ésta máscara es: 06/05/2010.

UPDATE:
La misma función pero con un par de líneas de código menos para hacerla más estética

function validaFecha(fecha)
{
var dia = fecha.substring(0,2);
var mes = fecha.substring(3,5);
var ano = fecha.substring(6,10);
var maxDias = 31;
if (mes == 4 || mes == 6 || mes == 9 || mes == 11)
maxDias = 30;
if (mes == 2)
{
if (ano % 4 == 0)
maxDias = 29;
else
maxDias = 28;
}
if (mes>12 || mes<1)>
if (dia>maxDias || dia<1)>
if (ano<1980>2200) return false;
return(true);
}

miércoles, abril 28, 2010

Adendum a la generación en Word con PHP


Tuve un problema al sustituir campos que contienen saltos de línea, ya que dichos saltos no aparecían en el texto reemplazado sino que todo quedaba junto haciéndolo ilegible.

Tuve que comenzar con la Wikipedia, http://en.wikipedia.org/wiki/Rich_Text_Format, para ir entendiendo un poco del formato RTF, pensé que sería necesario ir a leer bastante de la especificación para entender mejor que hacer pero no fue necesario.

Resulta que los saltos de línea (representados en php como "\r" y "\n) no se utilizan con los caracteres especiales de cualquier codificación, sino que en su lugar se utiliza el código especial \par

Así que, suponiendo que, la variable que tiene saltos de línea en su código se llama parrafo ($parrafo), basta con sustituir los caracteres de salto de línea por ese código especial:

$parrafo = str_replace("\n", ' \par ',$parrafo);

Y luego la agregamos a nuestra plantilla

$archivo = str_replace('tag_parrafo',csv_encode_conv($parrafo), $archivo);

Y listo!!!

martes, abril 27, 2010

Generando un documento Word con formato en PHP

Me costó un trabajo impresionante lograrlo, pero al final aquí está. Comencemos por algunos hechos:

  • Para generar archivos de Word en nuestro servidor web sería útil a través de una plantilla de la cual solo baste con modificar los datos.
  • Ésta plantilla debe estar en formato de texto plano para poder editarla con PHP, los documentos de Word, y en general los de Office, están hechos en archivos comprimidos que contienen a su vez múltiples archivos con el documento y metainformación, si no me crees basta con que cambies la extensión de uno de éstos archivos a .zip o .tar y lo abras con 7-zip (desconozco si con Winzip o alguna otra herramienta de compresión se pueda hacer).
  • Al concluir el trabajo, el servidor no requerirá tener instalado Word para generar o editar documentos.
  • El formato con el que trabajaremos será RTF (Rich Text Format), aunque posteriormente el usuario lo descargará como un archivo .doc de Word.
  • Es un trabajo que nos tomará algún tiempo.
Lo primero que hay que hacer es crear la plantilla en Word, un formulario que se adapte a tus necesidades, en él tienes que crear algunos textos que funcionarán a manera de etiquetas que posteriormente reemplazarán su contenido por el que tu elijas (idealmente de una base de datos). Por ejemplo, vamos a suponer que tienes en tu plantilla de Word un espacio donde tienes que escribir el nombre de alguien, teniendo:

Nombre:

Delante de ese texto no tienes escrito nada, ahí es donde tendrás que agregar un texto que utilizaremos como etiqueta, asegúrate tanto como puedas que éstas etiquetas no formen parte del texto que posteriormente agregarás, por ejemplo:

Nombre: tag_Nombre

En éste caso, en algún punto nuestro programa sustituirá tag_Nombre por algún valor que nosotros decidamos. Lo mismo haremos para cada valor que vayamos a reemplazar por contenido dinámico en algún punto. Al terminar la plantilla guarda el documento con extensión .rtf.

Aquí empieza el desmadre, ahora habrá que abrir el documento generado en RTF desde algún editor de texto que lo abra como texto plano, encontrarás que parece nada legible, te pongo un ejemplo a continuación:

\par \hich\af39\dbch\af31505\loch\f39 Nombre:
\par }{\rtlch\fcs1 \af0 \ltrch\fcs0 \f39\insrsid8026758 \hich\af39\dbch\af31505\loch\f39 tag_Nombre}{\rtlch\fcs1 \af0 \ltrch\fcs0 \f39\insrsid863771

Se ve de la fruta, busca tus etiquetas, en el ejemplo resalté la que uso en negrita, fíjate que ese tag esté completo, ya que verás que algunas están dividas (por ejemplo podrías estar por una parte "tag_Nom" y por otro lado más adelante "bre", si caes en ese caso tendrás que agregar manualmente en tu editor de texto plano la parte que falta para completarlo, ojo no vayas a borrar en ese mismo editor la otra parte, guarda tu documento, vuelve a editarlo en word y ahora si borra desde ahí la parte que sobra, en el ejemplo que te comento teóricamente en word quedaría en pantalla tag_Nombrebre teniendo que borrar el último "bre"; lo mismo tendrás que hacer para cada etiqueta que hayas implementado. Cuando hayas terminado con todas las etiquetas, entonces si tendrás una plantilla lista para trabajar con PHP.

Ahora viene la chamba de PHP, comienza copiando la siguiente función, cabe señalar que yo no la escribí y la encontré en otro blog, lamentablemente no recuerdo dónde fue y me apena mucho no poder reconocerlo como se debería:

function csv_encode_conv($var, $enc='Windows-1252') {
$var = htmlentities($var, ENT_QUOTES, 'utf-8');
$var = html_entity_decode($var, ENT_QUOTES , $enc);
return $var;
}

Ésta función la utilicé para convertir mi texto de UTF-8 que es en el que está mi base de datos al formato ANSI de Windows, si tu BD está en otro código de caracteres tendrás que modificar la función, a menos que de antemano ya la tengas compatible con el ANSI de Windows. Ésta función tenla a la mano porque más adelante la utilizaremos.

Ahora habrá que invocar la plantilla en una variable php:

$archivo = file_get_contents('plantilla.rtf');

Y aquí viene la magia, supón que tienes el nombre que deseas imprimir en tu plantilla en una variable llamada nombre que proviene de la BD, insisto en que en mi ejemplo la BD está codificada en UTF-8, así que lo sustituiremos en la plantilla con la línea:

$archivo = str_replace('tag_Nombre',csv_encode_conv($nombre),$archivo);

Esa sencilla línea hace la chamba de llenar ese campo en la plantilla, así que podrás hacer lo mismo con el resto de tus etiquetas y sus respectivas variables, si tu BD está ya en formato compatible con Windows en cuanto al código de caracteres hubiera bastado:

$archivo = str_replace('tag_Nombre',$nombre,$archivo);

Una vez que has reemplazado el contenido de todas tus etiquetas, solo resta guardar tu archivo, para ello puedes hacerlo con la siguiente línea:

file_put_contents('mi_archivo.doc',$archivo);

LISTO!!!

Espero haya sido de utilidad =)

jueves, abril 22, 2010

Login lento en MySQL

Instalamos un servidor de BD en Windows, el cliente (nuestro ambiente web) corre en un Linux, la aplicación jalaba muy lenta, al hacer varias pruebas nos percatamos que el problema era el tiempo que tomaba (unos 6 segundos aprox.) el Linux en validar credenciales de MySQL, después de ello las consultas corrían bastante bien.

Si conectábamos un cliente Windows (en mi equipo para probar) al mismo servidor el tiempo de login era inmediato, así que suponíamos que el problema era con el servidor Linux.

Tras buscar soluciones, encontré un dato muy interesante, contra todas mis teorías la modificación para corregir ésta situación no se tenía que hacer en Linux, sino en el servidor de BD, basta con modificar el archivo my.ini y agregar en la sección mysqld la siguiente línea:

skip-name-resolve

Reinicié el servicio y todo jaló a la perfección, éste parámetro tiene que ver con la resolución por medio del DNS, al principio no le encontré lógica alguna, ya que la conexión que realizo la hago mediante IP y no por nombre de host, por tal motivo parecería que el DNS sirve para nada en éste caso, pero por algún motivo ésto funcionó.

Espero sea de utilidad para algunos.

viernes, marzo 19, 2010

Calendario raro para la Champions


De acuerdo al portal de ESPN (liga), para la Champions de Europa (debería ser la única pero ya ven que ya igual hay en CONCACAF), se jugará primero el partido de vuelta de las semifinales y un día antes de la gran final se jugará el partido de ida de las semifinales... WTF!!!

miércoles, marzo 17, 2010

Commodore strikes back





Para nosotros los nostálgicos de la computación, hablar de una Commodore es hablar de una época donde un disco flexible (así se llamaban las unidades de almacenamiento previos a las memorias USB y los CD/DVD) tenía muchísima más capacidad de almacenamiento que lo que tenía de memoria RAM en sí una computadora.

En particular, la Commodore 64 (el modelo más comercial) tenía tan solo 64 kilobytes de memoria RAM.

Hoy, vía Fayerwayer, podemos ver el regreso de ésta mítica marca con un modelo nostálgico que integra el CPU en el teclado.

La neta, la neta, si me muero por tener uno de éstos equipos. Las configuraciones serán variadas pero modernas (procesadores Intel, memoria RAM de hasta 4Gb, 4 puertos USB, etc)

XBox slim


De nueeeeeevo en el blog de vidaextra nos sorprenden con otra novedad que es la imagen de lo que se presume será la nueva versión slim de la XBox, misma que buscaría competir con el PS3 slim.

La supuesta intención es lanzarla junto con Natal (el proyecto de Microsoft de control de sensor de movimiento) y ésto sería anunciado el E3 (en junio de éste año).

Algunas otras de las novedades que se esperan para el E3 es la presentación del control de movimiento del PS3 (muy similar al Wiimote), la nueva entrega de la Leyenda de Zelda para el Wii, Rock Band 3 y lo que se antoja más atractivo (sin confirmar) Gears of War 3.

martes, marzo 16, 2010

Gears of War III


Apenas ayer comentaba acerca del primer vistazo (unos 40 segundos) de Gears of War 3 que encontré publicados en el blog de vida extra y el día de hoy me encontré en ese mismo portal con la noticia de que al parecer podremos disfrutar del final de la historia de Marcus contra los Locust en abril del próximo año. Así que prepárense porque a partir de éste mes seguro iremos descubriendo a cuenta gotas el material que vaya surgiendo.

De antemano les comento que ha habido fuertes rumores en la internet acerca de la posibilidad de que éste último capítulo llegue también al PS3.

Ya con fecha el lanzamiento de Avatar en Bluray pero...

Qué les parece? Avatar podría llegar el 22 de abril a las tiendas en los conocidos formatos DVD y bluray, pero el problema es que muy probablemente ésta versión sea un gancho vil de lo peor.

La versión de abril tentativamente carecerá de contenido extra como trailers, entrevistas, etc; porque según los creadores aprovecharán al máximo los 50 Gb que ofrece el medio para presentarla.

A mi solo me quedan unas cuantas dudas, por ejemplo, por qué no incluir 2 discos como muchas otras películas para presentar el material adicional?, por qué hablan de una versión "ultimate" programada tentativamente para noviembre con la versión 3D del film? Si la versión 3D va a ser más cara, cómo van a igualar la calidad de imagen de la versión de abril si técnicamente la versión 3D consume más espacio por estar compuesta de dos imágenes?

Me parece que es una verdadera carencia de profesionalismo por parte de los responsables lanzar una versión en abril sin ningún valor agregado, a mí si me gusta comprar películas originales por ver la presentación de la película a máxima calidad pero también disfruto del contenido adicional que para mi gusto es valor agregado al producto que ya vimos en cine. Por ello, me parece excesivamente ambicioso que planeen que un usuario pague hasta 3 veces por ver la misma película (cine, versión bluray / DVD de abril y la versión 3D de noviembre). Ahí es donde podríamos justificar la compra de la versión pirata de abril para ahorrarnos una lana en lo que vemos que nos ofrecen finalmente. =(

lunes, marzo 15, 2010

Gears of War 3 / Unreal 3 demo

Una demostración del Unreal Engine 3, mostrando un pequeñísimos fragmento de lo que veremos en Gears of War 3 por parte de Epic Games.



jueves, marzo 04, 2010

Sentimientos encontrados: DRM, DLC, etc

Ya se venía hablando acerca del sistema DRM que la compañía Ubisoft estaba desarrollando para combatir la piratería en sus productos, el modo de operación se basaba en imposibilitar al jugador hacer uso del software (juegos pues) si es que éste no estaba conectado de tiempo completo en internet. Hoy en vidaextra publican que al parecer el sistema ha sido violado un día después de haber salido el primer juego con éste sistema al mercado.

Existe otra tendencia para combatir la piratería que es el denominado DLC, cuya filosofía se basa en la adquisición del software (de nuevo juegos) mediante descargas sin que salga a la venta un formato distribuido en un medio físico (DVD, BD, UMD, etc).

En lo personal, estoy en total desacuerdo con la utilización de sistemas DRM, mi primer motivo es que no te permiten tener un backup personal del producto que tú adquiriste, imagina que compras a un niño un DVD (sí, su sistema de protección era una especie de DRM) y sabes que el niño le va a dar tal uso que el disco original durará casi nada; entonces decides sacar una copia que se pueda tratar sin el menor cuidado pero oh sorpresa!!! tiene DRM. También, en el caso mencionado de Ubisoft, me parece una reverenda jalada que te pidan estar conectado full time a la red, que tal que lo quiero jugar en la casa de mis abuelos en mi laptop (o llevando mi XBox) pero pues mis abuelos no tienen Internet porque es cosa del diablo. Son #$%&%$.

Ahora DLC, como modelo me agrada muchísimo, poder comprar tus juegos a cualquier hora sin tener que esperar a que abran la tienda, poder descargar el juego cada que quieras (dado que ya lo pagaste), etc. Solo le veo un par de inconvenientes, el primero es que los precios no son tan competitivos tomando en consideración que no hay ni medios físicos en los que invertir, ni hay intermediarios (que todos sabemos que se comen gran parte del pastel), ni hay otros gastos de logística como transportación, etc. El segundo inconveniente tiene que ver con ciertas plataformas, por ejemplo, en el caso de Microsoft y su caja X, tienes que comprar un disco duro de suficiente capacidad para almacenar éstos juegos que no ocupan precisamente poco espacio, y los discos duros no son genéricos así que te los venden como si vinieran firmados por el mismísimo Master Chief.

En fin, creo que el futuro de la lucha contra la piratería debería a su vez buscar beneficios para quienes compramos juegos originales, sin obligarlos a pagar más costos (discos duros, copias adicionales, funcionalidad limitada como el caso de Ubisoft), dándoles más beneficios por la adquisición original. Creo que la idea más acertada al momento son los DLC pero me gustaría que las consolas pudieran utilizar discos duros genéricos u otro medio de almacenamiento como las SDHC, es mucho pedir?

martes, enero 26, 2010

El karate kid ahora será negro

No se si sabrán pero está por salir una nueva aventura de la saga Karate Kid, yo creo que se les ha de antojar tanto como a mí, o sea naaaaada.

El nuevo niño karateca será Jaden Smith, el hijo de Will Smith y Jada Pinkett. El maestro será Jackie Chan.

La historia se desenvolverá en China, donde aparentemente el chico norteamericano llegará de mudanza con su madre y ahí le pondrán unas madrinas que orillarán a Jackie a instruirlo en el camino de las artes marciales.

Guaaaac

domingo, enero 24, 2010

PS3 hackeado?

De acuerdo al artículo publicado en FayerWayer, la PS3 ha sido hackeada, de acuerdo a lo que dice hacker responsable es cuestión de (poco) tiempo para que sea posible instalar software no autorizado por Sony en la consola (homebrew).

Ésto podría abrir otras opciones como la ejecución de juegos piratas, de ser ésto posible veremos dos fenómenos consecutivos en el mercado, el primero serán éstos juegos a un precio alto (por los precios de las grabadoras de bluray y los discos grabables); el segundo fenómeno derivado del 1ero. es la baja de precio de los discos grabables de bluray por pura cuestión de demanda. Sin duda, ésto también fomentaría la piratería de películas de bluray.

Al parecer llegó la hora en que la piratería arribará a los formatos Bluray que ya llevaban algún tiempo sin masificarse, cabe señalar que Bluray ya ha sido vulnerado y es posible encontrar películas ripeadas de éste formato en los torrents.

Cómo debería lucir todos los días la Ciudad de México












Ésta foto la tomé el 21 de enero de éste año, así debería lucir la Ciudad todos los días.

sábado, enero 16, 2010

Pena ajena

El día de hoy me topé con la nota en el Universal de que la Secretaría de Seguridad Pública del DF buscará un mecanismo para frenar a los usuarios de twitter que publican las ubicaciones del alcoholímetro.

Me parece un insulto que le den tanta importancia a éste hecho, si bien no es una conducta correcta la de los conductores que lo hacen, me parece vergonzoso que atenten contra la libertad de expresión.

Me parece un insulto que la ciudadanía tenga que enseñarle al gobierno cómo aprovechar los medios electrónicos.

Me parece un insulto que le inviertan neuronas a éste hecho en lugar de estar haciéndolo para atender problemas más graves de inseguridad.

Chale, México, México, México, de mal en peor.

lunes, enero 11, 2010

Hasta los controles remotos cambiarán




































Con la culminación del CES de éste año no solo vienen pegando los dispositivos 3D, las marcas buscan innovar incluso en cuanto a controles remotos.

El 1er. ejemplo lo tuvimos con el Samsung y su control remoto que irremediablemente nos hace pensar en el iPhone, con una pantalla touch screen.

El 2do. ejemplo lo tuvimos con LG quien presentó su control remoto similar al WiiMote, un control para los que hasta buscar botones les da flojera.

Les recomiendo que se den una vuelta por Engadget, donde además de ésto podrán ver lo mejor del CES, desde smartphones con Android, lectores electrónicos de libros, la nueva tendencia en cómputo móvil: la nueva generación de tablet hasta los gadgets más inútiles pero que llaman la atención como lo fueron los Gimme Tunes.

domingo, enero 10, 2010

NFL

Tras el intenso fin de semana con los wildcards queda listo el escenario para que la semana que entra disfrutemos los siguientes encuentros:

Americana
Ravens @Colts. Sábado 7 PM
Jets @ Chargers. Domingo 3:30 PM

Nacional
Cardinals @ Saints. Sábado 3:30 PM
Cowboys @ Vikings. Domingo 12 PM

En lo personal espero con más ganas el de los Ravens, éstos partidos definirán la final de cada competencia.