PowerShell renombrado de ficheros

Para la expresión regular use la aplicación web txt2re

Se aplico a este formato de nombre de fichero :

Fullmetal Alchemist Shinsetsu – 30 [10A879D9]

Pero es ampliable a varios subconjuntos de corchetes

Fullmetal Alchemist Shinsetsu – 30 [10A879D9] [hola]

La información para el comando la tienes en un caso de HowToGeek

Con esto eliminamos los corchetes de todos los ficheros , ya que realiza el for-each automáticamente.

dir | rename-item -NewName {$_.name -replace ‘\[.*?\]’,”}

Recodificar pistas de audio con FFMPEG

Actualmente tengo un chromecast y el sonido en AC3 y  DTS esta soportado.

¿Pero de que manera ? Usando passthrough , así que si tu TV no es decodifica te quedas sin sonido.

Solución:

La opción más eficiente es re-codificar las pistas de audio a AAC , pero esto tiene un coste , el fichero queda estructurado de forma ineficiente para streaming. En este punto hubo que pasarse por la documentación de matroska, no sabia nada de esto , así que a mover neuronas un poco. Vamos  re-codificamos con FFMEG y optimizamos los ficheros para streaming con herramientas de matroska.

Vamos a re-codificar

Con el FFMPEG generaremos un fichero nuevo con todas sus pistas en las mismas posiciones y  las de audio procesadas , el resto (vídeo y subtítulos ) copiadas. Por si en un futuro tengo un equipo de audio con varios canales he preferido resamplear la pista de AAC a Dolby Prologic II en vez de mantener pistas y añadir nuevas. Esto es una elección personal , máxima información en el menor espacio posible

Para el resampleado utilicé esta web:

-af “aresample=matrix_encoding=dplii”

Mapeo de pistas, utilicé la wiki oficial

  • -map 0  Seleciona todas las pistas
  • -c:v copy  Copia las pista de vídeo sin codificar
  • -c:a aac    Codifica las pistas de audio en AAC
  • -c:s copy   Copia las pistas de subtitulos

Comando de ejemplo:

for %x in (*.mkv) do ( ffmpeg.exe -i “%~x” -map 0 -c:v copy -c:a aac -af “aresample=matrix_encoding=dplii” -c:s copy “%~nx[AAC].mkv”)

Nota: el sistema de nombres “%~nx” devuelve el nombre sin extensión

Para asegurar el rendimiento en streaming utilizo la herramienta mkclean para estructurar el fichero de forma optima. Mas info en la estructura del mkv y de la herramienta

Comando de ejemplo:

for %x in (*.mkv) do ( mkclean.exe –optimize “%~x” )

Nota: optimize lleva dos guiones  “- – “

Ejemplos:

for %x in (*.mkv) do ( ffmpeg.exe -i “%~x” -map 0 -c:v copy -c:a aac -af “aresample=matrix_encoding=dplii” -c:s copy “%~nx_ENC.mkv”)

 

 

 

Ubuntu y Python

Entrar en consola e instalar:
sudo apt-get install python-pip (paquete para instalar modulos de python)
sudo pip install -I Django==1.5 (instalar el paquete django)
sudo apt-get install apache2
sudo apt-get install mysql-server
sudo apt-get install phpmyadmin
sudo pip install mysql-python

Error:: linux mysql-server can’t find mysql_config

sudo apt-get install libmysqlclient-dev

Error: Python.h: No such file or directory
sudo apt-get install python2.7-dev
sudo apt-get install python-virtualenv

Para crear proyectos debemos de seguir los siguientes pasos:
Pasos en consola linux:
virtualenv dj14
./dj14/bin/pip install django
./dj14/bin/pip install django-registration
./dj14/bin/pip install mysql-python
./dj14/bin/pip install flup
./dj14/bin/pip install django-debug-toolbar
./dj14/bin/pip install South

sudo apt-get install python-setuptools python-dev build-essential python-mysqldb python-tz python-imaging
/dj14/bin/pip install pil

sudo apt-get install python-mysqldb

/dj14/bin/python manage.py syncdb
~/dj14/bin/python manage.py migrate

Pasos en consola Windos:
virtualenv dj14
.\dj14\Scripts\pip install django
.\dj14\Scripts\pip install django-registration
.\dj14\Scripts\pip install mysql-python
.\dj14\Scripts\pip install flup
.\dj14\Scripts\pip install django-debug-toolbar
.\dj14\Scripts\pip install South
Instalar la librería pil descargándola de: http://www.pythonware.com/products/pil/
Instalar la librería mysql-python de: http://sourceforge.net/projects/mysql-python/files/latest/download
.\dj14\Scripts\python manage.py syncdb
.\dj14\Scripts\python manage.py migrate

Instalación de Virtualmin con FTP chroot

Estos días he estado preparando un servidor con Virtualmin. Va a ser mi laboratorio de pruebas , webmin y yo somos amigos desde hace muchos años y esta evolución me ha empezado ser interesante. Me estoy haciendo profesional y muchas tareas las puedes hacer a mano o con interfaz web así que  en vez de picar scripts  estoy aprendiendo a usar esta interfaz sobre una Ubuntu 12.04.2 LTS.

La Instalación de Virtualmin con FTP chroot es sencilla siempre que cumplas con la lista de SO compatibles , cosa que no hice en primera instancia  y toco formatear todo y volver a empezar.

Manual de referencia para la instalación fácil , con script.

Tras el típico siguiente siguiente que deberíamos de leer , viene la parte de como quieres que este configurado tu virtualmin A base de preguntas sobre módulos adicionales los habilitas y estableces como deben de comportarse:

  • mail
  • antivirus
  • DNS

Principalmente  la opción más importante  es subirlos memoria ram para que vayan más rápido , si tienes ram de sobra lo podrás hacer sino  ajo y agua. Yo trabajo sobre 2 GB de RAM y lo he subido todo a memoria.

Ahora con la instalación de Virtualmin con FTP chroot debemos configurar lo. Desde el modo sencillo , busquemos las opciones en la interfaz que nos permitan dar seguridad a nuestros usuarios.

No es de recibo que un usuario con ftp pueda ver todas las cuentas registradas en el servidor , hay que “enjaularlo” , es un proceso muy sencillo y nativo en sistemas NIX* . Se llama “chroot” , cambio de raiz ,  ahora necesitamos que los usuario tengan como raiz su directorio home. De esta forma no podrán desplazarse un nivel inferior y ver las cuentas del servidor.

Esto que parece algo importante y que siempre debemos de hacer resulta extremadamente sencillo , Virtualmin lo tiene implementado de forma gráfica y con apenas un par de click , así que  no tienes sentido no hacerlo.

Instrucciones:

En nuestro panel de administración de Virtualmin desplegamos el menú “Limits and Validation” , en la ultima opción “$chroot_title” marcamos la opción que deseemos para los servidores que queramos y listo.

Fuentes:

Documentación oficial ProFTPd

 

ZTE MonteCarlo modificar la MAC

zte montecarlo

Para este proceso necesitas tenerla apuntada anteriormente.

Nota: Este post se escribió tras los comentarios en la entrada  Skate (ZTE) volver al estado de fábrica

Truco:

[box type=”info”] Si no la tienes puedes tirar de los logs del DHCP del router donde la puedes obtener.[/box]

Necesitamos modificar un fichero del sistema operativo.

Es necesario ser root o poseer los privilegios en zte montecarlo

Instrucciones:

  • Con la ROM nueva necesitamos ser root  y utilizar una aplicación de explorador de ficheros , yo he utilizado  ES File explorer.
  • Para estas aplicaciones debemos de activar su modo root
  • Editamos el fichero: system/etc/nv_4319.txt
  • Localizamos la linea “macadress=…”
  • Modificamos … por  “Nuestra_MAC”

Fuentes:

HTC Mania – PainKiller

GPT – Regenerar backup

GPT ese gran desconocido

 

[box type=”info”] GPT o Tabla de partición GUID [/box]

Lo primero una introducción para el que ha llegado aquí sin saber lo que buscaba , vamos como yo hace unos días.

Los discos duros poseen un tabla de particiones , antiguamente referenciado por el MBR , ahora es algo más complejo  para dar cabida al sistema EFI y a las grandes capacidades de almacenamiento. Yo lo descubrí por comprarme un disco de 3TB . Sigue existiendo el MBR para proporciona retrocompatibilidad.

GPT esquema

Después de meses utilizando el disco decido redimensionar las particiones  y me encuentro con un error al arrancar el  GParted.

[box type=”warning”] ¡ dios voy a perder todos los datos ![/box]

Puff , he tenido suerte  , GPT utiliza dos tablas particiones , una de copia de seguridad. Pues no se como pero me he quedado sin backup  , esta corrupto.

La solución pasa por reconstruir el backup en base  de la tabla primaria.  La verdad es que suena como algo “super técnico” , pero solo necesitamos la primera piedra.

Nuestro punto de inicio es la aplicación gdisik  , según el man  un manipulador de tablas GPT.

 gdisk /dev/sdXX
Command (? for help): ?
b	back up GPT data to a file
c	change a partitions name
d	delete a partition
i	show detailed information on a partition
l	list known partition types
n	add a new partition
o	create a new empty GUID partition table (GPT)
p	print the partition table
q	quit without saving changes
r	recovery and transformation options (experts only)
s	sort partitions
t	change a partition's type code
v	verify disk
w	write table to disk and exit
x	extra functionality (experts only)
?	print this menu

Command (? for help): r

Recovery/transformation command (? for help): ?
b	use backup GPT header (rebuilding main)
c	load backup partition table from disk (rebuilding main)
d	use main GPT header (rebuilding backup)
e	load main partition table from disk (rebuilding backup)
f	load MBR and build fresh GPT from it
g	convert GPT into MBR and exit
h	make hybrid MBR
i	show detailed information on a partition
l	load partition data from a backup file
m	return to main menu
o	print protective MBR data
p	print the partition table
q	quit without saving changes
t	transform BSD disklabel partition
v	verify disk
w	write table to disk and exit
x	extra functionality (experts only)
?	print this menu

Recovery/transformation command (? for help): d

Utilizamos la  “?” para ver el menú , seleccionamos:

r    recovery and transformation options (experts only)

volvemos a utilizar la  “?” para ver el menú y seleccionamos:

d    use main GPT header (rebuilding backup)

 

Fuentes:

Tabla de particiones GUID

Gdisk – reparaciones de GPT

optimizar Ext4 con fstab

Optimizar Ext4

filesystem

Toca dar un poco de vidilla a esos discos duros que tengo en modo almacenamiento de diógenes. Hay que especificar que esta parametrización la utilizo para discos duro de almacenamiento y el sistema /tmp en RAM. No se debe de utilizar para otros fines.

Un poco de teoría , eso lo tenemos en  la explicación del man del fstab  o en FSTAB de ArchLinux. Aquí podemos leer el porque de cada uno de los parámetro que utilizo , y alguno más  que a lo mejor os puede hacer falta.

Los primero es quitar el defaults ,  es un poco de estorbo ya que con user son dos super parámetros, esto sengloban variso y luego colisionan. Yo prefiero ponerlos de uno en uno  cuando sea posible.

Editamos el /etc/fstab

localizamos nuestro dispositivo (mediante UUID , si no hemos sido buenos chicos dejando los comentarios bien puestos)

Esto es como lo tengo ahora (fijaros en el comentario ;) ):

#Cosas1         /dev/sdb1
UUID=a13e4ab5-5979-4451-b093-69af9ae9761d       /media/series   ext4    rw,user,suid,dev,exec,auto,async,noatime,nofail,data=writeback,nobh     0       0

 

Ahora paso a paso ver lo que he puesto para optimizar ext4

rw,user,suid,dev,exec,auto,async,noatime,nofail,data=writeback,nobh     0       0

 

Listado de parámetros utilizados

  •  rw: Lectura y escritura
  • user: Permite a un usuario  montar el dispositivo
  • suid:  Ejecuciones con elevaciones de privilegios para los usuarios
  • exec: Permite ejecutar binarios
  • auto: Se monta automáticamente al inicio y con el parámetro
  • async: Escritura asíncrona de datos en el disco
  • noatime: No registra modificaciones  en el diario para ficheros y directorios
  • nofail: Si el dispositivo no existe no emite fallo y continua el proceso
  • data=writeback: Especifica escritura rápida para los metadatos , al estilo de XFS
  • nobh: Es necesario habilitar el writeback primero. Esto no lo entiendo así que os dejo el enlace: Optimizar Ext4 y Ext3

Ahora actualizaremos el tipo de registro diario a “writeback”

tune2fs -o journal_data_writeback /dev/sdXX

Ya hemos acabado con los parámetros de montajes , ahora hagamos un poco de “tune” en los sistemas de ficheros.

Esto son tareas más regulares de mantenimiento , todas empiezan igual

HAY QUE DESMONTAR LOS SISTEMAS DE FICHEROS ,

después ya ejecutamos los comandos.

e2fsck -f -D /dev/sdXX

Fuentes:

Optimizar Ext4 y Ext3

FSTAB

Optimización de sistemas de archivos ext3 y ext4

Expresiones regulares JS

Pon expresiones regulares en tu vida

Tras unos días con Expresiones regulares terminas viendo patrones , si como si fuera matrix , pero en horizontal he resumido un detalle de código. Es un anota para la próxima vez que me vea con ello pueda saber un poco por donde empezar .

Lo primero es indicar la función principal , en este caso es la búsqueda y la sustitución de dicha búsqueda en todo el texto de entrada por un “Delimitador”.

Lo segundo es traducir a lenguaje natural el “churro” de la expresión regular. Buscamos el patrón :
“, Letras mayúscula y un igual”

Siguiendo con las partes he de indicar que en JS hay una función de remplazado , pero esta necesita retocar la expresión con los operadores de indica sustitución o sustitución global , como es este caso “/g”


var separador = "|";
if(typeof(Delimitador) != "undefined"){ separador = Delimitador; }

if (texto == “”) {
Response = “failure”
} else {
var expresion = /, ([A-Za-z]*=)/g;
var texto_procesado = texto.replace(expresion,Delimitador + “$1”);
Result = texto_procesado;
Response = “Success”;
}

Después de revisar el código un par de veces desgranemos las Expresiones regulares usando esta como ejemplo. Es requisito tenerla encapsulada entre “/” , primordial , la “g” como dijimos antes es requisito de la función de remplazo . Ahora la explicación en pasos de dentro a fuera:

[A-Za-z]*
Los corchetes define una palabra que posea mayúsculas y minúscula, numero indeterminado de letras en mayúsculas y/o minúsculas.

([A-Za-z]*=)
Los paréntesis define la palabra anterior y que este seguida sin espacion de un signo de igual , “=”

, ([A-Za-z]*=)

Si hay un espacio en blanco porque yo buscaba dicho espacio al inicio , así que forma parte del patrón.

Con esto y un bizcocho tenemos un ejemplo para entender un poco las expresiones regulares y sobre todo para utilizarlas en JS

Fuentes:

Regular Expression (Objeto de JavaScript)

RegExp (Objeto de JavaScript)

Replace (Objeto String)

Natillas al Microndas

Natillas al microondas con un toque personal.

Pues si , hoy toca recuperar la receta materna de las natillas. Los complementos típicos son la galleta maría encima , pero realmente son MUCHAS galletas lo que es más divertido.

Ingredientes

Cucharada sopera de mantequilla/margarina

  • 1/2 Litro de leche

  • 2 Cucharadas maizena/Sobre de natillas

  • 2 Huevos

  • 4 Cucharadas Azucar

  • Canela en rama

Procedimiento:

  1. Derretir la mantequilla  en el microondas

  2. Mezclar los ingredientes con la mantequilla

  3. Repetir cada 2 minutos Ciclo “Microondas – batir manualmente”

  4. Al final meter batidora , si es necesario


natillas por Luis Puente

Loop y Codex WordPress

Loop ordenado

Hoy he tenido que modificar el orden en el que muestra los datos un Loop. Es bastante sencillo cuando entiendes su funcionamiento. Recopilo los recursos que he utilizado y las dos forma de estructurar el código para obtener el mismo efecto.

[box] En WordPress el Loop es toda una institución , posee un serie de objetos en la API para abstraerte de las consultas SQL.[/box]

Lo más correcto es utilizar WP_Query

El código esta generado mediante arrays , este contiene todos los parámetros de la búsqueda que queremos realizar. Desde el Codex podéis ver todos los parámetros implementados , estos son solo los tipos posibles de parámetros que posee esta fantástica API

[box]

[/box]

 

Siempre puedes usar la técnica antigua , generar una cadena  con la consulta  SQL

Para este caso se concatenan los parámetros separados por “&”

 

La mezcla en este caso no es una mejora.

Puedes tener que modificar un Loop realizado con arrays , puedes obtener la consulta final y concatenar parámetros. Esto es una GUARRADA ,  si funciona pero crear un array para la búsqueda y poder entender el código después no tienen precio.

En mi caso trabajo , siempre que puedo , con temas hijos , así que regenero la plantilla casi por completo. Coges el código antiguo y lo modificas siguiendo las reglas de estilos de WordPress.

Recursos:

He buscado un poco por internet para realizar esta tarea  y he encontrado una persona con más experiencia que yo  , explicando perfectamente los tipos de código que nos podemos encontrar en los Loop.

Post: Editando el “loop” de WordPress