Wilber GIMP

GIMP tutorial básico.

Download PDF

GIMP.

Ya os hemos presentado el tutorial básico de ImageMagick el cual permite manipular imágenes en procesos por lotes, pero ha llegado la hora de «desangrar nuestra vena artística» con GIMP. Así como lo leeís, todo en mayúsculas, no nos hemos equivocado ya que GIMP es un acrónimo para «GNU Image Manipulation Program» (o como lo conocemos en castellano llano «Programa de Manipulación de Imágenes de GNU») y como ya sabemos qué es lo que significa GNU pues no nos complicamos más con el humor «nerd» que reina en el Software Libre, lo llamaremos GIMP a secas. Ah, y otra cosa, os vamos a enseñar a nuestro estilo: directo, claro y sencillo, como ya son todas nuestras entradas y tutoriales, «directo al grano» como bien reza el refrán; vamos, pues.

Acerca de GIMP 2.8.10.
Acerca de GIMP 2.8.10.

Breve historia de GIMP.

Spencer Kimball y Peter Mattis son los padres de la criatura, por allá por 1995 en la Universidad de California, en Berkeley. Vio la luz pública en 1996 y es en 1997 que aprovechando una visita del Gurú Informático Richard Stallman a esa universidad le preguntaron si podían rebautizar la aplicación que ellos habían hecho (la cual se llamaba «General Image Manipulation Program»). Dado que era y estaba hecho bajo la filosofía del Software Libre, he aquí que Stallman dio su aprobación de cambiar «General» por «GNU» y, de paso, formar parte oficial del Proyecto GNU. Es por ello que GIMP nació libre y vive para ser libre su desarrollo.

Aunque surgió en ambiente UNIX, rápidamente fue portado a Linux, SGI IRIX y HP-UX pero allí no paró el asunto. Por increíble que parezca ese mismo año 1997 fue llevado a la plataforma privativa Windows y OS X (Mac) en 32 bits (en aquella época apenas salíamos de los sistemas operativos de 16 bits, nosotros fuimos testigo de eso y nos tocó vivirlo) lo cual fue una gran novedad. La persona que logró esto fue el programador danés Tor M. Lillqvist en la versión 1.1.

GIMP arrancó con un «motor gráfico» llamado Motif hasta la versión 0.6.0 para luego ser sustituido por el «GIMP tool kit» (GTK) hasta llegar hoy en día al GTK+ el cual está orientado a la programación con objetos. Por aclaratoria nada más, nosotros llamamos «motor gráfico» a las diferentes librerías -conjunto de funciones- que permiten olvidarnos del problema de dibujar en pantalla teninedo en cuenta que está adelante o atrás, cual capa es transparente o tiene prioridad sobre otra (ya veremos en el tutorial qué son las capas, paciencia).

La mascota de GIMP es Wilbur y fue creada por Tuomas Kuosmanen (tigert) en 1997 saltando a «la fama» en 2008 en el videojuego de carreras llamado «SuperTuxKart» en el cual salen las mascotas de varios proyectos de software libre y de código abierto. He aquí sus variantes, tomadas de Wikipedia en inglés:

Images of Wilber GIMP's mascot.
Images of Wilber GIMP’s mascot.

A nosotros particularmente nos gusta la siguiente imagen que incluso usamos como práctica al iniciar nuestro estudio de GIMP:

Para finalizar esta breve descripción de GIMP debemos informaros que actualmente su desarrollo está desarrollado en la plataforma de control de versiones GIT (en este enlace al repositorio podréis, a futuro, ofrecer vuestros aportes de programación, estamos seguros que será así) y aunque por allí se reciben «pull requests» el lugar para hacer sugerencias más abstractas es el Google Summer of Code (GSoC) pero os advertimos que pueden tardar años en llegar a ser incorporados al programa, así es la democracia del Software Libre; no obstante vosotros podéis descargar el código fuente, modificarlo para vuestros propósitos y compilarlo a la medida de vuestro ordenador ¡SOMOS LIBRES, LIBERTAD! 😎 -.

¿Qué es GIMP y qué podemos hacer con él?

GIMP es un programa de edición de imágenes, frecuentemente es comparado con el software privativo «Adobe Photoshop»: hacen prácticamente lo mismo pero hasta allí llegan las semejanzas. Con GIMP podremos reunir imágenes y juntarlas en un único archivo que luego podremos exportar en el formato que necesitemos y hasta incluso páginas web podremos hacer, claro, desde el punto de vista «artístico» claro está. Para lo que NO está orientado en sí es para hacer imágenes, «para pintar» no nos servirá y cuando decimos pintar llamamos al proceso de los artistas de la antigüedad

GIMP incluso puede abrir el formato de archivo «.psd» (Photo Shop Document, PSD) y guardar en el mismo, amén de soportar BMP, JPEG, PNG, GIF (incluso animados) y TIFF, entre otros formatos. Sin embargo GIMP tiene su propio formato llamado «eXperimental Computing Facility» (XCF) en honor a la organización estudiantil de la Universidad de Berkeley la cual ayuda a sus miembros realizar grandes proyectos.

Dicho formato «.xcf» no es más que un conjunto estructurado de datos en normas de almacenamiento normalizadas y reconocidas (harto conocidos por nosotros los programadores) tales como enteros de 32 bits (WORD), números de punto flotante de simple precisión (FLOAT) y cadenas de texto (STRING) -con la particularidad de que comienzan a su vez con un WORD que indica el número de caracteres más uno, los caracteres en sí y finaliza con un cero -el cual sumamos ya al principio-. Con estos elementos definidos podemos así comenzar a escribir en disco duro un archivo con esta extensión donde guardaremos los siguientes «objetos» (no son objetos como tal pero para que os hagáis una idea): capas «layers», canales «channels» y parásitos «parasites». Éstos «objetos» a su vez tienen su estructura particular pero no vamos a llegar a tanto en este humilde tutorial, allí tenéis los enlaces si queréis estudiar más.

En resumen un archivo .xcf comienza de la siguiente manera:

  • Los primeros 9 bytes deben comenzar obligatoriamente con el santo y seña siguiente: «gimp xcf «; de no ser así no abre el archivo (dato para los que gustan de hacer virus para herir a los demás).
  • Los siguientes 4 bytes indican la versión: «file», «v001» o «v002».
  • Un byte cero que termina la etiqueta de la versión.
  • Tres bytes de enteros de 32 bits sin signo que indican el ancho, alto y modo de color del lienzo (llamaremos lienzo al área visible donde podremos agregar las imágenes en capas, donde podremos «dibujar»).
  • Propiedades de imágenes -que tienen su formato que no explicaremos aquí- (con apuntes a cada capa) y terminan con un byte cero.
  • Propiedades de canales y que terminan con un byte cero.

Estas especificaciones NO deben tomarse al pie de la letra, es sólo un esbozo y sirve como panorama para saber cómo guarda los datos GIMP, si os dedicaís a programar fijaros en el código fuente en GitHub como es exactamente que se debe escribir -y leer- en disco duro el o los archivos que guardemos.

Compilaciones derivadas y suplementos.

Por ser software libre GIMP tiene muchas variantes, osea, personas que toman el código fuente, lo modifican y mejoran -o personalizan, que sería quitarle- y lo compilan y publican. Este proceso se conoce en inglés como «fork», tenedor en castellano imaginamos por la forma que nacen sus dientes de un mismo origen. Por nombrar algunos tenemos las siguientes derivaciones:

  • CinePaint.
  • GIMP Classic.
  • GIMP Portable.
  • GIMP Photo.
  • GIMP Shop.
  • INGIMP.
  • Seashore.

A su vez GIMP soporta unos suplementos o «extensiones»: por ejemplo GAP (GIMP Animation Pack) para desarrollar animaciones y GPS (GIMP Paint Studio) que permite guardar tareas repetitivas para ser ejecutadas en otros archivos de la misma manera.

Instalación en Debian y sus distribuciones.

Podemos instalar GIMP como siempre, desde la línea de comandos, no sin antes actualizar la lista de paquetes isntalados contra los del neustro repositorio configurado. La toma de pantalla que veís aquí es en Ubuntu 16 y en general es lo mismo para cada distribución basada en Debian:

sudo apt get install gimp
sudo apt get install gimp

La cantidad de datos a descargar son aproximadamente 50 megabytes (esto puede variar debido a las librerías compartidas que ya tengáis en vuestro ordenador, si utilizáis el nuevo sistema de distribución de paquetes SNAP el cual es independiente para cada aplicación, multiplicad al menos por 100 el tamaño de cada aplicación a ser instalada).

Iniciando por primera vez GIMP en nuestro ordenador.

Tal como explicamos en nuestro tutorial sobre lineas de comandos, solo tenemos que pulsar las teclas CONTROL+F2 y escribir «gimp» en la caja de texto y presionar la tecla Introducir (intro o enter). Esperamoss a que cargue en memoria y todo depende del ordenador que tengamos (número de núcleso, memoria RAM y memoria de tarjeta de video) puede ir de unos cuantos segundos hasta medio minuto. Una vez ejecutado veremos algo muy similar a esto:

GIMP pantalla de inicio
GIMP pantalla de inicio

Lo primero que notamos es que en realidad se abren no una sino tres ventanas a la vez, la cual numeramos en la imagen para mejor comprensión (podéis hacer click en la imagen anterior para agrandar) y las subdivimos de esta manera:

  1. Caja de herramientas.
  2. Opciones de herramientas.
  3. Menú de capas.
  4. Menú de pinceles.
  5. Área donde «dibujaremos» y llamaremos lienzo.

Lo primero que debemos reconocer, incluso para nosotros que programamos ordenadores, es la gran cantidad de botones y menús de GIMP: ¡ES IMPACTANTE! Tomaros unos momentos para que os familiaricéis con la interfaz gráfica del usuario, NO OS APURÉIS tomad las cosas con calma que ya os propondremos una solución.


Afortunadamente GIMP tiene una opción en los menús desplegables, bajo «Ventanas» de donde «descolgaremos» el sub menú y pulsaremos sobre «Ventana única», he aquí una captura del menú:

GIMP modo de ventana unica.
GIMP modo de ventana unica.

Os advertimos que en un monitor normal de hoy en día, un monitor LCD de 17 pulgadas con una resolución nativa de 1024 por 768 píxeles no alcanzaréis a ver todos los menús de GIMP, así que este tutorial lo hicimos con un monitor de ese tamaño el cual es lo bastante popular y ubicuo. Recomendamos un monitor de 22 pulgadas y una tarjeta gráfica con 1 gigabyte de memoria de vídeo para trabajar comodamente.

Como esto va de enseñar y aprender enumeramos los menús principales:

  1. Archivo.
  2. Editar.
  3. Seleccionar.
  4. Vista.
  5. Imagen.
  6. Capa.
  7. Colores.
  8. Herramientas.
  9. Filtros.
  10. Ventanas.
  11. Ayuda.

Es en la décima opción donde podremos hacer click en la opción de «ventana única» y luego veremos algo como lo siguiente:

GIMP venta única con menús numerados
GIMP venta única con menús numerados

Luego del menú número 9 «se desaparecen» los menús pero en la flecha os indico donde hacer click para ver los restantes y poder seleccionar el comportamiento de «ventana única».

Aún nos falta establecer otra preferencia más para poder trabajar con mayor tranquilidad en GIMP. Para ello hacemos click en el menú 2 «Editar» y luego hacemos click en «Preferencias» (de ahora en adelante usaremos un lenguaje más directo y abreviado: «vamos a Editar->Preferencias» y ya vosotros sabréis que vaís a hacer con vuestro ratón y teclado):

GIMP menú Editar - Preferencias
GIMP menú Editar – Preferencias

Una vez abierta las preferencias nos vamos a «Gestión de la ventana» y pulsamos el botón «Restaurar las posiciones de ventana guardadas a los valores predeterminados», esto nos dejará a GIMP listo para su uso cada vez que lo necesitemos ya que fácil e inadvertidamente podemos mover y descuadrar la «Caja de herramientas», «Opciones de la Caja de Herramientas», «Menú de capas» y «Menú de pinceles». Una vez hecho esto cerramos a GIMP y lo volvemos a ejecutar para el siguiente paso de nuestro tutorial.

GIMP Preferencias - Gestión de la ventana
GIMP Preferencias – Gestión de la ventana

NOTA:

Salimos de GIMP con el atajo de teclado, presionamos y mantenemos presionado CONTROL y luego presionamos «Q» (lo cual denotaremos de ahora en adelante como CTRL+Q). Ejecutamos de nuevo GIMP y seleccionamos «Ventana única» -¿otra vez? La práctica hace al maestro, además si observamos la ventana «GIMP Preferencias – Gestión de la ventana» nos aseguramos que esté seleccionado «Guardar posiciones de ventanas al salir» lo cual garantiza que NO tendremos que volver a configurar nuestra distribución de ventanas de GIMP para nuestro trabajo.

Creación de nuestra primera imagen.

Ya al haber iniciado de nuevo a GIMP y sentirnos a gusto con nuestro «entorno de trabajo» procedemos a crear nuestra primera imagen con CTRL+N y se nos muestra el siguiente cuadro de diálogo (lo numeramos para facilitar su comprensión, recordad también el formato .xcf y donde guarda estos valores):

GIMP Crear una imagen nueva
GIMP Crear una imagen nueva
  1. Plantilla: GIMP trae unos tamaños predeterminados para evitarnos la introducción del tamaño de manera manual con los valores más usados. En nuestro caso usaremos un tamaño de papel A4 (norma ISO 216), ampliamente utilizado en Europa, no obstante los que sigaís usando el tamaño imperial podéis usar el tamaño carta que es el que más se le parece (pero no son exactamente el mismo tamaño). Al descolgar el submenú correspondiente podréis ver todos los tamaños disponibles y al escoger uno de ellos se llena automáticamente los valores de anchura, altura y unidades.
  2. Espacio de color: aquí podremos optar por dos opciones, a todo color combinando los colores básicos roo, verde y azul «red green blue  RGB» o blanco y negro. por defecto es RGB ya que es la opción más usada.
  3. Rellenar con: podremos escoger «color de frente», «color de fondo» (ambos están en «CAJA DE HERRAMIENTAS» viene preseleccionado negro en frente y blanco en fondo, luego aprenderemos como cambiarlos), «blanco» y «transparencia». La opción «blanco» deviene del color de los lienzos utilizados en la antigüedad cuando se pintaba al óleo y se necestiba una base que resaltara los colores de las pinturas; en este siglo 21 lo que más desarrollamos son páginas web así que haremos una imagen en formato PNG que permite transparencias así que este tutorial lo enfocaremos en ese sentido.
  4. Comentario: pues aquí podremos dejar una nota que nos parezca interesante o relevante, es bueno colocar que la realizamos con GIMP cuando la exportemos a formato PNG llevará ese metadato o etiqueta que los motores de búsqueda web tales como DuckDuckGo o Google utilizarán para indexar nuestro sitio web.

No, no olvidamos la opción de resolución X e Y que indica el número de puntos (píxeles) por pulgada pero dejaremos por defecto la que trae, que es más que suficiente. Para explicar brevemente este punto tomemos cualquier periódico o revista con una lupa y veremos que lo que nos parece un color continuo son simplemente puntitos RGB separados por pequeños espacios y que nuestro cerebro une como si fuera algo «sólido»: mientras más puntitos por unidad de medida más difícil para nosotros notar los puntitos -y se gasta más tinta a la hora de imprimir-. De lo anterior también justificamos lo de la medidad: haremos una imagen que podramos imprimir cómodamente en una hoja de papel dado el caso que nuestros navegantes web deseen imprimir nuestro sitio en internet.

Insertar logotipos.

Para nuestro siguiente paso iremos a «Archivo» -> «Crear» -> «Logotipos» y escogeremos «Cool Metal» y le estableceremos los siguientes valores y pulsaremos «Aceptar»:

GIMP Archivo - Crear - Logotipos - Cool Metal (Script-Fu)
GIMP Archivo – Crear – Logotipos – Cool Metal (Script-Fu)

Veremos entonces algo aprecido a esto, donde podemos observar que cada «proyecto» que hagamos se nos abre en una pestaña nueva. Le daremos el nombre de proyecto para que tengamos siempre claro que es el formato .xcf que estamos usando, un formato especial de GIMP y que NO será imagen hasta que la exportemos.

GIMP pestañas de proyectos abiertos
GIMP pestañas de proyectos abiertos

Aún no guardaremos nada en nuestro disco duro, sino que tomaremos el logotipo que acabamos de crear y presionamos CTRL+A y luego CTRL+C, hacemos click en la pestaña donde creamos esta nuestro primer proyecto y hacemos CTRL+V (vamos, que ya lo entendéis bien, es el infame seleccionar todo, copiar y pegar). Como habréis notado el logotipo es bien pequeño en relación con el lienzo de nuestro primer proyecto así que pulsamos SHIFT+T (o vamos a la «caja de herramientas» y hacemos click en «Herramienta de escalado») para que se abra el siguiente cuadro de diálogo:

GIMP Redimensionar capa
GIMP Redimensionar capa

Muy importante que hagamos click en el ícono de cadena que os resalto en la imagen anterior para que conserve la relación de anchura y altura; colocamos 120 en anchura (la medida en milímetros) y luego pinchamos «Escala» y automáticamente nos cambia el valor a 119,97 ¿recordáis los píxeles por pulgada que escogimos al escoger el tamaño A4? pues bien lo hicimos totalmente a propósito porque como sabéis una pulgada son exactamente 25,4 milímetros así que si dividimos 300 entre 25,4 nos dará una cifra irracional que la podemos redondear a 11,8110 puntos por milímetro y como queremos que mida 120 milímetros pues multiplicamos 11,8110*120=1.417,32 puntos (milímetros se van con milímetro al hacer la divisón) y el problema aquí es que nuestro monitor no nos puede dibujar esa tercera parte -0,32- de un punto o píxel sino que tiene que ser un número entero. De hechos, observamos que automáticamente nos especifica una medida de «1417 x 74 píxeles»: eso es lo que puede y va a dibujar en pantalla. El aprendizaje del asunto es el siguiente: si vamos a usar el sistema métrico internacional, cuya medida es el milímetro todo lo demás debemos especificarlas en milímetros y no en pulgadas como hicimos con lo de la resolución al crear el primer proyecto. Queda como ejercicio para vosotros el crear un nuevo proyecto con una medida A4 y escoger la resolución en «píxeles por milímetro» y repetir todo el procedimiento ¡y os cercionaréis que lo que os enseñanos es correcto!

Otra cosa que ya habréis notado es que lo que hicimos fue REDIMENSIONAR UNA CAPA ¿y en cual momento aprendimos el concepto de capas y el trabajar con ellas? Pues es que GIMP simplemente nos agrega a nuestro proyecto los otros proyectos como capas de manera automática, ésa es la manera que el programa luego contiene uno dentro de otros para guardar los datos en neustro disco duro en formato .xcf.

Ahora debemos centrar nuestro logotipo en nuestro proyecto o lienzo, para ello presionamos la tecla M y con las teclas de dirección lo movemos a la posición deseada (sinceramente en este punto es más rápido «arrastar y soltar» por medio del ratón, asimismo con ratón podemos hacer click en el icono con dobles flechas cruzadas y prestad atención que al seleccionarlo se activa en la «caja de opciones de herramienta» donde os recomendamos hacer click en «Mover la capa activa» -esto nos será útil cuando tengamos MUCHAS capas agregadas al proyecto y para poderlas seleccionar rápidamente en «Menú de capas» EXACTAMENTE LA QUE QUERÁIS).

GIMP Herramienta mover y sus opciones
GIMP Herramienta mover y sus opciones

Ahora notamos que en realidad NO ESTÁ NUESTRO LOGOTIPO COMPLETO sino que en realidad lo que hicimos fue copiar una sola capa del mismo (son cuatro capas creadas por el asistente «CoolMetal») y os lo hacemos notar en la siguiente figura:

Cuatro capas de Cool Metal
Cuatro capas de Cool Metal

Aunque podemos practicar el copiar y pegar cada una de las capas, el proceso es muy engorroso en verdad. Todo el proceso anterior en realidad nos sirvió como práctica para el siguiente paso que daremos: guardaremos nuestro logotipo «Cool Metal» como archivo .xcf (lo cual nos permitirá a futuro reutilizarlo en otros proyectos y modificarlo si es necesario) para ello presionamos CTRL+S (o vamos al menú «Archivo»->»Guardar» con el ratón) y le colocamos un nombre y escogemos una carpeta Y NOS ASEGURAMOS que escogemos la opción XCF:

GIMP Guardar imagen Cool Metal en formato XCF
GIMP Guardar imagen Cool Metal en formato XCF

Luego haremos click en la pestaña que contiene nuestro primer proyecto (la hoja A4) y presionamos CTRL+ALT+O (una «o» de oso, no un cero),vamos a la carpeta donde guardamos el «cool metal.xcf» y nos aseguramos de seleccionar en tipo de imagen «Todas las imágenes XCF» -como está resaltado en la figura anterior- ¡Y LISTO YA TRAJIMOS LAS CUATRO CAPAS QUE COMPONEN NUESTRO LOGOTIPO!

Un último consejo: dichas cuatro capas para redimensionarlas y moverlas COMO UN SOLO OBJETO primero debemos «encadenarla» haciendo click con el ratón en el ícono de cada una de las capas (aquí no vale método de teclado, se debe hacer con el ratón) ANTES de mover y/o redimensionarlas:

GIMP encadenar las 4 capas de cool metal
GIMP encadenar las 4 capas de cool metal

Al final os debe quedar algo parecido a lo siguiente:

GIMP Proyecto A4
GIMP Proyecto A4

Pues ya sabéis como guardar, sólo que os recomiendo que le deís el siguiente nombre al archivo: «GIMP Proyecto A4.xcf» ya que más adelante lo utilizaremos de nuevo.

Crear un fondo de pantalla a partir de una fotografía.

 

Reconocimiento y agradecimiento público.

Agradecemos apliamente al Ingeniero -y profesor- Carlos Ostos por impartir el curso de GIMP donde, por fin, hicimos nuestros pininos en el campo del diseño gráfico.

Asimismo agradecemos al programa gubernamental «Academia de Software Libre» adscrito al Ministerio del Poder Popular para Educación Universitaria, Ciencia y Tecnología, curso realizado en sus instalaciones:

Fuentes consultadas.

En idioma castellano.

En idioma inglés.

Copyright Henning Makholm <henning@makholm.net>, 2006-07-11

In itialiano.



 

Download PDF
Gaceta oficial 40.695, sumario.

Gaceta Oficial N° 40.965: aumento sueldo 50% 1° septiembre 2016.

Download PDF

Desde esta, vuestra página web, está a disposición un extracto de la Gaceta Oficial 40.965 -las primeras 7 hojas- que contienen ambos decretos y apenas ocupa medio megabyte; es una descarga ligera para vosotros si queréis conservar una copia (gracias a PDFSam y nautilus-pdf-tools -ambos en Software Libre- pudimos adelgazar de los 15,7 megabytes que ocupa el ejemplar completo y con Tesseract-ocr pudimos hacer el reconocimiento óptico de caracteres para «transcribirlo» aquí).

Gaceta Oficial N° 40.965: aumento sueldo 50% 1° septiembre 2016.

Según la Gaceta Oficial N° 40.965 de fecha 12 de agosto de 2016, ya fue autorizado el ajuste del cestaticket socialista de 3,5 a 8 Unidades Tributarias (UT), a partir del 1° de agosto que incluye retroactivo; lo que significa que la clase trabajadora del país del sector público y privado, ahora recibirán 42 mil 480 bolívares mensuales en el bono de alimentación (así lo reseña la página web de IguanaTV).

Cabe recordar, que aunado a la ampliación de la UT, el presidente Nicolás Maduro, también anunció en el Decreto Presidencial N° 2.430, el 50 por ciento de aumento para el sueldo mínimo; fijando la mesada en 22 mil 576,60 bolívares, vigente a partir del 1° de septiembre de 2016, a fin de proteger al pueblo de los embates de la guerra económica.

Gaceta oficial 40.695, sumario.
Gaceta oficial 40.695, sumario.

Conservando nuestro estilo y manera de explicar (simplificando siempre con miras a facilitar la comprensión) tenemos que:

  • Sueldo al 1° de mayo de 2016: Bs. 15.051,15 más cestaticket socialista Bs. 18.585,00; para un total mensual Bs. 33.636,15 (a esa fecha).
  • Sueldo al 1° de septiembre de 2016: Bs. 22.576,60 más cestaticket socialista 42.480,00; para un total mensual Bs. 65.056,60 (a esta fecha).
  • Si el sueldo anterior era Bs. 33.636,15 (osea, es un 100% del sueldo) y ahora fue elevado a Bs. 65.056,60 entonces por simple regla de tres: 65.056,60 x 100 / 33.636,15 = 193,41%
  • Si nos vamos al valor actual del dólar estadounidense según el Sistema Marginal de Divisas (SIMADI) legalmente establecido por el Banco Central de Venezuela -cambio oficial- de Bs. 644,4105 (sí, con cuatro decimales) arrojaría un equivalentes de sueldo a US$ 100,96; lo cual mejora con creces los US$ 37 mensuales calculados en nuestra entrada anterior. 😎

A continuación la Gaceta Oficial con el texto del aumento del sueldo y el aumento de la cestaticket socialista.

Aumento de sueldo:


PRESIDENCIA DE LA REPÚBLICA
Decreto N° 2.429, mediante el cual se aumenta en un cincuenta por ciento (50%) 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úblico y privado, a partir del 1° de septiembre de 2016. Quedando fijado dicho salario mínimo en la cantidad de veintidos mil quinientos setenta y seis bolivares con setenta y tres céntimos (Bs. 22.576,73) mensuales.

NICOLÁS MADURO MOROS

Presidente de la República

Con el supremo compromiso y voluntad de lograr la mayor eficacia politica y calidad revolucionaria en la construcción del Socialismo, la refundacion 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 el artículo 226 de la Constitución de la República Bolivariana de Venezuela; y en ejercicio de las atribuciones que me confiere el numeral 11 del artículo 236, en concordancia con los artículos 80 y 91 eiusdem, de acuerdo a lo preceptuado en el artículo 46 del Decreto con Rango, Valor y Fuerza de Ley Orgánica de la Administración Pública, y con lo dispuesto en los artlculos 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,

PRESIDENCIA DE LA REPÚBLICA
Decreto N° 2.429, mediante el cual se aumenta en un cincuenta por ciento (50%) 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úblico y privado, a partir del 1° de septiembre de 2016. Quedando fijado dicho salario mínimo en la cantidad de veintidos mil quinientos setenta y seis bolivares con setenta y tres céntimos (Bs. 22.576,73) mensuales.

Decreto N° 2.430, mediante el cual se ajusta la base de cálculo para el pago del Cestaticket Socialista para los Trabajadores y las Trabajadoras que presten servicios en los sectores públicos y privados.

PRESIDENCIA DE LA REPÚBLICA
Decreto N° 2.429 12 de agosto de 2016

NICOLÁS MADURO MOROS

Presidente de la República

Con el supremo compromiso y voluntad de lograr la mayor eficacia politica y calidad revolucionaria en la construcción del Socialismo, la refundacion 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 el artículo 226 de la Constitución de la República Bolivariana de Venezuela; y en ejercicio de las atribuciones que me confiere el numeral 11 del artículo 236, en concordancia con los artículos 80 y 91 eiusdem, de acuerdo a lo preceptuado en el artículo 46 del Decreto con Rango, Valor y Fuerza de Ley Orgánica de la Administración Pública, y con lo dispuesto en los artlculos 10, 95, 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 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, garantizándoles que su salario sea suficiente y le permita vivir con dignidad y cubrir para sí y su familia las necesidades materiales, sociales e intelectuales, 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 principio rector y un compromiso del gobierno revolucionario la defensa del pueblo y proteger a la familia venezolana de la guerra económica desarrollada por el imperialismo, que induce Ia inflación exacerbada por la oligarquía apátrida, como instrumento de acumulación de capital en manos de una minoría,

CONSIDERANDO

Que la República Bolivariana de Venezuela ha suscrito y ratificado los convenios números 26, 95 y 100 de la Organización Internacional del Trabajo (O.I.T.), relativos al establecimiento de métodos para la fijación de salarios mínimos, la protección del salario y a la igualdad de la remuneración de los trabajadores y las trabajadoras,

CONSIDERANDO

Que es deber del Estado mantener estos convenios para cumplir con el compromise democrático, la equidad, la 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° 20 EN EL MARCO DEL ESTADO DE EXCEPCIÓN Y DE EMERGENCIA ECONÓMICA, MEDIANTE EL CUAL SE FIJA UN AUMENTO SALARIAL MENSUAL OBLIGATORIO EN TODO EL TERRITORIO NACIONAL

Artículo 1°.

Se aumenta en un cincuenta por ciento (50%) 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úblico y privado, sin perjuicio de lo dispuesto en el artículo 2° de este Decreto, a partir del 1° de septiembre de 2016. Quedando fijado dicho salario mínimo en la cantidad de VEINTIDOS MIL QUINIENTOS SETENTA Y SEIS BOLIVARES CON SETENTA Y TRES CENTIMOS (22.576,73) mensuales.
El monto del salario diurno por jornada será calculado con base a la resultante del salario mínimo mensual a que se refiere este artículo dividido entre treinta (30) dias.

Artículo 2°.

Se aumenta en un cincuenta por ciento (50%) el 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 11 del Título V del Decreto con Rango, Valor y Fuerza de Ley Orgánica del Trabajo, los Trabajadores y las Trabajadoras, a partir del 1° de septiembre de 2016. Quedando fijado dicho salario mínimo en la cantidad de DIECISEIS MIL SETECIENTOS OCHENTA Y NUEVE BOLIVARES CON NOVENTA Y DOS CENTIMDS (16.789,32) mensuales.
El monto del salario por jornada diurna aplicable a los aprendices y adolescentes, será calculado con base a la resultante del salario mínimo mensual a que se refiere este artículo dividido entre treinta (30) dias.
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 mínimo de las pensiones de los jubilados y las jubiladas, pensionados y 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 pagadas por el Instituto Venezolano de los Seguros Sociales (I.V.S.S.), el salario mínimo nacional obligatorio establecido en el articulo 1° de este Decreto.

Artículo 6°.

Cuando la participación en el proceso social de trabajo se hubiere convenido a tiempo parcial, 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.

Dado en Caracas, a los doce días del mes de agosto de dos mil dieciséis. Años 206° de la Independencia, 157° de la Federación y 17° de la Revolución Bolivariana.


Aumento de la cestaticket socialista:


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, 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 confieren los numerales 10 y 11 del artículo 236 de la Constitución de la República Bolivariana de Venezuela, en concordancia con 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 7o 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 fin de generar fuentes de trabajo, 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 los fines 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 tantos 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 Nro. 21 EN EL MARCO DEL ESTADO DE EXCEPCIÓN Y DE EMERGENCIA ECONÓMICA, MEDIANTE EL CUAL SE INCREMENTA LA BASE DE CÁLCULO PARA EL PAGO DEL BENEFICIO DEL CESTATICKET SOCIALISTA.

Artículo 1°.

Se ajusta la base de cálculo para el pago del Cestaticket Socialista para los Trabajadores y las Trabajadoras que presten servicios en los sectores públicos y privados, a ocho Unidades Tributarias (8 U.T.) por día, a razón de treinta (30) días por mes, pudiendo percibir hasta un máximo del equivalente a doscientas cuarenta Unidades Tributarias (240 U.T.) al mes sin perjuicio de lo dispuesto en el artículo 7o del Decreto con Rango, Valor y Fuerza de Ley el Cestaticket Socialista para los Trabajadores y Trabajadoras.

Artículo 2°.

Las entidades de trabajo del sector público y privado, ajustarán de conformidad a 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°.

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

Artículo 4°.

Las entidades de trabajo del sector público y privado, que mantienen en funcionamiento el beneficio establecido en el artículo 4o 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 mientras dure la emergencia económica, deberán otorgar el beneficio de la cestaticket mediante la provisión de cupones o tickets o de una tarjeta electrónica de alimentación, emitida por una entidad financiera o establecimiento especializado en la administración y gestión de beneficios sociales.

Artículo 5°.

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

Artículo 6°.

Este Decreto entrará en vigencia a partir del 1° de agosto de 2016.

Dado en Caracas, a los doce días del mes de agosto de dos mil dieciséis. Años 206° de la Independencia, 157° de la Federación y 17° de la Revolución Bolivariana.

 

Ejecútese,

(L.S.)

NICOLÁS MADURO MOROS


 

Download PDF
Python logo sin texto

Python 3.5.2 tutorial: funciones

Download PDF

Hoy día continuamos el aprendizaje: veremos las funciones en Python ¡adelante!

Python logo original
Python logo original

Introducción.

Esta es la segunda parte de nuestro tutorial sobre Python, específicamente la versión 3.5.2, para ser exactos. Para mayores detalles de compatibilidad, historia y, en fin, lo básico sobre este lenguaje, debéis leer primero nuestra entrega anterior. Pero si ya tenéis alguna experiencia, podéis comenzar aquí con funciones. Y si soís un profesional en esto, gracias por vuestra visita, vuestras correcciones las podéis hacer llegar vía Twitter a @ks7000 o realizar un comentario acá abajo al finalizar esta entrada. Pues bien, ¡manos a la obra!

Funciones en Python.

Clasificación de las funciones.

En la primera parte de nuestro tutorial hicimos una sencilla función, demasiado simple, para nuestro programa que_hubo_mundo.py, y ahora es bueno que veaíś el panorama completo de las funciones desde nuestro punto de vista.


Advertencia.
Advertencia.

Lo aquí expresado por nosotros es nuestra opinión, la forma y manera en que enfocamos el aprendizaje del lenguaje Pyhton. En la página web oficial podréis ver el tutorial completo -en inglés- y con todo detalle. Nuestra idea es que aprendáis lo básico y una vez estéis diestro o diestra en la materia, repaséis en Python.org y contrásteis la información. ¿Queréis continuar? ¡Vamos!


 Las funciones en Python las consideramos en el siguiente orden:

  • Funciones nativas o integradas: no se necesita acción alguna fuera de llamarlas y pasarles los argumentos, si es que exige alguno. Ejemplo fácil: la función print() la cual podemos llamarla y simplemente nos «devuelve» un retorno de carro por cónsola en pantalla. Y decimos que nos «devuelve» porque eso es lo que vemos que hace la función, porque en realidad no nos devuelve valor alguno, ni numérico ni de texto. ¿Recordáis la palabra clave «end» para print()? Ingresad en vuestra cónsola lo siguiente (le «pasamos» un argumento a print() especificamente un argumento con palabra clave): print(end=»») ¿Qué os parece?
  • Funciones que vienen con Python pero hay que declararlas primero para luego llamarlas: pues eso, vamos a traer un ejemplo práctico, cuando vosotros estáis trabajando en modo interactivo tal vez os gustaría poder «limpiar» la cónsola de todo lo que hayáis practicado. Pues bien, esta tarea descansa con el sistema operativo de vuestro ordenador, y en el caso de GNU/Linux se hace con el comando «clear» pero antes que intentéis probarla revisad primero el siguiente código, observad la palabra clave o comando import:
  • >>> import os
    >>> os.system(«clear»)
    0
    >>>
  • Eso es lo que veréis, más o menos. La pantalla se «limpiará» pero obervareís que aparece un cero y luego el prompt de Python interactivo. Por eso es que es una función, devuelve un valor, que en este caso es cero. Si queremos que ese cero no aparezca y veamos una prístina cónsola (solo el prompt, por su puesto) deberemos teclear algo como esto: k = os.system(«clear»). Al finalizar estos párrafos os colocamos una captura de pantalla para que veaís más detalles.
  • Funciones para Python que hay que descargarlas e importarlas: nosotros podemos publicar (como de hecho lo hicimos) nuestro archivo que_hubo_mundo.py el cual contiene la función hola() la cual solamente imprime el mensaje «¡Qué hubo mundo!». Abrid una ventana terminal, listad los ficheros con el comando ls y si tenéis el archivo en cuestión en esa carpeta entonces abrid la terminal interactiva e ingresad lo siguiente: from que_hubo_mundo import hola y observad lo que pasa. ¡Genial! ¿o no? Pues bueno así podéis crear tus «librerías» e incluir el trabajo de otros, así, sin mayor parsimonia ni protocolo (punto 3 PEP20). El problema de esto es que si traemos el trabajo de otras personas hasta nuestro disco duro y dichos programadores publican una nueva versión (para mejor, se supone) deberemos descargar manualmente y verificar si funciona con nuestro programa -dos trabajos en uno-. Para evitar esto pasemos al siguiente punto.
  • Funciones para Python que hay que instalarlos por un procedimiento especial: Python.org mantiene siempre sus puertas abiertas a contribuciones, tanto monetarias como de programas y para ello mantiene en línea «the Python Package Index» (El Índice de Paquetes de Python) con el cual podemos instalar el trabajo de los demás y mantenernos actualizados si surgen nuevas versiones. El «procedimiento especial» consiste en instalar el programa pip el cual será el que haga el trabajo por nosotros (aunque probablemente ya lo tenéis instalado). A su vez, para instalar pip debemos descargar un archivo llamado get-pip.py desde un servidor seguro (HTTPS, «candado verde») y ejecutarlo. Luego podremos usar directamente desde Python.org cualquier trabajo publicado. Aquí es importante acotar que se deben seguir normas y reglas para publicar y son de obligatorio cumplimiento si queremos llegar lejos en esto. Sabemos que si seguimos estudiando y trabajando duro algún día publicaremos algo allí pero si queréis probar cómo funciona (declarar, subir y luego bajar nuestra programación) Python ofrece un ambiente de prueba (le dicen «sandbox» en inglés ya que allá se acostumbra poner en los parques cajones de madera llenos de arena para que los niños y niñas desarrollen sus habilidades motoras sin dañar nada ni herirse): he aquí el enlace y «happy hacking!» como dicen allá 😉 .
os.system("clear")
os.system(«clear»)

Creación de una función con el comando pass.

La manera intencional de declarar una función que no haga nada pues tiene que darse con un comando que tampoco haga nada. Os presentamos el comando pass. Y eso es lo que hace, nada de nada. Mirad este código:

>>> def adios():
...     pass #Aquí colocaremos código a futuro
...
>>> adios()
>>>

Como veís, al invocar la función no realiza «nada». Aquí vamos a explicar línea por línea:

  • Línea 1: definimos la función con la palabra reservada def seguido de un espacio y el nombre que hayamos escogido para la función. Luego colocamos par de paréntesis, uno que abre y otro que cierra, allí luego colocaremos los argumentos o datos que le queremos pasar a la función. Los dos puntos «:» indican que la línea no acaba allí, que hay más en líneas siguientes y al presionar intro observaréis que el prompt pasa a ser «…» y nos invita a escribir la segunda línea.
  • Línea 2: en la primera parte de este tutorial hablamos de configurar nuestro editor de textos para que al presionar la tecla TAB nos inserte espacios en vez del caracter tabulador. Ahora os rogamos, para cumplir con las normas de Python.org que lo configuréis exactamente a 4 espacios o que pulséis 4 espacios la primera vez y luego vuestro procesador indentará automáticamente cada vez que presionéis intro. Así que colocamos el comando pass (que no hace nada sino gastar 4 bytes en nuestro disco duro al estar guardado en un archivo). Luego colocamos un comentario sobre lo que pensamos hacer a futuro con dicha función.
  • Línea 3: una línea en blanco para poder presionar intro y volver al prompt interactivo. También debemos dejar una línea en blanco si estuvieramos escribiendo en un archivo, por razones de legibilidad y claridad en nuestro código.

Creación de una función útil en la vida real.

Muy bonito estudiar la teoría pero debemos de ser pragmáticos y ponerla a trabajar en nuestras vidas. Para ello vamos a realizar una función que dado un monto nos calcule el impuesto a las ventas que debemos pagar (Impuesto al Valor Agregado, I.V.A. o IVA). En nuestro país, Venezuela, todo eso está normado por la ley y si queréis revisarlo nosotros hemos publicado una entrada al respecto.

El cálculo es el siguiente: al monto (que llamaremos base gravada o base) le multiplicamos por la tasa de impuesto y la dividimos entre cien. A la fecha la tasa es de un 12% pero puede aumentar o disminuir con el paso del tiempo, pero en general dura meses y hasta años en un mismo valor. Asumiremos entonces que es 12% y pasamos a escribir la función:

>>> def impuesto(base):
...     print('Impuesto a pagar:', round(base*12/100,2))
... 
>>> impuesto(100)
Impuesto a pagar: 12
>>>

Rápidamente observamos, en la única linea de la función, como hemos utilizado la función print() , hemos separados con comas los argumentos para nos imprima un espacio en blanco entre ellos, y uno de los argumentos le hemos pasado una funcion round() a su vez con dos argumentos: el cálculo del impuesto en sí y el número 2 para indicarle que redondee el impuesto a dos decimales ya que así lo exige la ley (hay ciertos casos como el manejo de moneda extranjera o divisa -por ej.: €- y venta de hidrocarburos que, debidos a los altos montos, al multiplicar con solo 2 decimales trae mucha diferencia: solo en esos casos se exigen 4 decimales ¿por qué demonios explicamos esto? Más adelante veréis ).

Por supuesto, el comando pass lo eliminamos y el comentario también, pero no debemos dejarlo así, siempre debemos agregarle un texto explicativo, no solo para nosotros a futuro, que se nos pueden olvidar las cosas (¡vamos , a menos que seas Rainman!) sino para enriquecer a la comunidad de software libre, debemos compartir nuestras creaciones (y cobrar por el servicio, claro está, el que trabaja se gana su pan diario). Si con esos argumentos no os hemos convencido aquí va un tercero que es necesario: Python.org tiene algo llamado docustring que fue diseñado para que se puedan construir manuales a partir de un formato especial que nosotros agreguemos a nuestras funciones. ¿Cómo funciona esto? Solamente os decimos que debemos seguir estudiando cómo escribir funciones y en su oportunidad volveremos a tocar el tema.

Baste entonces con escribir nuestro comentario encerrado en un  entrecomillado triple para cumplir con Python.org y sus normas, veamos

>>> def impuesto(base):
...     ''' Cálculo del IVA a un monto dado '''
...     print('Impuesto a pagar:',round(base*12/100,2))
... 
>>>

¿A que es más lúcida nuestra función? Pero ojo, ahora vamos a llamar la función impuesto() tal cual, sin ningún monto y veremos un hermoso error, al traste con nuestra emoción, pero la computadora está en lo correcto, y si nosotros hemos fallado ¿qué esperamos entonces de nuestros futuros usuarios de nuestros programas?

Pues he aquí que vamos a mejorar nuestra función, la versión 0.1, de esta manera:

>>> def impuesto(base=0):
...     ''' Cálculo del IVA a un monto dado V. 0.1 '''
...     if base==0:
...         print('Introduzca un monto mayor que cero.')
...     else:
...         print('Impuesto a pagar:', round(base*12/100,2))
>>>

Agregamos un valor por defecto así que si al llamar a la función no le pasamos argumento entonces toma un valor de cero y si el valor es cero imprime un mensaje invitando a hacerlo. Hemos  convertido una función con argumento obligatorio en una que no lo es. Esto tiene ventajas y desventajas: si no le ponemos valor por defecto nos obligamos nosotros mismos a ser mejores programadores. Pero como le pusimos valor por defecto es recomendable que el programa avise que se le está pasando, así sea verdad o no, un valor cero, por lo tanto el impuesto sería cero y la función no tendría razón de ser. Si nos equivocaramos programando y en algún punto llamamos a la función sin argumento con el tiempo recibiremos una hermosa llamada telefónica de nuestros clientes diciendo algo como «metemos el monto de la base y el programa dice que introduzcamos un valor mayor que cero«.

Así nuestra función sigue evolucionando: volvemos a colocarla para que sea obligatoria la base como argumento PERO dejamos el mensaje y lo mejoramos para manejar valores negativos, la versión 0.2 quedaría así:

>>> def impuesto(base):
...     ''' Cálculo del IVA a un monto dado Ver. 0.2 '''
...     if base<=0:
...         print('Introduzca un monto mayor que cero.')
...     else:
...         print('Impuesto a pagar:', round(base*12/100,2))
>>>

Funciones con argumentos con palabras clave.

Os dijimos que el monto de la tasa de impuesto dura meses y hasta años con el mismo valor, pero eventualmente cambia. Por ello vamos a pensar en el futuro y modifiquemos otra vez, sería la versión 0.3:

>>> def impuesto(base, tasa=12):
...     ''' Cálculo del IVA a un monto dado Ver. 0.3 '''
...     if base<=0:
...         print('Introduzca un monto mayor que cero.')
...     else:
...         n_tasa = input('Introduzca tasa (12%)')
...         if len(n_tasa) > 0:
...             tasa=float(n_tasa)
...         print('Impuesto a pagar: Bs.', round(base*tasa/100,2))
...
>>>

Aquí le damos la oportunidad al usuario de modificar la tasa si ha cambiado, de lo contrario pulsa intro y la tasa seguirá con su valor por defecto de un 12% que le colocamos al declarar la función. La función input() devuelve una cadena de texto: si el usuario escribió algo la longitud de la cadena es mayor a cero y la función len() nos lo dirá así, por otra parte la función float() convertirá la cadena de texto a un número de doble precisión, capaz de manejar decimales.

Pasaremos por alto que el usuario introduzca un valor no numérico, ya llegará el momento de mejorar nuestro código. Por ahora nos interesa seguir aprendiendo. Así como modificamos nuestra función nos permite para la tasa desde la llamada a la función, por ello es lo correcto mostrar dicho monto para que la función input() enseñe la tasa que va a aplicar, podemos modificar la línea de la siguiente manera:

...         n_tasa = input('Introduzca tasa ('+str(tasa)'%)')

Para llamar a la función escribiremos impuesto(100 , 15) para indicarle a la función, por lógica, que a un monto de Bs. 100 le calcule el 15% de impuesto. Pero con Python tenemos varias maneras de llamar a la función y todas producirán el mismo resultado: Bs. 15 -si simplemente presionamos intro cuando verifica la tasa-, probadlo en vuestras cónsolas por favor:

>>> impuesto(100 , 15 )
Impuesto a pagar: Bs. 15.0
>>> impuesto(base=100 , tasa=15)
Impuesto a pagar: Bs. 15.0
>>> impuesto(tasa=15, base=100)
Impuesto a pagar: Bs. 15.0
>>> impuesto(tasa=15, 100)
  impuesto(tasa=15 , 100)
                    ^
SyntaxError: non-keyword arg after keyword arg

En la última entrada nos arroja error porque no estamos pasando el valor con su palabra clave, Python espera que el primer argumento sea obligatorio y no importa si solo tiene 2 argumentos (con una palabra clave pues por descarte el otro argumento es el «restante»), es decir, si vamos a cambiar el orden de los argumentos siempre debemos pasarle la palabra clave para indicarle a donde va cada valor. De otra manera, pues nos aprendemos de memoria el orden exacto de los argumentos de cada función. Si tenemos un editor que nos ayude a escribir las funciones, bien, por medio de tooltips nos dirán el nombre y tipo de variable que espera cada función mientras estamos escribiendo un comando al programar. Pero en GNU/Linux se necesitan programas pequeños que hagan cosas pequeñas y las hagan bien. Previendo la programación a futuro, rumbo a la inteligencia artificial, Python nos ofrece algo muy interesante. Empecemos por docustring ¿lo recordáis?

Anotaciones en funciones.

Podemos ‘preguntarle’ a la función para qué sirve por medio de su docustring simplemente ingresando lo siguiente:

>>> print(impuesto.__doc__)
 Cálculo del IVA a un monto dado V. 0.3

Ya vamos viendo la utilidad de documentar a medida que programamos; también tenemos la posibilidad de «saber» cuántos argumentos recibe la función sin haberle pasado un solo dato, lo que nos prepara para el poder usarla (si es que otra persona la escribió o es lo que nosotros escribimos para otras personas). Para ello debemos agregar a nuestra función la siguiente notación « -> float: » ya que así definimos qué tipo de dato espera entregar y recibir la función (eso disciplina nuestras tácticas de programación, pasandole a la función el tipo correcto de dato):

>>> def impuesto(base: float, tasa: float =12) -> float:
...     ''' Cálculo del IVA a un monto dado Ver. 0.3 '''
...     if base<=0:
...         print('Introduzca un monto mayor que cero.')
...     else:
...         n_tasa = input('Introduzca tasa (12%)')
...     if len(n_tasa) > 0:
...         tasa=float(n_tasa)
...     print('Impuesto a pagar: Bs.', round(base*tasa/100,2))
...
>>>print(impuesto.__annotations__)
{'base': <class 'float'>, 'return': <class 'float'>, 'tasa': <class 'float'>}

¿Observáis el formato como devuelve las definiciones de los argumentos? Vamos a analizarlos y para ello lo colocaremos en varias líneas de manera indentada:

{
    'base': <class 'float'>,
    'return': <class 'float'>,
    'tasa': <class 'float'>
}

La primera y última línea encierra la definición por medio de corchetes de apertura y cierra. La segunda línea indica que un argumento tiene como nombre clave la palabra ‘base’ y debe ser un número flotante.  La tercera línea «return’ indica lo que devuelve la función, una variable numérica flotante (la cual habremos redondeado a dos decimales, como explicamos). No especifica nombre pues ya sabemos cómo se llama la función. La cuarta línea también indica que debe recibir un argumento llamado ‘tasa’ y debe ser númerica de tipo flotante. Notarán que las nombran entre corchetes angulares como «class» o clase en castellano: si nosotros hiciéramos nuestras propias clases podremos referirnos a ellas en cualquier momento. Hay clases definidas de antamano en Python: ‘float’ es una variables numérica que admite hasta 16 decimales (en su momento veremos los tipos de datos disponibles en Python).

Las anotaciones de funciones son totalmente opcionales y están definidas en PEP 484 y son de reciente adaptación, año 2015, aunque tienen su base en otras PEP, aparte de ser compatibles, en cierta forma.

Palabra clave «return«.

Lo próximo que vamos a realizar es transformar completamente nuestro código a una verdadera función con el comando return, veamos:

>>> def impuesto(base: float, tasa: float =12, decimales: int =2) -> float:
...     ''' Cálculo del IVA a un monto dado Ver. 0.4'''
...     monto=round(base*tasa/100, decimales)
...     return monto
... 
>>> valor_impuesto=impuesto(100)
>>> print(valor_impuesto)
12.0

Lo que hicimos fue agregarle un argumento adicional, opcional, con la palabra clave «decimales» y que por defecto es 2 (por ley de nuestra República) y la «tasa» de impuesto que por ahora es 12 pero que le podemos pasar a la función un valor diferente sea el caso. También utilizamos una variable llamada «valor_impuesto» donde guardamos el valor devuetlo para la función y a continuación lo imprimimos por pantalla; pero esta variable la podemos usar donde y como la necesitemos. Así podemos practicar de varias maneras el por palabras claves, veamos, que la práctica hace al maestro (recordemos que estamos en modo interactivo y simplemente al llamar la función se imprime automáticamente por pantalla, pero si la guardamos en un archivo .py debemos guardar en una variable para luego imprimirla, tal como codificamos, de lo contrario no tendremos salida por pantalla):

>>> impuesto(20)
2.4
>>> impuesto(100, tasa=7)
7.0
>>> impuesto(100, tasa=15, decimales=4)
15.0
>>> impuesto(1477, tasa=17, decimales=4)
251.09
>>> impuesto(1970, tasa=17.89, decimales=4)
352.433
>>> impuesto(1341, decimales=4, tasa=17.89)
239.9049

Lo que siempre debemos hacer es «pasarle» la base, y luego por medio de palabras claves, sin importar el orden, los otros dos argumentos, de lo contrario arroja error (o excepción que es el nombre correcto). Si queremos pasarle argumentos, sin importar el orden, debemos colocarle palabras claves a todos los argumentos, de la siguiente manera:

>>> impuesto(decimales=2, tasa=10, base = 1500)
150.0
>>> impuesto(decimales=2, tasa=10)
Traceback (most recent call last):
 File "/usr/lib/x86_64-linux-gnu/gedit/plugins/pythonconsole/console.py", line 378, in __run
 r = eval(command, self.namespace, self.namespace)
 File "<string>", line 1, in <module>
TypeError: impuesto() missing 1 required positional argument: 'base'

Sin embargo, si le pasamos solamente los decimales y la tasa y no le pasamos la base, arroja error, porque ese debe ser un argumento obligatorio , ya que tasa y decimales le colocamos valores por defecto y así los convertimos en argumentos opcionales.

Uso de variables para pasarlas a las funciones.

Veremos algo que es facilmente deducible, pero lo complicaremos un poco con los valores por defecto en los argumentos opcionales de una función. Nos explicamos: podemos guardar en variables los valores y luego pasarlos a la función:

>>> miMonto=450
>>> miTasa=10
>>> misDecimales=3
>>> miImpuesto=impuesto(miMonto, miTasa, misDecimales)
>>> print(miImpuesto)
45.0
>>> miImpuesto=impuesto(tasa=miTasa, base=miMonto, decimales=misDecimales)
>>> print(miImpuesto)
45.0

Esto no necesita mayor explicación: es simplemente pasarle los valores por medio de variables. Lo que es más avanzado es pasarle los valores por defecto a la función por medio de variables declaradas antes de definir la función y dichas variables luego pueden cambiar su valor pero la función quedará definida con los valores dados exactamente antes de haber definido la función. Podemos así redefenir la función y luego explicaremos su utilidad:

valor_tasa=15
def impuesto(base: float, tasa: float =valor_tasa, decimales: int =2) -> float:
    ''' Cálculo del IVA a un monto dado Ver. 0.4'''
    monto=round(base*tasa/100,decimales)
    return monto

valor_tasa=16

Aunque luego cambiemos la variable valor_tasa a 16, la función impuesto() quedará en un valor de  por defecto de 15 en la tasa a lo largo de todo el programa.

¿Recordáis que os dijimos que la tasa de impuesto puede variar, según las necesidades fiscales del país? Pues bueno, nuestra función se puede preparar a futuro (por ejemplo, realizamos una sencilla aplicación de facturación y manejo de inventario) si escribimos nuestras funciones de esta manera, las podemos a volver a recompilar rápidamente si al módulo principal le cambiamos el valor. 

Funciones con argumentos arbitrarios.

Podemos definir una función que acepte cualquier argumento, habiendo ya estudiado anteriormente la flexibilidad que denota Python. Son pocos caracteres que la componen, pero no se dejen engañar: es una función compleja y difícil de asimilar, muy genérica, y es difícil darle un uso práctico:

>>> def mi_funcion(*argumentos):
...     for mi_arg in argumentos:
...         print(mi_arg)
... 
>>> mi_funcion(20)
20
>>> mi_funcion()
>>> mi_funcion(20,"prueba")
20
prueba
>>> mi_funcion(20, "prueba", 17, 20, "otra prueba")
20
prueba
17
20
otra prueba
>>>

Funciones con argumentos arbitrarios pero con palabras claves.

Para «declarar» argumentos arbitrarios en una función solamente tenemos que precederla con un asterisco y así Python «sabrá» agruparlas en un «diccionario» lo cual nos permite listarlas (y trabajar) dichos argumentos (que serán una simple variable más dentro de la función). Pero como mejor es explícito que implícito, Python nos permite pasar argumentos con palabras claves (y todas deben llevar su palabra clave o producirá una «errror» o excepción). Tomemos de nuevo nuestra función de cálculo de IVA con una base dada

>>> def impuesto(**argumentos) -> float:
...     ''' Funciones con argumentos y palabras claves '''
...     monto=0
...     base = 0
...     tasa = 12
...     decimales = 2
...     for arg_clav in argumentos.keys():
...         if arg_clav=='base':
...             base=float(argumentos[arg_clav])
...         if arg_clav=='tasa':
...             tasa=float(argumentos[arg_clav])
...         if arg_clav=='decimales':
...             decimales=int(argumentos[arg_clav])
...     monto=round(base*tasa/100,decimales)
...     return monto
...
>>> monto_iva=impuesto(decimales=2, base=500, tasa=7)
>>> print(monto_iva)
35.0
>>> print(impuesto.__annotations__)
{'return': <class 'float'>}
>>> print(impuesto.__doc__)
 Funciones con argumentos y palabras claves 
>>> 

Ya nuestras funciones van ganando complejidad y cada vez es más difícil escribirlas en modo interactivo, creemos que ya vale la pena escribirlas en un archivo por medio de nuestro editor de texto favorito, pronto daremos unas recomendaciones al respecto y unas normativas de Python. Mientras, veámos que sucede en este último ejemplo:

  • Línea 1: declaramos la función en sí con metadatos incluídos.
  • Línea 2: le establecemos su docustring.
  • Líneas 3 a 6: incializamos las variables con su valor pro defecto, si lo tuviera.
  • Línea 7: llamamos a un ciclo for para enumerar todos los argumentos con palabra claves «pasadas» a la función.
  • Líneas 8 a 13: por medio de sentencias condicionales verificamos si todos los elementos de la fórmula del cálculo del impuesto están presentes, si faltare alguno pues tomaría su valor por defecto.
  • Línea 14: realiza el cálculo en sí.
  • Línea 15: devuelve el resultado hacia fuera de la función.
  • Demás líneas: anotaciones de la función y su docustring. Obsérvese que en las anotaciones solo nos indica que es una función que solo devuelve un valor numérico flotante, sin ninguna información de los argumentos necesarios para que «haga su trabajo»

¿Qué utilidad tiene esto, declarar una función tan extraña que acepte cualquier cantidad de argumentos con palabras clave? Cuando veamos los diccionarios en mayor detalle se nos ocurrirán unos cuantos usos útiles, en este punto vamos a probar algo muy sencillo:

>>> diccionario = { "base" : 277.25 , "tasa" : 19 , "decimales": 3 }
>>> impuesto(**diccionario)
52.678
>>>

Fíjense que las palabras claves deben estar encerradas entre comillas, y que debemos colocarle dos asteriscos al llamar a la función, así estemos declarando la función con **argumentos, esto es lo más curioso del asunto y nos devuelve al principio: cualquier función acepta los argumentos con palabras claves si le colocamos ** al llamar la función con un diccionario ¿complejo, cierto? Y apenas estamos comenzando 😉 .

Funciones «clonadas».

Python nos permite tomar las funciones que importemos y «cambiarles» el nombre. Así nuestra función impuesto() que escribimos, tal vez sea para nosotros memorizarla de otra manera, por ejemplo impt(), pues solo debemos escribir impt = impuesto  y pasarle los valores con el diccionario que hicimos anteriormente, he aquí:

>>> diccionario = { "base" : 277.25 , "tasa" : 17 , "decimales": 4 }
>>> impt = impuesto
>>> impt(**diccionario)
47.1325
>>>

Función abreviada lambda.

A veces necesitamos usar una función una sola vez (cosa rara) y codificarlo en 3 líneas como mínimo (aparte de ir en una sección aparte de nuestro proyecto dedicada a las funciones) pues que nos lleva tiempo y espacio. Para ello echamos mano de la ¿función de funciones? el comando lambda. Este comando nos permite aplicar, por ejemplo, un cálculo como el nuestro, que es sumamente sencillo, practiquemos:

>>> (lambda base : round(base*12/100,2))(100)
12.0

Como vemos no le colocamos nombre a la función, solo le indicamos que devuelva la misma base con el cálculo del impuesto (es todo lo que encierra el primer par de paréntesis de izquierda a derecha) y en el segundo par de paréntesis le pasamos el argumento con la base a calcular. Tal vez sea complicado de entender así que pasamos a definir la función y «clonarla» con un nombre:

>>> impuesto=lambda base : round(base*12/100,2)
>>> impuesto(1000)
120.0
>>> impuesto(7)
0.84
>>> impuesto(70)
8.4
>>> impuesto(100)
12.0
>>>

Acá vemos que es una manera de definir rápidamente una función. Si queremos colocarle los argumentos completos la podemos definir de la siguiente manera:

>>> impuesto=lambda base, tasa, decimales: round(base*tasa/100,decimales)
>>> impuesto(100,12,2)
12.0
>>> impuesto(543,17,4)
92.31
>>>

Evidentemente que los argumentos son posicionales, si queremos agregarles palabras claves… pues para eso definimos la función completa como ya lo hemos hecho. Consideramos útil a este comando/función dentro de otra función declarada para que se circunscriba dentro de esa función solamente, pero vosotros juzgad y dadle algún otro uso novedoso, ¡a practicar!

Estilo al codificar.

En PEP 8 se especifica cómo codificar nuestras funciones y para que queden correctas deben cumplir con las suguientes especificaciones:

  • Se deben indentar con 4 espacios y sin tabuladores (ver al final nuestras recomendaciones).
  • Las líneas no deben superar los 79 caracteres.
  • Se deben usar líneas en blanco entre funciones y clases.
  • Cuando sea posible, coloque los comentarios en la misma línea que describe.
  • Se debe usar docustring (¿deberíamos traducirlo como ‘docutexto‘?).
  • Se deben usar espacios entre los operadores y después de las comas pero no dentro de los paréntesis, ejemplo: a = f(1,2) + g(3,4) .
  • En el caso de las funciones y métodos se deben separar las palabras con guión bajo, por ejemplo impuesto_iva() , impuesto_sobre_renta() ; las clases se deben nombrar en estilo jorobas de camello: TasaDeImpuesto.
  • En el caso de que nuestro código sea para uso internacional, deberemos usar solamente caracteres básicos. Evidentemente que nuestro idioma utiliza muchos caracteres extendidos en UTF-8, así que todo dependen hacia adonde va dirigido.

Uso de gedit con python.

Por mucho nuestro editor de texto favorito es gedit debido a que tiene ciertas características deseables para programar pequeños proyectos de código.

Las capturas de pantalla aquí mostradas corresponde a gedit 3.10.4:

gedit version 3.10.4
gedit version 3.10.4

Al ejecutarlo lo primero que debemos activar es la barra de herramientas y la barra de estado en el menú desplegable «Ver»:

gedit barra de herramientas y barra de estado
gedit barra de herramientas y barra de estado

Al marcar estas dos opciones podremos ver en la aprte superios los comandos más usados como: documento nuevo, abrir documento, guardar, imprimir, etcétera. A pesar que todos estos comandos tiene sus atajos de teclados, los íconos de los botones tienen un efecto muy intuitivo. La parte más importante es la parte inferior la cual permite escoger qué lenguaje estamos programando y justo al lado la cantidad de espacios a insertar en el indentado automático y al presionar la tecla tabulador inserte espacios en vez de la caracter tabulador en sí, veamos:

gedit ventana principal
gedit ventana principal
gedit lenguajes soportados
gedit lenguajes soportados
gedit cantidad de espacios a usar con la tecla TAB
gedit cantidad de espacios a usar con la tecla TAB

También podemos guardar nuestras perferencias para la próxima vez que ejecutemos gedit, para hacerlo vamos al menu desplegable «Editar» -> «Preferencias» y marcamos las siguientes opciones, todo según las normas de estilo de Python:

Preferencias de gedit
Preferencias de gedit
  • Mostrar los números de línea nos sirve para hallar rápidamente dónde debemos corregir cuando el depurador Python nos indica algún fallo de sintaxis.
  • Al mostrar el margen derecho con una pequeña marca de agua nos ayuda a no sobrepasar los 79 caracteres.
  • Si activamos el ajuste de texto, así no sobrepasamos los 79 caracteres por línea pero cambiamos el tamaño de nuestra ventana, gedit nos colocará las líneas que no quepan en la ventan en múltiples líneas pero respetando la numeración para indicarnos que es una sola línea sobre la que estamos trabajando. La opción de no dividir palabras nos permite los comandos completos, sin divisiones.
  • La opción de resaltar la línea actual nos permite enfocarnos en la linea sobre la cual estamos editando y si es multilínea (ve punto anterior) nos  ofrece un mejor panorama.
  • Por último resaltar parejas de corchetes nos permite anidar funciones y sus argumentos son más fáciles de visualizar.
gedit activar ajuste de texto
gedit activar ajuste de texto

Una vez hayamos fijado nuestras preferencias (la cuales se aplican en tiempo real, así que muestran como se ve nuestro archivo de una vez) también podemos activar los complementos que nos serán muy útiles:

 

gedit complementos: completado de palabras, completar paréntesis y cónsola python.
gedit complementos: completado de palabras, completar paréntesis y cónsola python.
  • El completado de palabras «memoriza» los comandos que hayamos escrito y al nosotros volver a escribirlos el complemento lo sugiere por medio de un pequeño menú emergente. Recomendamos hacer click en «preferences» y marcar interactivo y un mínimo de 3 letras por palabra.
  • Completar paréntesis, corchetes rectos y llaves evita el error común de no hacerles el cierre. No funciona con los corchetes angulares «<» y «>».
  • Por último la cónsola python: al activarla podemos pulsar CTRL+F9 y una subventana en la parte inferior nos abre una cónsolar interactiva con práticamente las mismas características de la cónsola python. Podemos volver a la edición del documento con la tecla ESC y volver a abrir la cónsola python con CONTROL+F9.
gedit con la cónsola python activada
gedit con la cónsola python activada

 

Fuentes consultadas:

En idioma castellano:

Enlaces en idioma inglés:

Download PDF
Python logo sin texto

Python 3.5.2 tutorial

Download PDF

Actualizado el jueves 16 de abril de 2020.
Publicado el sábado 16 de julio de 2016.

Introducción.

Python logo original
Python logo original

En una publicación anterior tratamos el tema de generar códigos QR con lenguaje Python y hasta escribimos un sencillo cliente FTP para sincronizar los archivos de una carpeta local versus una carpeta remota. He aquí que entonces que necesitamos un tutorial sobre cómo funciona el lenguaje Python, un lenguaje versátil multiplataforma. Específicamente estaremos tratando la versión 3.5.2 porque consideramos que es el futuro y tiene varios años ya de existencia entre nosotros, dado el caso que valga la pena referirnos a alguna versión 2.X lo especificaremos pero la idea es ser lo más sencillo posible con abundancia de ejemplos y la menor teoría posible.

Seguir leyendo

Download PDF
Python logo sin texto

python-easy-ftp-sync

Download PDF

Actualizado el domingo 15 de mayo de 2022.

Publicado el martes 12 de julio de 2016.

Introducción.

El objetivo de escribir python-easy-ftp-sync persigue como fin último la creación de un programa por línea de comandos escrito en lenguaje Python versión 3.4.3 para sincronizar dos carpetas (y sus subcarpetas) por medio de FTP (File Transfer Protocol), así de sencillo, por ello lo de parte del nombre «easy» (fácil -o tranquilo- en idioma inglés). Por supuesto que no vamos a descubrir el agua tibia, antes que nosotros muchos autores han escrito sobre el tema, y lo grandioso del software libre -y la ciencia moderna en sí misma- es que no tenemos que partir desde cero (aunque sería un muy buen ejercicio) sino que podemos estudiar esos trabajos anteriores y sobre ellos construir nuestra herramienta.

Seguir leyendo
Download PDF
SENIAT glosario tributario

SENIAT glosario tributario.

Download PDF

SENIAT glosario tributario.

En esta entrada recogemos los mensajes por la red social Twitter desde la cuenta oficial del SENIAT, esperamos sean les sean útiles en algún determinado momento.

Fuente original

Actualizado el jueves 3 de octubre de 2019

Todo este material proviene de dos publicaciones en el Portal Fiscal del SENIAT (si no abre la página, al lado colocamos los enlaces históricos al 1° de mayo de 2019):

Seguir leyendo

Download PDF
GacetaOficial N° 38.458 (sumario)

Ley Orgánica de Identificación

Download PDF

Introducción.

Lo hemos comentado en varias entradas anteriores: nosotros los progamadores no podemos ir así al garete, ignorando las leyes como si nada. Es peligroso. No lo recomendamos. Por eso es que hoy les traemos nuestra «Ley Orgánica de Identificación», pilar fundamental que permite identificar unívocamente a nosotros los seres humanos con todo el sistema legal -y por ende informático- de nuestra República Bolivariana.

Antecedentes.

Ya en nuestra Constitución se hace referencia a nuestro derecho a tener nuestra identidad propia, y al respeto a los derechos de los demás compatriotas, por eso arrancamos con el artículo 21:

  • Constitución Nacional, artículo 21: «Todas las personas somos iguales ante la ley; …» (de hecho, el artículo 34 de esta ley especifica taxativamente que el venezolano o venezolana poseedor o poseedora de un pasaporte diplómatico o de servicio no otorga privilegio alguno en territorio nacional).
  • Constitución Nacional, artículo 28: «Toda persona tiene el derecho de acceder a la información y a los datos que sobre sí misma o sobre sus bienes consten en registros oficiales o privados, con las excepciones que establezca la ley, …».
  • Constitución Nacional, artículo 56: «Toda persona tiene derecho a un nombre propio, al apellido del padre y al de la madre, y a conocer la identidad de los mismos. El Estado garantizará el derecho a investigar la maternidad y la paternidad.

    Toda persona tienen derecho a ser inscrita gratuitamente en el registro civil después de su nacimiento y a obtener documentos públicos que comprueben su identidad biológica, de conformidad con la ley. Éstos no contendrán mención alguna que califique la filiación.»

Y es así que nos detenemos en dicho artículo 56, donde observamos de dónde viene la costumbre de que tengamos dos apellidos: primero el de nuestro padre (biológico o adoptivo) y luego el de nuestra madre, de igual manera. Parece una cuestión baladí pero nosotros llevamos esto así desde la existencia del Imperio Romano, para evitar que cualquier funcionario haga de su libre albedrío, pues no, que para eso existe la ley. Y cualquiera podrá refutar «ah, es que en otros países te puedes llamar como quieras y  como te de la gana» y allí es que hacemos la observación que eso en realidad depende de un juez que te lo apruebe; y que está mal visto por esas sociedades que nosotros tengamos «nombres largos» -lo cual a nuestro parecer evita o mitiga confusiones de identidad a lo largo de los años y generaciones-. Y ni hablar de las mujeres, que aquí toman el apellido del esposo (con el consabido «de») o peor aún en otros países, cuando eliminan totalmente su apellido y usan el de su esposo como si fueran hermanos (aberrante a nuestro parecer).

Para evitar esto, y muchas otras cosas más, de nuevo debemos ver y leer nuestra «Ley Orgánica de identidad».

Promulgación.

La «Ley Orgánica de Identificación» entró en vigencia al ser publicada en Gaceta Oficial de la República Bolivariana de Venezuela el día miércoles 14 de junio de 2006 en el ejemplar ordinario N° 38.458.

Explícitamente deroga el anterior Decreto N° 1.454 con Fuerza de Ley Orgánica de Identificación,  publicado en Gaceta Oficial de la República Bolivariana de Venezuela Nº 37.320, de fecha jueves 08 de noviembre del año 2001. Asimismo hace la salvedad de que hasta tanto no se legisle sobre el Reglamento correspondiente, seguirá vigente el Reglamento Parcial de la Ley Orgánica de Identificación, para la identificación de los indígenas, creado mediante decreto Nº 2.686, publicado en Gaceta Oficial de la República
Bolivariana de Venezuela Nº 37.817, de fecha 13 de noviembre de 2003.

Entes encargados de su ejecútese.

El principal ente encargado de la aplicación, registro y observación, ni para más ni para menos, es el Poder Electoral a través del «Consejo Nacional Electoral» quienes mantienen en línea el documento, en formato pdf, con la ley íntegramente publicada. No obstante, nosotros apostamos por su divulgación publicando un «espejo», dado que incluso contempla penas de prisión a quienes no observaren debidamente al pie de la letra las intenciones de los legisladores electos por nosotros, el pueblo de Venezuela. En la sección anterior tenéis los enlaces a la página web del Tribunal Supremo de Justicia, donde publican también en formato gif con calidad fotográfica los ejemplares de las gacetas, «gacetas certificadas» de facto.


LA ASAMBLEA NACIONAL

DE LA REPÚBLICA BOLIVARIANA DE VENEZUELA

DECRETA

la siguiente,

LEY ORGÁNICA DE IDENTIFICACIÓN

Capítulo I

Disposiciones Generales

Objeto

Artículo 1.

La presente Ley tiene por objeto regular y garantizar la identificación de todos los venezolanos y venezolanas que se encuentren dentro y fuera del territorio nacional, de conformidad con lo establecido en la Constitución de la República Bolivariana de Venezuela.

Definición de Identificación

Artículo 2.

Se endiente por identificación, el conjunto de datos básicos que individualizan y diferencian a una persona con respecto a otros individuos y que sirve de fuente de información para su reconocimiento.

Medios de identificación

Artículo 3.

A los efectos de esta Ley, se entenderá por medios de identificación: la partida de nacimiento, cédula de identidad y pasaporte.

Implantación de Tecnología

Artículo 4.

El Estado garantizará la incorporación de tecnologías que permitan desarrollar un sistema de identificación seguro, eficiente y coordinado con los órganos del Poder Público.
El Ejecutivo Nacional por órgano del ministerio con competencia en materia de identificación de los habitantes de la República, vigilará el mantenimiento y la actualización permanente y progresiva del sistema de identificación, con el objeto de lograr un sistema de avanzada tecnología, que facilite a la ciudadanía el acceso a los servicios públicos, el intercambio de información y el apoyo a las funciones de los órganos del Estado.

Capítulo II

De la identificación de los ciudadanos y ciudadanas

Derechos

Artículo 5.

Los venezolanos y venezolanas desde el momento de su nacimiento tienen derecho a  poseer un medio de identificación otorgado por el Estado a través del organismo competente. El Estado otorgará un medio de identificación a los venezolanos y a las venezolanas por naturalización o a los extranjeros o las extranjeras que obtengan una visa o condición de permanencia, que lo autorice para permanecer en el país, por un término de uno o más años. Su otorgamiento estará limitado sólo por las disposiciones previstas en la Ley.

Identificación de venezolanos y venezolanas

Artículo 6.

La identificación de todos los venezolanos y venezolanas, menores de nueve años  de  edad,  se  hará  mediante  la  presentación  de  su  partida  de  nacimiento.  Cumplidos los nueve años de edad, se le otorgará la cédula de identidad sin más limitaciones que las establecidas en esta Ley.
Los niños, niñas y adolescentes tendrán derecho a tramitar el otorgamiento de una cédula de  identidad  u  otro  documento  de  identificación  de  forma  gratuita,  en  los  casos  de
expedición,  pérdida,  deterioro  o  cualquier  otra  modificación  de  los  elementos  de identificación.

Identificación de extranjeros o extranjeras

Artículo  7.

Los  extranjeros  y  extranjeras  se  identificarán  mediante  su  pasaporte,  sin embargo, aquellos  que  sean  titulares  de  una  visa  o  condición  de  permanencia  en  el  país, correspondientes a las categorías Migrante Temporal o Migrante Permanente, que establece la Ley de Extranjería y Migración, y su Reglamento, están obligados a solicitar y el  Estado  otorgarles,  su  cédula  de  identidad, previo  el  cumplimiento de los  requisitos exigidos por la Ley.
Los  miembros  del  personal  de  las  misiones  diplomáticas  y  consulares acreditados  en  el país, se identificarán conforme a las normas legales respectivas y las prácticas internacionales.

Elementos de la identificación

Artículo 8.

Son elementos básicos de la identificación de los ciudadanos y ciudadanas: sus nombres, apellidos,  sexo,  fecha  de  nacimiento,  lugar  de  nacimiento,  los  dibujos  de  sus crestas dactilares y cualquier otro medio de identificación.

Órganos competentes para expedir documentos de identificación

Artículo  9.

Órganos  competentes  para  expedir  documentos  de  identificación.  Los órganos competentes para expedir documentos de identificación son los siguientes:

  1. El Consejo Nacional Electoral, por órgano de la Comisión de Registro Civil y Electoral.
  2. El Ejecutivo Nacional por órgano del Ministerio con competencia en materia de identificación de los habitantes de la República, y sus dependencias destinadas para tal fin.
  3. Las alcaldías, conforme a las atribuciones que les asigne el Consejo Nacional Electoral, por órgano de la Comisión de Registro Civil y Electoral.
  4. El Servicio de Identificación Indígena.
  5. El ministerio con competencia en relaciones exteriores.

Tramitación y otorgamiento

Artículo 10.

La materia de identificación es de orden público, su tramitación y otorgamiento será de carácter personalísimo. A tal efecto, el ministerio con competencia en materia de identificación de los habitantes de la República, a través de la unidad administrativa correspondiente, no podrá tramitar documentos de identificación, sin la presencia de su titular.

Capítulo III

De la identificación indígena

Del otorgamiento de los documentos de identificación a los indígenas

Artículo 11.

El Ejecutivo Nacional, por órgano del ministerio con competencia en materia de identificación de los habitantes de la República, tomando en cuenta la organización sociocultural de los diferentes pueblos y comunidades indígenas, garantizará la obtención de la cédula de identidad a los indígenas bajo los principios de simplicidad, gratuidad, transparencia, igualdad, celeridad, responsabilidad social, publicidad, no discriminación y eficacia. En el caso de expedición de pasaporte, éste deberá estar exento de pago alguno para su emisión.

Inscripción en el Registro Civil de niños, niñas y adolescentes indígenas

Artículo 12.

Los niños, niñas y adolescentes indígenas serán inscritos ante el Registro Civil por sus padres, sus representantes o responsables. En caso que el niño, niña o adolescente indígena no hubiere nacido en una institución hospitalaria, el presentante podrá realizar la inscripción en el Registro Civil prescindiendo del certificado de nacimiento expedido por los centros hospitalarios, pero deberá realizar la inscripción conjuntamente con dos testigos mayores de edad y miembros de la comunidad indígena a la cual representen, indicando expresamente lugar de nacimiento, hora, día, año y cualquier otra circunstancia relevante a los fines de la inscripción.

Inscripciones de mayores de edad indígena

Artículo 13.

Los indígenas mayores de edad, serán inscritos en el Registro Civil, a solicitud del interesado, quien se hará acompañar en el acto de presentación con la autoridad legítima o la persona que según los usos y costumbres represente a el pueblo o comunidad indígena a la cual pertenezca y dos miembros de la misma, quienes como testigos del acto darán fe de la filiación declarada, indicando expresamente lugar de nacimiento, hora, día, año y cualquier otra circunstancia relevante a los fines de la inscripción.

Respeto a los idiomas y atuendos indígenas

Artículo 14.

Se expedirá la Partida de Nacimiento y la Cédula de Identidad, en el idioma castellano y en el idioma del pueblo o comunidad a la cual corresponda, así como cualquier otro documento de identificación de las personas pertenecientes a los pueblos y comunidades indígenas, respetando los nombres y apellidos propios de sus idiomas. Asimismo, no se les obligará a fotografiarse con una vestimenta distinta a la que corresponde a sus usos, costumbres y tradiciones.

Del servicio de identificación indígena

Artículo 15.

Con el objeto de optimizar el proceso de identificación de la población indígena, el Ejecutivo Nacional, por órgano del ministerio con competencia en materia de identificación de los habitantes de la República, implementara un servicio de identificación con carácter permanente, orientado a facilitar la cedulación masiva de estas comunidades, en coordinación con el órgano competente en materia de registro civil.

Capítulo IV

De la Cédula de Identidad

Definición

Artículo 16.

La Cédula de Identidad constituye el documento principal de identificación, para los actos civiles, mercantiles, administrativos, judiciales y para todos aquellos casos en los cuales su presentación sea exigida por la ley. Su expedición será de carácter gratuito y de uso personal e intransferible.

Número de la Cédula de Identidad

Artículo 17.

El Ejecutivo Nacional, por órgano del ministerio con competencia en materia de identificación de los habitantes de la República, otorgará a cada cédula de identidad que expida un número, que será llevado en serie y se le asignará a cada persona de por vida. Dicho número será inherente a la identificación de la persona titular del mismo.El numero de la cédula de identidad de los venezolanos o venezolanas estará precedido por la letra V, y el de los extranjeros o extranjeras por la letra E.

Excepción

Artículo 18.

Solo podrá asignarse a una misma persona un número de cédula de identidad, que sustituya al asignado originalmente, cuando sea declarada nula la cédula de identidad en los términos establecidos en esta Ley.

Contenido

Artículo 19.

La República Bolivariana de Venezuela, por órgano del ministerio con competencia en materia de identificación de los habitantes de la República, otorgará las cédulas de identidad. Estas contendrán las especificaciones siguientes:

  1. Apellidos y nombres.
  2. Fecha de nacimiento.
  3. Estado Civil.
  4. Fotografía a color.
  5. Firma e impresión dactilar del pulgar derecho de su titular y, en su defecto, del pulgar izquierdo.
  6. Firma del funcionario autorizado.
  7. Numero que se le asigne.
  8. Nacionalidad y término de permanencia autorizada a su titular en el país, cuando se trate de extranjero o extranjera.
  9. En el caso de la cedulación indígena, incluir en la cédula de identidad, el pueblo o comunidad indígena a la cual pertenece.
  10. Fecha de expedición y de vencimiento.
  11. Cualquier otra disposición aprobada por el Ejecutivo Nacional por órgano del ministerio con competencia en materia de identificación de los habitantes de la República, que garantice el otorgamiento de un documento de identificación seguro, eficiente y que facilite la identificación del ciudadano y el ejercicio de sus derechos y garantías constitucionales.

De existir el impedimento para firmar o estampar las impresiones dactilares del titular se hará constar en este documento.

Otorgamiento de la Cédula

Artículo 20.

El Ejecutivo Nacional, por órgano del ministerio con competencia en materia de identificación de los habitantes de la República, otorgará a los venezolanos y venezolanas por nacimiento, la cédula de identidad con la sola presentación de la partida de nacimiento; a los venezolanos y venezolanas por naturalización con la presentación de la Gaceta Oficial de la República Bolivariana de Venezuela, en la cual conste haber adquirido la nacionalidad venezolana y a los extranjeros o extranjeras titulares de la visa o condición de permanencia perteneciente a las categorías migrante temporal o migrante permanente, mediante la presentación del instrumento que acredite su condición en el país, otorgado por la autoridad competente.

Vigencia

Artículo 21.

La cédula de identidad tendrá una vigencia de diez años, contados a partir de la fecha de expedición. En el caso de los extranjeros o extranjeras, la vigencia será determinada por el término establecido en el visado correspondiente.

Renovación

Artículo 22.

Los venezolanos, venezolanas, extranjeros y extranjeras, tendrán derecho a tramitar el otorgamiento de una nueva cédula de identidad, por motivo de vencimiento, pérdida, deterioro, cambio de estado civil o cualquier otra modificación de los elementos de identificación.

Documento Supletorio

Artículo 23.

El otorgamiento de la cédula de identidad a los venezolanos y venezolanas por nacimiento que no posean partida de nacimiento, se realizará con la presentación de la sentencia definitivamente firme del tribunal competente que supla dicho documento, previa inserción en el Registro Civil, salvo los casos previstos en el Capítulo III de esta Ley, relativo a la identificación indígena.

Formación del Expediente

Artículo 24.

Con los documentos requeridos y presentados para la obtención de la cédula de identidad, el ministerio con competencia en materia de identificación de los habitantes de la República, formará un expediente, a los fines de garantizar la veracidad y unificación de la información relativa a la identificación de los ciudadanos y ciudadanas. El mismo reposará en la dependencia que a tal efecto se destinen.

Participación

Artículo 25.

El Ejecutivo Nacional por órgano del ministerio con competencia en materia de identificación de los habitantes de la República, el ministerio con competencia en materia de educación y deportes y el ministerio con competencia en materia de participación popular y desarrollo social, promoverá campañas de cedulación con la participación de organizaciones de la sociedad civil, tendientes a facilitar la obtención de los documentos de identificación.
El Poder Electoral, a través de la unidad correspondiente, colaborará en las campañas de cedulación con el fin de garantizar a los ciudadanos y a las ciudadanas el disfrute de los derechos civiles y políticos.

Inhabilitación e insubsistencia del número de la cedula de identidad

Artículo 26.

En los casos de adquisición, pérdida o recuperación de la nacionalidad, los números de cédula de identidad se inhabilitarán de inmediato, no podrán ser asignados a otras personas y serán mantenidos en el archivo del órgano principal de identificación hasta el fallecimiento de la persona titular del mismo, en cuyo caso, el número en cuestión será declarado insubsistente. Igual procedimiento se aplicará a las cédulas de identidad de los extranjeros y extranjeras, a quienes la autoridad competente en materia de extranjería y migración, les revoquen las visas o condición de permanencia en el país. El incumplimiento de esta disposición acarreará la aplicación de sanciones administrativas, civiles y penales.

Declaración de nulidad, inhabilitación e insubsistencia

Artículo 27.

Corresponde al ministerio con competencia en materia de identificación de los habitantes de la República, a través de la dependencia correspondiente, declarar mediante acto administrativo la nulidad de las cédulas de identidad obtenidas con fraude a la ley; la suspensión de las cédulas de identidad de aquellas personas que perdieron la nacionalidad venezolana, así como las pertenecientes a extranjeros o extranjeras, a quienes se les revocó la visa o condición de permanencia en el país, y la insubsistencia de las cédulas de identidad pertenecientes a personas fallecidas. Los números de cédulas de identidad declarados nulos, inhabilitados o insubsistentes, no podrán asignarse a otra persona.
A los fines de la actualización del Registro Electoral Permanente, el ministerio con competencia en materia de identificación de los habitantes de la República, deberá informar en un lapso no mayor de quince días al Consejo Nacional Electoral, de todo acto de declaratoria de nulidad, inhabilitación e insubsistencia de las cédulas de identidad. Dicho lapso comenzará a contarse a partir del día siguiente de aquel en que tenga lugar la notificación o publicación.

Responsabilidades penales

Artículo 28.

En los casos de nulidad de cédula de identidad, el ministerio con competencia en materia de identificación de los habitantes de la República remitirá las actuaciones realizadas al Ministerio Público, a fin de que proceda a la investigación y determinación de las responsabilidades penales a que hubiere lugar.

Capítulo V

Del Pasaporte

El Pasaporte

Artículo 29.

El pasaporte es el documento de identificación de los venezolanos y venezolanas en el extranjero, expedido por el Estado a través del ministerio con competencia en materia de identificación de los habitantes de la República o aquel que por acuerdos, convenios y tratados internacionales suscritos y ratificados por la República Bolivariana de Venezuela, cumpla la misma función.
Los requisitos, características y elementos de identificación serán los establecidos en el Reglamentos de esta Ley y los que se encuentren contenidos en los tratados, acuerdos y convenios internacionales, suscritos y ratificados por la República Bolivariana de Venezuela.

Clasificación

Artículo 30.

Los pasaportes venezolanos se clasifican en: ordinario, diplomático, de servicio, de emergencia, colectivo y provisional.

Pasaporte Ordinario

Artículo 31.

Es el documento de identificación personal que expide el ministerio con competencia en materia de identificación de los habitantes de la República, a los venezolanos y venezolanas que deseen trasladarse al extranjero y que cumplan los requisitos establecidos en el Reglamento de esta Ley. El pasaporte ordinario tendrá una validez de cinco años.

Tramitación en el extranjero

Artículo 32.

En el exterior, el pasaporte ordinario será tramitado por los venezolanos y venezolanas, a través de las secciones consulares de las embajadas y oficinas consulares de la República Bolivariana de Venezuela.
El Reglamento de esta Ley determinará sus características identificatorias, condiciones, requisitos y procedimientos aplicables para su otorgamiento, así como para la inhabilitación y términos de vigencia.

Pasaporte diplomático y de servicio

Artículo 33.

El pasaporte diplomático y de servicios es el documento de identificación en el extranjero que el ministerio con competencia en relaciones exteriores otorga, con el objeto de acreditar la posición oficial o representativa de sus titulares ante las autoridades en el exterior.
El reglamento respectivo determinará los sujetos a quienes se les otorgará, características identificatorias, condiciones, requisitos y procedimientos aplicables para su otorgamiento, así como para la inhabilitación y términos de vigencia.

Sujeción a las disposiciones legales

Artículo 34.

Los pasaportes diplomáticos y de los servicios no comportan privilegios en el territorio nacional a favor de sus titulares, quienes continuarán sometidos a las disposiciones legales en materia aduanera y fiscal y, en general, a todas las normas del procedimiento jurídico que les sean aplicables.

Pasaporte de Emergencia

Artículo 35.

Es el documento de identificación que el ministerio con competencia en materia de identificación de los habitantes de la República expide a los extranjeros y extranjeras, cuyos países no tengan representación diplomática en la República Bolivariana de Venezuela o que no puedan obtenerlo por cualquier otro motivo justificado. El pasaporte de emergencia tendrá un año de validez.
El Reglamento respectivo establecerá los sujetos a quienes se les otorgará, características identificatorias, condiciones, requisitos y procedimientos aplicables para su otorgamiento, así como para la inhabilitación y términos de vigencia.

Pasaporte Colectivo

Artículo 36.

Por motivos culturales, científicos, religiosos, deportivos, y turísticos y otros previstos en tratados y en convenios internacionales, suscritos y ratificados por la República Bolivariana de Venezuela, el ministerio con competencia en materia de identificación de los habitantes de la República, podrá otorgar pasaporte colectivo a grupos organizados, mediante el sistema de listado, válido únicamente para el viaje al cual se refiera.
El Reglamento respectivo establecerá los sujetos a quienes se les otorgará, características identificatorias, condiciones, requisitos y procedimientos aplicables para su otorgamiento, así como para la inhabilitación y términos de vigencia.

Pasaporte Provisional

Artículo 37.

Es el documento de identificación que expide excepcionalmente el ministerio con competencia en materia de identificación de los habitantes de la República, a los ciudadanos y ciudadanas que tengan que viajar al exterior por razones de enfermedad u otras causas debidamente justificadas. Su expedición está sujeta a exención fiscal.
El Reglamento respectivo establecerá los sujetos a quienes se les otorgará, características identificatorias, condiciones, requisitos y procedimientos aplicables para su otorgamiento, así como para la inhabilitación y términos de vigencia.

Relación de Pasaportes

Artículo 38.

El ministerio con competencia en relaciones exteriores llevará un registro de los pasaportes ordinarios, expedidos a los venezolanos y venezolanas en el extranjeros, así como del diplomáticos y de servicio que expida, del cual remitirá mensualmente una relación al ministerio con competencia en materia de identificación de los habitantes de la República, a los fines de la correspondiente anotación en el Registro Nacional de Pasaportes.

Registro Nacional de Pasaportes

Artículo 39.

El ministerio con competencia en materia de identificación de los habitantes de la República llevará el Registro Nacional de Pasaportes, donde se centralizaran los datos relativos a los pasaportes expedidos y renovados, tanto en la República como en el exterior.

Renovación

Artículo 40.

Los venezolanos y las venezolanas tendrán derecho a tramitar el otorgamiento de un nuevo pasaporte, por motivo de vencimiento, perdida, deterioro o cualquier otra modificación de los elementos de identificación.

Capítulo VI

De la supervisión de los documentos de identificación

Supervisión

Artículo 41.

El Consejo Nacional Electoral, a través de la Oficina Nacional de Supervisión de Registro Civil e Identificación, tendrá facultades de supervisión y verificación de la información, suministrada por el ministerio con competencia en materia de identificación de los habitantes de la República, conforme a lo establecido en la Constitución de la República Bolivariana de Venezuela, en la Ley Orgánica del Poder Electoral y el Reglamento de la presente Ley.

Objeto de la Supervisión

Artículo 42.

El Consejo Nacional Electoral, realizará la supervisión de los documentos de identificación, con el objeto de verificar y certificar:

  1. La veracidad de la información contenida en el respectivo expediente.
  2. La correspondencia entre la información contenida en el expediente y la expresada en el documento de identificación.
  3. La conformidad de la expedición u otorgamiento de los documentos de identificación con arreglo a los trámites y procedimientos administrativos correspondientes.

Asimismo, el Consejo Nacional Electoral, podrá, mediante supervisión, determinar la actualidad de la información contenida en los expedientes llevados por el ministerio con competencia en materia de identificación de los habitantes de la República.

Desactualización de la Información Identificatoria

Artículo 43.

En caso que el Consejo Nacional Electoral, determine mediante supervisión, que la información contenida en el expediente se encuentra desactualizada o la misma corresponde a una persona fallecida, notificará al ministerio con competencia en materia de identificación de los habitantes de la República a fin de que éste proceda, según corresponda a:

  1. Corregir la información del expediente y la del documento de identificación.
  2. Declarar la insubsistencia del documento de identificación correspondiente.
  3. Notificar y remitir el resultado de la supervisión al Ministerio Público, para que éste ejerza las acciones judiciales a que haya lugar.

Capítulo VII

De las Sanciones Penales

Otorgamiento irregular de documentos de identificación

Artículo 44.

La persona que, intencionalmente, otorgue o facilite una tarjeta de nacimiento hospitalaria, partida de nacimiento, cédula de identidad, pasaporte o cualquier otro documento de identificación, sin cumplir con los requisitos previamente establecidos en el Reglamento de esta Ley o con trasgresión o prescindencia del procedimiento administrativo correspondiente, será penada con prisión de dos a seis meses.

Documento Falso

Artículo 45.

La persona que intencionalmente haga uso de una tarjeta de nacimiento hospitalaria, partida de nacimiento, cédula de identidad, pasaporte o cualquier otro documento de identificación, cuyos datos sean falsos o estén adulterados, de modo que pueda resultar perjuicio al público o a los particulares, será penada con prisión de uno a tres años.

Certificación de documentos de identidad falsos

Artículo 46.

El funcionario o funcionaria que actuando dolosamente certifique total o parcialmente cualquier documento de identificación con conocimiento de que los datos contenidos en éste son falsos, de modo que pueda resultar perjuicio al público o a los particulares, será penado con prisión de uno a tres años.

Usurpación de Identidad o Nacionalidad

Artículo 47.

La persona que obtenga la partida de nacimiento, cédula de identidad o pasaporte, mediante el suministro de datos falsos o mediante la presentación de documentos de otra persona, atribuyéndose identidad o nacionalidad distinta a la verdadera, será penada con prisión de quince a treinta meses.

Disposición Transitoria

Única:

Hasta tanto se dicte el Reglamento de esta Ley, se mantendrá vigente el Reglamento Parcial de la Ley Orgánica de Identificación, para la identificación de los indígenas, creado mediante decreto No 2.686, publicado en Gaceta Oficial de la República Bolivariana de Venezuela No 37.817, de fecha 13 de noviembre de 2003, salvo que contradiga esta Ley.

Disposición Derogatoria

Única:

Se deroga el Decreto N° 1.454 con Fuerza de Ley Orgánica de Identificación, publicado en Gaceta Oficial de la República Bolivariana de Venezuela No 37.320, de fecha 08 de noviembre del año 2001.

Disposición Final

Única:

Esta ley entrará en vigencia a partir de su publicación en la Gaceta Oficial de la República Bolivariana de Venezuela.

Dada, firmada y sellada en el Palacio Federal Legislativo, sede de la Asamblea Nacional, en Caracas a los site días del mes de abril de dos mil seis. Año 195° de la independencia y 147° de la Federación.

Ejecútese

(L.S.)


Imágenes de la Gaceta Oficial contentiva de la Ley Orgánica de Identificación.

Gaceta Oficial N° 38.458, 14 junio 2006, página 346.339
Gaceta Oficial N° 38.458, 14 junio 2006, página 346.339

Gaceta Oficial N° 38.458, 14 junio 2006, página 346.340
Gaceta Oficial N° 38.458, 14 junio 2006, página 346.340

Gaceta Oficial N° 38.458, 14 junio 2006, página 346.341
Gaceta Oficial N° 38.458, 14 junio 2006, página 346.341

Gaceta Oficial N° 38.458, 14 junio 2006, página 346.342
Gaceta Oficial N° 38.458, 14 junio 2006, página 346.342

Download PDF

Día de nuestra Independencia

Download PDF

Día de la Independencia.

Bandera de Venezuela animada
Bandera de Venezuela animada

Hoy martes 5 de julio de 2016 publicamos un fragmento del desfile militar del Glorioso Ejército Bolivariano que dió su sangre para liberarnos del yugo del Rey de España. Generales muy brillantes en las artes militares, como Pablo Morillo (quien hasta cosntruyó el primer puente sobre nuestro río Cabriales aquí en Valencia) trataron de recuperar la colonia para seguirnos explotando, sin embargo no lo pudieron evitar: somos libres e independientes.

Desde 1811 hasta 1830 fueron diecinueve años de lucha continua donde perdimos nuestras tres primera repúblicas y luego hasta La Gran Colombia, cuando nos dividieron los oligarcas (y los que se convirtieron a la oligarquía, como el Admirable General José Antonio Páez).

Aunque hemos avanzado en nuestra independencia tecnológica (y por lo tanto económica) da vergüenza admitirlo pero seguimos como -parafraseando- a nuestro Libetador en su famosa Carta de Jamaica: nos han dominado más por la ignorancia que por la fuerza.

A continuación la sociedad civil de Venezuela expresa su opnión sobre este magnífico día, nuestro ducentésimo quinto aniversario de nuestra independencia.

 

 

 

 

 

Download PDF

Gaceta Oficial del Estado Carabobo

Download PDF

Gaceta Oficial del Estado Carabobo.


Este artículo se encuentra actualmente en redacción, pronto finalizaremos su escritura, paciencia por favor.

Maquinaria en construcción.
Maquinaria en construcción.



Introducción.

En el día de hoy sábado 25 de junio de 2016 salió publicado a página completa  (en el diario matutino en papel más vendido en nuestro estado) el ejemplar Extraordinario N° 5.725 de la Gaceta Oficial del Estado Carabobo. En ese documento, en resumen, se ordena la digitalización de todo de nuestro acervo histórico (que esté en poder de la Gobernación) tales como bibliotecas, archivos, etc. Al final transcribiremos el decreto N° 1.186 emanado del Despacho del Gobernador Electo en votación popular, Ciudadano Teniente Coronel (Ejército Bolivariano) Francisco José Ameliach Orta.

 

Antecedentes.

Por este mismo humilde sitio web hemos explicado la historia de la Gaceta Oficial, pilar fundamental del marco jurídico de nuestro país y que vino de nuestros próceres fundadores de la República, el Ciudadano Generalísimo Francisco de Miranda y el Ciudadano Libertador Simón Bolívar.

Historia de la Gaceta Oficial del Estado Carabobo.

Si nos remontamos a la historia de finales del siglo XIX hallaremos que luego de nuestra independencia del reino de España, la sociedad civil, era en esencia, la misma de la colonia. Ni siquiera la esclavitud pudo ser abolida (esto se logró en en 1854 con el Presidente José Gregorio Monagas) así que esencialmente el sistema de Provincias (Caracas, Cumaná, Barinas, Margarita, Barcelona, Mérida, Trujillo y Guayana) se mantenía firme y de pie. Con el paso del tiempo se le sumaron las Provincias de Maracaibo y Coro y para el año de 1840 eran 13 las provincias para alcanzar su máximo en el año de 1856, cuando habían 21 provincias.

Para 1858 estalló la Guerra Federal la cual fue la única guerra civil que ha padecido Venezuela, y trajo gran mortandad y ruina para las arcas del Estado ya que se libró principalmente en el llano donde se sembraban los alimentos y se criaba el ganado. Lo peor fue la muerte de miles de campesinos (aparte de militares fallecidos) quienes sustentaban de alimentos a la nación y por lo que hubo que endeudarse con otros países por compra de víveres y pertrechos (las deudas se pagan pero el número de habitantes tarda muchos años en recuperarse). Hasta el día de hoy se sigue recurriendo a la importación para subsanar cualquier falla de producción que tengamos en nuestro territorio.

Es así que finalizada la Guerra Federal quedamos pues, con un sistema federal y las provincias quedaron establecidas como Estados Federales (tanta redundancia con lo de «federal» es necesaria y no se puede suprimir). Venezuela quedó con, en la práctica, los mismos problemas que antes tenía pero con una población disminuidad, una deuda externa y el país dividido a tal punto que cada Estado Federal tenía un Presidente, tal división era del excelente agrado de las potencias extranjeras para con la tierra de Bolívar, quien soñaba con la Gran Colombia.

Un sistema federal de gobierno, en el buen sentido del concepto, permite que grandes extensiones de territorio y con población endógena y autosuficiente, se logre una gran potencia. Pero para Venezuela se cumple muy a cabalidad el refrán «mucho cacique y poco indio». Dado el gran costo que tuvo esta guerra para nuestra sociedad, incluso hoy en día la Constitución de la República Bolivariana de Venezuela, en su artículo 4 se declara un «Estado Federal descentralizado» y es apalancado en el artículo 185 con el «Consejo Federal de Gobierno«. Tan caro así nos costó la Guerra Federal que se necesitarán 100 años más para que abandonemos este sistema de gobierno que divide al mínimo a nuestra nación.

Otro factor que contribuye a la burocracia en nuestro Estado es, precisamente, el sistema federal: cada estado tiene su propia constitución, su asamblea legislativa y, por su puesto, su propia gaceta oficial. En este caso la Gaceta del Estado Carabobo es decretada el 7 de julio de 1864. Pero esto último es consecuencia y no causa, tal como nació la Gaceta Oficial de la República (la cual se logró su reconocimiento muchos años después, en la Constitución Nacional de 1901, su primera mención). No es la labor de esta humilde entrada el hacer una crítica destructiva hacia el sistema federal, sino más bien la simplificación de la labor del Poder Ejecutivo, lo cual se puede comenzar a lograr al simplificar los trámites administrativos (al menos ya poseemos una Ley de simplificación de Trámites Administrativos, es un avance en ese aspecto).

A continuación pasamos a transcribir literalmente el decreto original de creación de la Gaceta Oficial de Carabobo, ofrecemos disculpas por adelantado por las fe de erratas que hayamos hecho ya que el documento original es muy antiguo para someterlo al reconocimiento óptico de caracteres.

Decreto creando la «Gaceta Oficial de Carabobo».

LA ASAMBLEA CONSTITUYENTE DEL ESTADO CARABOBO

CONSIDERANDO:

Que es de absoluta necesidad la creación de un periódico enq ue se publiquen los actoso oficiales del Estado (sic), y todas las doctrinas que contribuyan a la mayor ilustración del pueblo.

DECRETA:

Art. 1.

Se establece en la capital del Estado un periódico semanal con el título de «Gaceta Oficial de Carabobo».

Art. 2.

Se autoriza al ciudadano Presidente del Estado para que dicte las reglas sobre la forma, redacción y distribución de dicho periódico, en el cual se insertarán todos los actos públicos de esta Asamblea y los de los demás Magistrados, Corporaciones y funcionarios del Estado; contratando su impresión de la manera más favorable a las Rentas.

Dado en Valencia en el salón de las sesiones á 27 de Junio de 1864. -1 y 6 . El presidente, E. Guinan. — El Secretario, José María Luyando.

—————————

Desacho del Presidente del Estado.—- Valencia, julio 7 de 1864. — 1 de la ley y 6 de la Federación.— Cúmplase y publíquese. El Presidente, Jesús María Lugo.—– El Secretario general, José D. Landaeta.

Gaceta Oficial del Estado Carabobo Extraordinaria N° 5.725.

SUMARIO

DESPACHO DEL GOBERNADOR

DECRETO N° 1186:

Mediante el cual se designa a ARÍSTIDES MEDINA RUBIO, como Comisionado Especial de la Gobernación del Estado Carabobo para el impulso del Proyecto de digitalización de las fuentes documentales, bibliográficas, hemerográficas, fotográficas y estadísticas disponibles en los a Archivos, Bibliotecas e institutos nacionales, que contengan información sobre el acervo histórico del estado Carabobo.

DECRETO N° 1186

FRANCISCO JOSÉ AMELIACH ORTA

GOBERNADOR DEL ESTADO CARABOBO

De conformidad con lo consagrado en el artículo 160 de la Constitución de la República Bolivariana de Venezuela, y en ejercicio de las atribuciones constitucionales y legales que me confiere el artículo 70 y numeral 1 del artículo 71 de la Constitución del Estado Carabobo, en concordancia con lo preceptuado en el artículo 47 y numerales 1 y 26 del artículo 48 de la Ley de Organización de la Administración pública del Estado Carabobo, en Consejo de Secretarios.

CONSIDERANDO

Que para las regiones del país, la necesidad de fomentar el sentido de pertenencia y arraigo a sus costumbres, historia y cultura, requiere del continuo acceso a la información y documentos que conforman su acervo histórico, a través de las fuentes documentales, biblográficas, hemerográficas, cartográficas, fotográficas y estadísticas que permitan la investigación de los problemas y los fenómenos históricos regionales y locales que se presentan en la actualidad.

CONSIDERANDO

Que de conformidad con el artículo 3 de la Ley de Archivos Nacionales, la Nación propenderá a la mejor organización de todos los archivos del país, por medio de los organismos y funcionarios competentes, por lo que en Venezuela se encuentran diversos centros destinados especialmente a la salvaguarda, custodia, preservación y divulgación del Patrimonio Documental Histórico y administrativo de la Nación y que es deber del Estado REvolucionario, crear, organizar, preservar y ejercer el control de sus archivos, propiciando su modernización y equipamiento a fin de que los documentos resguardados, de valor histórico para la Nación puedan cumplir con su función probatoria, supletoria, verificadora, técnica y testimonial.

CONSIDERANDO

Que los principales centros de conservación documental se encuentran en el Distrito Metropolitano de Caracas, verbigracia: el Archivo General de la Nación, Archivo Arquidiocesano, Instituto Geográfico «Simón Bolívar», Instituto Nacional de Estadísticas, la Biblioteca Nacional, entre otros, lo que obliga a un continuo traslado para los investigadores, historiadores y público en general, afin de poder acceder a las fuantes informativas y documentales que reposan en dichas instituciones.

Fuentes consultadas:

Download PDF
Image Magick

ImageMagick (tutorial).

Download PDF

Recientemente tuvimos la estupenda oportunidad de asistir al Congreso de Tecnologías Libres 2016 y tuvimos la necesidad (madre de las invenciones) de publicar las fotografías que capturamos en el evento. En un principio redimensionamos unas pocas para nuestra cuenta Twitter, pero pronto nos dimos cuenta que la tarea es tediosa y debemos aligerar la carga con herramientas del Software Libre. No hace mucho tiempo uno de nuestros faros en GNU/LINUX -en lengua castellana- Ubunlog publicaron un artículo sobre ImageMagick: instalación y usos básicos del mismo. Pero como nos percatamos que el proceso masivo  de 300 imágenes en una sola linea de comando puede «colgar» nuestra computadora por largo tiempo decidimos publicar esta entrada con el valor agregado de nuestros anteriores temas publicados y además unos «scripts» que tal vez les puedan ser útiles a ustedes, amén de la recomendación de un «plugin» para WordPress con el cual escribimos estas líneas a la fecha (quien sabe, tal vez algún día evolucionemos hacia otra plataforma de blogging).

ImageMagick.

ImageMagick
ImageMagick

Breve historia.

Bien lo retrata en su página web la historia de ImageMagick que pasamos a traducir y resumir, contada en idioma inglés por John Cristy (Principal ImageMagick Architect):

Corría el año de 1987 cuando el Dr. David Pensak, supervisor de John Cristy en la empresa de productos químicos llamada Dupont, le solicitó  poder mostrar imágenes de 24 bits (color verdadero) en los nuevos -y costosos- monitores de 256 colores ya que hardware de aquella época tenía muy poca potencia -y por ende debían ser convertidos a 256 colores-. Es por ello que John Cristy utilizó el buscador de moda para ese entonces: Usenet. Obtuvo respuesta de Paul Ravelin donde le indicaba no una, sino varias soluciones de software para la tarea encomendada y puso a su disposición un servidor FTP del «Information Sciences Institute» (ente adscrito a la Universidad del Sur de California) con el código fuente de numerosas aplicaciones. Tras varios años de conseguir muchas de las respuestas, en lo que a computación se refiere, en su trabajo para la empresa Dupont -y el exigente Dr. David Pensak- él se decidió a mejorar y retribuir todo el software utilizado y decidió igualmente liberar las herramientas de procesamiento de imágenes para que otros -¡ejem! nosotros por ejemplo- nos beneficiriamos de ello (de hecho nosotros contribuimos en esta entrada con un «script» en «bash» y otro en lenguaje PHP, así que la historia ¡sigue y sigue!).

Pero como del «dicho al hecho hay enorme trecho» él primero tenía que solicitar permiso a la empresa Dupont en la cual laboraba, ya que en horas de trabajo fue que él desarrolló dichas herramientas. Es así que de nuevo interviene el Dr. David Pensak y convence a sus superiores de otorgar permiso de «copyleft» a John Cristy ya que no era ni un producto químico ni biológico y ellos no tenían noción del valor del software para entonces. Es así que el 1° de agosto de 1990 ImageMagick ve la luz en Usenet en el grupo «comp.archives» (gracias de nuevo Dr. Pensak).

A mediados de los años 1990, y con miles de usuarios en el mundo entero, ImageMagick versión 4.2.9 fue incluido en un nuevo sistema operativo que era distribuido libremente: GNU/Linux.

Es así que luego de su distribución junto a GNU/Linux el sr. Bob Friesenhahn contacta a John Cristy a fin de «normalizar» la aplicación para que sea compatible con el resto de las herramientas de dicho sistema operativo (más adelante veremos que gracias a esto es que hoy en 2016 nosotros podemos desarrollar «scripts» o guiones funcionales y compatibles en otros idiomas de programación).

A partir de la versión 5 de ImageMagick se incorpora de esta manera el lenguaje C++ y se unen al desarrollo los siguientes programadores:

Ya eran decenas de miles de usuarios de ImageMagick cuando sucedió lo impensable: el desarrollo evolucionó tanto que en un momento dado la nueva versión era incompatible con una API existente e hizo que los usuarios reaccionaran bruscamente y exigieron paralizar la programación mientras que los desarrolladores quería seguir adelante. John Cristy no dio su brazo a torcer así que ImageMagick -de la mano de Bob- recibe su primera bifurcación de código y nace Magick++, el primer «fork» (como se conoce en el idioma inglés). Recordemos que precisamente esta es una de las normas de la licencia que rige el software libre, así que John Cristy continuó solo su camino.

Pero no trabajó solo por mucho tiempo: Anthony Thyssen le indicó ciertas fallas en la linea de comandos, los cuales no solo se corrigieron sino que también se mejoraron hasta tal punto que vieron que era necesario emitir una nueva versión: ImageMagick 6.0.

Tan lejos llegaron las librerías de Anthony Thyssen que el mismo John Cristy quedó sorprendido de la capacidad del código fuente original, y que públicamente reconoce la labor hecha en el avance de la colaboración en proyectos de software libre. A continuación, y en honor de quienes contribuyeron (y respetando las normas de la licencia GNU bajo la cual está concebida ImageMagick) nombramos a:

  • Fred Weinhaus (cientos de «scripts» que son libres para uso no comercial, caso contrario contactar a Fred Weinhaus para su autorización).
  • Glenn Randers-Pehrson (gurú del formato PNG).
  • Dirk Lemstra (desarrollo en ambiente «Windows» bajo .NET)

ImageMagick tiene ya una edad de 25 años al momento de escribir este artículo, y rumbo a los siguientes 25 años se desarrolló la versión 7.0 con importantes novedades descritas en este enlace web. Además, ustedes pueden encontrar la licencia que rige a ImageMagick en este otro enlace.

Instalación de ImageMagick en Ubuntu.

La instalación es común a las distros GNU/Linux basados en Debian:

apt-get install imagemagick

Recuerden que deben tener derechos de usuario raíz, para mayores detalles al trabajar la línea de comandos consulten nuestro tutorial al respecto.

Finalmente, para verificar si está correctamente instalado en nuestro ordenador, podemos ejecutar las siguientes lineas de comando con las cuales «crearemos» el logotipo de ImageMagick, visualizaremos sus especificaciones con el comando identify y luego lo abriremos en una ventana gráfica con el comando display:

convert logo: logo.gif
identify logo.gif
display logo.gif

Al ejecutar el comando display tal vez recibiréis un mensaje un tanto singular: el reporte de unas fuentes de texto faltantes. La explicación rápida es que son fuentes privativas, no libres, y no acompañan a las distribuciones GNU/Linux. Más información en este enlace web.

Tal vez, cuando estéis más avezado o avezada con ImageMagick, necesitareís instalar las librearías avanzadas (una de tantas que existen) con el siguiente comando:

apt-get install graphicsmagick-imagemagick-compat

Como vosotros podéis ver, de primero utilizamos el comando convert el cual pasamos a describir en la siguiente sección.

Comando «convert».

El comando que nos interesa para redimensionar de manera masiva -y a nuestra manera- una gran cantidad de imágenes es el comando «convert«. Específicamente para redimensionar lo acompañamos del argumento «-resize» y de seguido los dos valores de ancho y alto deseados. Sin embargo, debemos conocer un poco más acerca de algunos de los otros argumentos disponibles:

  • Lo más básico: renombrar imágenes de manera masiva seleccionando un patrón de búsqueda y un prefijo que automáticamente numerará el comando. Por ejemplo si introducimos la orden «convert *.jpg fotos.jpg» ImageMagick renombrará todos los archivos jpg en la carpeta donde estemos ubicados en la linea de comandos de la siguiente manera: foto-1.jpg , foto-2.jpg , foto-3.jpg , etc.
  • Ya vimos cómo renombrar masivamente un grupo de imágenes pero para convertir una sola solo debemos, desde luego, indicarle su nombre específico, y si queremos o necesitamos, otro nombre específico de salida para mantener el original; es decir, si omitimos el segundo nombre ImageMagick reemplazará el archivo de imagen original -cuidado con esto-. Las siguientes opciones soportan ambas maneras en este párrafo descritas y renombran masivamente según el párrafo anterior.
  • Para rotar una imagen utilizamos el argumento «-rotate» seguido del ángulo a rotar, por ejemplo «convert imagen.jpg -rotate 90 nueva_imagen_rotada.jpg«.
  • Si queremos convertir a otro formato de archivo simplemente especificamos el o los archivos deseados acompañado del nombre con la extensión deseada. Por ejemplo «convert imagen.jpg imagen.png» o si queremos convertir todas las imágenes jpg en una carpeta: «convert *.jpg imagen.png» (recordad que ImageMagick agregará un sufijo numerado a cada archivo convertido: imagen-1.png , imagen-2.png , imagen-3.png , etc.)
  • También podemos bajarle calidad a una imagen utilizando el argumento «-quality» acompañado del porcentaje deseado -formato jpg-.
  • Si necesitamos redimensionar utilizamos, por ejemplo, «convert imagen.jpg -resize 1024×768» con lo cual obtendremos una imagen de tamaño 1024 píxeles de ancho por 768 píxeles de alto sin conservar el archivo original. Para obtener un archivo nuevo (otro ejemplo) emplearíamos «convert imagen.jpg -resize 1024×768 imagen_redimensionada.jpg«.
  • Por último podemos combinar los diferentes argumentos, teniendo en cuenta el problema con el que nosotros nos tropezamos: el redimensionamiento masivo de imágenes puede hacer que nuestro ordenador quede bloqueado durante un buen tiempo, por eso decidimos utilizar un «script» que procesa uno a uno cada archivo.
  • Actualizado el miércoles 18 de septiembre de 2019: el comando convert es compatible con gif animados como el siguiente que rotamos 180° para mostrar el signo de interrogación de apertura:

Signo de interrogación, apertura
Signo de interrogación, apertura

Uso de ImageMagick en un «bash script».

Ya en una entrada anterior hablamos procesar una serie de imágenes y aplicarle Reconocimiento óptico de caracteres con el programa Tesseract y vamos a reutilizar el «script bash» o proceso por lotes allí muy bien explicado, así que si os gusta id, leedlo y volved.

#!/bin/sh
####Licencia de uso###
# Copyright 2016 Jimmy Olano at ks7000.net.ve
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
######################
patron="P*.JPG"
nomarch="lista.txt"
clear
ls $patron > $nomarch
while read linea
do
 echo "Procesando "$linea
 convert $linea -resize 1024x768 $linea
 echo "aplicando logotipo a "$linea
 php funde_logo.php $linea
 rm $linea
done <$nomarch
rm $nomarch
echo "Trabajo terminado, imagenes redimensionadas e insertadas con logotipo."

Como veís publicamos de una buena vez el script y pasamos a describirlo linea por linea para su rápida comprensión:

  • En la línea N° 1 especificamos que es un archivo de procesos por lotes.
  • De la línea 2 a la 16 le establecemos la licencia Apache la cual es adecuada para pequeños proyectos y así garantizamos legalmente que nuestro trabajo se podrá seguir compartiendo y ampliando con el tiempo y se impedirá la creación de patentes hechas a base del mismo.
  • En la línea 17, entre paréntesis, colocamos el patrón de archivos a buscar para redimensionar. Nosotros utilizamos «P*.JPG» por nuestra cámara marca Panasonic que le agrega ese prefijo seguido de una numeración única y consecutiva.
  • Línea 18: asignamos el nombre del archivo donde guardaremos los nombres de los archivos a redimensionar. Nota: de hecho sabemos que hay una estructura alterna más eficiente para procesar archivos: «for file in *.png; do comando; done», la idea de utilizar un archivo auxiliar es para, a futuro, poder llevar auditoría o registro de los archivos modificados. Es así que podemos, por ejemplo, cambiar el nombre de «lista.txt» a «archivos_redimensionados_dia_mes_año.log» por la extensión utilizada en inglés para el verbo «to log» o registrar o llevar un registro.
  • En la línea 19 limpiamos la consola para legibilidad en la ejecución de la tarea.
  • En la línea 20 buscamos los archivos que cumplan con el patrón de búsqueda de la línea 17 y guardamos sus nombres -para posterior uso- en el archivo nombrado de la línea 18.
  • De la línea 22 a la 28 se encuentra el ciclo o rutina principal deseado. En la línea 20 borramos -a menos que debamos hacer auditoría- (ver explicación de la línea 18). Con la línea 21 notificamos al usuario que la tarea ha finalizado (más sin embargo no llevamos una variable lógica -verdadero o falso- con los resultados de cada uno de los comando ejectuados, es susceptible de ser emjorado). A continuación mostramos las líneas debidamentes numeradas, trabajo hecho y alojado cortesía de Github:

Ahora pasamos a describir la rutina principal:

  • En la línea 21 comenzamos a leer el archivo «lista.txt» el cual contiene los nombres de los archivos con los cuales trabajaremos.
  • Entre la línea 21 y 28 establecemos el ciclo que se ejecutará hasta que hallamos leído de manera secuencial todos y cada uno de los nombres almacenados.
  • En la línea 23 le indicamos al usuari sobre cual archivo vamos procesando.
  • Línea 24: aquí es donde utilizaremos a imageMagick con la variable «$linea» que contiene el archivo que redimensionaremos (ver línea 23). Usamos el argumento «-resize» para obtener una imagen de 1024 por 768 píxeles reemplazando el archivo original.
  • Línea 26: llamamos a un «script» o guión en lenguaje PHP. Lo explicaremos en la sección siguiente, pero os adelanto que de allí obtendremos un archivo totalmente nuevo.
  • Línea 27: borramos el archivo original a fin de ahorrar en espacio en disco (no, no importa si ya tenemos discos duros con decenas de terabytes: cuando montamos un servidor web que reciba decenas de miles o incluso millones de visitas el ahorro de espacio en disco en muy importante).

Uso de PHP en un guión o archivo de proceso por lotes.

Aunque a la fecha no hemos escrito un tutorial sobre lenguaje PHP podemos adelantar que es un lenguaje de proceso por lotes de lado del servidor lo cual lo convierte en una poderosa herramienta para realizar páginas web de manera dinámica e interactiva con el usuario.

Ya vimos cómo con el lenguaje de marcación HTML5 podemos «escribir» o hacer páginas web pero limitadas a presentar siempre el mismo aspecto, y para cambiarlo debemos tomar el archivo, editarlo y guardarlo para, por ejemplo, agregar una nueva imagen o texto a nuestra web. Con el lenguaje PHP podremos, mediante un guión -con extensión .php- insertar comandos que responden a variables para, por ejemplo, mostrar diferentes logotipos según el tamaño de pantalla del dispositivo con la cual visitan nuestra página e incluso conectarnos a una base de datos para extraer texto, imágenes o cualquier otra información allí almacenada y así «personalizar» nuestro portal web. Es por ello que se habla de «páginas web estáticas» y «páginas web dinámicas»: con PHP obtenemos HTML según lo que necesitemos exhibir de acuerdo a variables de tiempo o valores específicos.

De hecho, el lenguaje con que funciona este blog está escrito en PHP y al conjunto de guiones -o procesos por lote- se denomina WordPress y estas líneas están guardadas en una base de datos MySQL. Hay muchísimos tutoriales sobre lenguaje PHP que podéis buscar con DuckDuckGo así que no profundizaremos demasiado en esta presentación pero es necesario que para continuar nuestra enseñanza visitéis, leed y comprended nuestra entrada sobre creación de imágenes CAPTCHA ya que las librerías que utilizaremos son las mismas. Y no os preocupéis, no vamos a montar un servidor web en el estricto sentido de la palabra, pero si usaremos elementos que se usan de manera común en ellos pero con la novedad de que lo ejecutaremos con la línea de comandos.

Línea de comandos en PHP.

En el sitio web oficial de PHP se describe detalladamente el uso de archivos PHP en una ventana terminal (linea de comandos). Allí detallan que hay tres maneras de ejecutar archivos con contenido PHP (no necesariamente con extensión «.php») desde la línea de comandos:

  1. Decirle a PHP que ejecute un archivo específico, por ejemplo «php archivo.php».
  2. Decirle a PHP que ejecute lo que a continuación se escribe, siempre colocandolo entre comillas simples, por ejemplo «php -r ‘$algo=4; print_r($algo);’».
  3. Concatenar comandos «bash» con el símbolo de tubería «|», eso en GNU/Linux es llamado standard input (stdin), por ejemplo «php -r ‘phpinfo();’ | grep «GD»»

En la tercera opción colocamos un ejemplo para conocer si tenemos instaladas las librerías GD necesarias para nuestro caso: insertar un logo en todos de cada una de las imágenes que deseamos redimensionar. Al ejecutarlo podremos ver algo como esto:

php -r 'phpinfo();' | grep "GD"
php -r ‘phpinfo();’ | grep «GD»

Buscamos que «GD Support» esté habilitado, «enabled»; caso contrario debemos instalarlo con la siguiente orden:

sudo apt-get install php5-gd

Asimismo se indica que se le pueden pasar argumentos dados al ejecutar un guión PHP invocandolos dentro del guión con el comando «$argv[]». Se debe colocar entre corchetes el número de argumento en el mismo orden que se escribe en la línea de comandos, haciendo la salvedad que $argv[0] siempre será el nombre del archivo que contiene las instrucciones en lenguaje PHP.

Veamos unos sencillos ejemplos:

  • Creamos un archivo php con el siguiente contenido:
<?php
  print_r($argv[0])
?>
  • Luego llamamos al script con la siguiente orden «php archivo.php»
  • Por pantalla veremos algo parecido a esto:

php archivo.php
php archivo.php

Explicación de nuestro bash en PHP.

Como ya estudiamos de manera resumida y rápida el uso de la línea de comandos con guiones PHP, a continuación mostramos de manera numerada -cortesía de Github- el archivo de proceso por lotes «funde_logo.php«:

Y describimos línea por línea su funcionamiento:

  • En la línea 1 declaramos que usaremos el lenguaje PHP entre esta línea y la línea 46 (para este caso todo el archivo).
  • De la línea 2 a la 27 insertamos las licencias de uso, son dos porque la primera aplica al guión en sí, su código fuente, y la segunda para indicar que estamos utilizando código escrito en PHP que de por sí tiene su propia licencia de uso.
  • En las líneas 28~30 insertamos un comentario sobre lo que realizaremos.
  • En la línea 31 cargamos el archivo que recibimos desde el primera argumento externo (argumento externo) al guión mediante el comando imagecreatefromjpeg en la variable $destino .
  • En las líneas 32~33 insertamos comentarios adicionales.
  • En la línea 34 cargamos el archivo de imagen (que contiene el logotipo deseado en la imagen redimensionada creada  con anterioridad fuera del guión PHP) en la variable $origen.
  • Líneas 35 y 36 más comentarios.
  • En la línea 37 se hace el trabajo principal: insertamos el logotipo en la imagen con el comando imagecopymerge. Este comando merece una explicación detallada a continuación.
  • El comando imagecopymerge tiene los siguientes argumentos:
    1. El nombre del archivo que le insertaremos el logotipo.
    2. El nombre del archivo del logotipo.
    3. La coordenada X donde insertaremos el logotipo en la imagen.
    4. La coordenada Y donde insertaremos el logotipo en la imagen.
    5. La coordenada X del logotipo en si mismo.
    6. La coordenada Y del logotipo en si mismo.
    7. La anchura deseada del logotipo.
    8. La altura deseada del logotipo.
    9. El porcentaje de transparencia del logotipo: 100 es completamente opaco, no se mostrará nada el archivo original en el logotipo insertado
  • Líneas 38 a 40: comentarios.
  • Línea 41: preparamos lo que tenemos en memoria para volcarlo al disco duro con el comando imagejpeg con los argumentos siguientes: la variable $destino (a la cual le insertamos el logotipo), el nombre con el que queremos guardar el archivo (un prefijo llamado «CTL2016-» junto al nombre del archivo original pasado por el argumento externo al script PHP) y, por último, el nivel de calidad deseado, en este caso un 80%.
  • Líneas 42, 43, comentarios.
  • Líneas 44 y 45 liberamos la memoria donde almacenamos las imágenes.

Debemos aclarar que para saber las coordenadas donde insertaremos el logotipo, pues simplemente abrimos una de las fotografías tomadas con el software Pinta, luego abrimos el logotipo con el mismo programa en otra ventana, seleccionamos todo y copiamos, volvemos a la primera venta y pegamos y arrastramos a la posición deseada y tomamos nota de las coordenadas, hágase según arte como dicen en farmacia.

En cuanto a las coordenadas del logotipo pues sencillamente es TODO: de [0, 0] hasta [370, 150] : el ancho y alto total del mismo.

El comando «mogrify».

Uno de nuestros «faros» en el mundo específico de Ubuntu es la página web Ubunlog.com quienes publicaron un mini tutorial con otro comando de ImageMagick: el comando mogrify.

Podéis ir a ese sitio web y leer (y aprender) sobre ese otro comando que nos permite redimensionar de manera masiva nuestras imágenes. Un detalle que notamos con este comando es que podemos redimensionar a cualquier tamaño específico pero si queremos -o necesitamos- que la imagen se ajuste (encoja y alargue, según sea el caso) debemos acompañar del signo de cierre de admiración para denotar esto. Es una ligera diferencia, he aquí un ejemplo de cada uno de los dos comandos:

mogrify -resize 800x200! prueba.jpg

El comando redimensionará exactamente a 800 píxeles de ancho por 200 píxeles de alto y la imagen se expandirá (en nuestro caso nuestra imagen original era de 3504×2332 píxeles) en ambas direcciones, por lo que se verá deformada.

mogrify -resize 800x200 prueba.jpg

En este caso NO utilizamos el signo de cierre de admiración (con la misma imagen de 3504×2332 píxeles) y al ejecutar el comando anterior nos produce una imagen de 201×200 píxeles lo cual respeta la relación ancho contra altura de la imagen original.

Converseen: interfaz gráfica basada en ImageMagick.

Como ImageMagick es Software Libre y está escrito en lenguaje C, el equipo de programación de fasterland.net en la persona de Francesco Mondello, sacaron partido de esto y desarrollaron una interfaz gráfica para otros sistemas operativos, con ustedes un bonito vídeo de presentación de Converseen:

En sus propias palabras:

Converseen, thanks to ImageMagick, the powerful image manipulation library on which the program leans it’s basis, can supports more than 100 image formats including DPX, EXR, GIF, JPEG, JPEG-2000, PhotoCD, PNG, Postscript, SVG, TIFF and many others.
Converseen is very easy to use, it’s designed to be fast, practical and, overall, you can get it for free!

Converseen incluso va más allá y le da valor agregado al permitir convertir un archivo en formato pdf en una serie de imágenes (por ahora desconocemos si las utilerías para manejar archivos en formato pertenecen a ImageMagick y por eso decimos que es un valor agregado):

Como podéis observar, Converseen PERMITE redimensionar de manera masiva las imágenes de una o varias carpetas e incluso ofrece una vista previa, prefijo para nombres de archivos (y ubicarlos en otra carpeta) y mucho más, ¡es como una navaja suiza!

Por último en esta sección, os dejamos el vídeo tutorial sobre cómo instalarlo en Ubuntu y el enlace hacia la propia página web del autor donde publica una entrada al respecto:

A nosotros en lo particular nos encanta la línea de comandos, donde para instalar Converseen solo debemos introducir estas dos sentencias (puede tardar algo de tiempo, dependiendo de su velocidad de descarga de internet):

sudo apt-get update

sudo apt-get install converseen

sudo apt-get install converseen
sudo apt-get install converseen

ImageMagick y la seguridad informática.

El Señor Pablo González, Ingeniero Informático, autor de numerosos libros en España y asesor de seguridad de reconocidas empresas radicadas en ese reino, publicó el jueves cinco de mayo de dosmildieciséis un artículo titulado «Command injection en ImageMagick: Actualiza todos tus servers GNU/Linux o te podrían hackear con una imagen» donde indica un fallo de seguridad en ImageMagick que permitiría ejecutar comandos bash con el nivel de usuario que hayamos colocado en nuestro servidor GNU/Linux.

Aunque esta parte es algo más avanzada para este humilde tutorial, dado lo delicado del asunto procedemos a explicarlo «en cristiano» o en castellano llano para que lo tengáis presente y trataremos de explicarlo lo más simple posible.

Como mencionamos ImageMagick está ampliamente extendido del mundo Unix de donde nació y tal como lo relatamos lo incorporaron a Linux y otros sistemas operativos. Pero bajo linux la potencia de ImageMagick se elevó a nivel tal que se usa mucho en servidores web con ayuda de otros lenguajes tales como (no limitados y/o combinados) HTML, PHP, PYTHON, etc.

He aquí que hay páginas web que ofrecen herramientas de edición y/o creación de imágenes a los usuarios. De hecho nosotros aprovechamos el código existente para crear CAPTCHAS para distintas páginas web de nuestros clientes (de nuevo, humildemente desarrolladas). En este caso es bastante seguro la creación de imágenes con PHP y sus librerías pero con ImageMagick hasta podemos permitir que nuestros usuarios web «suban» imágenes a nuestro servidor y allí es donde radica el problema.

Si un atacante malicioso -o no- subiera una imágen con código embebido meticulosamente manipulado para tal efecto al aplicarle el comando convert que estudiamos permite ejecutar el comando «infectado» en la línea de comandos.

El caso está ampliamente documentado en el siguiente enlace, pero no pudimos reproducir el comportamiento del fallo esperado porque regularmente mantenemos actualizados nuestros equipos a los repositorios oficiales.

Convertir una imagen PNG en SVG

Actualizado el día domingo 2 de diciembre de 2018

En esta oportunidad tuvimos la necesidad de convertir un hermoso gráfico con la arquitectura de funcionamiento de un popular sistema de monitorización, OpenNMS e intentamos con varias páginas web que prometen «villas y castillos» pero los resultados fueron pésimos.

«Si quieres que se haga bien, hágalo usted mismo» así que investigando conseguimos que se puede lograr convertir primero la imagen de PNG a PNM y luego con otro programa de PNM a SVG. para la primera tarea ¡cómo no! ImageMagick:

convert archivo.png       archivo.pnm # PNG a PNM
potrace archivo.pnm -s -o archivo.svg # PNM a SVG

El resultado es el mismo pésimo trabajo que obtuvimos en línea, pero al menos no dependemos de terceros para futuras labores, esperamos sea útil a alguien en la red.

Enlaces relacionados.

Enlaces en idioma castellano:

Enlaces en idioma inglés:

Download PDF