# Programador Web & SEO - Madrid > Carlos González.Programador Web& Posicionamiento SEO Curriculum vitae Mangraf Mantenimiento Rodden Rally School Mantenimiento Viajes con Españoles Desarrollo web Ruta Inti Desarrollo web Comunica Desarrollo web Guía de trámites 2015 Aplicaciones ## Páginas - [Formación](https://www.carlosgonzalezgurrea.es/sobre-mi/formacion/) - [Aviso legal](https://www.carlosgonzalezgurrea.es/aviso-legal/) - [Declaración de cookies](https://www.carlosgonzalezgurrea.es/declaracion-cookies/) - [Política de cookies](https://www.carlosgonzalezgurrea.es/politica-de-cookies/) - [Política de privacidad](https://www.carlosgonzalezgurrea.es/politica-de-privacidad/) - [Portfolio](https://www.carlosgonzalezgurrea.es/listado-portfolio/) - [Contacto](https://www.carlosgonzalezgurrea.es/contacto/) - [Inicio](https://www.carlosgonzalezgurrea.es/) - [Sobre mí](https://www.carlosgonzalezgurrea.es/sobre-mi/) - [Recursos](https://www.carlosgonzalezgurrea.es/recursos-general/) ## Entradas - [¿Cómo agregar una dirección de envío para productos virtuales en WooCommerce?](https://www.carlosgonzalezgurrea.es/como-agregar-una-direccion-de-envio-para-productos-virtuales-en-woocommerce/) - [Explorando las diferencias entre Laravel 9 y Laravel 10](https://www.carlosgonzalezgurrea.es/explorando-las-diferencias-entre-laravel-9-y-laravel-10/) - [No reducir stock al pagar con cheque en Woocommerce](https://www.carlosgonzalezgurrea.es/no-reducir-stock-al-pagar-con-cheque-en-woocommerce/) - [Activar o desactivar métodos de pago en WooCommerce](https://www.carlosgonzalezgurrea.es/activar-o-desactivar-metodos-de-pago-en-woocommerce/) - [Librería GSAP (Greensock)](https://www.carlosgonzalezgurrea.es/libreria-gsap-greensock/) - [El buceo y sus beneficios en el trabajo diario](https://www.carlosgonzalezgurrea.es/el-buceo-y-sus-beneficios-en-el-trabajo-diario/) - [Lenguajes de programación y adaptación. Una semana de locos.](https://www.carlosgonzalezgurrea.es/lenguajes-de-programacion-y-adaptacion-una-semana-de-locos/) - [Principio de Pareto (Ley del 80/20)](https://www.carlosgonzalezgurrea.es/principio-de-pareto-ley-del-80-20/) - [Actionscript. Muy vivo pero muerto a día de hoy](https://www.carlosgonzalezgurrea.es/actionscript-muy-vivo-pero-muerto-a-dia-de-hoy/) - [Ley de Fitts](https://www.carlosgonzalezgurrea.es/ley-de-fitts/) - [Ley de Hick/Hyman](https://www.carlosgonzalezgurrea.es/ley-de-hick-hyman/) - [Conociendo Drupal](https://www.carlosgonzalezgurrea.es/conociendo-drupal/) - [Lentitud en Wordpress](https://www.carlosgonzalezgurrea.es/lentitud-en-wordpress/) - [Buscador de Wordpress en el menú usando código](https://www.carlosgonzalezgurrea.es/buscador-de-wordpress-en-el-menu-usando-codigo/) - [Eliminar columnas de fechas created_at y updated_at en laravel](https://www.carlosgonzalezgurrea.es/eliminar-columnas-de-fechas-created_at-y-updated_at-en-laravel/) - [Generando páginas con el sistema de plantillas {{ Mustache }}](https://www.carlosgonzalezgurrea.es/generando-paginas-con-el-sistema-de-plantillas-mustache/) - [Shortcodes de WordPress](https://www.carlosgonzalezgurrea.es/shortcodes-de-wordpress/) - [Ficheros personalizados en galería multimedia](https://www.carlosgonzalezgurrea.es/ficheros-personalizados-en-galeria-multimedia/) - [Google Chrome, HTTPS y su lucha a partir de Julio 2018](https://www.carlosgonzalezgurrea.es/google-chrome-https-y-su-lucha-a-partir-de-julio-2018/) - [Estructurando nuestro API](https://www.carlosgonzalezgurrea.es/estructurando-nuestro-api/) - [Cabeceras CORS (Cross Origin Resource Sharing)](https://www.carlosgonzalezgurrea.es/cabeceras-cors/) - [PHP 4, PHP 5, PHP 7, en definitiva PHP](https://www.carlosgonzalezgurrea.es/php-4-php-5-php-7-en-definitiva-php/) - [Node.js y configuración del proxy corporativo](https://www.carlosgonzalezgurrea.es/node-js-y-configuracion-del-proxy-corporativo/) - [Wordpress se abre camino en las empresas nacionales](https://www.carlosgonzalezgurrea.es/wordpress-se-abre-camino-en-las-empresas-nacionales/) - [Evitar el envío de correos y pruebas de SPAM](https://www.carlosgonzalezgurrea.es/evitar-el-envio-de-correos-en-wordpress/) - [Crear un API con Node.js y Base de datos MYSQL](https://www.carlosgonzalezgurrea.es/crear-un-api-con-node-js-y-base-de-datos-mysql/) - [Sistema de compañeros](https://www.carlosgonzalezgurrea.es/sistema-de-companeros/) - [Slug en español como debe ser y otras acciones](https://www.carlosgonzalezgurrea.es/slug-en-espanol-como-debe-ser-y-otras-acciones/) - [Debug en Laravel. Laravel Debugbar.](https://www.carlosgonzalezgurrea.es/debug-en-laravel-laravel-debugbar/) - [Cygwin. Emulación de terminal de Linux para Windows](https://www.carlosgonzalezgurrea.es/cygwin-emulacion-de-terminal-de-linux-para-windows/) - [Aplicación MEAN](https://www.carlosgonzalezgurrea.es/aplicacion-mean/) - [Hoy fui al taller y casi lloro de la emoción](https://www.carlosgonzalezgurrea.es/hoy-fui-al-taller-y-casi-lloro-de-la-emocion/) - [Conectando Laravel con SQL SERVER 2012](https://www.carlosgonzalezgurrea.es/conectando-laravel-con-sql-server-2012/) - [Big data, datos y más datos](https://www.carlosgonzalezgurrea.es/big-data-datos-y-mas-datos/) - [Homenaje a Robert Penner](https://www.carlosgonzalezgurrea.es/homenaje-a-robert-penner/) - [Zeplin la herramienta perfecta para Sketch](https://www.carlosgonzalezgurrea.es/zeplin-la-herramienta-perfecta-para-sketch/) - [Hacking ético](https://www.carlosgonzalezgurrea.es/hacking-etico/) - [Vulnerabilidades en nuestro gestor de contenidos](https://www.carlosgonzalezgurrea.es/vulnerabilidades-en-nuestro-gestor-de-contenidos/) - [Virus en mi web](https://www.carlosgonzalezgurrea.es/virus-en-mi-web/) - [La importancia de los filtros](https://www.carlosgonzalezgurrea.es/la-importancia-de-los-filtros-en-wordpress/) - [Creación de un plugin](https://www.carlosgonzalezgurrea.es/creacion-de-un-plugin/) - [Kanboard alternativa a Trello](https://www.carlosgonzalezgurrea.es/kanboard-alternativa-a-trello/) - [Zammad, software de gestión de tickets](https://www.carlosgonzalezgurrea.es/zammad-software-de-gestion-de-tickets/) - [Htop, alternativa a top interactiva y funcional](https://www.carlosgonzalezgurrea.es/htop-alternativa-a-top-interactiva-y-funcional/) - [Odoo, CRM y ERP de código abierto](https://www.carlosgonzalezgurrea.es/odoo-crm-y-erp-de-codigo-abierto/) - [De Dimensyon a Madrid](https://www.carlosgonzalezgurrea.es/de-dimensyon-a-madrid/) - [Prueba de nivel PHP](https://www.carlosgonzalezgurrea.es/prueba-de-nivel-php/) - [Estilos personalizados por página](https://www.carlosgonzalezgurrea.es/estilos-personalizados-por-pagina/) - [Scripts al final de la página](https://www.carlosgonzalezgurrea.es/scripts-al-final-de-la-pagina/) - [Seguridad adicional a la carpeta de uploads](https://www.carlosgonzalezgurrea.es/seguridad-adicional-a-la-carpeta-de-uploads/) - [Tuneando Wordpress](https://www.carlosgonzalezgurrea.es/tuneando-wordpress/) - [Comprimir el HTML de nuestra Web](https://www.carlosgonzalezgurrea.es/comprimir-el-html-de-nuestra-web/) - [Velocidad de carga vs Emojis](https://www.carlosgonzalezgurrea.es/velocidad-de-carga-vs-emojis/) # # Detailed Content ## Páginas Formación A lo largo de mi carrera profesional, he utilizado bastantes lenguajes de programación, bastantes tipos de Base de datos y bastantes entornos en los sitios donde he trabajado. Siempre me ha gustado programar, como ya he comentado empecé bien jovencito con mi libro y mi Spectrum. Parece que desde que tenía 13 años sabía que la auto-formación y leer y desarrollar mil pruebas eran lo mío. No os voy a engañar, me gusta leer pero a la hora de aprender, hay que tocar código, pegarse con él y darle vueltas a una misma cosa mil veces. Una vez lo aprendes parece que todo fluye. Una vez finalizado el instituto, accedí a un módulo de grado superior, en su día el DAI, (Desarrollo de Aplicaciones Informáticas), 1 año entero de C++, aprender a programar, variables, diagramas UML, gestión de datos, toma de requisitos y muchas consultas, contra ORACLE,SQL SERVER, DBASE IV y Access, 1 año entero sacando informes de los más chulos. Al año siguiente Visual Basic 6 como gran novedad, eso era sencillo, veníamos de C++. Básicamente Sistemas informáticos multiusuario y en red. Análisis y diseño detallado de aplicaciones informáticas de gestión. Programación en lenguajes estructurados. Desarrollo de aplicaciones en entornos de cuarta generación y con herramientas CASE. Diseño y realización de servicios de presentación en entornos gráficos. Formación y orientación laboral. Relaciones en el entorno de trabajo. Una vez finalizado el módulo, estuve 2 años en la carrera pero por motivos de trabajo, personales, no llegué a terminar.... Aviso legal Datos del Responsable Identidad del Responsable: Carlos González Gurrea Correo electrónico: info@carlosgonzalezgurrea. es En este espacio, el usuario, podrá encontrar toda la información relativa a los términos y condiciones legales que definen las relaciones entre los usuarios y yo como responsable de esta web. Como usuario, es importante que conozcas estos términos antes de continuar tu navegación. Mi web (Carlos González Gurrea como responsable de esta web, asumo el compromiso de procesar la información de mis usuarios y clientes con plenas garantías y cumplir con los requisitos nacionales y europeos que regulan la recopilación y uso de los datos personales de mis usuarios. Esta web, por tanto, cumple rigurosamente con La Ley Orgánica 15/1999, de 13 de diciembre, de Protección de Datos de Carácter Personal (LOPD), y con el Real Decreto 1720/2007, de 21 de diciembre, conocido como el Reglamento de desarrollo de la LOPD. Cumple también con el Reglamento (UE) 2016/679 del Parlamento Europeo y del Consejo de 27 de abril de 2016 relativo a la protección de las personas físicas (RGPD), así como con la Ley 34/2002, de 11 de julio, de Servicios de la Sociedad de la Información y Comercio Electrónico (LSSICE ó LSSI). Condiciones generales de uso Las presentes Condiciones Generales regulan el uso (incluyendo el mero acceso) de las páginas de web, integrantes del sitio web de Blogpocket incluidos los contenidos y servicios puestos a disposición en ellas. Toda persona que acceda a la web, https://www. carlosgonzalezgurrea. es (“usuario”) acepta someterse a las... Declaración de cookies Esta página web usa cookies. Las cookies de este sitio web se usan para personalizar el contenido, ofrecer funciones de redes sociales y analizar el tráfico. Además, compartimos información sobre el uso que haga del sitio web con nuestros partners de redes sociales y análisis web, quienes pueden combinarla con otra información que les haya proporcionado o que hayan recopilado a partir del uso que haya hecho de sus servicios. Las cookies son pequeños archivos de texto que las páginas web pueden utilizar para hacer más eficiente la experiencia del usuario. La ley afirma que podemos almacenar cookies en su dispositivo si son estrictamente necesarias para el funcionamiento de esta página. Para todos los demás tipos de cookies necesitamos su permiso. Esta página utiliza tipos diferentes de cookies. Algunas cookies son colocadas por servicios de terceros que aparecen en nuestras páginas. Su consentimiento se aplica a los siguientes dominios: www. carlosgonzalezgurrea. es Declaración de cookies actualizada por última vez el 11/06/2018: Necesarias Las cookies necesarias ayudan a hacer una página web utilizable activando funciones básicas como la navegación en la página y el acceso a áreas seguras de la página web. La página web no puede funcionar adecuadamente sin estas cookies. Preferencias Las cookies de preferencias permiten a la página web recordar información que cambia la forma en que la página se comporta o el aspecto que tiene, como su idioma preferido o la región en la que usted se encuentra. Estadísticas Las cookies estadísticas ayudan a... Política de cookies En esta web recopilo y utilizo la información según indico en mi política de privacidad. Una de las formas en las que recopiló información es a través del uso de la tecnología llamada “cookies”. En mi web , se utilizan cookies para varias cosas. ¿Qué es una cookie? Una “cookie” es una pequeña cantidad de texto que se almacena en tu navegador (como Chrome de Google o Safari de Apple) cuando navegas por la mayoría de los sitios web. ¿Qué NO es una cookie? No es un virus, ni un troyano, ni un gusano, ni spam, ni spyware, ni abre ventanas pop-up. ¿Qué información almacena una cookie? Las cookies no suelen almacenar información sensible sobre usted, como tarjetas de crédito o datos bancarios, fotografías o información personal, etc. Los datos que guardan son de carácter técnico, estadísticos, preferencias personales, personalización de contenidos, etc. El servidor web no le asocia a usted como persona sino a su navegador web. De hecho, si usted navega habitualmente con el navegador Chrome y prueba a navegar por la misma web con el navegador Firefox, verá que la web no se da cuenta que es usted la misma persona porque en realidad está asociando la información al navegador, no a la persona. ¿Qué tipo de cookies existen? Cookies técnicas: Son las más elementales y permiten, entre otras cosas, saber cuándo está navegando un humano o una aplicación automatizada, cuándo navega un usuario anónimo y uno registrado, tareas básicas para el funcionamiento de... Política de privacidad. Tu privacidad es importante para mí. En esta declaración de privacidad te explico qué datos personales recopilo de mis usuarios y cómo los utilizo. Te animo a leer detenidamente estos términos antes de facilitar tus datos personales en esta web. Los mayores de trece años podrán registrarse en https://www. carlosgonzalezgurrea. es como usuarios sin el previo consentimiento de sus padres o tutores. En el caso de los menores de trece años se requiere el consentimiento de los padres o tutores para el tratamiento de sus datos personales. En ningún caso se recabarán del menor de edad datos relativos a la situación profesional, económica o a la intimidad de los otros miembros de la familia, sin el consentimiento de éstos. Si eres menor de trece años y has accedido a este sitio web sin avisar a tus padres no debes registrarte como usuario. En esta web se respetan y cuidan los datos personales de los usuarios. Como usuario debes saber que tus derechos están garantizados. Me he esforzado en crear un espacio seguro y confiable y por eso quiero compartir mis principios respecto a tu privacidad: Nunca solicito información personal a menos que realmente sea necesaria para prestarte los servicios que me requieras. Nunca comparto información personal de mis usuarios con nadie, excepto para cumplir con la ley o en caso que cuente con tu autorización expresa. Nunca utilizo tus datos personales con una finalidad diferente a la expresada en esta política de privacidad. Es preciso advertir que... Portafolio Resumen de algunos de los trabajos en los que he trabajado Todos Aplicaciones de escritorio Aplicaciones móviles Aplicaciones web Branding Desarrollo web Google ADS Landing Logotipos Mantenimiento SEO Bugobrot Desarrollo web Aula de Astronomía de Fuenlabrada Aplicaciones web Venta de entradas Aplicaciones web Grecia de Jesús Desarrollo web Master Marketing Digital Villanueva Landing Galibo. net Aplicaciones de escritorio Noticias – Ayuntamiento de Velilla de San Antonio Aplicaciones móviles Artes Gráficas Rupem Desarrollo web Dimensyon Branding Talleres Castro Verde Desarrollo web Acoat Selected Mantenimiento Hello Mami 5d Desarrollo web Sal Gorda TV Mantenimiento Guía de trámites 2015 Aplicaciones móviles Ruta Inti Desarrollo web Rodden Rally School Mantenimiento MundoSpanish Desarrollo web Viajes con Españoles Desarrollo web La gota que colma Desarrollo web Carolina Peinado Aplicaciones web Vitesse Engineering Desarrollo web Sistemas Informáticos Sur Aplicaciones móviles Rafael Hidalgo Desarrollo web B2SP Mantenimiento Mangraf Mantenimiento Osvima Desarrollo web Hotel Mirador de Gredos Branding Tom Black Desarrollo web WP Europa Desarrollo web Ultimate Stack Desarrollo web GrupoLamont Aplicaciones web Ayuntamiento de Velilla de San Antonio Desarrollo web By Laura Be Desarrollo web Editorial Tébar Desarrollo web Vericia Desarrollo web Koex Distribución Integral S. L. Aplicaciones web Comunica Desarrollo web Cotoldo – Fábrica de toldos Desarrollo web EHL Abogados Cement Design Aplicaciones web 1785 Mantenimiento Diversion Divers Desarrollo web Su dedicación es extraordinaria y su trato inmejorable. Siempre tiene solución para todo y para todos. Ojalá hubiese más jefes de equipo como él! Iván Fernández Domínguez Programador Web Trabajador incansable, nunca tuvo problemas en adquirir... Contacto Dime en que puedo ayudarte. Contacto Escríbeme desde el formulario de contacto o ponte en contacto conmigo desde las redes sociales. Estaré encantado de resolver tus dudas. coworking@carlosgonzalezgurrea. es Aceptar política de privacidad Carlos González. Programador Web& Posicionamiento SEO Curriculum vitae Bugobrot Desarrollo web 1785 Mantenimiento EHL Abogados GrupoLamont Aplicaciones web Aula de Astronomía de Fuenlabrada Aplicaciones web Noticias – Ayuntamiento de Velilla de San Antonio Aplicaciones móviles Editorial Tébar Desarrollo web Ruta Inti Desarrollo web Osvima Desarrollo web Hotel Mirador de Gredos Branding Sal Gorda TV Mantenimiento WP Europa Desarrollo web La gota que colma Desarrollo web Rafael Hidalgo Desarrollo web Grecia de Jesús Desarrollo web Venta de entradas Aplicaciones web Artes Gráficas Rupem Desarrollo web Cotoldo – Fábrica de toldos Desarrollo web Tom Black Desarrollo web Talleres Castro Verde Desarrollo web Koex Distribución Integral S. L. Aplicaciones web Vitesse Engineering Desarrollo web Master Marketing Digital Villanueva Landing Guía de trámites 2015 Aplicaciones móviles MundoSpanish Desarrollo web Hello Mami 5d Desarrollo web Mangraf Mantenimiento Dimensyon Branding Carolina Peinado Aplicaciones web B2SP Mantenimiento Acoat Selected Mantenimiento Comunica Desarrollo web Diversion Divers Desarrollo web Sistemas Informáticos Sur Aplicaciones móviles Ayuntamiento de Velilla de San Antonio Desarrollo web Galibo. net Aplicaciones de escritorio Viajes con Españoles Desarrollo web By Laura Be Desarrollo web Rodden Rally School Mantenimiento Cement Design Aplicaciones web Ultimate Stack Desarrollo web Vericia Desarrollo web Misartículosrecientes. ¿Cómo agregar una dirección de envío para productos virtuales en WooCommerce? A menudo, los productos virtuales, como descargas digitales o servicios en línea, no requieren envío físico. Por lo tanto, WooCommerce elimina auto... Explorando las diferencias entre Laravel 9 y Laravel 10 Laravel 10, cuyo lanzamiento está previsto para el 7 de febrero de 2023, sustituirá... Carlos González Desarollo Web & SEO Marketing Todo es posible, tiempo, café e imaginación Os cuento como empezó mi historia, corría el año 1994, un chaval de 13 años, en una academia de informática aprendiendo a usar MS-DOS y QBASIC, vaya tiempos. He decir que anteriormente desarrollaba programitas en mi SPECTRUM, una pasada 128 Kb. A los 19 años acabe cursando un módulo de grado superior en Desarrollo de Aplicaciones Informáticas, en su día DAI, antes de finalizar el curso, me ficharon en una pequeña empresa. Zona Multimedia, una . COM de las que surgieron en la época y en la que aprendí a desenvolverme en todo el mundo de Internet. Ahora han pasado 18 años y he de decir que he pasado por todo tipo de trabajos, lenguajes de programación y formas de trabajar. Y sobre todo lo más importante es que puedo decir que tengo muchos amigos en cada una de las empresas por las que pase. He decidido trabajar en mi página para poder aportar un poco más a la comunidad, poder ir añadiendo artículos sobre cosas interesantes y sobre cosas que se me olvidan y uso con frecuencia. Espero que os pueda servir como me sirve a mí. Por otro lado tener un portafolio en los tiempos que corren también está bien. Podéis contactar conmigo por esta página y por redes sociales. El desarrollo en general es una continua evolución, hay que adaptarse, aprender de su legado Profesional Calidad Cercano Comunicación Eficaz Imaginativo ¿En qué puedo... ## Entradas - Categorías: Desarrollo Web, WooCommerce A menudo, los productos virtuales, como descargas digitales o servicios en línea, no requieren envío físico. Por lo tanto, WooCommerce elimina automáticamente la opción de ingresar una dirección de envío cuando se marca un producto como virtual. Sin embargo, en ocasiones, es posible que desee ofrecer la opción de ingresar una dirección de envío para productos virtuales, especialmente durante promociones o descuentos especiales. ¿Cómo podemos hacerlo? La solución en bastante sencilla, solo hay que añadir este pequeño código de php a vuestro archivo de funtions. php. Este es el código: add_filter( ‘woocommerce_cart_needs_shipping_address’, ‘__return_true’, 50 ); Este filtro en particular, "woocommerce_cart_needs_shipping_address", es un filtro de WordPress que se puede agregar en el archivo functions. php de tu tema para siempre mostrar el formulario de dirección de envío en WooCommerce, incluso para productos virtuales. El filtro se utiliza para controlar si se muestra o no el formulario de dirección de envío, y al devolver "true", se mostrará el formulario siempre. Al agregar este filtro en el archivo functions. php de tu tema, los clientes podrán ingresar una dirección de envío para productos virtuales durante el proceso de compra, lo que puede ser útil en ciertas circunstancias. Sin embargo, es importante tener en cuenta que la información de envío no se usará para fines de envío, ya que los productos virtuales no se envían físicamente. Gracias a este filtro, ahora es posible agregar una dirección de envío para productos virtuales en WooCommerce, aunque sean virtuales. Si revisas la orden de compra de WooCommerce,... - Categorías: Laravel Laravel 10, cuyo lanzamiento está previsto para el 7 de febrero de 2023, sustituirá a la versión anterior de Laravel. Aunque ambos ofrecen las mismas funcionalidades y características básicas, hay algunas diferencias clave entre estas dos versiones. Sistema de versionado Una de las principales diferencias entre Laravel 9 y Laravel 10 es el sistema de versionado. Laravel 9 se basa en el sistema de versionado Semantic Versioning (SemVer), mientras que Laravel 10 se basa en el sistema de versionado Calendar Versioning. El sistema de versionado Calendar Versioning tiene una menor cantidad de versiones de mantenimiento y el tiempo de soporte es más corto, pero tiene una mayor estabilidad. Sistema de gestión de dependencias Otra diferencia importante es el sistema de gestión de dependencias. Laravel 9 utiliza Composer para la gestión de dependencias, mientras que Laravel 10 utiliza Symfony Flex. Symfony Flex es una herramienta que facilita la instalación y configuración de paquetes de terceros, lo que puede hacer que sea más fácil de usar para los desarrolladores. Mejoras de rendimiento Laravel 10 también incluye varias mejoras en el rendimiento, incluyendo cambios en cómo se manejan las consultas a la base de datos y en cómo se generan los modelos. También incluye mejoras en la seguridad, como la adición de una función de autenticación de dos factores. Con esta versión, se han realizado varios cambios importantes, entre ellos: Laravel 10 elimina el soporte para PHP 8. 0: Laravel 10 requiere PHP 8. 0. 5 o superior, por lo que los desarrolladores... - Categorías: WooCommerce Buenas, hoy he tenido que ayudar a un amigo en una de sus páginas, resulta que al hacer el pago por cheque le descontaba del stock de productos la compra pero como él dice estos pagos suelen hacerse muy poco y no se llegan a terminar nunca. Él tiene esta opción porque así la gente puede pagar de muchas maneras pero esta opción no suele terminar de cuajar. El caso es que me pidió que no se descontara el stock de los productos si el pago se realizaba por cheque. Aquí os dejo la función que hay que añadir al functions. php o a vuestro plugin para que no se descuente del stock al pagar por cheque. Os dejo la función: // NO ACTUALIZAR STOCKS EN PEDIDOS POR TRANSFERENCIA BANCARIA function wcs_do_not_reduce( $reduce_stock, $order ) { if ( $order->has_status( 'on-hold' ) && $order->get_payment_method == 'cheque' ) { $reduce_stock = false; } return $reduce_stock; } add_filter( 'woocommerce_can_reduce_order_stock', 'wcs_do_not_reduce', 10, 2 ); Podéis cambiar el método de pago si os interesa que no se descuente si se paga de otra manera por ejemplo transferencia bancaria (bacs) Un saludo a todos - Categorías: WooCommerce Esta entrada será breve, esta vez vamos a desactivar o activar un método de pago de WooCommerce, dependiendo del total del carrito de la compra. La idea es aportar como siempre algo que buscamos muy a menudo, o nos piden algunos clientes y es más fácil de lo que parece. El código como siempre irá en nuestro functions. php o en el plugin que hayamos creado a efectos de meter nuestro código y así evitar tocar las plantillas instaladas. En este caso será un filtro de wordpress. Nuestro cliente quería activar la transferencia bancaria siempre y cuando el carrito fuera igual o superior a 300 €. En el caso de querer modificar este importe solo tendríamos que tocar la variable maximum. add_filter( 'woocommerce_available_payment_gateways', 'disable_transferencia_above_300' ); function disable_transferencia_above_300( $available_gateways ) { $maximum = 300; if ( WC->cart->total < $maximum ) { unset( $available_gateways ); } return $available_gateways; } En este caso desactivamos o activamos la transferencia, pero podríamos hacerlo con cualquier método de pago. Solo tendriamos que cambiar bacs por: paypal (Paypal) cod(Contado) stripe (Stripe) cheque (Cheque) Además, podríamos jugar con esta función para usuarios determinados o grupos de usuarios. Saludos a tod@s - Categorías: Javascript Green Shock Animation Plataform (GSAP) JS es un framework en JavaScript para realizar animaciones con pocas líneas de código, para mí su facilidad de uso y rendimiento es lo que le hace diferente. Esta librería nació como librería de ActionScript pero los desarrolladores a cargo crearon la versión Javascript con funciones muy parecidas, incluso el código recuerda a AS. Como sabéis yo hice mucho Actionscript en su día, en esa época estaba en INDRA y tuve que hacer bastantes animaciones para RENFE y para el ejecito de tierra. Entre ellas un módulo de fluidos superchulo, lástima que hace tanto tiempo que ya se ha quedado obsoleto. Está compuesta por 4 herramientas: TweenLite: el núcleo de GSAP. Anima cualquier propiedad con valor numérico, por ejemplo, width y height. Puedes animar cualquier parte del DOM, además se puede combinar con otras herramientas o plugins como por ejemplo CSSPlugin. TimelineLite: el contenedor para múltiples interpolaciones o líneas de tiempo. Cosas como pausar, reversa, añadir etiquetas y más. Digamos que es nuestra línea de tiempo, como en su día Actionscript y Flash. TimelineMax: TimelineLite, pero avanzado, podemos hacer secuencias avanzadas de múltiples interpolaciones y líneas de tiempo. TweenMax: incluye todo lo anterior más agregados, así como muchos plugins populares. En sus propias palabras, TweenMax es la herramienta de animación para web más poderosa. Os dejo un ejemplo de una animación sencilla, podéis verlo en este ejemplo. - Categorías: Personal - Etiquetas: Buceo Muchos sabéis que buceo, sino os contare un poco mi vida, empecé en el buceo hace más de 10 años, llegue a ser socio de una de las mejores escuelas del país, todos los fines de semana me dedicaba a dar clases, hacer bautismos y a aprender, llegue hasta ayudante de instructor, y por diversos motivos personales, empecé a tener menos tiempo y no me pude presentar a instructor. Eso no me importa, ya que después de más de 450 inmersiones y días y días dando clase en piscina el buceo me ha aportado un montón de cosas para mí día a día. Os preguntaréis, ¿qué cosas puede aportar el buceo para tu trabajo de informático en una oficina? , pues bien más de las que pensamos. Os voy a contar 5 puntos por lo que considero que mucha gente debería empezar a bucear. Relajación: Sabéis lo que es tener que hacer entregas de trabajos y ver que no llegas. Tener problemas en la oficina y llevártelos a casa, el problema está, hay que buscar una solución y no das con ello. . , pues bien la hora que estoy debajo del agua, todo esto desaparece, estoy flotando, en otro mundo, en otro ecosistema y esto me ayuda a desconectar. Planificación: En el buceo hay que planificar las cosas, ¿solo en el buceo? La verdad es que todo o casi todo debería estar planificado. Las cosas no surgen porque si, llevan un tiempo razonable para poder hacerse. Hay que estudiar... - Categorías: Personal - Etiquetas: Lenguajes de programación Pues bien como dice mi título, semana de locos, así es como coy. La verdad es que como muchos sabéis trabajo con Java y un gestor de contenidos llamado Opentext, bueno antiguamente Vignette, pero eso no quita que lleve otras aplicaciones. Reviso aplicaciones realizadas en C# que no son Web, son aplicaciones de escritorio. Mi trabajo consiste en administrar un equipo que realiza las tareas que yo solo no podría asumir, pero sin dejar la parte técnica y la programación. Esta semana eta siendo de locos y en el trabajo he tenid que modificar cosillas de C# / JAVA y algún que otro proceso batch y he tocado 4 bases de datos diferentes, ORACLE, SQL SERVER, MySQL y MONGODB para algunas pruebas (Estoy con la migración de una base de datos de 7 Gb de MYSL a Mongo para ver el resultado), es graciosa la cosa pero mi cabeza llega un momento que no cuando realizar el COMMIT y si lo ha hecho o es automático... . ¡Cosas de la edad! Por otro lado ya sabéis que ayudo a personas a sacar su trabajo, casi todo lo externo suele ser en PHP nativo o con algún gestor de contenidos, sobre todo Wordpress, o aplicaciones realizadas en Laravel o codeigniter, como frameworks habituales. Pues bien esta semana también ayude a resolver un problema bastante elegante con unos mapas en un buscador y con la integración de un sistema de noticias externas a la web (Curl a tope). Siempre que uso la... - Categorías: Diseño UX - Etiquetas: Usabilidad web El principio de Pareto la ley del 80% / 20 %. Es algo curioso pero cuando te poner a leer y revisas cosas que estudiaste en su día te das cuenta que no solo vale para la informática sino para el mundo real, fuera de un teclado y un monitor. En mis días como autónomo descubrí que el 80% de mis beneficios eran el 20% de mis clientes... . , vaya algo similar, era para explicar este principio. En el tema del software, podemos pensar en centrarnos en el 20% de las características clave de tu software. Invertir el tiempo en ir a las partes más importantes de la aplicación, aquí es donde podemos usar la definición de nuestro amigo Pareto. El 80% del trabajo de las personas que usan tu software se desarrolla con sólo el 20% del código. Centra tu energía en lo que de verdad importa. En muchas ocasiones intentamos hacer un diseño perfecto en todos los ámbitos y nos dejamos mucho tiempo en cosas en las que el usuario no va a fijarse. La regla del 80% / 20% vale para todo en la vida no solo para e software, revisar la página de la Wiki, que hay ejemplos bastante buenos. Un saludo - Categorías: Cajón de sastre Bueno, parece algo raro, parece que el titulo esta equivocado pero... . , la verdad es que Flash y actionscript a día de hoy ha dejado de trabajarse para irnos a otros entornos pero ha dejado una gran muestra de trabajos y un entorno que aun no se ha podido igualar. Hace más de 8 años que Steve Jobs publicó su carta contra Flash, en ella hay diferentes puntos a tener en cuenta a día de hoy, en julio del 2017 , Adobe anuncio la muerte de flash (Ver página) Para Steve Jobs y su compañia, Flash tenia varios puntos por lo que no quería pasar: Flash es un sistema cerrado Curioso porque Apple abierto, abierto no es pero... ... El vídeo en la web Ahora tenemos otras plataformas pero hace 8 años si querías ver una pelicula Online era necesario, para Steve and company el transformar los videos a otros formatos no era correcto. La fiabilidad, seguridad y rendimiento En parte llevaba razón, el consumo era más elevado en algunos dispositivos y en cuanto a seguridad no era su punto fuerte. Además el sistema operativo de MAC no se llevaba muy bien. (Creo que solo he visto colgarse un MAC usando flash) Duración de la batería La batería se consumia muy rápido, algo cierto, pero la verad es que ahora ciertas aplicaciones dede mi punto de vista hacen los mismo, un ejemplo, Wallapop. Tecnología “touch” Bueno hace años, la idea no era hacer todo touch, es algo que fue... - Categorías: Diseño UX - Etiquetas: Usabilidad web La ley de Fitts es el complemento ideal de la ley de Hick. Esta ley trata del tiempo que tarda un humano en apuntar a un determinado punto, ambas leyes se complementan, ya que el usuario primero selecciona una opción de las disponibles y luego tiene que ir a ella o pulsarla a ella a través del interfaz. El tiempo que se requiere para alcanzar a pulsar un objetivo depende de una relación logarítmica entre su superficie y la distancia a la que se encuentra ¿Y para qué sirve la ley de Fitts? Imaginaros en el movimiento del ratón si en cada opción de menú tiene que desplazar el cursor por completo de un lado a otro, seguramente a la segunda pulsación el usuario estará aburrido y buscará otras opciones. O por ejemplo los botones de los formularios, seguramente en la pantalla serán más altos y en un móvil más ancho, la idea es que tenga mucha más superficie, por lo que el usuario ira al botón y lo pulsara mucho antes. Esto puede ayudar a vender un producto de forma más eficaz. Un saludo a todos! ! - Categorías: Diseño UX - Etiquetas: Usabilidad Ayer por la noche hablando con un amigo, salió a luz la ley de Hick/Hyman y su importancia a la hora de realizar pantallas o aplicaciones para el usuario. En un principio nos basamos en si algo nos agrada o nos disgusta pero... . todo está estudiado. El tiempo que se tarda en tomar una decisión aumenta a medida que se incrementa el número de alternativas Tiene hasta fórmula matemática, pero como esta en mil sitios y no la vais a usar la podéis ver en la Wiki (https://es. wikipedia. org/wiki/Ley_de_Hick) Vaya en resumen, estábamos hablando de las opciones del menú en una aplicación y las opciones de visualización o formas de enseñarlo pero además hablando de esta fórmula salió que no somos máquinas. Cada persona es diferente por lo que a formula está muy bien pero es incompleta ya que la toma de decisiones en humanos en cualquier tipo de situaciones está sujeta a los elementos externos que tiene a su alrededor. Imagina una tienda en la que al entrar tienes 5 segundos para comprar un producto, un tiempo que se va reduciendo y una decisión, aquí podríamos usar la fórmula de Hick. Si por el contrario vamos a usar el tiempo medio que tarda el usuario para ver un menú, no hay tanto estrés o necesidad por lo que seguramente todo sea más relajado. Bueno me despido, solo quería comentar algo que podéis ver en mil sitios pero que está bien conocer. Un saludo, cualquier cosa al correo...... - Categorías: Drupal Buenas a todos. Llevaba tiempo intentando sacar un hueco para hacer una instalación de Drupal desde 0. El caso es que me he puesto manos a la obra. Después de instalar Drupal, de forma básica me han surgido varios elementos que me han aparecido con la primera instalación y a solución que le he dado. En el informe de estado me ha aparecido una advertencia: La opción trusted_host_patterns no está configurada en settings. php. Esto podría llevar a vulnerabilidades de seguridad. Se recomienda encarecidamente configurarlo. La solución es sencilla. Hay que ir a buscar el archivo dentro de la carpeta, en mi caso /sites/default y añadir las siguientes líneas, donde la XXX es vuestro dominio. El archivo no tendrá permiso de escritura por lo que tendréis que darle permisos antes de poder modificarlos. $settings = array( '^XXXXXXXX\. XXXXXXXXXXXXXX\. XXXXXX$', ); Es poca cosa pero voy a empezar a trabajar en un template desde 0 para Drupal y así conocer su funcionamiento. Nos toca recordar TWIG, aunque ya lo use en su momento y no liarnos con BLADE Saludos a tod@s - Categorías: SEO & Marketing de contenidos, Wordpress - Etiquetas: plugins Y así fue cuando, entre en el Wordpress de un cliente y me encontré con 28 actualizaciones de plugins... . ¡Esto no puede ser bueno! , así que me puse a investigar. Su Wordpress desactualizado y 34 plugins en su carpeta correspondiente... ... , me queda una buena tarde por delante. Lo primero, Backup´s de su Wordpress no vaya a ser que se rompa y encima tenga yo la culpa, para esto, tengo un fichero para poder hacer un zip y descargarme todo rápido haciendo uso solo del FTP y otro para la BBDD, (cosas que uno hace en sus tiempos libres). En algunas ocasiones el cliente solo te da acceso al FTP y al panel. El servidor debe ser algo confidencial. Tienes acceso a su web, a su base de datos pero a su servidor no, no vaya a ser que lo rompas... ... . . , el caso es que hay plugins que hacen esto pero como os he comentado alguna vez, cuantos menos uses mejor. Bueno a por el tema: Lo primero revisar qué tipo de plugins son útiles y cuales están puestos para añadir un simpe texto a la web. Empezamos la limpieza y la actualización de todos ellos. Borrado de aquellos que no se usan y revisión de que hacen algunos que desconocía. Al final con 20 plugins básicos la web funcionaba de la misma manera. Ahora sigamos con el tema de la velocidad, aquí si me gusta usar 2 plugins que creo que hacen... - Categorías: Wordpress - Etiquetas: buscador, menu Hoy me he encontrado con que un amiguete quería meter en su página web un elemento en el menú . Quería meter el buscador de Wordpress. La verdad es que es algo sencillo pero él no sabe nada de programación, como suele ser habitual, él instaló Wordpress y un Template y poco a poco se esta pegando con las 4 cosillas que saber tocar. ¿Cómo añadir el elemento del menú sin usar un plugin? Abrimos nuestro archivo functions. php que estará en el raiz del tema y añadimos las siguientes líneas add_filter('wp_nav_menu_items','buscador_buscador_menu', 10, 2); function buscador_buscador_menu($items, $args) { $searchform = get_search_form( false ); $items . = '' . $searchform . '''; return $items; } Podéis añadir cualquier enlace o elemento, como por ejemplo el código que os muestro a continuación. Se usó en la web de 1785. es, aunque no llego a estar publicada como woocommerce de Wordpress add_filter('wp_nav_menu_items', 'add_search_to_nav', 10, 2); function add_search_to_nav($items, $args) { global $woocommerce; $count = $woocommerce->cart->cart_contents_count; if(is_user_logged_in){ $items . = ''; }else{ $items . = ''; } if($count){ $items . = ''; } return $items; } Básicamente, mostraba el icono del usuario si estaba logado o sin logar y lo llevaba a dos sitios diferentes. Por otro lado si tenía elementos en el carrito aparecía en el menú, como podéis ver en las líneas finales. Os dejo un enlace a las referencias de Wordpress para que veáis otros ejemplos. Referencia Un saludo a todos y ya sabéis cualquier duda podéis consultarme desde la página de... - Categorías: Laravel Si alguna vez habéis trabajado con Laravel sabéis que este incluye su propio sistema de ORM (Object-Relational Mapping) llamado Eloquent, el cual nos proporciona una manera elegante y fácil de trabajar con la base de datos. Cuando creamos un modelo en Laravel: namespace App; use Illuminate\Database\Eloquent\Model; class Usuarios extends Model { //... } o usamos la linea de comandos php artisan make:model Usuarios Por defecto, Eloquent asume que todas las tablas contienen los campos updated_at y created_at. Estos campos se actualizarán automáticamente cuando se cree un nuevo registro o se modifique. Pero... . , ¿Y si no queremos que estos datos estén en nuestra tabla? Bien para eliminar las dos columnas y que no nos de errores las inserciones o las actualizaciones usando esos modelos. Basta con añadir la siguiente línea a nuestro modelo. public $timestamps = false; Aquí os pongo el modelo completo namespace App; use Illuminate\Database\Eloquent\Model; class Usuarios extends Model { protected $table = 'tbl_usuario'; public $timestamps = false; } Hasta aquí, todo correcto pero y si queremos tener sólo la columna de created_at y eliminar la fecha de actualización. La solución pasa por poner a Null esta fecha... , podéis verlo en el código namespace App; use Illuminate\Database\Eloquent\Model; class Usuarios extends Model { const UPDATED_AT = null; protected $table = 'tbl_usuario'; } Con esto eliminaríamos de nuestra tabla la columna y podríamos generar nuevos usuarios ya actualizarlos sin problema. Saludos a todos - Categorías: Desarrollo Web, PHP - Etiquetas: Sistema de plantillas Mustache para mi es uno de los mejores sistemas de plantilla con lo que he trabajado, Twig y Blade también han pasado por mis manos, de hecho como sabéis Laravel trabaja por defecto con Blade y además podemos incluir Mustache en nuestros proyectos. En un principio sin usar Laravel, Mustache es un sistema de plantilla supe fácil de usar y está disponible para un montón de lenguajes de programación. Yo por mi trabajo, he trabajado con PHP, JAVA, JS y . NET. Lo primero que hay que hacer es ir a la página de sus creadores (https://mustache. github. io/) , aquí podeis ver como la llave se convierte en un bigote y que hay ejemplos en casi todos los lenguajes. En uno de mis proyectos use Mustache para generar un sistema de mailing, recuperaba todos los usuarios de Wordpress y mandaba un email usando el template que estaba definido en otra página. Se puede hacer de muchas formas pero para mí es muy útil y al haber trabajdo muchas veces con este tipo de plantillas me resulta muy cómodo. Un ejemplo rápido que podéis ver aquí http://carlosgonzalezgurrea. es/adjuntos/mustache/ Página PHP require 'Mustache/Autoloader. php'; Mustache_Autoloader::register; $data = array('nombre' => 'Carlos González Gurrea','puesto' => 'Programador Web','descripcion' => '20 años... . . casi de desarrollo'); $m = new Mustache_Engine(array( 'cache' => dirname(__FILE__). '/templates/cache/mustache' )); echo "Leemos la plantilla bienvenido. mustache y añadimos los datos del usuario"; echo $m->render(file_get_contents('template/bienvenido. mustache'),$data); Plantilla dentro del directorio template {{nombre}} {{puesto}} {{descripcion}} Y con generamos una página como... - Categorías: Wordpress - Etiquetas: Personalizar Wordpress Quizás te suene la palabra Shortcode o quizás estés acostumbrado a usar un constructor de páginas web y no te suene para nada que es y el uso que se le puede dar a los shortcodes. Los Shortcodes ya no se usan como antes en Wordpress, antes su uso era muy común pero ahora la cosa ha cambiado. Eso no quita a que sigan siendo igual de potentes que antes y que se pueda hacer cualquier cosa con ello. ¿Qué son los Shortocdes? Pues como su traducción dice son pequeños códigos que puedes añadir en el editor de Wordpress. Se usan para añadir funciones en los diferentes tipos de Wordpress, páginas, entradas, tipos a medida, etc. Para llamar a los Shortcodes solo tenemos que añadir el nombre dentro de corchetes , como si abriéramos y cerráramos el tag de HTML . Un ejemplo de su uso Ahora bien que podemos hacer con ellos y cuáles son sus ventajas: Evitar el código repetitivo en una web. Imaginaros que en el contenido siempre queréis añadir una firma, podríamos hacer un Shortcode Añadir clases o columnas con un Shortcode o incluso añadir la fecha y hora actual. Desventajas: Si usas Shortcodes que vienen por defecto en una plantilla y en un futuro quieres cambiar, tendrás un problema. ¿Cómo podemos hacer un Shortcode? De ejemplo vamos a crear un Shortcode para añadir un botón de contacto de WhatsApp. Abrimos nuestro plugin de funciones o el archivo functions. php y añadimos function whastapp_func( $atts )... - Categorías: Wordpress - Etiquetas: filtro, Personalizar Wordpress Uno de nuestros clientes nos hizo una consulta sobre los ficheros que podía subir a su Wordpress. En la empresa había varios editores y en sus publicaciones querían evitar que se pudieran subir ciertas extensiones como por ejemplo exe, js, zip. Como sabéis la galería multimedia de Wordpress permite muchos tipos de archivos. ¿Cómo podemos hacer para eliminar ese tipo de extensiones a la hora de subirse a Wordpress? Lo primero es saber qué tipo de mime types queremos eliminar. Se puede ver en la página de ayuda de Wordpress (CODEX Wordpress) Sabiendo que extensiones queremos eliminar, crearemos el siguiente filtro llamado upload_mimes en nuestro functions. php o nuestro plugin. function eliminar_mimes( $mimes ) { unset( $mimes ); unset( $mimes ); unset( $mimes ); return $mimes; } add_filter( 'upload_mimes', 'eliminar_mimes' ); Con esto conseguiremos que al subir una extensión que tenemos bloqueada nos salga el mensaje Lo siento, este tipo de archivo no está permitido por motivos de seguridad. Ahora ya podéis probarlo en vuestra web. Saludos - Categorías: Cajón de sastre - Etiquetas: Seguridad Es oficial hace tiempo pero... . . , ya se acerca el día y ahora es cuando todo el mundo se dará cuenta que Google Chrome marcará todas las webs que no usen HTTPS como inseguras a partir del 1 de Julio. Es curioso pero ya sabéis como somos, esto se ha publicado hace más de 6 meses pero ahora es cuando todos queremos correr para aplicar el cambio en nuestra web. Que significa HTTPS, no es una simple "S" al final del protocolo HTTP o el cambio del puerto del 80 al 443. HTTPS es el protocolo seguro de transferencia de hipertexto es decir la versión segura de HTTP (Hypertext Transport Protocol) el protocolo que se ha usado durante más de 10 años. Con la evolución de aplicaciones web, métodos de pago y a todos los sistemas Online necesitamos que este cambie a algo más seguro. El sistema HTTPS utiliza un cifrado basado en SSL/TLS para crear un canal cifrado y así poder transmitir la información entre el usuario y el servidor. Adiós a los ataques man-in-the-middle, merece la pena que nuestro tráfico sea seguro y tener las contraseñas seguras. ¿Hay que pagar por tener el nuevo protocolo? Muchos pensareis que os va a tocar pagar por un certificado, pero... . hay algunos certificados gratuitos como puede ser Let’s Encrypt. Vuestro proveedor seguro que os ayuda a configurar el protocolo HTTPS y podéis seleccionar este para dar soporte a nuestra web. Esto en los tiempos que estamos suele estar... - Categorías: NodeJS - Etiquetas: Controladores, MVC Hace unos días, comencé a crear un API sencillo para comunicar Node. js y una base de datos MYSQL. Lo podéis seguir desde este link (https://www. carlosgonzalezgurrea. es/crear-un-api-con-node-js-y-base-de-datos-mysql/) La idea era, crear la estructura de la aplicación y conectarla con la base de datos MYSQL. Hoy vamos a añadir un paso más a la aplicación y es meterle controladores. Poco a poco haremos la aplicación MVC (Modelo-Vista-Controlador). Estos se suele hacer así desde el principio pero en el primer artículo teníamos que entender cómo realizar el paso de crear la aplicación y usar el generador de código que usamos. Siempre creo o intento crear la misma estructura en mis aplicaciones empiezo con las carpetas: controllers (Guardaremos los ficheros que tienen contendrán la lógica de negocio) models (Guardaremos los modelos de datos de la aplicación) routers (Los ficheros con la configuración de la rutas de la aplicación ) Vamos a trabajar con el controlador de usuarios. ¿Qué es un controlador? Los controladores son los encargados de contener toda la lógica de negocio de nuestra aplicación, es decir todo lo que se va a realizar en las tripas de nuestra aplicación. Primero crear archivo users. js dentro de la carpeta de controllers. Aquí es donde daremos de alta todos los métodos que va a tener nuestro controlador, para poder usarlo desde nuestro fichero de rutas y así tener separado cada elemento del código. Dentro del archivo user. js vamos a añadir diferentes métodos para que luego puedan ser llamados desde nuestra app.... - Categorías: PHP - Etiquetas: Apache Buenas a todos Hoy estaba trabajando realizando pruebas con una aplicación de un cliente y su servidor Apache no tenía activada la cabecera Access-Control-Allow-Origin, por lo que todas las peticiones que intentaba realizar me daban error. CORS (Cross Origin Resource Sharing) es un mecanismo que utiliza encabezados adicionales HTTP para permitir que un user agent obtenga permiso para acceder a recursos seleccionados desde un servidor, en un origen distinto (dominio), al que pertenece. Una aplicación crea una petición HTTP desde un origen distinto al dominio y este rechaza la petición. Imaginaros un API realizado en PHP con laravel y una aplicación móvil realizada en Phonegap, como era el caso de hoy. Buscando información encontré que tenía que activar la autorización CORS en apache, para agregar la autorización CORS al encabezado, simplemente hay que modificar el archivo configuración de servidor (httpd. conf o apache. conf), o agregarlo dentro de un archivo . htaccess (Si lo agregamos a este fichero no hace falta realizar el resto del artículo): Header set Access-Control-Allow-Origin "*" Para asegurarse de que los cambios que hemos hecho son correctos, usaremos el comando apachectl -t Reiniciamos el servidor de apache si todo va bien sudo service apache2 reload Añadir encabezados requiere el uso de al librería mod_headers. Mod_headers está habilitado de forma predeterminada en Apache, sin embargo, es posible que en algunos clientes este desactivado. Se puede probar a ejecutar el comando a2enmod headers Por otro lado, sino tenemos acceso al servidor de apache, y trabajamos con Linux, podríamos... - Categorías: PHP - Etiquetas: Pruebas Bueno al fin y al cabo todo evoluciona y lo mismo ha ido pasando con PHP. Poco a poco el código libre va ganando terreno frente a las licencias y sistemas de pago, por lo que PHP ha ido cogiendo muchos más adeptos, sistemas CMS´s, ERP´s y muchas líneas de código tiradas en PHP. Después de varios intentos, por fin salio la tan esperada versión de PHP. Como veis la versión 6 se desechó por completo por ser un intento fallido de mejora y se llegó a la actual PHP 7. 2. Hay muchas mejoras, cosas nuevas y otras que se han desechado, no os voy a decir todas, hay cientos de artículos por la red. Solo os voy a dejar un pequeño script que he usado alguna vez con algunos clientes para demostrar que PHP 7 es mucho más veloz y que es recomendado a 100% cambiarse, ya no por seguridad sino por velocidad. La seguridad también ha sido mejorada, ¿a qué estas esperando? . Podéis descargar el script realizado por Alessandro Torrisi desde su página www. php-benchmark-script. com. El script saca resultados pero hay que tener en cuenta que depende mucho del servidor en el que estéis, ya que si es un multidominio con 10 clientes, seguramente el uso de la CPU es inferior a un multidominio con las mismas características y 1000 clientes. Yo ahora mismo comparto hosting con 473 personas, una pasada, pero bueno la solución está en marcha y ya tengo el VPS casi a... - Categorías: NodeJS - Etiquetas: Red corporativa Como siempre se me olvida y lo tengo que buscar, en algunas ocasiones cuando trabajamos con node. js, tenemos que configurarlo para que trabaje con el proxy de nuestra red corporativa. Bien, es fácil solo tenemos que ir a la consola de comandos y teclear el siguiente comando npm config set proxy http://proxy. company. com:8080 Donde proxy. company. com, es la dirección del proxy y el 8080 el puerto. Como a algunos de vosotros, tendrías que configurar usuario y password el comando cambia a : npm config set proxy http://USER:PASSWORD@proxy. company. com:8080 Espero ayudaros, ya que siempre toca buscarlo. Un saludo - Categorías: Wordpress Las grandes empresas cada vez apuestan más por el código libre, eso es una gran noticia. Hasta no hace mucho las empresas se dedicaban a pagar grandes cantidades para poder gestionar sus páginas corporativas, su páginas landings, etc. Grandes servidores de base de datos junto con servidores de aplicaciones para nada gratuitos, además de las licencias por las aplicaciones que hacían que su uso fuera prohibitivo para la pequeña empresa. Ahora bien, si vemos el precio de la licencia de estos productos y pensamos la situación, números y más números pero... . . ¿Si invirtiéramos 60. 000 € (precio de algunas licencias) en una página desarrollada en Wordpress, podríamos conseguir el mismo producto, igual de fiable o más que una página desarrollada por otros gestores de contenidos de pago? Yo soy de la opinión que todo es posible, Wordpress es un sistema súper abierto y cada vez tiene una comunidad más elevada. ¿Por qué Wordpress parece el patito feo de la granja? Hace tiempo cuando empezó Wordpress, sólo era usado para realizar blogs, y no tenía el poder que tiene ahora para ser modificado, esto creo un mito sobre el uso de Wordpress. Por otro lado el tema de la seguridad y que sea de código libre, ¿esto es importante? Linux también es de código libre y no por ello es malo. Por otro lado, si se configura bien Wordpress, puede ser seguro, solo que tener cuidado con que se usa y que se sube a la web. Podemos invertir... - Categorías: Wordpress - Etiquetas: Personalizar Wordpress En muchas ocasiones cuando hacemos desarrollos a medida en Wordpress, queremos evitar que al modificar la password de un usuario, Wordpress nos mande el tipico correo por defecto de wordpress. Os voy a un plugin que desarrollé para un cliente y que os sorprendera por la cantidad de líneas que tiene. Por otro lado, os dejo el enlace al plugin "add plain text email", es un plugin para añadir al correo la copia en texto plano, ¿Por qué añadirlo? Pues básicamente porque ayuda a que nuestro correo no llegue a las carpetas de SPAM. Podéis realizar pruebas para ver vuestro nivel de SPAM, cuando enviais un correo, con diferentes Mailer tester. Yo siempre juego con 2, aunque el número de correos con los que se pueden probar es limitado, me parecen dos herramientas muy buenas a conocer. https://www. mail-tester. com/ http://isnotspam. com/ Un saludo a tod@s - Categorías: Javascript, NodeJS - Etiquetas: API Hola a todos Hoy quiero hacer una pequeña introducción a la creación de un API Restful con Node. js y MYSQL. La verdad es que para que todo funcione, debemos tener instalado en nuestro equipo un servidor de MYSQL (Yo uso XAMPP cuando trabajo sobre Windows, en Linux lo configuro todo a mano) y Node. js que ya os explique cómo instalarlo, en este artículo. Para que veáis lo fácil que puede ser crear un API sencillo, lo vamos a hacer con un generador, ya lo haremos a mano otro día. Bastaría con 3 comandos: npm install express-generator -g Una vez instalado, nos vamos a la ruta por la consola de comandos y lanzamos sobre el directorio raíz sobre el que va a colgar el API. express --view=pug node-api Una vez realizado, yo suelo añadir varias líneas al fichero package. json en el directorio creado. { "name": "node-api", "version": "1. 0. 0", "description": "Node Api Restful", "main": "index. js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1", "start": "nodemon node . /bin/www" }, "author": "Carlos González", "license": "ISC", "dependencies": { "cookie-parser": "~1. 4. 3", "debug": "~2. 6. 9", "http-errors": "~1. 6. 2", "morgan": "~1. 9. 0", "pug": "2. 0. 0-beta11", "bcrypt-nodejs": "0. 0. 3", "body-parser": "^1. 18. 3", "connect-multiparty": "^2. 1. 0", "express": "^4. 16. 3", "jwt-simple": "^0. 5. 1", "moment": "^2. 17. 1", "mysql": "^2. 15. 0" }, "devDependencies": { "nodemon": "^1. 11. 0" } } Ahora entrar en la ruta de la aplicación y lanzar... - Categorías: Cajón de sastre Me encanta hablar del sistema de compañeros, creo que he escrito 3 o 4 artículos relacionados pero siempre hablando sobre el buceo. Soy buceador, me encanta! ! Trabaje un tiempo en una escuela de buceo de Madrid, de cuyo nombre no quiero acordarme... , casi como el Quijote. El sistema de compañeros en el buceo es algo muy importante, desde que llegamos al centro de buceo hasta que nos tiramos al agua y volvemos a los vestuarios, tu compañero es la persona que vas a tener a tu lado, la persona que te tiene que ayudar y a la que vas a tener que ayudar en caso de tener algún problema. Esto también pasa en otros aspectos de la vida, en mi trabajo esto pasa a menudo y creo que es algo de mención. Cuando trabajas con un grupo de personas, todas tienen en frente común, el proyecto, el mantenimiento o cualquier situación que se salga de lo normal, por eso para mí una de las cosas que más valoro es el compañerismo. He pasado por varios sitios, no muchos ya que es posible que no lleguen a 8, y eso en la vida de un consultor que lleva más de 18 años en el sector es complicado, casi todos los proyectos en los que he estado han sido de larga duración y eso es muy importante, 4 años en uno, 8 en otro etc. Al final con lo que te quedas en cada uno de los grupos es con... - Categorías: Wordpress - Etiquetas: Slug Bien, porque personalizar el Slug. Cuantas veces nos hemos encontrado páginas en la que hay muchos articulos y a la hora de ir a pasar de página nos encotramos con parte del slug /page en la url, no será mejor que sea /pagina. Vaya no me gusta nada y hay una forma muy fácil de solucionarlo. Solo tendríamos que crear una acción, es algo parecido a los filtros de Wordpress, y que se hace en 5 minutos. Con ello nuestra web pasaría de tener un slug en otro idioma a uno mucho más bonito en español. Ya de paso, convertimos todos los que tenemos por defecto en Wordpress. Para esto solo tenéis que añadir estas líneas en vuestro functions. php Actualizar slugs function re_rewrite_rules { global $wp_rewrite; $wp_rewrite->author_base = 'autor'; $wp_rewrite->search_base = 'buscar'; $wp_rewrite->comments_base = 'comentarios'; $wp_rewrite->pagination_base = 'pagina'; $wp_rewrite->flush_rules; } add_action('init', 're_rewrite_rules'); Ya de paso os pongo alguna más Refrescar url, al cambiar de tema add_action( 'after_switch_theme', 'flush_rewrite' ); function flush_rewrite { flush_rewrite_rules; } Desactivar widgets que no quereis que se utilicen add_action( 'widgets_init', 'widgets_init_unregister' ); function widgets_init_unregister { unregister_widget( 'WP_Widget_Links' ); unregister_widget( 'WP_Widget_Meta' ); unregister_widget( 'WP_Widget_Search' ); unregister_widget( 'WP_Widget_Text' ); unregister_widget( 'WP_Widget_Categories' ); unregister_widget( 'WP_Widget_Recent_Posts' ); unregister_widget( 'WP_Widget_Recent_Comments' ); unregister_widget( 'WP_Widget_RSS' ); unregister_widget( 'WP_Widget_Tag_Cloud' ); unregister_widget( 'WP_Widget_Pages' ); unregister_widget( 'WP_Widget_Calendar' ); unregister_widget( 'WP_Widget_Archives' ); } Para temas de seguridad add_action( 'send_headers', 'add_header_seguridad' ); function add_header_seguridad { header( 'X-Content-Type-Options: nosniff' ); header( 'X-Frame-Options: SAMEORIGIN' ); header( 'X-XSS-Protection: 1;mode=block' ); } ¿Os acordais de los Emojis de Wordpress? ,pue eso... - Categorías: Laravel - Etiquetas: Debug Lo importante del debug, siempre que desarrollamos necesitamos poder hacer paradas y ver datos de todo lo que estamos desarrollando. Cuando trabajo con Laravel siempre uso la barra de debug creada por Barry vd. Heuvel, podéis ver su gitub y comprobar que todo su trabajo está enfocado para trabajar con Laravel. Podéis ver todo lo relacionado con la barra de debug aquí. https://github. com/barryvdh/laravel-debugbar Básicamente hay 2 ramas una para versiones inferiores a Laravel 5. 5 y otro para esta y superiores, podéis ver las instrucciones en la página anterior. La barra de debug está basada en PHPDebugBar, en la que se pueden ver, consultas, request, exceptios. Es súper interesante ya que se puede añadir en cualquier aplicación en la que uséis PHP. Os haré una prueba en otro post. Os hago pequeña introducción de todo lo que hace Laravel-Debugbar por nosotros Muestra todas las consultas, incluido binding + timing Muestra información sobre la ruta actual. Muestra las vistas cargadas actualmente Mostrar todos los eventos Muestra la versión de Laravel y el entorno. Reemplaza RequestCollector con más información sobre la solicitud / respuesta Muestra las últimas entradas de registro de los registros de almacenamiento. Muestra los archivos incluidos / requeridos por PHP. (deshabilitado por defecto) Muestra los valores de los archivos de configuración. (deshabilitado por defecto) Muestra todos los eventos de caché. (deshabilitado por defecto) Muestra todos los mensajes de registro Muestra datos de la función Mail Muestra datos de Mensajes, Excepciones y Tiempo ¿Cómo podéis instalar la barra en... - Categorías: Linux, Windows - Etiquetas: Emulación Os presento Cygwin, un emulador de terminales de Linux que es totalmente operativa para Windows. Con este programa podéis tener el 95% de los comandos de cualquier terminal Linux y trabajar como si estuvierais en este sistema operativo. La instalación es sencilla, descargarlo de esta página, https://cygwin. com/install. html y como todo en Windows, siguiente, siguiente, siguiente, os pedirá que elijáis un sitio de descarga (os vale cualquiera), y llegareis a una pantalla donde elegir paquetes, yo suelo elegir el de git. El paquete que se encuentra en Devel, y package - Distribute version control system wget . En Web, el único que hay. ssh . En Net . El package openssh, The openssh server and client programs nano. En Editor, el único que hay. nano: Enhanced clone of Pico editor Y siguiente, siguiente, siguiente. ¿Fácil verdad? Con esto tendremos una consola de Linux, totalmente operativa desde Windows. Si abris la consola podeis ejecutar los comandos de linux y de los paquetes que hemos instalado. Ejemplos: git $ git --version git version 2. 16. 1 ssh $ssh usage: ssh port] host] ] destination Algo que suele hacer es crear un alias para ir a cada uno de los proyectos en los que trabajamos. Para ello vamos al directorio donde esta instalado el terminal. En mi caso C:\cygwin\home\carlos Y abrimos el archivo . bash_profile, aqui podemos poner cualquier alias a cada uno de los proyectos ea los que queremos acceder de forma directa. Ejemplo alias web="cd /cygdrive/d/xampp/htdocs/web" alias cliente="cd /cygdrive/d/xampp/htdocs/cliente" Ahora... - Categorías: NodeJS - Etiquetas: MEAN Si has llegado hasta aquí es porque sabes que significa MEAN, es el acrónimo para: MongoDB, ExpressJS, AngularJS, NodeJS, en los últimos años esta tecnología se está utilizando el desarrollo de aplicaciones, y páginas web dinámicas, que están basadas, en Javascript. Este Javascript no es el que usábamos hace 20 años sino ExpressJS, mucho más avanzado que su versión anterior. Voy a recordaros como empezar una aplicación MEAN desde 0, se supone que ya debes tener instalado Node en tu PC. Los demás elementos los podrás instalar en otro momento. Para comenzar con una aplicación MEAN, solo es necesario ejecutar en la carpeta de tu futura aplicación la siguiente línea de comandos. npm init Y responder las preguntas que te van apareciendo con esto Node creara un package. json con todos los datos del proyecto package name: (nuevo-mean) nuevo-mean version: (1. 0. 0) description: Inicio de aplicacion nueva entry point: (index. js) index. js test command: git repository: keywords: author: license: (ISC) About to write to package. json: { "name": "nuevo-mean", "version": "1. 0. 0", "description": "Inicio de aplicacion nueva", "main": "index. js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "author": "", "license": "ISC" } Ahora sólo tendriamos que añadirles las depencias que vamos a usar en nuestro proyecto. Casi siempre se usan las mismas por lo que puedes ir añadiendolas 1 a 1 con el comando npm install express --save (Instalar ExpressJS en nuestro proyecto) npm install bcrypt-nodejs --save (Instalar libreria de encriptación) npm... - Categorías: Personal - Etiquetas: Sindrome del sobrino Y así fue... . , no por el palo que me han dado, sino por cómo es la gente cuando va al taller. Cuando las personas van a un taller mecánico, preguntan por el precio del arreglo de su coche y si les convence se queda y poco más. Deja su coche y una vez arreglado paga la factura. Pero, ¿cómo es posible? , pues bien al parecer cuando tú vas con una avería en el coche o vas porque tienes que cambiar las pastillas, el aceite,o cualquier cosa, es algo que tienes que hacer, es lógica, tengo el coche roto, lo tengo que arreglar o me quedo sin coche. Hasta aquí es todo lógico. Pero... . . Dios que sorpresa, presupuesto, aceptación, pago, trabajo realizado. ¡Fantástico! Ahora me pongo a pensar en el mundo de la informática, la mayoría de los clientes piden presupuesto y su reacción es ufff, pero si esto es copiar y pegar. ¿Te tengo que dar yo el contenido? Pero entonces te hago todo el trabajo... , si esto es poner cuatro cajitas y ya esta funcionando... ... Al final siempre acabas dando mil explicaciones, yo puedo hacer una página de buceo como una página de venta de cuadros, pero no tengo porque saber de la temática, por lo que tú como cliente me tendrás que decir tu target, a quien, como y donde te quieres dirigir... . . , creo que tiene su lógica, yo adaptare mi trabajo para hacerlo de la mejor manera... - Categorías: Laravel - Etiquetas: Sql server Hace poco trabajando para un cliente en el módulo de SII, nos hizo una petición extraña, habíamos realizado una Web App en Laravel con conexión a BBDD MySql como suele ser normal, pero el tenia todos los datos en SQL SERVER. Habíamos creado un proceso Batch para copiar los datos y pasarlos de una BBDD a otra, este funcionaba de forma correcta pero el cliente no quería tener corriendo este proceso por temas internos. Después de analizar el trabajo se decidió realizar la conexión de nuestra App con SQL SERVER. Manos a la obra. Lo primero que tuvimos que hacer es bajar los drivers de conexión a Base de datos de SQL SERVER con PHP. Nuestro servidor Apache está bajo Windows por lo que no tuvimos muchos problemas, aunque hay una explicación de cómo hacerlo bajo servidores Linux. Primeros pasos Descargar los drivers de la página de Microsoft. https://www. microsoft. com/en-us/download/details. aspx? id=20098 Os bajara un ejecutable que en realidad es un zip, ahora solo tenéis que descomprimir todas las dll en vuestra carpeta del servidor donde esté instalado PHP. En mi caso X:\xampp\php\ext. Tenéis que saber que versión de PHP tenéis instalado en vuestro servidor, PHP 5. 6, PHP 7. 0, etc. En mi caso PHP 7. 0. Os dejo una tabla con la versión del controlador que necesitáis: PHP ↓Versión de PHP 5. 2 4. 3 4. 0 3. 2 3. 1 7. 2 7. 2. 1+ en Windows 7. 2. 0+ en otras plataformas 7. 1 7.... - Categorías: Cajón de sastre - Etiquetas: Big data Desde hace un tiempo escuchamos Big Data por todos los sitios, es algo común en el siglo que vivimos. Durante mucho tiempo, se ha estado guardando información de muchísimas cosas cotidianas, que hacen que se pueda analizar incluso las conductas de las personas. Imaginaros tenemos un gran volumen de datos, en Base de datos, en Excel, en base de datos no SQL como puede ser MongoDB, con todos estos datos unificándolos en un sitio común podemos sacar información muy importante para cualquier compañía. Estos datos se pueden analizar para tomar decisiones y movimientos estratégicos para cualquier compañía. Un ejemplo de algo que parece una tontería pero hace que piense en esto cada vez que arranco el coche. Mi coche, como otro muchos tienen un GPS integrado, pues bien cada vez que arranco me dice que si quiero usar el GPS, tengo que ceder mis datos de ubicación con fines de análisis, etc. Bien con esto, estoy mandando donde paro, cual es mi trayecto habitual, donde paso e mayor tiempo cuando estoy en el coche. Si solo fuera mi dato, no pasaría nada pero imaginaros 100000 coches. ¿Qué datos podríamos sacar? Bueno, pues en que gasolinera paran más esos 10k coches. En que carreteras suele haber más caravana, ¿Ponemos un puesto de pipas? ¿Cuáles son los trayectos más habituales? , del norte de Madrid al sur, del sur al norte. Bueno este artículo esta relacionado con el Big Data, pero no hasta ese punto. ¿Sabéis que existen páginas de donde podemos... - Categorías: HTML / CSS, Javascript - Etiquetas: Animaciones Esta tarde de viernes, revisando cosas en la que había trabajado me vino a la cabeza la página de Robert Penner. Seguro que la gran mayoría no le conoce, hace más de 15 años hizo que mi primer trabajo tuviera algo de animación. Hace años cuando subíamos las páginas por ftp con nuestro modem de 16K, y ese ruido infernal de transferencia, las páginas era muy estática, bueno la mayoría se hacían con el Frontpage y algunas empresas usaban Dreamweaver como súper IDE de programación. Ha llovido bastante y todo ha cambiado, ahora tenemos 300 Mb de ADSL en casa, se ha dejado de usar tecnología en la que muchos trabajamos durante algún tiempo, como por ejemplo Flash y las páginas no tienen nada que ver, usamos CMS, ERP, y muchos otros elementos. Pensar que en el año 2000, trabajamos con ASP + Access en páginas Web y era algo que nos dejaba con la boca abierta, ahora eso nos la deja pero de otra manera. ASP 3. 0, ya casi no se usa, en 20 años todo evoluciona. Pues aquí es donde empieza todo, en la pequeña agencia de publicidad en la que trabajaba hacíamos nuestros pinitos con animaciones en la web. Animaciones de todo tipo, menús, carritos de la compra y aquí es donde apareció por nuestras manos la página de Robert Penner (http://robertpenner. com/easing/). ¿Qué es lo que hizo? Una súper librería de JavaScript que tenía todo lo relacionado con funciones de movimiento, muchas de ellas usadas... - Categorías: Diseño - Etiquetas: Herramientas de desarrollo Antes de nada, Sketch es un conjunto de herramientas de diseño digital creado para realizar diseños y hacer el trabajo de manera más rápido desde las ideas iniciales hasta los activos finales. Digamos que el Photoshop ha quedado anticuado en cuanto a la hora de realizar mockup, y diseños de forma rápida. La verdad es que Sketch tiene un periodo de adaptación pero una vez te haces con la plataforma, puedes realizar cientos de diseños en poco tiempo, imaginación y herramientas, eso es lo que necesitan los diseñadores. Esos diseños luego suelen ser complicado para nosotros, los programadores, que tenemos que adaptarnos e inventarnos millones de elementos para que los diseños queden igual. Yo no suelo cambiar de personas, siempre me quedaré con Iván de Reaktiva, a la hora de realizar los diseños y trabajar con él, nos comunicamos, nos adaptamos y buscamos la mejor solución a cada cosa que nos plantea el cliente. Aunque parezca mentira esto suele ser complicado en un grupo, como ya he hablado en otro artículo el sistema de compañeros, funciona en todos los aspectos de la vida y no solo en el buceo. Esto cada vez parece estar más perdido como os comente pero estoy seguro que se puede conseguir, de hecho yo lo he tenido muchos años. Os dejo algunos diseños realizados por Iván en Sketch: Koex Distribución Integral S. L. Hotel Mirador de Gredos Ayuntamiento de Velilla de San Antonio Aquí podéis ver un video de la web oficial de Sketch: Un... - Categorías: Cajón de sastre - Etiquetas: Pentesting No os voy a engañar, el mundo de hacking siempre me ha llamado la atención, he leído mucho y he trabajado bastante en el tema de hacking pero ético. Cuando estas desarrollando, ya sea en Laravel o en cualquie lenguaje, tienes que tener en cuanto muchas cosas y saber de este tema, te puede aportar bastante valor. No es la primera vez que me lanzo ataques a mi propia web o trabajo desarrollado para ver vulnerabilidades, en mi opinión todo el mundo que desarrolla tendría que tener algún conocimiento de ciertas técnicas. Por otro lado, en mi opinion la indexación de google y otros buscadores, hacen encontrar bastantes elementos que pueden comprometer la seguridad de ciertas páginas. Podeis probar a poner "inurl: /admin" en el buscador o buscar elementos como "inurl: /? url=" donde se podría hacer ataques DDos... . . con páginas zombies. Muchas veces, oigo a mucha gente hablar superbién de ciertos hackers conocidos, parece que hay que llevar gorra de lana a 40 grados, para saber del tema hay muchas maneras. Yo he seguido algún curso de Comunix Group (https://www. comunixgroup. com/) y la verdad es que he aprendido bastantes cosillas que tenían pendiente, sobre todo el tema de exploit y otros recursos. Para mi es una de las mejores plataformas que hablan de este tema, de momento mi opinión es de 2 cursos completos que he realizado y un tercero que estoy en ello. Certificación de Iniciación al Hacking Ético – FCEH Certificación de Experto Web... - Categorías: Wordpress - Etiquetas: Virus A vueltas con los virus, hace cosa de 8 meses, me llamo un cliente que sin motivo aparente se habia quedado sin espacio en la web. Al entrar, me encontre que tenian miles de ficheros subidos a su carpeta wp-content/uploads. Como por fecha sabiamos que podiamos borrar, se elimino todo, se cambio la contraseña tanto del FTP como del Wordpress y se dejo la web limpia, otra vez con espacio y todo funcionando. Al día siguiente, revise de nuevo y otra vez se habia llenado la carpeta. El cliente no habia sido, ya que el no actualiza la web, de hecho no le habiamos dado ni la nueva contraseña. Su Wordpress y todos los plugins estaban actualizados. Me tocaba investigar el problema. Despues de revisar durante horas todo el fuente no encontraba donde estaba la vulnerabilidad. Despues de buscar y buscar llegue hasta esta web. https://wpvulndb. com/, en ella estan todas las vulnerabilidades, ademas te detallan hasta como poder explotarla. En mi caso el cliente usaba un tema llamado, Make a statement. En el buscador de la web, meti el nombre del tema y zas, aparecio para mi sorpresa. Al pinchar me aparecio una página con todos los datos del exploit. Me llevo hasta esta web https://wpvulndb. com/vulnerabilities/7433 y en las referencias el dichoso Exploit (https://www. exploit-db. com/exploits/29670/). #Title : Wordpress Make A Statement Themes CSRF File Upload Vulnerability #Author : DevilScreaM #Date : 11/17/2013 - 17 November 2013 #Category : Web Applications #Type : PHP #Version : 1. x.... - Categorías: Wordpress - Etiquetas: Virus Urgente Virus. Este fue el asunto que me envio un cliente hace más o menos un año. Era un cliente del grupo de empresas en las que trabajaba, su web estaba en blanco, y no sabía que habia pasado. Nada más recibirlo, se le hizo una llamada al cliente, necesitábamos sus datos, no teníamos acceso a su BBDD, a su Wordpress ni a su FTP, al fin y al cabo era un fuego que teníamos que apagar. Manos a la obra, empezamos con la revisión. Efectivamente su web había sido hackeada y usada para mandar miles de correos de SPAM. No solo enviar correos, sino además usar su web para temas de pishing y otras artes oscuras, dependiendo en que directorio entrarás, Su archivo wp-config. php comenzaba con esta línea: - Categorías: Wordpress - Etiquetas: Personalizar Wordpress Y como dice mi título, la importancia que tienen en la vida los filtros, filtros para todo, para limpiar. Filtro de personas, filtro de partículas, filtro de ... . . , bueno un montón de filtros. Hoy vengo a hablaros de los filtros de Wordpress, no filtros de búsqueda sino filtros con los que podemos modificar parte del contenido que se visualiza en nuestro Wordpress, y darle un aire nuevo. La función en si se llama add_filter, con esta función podemos modificar elementos en tiempo de ejecución, ¿para qué quiero esto? , Imaginaros que quiero añadir un tag nuevo a mis imágenes o añadirle un elemento para luego poder usarlo con un jquery y así poderle trabajar con él, pues para todo esto podríamos usar los filtros. Su función es la siguiente: add_filter( string $tag, callable $function_to_add, int $priority = 10, int $accepted_args = 1 ) Que significa esto $tag es el nombre del filtro al que estamos vinculando $function_to_add es el nombre de la función que debería ser invocada al ejecutar el filtro $priority, la prioridad con la cual la función debería ser llamada $accepted_args son el número de argumentos que la función acepta Os pongo un ejemplo de su web oficial, como veis podemos cambiar el tamaño del excerpt con un simple filtro, bastaría copiar esto en el functions. php. Siempre os hablo del archivo functions pero todas estas funciones las podríamos añadir en un plugin creado por nosotros, así si se actualiza la plantilla el functions. php... - Categorías: Wordpress Como hemos hablado en muchas ocasiones, tocar continuamente nuestros archivo functions. php de nuestro template o tema, puede ser peligroso si este se va actualizando con Wordpress. Por ello podemos crear un plugin y así poder instalarlo. Con esto conseguimos aislar nuestras funciones del tema original de nuestra página. Solo tenemos que crear un archivo php, con el nombre que queramos , y subirlo a nuestra carpeta de wp-content/plugins con un FTP. Os pongo un ejemplo y un enlace al artículo que hablamos de algunas actions y filtros en nuestro wordpress. El código para crear un nuevo plugins es: - Categorías: Kanboard, Open Source - Etiquetas: Alternativas Trello, es un herramienta de gestor de proyecto bastante simple que se usa bastante a la hora de compartir datos en un proyecto, ahora bien, desde mi punto de vista tiene un problema. Todos los datos que subimos no son de nuestra propiedad, la propiedad siempre será de Trello. Esto es un problema, ya sabéis con el tema del todo a la nube, todo on cloud, para que voy a tener los datos en mi PC. Bien si mañana Trello decide no gastar dinero en seguridad y alguien es capaz de hackearles. Tendrán los datos de millones de empresas, desde contraseñas hasta información de proyectos. Mi idea desde hace tiempo es buscar productos que aunque no estén tan evolucionados como estas herramientas, me hagan la misma función, aquí aparece Kanboard. Kanboard es un software de gestión de proyectos Kanban de fuente abierta y gratuita. Su diseño es feo, pero con un pequeño plugin subido a la carpeta correspondiente, se consigue poner bastante bonito. Al final del artículo os dejare un enlace a un plugin que he realizado con los colores de esta web, rojo, blanco y negro, son los colores que uso para casi todo, es mi marca personal. La instalación de Kanboard es sencilla, subir y descomprimir y solo trabajara con una base de datos SQL lite, si queréis trabajar con una base de datos Mysql, solo tenéis que crear una base de datos, configurar el archivo archive. config. php y renombrarlo a config. php. En la base datos... - Categorías: Open Source, Ruby - Etiquetas: Gestor de tickets Hoy, escuchando el podcast de uno de los más grandes, empezó a explicar un software que había encontrado de código libre y me hizo pensar. En Dimensyon, uno de los grandes problemas que nos encontramos era el ofrecer al cliente la posibilidad de ponerse en contacto con nosotros, no por teléfono que es lo fácil, sino por un sistema de tickets, probamos bastantes soluciones pero no logramos encontrar esta que os menciono. Zammad es un sistema de soporte de cliente / servicio al cliente de código abierto basado en la web, realizado con un modelo vista-controlador bastante elegante y en Ruby, yo hasta la fecha no había visto casi nada de este lenguaje, pero lo investigue y no me pareció demasiado complicado. L dicho, una pena no haberla encontrado antes ya que para mí es súper completa, podéis ver varios pantallazos que he sacado de su sitio web, desde aquí podéis ver toda la documentación y como se instala. Toda la documentación del proyecto está aquí https://github. com/zammad/zammad-documentation https://github. com/zammad/zammad-admin-documentation https://github. com/zammad/zammad-user-documentation Os dejo una pequeña galería para que veáis que además es bonita: Login Ticket Escritorio Saludos a todos! - Categorías: Linux - Etiquetas: Comandos de linux Aquel día descubrí la aplicación Htop, fue de manera curiosa, el VPS de un cliente, dejaba de servir, el caos más absoluto, reinicios y revisión de procesos, memoria, CPU, todo parecía intentar salirse del servidor, los datos de mi top eran como cual alien queriendo salirse del cuerpo de John Hurt en la película Alien: el octavo pasajero Era el momento de llamar a un amigo que es un crack, tanto en lo personal como con cositas de servidores, Eduardo collado, os dejo el enlace a su página llena de podcast e incluso con grupo de Telegram, sobre todo lo relacionado con redes, Wordpress y servidores. Es súper interesante seguirle, es una caja de sorpresas. Revisando los archivos de configuración, comente, hago un top pero no veo nada raro, es cierto que arrancaba 4 procesos de apache, pero... . su respuesta, haz un Htop. Y vamos a sacar más datos. Por mi cabeza paso de todo, haz un Htop, unmm pero que es eso... . , seguro que muchos dirán, este no se entera de nada esta aplicación lleva desde el 2004, etc etc. Estáis en lo cierto pero a mí siempre me ha valido con mi top, yo huía de tema de servidores de clientes pero al final te tienes que adaptar. No te acostaras sin saber una cosa más, así que Htop según la wiki es un sistema de monitorización, administración y visor de procesos interactivo. Como instalarlo Yo os escribo desde un servidor con una distribución de... - Categorías: Odoo, Python - Etiquetas: Open ERP Odoo (conocido anteriormente como OpenERP y anteriormente como TinyERP) es un sistema de ERP integrado de código abierto actualmente producido por la empresa belga Odoo S. A Odoo, está realizado en Python, por lo que su nivel de aprendizaje suele ser rápido y como patrón de arquitectura de software usa módelo-vista-controlador. Podéis descargar su versión comunnity y probarlo en cualquier servidor tanto Linux como Windows Ahora os cuento que me pareció el tiempo de 40 horas que estuve realizando un curso para empezar a trabajar con él, en el grupo de empresas al que permanecíamos. En mi opinión, tiene un montón de componentes y un montón de módulos pero creo que esta sin moldear. Si te adaptas a los elementos que trae, se puede trabajar desde el primer momento pero, creo que es muy básico y la mayoría de empresas van a necesitar meter muchas horas para poder adaptarlo a sus necesidades. Por otro lado, cada año sale una versión nueva de Odoo y esto a mi parecer, no tiene mucho sentido ya que en muchas ocasiones no es retro compatible... . Os dejo un video súper completo: Saludos a todos - Categorías: Personal - Etiquetas: Motivación, Ofertas de trabajo Bueno, el año 2018 comenzó con un proceso complicado pero a la vez, un nuevo reto en mi vida. Dimensyon se desvanecía pero como estaba mi situación. Imaginaros te encuentras en una tesitura complicada, 2 años atrás deje mi trabajo en el que llevaba 11 años, para cumplir uno de mis sueños, montar mi propia empresa. Los astros parecían alinearse y yo parecía volver a mis inicios, una pequeña agencia, una pequeña empresa de software y todo gestionados con buenos amigos. Seguro que a algunos os suena porque habéis hecho algo parecido. En mi caso, me encanta trabajar en pequeñas empresas ya que te hacen sacar todo el ingenio que tienes dentro. Estilos, gestión, nuevos clientes, nuevos retos y sobre todo poder dar todo el conocimiento que tienes en la cabeza. En mis 18 años como programador, analista o como lo quieran llamar he realizado todo tipo de trabajos, desde pequeñas web hasta sistemas de fluidos para cursos de formación, todo tipo de lenguajes y nuevos retos. 8 años en empresas de menos de 10 personas, me encanta, es mi lugar, lo tengo claro, no me gustan las ciudades grises y tristes pero eso es otra historia. Nace Dimensyon Al lio, Dimensyon by SIS, un nombre muy buscado, días y horas para conseguir nuestra pequeña marca dentro de un grupo. Teníamos el conocimiento, el saber hacer pero faltaba algo, y 2 años después de muchos trabajos y horas, se dividió el grupo y cada uno busco su camino. Adiós a... - Categorías: Personal, PHP - Etiquetas: Emocional Bueno, como muchos sabéis el mes de Febrero, fue un mes muy divertido, llamadas de consultoras, ofertas de trabajo y mil historias más. En una de estas llamadas, me comentaron que me tenían que hacer una prueba de nivel de desarrollador, que me mandarían el examen y que por favor me diera priesa en enviársela porque al cliente le había gustado mucho mi CV. ¡Pues manos a la obra! Recibí el correo, con todos los datos y esta última frase "Una vez lo reciba, lo enviamos a validación técnica, y vuelvo a ponerme en contacto contigo para comentarte como continuamos" Vaya, parecía que había prisa, así que ese mismo día realice todos los ejercicios y al día siguiente la prueba. Toca esperar y seguir con mi vida. Una semana después, recibí su correo y cuál fue mi sorpresa. "Disculpa la demora en contestar a tu correo, pero en estos días me he encontrado fuera de la oficina. Si te parece bien remito lo que me envías al responsable del proyecto y te comento algo entre mañana y el lunes. " A día siguiente, me comentaron que el puesto estaba cubierto y que no cubría sus expectativas. Conclusión La persona que se pone en contacto conmigo, me dice que mi CV le gusta, y que me manda todos los ejercicios y que por favor no me demore, que cuanto antes se lo mande mejor. Al día siguiente tiene todo, y hasta una semana después no lo manda al cliente para validar.... - Categorías: Wordpress - Etiquetas: CSS En muchas ocasiones nos encontramos con la necesidad de tener un estilo diferente para algunas partes de nuestro Template de Wordpress. Todos los que hemos trabajado con diferentes diseñadores nos hemos encontrado con sus ocurrencias y desdichas, es algo normal y siempre hay alguna solución. Por ejemplo, en algunas páginas queremos que el titulo tenga un tamaño diferente o un color porque va sobre un fondo, o que llame más la atención algún elemento común de la web, como puede ser un widget. Hay muchas maneras de hacer esto, una muy común es añadir un estilo global en el body de la página y así trabajar sobre el en la hoja de estilos, a mí me gusta hacerlo usando el slug de la página en la que nos encontramos. Vamos a jugar con la funcion body_class del template de Wordpress. Si miráis el código fuente de la página el tag del body tendrá varios estilos: Os explico como lo haría en varios pasos sencillos. Por cuestiones de organización siempre me hago una librería de funciones comunes y la incluyo en mi functions. php, suelo ponerlo en la primera línea del archivo. include_once ("inc/funciones. php"); Con esto ya tenemos incluida nuestra librería, que como podéis ver esta dentro de la una carpeta inc, en nuestra carpeta del tema, con el nombre funciones. php. (Esta parte si queréis os la podéis ahorrar y meter esta función directa sin tener que incluir ninguna página, cuestión de organización) En ella añadiremos todas las funciones... - Categorías: SEO & Marketing de contenidos, Wordpress - Etiquetas: Velocidad de carga En algunas ocasiones para intentar cargar más rápido la página ponemos los Scripts que contienen todas las librerías js al final de la página. Con esto conseguimos que la persona al entrar vea todo el contenido de la web y luego una vez cargada se ponga en funcionamiento todo el Javascript. En Wordpress, esto también se puede hacer aunque no siempre nuestra plantilla lo admite, en plantillas hechas a medida podemos trabajar como queramos por lo que esto nos puede ayudar, en cuanto a Templates comprados o gratuitos dependerá del programador que ha realizado la plantilla, con probar podremos saber si nos esta funcionando. Veamos que tenemos que hacer y probar si los scripts de las páginas los veis al final de la misma, para poder mover los scripts al final de la página podemos poner esta función al final de nuestro functions. php. //Mover script js al final de la web function mover_script_al_final_de_la_pagina { remove_action( 'wp_head', 'wp_print_scripts' ); remove_action( 'wp_head', 'wp_print_head_scripts', 9 ); remove_action( 'wp_head', 'wp_enqueue_scripts', 1 ); add_action( 'wp_footer', 'wp_print_scripts', 5); add_action( 'wp_footer', 'wp_enqueue_scripts', 5); add_action( 'wp_footer', 'wp_print_head_scripts', 5); } add_action('wp_enqueue_scripts', 'mover_script_al_final_de_la_pagina'); Con esto podemos conseguir algun puntillo extra en PageSpeed Insights. A esto no le deis muchas vueltas ya que desde mi punto de vista puede influir pero no realmente todo lo quenos hacen pensar, podemos intentar sacar todos nuestros valores a “A” verdes bonitas pero en realidad, si el SEO de la Web es malo y no funciona no vamos a conseguir nada. Yo me he... - Categorías: Wordpress - Etiquetas: Prevenir Hoy un artículo bastante corto, para prevenir la ejecución de PHP y añadir un poco de seguridad adicional a algunas de nuestras carpetas podemos añadir un archivo . htaccess y poner el siguiente código. # Kill PHP Execution deny from all Esto puede venir muy bien para prevenir la ejecución de archivos en nuestro directorio de uploads de wordpress dentro wp-content. Este código lo tengo añadido en otro post, pero estos articulos los uso para recordar cosas, que se me pasan y tengo que buscar a menudo por la red. Os dejo el enlace a una página que es interesante, sobre temas de seguridad web WP Doctor. Os pongo el enlace. Saludos a todos, cualquier duda ya sabéis desde las redes sociales o desde el formulario de esta misma web - Categorías: Cajón de sastre, Wordpress - Etiquetas: Miscelánea, Seguridad En este post os voy a poner varias funciones que suelo usar en todas mis páginas, algunas por seguridad, otras porque la página o el diseñador me lo ha pedido y otras por el simple hecho que me gusta que queden mejor las cosas y no entregar al cliente un simple Wordpress instalado con un Template y búscate la vida. Copyright administrador La primera función sirve para añadir un Copyright diferente en el pie de la página del administrador, podéis poner lo que queráis, yo en el ejemplo os pongo un enlace a la misma página. Podrías poner un enlace a tu web y así el cliente siempre te tendrá presente. Para ello editamos el archivo functions. php y añadimos lo siguiente: function Cambiar_admin_footer{ return __( 'Copyright © ' . date("Y") . ' ' . get_bloginfo( 'name' ) . '', 'dsbl' ); } # Change the admin footer add_filter( 'admin_footer_text', Cambiar_admin_footer, 10, 1 ); Veréis en el pie de la página un nuevo enlace que sustituye el que viene por defecto en Wordpress. Cambiará vuestro pie, pasará de esto Gracias por crear con WordPress. a Copyright © 2018 Programador Web & SEO - Madrid Eliminar versión de Wordpress. WordPress desde sus inicios muestra por defecto la versión instalada en el código fuente de todas las páginas y además añade un archivo HTML por si no había poca información. Esta información puede ser utilizada para buscar exploits de código fuente y puede ayudar a que nuestra web muestre las vulnerabilidades que... - Categorías: SEO & Marketing de contenidos, Wordpress - Etiquetas: Velocidad de carga A vueltas con la velocidad de carga de la web, parece que es algo obsesivo pero me encanta hacer reducir la velocidad de carga de cada web en la que trabajo. Uso Wordpress para muchos de mis trabajos, pequeñas empresas, pymes o incluso autónomos que quieren darse a conocer. No todas las webs que he realizado las he montado yo desde 0, muchas han venido de 1, 2 o incluso 3 manos y esto hace que tengas que entender y buscar cómo ha realizado la página el anterior programador. Mi pensamiento siempre es reducir la carga de la web, el cliente es algo que nota enseguida y es algo que para todos los recursos de información que se usan ahora vital. En esta ocasión os presento un plugin, (sabéis que no soy partidario de ellos), pero no voy a ponerme a inventar la rueda cuando lleva inventada desde el IV milenio a. C. , el plugin en cuestión es WP-HTML-Compression, que junto con otros plugins o sistemas de cache, puedes hacer que nuestra web cargue a toda velocidad. Ya os hablare de sistemas de cache en otro post. Que es de WP-HTML-Compression, es un plugin simple, un plugin en el que no hay que configurar cientos de propiedades. Solo es buscarlo desde la página de plugin de vuestro Wordpress o subirlo por vuestro FTP, una vez en la lista de plugins , solo hay que activarlo y chan! Se hizo la luz! ! Podéis ir a ver el código fuente... - Categorías: SEO & Marketing de contenidos, Wordpress - Etiquetas: Emojis, Velocidad de carga Corría el año 2015 cuando Wordpress decidió aportar su granito de arena con los Emojis, a día de hoy todo el mundo sabe lo que son pero en aquella época parecía que quedaba bien a todo el mundo, la versión 4. 2 de Wordpress traía los Emojis instalados por defecto. J = :) Con la lucha de la velocidad de carga de mi página y de la página de clientes, decidí investigar y empecé a navegar por internet en busca de respuestas, mi página con la versión anterior de Wordpress llegaba a tardar casi u segundo menos de carga. Este tiempo, aunque parezca un solo segundo es bastante tiempo a la hora de cargar cada una de mis páginas. Yo no soy partidario de los Emojis, puede que para alguna conversación privada de Telegram, Whatsapp, pero en las páginas de clientes, Web corporativas, Landing page o blogs personales, no lo veo necesario. Además si me incrementa el tiempo de carga en 1 segundo hace que todavía me haga más partidario de eliminarlo. El código que se genera en nuestro HTML, si mirais vuestra página será similar a este window. _wpemojiSettings = {"baseUrl":"https:\/\/s. w. org\/images\/core\/emoji\/2. 4\/72x72\/","ext":". png","svgUrl":"https:\/\/s. w. org\/images\/core\/emoji\/2. 4\/svg\/","svgExt":". svg","source":{"concatemoji":"http:\/\/www. carlosgonzalezgurrea. es\/wp-includes\/js\/wp-emoji-release. min. js? ver=4. 9. 5"}}; ! function(a,b,c){function d(a,b){var c=String. fromCharCode;l. clearRect(0,0,k. width,k. height),l. fillText(c. apply(this,a),0,0);var d=k. toDataURL;l. clearRect(0,0,k. width,k. height),l. fillText(c. apply(this,b),0,0);var e=k. toDataURL;return d===e}function e(a){var b;if(! l||! l. fillText)return! 1;switch(l. textBaseline="top",l. font="600 32px Arial",a){case"flag":return! (b=d(,))&&(b=d(,),! b);case"emoji":return b=d(,),! b}return! 1}function f(a){var c=b. createElement("script");c. src=a,c. defer=c. type="text/javascript",b. getElementsByTagName("head"). appendChild(c)}var...