Presidente Maduro anuncia segundo aumento salarial y de pensiones de 2017 en 60 por ciento.

Download PDF

Aumento de sueldo y cestaticket, mayo 2017.

Texto: Alba Ciudad (Luigino Bracci Roa).

El presidente Nicolás Maduro, en cadena de radio y televisión, anunció un aumento de salario mínimo en 60 por ciento, incluyendo pensiones y tablas de trabajadores de la administración pública. También anunció un aumento del cestaticket, que sube de 12 a 15 puntos de la unidad tributaria. “Esto quiere decir que el salario mínimo integral aumenta a Bs. 200.021 a partir del mes de mayor”. Igualmente, aprobó que el cestaticket pueda ser depositado y pagado en bolívares.

Aumento salarial 1° mayo 2017

El anuncio se realizó en el programa Los Domingos con Maduro, realizado desde el Teatro Bolívar en Caracas. Es el tercer aumento de este año, el aumento número 15 del gobierno de Nicolás Maduro, y el aumento número 37 de la revolución bolivariana.

Indicó que el nivel de desempleo es de 6,6 por ciento, “un récord para un país sometido a una guerra económica”. También señaló que el 62 por ciento de los trabajadores del país tienen empleo formal; recordó además de los programas sociales que asisten tanto a quienes tienen empleo formal como informal.

Señaló Maduro que se han creado 1,2 millones de empleos durante su gestión, y 5 millones de empleos durante la revolución bolivariana. “La revolución ha dado 36 aumentos salariales integrales”, señaló, de los cuales 14 aumentos se han dado en los 4 años de su gestión.

Decreto N° 2.832: aumento de 60% a salario mínimo mensual.

Con fecha martes 02 de mayo de 2017 en Gaceta Oficial Extraordinario N° 6.296 está publicado el Decreto Presidencial N° 2.832 el cual establece un aumento de 60% en el salario mínimo mensual para trabajadores y trabajadoras tanto del sector público como el sector privado, a continuación hacemos la transcripción del documento oficial.

Enlaces para descargar la Gaceta Oficial N° 6.296.

Desde el Tribunal Supremo de Justicia:

El ejemplar completo que pesa 3,6 Megabytes lo podéis descargar del sitio web oficial del Poder Judicial.

Desde este vuestro humilde sitio web:

Extrajimos las primeras 4 hojas en 1,5 Megabytes que contienen solamente 2 decretos: el decreto de aumento de sueldo y el decreto de aumento de Cestaticket.


PRESIDENCIA DE LA REPÚBLICA

Decreto  N° 2.832

01 de mayo de 2017

NICOLÁS MADURO MOROS

Presidente de la República

Con el supremo compromiso y voluntad de lograr la mayor eficacia política y calidad revolucionaria en la construcción del Socialismo, la refundación de la patria venezolana, basado en principios humanistas, sustentado en condiciones morales y éticas que persiguen el vivir bien del país y del colectivo, por mandato del pueblo de conformidad con lo establecido en los artículos 80 y 91 de la Constitución de la República Bolivariana de Venezuela, concatenado con el artículo 226 ibídem, y en ejercicio de la atribución que me confiere el numeral 11 del artículo 236 eiusdem, en concordancia con el artículo 46 del Decreto con Rango, Valor y Fuerza de Ley Orgánica de la Administración Publica, y de acuerdo a lo preceptuado en los artículos 10, 98, 111 y 129 del Decreto con Rango, Valor y Fuerza de Ley Orgánica del Trabajo, los Trabajadores y las Trabajadoras, en Consejo de Ministros,

CONSIDERANDO

Que es una función fundamental del gobierno revolucionario la protección social, de la economía del Pueblo y de la guerra económica desarrollada por el imperialismo y sectores apátridas nacionales, que impulsan procesos inflacionarios y desestabilizacion económica como instrumentos de acumulación de capital y perturbación económica, política y social,

CONSIDERANDO

Que el Estado democrático y social, de derecho y de justicia garantiza a los trabajadores y las trabajadoras, la participación en la justa distribución de la riqueza generada mediante el proceso social de trabajo, como condición básica para avanzar hacia la mayor suma de felicidad posible, como objetivo esencial de la Nación que nos legó El Libertador,

CONSIDERANDO

Que es función constitucional del Estado defender principios democráticos de equidad, así como una política de recuperación sostenida del poder adquisitivo de la población venezolana, así como la dignificación de la remuneración del trabajo y el desarrollo de un modelo productivo soberano, basado en la justa distribución de la riqueza, capaz de generar trabajo estable y de calidad, garantizando que las y los trabajadores disfruten de un salario mínimo igual para todas y todos,

DECRETO N° 26 EN EL MARCO DEL ESTADO DE EXCEPCIÓN Y EMERGENCIA ECONÓMICA, MEDIANTE EL CUAL SE AUMENTA EL SALARIO MÍNIMO MENSUAL OBLIGATORIO Y SE CREA UN BONO ESPECIAL COMPENSATORIO PARA LOS PENSIONADOS Y PENSIONADAS.

Artículo 1°.

Se aumenta en un sesenta por ciento (60%) el salario mínimo nacional mensual obligatorio en todo el territorio de la República Bolivariana de Venezuela, para los trabajadores y las trabajadoras que presten servicios en los sectores públicos y privados, sin perjuicio de lo dispuesto en el artículo 2° de este Decreto, a partir del 1° de mayo de 2017, estableciéndose la cantidad de SESENTA Y CINCO MIL VEINTIUNO BOLÍVARES CON CUATRO CÉNTIMOS (Bs. 65.021,04) mensuales.

El monto de salario diurno por jornada, será cancelado con base al salario mínimo mensual a que se refiere este artículo, dividido entre treinta (30) días.

Artículo 2°.

Se fija un aumento del salario mínimo nacional mensual obligatorio en todo el territorio de la República Bolivariana de Venezuela para los y las adolescentes aprendices, de conformidad con lo previsto en el Capítulo II del Titulo V del Decreto con Rango, Valor y Fuerza de Ley Orgánica del Trabajo, los Trabajadores y las Trabajadoras, a partir del 1° de mayo de 2017, por la cantidad CUARENTA Y OCHO MIL TRESCIENTOS CINCUENTA Y CUATRO BOLÍVARES CON NOVENTA Y SEIS CÉNTIMOS (Bs. 48.354,96) mensuales.

El monto del salario por jornada diurna, aplicable a los y las adolescentes aprendices, será cancelado con base al salario mínimo mensual a que se refiere este artículo, dividido entre treinta (30) días.

Cuando la labor realizada por los y las adolescentes aprendices, sea efectuada en condiciones iguales a la de los demás trabajadores y trabajadoras, su salario mínimo será el establecido en el artículo 1° de este Decreto, de conformidad con el artículo 303 del Decreto con Rango, Valor y Fuerza de Ley Orgánica del Trabajo, los Trabajadores y las Trabajadoras.

Artículo 3°.

Los salarios mínimos establecidos en este Decreto, deberán ser pagados en dinero en efectivo y no comprenderán, como parte de los mismos, ningún tipo de salario en especie.

Artículo 4°.

Se fija como monto de las pensiones de los jubilados y las jubiladas, los pensionados y las pensionadas de la  Administración Pública, el salario mínimo nacional obligatorio establecido en el Artículo 1° de este Decreto.

Artículo 5°.

Se fija como monto de las pensiones otorgadas a los pensionados y las pensionadas, por el Instituto Venezolano de los Seguros Sociales (I.V.S.S.), el salario mínimo nacional obligatorio establecido en el Artículo 1° de este Decreto.

Artículo 6°.

Adicionalmente, a lo establecido en el artículo 1 de este Decreto, se otorga a los pensionados y pensionadas por el Instituto Venezolano de los Seguros Sociales (I.V.S.S.), que perciban el equivalente a un salario mínimo, un Bono Especial de Guerra Económica del treinta por ciento (30%), equivalente a la cantidad de DIECINUEVE MIL QUINIENTOS SEIS BOLÍVARES CON TREINTA Y ÚN CÉNTIMOS (Bs.19.506,31) mensuales.

Quienes fueren beneficiarios de más de una pensión, en el marco del ordenamiento jurídico aplicable, recibirán el beneficio solo con respecto a una de ellas.

Artículo 7°.

Cuando la participación en el proceso social de trabajo se hubiere convenido a tiempo pardal, el salario estipulado como mínimo, podrá someterse a lo dispuesto en el artículo 172 del Decreto con Rango, Valor y Fuerza de Ley Orgánica del Trabajo, los Trabajadores y las Trabajadoras, en cuanto fuere pertinente.

Artículo 8°.

El pago de un salario inferior a los estipulados como mínimos en este Decreto, obligará al patrono o patrona a su pago de conformidad con el Artículo 130 del Decreto con Rango, Valor y Fuerza de Ley Orgánica del Trabajo, los Trabajadores y las Trabajadoras y dará lugar a la sanción indicada en su artículo 533.

Artículo 9°.

Se mantendrán inalterables las condiciones de trabajo no modificadas en este Decreto, salvo las que se adopten o acuerden en beneficio del trabajador y la trabajadora.

Artículo 10°.

Queda encargado de la ejecución de este Decreto, el Ministro del Poder Popular para el Proceso Social de Trabajo.

Artículo 11.

Este Decreto entrará en vigencia a partir del 1° de mayo de 2017.

Dado en Caracas, al primer día del mes de mayo de dos mil diecisiete. Años 207° de la Independencia, 158° de la Federación y 18° de la Revolución Bolivariana.


Decreto N° 2.833: aumento a 15 U.T. diarias el cestaticket socialista.


Decreto N° 2.833

01 de mayo de 2017

NICOLÁS MADURO MOROS

Presidente de la República

Con el supremo compromiso y voluntad de lograr la mayor  eficacia polltica y calidad revolucionaria en la construcción del socialismo, y en el engrandecimiento del país, basado en los principios humanistas, y en condiciones morales y éticas bolivarianas, por mandato del pueblo, en ejercicio de la atribución que me confiere el numeral 11 del artículo 236 de la Constitución de la República Bolivariana de Venezuela, en concordancia con lo dispuesto en el artículo 46 del Decreto con
Rango, Valor y Fuerza de Ley Orgánica de la Administración Pública, y de conformidad con el artículo 7° del Decreto con
Rango, Valor y Fuerza de Ley del Cestaticket Socialista para los Trabajadores y Trabajadoras, en Consejo de Ministros,

CONSIDERANDO

Que el Estado debe promover el desarrollo económico, con el generar fuentes de trabajo, con alto valor agregado nacional y elevar el nivel de vida de la población para garantizar la seguridad jurídica y la equidad en el crecimiento de la economía, a objeto de lograr una justa distribución de la riqueza, mediante una planificación estratégica, democrática y participativa,

CONSIDERANDO

Que es obligación del Estado, proteger al pueblo venezolano de los embates de la guerra económica propiciada por factores internos como externos; razón por la cual, considera necesario equilibrar los diferentes eslabones del proceso productivo y garantizar el acceso de la población a los productos de primera necesidad ante las circunstancias que vive la economía venezolana,

CONSIDERANDO

Que es interés del Ejecutivo Nacional, asegurar los niveles de bienestar y prosperidad de los trabajadores y las trabajadoras y de su núcleo familiar.

DICTO
El siguiente,

DECRETO N° 27 EN EL MARCO DEL ESTADO DE EXCEPCIÓN Y EMERGENCIA ECONÓMICA, MEDIANTE EL CUAL SE INCREMENTA LA BASE DE CÁLCULO Y SE MODIFICA LA MODALIDAD PARA EL PAGO DEL BENEFICIO DEL CESTATICKET SOCIALISTA.

Artículo 1°.

Se ajusta la base de calculo para el pago del Cestaticket Socialista para los trabajadores y las trabajadoras que presten servicios en Los sectores público y privado, a quince Unidades Tributarias (15 U.T.) por día, a razón de treinta (30) días por mes, pudiendo percibir hasta un máximo del equivalente a cuatrocientas cincuenta Unidades Tributarias (450 U.T.) al mes, sin perjuicio de lo dispuesto en el articulo 7° del Decreto con Rango, Valor y Fuerza de Ley del Cestaticket Socialista para los Trabajadores y Trabajadoras.

Artículo 2°.

Las entidades de trabajo de los sectores público y privado, ajustaran de conformidad con lo establecido en el artículo 1° de este Decreto, el beneficio de alimentación denominado “Cestaticket Socialista” a todos los trabajadores y las trabajadoras a su servicio.

Artículo 3°.

Los empleadores y empleadoras tanto del sector público como del sector privado, pagarán a cada trabajador y trabajadora en efectivo o mediante abono en su cuenta nómina el monto por concepto de Cestaticket Socialista a que se refiere el artículo 1° de este Decreto, expresando en recibo de pago separado el monto que resulte por los días laborados, así como indicando que el mismo no genera incidencia salarial alguna, y en consecuencia no podrán efectuarse deducciones sobre este, salvo las que expresamente autorice el trabajador para la adquisición de bienes y servicios en el marco de Los programas y misiones sociales para la satisfacción de sus necesidades.

Artículo 4°.

El ajuste mencionado en el artículo 1° de este Decreto, es de obligatorio cumplimiento por parte de los empleadores y las empleadoras en todo el territorio de la República Bolivariana de Venezuela.

Artículo 5°.

Las entidades de trabajo de los sectores público y privado, que mantienen en funcionamiento el beneficio establecido en el artículo 4°, numerales 1 al 4 del Decreto con Rango, Valor y Fuerza de Ley del Cestaticket Socialista para los Trabajadores y Trabajadoras, adicionalmente y en forma temporal, deberán otorgar dicho beneficio en efectivo o mediante depósito en la cuenta nómina, de acuerdo con lo establecido en el artículo 3° de este Decreto.

Artículo 6°.

Se otorga un plazo de treinta (30) días, contado a partir de la publicación de este Decreto en la Gaceta Oficial de la República Bolivariana de Venezuela, para que las entidades de trabajo pública y privada, adecúen los sistemas de nóminas para proceder al pago del Cestaticket Socialista a los trabajadores y trabajadoras, en dinero efectivo en sus cuentas.

Artículo 7°.

Los cupones, tickets y tarjetas electrónicas de alimentación que ya hubieren sido emitidas mantendrán su validez y vigencia, para su uso ante Los establecimientos especializados en la administración y gestión de beneficios
sociales, hasta el 31 de diciembre de 2017.

Las empresas proveedoras o administradoras de Los cupones, tickets y tarjetas electrónicas de alimentación deberán garantizar el uso de los referidos instrumentos en Los establecimientos destinados a tal fin.

Artículo 8°.

Queda encargado de la ejecución de este Decreto, el Ministro del Poder Popular para el Proceso Social de Trabajo.

Artículo 9°.

Este Decreto entrara en vigencia a partir del 1° de mayo de 2017.

Dado en Caracas, al primer día del mes de mayo de dos mil diecisiete. Años 207° de la Independencia, 158° de la Federación y 18° de la Revolución Bolivariana.


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

Comandos para GNU/Linux pocos conocidos

Download PDF

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-8revisad 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:

Download PDF
Python logo sin texto

Python http.server

Download PDF

La verdad es que revisando los temas publicados por nuestros colegas de GNULinuxBlog (por ahora quien publica el tema, el sr. Elías Rodríguez Martín y el sr. José Miguel, creador del blog) encontramos uno en particular muy útil y que nosotros habíamos enfocado de una manera un tanto complicada en comparación con la facilidad de lo que allí proponen. Cuando conseguimos que alguien es más listo que nosotros inmediatamente lo reconocemos y aprendemos de dichas personas, no tenemos rubor en admitirlo, por eso os pedimos que nos acompañéis en nuestro artículo de hoy: compartir ficheros de una manera rápida y sencilla con Python.

Python logo original
Python logo original

Seguir leyendo

Download PDF
PDF logo

Trabajando con documentos PDF

Download PDF

El formato PDF es hoy en día ubicuo, sin embargo no nos detenemos a pensar mucho sobre cómo funcionan y qué podemos hacer con ellos. Anteriormente publicamos un problemilla que tuvimos para extraer los datos allí contenidos y los cuales ofuscaron de una manera muy intelegente, admirable en verdad, muy bien pensado. Pero eso no nos detiene y allí propusimos una solución que luego lo vamos a complementar con otro de nuestros artículos (todos nuestros tutoriales están interconectados o relacionados para configurar un todo). Empezemos, pues, ¡VAMOS!

Introducción.

Esta entrada no va a ir sobre la historia y normas de los documentos PDF («Portable Document Format» por sus siglas en idioma inglés) ya que sobre eso hay bastante material en la red y, además, que nosotros somos terriblementes pragmáticos. Ojo, no estamos diciendo que estudiar la teoría es mala, sino que en este caso la teoría es compleja, e incluso hay quienes piensan que las especificaciones establecidas son «maléficas» ya que permiten muchos fallos en la seguridad de nuestros ordenadores, pero ¿por qué a devenido esta situación? Veamos.

Brevísima historia del PDF.

Para todos los efectos, en vez de escribir a cada rato «Formato de Documento Portátil» os mostraremos el acrónimo de tres letras PDF por el cual es ampliamente conocido a nivel mundial por ser la norma de facto digital.

Aunque vosotros no lo creaís, el PDF comenzó siendo un formato privativo por parte del Doctor John Warnock, allá en 1991 (cuando nosotros en esa época montábamos redes de área local con Netware Novell con IPX/SPX y cable de red coaxial RG58 de 10 mbps -y estudiábamos ingeniería en la Universidad de Carabobo y aún Linus Torvalds estaba por comenzar a estudiar en la universidad-). Originalmente el proyecto se llamaba «Camelot» y para 1992 obtuvo su madurez técnica.

La idea era «sencilla»: poder abrir un fichero bajo diferentes sistemas operativos (y, por ende, en distintos hardwares) de la misma forma y manera, tanto por pantalla como por impresora. Debido a las limitaciones de los ordenadores y el costo de los mismos (y vaya que nosotros lo podemos atestiguar, lo sufrimos en carne propia) la ardua tarea era lo que hoy damos por sentado -recordad que el internet no estaba masificado aún-: que un documento se viera igual a como lo habían diseñado, «artísticamente», los autores respectivos. En aquel tiempo la idea era revolucionaria, apenas comenzábamos a usar sistemas operativos con entorno gráfico y dispositivos apuntadores -léase ratones-.

Para ello el Dr. John Warnock y su socio Charles Geschke basaron las especificaciones en un archivo autocontenido que contuviera las fuentes (tipos de letras) e imágenes -tan simple como eso- y en base a esas especificaciones programar diferentes ejecutables que pudieran abrir y mostrar dichos documentos en diferentes ambientes. Pero ellos no estaban solos en su trabajo, ambos (Warnock y Geschke) trabajaban en «Xerox’s Palo Alto Research Center (Xerox PARC)» y estaban tratando de convencer a dicha empresa acerca de un nuevo lenguaje gráfico que ellos denominaban Interpress pero no le prestaron atención tras lo cual decidieron renunciar y fundar la empresa Adobe (¿la conoceís acaso?) y rebautizaron dicho lenguaje como PostScript. Como véis, era software privativo e hicieron dinero a raudales por aquello de que «en tierra de ciegos, el tuerto es el rey».

Fallas en la seguridad del PDF.

Como podremos imaginar, lo único constante es el cambio, y para PDF ésto no es la excepción. Con el devenir de los años y el aumento de la potencia de los equipos aunado a la masificación de la internet, se hizo necesario -por ejemplo- que en los archivos PDF pudiera insertarse enlaces web para ampliar la información que uno leía. Pero las aplicaciones que leen y muestran documentos PDF no fueron hechas para navegar por internet, eso ya es un mundo completamente aparte y diferente, sumamente difícil de incrustar (ya veremos después que al final sucedió lo contrario: los modernos navegadores web pueden mostrar documentos PDF sin ningún tipo de problema debido a las bien conocidas especificaciones de formato de archivo).

La solución para la época fue que las aplicaciones lectoras de documentos PDF (lo abreviaremos de ahora en adelante como visor PDF) se les dió la «facultad» de lanzar aplicaciones no solo para los enlaces web contenidos en el documento sino también para todo el «multimedia» -audio y vídeo- e incluso la ejecución de ciertos lenguaje scomo JavaScript . Acá un ejemplo, en vídeo, de la situación en el año 2010:

El señor Neil J. Rubenking en el año 2010 se hizo la pregunta ¿acaso PDF significa Pretty Dangerous Format (Bonito y Peligroso Formato)? y a la conclusión que él llega es que en ese año, ahora en 2017 y allá por 1990 la solución a los problemas de seguridad en los archivos PDF es volver a sus raíces: mostrar correctamente un documento tal como fue concebido y eliminarle todos los agregados «multimedia» que pueden hacer daño a nuestros ordenadores.

PDF como «formato abierto».

Irónicamente el artículo que data del año 2010, y al cual hacemos referencia en la sección anterior, no nombra para nada el hecho que en el año 2005 la Asociación Internacional para la Normalización («International Organization for  Standardization» o ISO por su abreviatura) emitió la norma ISO 19005-1 mejor conocida como PDF/A la cual está basada en la consabida norma PDF dictada por Adobe la cual recoge los sueños y anhelos de los más puristas defensores del documento de formato abierto.

Las características que hacen al PDF/A una joya a ser conservada son las siguientes:

  1. Debe ser independiente del dispositivo donde se visualize.
  2. Debe ser autocontenido, no necesita descargar ningún recurso fuera de los que contiene el archivo en sí.
  3. Debe ser autodocumentado, lo cual garantiza a futuro su interpretación y correcta lectura.

Debido a estas tres características -cada fichero debe contener las instrucciones para abrirlo junto con el texto e imágenes también- resulta en que dichos archivos son ligeramente voluminosos. Pero es un costo que muchos estamos dispuestos «a pagar» e incluso existe una asociación formal que defienden a capa y espada dicho formato y desarrollan aplicaciones que garantizan mantener sus especificaciones.

El PDF/A garantiza su «pureza» al prohibir expresamente las siguientes características:

  • No deben contener ni audio ni vídeo.
  • No deben contener imágenes en formato JPG (deben ser imágenes de formato abierto, el JPG es privativo).
  • El lenguaje JavaScript y el llamado a ejecutar aplicaciones está prohibida.
  • Todas las fuentes o tipos de letras deben estar contenidas y se debe garantizar que no tienen restricción alguna para ser reproducidas y mostradas (entiéndase fuentes de dominio público).
  • La manera de definir y describir los colores debe ser independiente del dispositivo utilizado (entiendase especificaciones abiertas o normalizadas de color).
  • La encriptación está deshabilitada (lo cual es totalmente diferente a comprimir y/o encriptar un fichero PDF/A para enviarlo a otras personas o instituciones).
  • El uso de metadatos (datos que se describen a sí mismos) basados en normas internacionales reconocidas es obligatoria.

Subsiguientes normas PDF/A.

La norma ISO PDF/A en realidad es la norma PDF/A-1 y luego le sucedieron dos normas adicionales:

  • PDF/A-2 emitida en el año 2011 la cual extiende las capacidades del PDF/A-1.
  • PDF-/A-3 emitida en el año 2012 el cual permite la incrustación de diverson formatos de archivos tales como XML, CSV, CAD, hojas de cálculo, etc.

Desde luego, las especificaciones son más complejas, pero en aras de la simplicidad, así lo hemos explicado. Tal vez, y a futuro, publicaremos algo sobre formularios en PDF lo cual consideramos algo verdaderamente útil: recibes un fichero donde puedes llenar ciertos campos (tu nombres, apellidos, etc.) y mandarlo a la impresora. Lo que no consideramos para nada útil es devolver ese mismo fichero por correo electrónico ya que para eso mucho mejor es crear una página web segura (https) para recolectar dicha información en línea y guardarla en una base de datos.

Ah, y otra cosa, no creaís que Adobe está tranquila y jactándose de ser «padres» del PDF/A-1, incluso tienen tutoriales acerca de cómo eliminar dicha especificación, eliminar todo rastro -más bien restricción- que establece dicha norma en lo archivos que osen usarla.

Extrayendo elementos de un fichero PDF.

Si habéis aguantado hasta acá nuestra resumida descripción del mundo PDF os felicito y ahora pasemos a la práctica. Como ya os dijimos el PDF fue creado para transmitir información y su contenido jamás ni nunca fue diseñado para ser editado ni transformado.

Es por ello que a veces suceden cosas como la acontecida a nuestro colega de «Linux GNU Blog«:

https://twitter.com/LinuxGnuBlog/status/847531417017962496

Lo que sucede es lo siguiente: es un fichero PDF que contiene las instrucciones para un electrodoméstico y con cualquier visor PDF abre perfectamente y de maravilla. Pero he aquí lo extraño: pesa 9 megabytes (exactamente 9.212.740 bytes) lo cual es MUY grande para la información que contiene, considerando que los gráficos son en escala de grises y no tienen mayor detalle que el estrictamente necesario para describir al aparato electrónico. Lo más extraño viene luego, si extraemos un rango de sus páginas, el fichero resultante tiene mayor tamaño incluso que el original, lo cual contraviene cualquier tipo de lógica.

De hecho arriba vemos que si lo abrimos con Libre Office Draw tardará muchísimo tiempo en ser abierto, e incluso tal vez no lo hará. Eso es debido a que tiene en capas transparentes que en modo normal no se visualizan pero que a la hora de «editar» el fichero aparece como polígonos aparentemente aleatorios que llenan y «engordan» todo el documento. De hecho Libre Office Draw NO ESTÁ EDITANDO EL ARCHIVO PDF, está simplemente extrayendo su información para que pueda ser editado en formato de dibujo «.odg», y el hecho que pueda ser exportado de nuevo a formato PDF pues es un extra añadido, ya que si queremos seguir editando dicho documento cada vez que queramos, debemos guardarlo en formato «.odg«.

Nosotros hicimos un análisis exportando el contenido PDF a formato XML y eso ocupó más de 50 megabytes debido a la técnica de ofuscamiento basado en dibujar incontables polígono que, en teoría, evitarían que sea «editado» o más bien transformado a otro documento PDF: ¡tanto misterio para un manual de usuario de un artefacto electrónico! Pues más bien nos causa risa tal comportamiento.

Usando aplicaciones para unir y cortar documentos PDF.

Cada quien tiene un estilo diferente de publicar sus conocimientos, en nuestro caso lo orientamos más bien hacia la programación (Python, PHP, lenguaje C, etc.) pero hay excelentes aplicaciones gráficas que suplen rápidamente nuestras necesidadas e incluso algunas como Ghoscript corren en una ventana terminal. Os recomendamos un excelente artículo escrito en castellano donde podréis ampliar vuestro conocimientos sobre el tema PDF.

Usando Python para trabajar con ficheros PDF.

Ya os hemos explicado sobre el cómo programar -y por supuesto instalar- el lenguaje Python, incluso viene incluído en las mayorías de las distribuciones basadas en GNU/Linux. La utilería elegida para sacar información es PyPDF2 y podemos instalarlo por medio de una línea de comando en una ventana terminal(recordad anteceder el comando sudo):

pip install PyPDF2

Luego que haya descargado pues estamos prestos y listos a lanzar nuestras líneas de código. Acá os colocamos el ejemplo dado el caso vosotros utilicéis Python3, ya que debéis utilizar pip3(se sugiere utilizar el comando sudo con la opción «-H» para referirnos a nuestro propio directorio «home«):

pip3 install PyPDF2
pip3 install PyPDF2

Primero podéis descargar el manual de marras cuyo enlace está en uno de nuestros mensajes tipo «tuit»:

Sobre ese manual es que vamos a practicar los comandos -programa- en Python con PyPDF2 y para todos los efectos prácticos nosotros descargamos y renombramos dicho archivo a «manual.pdf» para escribir menos código y mayor legilbilidad didáctica. Comencemos , pues, a desgranar el fichero en una cónsola terminal con Python en modo interactivo:

>>> # agregamos la referencia a la libreria necesaria
... 
>>> import PyPDF2
>>> # abrimos el archivo en si y lo almacenamos en 'archivoPDF'
... 
>>> archivoPDF = open('manual.pdf', 'rb')
>>> # ese archivo abierto lo leemos con PyPDF2 y lo almacenamos en el objeto 'lectorPDF'
...
>>> lectorPDF = PyPDF2.PdfFileReader(archivoPDF)
>>> # ahora procedemos a obtener la pagina 61, instrucciones en castellano y almacenamos en objeto 'paginaPDF'
>>> paginaPDF = lectorPDF.getPage(61)
>>> # ya tenemos esa pagina en memoria y aplicamos el metodo de extraer solamente el texto
>>> paginaPDF.extractText()
u'2Instrucciones de seguridad\nLea detenidamente estas instrucciones de seguridad \nantes de utilizar el producto.\n ADVERTENCIA\nNo coloque la TV ni el mando a distancia en los siguientes entornos:\nUna ubicaci\xf3n expuesta a luz solar directa\nUn \xe1rea con mucha humedad, com
>>> # LA PAGINA ES LARGA hemos publicado apenas el inicio de ella
... # NOTAD que el texto esta 'formateado' para lenguaje Python para representar caracteres unicode

Cada línea está debidamente comentada y debemos agregar que para visualizar correctamente el texto de la página que está en formato unicode para Python3 se debe utilizar, simplemente, lo siguiente:

print(paginaPDF.extractText())

Para Python (2) debemos hacer una función como la siguiente:

def MuestraUnicode(texto):
 try:
   texto = unicode(texto, 'utf-8')
 except TypeError:
   return texto

print(MuestraUnicode(paginaPDF.extractText()))

print(paginaPDF.extractText())
print(paginaPDF.extractText())

Pero no nos desviemos de nuestro objetivo, desgranar un documento PDF.

Extrayendo un rango de páginas a un documento nuevo PDF.

Acá volvemos a reutilizar los conceptos del ejemplo anterior, de nuevo cada línea está comentada indicando claramente qué hace cada comando:

>>> # Referencia a la libreria necesaria
... 
>>> import PyPDF2
>>> # Abrimos el manual al cual lo denominamos origen de datos
... 
>>> origenPDF = open('manual.pdf', 'rb');
>>> # Leemos el origen abierto en un objeto lector;
... 
>>> origenPDFlector= PyPDF2.PdfFileReader(origenPDF);
>>> # Creamos un objeto escritor de PDF
... 
>>> destinoPDF = PyPDF2.PdfFileWriter()
>>> # Creamos un objeto escritor de PDF y adicionamos la pagina 60 (instruccioens en castellano)
... 
>>> paginaOBJ = origenPDFlector.getPage(60);
>>> destinoPDF.addPage(paginaOBJ)
>>> # Un ciclo para leer de la pagina 61 a la 80
... 
>>> for num_pag in range(61,80):
...   paginaOBJ = origenPDFlector.getPage(num_pag)
...   destinoPDF.addPage(paginaOBJ)
... 
>>> # abrimos un fichero de destino
... 
>>> destinoPDFarchivo = open('manual_en_castellano.pdf' , 'wb');
>>> # escribimos el objeto en el fichero de destino
... 
>>> destinoPDF.write(destinoPDFarchivo);
>>> # cerramos los archivos debidamente
... 
>>> destinoPDFarchivo.close()
>>> origenPDF.close()
>>>

Tendremos así, entonces, un fichero solamente con las instrucciones en castellano que podemos abrir con el visor de dcoumentos predeterminado en Ubuntu, en este caso Evince. En nuestro caso la salida pesa 1.240.731 bytes (para nosotros los viejitos eso es casi un diskette 3½ pulgadas) y, tercos nosotros como somos, lo intentamos abrir de nuevo con LibreOfficeDraw y cuando va más o menos por la tercera hoja «COLAPSA» la aplicación rellenando cada cuadrito «basura» que le colocaron para ofuscar el documento. Luego de 45 segundos es que se presta a mostrar por pantalla una copia del documento, tal como nosotros hicimos en lenguaje Python. Incluso después de abrir por completo la primera página, si nos ubicamos en la novena, por ejemplo, de nuevo LibreOfficeDraw colapsa de nuevo, así que el truco de cargar basura en un PDF vaya que funciona en realidad.

Por ahora vamos a recapitualr el método que aprendimos en esta sección, lo que llamamos pseudocódigo:

  • Inicio del proceso.
  • Colocamos la referencia a la librería necesaria.
  • Abrimos el documento PDF en modo lectura binario.
  • Creamos un objeto de lectura de la librería y leemos el archivo abierto.
  • Creamos un objeto de escritura de la librería.
  • Creamos un objeto de página de la librería que lee del documento origen y lo pasamos al documento destino (1 página a la vez con exactamente todo el contenido de cada página: texto, imágenes, basura…).
  • Una vez que tenemos el objeto de escritura listo con las páginas que nos interesa, abrimos un archivo destino en modo de escritura binario (lo nombramos como querramos).
  • LLamamos al método de escritura del objeto de escritura de la librería.
  • Cerramos el archivo destino.
  • Cerramos el archivo origen.
  • Fin del proceso.

Ofuscando nuestros propios documentos PDF.

Podemos «ofuscar» nuestros propios documentos PDF colocandole, por ejemplo, una licencia de Creative Commons como la que acompaña nuestra página web y dejando bien en claro que la información que compartimos es libre pero respetando, al menos, el nombrar la autoría. Para ello podemos crear un documento PDF de una sola hoja que tenga una marca de agua que simplemente es un texto en gris claro escrito a 45° sobre la diagonal de la hoja.

Para crear nuestro documento con la marca de agua podemos utilizar rapidamente a Gimp y exportamos a PDF colocandole el nombre, muy original eso sí, marca_de_agua.pdf y escribir el siguiente código:

 # Solo las librerias necesarias
 from PyPDF2 import PdfFileWriter, PdfFileReader
 # Creamos un objeto de escritura
 salida = PdfFileWriter()

 # Abrimos el documento original
 origenPDF = PdfFileReader(open('origen.pdf', 'rb'))
 # Abrimos nuestro documento creado con marca de agua
 marca_aguaPDF = PdfFileReader(open('marca_de_agua.pdf', 'rb'))
 # Abrimos la primera hoja del documento marca de agua y lo guardamos en un objeto hoja PDF
 hoja_marca_agua = marca_aguaPDF.getPage(0)

 # Hacemos un ciclo para COMBINAR cada hoja del origen con la hoja con la marca de agua
 for i in xrange(origenPDF.getNumPages()):
   # Leemos la pagina en un objeto y luego lo combinamos con 'merge()'
   pagina = origenPDF.getPage(i)
   pagina.mergePage(hoja_marca_agua)
   # vamos agregando al documento destino
   salida.addPage(pagina)

 # escribimos en nuestro disco duro el resultado
 with open('destino.pdf', 'wb') as f:
   salida.write(f)

¿En qué consiste la ofuscación? Podemos escribir con Python un programa que cree una hoja PDF con imágenes aleatorias para luego combinarla con el documento que queremos ofuscar (agregar por capas) y luego hacer la capa con dichas imágenes como invisible (la capa) que cualquier visor PDF no la msotrará pero que al extraer las hojas siempre nos llevaremos dichas imágenes y las podremos ver (y hasta colapsar) al programa que hayamos usado para extraerle páginas, ¿Qué tal os parece?

Eliminando las imágenes del archivo PDF destino.

De la sección «Extrayendo un rango de  páginas a un documento PDF» retomamos exactamente todo el código allí escrito y le insertamos la siguiente línea justo antes de escribir en el disco duro el resultado (guiense por los comentarios):

# eliminamos las imágenes del archivo destinoPDF
destinoPDF.removeImages() 
# abrimos un fichero de destino
destinoPDFarchivo = open('manual_en_castellano.pdf' , 'wb');

Con el comando «.removeImages()» logramos quedarnos solamente con el texto y el fichero resultante es de 780.895 bytes ¡una reducción de 37%! (pesaba 1.240.731 bytes). Otros dos comandos útiles de la librería PyPDF2 son los comandos para eliminar los enlaces web .removeLinks() y para eliminar el texto .removeText().

El punto interesante es que, de nuevo, abrimos el archivo resultante con LibreOfficeDraw y podemos hacer una copia del documento que puede ser editada pero por supuesto, sin las imágenes que son las que ocasionan que se «cuelgue» la aplicación.

Fuentes consultadas.

En idioma castellano:

En idioma francés:

En idioma inglés:

Download PDF
Shutter logo

Shutter tutorial en Fedora 25

Download PDF

Ya brevemente hemos descrito cómo instalar Shutter en Ubuntu cuando publicamos nuestro tutorial sobre Tesseract OCR y en esta oportunidad le vamos a dar todo el protagonismo que Shutter merece con su reportaje dedicado y, para variar, lo instalaremos bajo la distribución Fedora 25, ¡acompáñanos!

Actualizado el día martes 11 de diciembre de 2018

¡También explicamos como instalar las herramientas de edición (de imágenes, por supuesto)!

Shutter logo
Shutter logo

Seguir leyendo

Download PDF
ABC HunSpell

Hunspell tutorial

Download PDF

Repetimos que esta página no va de ciencias sociales, sin embargo somos fanáticos de la ortografía y en esta oportunidad os presentamos una herramienta para corregir nuestros escritos, que ya son bastantes, por demás. Ahora es el punto donde nos diréis «ea, tío,  ¿de qué vais si eso está integrado en ‘todos’ los programas?» Pues bueno preparaos a sorprenderos con los que os vamos a contar, ¡vamos a aprender a programar para corregir nuestra ortografía!

Actualizado el viernes 22 de noviembre de 2019.

Publicado el sábado 18 de marzo de 2017.

Seguir leyendo

Download PDF

CSS Grid Layout specification

Download PDF

La Norma de Diseño de Cuadrícula que próximamente estará disponible en los navegadores web nos permite diseñar una serie de elementos por medio del Diseño de Hojas en Cascada (Cascade Style Sheets o mejor conocido por su acrónimo de tres letras CSS) con una rapidez asombrosa y pocas líneas de código. Por cierto, la imagen de introducción a este artículo fue creada por medio de código, no utilizamos el ratón ni una sola vez.

CSS Grid Layout
CSS Grid Layout

Seguir leyendo

Download PDF
Women and man speaking english.

Inglés conversacional

Download PDF

Aunque este vuestro sitio web no va de ciencias sociales es innegable la influencia -a nuestro pesar- del idioma inglés actualmente. Si antes era el latín la lengua franca del imperio romano, ahora el inglés hace las veces para formar nuevas palabras en castellano -hardware, software – que incluso ya se registran en el diccionario de la Real Academia Española. Es por ello que, para no ser mezquinos, agregamos la siguiente entrada.

Introducción.

Women and man speaking english.
Women and man speaking english.

El idioma inglés es muy simple comparado con el castellano, portugués e italiano -ni hablemos del francés- ya que, por ejemplo, la conjugación de verbos ni se le compara. El caso que nos ocupa hoy es precisamente la parquedad del idioma inglés en el ámbito conversacional. Así como no le gustan los nombres largos -fue duro para ellos tragar completo el de Schwarzenegger– tampoco son de usar muchas palabras en el habla diaria.

La parte que dificulta al idioma inglés para nosotros los castellanohablantes es que cada palabra en ese idioma tiene una pronunciación como palabra completa no por sílabas (que para ellos no existen) ni por letras. De hecho es tema recurrente en los programas de televisión y películas para la gran pantalla, sin embargo ellos han tomado prestado la singular forma del latín para formar palabras nuevas y las han llevado a su idioma (de nuevo siendo motivos de chistes en las comedias de situación «sitcom» por televisión «TV»). En su habla cotidiana los paleontólogos y biólogos que usan la clasificación de plantas y animales son las personas «más avanzadas» en cuanto a léxico se refiere.

Al punto que queremos llegar y recalcar es que, incluso, dicha característica de ese lenguaje se extiende más allá de las palabras y alcanza a varias de ellas -incluso llegando a formar una oración completa- y pronto lo veremos.

Nos pareció nuy útil entonces la siguiente lista de «155 Frases necesarias para una conversación en inglés» (ellos la presentan como una curiosidad) y como ya es costumbre la conseguimos viendo nuestra línea de tiempo en Twitter -si la cosa sigue como va, el Twitter será a futuro una seria competencia contra Google como buscador de información-.

Actualizado el 15 de marzo de 2015.

Hemos hecho un poco de estudio adicional y consideramos -si estamos equivocados, corríjanmos por nuestra cuenta Twitter @ks7000- que este conjunto de palabras son denominadas «frases nominales» y un concepto del mismo es el siguiente:

A word or group of words that functions in a sentence as subject, object, or prepositional object.

En castellano:

Una palabra o grupo de palabras que funciona en una oración como sujeto, objeto o objeto preposicional.

Listado de frases en idioma inglés conversacional y su traducción al castellano.

Una lista de frases utilizadas en el idioma inglés durante una conversación informal -coloquial- que hay que verlas como un todo y por ello presenta un inconveniente a la hora de traducirlas al castellano.

LetraEnglishCastellanoFrançais
Aa while backhace un tiempoIl y a quelque temps
a while agohace un tiempoil y a un moment
after a whiledespués de un ratoaprès un moment
ahead of timecon anticipación, previamenteen avance
all alongtodo el tiempotout le long
all day longtodo el díatoute la journée
all in alldespués de todo, al final de cuentasen tout
all the sameda lo mismo, da igualtous les mêmes
all the whiletodo el tiempotout en
any daycualquier día de estosn'importe quel jour
as a rulepor lo generalcomme règle
as ifcomo sicomme si
as thoughcomo sicomme si
as thoughtcomo pensécomme pensée
as muchcomo muchoautant
as usualcomo siemprecomme d'habitude
as well asademás de, tanto comoaussi bien que
as yettodavía nopas encore
ask me anotherno tengo idea
esa no me la se, preguntame otra
demande-moi un autre
at a moment's noticeen cualquier momento, de inmediatoà la notification d'un moment
at a timea la veza la fois
at any pricea cualquier precioà tout prix
at all timesen todo momento, siemprede tout temps
at every stepa cada pasoà chaque étape
at lastal finenfin
at long lastpor finenfin
at one timeen un tiempo, en una épocaà la fois
at that pointen ese momento, en esta etapa,
en ese punto (referido al tiempo)
à ce moment
at that ratea ese paso, a ese ritmoà ce taux
at the momentactualmente, por el momentoen ce moment
at the point ofa un paso de, a punto deau point de
at the same timeal mismo tiempoen même temps
at the worse possible timeen el peor momento,
en mala hora
au pire momment possible
at timesa veces, de tiempo en tiempopar moments, de temps en temps
Bbe in for itencontrarse en una situación desagradabledans une situtation désagreable
be that as it maycomo pueda ser, sea como seade toute façon
be quitssin deuda con alguien,
estar en paz o a mano (con alguien), (en inglés es frecuente llevar todo al terreno monetario, si no tienes deudas eres feliz cosa que no es necesariamente así en nuestra sociedad)
être solvable, être à portée de main à quelqu'un
be at the end of one's tetherllegar al límite, como si uno estuviera atado como una mascota.atteindre la limite, comme si l'on troussees comme un animal de compagnie.
be well of (money)adinerado, estar bien (de dinero)riche, être bien d'argent
by all means/by any meanspor todos los mediospar tous les moyents
By and largeEn general; proviene de una expresión naútica en 1706
by no meande ninguna maneraen aucun cas
by way ofpor medio depar voie de
carry one's point, gain one's point, win one's pointsalirse con la suya, lograr su propósitosortir avec elle, atteindre son but
Dday after day, day by day, from day to daydía a díaau jour le jour
day in day outtodos los díasjour après jour
down and out, down-and-out (see outcast)pobre, indigente;
preferimos la forma con guiones para formar una palabra -tal como explicamos en la introducción-.
pauvre, indigent
Eeat one's wordscomerse sus propias palabrasmanger ses mots
either wayde cualquier manera,
de una u otra manera
d'une màniere ou d'aune outre
every now and thende vez en cuandode temps en temps
every so often, every now and againa vecesde temps en temps
Ffor a changepara variaspour changer
for all intents and purposes,
to all intents, constructions and purposes
Oficialmente o de manera oficial: deriva de una ley de Inglaterra que indicaba así literlamente, jerga legal.Officiellement ou officieusement: dérivé d'une loi de l'Angleterre indiquant que literlamente, le jargon juridique.
for gooddefinitivamente, permanentementedéfinitiviment
for the moment,
for the present
Por ahora,
por el momento
Pour le moment
from now ona partir de ahoraà partir de maintenant
from scratcha partir de ceroà partir de rien
from the ground updesde el comienzoà partir du sol
from this day forwarda partir de hoy,
de hoy en adelante
à partir de ce jour
from time to timede vez en cuandode temps en temps
from way backdesde hace tiempodepuis longtemps
Ggo back one's wordromper la promesa
(acá acostumbramos decir que una "persona no es de palabra" u "no es hombre/mujer de palabra")
revenir sur sa parole
go into detailsentrar en detallesentrer dans les détails
get into troublemeterse en problemasavoir des problèms
go to wasteser desperdiciadoaller aux dèchets
good for nothing,
good-for- nothing
bueno para nada,
inútil
bon à rien
good fortunebuena fortuna, buena suertela chance
Hhard timestiempos difícilesles temps difficiles
have a hard timespasar por tiempos difícilesavoir de moments difficiles
have a way withtener una aptitud o facilidadavoir des compétences et des capacités
high timeurgente, el momento exacto paraurgent, l'heure exacte pour
his days are numberedsus días están contadosses jours son comptés
however muchpor mucho quepeu importe combien
home inalcanzar una meta u objetivo, ejemplo "The missile homed in on its target."objectif atteint
II mean it!¡Lo digo en serio!¡Je suis sériux!
I shall never got over itNunca lo superaréJe ne m'em remettrai jamais
I wish I knewOjalá supierasi seulement je savais
In doing soAl hacerloCe faisant,
it doesn' matternada importaÇa n'a pas d'importance
it doesn't make senseesto no tiene sentidoÇa n'a pas de sens
It's all the same to meMe da igualtout est pareil pour moi
It's beside the pointeso no viene al caso,
ese no es el punto
C'est à côté du point
it's new to me es nuevo para míCést nouveau pour moi
it's up to youdepende de usted, depende de tí (es tu responsabilidad)dépend de vous

it's down to you
sólo depende de usted,
sólo usted puede hacerlo
que cela dépend de vous
it's waste of timees un desperdicio de tiempo,
es pérdida de tiempo
C'est du temps perdu
in every sense of the worden todo el sentido de la palabraDans tous les sens du mot
in his dayen su época, en sus tiemposen son temps
in no timeen un instanteen un rien de temps
in old daysen aquellos tiemposDans les temps anciens
in placeen su sitio, en su lugaren place
in the meantimeal mismo tiempo,
mientras tanto
En même temps
in time
just in time
a tiempoJuste à temps
in vainen vanoen vain
it can waitesto puede esperarça peut attendre
it could have been worsepudo haber sido peorça aurait pu être pire
it was a quite jobfue un gran trabajo,
fue todo un trabajo,
costó mucho trabajo
(la palabra "quite" también se utiliza para enfatizar algo)
C'était tout un travail
it's no go,
it's no-go,
no-goes
Esto no va,
no funciona
C'est pas aller
it's a matter of timees cuestión de tiempoc'est une question de temps
Jjust aboutcasi, ya casipresque
just nowjusto ahora,
en este momento,
¡ya!
en ce moment
Kknow one's placesaber cuál es su lugar,
en su sitio
Connaître sa place
know somebody by sightconocer alguien de vistaConnaître quelqu'un par la vue
Llet's clear it upvamos a aclarar estonous allons clarifier cette
let's drop the subjectvamos a dejar el temaLaissons tomber le sujet
Mmake a show ofhacer un espectáculo deFaire un spectacle de
make hastedarse prisase dépêcher
make timehacer tiempo,
entretenerse o entretener para que pase el tiempo
prendre le temps
mind your businessocúpate de tus asuntos (en inglés todo es dinero "business" es negocio, "deal" es trato de dinero pero se extiende al ámbito abstracto del pensamiento de esa sociedad)
no te metas en lo que no te incumbe.
Occupe-toi de tes oignons
more often than notla mayoría de las vecesLe plus souvent
Nno matterno tiene importancia,
no importa
peu importe
O
off and on
intermitentemente,
que cesa periodicamente
par intermittence
on-the-spot
inmediatamenteimmédiatement
One and the sameuno y otro a la vezUn seul et même
on timepuntual, a tiempoà temps
once and for allde una vez por todasune fois pour toutes
once in a whilede vez en cuandode temps à autre
out of dateanticuadodémodé
PPiece of cakepan comidoC’est du gâteau.
piqued my interestdespertó mi interésPiqué mon intérêt
point of viewpunto de vistapoint de vue
pro and conventajas e inconvenientesavantages et inconvénients
Rrun for one's lifecorrer muy rápido,
correr como si uno fuera a salvar su propia vida
courir très vite,
courir comme si on était de sauver sa propre vie
right awayahora mismotout de suite
round the clockdía y noche,
las 24 horas
24 heures sur 24
run out ofquedarse sinmanquer de
say one's sayemitir una opiniónExprimez une opinion
S
set the pace
marcar el ritmo,
marcar la pauta
donner le rythme
side against (someone)tomar partido en contraPrendre parti contre
so farhasta ahorajusque là
sooner or latertarde o tempranotôt ou tard
speak too soonhablar muy temprano,
adelantarse
Parler trop tôt
speak one's mindemitir una opiniónExprimez une opinion
stand one's groundmantenerse firme (en un tema),
mantenerse de pie
Se tenir debout
stand to reasonmantenerse con la razón,
ser lógico
Se tenir à la raison
Ttake a sidetomar partido,
apoyar
prendre à part
take a standtomar posiciónprendre position
take into accounttomar en cuentaprendre en compte
take timetomar tiempo,
debe transcurrir tiempo para
prendre du temps
take your time!Tómate tu tiempoprends ton temps,
prenez votre temps
till the end of timehasta el final de los tiemposJusqu'à la fin des temps
time after time,
time and again
una y otra vezencore et encore
time is upse acabó el tiempole temps est écoulé,
Il se termine le temps
time outpausatemps libre,
temps mort
time will tellel tiempo dirále temps nous le dira
time's getting shortEl tiempo se vuelve corto, se acaba.Le temps devient court, juste.
that's not the pointese no es el punto,
ese no es el tema
ce n'est pas le propos
the whole year round
all year round
todo el añoToute l'année
there is no hurryno hay apuro,
no hay prisa
il n'y a pas d'urgence
throw good money after badTirar dinero a la basuraJeter de l'argent après mauvais.
to one's faceenfrentar, en su caraÀ son visage
up againstcontraContre
use your own judgmentutilize su propio juicioUtilisez votre propre jugement
Wwhat are you driving at?¿A dónde quieres llegar? (retórica)Dans quelle mesure vous voulez aller?
what for?¿para qué?¿pourquoi?
what of it?¿qué tiene?Qu'y a-t-il?
wait and seeEspera y verásattend et regarde
Yyou can take it from metú puedes creermeVous pouvez me faire confiance

Palabras que se confunden frecuentemente en el idioma inglés.

No queremos irnos sin exponeros este interesante reportaje acerca de la ortografía del idioma inglés, que si bien para nosotros la otrografía del idioma castellano es un tanto complicada, en el idioma inglés -debido al habla coloquial- ha devenido en serios errores ortográficos que derivan en confusión a la hora de su traducción y/o comprensión para nosotros. Espero os sean útiles:

  • «Lets» y «Let’s»: «Let’s» es la contracción de «let us» que se traduce, generalmente, como «vamos» -primera persona plural-; hasta acá todo bien. El problema es no incluir el apóstrofo, lo cual genera una confusión con «lets» que es la conjugación del verbo «permitir» en tercera persona, por ejemplo: «She lets dance at hall in the morning».
  • «Awhile» y «a while»: en la forma separada la vimos conformar 5 frases en la tabla principal de esta entrada pero conformando una estructura de frase (frase nominal). «Awhile» por sí sola -y la tratamos aquí aparte- es un adverbio que modifica verbos y significa, literalmente, «un corto período de tiempo» (ejemplo «He worked at home awhile»). Cosa diferente es «a while» la cual ya vimos: un artículo más un pronombre -frecuentemente usado con una preposición- contenidos en un sintagma. Ejemplo: «They will be coming in a while».
  • «Affect» y «effect»: el primero es un verbo y el segundo un pronombre, el confundirlos -consideramos- no cae en el terreno de la ortografía sino en el campo del paradigma sintagmático; no obstante según el reportaje los habitantes de habla inglesa tienden a confundirlos por la similitud de sus letras -una sola diferente-. Acá estamos muy claros en eso y hasta tenemos un refrán: «confundir la gimnasia con la magnesia«.
  • «Each other’s»: es un adjetivo posesivo recíproco -si no existe esta figura, pues la acabamos de inventar, aunque lo dudamos. Es una forma correcta y aceptada, por ejemplo: «Search at each other’s addresses, please». Lo incorrecto es usar «each others» como una forma de plural que no existe, ejemplo «Pete and Mary love each other very much».
  • «Years’ experience»: el inglés busca siempre simplificar y acortar al máximo sus expresiones, tanto es así que frecuentemente olvidan el apóstrofo+letra «s» que denota posesivo pero como la palabra ya termina en «s» -plural de «year»- no se coloca otra «s». Pero es un error ortográfico obviar el apóstrofo. Para nosotros mejor es escribir «years of experience», se parece más al castellano, opinamos.
  • «It’s» e «its»: continuamos con el problema de los apóstrofos, en esta oportunidad «it’s» es una contracción de «it is», en cambio «its» es una forma posesiva. Ejemplos: «It’s easy» o «It is easy»; «The computer help us, its job is impressive!»
  • «A» y «an»: para nosotros está sumamente claro que el artículo -neutro, sin género en inglés- es «a» pero cuando el nombre o pronombre comienza con vocal debe utilizarse «an», ejemplo: «an apple». El problema está en las palabras que comienzan con la letra hache que algunas veces no se pronuncia o es «muda» en inglés. Es así que siempre se debe escribir «an honor» y no «a honor». Hacemos notar de nuevo que la letra hache, dependiendo de la palabra, no de las sílabas, se pronuncia o no; ejemplo «high» (alto, de altura) -se pronuncia-.
  • «Everyday» y «every day»: ambas formas son correctas pero depende del contexto donde se usen. «Everyday» significa, literalmente, «diariamente» que es diferente a «every day»: «cada día»; ejemplo: «He eats pizza every day of his life» (la redundancia es para propósitos didácticos).
  • «Advice» y «advise»: acá de nuevo una letra hace la diferencia, «advice» significa consejo, recomendación mientras que «advise» es un verbo, recomendar, advertir (o informar como «Le digo y le informo…»).

Palabras que incluso a nivel académico son confundidas.

En otro interesante artículo, cuyo título incluye la palabra «stupid» la cual no comparto, no muestra varias palabras que a aún la «gente inteligente» utiliza mal, más sin embargo todo tiene su explicación (y lo siguiente justifica mi desacuerdo con el título del reportaje):

  • «Prostate cancer» y «prostrate cancer»: en castellano tenemos un refrán, «errar es de humanos, rectificar es de sabios» y he aquí que tenemos nuestra palabra dentífrico («crema de dientes» en habla coloquial) que ocasionalmente escribimos como dentrífico -palabra no reconocida por el D.R.A.E.- pero que no se presta a ningún tipo de confusión, el significado no se desvirtúa para nada. Pero en el caso del inglés vaya que es grave el asunto si agregáis una letra erre extra a «prostate cancer»: en vez de decir «cáncer de próstata» estáis diciendo «cáncer postrado» o «cáncer de acostado boca abajo en el suelo». Verbigracia: el cáncer nos obliga a postrarnos, es decir, nos debilita y nos quita fuerzas ¡pero no es un tipo de cáncer!
  • «First-come, first-serve» y «First-come, first-served»: acá volvemos a caer en el asunto de la pronunciación de las palabras completas (y que sería facilmente corregible en idioma inglés), generalmente la letra e al final no se pronuncia y lo más extraño es que «ed» pues tampoco, ¡así que de aquí proviene el error común! «First-come, first-serve» significa que el primero en llegar es el que sirve o atiende a los siguientes que llegan (así de parco es el idioma inglés). Pero «first-come, first-served» significa que el primero que llegue es servido o atendido ¡menuda diferencia! Por ello es que ellos allá, en ciertos casos -o siempre-, deberían pronunciar la «ed» (sufijo que indica pasado de los verbos regulares) para mejor comprensión -y escritura-.
  • «Deep-seeded» y «deep-seated»: es similar caso anterior y a pesar de que pronuncian expresamente el sufijo «ed» la confusión proviene de «seed» (semilla, se pronuncia «si-id») y «to seat» (sentar, se pronuncia «sit»). Acá, pensamos, es la manera de hablar muy rápido la que ocasiona el error: así «deep-seated» significa bien establecido o profundamente asentado, arraigado, «deep-seeded» toma otra interpretación como «semilla sembrada profundamente» o simplemente «sembrada (la semilla, por supuesto, que es lo único ente que se siembra) profundamente» (¡ea, tío, que mola también el castellano el acortamiento del habla!).
  • «Peak» y «peek»: de nuevo la pronunciación, «peak» es pico -de montaña-, cumbre y «peek» significa a golpe de vista, ojeada. Si a ver vamos en castellano solucionamos esto muchas veces con los acentos, como es el caso de «sabana» y «sábana» a fin de diferenciarlos al escribirlos (en este caso el castellano «es fácil»: como se escribe se pronuncia, por cada sílaba).
  • «Piqued my interest»: se traduce como «despertó mi interés» ya que el verbo «to pique» es estimular, avivar. «Peaked my interest» si bien se relaciona como «cumbre» pues no, no es correcto usarlo en esa forma.
  • «I could care less» y «I could not care less»: Ay, las negaciones ¿No nos ha sucedido eso alguna vez? Pues es mejor preguntarnos ¿Nos ha sucedido eso alguna vez? Pues sinceramente el comenzar una pregunta con una negación es muy frecuente en castellano, que no somos avaros en esto de prounciar palabras. Pero consideramos que es un error que debemos corregir (fíjemonos en los matices de nuestra habla: si comenzamos con una negación implícitamente le estamos indicando a nuestro interlocutor o interlocutora que tiene dos opciones, pero es redundante). En el idioma inglés sucede exactamente lo contrario: al usar la frase incorrecta «I could care less» está indicando que aún se preocupa, en lo mínimo por algo (tal vez será para indicar -como en nuestra negación al principio de la pregunta en castellano- que queda algo de piedad o misericordia, que se es algo magnánimo). Lo correcto es decir «I could NOT care less» o «I could’t care less» -no me preocupo en lo mínimo, o me importa menos, me preocupa menos. Preferimos no usar la contracción para dar mejor giro al hablar, enfatiza la negación «I could not care less». Por cierto, en castellano usaríamos la expresión más poética «me importa un comino».
  • «Shoo-in» y «shoe-in»: acá en castellano usamos la interjeción «¡chú!» para espantar un perro o un gato por «¡sale!» o «¡fuera!». En inglés lo comenzaron a utilizar para azuzar a los caballos en las carrera e incluso llegó a ser un verbo que significa -o es algo parecido- a apurar en una dirección. Pero una cosa totalmente distinta es «shoe-in» que significa «meter en un pie en la puerta para evitar que se cierre» y es precisamente eso loq ue hacen los vendedores que van de casa en casa. De nuevo es confundir la gimnasia con la magnesia porque suenan parecido pero se escriben diferente y tienen significados totalmente distintos.
  • «Emigrate to»: de nuevo comenzemos por el castellano: migrar es simplemente trasladarse del lugar donde se habita a otro lugar diferente (vivir, habitar en otro país o reino). Este verbo describe el acto pero no la dirección: «emigrar» es abandonar su propio país para irse al extranjero e «inmigrar» es el caso contrario, una persona que viene de un país extranjero. En inglés sucede lo mismo: «emigrate» significa «inmigrar» y es sinónimo de venir, así que lo correcto es escribir «emigrate from». El caso opuesto es «inmigrate to» que significa emigrar. Por supuesto aclaramos que «to» signifca «para» o «hacia» y «from» significa «desde» tanto en tiempo como en lugar.
  • «Sleight of hand» y «Slight of hand»: aquí vamos de nuevo con la pronunciación en inglés, ambas iguales, pero significan cosas distintas. «Sleight of hand» se usa para describir la destreza y astucia con las manos de los magos (léase prestidigadores y prestidigitadoras) mientras que «slight» es un insulto de mano -quitarse el guante y cachetear al contrario-, ojito pues.
  • «Hone in»: para resumirlo de una vez, esta combinación de palabras NO existe en el inglés (aunque hay algunos que aún lo dudan). Vamos a intentar explicarlo: «home in» significa alcanzar un objetivo, lograr una meta -por cierto, lo agregamos a nuestra lista de principio- y mucha gente cree que «hone in» es una contractura ¿?? para ello, nada más lejos de la verdad. «To hone» significa refinar, perfeccionar, así que «hone in» es algo totalmente ilógico (aunque hay algunos que aún lo defienden a capa y espada).
  • «Peace of mind» y «Piece of mind»: lo correcto es la primera expresión que significa calma, serenidad o despreocupación. La segunda significa «pedazo de mente» o pedazo de cerebro. Nos arriesgamos a sugerir que la confusión deriva de otra frase muy particular: «piece of cake» -otra adicional a la lista- y que nosotros también lo relacionamos con el trigo, «pan comido«. En francés se copian del inglés y dicen «c’est du gâteau«.
  • «Whet your appetite» y «Wet your appetite»: positiva es la primera expresión, negativa la segunda. «Wheat» es estimular el apetito y «wet» humedecer el apetito, como véis no tiene lógica en castellano pero ¡momento! a veces solemos decir «está salivando de la alegría» y salivar es humedecer, cuando se tiene apetito se saliva, se humedece la boca, tal vez de allí el error común.
  • «For all intensive purposes»: vamos, no hallamos explicación lógica a esto, debería ser «for all intents and purposes» que a su vez es abreviado de una ley de Inglaterra que rezaba «»to all intents, constructions and purposes» y que se traduce como «oficialmente» o «de manera oficial». Ah, otra más para la lista de arriba.
  • «One and the same» y «one in the same»: la primera es la correcta y significa uno y otro a la vez, por ejemplo «Melissa was father and mother one and the same» que se traduce como «Melissa fue padre y madre a la vez». «One in the same» no tiene sentido, es una distorsión.
  • «Case in point»:
  • «Make do» y «make due»: «make do» es una abreviatura de «to make something do well» o «to make something sufficient». Es por ello que que, incorrectamente, escriben «make due» por «hacer lo debido». Un ejemplo que degusto y os traigo: «When life gives you lemons, you make do and make lemonade!».
  • «Due diligence»: nace a partir de una jerga legal, haga las diligencias debidas de concer con quién se está haciendo negocios. Es totalmente diferente a «do diligence» que se puede aplicar a cualquier otro proceso legal, incluyendo el conocer con quien se hace tratos legales.
  • «By and large»: proviene de una expresión naútica de 1706 y significa «en general». Por otra parte «by in large» no existe ni tiene sentido (aunque tampoco no mucho la expresión original y correcta).

Humor.

Veamos al genial Bill Murray (actor en la película «Cazafantasmas», entre otros éxitos) anunciando con trabalenguas en su idioma natal inglés los «geniales y novedosos» LASERdiscs (que a la final fueron un fracaso en ventas):

Fuentes consultadas.

En idioma castellano.

En idioma inglés.

Download PDF
Lenguaje Python y la inteligencia artificial

Python3 and machine learning

Download PDF

En nuestra entrega anterior -y con la ayuda del Doctor Jason Brownlee- instalamos Fedora 25 como máquina virtual para tener un entorno de desarrollo específico para Python3: pues bien, el fin último es tener una base para poder desarrollar el «machine learning» a un nivel intermedio, veamos.

¿Qué es el «machine learning»?

Es una ciencia aplicada con ayuda de los ordenadores: de una serie gigantesca de datos obtenidos de nuestro mundo analógico regido por la mecánica cuántica podemos obtener patrones, precisamente lo que hacemos nosotros los seres humanos, como por ejemplo cuando miramos una noche estrellada y percibimos constelaciones que solo están en nuestro cerebro. Muchas universidades en el mundo están abocadas a este estudio y promete ser el futuro en el cual debemos estar preparados para cuando lleguen los ordenadores cuánticos.

Un dato que nos llama la atención es que ya hoy en día tiene una aplicación práctica, para mal, denunciada por Edward Snowden en su cuenta en Twitter:

¿Qué tiene que ver esto con el «machine learning»? Pues que el dispositivo que es utilizado para detectar los patrones de atención de los televidentes durante los comerciales es grabado con un dispositivo originalmente diseñado para juegos denominado Kinetic. En realidad es un dispositivo biométrico que en el año 2011 incluso ganó un premio de 50 mil libras esterlinas por desarrollo innovador al reconocer los movimientos de nuestro cuerpo, interpretarlos y trasladarlo como acciones en los juegos de vídeo. Es así que en solo seis años se le ha conseguido un uso importante en la vida real, acercándonos cada vez más a las historias contadas en las saga de películas «Terminator».

Esta entrada no pretende ser una guía exhaustiva de Python ni tampoco algo avanzado en el campo de la inteligencia artificial, apenas es la presentación de todo aquello, un abrebocas: primero estableceremos un entorno de programación y luego ejecutaremos un mini curso de 14 lecciones sobre «machine learning» cuyo material es proporcionado al mundo entero por el Dr. Jason Brownlee en su página web (en idioma inglés).

Instalando un entorno basado en Python para el aprendizaje de las máquinas.

Instalando el entorno Python.

Como ya bien sabéis, ya sea por este vuestro humilde portal o por internet -que abunda información- el lenguaje de programación Python viene instalado por defecto en la mayoría de las distribuciones GNU/Linux y Fedora no es la excepción. Para saber cual versión tenemos instalada, ejecutamos nuestra máquina virtual e introducimos nuestras credenciales de usuario. Acto seguido pulsamos ALT+F2 e introducimos la orden «gnome-terminal» para ejecutar una ventana de comandos para lanzar la siguiente línea:

python3 --version

En la figura podemos observar que ya tenemos instalada la versión 3.5.2:

python3 --version
python3 –version

Instalando el conjunto de utilidades para Python3.

Los paquetes que necesitaremos son seis en total:

  • SciPy, conjunto de herramientas que integra los siguientes paquetes:
  • NumPy: herramienta para álgebra lineal, transformadas de Fourier y generación de números aleatorios.
  • Pandas: para manejar estructura de datos.
  • Matplotlib: para plasmar gráficos en 2 dimensiones y algunos en 3D.
  • Scikit-Learn: empleado en la minería de datos.
  • Statsmodels: para modelos estadísticos.

Todas ellas las podemos bien instalar en una sola línea, bien una por una, depende de nuestra paciencia. Por rapidez escogeremos la primera y en la misma ventana terminal que tenemos abierta colocamos:

sudo dnf install python3-numpy python3-scipy python3-scikit-learn python3-pandas python3-matplotlib python3-statsmodels

El comando DNF es la abreviatura para Dandified Yum, que tal como explicamos, es el equivalente al comando apt-get utilizado en las distribuciones GNU/Linux basadas en Debian. Así que autorizamos la descarga, que son más o menos 92 megabytes:

sudo dnf install python3-numpy python3-scipy python3-scikit-learn python3-pandas python3-matplotlib python3-statsmodels
sudo dnf install python3-numpy python3-scipy python3-scikit-learn python3-pandas python3-matplotlib python3-statsmodels
Instalando entorno Python3 para «machine learning» 1
Instalando entorno Python3 para «machine learning» 1
Instalando entorno Python3 para «machine learning» 2
Instalando entorno Python3 para «machine learning» 2

Una vez se han descargado a nuestro ordenador virtual, se hace la verificación de contenido y se procede a descomprimir e instalar; allí van 200 megabytes adicionales:

Instalando entorno Python3 para «machine learning» 3
Instalando entorno Python3 para «machine learning» 3
Instalando entorno Python3 para «machine learning» 4
Instalando entorno Python3 para «machine learning» 4

Confirmación del entorno instalado.

Una vez finalizado procedemos a «crear» un guión en bash para averiguar rápidamente las versiones instaladas. Aquí viene la utilidad de haber instalado las utilerías de «VirtualBox Guest Additions» en nuestra entrada anterior: podremos «copiar y pegar» texto entre nuestro ordenador anfitrión y el ordenador virtual.

Habilitar el portapapeles entre VirtualBox y las máquinas virtuales.

Antes de poder «copia y pegar» texto debemos primero habilitar su paso por medio de VirtualBox: seleccionamos la máquina virtual Fedora y presionamos CONTROL+S para entrar a la configuración y vamos a la sección «Interfaz de usuario» -> «Dispositivos»:

VirtualBox portapapeles entre ordenador anfitrión y ordenador virtual
VirtualBox portapapeles entre ordenador anfitrión y ordenador virtual

Descolgamos la lista y seleccionamos «Anfitrión a invitado» y damos «Aceptar».

VirtualBox portapapeles ordenador anfitrión a invitado
VirtualBox portapapeles ordenador anfitrión a invitado

Archivo de comando «versions.py».

Ahora que podemos pasar el portapapeles a la máquina virtual (tedioso procedimiento para poder habilitarlo), seleccionamos, copiamos y pegamos lo siguiente:

# scipy
import scipy
print('scipy: %s' % scipy.__version__)
# numpy
import numpy
print('numpy: %s' % numpy.__version__)
# matplotlib
import matplotlib
print('matplotlib: %s' % matplotlib.__version__)
# pandas
import pandas
print('pandas: %s' % pandas.__version__)
# scikit-learn
import sklearn
print('sklearn: %s' % sklearn.__version__)
# statsmodels
import statsmodels
print('statsmodels: %s' % statsmodels.__version__)

 

En las siguientes imágenes utilizamos el editor de textos gedit, pero sentiros libres de utilizar vuestro preferido (de hecho nosotros más adelante instalamos nano):

Guión para detectar los componentes instalados de Python3 uno
Guión para detectar los componentes instalados de Python3 uno
Guión para detectar los componentes instalados de Python3 dos
Guión para detectar los componentes instalados de Python3 dos
Guión para detectar los componentes instalados de Python3 tres
Guión para detectar los componentes instalados de Python3 tres
Guión para detectar los componentes instalados de Python3 cuatro
Guión para detectar los componentes instalados de Python3 cuatro
Guión para detectar los componentes instalados de Python3 cinco
Guión para detectar los componentes instalados de Python3 cinco

Mini curso de «machine learning» en 14 lecciones.

Con la tutoría del Doctor Jason Brownlee, procedemos conforme a lo explicado en su artículo.

Lección N° 01.

En realidad ya aprobamos la primera lección: la creación de un entorno de trabajo con todos los paquetes necesarios.

Lección N° 02.

 

Fuentes consultadas:

En idioma castellano.

En idioma inglés.

Download PDF
Fedora 25 Workstation 64 bits

Fedora 25 Workstation 64 bits

Download PDF

Leyendo el artículo del Doctor Jason Brownlee (Australia) -y aprovechando el receso de Carnaval 2017- nos decidimos a probar la distribución GNU/Linux, legendaria por demás, Fedora.

«Introduction».

First of all we want to thank Doctor Jason for his excellent article on learning about Python3 on a virtual machine and its many advantages for programming. His approach is very similar to ours, he in English, we in castilian language, so we publish this article to ADD the installation of «VirtualBox Guest Additions» in the virtual machine.

Primero que nada queremos agradecer al Doctor Jason por su excelente artículo sobre aprendizaje de Python3 sobre una máquina virtual y sus múltiples ventajas para la programación. Su enfoque es muy parecido al nuestro, él en inglés, nosotros en idioma castellano, por ello publicamos este artículo para AGREGAR la instalación de «VirtualBox Guest Additions» en la máquina virtual.

Es por ello que retomamos el camino que ya anduvimos en enero 2016 con nuestro artículo sobre la actualización de VirtualBox (recomendamos su lectura primero) y donde tratamos el tema de las «VBoxGuestAdditions». Esencialmente no hay mayor cambio:

  • Instalamos VirtualBox en nuestro ordenador anfitrión (máquina real).
  • Instalamos el Paquete de Extensiones en la máquina real.
  • Instalamos «VBoxGuestAdditions» en cada máquina virtual.
  • Por último, si lo necesitamos, compartimos ficheros con la(s) máquina(s) virtual(es).

El proceso lo ampliaremos a continuación.

Instalando Fedora en VirtualBox.

Fedora 25 Workstation 64 bits.

El sistema operativo Fedora va por su versión 25 (al momento de publicar nuestro artículo anterior estaba en la versión 22) y en este enlace podrán leer la historia de esta popular distribución GNU/Linux, que está intimamente relacionada con Red Hat. No ahondaremos en este punto porque hay abundante información en internet al respecto.

Eso sí, haremos notar la tendencia del mundo GNU/Linux hacia la computación sobre procesadores de 64 bits, a medida que los ordenadores más viejos de 32 bits van desapareciendo por su edad y natural uso. Ya sabéis entonces: ahora Fedora solo para máquinas de 64 bits (manejo de memoria RAM de 4 gigabytes con discos duros de terabytes ¡y aún más!) y que lo único constante es el cambio.

Obteniendo Fedora a nuestro disco duro.

Nosotros acostumbramos descargar por medio de Torrent para así luego compartir desde nuestros propios ordenadores al mundo entero. Sin embargo, en una rápida búsqueda no conseguimos ningún archivo .torrent aunque en la página web de Fedora levemente lo mencionan. No queremos decir con esto que no exista, sino que simplemente, por ahora, no los conseguimos.

También sospechamos que influye el hecho de la seguridad que se ofrece en la página de descarga: DE PRIMERA MANO.  En el enlace anterior podremos descargar la imagen ISO (Fedora tiene una página web segura https) y luego procedemos a descargar la llave GPG (GnuPG) y la importamos a nuestro sistema. Entonces descargamos el archivo de texto plano que contienen el CHECKSUM y a eso le aplicamos sha256sum el cual compara el resultado con el archivo previo y da su aprobación (desconocemos la causa del error en la línea 19 pero están comprobadas las dos imágenes iso -también, más adelante, probaremos la versión netinstall-). Mirad la imagen adjunta para que veáis de qué van las cosas:

sha256sum Fedora Workstation 25
sha256sum Fedora Workstation 25

Configurando la máquina virtual en VirtualBox.

Tal como recomienda el Dr. Jason Brownlee le asignamos 2 gigabytes de memoria RAM (1 solo CPU, tenemos 4 en nuestra máquina anfitrión –máquina real-) y 10 gigabytes de espacio en disco duro virtual. Acá las tomas de pantalla del proceso:

Crear máquina virtual Fedora 25 VirtualBox paso 01
Crear máquina virtual Fedora 25 VirtualBox paso 01
Crear máquina virtual Fedora 25 VirtualBox paso 02
Crear máquina virtual Fedora 25 VirtualBox paso 02
Crear máquina virtual Fedora 25 VirtualBox paso 03
Crear máquina virtual Fedora 25 VirtualBox paso 03
Crear máquina virtual Fedora 25 VirtualBox paso 04
Crear máquina virtual Fedora 25 VirtualBox paso 04
Crear máquina virtual Fedora 25 VirtualBox paso 05
Crear máquina virtual Fedora 25 VirtualBox paso 05

Detalle con el dispositivo apuntador en VirtualBox.

Un indicio de la modernidad -lo único constante es el cambio- es el dispositivo apuntador que por defecto trae VirtualBox: Tableta USB. Esto tal vez traiga problemas con sistemas operativos antiguos, nosotros siempre lo cambiamos a Raton/Teclado PS2 que es prácticamente universal hoy en día. Recordemos que VirtualBox le hace creer al sistema operativo que estemos instalando ciertas configuraciones de hardware, incluyendo varios discos duros, tarjetas de red, video, etcétera que en este punto no tiene mayor relevancia si el sistema operativo es moderno -¡y vaya si Fedora 25 lo es!- sino que cuando toquemos el tema del «Virtual Box Guest Additions» lo estudiaremos con sumo cuidado.

VirtualBox dispositivo apuntador por defecto
VirtualBox dispositivo apuntador por defecto

Instalando Fedora 25  ¡por fin!

Este es el paso más largo, y que trata en mayor detalle el Dr.  Jason Brownlee en su tema, nosotros lo grabamos en un vídeo de 48 megabytes y lo subimos a Youtube, ¡espero os guste tanto como a nosotros cuando lo hicimos! ?

Instalando VirtualBox Guest Additions a Fedora.

Prefacio.

Ya hemos tenido ciertas «desavencias» con VirtualBox con esto de compilar los «kernel modules» y en un artículo anterior describimos con detalle nuestra experiencia al respecto. Recomendamos que por lo menos le echéis un «ojirijillo» rápidamente y volved acá con nosotros al finalizar, por favor.

Si, ya os pillamos, no leístes nada, pero bueno, acá lo resumimos: VirtualBox necesita estar a la medida de nuestro hardware, nuestra máquina real -anfitrión- y para ellos necesita estos archivos hechos a la medida para su excelente utilización: vboxdrv, vboxnetflt y vboxnetadp. Sin estos archivos simplemente no corre VirtualBox…

¿PERO QUE DECÍS, TÍO, SI VIRTUALBOX CORRE SIN PEGA ALGUNA?

Eso es correcto, es lo que estáis pensando: en los sistemas operativos populares (Debian, Ubuntu, Windows incluso) esto es cierto sin más pero hay distribuciones GNU/Linux muy específicas y es necesario recompilar dichos módulos para obtener su excelente desempeño (bueno en Windows no hay esta opción, ojo -que sepamos-).

Incluso esto que os cuento es válido para motores de bases de datos como PostgreSQL, podemos así compilar nuestros propios kernels PARA NUESTRO ORDENADOR ESPECÍFICO: esa es la ventaja que ofrece el software libre, ¡alucinante!

Detalle con nuestra tarjeta madre, máquina real.

Recordad ANTES de compilar los «kernel modules» en la máquina real el reiniciarla primero y ajustar los valores en el BIOS para soportar máquinas virtuales (hoy en día esto, generalmente, viene activo por defecto).

Cambiar los valores del SETUP de nuestra tarjeta madre puede desconfigurar seriamente nuestro sistema operativo instalado, asi que TENED MUCHO CUIDADO CON LO QUE TOCAS. Solamente os sugerimos activar UNICAMENTE la opción que permite compartir de manera eficiente los recursos reales (canales I/O, memoria, tarjeta de red) con las máquinas virtuales.

En la plataforma INTEL se necesita que tarjeta madre y procesador, ambos, soporten dicha tecnología llamada «Intel VT» o la aún mejor «Intel VT-D».

En la plataforma AMD se denomina «AMD Virtualization (AMD-V™)» y está específicamente orientada a servidores (de máquinas virtuales), todo un negocio en el alojamiento de páginas web hoy en día.

En vez de compartir un servidor web Apache, por ejemplo, os alquilan vuestra propia máquina con dirección IP exclusiva con una carta de diversos sistemas operativos, todo a vuestro gusto, INCLUSO esto permite «migrar» tus «recursos» rápidamente: mayor memoria, más procesadores, etcétera, con un solo click, luego de haber recibido vuestro pago, por supuesto.

Lo anterior es lo que denominados VENTAJAS de las máquinas virtuales, así como el artículo que inspira esta entrada, se usa una máquina virtual para contener un entorno de programación que podemos respaldar ¡y replicar en cualquier hardware moderno sin mayor dilación!

Configurando a Fedora 25 para «VirtualBox Guest Additions».

Allanando el terreno.

Antes de poder instalar «VirtualBox Guest Additions» debemos actualizar a Fedora, ¿cómo es esto posible si lo acamos de instalar?

El obstáculo del asunto es que necesitamos los encabezados «headers» de GNU/Linux para poder compilar los «kerner modules». Esto varía de distribución a distribución, y el cómo se instala depende del instalador por defecto. Así en Debian y sus derivados podemos usar apt pero en Fedora debemos utilizar yum. Para resumir, es simplemente una utilidad que se conecta a repositorios de software bien conocidos (o nuestros preferidos, incluso los desarrollados por nosotros mismos) e instala dicha software.

En cuanto a los derechos de usuario si que tenemos elementos comunes: debemos utilizar el comando sudo. Para ello presionamos ALT+F2 y tecleamos «gnome-terminal» para abrir una ventana de comandos. Luego introducimos la siguiente línea acompañada de nuestra contraseña de usuario para poder tener derechos de administrador o usuario «root»:

sudo yum install kernel-devel-4.8.9-300.fc25.x86_64

yum install kernel-devel-4.8.9-300.fc25.x86_64
yum install kernel-devel-4.8.9-300.fc25.x86_64

Desde internet descargaremos 50 megabytes -los «headers» en sí- y luego 19 megabytes de actualizaciones, aceptamos la descarga  y procedemos a instalarla.

yum install kernel-devel-4.8.9-300.fc25.x86_64 updates
yum install kernel-devel-4.8.9-300.fc25.x86_64 updates
yum install kernel-devel-4.8.9-300.fc25.x86_64 and updates installed
yum install kernel-devel-4.8.9-300.fc25.x86_64 and updates installed

Configurando el «Extension Pack» en la máquina real.

Al momento de emitir este tutorial, nosotros tenemos instalado el VirtualBox versión 5.0.32 y debemos descargar el correspondiente «Extension Pack» y luego «VirtualBox Guest Additions». En este enlace encontraréis TODAS las versiones almacenadas, solo buscad con CONTOL+F en vuestro navegador introduciendo vuestra versión.

En nuestro caso son los siguientes archivos:

  • «Oracle_VM_VirtualBox_Extension_Pack-5.0.32.vbox-extpack» (19 megabytes aproximadamente, para instalarlo en nuestro ordenador real -sistema operativo anfitrión-).
  • «virtualbox-5.0_5.0.32-112930~Ubuntu~xenial_amd64.deb» (4 megabytes aproximadamente, para instalarlo en nuestro ordenador real -sistema operativo anfitrión- el «Guest Additions» del lado de la máquina real -anfitrión-).
  • «VBoxGuestAdditions_5.0.32.iso» (56 megabytes aproximadamente, las «Guest Additions» en sí que le vamos a instalar a Fedora).
  • SHA256SUMS (5 kilobytes aproximadamente, muy importante comprobar la integridad de los archivos descargados, a pesar que no es una página web segura https).

Insertando la imagen iso con «Guest Additions».

Luego seleccionamos en VirtualBox la máquina virtual con Fedora 25 y después abrimos «Configuración» y nos dirijimos a la sección de «Almacenamiento» y abrimos la carpeta donde hayamos alojado la descarga, seleccionamos y damos al botón «Aceptar»:

Crear máquina virtual Fedora 25 VBoxGuestAdditions 1
Crear máquina virtual Fedora 25 VBoxGuestAdditions 1

Ejecutando Fedora 25.

Así iniciamos a Fedora 25 y una vez iniciada nuestra sesión podemos ir al navegador de archivos y abrir la unidad óptica virtual que contiene las «Guest Additions», este sistema operativo incluso trae un botón de ejecutar aplicación o bien podremos abrir una ventana terminal como describimos anteriormente y lanzar el guión script llamado «runasroot.sh«. Es de hacer notar que la vía al cd virtual es «/run/media/su-nombre-de-usuario» para navegar por la ventana terminal.

VBOXADDITIONS_5.0.32
VBOXADDITIONS_5.0.32

 

Compiling VirtualBox Guest Additions kernel modules
Compiling VirtualBox Guest Additions kernel modules

Configurando las carpetas compartidas.

En este punto ya eliminamos la fastidiosa tarea de presionar siempre la dichosa tecla anfitrión que «captura» el cursor y el puntero entre la máquina real y la máquina virtual.

Para los usuarios que por primera vez utilizan VirtualBox tal vez esta «tontería» sea lo más frustrante: como interactuar entre «ambos mundos», lo cual confunde mucho. Tanto es así que nosotros NO utilizamos la tecla por defecto CONTROL-DERECHO sino que la cambiamos por la tecla F9 que es la que menos conflicto causa con las aplicaciones y los entornos de programación que utilizamos. Sientanse a gusto de cambiarla por la que más le convenga, pero de hecho os decimos que al término de instalar «VirtualBox Guest Additions» su ratón fluirá libremente entre ambas «pantallas» sin problema alguno.

La manera de configurar vuestra tecla anfitrión es por medio del menú «Archivo->Preferencias» o simplemente presionando CONTROL+G y luego seleccionando «Entrada». Una vez allí hacemos click en «tecla anfitrión», sección «acceso»y pulsamos la tecla que más nos guste y después damos «Aceptar» cuando estemos conformes con el cambio.

VirtualBox - Preferencias - Entrada - Tecla Anfitrión
VirtualBox – Preferencias – Entrada – Tecla Anfitrión

Dicho esto ahora si que procedemos a compartir las carpetas deseadas, de nuevo seleccionamos la máquina virtual Fedora 25, pulsamos configuración y nos vamos a la sección de «Carpetas compartidas» y «clickamos» en adicionar, navegamos por el disco duro de nuestro ordenador, le damos derechos de lectura y escritura y automontar automáticamente, para finalizar «Aceptar».

Crear máquina virtual Fedora 25 VBoxGuestAdditions 2
Crear máquina virtual Fedora 25 VBoxGuestAdditions 2

Siendo pragmáticos, nuestra preferencia es solo compartir una sola carpeta -un un nombre exprofeso para ello «PARA_MAQUINAS_VISTUALES», mirad la figura arriba- para todas nuestros ordenadores virtuales, pero eso ni siquiera a consejo llega; simplemente nos gusta tener todas las cosas de las máquinas virtuales en un solo sitio, nos ayuda a ubicarnos mentalmente y para mayor rapidez.

La próxima vez que ingresemos a Fedora 25 virtual, veremos algo parecido a esto en nuestro navegador de archivos:

Crear máquina virtual Fedora 25 VBoxGuestAdditions 3
Crear máquina virtual Fedora 25 VBoxGuestAdditions 3

Conclusión.

Las ventajas de las máquinas virtuales son muchas, muchísimas, y acá apenas hemos tocado unas cuantas. El objetivo real en este caso es crear un entorno virtual para instalar Python 3 y desarrollar un ambiente de programación independiente del ordenador que estamos trabajando con solo guardar los archivos necesarios en una unidad de almacenamiento externo y siempre de la mano de VirtualBox.

¡Muchas gracias por vuestra atención, y hasta uan próxima oportunidad, nos vemos!.

Fuentes consultadas.

En idioma castellano.

En idioma inglés.

Download PDF