domingo, 23 de agosto de 2015

Bajar la calidad de varios mp3 en una carpeta usando avconv y un script bash nivel noob en ubuntu




Hace unos días necesitaba bajar la calidad de audio de algunos archivos mp3 a 128kb/s, por lo que recordé la herramienta avconv que pertenece al proyecto Libav y que es la que sustituye a ffmpeg en la actualidad. Sabia que avconv era capaz de hacer este trabajo, pero lo que no sabia es que solamente podía hacerlo uno por uno y esto resultaba muy engorroso para mi, pues tenia cerca de unos 100 archivos, debido a esto decidí buscar una pequeña solución vía la madre de todas las sabidurías google.com.

Primero pensé que avconv tendría alguna forma de especificar un directorio de salida para los archivos convertidos (algo así como un -o <directorio>), pero aparentemente esto no es así, y la solución que encontré en unix.stackexchange fue crear un pequeño script bash para eso.

Para realizar la prueba se necesita tener instalado libav-tools, mediante el siguiente comando en la terminal:

sudo apt-get install libav-tools
Originalmente el script bash que probé fue:

#!/bin/bash
for i in *.mp3 ; do 
    avconv -i "$i" -ab 128k "./mp3/$i".mp3
done
guarde el archivo en formato .sh (shell script) y procedí a realizar una prueba.



Lo primero que se debe hacer para poder ejecutar el script es darle permisos de ejecución con el comando chmod:

sudo chmod +x mp3_test.sh



Mi carpeta de prueba contiene tres archivos mp3 y el script bash. Para ejecutar un script bash se utiliza ./<nombre de script>. Ejecute el script bash y…… ERROR! Entonces me di cuenta que el script recorría todos los archivos pero para cada archivo dio el error:

./mp3/Gorillaz-stylo.mp3.mp3: No such file or directory



Esto era debido a que la carpeta mp3 no estaba creada, esto se resolvía creando una carpeta manualmente, pero mi intensión era que el script fuera un poco mas “inteligente” para facilitar el trabajo. Ademas estaba agregando .mp3 al final de cada nombre de cada archivo, por lo que procedí a modificar el script quedando de la siguiente forma:

#!/bin/bash

if [ ! -d "mp3" ]; then
   mkdir "mp3"
fi

for i in *.mp3 ; do
   avconv -i "$i" -ab 128k "./mp3/$i"
done
Básicamente lo que agregue fue una validación que verifica si la carpeta mp3 no esta creada, se creara automáticamente, luego de esto ejecute el script nuevamente y la carpeta ahora es creada automáticamente por el script y los mp3 tendran un bitrate de 128kb/s que fue lo especificando en el script.



El objetivo hasta aquí ya se había logrado pero pensé: ¿Que tal si desea otra carpeta de salida o definir otro bitrate para los mp3? Por lo que procedí a modificar un poco el script:

#!/bin/bash

# Mostramos un mensaje en la terminal solicitando la carpeta de salida
# y almacenamos el nombre en una variable outputFolder con un read
echo 'Output folder (create folder first):'
read outputFolder

# Mostramos un mensaje en la terminal solicitando el bitrate del mp3
# y almacenamos el numero en una variable bitrate con un read
echo 'Bitrate (Eg. 96, 128, 320):'
read bitrate

# Se valida si el usuario no ingreso un nombre se establece por defecto mp3
if [ -z "$outputFolder" ]
then
   outputFolder=mp3
fi

# Se valida si el usuario no ingreso un bitrate se establece por defecto 128
if [ -z "$bitrate" ]
then
   bitrate=128
fi

# Se valida si no existe el folder, lo crea automaticamente
if [ ! -d "$outputFolder" ]; then
   mkdir $outputFolder
fi

# Recorre cada mp3 de la carpeta y procede a convertirlo
for i in *.mp3 ; do
   avconv -i "$i" -ab "$bitrate"k "$outputFolder/$i"
done
de ahora en adelante el script mostrara dos mensajes:




Nota: El script es bien básico y no acepta nombre de carpetas con espacios por lo que dará un error. Si se desea profundizar acerca de el funcionamiento de un script bash se puede leer algunos recursos que me han servido a mi:

Ojala les sea de utilidad, les dejo el link de descarga del script comentado junto con los links que me fueron utiles para realizarlo: Descargar script bash.

domingo, 28 de junio de 2015

Instalar xposed framework en android lollipop 5.1.1 32bits y sdk 22 [ROOT]



Buenas a todos, les traigo un pequeño tutorial de como instalar xposed framework en android 5.1.1. Primero que nada debo mencionar que se realizo el proceso en un nexus 4 con android lollipop 5.1.1 y rom SAOSP.

NOTA: No me hago responsable de cualquier daño ocurrido después de el proceso. Si el smartphone se brickea o aparecen bootloops infinitos queda bajo tu responsabilidad. El proceso me funciono a mi perfectamente pero eso no es garantía de que a todos les funcionara igual. Recuerda que esta es una versión alpha de xposed para lollipop.

El hilo oficial de xposed framework para lollipop permite la descarga de los archivos necesarios para android lollipop con sdk 21 que son:

  • xposed-sdk21-arm-*.zip: que debe ser flasheado desde el recovery (TWRP en mi caso).
  • XposedInstaller_3.0-alpha*.apk: el apk para administrar los modulos.
  • XposedBridgeApi-20150213.jar: un modulo para desarrolladores que no tomaremos en cuenta en este tutorial.
Nota: si te interesa xposed framework para 64 bits, ve el siguiente link.

He descargado los 2 primeros archivos y he instalado obteniendo el error: Wrong sdk version: 22, expected version 21. Esto es debido a que mi versión de android usa el sdk 22 y el hilo oficial provee los archivos para el sdk 21. Para android 5.0 estos deberían funcionar correctamente. 

Para solucionar esto debemos instalar el archivo zip compatible con el sdk 22 y el apk para administrar los módulos:
Primero reiniciamos nuestro teléfono y entramos a nuestro recovery:



Seleccionamos nuestro archivo de xposed e instalamos:





Recomendablemente hacer un wipe de cache/dalvik y reiniciar nuestro dispositivo, debemos esperar a que se complete la optimizacion de las aplicaciones. Luego debemos instalar el apk de exposed para administrar los modulos:


Habilitar las fuentes desconocidas en caso de ser necesario:

 



En mi caso he instalado un modulo y luego hice un reinicio suave y todo funciona a como se espera:



Aquí el resultado, netease (alias: spotify chino traducido al español):


 



Fuentes:


sábado, 20 de junio de 2015

Crear una directiva angular con una galeria jQuery

Nunca modifiques el DOM desde el controlador, usa directivas, es lo que dicen los chicos del equipo de Angular JS. Hoy vamos a tratar de hacerles un poco de caso, por eso en este post vamos a intentar explicar de manera sencilla como crear una directiva haciendo uso de un plugin de galería creado con jQuery.

Algunas veces se necesita usar un plugin de jQuery con angular, pero de repente no sabemos como hacerlo cuando no estamos tan familiarizados con las directivas de angular. Que usaremos:

Primero creamos la estructura html (código completo al final):

Luego creamos nuestro modulo, nuestro controlador y nuestra directiva:


Nuestra directiva ahora es capaz de mostrar la galería (de momento no pongas atención a la variable del controlador images, la usaremos luego). Veamos algunos aspectos importantes de la directiva:

  • restrict: 'A': 'restringe' la directiva para solo usarse como un atributo, por eso el html en que se llama la directiva es: <div simple-cycle></div>. Podemos hacer que la directiva tambien sea un elemento agregando la letra 'E'. Para mas información ver Creating Custom Directives.
  • replace: true: indica que el template de la directiva sustituirá el elemento en que se definió la directiva, en este caso el <div>. Para mas información ver la sección de $compile (Nota: replace esta deprecated porque sera removido en la version 2 de angular).
  • template: 'nuestro template': lo que queremos que la directiva muestre como html.
  • link: es la funcion que se ejecuta cuando luego que el elemento y el template de la directiva se ha creado en el DOM. Aqui colocamos nuestra instancia del cycle.
Hasta ahora nuestra directiva crea nuestro plugin, pero no es tan robusta, supongamos que queremos que nuestra directiva sea capaz de crear una galería a partir de una serie de imágenes que tengamos en nuestro controlador, mmmm estas recordando la variable images ??? para eso crearemos otra directiva:


Ahora podemos observar lo siguiente:

  • scope: {pics: '=' } le indicamos a la directiva que tenga un scope aislado del controlador 'Ctrl', y que por medio de un atributo pics le enviaremos una variable que sera un arreglo de imágenes.
  • template: nuestro template ahora contiene un ngRepeat y un ngSrc.
    • ng-repeat="item in pics": iteramos la variable pics (arreglo) y almacenamos cada elemento en una variable item.
    • ng-src="{{item.url}}": recordemos que nuestra variable images del controlador 'Ctrl' contiene objetos con una propiedad url.
  • $timeout: lo inyectamos en la directiva para esperar 300 milisegundos y crear la instancia del plugin. Este tiempo es necesario para esperar que el ngRepeat cree todos los elementos <img> del template.

Ahora modificamos nuestro html para agregar nuestra nueva directiva:



Notemos ahora que por medio del atributo pics 'pasamos' nuestra variable del controlador images y ya la podemos utilizar desde la directiva. Excelente ahora nuestra directiva es dinamica!! :)

Pero.... quizás te preguntes 300 milisegundos es suficiente???? mi respuesta es: si y quizás no... SI, porque en este momento la directiva funciona xD es decir con pocas imágenes funciona pero con unas 1000, no estoy seguro (jamas he hecho la prueba) pero si entonces en este momento estas diciendo algo como: 'a este mae le pica el cheto.... no puede hacer eso porque en un momento no va a funcionar.... o con otro plugin que necesite mas datos se va a quebrar'. Tranquilo, te dejo otra opción, esperar a que el ultimo elemento del ngRepeat este creado para crear la instancia del plugin.

Entonces vamos de nuevo a modificar nuestra directiva:


Simplemente lo que hacemos es comprobar cuando el ngRepeat crea el ultimo elemento usando la variable $last (bool) y la directiva ngInit. La directiva ngInit llamara a nuestra función initFunction que sera la que realice la validación.

Eso es todo, espero que les ayude un poco, hasta la próxima, saludos.

Puedes ver el ejemplo completo en el siguiente plunkr.

NOTA: El post pretendía ser mucho mejor, pero blogger no lo pone fácil y crear un resaltado de sintaxis no me funciono, disculpas por un post de tan baja calidad, espero que el código en plunker pueda dejarlos mas claro. Hubiera querido ser mas claro desde el post pero lamentablemente no conseguí el resaltado de sintaxis.

domingo, 8 de junio de 2014

Como importar registros de Excel a MySQL usando CSV

Si te has encontrado en la situación en que necesitas importar muchos registros que  se encuentran en excel a MySQL este post puede ser de utilidad. Utilizando el formato CSV puedes lograr importar tus datos desde excel.

Que es CSV?

Según Wikipedia, son un tipo de documento en formato abierto sencillo para representar datos en forma de tabla, en las que las columnas se separan por comas (o punto y coma en donde la coma es el separador decimal: España, Francia, Italia...) y las filas por saltos de línea.

Ya conociendo más o menos que es el formato CSV, tenemos que tener nuestro Excel con los registros a exportar, en este caso usare unos cuantos registros. Cabe aclarar que en las pruebas para números que están separadas las cifras de miles por coma debemos editar el Formato numérico y seleccionar “General”.



Ahora necesitaremos guardar este Excel con un formato CSV:



Si abrimos el archivo CSV miraremos los registros separados por comas de la siguiente forma:



Cada registro separado por coma será un dato a importar a la base de datos.

En los archivos CSV la primera fila indica las columnas de las tablas, por lo que procederemos a eliminar esta fila, ya que solo nos interesan sus registros. También en mis pruebas el id debía ser colocado en el CSV, por lo que en Excel podemos colocar un campo id también y agregarle sus valores.



Forma 1: Funciona en phpMyAdmin y Workbench:

Nuestra tabla estará hecha de la siguiente manera: 
create table empleados(
    id_empleado int primary key not null auto_increment,
    nombre varchar(15),
    apellido varchar(15),
    edad int,
    salario float
);
Para este ejemplo introduciré el archivo a importar en C: en una carpeta llamada “import”. El código en mi caso sería: 



Si obtienes el siguiente error:



Es por la copia del codigo, el codigo erroneo se mira asi (notar el string de la ruta no esta colorido):



El resultado en phpMyAdmin:


Forma 2: En el Workbench:

Para el Workbench existe un botón para importar el archivo (la única forma que la note es haciendo un select a la tabla xD):



Luego seleccionamos el botón para importar y seleccionamos el archivo:



Ahora debes seleccionar aplicar, en la ventana de la consulta:


Luego , aplicar y finalizar:


 

Un select y listo.

 

Espero que sea de utilidad.


Saludos.

jueves, 3 de abril de 2014

Tutorial para virtualización con KVM en Debian GNU/Linux.




En esta ocasión les compartiré un tutorial de virtualización con KVM usando la distribución Debian. Básicamente lo que se hace es mostrar de forma sencilla como configurar una maquina virtual usando un administrador de maquina virtual y las tecnologías necesarias para virtualizar con KVM.

El tutorial esta en formato PDF y es un trabajo que se realizo para una asignatura de la Universidad Nacional de Ingeniería. Ojala a alguien le pueda servir, pues es bien básico pero se trata de ser lo mas claro posible.


Link del PDF (MediaFire): http://adf.ly/iXGHE
Link del PDF (Google Drive):  http://adf.ly/iXGcz

martes, 3 de diciembre de 2013

¿Porque usar GNU/Linux?



Usualmente las personas no usan otro sistema operativo que no sea Windows por algún motivo, entre los cuales están: que no conocen otro o que simplemente los demás son difíciles de usar. Pero usualmente estos no conocen las ventajas y las desventajas de otras alternativas a Windows.


En esta entrada nos centraremos en GNU/Linux, que es, sus ventajas, desventajas y por supuesto a convencer mas personas para que se sumen al movimiento del software libre.


Si bien es cierto, cada comienzo es difícil, pero con un poco de paciencia, practica y de que te enamores de usar una alternativa libre todo es posible. Sin duda algo de lo que me mas gusta de ser usuario de GNU/Linux es lo tanto que puedes llegar a aprender, por experiencia propia siempre aprendes algo nuevo usando GNU/Linux (y no solo yo lo digo), es como que cada día aprendes algo útil, que desde mi humilde opinión no pasa tanto en Windows, pues la mayoría de los usuarios están acostumbrados a tener todo en Siguiente, siguiente y finalizar, que si bien es cierto, es practico y simple dirán algunos muchas veces se introduce basura a las pc sin darnos cuenta(instalación de barras, complementos, otros software....). Para los mas curiosos creo que GNU/Linux es una gran apuesta y a lo mejor una divertida elección.

Lo primero: ¿Que es GNU/Linux?

GNU/Linux, es el nombre del sistema operativo resultante de la combinación entre el núcleo o kernel llamado Linux y el sistema GNU. Usualmente GNU/Linux simplemente es llamado Linux, lo cual no es correcto.


Existen muchas distribuciones GNU/Linux, entre las mas populares tenemos: Linux Mint, Ubuntu, Debian, Fedora, OpenSUSE, las cuales se pueden obtener sin ningún costo y pueden compartirse sin ningún problema.

Ventajas.
  • Es libre, tu puedes obtener una copia de cualquier distribución sin costo alguno, puedes usarlo, estudiarlo y modificarlo a tu gusto, si tienes los conocimientos necesarios puedes crear tu propia distribución adecuada a tus necesidades.
  • La comunidad, en GNU/Linux no estas solo, si tienes un problema puedes buscar en internet foros especializados de tu distribución y buscar ayuda, usualmente la mayoría de los problemas ya están resueltos en los foros o blogs. Hay mucha gente altruista en la comunidad dispuesta a ayudar sin pedir nada a cambio. “Recoger datos es sólo el primer paso hacia la sabiduría, pero compartir información es el primer paso hacia la Comunidad”.
  • Los programas, existen muchos programas útiles para el uso diario y sin licencias totalmente libres o gratuitos. Algo que es interesante en GNU/Linux es que existen muchas alternativas, lectores de pdf, reproductores de música, administradores de archivos, así que hay mucho de donde elegir. Un ejemplo de la facilidad en GNU/Linux, es que con un lector de pdf puedes copiar contenido de un pdf supuestamente 'bloqueado' (con el programa evince, no se si funciona con otros) y copiarlo directamente sin necesidad de desbloquear el pdf.
  • Seguridad, es uno de los puntos fuertes de los sistemas GNU/Linux. No voy a decir que la existencia de virus o malware en linux es nula, pero no es problema para el usuario, pues en GNU/Linux a diferencia de windows, un archivo no se ejecutara solo y se deben otorgar permisos especiales para poder hacer daño y eso no ocurrira al menos que nosotros lo hagamos, por otro lado, todos los programas se encuentran en servidores que nos proporciona la distribucion y estos son seguros sin ningun tipo de malware. No por nada los sistemas basados en Linux dominan todos los segmentos (servidores, móviles, supercomputadoras...) menos el del escritorio.
  • Ahorro de memoria, en sistemas basados en Linux, nos ahorraremos la adquisición de un antivirus y por consiguiente el uso de recursos que conlleva tener un antivirus en ejecución todo el tiempo. En algunas distribuciones con entornos de escritorio livianos podemos arrancar el sistema y este hará uso de 200 a 300 MB de RAM (Lubuntu, Xubuntu) y hasta existen distribuciones especializadas en equipos modestos que arrancan el sistema y hacen uso de solamente 40 a 50 MB de RAM (slitaz). Si comparamos esto ultimo con Windows, se obtiene un mejor rendimiento con una distro Linux liviana que con cualquier versión de Windows moderna, la comparación de consumo de RAM es muy dispareja, cuando en Windows podemos llegar a iniciar el sistema usando 600 o hasta 1 GB de RAM, siendo cariñosos con el sistema de Microsoft por supuesto, en una distribución como Lubuntu en su ultima versión podemos llegar a usar unos 300 MB de RAM cuando esta arranca

Quizás hayan mas ventajas pero de momento solo mencionare estas.


Desventajas.
  • Mas complejo, quizás muchos usuarios linuxeros digan que esto no es cierto con el fin de convencer o defender los sistemas GNU/Linux, pero la verdad es esa, los sistemas GNU/Linux suelen ser un poco mas complejos, por el simple hecho que de pronto te encuentras con un error o un problema y lo puedes llegar a solucionar hasta en unas 2 horas después de leer muchos foros o buscar en Internet, claro tampoco hay que ser tan fatalistas. Para instalar un programa muchos dirán, tengo que usar la consola!, desde mi punto de vista es el método mas practico, simple y rápido, pero para los nuevos o los que no estén familiarizados esto no es así, afortunadamente en los últimos años eso ha cambiado un poco, pues las distribuciones mas populares cuentan con un centro de software donde se pueden buscar los programas e instalarlos.
  • Los juegos, definitivamente esta es una de las razones por la que muchos no migran, es casi imposible jugar en GNU/Linux a como se juega en Windows, la cantidad de títulos disponibles no se compara. Aunque hoy en día se esta haciendo un esfuerzo muy grande por llevar los juegos a esta plataforma, los chicos de Valve con steam están haciendo un trabajo extraordinario, incluso con el desarrollo de una distribución destinada para jugar y con un buen soporte para las tarjetas de vídeos trabajando conjuntamente con AMD y NVIDIA. Muchos usuarios de Windows usan como argumento que “Linux no sirve para jugar”, pero esto es debido a pura ignorancia, pues en las beta de Steam para Linux se llego a obtener un mejor rendimiento comparado con el software de Windows, esto debido a que las características libres del sistema hacen mas sencilla la optimización. Por otro lado los desarrolladores de juegos no se han interesado por ser un mercado mas pequeño, sumado ademas de eso que no siempre se obtiene un gran soporte de las ultimas tarjetas de vídeo, no por culpa de GNU/Linux, sino por los mismos fabricantes que no proporcionan el soporte adecuado a los drivers, por ejemplo según Linus Torvalds (creador de Linux, solamente el núcleo) “NVIDIA es la peor empresa con la que han trabajado”.
  • Existen varios problemas asociados con hibernación y algunos drivers de hardware modernos o de fabricantes que no proporcionan las especificaciones de sus productos. Pero hay que destacar el gran soporte de drivers que hay, la mayoría del código en el kernel de Linux es para drivers, es por eso que podremos conectar un usb, una cámara y no tendremos problemas, así mismo, muchas veces nuestro hardware sera detectado inmediatamente y no necesitaremos descargar drivers como sucede en Windows, simplemente instalamos el sistema y estamos listo para usarlo.

En conclusión los sistemas basados en linux ofrecen muchas alternativas y son sistemas confiables, con un buen soporte de drivers en general y puedes encontrar una distribución para ti o para esa PC vieja con modestas especificaciones; existen desventajas pero solo es cuestión de acostumbrarse y darse cuenta de las bondades del software libre.

Por supuesto los invito a probar una distro Linux, a diferencia de Windows los desarrolladores del software libre ofrecen los “live cd” en muchas distribuciones, con el que podrás probar como funciona el sistema operativo desde tu pc sin necesidad de instalarlo!!

Entre las distribuciones que recomiendo para empezar estan:

Si están interesados y quieren mas información les recomiendo esta estupenda pagina.

Saludes.

domingo, 1 de diciembre de 2013

Elimina la publicidad de tu android con Adaway (ROOT)



Muchas veces la publicidad en las aplicaciones es muy molesta y mas de alguna vez hemos entrado a alguna de ellas por error. La publicidad es una fuente de ingresos para los desarrolladores, pero algunas veces es muy molesta para los usuarios.

Resulta que existen aplicaciones que son free, que se diferencian de sus versiones pro por contener publicidad, pero con Adaway te puedes olvidar de eso, porque no sera necesario comprar esa app para ocultar la publicidad.

Lo primero que se necesita y que es imprescindible para lograrlo es ser ROOT, por el hecho de que hay que modificar un archivo de sistema. Si no sabes como hacerlo puedes googlear un poco porque existen muchos métodos y no todos funcionan en todos los dispositivos. En mi caso con un nexus 4 solamente descargo el archivo superSU.zip y lo flasheo desde el recovery.

Adaway es una aplicación que no se encuentra en la play store, por lo que tenemos que proceder a descargarla desde otro lugar, en este caso de Fdroid que es de donde recomiendan en la pagina oficial de Adaway, que no es mas que un market alternativo de aplicaciones y que se basa en aplicaciones de código libre.

Si no queremos instalar Fdroid podemos descargar el APK directamente desde la pagina web de Fdroid y dar clic en download apk, desde este enlace: http://adf.ly/iXOFr



Instalado el Adaway, abrimos la aplicación y le otorgamos permisos de super usuario, luego nos dirá si tenemos una actualización para descargar, presionaremos el botón que nos dice: Descargar archivos y aplicar bloqueo de anuncios.


Si el proceso se realiza satisfactoriamente nos aparecerá un mensaje diciéndonos que el cambio fue realizado y que posiblemente sea necesario reiniciar el dispositivo. El proceso se puede deshacer siempre que queramos.



Muestras del antes y despues:

 


Espero que les sirva, para mi ha sido de muchísima utilidad pues me quito la molesta publicidad de las aplicaciones.

Saludos.