unserialize(): Error at offset X of X bytes en PHP

Hace unos días tuve un problema al obtener datos serializados almacenados en una base de datos MySQL. Los datos se guardaban con serialize()  (se que con JSON es mejor pero se necesitaba guardar el objeto PHP) pero al momento de cargar el arreglo de objeto con unserialize() me arrojaba el siguiente error:

yii\base\ErrorException: unserialize(): Error at offset 579 of 664 bytes

Luego de varias horas intentando solucionar el error. Encontré en stack overflow que el problema ocurre con la codificación de los campos de texto (text) en la base de datos. Cuando se obtiene la información, si la codificación usada por PHP es diferente con la de la BD el número de bytes indicado por serialize() no coincide y la lectura se hace mal, ocasionando el error mencionado.

Solución al problema

La forma de solucionar el problema es cambiar la codificación del campo tipo texto, por ejemplo, en mi caso estaba con utf_general_ci y tuve que cambiarla a utf8_general_ci:

ALTER TABLE nombre_de_tabla MODIFY tu_columna VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci;

¡Listo!, con esto no deberías presental el problema de nuevo.

Cómo crear el diseño web perfecto para tu página principal en este nuevo año 2018

Conseguir crear el entorno gráfico ideal para tu sitio online quizás no se encuentre entre los propósitos más populares de año nuevo, pero sí que debe de estar entre tus tareas principales si quieres que este sea un año fructífero de cara al mundo de los negocios online. Y es que sin importar de si se trata de una tienda online, o una web puramente informativa, trabajar concretamente en el diseño web ayudará a potenciar el tráfico web de la misma, y sobre todo a fidelizar clientes.

Son muchos los factores que están relacionados de una forma u otra con el diseño web, por lo que si eres una persona que no dispones de los conocimientos en informática necesarios como para llevarlos a cabo, lo mejor será sondear el mercado en busca de una empresa especializada en diseño web y todos estos otros servicios clasificados dentro del marketing online. En otras palabras: una agencia completa que trabaje tanto el diseño y el desarrollo web, como el SEO, las redes sociales… y te ofrezca un servicio técnico de calidad con el que tengas cierta garantía de efectividad ante cualquier percance o inclusive una modificación posterior para ajustarlo todo a los nuevos tiempos.

Te explico por qué es tan importante contratar un diseño de páginas web de calidad

Y es que no “solamente” se trata de un entorno visual con el que presentar tu proyecto al resto de los internautas a través de la red (con el peso que ya de por si conlleva esa característica tan “simple”) sino que además el diseño de páginas web influye en una enorme cantidad de ámbitos y sectores más, que participan de forma directa y activa en el éxito que tu página online pueda llegar a tener.

Potencia las ventas y reduce el efecto rebote: A la hora de crear un diseño para tu web eficiente, se deben de valorar dos aspectos fundamentales. Uno, sería la correcta estructuración de la web de cara a la navegación por la misma. Que sea sencilla e intuitiva, para que los visitantes puedan encontrar aquello que estuvieran buscando de forma rápida y efectiva, ya que de lo contrario abandonarán tu página para ir a otra de la competencia en busca de dicha información, servicio y/o producto.

A su vez, deberás de establecer una disposición que invite a investigar por otro tipo de contenido relevante dentro de la misma, para permitir ofrecer tus productos y servicios más relevantes al margen de cada búsqueda concreta que realice cada internauta. Así, aumentarás el tiempo que dura cada visita y esto en términos algorítmicos para Google se traduce en una optimización muy positiva y que ofrece al usuario contenido verdaderamente interesante, por lo que la premia.

Esto evidentemente te ayudará a obtener más tráfico y convertirlo además en uno de mayor calidad. Evidentemente, un diseño que combine a la perfección con la temática de la web, y dispuesto de forma que cautives al espectador, otorgándole la confianza que necesita a la hora de comprar online, también aumentará las ventas de dicha web.

Ayuda a mejorar aspectos del marketing digital tan importantes como el SEO: Estas pautas a establecer deberán de estar en concordancia además con los motores de búsqueda en otros muchos aspectos, tales como las etiquetas, el contenido, el lenguaje de programación utilizado, las plantillas (o themes) utilizados, los enlaces (tanto internos como externos), etc.

Si se elabora todo desde una base sólida, exenta de fallos y en base a una estructura que favorezca todos estos factores, los resultados serán mucho más óptimos en el ámbito del sector online, y lo verás reflejado en el posicionamiento de tu web, así como las keywords principales relacionadas con el nicho de mercado al que pertenezca la misma. ¿Entiendes ahora por qué es tan importante contar con un diseño web de calidad?

¿Qué es el desarrollo web?

Desde hace unos años escuchamos bastante el término de desarrollo web y probablemente se pregunten o han escuchado: ¿Qué es eso? ¿No es lo mismo que programación? Simplificando, desarrollo web consiste en crear soluciones tecnológicas que se ejecutarán dentro de un navegador (como Firefox/Chrome/Edge o Safari). Por este motivo es diferente a otro tipo de programación porque un navegador funciona de una forma particular y la información debe viajar a través de una Intranet o Internet. En otras palabras, crear todos esos programas y sitios web que vemos dentro de un navegador.

El uso del término desarrollo implica tareas mas allá de la programación: análisis de requisitos, conceptos de usabilidad, seguridad de la información, ingeniería de software, programación del lado del servidor y cliente, entre otros. Cuando alguien te diga que es desarrollador, implica que no solo codifica programas sino va mas allá y realiza mas tareas.

¿Que sé debe conocer para el desarrollo web?

Primero debes conocer los conceptos básicos de programación web:

  • HTML: es el lenguaje de marcado que permite estructurar el contenido que ves en un navegador. Es el esqueleto de la parte visual de la aplicación. En mi opinión aprender HTML es el primer paso para aprender desarrollo web, pues solo necesitas un editor de texto y un navegador para empezar a crear tus primeras páginas.
  • CSS: permite definir como va a lucir el HTML dependiendo del dispositivo. Indica al navegador los colores, tipos de letra, posición y tamaño al contenido del HTML. Su curva de aprendizaje es mediana pero dominar la tecnología requiere mucha experiencia.
  • JavaScript: es el lenguaje de programación que permite definir eventos, realizar tareas, acciones. Se ejecuta tanto en el lado del cliente (a través del navegador) como del servidor (para realizar cálculos, obtención de datos, entre otros). Si solo quieres hacer páginas web sencillas, no es necesario que aprendas esto por los momentos. Sin embargo, tarde o temprano te toparas con JavaScript a medida que vayas haciendo sitios mas complejos. Pues necesitaras agregar interacciones y automatizar acciones.
  • Lenguaje de programación del lado del servidor: las tecnologías anteriores permiten realizar páginas web que se muestran en el navegador. Pero cuando necesitamos interactuar con el servidor: iniciar sesión, subir archivos, descargar información. Necesitamos programar las acciones que debe realizar el servidor donde está alojada la página para saber que debe responder. Esto se hace mediante lenguajes de programación del lado del servidor. Entre los mas comunes suele ser PHP, JavaScript, Ruby, Java, Python, entre otros.

¿Qué aprender luego?

El siguiente paso es hacerte experto en estas 4 tecnologías, e ir en todo el ecosistema alrededor de ellas. Por ejemplo, todo sitio web se aloja en un servidor, entonces debes aprender como se configurar y optimizar uno. La información se almacena en base datos por lo que aprender a diseñarlas y consultar información  a través de ella te ayudará a ser mejor profesional. Conocer como obtener buenos resultados en los buscadores, visualizar correctamente el contenido en cualquier dispositivo. Aplicar técnicas de usabilidad en las interfaces para mejorar la interacción con los visitantes.

Pero no todo es tecnología, pues existen cosas importantes para desarrollador web: redactar correos para conversar correctamente con clientes. Aprender cuánto cuesta una web para saber cuanto cobrar por el trabajo. Elaboración de manuales, entre otros.

¡Parecen muchas cosas!

Aunque parece mucha cantidad de información, poco a poco iras aprendiendo. Ser desarrollador web requiere muchos conocimientos y años de experiencia. Pero con paciencia y práctica lograrás convertirte en uno.  A mi me parece una excelente rama de la informática, cada año va en auge y se puede trabajar desde cualquier parte del mundo.

Espero que les haya gustado esta introducción, recuerden comentar cualquier aporte, sugerencia u opinión sobre el desarrollo web.

Happy coding!

Hace 10 años en esa fecha: Archlinux estrena nuevo logo oficial

SQL para migrar la configuración del tema en WordPress

Desde hace unas versiones WordPress ofrece Customizer, una herramienta para pre-visualizar y configurar un tema en tiempo real. Si se te ha perdido la configuración, esta entrada te explicará como migrar la configuración del tema desde la base de datos. ¿Por qué hacerlo por base de datos y no por un plugin? Pues existen escenarios donde no puedes recrear la configuración manualmente:

  • Vas a lanzar un nuevo tema hijo a producción. No puedes perder tiempo en mostrar un sitio mal configurado a las personas.
  • El tema posee una configuración muy compleja o  grande. Tomando mucho tiempo en recrear la visualización del sitio.
  • El tema esta codificado en otro idioma (escenario que me inspiró esta entrada) y no entiendes la configuración seleccionada.

¿Por qué se pierde la configuración del tema?

Esta configuración se guarda en la base de datos asociada al tema, ocasionando que si cambias a una plantilla hija o una copia de la misma, todas las personalizaciones se pierden. Inclusive, algunos desarrolladores comenten el error de colocar la versión a la carpeta del tema y al cambiar la versión, se pierden los datos de personalización.

SQL para  migrar la configuración del tema en WordPress

La configuración del tema se guarda en la tabla wp_options bajo el nombre de theme_mods_NOMBRE_CARPETA_DEL_TEMA. Por ejemplo, si tienes activado el tema twentynineteen, los ajustes del tema estarán bajo el nombre theme_mods_twentynineteen.

Para migrar la configuración, del tema cuyo nombre de carpeta en /wp-content/themes/ se llame original a un nuevo tema (hijo o con otro nombre) llamado nuevo solo debes ejecutar esta sentencia:

INSERT `wp_options` (option_name, option_value) VALUES ('theme_mods_nuevo',

(SELECT `option_value` FROM `wp_options` WHERE `option_name`='template_mods_original')

);

¡Listo! Ya con estos pasos deberías tener la misma configuración del tema padre (u otro tema si es compatible) con la plantilla cuyo nombre es nuevo (recuerda cambiarlo por el nombre de tu tema). De esta forma ahorras tiempo en recrear toda la configuración automáticamente y luego activar el tema. No perderás tiempo configurando cosas o renombrando carpetas.

Espero que les sirva este comando SQL y recuerda comentar si conoces un mejor método o como optimizar este. ¡Feliz desarrollo!

Error de JSON malformed al enviar datos a Zoho

Zoho es una excelente herramienta en la nube para la administración de negocios. Posee una excelente API REST para realizar integración de datos entre sistemas. Hace unos días tuve problemas para subir información al API y me arrojaba el error JSON malformed.

Cómo solucionar el error de JSON malformed

La documentación no indica cual puede ser el problema y en que campo. Obviamente es un error de codificación de JSON pero al revisar mi código y los datos que estaba enviando, noté que el JSON estaba bien validado. Pero me di cuenta que Zoho pide enviar el JSON dentro del cuerpo de la petición en texto plano, no en formato JSON. Por ello, al codificar los campos en la cadena, el símbolo de ampersand ( & ) puede confundirse como el inicio de un parámetro GET. Así que es necesario codificarlo con su respectivo valor en HTML que es %26.

Así que para solucionar mi problema tuve simplemente que reemplazar el valor luego de ser codificado en JSON:

$jsonString = str_replace('&', '%26', json_encode($invoice));
$body = '&JSONString=' . $jsonString;

¡Listo! Ahora si podrás subir la data a Zoho.

Hace 6 años en esa fecha: Mi análisis o review de Duke Nukem Forever

Hace 11 años en esa fecha: Frogger en JAVA (JFrogger 2k6)

Carga los productos de una orden en WooCommerce

WooCommerce es una excelente solución para crear tu propia tienda en línea. Al ser un plugin de WordPress permite aprovechar todo lo disponible para esta tecnología. Cada nueva versión incluye mejoras significantes pero sacrificando muchas veces compatibilidad hacia atrás. Hace unos meses salió la versión 3.0 que introdujo varias mejoras y cambios en el SDK. Uno de mis plugines estuvo funcionando mal con los productos variables, pues la forma de obtener los productos de una orden habían cambiado. A continuación te explico como carga los productos de una orden.

Carga de productos de una orden

El problema es que en WooCoommerce existen varios tipos de productos: simple, variable, virtual, etc. Cada uno de ellos es definido en su propia clase, entonces cuando cargas una orden en WooCommerce desde el SDK solo tienes acceso al ID. Luego poder detectar con ese ID el tipo de producto y cargar su respectivo objeto puede ser tedioso.

El primer paso es obtener los objetos que representan los productos de la orden. No se debe confundir con el producto como tal, pues estos tienen un precio y atributos únicos para la orden.  Luego de cargar estos productos, si procedemos a cargar la instancia de su respectiva clase que nos dará toda la información.

WooCommerce nos ofrece la función get_product() que dando un ID, se carga automáticamente el producto como un objeto de su respectiva clase. Permitiendo acceder y manipular la data de muchas formas.

$order = wc_get_order( $order_id );
$line_items = $original_order->get_items();

foreach ( $line_items as $item_id => $item ) {
  $wc_product = $item->get_product();
  ....
}

Y listo, ya con esto puedes obtener un objeto que representa al producto de un orden.

Hace 2 años en esa fecha: Mi opinión sobre When Google met Wikileaks

Hace 9 años en esa fecha: World Challenger JCheater v1.1

Hace 10 años en esa fecha: Un MEME

Mi entrevista en WordPress.tv por el Global WordPress Translation Day

El pasado noviembre me hicieron una entrevista en WordPress.tv, pues desde el 2016 he estado organizando encuentros de WordPress en San Cristóbal, Venezuela. El 12 de noviembre de 2016, organizamos el único Global WordPress Translation Day de latinoamérica. Allí explicamos como realizar traducciones y una herramienta para facilitar las hecha por Diego Juliao con la participación del localizador oficial para Venezuela Jordi Cuevas.

Mi entrevista en WordPress.tv

Puedes ver la entrevista a continuación, está en ingles, hablo un poco de mí y las tareas que realizo en los meetups. También explico como nació la comunidad local de WordPress y otras cosas.

Espero que les guste.