Con esta sencilla línea, se puede extraer los frames de un vídeo:

#!/bin/bash
#extrae.sh
ffmpeg -i $1 -y -ss 5 -an -sameq -f image2 -r $2 filename%03d.jpg

Donde $1 es el fichero, y $2 los frames por segundo.

Se llamaria:

$> ./extrae.sh video.avi 18 # para extraer 18 frames por segundo

La salida sería 18 imágenes por cada segundo que ocupe el vídeo :), es decir para un vídeo de 10 segundos tendríamos 180 imágenes.

Fuente:

http://ubuntuforums.org/showthread.php?t=1141293

Espero que os sirva.
Un saludo

Convertir de ogv a mp4 usando ffmpeg

Publicado: 22 octubre, 2014 en comandos
Etiquetas:, , ,

Un pequeño apunte para convertir del formato de video ogv a mp4:

ffmpeg -i out.ogv outfile.mp4

Espero que os sirva.

Un saludo.

CakePHP (I) un pequeño vistazo

Publicado: 30 septiembre, 2014 en cakePHP
Etiquetas:

Hola, en estos post quiero hablar de CakePHP, un framework al que le tengo mucho cariño y me ha dado buenos y malos momentos como todo :).  Cake esta basado en la misma filosofía que Ruby&Rails y se distribuye bajo la licencia MIT License.

Los patrones de diseño que utiliza:

Site oficial desde donde lo podemos descargar:

Ventajas que nos ofrece el framework:

  • Compatible con PHP4 y PHP5
  • CRUD de la base de datos integrado
  • URLs amigables
  • Sistema de plantillas rápido y flexible
  • Ayudas para AJAX, Javascript, HTML, forms y más
  • Trabaja en cualquier subdirectorio del sitio
  • Validación integrada
  • Scaffolding de las aplicaciones
  • Access Control Lists
  • Sintetización de datos
  • Componentes de seguridad y sesión

Instalación.

Tan fácil como descargarlo del site oficial y descomprimirlo en tu directorio público de tu webserver y seguir los pasos que te indica.

Versión que voy a comentar:

En los siguientes post la versión que voy a probar es la 2.5.4 la actual versión estable a fecha de Septiembre de 2014.

Fuente:

Espero que con este post y los siguientes os sirva CakePHP tanto como a mí 🙂

Un saludo.

Un buen validador de formularios basado en JQuery

Enlace  —  Publicado: 26 abril, 2014 en Sin categoría
Etiquetas:

Instalar latex en Ubuntu

Buena entrada para instalar Latex y texmaker en Ubuntu

Enlace  —  Publicado: 2 febrero, 2014 en GNU/Linux, Sistemas operativos

 

Interesante web donde se puede probar código javascript además de distintos frameworks: mootools, YUI, jquery etc.

 

Para probar javascript

Enlace  —  Publicado: 18 enero, 2014 en Javascript
Etiquetas:, , ,

En el post anterior se explicaba como compilar, ejecutar  y ejecutar cUrl o crear un programa/script que use libcURL. En este post se explicará como mandar una petición HTTP Post a un servidor.  Si no se tiene muy claro la forma en que trabaja un servidor Web con estas llamadas leer en wikipedia ( en inglés ) este artículo http://en.wikipedia.org/wiki/POST_%28HTTP%29

Este tipo de método de respuesta del protocolo HTTP es utilizado para mandar datos a un servidor, en este post explicaré como mandar datos a un servidor sin entrar en su código es decir solo conoceremos código HTML o cliente.

Supongamos que tenemos este formulario web que modifica el volumen de sonido de un servidor remoto ( http://localhost/modifysound

formulario web

El código HTML sería el siguiente:

<div class="Notes form">
<form id="SoundsEditForm" accept-charset="utf-8" method="post" action="/modifysound">
<div style="display:none;">
<input type="hidden" value="POST" name="_method">
</div>
<fieldset>
<legend>
<input id="sound" type="number" value="23" name="data[Sounds][sound]">
<div class="submit">
<input type="submit" value="Save">
</div>
</form>
</div>

Los campos Input son los que configuran los valores que se le envía al servidor cuando hacemos la petición POST, en este caso nuestro programa los mandará automaticamente, en este caso el formulario solo tiene un campo:

<input id="sound" type="number" value="23" name="sound">

La respuesta del servidor correcta sería:

<p>
 <h2>TCP/IP Connection</h2>
OK.
Attempting to connect to '127.0.0.1' on port '5000'...OK.
Sending HTTP HEAD request...OK.
Closing socket...OK.
</p>

El código C para hacer la petición:

{
	CURL *curl;
	CURLcode res;
	//
	// Init Curl
	//
	curl = curl_easy_init();
	if(!curl) 
	{
		return 1;
	}
	//
	// Init parameters
	//
	curl_easy_setopt(curl, CURLOPT_URL, "http://localhost/modifysound");
	curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "data[Sounds][sound]=45");
	//
	// Execute command ( curl )
	//
	res = curl_easy_perform(curl);
	//
	// Check Errors
	//
	if(res != CURLE_OK)
	{
		fprintf(stderr, "curl_easy_perform() failed: %s\n",
		curl_easy_strerror(res));
	}
	//
	// always cleanup 
	//
	curl_easy_cleanup(curl);
	return 0;
}

Una vez se compile y ejecute el programa por la salida estándar deberíamos de ver  una respuesta del servidor, En este ejemplo no se ha descrito el código de la parte del servidor solo del cliente, con lo cual la parte del servidor se debería desarrollar en el lenguaje/framework que se prefiera.

En las opciones de cURL hay que destacar CURLOPT_POSTFIELDS, si en este formulario existiese más de un campo a mandar al servidor ser mandaría de esta manera: «dato1=2&dato3=3» donde se le envía dos variables dato1 y dato3 con los valores 2 y 3.

Espero que os sirva.
Un saludo.

Una herramienta que debería conocer todo programador/administrador de sistemas en cURL, utilizada para automatizar por línea de comandos transferencias de datos los distintos protocolos soportados. Además de este programa por línea de comandos, existe libcURL para poder ser usada desde C/C++ y existen versiones de esta biblitoteca según wikipedia en más de 50 lenguajes, en los que yo destaco C#,PERL,Python y PHP.

Definición Según wikipedia:

[…] cURL es una herramienta para usar en un intérprete de comandos para transferir archivos con sintaxis URL, soporta FTP, FTPS, HTTP, HTTPS, TFTP, SCP, SFTP, Telnet, DICT, FILE y LDAP. cURL soporta certificados HTTPS, HTTP POST, HTTP PUT  […]

Algunos usos frecuentes de cURL.

  • Transferencias de datos en multitud de protocolos
  • Web Testing
  • Testing de servidores FTP.

Instalación de cURL/LibcURL

Para instalar cURL en ubuntu solo hace falta abrir una consola y escribir sudo apt-get install curl, pero yo quiero construir mi propia versión de cURL para que me soporte protocolos con ssl, ssh o rtmp, para ello previamente hay que instalar los siguientes paquetes en Ubuntu:

  • libssl-dev
  • libssh2-1.dev
  • librtmp-dev

Hay que descargar la última versión del código fuente en:  http://curl.haxx.se/, desde donde se puede encontrar la última versión de cURL que hoy es la 7.31.0, una vez se descargue  y se descomprima el tar.gz, se abre una consola dentro de la carpeta de instalación que en mi caso es /home/erjaimer/curl-7.31.0 y se procede a configurar la compilación para que soporte más protocolos:

$>./configure --with-ssl --with-ssh --with-rtmps

La Salida de esta orden es la siguiente, en donde se puede observar en rojo los protocolos soportados:

configure: Configured to build curl/libcurl:

  curl version:     7.31.0
  Host setup:       i386-pc-linux-gnu
  Install prefix:   /usr/local
  Compiler:         gcc
  SSL support:      enabled (OpenSSL)
  SSH support:      enabled (libSSH2)
  zlib support:     enabled
  krb4 support:     no      (--with-krb4*)
  GSSAPI support:   no      (--with-gssapi)
  SPNEGO support:   no      (--with-spnego)
  TLS-SRP support:  enabled
  resolver:         default (--enable-ares / --enable-threaded-resolver)
  ipv6 support:     enabled
  IDN support:      no      (--with-{libidn,winidn})
  Build libcurl:    Shared=yes, Static=yes
  Built-in manual:  enabled
  --libcurl option: enabled (--disable-libcurl-option)
  Verbose errors:   enabled (--disable-verbose)
  SSPI support:     no      (--enable-sspi)
  ca cert bundle:   /etc/ssl/certs/ca-certificates.crt
  ca cert path:     no
  LDAP support:     no      (--enable-ldap / --with-ldap-lib / --with-lber-lib)
  LDAPS support:    no      (--enable-ldaps)
  RTSP support:     enabled
  RTMP support:     enabled (librtmp)
  metalink support: no      (--with-libmetalink)
  Protocols:        DICT FILE FTP FTPS GOPHER HTTP 
  HTTPS IMAP IMAPS POP3 POP3S RTMP RTSP SCP SFTP SMTP SMTPS TELNET TFTP

Faltaría compilar e instalar:

$> sudo make
$> sudo make install

Ahora quedaría testear si tenemos cURL correctamente instalado

$> curl
curl: try 'curl --help' or 'curl --manual' for more information

Ya se podría ejecutar cURL con los siguientes protocolos:

  • DICT
  • FILE
  • FTP
  • FTPS
  • GOPHER
  • HTTP
  • HTTPS
  • IMAP
  • IMAPS
  • POP3
  • POP3S
  • RTMP
  • RTSP
  • SCP
  • SFTP
  • SMTP
  • SMTPS
  • TELNET
  • TFTP

Probando y compilando un ejemplo con libcURL:

Para este post voy a compilar el ejemplo más sencillo un get HTTP, este ejemplo se puede descargar desde https://raw.github.com/bagder/curl/master/docs/examples/simple.c  pero voy a poner su código fuente, el fichero se llamaría http.c si se descarga a nuestro ordenador:

#include <stdio.h>
#include <curl/curl.h>

int main(void)
{
  CURL *curl;
  CURLcode res;

  curl = curl_easy_init();
  if(curl) {
    curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
    /* example.com is redirected, so we tell libcurl to follow redirection */
    curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);

    /* Perform the request, res will get the return code */
    res = curl_easy_perform(curl);
    /* Check for errors */
    if(res != CURLE_OK)
      fprintf(stderr, "curl_easy_perform() failed: %s\n",
              curl_easy_strerror(res));

    /* always cleanup */
    curl_easy_cleanup(curl);
  }
  return 0;
}

Para compilar y ejecutar:

$> gcc -o http http.c -lcurl && ./http

La salida sería el código HTML de http://www.example.com, para obtener más información sobre ejemplos y documentación visitar: http://curl.haxx.se/libcurl/c/example.html

Utilizando la ordén cURL

Para obtener el mismo resultado que el programa http compilado anteriormente hay que utilizar la orden de la siguiente manera:

$> curl http://www.example.com

Espero que os sirva.

Un saludo

En un post anterior se explicó como mandar peticiones HTTP Get usando CakePHP Framework, En este post se explica como mandar una petición Get con Basic-Auth ( autenticación de acceso básica ).

Según wikipedia.org:

En el contexto de una transacción HTTP, la autenticación de acceso básica  es un método diseñado para permitir a un navegador web, u otro programa cliente, proveer credenciales en la forma de usuario y contraseña cuando se le solicita una página al servidor.

El formato de HttpSocket de CakePHP cuando hace una petición get o post es el siguiente:

  • string get($uri, $query, $request) # petición GET
  • string post($uri, $query, $request) # petición POST

Es el array $request lo que configura la respuestas con múltiples opciones, en este caso se va configura un Basic-Auth de la manera siguiente:

		
function index()
	{
		App::import('Core', 'HttpSocket');
		$HttpSocket = new HttpSocket();
		$response = array
		(
			'auth' => 
				array
				(
					'method' => 'Basic',
					'user' =>   'user',
					'pass' =>   '12345'
				)
		);
		$results = $HttpSocket->get('http://example.com',null,$response);
		debug($results);
		debug($HttpSocket->response);	
		die;
	}

De esta manera ya se podría leer el contenido de la web normalmente, sin que el server responda con un 401 ( autorización requerida ), para saber más sobre los código de respuesta del protocolo HTTP consultar: http://es.wikipedia.org/wiki/Anexo:C%C3%B3digos_de_estado_HTTP

Fuentes:

Espero que os sirva.

Un saludo

Según wikipedia:

«Ésta es una extensión de archivo para denotar ficheros de configuración utilizados por aplicaciones de los sistemas operativos Windows.

El término proviene de «Windows Initialization file», es decir, archivo de inicialización de Windows»

Muchas aplicaciones de windows, como el registro, o incluso PHP con su fichero ( php.ini ) utilizan este formato, aunque actualmente si se lee el artículo de wikipedia esta abandonandose su uso a favor de formatos como XML más estándar.

Se puede pasar un fichero .INI a un hash del lenguaje Perl bastante fácil, utilizando la biblioteca  libconfig, se puede descargar si usas Ubuntu:

$> sudo apt-get install  libconfig-simple-perl

Un fichero .INI de este formato:

[Red]
; Poner UsarProxy=0 si no hay cortafuegos
UsarProxy=1
Proxy=129.129.129.129

[Preferencias]
PaginaInicio=http://wikipedia.org
Maximizar=1

Se pasa a un hash de Perl de esta manera:

#!/usr/bin/perl -w
use Config::Simple; # libconfig-simple-perl
$iniFile = 'example.ini';
if( -e $iniFile  )
{
	Config::Simple->import_from($iniFile, \%Config);#read_config file
	foreach $key( keys %Config )
	{
		print "$key $Config{$key }\n";
	}
}

En la salida se muestra el contenido del hash:

Red.UsarProxy 1
Preferencias.PaginaInicio http://wikipedia.org
Red.Proxy 129.129.129.129
Preferencias.Maximizar 1

De manera que si se quiere saber si la Red puede usar proxy se tiene que consultar la clave de Config:

$Config{Red.UsarProxy} == 1

Fuentes:

Espero que os sirva

Un saludo