Cómo descargar fácilmente videos de youtube


Aunque estamos en la era de la hiperconectividad   de  modo que  servicios como youtube normalmente están siempre activos puede  haber circunstancias que nos hagan necesaria la descarga  para ver dicho contenido offline porque precisamente no siempre se dispone de esa conectividad.

Para estos casos , pues se hace necesario la descarga del video  desde la plataforma de video ( por ejemplo youtube )   hacia un fichero para disponer  de este de forma desconectada  o con mala conectividad  y poder reproducirlo sin problemas.

Existen  muchas  formas de poder descargar un video de youtube sobre todo  usando programas específicos  o  incluso con complementos (addsons) para la mayoría de los navegadores.

Hoy vamos  a ver un servicio   web cuyo uso es bastante intuitivo

Vamos  a tomar el  video de demostración del uso de la aplicación  Segurisca  como ejemplo  . La url directa del video es   “https://www.youtube.com/watch?v=orr7hFKGTcA”

Ahora   bien invocamos al servicio  en “https://es.savefrom.net/”   o  creamos una nueva url   eliminando  la cabecera  https://www.”     y sustituyendo simplemente  la cadena anterior por “ss”   , es decir   la url   anteior      quedaria  en:

ssyoutube.com/watch?v=orr7hFKGTcA” ( es decir sin el https)

Esta url la copiaremos  en la barra del navegador  y  nos abrirá ya automáticamente el servicio savefrom  con precisamente la url del video a descargar

pantalla1.PNG

Obviamente la idea del servicio es que compramos la aplicación  pero nos hacen una demo de como funciona precisamente   usando este servicio web

Para  poder hacer uso del servicio simplemente  pulsaremos en  el signo “v” a la izquierda de la barra de direcciones:pantalla2.PNG

Ahora  nuevamente nos ofrece la   aplicación aconsejando su descarga  aludiendo a  problemas con velocidades de descarga más lentas y limitaciones en los formatos de archivo ,pero si queremos usar el servicio web,  nos vamos un poco más abajo  y veremos el botón de descarga   seleccionado por defecto en  formato MP4  con resolución  360 mfs

pantalla3

Si tiene instalado vlc   y accesible desde navegador  se verá  en una ventana nueva  ,reproduciendo directamente con el vlc dentro del navegador:

pantalla4.PNG

Para tener el fichero en nuestro ordenador , ya basta pulsar el botón derecho sobre el video y elegir “Guardar video como

pantalla5.png

 

En el caso de que no tenga  el VLC instalador  directamente empezara a descargarse en la carpeta por defecto que tenga configurado el navegador desde donde hace la petición

En el caso de Chrome  en la página de Opciones, hacemos clic en “Avanzadas” y en el panel de la derecha descendemos hasta “Descargas“. Allí aparece la carpeta donde Google Chrome guarda las descargas por defecto. Para cambiarla hacemos clic en el botón “Cambiar” y seleccionamos la nueva carpeta de destino.

Enviar correos desde Linux: el método definitivo

Veremos la forma mas facil de enviar correos desde consola o shell scripting en Linux


Mutt es un cliente de correo electrónico basado en línea de comandos. Es una herramienta muy útil y poderosa para enviar y leer correos electrónicos desde la línea de comandos en sistemas basados en Unix.

Mutt también admite protocolos POP e IMAP para recibir correos. Se abre con una interfaz coloreada para enviar correos electrónicos que hacen que sea fácil de usar para enviar correos electrónicos desde la línea de comandos.

Algunas  características importantes de Mutt son las siguientes:

  • Es muy fácil de instalar y configurar.
  • Nos permite enviar correos electrónicos con archivos adjuntos desde la línea de comandos.
  • También tiene las características para agregar BCC (copia ciega ) y CC (copia ) al enviar correos.
  • Permite el enhebrado de mensajes.
  • Nos proporciona la facilidad de listas de correo.
  • También es compatible con muchos formatos de buzón de correo como maildir, mbox, MH y MMDF.
  • Admite al menos 20 idiomas.
  • También es compatible con DSN (notificación de estado de entrega).

Por si alguna vez ha necesitado enviar correos completos con anexos desde una maquina Unix con Shell scripting siempre que esté configurado el servidor de correo , por ejemplo para enviar estos desde un script, de este modo funciona perfectamente:

#envió de correo ok
cat $BODY | mutt -s “$asunto” -a $Fichero $destinos

Donde las variables significan lo siguiente:

  • $BODY : es un fichero cuyo texto contiene el texto del cuerpo .Atención: con el comando cat sí se respetan los retornos de carro del fichero original pues con el comando echo los elimina concatenando todas las líneas quitando los saltos de línea
  • “$asunto” : es el asunto que hay que poner las comillas para que nos interprete los espacios como otros parámetros pues de no hacerlo corta el texto que queremos poner en el asunto interpretando las palabras tras el segundo espacio como destinatarios de correo
  • $ Fichero : es la ruta directa del fichero a adjuntar
  • $destinos: todos los destinatarios de correos separados por espacios

 

Entramos en  modo interactivo   cuando solo  especificamos el destinatario:

mutt -s "Test correo" [email protected]

Cuando ingresa el comando anterior en el terminal, se abre con una interfaz y confirma la dirección del destinatario y el asunto del correo y abre la interfaz. En este momento  puede realizar cambios en la dirección de correo del destinatario:

  • Cambiar la dirección de correo electrónico del destinatario presionando t.
  • Cambiar la dirección de Cc con c.
  • Adjunte archivos como archivos adjuntos con a.
  • Salir de la interfaz con q.
  • Enviar ese correo electrónico presionando y.

Podemos agregar Cc y Bcc con el comando mutt a nuestro correo electrónico con la opciones  “-c” y “-b”. Asimismo podemos enviar correos electrónicos desde la línea de comandos con archivos adjuntos utilizando la opción “-a” con el comando mutt.


Si queremos cambiar el nombre y el correo electrónico de los remitentes, entonces necesitamos crear un archivo en el directorio de inicio de ese usuario en particular.

# cat .muttrc

Agregue las siguientes líneas a él. Guárdelo y cierrelo.

set from = “[email protected]” set realname = “Realname of the user”

AYUDA

Para imprimir el menú de ayuda de “mutt”, necesitamos especificar la opción “-h” con él , es decir

# mutt -h

Y esta es la salida:

Mutt 1.4.2.2i (2006-07-14)
usage: mutt [ -nRyzZ ] [ -e ] [ -F ] [ -m ] [ -f ]
mutt [ -nx ] [ -e <cmd> ] [ -a <file> ] [ -F <file> ] [ -H <file> ] [ -i <file> ] [ -s <subj> ] [ -b <addr> ] [ -c <addr> ] <addr> [ … ]
mutt [ -n ] [ -e <cmd> ] [ -F <file> ] -p
mutt -v[v]

options:
-a <file> attach a file to the message
-b <address> specify a blind carbon-copy (BCC) address
-c <address> specify a carbon-copy (CC) address
-e <command> specify a command to be executed after initialization
-f <file> specify which mailbox to read
-F <file> specify an alternate muttrc file
-H <file> specify a draft file to read header from
-i <file> specify a file which Mutt should include in the reply
-m <type> specify a default mailbox type
-n causes Mutt not to read the system Muttrc
-p recall a postponed message
-R open mailbox in read-only mode
-s <subj> specify a subject (must be in quotes if it has spaces)
-v show version and compile-time definitions
-x simulate the mailx send mode
-y select a mailbox specified in your `mailboxes’ list
-z exit immediately if there are no messages in the mailbox
-Z open the first folder with new message, exit immediately if none
-h this help message
$

Display inteligente para Netduino

TextDisplayMenu es una biblioteca menú de plug-and-play increíblemente potente, pero muy fácil de usar, jerárquica, editable, que le permite añadir fácilmente una interfaz gráfica LCD alimentado a su proyecto de hardware. Puede ser conducido con un codificador rotatorio (piensen en: control de volumen en el estéreo), o tres botones, con muy poco código


La biblioteca TextDisplayMenu  es un marco extensible para rápidamente crear menús jerárquicos, editables que pueden mostrar en un display lcd de caracteres de verias lineas (típicamente compatible con hd44780)    controlándose mediante un IRotaryEncoder o una intrface  IButton . Los drivers para pantallas LCD Serie comparten una interfaz común que lo hacen fácil de conectar e integrar con el  TextDisplayMenu

Por tanto gracias a esta biblioteca podemos movernos en menús mostrados en displays lcd de varias lineas con un solo botón giratorio de un modo muy potente  y eficiente.

En este vídeo podemos ver un ejemplo de funcionamiento:

El menú se puede crear mediante programación o cargadolos desde un fichero en formato JSON y tiene un número de tipos de elementos de menú integrado de pantalla y edición entrada como tiempo, temperatura y otros.

Además se pueden crear fácilmente menús personalizados contipos de elementos que permiten a los usuarios editar su valor a través de las entradas

Utilización

Para utilizar el menú, necesitará un LCD compatible con ITextDisplay u otro display, así como alguna combinación de botones y codificador rotatorio que permita la funcionalidad de avanzar a siguiente, anterior y seleccionar . Por ejemplo, puedes usar; tres entradas IButton discretas para la siguiente / previa / selección, un codificador rotatorio para siguiente / anterior y un IButton para selección, o un RotaryEncoderWithPushButton para manejar las tres entradas.
El esquema siguiente muestra una configuración típica de integral para manejar el menú e incluye una pantalla de cuatro líneas LCD común controlado directamente por pernos GPIO digitales de Netduino, así como un encoder rotativo con pulsador:

Como se puede apreciar se usa un display copatible con hd44780  usando interfaz de 4 bits  con dos señales de control  y luego aparte el encoder que usa tres señales de control

El display  ademas de alimentación de 5v DC , tomada directamente de la placa ,usa pues   6 conexiones binarias de Netduino :d8,d9,d10,d11,d12 y d24 , forzando algunas lineas del diplay a  vcc o gnd y el encoder las tres anteriores :d7,d5 y d5;

Resumiendo estas son las conexiones del display lcd:

  1. VSS – Ground
  2. VCC – (+5V)
  3. VE – Contrast adjustment –>a gnd
  4. RS – Register Select–>pind13
  5. RW – Read/Write– >a gnd
  6. EN – Clock (Enable)–>pind12
  7. D0 – Data Bit 0–>pin d11
  8. D1 – Data Bit 1–>pin d10
  9. D2 – Data Bit 2–>pin d9
  10. D3 – Data Bit 3–>pin d8
  11. D4 – Data Bit 4
  12. D5 – Data Bit 5
  13. D6 – Data Bit 6
  14. D7 – Data Bit 7
  15. BLA – Backlight Anode (+)–>gnd
  16. BLK – Backlight Cathode (-)–>a 5v (ojo algunos dislplay necesitan una resistencia  limitadora no alimentándose directamente a 5v dc)

La caja para contener el encoder  y el display  los del Wilderness Labs han  diseñado específicamente en 3D  conun acabado fantastico:

Código de ejemplo

El código siguiente ilustra cómo crear una nueva, por eso carga su contenido de JSON:TextDisplayMenuRotaryEncoderWithButton

using System;
using System.Collections;
using System.Threading;
using Microsoft.SPOT;
using H = Microsoft.SPOT.Hardware;
using N = SecretLabs.NETMF.Hardware.Netduino;
using Netduino.Foundation.Sensors.Rotary;
using Netduino.Foundation.Displays;
using System.IO;
using TextDisplayMenu_Sample.Properties;
using Netduino.Foundation.Displays.TextDisplayMenu;

namespace TextDisplayMenu_Sample
{
    public class Program
    {
        public static void Main()
        {
            RotaryEncoderWithButton encoder = new RotaryEncoderWithButton(
                N.Pins.GPIO_PIN_D2, N.Pins.GPIO_PIN_D3, N.Pins.GPIO_PIN_D4,
                Netduino.Foundation.CircuitTerminationType.CommonGround);
                
            ITextDisplay display = new SerialLCD(new TextDisplayConfig() { 
                Height = 4, 
                Width = 20 }) as ITextDisplay;

            display.SetBrightness();

            Menu menu = new Menu(_display, _encoder, Resources.GetBytes(Resources.BinaryResources.menu), true);
            menu.Enable();

            Thread.Sleep(Timeout.Infinite);
        }
    }
}

El código  completo se puede encontrar aquí.

Para crear un menú con otras entradas, como botones o un codificador giratorio opcional, puede usar los otros constructores:

// Rotary encoder and select button
public Menu(ITextDisplay display, IRotaryEncoder encoder, IButton buttonSelect, byte[] menuResource, bool showBackOnRoot = false)

// Buttons for next, previous, and select
public Menu(ITextDisplay display, IButton buttonNext, IButton buttonPrevious, IButton buttonSelect, byte[] menuResource, bool showBackOnRoot = false)

Carga un menú desde JSON

Para crear el menú de JSON, en primer lugar definir el contenido del menú en un archivo JSON y luego agregarlo como un recurso.
Definición de muestra
El nodo raíz debe ser una matriz de elementos de menú. La tabla siguiente enumera las propiedades y uso asociado:

Property Usage
text Mostrar texto en el renderizado. Incluye {value} para mostrar el valor actual del tipo
command Nombre del comando para distinguir los eventos de selección de menú. Si se establece el comando, tiene prioridad sobre el elemento de menú editable.
id Identificador único para el tipo. Necesario para un elemento de menú editable..
type Tipo de entrada, por ejemplo: Edad, Tiempo. Necesario para un elemento de menú editable.
sub Array de items de sumenus .

Por ejemplo, el siguiente código json define un menú jerárquico dispuesto en los artículos y páginas de menú.

{
  "menu": [
    {
      "text": "My Age: {value}",
      "id": "age",
      "type": "Age",
      "value": 12
    },
    {
      "text": "My Command",
      "command": "DoSomething"
    },
    {
      "text": "Parent",
      "sub": [
        {
          "text": "Sub Item A"
        },
        {
          "text": "Sub Item B"
        },
        {
          "text": "Sub Item C",
          "sub": [
            {
              "text": "Sub Item D"
            },
            {
              "text": "Sub Item E"
            },
            {
              "text": "Sub Item F"
            }
          ]
        }
      ]
    }
  ]
}

Agregar el menú JSON como un recurso

Para agregar el archivo JSON al proyecto como un recurso:

  1. Haga clic derecho en el proyecto y seleccione Propiedades
  2. Haga clic en el panel izquierdo Recursos
  3. Haga clic y elija el archivo apropiado. Agregar recurso

Ahora, se puede acceder a este recurso por Resources.GetBytes(Resources.BinaryResources.[ResourceName]).

Soporte de eventos

El menú genera eventos cuando se selecciona un comando, se edita el elemento del menú y se sale del menú.

En cuanto a la selección de eventos ,para recibir una notificación cuando se selecciona un elemento de menú con un comando asignado, asigne un controlador al evento Seleccionado:

menu.Selected += (s, e) =>
{
    Debug.Print("menu selected: " + e.Command);
};

Respecto a la salida de eventos si el menú no es la pantalla de inicio de la aplicación deseada, entonces el menú puede ser cargado o descargado programáticamente usando Enable () o Disable (), respectivamente. Además, hay un parámetro opcional al crear un nuevo menú, showBackOnRoot, y cuando se establece en verdadero, ”

menu.Exited += (s, e) =>
{
    Debug.Print("menu exited");
    menu.Disable();
};

Para editar eventos para obtener una notificación cuando cambia un valor de elemento de menú Editar, asignar a un controlador al evento:ValueChanged

menu.ValueChanged += (s, e) =>
{
    Debug.Print(e.ItemID + " changed with value: " + e.Value);
}

Construcción de  tipos

La siguiente tabla enumera los tipos de elementos de menú integrados y sus usos y valores asociados:

Type Description
Boolean Un tipo de lista como true y false.
Age Un integer entre 0 y 100.
Temperature Un valor entre -10 y 100 con una escala de 2.
Time 24 hora militar con HH:MM
TimeDetailed 24 hora militar con HH:MM:SS
TimeShort 24 hora militar con MM:SS

Creación de tipos de elementos de menú personalizado

Hay dos formas de crear elementos de menú personalizado. El más fácil y más común es heredar de y modificar, los tipos de base integrados. Sin embargo, también puede crear menús totalmente personalizada tipos de elementos.
Personalización de tipos Base incorporados
TextDisplayMenu incluye una serie de tipos base integrados que manejan tipos comunes y puede ser modificado para requisitos particulares para adaptarse:

Base Type Description
NumericBase Proporciona una pantalla y entrada numérica genérica. El mínimo / máximo y el número de decimales se pueden modificar.
TimeBase Proporciona una máscara de entrada de XX: XX: XX o XX: XX según el modo.
ListBase Proporciona una lista seleccionable de elementos.

Ejemplo de NumericBase personalizado

El siguiente código se extrae del tipo de menú Edad, e ilustra cómo heredar de NumericBase y especificar el piso, el techo y la escala de la entrada deseada.

using System;
using Microsoft.SPOT;

namespace Netduino.Foundation.Displays.TextDisplayMenu.InputTypes
{
    public class Age : NumericBase
    {
        public Age(): base(0, 100, 0) { }
    }
}

En resumen como vemos el equipo de Wilderness Labs a través de la fundación de Netduino ha hecho un trabajo fantástico que espero podemos usar en nuestros futuros proyectos

Mas información en http://netduino.foundation/Library/Displays/TextDisplayMenu/