Mostrando entradas con la etiqueta scripting. Mostrar todas las entradas
Mostrando entradas con la etiqueta scripting. Mostrar todas las entradas

jueves, 22 de mayo de 2014

La informática que nos rodea

Cuando alguien me dice que va a estudiar informática me da algo de miedo porque creo que esa persona no sabe dónde se está metiendo. Ni siquiera creo que sepan lo que significa ese término. Es un mundo de inmensas posibilidades y no se puede tomar a la ligera.

Por cierto, que la gente suele decirme estas cosas del mismo modo que me dicen que han dejado de fumar; como si yo fuera la policía de la salud o un experto en informática. Cosas que no me considero en absoluto.

No me considero informático aunque haya hecho trabajos propios de un informático. Y puede que tenga más conocimientos de algún tema que algunos profesionales. Pero cada día hay novedades y cambios en este mundo y no estoy puesto en ellos, ni me intereso activamente por informarme de todo. Al margen de que es inabarcable y está lleno de incertidumbre sobre qué métodos son mejores para hacer según qué cosas.

Pero ahora mismo, en este artículo, quiero explicar en qué consiste "esto de los ordenadores" desde mi punto de vista "apasionado del software". Porque es cierto que no debemos dar la espalda a la informática o su evolución que sería el mundo de Internet, la Aldea Global; o lo que llaman las I.T. (Tecnologías de la Información). Y que aunque tengamos cierta habilidad adquirida puede que nos abrume tanta posibilidad, o el simple hecho de desconocer esas posibilidades.

No prestar suficiente atención a esto te convierte ya, hoy día, en un analfabeto.

A mi me empezó a enganchar la informática con menos de 10 años. Y por entonces ya programé en Basic en un cuaderno en los recreos (sin ordenador), y poco después algunas chicas me preguntaban, también en los recreos, si leía la biblia, porque tenía un pequeño libro muy gordo... que en realidad era un diccionario de términos informáticos de bolsillo. jajaja.

El caso es que a mí la informática nunca me atrajo como una profesión sino como una herramienta para crear contenidos, comunicarme con ella, divertirme y como un cosmos de exploración infinito.

Como yo, otras personas vieron en su día algunas posibilidades de la informática que les permitió ganarse la vida gracias a que también les gustó algún aspecto de la tecnología o los sistemas informáticos; bien sea el hardware como evolución de la electrónica, la programación, edición de contenidos, análisis de datos científicos, o algún otro uso divulgativo, literario, artístico o del mundo del entretenimiento.

Así que hubo un tiempo en que era suficiente con saber decir "ordenador" para tener trabajo. Ya que las aplicaciones de "esta tontería" son casi ilimitadas.

Pero ¿qué es un ordenador?

Un ordenador no es más que una serie de circuitos integrados o micro-chips conectados a varios periféricos con un sistema que permite al usuario dar órdenes y recibir respuesta a ellas.

Gracias a los programas estas órdenes pueden ser automatizadas para evitar tareas que de otro modo serían tediosas y rutinarias.

Pero las cosas no son tan maravillosas y sencillas como parece.

Un procesador, CPU, (o Unidad Central de Procesado) es un micro-chip que, como otros micro-chips con distintas funciones en el ordenador, recibe datos binarios y devuelve respuestas correspondientes según lo recibido, siendo capaz de realizar millones de cálculos y operaciones por segundo.

Toda pieza de hardware tiene micro-chips que reciben y envían datos binarios; Unos y ceros.

Por ejemplo, un teclado recibe las señales de cada pulsación y envía el código correspondiente en un estándard establecido para que el ordenador interprete qué teclas se están pulsando.

Las tarjetas gráficas tienen procesadores que reciben datos con ordenes para ser convertidas en señales de vídeo que se representan en el monitor.

Una impresora tiene un procesador que recibe señales para hacer mover sus mecanismos e imprimir en papel lo envíado.

El código binario de las máquinas es algo más que complicado para que las personas corrientes podamos comunicarnos con ellas al nivel más directo (bajo nivel). Además, cada fabricante, en ocasiones, inventa su propio juego de órdenes binarias para sus aparatos que luego han de ser "estandarizadas" con pequeños programas que podríamos llamar drivers, o controladores.

Y todo el hardware debe controlarse con programas. Pero hay tantas formas de programar como granos de arena en una playa, o modelos de iPhone.

Programación a Bajo Nivel:
La programación a bajo nivel está reservada a mentes superdotadas. No digo que haga falta ser un genio, pero podemos sacar de este grupo a políticos o tertulianos de TV y el mundo del "famoseo".

Programar a bajo nivel significa que das las instrucciones, no al sistema operativo (que se instala en un ordenador) sino directamente a los micro-chips que controlan el ordenador (o dispositivo).

El código máquina son órdenes en lenguaje que el procesador puede entender directamente sin necesidad de aplicaciones que hagan de interprete para hacer su tarea. De modo que las aplicaciones hechas a este nivel o en ensamblador, lenguaje (también de bajo nivel) un poco más "humano" que el código máquina pero igual de complicado, funcionan con más eficiencia y velocidad que otras aplicaciones hechas a otros niveles.

Lenguajes compilados:
Entre medio hay diversos lenguajes de programación, con distintos tipos de estructura, que pueden ser compilados, generando un programa similar a los que genera el ensamblador, para que el ordenador haga lo que se le pida. La mayoría de aplicaciones profesionales se hacen en estos lenguajes; usando C, C++, Java (aunque este lenguaje es una excepción, dentro de la categoría, ya que emplea un intérprete creando una máquina virtual que se comunica con el procesador, de modo que no es tan eficiente), etc.

Lenguajes de alto nivel / scripting:
Aunque se llamen de alto nivel, no son los lenguajes con los que puedas presumir de tener un "nivel alto" en informática; Aunque desde luego programar está muy por encima de eso que ponen algunos en su currículum de "Conocimientos medio-alto de informática a nivel usuario".

Para presumir aprende código máquina de varios tipos de procesador comunes en smartphones, tablets y aparatos raros que nadie entiende y entonces estaríamos hablando de un erudito. jejeje.

Estos lenguajes de programación usan un intérprete intermedio que adapta las órdendes para realizar las tareas ordenadas por el programa. Tiene la ventaja de que la sintaxis es más fácil de entender; al no estar compilado puedes ver cómo están hechos otros programas y aprender más fácilmente.

Además ofrecen una facilidad muy grande para interactuar con otros programas y por tanto crear aplicaciones más útiles y complejas.


Este es el tipo de lenguaje que conozco un poco. Y es también de los más utilizados para hacer algunas aplicaciones, incluso algunas bastante potentes. En ocasiones puede llegar a compilarse para no requerir intérprete pero nunca llegarán a funcionar tan bien como las programadas en lenguajes compilados o a bajo nivel.

En esta categoría están lenguajes como Python, Perl, PHP, REXX, ARexx, AppleScript, VBScript, Ruby, Lua, etc.

Conocer las peculiaridades de cada lenguaje se queda a vuestra curiosidad.

A mayor curiosidad mejor. Aunque podéis caer en un pozo sin fin. Porque, a menos que seais muy disciplinados, el tiempo que os puede robar la "informática" pueden ser eones.

No se deben despreciar tampoco los conocimientos en lenguajes de consulta de bases de datos como SQL y derivados. Puesto que en muchas ocasiones lo único que se hace en un ordenador es almacenar, crear, modificar y eliminar datos; Cosa que se hace muy eficientemente desde muchos de estos lenguajes de programación y pueden ahorrar reescribir aplicaciones que hacen las mismas cosas pero usan contenidos diferentes.
Temible
Código Máquina
/ Ensamblador
de ZX Spectrum

Esto es algo que aprendí gracias a PHP y pelearme con sistemas de contenido web que emplean bases de datos para todo.

Si quieres aprender a hacer páginas web, lo tienes muy sencillo y bien estructurado en lugares como http://www.w3schools.com/

Ahora bien, no le debes tener miedo al inglés. ¡Al menos no es código máquina! Eso sí que da miedo.

Scripting:
Abrir una consola y teclear órdenes en vez de hacer click en el icono de un complaciente entorno gráfico del sistema operativo (que probablemte abra un script ya programado) es también un modo más directo de hacer algunas cosas en el ordenador. Se puede programar una serie de órdenes mediante scripts que permiten automatizar todo tipo de tareas. En PCs con Windows se emplea DOS o cosas más avanzadas como Windows Powershell, mientras que en sistemas Linux o Mac lo suyo es el Bash scripting.

En móviles Android he visto que existe alguna implementación de Lua, Luarida. Que puede ser interesante para hacer cierta automatización de tareas. Y tímidos intentos de portar otros lenguajes de script. Y es posible acceder a la consola y usar Bash con algunas limitaciones, ya que es un sistema Linux con una máquina virtual integrada, a'lla Java.

Cualquiera de estos lenguajes no sirve para nada sin una cabeza abierta para la lógica, razonamiento, algunos cálculos matemáticos, bastante intuición o capacidad de concentración, y un montón de imaginación para hacer realidad cualquier cosa que te propongas.

Más en wikipedia:
Historia de la computación
Timeline of computing

Esto es muy largo. Si hay algún error o imprecisión o quieres comentar algo... cuéntamelo en un comentario (abajo).

jueves, 4 de julio de 2013

A saco con los kanji

Prólogo:

Anki es un famoso programa que ayuda a memorizar cualquier materia con una técnica de repaso espaciado. Básicamente ayuda a memorizar cosas más deprisa que medios convencionales. Ya que se gana tiempo al repasar más a menudo sólo aquellas cosas que olvidas con más frecuencia, dejando para más tarde lo que olvidas menos.

La memoria funciona de tal forma que cuando aprendes algo empiezas a olvidarlo; pero si justo antes de olvidarlo del todo lo vuelves a repasar tarda más en olvidarse, y si antes de olvidarlo de nuevo lo repasas y vuelves a repasar con este sistema, como unas 10 veces, es muy probable que ya no lo olvides nunca.

Actualmente tras un curso de octubre a junio, con clases semanales casi particulares de japonés con el libro de texto みんなの日本語, estoy de "vacaciones" y toca repasar lo aprendido. Además tras varias "paradas técnicas" estoy siguiendo con constancia el libro del Dr. Heisig, Marc Bernabé y Verónica Calafell "Kanji para Recordar 1" donde se puede lograr perder el miedo a los kanji y se aprende a reconocerlos de forma imaginativa.

Desde mayo llevo un buen ritmo el aprendizaje de los temidos jōyō kanji, o letras chinas de uso general en japonés, incluyendo el suplemento. Cada día aprendo 10 nuevos kanji y los agrego(¿cómo? más abajo lo explico.) a mi mazo de repaso en Anki.

Hay 2 formas de usar Anki para aprender idiomas: Lo que llaman el modo "Reconocimiento" y el modo "Producción".

El Reconocimiento consiste en ver algo en el idioma que estás aprendiendo, tratar de adivinar la traducción a tu idioma y ver si has acertado en el reverso de la nota (carta o flashcard) que se genera con Anki.

Heisig recomienda la segunda forma de usar Anki, que quizás es más dura al comienzo pero doy fe de que es mucho mejor. Aunque combinar un poco ambas técnicas no puede hacer daño cuando ya has madurado bastante el repaso.

El modo Producción con "Kanji para recordar", consiste en adivinar como es el dibujo del kanji viendo primero la "palabra clave" en tu idioma. Ya que lo que se aprende con Kpr1 no son exactamente traducciones a tu idioma sino una interpretación del significado más común para un kanji (que puede tener varios significados) o incluso algo totalmente inventado, que no tenga que ver con su significado habitual, y que puede venir bien para recordarlo y asociarlo como componente en otros kanji. Al tiempo que aprendes a dibujarlo con tu propia mano en el orden correcto de los trazos lo que también te ayuda a recordarlo con otro tipo de memoria; que no sea un simple reconoce, repite, y repasa.

ANKI:

Con el tiempo he ido aprendiendo de las muchas ventajas que tiene Anki. Aunque aún habrá cosas que no controlo.

Su principal ventaja es que puedes usarlo en el smartphone, tablet, el ordenador en cualquier sitio con acceso a la web ankiweb. Y sincronizar tu progreso en los distintos dispositivos.

Poco a poco le he ido sacando bastante partido.

Lo ideal para aprender algo con Anki es hacerse uno mismo el mazo conforme va aprendiendo lo que sea. Aquí tenéis un vídeo tutorial básico que hice sobre cómo hacer y actualizar un mazo.



Para los Kanji se pueden encontrar mazos compartidos de muchos métodos diferentes. Incluyendo el de Kanji para Recordar. Pero, como ya he dicho, es mejor hacerse uno el mazo conforme va aprendiendo, en el caso de este es más importante porque con el método de Heisig deben aprenderse en cierto orden y Anki sólo debe usarse para repasar los aprendidos.

Los mazos que he encontrado en castellano no incluyen los 196 nuevos kanji que le faltan a KpR1 desde la reforma de los jōyō kanji de 2010.

Me lié la manta a la cabeza y los adapté con ayuda del proyecto diccionario Kanjidic2 que es un texto en forma de "base de datos" XML que incluye kanjis, traducciones en distintos idiomas, número de trazos y distintos códigos de indices incluyendo los Heisig.

También requerí algún mazo en inglés y los fui adaptando más o menos.

Encontré algún término cambiado que se había corregido en KpR como "castigar" por "reprimenda" así que los arreglé. Pero puede haber alguna incosistencia más respecto al libro y suplemento.

Aún así la última edición a la venta todavía tiene alguna errata y seguramente cambiará el índice respecto a la futura edición que incluya el suplemento.

Un problema que me encuentro a menudo es que algunos kanji de los recientemente aprobados han cambiado de forma y casi siempre usan el mismo código Unicode lo que hace que no se vean como deben verse.

Por ahora el tipo de letra que yo conozco que más se acerca a tener todos bien es una fuente ttf llamada "Hiragino Mincho Pro" (enlaces abajo).

Para repasar el orden de los trazos es muy importante disponer del tipo de letra KanjiStrokeOrder (abajo enlace).

Sin embargo para que funcione en el móvil (uso Android, con Ankidroid) el archivo debe introducirse en la aplicación de escritorio (Windows, Linux, Mac) en la carpeta del usuario en la raiz de la carpeta de archivos multimedia compartida conocida como "collection.media/" (~/Anki/Usuario/collection.media/_KanjiStrokeOrders.ttf en linux, o algo parecido)

Además, según la plataforma es posible que haya que poner un guión bajo delante y corregir la plantilla de las tarjetas para que haga referencia a esa fuente para mostrar los kanji. Tal que así, en el apartado Estilo de los "Tipos de Tarjeta":

@font-face {
font-family: MiKanjiStrokeOrders;
font-style: normal;
font-weight: normal;
src: url('_KanjiStrokeOrders.ttf') format('truetype');
}

.jp {
font-family: miKanjiStrokeOrders;
}


.mobile .jp {
font-family: miKanjiStrokeOrders;
}

.mac .jp {
font-family: KanjiStrokeOrders;
}

.win .jp {
font-family: KanjiStrokeOrders;
}

.linux .jp {
font-family: KanjiStrokeOrders;
}




De este modo al sincronizar el contenido multimedia en el móvil se puede ver el tipo de letra con la fuente mostrando el orden de los trazos. Aunque ojo con el wifi/3G porque lo font ocupa unos 18MB.

En ocasiones me ha fallado al principio no mostrándose el kanji con la nueva font en el móvil. Pero se soluciona dándole a editar una nota y al grabarla o cancelar se ven todas ya.

El problema con los kanji que han cambiado de forma tiene más difícil solución. Este por ejemplo ahora tiene un trazo más:


Sólo cabe esperar a ver si se actualiza en más sitios y el autor de la fuente KanjiStrokeOrders lo actualiza también.


Hasta hace bien poco además de Anki usaba la web Kanji Koohii, donde hay una nutrida comunidad de usuarios que siguen alguna de las versiones de Kanji para Recordar en español, inglés, alemán, italiano... y comparten historias imaginativas para ayudar a la mnemotecnia. Pero existe un plugin para Anki (escritorio, mac, win, linux) que te permite importar tu progreso de la web de Kanji Koohii y hacer lo mismo que haces en esa web en el Anki, simplificando un poco el proceso cuando usas varios mazos de aprendizaje.

Todo esto no tiene ningún sentido si no sigues el libro de KpR1 pues los índices Heisig no tienen nada que ver con el orden en que están estructurados los exámenes y frecuencia de uso de los kanji. Heisig propone aprenderlos todos sin excepción. Saltándose la tediosa labor de aprender su lectura y los compuestos en principio, pero sirviendo de magníficos cimientos para enfrentarse a ello después.

Los mazos que se encuentran por Anki incluyen los kanji de los libros Kanji para Recordar 1 y "Remember the Kanji 3". Que parece ser, este tercer libro no saldrá en España, puesto que con la técnica de KpR se pueden aprender los casi 1000 de RtK3 y los cerca de 47.000 más de los kanji japoneses no tan habituales. (Por si alguien se lo pregunta aún, el libro "Kanji para Recordar II" enseña las lecturas y los compuestos de los jōyō.)


Así pues, me programé una serie de scripts que sirven para consultar las tablas de kanji jōyō y la que tiene los añadidos en 2010 y los ordena como deberían ser estudiados en el orden que propone Heisig según el suplemento.

De modo que, cuando aprendo 10 kanji, le digo el número de índice Heisig que va primero y se generan 10 (o los que quiera) en un archivo .csv que importó fácil y rápidamente en el mazo que tengo para los kanji recien aprendidos. Y que llegará a tener 2199 kanji allá por noviembre, si nada se tuerce.

Además como a partir de cierta lección los kanji sólo se ven en su forma de imprenta y a veces me confunde respecto a la forma manuscrita, para dibujarlos bien creé otro script que genera el número de hojas de 10 kanji que le pida, para tener para varios días  (con la fuente KanjiStokeOrders). Aunque por ejemplo la última lección del libro, he visto por anticipado que es preferible no disponer de esa forma para que seas tú mismo quien averigüe la forma manuscrita.


Para consultas puntuales me creé tres scripts accesibles mediante un atajo de teclado como las teclas F6, F7 y Shift+F7. Que muestran el kanji (y lo copian al clipboard para pegarlo donde quiera; muy útil para mirar un diccionario o hacer búsquedas) al que le corresponde un índice Heisig. O lo contrario, con F7, meto un kanji y me dice el índice Heisig. Y más divertido aún, personalizado y complejo, el script que arranco cuando pulso Shift-F7 me pregunta el kanji y me dice cuándo me toca estudiarlo, su palabra clave, número de trazos y una cantidad extra de información útil.



Además del mazo "Kanji Koohii" y el de mis clases basadas en Minna no nihongo, tengo un tercer mazo donde metía los que olvidaba cuando usaba la web de Kanji Koohii, porque en esa web me resultaba problemático que llegasen a acumularse kanji para reaprenderlos y nunca pulsaba que me habían resultado "olvidados / mal 1" sino que evitaba poner que habían sido "fáciles 3 (o 4 en Anki)", dejando como poco en "bien 2".


Los demás mazos los he descargado de la sección Shared Decks de Anki y sólo les hago algo de caso si tengo mucho tiempo libre. (casi nunca) Están para probar.

La versión de escritorio es necesaria para hacer labores de sincronización, estadísticas, etc más fácil. Aunque sería posible actualizar mazos y añadir flashcards (notas) desde la app móvil. Pero siempre es más fácil de automatizar todo con la versión de ordenador.


Enlaces:

Si alguien quiere importarse el mazo de 2199 kanji aquí va en formato .csv, incluyendo los campos separados por tabulación: 'kanji', 'palabra clave', 'historia' (campo vacío para añadir una historia mnemotécnica), 'número de trazos', e 'índice heisig'.


Puede haber imprecisiones, y alguna modificación mía, por ejemplo en el kanji de índice Heisig 940A pone la vieja forma del kanji en la 'palabra clave', cuya nueva forma es un código unicode diferente; tal que así: 'artículos de papelería (viejo: 箋)'.


Pero como lo ideal es crearse el mazo poco a poco: Aquí va mi script para crear un archivo CSV personalizado (casi me quedo sin cenar por adaptarlo para la Web ;))


  • Tipo de letra con kanji de estilo manuscrito con indicación del orden de los trazos: KanjiStokeOrders (última versión conocida v3.000 - 9MB comprimida en zip)
  • Tipo de letra con kanji de imprenta bastante completa. He convertido la que encontré a formato TTF que la hace compatible con Libreoffice y otros programas: Hiragino-mincho-pro-w3

Y eso es todo. Espero que sea de utilidad.
Cualquier duda preguntar e iré aclarando.

miércoles, 18 de abril de 2012

Automatiza como puedas

No me considero informático.

Aunque hacer uso avanzado de ordenadores te convierte en emigrante al que los paisanos toman por extranjero al encontrarse con ellos.  Nadie se cree ya que sigas siendo de "la tierra". Y tampoco los informáticos te consideran uno de los suyos. Lo triste es que hay informáticos que carecen de los conocimientos generales que yo sí tengo.

Eso no significa que yo sepa programar igual, ni (mucho menos) mejor que un informático. De modo que si estás pensando en aprender técnicas de mí, mejor búsca en otro sitio de la WWW.

Entre mis malas prácitcas están no practicar a menudo olvidando frecuentemente cosas básicas, no programar de forma modular, hacerlo casi siempre desde cero y para unas necesidades específicas del momento, sin pensar en usos futuros o ajenos, y sin usar apenas comentarios para revisar errores en el código posteriormente. Tampoco soy capaz de programar en lenguajes serios, como C o Java. Y, si veo Código Máquina me pasa como a investigadores de los años 30 cuando ven a Cthulhu, locura total.

Haber sido usuario de ordenadores Amiga, donde cualquier programa puede controlarse mediante puerto ARexx, dándole al Script una potencia inimaginable, es quizás la mayor base que tengo para programar lo que necesito.

No conozco nada que se le parezca a la potencia que ofrecía ARexx. En Windows he probado DCOM o DDE, timidamente. Mi experiencia en "scripting" me vino muy bien para programar webs en PHP. Y actualmente me peleo con DBus en Linux.

¿Programar? ¿Para qué?

Si algo me atrae del mundo de los ordenadores y, por extensión, la red de redes que es Internet, es por la sensación de ser un mundo infinito. Inabarcable. Lleno de posibilidades. Lo cual ofrece una sensación de libertad extrema.

Pero tanta libertad, como encontrarse en un mundo vacío sin suelo ni techo, puede ser angustiosa para mucha gente. De ahí que tener una filosofía de que Todo es posible y ser muy Tozudos es imprescindible para sacar provecho de los ordenadores.

Usar aplicaciones corrientes y una pequeña parte de sus opciones con menús y clicks de ratón no es lo más eficiente; y en ocasiones se vuelve aburrido.

Mis razones para programar scripts son lograr hacer tareas con más agilidad que de otro modo son tediosas a costa de trabajar quizás más que en el uso de la aplicacion con procedimientos normales.

En el post de hoy comentaré un pequeño script que quizás a alguien le sea de utilidad. Aunque ahora mismo vamos a descubrir otro de mis defectos en este mundillo: Hacer cosas que ya existen de otra manera. Reinventar la rueda.

Atajo para redimensionar una ventana.


Con Compiz Fusion bien configurado es posible redimensionar y reubicar una ventana pulsando atajos de teclado. Por ejemplo puede definirse Ctrl-Alt-8_de_teclado_numerico para dividir la ventana a la mitad vertical y colocarla arriba... y las demás teclas para redistribuirla en otras disposiciones.

Pero al probar Gnome 3 tuve problemas con la instalación de Compiz y de momento decidí no instalarlo. Pero esa función me parecía irrenunciable, así que me programé un sencillo script bash haciendo uso del comando wmctrl para hacer lo que se ve en el vídeo.


Desafortundamente un bug en mi versión de Gnome 3 en Debian Testing no me permite configurar las mismas teclas y debo alternar el botón Bloq-num del teclado númerico para que la sensación sea la misma que tengo con Compiz Fusion bajo Ubuntu 11.04.

Estudiando la sintaxis de wmctrl se podría modificar este script para mover ventanas a otro escritorio o monitor en caso de usar multiples.

En este caso he programado un único script llamado wincon.sh para las distintas opciones de ubicación de la ventana de acuerdo con mi resolución de pantalla actual (1920x1080) y he añadido los atajos en la parte de "Combinación personal" de la pestaña "Atajos" de la aplicación de configuración de "Teclado" (Keyboard, en inglés).



Programar en mi caso, y creo que en el de la mayoría, rara vez es algo inmediato que progresivamente se complete desde cero a estar completado sin desviarse del objetivo final y sin errores. El proceso es prueba-error, prueba-error, hasta que finalmente da un prueba-funciona. Lo que suele implicar que hay otros errores que en ese preciso momento no se detectan y han de ser corregidos tras haber dado el script por bueno.

~/scripts/wincon.sh (descargar)
#!/bin/bash
# $1 ... top | bottom | left | right | full | topleft | topright | bottomleft | bottomright


if [ "$1" == "top" ]
then
x=0; y=20; w=1920; h=510;
fi

if [ "$1" == "bottom" ]
then
x=0; y=530; w=1920; h=530;
fi

if [ "$1" == "left" ]
then
((x=0));((y=20));((w=940));((h=1020));
fi

if [ "$1" == "right" ]
then
x=950; y=20; w=970; h=1020;
fi

if [ "$1" == "full" ]
then
((x=0));((y=20));((w=1920));((h=1020));
fi

if [ "$1" == "topleft" ]
then
((x=0));((y=20));((w=940));((h=530));
fi

if [ "$1" == "bottomleft" ]
then
((x=0));((y=550));((w=940));((h=510));
fi

if [ "$1" == "topright" ]
then
((x=950));((y=20));((w=970));((h=510));
fi

if [ "$1" == "bottomright" ]
then
((x=950));((y=550));((w=970));((h=510));
fi

arg="0, "$x", "$y", "$w", "$h

wmctrl -r :ACTIVE: -e "$arg"


Tras guardar el script con tu editor de textos favorito (nano, gedit, vim, kate,...) ya está. Si la carpeta donde lo hemos guardado está en la variable de entorno $PATH bastará con llamarlo desde cualquier ventana de terminal o con el atajo de teclado apropiado, con wincon.sh más un argumento; Y si no está en $PATH incluyendo la trayectoria completa. Sin olvidar hacerlo ejecutable para el usuario con:

$ chmod +x wincon.sh


El $1 en Bash Scripting se traduce por el primer argumento pasado al script, de modo que $2 sería el segundo, $3 el tercero y así sucesivamente. Si deseamos obtener toda la cadena de argumentos se define en el script como $@. y para saber el número de argumentos introducidos podemos mirar en la variable del script $#.

Como es un script poco depurado, puede observarse distintas formas de definir variables en una misma línea.

Los condicionales "if then ... fi" y el comando final para ejecutar el programa wmctrl sobre la ventana activa son casi las únicas líneas del script.

En caso de no disponer del programa wmctrl seguramente podremos instalarlo con un

$ sudo apt-get install wmctrl

o con yum u otras aplicaciones del sistema similares.

En un próximo post explicaré algo más complejo que estoy programando para cambiar el wallpaper / fondo de pantalla periodicamente, vigilando si está en marcha el programa de música Banshee en cuyo caso usa su fondo de pantalla (según lo que está sonando) y otro script que permite modificarlo para casos en los que la imagen Cover-art que proporciona Banshee tenga poca definición; reemplazándola con otra de Google Imágenes. Y preguntando al usuario mediante el uso de YAD (yet another dialog), un "requester" muy versátil que permite hacer preguntas con botones, barras de progreso, imágenes, selectores de archivos y mil y una posibilidades.