Archivos Mensuales: junio 2011

[Phatch] Aplica acciones por lotes a tus fotografías

Hoy estuve buscando una forma “sencilla” de modificar un lote de imágenes (sea por selección o carpetas enteras y sub-carpetas), probando luego de diversos plugins de GIMP y hasta escribir scripts con Script-Fu; descubrí que hay una aplicación muy sencilla y de una interfaz muy amigable para realizar procesos por lotes en imágenes, su nombre:

Les voy a ser sinceros, no era para mí!, sino para mi esposa que buscaba una manera “sencilla y user-friendly” de emular los “Actions” de Photoshop en Linux.

La interfaz y la filosofía de Phatch (Photo Batch)

Para instalar phatch es tan sencillo como instalarlo desde tu repositorio favorito, confirmado que está ya para Ubuntu 10.04, Debian Wheezy y Fedora 14, podrán instalarlo vía:

aptitude install phatch

en Ubuntu, adicionalmente encontrarán un sub-sets de acciones ya predefinidas por los usuarios y un “enlace” al programa desde Nautilus.

La interfaz de Phatch es bastante sencilla, aunque algo “abstracta” para empezar:

 

Podemos presionar el ícono “+” y comenzar a crear nuestro set de acciones o en el menú “lista de acciones” seleccionamos “abrir librería” para abrir acciones predeterminadas.

Hay una larga lista de “Acciones” que podemos incluir a nuestro ActionList, desde escalar (re-dimensionar) hasta aplicar sombras, efectos, etc:

Entonces vas agregando las acciones que deseas aplicar a tu fotografía, ordenadas como quieres que se vayan aplicando, configurando las propiedades de cada acción; cuando has agregado la cantidad de acciones suficientes, quedará algo como esto:

La última acción siempre será “Guardar” (¿para qué creamos un set de efectos si no guardaremos las imágenes modificadas?), este permite por ejemplo, crear una sub-carpeta dentro de la carpeta, cambiar el nombre del archivo, definir el formato de salida (ejemplo: jpg, png, etc), resolución en píxeles por pulgada (ppp) (por defecto, 72ppp para la web).

Hay acciones como por ejemplo “Geek”, que permite ejecutar un comando externo (un proceso gimp-batch, imagemagick, etc), procesar o agregar etiquetas EXIF y hasta geoetiquetar con información GPS una foto.

Interesante es el hecho que Phatch no alterna las etiquetas e información EXIF, por lo que sirve para procesar en lotes imágenes que serán luego subidas a Flickr.

Más y más acciones

Lo interesante es la capacidad de Phatch de crear acciones y de compartir acciones, vía su scripting en python o vía compartir actionlists en su forma de scripting propia (archivos .phatch).

Pueden revisar la lista de acciones disponibles acá > http://photobatch.wikidot.com/actions

Y la documentación acá:

>http://photobatch.wikidot.com/

 

[La nota del día] Estadísticas de navegadores

Según las estadísticas de StatCounter, no solamente Internet Explorer va perdiendo terreno rápidamente como el navegador más popular, sino que además, los navegadores de fuente abierta (Firefox (mozilla-based), Chrome (chromium-based) y derivados) han sobrepasado juntos (49% del total de navegadores) a la suma total de las versiones de Microsoft Internet Explorer, con una cuota del 43% globalmente.

No solo Firefox 4 se convierte rápidamente (y en un par de meses solamente) en la versión más popular de Firefox (14.2% de usuarios totales mundiales) contra el 12.3 del resto de versiones de Firefox, sino que su lanzamiento hace apenas un par de meses eclipsa el crecimiento de Internet Explorer 9, que solo tiene un 4.6% del mercado global de navegadores.

Google Chrome 11 posee alrededor del 16%, siendo la versión de un navegador de mayor crecimiento hasta ahora.

“Con más de 200 millones de descargas, Firefox 4 eclipsa el lanzamiento de IE9”, indicó el CEO de StatCounter, Aodhan Cullen.

Android ha sobrepasado a Blackberry en las estadísticas mundiales de acceso a Internet, con un 16% del acceso versus un 14% de Blackberry, Nokia sigue siendo el líder de acceso a Internet a través de Symbian con un 30.7% del mercado, seguido de Apple iOS con 24.6%.

Cabe destacar (comenta Cullen) que Android a triplicado su cuota de mercado de acceso a Internet en solo 12 meses, pasando de 5.4% a 16%, en el mismo período, iOS ha caído de 33.9% a 24.6%.

Gráfico (cortesía StatCounter):

Fuente: StatCounter Global Stats – Browser Market Share

Las estadísticas para Venezuela también son bastante interesantes, con Internet Explorer en un 39% solamente, seguido de Google Chrome (y las diversas versiones, como Chromium) y Firefox con 29 y 28% respectivamente, para un total del 57%:

La gente se está decantando por software de fuente abierta, en este caso navegadores, que les resultan confiables, útiles, etc.

Hay que tomar en cuenta, que aunque Internet Explorer venga “imbuido” dentro de cada Windows (IE6 > WinXP, IE7 > WinVista, IE9 > Win7), que la gente “se tome la molestia” de descargar e instalar otro navegador y que además ese grupo de navegadores “libres y/o abiertos” sea mayor que los navegadores Microsoft, es un punto más para la comunidad del software libre y una demostración de “si el software sirve, la gente lo instalará, no importa si ya hay otro software ya instalado que haga lo mismo, pero peor” …

 

[Conocimiento Libre] Música y compartir …

Una persona hoy en el trabajo me preguntaba como un proyecto de software podía mantenerse con tantas personas de pensamientos distintos dando vueltas alrededor de él, esta persona, acostumbrada al desarrollo de aplicaciones usando ambientes propietarios como Visual Studio y .NET y entornos corporativos; parafraseando el coloquial dicho “muchas manos ponen el caldo morado” hablaba de que jamás podría entender como un desarrollo con mucha gente trabajando de manera colaborativa (software libre) pudiera ser mejor que algo con un líderazgo bien pagado, de marketing y mucho dinero invertido detrás (software privativo) …

Y se me ocurrió un símil que ahora quiero compartirlo con ustedes …

La música: compartir y colaboración

A la típica pregunta “¿Qué musica escuchas?” y a la más típica aún respuesta “De todo un poco”, le recordé cómo la música comercial funciona, pongamos por ejemplo, el Reggaeton, una música eminentemente comercial diseñada para “agradar a las masas” (al igual que el -software privativo-), sin más necesidad que satisfacer una masa ingente de personas que escuchan (-usan-) “lo que sea” y para sacarles algo de plata en discos (-CD-), conciertos (-licencias-) y marchandising (igual que las empresas de software privativo), y bueno, ¿cómo se hace una música comercial? …

Al igual que ese desarrollo “corporativo” con *casi todo* pre-construido y/o pre-hecho, cualquier persona puede montarse a hacer música (-software-), de hecho, una sola y única persona (casa de software) puede montarse en un sintetizador y ella sola tomar un par de loops, unos samples de alguna biblioteca comercial de samples de sonido, un par de beats rítmicos muy conocidos y aunado a un demente gritando sus ansias imperiosas de reproducirse sexualmente, obtendrás el siguiente producto **comercial**:

Tal vez sea (como siempre en las cosas comerciales que te las repiten una y otra vez a través de todos los vehículos de marketing) un exito rotundo, pero ¿es ESO música? …

Ahora, tomando el mismo “ejemplo”, con un líder asumiendo el control de todo (pero con muchísimas más experiencia y más herramientas experimentales a la mano) y dejando de lado el *único y comercial* sintetizador, para trabajar con consolas de audio profesionales, mezcladores y en colaboración con otros músicos, usando pianos, guitarras eléctricas, cuatro, maracas, arpas y claro, asumiendo el hecho que fué hecho hace más de 40 años (antes de que cualquiera pensara en “rock progresivo” o “música experimental” o comprara sintetizadores en tiendas CASIO); el compositor Venezolano Vytas Brenner sorprende con fusiones rock-folk músicales tan increíbles entre las cuales destacan por ejemplo “La Ofrenda de Vytas Brenner” donde le canta a parajes exóticos de Venezuela como Barlovento, Los Andes Venezolanos y “Morrocoy”:

Disfruten la colaboración de Pablo Manavelo en la guitarra eléctrica …

Y hablando de colaboración, se necesitó la colaboración y meses de ensayo (y años de preparación!) para que 50 jóvenes músicos de cuerda (empezando con 12 primeros violines), 30 músicos de madera y metales (y hasta un Xilófono y dos timbaleros) de la Orquesta Sinfónica Juvenil de Venezuela “Simón Bolivar” y obviamente la dirección magistral de Gustavo Dudamel para que la pieza “Mambo” de Leonard Bernstein suene así:

ESO si es música!, carajo! 🙂

¿Se dan cuenta, que las cosas que salen de la incansable y multitudinaria colaboración de los *muchos* son cada vez más extraordinarias?, ¿cómo la colaboración, aunque más ardua y difícil, produce los resultados más provechosos y agradables? …

Espero que comprendamos lo importante que es la colaboración y cómo el desarrollo colaborativo ha llevado al mundo por rumbos (Internet, Linux, BSD, GNU, Hardware abierto, conocimiento libre, etc) que jamás nos hubieramos imaginado …

[Linux] Guía rápida de Network bonding en Debian

Introducción

Esta guía no pretende ser guía definitiva ni tampoco ser ampliamente técnica, es más bien una forma de documentar “para los demás” algo que uno hace día tras día y aunque está profusamente documentado en Internet, es bueno repasarlo un poco.

De hecho, esta guía nace de tener que explicarle a los que trabajan en Redes de mi trabajo (¿O.o?) cómo se hacía un bonding y un bond en trunk contra una VLAN.

Espero les sirva a muchos, en especial a mi pana Mario Bilotti que la pidió expresamente.

¿Qué es un Bonding?

Ethernet Bonding o simplemente Bonding (enlazado) es cuando dos canales ethernet se juntan (enlazan) para crear un canal simple (obviamente más ancho). Esto se usa primariamente para redundancia en los paths ethernet al switch y también para balanceo de carga.

Hablando en criollo, cuando tienes dos o más interfaces físicas de red, puedes “enlazarlas” para crear una única interfaz que te permita ampliar el ancho de banda, mejorar la redundancia y acceso a la red y para lograr un balanceo de carga sobre una misma subred desde dos o más interfaces.

 Terminología:

  • * Esclava: interfaz conectada a un bonding
  • * Esclava primaria: interfaz esclava que se encuentra activa por defecto
  • * Balanceo de carga: permitir que una carga de transmisión sea distribuida entre dos o más canales ethernet
  • * Mac Address: dirección física de la interfaz de red

Tipos de Bonding

Active-Backup: una interfaz esclava del bonding es activa en todo momento, mientras la otra permanece en estado “pasivo”. Cuando la interfaz activa primaria falla, la otra interfaz toma la MAC Address y se convierte en la interfaz activa.

  • Provee: Tolerancia a fallos únicamente
  • Requiere: no requiere ningún soporte especial en el switch

Balance-RR (balance Round Robin): transmite paquetes de manera secuencial entre todos los esclavos disponibles.

  • Provee: balanceo de carga y tolerancia a fallos

Balance-Xor: Las transmisiones son balanceadas a través de las interfaces esclavas en modo Xor, es decir, el mismo esclavo es seleccionado para cada destino único MAC.

  • Provee: tolerancia a fallos y balanceo basado en el destino

Broadcast: Transmite toda la carga a través de todas las interfaces esclavas activas.

  • Provee: Tolerancia a fallos

802.3ad o modo 4: Modo IEEE Dynamic Link Aggregation, permite gestionar el balanceo, la velocidad y el duplex de la interfaz, pero requiere que el módulo del kernel y el switch lo soporten.

  • Provee: Balanceo de Carga
  • Requiere: Soporte a 802.3ad en el Switch

balance-TLB (Adaptative Transmit Load-Balance): Es transmitido de acuerdo a la actual carga de las interfaces; el tráfico que recibes es gestionado por una única interfaz esclava activa, el tráfico de salida es enviado a través de el resto de las interfaces esclavas, determinado por la carga activa de cada interfaz.

  • Provee: Balanceo de Carga distribuido
  • Requiere: no requiere ningún soporte en el switch

balance-ALB (Adaptative Load-Balancing): provee ambos modos de balanceo de carga (recepción y emisión) para IPv4 a través de negociación ARP.

  • Provee: Balanceo de Carga distribuido
  • Requiere: no requiere nada especial en el switch, pero el módulo del kernel debe soportar cambio de Mac Address en caliente (mientras la interfaz esté abierta).

 Configurando el bonding en Debian Squeeze

Debemos primero, instalar lo necesario:

apt-get install vlan ifenslave-2.6

Y agregamos los módulos a /etc/modules:

  • 8021q
  • bonding

802.1q es el módulo de trunk/vlan y el otro es el módulo de bonding.

Configurando el módulo del kernel

creamos el archivo /etc/modprobe.d/bonding.conf

Y agregamos:

options bonding mode=active-backup miimon=100 downdelay=200 updelay=200 primary=eth0

Las opciones son:

  • mode: el modo, corresponde al modo de bonding explicado más arriba
  • downdelay: la cantidad de milisegundos que espera antes de declarar una interfaz “caída” y asumir el control la otra interfaz
  • updelay: cantidad de milisegundos que espera antes de declarar una interfaz arriba (*)
  • miimon: tiempo de monitoreo del enlace (Link) de la interfaz, en milisegundos
  • primary: qué interfaz es la primaria

(*) esto es debido a que algunas interfaces tardan más tiempo que otras en declarar que están activas y enlazadas.

De requerir más de un bond, agregamos al /etc/modprobe.d/bonding.conf:

options bonding max_bonds=2
alias bond0 bonding
options bond0 -o bond0 mode=balance-rr miimon=100
alias bond1 bonding
options bond1 -o bond1 mode=balance-xor miimon=50 

 Donde max_bonds corresponde a la cantidad máxima de bonds que se crearán (con los nombres bond0, bond1, etc)

Luego de configurado (a nivel de módulo del kernel) el módulo bonding, procedemos a configurar las interfaces bond en:

/etc/network/interfaces

auto bond0
iface bond0 inet static
address xxx.xxx.xxx.xxx
netmask 255.255.255.0
network xxx.xxx.xxx.0
broadcast xxx.xxx.xxx.255
gateway xxx.xxx.xxx.1
slaves eth0 eth1
bond_mode active-backup
bond_miimon 100
bond_downdelay 150

Y reiniciamos el servicio de red:

/etc/init.d/networking restart

También podemos configurar manualmente sin necesidad de de editar el network/interfaces del equipo, para ello:

* cargamos el módulo:

modprobe bonding mode=0 miimon=100

* Apagamos las interfaces que deseamos configurar en bond:

ifconfig eth0 down
ifconfig eth1 down
ifconfig eth2 down

* Configuramos la interfaz bond0

ifconfig bond0 hw ether 00:11:22:33:44:55
ifconfig bond0 10.1.1.3 netmask 255.255.255.0

Luego, indicamos cuales interfaces serán esclavas con el comando ifenslave:

ifenslave bond0 eth1
ifenslave bond0 eth0
ifenslave bond0 eth2

Y por último, encendemos la interfaz bond0:

ifconfig bond0 up

Y listo.

Nota: también podemos gestionar la incorporación o remoción de interfaces esclavas de un bond interactuando con el módulo del kernel:

# incorporando eth0 al bond0

echo +eth0 > /sys/class/net/bond0/bonding/slaves

# desincorporando eth0 del bond0

echo -eth0 > /sys/class/net/bond0/bonding/slaves

 Configurando un Bond en una VLAN

Queremos hacer que el bond0 participe de una VLAN, en mi caso, la VLAN 16; configuraremos el network/interfaces para que esta interfaz pueda participar (usando vconfig) conectada a la VLAN 16.

Abrimos el /etc/network/interfaces y configuramos manualmente el bond0:

auto bond0
iface bond0 inet manual
up ifconfig bond0 0.0.0.0 up
slaves eth0 eth1

Y configuramos la interfaz bond0.v16 como objetivo a la VLAN 16:

auto bond0.v16
iface bond0.v16 inet static
address xxx.xxx.xxx.xxx
netmask 255.xxx.xxx.xxx
network xxx.xxx.xxx.0
gateway xxx.xxx.xxx.1
broadcast xxx.xxx.xxx.255
vlan-raw-device bond0
pre-up /sbin/vconfig add bond0 16
down /sbin/vconfig rem bond0.v16
hwaddress ether 00:AB:AB:01:00:03
 

Donde hwaddress es la dirección MAC de la interfaz primaria del bond0.

Pruebas

Podemos chequear el estado de un bond ejecutando:

cat /proc/net/bonding/bond0

Además, podemos probar los distintos modos apagando (ifconfig *iface* down) las interfaces esclavas del bond para chequear su comportamiento.

 

Espero les sea útil esta guía …!

Referencias:

[La nota del día] Linux en la supercomputación global

Durante la conferencia de supercomputación que se realiza en Hamburgo, el Instituto de Ciencias Computacionales Avanzadas de Japón (RIKEN) ha presentado la “Fujitsu K“, la supercomputadora más potente del mundo, es tan potente que cuadruplica la potencia de su predecesora en el Top 500 y su potencia absoluta es igual a la suma de las anteriores 5 computadoras del Top 500.

Y como no comentarlo en este blog, usa Linux!.

¿Qué es la supercomputadora K?

La supercomputadora K consta de 672 servidores con 68.544 procesadores de 8 cores para un total de 548.352 núcleos de tipo Fujitsu SPARC64 VIIIfx pudiendo procesar 8162 cuatrillones de cálculos por segundo; está refrigerada por agua, tiene su propio sistema de interconexión balanceado (llamado Tofu interconnect system) y es además, la supercomputadora más energéticamente eficiente jamás construida.

Para 2012 se incorporará el resto de los racks (es que aún no está completa!) para convertirla en el líder de las supercomputadoras mundiales, se la usará para cómputos especializados, análisis climáticos, evaluación y simulación de terremotos y modelado de proteínas.

Reportes aún no confirmados indican que el Fujitsu K será usado eventualmente por el ITER (consorcio internacional de fusión nuclear, creado por Francia, Reino Unido, Japón, USA y Corea del Sur) con el fin de adelantar los cálculos para el desarrollo del Reactor de Fusión ITER a ser construido en Francia y que debería estar operativo antes del 2019.

Es un proyecto que desde el 2006 es financiado públicamente por el Ministerio de Ciencia, Tecnología, Cultura y deportes de Japón (el MEXT) y que forma para del proyecto bandera de Japón de asumir públicamente este tipo de proyectos para el futuro de la humanidad.

El nombre K viene de la palabra japonesa “Kei” que significa “peta” (o 10^16) que es lo que soportará (10 petaflops) cuando esté operativo en Noviembre de 2012.

El símbolo que representa el proyecto, es el Hiragana de “Kei”:

¿Cómo vamos?

Hasta el momento Linux es el lider arrollador y absoluto de las supercomputadoras a nivel mundial, con un 91% del entorno:

455 de todas las 500 supercomputadoras de la lista están en este momento corriendo alguna versión de Linux (incluyendo la Fujitsu K, que usa una versión modificada de Linux Debian Sparc64)

Hablando de nubes y clusters, ¿sabían que el cluster del buscador de Microsoft Bing usa Linux?

Apple ICloud: La innovación por negación sumisa …

Es innegable que Apple ha sabido “venderse bien” y generar una tribu de “Apple-Fans boys” que son capaces de hablar de Apple hasta en un artículo sobre el Tsunami de Japón, también es ultra-conocido que la gente se deja “seducir” por la famosa manzanita del pecado, pero leer ingentes cantidades de blogs, artículos noticiosos y demás re-tweets del twitter, todos como borregos “embobados” pregontando las bondades y maravillas de la innovación tecnológica de la tecnología “iCloud” rayan en el más grande de los absurdos …

Simplemente la gente dice “Wow!, mira que increíble *gadget-aplicación-juguete-artilúgio mágico* se han inventado los de Apple”, luego, tu replicas “epale!, eso lleva inventado más de 3 años”, te miran con cara de impío y vuelven a decir “Wow!, mira que increíble …” como para tratar de convencer a aquella parte del cerebro que agarró dudas luego de tu afirmación …

¿Qué es ICloud?, explicado con otras tecnologías existentes

Apple Icloud es una gran nube de integración de sistemas (Amazon EC2, Google Apps), donde la gente a través de esa única nube comparte un único login-password (Google Account) para compartir entre equipos contactos (Google Contacts), Pagar en todos lados (PayPal, Google Checkout), sincronizar documentos de Oficina (Google Docs, Documents To-Go), Imágenes (Picasa, Flickr), con tus contactos integrados a Facebook (Android Contacts y Google Contacts), con tus favoritos sincronizados (Google Bookmarks), Libros (Amazon y Google Books) y que *ahora sí por fin* vas a pagar una sola vez por una aplicación (serían pendejos los usuarios Apple que compraron 3 veces Angry Birds para Iphone, Ipad y IMac).

Todo disponible únicamente para tu Iphone (Android), tu iPad (tambien android) y tu PC MacOSX (emmm, ¿puedo abrir Google en cualquier sistema operativo?).

Lo triste de todo esto es que mientras Google (que lleva años teniendo una nube propia) todos sus servicios (incluso los básicos para empresas) son gratis, acá hay que pagar hasta para poder entrar …

Yo con mi cuenta Google tengo desde 2004 y disfrutando gratis de Google Apps para mi empresa desde hace aproximadamente 2 años ¿En qué agujero extraño viven los Apple Fan-Boys para decir que todo lo que hay en la ICloud es “novedoso”?

DRM En la Nube …

Lo único que si es realmente novedoso es como las empresas y transnacionales te inyectan sus formas de violarte derechos básicos y fundamentales sin que te des cuenta y lo peor del caso es que lo “aplaudes” con aínco y fuerza …

Con “iTunes en la Nube”, la gente cargará su música a la gran Nube, Apple alega que “podrá ser pirata o no”, lo que ellos no te dicen (viene en letricas pequeñas) es que te irán sustituyendo de tu propia colección musical, paulatinamente, tus canciones “mp3 sacaditas del disco pirata de Roque Valero” por unas protegidas contra Copia, DRM-Ready únicamente usables entre tus propios dispositivos Apple (¿pensaban acaso que podrían bajarse esa canción de iTunes y hacerla sonar en el Mp5 chino que te compraste en Sabana Grande?).

Se supone que “para que te quedes contento con que te borren tus archivos propios y te pongan los protegidos contra copia DRM-Ready”, la versión que copiarán en tu colección será de 256k de bitrate.

¿Alguien le puede explicar esta flagrante violación de tus derechos fundamentales a un Apple Fan-Boy o estoy perdiendo el tiempo? …

Ciertamente, si estos pantalones los publicitara el propio Steve Jobs, veríamos a muchos con ellos en la calle:

Por cierto, yo llevo más de 3 años con una Tablet, mucho más de lo que existe el iPad, ¿cual fué la innovación? …

[GIMP] Renace el plugin: Resynthetizer

Esta es una de esas “historias tristes” que tienen un final feliz, El Plugin Resynthetizer que tantas esperanzas forjó dentro de GIMP (desde hace más de 8 años) pero que perdió a su desarrollador y estuvo abandonado desde 2002, ha ganado un nuevo desarrollador.

¿Qué es el plugin Resynthetizer?

Más de 4 años antes que a Adobe Photoshop se le **ocurriera** crear el plugin “Healing Brush” o el “Tampón curador”, el profesor Paul Francis Harrison a partir de un proyecto de investigación desarrolla el plugin, como una forma de “matemáticamente descubrir las zonas aledañas a un conjunto de píxeles y ecualizarlas”, dicho de otro modo, permite re-emplazar selectivamente una parte de la imagen por otras, o sintetizar texturas y apariencias a partir de otras selecciones.

Este plugin incluso se proyectó para incluirlo en el core de Gimp, pero el abandono del proyecto y de sus mantenedores causó que se le perdiera interés.

El “nuevo y mejorado” Resynthetizer

Lloyd Konneker ha sido el encargado de “resucitar” el plugin, le hacambiado el nombre a las versiones e incorporado un par de opciones nuevas, lo ha re-escrito el código en C puro, re-escrito toda la API de Python+Script-FU que hace uso del mismo y otras tantas mejoras, correcciones de bugs y demás.

Pueden obtener el código fuente del plugin acá > https://github.com/bootchk/resynthesizer

Obteniendo, compilando, instalando

Para obtener el plugin lo mejor es tener instalado el cliente de GIT, los binarios de compilación (en Debian: build-essential) y los paquetes devel de GIMP 2.0; para ello instalamos:

aptitude install git-core build-essential libgimp2.0-dev

Luego, descargamos el fuente:

git clone https://github.com/bootchk/resynthesizer.git

Y procedemos a compilar el paquete:

cd resynthetizer
./autogen.sh
./configure --prefix=/usr
make CFLAGS=-03
make install

Esto instalará el plugin en /usr/lib/gimp/2.0/plug-ins/

Usando Resynthetizer

Encontré un video de la *vieja* versión de Resynthetizer:

[vimeo http://vimeo.com/10532622]

La actual versión incorpora:

  • Resynthetizer Engine: nueva versión del motor de resynthetizer
  • Resynthetizer GUI: para gestionar el plugin

Y una serie de nuevos “Filtros” de script-fu que usan el engine resynthetizer:

  • Filtros > Mejoras [enhance] > Enlarge & Sharpen
  • Filtros > Mejoras [enhance] > Heal Selection (como el “patch plugin” de Photoshop)
  • Filtros > Mejoras [enhance] > Heal Transparency (corrige fallos de patch plugin alrededor de transparencias)
  • Filtros > Mejoras [enhance] > Sharpen by Synthesis
  • Filtros > Mejoras [enhance] > Uncrop
  • Filtros > Mapa > Resynthetize
  • Filtros > Mapa > Style
  • Filtros > Renderizado > Texture
  • Menú Edición > Fill with synthetize texture

A diferencia de la herramienta “Saneado”; que solamente toma “una muestra” y la aplica en otra sección, la herramienta realmente “resintetiza” la textura, acomodándola a los pixeles de alrededor, manteniendo el equilibrio de color y contraste.

¿Algún ejemplo?

En una acción de “un minuto” tomé una foto de mi querida amiga Tatica (@tatadbb) y mi pana Richzendy (@richzendy) y al buen estilo de Tatica y su excelentes Gimp-Podcast hice una versión, el antes y el después de Richzendy sin pecas:

Foto Original:

Foto mejorada con Resynthetizer: eliminadas pecas, la gran peca del mentón de Rich, algunos lunares y reducidas las líneas de expresión:


Pues mejor que Nivea Visage! 😉

Espero ver a Tatica creando un Gimp-podcast a partir del plugin Resynthetizer y de las amplias posibilidades que ella como diseñadora le encontrará …

¿Qué pasa cuando unes Gimp y un VCS?

Todos los que alguna vez (o en este momento) se dedican al diseño gráfico, se encuentran con que la mayoría de las aplicaciones (desde Adobe Photoshop hasta Gimp) poseen un sistema de control de historia común y corriente a cualquier tipo de aplicación, atrás, adelante, hacer, deshacer, cuando mucho historias no-lineales, etc.

Pero ¿qué pasa cuándo unes una filosofía de programación con el trabajo de los diseñadores gráficos? … pues nace una nueva forma de trabajar en GIMP.

¿Qué es un VCS?

Para un programador no es un concepto nuevo, VCS significa Version Control System y se refiere a la forma como almacenamos el código, como parte de del control de cambios, gestión de flujo de trabajo, revisiones y versiones; como VCS en software libre tenemos proyectos como subversion, GIT, Mercurial o Bazaar.

¿Por qué GIMP?

Si, hay un desarrollador Microsoft en el equipo, ¿y qué?, en el software privativo no puedes echar mano del código fuente para “hackear” el sistema a tus necesidades, creo que este “Hack” de GIMP para soportar VCS es “una razón más” para darnos cuenta de lo útil y provechoso para todos que es liberar el código fuente de nuestras aplicaciones.

Nonlinear Revision Control for Images

El proyecto “Control de versiones No-lineal para imágenes” es un proyecto de doctorado de dos alumnos de la Universidad Tsing Hua de Taiwan, apoyados por el profesor Li Yi Wei (que a su vez trabajó en Nvidia y en Microsoft Research); fué expuesto en el “Summer Of Code” del SIGGRAPH 2011 (la conferencia mundial sobre diseño gráfico) usando GIMP como aplicación donde desarrollaron la teoría.

¿Qué permite?

TODO lo que podrías imaginarte en un sistema de control de versiones:

  • Branch: llevar dos o más versiones “paralelas” de una misma imagen
  • diff: permitir evaluar diferencias de dos o más “revisiones” y evaluar posibles parches de “diferencias”
  • merge: Fusionar dos versiones diferentes de una misma imagen, integrando los cambios de ambas versiones
  • Selective Replay and Undo: Me ha sorprendido la capacidad de hacer “re-commit” o re-aplicar los cambios hechos a una sección específica de la imagen (ejemplo: colorear o aplicar un filtro) con solamente seleccionar e indicar “replay” de manera selectiva.
  • Retornar a cualquier estado previo o posterior y obtener diffs de cada estado para crear nuevas “ramas” o versiones de desarrollo.

Alguna Demo?

Pues el video no tiene desperdicio:

Conclusiones

Luego de leer que GIMP en la versión 2.8 volvería a la forma “one window”, que traería la posibilidad de agrupar Layers (capas), grabación de “macros” (a lo Actions de Adobe Photoshop) y que el plugin “resintetizer” que tanto fué imitado y explotado por Photoshop ha vuelto a “renacer” y trae grandes mejoras, con esto, me quito el sombrero ante el proyecto GIMP.

Espero que los desarrolladores incorporen rápido estas características para sacar el máximo potencial a GIMP.

[Linux] Instalando Debian Wheezy a una Lemote Yeeloong

Ya hace algún tiempo había creado un artículo donde explicaba como montar Debian Squeeze a una Lemote Yeeloong (portatil china con arquitectura MIPSEL).

http://phenobarbital.gnu.org.ve/doku.php/weyu:lemote:yeeloong

Lemote Yeeloong

Lemote Yeeloong

El equipo tenía Debian Squeeze, pero tenía el inconveniente de que corría en modo VESA (pues un bug del driver siliconmotion y del Xserver-xorg hacían imposible correrla en otro modo); en marzo del 2011 me enteré que habían corregido ese fallo para la última versión de X.org (1.7+ que está en Debian Wheezy) y que además paquetes como el kernel loongson-2F (el Microprocesador de la Lemote Yeeloong) y el grub para la yeeloong (grub-yeeloong) habían sido incorporados a Debian Wheezy …

Asi que, ¡Manos a la obra! …

Pasos previos

Es ALTAMENTE recomendable actualizar el BIOS a la versión 1.4.9a como lo indico en mi wiki > http://phenobarbital.gnu.org.ve/doku.php/weyu:lemote:yeeloong.

ADVERTENCIA: haga la actualización del BIOS bajo respaldo energético, una pérdida de energía durante el proceso puede dejarlo sin computador …

La versión 1.4.9a (revisión a) incorpora una serie de mejoras, como por ejemplo, poder “arrancar” directamente desde el pendrive (USB) y una mejora más que notable en el arranque del initrd (que baja de minutos, a solo segundos), se puede *personalizar* el boot splash del BIOS entre otras cosillas (revisar Wiki).

Preparando el pendrive

Usaremos un USB para instalar el equipo, en mi caso, un viejo pendrive de 256 Mb fué más que suficiente), formateamos el pendrive en EXT2, partición activa primaria y en él vamos a copiar los siguientes archivos:

El Kernel (Linux-Libre lemote)

http://archive.gnewsense.org/gnewsense-metad/installer/current/mipsel/loongson/netboot/vmlinuz-2.6.35.8-libre2-lemote

Renombrenlo simplemente a “vmlinuz” al copiarlo al pendrive.

El initrd:

http://d-i.debian.org/daily-images/mipsel/daily/malta/netboot/initrd.gz

Y bajense el archivo “rescue” para que tengan una forma de iniciar un busybox desde el pendrive:

http://dev.lemote.com/files/binary/system/v1.1.2/rescue

Tendríamos entonces los siguientes archivos:

  • vmlinuz
  • initrd
  • rescue

Ahora, creamos un “archivo de arranque” en el pendrive (para no tener que iniciar nosotros mismos, con el fatídico “SUPR+SUPR+SUPR+SUPR+ hasta que sale el prompt del BIOS PMON):

Creamos un archivo “boot.cfg” en la raíz del pendrive con la siguiente información:

default 0
timeout 3
showmenu 1

title Instalar Debian Wheezy Lemote
kernel	(usb0,0)/vmlinuz
initrd  (usb0,0)/initrd.gz
args    console=tty no_auto_cmd matchtype=lemote-yeeloong-2f-8.9inches

title   Consola de recuperacion
kernel	(usb0,0)/rescue
args    console=tty no_auto_cmd matchtype=lemote-yeeloong-2f-8.9inches

title  Iniciar desde el disco duro
kernel (wd0,0)/vmlinux-2.6.38-2-loongson-2f
args console=tty no_auto_cmd root=/dev/sda5 rootdelay=8 matchtype=lemote-yeeloong-2f-8.9inches

Esto nos permitirá tener tres opciones de menú, la primera, el arranque del Instalador (Netinstall) de Debian, la segundo, un “modo de rescate” con una busybox mínima en caso de fallas y la última, un modo para poder arrancar desde el disco duro ya instalado.

Nota: hay que asumir las rutas de los discos duros, como yo “separo” root de boot y pongo a root en la partición extendida, su numeración es “sda5”, pero si root es primaria (la segunda después de boot) sería sda2, si boot  y root quedan juntos, root será igual a sda1.

NOTA: si desean instalar desde una ISO netinstall, deben descargarla y copiarla al pendrive, de lo contrario, se conectará a Internet para descargarse todos los paquetes.

Al tener el pendrive listo, procedemos a “reiniciar”.

Instalación de Debian Wheezy

La instalación ocurre como cualquier otra, las opciones iniciales:

  • Idioma: Español
  • País: Venezuela
  • Teclado: Latinoamericano
  • Desea continuar sin cargar los módulos de núcleo? Respuesta: Si
  • Configurar red?: Si
  • Mirror de red: Estados Unidos > ftp.us.debian.org (o el que escojan, que tenga arquitectura MIPSEL)
  • Nos dirá que no cuenta con módulos LVM ni RAID, presionar “Si” y continuar.
  • Particionado: boot (hda1) de 256 MB-ext2 primaria y activa, root(hda2) de 10Gb tipo ext3 tipo lógica , (partición extendida: home(hda4) ext4 del resto del espacio, swap (hda5) de 2Gb)
  • Tasksel: Sistema Estándar y Equipo portátil
  • No se ha encontrado un kernel, desea continuar sin instalar un kernel? respuesta: Si

Adicionalmente, ha determinado que no encontró o no se instaló un gestor de arranque, por lo que debemos iniciar “manualmente” al finalizar la instalación.-

Primer arranque del sistema

Al reiniciar el instalador, lo primero que debemos hacer es presionar múltiples veces la tecla SUPR (DEL) hasta caer en el prompt (cónsola) del BIOS PMON,

PMON>

Al caer allí, ejecutamos:

dir (wd0,0)

Verán el contenido de la carpeta “/boot”.

Ejecuten para cargar el kernel Linux:

load (wd0,0)/vmlinux-2.6.38-2-loongson-2f

Y luego, indicamos que deseamos cargar DESDE el disco duro:

g console=tty root=/dev/sda5 no_auto_cmd rootdelay=8

O también pueden escoger la opción que para tal fin agregué al boot.cfg del pendrive que dice “Arrancar por el disco Duro”.

En ambos modos, terminaremos con una consola en un sistema básico.

Lo primero, configurar los repositorios:

/etc/apt/source.list

# repositorio oficial
deb http://ftp.us.debian.org/debian/ wheezy main
deb-src http://ftp.us.debian.org/debian/ wheezy main

# repositorios lemote loongson2f
deb http://www.anheng.com.cn/loongson2f/wheezy/ ./ main

Nota: el repositorio oficial “chino” a veces tiene problemas de alcance (se la pasa muchas veces caído), utilicen un repositorio “copia” más cercano como:

deb http://apt.vds-host.org/anheng/wheezy/ ./ main contrib

Definan la prioridad de los repositorios:

vim.tiny /etc/apt/preferences.d/anheng

Package: *
Pin: release o=Debian
Pin-Priority: 1

Package: *
Pin: origin www.anheng.com.cn
Pin-Priority: 2000

Package: *
Pin: origin apt.vds-host.org
Pin-Priority: 2000

Ejecuten la actualización del apt:

apt-get update

Y ya estamos listos para empezar a instalar aplicaciones.

Configuración de Entorno Gráfico

Instalamos los siguientes paquetes:

apt-get install xserver-common xserver-xorg-core xserver-xorg-video-siliconmotion

Luego de instalados, configuramos las X, creamos los archivos:

/usr/share/X11/xorg.conf.d/10-device.conf

Section "Device"
        Identifier      "Configured Video Device"
        Driver          "siliconmotion"
        Option          "HWCursor"       "true"
        Option          "VideoKey"       "45000"
        Option          "UseBIOS"        "false"
        Option          "PanelSize"      "1024x600"
        Option     	"pci_burst"      "true"
        Option          "AccelMethod"    "UXA"
        Option          "MonitorLayout" "CRT,LFP"
        Option          "DevicePresence" "true"
EndSection

/usr/share/X11/xorg.conf.d/20-screen.conf

Section "Monitor"
        Identifier      "Configured Monitor"
        Option          "DPMS"
        HorizSync    	30-70      #30-85
        VertRefresh  	50-80      #40-75
        DisplaySize     197 117   # 1024x600  130 dpi
        gamma 1.0
	modeline     	"1024x600@59.9" 49.00  1024 1072 1168 1312  600 603 613 624 -hsync +vsync
EndSection
Section "Screen"
        Identifier      "Default Screen Section"
        Monitor         "Configured Monitor"
        DefaultDepth    16                           # or 24
        SubSection "Display"
		Viewport   0 0
                Virtual   1024 600
		Depth     16
		Modes   "1024x600@60" "1024x600@54" "1024x768@60" "800x600@60"
	EndSubSection
        SubSection "Display"
		Viewport   0 0
                Virtual   1024 600
		Depth     24
		Modes   "1024x600@60" "1024x600@54" "1024x768@60" "800x600@60"
	EndSubSection
EndSection

/usr/share/X11/xorg.conf.d/30-serverflags.conf

Section "Extensions"
        Option "Composite" "Enable"
        Option "RENDER" "Enable"
        Option "DAMAGE" "Enable"
EndSection

Section "ServerFlags"
        Option  "AllowGLXWithComposite" "true"
        Option  "XAANoOffscreenPixmaps" "true"
        Option  "AddARGBGLXVisuals"     "True"
        Option  "RandR"                 "on"
        Option  "RENDER"                "on"
        Option  "AIGLX"                 "True"
        Option  "GlxVisuals"            "all"
        Option  "AutoAddDevices"        "True"
        Option  "AutoEnableDevices"     "True"
        Option  "AllowEmptyInput"       "False"
	Option  "NoPM"  		"true"
EndSection

Acerca de la configuración de video

El driver siliconmotion no es un driver muy potente, de hecho, si desean un máximo performance para las actividades cotidianas (abrir ventanas, etc), el modo recomendado es:

  • Modo: XAA
  • Resolución: 16 bits

Instalando el entorno de escritorio

Ejecutamos:

mkfontdir /var/lib/defoma/x-ttcidfont-conf.d/dirs/TrueType

E instalamos:

aptitude install mesa-utils libgl1-mesa-glx

E instalamos un entorno de escritorio, por ser gnome tan pesado, me he decidido por slim con lxde:

aptitude install lxde slim desktop-base

Generar el arranque

Instalamos grub-yeeloong:

aptitude install grub-yeeloong

Y luego, creamos un archivo /boot/boot.cfg

default 0
timeout 3
showmenu 1

title Boot with Grub
        kernel (wd0,0)/grub.elf
        args console=tty no_auto_cmd

title GNU/Linux Debian Wheezy 2.6.38 Lemote
        kernel vmlinux-2.6.38-2-loongson-2f
        args console=tty root=/dev/sda5 no_auto_cmd matchtype=8.9 acpi=force apic vga=792 video=siliconmotion:1024x600

Tome nota, que si colocamos “showmenu” en 0 y timeout en 1, no mostrará menú de arranque PMON y caerá directamente en el grub de Debian.

Editamos las flags de GRUB (/etc/default/grub):

GRUB_CMDLINE_LINUX=”console=tty root=/dev/sda5 resume=/dev/sda6 splash  no_auto_cmd matchtype=8.9 acpi=force apic lapic idebus=66 vga=792 video=siliconmotion:1024×600″
 

Nota: root=”” apunta a root (/) de nuestro sistema, resume=”” apunta a la partición SWAP.

Actualizamos grub:

update-grub

Y reiniciamos el equipo.

Aplicaciones de usuario

Como sabrán, el entorno de escritorio por defecto en Debian es GNOME y la mayoría de los meta-paquetes vienen orientados en ese aspecto, así que instalé por mi parte LXDE, SLIM y entonces, queda por instalar aplicaciones, en este capítulo, usaré desde aptitude la instalación de tareas de tasksel:

aptitude install ~t^laptop ~t^desktop

La primera instalará network-manager y el resto de aplicaciones (como acpid) para portátiles, la segunda, las aplicaciones de escritorio comunes como LibreOffice, Iceweasel, gimp, totem, gnash, etc.

Optimizaciones varias

Prelink, Preload, Readahead 

Prelink, preload y readahead, insserv, son 4 aplicaciones que mejoran notablemente el performance general del equipo:

Prelink: Modifica las librerías, para que carguen más rápido (pre-binding)

Preload: Carga en RAM las aplicaciones y librerías más usadas, para un inicio más rápido.

Readahead-Fedora,Insserv: Re-organizan los servicios para mejorar el arranque inicial del equipo.

Instalamos:

aptitude install prelink preload readahead-fedora insserv

Editamos:

vim.tiny /etc/default/readahead-fedora

Cambiamos:

# enable readahead at system startup

READAHEAD=”yes”

Y descomentamos y modificamos el IO:

IO_PRIORITY=”real-time”

Editamos:

vim.tiny /etc/default/prelink 

Modificamos:

PRELINKING=yes

 Luego, ejecutamos:

prelink --all

Para que haga un análisis de todos los ejecutables y librerías (puede tardar unos minutos).

Luego, editamos:

vim.tiny /etc/init.d/rc

Y cambiamos el nivel de concurrency a:

CONCURRENCY=makefile

Modificaciones del Sysctl

Sysctl permite cambiar dinámicamente opciones del sistema (en general), de módulos y del kernel en sí mismo, las opciones a habilitar tienen que ver con la reducción del impacto general sobre la memoria virtual del kernel, la reducción de uso de SWAP, entre otras.

vim.tiny /etc/sysctl.conf
# —-
#disminuir el uso de swap
vm.swappiness=1

 

#shared buffers
kernel.shmmni = 4096
kernel.shmall = 536870912
kernel.shmmax = 2147483648

 

#cantidad de hilos maximos
kernel.threads-max = 98006

 

#cantidad de archivos máximos abiertos
fs.file-max = 307615
fs.aio-max-nr = 1048576

 

# frecuencia de flush del demonio writeback
vm.dirty_background_ratio = 10
# porcentaje de RAM que será usada para memoria paginada (dirty memory)
vm.dirty_ratio=25
# para equipos con poca RAM, se usará solamente el 40% de la RAM como cache
vm.vfs_cache_pressure = 40
# wine, qemu y otras aplicaciones, requieren mapear Low-memory
vm.mmap_min_addr=4096
# una aplicacion no podrá usar más de 4096Kb de memoria baja
# Habilitamos el schedule autogroup y su velocidad de respuesta
kernel.sched_autogroup_enabled=1
kernel.sched_rt_runtime_us = 960000
# —

* ejecutamos:

sysctl -p

Para aplicar los cambios.

Performance del Disco

Instalamos hdparm

aptitude install hdparm

Luego de mejorar el performance de los sistemas de archivos, habilitamos 2 cosas importantes al disco duro:

hdparm -W1 -A1 /dev/sda

-W1 habilita el caché del disco duro

agregamos la siguiente información al /etc/hdparm.conf

/dev/sda {
lookahead = on
write_cache = on
}

Y ejecutamos con el comando, para que se active:

hdparm -q -W1 -A1 /dev/sda

CGROUPS

Es una técnica del Kernel Linux para aislar, solapar, limitar o contabilizar todos los recursos hardware de la máquina (CPU, Memoria RAM, Disk I/O) en forma de contenedores de procesos aislados, con el fin de mejorar la eficiencia del kernel Linux, al paralelizar de manera óptima los procesos.

Esta técnica permite priorizar tareas y organizarlas jerárquicamente por criterios definidos, mejorando notablemente el performance general del sistema.

Instalaramos lo que necesitamos para administrarlos en GNU/Linux (> 2.6.38)

aptitude install cgroup-bin libcgroup1 libpam-cgroup

* editamos el archivo cgconfig e indicamos donde se encuentra la ruta donde se montarán los CGROUPS:

vim.tiny /etc/cgconfig.conf

En Debian esa ruta es:

/sys/fs/cgroup/

Quedando:

mount {
all = /sys/fs/cgroup;
}

Editamos el cgrules:

vim.tiny /etc/cgrules.conf

Y creamos un grupo “especial”, llamado default, donde se agregarán los procesos de todos los usuarios (procesos no de sistema):

* * default/

Editamos:

vim.tiny /etc/pam.d/common-session

Y agregamos el pam_cgroup, esto con el fin de que las tareas de usuario, sean agrupadas y gestionadas por el control CGROUP:

session optional pam_cgroup.so

libpam-cgroup clasifica los trabajos interactivos que implican inicio de sesión.

Inittab

Reducimos las consolas TTY al mínimo (cada cónsola consume recursos):

Editamos: /etc/inittab y comentamos:

1:2345:respawn:/sbin/getty 38400 tty1
2:23:respawn:/sbin/getty 38400 tty2
#3:23:respawn:/sbin/getty 38400 tty3
#4:23:respawn:/sbin/getty 38400 tty4
#5:23:respawn:/sbin/getty 38400 tty5
#6:23:respawn:/sbin/getty 38400 tty6

Dejando solo las 2 primeras.

Luego de todos los cambios, reiniciamos el equipo.

Limpieza General

Eliminé los siguientes paquetes (no los necesito en mi portatil de escritorio)

aptitude purge rpcbind portmap exim4 exim4-base exim4-config exim4-daemon-light

Limpiamos la caché del aptitude

aptitude clean

Instalamos localepurge y deborphan

aptitude install localepurge deborphan

Y limpiamos paquetería innecesaria con deborphan:

aptitude purge `deborphan` `deborphan --find-config` `deborphan --libdevel` `deborphan --guess-all`

TODO:

* Instalar la temática Canaima

* Hacer un kernel tunning extra-personalizado y monolítico para la Lemote Yeeloong

* Hacer que el driver siliconmotion pueda dar direct-rendering sin usar Software

* Mejorar el rendimiento general del sistema y las flags del filesystem según > https://phenobarbital.wordpress.com/2011/05/13/linux-debiancanaima-en-soneview-n110-mini-laptop-classmate/

 

* Hacer mediciones de benchmark y performance

Ver más:

http://phenobarbital.gnu.org.ve/doku.php/weyu:lemote:yeeloong

http://wiki.debian.org/DebianYeeloong/HowTo/Install

http://romanrm.ru/en/loongson/debian

A %d blogueros les gusta esto: