jueves, 22 de octubre de 2026

PHP2Shell y tus proyectos antiguos con Zend Framework 1 (php7.3 a php8.3)

 


Con las vulnerabilidades críticas en el propio motor de PHP, las que se publicaron en:

  • CVE-2026-109618: corrupción de memoria relacionada con errores de agotamiento de memoria (Out of Memory, OOM).
  • CVE-2026-109619: uso de estado interno obsoleto después de liberar memoria, un problema conocido como use-after-free.

Se han catalogado críticas al recibir una puntuación de 9.2 sobre 10, se han suministrado varios parches, pero las versiones que ya no reciben soporte ahí quedan, obligando a hacer una migración a la versión 8.x que ya posee parches.

Y bien, como muchos desarrolladores existen y se mantienen sistemas que funcionan desde hace mucho, en mi caso con ZF1, y pero, que hacemos?

Pues no todo está perdido, hace ya algún tiempo deje de usar la versión oficial por está:

https://github.com/WebTigers/TigerZF

Está librería funciona sobre php8.3 (Si, yo mismo la probé), y mentiría si es solo de cambiar la librería y correrla en el servidor sobre una versión 8.3 o superior y ya, pues si tocan hacer algunos ajustes de configuración, en mi caso el manejo de las sesiones, no voy detallar el tema porque cada uno tiene su propia configuración, el caso es que con cambios sencillos y un buen IDE (PhpStorm) esta tarea es bastante rápida.

Existe otra repo que proporciona la misma solución (Pero está no la he probado):

https://github.com/Shardj/zf1-future

Espero sus proyectos no se compliquen con todo este tema del PHP2Shell.


miércoles, 14 de octubre de 2026

Wordpress, menú admin requiere una actualización

 


Wordpress es la solución rápida para poner en línea un sitio web, bien sea algo sencillo o más elaborado, incluso sistema que requieran de una api.

Dentro de dicho mundo noto que a nivel de desarrollador falta mucho aún que mejorar, una de esos detalles es el menú principal del admin, por ejemplo la implementación de nuevo niveles a nivel de menú, y de banderas para determinar qué se debe mostrar o no de acuerdo a roles o permisos sin la necesidad de un plugin para ello.

¿Afectaría mucho dicho cambio?

Al parecer no es una propuesta que no se haya presentado, el equipo de desarrollo lo sabe, lo ha propuesto y aún sigue en debate, el tema es la filosofía de Wordpress respecto a la compatibilidad hacía atrás con miles de miles de plugins ya existentes.

Podría implementar algo muy complejo para soportar lo ya desarrollado?

Directamente sí, pero la palabra complejo es el tema, se trata de que sea sencillo, escalable, y que no cueste demasiado en términos de tiempo y desarrollo.

Entonces se hará o no?

Solo el tiempo lo dirá, mientras podemos realizar nuestros propios desarrollos bajo dicha limitaciones, o es que existe algo que aún no se del tema? Pues instrúyeme con toda confianza.


martes, 13 de octubre de 2026

Kimi K2, la fabulosa herramienta (IA) open source

He estado usando Kimi los últimos meses, y la versión gratuita para comprobar que tanto la podemos exprimir, y la verdad me dejó impresionado.

Estamos hablando del sector del desarrollo, ví algunos comentarios comparándolo con el modelo de GTP y debo estar en desacuerdo con ello, y es que incluso la gestión de archivos es más cómoda que Gemini.

Siempre he dicho que GTP no sirve para codear, es pésimo desde mi punto de vista, mientras DeepSeek da soluciones inexistentes, GPT le da muchas vueltas al asunto y comete muchos errores.

El caso es que Kimi te arma a detalle lo que le solicitas, dejemos claro que hablamos de dev senior, así que sabemos que queremos y cómo, me encantá la estructuración que proporciona y claro, comete errores, pero son manejables.

Lo veo como una excelente opción, pero honestamente nada supera a Gemini (Hasta ahora).

jueves, 24 de julio de 2025

KivStore: Biblioteca ligera de Kotlin que simplifica el trabajo con DataStore de Android



SharedPreferences no se recomienda usar por Google por ser bloqueante, no contar con type safety y disponer de un manejo de errores deficiente, en su lugar tenemos a DataStore, y bueno en tiempos donde lo que se tenía era SharedPreferences utilice la librería KotPref, la que proporcionaba un manejo práctico y además agregaba soporte para LiveData. Dicho esto y para proporcionar una migración super fácil me decidí por desarrollar lo que he llamado KivStore.

KivStore es una librería que envuelve a DataStore simplificando su uso, proporciona una api con seguridad de tipos basada en delegados, esto facilita la gestión de datos y observadores de tipo Flow y LiveData.

Todo es tan simple (Como con KotPref, ya que está inspirado en dicha librería), tan solo debemos crear nuestro modelo:


Y listo, ya podemos usarlo en nuestros proyectos:


Así mismo la reactividad, el observar valores es muy sencillo:

Con Flow:

Con LiveData:


Pero sobre todo hay que destacar que la librería mantiene en memoria los datos que se usa, así estos se mantienen actualizados y se sirven al instante, al mismo tiempo que se persisten.

Ya está perfecto, todo bonito, pero como lo instalo y configuro en mi proyecto?

También es sencillo, se instala a través de JitPack:


Y agregamos la dependencia:

implementation("com.github.darkzyrb.kivstore:kivstore:v1.8.1")
// Mirar en el repositorio la última versión

Luego se inicializa en el Application de tu proyecto:


Y listo, creas tus modelos y voila.

Más información en el repositorio: https://github.com/DarkzyRB/kivstore

viernes, 20 de junio de 2025

Soporte de tipos Double para SharedPreferences en Android Studio Kotlin (Y librería KotPref)

Hace poco implemente un flujo de datos de tipo Flow desde un source de datos (y consecuentes capas) hasta la vista de un composable en Android, y pues requería datos de tipo Double por su precisión en una de las propiedades del modelo, desde hace un tiempo vengo usando kotpref que es una excelente librería para el manejo de datos en local con SharedPreferences, el caso es que este no proporciona soporte para tipos Double, claro, porque directamente SharedPreferences no te da el soporte para ello, así que desarrolle la extensión para dicha librería.

Pero vamos por pasos, la raíz del tema es SharedPreferences, entonces debía soportar de forma limpia aquello, y pues la manera eficiente es usando bits, lo que guarda tal cual el contenido que es lo que deseamos, luego lo recuperamos como un double, peeeeeero como nos gusta la funcionalidad y usabilidad creamos la extensión para SharedPreferences primero:

De esta manera ya podemos y con confianza almacenar y recuperar de forma “nativa”:

preferences.putDouble(key, value)

preferences.getDouble(key, defaultValue)


Así que ya podemos continuar con el desarrollo de la extensión para Kotpref, comenzando con extender AbstractPref que es propia de la librería de Kotpref, y sobrescribimos sus métodos:

Y ahora los métodos de acceso:


Y voila, espero les sirva, dejo el link del repositorio de la extensión en cuestión:

https://github.com/darkzyrb/kotpref-extensions/tree/master/double-pref