From Fedora Project Wiki

< FWN‎ | Beats

No edit summary
Line 7: Line 7:
This week's contribution is from [[User:gomix|Guillermo Gómez]], a primer on Ruby Ping.  Enjoy!
This week's contribution is from [[User:gomix|Guillermo Gómez]], a primer on Ruby Ping.  Enjoy!


=== Ruby Ping ===
=== SOX ===
SoX<ref>
http://sox.sourceforge.net/</ref>, la navaja suiza para la manipulación de audio.


En paralelo con el tutorial de Ruby, que pronto verá su segundo capítulo, vamos en paralelo para publicaciones más frecuentes como FWN a escribir acerca del uso del lenguaje en otras tareas específicas, hoy nos ocupa algunas formas de hacer "ping" con Ruby.
==== Agregando Soporte mp3 y m4a ====


==== Ping: librería estandar ====
Fedora no incluye soporte para MP3 en sus paquetes multimedia, debido a problemas de patentes sobre el algoritmo que permite comprimir y descromprimir mp3. De forma similar ocurre con el formato m4a. Sin embargo usted puede vivir en ciertos países donde no apliquen las limitaciones de la legislación de los EEUU, entonces si es así, veamos cómo podemos agregar el soporte deseado para mp3 y m4a entre otros formatos a sox.


==== Agregar soporte recompilando el Source RPM (SRPM) ====


Ping.pingecho utiliza TCP echo no ICMP echo para determinar si un máquina remota esta "viva". En realidad puede utilizar "otros" puertos, no necesariamente echo tcp/7.
===== Requisitos =====


<code>
    * Herramientas para compilación
1 irb(main):013:0> require 'ping'
    * rpmbuild
2 => true
    * yum-buildep
3 irb(main):012:0> Ping.pingecho('gomix.fedora-ve.org', 10)
    * De RPM Fusion, lame, lame-libs, lame-devel, libmad, libmad-devel, ffmpeg y ffmpeg-devel
4 => true
 
5 irb(main):016:0> Ping.pingecho('gomix.fedora-ve.org', 10, 'http' )
El procedimiento de instalación de software es, como root:
6 => true
 
''Herramientas para compilar''
 
<code>  
$ yum -y groupinstall "Development Tools"
$ yum -y install rpmdevtools
</code>
</code>


NOTA: si existe un paquete de rechazo ICMP al puerto especificado, se considera que la máquina está viva, es decir, "respondió con ICMP", así que no asuma que el puerto está abierto por el hecho de que Ping.pingecho le devuelva true.
''Dependencias para poder compilar sox según Fedora''
 
==== net-ping ====


<code>
<code>
# gem install net-ping
$ yum-builddep -y sox
</code>
</code>


Fase común genérica para los siguientes ejemplos.
''Librerías adicionales para la compilación (soporte mp3)''


<code>
<code>
  1 irb(main):001:0> require 'rubygems'
  $ yum -y install lame lame-libs lame-devel
  2 => true
  $ yum -y install libmad libmad-devel
  3 irb(main):005:0> require 'net/ping'
  $ yum -y install ffmpeg ffmpeg-devel
4 => true
</code>
</code>


Ping UDP y TCP.
==== Construcción e Instalación del RPM ====
 
Ahora para reconstruir SoX con soporte mp3 el procedimiento como usuario regular es:


<code>
<code>
  1 irb(main):011:0> host = "gomix.fedora-ve.org"
  $ cd
  2 => "gomix.fedora-ve.org"
$ rpmdev-setuptree (si no lo ha hecho antes)
3 irb(main):012:0> u = Net::Ping::TCP.new(host)
$ yumdownloader --source sox (descarga los fuentes srpm)
  4 => #<Net::Ping::TCP:0x7fb1cf3e16f0 @duration=nil, @timeout=5, @warning=nil, @exception=nil, @host="gomix.fedora-ve.org", @port=7>
  $ rpmbuild --rebuild sox-14.3.0-1.fc13.src.rpm (compila/construye rpm)
  5 irb(main):013:0> u.port = 80
  $ cd rpmbuild/RPMS/x86_64
  6 => 80
$ su
  7 irb(main):014:0> p u.ping?
*contraseña*
  8 true
# rpm -vhi --force sox-14.3.0-1.fc13.x86_64.rpm
  9 => nil
  Preparando...           ########################################### [100%]
  10 >> u = Net::Ping::UDP.new(host)
  1:sox                    ########################################### [100%]
  11 => #<Net::Ping::UDP:0xb74b6a38 @duration=nil, @warning=nil, @data="ping", @timeout=5, @exception=nil, @bind_port=nil, @host="www.ruby-lang.org", @port=7, @bind_host=nil>
  ...
12 >> p u.ping?
  # sox -h
13 false
  ...
  AUDIO FILE FORMATS: 8svx aif aifc aiff aiffc al amb au avi avr caf cdda cdr cvs cvsd cvu dat dvms f32 f4 f64 f8 fap ffmpeg  flac fssd gsm hcom htk ima ircam la lpc lpc10 lu m4a mat mat4 mat5 maud mp2 mp3 mp4 mpg nist ogg paf prc pvf raw s1 s16 s2 s24 s3 s32 s4 s8 sb sd2 sds sf sl smp snd sndfile sndr sndt sou sox sph sw txw u1 u16 u2 u24 u3 u32 u4 u8 ub ul uw vms voc vorbis  vox w64 wav wavpcm wmv wv wve xa xi
  PLAYLIST FORMATS: m3u pls
  ...
</code>
</code>


NOTA: en este caso el rechazo tanto a nivel TCP como ICMP no es indicativo de que la "máquina" esté viva, es decir, aquí el PING es específico al servicio/puerto que se está probando, no a la máquina. Note en el último caso el ping-tcp al puerto 80 donde si hay respuesta porque hay un servidor web funcionando allí.
NOTA: Procedimiento probado en F8, F9, F10, F11, F12 y F13, en el tiempo las versiones pueden cambiar, en el ejemplo se muestra la versión más reciente. Para versiones anteriores a F13, el compilado es para i586, a partir de F12 es i686. En el caso de x86_64, el compilado está en el directorio rpmbuild/RPMS/x86_64 .
 
Note la inclusión de mp3 y m4a en los formatos soportados. Ahora puede reproducir su mp3 o m4a desde la consola. Sox también permite convertir entre formatos y tiene muchas otras aplicaciones. Abajo reproduzco un mp3 de AC/DC.


Ping ICMP con net-ping.
=== Convertir mp3 ===
 
Otra aplicación común de sox es convertir de un formato a otro, por ejemplo de mp3 a cdr o wav, con cdr se está listo para quemar un CD Audio :)


<code>
<code>
  1 irb(main):011:0> host = "gomix.fedora-ve.org"
  $ sox -V Boinga.mp3 Boinga.cdr
2 => "gomix.fedora-ve.org"
  sox: Detected file format type: mp3
  3 irb(main):015:0> u = Net::Ping::ICMP.new(host)
 
  4 => #<Net::Ping::ICMP:0x7fb1d1358088 @pid=8696, @data="\000\001\002\003\004\005\006\a\b\t\n\v\f\r\016\017\020\021\022\023\024\025\026\027\030\031\032\e\034\035\036\037 !\"\#$%&'()*+,-./012345678", @duration=nil, @data_size=56, @timeout=5, @bind_port=0, @warning=nil, @exception=nil, @seq=0, @host="gomix.fedora-ve.org", @bind_host=nil, @port=nil>
sox: Input file Boinga.mp3: using sample rate 44100
  5 irb(main):016:0> p u.ping?
size shorts, encoding MPEG audio (layer I, II or III), 2 channels
6 true
  sox: Output file Boinga.cdr: using sample rate 44100
7 => nil
size shorts, encoding signed (2's complement), 2 channels
  sox: Output file: comment "Processed by SoX"
</code>
</code>


Tenga presente que:
Convirtamos ahora a un formato libre, ogg.


<code>
<code>
  1 >> u = Net::Ping:ICMP.new(host)
  $ sox -V Boinga.mp3 Boinga.ogg
  2 RuntimeError: requires root privileges
  sox: Detected file format type: mp3
  3    from /usr/lib/ruby/gems/1.8/gems/net-ping-1.4.0/lib/net/ping/icmp.rb:25:in `initialize'
 
  4    from (irb):5:in `new'
  sox: Input file Boinga.mp3: using sample rate 44100
  5    from (irb):5
  size shorts, encoding MPEG audio (layer I, II or III), 2 channels
  6
sox: Output file Boinga.ogg: using sample rate 44100
  size shorts, encoding Vorbis, 2 channels
  sox: Output file: comment "Processed by SoX"
</code>
</code>


Ping "external", esta opción utiliza la utilidad "ping" de su sistema operativo.
Veamos los tamaños resultantes solo por curiosidad incluyendo otros formatos sin ningún parámetro adicional al convertir, es decir, usando los valores por omisión.


<code>
<code>
  1 >> host="200.44.32.12"
  $ ls -lh Boinga*
  2 => "200.44.32.12"
-rw-rw-r-- 1 gomix gomix  23M Sep 22 14:50 Boinga.au
  3 >> u = Net::Ping::External.new(host)
-rw-rw-r-- 1 gomix gomix  23M Sep 22 14:51 Boinga.avr
  4 => #<Net::Ping::External:0xb73fbd50 @duration=nil, @warning=nil, @timeout=5, @exception=nil, @host="200.44.32.12", @port=7>
-rw-rw-r-- 1 gomix gomix  23M Sep 22 14:24 Boinga.cdr
  5 >> p u.ping?
  -rw-rw-r-- 1 gomix gomix 2.6M Nov 11  2006 Boinga.mp3
6 true
  -rw-rw-r-- 1 gomix gomix 1.5M Sep 22 14:26 Boinga.ogg
  -rw-rw-r-- 1 gomix gomix  23M Sep 22 14:35 Boinga.wav
 
  AplicacionesDeUsuario_Audio_Sox_mp3_sox-play-mp3.png (25.2 kB)
</code>
</code>


Por cierto, net-ping no está empaquetado en Fedora, ello es una buena oportunidad para que comiences tu primer proyecto de empaquetamiento de rubygems en Fedora, contáctame y suscribe en el grupo de desarrollo latinoamericano RPMDev .
Guillermo Gómez
 
Gomix_

Revision as of 14:36, 24 March 2011

LATAM Fedora!

LATAM Fedora is a regular column of Spanish language contributions around open source software. It is our first expansion into incorporating foreign language content into FWN.

This week's contribution is from Guillermo Gómez, a primer on Ruby Ping. Enjoy!

SOX

SoX[1], la navaja suiza para la manipulación de audio.

Agregando Soporte mp3 y m4a

Fedora no incluye soporte para MP3 en sus paquetes multimedia, debido a problemas de patentes sobre el algoritmo que permite comprimir y descromprimir mp3. De forma similar ocurre con el formato m4a. Sin embargo usted puede vivir en ciertos países donde no apliquen las limitaciones de la legislación de los EEUU, entonces si es así, veamos cómo podemos agregar el soporte deseado para mp3 y m4a entre otros formatos a sox.

Agregar soporte recompilando el Source RPM (SRPM)

Requisitos
   * Herramientas para compilación
   * rpmbuild
   * yum-buildep
   * De RPM Fusion, lame, lame-libs, lame-devel, libmad, libmad-devel, ffmpeg y ffmpeg-devel

El procedimiento de instalación de software es, como root:

Herramientas para compilar

$ yum -y groupinstall "Development Tools" 
$ yum -y install rpmdevtools

Dependencias para poder compilar sox según Fedora

$ yum-builddep -y sox

Librerías adicionales para la compilación (soporte mp3)

$ yum -y install lame lame-libs lame-devel
$ yum -y install libmad libmad-devel
$ yum -y install ffmpeg ffmpeg-devel

Construcción e Instalación del RPM

Ahora para reconstruir SoX con soporte mp3 el procedimiento como usuario regular es:

$ cd
$ rpmdev-setuptree (si no lo ha hecho antes)
$ yumdownloader --source sox (descarga los fuentes srpm)
$ rpmbuild --rebuild sox-14.3.0-1.fc13.src.rpm (compila/construye rpm)
$ cd rpmbuild/RPMS/x86_64
$ su
*contraseña*
# rpm -vhi --force sox-14.3.0-1.fc13.x86_64.rpm 
Preparando...            ########################################### [100%] 
1:sox                    ########################################### [100%] 
...
# sox -h
...
AUDIO FILE FORMATS: 8svx aif aifc aiff aiffc al amb au avi avr caf cdda cdr cvs cvsd cvu dat dvms f32 f4 f64 f8 fap ffmpeg   flac fssd gsm hcom htk ima ircam la lpc lpc10 lu m4a mat mat4 mat5 maud mp2 mp3 mp4 mpg nist ogg paf prc pvf raw s1 s16 s2 s24 s3 s32 s4 s8 sb sd2 sds sf sl smp snd sndfile sndr sndt sou sox sph sw txw u1 u16 u2 u24 u3 u32 u4 u8 ub ul uw vms voc vorbis  vox w64 wav wavpcm wmv wv wve xa xi
PLAYLIST FORMATS: m3u pls
...

NOTA: Procedimiento probado en F8, F9, F10, F11, F12 y F13, en el tiempo las versiones pueden cambiar, en el ejemplo se muestra la versión más reciente. Para versiones anteriores a F13, el compilado es para i586, a partir de F12 es i686. En el caso de x86_64, el compilado está en el directorio rpmbuild/RPMS/x86_64 .

Note la inclusión de mp3 y m4a en los formatos soportados. Ahora puede reproducir su mp3 o m4a desde la consola. Sox también permite convertir entre formatos y tiene muchas otras aplicaciones. Abajo reproduzco un mp3 de AC/DC.

Convertir mp3

Otra aplicación común de sox es convertir de un formato a otro, por ejemplo de mp3 a cdr o wav, con cdr se está listo para quemar un CD Audio :)

$ sox -V Boinga.mp3 Boinga.cdr
sox: Detected file format type: mp3
sox: Input file Boinga.mp3: using sample rate 44100
size shorts, encoding MPEG audio (layer I, II or III), 2 channels
sox: Output file Boinga.cdr: using sample rate 44100
size shorts, encoding signed (2's complement), 2 channels
sox: Output file: comment "Processed by SoX" 

Convirtamos ahora a un formato libre, ogg.

$ sox -V Boinga.mp3 Boinga.ogg
sox: Detected file format type: mp3
sox: Input file Boinga.mp3: using sample rate 44100
size shorts, encoding MPEG audio (layer I, II or III), 2 channels
sox: Output file Boinga.ogg: using sample rate 44100
size shorts, encoding Vorbis, 2 channels
sox: Output file: comment "Processed by SoX" 

Veamos los tamaños resultantes solo por curiosidad incluyendo otros formatos sin ningún parámetro adicional al convertir, es decir, usando los valores por omisión.

$ ls -lh Boinga*
-rw-rw-r-- 1 gomix gomix  23M Sep 22 14:50 Boinga.au
-rw-rw-r-- 1 gomix gomix  23M Sep 22 14:51 Boinga.avr
-rw-rw-r-- 1 gomix gomix  23M Sep 22 14:24 Boinga.cdr
-rw-rw-r-- 1 gomix gomix 2.6M Nov 11  2006 Boinga.mp3
-rw-rw-r-- 1 gomix gomix 1.5M Sep 22 14:26 Boinga.ogg
-rw-rw-r-- 1 gomix gomix  23M Sep 22 14:35 Boinga.wav
AplicacionesDeUsuario_Audio_Sox_mp3_sox-play-mp3.png (25.2 kB) 

Guillermo Gómez