Trucos

Linux, Sistemas, Trucos

Cómo activar los procesadores de un servidor virtual o cloud sin reiniciar

Hoy hemos tenido que ampliar los procesadores de un servidor Cloud para un cliente. Lo bueno de estos servidores es que, cuando hay un aumento repentino de accesos, se les puede aumentar los recursos de forma temporal. Porque son servidores virtuales. Sin embargo, la mayoría de las veces el aumento requiere reinicio y esto, en una máquina en producción, puede no ser viable inmediatamente. Hoy os enseñamos cómo activar los procesadores añadidos sin tener que reiniciar. Cómo activar los procesadores de un servidor virtual sin reiniciar. Al activar los procesadores nuevos podéis comprobar como todavía no están en funcionamiento con los comandos de este artículo. Por ejemplo si hacemos un lscpu veremos algo como: Si veis los CPU 0 y 1 aparecen online peor los 2 y 3 salen offline (en linux se centan desde 0). Como hemos dicho podemos reiniciar, y activará los que tiene offline. Pero también podemos ejecutar estos comandos: Activar procesadores. echo 1 > /sys/devices/system/cpu/cpu2/online echo 1 > /sys/devices/system/cpu/cpu3/online De esta manera pones a 1 (online) los atributos  sysfs de dichos procesadores. También se puede hacer lo mismo con chcpu chcpu -r chcpu -e 2 (Esto reescanea los cpus y activa el procesador 2) Para desactivar los procesadores: echo 0 > /sys/devices/system/cpu/cpu2/online echo 0 > /sys/devices/system/cpu/cpu3/online Esto hace lo contrario. Si ahora hacéis de nuevo un lscpu obtendréis que están todos activos:  

Diseño Web, Gestores de contenidos, Prestashop, Trucos

Mejorar la calidad de las imágenes que se suben o se importan en Prestashop

Hace unos días hemos hecho una página web para un cliente en Prestashop. Este cliente, tenía la peculiaridad (respecto a clientes anteriores) que disponía de unas imágenes con buena calidad. Al subirlas a Prestashop, tanto en la subida por producto, como en la importación masiva, la pérdida de calidad era más que evidente. Las fotos de Prestashop no tenían una calidad aceptable teniendo en cuenta las fotos de origen. Y en esa página, las imágenes eran clave. La página la hemos creado en 1.7, pero lo probamos en 1.6 y el resultado era el mismo. Calidad muy por debajo de lo aceptable cuando las imágenes originales son de calidad (para imágenes “usuales” si que es funcional). Obviamente modificamos todas las opciones de calidad en el backend de Prestashop ( Diseño > Ajustes de imágenes ), sin mejora importante del resultado. Nos somos a los primeros a los que les pasó (ver aquí y aquí). Es un tema recurrente y sin resolver (“sorpresa” por parte de Prestashop). Al final descubrimos por qué y cómo resolverlo. Os lo contamos en este artículo. Cómo mejorar la calidad de las imágenes que se suben o se importan en Prestashop. Lo primero es la causa que ocasiona esta pérdida de calidad. Prestashop comprime todas las imágenes al subirlas. Y crea varias imágenes de diferentes tamaños (que se definen en Diseño > Ajustes de imágenes ). Esto es lógico y bueno. El problema es que usa un método de compresión, GD2, que antes se usaba mucho por estar integrado en Php (o en la mayoría de las instalaciones). Sin embargo no es la librería que mejores resultados da, tiene pocas opciones y, además, creo que Php 7 ya no la incluye por defecto. Después de varias pruebas infructuosas con GD, optamos por cambiar a Imagemagick siguiendo las indicaciones de un post al que enlazamos en los párrafos anteriores. Siguiendo los resultados arreglaba algo la subida producto a producto, pero no la masiva. Y aún así, no conseguíamos los mejores resultados así que modificamos el proceso para lo que queríamos. Esto es lo que hicimos.. Para las subidas desde el backend. Tenemos que: Hacer un override (copiar en la carpeta override/classes) de la clase ImageManager.php porque queremos modificar la función resize para que use ImageMagick. Nota:  Para esto tu servidor tiene que tener ImageMagick o deberías poder instalarlo. Si no no funciona. En ese fichero   override/classes/ImageManager.php ponemos lo siguiente: <?php class ImageManager extends ImageManagerCore { /** * Resize, cut and optimize image * * @param string $src_file Image object from $_FILE * @param string $dst_file Destination filename * @param int $dst_width Desired width (optional) * @param int $dst_height Desired height (optional) * @param string $file_type * @param bool $force_type * @param int $error * @param int $tgt_width * @param int $tgt_height * @param int $quality * @param int $src_width * @param int $src_height * @return bool Operation result */ public static function resize2($src_file, $dst_file, $dst_width = null, $dst_height = null, $file_type = ‘jpg’, $force_type = false, &$error = 0, &$tgt_width = null, &$tgt_height = null, $quality = 5, &$src_width = null, &$src_height = null) { if (PHP_VERSION_ID < 50300) { clearstatcache(); } else { clearstatcache(true, $src_file); } if (!file_exists($src_file) || !filesize($src_file)) { return !($error = self::ERROR_FILE_NOT_EXIST); } list($src_width, $src_height, $type) = getimagesize($src_file); // If PS_IMAGE_QUALITY is activated, the generated image will be a PNG with .jpg as a file extension. // This allow for higher quality and for transparency. JPG source files will also benefit from a higher quality // because JPG reencoding by GD, even with max quality setting, degrades the image. if (Configuration::get(‘PS_IMAGE_QUALITY’) == ‘png_all’ || (Configuration::get(‘PS_IMAGE_QUALITY’) == ‘png’ && $type == IMAGETYPE_PNG) && !$force_type) { $file_type = ‘png’; } if (!$src_width) { return !($error = self::ERROR_FILE_WIDTH); } if (!$dst_width) { $dst_width = $src_width; } if (!$dst_height) { $dst_height = $src_height; } $width_diff = $dst_width / $src_width; $height_diff = $dst_height / $src_height; $ps_image_generation_method = Configuration::get(‘PS_IMAGE_GENERATION_METHOD’); if ($width_diff > 1 && $height_diff > 1) { $next_width = $src_width; $next_height = $src_height; } else { if ($ps_image_generation_method == 2 || (!$ps_image_generation_method && $width_diff > $height_diff)) { $next_height = $dst_height; $next_width = round(($src_width * $next_height) / $src_height); $dst_width = (int)(!$ps_image_generation_method ? $dst_width : $next_width); } else { $next_width = $dst_width; $next_height = round($src_height * $dst_width / $src_width); $dst_height = (int)(!$ps_image_generation_method ? $dst_height : $next_height); } } if (!ImageManager::checkImageMemoryLimit($src_file)) { return !($error = self::ERROR_MEMORY_LIMIT); } //Set Imagick Object values /* $src_image = new Imagick(); $src_image->readImage($src_file); $src_image->setImageCompression(Imagick::COMPRESSION_JPEG); $src_image->setInterlaceScheme(Imagick::INTERLACE_PLANE); $src_image->setImageCompressionQuality(89); $src_image->sharpenimage(2, 0.5, 134217727); $src_image->gaussianBlurImage(0.03,0.03); $src_image->stripImage(); $src_image->thumbnailImage($dst_width, $dst_height, Imagick::FILTER_SINC, 1);*/ $src_image = new Imagick(); $src_image->readImage($src_file); $src_image->setImageCompression(Imagick::COMPRESSION_JPEG); /*$src_image->setImageFormat(‘png’);*/ /*$src_image->setInterlaceScheme(Imagick::INTERLACE_PLANE);*/ $src_image->setImageCompressionQuality(89); /*$src_image->sharpenimage(1.5, 0.5, Imagick::CHANNEL_ALL);*/ /* $src_image->gaussianBlurImage(0.03,0.03);*/ $src_image->stripImage(); $src_image->thumbnailImage($dst_width, $dst_height, Imagick::FILTER_LANCZOS, 1); $src_image->brightnessContrastImage(1,0,Imagick::CHANNEL_ALL); $src_image->gammaImage(0.9,Imagick::CHANNEL_ALL); $src_image->modulateImage(100,120,100); //Output the final Image using Imagick return $src_image->writeImage($dst_file); } } Como veis hemos creado la función resize2 que usará ImageMagick. Dejando el nombre resize arregla el backend. Pero no las masivas. Eso si, si sólo hacemos esto con otro nombre no usa resize2 al subir productos. Tenemos que indicarle que lo haga. Para eso. Hacer un override en override/controllers/admin/AdminProductsController.php  . Ahí hay 5 sitios en el que llama a resize. Cambia los 5 a la función anterior (pon un 2 y ya está si has usado nuestro método. Para las importaciones masivas desde ficheros CSV o Excel en el backend. Sólo modificando el ImageManager no arreglaba las importaciones masivas. Estas van “por otro lado”. Usaban en resize pero además el GD de nuevo. Para eso tenemos que hacer lo siguiente. Ahora copiamos el fichero controlador AdminImportController.php en override/controllers/admin/AdminImportController.php Lo editamos y veréis que hay dos sitios que usan la biblioteca resize. Para el resultado que queríamos el primero hay que dejarlo usando la original (con resize) y el segundo el resize2. Así: ImageManager::resize($tmpfile, $path.’.jpg’, null, null, ‘jpg’, false, $error, $tgt_width, $tgt_height, 5, $src_width, $src_height); $images_types = ImageType::getImagesTypes($entity, true); if ($regenerate) { $previous_path = null; $path_infos = array(); $path_infos[] = array($tgt_width, $tgt_height, $path.’.jpg’); foreach ($images_types as $image_type) { $tmpfile = self::get_best_path($image_type[‘width’], $image_type[‘height’], $path_infos); if (ImageManager::resize2( $tmpfile, $path.’-‘.stripslashes($image_type[‘name’]).’.jpg’, $image_type[‘width’], $image_type[‘height’], ‘jpg’, false, $error, $tgt_width, $tgt_height, 5, $src_width, $src_height Con esto nuestra imágenes han mejorado notablemente. Puedes

Trucos, Video

Cómo grabar sólo una parte de la pantalla con OBS Studio

Para grabar la pantalla del ordenador, y hacer nuestros vídeos tutoriales, usamos OBS Studio. Por defecto graba toda la pantalla. Os enseñamos a grabar sólo una parte. Cómo grabar sólo una parte de la pantalla con OBS Studio Para grabar sólo una parte de la pantalla en OBS tenemos que: pinchar en la fuente elegida ( Captura de pantalla). Pulsar la tecla ALT y, sin soltar pinchar en una de las esquinas del recuadro marcado y moverlo. Veréis que se reduce lo que grabamos de pantalla (en vez de redimensionar o mover el recuadro). Lamentablemente (hasta donde se) hay que ajustarlo “a ojo”. Es importante el orden que indicamos. Si no hará otra función como redimensionar o mover la fuente. Hay que pinchar habiendo pulsado antes ALT. También podéis pinchar con el botón derecho en la fuente y Filtros->+ ->Recortar/Acolchar. Con eso conseguís algo parecido. Aquí os lo mostramos.

Linux, Trucos

Excluir directorios en las búsquedas con find en Linux. Prune y -not -path

En ocasiones tienes que buscar ficheros en un árbol de directorios Linux, pero quieres excluir directorios de la búsqueda. ¿Cómo se hace con find? Hoy te lo contamos. Cómo excluir directorios de las búsquedas con find en Linux. Tienes varias opciones, os dejamos dos de las más usadas -prune  y -not -path de find. -prune. La opción -prune le dice a find que no descienda por ese directorio.  Vamos a ver ciertos ejemplos. Recordamos que $ find . -name prueba busca todo con nombre prueba.- $ find . -name prueba -prune   Esto dice que busque todo con nombre prueba y no descienda por los directorios con ese nombre. – $ find ./* -prune  Aquí find mostrará el contenido del directorio actual pero no descenderá por sus directorios (por prune).¿Cómo hacer que con prune se puedan omitir ciertos directorios y  muestre otros? Con la opción -o -print   . -o es un OR, con lo que podemos poner más comandos que no sigan la pauta del prune. -print muestra el contenido. Ejemplos: -$ find . -name prueba -prune -o -print Esto excluye el directorio prueba y muestra el resto. Es como si dijera “encuentra prueba, no bajes por ahí, y muestra todo lo demás”. – $ find . -name prueba -prune -print -o -print Encuentra todo lo que sea prueba, no desciendas por ahí pero muéstramelo y luego muestra el resto. Es igual que el anterior pero muestra los resultados prueba encontrados. – $ find . -type d -name Azul -prune -o -name “*.jpg” -print Esto busca todos los ficheros con extensión jpg excepto los que están en el directorio Azul. Con esto podéis crear vosotros las combinaciones que os hagan falta. -not -path. Path te permite buscar en una ruta, -not -path te excluye esa ruta. Así que find /home/user/pedro -type f -not -path “*doc/texto*” -not -path “*images/texto*” Busca todos los ficheros en el directorio pedro que no tengan las rutas indicadas. Uno de los problemas que tiene path es que va a tardar  más porque comprueba en todas las búsquedas si cumple la cadena en -not -path. Podemos optimizarlo usando una combinación de ambos comandos: find . -path ./docs/privados -prune -o -print Esto evita el directorio docs/privados y todo lo que haya debajo (prune hace que no descienda por él) y muestra todo lo demás.

Trucos, Video

Cómo añadir una pantalla de título en un vídeo con Shotcut

Cuando editas vídeo a veces quieres añadir un título antes, después y en medio del mismo. Para ello obviamente recomendamos haber visto antes cómo insertar texto con Shotcut. Pero ese vídeo era para superponer texto, hoy queremos enseñaros a añadir títulos. Cómo añadir títulos a un vídeo con Shotcut. Podemos usar un truco similar al de nuestro vídeo anterior, y crear una imagen con el fondo que queramos e insertarla. Pero me parece más elaborado, sobre todo cuando hay una manera más directa desde el propio programa. Para ello tenemos que: abrir Shotcut e insertar en la línea de tiempo el vídeo que queremos. Después colocamos el cursor en la línea de tiempo donde queremos insertar el título.. Vamos a Archivo>Abrir otro>Color Ahí elegimos el color que queremos y damos a aceptar. Conviene luego reducir el tamaño del vídeo (un fondo de ese color) que esto nos crea, aunque se puede hacer más tarde. Después, con el cursor donde queríamos divide el vídeo y dale a la tecla v. Esto inserta el vídeo en ese espacio. Añade el texto (normal o 3D). Corta lo que necesites y pon los efectos necesarios. Y ya lo tienes.  

Diseño Web, Prestashop, Trucos

Cómo insertar un vídeo en un producto o módulo de Prestashop

Nos lo ha pedido algún cliente, somos muy vagos y creamos un vídeo para no explicarlo cada vez. Cómo insertar un vídeo en un producto de Prestashop. Sirve lo mismo para un módulo de las barras laterales o del contenido. Sólo tienen que tener editores html El vídeo se puede insertar en el resumen como en la descripción. Tienes dos métodos. Insertar la URL. Casi todos los editores tienen un botón para insertar vídeo. Sólo tienes que copiar la URL (dirección del navegador) de tu vídeo y pegarlo en la ventana que salga al pinchar en ese botón. En Prestashop además te deja cambiar el tamaño y la imagen que presenta el vídeo (si no pones una usa la de Youtube o Vimeo). El mayor problema es que, una vez hecho, si quieres modificar, tienes que editar código o borrar el vídeo y volver a ponerlo. Y que el resultado no suele ser responsive (cuidado con el tamaño que pongas). Incrustar vídeo (embed). El segundo método es más laborioso pero lo usamos cuando no funciona el anterior (sólo es compatible con ciertos servicios de vídeo) o cuando queremos personalizar más lo que insertamos (por ejemplo hacer Youtube responsive). Para ello vamos a pinchar en el botón de Compartir en Youtube (no todos los vídeos lo tienen, tiene que aprobarlo el creador) y elegir la opción Insertar. Ahí veras un código que tienes que copiar  y pegar en Prestashop>Insertar /Editar Video>Incrustar. En ese iframe podemos personalizar width y height y poner CSS y otros cambios.

Trucos, Video

Cómo girar vídeos de vertical a horizontal, con Shotcut

A quién no le ha pasado, o por error o por desconocimiento: nos equivocamos y el vídeo que creíamos se estaba grabando en horizontal sale torcido. “Hay un infierno reservado para la gente que graba los vídeos en vertical”. Y no podemos subirlo a ningún sitio ni verlo sin generar tortícolis. Ahora tenemos que girarlo, ¿cómo lo hacemos? Hoy os enseñamos a hacerlo. Cómo girar vídeos de vertical a horizontal con Shotcut. Para girar el vídeo vamos a usar Shotcut, un editor de vídeo gratuito muy potente y que nosotros usamos mucho. Así que lo primero que tenéis que hacer es bajaros el programa e instalarlo. Una vez abierto el programa, no importéis el vídeo directamente. Shotcut pone las dimensiones de trabajo del primero elemento importado. Así que si subimos el vídeo quedará con la anchura del vídeo vertical. Vamos a “engañarlo” subiendo una imagen con las dimensiones del FullHD. Así que busca en Google una imagen de las dimensiones que quieras. En este momento 1980×1080 está muy bien. Descargar una imagen (la que sea) así, súbela al programa y ponla en la línea de tiempo. Ya tienes el espacio de trabajo con 1980×1080. Ahora puedes importar el vídeo y ponerlo en la línea de tiempo. Borrar la imagen y quédate con el vídeo. Selecciónalo en la línea de tiempo. Ahora ve a Filtros>Rotar. Rota el vídeo (normalmente 270º). Ya lo tienes rotado pero no ocupa el espacio de trabajo. Sube la escala para que ocupe todo el espacio, normalmente un 200%. Ya lo tienes, edita lo que necesites y ahora exporta el vídeo. Sencillo y con resultados excelentes. PD: añado una muy buena aclaración que nos han puesto en el vídeo de Youtube: En realidad no tienes que hacer todo eso de descargar una imagen en línea e introducirla en Shotcut para conseguir la relación de aspecto que quieres. Lo que simplemente tienes que hacer es antes de agregar el video a Shotcut, ve a “Modo de Vídeo” en el menú “Preferencias”. De ahí elige el perfil que coincide con lo que quieres hacer con tu proyecto. Si por causalidad no encuentras el perfil que quieres ve en ese mismo menú a “Personalizado” para crear uno. El estándar en Shotcut en Modo de Vídeo es “Automático” que significa que el proyecto tomara el perfil de video completo del primer video que introduces. Eso lo puedes ver reflejado en el menú Exportar bajo la pestaña Vídeo.

Diseño Web, Prestashop, Trucos

Campos obligatorios en el registro de Prestashop: DNI, teléfono, código postal

Esto debería ser fácil, deberías poder entrar en la configuración de Prestashop y marcarlo. Pero no… Estar está ahí, pero parece que lo han escondido a conciencia. Os decimos cómo seleccionar los campos que queréis que sean obligatorios en el registro de Prestashop. Campos obligatorios en el registro de Prestashop DNI, teléfono código postal. Método 1. Para seleccionar que campos, dentro de los que deja Prestashop, son obligatorios en el registro de Prestashop tienes que ir al backend a Clientes > Direcciones. Ahí aparece todas las listas de direcciones de clientes registrados y, al final (casi para pasar desapercibido, tienes un campo recogido con un +, llamado Establecer los campos requeridos para esta sección. Pincha en el más y verás una serie de campos que puedes seleccionar. Siempre es mejor hacerlo de esta manera porque no retocas ni el sistema ni la plantilla. Nota: esto debería funcionar en teoría. A nosotros en la 1.7.42 se nos marca la casilla (teléfono) pero al refrescar se desmarca. No hay manera. Usamos el modo 2. Método 2. Si esto no te vale, o necesitas algún otro campo puedes hacerlo de esta manera. Primero tienes que ver si es un campo de cliente o de dirección. Por ejemplo teléfono es de dirección. Los campos de dirección están en Address.php y el de cliente en Customer.php, ambos en el directorio clases. Te ponemos el ejemplo con el de cliente (es lo mismo en Address). Copia el fichero classes/Customer.php en la carpeta override/classes/Customer.php Edita el fichero. Donde pone /**     * @see ObjectModel::$definition     */    public static $definition = array(        ‘table’ => ‘customer’,        ‘primary’ => ‘id_customer’, Vienen todos los campos. Sólo tienes que poner ‘required’ => true al final del campo que quieras que sea obligatorio. Por ejemplo si quieres la empresa obligatorio cambias: ‘company’ =>array(‘type’ => self::TYPE_STRING, ‘validate’ =>’isGenericName’), por ‘company’ =>array(‘type’ => self::TYPE_STRING, ‘validate’ => ‘isGenericName’,’required’ => true), Algún campo puede requerir más modificaciones porque impliquen algún otro campo más (por ejemplo el cumpleaños incluye año, mes y día). Una vez hecho este cambio, da un error 500 si intentas dejar vacío el campo. En Address.php hay que modificar el fichero AddressFormat.php (copialo antes a override/classes) y meter el valor en el array required. Por ejemplo aquí meto al final el phone: /** @var array Default required form fields list */ public static $requireFormFieldsList = array( ‘firstname’, ‘lastname’, ‘address1’, ‘city’, ‘Country:name’, ‘phone’, ); En Customer.php hay que buscar la clase que valida y hacer lo mismo.

Gestores de contenidos, Prestashop, Trucos

Prestashop: backend va lento o no puedes acceder. Solución

Estos días muchos de nuestros clientes con Prestashop han tenido el mismo problema. O lentitud (enorme) en el backend, o directamente no podían entrar en él (rueda girando indefinidamente tras pinchar en acceder). Obviamente todos pensamos en los hosting y hemos perdido mucho tiempo intentando depurar el problema. Pero la causa era otra. Parece ser que Prestashop usa servidores externos cuando ciertos módulos o addons están activos. Estos módulos estaban colapsados y esto provocaba la lentitud o la imposibilidad de acceso. Os decimos cómo solucionarlo. Solución a backend lento o a no poder acceder por los problemas de addons externos. La solución varía dependiendo de la versión de Prestashop. En Pretashop 1.6: hay que desactivar el módulo gamification. Pero no vale hacerlo desde el backend (y si no puedes acceder peor jejeje). Hay que cambiar el nombre de la carpeta  /modules/gamification  Con esto verás como ya puedes acceder a tu backend y va muy rápido. En Prestashop 1.7:  no hay módulo, hay que modificar unos ficheros. Podéis ver la solución propuesta por Prestashop aquí pero consiste en: – Editar el fichero classes/Tools.php y cambiar la línea : protected static $is_addons_up = true;  a protected static $is_addons_up = false; – Editar el fichero src/Adapter/Addons/AddonsDataProvider.php  y cambiar la línea: protected static $is_addons_up = true; a protected static $is_addons_up = false; Con esto debería estar arreglado. Nota: hay quien recomienda borrar el fichero config/xml/default_country_modules_list.xml. Si no te funciona prueba con eso, aunque nosotros no lo hemos necesitado.

Diseño Web, Gestores de contenidos, Trucos

Woocommerce: cómo editar varios productos a la vez. Asignar la misma categoría a muchos productos.

En ocasiones queremos hacer cambios a muchos productos en Woocommerce. Por ejemplo para cambiarles de categoría. ¿Es necesario hacerlo de uno en uno? La respuesta es no. Hoy os enseñamos a editar productos en grupo en Woocommerce. Cómo editar varios productos a la vez en Woocommerce. Podemos editar varios productos a la vez en Woocommerce. Para ello tenemos que irnos a Productos en el backend, y marcar los que queremos editar. Después tenemos que ir al desplegable que pone Acciones en lote y elegir Editar. Se os abrirá una nueva ventana con un pequeño editar y todos los posts marcados. Ahí podréis hacer cosas como cambiar de categoría, cambiar el precio y alguna cosa más. No se puede hacer todo, es una edición limitada, pero si alguna cosa muy útil. Nosotros lo hemos necesitado cuando teníamos que “mover” productos a otras categorías. Aquí os mostramos cómo:  

Scroll al inicio