eSpeak

eSpeak en Ubuntu 16 (y otros ambientes)

Yo renombraría esta utilería como “e-Speak”, un apócope de “Electronic Speak” porque para nosotros los castellanohablantes nos suena como un “espanglish“, pero bueno, así se llamaeSpeak” (así nos confunda) ¿Y qué hace este software? Pues simplemente nos “habla” el texto que querramos y es especialmente útil para añadir ayuda auditiva para los discapacitados visuales en nuestros programas. La imagen de los labios la he sacado de su propio sitio web, el programa es de los años 90 y las gráficas se necesitaban así, ligeras y toscas (por extensión a la licencia imagino la imagen será de dominio público, en todo caso siempre enlazamos dando crédito de autoría). Acá haremos unas simples líneas de comando (nosotros siempre usando solo la venta terminal ¡cuándo no es pascua en diciembre!) así que disfrutad de nuestra primera entrada de agosto de 2017.

eSpeak
eSpeak (página web)

Instalación.

Como reza el título estamos en un ambiente Ubuntu 16 así que las instrucciones serán para esta popular distribución (para Fedora seguid el enlace de las fuentes consultadas al final de este artículo). Abrimos una ventana terminal CTRL+ALT+T y tipeamos lo siguiente:

sudo apt-get install espeak
apt-get install espeak
apt-get install espeak

Una vez hayáis introducido vuestra contraseña y esperar que se descarguen los archivos de internet pues tendremos instalada nuestra nueva utilidad de deletreo. Probad, como todos los programas que por defecto vienen en idioma inglés, con el parámetro ” –help” para visualizar la ayuda disponible; leed y analizad antes de pasar al siguiente punto, las voces instaladas.

Otros sistemas operativos.

Lo bueno del software libre es que como tiene acceso al código fuente, podréis instalarlo vosotros mismos (con los ajustes y correcciones necesarios) en varios ambientes. En su repositorio en GitHub hay instrucciones detalladas al respecto para Windows, Mac, BSD y Android.

Voces instaladas.

Si nosotros hablaramos inglés, pues al diablo, todo sería más fácil, pero como hablamos “spanish” (¿habrá alguna aplicación que se llame “eSpanish“? 😉 ) procedemos a buscar las voces en nuestro idioma, mirad la figura:

espeak --voices | grep "spanish"
espeak --voices | grep "spanish"
espeak –voices | grep “spanish”

Acá vemos las dos letras claves son las del principio “es”, investigando más a fondo listamos las voces correspondientes al castellano:

espeak --voices="es"
espeak –voices=”es”

Ya vemos las voces disponibles para nuestro idioma pero en la documentación advierten que muchos idiomas son experimentales, así que solo esperad la perfección de Dios solamente, nosotros pobres mortales somos imperfectos (pero buscando siempre la excelencia).

Usando “eSpeak”.

La voz que vamos a utilizar entonces es “venezuala-mbrola-1” (para los angloparlantes el nombre de nuestro país es difícil de pronunciar, por eso lo escriben mal allí arriba en la opción, para ellos es “vene -pausa- zuuuuu-Ela”) así que podemos, por ejemplo, dar la siguiente orden en un guion para que nos avise que finalizó el proceso solicitado:

echo "Respaldo completado" | espeak -v es-vz

Así mismo podemos grabarlo en un archivo con la extensión .wav con el parámetro nemotécnico “-w“:

echo "Respaldo completado" | espeak -v es-vz -w respaldo_completado.wav

Otro uso es leer un archivo de texto que tengamos para ayudar a nuestros usuarios, pues “eSpeak” lo lee por nostros con el parámetro “-f” seguido del nombre del fichero:

espeak -f archivo.txt -v es-vz

Por último, si queremos que cada minuto nos de la hora de nuestro sistema, en castellano, lanzad lo siguiente:

while true; do date +%S | grep '00' && date +%H:%M | espeak -v es-vz; sleep 1; done

Si la voz “venezuala” está instalada, oiréis la hora en castellano y si es demasiado robotizada podemos jugar con los parámetros de amplitud, tono, etcétera, acá un ejemplo, experimentad vosotros mismos con otras cifras:

while true; do date +%S | grep '00' && date +%H:%M | espeak -v es-vz -s 160 -a 100 -g 4; sleep 1; done

Uso práctico.

Se nos ocurre que podemos agregar un trabajo por fecha “cron-job” para que revise un registro .log (archivos de texto con la extension .log) para que revise las últimas 10 líneas (valor por defecto de tail) y si encuentra un error nos advierta de manera auditiva:

tail -1F /tu/fichero/log | grep --line-buffered 'ERROR' | espeak  -v es-vz

Conclusión.

Ya no hay excusas para no ayudar a nuestros compatriotas discapacitados visualmente e incluso nos ayudamos nosotros mismos con recordatorios, podemos agregarlo a una aplicación o simplemente agregar una tarea programada para que ejecute un guion de un fichero donde agreguemos las cosas que queremos recordar ¿Qué os parece?

Fuentes consultadas:

En idioma inglés:

@ObiJuan_cube

Bien merecido galardón O’Reilly para @ObiJuan_cube González

Cuando tuvimos que actualizar nuestros conocimientos sobre Diseño Asistido por Computadora (CAD) nuestra experiencia era limitada y amarrada al software privativo Autocad® y como estamos decididos a ser libres nos decantamos por Freecad para realizar nuestro trabajo. Comenzamos así nuestro aprendizaje, que sobre el tema abunda en internet pero quien de inmediato llamó nuestra atención por su trabajo estructurado y paciente fue  “ObiJuan” González y su Escuela de Padawan’s “CloneWars”. Por ello cuando tuvimos noticias de que se le había otorgado el premio de Google llamado O’Reilly Open Source Award en reconocimiento a su labor (aunque es tonto de nuestra parte) nos contentamos en sumo grado y de que no solamente el Software Libre esté en tan alto nivel en España sino que también el HARDWARE LIBRE está surgiendo en América tutelado por (a pocas personas llamamos por su título, y por sus títulos menos) el Ingeniero y Doctor Juan González Gómez.

 

Premio “O’Reilly 2017 Open Source Awards”

El jueves 11 de mayo en Austin (Estados Unidos), durante la celebración del congreso mundial OSCON, fue entregado el premio O’Reilly 2017. Fueron creados en el año 2005 por Tim O’Reilly y hasta el 2009 llevaban el prefijo Google-O’Reilly pero hasta la fecha de hoy simplemente lleva el nombre O’Reilly Open Source Award: un reconocimiento a los individuos por su dedicación, innovación, liderazgo y destacada contribución al código abierto.

El premio, creado y organizado por Google en colaboración con la factoría de Tim O’Reilly, desde el 2005, se entregó este jueves 11 de mayo en Austin (Estados Unidos) durante la celebración del congreso mundial OSCON, evento que reúne a toda la comunidad de ingenieros y desarrolladores de software y hardware libre.

Es así que ObiJuán se ha ganado su hito en la muy famosa Wikipedia (hasta que Skynet🤖 cobre conciencia de sí misma y borre nuestra adición de los ganadores del año 2017 en esa página, ja, ja, ja).

“ObiJuán” González Gómez.

Eterno empedernido de la saga de películas «La Guerra de las Galaxias “Star Wars”» -¡ejem! nosotros también 🤓- se autodenomina por este juego de pronunciación en inglés y castellano del Maestro Jedi de los films Obi-Wan Kenobi como ObiJuán (nosotros castellanizamos aún más las cosas con la inclusión del acento) este madrileño ejemplar comenzó sus andanzas …

¡Este blog no va de ciencias sociales! No somos biógrafos de profesión, nuestra intención es dar justo reconocimiento al que “sabemos que sabe”; los lectores de este humilde portal y de nuestra cuenta Twitter pueden dar fe de que siempre reconocemos al que sabe más que nosotros y es así que aprendemos y luego difundimos el conocimiento adquirido. Sigamos pues, con nuestra entrada de hoy.

…comenzó sus andanzas en el servicio militar obligatorio (“la mili”) y es allí donde le “encasquetaron” el apodo por ser tan fanático de “Star Wars”.

Ya desde el año 1996 “lidia” con Linux pero ya desde muy joven “lo que se le da” es lo de la informática. Sufrió lo mismo que Richard Stallman (y nosotros también desde los años 80): un mundo privativo donde te ofrecen “comprar, usar y desechar” * pero no preguntes cómo funciona*.

Uno de sus primeros cacharros fue ZX-Spectrum donde comenzó con el lenguaje BASIC (¿y quién no ha comenzado con ese lenguaje? ¡Ah, ahora los chavales estudian Python, menuda “paliza” para nosotros los vejetes!). Luego aprendió por su propia cuenta Pascal (¡ea, que yo tuve que pisar la universidad para poder aprender este lenguaje! 😮) , C, Prolog, y ensamblador (eax, ebx, ebp y esp fueron sus grandes amigos). Luego al entrar en el mundo GNU/Linux reafirma C, y aprende C++ y Python.

Comenzó la universidad en 1991 y su primera obra fue el Sistema Tower Pro Tarjeta CT6811 para su sueño hecho realidad: el robot Tritt (que ya vendrá algún día el “Mazinger 𝛀”, porque ya el R2D2 lo tuvo… ¡como impresora 3D, con dinastía y todo!). De 1996 al 98 se dedica en cuerpo y alma -pesetas de por medio- al campo de los micro-robots y es cuando emprende su cruzada de hacer una España con un fuerte desarrollo endógeno para librarse de la dependencia tecnológica extranjera: producir y crear todo en su tierra natal (dichas batallas aún se libran fuertemente y se ganan poco a poco con muchísimo esfuerzo, solo que ahora no está solo, sus padawan‘s lo acompañan y apoyan).

En 2003 ya hablaba de los problemas del hardware libre mediante conferencia dictada en el VI Congreso de Hispalinux y llegó a la conclusión que son los planos de hardware son los que cumplen con las 4 premisas del software libre y por ende es así que debe ser considerado el hardware libre (ahora va de que preguntéis de dónde proviene el nombre GNU y obtendréis una respuesta enrevesada parecida).

En 2007-08 trabajó sobre un mando para wii y pudo lograr que controlara su robot Skybot, demostrando con ello que las empresas privativas tienen aún mucho más campo que cubrir si tan solo se dignaran a compartir el conocimiento.

Su “grito de guerra” es:

“Más vale proyecto publicado con licencia libre, que ciento en el cajón”

Y su lema es:

Patrimonio Tecnológico de la Humanidad: es que vamos a avanzar muchísimo más como Humanidad si compartimos el conocimiento! ¡Salimos ganando todos! La riqueza se va a distribuir muchísimo más… Esto se vio desde el principio en el mundo de la ciencia. Si tú no compartes lo que has descubierto, y te lo revisan otras personas, no avanzas, ya no es ciencia lo que haces.

Patrimonio Tecnológico de la Humanidad
Patrimonio Tecnológico de la Humanidad

Tuvo una fuerte influencia el trabajo del profesor Adrian Bowyer quien lanza al mundo la primera impresora para tercera dimensión “3D” a modo de hardware libre: fue desde entonces una revolución imparable en la cual ObiJuán se especializó y contribuyó -y seguirá aportando- en su conocimiento y masificación. Hasta ahora tiene construidas 270 impresoras 3D y podéis leer su trabajo en CloneWars en este enlace.

Así mismo lleva un canal en Youtube con multitud de tutoriales donde explica y comparte con suma paciencia su conocimiento y experiencia, añadiéndole como siempre su toque personal:

ObiJuán es apasionado de la tecnología y en 2016 comezó su proyecto épico: la reconstrucción del CPU del «Apolo 11», el proyecto espacial de la NASA que llevó a nuestra humanidad a la Luna; la “paleoarquitectura” de los ordenadores, sin duda una tarea ardua. Escuchemos en palabras del propio ObiJuán el proyecto de marras:

Para él fue una bendición la tecnología que aportó Arduino en los años 90, fue como la revista “Mecánica Popular” aplicado al mundo de la electrónica. Si Arduino abrió la posibilidad de combinar los componentes y ponerlos a funcionar con los FPGAs (Field Programmable Gate Array) tendremos la posibilidad de construir nuestros propios “chips” y eso ahora mismo es lo que mantiene más ocupado a ObiJuán. Esto es así porque a pesar de todos los títulos universitarios que ha logrado, lo que le apasiona es construir y verificar por sus propios medios (vamos que la ciencia se han de replicar los mismo resultados en las mismas condiciones): es de los que crea y observa, basado en la teoría, pero la destreza manual es bien sabido que abre nuestros cerebros a nuevas conexiones sinápticas y nuevas formas y maneras de ver las cosas, ¡es de los que dicen “no me fío de lo que me dices o alegas, dejadme probar y comprobar”!

A ObiJuán no le gustan los agradecimientos; nosotros por estos lares tampoco (de hecho, debido a la dura situación de nuestro país hasta ahora es que aceptamos donaciones) pero cuando la obra es grande ES IMPOSIBLE QUE PASE DESAPERCIBIDA. Desde 1989 que comenzamos a estudiar en la Facultad de Ingeniería de la Universidad de Carabobo nuestro punto de difusión de conocimiento era el boulevard al lado del cafetín principal, AHORA LO ES EL INTERNET POR EL MUNDO ENTERO y aunque en esa época ya sabíamos que difundir el conocimiento era la clave, no es sino hasta hace poco -en serio y en firme desde el año 2014- que entramos en el mundo del saber del software libre. Pero he aquí que ObiJuán no solo usa y difunde el software libre, ¡EL HARDWARE LIBRE TAMBIÉN!  Nos aventaja por largo rato, y además se involucra en persona en causas sociales ¿Cómo no reconocer su labor? ¡Sería una injusticia!

Títulos.

Nuestro reconocimiento y agradecimiento a su labor constante y tenaz.

 

Fuentes consultadas:

En castellano:

Por medio de Twitter:


En idioma inglés:

By Justindorfman - Own work, CC BY-SA 4.0, https://commons.wikimedia.org/w/index.php?curid=53428398

Comandos para GNU/Linux pocos conocidos

Hoy tuvimos el regocijo de leer un artículo publicado por los colegas de LinuxAdictos donde hablan sobre comandos pocos conocidos para la terminal GNU/Linux. Es por ello que decidimos publicar nuestra propia entrada pero dandole valor agregado: vamos a enfocarlo desde nuestra distribución preferida, Ubuntu Desktop (actualmente usamos las 16.04 LTS) y también como suplemento a nuestra otra entrada sobre la introducción a la cónsola de comandos; ¡venid y acompañadnos en la búsqueda del conocimiento!

By Justindorfman - Own work, CC BY-SA 4.0, https://commons.wikimedia.org/w/index.php?curid=53428398
By Justindorfman – Own work, CC BY-SA 4.0

Comandos que vienen incluídos en Ubuntu.

Pues eso, comandos poco conocidos que ya vienen por defecto ya instalados en Ubuntu, nada más teclearlos los podemos utilizar. Lo que haremos acá es teclear el comando “man” seguido de un espacio y el nombre del comando a conocer, leeremos su descripción en inglés y las traduciremos y le buscaremos propósitos prácticos, comencemos pues.

Comando “calendar”:

El comando “calendar” pertenece al paquete de bsdmainutils que viene por defecto en la distro GNU/Linux que utilizamos para esta entrada, Ubuntu 16.04 Xenial. Dado el caso extraño que no lo tengáis instalado podéis hacerlo con el comando “sudo apt-get install bsdmainutils” y sin ir a mucha profundidad en la materia, podréis ver los archivos que componen ese paquete de software en este enlace.

Este paquete proviene del muy antiguo sistema Unix (el comando “man calendar” especifica que un comando calendar apareció en la “Version 7 AT&T UNIX” en 1979) y ciertamente que nos fue difícil encontrar a quien o quienes actualmente mantienen dicho repositorio, ya que el mero hecho de ser un calendario implica lo más dinámico de este mundo: el transcurrir del tiempo es siempre cambiante. En un “fork” al que tuvimos acceso hecho por Andrey Ulanov < drey @ rt.mipt.ru > en el año 2002 comenta que proviene de OpenBSD e incluye una licencia que se hereda de cada uno de sus componentes, por ejemplo el módulo pathnames.h nos da la siguiente información:

/* $OpenBSD: pathnames.h,v 1.3 1996/12/05 06:04:41 millert Exp $ */
/* $Id: pathnames.h,v 1.1.1.1 2002/11/26 23:37:38 drey Exp $ */

/*
 * Copyright (c) 1989, 1993
 * The Regents of the University of California. All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 * notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 * notice, this list of conditions and the following disclaimer in the
 * documentation and/or other materials provided with the distribution.
 * 3. All advertising materials mentioning features or use of this software
 * must display the following acknowledgement:
 * This product includes software developed by the University of
 * California, Berkeley and its contributors.
 * 4. Neither the name of the University nor the names of its contributors
 * may be used to endorse or promote products derived from this software
 * without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 *
 * @(#)pathnames.h 8.1 (Berkeley) 6/6/93
 */

Como véis se remota hasta el año de 1989, época en la cual apenas nosotros entrábamos a estudiar en la universidad, ¡fascinante como pasa el tiempo! Otra cosa es la fuente de bsdmainutils en la distribución Debian donde el propio Ian Murdock introdujo código fuente según se puede leer en esta página (no obstante acá la reproducimos de igual manera):

This is a collection of programs from 4.4BSD-Lite that have not (yet)
been re-written by FSF as GNU.  It was constructed for inclusion in
Debian Linux.  As programs found here become available from GNU sources,
they will be replaced.

This package was originally put together by Austin Donnelly
<and1000@debian.org>, but is heavily based on bsdutils, originally put
together by Ian Murdock <imurdock@gnu.ai.mit.edu>.  Please report any
problems or suggested additions or changes to Austin Donnelly.

Then the package has been maintained by Charles Briscoe-Smith
<cpbs@debian.org>.  I gathered data for the 1999-2001 calendar files
from various sources on the Internet, and I'd also like to thank Oliver
Elphick, Julian Gilbey, Daniel Martin and Jaldhar H. Vyas for providing
much useful data on the various religous calendars.  I have edited the
files they provided to fit calendar's requirements, so any errors should
be attributed to me.

After cpbs@debian.org, Marco d'Itri <md@linux.it> maintained it for
almost two years, before Tollef Fog Heen <tfheen@debian.org> took over.
The package is now maintained by Graham Wilson <bob@decoy.wox.org>.

This package may be redistributed under the terms of the UCB BSD
license:

Copyright (C) 1980 -1998 The Regents of the University of California.
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
   notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
   notice, this list of conditions and the following disclaimer in the
   documentation and/or other materials provided with the distribution.
4. Neither the name of the University nor the names of its contributors
   may be used to endorse or promote products derived from this software
   without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.

Usando el comando “calendar”.

Nada más en la terminal al introducir el comando sin ningún parámetro veremos algo similar esto, os indicamos que la salida por pantall dependerá de la fecha de vuestro ordenador y os dará resultados similares o diferentes:

Figura 1:
bsdmainutils calendar 22 y 23 de abril
bsdmainutils calendar 22 y 23 de abril

Notad la última línea en castellano, ya os explicaremos luego. Como bien podéis observar la cosa va en idioma inglés lo cual no representa problema, tal cual el latín en el mundo antiguo fue la lengua franca así lo es hoy este idioma. Lo que os advertimos es que hay varios idiomas más, tales como el francés y el ruso [justo arriba del Día de San Jorge esta en ruso el “Красная горка (праздник)” -aparición de Jesucristo a sus discípulos y la conversión del Apóstol Tomás-] y aunque no tiene calendarios del planeta entero, la intención del programa es bueno y tiene dos utilidades extras que estudiaremos pronto.

¿De dónde saca este programa calendar los datos a mostrar por pantalla? En la carpeta /usr/share/calendar/ de nuestros ordenadores se almacenan una serie de ficheros con el nombre, cómo no, calendar pero con diferentes extensiones cada uno, por ejemplo .russian, .christian o .computer.

Figura 2
ls usr share calendar
ls usr/share/calendar

Como bien imaginamos por los metadatos, cada extensión describe lo que contiene el archivo y cuando llamamos al programa calendar simplemente lee y extrae los datos correspondientes a la fecha actual de cada fichero, pero hay más: también hay unos directorios con nombres claves que describen las dos primera letras el idioma separados de un guión bajo y dos letras más en mayúsculas que describen el país. Así tenemos que el directorio de_AT contiene en idioma alemán (“deuschtland” en inglés) del país Austria (AT) donde se habla el alto alemán, más inclinado hacia el latín; de segundo en el listado está de_DE que corresponde al idioma Alemán de Alemania (ea, eso sonó feo en nuestro bello idioma castellano, nuestro idioma no es amistoso con esto de las redundancias).

Como somos unos “hackers” -o estamos en camino de ‘graduarnos’- podemos hacer uso del comando grep y la ‘tubería’ “|” para filtrar resultados por una palabra clave específica, por ejemplo “Bonne fête” o “Feliz cumpleaños” en francés, para ello teclearemos lo siguiente: calendar | grep “Bonne fête” y solo tendremos dos líneas –o ninguna o varias, repetimos que eso depende de la fecha de nuestro ordenador-.

Esto es para búsquedas puntuales y exactas (claro que con el uso de expresiones regulares podremos ampliar la búsqueda -mayúsculas/minúsculas, caracteres comodín, etc), pero ¿qué tal si queremos ver temas específicos? Veamos alguno de estos ficheros de datos con fechas y busquemos uno que está en nuestro idioma, por ejemplo “calendar.argentina”. Si le damos el comando cat en la ubicación /usr/share/calendar al fichero calendar.argentina:

Figura 3
cat usr share calendar calendar argentina
cat usr/share/calendar/calendar.argentina

Evidentemente escrito en lenguaje C notamos un encabezado describiendo el autor, unas variables de enlace para ser compiladas, el conjunto de caracteres a emplear y el conjunto de datos, uno por cada línea. Comienza con el mes abreviado en tres letras del idioma inglés, espacio, dos dígitos -cero a la izquierda de ser necesario-, caracter tabulador y luego la descripción del evento del correspondiente día.

Sumamente importante a destacar es que debemos separar la fecha de la descripción por medio del caracter tabulador( Tab↹ ), de lo contrario la línea no será mostrada en el calendario (nuevo en esta versión y que se diferencia de versiones anteriore según “man calendar“).

Hasta acá lo único especial son los comandos en lenguaje C ya que los eventos están muy bien “formateados” en texto plano pero son precisamente esas referencias en C las que nos indican que hay algo más. Esto quiere decir que “calendar” tiene una estructura rígida y que deben tener esos encabezados pero la cosa no termina allí. Si detalláis en la “Figura 2” nosotros agregamos un fichero calendar.venezuela con encabezado en toda regla y unos pocos acontecimientos históricos de nuestro país pero nada de nada, no lo muestra para nada. Eso quiere decir que solamente se atiene a los archivos que vengan con el paquete para probar esto último modificamos el fichero calendar.unitedkingdom:

sudo nano /usr/share/calendar/calendar.unitedkingdom

Y modificamos la línea del 23 de abril, Día de San Jorge, le colocamos la descripción en castellano y la muestra por pantalla sin problema alguno (figura 1). Lo bueno del software libre es que tenemos acceso directo al código fuente y podemos modificar y compilar, ya sea de manera estática o dinámica, a gusto con nuestras modificaciónes. Pero antes de hacer esto sigamos estudiando las opciones ya establecidas en el comando “calendar” y luego veremos que más podemos hacer.

Parámetros del comando “calendar”:

Primero podemos consultar los eventos de cualquier otra fecha simplemente acompañando de un espacio, el comando del parámetro “-t“, otro espacio, y la fecha en formato AAAAMMDD, por ejemplo el 30 de diciembre de 2017 lo solicitamos de la siguiente manera:

calendar -t 20171230

Desglosamos la respuesta y no vemos por ningún lado la nota con el fallecimiento del gran Ian Murdock, padre de la distribución Debian (madre a su vez de Ubuntu) y que tiene su propio fichero calendar.debian. Por si acaso es que estamos cegatones volvemos a aplicar el comando grep de la siguiente manera:

calendar -t 20171230 | grep "urdock"

El cual no devuelve nada, aunque si usamos

calendar -t 20171230 | grep "KPD"

Sí que obtenemos respuesta: “Gründung der KPD, 1918”, “Kommunistische Partei Deutschlands” o establecimiento del Partido Comunista Alemán, el 30 de diciembre de 1918. Es por ello que tecleamos el comando

 sudo nano /usr/share/calendar/calendar.debian

y agregamos la siguiente línea (recordad de insertar pulsar la tecla Tabulador entre la fecha y la descripción):

Dec 30↹Ian Murdock, stalwart proponent of Free Open Source Software, Father, Son, and the 'ian' in Debian.

Guardamos y listo, guardamos el recordatorio de tan lamentable fallecimiento para futuras generaciones 😔😢.

Por defecto el comando calendar muestra dos días de acontecimientos (el nombre correcto son recordatorios) pero podemos especificar el número de días con el parámetro -l acompañado del número de días hacia adelante que queremos visualizar (nota: el otro parámetro que hace exactamente el mismo trabajo es -A pero como se presta a confusión con el otro parámetro –a usaremos siempre -l). Así si queremos ver exactamente los recordatorios del 30 de diciembre debemos teclear lo siguiente:

calendar -l 0 -t 20151230
Figura 4
calendar -l 0 -t 20151230
calendar -l 0 -t 20151230

Con el parámetro -B podemos especificar hacia atrás en el tiempo, desde la fecha señalada por el parámetro -t, el número de días que queramos ver. Por cierto que si se obvia el parámetro -t se toma la fecha del ordenador y si es viernes mostrará hasta el próximo lunes siguiente (si hay recordatorios); el parámetro -w se basa en eso para especificar el número de días hacia el futuro, pero no hayamos especialmente útil esa opción.

¿Recuerdan que comentamos haber realizado un calendario para Venezuela? Pues bueno llegó la hora de poder visualizarlo con el parámetro -f acompañado de la ruta de ubicación del archivo de marras, para ello metemos:

calendar -t 20170101 -l 364 -f /usr/share/calendar/calendar.venezuela
Figura 5
calendar -t 20170101 -l 364 -f calendar.venezuela
calendar -t 20170101 -l 364 -f calendar.venezuela

¿Qué tal nos ha quedado? Para subir este archivo y contribuir con el software libre publicaremos dicho archivo en GitHub con licencia “Creative Commons” e instrucciones sobre como instalarlo y utilizarlo.

Instalando “calendar.venezuela” en nuestro ordenador.

Según las instrucciones en el archivo calendar.all deberíamos copiar dicho archivo a nuestra carpeta personal “~/.calendar/” si queremos editar dicho archivo. Esto es así ya que si compartimos un ordenador con varias personas lo lógico es que cada quien tenga su calendario particular, es decir, en el fichero “calendar.all” podemos especificar cuales ficheros queremos ver y/o utilizar. Si lo copiamos a nuestro perfil personal podemos editarlo sin molestar a los otros usuarios del sistema.

En nuestro caso decidimos modificar el archivo calendar.all para todos los usuarios para que tengan acceso al fichero de recordatorio de Venezuela (ambos en la carpeta /usr/share/calendar/). Para ello agregamos al archivo la siguiente línea, justo al final, por orden alfabético:

#include <calendar.venezuela>

Luego guardamos y podemos inmediatamente comprobar si funciona. De igual manera así como agregamos, podemos “quitar” ficheros de recordatorios que no pensamos usar. En realidad quitamos es la referencia o referencias, no el o los archivos en sí mismos.

Comandos “cal” y “ncal”:

Si necesitamos ver por pantalla el mes actual simplemente tecleamos cal y lo veremos por pantalla y el día actual estará resaltado. De manera similar funciona ncal pero en vez de tener los días de la semana en el eje de las abscisas los coloca en el eje de las ordenadas. Los parámetros son comunes a ambos comandos, pero tienen sus excepciones (os queda como tarea averiguar cuáles):

  • Si no queremos ver resaltado el día actual usaremos el parámetro -h.
  • Si queremos ver un mes específico del año actual usaremos -m n donde n es el número del mes. También podemos colocar las tres primeras letras del mes (inglés o castellano, sin embargo no reconoce francés ni ruso).
  • Si queremos ver el año completo -en curso- colocamos -y. Si necesitamos un año específico lo colocamos al lado (calendario gregoriano). Por ejemplo podremos saber que el 26 de diciembre del año 7017 será un día viernes. 🤓
  • Podremos combinar mes y año en la misma orden, ejemplo: cal -m 12 2117 mostrará el mes de diciembre del año 2117.
  • Algo muy útil es visualizar el mes anterior, el actual y el venidero: para ellos usamos el parámetro -3.
  • Para ver varios meses hacia adelante, -A seguido del número de meses; -B especifica los meses hacia atrás. Ejemplo: “cal -B 1 -A 3″.
  • Como sabemos el día cero en informática es el domingo, día del Señor, quien al séptimo día tomó descanso (sábado para los judíos). Para nosotros los católicos el domingo es día de adorar a Dios así que comenzamos a trabajar los lunes, por ello podemos especificar que las semanas comienzen los días lunes con -M y con -S comienzan los domingos (opción por defecto). Esta opción no funciona con cal no obstante ncal tiene un parámetro -b que tiene el mismo estilo de cal, ¡probad!

Comando “yes”:

Brevemente diremos que es un comando para nosotros los “nerds”: el comando yes repite indefinidamente por pantalla el texto que lo acompañe. Para detenerlo debemos usar la combinación de teclas CTRL+C (esto es válido para todos los comandos de terminal). Viene con el conjunto de utilerías básicas GNU.

Comando “col”:

El comando col también es poco conocido pero tiene el aliciente de trabajar con los comandos nroff, tblcolcrt; sin embargo le hallamos cierta utilidad didáctica si lo combinamos con los caracteres especiales utilizados para el shell y el lenguaje C. Es por ello que comenzaremos de atrás para adelante: presentamos los caracteres especiales y terminamos con el comando col.

Pues bien, en el juego de caracteres ASCII (ahora sustituidos por los caracteres UNICODE y representados de manera práctica con UTF-8 –revisad nuestro tutorial sonbre HTML5- ) los primeros 31 caracteres son especiales, llamados “de sistema” y tienen diversos usos especiales. Como abreboca tenemos el ACK (acknowledgement) o reconocimiento: si recibimos un datagrama por TCP (o un paquete por puerto serial) y el contenido es recibido de conformidad a reglas preexistentes simplemente contestamos enviando dicho caracter, el número 6 en sistema de numeración decimal (en sistema binario es 000 0110 e igual es 6 en octal y hexadecimal). Además de esta numeración en el lenguaje C (así como Java, Perl e incluso Visual Basic) se le representa con caracteres de escape (esto se presta a confusión a la hora de traducir al castellano, ojito como lo interpretáis). Estos caracteres de escape tienen la función de salir, escaparse de la representación tal como son y se interpretan por pantalla e impresoras de matriz de punto (y algunas de inyección de tinta) de manera diferente. ¿Qué diantres tiene esto que ver con la terminal GNU/Linux o “shell”? 🤔

Vamos a la práctica directamente con solamente un caracter: el número 11 que corresponde al tabulador vertical (no confundir con el tabulador horizontal) al cual podemos almacenar en una variable con ayuda del operador $ el cual interpreta los códigos “escapados” por medio de “\0” -si es octal- o “\x” si es hexadecimal. En este caso sería “\013” en octal o “\xob” en hexadecimal. Corred los siguientes ejemplos en vuestra terminal:

tab_ver=$'\013'
echo "$tab_ver"
tab_ver=$'\x0B'
echo "$tab_ver"

Como notaréis aparentemente no vemos nada por pantalla y para notar como trabaja el tabulador vertical podemos acompañarlo de texto descriptivo de la siguiente manera, mirad la animación:

comando col
comando col

Allí veís el famoso comando col en acción. Otra forma de representar al tabulador vertical en lenguaje C es con “\v“:

jimmy@KEVIN:~$ linea=$'\vLinea 1.\vLinea 2.\vLinea 3.'
jimmy@KEVIN:~$ echo "$linea"

Linea 1.
    Linea 2.
        Linea 3.
jimmy@KEVIN:~$

Comando “colrm”:

El comando colrm nos permite remover la primera n columnas ya sea de un archivo de texto o lo que ingresemos por cónsola de comandos. Hacemos notar que la numeración comienza en uno y no en cero como la mayoría de las matrices en computación. El ejemplo aclara dudas:

comando colrm n+1 columnas
comando colrm n+1 columnas

Otro uso es suministrarle dos parámetros: la columna de inicio y el largo que removerá:

comando colrm n m columnas
comando colrm n m columnas

Comando “column”:

El comando column viene a ser de utilidad si queremos mostrar en columnas una lista que tengamos ya sea en un archivo o en una entrada de texto de terminal con el conector tubería “|“.

comando column
comando column

Comando “from”:

Este comando permite visualizar lo que hallan enviado los usuarios por el sistema de correo en un ordenador GNU/Linux. Sirve como sistema de comunicación enre los usuarios registrados en un ordenador.

Comando “hexdump”:

Permite desglosar los códigos ASCII  en su representación decimal, octal o hexadecimal e incluso aplicandole un formato específico (aparte de los que trae de manera predeterminada) ya sea de un archivo o por entrada de terminal. Acá vemos el formato más útil para dicho comando, pero las posibilidades son infinitas:

jimmy@KEVIN:~$ echo "ABCD" | hexdump -v -e '/1 "%_ad# "' -e '/1 "%02X hex"' -e '/1 " = %03i dec"' -e '/1 " = %03o oct"' -e '/1 " = _%c\_\n"'
0# 41 hex = 065 dec = 101 oct = _A_
1# 42 hex = 066 dec = 102 oct = _B_
2# 43 hex = 067 dec = 103 oct = _C_
3# 44 hex = 068 dec = 104 oct = _D_
4# 0A hex = 010 dec = 012 oct = _

Esencialmente usamos el comando echo para enviar las cuatro primeras letras del abecedario por medio del comando “tubería” “|” y entregarselo a hexdump el cual lo desglosa caracter a caracter y muestra su código ASCII en diferentes sistemas de numeración para luego insertar un retorno de carro al final de cada línea “\n“.

Comando “look”:

Si por ejemplo necesitamos buscar palabras que tengan un prefijo común, por ejemplo “oft”, introducimos “look oft” lo cual devuelve unas  cuantas palabras… en inglés (often: a menudo, frecuentemente). Si bien indica que depende de la configuración que tengamos en ENVIRON (por ejemplo podemos ver cual lenguaje tenemos configurado si tecleamos echo $LANG) siempre utiliza el idioma inglés por defecto. Para buscar una lista de palabras en idioma castellano deberemos especificar que usaremos el diccionario ubicado en /usr/share/dict/spanish. ¿Utilidad? Tal vez querramos hacer un ataque de fuerza bruta a una contraseña usando palabras comunes, quien sabe.

Comandos “wall” y “write”:

Con wall podremos enviar un mensaje a todos los que estén conectados o conectadas por cónsola, quieran o no recibir el mensaje. Por el contrario, si queremos enviar a un usuario específico usamos el comando write acompañado del nombre de usuario y la erminal donde esté conectado. Para saber quiénes están en línea usaremos who.

Otros comandos poco conocidos:

lorder, ul.

Comandos que se deben instalar desde repositorios oficiales.

Comando “termsave”:

Comando “pv”:

Comando “banner”:

Fuentes consultadas:

En idioma castellano:

En idioma inglés:

En idioma ruso:

Apache mod_rewrite

Tutorial para configurar mod_rewrite en Apache sobre Ubuntu

Para los que “montamos” páginas web siempre es útil ocultar las extensiones de nuestros archivos a ser servidos y así despistar a posibles atacantes pero es mejor aún para que nuestros usuarios les sea más fácil recordar nuestras secciones e incluso promociones publicitarias, ¿ya tenemos vuestra atención?

Introducción.

En un mundo donde ya prácticamente todo el mundo introduce una búsqueda en Google o DuckDuckGo para llegar a nuestra página web -exponiéndose a redirecciones hacia páginas falsas por los buscadores web- pues nosotros nos empeñamos en utilizar la barra de direcciones de nuestro navegador web recomendado, Mozilla Firefox.

Es así entonces que podemos publicar alguna promoción en algún medio de comunicación como televisión o prensa y queremos que se pongan en contacto con nosotros por medio de una página web que a tal efecto hayamos programado para ello. Dicha dirección podría ser:

nuestrodominio.com/contacto

Como véis no incluimos “www” ni tampoco las dobles barras (de hecho Tim Berners-Lee se disculpó públicamente por haber hecho la redundancia y hacernos escribir billones de veces ese caracter adicional) ni “http:” -la mayoría de los navegadores web completan automáticamente la dirección- pero mejor aún hemos obviado la extensión del archivo .html, algo que consideramos podría confundir a cualquier usuario común (sí, que hasta los “nativos digitales” también se pueden equivocar).

La intención de este tutorial es CONFIGURAR nuestro servidor web para que acepte dicha dirección y redirija a nuestros posibles clientes de manera transparente y así, a futuro, trabajemos y aumentemos nuestros ingresos 😉 .

Prefacio.

Aunque no estamos escribiendo un libro, estas páginas web algún día las podríamos recopilar en un ejemplar, por eso el uso de la palabra “prefacio“. Lo que necesitaremos para nuestra práctica didáctica es un ordenador con Ubuntu 16 instalado (que también vale este tutorial para Ubuntu 14) al cual le instalaremos Apache2. Para nuestro caso nuestra máquina tiene una dirección IP fija en nuestra red área de local 192.168.1.47 CAMBIAD lo que veaís aquí por vuestra propia dirección IP local. Lo que acá escribimos es válido también para cuando queráis montar vuestro servidor de producción en la internet y solo está limitado por las restricciones que os imponga vuestro proveedor de hospedaje. Este tutorial es completo y el escenario sería o bien una máquina virtual o real que alquileís a un proveedor de alojamiento (es más costoso que alojamiento compartido) o vuestro ordenador con una dirección IP fija que os venda vuestro ISP y que os conécteis bien sea por “ADSL” o “frame relay“.

Instalando Apache Web Server:

Abrimos una ventana de comandos (si no sabéis cómo, leed nuestro tutorial) e introducimos el siguiente comando:

sudo apt-get update
sudo apt-get install apache2

La primera línea actualiza los paquetes disponibles para nuestra versión GNU/Linux que tengamos instalado (Ubuntu 16 en este ejemplo) y la segunda línea instala el servidor web Apache2, software que ha evolucionado mucho desde los años 90. Nótese que usamos “sudo” para tener derechos de administrador o “root” y deberemos colocar la contraseña respectiva (luego el sistema obvia esta solicitud si corremos varios comandos seguidos en corto período de tiempo). Podremos ver algo muy parecido a esto, si todo sale bien:

apt-get install apache2
apt-get install apache2

Para probar que tenemos nuestro servidor instalado podemos navegar hasta nuestra propia dirección IP o en su defecto podemos utilizar la palabra clave “localhost” y eso sí, en la barra de direcciones de nuestro navegador (los buscadores web NO mostrarán enlace hacia nuestro servidor).

Apache2 Ubuntu Default Page
Apache2 Ubuntu Default Page

Habilitando mod_rewrite.

Antes de meternos de lleno con mod_rewrite cumplimos con avisaros que también existe la función mod_alias que es muchísimo más sencilla para resolver rápidamente ciertas situaciones -e incluso cuenta con los comando más avanzados llamados “<Location>” y “<LocationMatch>“- .

Pero si queremos evolucionar y disponer de una herramienta poderosa (y compleja) estudiaremos mod_rewrite. Para activar mod_rewrite debemos ejecutar las siguiente líneas:

sudo a2enmod rewrite
sudo service apache2 restart

La segunda línea sirve para que el servicio o “daemon” reinicie con la configuración deseada. En el ambiente GNU/Linux son muy parcos y estoicos, si todo va bien simplemente veréis de nuevo el indicador de la línea de comando “prompt” -pero al finalizar el primer comando nos indica que falta alguna instrucción que sea importante para finalizar el comando-. ES DECIR no espéreis a cada rato mensaje de confirmación de comando ejecutado -otra cosa, en raras y contadas ocasiones deberemos hacer un reinicio completo de nuestro ordenador, con reiniciar los servicios respectivos tiene para seguir funcionando luego de nuestros cambios-.

Como ya sabéis los comandos en GNU/Linux diferencian letras mayúsculas de minúsculas y por supuesto debemos escribir muy bien los comandos, no como nosotros que nos equivocamos pero luego correjimos, mirad:

sudo a2enmod rewrite
sudo a2enmod rewrite

Configurando .htaccess

Ahora debemos crear un archivo (oculto, mirad el puntito que precede el nombre del fichero) muy importante en el funcionamiento de Apache. Si lo tenemos ubicado en el directorio raíz de nuestro servidor web se aplicará a todas las subcarpetas que tengamos pero cada subcarpeta podrá tener su propio “.htaccess” que regirá para la carpeta donde esté ubicado (y a su vez las subcarpetas que contenga) obviando las instrucciones que hayamos colocado en nuestro “.htacces raíz”.

Pero antes, por razones de seguridad, debemos tener acceso (desde Apache) para crear y escribir dicho fichero, usamos nano -o vuestro editor de texto favorito- para modificar el siguiente archivo:

sudo nano /etc/apache2/sites-enabled/000-default.conf

Tras dentro del cual debemos insertar lo siguiente (notad los comentarios que insertamos en castellano en la imagen más abajo:)

  <Directory /var/www/html>
     Options Indexes FollowSymLinks MultiViews
     AllowOverride All
     Order allow,deny
     allow from all
  </Directory>
000-default.conf
000-default.conf

Es sumamente importante indentar las líneas (en nano lo podéis hacer rápidamente pulsando la tecla TAB para cada sangría) y respetar mayúsculas y minúsculas. Luego debemos reiniciar el servicio web Apache con el consabido comando:

sudo service apache2 restart

Como información adicional os contamos que el archivo “000-default.conf” es el archivo por defecto del primer dominio que sea servido por nuestro ordenador, es decir, podremos a futuro alojar varios dominios en una sola máquina. De este modo el segundo dominio utilizará el archivo “001-default.conf” y así sucesivamente, pero ¿cómo reconoce nuestro servidor web cual dominio entregar? Estad atentos más adelante en este tutorial os daremos noción de ello -y a futuro publicaremos una entrada totalmente dedicada a configurar un servidor Apache con varios dominios virtuales-.

Creando .htaccess

Ya que tenemos configurado a Apache para que acepte nuestro .htaccess procedemos a crearlo. Para ello debemos utilizar nuestro editor de archivos de texto favorito (usaremos nano en este caso) y escribiremos lo siguiente:


1
sudo nano /var/www/html/.htaccess

Y le agregamos una sola línea:


1
RewriteEngine on
RewriteEngine on
RewriteEngine on

Guardamos y luego debemos garantizar su acceso para los demás usuarios, nosotros o cualquiera otro usuario que edite nuestra página web (recordad que lo creamos con la credencial de administrador o “root”):


1
sudo chmod 644 /var/www/html/.htaccess

¡Y listo! Ya tenemos configurado nuestro .htaccess pero como decía Santo Tomás “hasta no ver, no creer” así que vamos a probar si es verdad que funciona.

Creando nuestra pequeña página web.

Como dijimos al principio haremos una página de contacto sin mayores pretensiones, en este ejemplo indicando nuestro correo electrónico de manera tal que no sea capturada por los robots que esparcen “spam” a diestra y siniestra (para una explicación más a fondo visitad nuestro tutorial sobre HTML5):

<html>
        <head>
                <title>Contacto.</title>
        </head>
        <body>
                <h1>Correo electr&oacutenico:</h1>
                <p> contacto EN 192.168.1.47 </p>
        </body>
</html>
contacto.html
contacto.html

Y al navegar desde nuestra barra de dirección de nuestro navegador web observamos que tranquilamente podemos obviar la extensión del archivo y nuestro Apache dará por bien servida a nuestros propósitos sin mayor configuración, pero…

contacto
contacto

… si escribimos “Contacto” (o cualquiera de sus variaciones en mayúsculas o minúsculas) veremos algo que se asemeja a esto:

Contacto
Contacto

Para solucionar esto hemos de echar mano en el archivo .htaccess y hacer uso de las expresiones regulares.

Usando expresiones regulares o racionales.

De antemano: Apache utiliza los conceptos de expresiones regulares o racionales desde el punto de vista del lenguaje Perl 5, ciertas diferencias hay que tenerlas muy en cuenta si usamos otros lenguajes que soportan o tienen librerías que permiten el uso de expresiones regulares (a saber hoy en día, sin que sea tajante la lista: AWK, C++, Java, JavaScript, PCRE, PHP, Python y .NET framework ).


1
sudo nano /var/www/html/.htaccess

Volvemos a modificar nuestro archivo .htaccess y agregamos la siguiente línea:


1
RewriteRule ^contacto.html$ contacto.html [NC]

Guardamos en inmediatamente la regla es puesta en funcionamiento, lo podemos comprobar al buscar nuestra página (recordad poner vuestra propia direción IP o dominio web) /Contacto.html y todas sus variantes, probad y volved.


Explicamos entonces la expresión regular -o racional- utilizada, el significado de cada metacaracter:

  • “contacto.html”: es el nombre del fichero al cual queremos “redirigir” de manera “transparente” al usuario, es decir, mostrará la página a pesar de como escriba el visitante el enlace web (mayúsculas o minúsculas).
  • “^”: representa todo el enlace a la izquierda de nuestra palabra clave (en nuestro caso el nombre de un fichero pero esto no es necesariamente así todo el tiempo, ya veremos más adelante).
  • “$”: representa todo el enlace a la derecha de nuestra palabra clave, éste y el anterior metacaracter actúan a modo de delimitadores, lo podemos ver de esa manera para simplificar su uso.
  • “[NC]”: es una bandera o banderín que indica que use indistintamente minúsculas y/o mayúsculas en nuestra palabra clave.

En conclusión que nuestros usuarios podrán escribir “contacto” con o sin extensión, en mayúsculas y/o minúsculas (todas sus combinaciones) -probad- más sin embargo las siguientes expresiones devolverán una respuesta 404 “página no encontrada”:

  1. 192.168.1.47/contacto.html/
  2. 192.168.1.47/contacto.htm
  3. 192.168.1.47/contact

En el primero se trata de abrir un subdirectorio, en el segundo y el tercer caso se trata de abrir un archivo totalmente diferente (casos que al final también analizaremos y trataremos).

Actualizado el sábado 5 de agosto de 2017.

Que este tema de las expresiones regulares da para una entrada completa en nuestro blog, por la red social Twitter econtramos una excelente imagen que lo explica muy rápidamente y a continuación leímos las opiniones de varios programadores al respecto. Os debemos ese tutorial y en cuanto hallemos tiempo libre de nuestro trabajo de ganarnos el pan de cada día lo haremos.

 

Reglas de “Rewrite”.

De las expresiones regulares o racionales, ese tema solo, solito él, da para una entrada completa, sin embargo ya tenéis la práctica (si algo no tenéis claro subid y practicad de nuevo) y es por ello que acá estudiaremos unas cuantas reglas más avanzadas del comando “RewriteRule” -valga la redundancia multilingüe, si es que eso existe- utilizando las expresiones regulares o racionales para usos más avanzados, ¡vamos!

RewriteRule patrón sustitución bandera
  • Cada regla ha de colocarse en cada archivo .htaccess al principio de la línea con la palabra clave “RewriteRule“.
  • A continuación escribiremos el patrón a buscar en el enlace recibido por nuestro servidor web (ya comentamos de entrada mera que los navegadores web modernos agregan “http://www”, colocan todo el dominio en minúsculas -NO los subdominios y archivos- y hasta completan “.com” si se escribe dominio y se presiona CTRL+INTRO).
  • Sustitución, osea, lo que queremos enviar a nuestro servidor web y que se comporte como si el mismo usuario lo hubiera escrito tal cual (si queréis, pensad en este proceso como un corrector ortográfico automático a toda petición web que llegue).
  • Opcional: bandera o banderín para modificar la regla.

Ejemplo sencillo: imaginad que ahora en nuestra cuenta Twitter, nuestro perfil, colocamos un enlace web para que los interesados sepan nuestro correo electrónico pero queremos reutilizar la paginita web “contacto.html” para ello, pues lo que debemos hacer es anteceder en nuestras reglas lo siguiente:

RewriteRule ^correoe$ contacto.html [NC]
RewriteRule ^contacto.html$ contacto.html [NC]

Como podeís observar en la primera línea, simplemente si un visitante escribe:

http://www.nuestrodominio.com/correoe

pues simplemente nuestro servidor web recibirá la orden de mostrar nuestro archivo “contacto.html” y listo, sin mayor trabajo hemos solucionado otro “problema” pero la cosa va más allá, vamos a preguntarnos ¿Qué tal si escribimos “Contacto.Html” en vez de “contacto.html”? Como bien sabéis en GNU/Linux (y los servidores web e internet en general) las mayúsculas se distinguen de las minúsculas, no son lo mismo a pesar que nuestro cerebro las siga tratando como iguales, ¿qué sucedería?

RewriteRule ^correoe$ Contacto.htmL
RewriteRule ^contacto.html$ contacto.html [NC]

Advertencia imagen pequeña

No, no estaís equivocados, en efecto, el archivo “Contacto.htmL” NO existe en nuestro servidor web pero igual nos “devuelve” el contenido de “contacto.hmtl”, resulta y acontece que cada regla se ejecuta una a una y la siguiente regla corrige lo que entrega la regla anterior -muchas otras personas lo ven como si se “sobreescribe” la una a la otra, pero en realidad nosotros lo vemos de manera muy similar al comando tubería “|” que utiliza el shell de GNU/Linux.

Anda, probad a gusto tu archivo .htaccess, quitad la segunda línea y ensayad, luego volved y seguiremos practicando otras cosillas.


Utilizando patrones alternos.

En este punto continuaremos con el ejemplo anterior: ¿qué tal si queremos escribir ambas reglas en una sola línea?

Para ello haremos uso del los paréntesis normales “()” y el metacaracter “|” que en este caso viene a significar “o” (“or” en idioma inglés) -no confundir con el comando grep que mencionamos párrafos arriba, son contextos diferentes debido a que están encerrados entre paréntesis-:

RewriteRule ^(contacto.html|correoe.html)$ contacto.html [NC]

Ya sabemos como funciona la regla, aquí lo nuevo es como expresamos el patrón y le estamos indicando que ya sea que recibamos “contacto.html” o “correoe.html” -en mayúsculas y/o minúsculas mirad la bandera– siempre “devolverá” la cadena de texto “contacto.html”, precisamente el nombre del fichero que mostrará nuestro servidor web. Incluso podemos ir más allá y quitar las extensiones “.html” del patrón e igual funcionará, probad esto:

RewriteRule ^(contacto|correoe)$ contacto.html [NC]

Utilizando el pase de parámetros.

De nuevo seguimos el hilo con el ejemplo anterior, ¿qué tal si quisiéramos saber cómo llegó nuestro usuario hasta nuestro servidor -preguntando por “correoe.html” o “contacto.html”?

Esto lo podemos lograr insertandole un poco de lenguaje PHP, pero vayamos por partes y configuremos nuestro ordenador:


En nuestro servidor web Apache debemos instalar las librerías que soportan PHP versión 7 (en Ubuntu 16):

apt-get install libapache2-mod-php
sudo a2enmod php7.0
sudo service apache2 restart
  1. En la primera línea instalamos las librerías php.
  2. En la segunda línea activamos php 7 para Apache.
  3. En la tercera línea reiniciamos el servicio Aapache.

Si todo va bien podremos examinar la configuración PHP con un archivo que podemos crear nosotros mismos con una línea: “<? phpinfo() ?>” y lo guardamos con el nombre que más nos guste. Al “llamarlo” por el navegador web nos mostrará algo parecido a lo siguiente:

PHP 7 en Apache 2 sobre Ubuntu 16
PHP 7 en Apache 2 sobre Ubuntu 16

NOTA: en un servidor “en producción” por razones de seguridad NUNCA debemos dejar un archivo con la función “phpinfo()” : haría que cualquier atacante conozca nuestro “entorno” y le sea más fácil utilizar herramientas específicas contra las versiones de software que tengamos instalado en nuestro ordenador configurado para trabajo público.


Ha llegado la hora, pues, de modificar nuestro .htaccess para que trabaje con lenguaje PHP:

AddType application/x-httpd-php .html .htm
RewriteRule ^(contacto|contacto.html|correoe)$ contacto.html?origen=$1 [NC,QSA]
  • En nuestro archivo .htaccess la primera línea indica a nuestro servidor Apache que trate los archivos .html y .htm como .php .
  • En la segunda línea añadimos la bandera “QSA” (“Query String Append”) la cual permite pasar de manera intacta la palabra clave recibida, tal cual fue escrita, por medio de un método GET al “interior” del archivo HTML (“?origen=$1”).
  • Por último el comodín $1 indica por cual de las opciones “entra” la consulta (si tuviéramos otro paréntesis con opciones “|” recuperaríamos dicha coincidencia o elección con $2 y así sucesivamente).
RewriteRule y variables seleccionadas
RewriteRule y variables seleccionadas

En nuestro archivo “contacto.html” modificamos para que reconozca las palabras claves “contacto” y “correoe”: con la primera escribiremos “Gracias por conocer nuestra promoción en TELEVISION” y a la segunda “Gracias por conocer nuestra promoción en PERIÓDICO”.

  • “contacto” -> “TELEVISION”.
  • “correoe” -> “PRENSA”.
<html>
  <head><title>Contacto.</title></head>
  <body>
    <?php
      $parametro = strtolower($_GET['origen']);
      $contacto = strpos($parametro,'contacto');
      if ($contacto !== false) {
        echo(' ¡Gracias por conocer nuestra promoción en TELEVISION!');
      }else{
        echo(' ¡Gracias por conocer nuestra promoción en PRENSA!');
      }
    ?>
    <h1>Correo electr&oacutenico:</h1>
    <p> contacto EN 192.168.1.47 </p>
  </body>
</html>

Como veís con el lenguaje PHP buscamos la palabra clave “contacto” para notificar que el cliente vio la promoción por televisión, el otro único valor posible es “correoe” ya que la regla mod_rewrite filtra lo que escribe el usuario.

  • Con el comando $_GET[‘origen’] obtenemos la cadena $1 del comando RewriteRule.
  • Con el comando strtolower() lo convertimos todo a minúsculas.
  • Con el comando strpos() obtenemos FALSO si no se haya la palabra clave, de lo contrario devuelve un valor mayor o igual a cero.
  • Teniendo en cuenta lo anterior se debe utilizar la comparación ($contacto !== false) por negación para obtener el resultado correcto.

Hasta acá hemos considerado que el usuario o visitante escriba ya sea “correoe” o “contacto” -con todas sus variantes, con o sin extensión (.html o .htm) pero ¿Qué ocurriría si, dado el caso, el navegante escribiera “correo”, es decir, obviara la última letra? En este caso nuestro servidor simplemente devolvería un mensaje de error 404 como este:

Ejemplo de página no encontrada.
Ejemplo de página no encontrada.

Podemos, con propósitos didácticos, ampliar nuestro estudio de Rewrite con un comando adicional: RewriteCond.

Reglas de “RewriteCond”.

El comando “RewriteCond” nos permite evaluar una condición y de ser cierta ejecutará la siguiente e inmediata línea “Rewrite” de lo contrario la saltará y seguira evaluando el resto de las líneas de nuestro fichero .htaccess (si es que hubieran más líneas). Otro punto a tener en cuenta es que se pueden tener varias líneas RewriteCond contínuas una después de la otra y si alguna se cumple se ejecutará la siguiente e inmediata línea “Rewrite”.

Veamos la sintaxis de RewriteCond:

RewriteCond cadena condicion banderas
  • RewriteCond: el comando en sí mismo que debe ser sucedido en la siguiente línea con un comando “RewriteRule”.
  • Cadena: lo que vamos a comprobar, la entrada de datos.
  • Condicion: lo que le vamos a aplicar a la cadena, con la que vamos a comparar y que nos devolverá un valor verdadero o falso.
  • Banderas: modifican el comportamiento de la condicion y va entre corchetes y separadas por comas, si son varias y tal como lo vimos con el comando “RewriteRule”.

Como vemos ya tenemos la teoría, ahora vayamos a la práctica. Seguiremos con nuestro ejemplo anterior: ¿qué sucede si el visitante de nuestra página web escribiera mal la dirección web (URI) y obtuviera un mensaje con error 404?

Podríamos “redirigir” la dirección solicitada hacia la página principal de nuestro servidor web de manera transparente con nuestro archivo .htaccess pero primero una advertencia:


Advertencia imagen pequeña

Esta NO es la manera correcta de tratar una visita a nuestra servidor web que no contenga, por alguna razón (página borrada, error del usuario, etc) una URI solicitada. Lo “legal” es manejar el error 404 con una página web personalizada (de hecho la que vemos es la que trae Apache por defecto) y recomendamos que transcurrido un tiempo necesario para su lectura sea redirigida automáticamente hacia nuestra página web principal (esto escapa a este tutorial pero podéis hacerlo con JavaScript o incluso PHP).

Para configurar nuestra propia página web personalizada para el error 404 podemos hacerla a nuestro gusto/diseño y nombrarla, por ejemplo, “404_personalizado.html” y ubicarla en el directorio raíz para luego agregar a nuestro archivo .htaccess la siguiente línea:

ErrorDocument 404 /404_personalizado.html

Retomando nuestro ejemplo podemos agregar a nuestro .htaccess las siguientes líneas que evaluarán y tratarán la entrada de la URL recibida y la ubicaremos al final del fichero para que sea ejecutada en último lugar (si la colocamos antes al llegar una consulta por “/correoe” automáticamente será redirigida a la página principal):

AddType application/x-httpd-php .html .htm
RewriteEngine on
RewriteRule ^(contacto|contacto.html|correoe)$ contacto.html?origen=$1 [NC,QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ %1

Las 3 primeras líneas ya las hemos explicado y aprendido ahora expliquemos las dos líneas agregadas:

  • “RewriteCond”: El comando que nos permite evaluar una condición.
  • “%{REQUEST_FILENAME}”: El archivo solicitado, luego de haber recibido la URI (con confundir con {REQUEST_URI} ).
  • “!”: es un operador lógico que invierte un valor, por ejemplo de falso a verdadero.
  • “-f”: Le indica a nuestro servidor que compruebe si es un archivo es “regular”, esto es, que esté bien escrito y que exista en nuestro ordenador -y devuelve verdadero si esto se cumple-.
  • Si no se cumple el punto anterior y devuelve falso con el operador “!” lo convertimos en verdadero y tenga la respuesta positiva para ejecutar la siguiente línea “RewriteRule”.
  • “RewriteRule”: con la respuesta positiva recibida comienza a trabajar comparando con el patrón siguiente.
  • “^(.*)$”: los metacaracteres “^” y “$” ya los conocemos, los nuevos son “.” y “*” que indican que compare -y acepte- cualquier caracter y cualquier cantidad de los mismos, es decir, acepte toda entrada posible (el punto indica que puede ser cualquier caracter y el asterisco indica que dicho caracter se puede repetir cualquier cantidad de veces). Como cumple con el patrón procede a aplicar la regla.
  • ¿Recuerdan la variable “$1” que nos permitía elegir que opción de un patrón recibíamos? Ahora con la variable “%1” nos permite pasar intacta la referencia recibida de la “RewriteCond” (la parte que corresponde a nuestro dominio) que desencadenó la ejecución de la “RewriteRule”.

En este punto consideramos prudente mostrar de forma un tanto gráfica la nomenclatura de

Un último ejemplo de “RewriteCond”.

Para finalizar este tutorial vamos a proponernos el bloquear el acceso a una dirección IP4 en particular. Para nuestros propósitos didácticos tenemos una red de área local con nuestro servidor web en 192.168.1.47 (la misma a lo largo de toda esta entrada) y una máquina virtual con la dirección IP4 192.168.1.78 la cual queremos bloquear y para ello agregaremos lo siguiente:


1
2
RewriteCond %{REMOTE_ADDR} ^(192\.168\.1\.78)$
RewriteRule (.*) - [F,L]

Pasamos a explicar línea por línea y comando por comando:

  • “RewriteCond”: comando para evaluar una condición.
  • “%{REMOTE_ADDR}”: una variable que contiene la dirección IP del visitante.
  • “^” y “$”: delimitadores izquierdo y derecho de la dirección IP recibida.
  • “(” y “)”: cadena a evaluar con expresion regular.
  • “\”: la barra invertida sirve para indicarle a nuestro servidor web que el punto a la derecha lo considere como símbolo y NO como metacaracter (ver ejemplo anterior de error 404).
  • Los números pues son la dirección IP a bloquear.
  • “RewriteRule”: es la línea que sirve a la(s) última(s) “RewriteCond”.
  • “(.*)”: indica que acepte cualquier cadena de texto -ver ejemplo arriba-.
  • “-“: un guión para que NO sustituya nada ya que la bandera hará el trabajo por nosotros -ver siguiente punto-.
  • “[F,L]”: son dos banderas con dos instrucciones diferentes, la letra “F” le indica que envie el “mensaje” de prohibido (en realidad devuelve un “error 403” el cual también podemos personalizar con un fichero .html a nuestro gusto y conveniencia tal y como lo hicimos con el “No encontrado 404”). La letra “L” es muy importante e indica que es la última (“last”) regla a aplicar y que no revise las siguientes (si las hubiere) líneas en .htaccess . Esto es así porque si de plano le prohibimos el acceso ¿para qué vamos a revisar reglas adicionales?

La probamos y veremos algo muy similar a esto:

403 Forbidden
403 Forbidden

Si por el contrario queremos que solamente esa dirección IP tenga acceso al servidor web (por ejemplo queremos”administrar” nuestro servidor desde esa única y exclusiva dirección IP, sin que nadie nos moleste) simplemente antecedemos el caracter lógico “!” que inverte la respuesta de la comparación.

En idioma inglés:

Enlaces hacia expresiones regulares:

En idioma japonés:

 

Ubuntu botón para hibernar.

Habilitar hibernación en Ubuntu

No, no estamos de osos e hibernación sino de la metáfora entre el comportamiento animal y las computadoras: se trata de “dormir” a la computadora escribiendo todo lo que está en memoria RAM a un área especial en nuestro disco duro, tras lo cual podemos hasta desenchufar nuestro equipo y cuando de nuevo lo necesitemos quedaremos exactamente con los mismos programas y documentos abiertos justo donde los dejamos.

Antecedentes.

En los lejanos tiempos cuando no teníamos interfaz gráfica (podéis saber -o recordar- más en nuestros anteriores artículos sobre bash y sobre ingeniería social) pues tenía poco sentido el hablar de este proceso de hibernación. Pero es que hay más: los equipos XT tenían un simple interruptor que cortaba la energía, apagando de golpe a la computadora y perdiendo datos (ni hablaremos que los discos duros tipo IDE tenían que “parquear” el cabezal para no dañar los platos). Pero con el advenimiento de los equipos AT se incorporó más bien un botón lógico que cuando uno lo presiona el BIOS de la tarjeta madre se comunica con el sistema operativo -moderno- para entonces así poder apagar, cerrando y guardando debidamente los documentos y programas abiertos. Adicionalmente -y esto aplica a los monitores también- se les colocó una función de “dormir” lo cual hace que la máquina trabaje a una velocidad mínima a la espera de un evento determinado -pulso de tecla, movimiento de ratón, mensaje por tarjeta de red, etc.- logrando ahorrar energía. Dicha función se activa automáticamente cada cierto tiempo predeterminado y así se ahorra, a nivel mundial, de muchísima energía eléctrica.

Pero fueron las computadoras portátiles las que más se beneficiaron pues permite alargar el tiempo que trabajan con una sola carga de batería e incluso hay planes más detallados y específicos que poner a “dormir” al equipo: disminuye el brillo en pantalla, deshabilita uno o más núcleos en el CPU (ahora casi todos los equipos son doble núcleo de 64 bits), apagar la red inalámbrica, apagar el disco duro, etc.

En el caso de la hibernación es el ahorro máximo de energía: apagar el equipo para luego encenderlo muy rápidamente y justo donde estabamos trabajando, de paso ahorrando tiempo y como dijimos, se trata de escribir todo lo que está en memoria al disco duro.

¿Por qué Ubuntu no trae la opción de hibernación activada?

Pues ya saben la historia, a las computadoras se les agregó las opciones de “dormir” e “hibernar” para cumplir normas medioambientales (y ahorro en nuestros bolsillos en nuestra factura por consumo de electricidad) pero resulta ser que cada fabricante impuso sus propios “chips” integrados en las tarjetas madres para cumplir dichas funciones. Ellos, para proteger sus “secretos industriales y de manufactura”, no explican a ciencia cierta cómo funcionan y son pocos los fabricantes que se dedican a trabajar de la mano con los desarrolladores de sistemas operativos. En el caso de Ubuntu fue a partir de la versión 12.04 que tomaron la salomónica decisión de deshabilitarlo (en Debian viene por defecto activado): son pocos los hardwares que son certificados para trabajar con Ubuntu y la base de datos para llevar cuenta de ellos es gigantesca y engorrosa, un trabajo a todas luces de evitar.

¿Y qué es un hardware certificado para trabajar con Ubuntu?

Pues son ordenadores que garantizan que al hibernar no perderemos absolutamente ninguno de nuestros datos, recordemos que todos los GNU/Linux son sistemas operativos estables y confiables y no se arriesgan a perder su reputación simplemente porque la mayoría de los fabricantes de niegan a vender hardware libre (aunque esto también desaliente a las empresas que trabajen por cerificar su hardware con Ubuntu).

¿Y quienes se benefician del proceso de hibernación?

Pues obviamente los equipos de escritorio y portátiles porque las versiones Ubuntu Server para nada ahorran energía: son equipos que trabajan las 24 horas del día. No obstante el software libre nos permite sin ningún problema el convertir nuestros ordenadores de uso diario como servidores de bases de datos, servidores web, etcétera y si éste es vuestro caso pues olvidad la opción de hibernar.

Requisitos para la hibernación.

Pues antes de entrar más en detalles debemos asegurarnos no sólo que tenemos espacio libre en disco duro del mismo tamaño de nuestra memoria RAM, sino que incluso contemos con una partición de intercambio especialmente hecha para ello, y en inglés recibe el nombre “swap” (no confundir con la partición para archivos temporales). Generalmente si escogimos que nuestra distribución Linux ocupe todo nuestro disco entonces habrá particionado nuestro disco duro con los valores adecuado a nuestro hardware.

Pero si fuimos nosotros quienes decidimos los valores de partición debemos revisar, en todo caso nunca está demás consultar dichos valores así que nos arremangamos las mangas de la camisa y abrimos una venta terminal y escribimos lo siguiente:

cat /proc/swaps

Como ya sabemos el comando cat sirve para visualizar el contenido de un archivo y en GNU/Linux todo es un archivo (sin caer en el tema de systemd) y la partición de intercambio tiene su archivo que lo representa. El que consultemos un archivo, ya sea por pantalla, impresora, terminal remota, etc. no representa ningún problema para nuestro ordenador, es decir no desconfiguramos nada (lo peor que nos puede pasar es que no tengamos derecho de lectura del archivo en cuestión).

Pero si queremos ir más allá podemos usar el comando swapon el cual está disponible desde 1995 (apareció en 4.0BSD) y forma parte de las utilerías de Linux. Dicho comando ofrece opciones de reporte y la primera que usaremos es:

swapon -s

o en su versión “larga” -que nos permite memorizarla mejor-:

swapon --summary

Esta opción hace exactamente el mismo trabajo de cat que indicamos al principio y así explícitamente lo indica la ayuda de swap (tecleamos “man swap” -y podemos usar el comando man para obetener ayuda de cualquier otro comando de Linux-). Con el comando swapon también podemos activar o descativar el área de intercambio pero exige conocimientos exactos de nuestro hardware para poderlo ejecutar correctamente, recomendamos mucha precaución si se deciden a ir más allá.

Hay muchos otras muchas herramientas (mirad los enlaces consutlados para hacer esta entrada) pero con 3 creemos es más que suficiente en nuestra labor didáctica, dicho tercer comando es free que nos permite ver tanto en Gigabytes, Kilobytes o Megabytes (las letras iniciales son los parámetros del comando) de nuestra memoria física y el área de intercambio -en realidad sirve para la memoria RAM pero como están intimamente relacionadas con el área de intercambio pues se incluye en los resultados-:

free -g
free -k
free -m

Acá mostramos una captura de nuestra ventana terminal:

cat swapon free
“cat”, “swapon” y “free”.

Otra alternativa es utilizar la interfaz gráfica pulsando la tecla ALT+F2 y escribimos (en Ubuntu) “disco” y automáticamente nos listará las aplicaciones debajo de la linea de comandos -si usan Debian escriban palimpsest – y hacemos click en la utilidad de discos, verán algo parecido a esto:

Ubuntu partición de intercambio.
Ubuntu partición de intercambio.

Como vemos también nos informa del estado del disco duro, temperatura etc.

Probando si nuestro equipo es compatible con hibernación.

La manera pragmática de determinar si nuestro equipo soporta el proceso de hibernación es tener unas cuantas aplicaciones abiertas con datos sin importancia (navegador web, gedit editando una nota, algún reproductor de música) tras lo cual ejecutamos en nuestra línea de comandos lo siguiente:

sudo pm-hibernate

Al presionar la tecla intro nuestro ordenador, según la cantidad de aplicaciones abiertas, la cantidad de memoria RAM y tipo de disco duro, tomará de unos cuantos segundos hasta un minuto. Luego de que se hayan apagado todas las luces y ventiladores esperamos unos 10 segundos y procedemos a encender por su correpondiente botón.

Una vez haya arrancado de nuevo verificamos si nuestras aplicaciones de prueba están en pantalla, si suena la música, el estado de conexión de red; puede ser que parpadee la pantalla una o varias veces, movemos el ratón y observamos cuánto tarda en responder.

Si hemos llegado hasta aquí sin problemas…

Pues ¡enhorabuena! Nuestro ordenador es compatible con la hibernación ahora procederemos a habilitarlo y describiremos el proceso general pero cambiaremos los valores de acuerdo a la versión de Ubuntu que tengamos instalado:

  1. Vamos a crear un archivo llamado “com.ubuntu.enable-hibernate.pkla“.
  2. Dicho archivo lo guardaremos en la siguiente ubicación: ” /etc/polkit-1/localauthority/50-local.d
  3. Debemos hacerlo con derechos de usuario raíz o “root” con “sudo su“.
  4. Reinciamos el equipo y verificamos que nos aparezca la opción correspondiente, veremos algo como esto:
Ubuntu botón para hibernar.
Ubuntu botón para hibernar.

Si usamos Ubuntu 13 o anterior:

Procedemos a abrir una ventana terminal y ejecutamos lo siguiente:

sudo nano /etc/polkit-1/localauthority/50-local.d/com.ubuntu.enable-hibernate.pkla

y luego rellenamos con esto (sientanse libres de copiar y pegar):

[Re-enable hibernate by default]
  Identity=unix-user:*
  Action=org.freedesktop.upower.hibernate
  ResultActive=yes

Si usamos Ubuntu 14:

Deberemos rellenar el archivo con esto:

[Re-enable hibernate by default in upower]
  Identity=unix-user:*
  Action=org.freedesktop.upower.hibernate
  ResultActive=yes

[Re-enable hibernate by default in logind]
  Identity=unix-user:*
  Action=org.freedesktop.login1.hibernate;org.freedesktop.login1.hibernate-multiple-sessions
  ResultActive=yes

Si tenemos Ubuntu 16:

[Re-enable hibernate by default for login1]
 Identity=unix-user:*
 Action=org.freedesktop.login1.hibernate
 ResultActive=yes

[Re-enable hibernate for multiple users by default in logind]
 Identity=unix-user:*
 Action=org.freedesktop.login1.hibernate-multiple-sessions
 ResultActive=yes

Observaciones importantes del archivo de marras:

Advertencia imagen pequeña

Ahora que conocemos el archivo que permite la hibernación hemos de considerar lo siguiente: las lineas que comienzan por “Identity”, “Action” y “ResultActive” como bien pueden observar son las mismas para las versiones de Ubuntu lo que si que es diferente son las etiquetas que las encabezan. Es de notar también que el identado es importante para dichas líneas pues son en jerarquía “hijas” de las etiquetas. Además los nombres de las etiquetas son muy específicas para cada versión de Ubuntu, bueno cada cabeza es un mundo e imaginamos que son muchos y diferentes programadores que han trabajado sobre Ubuntu y que siempre debemos tener siempre en mente que en el campo del software libre nada está escrito sobre piedra, es decir: ¿nos molesta que cada versión de Ubuntu tenga sus diferencias particulares de una a otra según las liberan? El software libre nos permite descargar el código fuente, modificarlo y compilarlo para nuestra propia metadistribución, es decir, es el mismo Ubuntu con pequeñas variaciones (pero si dichas variaciones afectan de algún modo o manera a las aplicaciones que se ejecutan debemos compilar también dichas aplicaciones adaptadas y publicar nuestro propio repositorio para nuesta metadistribución ¿A ver quién se anima a trabajar en ello? Hay gente que conozco que lo hacen, ¡tienen mucho esfuerzo y tenacidad en sus convicciones!).

Si tenemos un ordenador portátil.

En las computadoras portátiles al cerrar su tapa, el comportamiento predeterminado es “dormir” o suspender pero podemos cambiar ese comportamiento siempre y cuando hayamos probado varias veces que la hibernación funciona correctamente:

  • Abrimos una venta terminal e introducimos lo siguiente:
sudo nano /etc/systemd/logind.conf
  • Buscamos la línea que contiene “#HandleLidSwitch=suspend” y la sustituimos por “HandleLidSwitch=hibernate” (nótese que eliminamos el caracter almohadilla y cambiamos “suspend” por “hibernate”.
  • Guardamos el archivo y reiniciamos.

¿Qué problemas podemos enfrentar?

Actualizado el jueves 10 de noviembre de 2016.

Pues pusimos a hibernar nuestro ordenador y al regresar de nuestro trabajo en la calle encendimos y nos mostraba este mensaje:

Ocurrio un error al montar /boot/efi.
Pulse S para no montar o M para una reparación manual.

Al escoger la opción “no montar” pues acepta contraseña pero al no tener acceso al disco duro pues regresa a la pantalla de inicio de sesión. Al escoger la opción de reparación manual “cae” con credenciales de “root” y al introducir:

sudo apt-get update

no se ejecuta correctamente y sugiere el comando dpkg.

Aplicamos:

sudo dpkg --configure -a

y luego el comando “reboot” tras lo cual arranca correctamente. Suponemos que como tenemos configurada las actualizaciones del sistema operativo como “descargar e instalar automáticamente” pues estaba precisamente en ese proceso cuando la pusimos a hibernar.

Agradecemos a los amables colaboradores de Ubuntu-es.org por proporcionarmos la solución, podéis leer el caso en este enlace web.

Enlaces consultados:

En idioma castellano:

En idioma inglés:

Git logo.

Git tutorial

Por medio de Twitter uno se entera de muchas cosas, dejando a un lado el maligno cotilleo, claro está. Una de esas cosas buenas es conocer que existe “Pro Git Book” el cual fue escrito por Scott Chacon (empleado hoy en día en la empresa GitHub) y Ben Straub (quien ahora trabaja en la empresa Zendesk) sobre el famoso sistema de administración (de versiones) de código fuente que tal como su nombre pomposo indica, es un software orientado a mantener en orden nuestros “apuntes” (ea , que estamos en el siglo XXI y ya debemos dejar de hacer esto, que yo también lo hacía, perdonadme Romero):

Git tutorial.

Introducción.

Esta entrada tiene como objetivo la instalación de Git en nuestros ordenadores y su aprendizaje básico teniendo como guía de escritura al famoso libro “Pro Git” 2° edición, osea un Git tutorial en toda regla. Luego veremos las opciones avanzadas, de las cuales muchos prescindiréis, especialmente la instalación de nuestros propio servidores de repositorios, pero no os quiero abrumar con más detalles, entremos en materia y recordad que si queréis ir más lentamente descargad y leed el libro (está escrito bajo licencia GNU General Public License) o mejor aún, compradlo y colaborad con los autores y además contribuid a otra buena causa.

Mini tutorial Git y chuleta de comandos.

Para aquellos de vosotros que os pasáis apurados todo el tiempo os recomiendo un resumen realizado por “El Baúl del Programador” el cual contiene, basado en el libro ProGit, los comandos básicos agrupados por similaridad de funciones junto con ejemplos prácticos de los escenarios que regularmente se nos presentan, he aquí el enlace al artículo y la cuenta en Twitter por si queréis seguirlos:

Brevísima historia de Git.

Git logo.
Git logo.

Ya en 1998 el equipo de desarrollo del sistema operativo GNU/Linux, encabezado por Linus Torvalds, observó lo difícil que era llevar bajo control el crecimiento (debido a que cada día se unían más entusiastas a la causa del software libre) del novedoso proyecto. Tanto es así que en 2002 se decide encomendar a la empresa BitMover -recién fundada dos años antes- la tarea de mantener “en custodia”, por medio de su producto estrella BitKeeper, las valiosísimas líneas de código del mayor emprendimiento hecho sobre software libre hasta la fecha. Al padre Richard Stallman por supuesto que no le gustó para nada este software “semi-privativo” (el adjetivo es inventado por nosotros, si es que no existía o existe ese concepto) ya que, si a ver vamos, era sin valor monetario para la comunidad en desarrollo a costa de comprometerse a no utilizar ninguna otro software para control de versiones -privativo o libre- mientras utilizaran BitKeeper e incluso un años más allá después de haberlo dejado de usar (menos mal tenían acceso al código fuente de BitKeeper). Tampoco podían participar en el desarrollo de algún software para control de versiones nuevo y como guinda para el pastel debían ser informados de manera automática de los cambios al GNU/Linux (con ayuda de los propios servidores de BitMover).

¿Qué es software libre? CTL2016 explica.
¿Qué es software libre? CTL2016 explica.

A muchos programadores esto no fue para nada de su agrado, una de las principales características de la filosofía del conocimiento abierto es precisamente la LIBERTAD. A pesar que el propio Linus Torvalds hizo llamados públicos y notorios a quien tuviera una alternativa totalmente bajo licencia GNU, nadie respondió ni ofreció ninguna herramienta de hecho, hay que tener cojones para desarrollar software para creadores de software: estaís en el ojo del huracán todo el tiempo. Mientras tanto intentaron edulcorar la agria relación con parches que hicieran compatible los servidores de BitMover con “Concurrent Version Systems” y “Subversion” pero el terrible cotilleo por internet que menciono al principio de este artículo echó por la borda cualquier intento de progreso.

En el año de 2005 la empresa BitMover amagó con empezar a cobrar por la licencia de uso pero Andrew Tridgell (padre también del rsync y Samba Server) ya estaba “prevenido al bate”: en aquella época él era empleado de “Open Source Development Labs” (OSDL) -predecesora de lo que hoy es “The Linux Foundation“- y tenía un as bajo la manga: “SourcePuller”.

Como mencionamos Andrew Tridgell fue padre del software Samba, el cual es basado -y ampliado- en el protocolo de recursos compartidos de la empresa Microsoft bajo su sistema operativo Windows –empresa que, por demás, nunca hizo queja alguna sobre ese invento hecho bajo software libre- y aplicó la misma técnica sobre el BitKeeper e inventó el “SourcePuller”. Pero se extralimitó ya que contrato leonino impuesto por BitMover sobre OSDL prohibía expresamente cualquier mejora (hasta el propio Linus Torvalds quedó salpicado en el asunto, al ser empleado también de OSDL tampoco podía participar en ningún desarrollo de software de control de versiones). Es de nuestra opinión que BitMover ya estaba ansiosa de obtener dividendos sobre su inversión y vieron en el trabajo de Andrew la excusa perfecta -violación de contrato- para cobrar por la licencia de uso y no al contrario -hay una extensa discusión sobre el tema (ver abajo enlaces de las fuentes) pero escapa de este humilde tutorial-.

Es por tanto que de todo lo anterior nace Git en el año 2005, y evidentemente que Linus Torvalds fue el titiritero detrás de todo el asunto: una vez le fue consultado sobre el origen del nombre “Git” a lo cual respondió (recordad que él es finlandés y por cercanía geográfica aprendió el inglés británico antes de ser ciudadano estadounidense; las fuentes coloreadas son mis observaciones):

  • Una combinación de tres letras impronunciables y que no son ningún comando en Unix. El hecho que provenga de una mala pronunciación de “get” (obtener) es irrelevante (deriva del inglés antiguo; “get” se pronuncia rápidamente mientras que “git” se alarga, es casi lo mismo pero a diferentes velocidades).
  • Estúpido. Vil y despreciable. Sencillo. Escoja usted del diccionario de jergas (de hecho en el inglés antiguo significaba “bastardo”).
  • “Información de Seguimiento Global”: si usted tiene un buen estado de ánimo, y realmente funciona para usted. Los ángeles cantan, y un resplandor llena de repente su habitación.
  • “Maldito camión cargado de mierda”: cuando se echa a perder (por las iniciales en idioma inglés “Goddamn Idiotic Truckload of shit”).

Como vemos el señor Linus Torvalds es lo que nosotros por acá llamamos una verdadera chupeta de ajo. Es por ello que tomamos aire y decimos a todo pulmón “VERGACIÓN LINUS ERES UNA PERSONA REALMENTE JODIDA” ja ja ja. 😉

Para que podáis entender el panorama infromático al momento del nacimiento de Git, en este mensaje de Linus Torvalds a al comunidad, fechado el miércoles 6 de abril de 2005 (en idioma inglés) están los detalles del punto de inflexión en la herramienta para desarrollar el kernel del GNU/Linux -y fue para mejorar, indudablemente-.

A partir del nacimiento de Git, Linus Torvalds designó al japonés e ingeniero en software Junio C. Hamano (濱野 純) el mantenimiento y desarrollo de Git. Hamano, quien es empleado de la empresa Google llevaba un blog hasta 2011 donde regularmente informaba amablemente al público en general sobre su trabajo pero luego decidió, para su paz mental, mudarlo al principal rival de WordPress: Blogspot (empresa comprada por Google en el año 2003).

El útimo anuncio en dicho blog describe el lanzamiento de la versión 2.5 de Git en julio de 2015 aunque a la fecha de escribir estas lineas están trabajando en la versión 2.8.

This is Git. It tracks collaborative work on projects on through a beautiful distributed graph theory tree model.
This is Git. It tracks collaborative work on projects on through a beautiful distributed graph theory tree model.

De la propia página personal de Hamano observamos una referencia a la anterior imagen, lo cual es una clara señal de que el hombre se toma las cosas con mucha, muchísima calma, a diferencia mayúscula de su jefe Linus Torvalds.

A la fecha se espera la llegada de la versión 2.9.1, según reseña la página web tutorial de LXALinuxAdictos y os adelanto, si queréis leer el reportaje, que allí expresan una muy resumida historia del Git, directo y al grano. Es bueno el artículo, pero nosotros aquí, como véis, somos de muchas más palabras 😉 .

 

Por otra parte, el protocolo Git se ha extendido a nivel mundial, tanto es así que el libro que vamos a estudiar ¡ha sido traducido al idioma coreano!

Presente y futuro de Git.

El primer caso de éxito para el protocolo y programa Git -y que ya lo hemos nombrado y referenciado bastante- es el caso de GitHub. Es tanto así que en el libro por el cual nos guiamos para esta enrada tiene su capítulo aparte y dedicado. La cuestión es simple: ellos dan alojamiento a proyectos cuyo control de versiones es manejado por medio de Git -por supuesto y lógico- y dicho alojamiento es libre y gratuito mientras sea público, allí está la “pega” del asunto. Si vosotros queréis llevar un proyecto privado y en azul celeste, pues que vuestro dinero os cueste, y por eso cobra y vive GitHub. Claro hay otros privilegios adicionales y se decide comprar alojamiento privado: total confidencialidad del proyecto, respaldos, páginas web, etcétera y cobran de acuerdo al tamaño del proyecto, esto es así porque nadie trabaja gratis, todos tenemos nuestros gastos.

Pero el asunto del GitHub va mucho más allá del ámbito de la programación. Desde escribir un libro (como el que comenzaremos a estudiar aquí) y gestionar su traducción a otros idiomas hasta leyes, control de planificación de ciudades o gente que programa drones, hay de todo un poco. Si queréis ahondar en los usos actuales (y tal vez veaís el futuro) os recomiendo leer el excelente reportaje en este enlace, gracias al sitio web “El Baúl del Programador”.

Instalación de Git en Ubuntu.

Superada la jocosa personalidad del padre de Linux, vamos a la parte seria del artículo: Git tutorial. Estamos aquí por instalar en nuestro ordenador con Ubuntu el programa Git. Esto vale también para la mayoría de distribuciones basadas en Debian. Abrimos una ventana terminal (si necesitan ayuda con esto pueden leer nuestro tutorial sobre bash) y tecleamos lo siguiente:

sudo apt-get install git-all

Introducimos nuestra contraseña para ganar acceso como usuario maestro “root” y podremos observar algo como esto (si desea haga click en la imagen para ampliarla):

sudo apt-get install git-all
sudo apt-get install git-all

Y listo, eso es todo, luego de descargar aproximadamente 30 megabytes y ocupar 139 megabytes en disco duro a la final se instalará un “gitdaemon”, es decir un servicio que estará siempre al pendiente de nuestro proyectos. Más adelante, en la sección avanzada, veremos y ahondaremos en este punto.

Características de Git.

Nuestro primer proyecto con Git.

Ramificaciones (avanzado de aquí en adelante).

Git en nuestro(s) propio(s) servidore(s).

Git en entornos distribuidos.

GitHub.

Herramientas en Git.

Personalización de Git.

Git en otros sistema de control de versiones.

Asuntos internos en Git.

Git en otros medioambientes.

Incrustando Git en tus aplicaciones por medio de la línea de comandos.

Humor.

 

Fuentes consultadas.

Artículos en idioma castellano:

Artículos en idioma inglés:

Enlaces mediante Youtube (en inglés):

Enlaces mediante Twitter (en inglés):

https://elbauldelprogramador.com/21-aliases-utiles-para-git/
https://elbauldelprogramador.com/como-usar-los-filtros-smudge-y-clean-en-git/
https://elbauldelprogramador.com/sincronizacin-de-proyectos-en-git-con-hooks-ganchos/
https://scotch.io/tutorials/contributing-to-open-source-software-with-git

VirtualBox logo

VirtualBox 5.0.14

VirtualBox 5.0.14 es la última actualización a la fecha de hoy 22 de enero de 2016, nosotros usamos intensamente este entorno de virtualización tanto para servidores en producción como servidores en desarrollo. Esta última versión hoy la descargamos e instalamos sobre los servidores de desarrollo y dentro de unas dos semanas que hayamos probado su estabilidad y certeza de rapidez y eficiencia, será aplicado a los de producción.

VirtualBox - Acerca de.
VirtualBox – Acerca de.

A continuación la lista de cambios que igual podeís leer en la página web oficial de VirtualBox ¿Que para qué lo repetimos aquí? pues bueno le damos valor agregado a lo que consideramos importante (o digno de recalcar) y utilizamos el color verde en la fuente de letra para ello.


VirtualBox 5.0.14 (released 2016-01-19)

This is a maintenance release. The following items were fixed and/or added:

  • GUI: properly limit the number of VCPUs to the number of physical cores on Mac OS X (bug #15018)
  • Audio: fixed a bug which prevented loading a saved state of a saved guests with HDA emulation (5.0.12 regression; bug #14981)
  • Audio: don’t crash if the backend is unable to initialize (bug #14960)
  • Audio: fixed audio capture on Mac OS X (bug #14386)
  • Storage: fixed a possible crash when attaching the same ISO image multiple times to the same VM (bug #14951)
  • BIOS: properly report if two floppy drives are attached <— JE JE JE 😎
  • USB: fixed a problem with filters which would not capture the device under certain circumstances (5.0.10 regression; bug #15042)
  • ExtPack: black-list Extension Packs older than 4.3.30 due to incompatible changes not being properly handled in the past
  • Windows hosts: fixed a regression which caused robocopy to fail (bug #14958)
  • Linux hosts: properly create the /sbin/rcvboxdrv symbolic link (5.0.12 regression; bug #14989)
  • Mac OS X hosts: several fixes for USB on El Capitan (bug #14677)
  • Linux Additions: fixes for Linux 4.5 (bug #15032)

 

Trabajo, trabajo y más trabajo, lo único constante es el cambio.

VirtualBox 5.0.14

VirtualBox 5.0.14 instalando y compilando kernel con dkms.
VirtualBox 5.0.14 instalando y compilando kernel con dkms.

En la imagen arriba podeís obervar el proceso de actualización e instalación en Ubuntu 14.04 y en lo particular agradezco la deferencia de que revise si el grupo “vboxusers” está agregado al sistema GNU/Linux correspondiente (esto permite el acceso de los puertos USB, incluso 3.0, a las máquinas virtuales) y lo otro es la compilación in situ del kernel necesario, el que se adapta perfectamente al hardware donde uno tiene corriendo el sistema operativo. Todo esto permite eficiencia al máximo, el mejor aprovechamiento de recursos físicos “compilación personalizada” si le queremos dar un nombre. Si creeís que es una tontería esto último, leed la siguiente noticia sobre el futuro que se nos avecina, ahora les dicen “unikernels”.

Actualizando los paquetes de extensiones.

El proceso no estaría completo si no actualizamos los paquetes de extensión (bueno, en realidad utilizamos sólo uno, el de Oracle, pero allí está abierta la posibilidad si queréis usar el de un tercero e incluso desarrollar el vuestro ¡LIBERTAD!) en este caso la versión numérica coincide identicamente:

Descargando paquete de extensión 5.0.14 para VirtualBox
Descargando paquete de extensión 5.0.14 para VirtualBox
Descargado paquete de extensión 5.0.14 para VirtualBox
Descargado paquete de extensión 5.0.14 para VirtualBox
Advertencia antes de instalar paquete de extensión 5.0.14 para VirtualBox
Advertencia antes de instalar paquete de extensión 5.0.14 para VirtualBox
Instalado paquete de extensión 5.0.14 para VirtualBox
Instalado paquete de extensión 5.0.14 para VirtualBox

Casi olvidamos mencionar que, curiosamente, el paquete de extensión se actualiza AL EJECUTAR VIRTUALBOX y no por el repositorio de Ubuntu, que es lo normal además por todas las distribuciones Debian pero que la interfaz gráfica es bonita, ea, que nos gusta la línea de comandos pero esto de la interfaz gráfica cuela y mola en cantidad 😉 .

Actualización de software Ubuntu 14.04
Actualización de software Ubuntu 14.04

VBoxGuestAdditions.

Por último debemos actualizar en las máquinas virtuales el VBoxGuestAdditions el cual permite, por ejemplo, los gráficos 3D y los puertos USB, si a ver vamos, somo controladores “drivers” del entorno VirtualBox (recordar que los BIOS, NIC’s, etc son emulados) para descargar el archivo ISO deben ir a esta dirección web.

Aquí una copia del contenido remoto:

Index of http://download.virtualbox.org/virtualbox/5.0.14

      Name                                                                  Last modified      Size
      MD5SUMS                                                               19-Jan-2016 20:38  3.1K
      Oracle_VM_VirtualBox_Extension_Pack-5.0.14-105127.vbox-extpack        19-Jan-2016 17:55  17M
      Oracle_VM_VirtualBox_Extension_Pack-5.0.14.vbox-extpack               19-Jan-2016 17:55  17M
      SDKRef.pdf                                                            19-Jan-2016 18:14  2.4M
      SHA256SUMS                                                            19-Jan-2016 20:38  4.3K
      UserManual.pdf                                                        19-Jan-2016 17:43  3.4M
      VBoxGuestAdditions_5.0.14.iso                                         19-Jan-2016 17:46  57M
      VirtualBox-5.0-5.0.14_105127_el5-1.i386.rpm                           19-Jan-2016 18:48  81M
      VirtualBox-5.0-5.0.14_105127_el5-1.x86_64.rpm                         19-Jan-2016 18:48  82M
      VirtualBox-5.0-5.0.14_105127_el6-1.i686.rpm                           19-Jan-2016 18:48  73M
      VirtualBox-5.0-5.0.14_105127_el6-1.x86_64.rpm                         19-Jan-2016 19:18  73M
      VirtualBox-5.0-5.0.14_105127_el7-1.x86_64.rpm                         19-Jan-2016 20:04  68M
      VirtualBox-5.0-5.0.14_105127_fedora18-1.i686.rpm                      19-Jan-2016 20:04  68M
      VirtualBox-5.0-5.0.14_105127_fedora18-1.x86_64.rpm                    19-Jan-2016 20:22  68M
      VirtualBox-5.0-5.0.14_105127_fedora22-1.i686.rpm                      19-Jan-2016 20:04  68M
      VirtualBox-5.0-5.0.14_105127_fedora22-1.x86_64.rpm                    19-Jan-2016 20:04  68M
      VirtualBox-5.0-5.0.14_105127_openSUSE131-1.i586.rpm                   19-Jan-2016 20:04  62M
      VirtualBox-5.0-5.0.14_105127_openSUSE131-1.x86_64.rpm                 19-Jan-2016 20:04  62M
      VirtualBox-5.0-5.0.14_105127_openSUSE132-1.i586.rpm                   19-Jan-2016 20:04  62M
      VirtualBox-5.0-5.0.14_105127_openSUSE132-1.x86_64.rpm                 19-Jan-2016 20:04  62M
      VirtualBox-5.0-5.0.14_105127_sles11.0-1.i586.rpm                      19-Jan-2016 19:18  72M
      VirtualBox-5.0-5.0.14_105127_sles11.0-1.x86_64.rpm                    19-Jan-2016 19:18  72M
      VirtualBox-5.0.14-105127-Linux_amd64.run                              19-Jan-2016 18:00  81M
      VirtualBox-5.0.14-105127-Linux_x86.run                                19-Jan-2016 17:56  80M
      VirtualBox-5.0.14-105127-OSX.dmg                                      19-Jan-2016 18:04  87M
      VirtualBox-5.0.14-105127-SunOS.tar.gz                                 19-Jan-2016 17:57  94M
      VirtualBox-5.0.14-105127-Win.exe                                      19-Jan-2016 18:10  112M
      VirtualBox-5.0.14.tar.bz2                                             19-Jan-2016 17:58  106M
      VirtualBoxSDK-5.0.14-105127.zip                                       19-Jan-2016 18:02  9.2M
      virtualbox-5.0_5.0.14-105127~Debian~jessie_amd64.deb                  19-Jan-2016 19:04  62M
      virtualbox-5.0_5.0.14-105127~Debian~jessie_i386.deb                   19-Jan-2016 18:57  62M
      virtualbox-5.0_5.0.14-105127~Debian~squeeze_amd64.deb                 19-Jan-2016 18:26  67M
      virtualbox-5.0_5.0.14-105127~Debian~squeeze_i386.deb                  19-Jan-2016 18:09  67M
      virtualbox-5.0_5.0.14-105127~Debian~wheezy_amd64.deb                  19-Jan-2016 20:33  61M
      virtualbox-5.0_5.0.14-105127~Debian~wheezy_i386.deb                   19-Jan-2016 20:25  62M
      virtualbox-5.0_5.0.14-105127~Ubuntu~precise_amd64.deb                 19-Jan-2016 20:16  61M
      virtualbox-5.0_5.0.14-105127~Ubuntu~precise_i386.deb                  19-Jan-2016 20:09  62M
      virtualbox-5.0_5.0.14-105127~Ubuntu~trusty_amd64.deb                  19-Jan-2016 18:48  61M
      virtualbox-5.0_5.0.14-105127~Ubuntu~trusty_i386.deb                   19-Jan-2016 18:41  61M
      virtualbox-5.0_5.0.14-105127~Ubuntu~wily_amd64.deb                    19-Jan-2016 18:33  62M
      virtualbox-5.0_5.0.14-105127~Ubuntu~wily_i386.deb                     19-Jan-2016 18:26  62M
download.virtualbox.org

Actualizado el sábado 05 de marzo de 2016.

Es muy bienvenida la versión 5.0.16 y compiló los módulos del kernel sin problemas:

VirtualBox kernel modules 5.0.16
VirtualBox kernel modules 5.0.16

<Eso es todo, por ahora>.

FreeCAD en Ubuntu

FreeCAD en Ubuntu.

¿FreeCAD en Ubuntu? ¿Por qué no en Debian? Primero debemos explicar qué es FreeCAD: es software libre especialmente realizado para dibujar objetos en tercera dimensión, más que todo piezas mecánicas, siempre teniendo en cuenta las normas internacionales “standards” para interoperabilidad con miríadas de otros programas de Diseño Gráfico Asistido (DGA o como se conoce en inglés “Computer Assisted Design” -en castellano quien nos asiste es el ordenador mismo-).

FreeCAD versión 0.15
FreeCAD versión 0.15

Retrocediendo en el tiempo, la experiencia que tenemos en dibujo asistido por computadora se remonta a 1991, cuando por aquel entonces existía el AutoCAD 2.62 -en realidad comenzamos con la versión 2.17 pero necesitabamos AUTOLISP y nos migraron a la que lo soportaba, aunque tampoco era la última versión disponible para la fecha-. Honor a quien honor merece: Autodesk nos dio a las masas el impulso necesario para arrancar a “soñar” y hacer más en menos tiempo (pueden ustedes descargar un demostrativo e instalar dicho programa de software privativo en este enlace, vamos que el mundo es muy grande y cabemos todos, valga la “cuña publicitaria”). Claro, faltaban unos cuantos años para que el internet se masificara, pero esa es otra historia.

Es así que con la utilización de LISP  -el segundo lenguaje de programación de alto nivel más viejo, después del FORTRAN– ya en esa empresa de software apuntaban alto, APUNTABAN A LAS NORMAS ABIERTAS, o estándares abiertos. Eso permitió que los dibujos que hicimos -y que quemaron nuestras pestañas con los monitores de rayos catódicos brillando en verde- bajo el formato DWG (abreviatura de “drawing”, en inglés) que tenía “incrustado” el formato DFX (más delante explicaremos esto) y aún hoy en día puedan ser leídos e interpretados, porque son en realidad gráficos vectoriales. Dicho formato fue creado en 1982 y como comprenderán faltaban un montón de años para que surgiera GNU/Linux -pero Richard Stallman fue presionado legalmente a usar software privativo, lo cual fue la gota que derramó el vaso al año siguiente-.

De 1982 a 1997 fueron 15 años muy interesantes que nos tocó vivir en esto de la programación y fue en 1998 (por avatares de la vida ya no teníamos trabajo alguno, desde hace años, en diseño de piezas mecánicas, la crisis económica del país era grave) cuando nace la “Open Design Alliance” una organización sin fines de lucro orientada a promover la interoperabilidad de software PERO sigue siendo aún software privativo. De nuevo repetimos, en este mundo cabemos todos y sobra espacio, el universo es infinito. Líneas arriba pueden leer -en inglés- la historia de dicha organización.

Por supuesto que el mundo es muy grande, y hay otras alternativas de Software, tal es el caso de LibreCAD el cual es una bifurcación o “fork”🍴 como le dicen en inglés, de el QCAD el cual nació en 1999 a partir del código de CAM Expert. Por cierto en el siguiente “tuit” ofrecen un enlace de un artículo sobre LibreCAD que reseña que fue creado en 1980, lo cual es incorrecto, lo que sí es cierto es que el formato de archivos, bajo software libre si que data de esa época, más o menos.

Al punto que queremos llegar es el siguiente: el mundo del CAD privativo dio levemente su brazo a torcer con el formato DFX secundado de manera nada amistosa por el OpenDWG -ahora conocido como DWGDirect– y el mundo del CAD libre también dio levemente su brazo a torcer con LibreDWG y esta serie de condiciones han abierto el camino para el nacimiento de FreeCAD.

Esa es la manera más simple de resumir y explicar 33 años de historia moderna del CAD: muchos compañeros de estudio no están de acuerdo con estas lineas escritas más poco se alejan de lo comentado aquí; apenas detalles, lo consideramos así. 😉

Pasamos a explicar entonces que Debian es software libre purista, muy comprometido con el código completamente abierto a diferencia de Ubuntu que permite de manera predeterminada muchísimos tipos de licencias de software. Por eso si desarrollamos diseño gráfico, artes o diseño asistido por computadora necesitamos hardware de video poderoso, escribo estas líneas con una modesta “GeForce GT 520/PCIe/SSE2” -que para la tarea de dibujar que tenemos basta- Ubuntu provee y permite usar tanto controladores de hardware privativo como libre, tenemos la libertad de elegir en ese aspecto. Ya ven entonces de dónde proviene el título de esta entrada “FreeCAD en Ubuntu”, y nos disculpan la larga explicación.

NVIDIA controlador privativo y controlador de código abierto
NVIDIA controlador privativo y controlador de código abierto

¿Por qué usar controladores privativos en ciertos casos?

Resulta ser que hay al menos tres grandes y principales fabricantes de tarjetas de video para nuestro trabajo gráfico -y juegos-: Intel, AMD y nVidia. Los tres han levemente contribuido al software libre, ya que cada día somos más que usamos GNU/Linux y pues sienten la presión de nosotros, los consumidores de tecnología para nuestro trabajo y que hacer diario, MÁS SIN EMBARGO NO HAN LIBERADO NI DADO APOYO TOTAL. Y he aquí que una de las personas que más admiro es Sarah Sharp, quien desarrolló los controladores de USB 3.0 en GNU/Linux y estuvieron disponibles primero, incluso, que sus contrapartes privativos -la historia es larga- y tomo de ella un pequeño consejo si deseaís usar controladores libres:

Allí, en inglés, la lengua materna de ella, describe cómo podemos nosotros ayudar y contribuir a reportar las excepciones -“bugs” en inglés- de las tarjetas de video en software libre, haciendo un reporte muy técnico para ir al grano y permitir que los desarrolladores sigan haciendo, prácticamente, ingeniería inversa. En ese caso le toman el defecto a una escena de un famoso juego -objetable moralmente, pero bueno, así somos los humanos, libre albedrío- y para un hardware Intel PERO NO SE DEJEN LLEVAR POR EL “TUIT” O MENSAJE si leen con calma y siguen los enlaces que publica Sarah Sharp verán que es aplicable a diversos hardware, hasta en tarjetas gráficas integradas en las tarjetas madre, aunque un poco complejo verán una serie de herramientas para tal efecto.

Recalcamos entonces: si quieren dibujar en computadoras PRIMERO debemos conocer lo máximo posible sobre el hardware gráfico, tarjetas de video.   Dado el caso alguna vez colapse el Twitter, les dejo aquí el enlace a la entrada del blog de Sarah Sharp, y en este otro enlace ella explica cómo encaja el MESA en el kernel de GNU/linux ¡gracias de nuevo mi heroína! (Thanks again, Sarah Sharp, my hero!)  


 

FreeCAD, presentación.

  Como apenas estamos comenzando a utilizar el FreeCAD es necesario presentarselos y buscando en la red hallo muy interesante y ameno el trabajo del señor Juan Gonzáles Gómez quien tiene 40 video tutoriales sobre esta aplicación de diseño gráfico y les traemos la presentación de la serie:

 

Si quereís conocer a fondo el trabajo tridimensional e incluso aprender a utilizar las impresoras de tercera dimensión les animo a visitar la lista de videos, muchas gracias sr. Juan Gonzáles Gómez. Como reconocimiento a su trabajo les dejo el vídeo del logotipo de su Academia, dejad que la Fuerza os acompañe:

   


 

FreeCAD, instalación en Ubuntu.

  La instalación de FreeCAD está muy bien documentada -en inglés- en este enlace y en nuestro caso se cumplió exactamente como enuncian: si instalamos a FreeCAD por los repositorios oficiales de Ubuntu -o por el Centro de Software- NO obtendremos la última versión. Inicialmente obtuvimos la versión 0.14 al introducir la siguiente orden:  

sudo apt-get install freecad

Por lo tanto debimos actualizar por el propio repositorio de FreeCAD, ganando acceso como usuario raíz “root” en una cónsola de comandos:  

sudo add-apt-repository ppa:freecad-maintainers/freecad-stable

  Si todo sale bien obtendremos al aviso de que fue agregado exitosamente el repositorio (si desean concer más acerca de los PPA hagan click en este enlace -en inglés-) y veremos algo así como esto:

FreeCAD PPA
FreeCAD PPA

  Ahora bien, lo siguiente que hay que hacer son las consabidas siguientes 2 líneas:

sudo apt-get update
sudo apt-get upgrade

Y por último la orden en sí misma para instalar FreeCAD:

sudo apt-get install freecad freecad-doc

Y veremos algo parecido a los siguientes mensajes (como ya teníamos instalada la versión 0.14 nos avisa que podemos eliminar los archivos con las versiones que no son necesarias para la versión 0.15, la eficiencia por delante para mantener nuestros discos duros “lo más limpios posible”):

FreeCAD ppa archivos no necesarios
FreeCAD ppa archivos no necesarios

Nos anuncia que necesita descargar archivos necesarios para los paquetes nuevos y cuyo tamaño es de 106 megabytes (recordar que estamos actualizando y son menos datos “a bajar”):

FreeCAD ppa archivos necesarios y por descargar
FreeCAD ppa archivos necesarios y por descargar

Tenemos 2 minutos de paciencia mientras obtenemos los datos:

FreeCAD ppa archivos ya descargados y por instalar
FreeCAD ppa archivos ya descargados y por instalar

  Y comienza el proceso de instalación:

FreeCAD ppa archivos instalados y actualizados
FreeCAD ppa archivos instalados y actualizados

Mientras hacíamos todo esto olvidamos cerrar una instancia del FreeCAD 0.14, Ubuntu no aviso nada de que debíamos cerrarlo, pues no hay problema alguno, cerramos la ventana que teníamos abierta y lo volvemos a ejecutar para ver lo siguiente:

FreeCAD inicio versión 015
FreeCAD inicio versión 0.15

  Si agudizamos nuestra visión leemos “Running FreeCADGuinit.py” -entre tantos avisos que muestra al ejecutarlo- pero lo que queremos hacer notar es la extensión “.py” del archivo que carga en memoria, archivo leido: está escrito en lenguaje Python. De hecho ese lenguaje Python junto con  lenguaje C, “son los padres de la criatura” y nos dejaron Python para nosotros los usuarios finales el poder correr macros y guiones, tal como lo fue el AUTOLISP al Autocad (¿recuerdan los párrafos iniciales donde dijimos que estaba adelantada a su tiempo y tenían visión de futuro?). Ya para finalizar y comenzar a dibujar y entregar el proyecto (¡uff lo que tenemos por delante!) pues agregar que “matamos dos pájaros de un solo tiro”: compartimos el conocimiento para instalar las herramientas necesarias para nuestro trabajo. ¡Qué bueno es el software libre! 😎  


      Actualización no más de haber terminado de publicar esta entrada de blog:

El señor Juan González @Obijuan_cube “imprime” las primeras piezas de resina, ¿Habrá utilizado FreeCAD? Lo más probable es que sí, pero no vamos a importunarle en preguntarselo, je je je.  


Actualizado el jueves 17 de marzo de 2016.

En un excelente análisis de las diversas opciones de diseño asistido por computadora en software libre, en idioma italiano, podemos tener rápidamente un panorama acerca de esta materia. La entrada del blog la pueden encontrar en este enlace web y paso a traducir al castellano el resumen para Freecad:

Ventajas:

  • Entorno intuitivo y familiar para los usuarios con una amplia experiencia en software comercial.
  • Versátil y ligero, especialmente en sus versiones para GNU / Linux.
  • Máxima adherencia a los estándares.
  • Personalización y creación de productos y servicios específicos prácticamente ilimitadas.
  • Comunidad muy activa y multidisciplinaria.
  • Excelentes perspectivas para el futuro.

Desventajas:

  • El crecimiento rápido pero un poco ‘”caótica”.
  • La falta de un servicio profesional (no ser gobernado por una empresa).
  • Todavía algunas limitaciones en el uso extremadamente avanzada.
  • Aún lejos de la versión 1.0 (debido a la estabilidad parece imposible, pero aún está en versión alfa).


 

<¡Eso es todo, por ahora!>.

Ubuntu 15.10 Wily Werewolf.

Ubuntu 15.10 Wily Werewolf, actualización, no voy a negar que Ubuntu, basado en Debian, es infatigable en su avance, tiene sus detractores pero sigo pensando que simplemente este hombre lobo llegó para dar una DURA pelea a los demás sistemas operativos no GNU/Linux.

Ubuntu 15 Wily Worewolf

Si bien recuerdo el mensaje decía 700 megabytes de datos en la actualización mayor, incluso pidió reiniciar, cosa rara en sistemas GNU/Linux pero bueno “una vez al año no hace daño” 😉 :

Ubuntu 15 Wily Worewolf2

Ubuntu 6 32 bits 27 junio 2007

Ubuntu 6.10 32 bits.

Ubuntu 6.10 32 bits.

Ubuntu 6.10 32 bits (año 2007 y reinstalado en 2015 por medio de una máquina VirtualBox): un CD que recuperé del baúl de los recuerdos el cual le hice una imagen ISO con Brasero (recuperado en un 99,9% a pesar de haber estado más de 48 horas leyendo y releyendo) y la utilidad de disco confirma los defectos en la imagen grabada. También tiene utilidad de comprobación de memoria RAM, la ejecuté también, todo está en el video.

Por allá en el 2004 tenía una computadora que compré ya armada y me vendieron una marca infame de tarjeta madre (yo recomiendo las marcas Foxconn, Asus y Gigabyte con los ojos cerrados) y dicha tarjeta madre dejó de reconocer disco duro alguno en el 2007, pero al menos si arrancaba desde CD (en aquella época era una novedad en Venezuela el DVD interno para computadora, el cual era el primero de mi propiedad y de paso era quemador también). Así que para no darle más vueltas a ese asunto descargué el Ubuntu y usaba el live CD y guardaba en memoria USB (pendrive). Esa computadora a la final la desarmé y vendí por partes pero como no hay mal que por bien no venga me introdujo a mi primera experiencia real con el Software Libre, submundo Linux.

<Eso es todo, por ahora>.