Categorías
hoy aprendí ...

… a recuperar mis escritorios en W10 y darle una patada al Task View

Resulta que a pesar de tener que trabajar en Windows 10 había logrado organizar el tema de los múltiples escritorios para ayudarme a focalizar el trabajo según el tema con la ayuda de Windows 10 Virtual Desktop Enhancer, una aplicación que le agregaba mejoras a los paupérrimos escritorios virtuales (virtual desktops) que traía el sistema operativo ¡en pleno 2019! Nada de fondos personalizados o la posibilidad de darles nombres. Había que recurrir a soluciones de terceros.

El W10VDH ya no tenía soporte ni desarrollo desde fines del 2018 pero funcionaba muy bien hasta hace poco, cuando hubo una actualización de Windows que de repente había habilitado el Task View, Historial, Cortana, y otras «mejoras» más. Pasó que de repente cuando cambiaba de escritorio no me cambiaba el fondo, ni me mostraba el nombre, y al hacer WIN+TAB para tener la vista general de las ventana, me habían cambiado todo de lugar, y aparecía lo de la actividad reciente con el Historial. WTF!

La solución que encontré para poder trabajar como venía haciendo fue:

  1. Encontrar un fork más actualizado del Windows 10 Virtual Desktop Enhacer: https://github.com/vlwkaos/win10-virtual-desktop-enhancer
  2. Descargar el repositorio y ubicar los nuevos scripts en la carpeta donde tenía corriendo el ejecutable original del Windows 10 Virtual Desktop Enhacer.
  3. Desactivar la tecla TaskView de la barra, Cortana, y el Historial.
Categorías
hoy aprendí ...

… a bajar videos de IG

Tengo algunos videos guardados de artistas marciales en una colección de Instagram que quería usar como referencia para un proyecto de historieta que estoy realizando. Ante la dificulta de poner pausa y avanzar/retrocedes cuadro a cuadro en las partes que me interesaba analizar me puse a investigar la forma de bajar los videos.

Me encuentro que existen servicios web que se encargan de hacerlo pero la verdad es que prefiero no usarlos y además tienen la restricción de que el video tiene que ser de un posteo público.

En otros sitios más tech (dev.to, stackoverflow)comentan que se puede por medio de inspeccionar el código fuente y buscar la URL del MP4. El problema era que esas recomendaciones eran de hace unos años y hoy (2021) no funcionan de manera tan directa, ya que las URL del elemento <video> apunta a un CDN con un una URL blob y chorizo de parámetros. Incluso hay uno que opta por utilizar el VLC para descargar el streaming del video.

La pista que daban los sitios tech era ir a INSTAGRAM al posteo del video por navegador web y ver en el panel de DEV del navegador (F12) la solapa RED (NETWORK) los peticiones y respuestas del servidor filtrando por la extensión mp4.

Al momento de recargar la página para ver las peticiones empiezan a aparecer muchas peticiones mp4, correspondientes a las diferentes resoluciones disponibles de video (aunque sólo se carga una) y también las correspondientes al audio por separado (si es que hubiera, como en la mayoría de los videos).

Hice la prueba de copiar la URL de uno de los MP4 y pegarla para que el navegador empezara a cargar algo pero inmediatamente aparecía un error «No se encontró el video con formato y tipo MIME soportados». ¡Qué desilusión! Pero testarudo de mi me puse a tratar de entender los parámetros de la URL:

(la siguiente URL la he editado con XXXXX para preservar la privacidad del video)

instagram.feze12-1.fna.fbcdn.net/v/t50.2886-16/XXXXXXXXX_XXXXXXXXXXXXXXX_XXXXXXXXXXXXXXXXXXX_n.mp4?_nc_ht=instagram.feze12-1.fna.fbcdn.net&_nc_cat=111&_nc_ohc=lhApsAN-thMAX91AbD7&edm=AABBvjUBAAAA&ccb=7-4&oh=af57857dbcb53d99d00d05bcc6dac772&oe=60C76940&_nc_sid=83d603&bytestart=1562297&byteend=1602089

Me puse a probar eliminar algunos y empecé por el final, ya que eran los únicos que tenían algún significado concreto: byteStart y byteEnd, y ¡oh sorpresa!… ¡Funcionó!

EL ASUNTO pasa por copiar alguna de esas URL en una nueva pestaña y borrar los 2 últimos parámetros: &bytestart=XXXXXX&byteend=XXXXXXX

Las XXXXX son unos números de timing que pueden ser cualquier cosa y no afectan.

El navegador empieza entonces la carga del video (o audio) y entonces uno puede hacer «Archivo > Guardar» y descargar el video completo.

OTRO ASUNTO: no hay ninguna pista (o por lo menos no la descubrí) de cual URL en el panel de RED corresponde a qué resolución de video, o si corresponde al audio, así que toca probar.

Recomendaciones:

  • tener el panel de desarrollador abierto en la solapa RED.
  • tener sólo cargado el posteo del video (ir al link específico)
  • detener el video inmediatamente de la carga, porque con cada loop, el panel de RED empieza a llenar nuevas URL de peticiones.

Y chau!

Nota mental: esto da para hacer un user script de navegador con un botón.


Actualización 21:01

Era lógico que alguien ya lo había hecho a ese user script: https://greasyfork.org/es/scripts/406535-instagram-download-button

Gracias!

Categorías
hoy aprendí ...

… a agregar un botón de compartir

Amiguito SHARE para meter como link y que en dispositivo lance las opciones de compartir.

if(navigator.share !== undefined) {
    document.addEventListener('DOMContentLoaded', e => {
      var shareBtn = document.querySelector('div.share a');
      shareBtn.addEventListener('click', clickEvent => {
        clickEvent.preventDefault();
        navigator.share({title: document.title, text: window.location.href, url: window.location.href})
          .then(() => console.log('Successful share'),
           error => console.log('Error sharing:', error));
      });
    });
}

Esta joyita la encontré en https://paul.kinlan.me/navigator.share. ¡Gracias!

Le hice una modificación para tratar de incorporarlo en el plugin Storefront Product Share combinando algo de PHP y agregando:

		<div class="storefront-product-sharing">
			<ul>
				<li class="twitter"><a href="<?php echo esc_url( $twitter_url ); ?>" target="_blank" rel="noopener noreferrer"><?php _e( 'Share on Twitter', 'storefront-product-sharing' ); ?></a></li>
				<li class="facebook"><a href="<?php echo esc_url( $facebook_url ); ?>" target="_blank" rel="noopener noreferrer"><?php _e( 'Share on Facebook', 'storefront-product-sharing' ); ?></a></li>
				<li class="pinterest"><a href="<?php echo esc_url( $pinterest_url ); ?>" target="_blank" rel="noopener noreferrer"><?php _e( 'Pin this product', 'storefront-product-sharing' ); ?></a></li>
				<li class="email"><a href="<?php echo esc_url( $email_url ); ?>"><?php _e( 'Share via Email', 'storefront-product-sharing' ); ?></a></li>
        <li class="share-redes"><a href="#"><i class="fas fa-share-alt-square"></i> Compartir</a></li>
			</ul>
		</div>
    <script>
      if(navigator.share !== undefined) {
        document.addEventListener('DOMContentLoaded', e => {
          var shareBtn = document.querySelector('.share-redes a');
          shareBtn.addEventListener('click', clickEvent => {
            clickEvent.preventDefault();
            navigator.share({
              title: '<?php echo $product_title; ?>', 
              text: '<?php echo $product_url; ?>', 
              url: '<?php echo $product_url; ?>'
            })
            .then(() => console.log('Successful share'),
            error => console.log('Error sharing:', error));
          });
        });
      } else {
        console.log('Share API no soportado');
        var shareBtn  = document.querySelector('.share-redes');
        shareBtn.textContent = '';
      }
    </script>

Categorías
hoy aprendí ...

… a complicar las cosas en una hoja de cálculo

Necesitaba indicar una celta de manera «dinámica», es decir, formando el nombre dependiendo de la combinación del contenido de otras celdas.

Lo que tenía es una serie de datos encolumnados y totales parciales cada cierta cantidad regular de celdas. Me interesaba tener luego un resumen de esos totales parciales para confeccionar una tabla.

Por ejemplo: en la la página datos tiene la columna A y cada 20 filas hay un total parcial, entonces en la tabla de resumen (que está en otra hoja llamada resumen) la celda en fila 1 tiene que tomar los datos de $datos.A20, la fila 2 tiene que tomar los datos de $datos.A40, y así.

La solución que encontré es utilizar la función ADDRESS que permite indicar el nombre usando datos. Buscando ejemplos prácticos encontré https://forum.openoffice.org/es/forum/viewtopic.php?f=21&t=8091

Encontré esto otro que podría resultar interesante también aunque no lo puse en práctica: https://help.libreoffice.org/6.1/es/text/scalc/guide/value_with_name.html

Otra cosa interesante es: https://blog.open-office.es/calc/lista-desplegable-condicionada-en-openoffice-libreoffice-calc

Me falta completar con la solución que usé

Categorías
hoy aprendí ...

… a redimensionar varias imágenes con un script bash

Y tenía que procesar varias imágenes escaneadas para bajarles el tamaño de las dimensiones y archivo.

Con ImageMagick en Linux esto se logra con un script bash que recorra los archivos en una carpeta. Me topé con esta solución que me pareció bastante sencilla, hay que hacer algunas cosas previas de manera ‘manual’ pero funciona.

El script trabaja y busca las imágenes sobre una carpeta que se indica dentro del script, con lo que hay que personalizarlo. Tener la precaución de que las imágenes sean copias, porque las reemplaza.

#!/usr/bin/env bash
# Purpose: batch image resizer
# Source: https://guides.wp-bullet.com
# Author: Mike

# absolute path to image folder
FOLDER="/var/www/wp-bullet.com/wp-content/uploads"

# max width
WIDTH=540

# max height
HEIGHT=300

#resize png or jpg to either height or width, keeps proportions using imagemagick
#find ${FOLDER} -iname '*.jpg' -o -iname '*.png' -exec convert \{} -verbose -resize $WIDTHx$HEIGHT\> \{} \;

#resize png to either height or width, keeps proportions using imagemagick
#find ${FOLDER} -iname '*.png' -exec convert \{} -verbose -resize $WIDTHx$HEIGHT\> \{} \;

#resize jpg only to either height or width, keeps proportions using imagemagick
find ${FOLDER} -iname '*.jpg' -exec convert \{} -verbose -resize $WIDTHx$HEIGHT\> \{} \;

# alternative
#mogrify -path ${FOLDER} -resize ${WIDTH}x${HEIGHT}% *.png -verbose

Gracias:

https://guides.wp-bullet.com/batch-resize-images-using-linux-command-line-and-imagemagick/

Y chau.