Desarrollo de Software a Medida: Coderland, Líder en Soluciones Personalizadas para el Crecimiento Empresarial

El desarrollo de software a medida desempeña un papel crucial en el crecimiento empresarial, ya que proporciona soluciones tecnológicas adaptadas a las necesidades específicas de cada empresa.

La capacidad de personalizar el software según los requisitos individuales de una empresa es fundamental para mejorar la eficiencia, la productividad y la competitividad en un mercado en constante evolución.

En este artículo, exploraremos la relevancia del desarrollo de software a medida y el papel crucial que desempeña Coderland en este ámbito. Esta última es una empresa líder en el desarrollo de software a medida, con una destacada trayectoria en la prestación de soluciones digitales personalizadas para empresas. read more

Leer más » Comentar

Ciclo

Leer más » Comentar

Cómo eliminar la notificación de actualización de plugins de WooCommerce / WooThemes

Para los que manejáis WooCommerce es muy posible que no sólo utilicéis este metaplugin de WordPress para llevar a cabo ciertas tareas en vuestra tienda, sino que hagáis uso de otros plugins para añadir cierta funcionalidad. Por cierto, recordaros que WooCommerce es un plugin para montar tiendas sobre WordPress, y lo tenemos incluido en la lista de los mejores plugins para profesionales WordPress.

install_woothemes_woocommerce_linuxhispano

Pues bien, cuando hacemos uso de estas extensiones y son las propias de WooThemes (que el nombre no os confunda, esta empresa empezó haciendo temas y luego ya era tarde para cambiar el dominio raíz) nos aparece un mensaje bastante peleón que no podemos descartar (el clásico botón de “dismiss” para que no vuelva a aparecer no está) ¿Qué hacer? A mi personalmente no me gustan estos mensajes tan contaminantes, parece que nos estén obligando a realizar la acción, y ese tipo de checkers lo único que hacen es sobrecargar nuestra web de consultas a servidores externos nuestros.

El mensaje en cuestión es el de la imagen destacada de esta entrada, y dice así:

Install the WooThemes Updater plugin to get updates for your WooThemes plugins.

¿Opciones? Cualquiera puede pensar que la mejor opción es hacerle un display: none al elemento contenedor por CSS, pero me parece un poco chapucero. ¿Por qué no aprovechamos el mismo hook que levanta para eliminarlo? Lo único que tenemos que hacer es incluir el siguiente código en el funtions.php de nuestro theme. También podemos crearnos un plugin para este propósito, pero nos vamos a quedar con la solución más directa.

remove_action('admin_notices', 'woothemes_updater_notice');

Y eso es todo, a olvidarse de tanta notificación 🙂

Leer más » 1 Comentario

wp_kses() o cómo limpiar cadenas HTML en WordPress para evitar ataques XSS

Cuando desarrollo plugins y themes para WordPress en CODECTION siempre procuro mirar por la seguridad, “sanitizando” variables tanto para evitar ataques vía inyección SQL como para evitar ataques XSS. Es muy frecuente, que si recibes peticiones y luego las devuelves por pantalla, las variables que manejes, si las maneja el usuario de alguna manera, puedan terminar siendo el origen de una ataque XSS.

Algo tan sencillo como pasar una etiqueta script o iframe en un sitio conveniente y además de un ataque XSS, eres una fuente de phising para el resto de la red. Por fortuna, WordPress facilita mucho la vida al desarrollador al respecto y para evitar este tipo de ataques nos ofrece una función que además es extensible en su funcionamiento vía parámetros.

La función en cuestión es wp_kses() y aunque es similar a strip_tags(), una función nativa de PHP, suele recomendarse para cuestiones de seguridad.

wp_kses-vs-strip_tags

¿Para qué usamos wp_kses?

Básicamente deciros que sirve para limpiar una cadena de elementos HTML indeseados (imaginad otros usos que no sea el de seguridad, se me viene a la cabeza un uso de “limpieza” de una cadena proveniente de Microsft Word o LibreOffice Write).

Tiene esta forma:

wp_kses($string, $allowed_html, $allowed_protocols);

Y los parámetros que recibe indican exactamente:

  • $string: cadena a filtrar
  • $allowed_html: etiquetas HTML que se permitirán y que no se limpiaran
  • $allowed_protocols: protocolos permitidos, por defecto vienen unos pocos y siempre se asegura que no va a permitirse etiquetas ni invocaciones a ficheros JavaScript

La función devolverá el código HTML totalmente limpiado.

El segundo parámetro es interesante, porque podemos definir también qué atributos pasarán de cada etiqueta, un ejemplo curioso:

array(
    'a' => array(
        'href' => array(),
        'title' => array()
    ),
    'br' => array(),
    'em' => array(),
    'strong' => array(),
);

Ejemplo

El ejemplo es original de Simon Wheatly. Tenemos de entrada:

Wisi <a href=”#” style=”color: red;”>defui nunc</a> dignissim <strong class=”weird”>transverbero ideo vel</strong> utinam blandit, iaceo meus epulae enim amet nibh sed brevitas. Pala consequat <script type=”text/javascript” src=”http://example.com/certainly/do/not/want/this.js”></script> capio sino regula typicus <small>luptatum</small> olim ullamcorper uxor in verto.

Vamos a dejar sólo:

  • La etiqueta ‘a’ y sus atributos ‘href’, ‘title’ y ‘target’
  • Y las etiquetas ’em’ y ‘strong’ => array()

El código sería este:

$entrada = 'Wisi <a href="#" style="color: red;">defui nunc</a> dignissim <strong class="weird">transverbero ideo vel</strong> utinam blandit, iaceo meus epulae enim amet nibh sed brevitas. Pala consequat <script type="text/javascript" src="http://example.com/certainly/do/not/want/this.js"></script> capio sino regula typicus <small>luptatum</small> olim ullamcorper uxor in verto.';
$etiquetas_permitidas = array(
'a' => array( 'href' => array(), 'title' => array(), 'target' => array() ),
'em' => array(),
'strong' => array(),
);
$salida= wp_kses( $entrada, $etiquetas_permitidas );
echo $salida; read more

Leer más » 1 Comentario

Guardar y cargar datos en la tabla opciones de WordPress

Si usas WordPress como desarrollador sabrás que hay varias formas de almacenar datos sobre su base de datos sin necesidad de crear nuevas tablas. Hoy os voy a explicar una de ellas. Aparte de esta que voy a explicaros, existen básicamente dos más:

  • Para guardar tipos de datos (menos usuarios) y sus metadatos (o atributos)
  • Para guardar datos de usuarios y sus metadatos

Estructura

Esta en concreto usa la tabla opciones, wp_options o prefijo_options y para entender cómo usar las funciones y el objetivo de la misma, lo mejor es ver su forma. Esta tabla tiene la siguiente estructura:

  • option_id: su clave primaria
  • option_name: nombre de la opción
  • option_value: valor de la opción
  • option_autoload: indica si debe cargarse o no de primeras

Como veis, tenemos la estructura típica de las tablas hash: clave / valor con: option_name / option_value tan de moda ahora en bases de datos no relacionales y tan útiles.

Tabla opciones de WordPress

=&0=&

A priori, la idea es: tengo un plugin o theme y quiero guardar un valor, por ejemplo, quiero guardar el color de fondo de los botones pues guardaría:

  • option_name: codection_color_fondo_botones
  • option_value: white

Sin embargo, gracias a la posibilidad de serializar datos, podemos meter arrays y listas en el valor, por lo que las posibilidades entonces crecen enormemente, en vez de guardar el color de fondo de los botones, podríamos guardar todas las opciones del tema:

  • option_name: codection_opciones_tema
  • option_value: array con opciones del tema
  • read more

    Leer más » 1 Comentario

    ./adb: No existe el archivo o el directorio, problemas desarrollando con Android

    Probablemente hayáis tenido problemas intentando desarrollar con Android cuando habéis intentado echar a andar el fichero adb para por ejemplo lanzar el emulador.

    El problema es que al ejecutarlo dice algo así como: “./adb: No existe el archivo o el directorio” aunque estemos en el terminal y veamos con nuestros ojos que está el fichero, que tiene el bit de ejecución marcado y que todo es correcto.

    Si te ocurre esto, lo más seguro es que estés usando una distribución de 64 bits y el IDE de Android necesita compatibilidad con 32 bits.

    La solución es sencilla: instala el paquete ia32-libs, desde el Centro de Software de Ubuntu, desde Synaptic o incluso desde la terminal: sudo apt-get install ia32-libs.

    Logo de Android

    Leer más » 1 Comentario

    Diferencia entre wp_ajax y wp_ajax_nopriv

    Cuando trabajas con AJAX en WordPress, si quieres hacerlo bien, debes hacer llamadas a admin-ajax.php y desde ahí gestionar las peticiones y sus salidas. Si conocéis esta técnica, conoceréis las funciones: wp_ajax_(acción) y wp_ajax_nopriv_(acción) (de la que no encuentro una referencia directa en el Codex, es raro).

    WordPress AJAX

    La diferencia entre ambas no se suele conocer y lo malo es que si no lo sabes, recibirás todo el rato un cero (0) como salida de la petición del admin-ajax.php si no estás usándolo correctamente. La diferencia es la siguiente:

    • wp_ajax: se usa cuando el usuario tiene que haber iniciado sesión
    • wp_ajax_nopriv: cuando el usuario no tiene que haber iniciado sesión

    La llamada sería así en cada caso:

    add_action( 'wp_ajax_<acción>',  );
    add_action( 'wp_ajax_nopriv_<acción>',  );

    Un ejemplo práctico que acabo de hacer:

    add_action( 'wp_ajax_actualizar_formulario', 'actualizar_formulario' );
    add_action( 'wp_ajax_nopriv_envio_contacto', 'enviar_formulario_contacto' );

    ¿Manejáis AJAX con WordPress? ¿Tenéis dudas?

    Leer más » 1 Comentario

    Localizar calendario datepicker de jQuery UI: formato de fecha y nombres de los meses

    Cuando hacemos desarrollos web para proyectos con algún apartado de gestión basado en formularios, lo más normal, es que terminemos teniendo que introducir fechas. Las fechas son un tanto problemáticas, tanto por su posterior manejo, como por su introducción por parte del usuario. ¿Por qué? Por dos razones:

  • Hay que introducirlas en un determinado formato, en español es primero el día, luego el mes y luego el año, todo separado por barras “tipo Unix”. Podemos hablar de diferentes formatos, depende del país y la cultura y podemos hablar también de fechas incluyendo el día de la semana o incluso el nombre del mes con letras.
  • Es más fácil y más gráfico hacer clic sobre un día en un calendario que escribir la secuencia a mano.
  • read more

    Leer más » 3 Comentarios

    Ordenar una consulta con query_posts en WordPress por un meta_value

    Cuando trabajamos con consultas en WordPress, es muy probable que necesitemos ordenar la salida de alguna forma diferente a la estándar que suele ser por fecha de forma que el más reciente aparezca primero y vayan apareciendo de forma sucesiva entradas más antiguas.

    Si usamos WordPress como una API o como una plataforma de aplicaciones, más que como un CMS y más aún como un CMS orientado a blogs, este hecho es una auténtica necesidad.

    Un caso muy frecuente es que queramos ordenar la salida en función de un meta valor. La diferencia entre una tabla normal de una base de datos y la estructura de la base de datos de WordPress formada por entradas y sus meta valores, hace que no podamos aplicar el ORDER BY directamente a la tabla entradas.

    WordPress loop

    ¿Cómo tenemos que hacerlo? Muy simple, pasándole a query_posts una serie de parámetros que lo indiquen, veamos un ejemplo autoexplicativo:

    $query_args['order'] = "ASC";
    $query_args['meta_key'] = "mi_meta_clave"; // elegimos sobre qué tipo de meta valor queremos ordenar
    $query_args['orderby'] = "meta_value_num";
    query_posts($query_args);

    Como veis es sencillo, sólo tendremos que indicar:

    • El orden
    • Sobre qué meta_key ordenar, por ejemplo “precio” o la que uséis
    • Indicar en el orderby que queremos ordenar sobre el valor numérico de esa meta información

    Con eso lo tenemos ya todo.

    Leer más » 10 Comentarios

    Modificar o activar el tamaño de caché de MySQL

    En las instalaciones por defecto de MySQL, en muchas ocasiones, o aparece deshabilitada la caché de consultas o aparece, pero con muy poco espacio disponible.

    Como podréis figuraros, la caché de consultas almacena en memoria física, la RAM, las últimas consultas realizadas y su resultado, de forma que si alguien repite dichas consultas, el acceso a su resultado sea casi inmediato comparado con recurrir a la base de datos en sí, a la que probablemente debamos acceder a disco y recorrer sus complejos árboles B y B+ internos.

    El resultado de usar caché de MySQL es muy evidente en cuando a velocidad y en una entrada posterior os comentaré cómo sacar estadísticas para ver con más concreción cuál es la mejora.

    ¿Cómo activarla? ¿Cómo aumentar su tamaño?

    Para ver si está activada nos dirigimos al fichero my.cnf (que probablemente esté en /etc o /etc/mysql) y buscamos dentro las siguientes cadenas:

    Leer más » 3 Comentarios