Es posible que alguna vez os hayáis visto en la tesitura de tener un documento Word con formato .docx, en el que hay una serie de imágenes que nos interesa obtener. Alguno me dirá, para eso ya tengo solución, copio la imagen y la pego en el Paint (eso esta chupado!! 😉 ). Y tenéis toda la razón, pero existe otra forma mucho más sencilla que además nos dota de unas ventajas adicionales.
La forma de conseguir las imágenes que os voy a explicar, pasa por cambiar la extensión del documento de .docx a .zip, ya que el formato docx se trata de una estructura de compresión ZIP y se comporta como tal. Para ello lo primero es mostrar las extensiones, vais a "Opciones" --> "Cambiar opciones de carpeta y búsqueda" --> Pestaña "Ver" --> Desmarcar "Ocultar las extensiones de archivo para tipos de archivo conocidos". Con esto aparecerán todos nuestros archivos con el nombre más un punto y la extensión (que normalmente es entre 3 o 4 caracteres).
Antes de hacer nada con el documento, creamos una copia del mismo ya que vamos a manipularlo y de hacerlo mal podríamos corromperlo de manera irrecuperable. Por tanto, creamos una copia del documento y le cambiamos la extensión de .docx a .zip y nos aparecerá un aviso:
Le damos a "Sí" y el documento pasará a considerarse por parte del sistema como un archivo comprimido ZIP. Ahora podremos abrirlo como fichero comprimido.
Las imágenes se encuentran en la ruta "word/media" y se trata de las imágenes originales, a pesar de que las hayamos escalado, recortado... y en general manipulado en el documento.
Desde la carpeta "media" podremos copiar de una vez todas las imágenes.
Si fuera el caso, también es posible modificar las imágenes siempre y cuando se respete el mismo nombre de cada imagen. Si volvemos a cambiar la extensión de .zip a .docx, el sistema volvería a interpretar el fichero como un documento Word.
Lo interesante de esto es la posibilidad de ver cómo está formado un documento Word .docx y en consecuencia poder generar nosotros mismos un documento Word .docx sin pasar por el programa oficial. A fin de cuentas se trata de un fichero empaquetado en ZIP, con una estructura que alberga los recursos media y ficheros XML que describen la forma del documento.
Este procedimiento descrito no funciona con los documentos Word con formato .doc
En mi trabajo actual, muy a menudo me encuentro con el dilema de tener que licenciar código. Este aspecto es importante, porque si tu código va a ser liberado públicamente como Software Libre en una plataforma como puede ser GitHub, es necesario que dediques unos minutos a pensar qué licencia poner y qué implicaciones tiene cada licencia. Además es muy recomendable que no subas ningún código sin explicitar el tipo de licencia a la que está sujeto, porque la ausencia de licencia y su publicación de manera pública en la red, implica que quien acceda a ese código "hará lo que quiera con él o por lo menos lo que legalmente pueda en su país". Por defecto a un código sin licencia se le aplican las leyes en materia de Copyright del país, que además pueden variar en función de cada país. En caso de no incluir licencia, es aconsejable un aviso de Copyright con el año y el nombre del autor.
Mi consejo es que no te la juegues y deja claro lo que se puede hacer o no con tu software, se use por quien se use, en el país que sea.
Si buscas por Internet verás numerosos artículos que hablan sobre los tipos de licencia e incluso presentan categorizaciones de las mismas a fin de ordenarlas para que al lector le resulte más fácil elegir la que realmente necesita. Una posible categorización es la que divide a las licencias en 3 grandes grupos que son Copyleft Fuertes, Copyleft Débiles y Permisivas, tal como se presenta en el Blog de Víctor Goñi, que además nos presenta las cuatro libertades para los usuarios definidas por Richard Stallman y la compatibilidad entre las licencias de los distintos grupos. También tenéis una buena referencia en Hypertextual. Yo por mi parte voy a intentar explicar de manera breve los distintos grupos y algunas de sus licencias más usadas y extendidas, tomando como base la referencia de Hypertextual.
Copyleft Fuertes
Se denomina a una licencia como Copyleft Fuerte, cuando las obras derivadas de un programa no pueden ser enlazadas por programas que no sean libres. Esto no prohíbe la acción contraria; que un programa con Copyleft fuerte enlace a un programa privativo.
El objetivo del Copyleft fuerte es no dar ventajas a los desarrolladores de software privativo, ya que estos podrían usar los programas creados para indirectamente privar las libertades de los usuarios. De este modo, un programador que desarrolle un programa privativo no podrá usar el código de uno libre para facilitarse el trabajo.
Entre las licencias más comunes tenemos:
GNU General Public License (GPL) 3.0: Creada por la Free Software Foundation como parte del proyecto GNU, es una de las más populares y utilizadas en la comunidad. Exige la publicación del código fuente y que todos los trabajos derivados del original conserven la misma licencia GPL, no permite enlaces con módulos privativos (de código cerrado) y requiere que todos los cambios realizados a la versión original sean reflejados en el código fuente con sus respectivos autores. Además posee ventajas únicas respecto a otras licencias como protección contra la tivoización y protección contra las leyes de DRM. Los derechos de autor deben conservarse tanto en el código fuente como en los binarios.
GNU General Public License (GPL) 2.0: Es la versión previa a la GPL 3.0, también creada por la Free Software Foundation como parte del proyecto GNU. Tiene características similares a la versión 3.0 pero carece de protección contra la tivoización, protección contra las leyes de DRM y no considera software que se ejecuta a través de la red. La Free Software Foundation desaconseja su uso para proyectos nuevos, en su lugar recomienda la GPL 3.0.
Copyleft débiles
Se denomina a una licencia como Copyleft débil cuando las obras derivadas de un programa pueden ser enlazadas por programas que no sean libres.
El objetivo del Copyleft débil es que cuando haya ya alternativas gratuitas privativas del mismo programa, dejar que programas privativos usen el programa, para así facilitar la adopción de programas libres.
Entre las licencias más comunes tenemos:
GNU Lesser General Public License (LGPL) 3.0: Es una licencia con características y beneficios similares a la GPL 3.0, pero con la diferencia que permite enlazar módulos privativos al código, por eso se considera una licencia débil. La Free Software Foundation sólo la recomienda para circunstancias especiales y estrictamente necesarias.
Mozilla Public License (MPL) 2.0: Creada por Mozilla Foundation para publicar la mayoría de sus aplicaciones y utilizada por muchos otros programas en la actualidad. Es una licencia que busca un balance entre las licencias permisivas (como la BSD) y las copyleft fuertes (como la GPL). Exige la publicación del código fuente y que cualquier derivado o extensión sea publicado bajo la misma licencia MPL. Sin embargo considera términos en los cuales el código licenciado puede ser parte de una aplicación más grande y esa aplicación puede contener módulos licenciados bajo cualquier otro esquema, incluso privativo. En otras palabras, permite que módulos libres puedan convivir con módulos privativos. No requiere que los cambios realizados sean reflejados en el código fuente y los derechos de autor deben mantenerse tanto en el código fuente como en los binarios.
Eclipse Public License (EPL) 1.0: Es una licencia muy similar a la Mozilla Public License ya que busca un equilibrio entre licencias permisivas y fuertes, teniendo como objetivo principal hacerla atractiva para los ambientes de negocios. No requiere ningún seguimiento en los cambios y sólo exige la publicación del código fuente cuando las modificaciones se consideran un trabajo derivado y no una extensión o un módulo separado. Los trabajos derivados deben ser publicados siempre bajo la licencia EPL. Esta licencia es usada por la Eclipse Foundation y nace como reemplazo a la Common Public License.
Licencias Permisivas
Una licencia de software libre permisiva, también conocida como minimalista o liberal, es una licencia de software libre flexible respecto a la distribución, de modo que el software pueda ser redistribuido como software libre o software propietario, siendo libre la licencia original del autor.
La característica peculiar de estas licencias se debe a que no poseen copyleft, ya que el trabajo derivado no tiene por qué mantenerse con el mismo régimen de derechos de autor que el original. Esto maximiza la libertad para quien recibe el software y quiere desarrollar algo derivado, permitiéndole elegir entre el amplio abanico de licencias existentes. No obstante, desde el punto de vista de los usuarios, esto se puede considerar como una restricción a su libertad, en el sentido de que el software propietario siempre restringe las libertades de los usuarios del mismo y las licencias permisivas, abren esta posibilidad.
Entre las licencias más comunes tenemos:
Apache 2.0: Es la licencia creada en principio por la Apache Software Foundation para publicar los paquetes del proyecto Apache, sin embargo en la actualidad es usada para muchos otros proyectos. Se considera una licencia permisiva porque no requiere que los trabajos derivados sean publicados bajo la misma licencia y tampoco exige la liberación del código fuente. Los cambios a la versión original deben reflejarse en un archivo en el código fuente y pueden ser publicados usando cualquier otra licencia. Lo más importante de esta licencia es que los derechos de autor deben conservarse tanto en el código fuente como en los binarios.
MIT: Es una licencia perfecta si lo que quieres es llegar al mayor número de desarrolladores y no te importa en dónde o cómo puede ser usado tu código. No se considera una licencia para software libre pues no garantiza la libertad de la aplicación, lo único que exige es que los derechos de autor sean incluidos en todas las copias o posibles porciones del software. Recibe su nombre debido a que fue la licencia usada por el Instituto de Tecnología de Massachusetts (MIT en inglés) para publicar la versión original del sistema de ventanas X.
BSD 2-Clause: Conocida también como licencia BSD Simplificada o licencia FreeBSD, es otra licencia permisiva o no copyleft que solamente exige que los derechos de autor y las resignaciones de garantía sean incluidas en todas las distribuciones del software, bien sea en forma de código o en binario. Al igual que la licencia MIT, es ideal si no te interesa lo que la gente pueda hacer con el código de tu aplicación y quieres llegar a un mayor número de desarrolladores.
He presentado los 3 grupos de licencias Open Source y las licencias más comunes dentro de cada grupo, pero seguramente estés pensando: "Ufffffff, necesito algo más práctico y ágil para de un golpe de vista poder seleccionar mi licencia...". Por ello os facilito la siguiente referencia, en la que mediante tablas e muestran los permisos, las condiciones y las limitaciones de cada licencia:
Espero que este artículo os haya ayudado a comprender las licencias más comunes y a elegir, en consecuencia de manera más rápida, la que necesitéis para vuestro software.
En esta entrada os voy a explicar cómo personalizar vuestra Shell de Linux, pero antes de nada me gustaría aclarar ciertos conceptos que suelen confundirse y que son los siguientes:
Terminal = tty = Entorno de entrada y salida de texto
Console = Terminal físico
Shell = Intérprete de línea de comandos
Hablando en tiempos pretéritos, la forma de interactuar con computadoras Unix era mediante dispositivos teleprinter parecidos a máquinas de escribir, algunas veces llamados teletypewriter o "tty".
El nombre de terminal viene del punto de vista de la electrónica y el nombre consola viene del punto de vista del mueble. En sistemas tipo Unix, tty es el tipo de fichero particular que implementa un número de comandos adicionales (ioctls) más allá de lectura y escritura. Terminal es asumido como un sinónimo de tty y algunas ttys son proveídas por el kernel del sistema operativo a favor de un dispositivo de hardware (como el teclado, modem o puertos seriales). Otras ttys, llamadas también pseudo ttys, son proveídas por programas llamados emuladores de terminal, como son Xterm, Screen, SSH...
Una consola generalmente es un terminal físicamente hablando, que hace referencia al primer terminal conectado a la compuradora. En algunos sistemas como Linux y FreeBSD, la consola dispone de múltiples ttys que pueden ser seleccionados mediante la combinación de teclas:
CTRL+ALT+[F1 ... F12]
Siendo cada uno de los Fx desde F1 a F12 los distintos tty disponibles en el sistema.
Un shell es la interfaz principal que los usuarios ven cuando inician sesión, y cuyo propósito es iniciar otros programas. En sistemas Unix, shell hace alusión a la línea de comandos, cuya finalidad es recibir nombres de aplicaciones y los ficheros sobre los cuales actúa la misma, al presionar la tecla "enter".
Probablemente la shell más popular para Linux sea Bash, basado en la sintaxis de Bourne Shell, con el que se pueden realizar programas usando instrucciones Bash de cierta complejidad, con una estructura muy parecida a otros lenguajes de alto nivel.
Aclarados los conceptos base, vamos a proceder a dar un estilo propio al inicio de sesión de nuestra shell de Linux. La forma más sencilla de hacerlo es personalizando el fichero "/etc/motd" (Message Of The Day). Para ello ejecutamos el siguiente comando:
sudo nano motd
Se nos abrirá o creara el fichero con permisos de usuario. Dentro deberemos poner en texto plano lo que queramos que aparezca, guardar haciendo CTRL+O y salir con CTRL+X. Si andas falto de ideas puedes entrar a este generador de texto ASCII:
Cuando guardes el fichero, prueba cómo ha quedado abriendo otro terminal y ejecutando el siguiente, le cual abre una sesión ssh de tu usuario contra tu propio equipo:
ssh 127.0.0.1
Pedirá la contraseña de usuario (la introduces) y verás el mensaje. Si no aparece, prueba a salir de la sesión ssh con "exit" y prueba a ejecutar el comando anterior de nuevo. Deberías entonces poder ver tu mensaje.
Si lo que quieres es un mensaje del día más elaborado que no consista en hacer "print" de un texto plano, entramos en "/etc/update-motd.d" y listamos los ficheros con "ls":
Se trata de una serie de scripts Bash que poseen una sintaxis especial en el nombre del fichero. Los números que preceden al nombre del fichero, indican el orden en que se ejecutan cuando se inicia una sesión, siendo los números menores los que se ejecutan antes. Estos ficheros a diferencia del "motd" contienen comandos que son ejecutados por el super-usuario "root" y se trata por tanto de ficheros interpretados.
Vamos a crear uno con nombre "20-stats" en el que mostraremos algunas estadísticas del sistema:
sudo nano 20-stats
Y copiamos el siguiente código:
#!/bin/bash
function color (){
echo "\e[$1m$2\e[0m"
}
function extend (){
local str="$1"
let spaces=60-${#1}
while [ $spaces -gt 0 ]; do
str="$str "
let spaces=spaces-1
done
echo "$str"
}
function sec2time (){
local input=$1
if [ $input -lt 60 ]; then
echo "$input seconds"
else
((days=input/86400))
((input=input%86400))
((hours=input/3600))
((input=input%3600))
((mins=input/60))
local daysPlural="s"
local hoursPlural="s"
local minsPlural="s"
if [ $days -eq 1 ]; then
daysPlural=""
fi
if [ $hours -eq 1 ]; then
hoursPlural=""
fi
if [ $mins -eq 1 ]; then
minsPlural=""
fi
echo "$days day$daysPlural, $hours hour$hoursPlural, $mins minute$minsPlural"
fi
}
borderColor=35
headerLeafColor=32
headerRaspberryColor=31
greetingsColor=36
statsLabelColor=33
borderLine="━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
borderTopLine=$(color $borderColor "┏$borderLine┓")
borderBottomLine=$(color $borderColor "┗$borderLine┛")
borderBar=$(color $borderColor "┃")
borderEmptyLine="$borderBar $borderBar"
header="$borderTopLine"
uptime="$(sec2time $(cut -d "." -f 1 /proc/uptime))"
uptime="$uptime ($(date -d "@"$(grep btime /proc/stat | cut -d " " -f 2) +"%d-%m-%Y %H:%M:%S"))"
label1="$(extend "$uptime")"
label1="$borderBar $(color $statsLabelColor "Uptime........:") $label1$borderBar"
label2="$(extend "$(free -m | awk 'NR==2 { printf "Total: %sMB, Used: %sMB, Free: %sMB",$2,$3,$4; }')")"
label2="$borderBar $(color $statsLabelColor "Memory........:") $label2$borderBar"
label3="$(extend "$(df -h ~ | awk 'NR==2 { printf "Total: %sB, Used: %sB, Free: %sB",$2,$3,$4; }')")"
label3="$borderBar $(color $statsLabelColor "Home space....:") $label3$borderBar"
stats="$label1\n$label2\n$label3"
# Print motd
echo -e "$header\n$borderEmptyLine\n$stats\n$borderEmptyLine\n$borderBottomLine"
Guarda haciendo CTRL+O y salir con CTRL+X.
Además vamos a añadir otro script más para personalizar el inicio de sesión del perfil, que lo haremos en "/etc/profile.d" . La razón de hacerlo en profile es debido a que los mensajes MOTD se ejecutan por el root y por ejemplo si hacemos un "whoami" nos devolverá siempre root. Para ello creamos un script "wellcome.sh" que nos saludará y mostrará la fecha y hora:
sudo nano wellcome.sh
Y copiamos el siguiente código:
#!/bin/bash
function color (){
echo "\e[$1m$2\e[0m"
}
function extend (){
local str="$1"
let spaces=60-${#1}
while [ $spaces -gt 0 ]; do
str="$str "
let spaces=spaces-1
done
echo "$str"
}
function center (){
local str="$1"
let spacesLeft=(78-${#1})/2
let spacesRight=78-spacesLeft-${#1}
while [ $spacesLeft -gt 0 ]; do
str=" $str"
let spacesLeft=spacesLeft-1
done
while [ $spacesRight -gt 0 ]; do
str="$str "
let spacesRight=spacesRight-1
done
echo "$str"
}
borderColor=35
headerLeafColor=32
headerRaspberryColor=31
greetingsColor=36
statsLabelColor=33
borderLine="━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
borderTopLine=$(color $borderColor "┏$borderLine┓")
borderBottomLine=$(color $borderColor "┗$borderLine┛")
borderBar=$(color $borderColor "┃")
borderEmptyLine="$borderBar $borderBar"
me=$(whoami)
header="$borderTopLine"
# Greetings
greetings="$borderBar$(color $greetingsColor "$(center "Welcome back, $me!")")$borderBar\n"
greetings="$greetings$borderBar$(color $greetingsColor "$(center "$(date +"%A, %d %B %Y, %T")")")$borderBar"
# Print motd
echo -e "$header\n$borderEmptyLine\n$greetings\n$borderEmptyLine\n$borderBottomLine"
Guarda haciendo CTRL+O y salir con CTRL+X.
Abrimos una sesión ssh de tu usuario contra tu propio equipo, como ya hemos hecho anteriormente, y veremos un inicio de sesión como el siguiente, pero con los datos de tu sesión y equipo.
La finalidad de estos MOTD y scripts de perfil, pueden servir para la generación de mensajes informativos concretos para los usuarios, la generación de paneles informativos del sistema para administradores o simplemente para personalizar/corporativizar un sistema Linux.
Espero que este artículo os haya servido para aprender a explotar estas características tan útiles del inicio de sesión de Linux.
Llevo ya unas semanas usando Windows 10 y salvando ciertas desavenencias de retrocompatibilidad que voy pudiendo parchear, en general funciona bastante bien. Lo que no estoy tan contento es con la política de actualizaciones de Windows 10.
Todos hemos tenido siempre la sombra de que nuestros equipos a veces parecían más de Microsoft que nuestros. Con la llegada del nuevo sistema operativo y su gratuidad para su actualización (incluso en el caso de versiones del sistema no legítimas), me hace pensar que el negocio de Microsoft está pasando de ser la venta de servicios y software, a ser nosotros, los usuarios el producto. Lo siento chicos, pero nada en esta vida es gratis, en algún lado está el precio y su correspondiente pago no necesariamente monetario. En el caso de que haya una empresa por detrás ten claro que si algo te lo dan gratis, el producto eres TÚ. Por otro lado, es lógico que Microsoft haga este movimiento, a fin de cuentas a uno de sus rivales más fuertes (Google), le ha ido bien usando este planteamiento. Es lógico que Windows quiera probar con esta estrategia para mantener y mejorar su nicho de mercado, y dicho de paso quitarse la fragmentación de sistemas operativos a los que tiene que dar soporte (recordemos el caso de la longevidad en uso de Windows XP).
Independientemente del modelo de comercialización que elija Microsoft para sus productos, el equipo sobre el que instalo su sistema operativo es mio (y tengo una factura que lo demuestra 😉 ). Este comentario viene a que el pasado día, tras una actualización de Windows 10 de estas que se te instalan al inicio y te realizan varios reinicios, Windows 10 decidió que cierto software que ya estaba instalado no era compatible e incluso podría causar daños, y lo desinstaló de manera unilateral. ¿Quéeeeeeeeeeeee?...
¿Ni preguntar ni nada? Yo creo que se puede sugerir, pero no imponer hacer nada. Además si vas a desinstalarme algo, qué menos que dejar un fichero de registro de lo que se ha desinstalado, en vez de un fugaz mensaje a modo de pop-up que apenas llegas a ver el nombre de la lista de programas desinstalados. Al clickar el pop-up te lleva a esta web:
Un información que dista mucho de ser valiosa y ni llega al estatus de útil. ¡¡No dice nada!!
Lo bueno de todo esto, es que lo que dice haber desinstalado, realmente no lo ha desinstalado. Cierto es que no está en "Programas y características", pero no borra los archivos del programa, sólo quita los accesos y borra la entrada de "Programas y características" . Si vas a la carpeta del programa y ejecutas el programa aún funcionará. Es decir, nos está dejando basura porque el programa sigue ocupando espacio, pero oficialmente el sistema no dice tenerlo instalado. ¡Algo muy chapucero! ¿no?
En mi caso el programa que desinstaló fue Speccy, un programa para auditar el hardware de tu equipo y el estado del mismo. Para todos los programas que tengo instalados suelo tener guardado el instalador dentro de una carpeta en donde se instala. Con ánimo de ver si realmente Windows me había tomado el pelo, vuelvo a instalar exactamente la misma versión del programa que me había desinstalado.
Mi sorpresa fue que funcionaba perfecto. Ningún problema, ni incompatibilidad, funcionaba bien. De todo esto lo que más me preocupa y me enfada es:
Windows 10 no sugirió la desinstalación del programa, lo desinstaló unitalteralmente.
Windows 10 desinstaló una aplicación que funcionaba perfectamente tras su reinstalación tras la actualización.
Windows 10 no borró los archivos del programa desinstalado, dejando basura.
En su lanzamiento Windows 10 fue bastante criticado por la obligatoriedad de sus actualizaciones, y a día de hoy no parece haber cambiado mucho la cosa. No existe una forma simple como en versiones anteriores del sistema para desactivar las actualizaciones. Si accedemos desde el menú de inicio a "Configuración" --> "Actualización y seguridad" --> "Windows Update":
Veremos que apenas tenemos opciones de configuración. Hacemos click en "Opciones Avanzadas" para acceder a algunas opciones más.
No hay ninguna opción para desactivar las actualizaciones, ni mucho menos para seleccionar cuáles instalar y no instalar.
No obstante existe la posibilidad de desactivarlas desde el Editor de Políticas de Grupo, si no estás conforme con la política de actualizaciones de Windows 10. Si tienes una versión Windows 10 Home necesitarás descargarlo desde el siguiente enlace, ya que la versión Home no lo incluye:
Una vez descargado, ejecuta el instalador "setup.exe" y una vez instalado copia el archivo "gpedit.msc" de la carpeta "C:\Windows\SysWOW64" a la carpeta "C:\Windows\System32".
Para ejecutarlo escribimos en la barra de inicio "gpedit.msc" y lo seleccionamos. Os aparecerá la siguiente ventana:
Seleccionamos "Configuración de Equipo" --> "Plantillas Administrativas" --> "Componentes de Windows" --> "Windows Update". En el panel de la derecha seleccionamos "Configurar Actualizaciones Automáticas" y seleccionamos "Deshabilitado".
Hacemos click en "Aplicar" y luego en "Aceptar" y tendremos desactivadas las actualizaciones en Windows 10.
Si has tenido algún problema en la instalación del Editor de Políticas de Grupo, visita la siguiente dirección :
El método de instalación del Editor de Políticas de Grupo sirve también para versiones Home de Windows 7 y Windows 8. El instalador sólo se encuentra en inglés.
En resumen Windows 10 viene con una imposición de actualización continua del sistema, durante las cuales Windows se reserva el derecho de desinstalar cualquier aplicación que considere oportuna de manera unilateral sin consultar al usuario.